From d37ba50007c013e4215db7766df7c5566d0e88ed Mon Sep 17 00:00:00 2001 From: Nikita Shkaruba Date: Thu, 21 Nov 2024 15:59:47 +0100 Subject: [PATCH] feat: trino autocomplete (#245) * feat: add basic trino autocomplete * feat: fix tests, improve autocomplete * feat: remove pull_request_template.md * chore: remove headers * fix: fix tests * fix: remove excess tokens file --- .github/pull_request_template.md | 1 - package.json | 7 + scripts/patch-generated.sh | 5 +- .../trino/generated/TrinoLexer.interp | 1040 + .../trino/generated/TrinoLexer.tokens | 665 + .../databases/trino/generated/TrinoLexer.ts | 1728 + .../trino/generated/TrinoParser.interp | 811 + .../trino/generated/TrinoParser.tokens | 665 + .../databases/trino/generated/TrinoParser.ts | 27453 ++++++++++++++++ .../trino/generated/TrinoParserVisitor.ts | 2522 ++ .../databases/trino/grammar/TrinoLexer.g4 | 384 + .../databases/trino/grammar/TrinoParser.g4 | 1081 + src/autocomplete/databases/trino/index.ts | 71 + .../trino/tests/alter/alter-column.test.ts | 58 + .../trino/tests/alter/alter-schema.test.ts | 19 + .../databases/trino/tests/alter/alter.test.ts | 80 + .../trino/tests/comment/comment-table.test.ts | 16 + .../trino/tests/create/create-catalog.test.ts | 16 + .../tests/create/create-function.test.ts | 95 + .../trino/tests/create/create-role.test.ts | 37 + .../trino/tests/create/create-schema.test.ts | 16 + .../trino/tests/create/create-table.test.ts | 64 + .../trino/tests/create/create.test.ts | 18 + .../trino/tests/delete/delete.test.ts | 75 + .../trino/tests/drop/drop-catalog.test.ts | 17 + .../trino/tests/drop/drop-role.test.ts | 16 + .../trino/tests/drop/drop-schema.test.ts | 17 + .../databases/trino/tests/drop/drop.test.ts | 71 + .../databases/trino/tests/empty-query.test.ts | 43 + .../trino/tests/explain/explain.test.ts | 43 + .../tests/extract-statement-positions.test.ts | 295 + .../databases/trino/tests/grant/grant.test.ts | 93 + .../trino/tests/insert/insert.test.ts | 250 + .../trino/tests/multiple-statements.test.ts | 11 + .../databases/trino/tests/newline.test.ts | 13 + .../trino/tests/revoke/revoke.test.ts | 102 + .../tests/select/group-by-clause.test.ts | 249 + .../trino/tests/select/join-clause.test.ts | 205 + .../tests/select/nested-statements.test.ts | 117 + .../tests/select/order-by-clause.test.ts | 241 + .../trino/tests/select/select.test.ts | 294 + .../trino/tests/select/where-clause.test.ts | 142 + .../trino/tests/update/update.test.ts | 208 + .../databases/trino/trino-autocomplete.ts | 120 + 44 files changed, 39472 insertions(+), 2 deletions(-) delete mode 100644 .github/pull_request_template.md create mode 100644 src/autocomplete/databases/trino/generated/TrinoLexer.interp create mode 100644 src/autocomplete/databases/trino/generated/TrinoLexer.tokens create mode 100644 src/autocomplete/databases/trino/generated/TrinoLexer.ts create mode 100644 src/autocomplete/databases/trino/generated/TrinoParser.interp create mode 100644 src/autocomplete/databases/trino/generated/TrinoParser.tokens create mode 100644 src/autocomplete/databases/trino/generated/TrinoParser.ts create mode 100644 src/autocomplete/databases/trino/generated/TrinoParserVisitor.ts create mode 100644 src/autocomplete/databases/trino/grammar/TrinoLexer.g4 create mode 100644 src/autocomplete/databases/trino/grammar/TrinoParser.g4 create mode 100644 src/autocomplete/databases/trino/index.ts create mode 100644 src/autocomplete/databases/trino/tests/alter/alter-column.test.ts create mode 100644 src/autocomplete/databases/trino/tests/alter/alter-schema.test.ts create mode 100644 src/autocomplete/databases/trino/tests/alter/alter.test.ts create mode 100644 src/autocomplete/databases/trino/tests/comment/comment-table.test.ts create mode 100644 src/autocomplete/databases/trino/tests/create/create-catalog.test.ts create mode 100644 src/autocomplete/databases/trino/tests/create/create-function.test.ts create mode 100644 src/autocomplete/databases/trino/tests/create/create-role.test.ts create mode 100644 src/autocomplete/databases/trino/tests/create/create-schema.test.ts create mode 100644 src/autocomplete/databases/trino/tests/create/create-table.test.ts create mode 100644 src/autocomplete/databases/trino/tests/create/create.test.ts create mode 100644 src/autocomplete/databases/trino/tests/delete/delete.test.ts create mode 100644 src/autocomplete/databases/trino/tests/drop/drop-catalog.test.ts create mode 100644 src/autocomplete/databases/trino/tests/drop/drop-role.test.ts create mode 100644 src/autocomplete/databases/trino/tests/drop/drop-schema.test.ts create mode 100644 src/autocomplete/databases/trino/tests/drop/drop.test.ts create mode 100644 src/autocomplete/databases/trino/tests/empty-query.test.ts create mode 100644 src/autocomplete/databases/trino/tests/explain/explain.test.ts create mode 100644 src/autocomplete/databases/trino/tests/extract-statement-positions.test.ts create mode 100644 src/autocomplete/databases/trino/tests/grant/grant.test.ts create mode 100644 src/autocomplete/databases/trino/tests/insert/insert.test.ts create mode 100644 src/autocomplete/databases/trino/tests/multiple-statements.test.ts create mode 100644 src/autocomplete/databases/trino/tests/newline.test.ts create mode 100644 src/autocomplete/databases/trino/tests/revoke/revoke.test.ts create mode 100644 src/autocomplete/databases/trino/tests/select/group-by-clause.test.ts create mode 100644 src/autocomplete/databases/trino/tests/select/join-clause.test.ts create mode 100644 src/autocomplete/databases/trino/tests/select/nested-statements.test.ts create mode 100644 src/autocomplete/databases/trino/tests/select/order-by-clause.test.ts create mode 100644 src/autocomplete/databases/trino/tests/select/select.test.ts create mode 100644 src/autocomplete/databases/trino/tests/select/where-clause.test.ts create mode 100644 src/autocomplete/databases/trino/tests/update/update.test.ts create mode 100644 src/autocomplete/databases/trino/trino-autocomplete.ts diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 7c412757e..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1 +0,0 @@ -Closes #ISSUE_ID diff --git a/package.json b/package.json index 387d1e495..1e886d8c8 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,14 @@ "generate:clickhouse": "rimraf src/autocomplete/databases/clickhouse/generated && antlr4ng -Dlanguage=TypeScript -o src/autocomplete/databases/clickhouse/generated/ -visitor -no-listener -Xexact-output-dir src/autocomplete/databases/clickhouse/grammar/ClickHouseLexer.g4 src/autocomplete/databases/clickhouse/grammar/ClickHouseParser.g4 && bash scripts/patch-generated.sh clickhouse", "generate:yql": "rimraf src/autocomplete/databases/yql/generated && antlr4ng -Dlanguage=TypeScript -o src/autocomplete/databases/yql/generated/ -visitor -no-listener -Xexact-output-dir src/autocomplete/databases/yql/grammar/YQL.g4 && bash scripts/patch-generated.sh yql", "generate:redis": "rimraf src/autocomplete/databases/redis/generated && antlr4ng -Dlanguage=TypeScript -o src/autocomplete/databases/redis/generated/ -visitor -no-listener -Xexact-output-dir src/autocomplete/databases/redis/grammar/RedisLexer.g4 src/autocomplete/databases/redis/grammar/RedisParser.g4 && bash scripts/patch-generated.sh redis", + "generate:trino": "rimraf src/autocomplete/databases/trino/generated && antlr4ng -Dlanguage=TypeScript -o src/autocomplete/databases/trino/generated/ -visitor -no-listener -Xexact-output-dir src/autocomplete/databases/trino/grammar/TrinoLexer.g4 src/autocomplete/databases/trino/grammar/TrinoParser.g4 && bash scripts/patch-generated.sh trino", "test": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src --testPathIgnorePatterns tests/generated/.+", + "test:mysql": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src --testPathIgnorePatterns tests/generated/.+ --rootDir src/autocomplete/databases/mysql/tests", + "test:postgresql": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src --testPathIgnorePatterns tests/generated/.+ --rootDir src/autocomplete/databases/postgresql/tests", + "test:clickhouse": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src --testPathIgnorePatterns tests/generated/.+ --rootDir src/autocomplete/databases/clickhouse/tests", + "test:yql": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src --testPathIgnorePatterns tests/generated/.+ --rootDir src/autocomplete/databases/yql/tests", + "test:redis": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src --testPathIgnorePatterns tests/generated/.+ --rootDir src/autocomplete/databases/redis/tests", + "test:trino": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src --testPathIgnorePatterns tests/generated/.+ --rootDir src/autocomplete/databases/trino/tests", "build": "rimraf dist && node build.js && tsc -p tsconfig.build.json --declarationDir dist/types", "prepublishOnly": "npm run build" }, diff --git a/scripts/patch-generated.sh b/scripts/patch-generated.sh index 52d053819..30e295a28 100644 --- a/scripts/patch-generated.sh +++ b/scripts/patch-generated.sh @@ -1,7 +1,7 @@ DIALECT=$1 # Check that dialect is correct -if [ "$DIALECT" != "mysql" ] && [ "$DIALECT" != "postgresql" ] && [ "$DIALECT" != "clickhouse" ] && [ "$DIALECT" != "yql" ] && [ "$DIALECT" != "redis" ] +if [ "$DIALECT" != "mysql" ] && [ "$DIALECT" != "postgresql" ] && [ "$DIALECT" != "clickhouse" ] && [ "$DIALECT" != "yql" ] && [ "$DIALECT" != "redis" ] && [ "$DIALECT" != "trino" ] then echo "dialect '$DIALECT' is not supported" exit 0 @@ -20,6 +20,9 @@ then elif [ "$DIALECT" == "redis" ] then FILE_PREFIX=src/autocomplete/databases/$DIALECT/generated/Redis +elif [ "$DIALECT" == "trino" ] +then + FILE_PREFIX=src/autocomplete/databases/$DIALECT/generated/Trino else FILE_PREFIX=src/autocomplete/databases/$DIALECT/generated/ClickHouse fi diff --git a/src/autocomplete/databases/trino/generated/TrinoLexer.interp b/src/autocomplete/databases/trino/generated/TrinoLexer.interp new file mode 100644 index 000000000..43e97952c --- /dev/null +++ b/src/autocomplete/databases/trino/generated/TrinoLexer.interp @@ -0,0 +1,1040 @@ +token literal names: +null +'ABSENT' +'ADD' +'ADMIN' +'AFTER' +'ALL' +'ALTER' +'ANALYZE' +'AND' +'ANY' +'ARRAY' +'AS' +'ASC' +'AT' +'AUTHORIZATION' +'BEGIN' +'BERNOULLI' +'BETWEEN' +'BOTH' +'BY' +'CALL' +'CALLED' +'CASCADE' +'CASE' +'CAST' +'CATALOG' +'CATALOGS' +'COLUMN' +'COLUMNS' +'COMMENT' +'COMMIT' +'COMMITTED' +'CONDITIONAL' +'CONSTRAINT' +'COUNT' +'COPARTITION' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURRENT_CATALOG' +'CURRENT_DATE' +'CURRENT_PATH' +'CURRENT_ROLE' +'CURRENT_SCHEMA' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURRENT_USER' +'DATA' +'DATE' +'DAY' +'DEALLOCATE' +'DECLARE' +'DEFAULT' +'DEFINE' +'DEFINER' +'DELETE' +'DENY' +'DESC' +'DESCRIBE' +'DESCRIPTOR' +'DETERMINISTIC' +'DISTINCT' +'DISTRIBUTED' +'DO' +'DOUBLE' +'DROP' +'ELSE' +'EMPTY' +'ELSEIF' +'ENCODING' +'END' +'ERROR' +'ESCAPE' +'EXCEPT' +'EXCLUDING' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTRACT' +'FALSE' +'FETCH' +'FILTER' +'FINAL' +'FIRST' +'FOLLOWING' +'FOR' +'FORMAT' +'FROM' +'FULL' +'FUNCTION' +'FUNCTIONS' +'GRACE' +'GRANT' +'GRANTED' +'GRANTS' +'GRAPHVIZ' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IF' +'IGNORE' +'IMMEDIATE' +'IN' +'INCLUDING' +'INITIAL' +'INNER' +'INPUT' +'INSERT' +'INTERSECT' +'INTERVAL' +'INTO' +'INVOKER' +'IO' +'IS' +'ISOLATION' +'ITERATE' +'JOIN' +'JSON' +'JSON_ARRAY' +'JSON_EXISTS' +'JSON_OBJECT' +'JSON_QUERY' +'JSON_TABLE' +'JSON_VALUE' +'KEEP' +'KEY' +'KEYS' +'LANGUAGE' +'LAST' +'LATERAL' +'LEADING' +'LEAVE' +'LEFT' +'LEVEL' +'LIKE' +'LIMIT' +'LISTAGG' +'LOCAL' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOGICAL' +'LOOP' +'MAP' +'MATCH' +'MATCHED' +'MATCHES' +'MATCH_RECOGNIZE' +'MATERIALIZED' +'MEASURES' +'MERGE' +'MINUTE' +'MONTH' +'NATURAL' +'NESTED' +'NEXT' +'NFC' +'NFD' +'NFKC' +'NFKD' +'NO' +'NONE' +'NORMALIZE' +'NOT' +'NULL' +'NULLIF' +'NULLS' +'OBJECT' +'OF' +'OFFSET' +'OMIT' +'ON' +'ONE' +'ONLY' +'OPTION' +'OR' +'ORDER' +'ORDINALITY' +'OUTER' +'OUTPUT' +'OVER' +'OVERFLOW' +'PARTITION' +'PARTITIONS' +'PASSING' +'PAST' +'PATH' +'PATTERN' +'PER' +'PERIOD' +'PERMUTE' +'PLAN' +'POSITION' +'PRECEDING' +'PRECISION' +'PREPARE' +'PRIVILEGES' +'PROPERTIES' +'PRUNE' +'QUOTES' +'RANGE' +'READ' +'RECURSIVE' +'REFRESH' +'RENAME' +'REPEAT' +'REPEATABLE' +'REPLACE' +'RESET' +'RESPECT' +'RESTRICT' +'RETURN' +'RETURNING' +'RETURNS' +'REVOKE' +'RIGHT' +'ROLE' +'ROLES' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'RUNNING' +'SCALAR' +'SCHEMA' +'SCHEMAS' +'SECOND' +'SECURITY' +'SEEK' +'SELECT' +'SERIALIZABLE' +'SESSION' +'SET' +'SETS' +'SHOW' +'SKIP' +'SOME' +'START' +'STATS' +'SUBSET' +'SUBSTRING' +'SYSTEM' +'TABLE' +'TABLES' +'TABLESAMPLE' +'TEXT' +'STRING' +'THEN' +'TIES' +'TIME' +'TIMESTAMP' +'TO' +'TRAILING' +'TRANSACTION' +'TRIM' +'TRUE' +'TRUNCATE' +'TRY_CAST' +'TYPE' +'UESCAPE' +'UNBOUNDED' +'UNCOMMITTED' +'UNCONDITIONAL' +'UNION' +'UNIQUE' +'UNKNOWN' +'UNMATCHED' +'UNNEST' +'UNTIL' +'UPDATE' +'USE' +'USER' +'USING' +'UTF16' +'UTF32' +'UTF8' +'VALIDATE' +'VALUE' +'VALUES' +'VERBOSE' +'VERSION' +'VIEW' +'WHEN' +'WHERE' +'WHILE' +'WINDOW' +'WITH' +'WITHIN' +'WITHOUT' +'WORK' +'WRAPPER' +'WRITE' +'YEAR' +'ZONE' +'=' +null +'<' +'<=' +'>' +'>=' +'+' +'-' +'*' +'/' +'%' +'||' +'?' +';' +'.' +'_:' +',' +'(' +')' +'[' +']' +'{' +'}' +'{-' +'-}' +'<-' +'->' +'=>' +'|' +'$' +'^' +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +ABSENT_ +ADD_ +ADMIN_ +AFTER_ +ALL_ +ALTER_ +ANALYZE_ +AND_ +ANY_ +ARRAY_ +AS_ +ASC_ +AT_ +AUTHORIZATION_ +BEGIN_ +BERNOULLI_ +BETWEEN_ +BOTH_ +BY_ +CALL_ +CALLED_ +CASCADE_ +CASE_ +CAST_ +CATALOG_ +CATALOGS_ +COLUMN_ +COLUMNS_ +COMMENT_ +COMMIT_ +COMMITTED_ +CONDITIONAL_ +CONSTRAINT_ +COUNT_ +COPARTITION_ +CREATE_ +CROSS_ +CUBE_ +CURRENT_ +CURRENT_CATALOG_ +CURRENT_DATE_ +CURRENT_PATH_ +CURRENT_ROLE_ +CURRENT_SCHEMA_ +CURRENT_TIME_ +CURRENT_TIMESTAMP_ +CURRENT_USER_ +DATA_ +DATE_ +DAY_ +DEALLOCATE_ +DECLARE_ +DEFAULT_ +DEFINE_ +DEFINER_ +DELETE_ +DENY_ +DESC_ +DESCRIBE_ +DESCRIPTOR_ +DETERMINISTIC_ +DISTINCT_ +DISTRIBUTED_ +DO_ +DOUBLE_ +DROP_ +ELSE_ +EMPTY_ +ELSEIF_ +ENCODING_ +END_ +ERROR_ +ESCAPE_ +EXCEPT_ +EXCLUDING_ +EXECUTE_ +EXISTS_ +EXPLAIN_ +EXTRACT_ +FALSE_ +FETCH_ +FILTER_ +FINAL_ +FIRST_ +FOLLOWING_ +FOR_ +FORMAT_ +FROM_ +FULL_ +FUNCTION_ +FUNCTIONS_ +GRACE_ +GRANT_ +GRANTED_ +GRANTS_ +GRAPHVIZ_ +GROUP_ +GROUPING_ +GROUPS_ +HAVING_ +HOUR_ +IF_ +IGNORE_ +IMMEDIATE_ +IN_ +INCLUDING_ +INITIAL_ +INNER_ +INPUT_ +INSERT_ +INTERSECT_ +INTERVAL_ +INTO_ +INVOKER_ +IO_ +IS_ +ISOLATION_ +ITERATE_ +JOIN_ +JSON_ +JSON_ARRAY_ +JSON_EXISTS_ +JSON_OBJECT_ +JSON_QUERY_ +JSON_TABLE_ +JSON_VALUE_ +KEEP_ +KEY_ +KEYS_ +LANGUAGE_ +LAST_ +LATERAL_ +LEADING_ +LEAVE_ +LEFT_ +LEVEL_ +LIKE_ +LIMIT_ +LISTAGG_ +LOCAL_ +LOCALTIME_ +LOCALTIMESTAMP_ +LOGICAL_ +LOOP_ +MAP_ +MATCH_ +MATCHED_ +MATCHES_ +MATCH_RECOGNIZE_ +MATERIALIZED_ +MEASURES_ +MERGE_ +MINUTE_ +MONTH_ +NATURAL_ +NESTED_ +NEXT_ +NFC_ +NFD_ +NFKC_ +NFKD_ +NO_ +NONE_ +NORMALIZE_ +NOT_ +NULL_ +NULLIF_ +NULLS_ +OBJECT_ +OF_ +OFFSET_ +OMIT_ +ON_ +ONE_ +ONLY_ +OPTION_ +OR_ +ORDER_ +ORDINALITY_ +OUTER_ +OUTPUT_ +OVER_ +OVERFLOW_ +PARTITION_ +PARTITIONS_ +PASSING_ +PAST_ +PATH_ +PATTERN_ +PER_ +PERIOD_ +PERMUTE_ +PLAN_ +POSITION_ +PRECEDING_ +PRECISION_ +PREPARE_ +PRIVILEGES_ +PROPERTIES_ +PRUNE_ +QUOTES_ +RANGE_ +READ_ +RECURSIVE_ +REFRESH_ +RENAME_ +REPEAT_ +REPEATABLE_ +REPLACE_ +RESET_ +RESPECT_ +RESTRICT_ +RETURN_ +RETURNING_ +RETURNS_ +REVOKE_ +RIGHT_ +ROLE_ +ROLES_ +ROLLBACK_ +ROLLUP_ +ROW_ +ROWS_ +RUNNING_ +SCALAR_ +SCHEMA_ +SCHEMAS_ +SECOND_ +SECURITY_ +SEEK_ +SELECT_ +SERIALIZABLE_ +SESSION_ +SET_ +SETS_ +SHOW_ +SKIP_ +SOME_ +START_ +STATS_ +SUBSET_ +SUBSTRING_ +SYSTEM_ +TABLE_ +TABLES_ +TABLESAMPLE_ +TEXT_ +TEXT_STRING_ +THEN_ +TIES_ +TIME_ +TIMESTAMP_ +TO_ +TRAILING_ +TRANSACTION_ +TRIM_ +TRUE_ +TRUNCATE_ +TRY_CAST_ +TYPE_ +UESCAPE_ +UNBOUNDED_ +UNCOMMITTED_ +UNCONDITIONAL_ +UNION_ +UNIQUE_ +UNKNOWN_ +UNMATCHED_ +UNNEST_ +UNTIL_ +UPDATE_ +USE_ +USER_ +USING_ +UTF16_ +UTF32_ +UTF8_ +VALIDATE_ +VALUE_ +VALUES_ +VERBOSE_ +VERSION_ +VIEW_ +WHEN_ +WHERE_ +WHILE_ +WINDOW_ +WITH_ +WITHIN_ +WITHOUT_ +WORK_ +WRAPPER_ +WRITE_ +YEAR_ +ZONE_ +EQ_ +NEQ_ +LT_ +LTE_ +GT_ +GTE_ +PLUS_ +MINUS_ +ASTERISK_ +SLASH_ +PERCENT_ +CONCAT_ +QUESTION_MARK_ +SEMICOLON_ +DOT_ +COLON_ +COMMA_ +LPAREN_ +RPAREN_ +LSQUARE_ +RSQUARE_ +LCURLY_ +RCURLY_ +LCURLYHYPHEN_ +RCURLYHYPHEN_ +LARROW_ +RARROW_ +RDOUBLEARROW_ +VBAR_ +DOLLAR_ +CARET_ +STRING_ +UNICODE_STRING_ +BINARY_LITERAL_ +INTEGER_VALUE_ +DECIMAL_VALUE_ +DOUBLE_VALUE_ +IDENTIFIER_ +DIGIT_IDENTIFIER_ +QUOTED_IDENTIFIER_ +BACKQUOTED_IDENTIFIER_ +SIMPLE_COMMENT_ +BRACKETED_COMMENT_ +WS_ +UNRECOGNIZED_ + +rule names: +ABSENT_ +ADD_ +ADMIN_ +AFTER_ +ALL_ +ALTER_ +ANALYZE_ +AND_ +ANY_ +ARRAY_ +AS_ +ASC_ +AT_ +AUTHORIZATION_ +BEGIN_ +BERNOULLI_ +BETWEEN_ +BOTH_ +BY_ +CALL_ +CALLED_ +CASCADE_ +CASE_ +CAST_ +CATALOG_ +CATALOGS_ +COLUMN_ +COLUMNS_ +COMMENT_ +COMMIT_ +COMMITTED_ +CONDITIONAL_ +CONSTRAINT_ +COUNT_ +COPARTITION_ +CREATE_ +CROSS_ +CUBE_ +CURRENT_ +CURRENT_CATALOG_ +CURRENT_DATE_ +CURRENT_PATH_ +CURRENT_ROLE_ +CURRENT_SCHEMA_ +CURRENT_TIME_ +CURRENT_TIMESTAMP_ +CURRENT_USER_ +DATA_ +DATE_ +DAY_ +DEALLOCATE_ +DECLARE_ +DEFAULT_ +DEFINE_ +DEFINER_ +DELETE_ +DENY_ +DESC_ +DESCRIBE_ +DESCRIPTOR_ +DETERMINISTIC_ +DISTINCT_ +DISTRIBUTED_ +DO_ +DOUBLE_ +DROP_ +ELSE_ +EMPTY_ +ELSEIF_ +ENCODING_ +END_ +ERROR_ +ESCAPE_ +EXCEPT_ +EXCLUDING_ +EXECUTE_ +EXISTS_ +EXPLAIN_ +EXTRACT_ +FALSE_ +FETCH_ +FILTER_ +FINAL_ +FIRST_ +FOLLOWING_ +FOR_ +FORMAT_ +FROM_ +FULL_ +FUNCTION_ +FUNCTIONS_ +GRACE_ +GRANT_ +GRANTED_ +GRANTS_ +GRAPHVIZ_ +GROUP_ +GROUPING_ +GROUPS_ +HAVING_ +HOUR_ +IF_ +IGNORE_ +IMMEDIATE_ +IN_ +INCLUDING_ +INITIAL_ +INNER_ +INPUT_ +INSERT_ +INTERSECT_ +INTERVAL_ +INTO_ +INVOKER_ +IO_ +IS_ +ISOLATION_ +ITERATE_ +JOIN_ +JSON_ +JSON_ARRAY_ +JSON_EXISTS_ +JSON_OBJECT_ +JSON_QUERY_ +JSON_TABLE_ +JSON_VALUE_ +KEEP_ +KEY_ +KEYS_ +LANGUAGE_ +LAST_ +LATERAL_ +LEADING_ +LEAVE_ +LEFT_ +LEVEL_ +LIKE_ +LIMIT_ +LISTAGG_ +LOCAL_ +LOCALTIME_ +LOCALTIMESTAMP_ +LOGICAL_ +LOOP_ +MAP_ +MATCH_ +MATCHED_ +MATCHES_ +MATCH_RECOGNIZE_ +MATERIALIZED_ +MEASURES_ +MERGE_ +MINUTE_ +MONTH_ +NATURAL_ +NESTED_ +NEXT_ +NFC_ +NFD_ +NFKC_ +NFKD_ +NO_ +NONE_ +NORMALIZE_ +NOT_ +NULL_ +NULLIF_ +NULLS_ +OBJECT_ +OF_ +OFFSET_ +OMIT_ +ON_ +ONE_ +ONLY_ +OPTION_ +OR_ +ORDER_ +ORDINALITY_ +OUTER_ +OUTPUT_ +OVER_ +OVERFLOW_ +PARTITION_ +PARTITIONS_ +PASSING_ +PAST_ +PATH_ +PATTERN_ +PER_ +PERIOD_ +PERMUTE_ +PLAN_ +POSITION_ +PRECEDING_ +PRECISION_ +PREPARE_ +PRIVILEGES_ +PROPERTIES_ +PRUNE_ +QUOTES_ +RANGE_ +READ_ +RECURSIVE_ +REFRESH_ +RENAME_ +REPEAT_ +REPEATABLE_ +REPLACE_ +RESET_ +RESPECT_ +RESTRICT_ +RETURN_ +RETURNING_ +RETURNS_ +REVOKE_ +RIGHT_ +ROLE_ +ROLES_ +ROLLBACK_ +ROLLUP_ +ROW_ +ROWS_ +RUNNING_ +SCALAR_ +SCHEMA_ +SCHEMAS_ +SECOND_ +SECURITY_ +SEEK_ +SELECT_ +SERIALIZABLE_ +SESSION_ +SET_ +SETS_ +SHOW_ +SKIP_ +SOME_ +START_ +STATS_ +SUBSET_ +SUBSTRING_ +SYSTEM_ +TABLE_ +TABLES_ +TABLESAMPLE_ +TEXT_ +TEXT_STRING_ +THEN_ +TIES_ +TIME_ +TIMESTAMP_ +TO_ +TRAILING_ +TRANSACTION_ +TRIM_ +TRUE_ +TRUNCATE_ +TRY_CAST_ +TYPE_ +UESCAPE_ +UNBOUNDED_ +UNCOMMITTED_ +UNCONDITIONAL_ +UNION_ +UNIQUE_ +UNKNOWN_ +UNMATCHED_ +UNNEST_ +UNTIL_ +UPDATE_ +USE_ +USER_ +USING_ +UTF16_ +UTF32_ +UTF8_ +VALIDATE_ +VALUE_ +VALUES_ +VERBOSE_ +VERSION_ +VIEW_ +WHEN_ +WHERE_ +WHILE_ +WINDOW_ +WITH_ +WITHIN_ +WITHOUT_ +WORK_ +WRAPPER_ +WRITE_ +YEAR_ +ZONE_ +EQ_ +NEQ_ +LT_ +LTE_ +GT_ +GTE_ +PLUS_ +MINUS_ +ASTERISK_ +SLASH_ +PERCENT_ +CONCAT_ +QUESTION_MARK_ +SEMICOLON_ +DOT_ +COLON_ +COMMA_ +LPAREN_ +RPAREN_ +LSQUARE_ +RSQUARE_ +LCURLY_ +RCURLY_ +LCURLYHYPHEN_ +RCURLYHYPHEN_ +LARROW_ +RARROW_ +RDOUBLEARROW_ +VBAR_ +DOLLAR_ +CARET_ +STRING_ +UNICODE_STRING_ +BINARY_LITERAL_ +INTEGER_VALUE_ +DECIMAL_VALUE_ +DOUBLE_VALUE_ +IDENTIFIER_ +DIGIT_IDENTIFIER_ +QUOTED_IDENTIFIER_ +BACKQUOTED_IDENTIFIER_ +EXPONENT_ +DIGIT_ +LETTER_ +SIMPLE_COMMENT_ +BRACKETED_COMMENT_ +WS_ +UNRECOGNIZED_ + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 340, 3079, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 3, 296, 2829, 8, 296, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 302, 1, 302, 1, 303, 1, 303, 1, 304, 1, 304, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 308, 1, 308, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 312, 1, 312, 1, 313, 1, 313, 1, 314, 1, 314, 1, 315, 1, 315, 1, 316, 1, 316, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 321, 1, 321, 1, 321, 1, 322, 1, 322, 1, 322, 1, 323, 1, 323, 1, 324, 1, 324, 1, 325, 1, 325, 1, 326, 1, 326, 1, 326, 1, 326, 5, 326, 2902, 8, 326, 10, 326, 12, 326, 2905, 9, 326, 1, 326, 1, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 5, 327, 2916, 8, 327, 10, 327, 12, 327, 2919, 9, 327, 1, 327, 1, 327, 1, 328, 1, 328, 1, 328, 1, 328, 5, 328, 2927, 8, 328, 10, 328, 12, 328, 2930, 9, 328, 1, 328, 1, 328, 1, 329, 4, 329, 2935, 8, 329, 11, 329, 12, 329, 2936, 1, 330, 4, 330, 2940, 8, 330, 11, 330, 12, 330, 2941, 1, 330, 1, 330, 5, 330, 2946, 8, 330, 10, 330, 12, 330, 2949, 9, 330, 1, 330, 1, 330, 4, 330, 2953, 8, 330, 11, 330, 12, 330, 2954, 3, 330, 2957, 8, 330, 1, 331, 4, 331, 2960, 8, 331, 11, 331, 12, 331, 2961, 1, 331, 1, 331, 5, 331, 2966, 8, 331, 10, 331, 12, 331, 2969, 9, 331, 3, 331, 2971, 8, 331, 1, 331, 1, 331, 1, 331, 1, 331, 4, 331, 2977, 8, 331, 11, 331, 12, 331, 2978, 1, 331, 1, 331, 3, 331, 2983, 8, 331, 1, 332, 1, 332, 3, 332, 2987, 8, 332, 1, 332, 1, 332, 1, 332, 5, 332, 2992, 8, 332, 10, 332, 12, 332, 2995, 9, 332, 1, 333, 1, 333, 1, 333, 1, 333, 4, 333, 3001, 8, 333, 11, 333, 12, 333, 3002, 1, 334, 1, 334, 1, 334, 1, 334, 5, 334, 3009, 8, 334, 10, 334, 12, 334, 3012, 9, 334, 1, 334, 1, 334, 1, 335, 1, 335, 1, 335, 1, 335, 5, 335, 3020, 8, 335, 10, 335, 12, 335, 3023, 9, 335, 1, 335, 1, 335, 1, 336, 1, 336, 3, 336, 3029, 8, 336, 1, 336, 4, 336, 3032, 8, 336, 11, 336, 12, 336, 3033, 1, 337, 1, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 5, 339, 3044, 8, 339, 10, 339, 12, 339, 3047, 9, 339, 1, 339, 3, 339, 3050, 8, 339, 1, 339, 3, 339, 3053, 8, 339, 1, 339, 1, 339, 1, 340, 1, 340, 1, 340, 1, 340, 5, 340, 3061, 8, 340, 10, 340, 12, 340, 3064, 9, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 341, 4, 341, 3072, 8, 341, 11, 341, 12, 341, 3073, 1, 341, 1, 341, 1, 342, 1, 342, 1, 3062, 0, 343, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 0, 675, 0, 677, 0, 679, 337, 681, 338, 683, 339, 685, 340, 1, 0, 34, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 83, 83, 115, 115, 2, 0, 69, 69, 101, 101, 2, 0, 78, 78, 110, 110, 2, 0, 84, 84, 116, 116, 2, 0, 68, 68, 100, 100, 2, 0, 77, 77, 109, 109, 2, 0, 73, 73, 105, 105, 2, 0, 70, 70, 102, 102, 2, 0, 82, 82, 114, 114, 2, 0, 76, 76, 108, 108, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 67, 67, 99, 99, 2, 0, 85, 85, 117, 117, 2, 0, 72, 72, 104, 104, 2, 0, 79, 79, 111, 111, 2, 0, 71, 71, 103, 103, 2, 0, 87, 87, 119, 119, 2, 0, 80, 80, 112, 112, 2, 0, 88, 88, 120, 120, 2, 0, 86, 86, 118, 118, 2, 0, 75, 75, 107, 107, 2, 0, 74, 74, 106, 106, 2, 0, 81, 81, 113, 113, 1, 0, 39, 39, 1, 0, 34, 34, 1, 0, 96, 96, 2, 0, 43, 43, 45, 45, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 3109, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 1, 687, 1, 0, 0, 0, 3, 694, 1, 0, 0, 0, 5, 698, 1, 0, 0, 0, 7, 704, 1, 0, 0, 0, 9, 710, 1, 0, 0, 0, 11, 714, 1, 0, 0, 0, 13, 720, 1, 0, 0, 0, 15, 728, 1, 0, 0, 0, 17, 732, 1, 0, 0, 0, 19, 736, 1, 0, 0, 0, 21, 742, 1, 0, 0, 0, 23, 745, 1, 0, 0, 0, 25, 749, 1, 0, 0, 0, 27, 752, 1, 0, 0, 0, 29, 766, 1, 0, 0, 0, 31, 772, 1, 0, 0, 0, 33, 782, 1, 0, 0, 0, 35, 790, 1, 0, 0, 0, 37, 795, 1, 0, 0, 0, 39, 798, 1, 0, 0, 0, 41, 803, 1, 0, 0, 0, 43, 810, 1, 0, 0, 0, 45, 818, 1, 0, 0, 0, 47, 823, 1, 0, 0, 0, 49, 828, 1, 0, 0, 0, 51, 836, 1, 0, 0, 0, 53, 845, 1, 0, 0, 0, 55, 852, 1, 0, 0, 0, 57, 860, 1, 0, 0, 0, 59, 868, 1, 0, 0, 0, 61, 875, 1, 0, 0, 0, 63, 885, 1, 0, 0, 0, 65, 897, 1, 0, 0, 0, 67, 908, 1, 0, 0, 0, 69, 914, 1, 0, 0, 0, 71, 926, 1, 0, 0, 0, 73, 933, 1, 0, 0, 0, 75, 939, 1, 0, 0, 0, 77, 944, 1, 0, 0, 0, 79, 952, 1, 0, 0, 0, 81, 968, 1, 0, 0, 0, 83, 981, 1, 0, 0, 0, 85, 994, 1, 0, 0, 0, 87, 1007, 1, 0, 0, 0, 89, 1022, 1, 0, 0, 0, 91, 1035, 1, 0, 0, 0, 93, 1053, 1, 0, 0, 0, 95, 1066, 1, 0, 0, 0, 97, 1071, 1, 0, 0, 0, 99, 1076, 1, 0, 0, 0, 101, 1080, 1, 0, 0, 0, 103, 1091, 1, 0, 0, 0, 105, 1099, 1, 0, 0, 0, 107, 1107, 1, 0, 0, 0, 109, 1114, 1, 0, 0, 0, 111, 1122, 1, 0, 0, 0, 113, 1129, 1, 0, 0, 0, 115, 1134, 1, 0, 0, 0, 117, 1139, 1, 0, 0, 0, 119, 1148, 1, 0, 0, 0, 121, 1159, 1, 0, 0, 0, 123, 1173, 1, 0, 0, 0, 125, 1182, 1, 0, 0, 0, 127, 1194, 1, 0, 0, 0, 129, 1197, 1, 0, 0, 0, 131, 1204, 1, 0, 0, 0, 133, 1209, 1, 0, 0, 0, 135, 1214, 1, 0, 0, 0, 137, 1220, 1, 0, 0, 0, 139, 1227, 1, 0, 0, 0, 141, 1236, 1, 0, 0, 0, 143, 1240, 1, 0, 0, 0, 145, 1246, 1, 0, 0, 0, 147, 1253, 1, 0, 0, 0, 149, 1260, 1, 0, 0, 0, 151, 1270, 1, 0, 0, 0, 153, 1278, 1, 0, 0, 0, 155, 1285, 1, 0, 0, 0, 157, 1293, 1, 0, 0, 0, 159, 1301, 1, 0, 0, 0, 161, 1307, 1, 0, 0, 0, 163, 1313, 1, 0, 0, 0, 165, 1320, 1, 0, 0, 0, 167, 1326, 1, 0, 0, 0, 169, 1332, 1, 0, 0, 0, 171, 1342, 1, 0, 0, 0, 173, 1346, 1, 0, 0, 0, 175, 1353, 1, 0, 0, 0, 177, 1358, 1, 0, 0, 0, 179, 1363, 1, 0, 0, 0, 181, 1372, 1, 0, 0, 0, 183, 1382, 1, 0, 0, 0, 185, 1388, 1, 0, 0, 0, 187, 1394, 1, 0, 0, 0, 189, 1402, 1, 0, 0, 0, 191, 1409, 1, 0, 0, 0, 193, 1418, 1, 0, 0, 0, 195, 1424, 1, 0, 0, 0, 197, 1433, 1, 0, 0, 0, 199, 1440, 1, 0, 0, 0, 201, 1447, 1, 0, 0, 0, 203, 1452, 1, 0, 0, 0, 205, 1455, 1, 0, 0, 0, 207, 1462, 1, 0, 0, 0, 209, 1472, 1, 0, 0, 0, 211, 1475, 1, 0, 0, 0, 213, 1485, 1, 0, 0, 0, 215, 1493, 1, 0, 0, 0, 217, 1499, 1, 0, 0, 0, 219, 1505, 1, 0, 0, 0, 221, 1512, 1, 0, 0, 0, 223, 1522, 1, 0, 0, 0, 225, 1531, 1, 0, 0, 0, 227, 1536, 1, 0, 0, 0, 229, 1544, 1, 0, 0, 0, 231, 1547, 1, 0, 0, 0, 233, 1550, 1, 0, 0, 0, 235, 1560, 1, 0, 0, 0, 237, 1568, 1, 0, 0, 0, 239, 1573, 1, 0, 0, 0, 241, 1578, 1, 0, 0, 0, 243, 1589, 1, 0, 0, 0, 245, 1601, 1, 0, 0, 0, 247, 1613, 1, 0, 0, 0, 249, 1624, 1, 0, 0, 0, 251, 1635, 1, 0, 0, 0, 253, 1646, 1, 0, 0, 0, 255, 1651, 1, 0, 0, 0, 257, 1655, 1, 0, 0, 0, 259, 1660, 1, 0, 0, 0, 261, 1669, 1, 0, 0, 0, 263, 1674, 1, 0, 0, 0, 265, 1682, 1, 0, 0, 0, 267, 1690, 1, 0, 0, 0, 269, 1696, 1, 0, 0, 0, 271, 1701, 1, 0, 0, 0, 273, 1707, 1, 0, 0, 0, 275, 1712, 1, 0, 0, 0, 277, 1718, 1, 0, 0, 0, 279, 1726, 1, 0, 0, 0, 281, 1732, 1, 0, 0, 0, 283, 1742, 1, 0, 0, 0, 285, 1757, 1, 0, 0, 0, 287, 1765, 1, 0, 0, 0, 289, 1770, 1, 0, 0, 0, 291, 1774, 1, 0, 0, 0, 293, 1780, 1, 0, 0, 0, 295, 1788, 1, 0, 0, 0, 297, 1796, 1, 0, 0, 0, 299, 1812, 1, 0, 0, 0, 301, 1825, 1, 0, 0, 0, 303, 1834, 1, 0, 0, 0, 305, 1840, 1, 0, 0, 0, 307, 1847, 1, 0, 0, 0, 309, 1853, 1, 0, 0, 0, 311, 1861, 1, 0, 0, 0, 313, 1868, 1, 0, 0, 0, 315, 1873, 1, 0, 0, 0, 317, 1877, 1, 0, 0, 0, 319, 1881, 1, 0, 0, 0, 321, 1886, 1, 0, 0, 0, 323, 1891, 1, 0, 0, 0, 325, 1894, 1, 0, 0, 0, 327, 1899, 1, 0, 0, 0, 329, 1909, 1, 0, 0, 0, 331, 1913, 1, 0, 0, 0, 333, 1918, 1, 0, 0, 0, 335, 1925, 1, 0, 0, 0, 337, 1931, 1, 0, 0, 0, 339, 1938, 1, 0, 0, 0, 341, 1941, 1, 0, 0, 0, 343, 1948, 1, 0, 0, 0, 345, 1953, 1, 0, 0, 0, 347, 1956, 1, 0, 0, 0, 349, 1960, 1, 0, 0, 0, 351, 1965, 1, 0, 0, 0, 353, 1972, 1, 0, 0, 0, 355, 1975, 1, 0, 0, 0, 357, 1981, 1, 0, 0, 0, 359, 1992, 1, 0, 0, 0, 361, 1998, 1, 0, 0, 0, 363, 2005, 1, 0, 0, 0, 365, 2010, 1, 0, 0, 0, 367, 2019, 1, 0, 0, 0, 369, 2029, 1, 0, 0, 0, 371, 2040, 1, 0, 0, 0, 373, 2048, 1, 0, 0, 0, 375, 2053, 1, 0, 0, 0, 377, 2058, 1, 0, 0, 0, 379, 2066, 1, 0, 0, 0, 381, 2070, 1, 0, 0, 0, 383, 2077, 1, 0, 0, 0, 385, 2085, 1, 0, 0, 0, 387, 2090, 1, 0, 0, 0, 389, 2099, 1, 0, 0, 0, 391, 2109, 1, 0, 0, 0, 393, 2119, 1, 0, 0, 0, 395, 2127, 1, 0, 0, 0, 397, 2138, 1, 0, 0, 0, 399, 2149, 1, 0, 0, 0, 401, 2155, 1, 0, 0, 0, 403, 2162, 1, 0, 0, 0, 405, 2168, 1, 0, 0, 0, 407, 2173, 1, 0, 0, 0, 409, 2183, 1, 0, 0, 0, 411, 2191, 1, 0, 0, 0, 413, 2198, 1, 0, 0, 0, 415, 2205, 1, 0, 0, 0, 417, 2216, 1, 0, 0, 0, 419, 2224, 1, 0, 0, 0, 421, 2230, 1, 0, 0, 0, 423, 2238, 1, 0, 0, 0, 425, 2247, 1, 0, 0, 0, 427, 2254, 1, 0, 0, 0, 429, 2264, 1, 0, 0, 0, 431, 2272, 1, 0, 0, 0, 433, 2279, 1, 0, 0, 0, 435, 2285, 1, 0, 0, 0, 437, 2290, 1, 0, 0, 0, 439, 2296, 1, 0, 0, 0, 441, 2305, 1, 0, 0, 0, 443, 2312, 1, 0, 0, 0, 445, 2316, 1, 0, 0, 0, 447, 2321, 1, 0, 0, 0, 449, 2329, 1, 0, 0, 0, 451, 2336, 1, 0, 0, 0, 453, 2343, 1, 0, 0, 0, 455, 2351, 1, 0, 0, 0, 457, 2358, 1, 0, 0, 0, 459, 2367, 1, 0, 0, 0, 461, 2372, 1, 0, 0, 0, 463, 2379, 1, 0, 0, 0, 465, 2392, 1, 0, 0, 0, 467, 2400, 1, 0, 0, 0, 469, 2404, 1, 0, 0, 0, 471, 2409, 1, 0, 0, 0, 473, 2414, 1, 0, 0, 0, 475, 2419, 1, 0, 0, 0, 477, 2424, 1, 0, 0, 0, 479, 2430, 1, 0, 0, 0, 481, 2436, 1, 0, 0, 0, 483, 2443, 1, 0, 0, 0, 485, 2453, 1, 0, 0, 0, 487, 2460, 1, 0, 0, 0, 489, 2466, 1, 0, 0, 0, 491, 2473, 1, 0, 0, 0, 493, 2485, 1, 0, 0, 0, 495, 2490, 1, 0, 0, 0, 497, 2497, 1, 0, 0, 0, 499, 2502, 1, 0, 0, 0, 501, 2507, 1, 0, 0, 0, 503, 2512, 1, 0, 0, 0, 505, 2522, 1, 0, 0, 0, 507, 2525, 1, 0, 0, 0, 509, 2534, 1, 0, 0, 0, 511, 2546, 1, 0, 0, 0, 513, 2551, 1, 0, 0, 0, 515, 2556, 1, 0, 0, 0, 517, 2565, 1, 0, 0, 0, 519, 2574, 1, 0, 0, 0, 521, 2579, 1, 0, 0, 0, 523, 2587, 1, 0, 0, 0, 525, 2597, 1, 0, 0, 0, 527, 2609, 1, 0, 0, 0, 529, 2623, 1, 0, 0, 0, 531, 2629, 1, 0, 0, 0, 533, 2636, 1, 0, 0, 0, 535, 2644, 1, 0, 0, 0, 537, 2654, 1, 0, 0, 0, 539, 2661, 1, 0, 0, 0, 541, 2667, 1, 0, 0, 0, 543, 2674, 1, 0, 0, 0, 545, 2678, 1, 0, 0, 0, 547, 2683, 1, 0, 0, 0, 549, 2689, 1, 0, 0, 0, 551, 2695, 1, 0, 0, 0, 553, 2701, 1, 0, 0, 0, 555, 2706, 1, 0, 0, 0, 557, 2715, 1, 0, 0, 0, 559, 2721, 1, 0, 0, 0, 561, 2728, 1, 0, 0, 0, 563, 2736, 1, 0, 0, 0, 565, 2744, 1, 0, 0, 0, 567, 2749, 1, 0, 0, 0, 569, 2754, 1, 0, 0, 0, 571, 2760, 1, 0, 0, 0, 573, 2766, 1, 0, 0, 0, 575, 2773, 1, 0, 0, 0, 577, 2778, 1, 0, 0, 0, 579, 2785, 1, 0, 0, 0, 581, 2793, 1, 0, 0, 0, 583, 2798, 1, 0, 0, 0, 585, 2806, 1, 0, 0, 0, 587, 2812, 1, 0, 0, 0, 589, 2817, 1, 0, 0, 0, 591, 2822, 1, 0, 0, 0, 593, 2828, 1, 0, 0, 0, 595, 2830, 1, 0, 0, 0, 597, 2832, 1, 0, 0, 0, 599, 2835, 1, 0, 0, 0, 601, 2837, 1, 0, 0, 0, 603, 2840, 1, 0, 0, 0, 605, 2842, 1, 0, 0, 0, 607, 2844, 1, 0, 0, 0, 609, 2846, 1, 0, 0, 0, 611, 2848, 1, 0, 0, 0, 613, 2850, 1, 0, 0, 0, 615, 2853, 1, 0, 0, 0, 617, 2855, 1, 0, 0, 0, 619, 2857, 1, 0, 0, 0, 621, 2859, 1, 0, 0, 0, 623, 2862, 1, 0, 0, 0, 625, 2864, 1, 0, 0, 0, 627, 2866, 1, 0, 0, 0, 629, 2868, 1, 0, 0, 0, 631, 2870, 1, 0, 0, 0, 633, 2872, 1, 0, 0, 0, 635, 2874, 1, 0, 0, 0, 637, 2876, 1, 0, 0, 0, 639, 2879, 1, 0, 0, 0, 641, 2882, 1, 0, 0, 0, 643, 2885, 1, 0, 0, 0, 645, 2888, 1, 0, 0, 0, 647, 2891, 1, 0, 0, 0, 649, 2893, 1, 0, 0, 0, 651, 2895, 1, 0, 0, 0, 653, 2897, 1, 0, 0, 0, 655, 2908, 1, 0, 0, 0, 657, 2922, 1, 0, 0, 0, 659, 2934, 1, 0, 0, 0, 661, 2956, 1, 0, 0, 0, 663, 2982, 1, 0, 0, 0, 665, 2986, 1, 0, 0, 0, 667, 2996, 1, 0, 0, 0, 669, 3004, 1, 0, 0, 0, 671, 3015, 1, 0, 0, 0, 673, 3026, 1, 0, 0, 0, 675, 3035, 1, 0, 0, 0, 677, 3037, 1, 0, 0, 0, 679, 3039, 1, 0, 0, 0, 681, 3056, 1, 0, 0, 0, 683, 3071, 1, 0, 0, 0, 685, 3077, 1, 0, 0, 0, 687, 688, 7, 0, 0, 0, 688, 689, 7, 1, 0, 0, 689, 690, 7, 2, 0, 0, 690, 691, 7, 3, 0, 0, 691, 692, 7, 4, 0, 0, 692, 693, 7, 5, 0, 0, 693, 2, 1, 0, 0, 0, 694, 695, 7, 0, 0, 0, 695, 696, 7, 6, 0, 0, 696, 697, 7, 6, 0, 0, 697, 4, 1, 0, 0, 0, 698, 699, 7, 0, 0, 0, 699, 700, 7, 6, 0, 0, 700, 701, 7, 7, 0, 0, 701, 702, 7, 8, 0, 0, 702, 703, 7, 4, 0, 0, 703, 6, 1, 0, 0, 0, 704, 705, 7, 0, 0, 0, 705, 706, 7, 9, 0, 0, 706, 707, 7, 5, 0, 0, 707, 708, 7, 3, 0, 0, 708, 709, 7, 10, 0, 0, 709, 8, 1, 0, 0, 0, 710, 711, 7, 0, 0, 0, 711, 712, 7, 11, 0, 0, 712, 713, 7, 11, 0, 0, 713, 10, 1, 0, 0, 0, 714, 715, 7, 0, 0, 0, 715, 716, 7, 11, 0, 0, 716, 717, 7, 5, 0, 0, 717, 718, 7, 3, 0, 0, 718, 719, 7, 10, 0, 0, 719, 12, 1, 0, 0, 0, 720, 721, 7, 0, 0, 0, 721, 722, 7, 4, 0, 0, 722, 723, 7, 0, 0, 0, 723, 724, 7, 11, 0, 0, 724, 725, 7, 12, 0, 0, 725, 726, 7, 13, 0, 0, 726, 727, 7, 3, 0, 0, 727, 14, 1, 0, 0, 0, 728, 729, 7, 0, 0, 0, 729, 730, 7, 4, 0, 0, 730, 731, 7, 6, 0, 0, 731, 16, 1, 0, 0, 0, 732, 733, 7, 0, 0, 0, 733, 734, 7, 4, 0, 0, 734, 735, 7, 12, 0, 0, 735, 18, 1, 0, 0, 0, 736, 737, 7, 0, 0, 0, 737, 738, 7, 10, 0, 0, 738, 739, 7, 10, 0, 0, 739, 740, 7, 0, 0, 0, 740, 741, 7, 12, 0, 0, 741, 20, 1, 0, 0, 0, 742, 743, 7, 0, 0, 0, 743, 744, 7, 2, 0, 0, 744, 22, 1, 0, 0, 0, 745, 746, 7, 0, 0, 0, 746, 747, 7, 2, 0, 0, 747, 748, 7, 14, 0, 0, 748, 24, 1, 0, 0, 0, 749, 750, 7, 0, 0, 0, 750, 751, 7, 5, 0, 0, 751, 26, 1, 0, 0, 0, 752, 753, 7, 0, 0, 0, 753, 754, 7, 15, 0, 0, 754, 755, 7, 5, 0, 0, 755, 756, 7, 16, 0, 0, 756, 757, 7, 17, 0, 0, 757, 758, 7, 10, 0, 0, 758, 759, 7, 8, 0, 0, 759, 760, 7, 13, 0, 0, 760, 761, 7, 0, 0, 0, 761, 762, 7, 5, 0, 0, 762, 763, 7, 8, 0, 0, 763, 764, 7, 17, 0, 0, 764, 765, 7, 4, 0, 0, 765, 28, 1, 0, 0, 0, 766, 767, 7, 1, 0, 0, 767, 768, 7, 3, 0, 0, 768, 769, 7, 18, 0, 0, 769, 770, 7, 8, 0, 0, 770, 771, 7, 4, 0, 0, 771, 30, 1, 0, 0, 0, 772, 773, 7, 1, 0, 0, 773, 774, 7, 3, 0, 0, 774, 775, 7, 10, 0, 0, 775, 776, 7, 4, 0, 0, 776, 777, 7, 17, 0, 0, 777, 778, 7, 15, 0, 0, 778, 779, 7, 11, 0, 0, 779, 780, 7, 11, 0, 0, 780, 781, 7, 8, 0, 0, 781, 32, 1, 0, 0, 0, 782, 783, 7, 1, 0, 0, 783, 784, 7, 3, 0, 0, 784, 785, 7, 5, 0, 0, 785, 786, 7, 19, 0, 0, 786, 787, 7, 3, 0, 0, 787, 788, 7, 3, 0, 0, 788, 789, 7, 4, 0, 0, 789, 34, 1, 0, 0, 0, 790, 791, 7, 1, 0, 0, 791, 792, 7, 17, 0, 0, 792, 793, 7, 5, 0, 0, 793, 794, 7, 16, 0, 0, 794, 36, 1, 0, 0, 0, 795, 796, 7, 1, 0, 0, 796, 797, 7, 12, 0, 0, 797, 38, 1, 0, 0, 0, 798, 799, 7, 14, 0, 0, 799, 800, 7, 0, 0, 0, 800, 801, 7, 11, 0, 0, 801, 802, 7, 11, 0, 0, 802, 40, 1, 0, 0, 0, 803, 804, 7, 14, 0, 0, 804, 805, 7, 0, 0, 0, 805, 806, 7, 11, 0, 0, 806, 807, 7, 11, 0, 0, 807, 808, 7, 3, 0, 0, 808, 809, 7, 6, 0, 0, 809, 42, 1, 0, 0, 0, 810, 811, 7, 14, 0, 0, 811, 812, 7, 0, 0, 0, 812, 813, 7, 2, 0, 0, 813, 814, 7, 14, 0, 0, 814, 815, 7, 0, 0, 0, 815, 816, 7, 6, 0, 0, 816, 817, 7, 3, 0, 0, 817, 44, 1, 0, 0, 0, 818, 819, 7, 14, 0, 0, 819, 820, 7, 0, 0, 0, 820, 821, 7, 2, 0, 0, 821, 822, 7, 3, 0, 0, 822, 46, 1, 0, 0, 0, 823, 824, 7, 14, 0, 0, 824, 825, 7, 0, 0, 0, 825, 826, 7, 2, 0, 0, 826, 827, 7, 5, 0, 0, 827, 48, 1, 0, 0, 0, 828, 829, 7, 14, 0, 0, 829, 830, 7, 0, 0, 0, 830, 831, 7, 5, 0, 0, 831, 832, 7, 0, 0, 0, 832, 833, 7, 11, 0, 0, 833, 834, 7, 17, 0, 0, 834, 835, 7, 18, 0, 0, 835, 50, 1, 0, 0, 0, 836, 837, 7, 14, 0, 0, 837, 838, 7, 0, 0, 0, 838, 839, 7, 5, 0, 0, 839, 840, 7, 0, 0, 0, 840, 841, 7, 11, 0, 0, 841, 842, 7, 17, 0, 0, 842, 843, 7, 18, 0, 0, 843, 844, 7, 2, 0, 0, 844, 52, 1, 0, 0, 0, 845, 846, 7, 14, 0, 0, 846, 847, 7, 17, 0, 0, 847, 848, 7, 11, 0, 0, 848, 849, 7, 15, 0, 0, 849, 850, 7, 7, 0, 0, 850, 851, 7, 4, 0, 0, 851, 54, 1, 0, 0, 0, 852, 853, 7, 14, 0, 0, 853, 854, 7, 17, 0, 0, 854, 855, 7, 11, 0, 0, 855, 856, 7, 15, 0, 0, 856, 857, 7, 7, 0, 0, 857, 858, 7, 4, 0, 0, 858, 859, 7, 2, 0, 0, 859, 56, 1, 0, 0, 0, 860, 861, 7, 14, 0, 0, 861, 862, 7, 17, 0, 0, 862, 863, 7, 7, 0, 0, 863, 864, 7, 7, 0, 0, 864, 865, 7, 3, 0, 0, 865, 866, 7, 4, 0, 0, 866, 867, 7, 5, 0, 0, 867, 58, 1, 0, 0, 0, 868, 869, 7, 14, 0, 0, 869, 870, 7, 17, 0, 0, 870, 871, 7, 7, 0, 0, 871, 872, 7, 7, 0, 0, 872, 873, 7, 8, 0, 0, 873, 874, 7, 5, 0, 0, 874, 60, 1, 0, 0, 0, 875, 876, 7, 14, 0, 0, 876, 877, 7, 17, 0, 0, 877, 878, 7, 7, 0, 0, 878, 879, 7, 7, 0, 0, 879, 880, 7, 8, 0, 0, 880, 881, 7, 5, 0, 0, 881, 882, 7, 5, 0, 0, 882, 883, 7, 3, 0, 0, 883, 884, 7, 6, 0, 0, 884, 62, 1, 0, 0, 0, 885, 886, 7, 14, 0, 0, 886, 887, 7, 17, 0, 0, 887, 888, 7, 4, 0, 0, 888, 889, 7, 6, 0, 0, 889, 890, 7, 8, 0, 0, 890, 891, 7, 5, 0, 0, 891, 892, 7, 8, 0, 0, 892, 893, 7, 17, 0, 0, 893, 894, 7, 4, 0, 0, 894, 895, 7, 0, 0, 0, 895, 896, 7, 11, 0, 0, 896, 64, 1, 0, 0, 0, 897, 898, 7, 14, 0, 0, 898, 899, 7, 17, 0, 0, 899, 900, 7, 4, 0, 0, 900, 901, 7, 2, 0, 0, 901, 902, 7, 5, 0, 0, 902, 903, 7, 10, 0, 0, 903, 904, 7, 0, 0, 0, 904, 905, 7, 8, 0, 0, 905, 906, 7, 4, 0, 0, 906, 907, 7, 5, 0, 0, 907, 66, 1, 0, 0, 0, 908, 909, 7, 14, 0, 0, 909, 910, 7, 17, 0, 0, 910, 911, 7, 15, 0, 0, 911, 912, 7, 4, 0, 0, 912, 913, 7, 5, 0, 0, 913, 68, 1, 0, 0, 0, 914, 915, 7, 14, 0, 0, 915, 916, 7, 17, 0, 0, 916, 917, 7, 20, 0, 0, 917, 918, 7, 0, 0, 0, 918, 919, 7, 10, 0, 0, 919, 920, 7, 5, 0, 0, 920, 921, 7, 8, 0, 0, 921, 922, 7, 5, 0, 0, 922, 923, 7, 8, 0, 0, 923, 924, 7, 17, 0, 0, 924, 925, 7, 4, 0, 0, 925, 70, 1, 0, 0, 0, 926, 927, 7, 14, 0, 0, 927, 928, 7, 10, 0, 0, 928, 929, 7, 3, 0, 0, 929, 930, 7, 0, 0, 0, 930, 931, 7, 5, 0, 0, 931, 932, 7, 3, 0, 0, 932, 72, 1, 0, 0, 0, 933, 934, 7, 14, 0, 0, 934, 935, 7, 10, 0, 0, 935, 936, 7, 17, 0, 0, 936, 937, 7, 2, 0, 0, 937, 938, 7, 2, 0, 0, 938, 74, 1, 0, 0, 0, 939, 940, 7, 14, 0, 0, 940, 941, 7, 15, 0, 0, 941, 942, 7, 1, 0, 0, 942, 943, 7, 3, 0, 0, 943, 76, 1, 0, 0, 0, 944, 945, 7, 14, 0, 0, 945, 946, 7, 15, 0, 0, 946, 947, 7, 10, 0, 0, 947, 948, 7, 10, 0, 0, 948, 949, 7, 3, 0, 0, 949, 950, 7, 4, 0, 0, 950, 951, 7, 5, 0, 0, 951, 78, 1, 0, 0, 0, 952, 953, 7, 14, 0, 0, 953, 954, 7, 15, 0, 0, 954, 955, 7, 10, 0, 0, 955, 956, 7, 10, 0, 0, 956, 957, 7, 3, 0, 0, 957, 958, 7, 4, 0, 0, 958, 959, 7, 5, 0, 0, 959, 960, 5, 95, 0, 0, 960, 961, 7, 14, 0, 0, 961, 962, 7, 0, 0, 0, 962, 963, 7, 5, 0, 0, 963, 964, 7, 0, 0, 0, 964, 965, 7, 11, 0, 0, 965, 966, 7, 17, 0, 0, 966, 967, 7, 18, 0, 0, 967, 80, 1, 0, 0, 0, 968, 969, 7, 14, 0, 0, 969, 970, 7, 15, 0, 0, 970, 971, 7, 10, 0, 0, 971, 972, 7, 10, 0, 0, 972, 973, 7, 3, 0, 0, 973, 974, 7, 4, 0, 0, 974, 975, 7, 5, 0, 0, 975, 976, 5, 95, 0, 0, 976, 977, 7, 6, 0, 0, 977, 978, 7, 0, 0, 0, 978, 979, 7, 5, 0, 0, 979, 980, 7, 3, 0, 0, 980, 82, 1, 0, 0, 0, 981, 982, 7, 14, 0, 0, 982, 983, 7, 15, 0, 0, 983, 984, 7, 10, 0, 0, 984, 985, 7, 10, 0, 0, 985, 986, 7, 3, 0, 0, 986, 987, 7, 4, 0, 0, 987, 988, 7, 5, 0, 0, 988, 989, 5, 95, 0, 0, 989, 990, 7, 20, 0, 0, 990, 991, 7, 0, 0, 0, 991, 992, 7, 5, 0, 0, 992, 993, 7, 16, 0, 0, 993, 84, 1, 0, 0, 0, 994, 995, 7, 14, 0, 0, 995, 996, 7, 15, 0, 0, 996, 997, 7, 10, 0, 0, 997, 998, 7, 10, 0, 0, 998, 999, 7, 3, 0, 0, 999, 1000, 7, 4, 0, 0, 1000, 1001, 7, 5, 0, 0, 1001, 1002, 5, 95, 0, 0, 1002, 1003, 7, 10, 0, 0, 1003, 1004, 7, 17, 0, 0, 1004, 1005, 7, 11, 0, 0, 1005, 1006, 7, 3, 0, 0, 1006, 86, 1, 0, 0, 0, 1007, 1008, 7, 14, 0, 0, 1008, 1009, 7, 15, 0, 0, 1009, 1010, 7, 10, 0, 0, 1010, 1011, 7, 10, 0, 0, 1011, 1012, 7, 3, 0, 0, 1012, 1013, 7, 4, 0, 0, 1013, 1014, 7, 5, 0, 0, 1014, 1015, 5, 95, 0, 0, 1015, 1016, 7, 2, 0, 0, 1016, 1017, 7, 14, 0, 0, 1017, 1018, 7, 16, 0, 0, 1018, 1019, 7, 3, 0, 0, 1019, 1020, 7, 7, 0, 0, 1020, 1021, 7, 0, 0, 0, 1021, 88, 1, 0, 0, 0, 1022, 1023, 7, 14, 0, 0, 1023, 1024, 7, 15, 0, 0, 1024, 1025, 7, 10, 0, 0, 1025, 1026, 7, 10, 0, 0, 1026, 1027, 7, 3, 0, 0, 1027, 1028, 7, 4, 0, 0, 1028, 1029, 7, 5, 0, 0, 1029, 1030, 5, 95, 0, 0, 1030, 1031, 7, 5, 0, 0, 1031, 1032, 7, 8, 0, 0, 1032, 1033, 7, 7, 0, 0, 1033, 1034, 7, 3, 0, 0, 1034, 90, 1, 0, 0, 0, 1035, 1036, 7, 14, 0, 0, 1036, 1037, 7, 15, 0, 0, 1037, 1038, 7, 10, 0, 0, 1038, 1039, 7, 10, 0, 0, 1039, 1040, 7, 3, 0, 0, 1040, 1041, 7, 4, 0, 0, 1041, 1042, 7, 5, 0, 0, 1042, 1043, 5, 95, 0, 0, 1043, 1044, 7, 5, 0, 0, 1044, 1045, 7, 8, 0, 0, 1045, 1046, 7, 7, 0, 0, 1046, 1047, 7, 3, 0, 0, 1047, 1048, 7, 2, 0, 0, 1048, 1049, 7, 5, 0, 0, 1049, 1050, 7, 0, 0, 0, 1050, 1051, 7, 7, 0, 0, 1051, 1052, 7, 20, 0, 0, 1052, 92, 1, 0, 0, 0, 1053, 1054, 7, 14, 0, 0, 1054, 1055, 7, 15, 0, 0, 1055, 1056, 7, 10, 0, 0, 1056, 1057, 7, 10, 0, 0, 1057, 1058, 7, 3, 0, 0, 1058, 1059, 7, 4, 0, 0, 1059, 1060, 7, 5, 0, 0, 1060, 1061, 5, 95, 0, 0, 1061, 1062, 7, 15, 0, 0, 1062, 1063, 7, 2, 0, 0, 1063, 1064, 7, 3, 0, 0, 1064, 1065, 7, 10, 0, 0, 1065, 94, 1, 0, 0, 0, 1066, 1067, 7, 6, 0, 0, 1067, 1068, 7, 0, 0, 0, 1068, 1069, 7, 5, 0, 0, 1069, 1070, 7, 0, 0, 0, 1070, 96, 1, 0, 0, 0, 1071, 1072, 7, 6, 0, 0, 1072, 1073, 7, 0, 0, 0, 1073, 1074, 7, 5, 0, 0, 1074, 1075, 7, 3, 0, 0, 1075, 98, 1, 0, 0, 0, 1076, 1077, 7, 6, 0, 0, 1077, 1078, 7, 0, 0, 0, 1078, 1079, 7, 12, 0, 0, 1079, 100, 1, 0, 0, 0, 1080, 1081, 7, 6, 0, 0, 1081, 1082, 7, 3, 0, 0, 1082, 1083, 7, 0, 0, 0, 1083, 1084, 7, 11, 0, 0, 1084, 1085, 7, 11, 0, 0, 1085, 1086, 7, 17, 0, 0, 1086, 1087, 7, 14, 0, 0, 1087, 1088, 7, 0, 0, 0, 1088, 1089, 7, 5, 0, 0, 1089, 1090, 7, 3, 0, 0, 1090, 102, 1, 0, 0, 0, 1091, 1092, 7, 6, 0, 0, 1092, 1093, 7, 3, 0, 0, 1093, 1094, 7, 14, 0, 0, 1094, 1095, 7, 11, 0, 0, 1095, 1096, 7, 0, 0, 0, 1096, 1097, 7, 10, 0, 0, 1097, 1098, 7, 3, 0, 0, 1098, 104, 1, 0, 0, 0, 1099, 1100, 7, 6, 0, 0, 1100, 1101, 7, 3, 0, 0, 1101, 1102, 7, 9, 0, 0, 1102, 1103, 7, 0, 0, 0, 1103, 1104, 7, 15, 0, 0, 1104, 1105, 7, 11, 0, 0, 1105, 1106, 7, 5, 0, 0, 1106, 106, 1, 0, 0, 0, 1107, 1108, 7, 6, 0, 0, 1108, 1109, 7, 3, 0, 0, 1109, 1110, 7, 9, 0, 0, 1110, 1111, 7, 8, 0, 0, 1111, 1112, 7, 4, 0, 0, 1112, 1113, 7, 3, 0, 0, 1113, 108, 1, 0, 0, 0, 1114, 1115, 7, 6, 0, 0, 1115, 1116, 7, 3, 0, 0, 1116, 1117, 7, 9, 0, 0, 1117, 1118, 7, 8, 0, 0, 1118, 1119, 7, 4, 0, 0, 1119, 1120, 7, 3, 0, 0, 1120, 1121, 7, 10, 0, 0, 1121, 110, 1, 0, 0, 0, 1122, 1123, 7, 6, 0, 0, 1123, 1124, 7, 3, 0, 0, 1124, 1125, 7, 11, 0, 0, 1125, 1126, 7, 3, 0, 0, 1126, 1127, 7, 5, 0, 0, 1127, 1128, 7, 3, 0, 0, 1128, 112, 1, 0, 0, 0, 1129, 1130, 7, 6, 0, 0, 1130, 1131, 7, 3, 0, 0, 1131, 1132, 7, 4, 0, 0, 1132, 1133, 7, 12, 0, 0, 1133, 114, 1, 0, 0, 0, 1134, 1135, 7, 6, 0, 0, 1135, 1136, 7, 3, 0, 0, 1136, 1137, 7, 2, 0, 0, 1137, 1138, 7, 14, 0, 0, 1138, 116, 1, 0, 0, 0, 1139, 1140, 7, 6, 0, 0, 1140, 1141, 7, 3, 0, 0, 1141, 1142, 7, 2, 0, 0, 1142, 1143, 7, 14, 0, 0, 1143, 1144, 7, 10, 0, 0, 1144, 1145, 7, 8, 0, 0, 1145, 1146, 7, 1, 0, 0, 1146, 1147, 7, 3, 0, 0, 1147, 118, 1, 0, 0, 0, 1148, 1149, 7, 6, 0, 0, 1149, 1150, 7, 3, 0, 0, 1150, 1151, 7, 2, 0, 0, 1151, 1152, 7, 14, 0, 0, 1152, 1153, 7, 10, 0, 0, 1153, 1154, 7, 8, 0, 0, 1154, 1155, 7, 20, 0, 0, 1155, 1156, 7, 5, 0, 0, 1156, 1157, 7, 17, 0, 0, 1157, 1158, 7, 10, 0, 0, 1158, 120, 1, 0, 0, 0, 1159, 1160, 7, 6, 0, 0, 1160, 1161, 7, 3, 0, 0, 1161, 1162, 7, 5, 0, 0, 1162, 1163, 7, 3, 0, 0, 1163, 1164, 7, 10, 0, 0, 1164, 1165, 7, 7, 0, 0, 1165, 1166, 7, 8, 0, 0, 1166, 1167, 7, 4, 0, 0, 1167, 1168, 7, 8, 0, 0, 1168, 1169, 7, 2, 0, 0, 1169, 1170, 7, 5, 0, 0, 1170, 1171, 7, 8, 0, 0, 1171, 1172, 7, 14, 0, 0, 1172, 122, 1, 0, 0, 0, 1173, 1174, 7, 6, 0, 0, 1174, 1175, 7, 8, 0, 0, 1175, 1176, 7, 2, 0, 0, 1176, 1177, 7, 5, 0, 0, 1177, 1178, 7, 8, 0, 0, 1178, 1179, 7, 4, 0, 0, 1179, 1180, 7, 14, 0, 0, 1180, 1181, 7, 5, 0, 0, 1181, 124, 1, 0, 0, 0, 1182, 1183, 7, 6, 0, 0, 1183, 1184, 7, 8, 0, 0, 1184, 1185, 7, 2, 0, 0, 1185, 1186, 7, 5, 0, 0, 1186, 1187, 7, 10, 0, 0, 1187, 1188, 7, 8, 0, 0, 1188, 1189, 7, 1, 0, 0, 1189, 1190, 7, 15, 0, 0, 1190, 1191, 7, 5, 0, 0, 1191, 1192, 7, 3, 0, 0, 1192, 1193, 7, 6, 0, 0, 1193, 126, 1, 0, 0, 0, 1194, 1195, 7, 6, 0, 0, 1195, 1196, 7, 17, 0, 0, 1196, 128, 1, 0, 0, 0, 1197, 1198, 7, 6, 0, 0, 1198, 1199, 7, 17, 0, 0, 1199, 1200, 7, 15, 0, 0, 1200, 1201, 7, 1, 0, 0, 1201, 1202, 7, 11, 0, 0, 1202, 1203, 7, 3, 0, 0, 1203, 130, 1, 0, 0, 0, 1204, 1205, 7, 6, 0, 0, 1205, 1206, 7, 10, 0, 0, 1206, 1207, 7, 17, 0, 0, 1207, 1208, 7, 20, 0, 0, 1208, 132, 1, 0, 0, 0, 1209, 1210, 7, 3, 0, 0, 1210, 1211, 7, 11, 0, 0, 1211, 1212, 7, 2, 0, 0, 1212, 1213, 7, 3, 0, 0, 1213, 134, 1, 0, 0, 0, 1214, 1215, 7, 3, 0, 0, 1215, 1216, 7, 7, 0, 0, 1216, 1217, 7, 20, 0, 0, 1217, 1218, 7, 5, 0, 0, 1218, 1219, 7, 12, 0, 0, 1219, 136, 1, 0, 0, 0, 1220, 1221, 7, 3, 0, 0, 1221, 1222, 7, 11, 0, 0, 1222, 1223, 7, 2, 0, 0, 1223, 1224, 7, 3, 0, 0, 1224, 1225, 7, 8, 0, 0, 1225, 1226, 7, 9, 0, 0, 1226, 138, 1, 0, 0, 0, 1227, 1228, 7, 3, 0, 0, 1228, 1229, 7, 4, 0, 0, 1229, 1230, 7, 14, 0, 0, 1230, 1231, 7, 17, 0, 0, 1231, 1232, 7, 6, 0, 0, 1232, 1233, 7, 8, 0, 0, 1233, 1234, 7, 4, 0, 0, 1234, 1235, 7, 18, 0, 0, 1235, 140, 1, 0, 0, 0, 1236, 1237, 7, 3, 0, 0, 1237, 1238, 7, 4, 0, 0, 1238, 1239, 7, 6, 0, 0, 1239, 142, 1, 0, 0, 0, 1240, 1241, 7, 3, 0, 0, 1241, 1242, 7, 10, 0, 0, 1242, 1243, 7, 10, 0, 0, 1243, 1244, 7, 17, 0, 0, 1244, 1245, 7, 10, 0, 0, 1245, 144, 1, 0, 0, 0, 1246, 1247, 7, 3, 0, 0, 1247, 1248, 7, 2, 0, 0, 1248, 1249, 7, 14, 0, 0, 1249, 1250, 7, 0, 0, 0, 1250, 1251, 7, 20, 0, 0, 1251, 1252, 7, 3, 0, 0, 1252, 146, 1, 0, 0, 0, 1253, 1254, 7, 3, 0, 0, 1254, 1255, 7, 21, 0, 0, 1255, 1256, 7, 14, 0, 0, 1256, 1257, 7, 3, 0, 0, 1257, 1258, 7, 20, 0, 0, 1258, 1259, 7, 5, 0, 0, 1259, 148, 1, 0, 0, 0, 1260, 1261, 7, 3, 0, 0, 1261, 1262, 7, 21, 0, 0, 1262, 1263, 7, 14, 0, 0, 1263, 1264, 7, 11, 0, 0, 1264, 1265, 7, 15, 0, 0, 1265, 1266, 7, 6, 0, 0, 1266, 1267, 7, 8, 0, 0, 1267, 1268, 7, 4, 0, 0, 1268, 1269, 7, 18, 0, 0, 1269, 150, 1, 0, 0, 0, 1270, 1271, 7, 3, 0, 0, 1271, 1272, 7, 21, 0, 0, 1272, 1273, 7, 3, 0, 0, 1273, 1274, 7, 14, 0, 0, 1274, 1275, 7, 15, 0, 0, 1275, 1276, 7, 5, 0, 0, 1276, 1277, 7, 3, 0, 0, 1277, 152, 1, 0, 0, 0, 1278, 1279, 7, 3, 0, 0, 1279, 1280, 7, 21, 0, 0, 1280, 1281, 7, 8, 0, 0, 1281, 1282, 7, 2, 0, 0, 1282, 1283, 7, 5, 0, 0, 1283, 1284, 7, 2, 0, 0, 1284, 154, 1, 0, 0, 0, 1285, 1286, 7, 3, 0, 0, 1286, 1287, 7, 21, 0, 0, 1287, 1288, 7, 20, 0, 0, 1288, 1289, 7, 11, 0, 0, 1289, 1290, 7, 0, 0, 0, 1290, 1291, 7, 8, 0, 0, 1291, 1292, 7, 4, 0, 0, 1292, 156, 1, 0, 0, 0, 1293, 1294, 7, 3, 0, 0, 1294, 1295, 7, 21, 0, 0, 1295, 1296, 7, 5, 0, 0, 1296, 1297, 7, 10, 0, 0, 1297, 1298, 7, 0, 0, 0, 1298, 1299, 7, 14, 0, 0, 1299, 1300, 7, 5, 0, 0, 1300, 158, 1, 0, 0, 0, 1301, 1302, 7, 9, 0, 0, 1302, 1303, 7, 0, 0, 0, 1303, 1304, 7, 11, 0, 0, 1304, 1305, 7, 2, 0, 0, 1305, 1306, 7, 3, 0, 0, 1306, 160, 1, 0, 0, 0, 1307, 1308, 7, 9, 0, 0, 1308, 1309, 7, 3, 0, 0, 1309, 1310, 7, 5, 0, 0, 1310, 1311, 7, 14, 0, 0, 1311, 1312, 7, 16, 0, 0, 1312, 162, 1, 0, 0, 0, 1313, 1314, 7, 9, 0, 0, 1314, 1315, 7, 8, 0, 0, 1315, 1316, 7, 11, 0, 0, 1316, 1317, 7, 5, 0, 0, 1317, 1318, 7, 3, 0, 0, 1318, 1319, 7, 10, 0, 0, 1319, 164, 1, 0, 0, 0, 1320, 1321, 7, 9, 0, 0, 1321, 1322, 7, 8, 0, 0, 1322, 1323, 7, 4, 0, 0, 1323, 1324, 7, 0, 0, 0, 1324, 1325, 7, 11, 0, 0, 1325, 166, 1, 0, 0, 0, 1326, 1327, 7, 9, 0, 0, 1327, 1328, 7, 8, 0, 0, 1328, 1329, 7, 10, 0, 0, 1329, 1330, 7, 2, 0, 0, 1330, 1331, 7, 5, 0, 0, 1331, 168, 1, 0, 0, 0, 1332, 1333, 7, 9, 0, 0, 1333, 1334, 7, 17, 0, 0, 1334, 1335, 7, 11, 0, 0, 1335, 1336, 7, 11, 0, 0, 1336, 1337, 7, 17, 0, 0, 1337, 1338, 7, 19, 0, 0, 1338, 1339, 7, 8, 0, 0, 1339, 1340, 7, 4, 0, 0, 1340, 1341, 7, 18, 0, 0, 1341, 170, 1, 0, 0, 0, 1342, 1343, 7, 9, 0, 0, 1343, 1344, 7, 17, 0, 0, 1344, 1345, 7, 10, 0, 0, 1345, 172, 1, 0, 0, 0, 1346, 1347, 7, 9, 0, 0, 1347, 1348, 7, 17, 0, 0, 1348, 1349, 7, 10, 0, 0, 1349, 1350, 7, 7, 0, 0, 1350, 1351, 7, 0, 0, 0, 1351, 1352, 7, 5, 0, 0, 1352, 174, 1, 0, 0, 0, 1353, 1354, 7, 9, 0, 0, 1354, 1355, 7, 10, 0, 0, 1355, 1356, 7, 17, 0, 0, 1356, 1357, 7, 7, 0, 0, 1357, 176, 1, 0, 0, 0, 1358, 1359, 7, 9, 0, 0, 1359, 1360, 7, 15, 0, 0, 1360, 1361, 7, 11, 0, 0, 1361, 1362, 7, 11, 0, 0, 1362, 178, 1, 0, 0, 0, 1363, 1364, 7, 9, 0, 0, 1364, 1365, 7, 15, 0, 0, 1365, 1366, 7, 4, 0, 0, 1366, 1367, 7, 14, 0, 0, 1367, 1368, 7, 5, 0, 0, 1368, 1369, 7, 8, 0, 0, 1369, 1370, 7, 17, 0, 0, 1370, 1371, 7, 4, 0, 0, 1371, 180, 1, 0, 0, 0, 1372, 1373, 7, 9, 0, 0, 1373, 1374, 7, 15, 0, 0, 1374, 1375, 7, 4, 0, 0, 1375, 1376, 7, 14, 0, 0, 1376, 1377, 7, 5, 0, 0, 1377, 1378, 7, 8, 0, 0, 1378, 1379, 7, 17, 0, 0, 1379, 1380, 7, 4, 0, 0, 1380, 1381, 7, 2, 0, 0, 1381, 182, 1, 0, 0, 0, 1382, 1383, 7, 18, 0, 0, 1383, 1384, 7, 10, 0, 0, 1384, 1385, 7, 0, 0, 0, 1385, 1386, 7, 14, 0, 0, 1386, 1387, 7, 3, 0, 0, 1387, 184, 1, 0, 0, 0, 1388, 1389, 7, 18, 0, 0, 1389, 1390, 7, 10, 0, 0, 1390, 1391, 7, 0, 0, 0, 1391, 1392, 7, 4, 0, 0, 1392, 1393, 7, 5, 0, 0, 1393, 186, 1, 0, 0, 0, 1394, 1395, 7, 18, 0, 0, 1395, 1396, 7, 10, 0, 0, 1396, 1397, 7, 0, 0, 0, 1397, 1398, 7, 4, 0, 0, 1398, 1399, 7, 5, 0, 0, 1399, 1400, 7, 3, 0, 0, 1400, 1401, 7, 6, 0, 0, 1401, 188, 1, 0, 0, 0, 1402, 1403, 7, 18, 0, 0, 1403, 1404, 7, 10, 0, 0, 1404, 1405, 7, 0, 0, 0, 1405, 1406, 7, 4, 0, 0, 1406, 1407, 7, 5, 0, 0, 1407, 1408, 7, 2, 0, 0, 1408, 190, 1, 0, 0, 0, 1409, 1410, 7, 18, 0, 0, 1410, 1411, 7, 10, 0, 0, 1411, 1412, 7, 0, 0, 0, 1412, 1413, 7, 20, 0, 0, 1413, 1414, 7, 16, 0, 0, 1414, 1415, 7, 22, 0, 0, 1415, 1416, 7, 8, 0, 0, 1416, 1417, 7, 13, 0, 0, 1417, 192, 1, 0, 0, 0, 1418, 1419, 7, 18, 0, 0, 1419, 1420, 7, 10, 0, 0, 1420, 1421, 7, 17, 0, 0, 1421, 1422, 7, 15, 0, 0, 1422, 1423, 7, 20, 0, 0, 1423, 194, 1, 0, 0, 0, 1424, 1425, 7, 18, 0, 0, 1425, 1426, 7, 10, 0, 0, 1426, 1427, 7, 17, 0, 0, 1427, 1428, 7, 15, 0, 0, 1428, 1429, 7, 20, 0, 0, 1429, 1430, 7, 8, 0, 0, 1430, 1431, 7, 4, 0, 0, 1431, 1432, 7, 18, 0, 0, 1432, 196, 1, 0, 0, 0, 1433, 1434, 7, 18, 0, 0, 1434, 1435, 7, 10, 0, 0, 1435, 1436, 7, 17, 0, 0, 1436, 1437, 7, 15, 0, 0, 1437, 1438, 7, 20, 0, 0, 1438, 1439, 7, 2, 0, 0, 1439, 198, 1, 0, 0, 0, 1440, 1441, 7, 16, 0, 0, 1441, 1442, 7, 0, 0, 0, 1442, 1443, 7, 22, 0, 0, 1443, 1444, 7, 8, 0, 0, 1444, 1445, 7, 4, 0, 0, 1445, 1446, 7, 18, 0, 0, 1446, 200, 1, 0, 0, 0, 1447, 1448, 7, 16, 0, 0, 1448, 1449, 7, 17, 0, 0, 1449, 1450, 7, 15, 0, 0, 1450, 1451, 7, 10, 0, 0, 1451, 202, 1, 0, 0, 0, 1452, 1453, 7, 8, 0, 0, 1453, 1454, 7, 9, 0, 0, 1454, 204, 1, 0, 0, 0, 1455, 1456, 7, 8, 0, 0, 1456, 1457, 7, 18, 0, 0, 1457, 1458, 7, 4, 0, 0, 1458, 1459, 7, 17, 0, 0, 1459, 1460, 7, 10, 0, 0, 1460, 1461, 7, 3, 0, 0, 1461, 206, 1, 0, 0, 0, 1462, 1463, 7, 8, 0, 0, 1463, 1464, 7, 7, 0, 0, 1464, 1465, 7, 7, 0, 0, 1465, 1466, 7, 3, 0, 0, 1466, 1467, 7, 6, 0, 0, 1467, 1468, 7, 8, 0, 0, 1468, 1469, 7, 0, 0, 0, 1469, 1470, 7, 5, 0, 0, 1470, 1471, 7, 3, 0, 0, 1471, 208, 1, 0, 0, 0, 1472, 1473, 7, 8, 0, 0, 1473, 1474, 7, 4, 0, 0, 1474, 210, 1, 0, 0, 0, 1475, 1476, 7, 8, 0, 0, 1476, 1477, 7, 4, 0, 0, 1477, 1478, 7, 14, 0, 0, 1478, 1479, 7, 11, 0, 0, 1479, 1480, 7, 15, 0, 0, 1480, 1481, 7, 6, 0, 0, 1481, 1482, 7, 8, 0, 0, 1482, 1483, 7, 4, 0, 0, 1483, 1484, 7, 18, 0, 0, 1484, 212, 1, 0, 0, 0, 1485, 1486, 7, 8, 0, 0, 1486, 1487, 7, 4, 0, 0, 1487, 1488, 7, 8, 0, 0, 1488, 1489, 7, 5, 0, 0, 1489, 1490, 7, 8, 0, 0, 1490, 1491, 7, 0, 0, 0, 1491, 1492, 7, 11, 0, 0, 1492, 214, 1, 0, 0, 0, 1493, 1494, 7, 8, 0, 0, 1494, 1495, 7, 4, 0, 0, 1495, 1496, 7, 4, 0, 0, 1496, 1497, 7, 3, 0, 0, 1497, 1498, 7, 10, 0, 0, 1498, 216, 1, 0, 0, 0, 1499, 1500, 7, 8, 0, 0, 1500, 1501, 7, 4, 0, 0, 1501, 1502, 7, 20, 0, 0, 1502, 1503, 7, 15, 0, 0, 1503, 1504, 7, 5, 0, 0, 1504, 218, 1, 0, 0, 0, 1505, 1506, 7, 8, 0, 0, 1506, 1507, 7, 4, 0, 0, 1507, 1508, 7, 2, 0, 0, 1508, 1509, 7, 3, 0, 0, 1509, 1510, 7, 10, 0, 0, 1510, 1511, 7, 5, 0, 0, 1511, 220, 1, 0, 0, 0, 1512, 1513, 7, 8, 0, 0, 1513, 1514, 7, 4, 0, 0, 1514, 1515, 7, 5, 0, 0, 1515, 1516, 7, 3, 0, 0, 1516, 1517, 7, 10, 0, 0, 1517, 1518, 7, 2, 0, 0, 1518, 1519, 7, 3, 0, 0, 1519, 1520, 7, 14, 0, 0, 1520, 1521, 7, 5, 0, 0, 1521, 222, 1, 0, 0, 0, 1522, 1523, 7, 8, 0, 0, 1523, 1524, 7, 4, 0, 0, 1524, 1525, 7, 5, 0, 0, 1525, 1526, 7, 3, 0, 0, 1526, 1527, 7, 10, 0, 0, 1527, 1528, 7, 22, 0, 0, 1528, 1529, 7, 0, 0, 0, 1529, 1530, 7, 11, 0, 0, 1530, 224, 1, 0, 0, 0, 1531, 1532, 7, 8, 0, 0, 1532, 1533, 7, 4, 0, 0, 1533, 1534, 7, 5, 0, 0, 1534, 1535, 7, 17, 0, 0, 1535, 226, 1, 0, 0, 0, 1536, 1537, 7, 8, 0, 0, 1537, 1538, 7, 4, 0, 0, 1538, 1539, 7, 22, 0, 0, 1539, 1540, 7, 17, 0, 0, 1540, 1541, 7, 23, 0, 0, 1541, 1542, 7, 3, 0, 0, 1542, 1543, 7, 10, 0, 0, 1543, 228, 1, 0, 0, 0, 1544, 1545, 7, 8, 0, 0, 1545, 1546, 7, 17, 0, 0, 1546, 230, 1, 0, 0, 0, 1547, 1548, 7, 8, 0, 0, 1548, 1549, 7, 2, 0, 0, 1549, 232, 1, 0, 0, 0, 1550, 1551, 7, 8, 0, 0, 1551, 1552, 7, 2, 0, 0, 1552, 1553, 7, 17, 0, 0, 1553, 1554, 7, 11, 0, 0, 1554, 1555, 7, 0, 0, 0, 1555, 1556, 7, 5, 0, 0, 1556, 1557, 7, 8, 0, 0, 1557, 1558, 7, 17, 0, 0, 1558, 1559, 7, 4, 0, 0, 1559, 234, 1, 0, 0, 0, 1560, 1561, 7, 8, 0, 0, 1561, 1562, 7, 5, 0, 0, 1562, 1563, 7, 3, 0, 0, 1563, 1564, 7, 10, 0, 0, 1564, 1565, 7, 0, 0, 0, 1565, 1566, 7, 5, 0, 0, 1566, 1567, 7, 3, 0, 0, 1567, 236, 1, 0, 0, 0, 1568, 1569, 7, 24, 0, 0, 1569, 1570, 7, 17, 0, 0, 1570, 1571, 7, 8, 0, 0, 1571, 1572, 7, 4, 0, 0, 1572, 238, 1, 0, 0, 0, 1573, 1574, 7, 24, 0, 0, 1574, 1575, 7, 2, 0, 0, 1575, 1576, 7, 17, 0, 0, 1576, 1577, 7, 4, 0, 0, 1577, 240, 1, 0, 0, 0, 1578, 1579, 7, 24, 0, 0, 1579, 1580, 7, 2, 0, 0, 1580, 1581, 7, 17, 0, 0, 1581, 1582, 7, 4, 0, 0, 1582, 1583, 5, 95, 0, 0, 1583, 1584, 7, 0, 0, 0, 1584, 1585, 7, 10, 0, 0, 1585, 1586, 7, 10, 0, 0, 1586, 1587, 7, 0, 0, 0, 1587, 1588, 7, 12, 0, 0, 1588, 242, 1, 0, 0, 0, 1589, 1590, 7, 24, 0, 0, 1590, 1591, 7, 2, 0, 0, 1591, 1592, 7, 17, 0, 0, 1592, 1593, 7, 4, 0, 0, 1593, 1594, 5, 95, 0, 0, 1594, 1595, 7, 3, 0, 0, 1595, 1596, 7, 21, 0, 0, 1596, 1597, 7, 8, 0, 0, 1597, 1598, 7, 2, 0, 0, 1598, 1599, 7, 5, 0, 0, 1599, 1600, 7, 2, 0, 0, 1600, 244, 1, 0, 0, 0, 1601, 1602, 7, 24, 0, 0, 1602, 1603, 7, 2, 0, 0, 1603, 1604, 7, 17, 0, 0, 1604, 1605, 7, 4, 0, 0, 1605, 1606, 5, 95, 0, 0, 1606, 1607, 7, 17, 0, 0, 1607, 1608, 7, 1, 0, 0, 1608, 1609, 7, 24, 0, 0, 1609, 1610, 7, 3, 0, 0, 1610, 1611, 7, 14, 0, 0, 1611, 1612, 7, 5, 0, 0, 1612, 246, 1, 0, 0, 0, 1613, 1614, 7, 24, 0, 0, 1614, 1615, 7, 2, 0, 0, 1615, 1616, 7, 17, 0, 0, 1616, 1617, 7, 4, 0, 0, 1617, 1618, 5, 95, 0, 0, 1618, 1619, 7, 25, 0, 0, 1619, 1620, 7, 15, 0, 0, 1620, 1621, 7, 3, 0, 0, 1621, 1622, 7, 10, 0, 0, 1622, 1623, 7, 12, 0, 0, 1623, 248, 1, 0, 0, 0, 1624, 1625, 7, 24, 0, 0, 1625, 1626, 7, 2, 0, 0, 1626, 1627, 7, 17, 0, 0, 1627, 1628, 7, 4, 0, 0, 1628, 1629, 5, 95, 0, 0, 1629, 1630, 7, 5, 0, 0, 1630, 1631, 7, 0, 0, 0, 1631, 1632, 7, 1, 0, 0, 1632, 1633, 7, 11, 0, 0, 1633, 1634, 7, 3, 0, 0, 1634, 250, 1, 0, 0, 0, 1635, 1636, 7, 24, 0, 0, 1636, 1637, 7, 2, 0, 0, 1637, 1638, 7, 17, 0, 0, 1638, 1639, 7, 4, 0, 0, 1639, 1640, 5, 95, 0, 0, 1640, 1641, 7, 22, 0, 0, 1641, 1642, 7, 0, 0, 0, 1642, 1643, 7, 11, 0, 0, 1643, 1644, 7, 15, 0, 0, 1644, 1645, 7, 3, 0, 0, 1645, 252, 1, 0, 0, 0, 1646, 1647, 7, 23, 0, 0, 1647, 1648, 7, 3, 0, 0, 1648, 1649, 7, 3, 0, 0, 1649, 1650, 7, 20, 0, 0, 1650, 254, 1, 0, 0, 0, 1651, 1652, 7, 23, 0, 0, 1652, 1653, 7, 3, 0, 0, 1653, 1654, 7, 12, 0, 0, 1654, 256, 1, 0, 0, 0, 1655, 1656, 7, 23, 0, 0, 1656, 1657, 7, 3, 0, 0, 1657, 1658, 7, 12, 0, 0, 1658, 1659, 7, 2, 0, 0, 1659, 258, 1, 0, 0, 0, 1660, 1661, 7, 11, 0, 0, 1661, 1662, 7, 0, 0, 0, 1662, 1663, 7, 4, 0, 0, 1663, 1664, 7, 18, 0, 0, 1664, 1665, 7, 15, 0, 0, 1665, 1666, 7, 0, 0, 0, 1666, 1667, 7, 18, 0, 0, 1667, 1668, 7, 3, 0, 0, 1668, 260, 1, 0, 0, 0, 1669, 1670, 7, 11, 0, 0, 1670, 1671, 7, 0, 0, 0, 1671, 1672, 7, 2, 0, 0, 1672, 1673, 7, 5, 0, 0, 1673, 262, 1, 0, 0, 0, 1674, 1675, 7, 11, 0, 0, 1675, 1676, 7, 0, 0, 0, 1676, 1677, 7, 5, 0, 0, 1677, 1678, 7, 3, 0, 0, 1678, 1679, 7, 10, 0, 0, 1679, 1680, 7, 0, 0, 0, 1680, 1681, 7, 11, 0, 0, 1681, 264, 1, 0, 0, 0, 1682, 1683, 7, 11, 0, 0, 1683, 1684, 7, 3, 0, 0, 1684, 1685, 7, 0, 0, 0, 1685, 1686, 7, 6, 0, 0, 1686, 1687, 7, 8, 0, 0, 1687, 1688, 7, 4, 0, 0, 1688, 1689, 7, 18, 0, 0, 1689, 266, 1, 0, 0, 0, 1690, 1691, 7, 11, 0, 0, 1691, 1692, 7, 3, 0, 0, 1692, 1693, 7, 0, 0, 0, 1693, 1694, 7, 22, 0, 0, 1694, 1695, 7, 3, 0, 0, 1695, 268, 1, 0, 0, 0, 1696, 1697, 7, 11, 0, 0, 1697, 1698, 7, 3, 0, 0, 1698, 1699, 7, 9, 0, 0, 1699, 1700, 7, 5, 0, 0, 1700, 270, 1, 0, 0, 0, 1701, 1702, 7, 11, 0, 0, 1702, 1703, 7, 3, 0, 0, 1703, 1704, 7, 22, 0, 0, 1704, 1705, 7, 3, 0, 0, 1705, 1706, 7, 11, 0, 0, 1706, 272, 1, 0, 0, 0, 1707, 1708, 7, 11, 0, 0, 1708, 1709, 7, 8, 0, 0, 1709, 1710, 7, 23, 0, 0, 1710, 1711, 7, 3, 0, 0, 1711, 274, 1, 0, 0, 0, 1712, 1713, 7, 11, 0, 0, 1713, 1714, 7, 8, 0, 0, 1714, 1715, 7, 7, 0, 0, 1715, 1716, 7, 8, 0, 0, 1716, 1717, 7, 5, 0, 0, 1717, 276, 1, 0, 0, 0, 1718, 1719, 7, 11, 0, 0, 1719, 1720, 7, 8, 0, 0, 1720, 1721, 7, 2, 0, 0, 1721, 1722, 7, 5, 0, 0, 1722, 1723, 7, 0, 0, 0, 1723, 1724, 7, 18, 0, 0, 1724, 1725, 7, 18, 0, 0, 1725, 278, 1, 0, 0, 0, 1726, 1727, 7, 11, 0, 0, 1727, 1728, 7, 17, 0, 0, 1728, 1729, 7, 14, 0, 0, 1729, 1730, 7, 0, 0, 0, 1730, 1731, 7, 11, 0, 0, 1731, 280, 1, 0, 0, 0, 1732, 1733, 7, 11, 0, 0, 1733, 1734, 7, 17, 0, 0, 1734, 1735, 7, 14, 0, 0, 1735, 1736, 7, 0, 0, 0, 1736, 1737, 7, 11, 0, 0, 1737, 1738, 7, 5, 0, 0, 1738, 1739, 7, 8, 0, 0, 1739, 1740, 7, 7, 0, 0, 1740, 1741, 7, 3, 0, 0, 1741, 282, 1, 0, 0, 0, 1742, 1743, 7, 11, 0, 0, 1743, 1744, 7, 17, 0, 0, 1744, 1745, 7, 14, 0, 0, 1745, 1746, 7, 0, 0, 0, 1746, 1747, 7, 11, 0, 0, 1747, 1748, 7, 5, 0, 0, 1748, 1749, 7, 8, 0, 0, 1749, 1750, 7, 7, 0, 0, 1750, 1751, 7, 3, 0, 0, 1751, 1752, 7, 2, 0, 0, 1752, 1753, 7, 5, 0, 0, 1753, 1754, 7, 0, 0, 0, 1754, 1755, 7, 7, 0, 0, 1755, 1756, 7, 20, 0, 0, 1756, 284, 1, 0, 0, 0, 1757, 1758, 7, 11, 0, 0, 1758, 1759, 7, 17, 0, 0, 1759, 1760, 7, 18, 0, 0, 1760, 1761, 7, 8, 0, 0, 1761, 1762, 7, 14, 0, 0, 1762, 1763, 7, 0, 0, 0, 1763, 1764, 7, 11, 0, 0, 1764, 286, 1, 0, 0, 0, 1765, 1766, 7, 11, 0, 0, 1766, 1767, 7, 17, 0, 0, 1767, 1768, 7, 17, 0, 0, 1768, 1769, 7, 20, 0, 0, 1769, 288, 1, 0, 0, 0, 1770, 1771, 7, 7, 0, 0, 1771, 1772, 7, 0, 0, 0, 1772, 1773, 7, 20, 0, 0, 1773, 290, 1, 0, 0, 0, 1774, 1775, 7, 7, 0, 0, 1775, 1776, 7, 0, 0, 0, 1776, 1777, 7, 5, 0, 0, 1777, 1778, 7, 14, 0, 0, 1778, 1779, 7, 16, 0, 0, 1779, 292, 1, 0, 0, 0, 1780, 1781, 7, 7, 0, 0, 1781, 1782, 7, 0, 0, 0, 1782, 1783, 7, 5, 0, 0, 1783, 1784, 7, 14, 0, 0, 1784, 1785, 7, 16, 0, 0, 1785, 1786, 7, 3, 0, 0, 1786, 1787, 7, 6, 0, 0, 1787, 294, 1, 0, 0, 0, 1788, 1789, 7, 7, 0, 0, 1789, 1790, 7, 0, 0, 0, 1790, 1791, 7, 5, 0, 0, 1791, 1792, 7, 14, 0, 0, 1792, 1793, 7, 16, 0, 0, 1793, 1794, 7, 3, 0, 0, 1794, 1795, 7, 2, 0, 0, 1795, 296, 1, 0, 0, 0, 1796, 1797, 7, 7, 0, 0, 1797, 1798, 7, 0, 0, 0, 1798, 1799, 7, 5, 0, 0, 1799, 1800, 7, 14, 0, 0, 1800, 1801, 7, 16, 0, 0, 1801, 1802, 5, 95, 0, 0, 1802, 1803, 7, 10, 0, 0, 1803, 1804, 7, 3, 0, 0, 1804, 1805, 7, 14, 0, 0, 1805, 1806, 7, 17, 0, 0, 1806, 1807, 7, 18, 0, 0, 1807, 1808, 7, 4, 0, 0, 1808, 1809, 7, 8, 0, 0, 1809, 1810, 7, 13, 0, 0, 1810, 1811, 7, 3, 0, 0, 1811, 298, 1, 0, 0, 0, 1812, 1813, 7, 7, 0, 0, 1813, 1814, 7, 0, 0, 0, 1814, 1815, 7, 5, 0, 0, 1815, 1816, 7, 3, 0, 0, 1816, 1817, 7, 10, 0, 0, 1817, 1818, 7, 8, 0, 0, 1818, 1819, 7, 0, 0, 0, 1819, 1820, 7, 11, 0, 0, 1820, 1821, 7, 8, 0, 0, 1821, 1822, 7, 13, 0, 0, 1822, 1823, 7, 3, 0, 0, 1823, 1824, 7, 6, 0, 0, 1824, 300, 1, 0, 0, 0, 1825, 1826, 7, 7, 0, 0, 1826, 1827, 7, 3, 0, 0, 1827, 1828, 7, 0, 0, 0, 1828, 1829, 7, 2, 0, 0, 1829, 1830, 7, 15, 0, 0, 1830, 1831, 7, 10, 0, 0, 1831, 1832, 7, 3, 0, 0, 1832, 1833, 7, 2, 0, 0, 1833, 302, 1, 0, 0, 0, 1834, 1835, 7, 7, 0, 0, 1835, 1836, 7, 3, 0, 0, 1836, 1837, 7, 10, 0, 0, 1837, 1838, 7, 18, 0, 0, 1838, 1839, 7, 3, 0, 0, 1839, 304, 1, 0, 0, 0, 1840, 1841, 7, 7, 0, 0, 1841, 1842, 7, 8, 0, 0, 1842, 1843, 7, 4, 0, 0, 1843, 1844, 7, 15, 0, 0, 1844, 1845, 7, 5, 0, 0, 1845, 1846, 7, 3, 0, 0, 1846, 306, 1, 0, 0, 0, 1847, 1848, 7, 7, 0, 0, 1848, 1849, 7, 17, 0, 0, 1849, 1850, 7, 4, 0, 0, 1850, 1851, 7, 5, 0, 0, 1851, 1852, 7, 16, 0, 0, 1852, 308, 1, 0, 0, 0, 1853, 1854, 7, 4, 0, 0, 1854, 1855, 7, 0, 0, 0, 1855, 1856, 7, 5, 0, 0, 1856, 1857, 7, 15, 0, 0, 1857, 1858, 7, 10, 0, 0, 1858, 1859, 7, 0, 0, 0, 1859, 1860, 7, 11, 0, 0, 1860, 310, 1, 0, 0, 0, 1861, 1862, 7, 4, 0, 0, 1862, 1863, 7, 3, 0, 0, 1863, 1864, 7, 2, 0, 0, 1864, 1865, 7, 5, 0, 0, 1865, 1866, 7, 3, 0, 0, 1866, 1867, 7, 6, 0, 0, 1867, 312, 1, 0, 0, 0, 1868, 1869, 7, 4, 0, 0, 1869, 1870, 7, 3, 0, 0, 1870, 1871, 7, 21, 0, 0, 1871, 1872, 7, 5, 0, 0, 1872, 314, 1, 0, 0, 0, 1873, 1874, 7, 4, 0, 0, 1874, 1875, 7, 9, 0, 0, 1875, 1876, 7, 14, 0, 0, 1876, 316, 1, 0, 0, 0, 1877, 1878, 7, 4, 0, 0, 1878, 1879, 7, 9, 0, 0, 1879, 1880, 7, 6, 0, 0, 1880, 318, 1, 0, 0, 0, 1881, 1882, 7, 4, 0, 0, 1882, 1883, 7, 9, 0, 0, 1883, 1884, 7, 23, 0, 0, 1884, 1885, 7, 14, 0, 0, 1885, 320, 1, 0, 0, 0, 1886, 1887, 7, 4, 0, 0, 1887, 1888, 7, 9, 0, 0, 1888, 1889, 7, 23, 0, 0, 1889, 1890, 7, 6, 0, 0, 1890, 322, 1, 0, 0, 0, 1891, 1892, 7, 4, 0, 0, 1892, 1893, 7, 17, 0, 0, 1893, 324, 1, 0, 0, 0, 1894, 1895, 7, 4, 0, 0, 1895, 1896, 7, 17, 0, 0, 1896, 1897, 7, 4, 0, 0, 1897, 1898, 7, 3, 0, 0, 1898, 326, 1, 0, 0, 0, 1899, 1900, 7, 4, 0, 0, 1900, 1901, 7, 17, 0, 0, 1901, 1902, 7, 10, 0, 0, 1902, 1903, 7, 7, 0, 0, 1903, 1904, 7, 0, 0, 0, 1904, 1905, 7, 11, 0, 0, 1905, 1906, 7, 8, 0, 0, 1906, 1907, 7, 13, 0, 0, 1907, 1908, 7, 3, 0, 0, 1908, 328, 1, 0, 0, 0, 1909, 1910, 7, 4, 0, 0, 1910, 1911, 7, 17, 0, 0, 1911, 1912, 7, 5, 0, 0, 1912, 330, 1, 0, 0, 0, 1913, 1914, 7, 4, 0, 0, 1914, 1915, 7, 15, 0, 0, 1915, 1916, 7, 11, 0, 0, 1916, 1917, 7, 11, 0, 0, 1917, 332, 1, 0, 0, 0, 1918, 1919, 7, 4, 0, 0, 1919, 1920, 7, 15, 0, 0, 1920, 1921, 7, 11, 0, 0, 1921, 1922, 7, 11, 0, 0, 1922, 1923, 7, 8, 0, 0, 1923, 1924, 7, 9, 0, 0, 1924, 334, 1, 0, 0, 0, 1925, 1926, 7, 4, 0, 0, 1926, 1927, 7, 15, 0, 0, 1927, 1928, 7, 11, 0, 0, 1928, 1929, 7, 11, 0, 0, 1929, 1930, 7, 2, 0, 0, 1930, 336, 1, 0, 0, 0, 1931, 1932, 7, 17, 0, 0, 1932, 1933, 7, 1, 0, 0, 1933, 1934, 7, 24, 0, 0, 1934, 1935, 7, 3, 0, 0, 1935, 1936, 7, 14, 0, 0, 1936, 1937, 7, 5, 0, 0, 1937, 338, 1, 0, 0, 0, 1938, 1939, 7, 17, 0, 0, 1939, 1940, 7, 9, 0, 0, 1940, 340, 1, 0, 0, 0, 1941, 1942, 7, 17, 0, 0, 1942, 1943, 7, 9, 0, 0, 1943, 1944, 7, 9, 0, 0, 1944, 1945, 7, 2, 0, 0, 1945, 1946, 7, 3, 0, 0, 1946, 1947, 7, 5, 0, 0, 1947, 342, 1, 0, 0, 0, 1948, 1949, 7, 17, 0, 0, 1949, 1950, 7, 7, 0, 0, 1950, 1951, 7, 8, 0, 0, 1951, 1952, 7, 5, 0, 0, 1952, 344, 1, 0, 0, 0, 1953, 1954, 7, 17, 0, 0, 1954, 1955, 7, 4, 0, 0, 1955, 346, 1, 0, 0, 0, 1956, 1957, 7, 17, 0, 0, 1957, 1958, 7, 4, 0, 0, 1958, 1959, 7, 3, 0, 0, 1959, 348, 1, 0, 0, 0, 1960, 1961, 7, 17, 0, 0, 1961, 1962, 7, 4, 0, 0, 1962, 1963, 7, 11, 0, 0, 1963, 1964, 7, 12, 0, 0, 1964, 350, 1, 0, 0, 0, 1965, 1966, 7, 17, 0, 0, 1966, 1967, 7, 20, 0, 0, 1967, 1968, 7, 5, 0, 0, 1968, 1969, 7, 8, 0, 0, 1969, 1970, 7, 17, 0, 0, 1970, 1971, 7, 4, 0, 0, 1971, 352, 1, 0, 0, 0, 1972, 1973, 7, 17, 0, 0, 1973, 1974, 7, 10, 0, 0, 1974, 354, 1, 0, 0, 0, 1975, 1976, 7, 17, 0, 0, 1976, 1977, 7, 10, 0, 0, 1977, 1978, 7, 6, 0, 0, 1978, 1979, 7, 3, 0, 0, 1979, 1980, 7, 10, 0, 0, 1980, 356, 1, 0, 0, 0, 1981, 1982, 7, 17, 0, 0, 1982, 1983, 7, 10, 0, 0, 1983, 1984, 7, 6, 0, 0, 1984, 1985, 7, 8, 0, 0, 1985, 1986, 7, 4, 0, 0, 1986, 1987, 7, 0, 0, 0, 1987, 1988, 7, 11, 0, 0, 1988, 1989, 7, 8, 0, 0, 1989, 1990, 7, 5, 0, 0, 1990, 1991, 7, 12, 0, 0, 1991, 358, 1, 0, 0, 0, 1992, 1993, 7, 17, 0, 0, 1993, 1994, 7, 15, 0, 0, 1994, 1995, 7, 5, 0, 0, 1995, 1996, 7, 3, 0, 0, 1996, 1997, 7, 10, 0, 0, 1997, 360, 1, 0, 0, 0, 1998, 1999, 7, 17, 0, 0, 1999, 2000, 7, 15, 0, 0, 2000, 2001, 7, 5, 0, 0, 2001, 2002, 7, 20, 0, 0, 2002, 2003, 7, 15, 0, 0, 2003, 2004, 7, 5, 0, 0, 2004, 362, 1, 0, 0, 0, 2005, 2006, 7, 17, 0, 0, 2006, 2007, 7, 22, 0, 0, 2007, 2008, 7, 3, 0, 0, 2008, 2009, 7, 10, 0, 0, 2009, 364, 1, 0, 0, 0, 2010, 2011, 7, 17, 0, 0, 2011, 2012, 7, 22, 0, 0, 2012, 2013, 7, 3, 0, 0, 2013, 2014, 7, 10, 0, 0, 2014, 2015, 7, 9, 0, 0, 2015, 2016, 7, 11, 0, 0, 2016, 2017, 7, 17, 0, 0, 2017, 2018, 7, 19, 0, 0, 2018, 366, 1, 0, 0, 0, 2019, 2020, 7, 20, 0, 0, 2020, 2021, 7, 0, 0, 0, 2021, 2022, 7, 10, 0, 0, 2022, 2023, 7, 5, 0, 0, 2023, 2024, 7, 8, 0, 0, 2024, 2025, 7, 5, 0, 0, 2025, 2026, 7, 8, 0, 0, 2026, 2027, 7, 17, 0, 0, 2027, 2028, 7, 4, 0, 0, 2028, 368, 1, 0, 0, 0, 2029, 2030, 7, 20, 0, 0, 2030, 2031, 7, 0, 0, 0, 2031, 2032, 7, 10, 0, 0, 2032, 2033, 7, 5, 0, 0, 2033, 2034, 7, 8, 0, 0, 2034, 2035, 7, 5, 0, 0, 2035, 2036, 7, 8, 0, 0, 2036, 2037, 7, 17, 0, 0, 2037, 2038, 7, 4, 0, 0, 2038, 2039, 7, 2, 0, 0, 2039, 370, 1, 0, 0, 0, 2040, 2041, 7, 20, 0, 0, 2041, 2042, 7, 0, 0, 0, 2042, 2043, 7, 2, 0, 0, 2043, 2044, 7, 2, 0, 0, 2044, 2045, 7, 8, 0, 0, 2045, 2046, 7, 4, 0, 0, 2046, 2047, 7, 18, 0, 0, 2047, 372, 1, 0, 0, 0, 2048, 2049, 7, 20, 0, 0, 2049, 2050, 7, 0, 0, 0, 2050, 2051, 7, 2, 0, 0, 2051, 2052, 7, 5, 0, 0, 2052, 374, 1, 0, 0, 0, 2053, 2054, 7, 20, 0, 0, 2054, 2055, 7, 0, 0, 0, 2055, 2056, 7, 5, 0, 0, 2056, 2057, 7, 16, 0, 0, 2057, 376, 1, 0, 0, 0, 2058, 2059, 7, 20, 0, 0, 2059, 2060, 7, 0, 0, 0, 2060, 2061, 7, 5, 0, 0, 2061, 2062, 7, 5, 0, 0, 2062, 2063, 7, 3, 0, 0, 2063, 2064, 7, 10, 0, 0, 2064, 2065, 7, 4, 0, 0, 2065, 378, 1, 0, 0, 0, 2066, 2067, 7, 20, 0, 0, 2067, 2068, 7, 3, 0, 0, 2068, 2069, 7, 10, 0, 0, 2069, 380, 1, 0, 0, 0, 2070, 2071, 7, 20, 0, 0, 2071, 2072, 7, 3, 0, 0, 2072, 2073, 7, 10, 0, 0, 2073, 2074, 7, 8, 0, 0, 2074, 2075, 7, 17, 0, 0, 2075, 2076, 7, 6, 0, 0, 2076, 382, 1, 0, 0, 0, 2077, 2078, 7, 20, 0, 0, 2078, 2079, 7, 3, 0, 0, 2079, 2080, 7, 10, 0, 0, 2080, 2081, 7, 7, 0, 0, 2081, 2082, 7, 15, 0, 0, 2082, 2083, 7, 5, 0, 0, 2083, 2084, 7, 3, 0, 0, 2084, 384, 1, 0, 0, 0, 2085, 2086, 7, 20, 0, 0, 2086, 2087, 7, 11, 0, 0, 2087, 2088, 7, 0, 0, 0, 2088, 2089, 7, 4, 0, 0, 2089, 386, 1, 0, 0, 0, 2090, 2091, 7, 20, 0, 0, 2091, 2092, 7, 17, 0, 0, 2092, 2093, 7, 2, 0, 0, 2093, 2094, 7, 8, 0, 0, 2094, 2095, 7, 5, 0, 0, 2095, 2096, 7, 8, 0, 0, 2096, 2097, 7, 17, 0, 0, 2097, 2098, 7, 4, 0, 0, 2098, 388, 1, 0, 0, 0, 2099, 2100, 7, 20, 0, 0, 2100, 2101, 7, 10, 0, 0, 2101, 2102, 7, 3, 0, 0, 2102, 2103, 7, 14, 0, 0, 2103, 2104, 7, 3, 0, 0, 2104, 2105, 7, 6, 0, 0, 2105, 2106, 7, 8, 0, 0, 2106, 2107, 7, 4, 0, 0, 2107, 2108, 7, 18, 0, 0, 2108, 390, 1, 0, 0, 0, 2109, 2110, 7, 20, 0, 0, 2110, 2111, 7, 10, 0, 0, 2111, 2112, 7, 3, 0, 0, 2112, 2113, 7, 14, 0, 0, 2113, 2114, 7, 8, 0, 0, 2114, 2115, 7, 2, 0, 0, 2115, 2116, 7, 8, 0, 0, 2116, 2117, 7, 17, 0, 0, 2117, 2118, 7, 4, 0, 0, 2118, 392, 1, 0, 0, 0, 2119, 2120, 7, 20, 0, 0, 2120, 2121, 7, 10, 0, 0, 2121, 2122, 7, 3, 0, 0, 2122, 2123, 7, 20, 0, 0, 2123, 2124, 7, 0, 0, 0, 2124, 2125, 7, 10, 0, 0, 2125, 2126, 7, 3, 0, 0, 2126, 394, 1, 0, 0, 0, 2127, 2128, 7, 20, 0, 0, 2128, 2129, 7, 10, 0, 0, 2129, 2130, 7, 8, 0, 0, 2130, 2131, 7, 22, 0, 0, 2131, 2132, 7, 8, 0, 0, 2132, 2133, 7, 11, 0, 0, 2133, 2134, 7, 3, 0, 0, 2134, 2135, 7, 18, 0, 0, 2135, 2136, 7, 3, 0, 0, 2136, 2137, 7, 2, 0, 0, 2137, 396, 1, 0, 0, 0, 2138, 2139, 7, 20, 0, 0, 2139, 2140, 7, 10, 0, 0, 2140, 2141, 7, 17, 0, 0, 2141, 2142, 7, 20, 0, 0, 2142, 2143, 7, 3, 0, 0, 2143, 2144, 7, 10, 0, 0, 2144, 2145, 7, 5, 0, 0, 2145, 2146, 7, 8, 0, 0, 2146, 2147, 7, 3, 0, 0, 2147, 2148, 7, 2, 0, 0, 2148, 398, 1, 0, 0, 0, 2149, 2150, 7, 20, 0, 0, 2150, 2151, 7, 10, 0, 0, 2151, 2152, 7, 15, 0, 0, 2152, 2153, 7, 4, 0, 0, 2153, 2154, 7, 3, 0, 0, 2154, 400, 1, 0, 0, 0, 2155, 2156, 7, 25, 0, 0, 2156, 2157, 7, 15, 0, 0, 2157, 2158, 7, 17, 0, 0, 2158, 2159, 7, 5, 0, 0, 2159, 2160, 7, 3, 0, 0, 2160, 2161, 7, 2, 0, 0, 2161, 402, 1, 0, 0, 0, 2162, 2163, 7, 10, 0, 0, 2163, 2164, 7, 0, 0, 0, 2164, 2165, 7, 4, 0, 0, 2165, 2166, 7, 18, 0, 0, 2166, 2167, 7, 3, 0, 0, 2167, 404, 1, 0, 0, 0, 2168, 2169, 7, 10, 0, 0, 2169, 2170, 7, 3, 0, 0, 2170, 2171, 7, 0, 0, 0, 2171, 2172, 7, 6, 0, 0, 2172, 406, 1, 0, 0, 0, 2173, 2174, 7, 10, 0, 0, 2174, 2175, 7, 3, 0, 0, 2175, 2176, 7, 14, 0, 0, 2176, 2177, 7, 15, 0, 0, 2177, 2178, 7, 10, 0, 0, 2178, 2179, 7, 2, 0, 0, 2179, 2180, 7, 8, 0, 0, 2180, 2181, 7, 22, 0, 0, 2181, 2182, 7, 3, 0, 0, 2182, 408, 1, 0, 0, 0, 2183, 2184, 7, 10, 0, 0, 2184, 2185, 7, 3, 0, 0, 2185, 2186, 7, 9, 0, 0, 2186, 2187, 7, 10, 0, 0, 2187, 2188, 7, 3, 0, 0, 2188, 2189, 7, 2, 0, 0, 2189, 2190, 7, 16, 0, 0, 2190, 410, 1, 0, 0, 0, 2191, 2192, 7, 10, 0, 0, 2192, 2193, 7, 3, 0, 0, 2193, 2194, 7, 4, 0, 0, 2194, 2195, 7, 0, 0, 0, 2195, 2196, 7, 7, 0, 0, 2196, 2197, 7, 3, 0, 0, 2197, 412, 1, 0, 0, 0, 2198, 2199, 7, 10, 0, 0, 2199, 2200, 7, 3, 0, 0, 2200, 2201, 7, 20, 0, 0, 2201, 2202, 7, 3, 0, 0, 2202, 2203, 7, 0, 0, 0, 2203, 2204, 7, 5, 0, 0, 2204, 414, 1, 0, 0, 0, 2205, 2206, 7, 10, 0, 0, 2206, 2207, 7, 3, 0, 0, 2207, 2208, 7, 20, 0, 0, 2208, 2209, 7, 3, 0, 0, 2209, 2210, 7, 0, 0, 0, 2210, 2211, 7, 5, 0, 0, 2211, 2212, 7, 0, 0, 0, 2212, 2213, 7, 1, 0, 0, 2213, 2214, 7, 11, 0, 0, 2214, 2215, 7, 3, 0, 0, 2215, 416, 1, 0, 0, 0, 2216, 2217, 7, 10, 0, 0, 2217, 2218, 7, 3, 0, 0, 2218, 2219, 7, 20, 0, 0, 2219, 2220, 7, 11, 0, 0, 2220, 2221, 7, 0, 0, 0, 2221, 2222, 7, 14, 0, 0, 2222, 2223, 7, 3, 0, 0, 2223, 418, 1, 0, 0, 0, 2224, 2225, 7, 10, 0, 0, 2225, 2226, 7, 3, 0, 0, 2226, 2227, 7, 2, 0, 0, 2227, 2228, 7, 3, 0, 0, 2228, 2229, 7, 5, 0, 0, 2229, 420, 1, 0, 0, 0, 2230, 2231, 7, 10, 0, 0, 2231, 2232, 7, 3, 0, 0, 2232, 2233, 7, 2, 0, 0, 2233, 2234, 7, 20, 0, 0, 2234, 2235, 7, 3, 0, 0, 2235, 2236, 7, 14, 0, 0, 2236, 2237, 7, 5, 0, 0, 2237, 422, 1, 0, 0, 0, 2238, 2239, 7, 10, 0, 0, 2239, 2240, 7, 3, 0, 0, 2240, 2241, 7, 2, 0, 0, 2241, 2242, 7, 5, 0, 0, 2242, 2243, 7, 10, 0, 0, 2243, 2244, 7, 8, 0, 0, 2244, 2245, 7, 14, 0, 0, 2245, 2246, 7, 5, 0, 0, 2246, 424, 1, 0, 0, 0, 2247, 2248, 7, 10, 0, 0, 2248, 2249, 7, 3, 0, 0, 2249, 2250, 7, 5, 0, 0, 2250, 2251, 7, 15, 0, 0, 2251, 2252, 7, 10, 0, 0, 2252, 2253, 7, 4, 0, 0, 2253, 426, 1, 0, 0, 0, 2254, 2255, 7, 10, 0, 0, 2255, 2256, 7, 3, 0, 0, 2256, 2257, 7, 5, 0, 0, 2257, 2258, 7, 15, 0, 0, 2258, 2259, 7, 10, 0, 0, 2259, 2260, 7, 4, 0, 0, 2260, 2261, 7, 8, 0, 0, 2261, 2262, 7, 4, 0, 0, 2262, 2263, 7, 18, 0, 0, 2263, 428, 1, 0, 0, 0, 2264, 2265, 7, 10, 0, 0, 2265, 2266, 7, 3, 0, 0, 2266, 2267, 7, 5, 0, 0, 2267, 2268, 7, 15, 0, 0, 2268, 2269, 7, 10, 0, 0, 2269, 2270, 7, 4, 0, 0, 2270, 2271, 7, 2, 0, 0, 2271, 430, 1, 0, 0, 0, 2272, 2273, 7, 10, 0, 0, 2273, 2274, 7, 3, 0, 0, 2274, 2275, 7, 22, 0, 0, 2275, 2276, 7, 17, 0, 0, 2276, 2277, 7, 23, 0, 0, 2277, 2278, 7, 3, 0, 0, 2278, 432, 1, 0, 0, 0, 2279, 2280, 7, 10, 0, 0, 2280, 2281, 7, 8, 0, 0, 2281, 2282, 7, 18, 0, 0, 2282, 2283, 7, 16, 0, 0, 2283, 2284, 7, 5, 0, 0, 2284, 434, 1, 0, 0, 0, 2285, 2286, 7, 10, 0, 0, 2286, 2287, 7, 17, 0, 0, 2287, 2288, 7, 11, 0, 0, 2288, 2289, 7, 3, 0, 0, 2289, 436, 1, 0, 0, 0, 2290, 2291, 7, 10, 0, 0, 2291, 2292, 7, 17, 0, 0, 2292, 2293, 7, 11, 0, 0, 2293, 2294, 7, 3, 0, 0, 2294, 2295, 7, 2, 0, 0, 2295, 438, 1, 0, 0, 0, 2296, 2297, 7, 10, 0, 0, 2297, 2298, 7, 17, 0, 0, 2298, 2299, 7, 11, 0, 0, 2299, 2300, 7, 11, 0, 0, 2300, 2301, 7, 1, 0, 0, 2301, 2302, 7, 0, 0, 0, 2302, 2303, 7, 14, 0, 0, 2303, 2304, 7, 23, 0, 0, 2304, 440, 1, 0, 0, 0, 2305, 2306, 7, 10, 0, 0, 2306, 2307, 7, 17, 0, 0, 2307, 2308, 7, 11, 0, 0, 2308, 2309, 7, 11, 0, 0, 2309, 2310, 7, 15, 0, 0, 2310, 2311, 7, 20, 0, 0, 2311, 442, 1, 0, 0, 0, 2312, 2313, 7, 10, 0, 0, 2313, 2314, 7, 17, 0, 0, 2314, 2315, 7, 19, 0, 0, 2315, 444, 1, 0, 0, 0, 2316, 2317, 7, 10, 0, 0, 2317, 2318, 7, 17, 0, 0, 2318, 2319, 7, 19, 0, 0, 2319, 2320, 7, 2, 0, 0, 2320, 446, 1, 0, 0, 0, 2321, 2322, 7, 10, 0, 0, 2322, 2323, 7, 15, 0, 0, 2323, 2324, 7, 4, 0, 0, 2324, 2325, 7, 4, 0, 0, 2325, 2326, 7, 8, 0, 0, 2326, 2327, 7, 4, 0, 0, 2327, 2328, 7, 18, 0, 0, 2328, 448, 1, 0, 0, 0, 2329, 2330, 7, 2, 0, 0, 2330, 2331, 7, 14, 0, 0, 2331, 2332, 7, 0, 0, 0, 2332, 2333, 7, 11, 0, 0, 2333, 2334, 7, 0, 0, 0, 2334, 2335, 7, 10, 0, 0, 2335, 450, 1, 0, 0, 0, 2336, 2337, 7, 2, 0, 0, 2337, 2338, 7, 14, 0, 0, 2338, 2339, 7, 16, 0, 0, 2339, 2340, 7, 3, 0, 0, 2340, 2341, 7, 7, 0, 0, 2341, 2342, 7, 0, 0, 0, 2342, 452, 1, 0, 0, 0, 2343, 2344, 7, 2, 0, 0, 2344, 2345, 7, 14, 0, 0, 2345, 2346, 7, 16, 0, 0, 2346, 2347, 7, 3, 0, 0, 2347, 2348, 7, 7, 0, 0, 2348, 2349, 7, 0, 0, 0, 2349, 2350, 7, 2, 0, 0, 2350, 454, 1, 0, 0, 0, 2351, 2352, 7, 2, 0, 0, 2352, 2353, 7, 3, 0, 0, 2353, 2354, 7, 14, 0, 0, 2354, 2355, 7, 17, 0, 0, 2355, 2356, 7, 4, 0, 0, 2356, 2357, 7, 6, 0, 0, 2357, 456, 1, 0, 0, 0, 2358, 2359, 7, 2, 0, 0, 2359, 2360, 7, 3, 0, 0, 2360, 2361, 7, 14, 0, 0, 2361, 2362, 7, 15, 0, 0, 2362, 2363, 7, 10, 0, 0, 2363, 2364, 7, 8, 0, 0, 2364, 2365, 7, 5, 0, 0, 2365, 2366, 7, 12, 0, 0, 2366, 458, 1, 0, 0, 0, 2367, 2368, 7, 2, 0, 0, 2368, 2369, 7, 3, 0, 0, 2369, 2370, 7, 3, 0, 0, 2370, 2371, 7, 23, 0, 0, 2371, 460, 1, 0, 0, 0, 2372, 2373, 7, 2, 0, 0, 2373, 2374, 7, 3, 0, 0, 2374, 2375, 7, 11, 0, 0, 2375, 2376, 7, 3, 0, 0, 2376, 2377, 7, 14, 0, 0, 2377, 2378, 7, 5, 0, 0, 2378, 462, 1, 0, 0, 0, 2379, 2380, 7, 2, 0, 0, 2380, 2381, 7, 3, 0, 0, 2381, 2382, 7, 10, 0, 0, 2382, 2383, 7, 8, 0, 0, 2383, 2384, 7, 0, 0, 0, 2384, 2385, 7, 11, 0, 0, 2385, 2386, 7, 8, 0, 0, 2386, 2387, 7, 13, 0, 0, 2387, 2388, 7, 0, 0, 0, 2388, 2389, 7, 1, 0, 0, 2389, 2390, 7, 11, 0, 0, 2390, 2391, 7, 3, 0, 0, 2391, 464, 1, 0, 0, 0, 2392, 2393, 7, 2, 0, 0, 2393, 2394, 7, 3, 0, 0, 2394, 2395, 7, 2, 0, 0, 2395, 2396, 7, 2, 0, 0, 2396, 2397, 7, 8, 0, 0, 2397, 2398, 7, 17, 0, 0, 2398, 2399, 7, 4, 0, 0, 2399, 466, 1, 0, 0, 0, 2400, 2401, 7, 2, 0, 0, 2401, 2402, 7, 3, 0, 0, 2402, 2403, 7, 5, 0, 0, 2403, 468, 1, 0, 0, 0, 2404, 2405, 7, 2, 0, 0, 2405, 2406, 7, 3, 0, 0, 2406, 2407, 7, 5, 0, 0, 2407, 2408, 7, 2, 0, 0, 2408, 470, 1, 0, 0, 0, 2409, 2410, 7, 2, 0, 0, 2410, 2411, 7, 16, 0, 0, 2411, 2412, 7, 17, 0, 0, 2412, 2413, 7, 19, 0, 0, 2413, 472, 1, 0, 0, 0, 2414, 2415, 7, 2, 0, 0, 2415, 2416, 7, 23, 0, 0, 2416, 2417, 7, 8, 0, 0, 2417, 2418, 7, 20, 0, 0, 2418, 474, 1, 0, 0, 0, 2419, 2420, 7, 2, 0, 0, 2420, 2421, 7, 17, 0, 0, 2421, 2422, 7, 7, 0, 0, 2422, 2423, 7, 3, 0, 0, 2423, 476, 1, 0, 0, 0, 2424, 2425, 7, 2, 0, 0, 2425, 2426, 7, 5, 0, 0, 2426, 2427, 7, 0, 0, 0, 2427, 2428, 7, 10, 0, 0, 2428, 2429, 7, 5, 0, 0, 2429, 478, 1, 0, 0, 0, 2430, 2431, 7, 2, 0, 0, 2431, 2432, 7, 5, 0, 0, 2432, 2433, 7, 0, 0, 0, 2433, 2434, 7, 5, 0, 0, 2434, 2435, 7, 2, 0, 0, 2435, 480, 1, 0, 0, 0, 2436, 2437, 7, 2, 0, 0, 2437, 2438, 7, 15, 0, 0, 2438, 2439, 7, 1, 0, 0, 2439, 2440, 7, 2, 0, 0, 2440, 2441, 7, 3, 0, 0, 2441, 2442, 7, 5, 0, 0, 2442, 482, 1, 0, 0, 0, 2443, 2444, 7, 2, 0, 0, 2444, 2445, 7, 15, 0, 0, 2445, 2446, 7, 1, 0, 0, 2446, 2447, 7, 2, 0, 0, 2447, 2448, 7, 5, 0, 0, 2448, 2449, 7, 10, 0, 0, 2449, 2450, 7, 8, 0, 0, 2450, 2451, 7, 4, 0, 0, 2451, 2452, 7, 18, 0, 0, 2452, 484, 1, 0, 0, 0, 2453, 2454, 7, 2, 0, 0, 2454, 2455, 7, 12, 0, 0, 2455, 2456, 7, 2, 0, 0, 2456, 2457, 7, 5, 0, 0, 2457, 2458, 7, 3, 0, 0, 2458, 2459, 7, 7, 0, 0, 2459, 486, 1, 0, 0, 0, 2460, 2461, 7, 5, 0, 0, 2461, 2462, 7, 0, 0, 0, 2462, 2463, 7, 1, 0, 0, 2463, 2464, 7, 11, 0, 0, 2464, 2465, 7, 3, 0, 0, 2465, 488, 1, 0, 0, 0, 2466, 2467, 7, 5, 0, 0, 2467, 2468, 7, 0, 0, 0, 2468, 2469, 7, 1, 0, 0, 2469, 2470, 7, 11, 0, 0, 2470, 2471, 7, 3, 0, 0, 2471, 2472, 7, 2, 0, 0, 2472, 490, 1, 0, 0, 0, 2473, 2474, 7, 5, 0, 0, 2474, 2475, 7, 0, 0, 0, 2475, 2476, 7, 1, 0, 0, 2476, 2477, 7, 11, 0, 0, 2477, 2478, 7, 3, 0, 0, 2478, 2479, 7, 2, 0, 0, 2479, 2480, 7, 0, 0, 0, 2480, 2481, 7, 7, 0, 0, 2481, 2482, 7, 20, 0, 0, 2482, 2483, 7, 11, 0, 0, 2483, 2484, 7, 3, 0, 0, 2484, 492, 1, 0, 0, 0, 2485, 2486, 7, 5, 0, 0, 2486, 2487, 7, 3, 0, 0, 2487, 2488, 7, 21, 0, 0, 2488, 2489, 7, 5, 0, 0, 2489, 494, 1, 0, 0, 0, 2490, 2491, 7, 2, 0, 0, 2491, 2492, 7, 5, 0, 0, 2492, 2493, 7, 10, 0, 0, 2493, 2494, 7, 8, 0, 0, 2494, 2495, 7, 4, 0, 0, 2495, 2496, 7, 18, 0, 0, 2496, 496, 1, 0, 0, 0, 2497, 2498, 7, 5, 0, 0, 2498, 2499, 7, 16, 0, 0, 2499, 2500, 7, 3, 0, 0, 2500, 2501, 7, 4, 0, 0, 2501, 498, 1, 0, 0, 0, 2502, 2503, 7, 5, 0, 0, 2503, 2504, 7, 8, 0, 0, 2504, 2505, 7, 3, 0, 0, 2505, 2506, 7, 2, 0, 0, 2506, 500, 1, 0, 0, 0, 2507, 2508, 7, 5, 0, 0, 2508, 2509, 7, 8, 0, 0, 2509, 2510, 7, 7, 0, 0, 2510, 2511, 7, 3, 0, 0, 2511, 502, 1, 0, 0, 0, 2512, 2513, 7, 5, 0, 0, 2513, 2514, 7, 8, 0, 0, 2514, 2515, 7, 7, 0, 0, 2515, 2516, 7, 3, 0, 0, 2516, 2517, 7, 2, 0, 0, 2517, 2518, 7, 5, 0, 0, 2518, 2519, 7, 0, 0, 0, 2519, 2520, 7, 7, 0, 0, 2520, 2521, 7, 20, 0, 0, 2521, 504, 1, 0, 0, 0, 2522, 2523, 7, 5, 0, 0, 2523, 2524, 7, 17, 0, 0, 2524, 506, 1, 0, 0, 0, 2525, 2526, 7, 5, 0, 0, 2526, 2527, 7, 10, 0, 0, 2527, 2528, 7, 0, 0, 0, 2528, 2529, 7, 8, 0, 0, 2529, 2530, 7, 11, 0, 0, 2530, 2531, 7, 8, 0, 0, 2531, 2532, 7, 4, 0, 0, 2532, 2533, 7, 18, 0, 0, 2533, 508, 1, 0, 0, 0, 2534, 2535, 7, 5, 0, 0, 2535, 2536, 7, 10, 0, 0, 2536, 2537, 7, 0, 0, 0, 2537, 2538, 7, 4, 0, 0, 2538, 2539, 7, 2, 0, 0, 2539, 2540, 7, 0, 0, 0, 2540, 2541, 7, 14, 0, 0, 2541, 2542, 7, 5, 0, 0, 2542, 2543, 7, 8, 0, 0, 2543, 2544, 7, 17, 0, 0, 2544, 2545, 7, 4, 0, 0, 2545, 510, 1, 0, 0, 0, 2546, 2547, 7, 5, 0, 0, 2547, 2548, 7, 10, 0, 0, 2548, 2549, 7, 8, 0, 0, 2549, 2550, 7, 7, 0, 0, 2550, 512, 1, 0, 0, 0, 2551, 2552, 7, 5, 0, 0, 2552, 2553, 7, 10, 0, 0, 2553, 2554, 7, 15, 0, 0, 2554, 2555, 7, 3, 0, 0, 2555, 514, 1, 0, 0, 0, 2556, 2557, 7, 5, 0, 0, 2557, 2558, 7, 10, 0, 0, 2558, 2559, 7, 15, 0, 0, 2559, 2560, 7, 4, 0, 0, 2560, 2561, 7, 14, 0, 0, 2561, 2562, 7, 0, 0, 0, 2562, 2563, 7, 5, 0, 0, 2563, 2564, 7, 3, 0, 0, 2564, 516, 1, 0, 0, 0, 2565, 2566, 7, 5, 0, 0, 2566, 2567, 7, 10, 0, 0, 2567, 2568, 7, 12, 0, 0, 2568, 2569, 5, 95, 0, 0, 2569, 2570, 7, 14, 0, 0, 2570, 2571, 7, 0, 0, 0, 2571, 2572, 7, 2, 0, 0, 2572, 2573, 7, 5, 0, 0, 2573, 518, 1, 0, 0, 0, 2574, 2575, 7, 5, 0, 0, 2575, 2576, 7, 12, 0, 0, 2576, 2577, 7, 20, 0, 0, 2577, 2578, 7, 3, 0, 0, 2578, 520, 1, 0, 0, 0, 2579, 2580, 7, 15, 0, 0, 2580, 2581, 7, 3, 0, 0, 2581, 2582, 7, 2, 0, 0, 2582, 2583, 7, 14, 0, 0, 2583, 2584, 7, 0, 0, 0, 2584, 2585, 7, 20, 0, 0, 2585, 2586, 7, 3, 0, 0, 2586, 522, 1, 0, 0, 0, 2587, 2588, 7, 15, 0, 0, 2588, 2589, 7, 4, 0, 0, 2589, 2590, 7, 1, 0, 0, 2590, 2591, 7, 17, 0, 0, 2591, 2592, 7, 15, 0, 0, 2592, 2593, 7, 4, 0, 0, 2593, 2594, 7, 6, 0, 0, 2594, 2595, 7, 3, 0, 0, 2595, 2596, 7, 6, 0, 0, 2596, 524, 1, 0, 0, 0, 2597, 2598, 7, 15, 0, 0, 2598, 2599, 7, 4, 0, 0, 2599, 2600, 7, 14, 0, 0, 2600, 2601, 7, 17, 0, 0, 2601, 2602, 7, 7, 0, 0, 2602, 2603, 7, 7, 0, 0, 2603, 2604, 7, 8, 0, 0, 2604, 2605, 7, 5, 0, 0, 2605, 2606, 7, 5, 0, 0, 2606, 2607, 7, 3, 0, 0, 2607, 2608, 7, 6, 0, 0, 2608, 526, 1, 0, 0, 0, 2609, 2610, 7, 15, 0, 0, 2610, 2611, 7, 4, 0, 0, 2611, 2612, 7, 14, 0, 0, 2612, 2613, 7, 17, 0, 0, 2613, 2614, 7, 4, 0, 0, 2614, 2615, 7, 6, 0, 0, 2615, 2616, 7, 8, 0, 0, 2616, 2617, 7, 5, 0, 0, 2617, 2618, 7, 8, 0, 0, 2618, 2619, 7, 17, 0, 0, 2619, 2620, 7, 4, 0, 0, 2620, 2621, 7, 0, 0, 0, 2621, 2622, 7, 11, 0, 0, 2622, 528, 1, 0, 0, 0, 2623, 2624, 7, 15, 0, 0, 2624, 2625, 7, 4, 0, 0, 2625, 2626, 7, 8, 0, 0, 2626, 2627, 7, 17, 0, 0, 2627, 2628, 7, 4, 0, 0, 2628, 530, 1, 0, 0, 0, 2629, 2630, 7, 15, 0, 0, 2630, 2631, 7, 4, 0, 0, 2631, 2632, 7, 8, 0, 0, 2632, 2633, 7, 25, 0, 0, 2633, 2634, 7, 15, 0, 0, 2634, 2635, 7, 3, 0, 0, 2635, 532, 1, 0, 0, 0, 2636, 2637, 7, 15, 0, 0, 2637, 2638, 7, 4, 0, 0, 2638, 2639, 7, 23, 0, 0, 2639, 2640, 7, 4, 0, 0, 2640, 2641, 7, 17, 0, 0, 2641, 2642, 7, 19, 0, 0, 2642, 2643, 7, 4, 0, 0, 2643, 534, 1, 0, 0, 0, 2644, 2645, 7, 15, 0, 0, 2645, 2646, 7, 4, 0, 0, 2646, 2647, 7, 7, 0, 0, 2647, 2648, 7, 0, 0, 0, 2648, 2649, 7, 5, 0, 0, 2649, 2650, 7, 14, 0, 0, 2650, 2651, 7, 16, 0, 0, 2651, 2652, 7, 3, 0, 0, 2652, 2653, 7, 6, 0, 0, 2653, 536, 1, 0, 0, 0, 2654, 2655, 7, 15, 0, 0, 2655, 2656, 7, 4, 0, 0, 2656, 2657, 7, 4, 0, 0, 2657, 2658, 7, 3, 0, 0, 2658, 2659, 7, 2, 0, 0, 2659, 2660, 7, 5, 0, 0, 2660, 538, 1, 0, 0, 0, 2661, 2662, 7, 15, 0, 0, 2662, 2663, 7, 4, 0, 0, 2663, 2664, 7, 5, 0, 0, 2664, 2665, 7, 8, 0, 0, 2665, 2666, 7, 11, 0, 0, 2666, 540, 1, 0, 0, 0, 2667, 2668, 7, 15, 0, 0, 2668, 2669, 7, 20, 0, 0, 2669, 2670, 7, 6, 0, 0, 2670, 2671, 7, 0, 0, 0, 2671, 2672, 7, 5, 0, 0, 2672, 2673, 7, 3, 0, 0, 2673, 542, 1, 0, 0, 0, 2674, 2675, 7, 15, 0, 0, 2675, 2676, 7, 2, 0, 0, 2676, 2677, 7, 3, 0, 0, 2677, 544, 1, 0, 0, 0, 2678, 2679, 7, 15, 0, 0, 2679, 2680, 7, 2, 0, 0, 2680, 2681, 7, 3, 0, 0, 2681, 2682, 7, 10, 0, 0, 2682, 546, 1, 0, 0, 0, 2683, 2684, 7, 15, 0, 0, 2684, 2685, 7, 2, 0, 0, 2685, 2686, 7, 8, 0, 0, 2686, 2687, 7, 4, 0, 0, 2687, 2688, 7, 18, 0, 0, 2688, 548, 1, 0, 0, 0, 2689, 2690, 7, 15, 0, 0, 2690, 2691, 7, 5, 0, 0, 2691, 2692, 7, 9, 0, 0, 2692, 2693, 5, 49, 0, 0, 2693, 2694, 5, 54, 0, 0, 2694, 550, 1, 0, 0, 0, 2695, 2696, 7, 15, 0, 0, 2696, 2697, 7, 5, 0, 0, 2697, 2698, 7, 9, 0, 0, 2698, 2699, 5, 51, 0, 0, 2699, 2700, 5, 50, 0, 0, 2700, 552, 1, 0, 0, 0, 2701, 2702, 7, 15, 0, 0, 2702, 2703, 7, 5, 0, 0, 2703, 2704, 7, 9, 0, 0, 2704, 2705, 5, 56, 0, 0, 2705, 554, 1, 0, 0, 0, 2706, 2707, 7, 22, 0, 0, 2707, 2708, 7, 0, 0, 0, 2708, 2709, 7, 11, 0, 0, 2709, 2710, 7, 8, 0, 0, 2710, 2711, 7, 6, 0, 0, 2711, 2712, 7, 0, 0, 0, 2712, 2713, 7, 5, 0, 0, 2713, 2714, 7, 3, 0, 0, 2714, 556, 1, 0, 0, 0, 2715, 2716, 7, 22, 0, 0, 2716, 2717, 7, 0, 0, 0, 2717, 2718, 7, 11, 0, 0, 2718, 2719, 7, 15, 0, 0, 2719, 2720, 7, 3, 0, 0, 2720, 558, 1, 0, 0, 0, 2721, 2722, 7, 22, 0, 0, 2722, 2723, 7, 0, 0, 0, 2723, 2724, 7, 11, 0, 0, 2724, 2725, 7, 15, 0, 0, 2725, 2726, 7, 3, 0, 0, 2726, 2727, 7, 2, 0, 0, 2727, 560, 1, 0, 0, 0, 2728, 2729, 7, 22, 0, 0, 2729, 2730, 7, 3, 0, 0, 2730, 2731, 7, 10, 0, 0, 2731, 2732, 7, 1, 0, 0, 2732, 2733, 7, 17, 0, 0, 2733, 2734, 7, 2, 0, 0, 2734, 2735, 7, 3, 0, 0, 2735, 562, 1, 0, 0, 0, 2736, 2737, 7, 22, 0, 0, 2737, 2738, 7, 3, 0, 0, 2738, 2739, 7, 10, 0, 0, 2739, 2740, 7, 2, 0, 0, 2740, 2741, 7, 8, 0, 0, 2741, 2742, 7, 17, 0, 0, 2742, 2743, 7, 4, 0, 0, 2743, 564, 1, 0, 0, 0, 2744, 2745, 7, 22, 0, 0, 2745, 2746, 7, 8, 0, 0, 2746, 2747, 7, 3, 0, 0, 2747, 2748, 7, 19, 0, 0, 2748, 566, 1, 0, 0, 0, 2749, 2750, 7, 19, 0, 0, 2750, 2751, 7, 16, 0, 0, 2751, 2752, 7, 3, 0, 0, 2752, 2753, 7, 4, 0, 0, 2753, 568, 1, 0, 0, 0, 2754, 2755, 7, 19, 0, 0, 2755, 2756, 7, 16, 0, 0, 2756, 2757, 7, 3, 0, 0, 2757, 2758, 7, 10, 0, 0, 2758, 2759, 7, 3, 0, 0, 2759, 570, 1, 0, 0, 0, 2760, 2761, 7, 19, 0, 0, 2761, 2762, 7, 16, 0, 0, 2762, 2763, 7, 8, 0, 0, 2763, 2764, 7, 11, 0, 0, 2764, 2765, 7, 3, 0, 0, 2765, 572, 1, 0, 0, 0, 2766, 2767, 7, 19, 0, 0, 2767, 2768, 7, 8, 0, 0, 2768, 2769, 7, 4, 0, 0, 2769, 2770, 7, 6, 0, 0, 2770, 2771, 7, 17, 0, 0, 2771, 2772, 7, 19, 0, 0, 2772, 574, 1, 0, 0, 0, 2773, 2774, 7, 19, 0, 0, 2774, 2775, 7, 8, 0, 0, 2775, 2776, 7, 5, 0, 0, 2776, 2777, 7, 16, 0, 0, 2777, 576, 1, 0, 0, 0, 2778, 2779, 7, 19, 0, 0, 2779, 2780, 7, 8, 0, 0, 2780, 2781, 7, 5, 0, 0, 2781, 2782, 7, 16, 0, 0, 2782, 2783, 7, 8, 0, 0, 2783, 2784, 7, 4, 0, 0, 2784, 578, 1, 0, 0, 0, 2785, 2786, 7, 19, 0, 0, 2786, 2787, 7, 8, 0, 0, 2787, 2788, 7, 5, 0, 0, 2788, 2789, 7, 16, 0, 0, 2789, 2790, 7, 17, 0, 0, 2790, 2791, 7, 15, 0, 0, 2791, 2792, 7, 5, 0, 0, 2792, 580, 1, 0, 0, 0, 2793, 2794, 7, 19, 0, 0, 2794, 2795, 7, 17, 0, 0, 2795, 2796, 7, 10, 0, 0, 2796, 2797, 7, 23, 0, 0, 2797, 582, 1, 0, 0, 0, 2798, 2799, 7, 19, 0, 0, 2799, 2800, 7, 10, 0, 0, 2800, 2801, 7, 0, 0, 0, 2801, 2802, 7, 20, 0, 0, 2802, 2803, 7, 20, 0, 0, 2803, 2804, 7, 3, 0, 0, 2804, 2805, 7, 10, 0, 0, 2805, 584, 1, 0, 0, 0, 2806, 2807, 7, 19, 0, 0, 2807, 2808, 7, 10, 0, 0, 2808, 2809, 7, 8, 0, 0, 2809, 2810, 7, 5, 0, 0, 2810, 2811, 7, 3, 0, 0, 2811, 586, 1, 0, 0, 0, 2812, 2813, 7, 12, 0, 0, 2813, 2814, 7, 3, 0, 0, 2814, 2815, 7, 0, 0, 0, 2815, 2816, 7, 10, 0, 0, 2816, 588, 1, 0, 0, 0, 2817, 2818, 7, 13, 0, 0, 2818, 2819, 7, 17, 0, 0, 2819, 2820, 7, 4, 0, 0, 2820, 2821, 7, 3, 0, 0, 2821, 590, 1, 0, 0, 0, 2822, 2823, 5, 61, 0, 0, 2823, 592, 1, 0, 0, 0, 2824, 2825, 5, 60, 0, 0, 2825, 2829, 5, 62, 0, 0, 2826, 2827, 5, 33, 0, 0, 2827, 2829, 5, 61, 0, 0, 2828, 2824, 1, 0, 0, 0, 2828, 2826, 1, 0, 0, 0, 2829, 594, 1, 0, 0, 0, 2830, 2831, 5, 60, 0, 0, 2831, 596, 1, 0, 0, 0, 2832, 2833, 5, 60, 0, 0, 2833, 2834, 5, 61, 0, 0, 2834, 598, 1, 0, 0, 0, 2835, 2836, 5, 62, 0, 0, 2836, 600, 1, 0, 0, 0, 2837, 2838, 5, 62, 0, 0, 2838, 2839, 5, 61, 0, 0, 2839, 602, 1, 0, 0, 0, 2840, 2841, 5, 43, 0, 0, 2841, 604, 1, 0, 0, 0, 2842, 2843, 5, 45, 0, 0, 2843, 606, 1, 0, 0, 0, 2844, 2845, 5, 42, 0, 0, 2845, 608, 1, 0, 0, 0, 2846, 2847, 5, 47, 0, 0, 2847, 610, 1, 0, 0, 0, 2848, 2849, 5, 37, 0, 0, 2849, 612, 1, 0, 0, 0, 2850, 2851, 5, 124, 0, 0, 2851, 2852, 5, 124, 0, 0, 2852, 614, 1, 0, 0, 0, 2853, 2854, 5, 63, 0, 0, 2854, 616, 1, 0, 0, 0, 2855, 2856, 5, 59, 0, 0, 2856, 618, 1, 0, 0, 0, 2857, 2858, 5, 46, 0, 0, 2858, 620, 1, 0, 0, 0, 2859, 2860, 5, 95, 0, 0, 2860, 2861, 5, 58, 0, 0, 2861, 622, 1, 0, 0, 0, 2862, 2863, 5, 44, 0, 0, 2863, 624, 1, 0, 0, 0, 2864, 2865, 5, 40, 0, 0, 2865, 626, 1, 0, 0, 0, 2866, 2867, 5, 41, 0, 0, 2867, 628, 1, 0, 0, 0, 2868, 2869, 5, 91, 0, 0, 2869, 630, 1, 0, 0, 0, 2870, 2871, 5, 93, 0, 0, 2871, 632, 1, 0, 0, 0, 2872, 2873, 5, 123, 0, 0, 2873, 634, 1, 0, 0, 0, 2874, 2875, 5, 125, 0, 0, 2875, 636, 1, 0, 0, 0, 2876, 2877, 5, 123, 0, 0, 2877, 2878, 5, 45, 0, 0, 2878, 638, 1, 0, 0, 0, 2879, 2880, 5, 45, 0, 0, 2880, 2881, 5, 125, 0, 0, 2881, 640, 1, 0, 0, 0, 2882, 2883, 5, 60, 0, 0, 2883, 2884, 5, 45, 0, 0, 2884, 642, 1, 0, 0, 0, 2885, 2886, 5, 45, 0, 0, 2886, 2887, 5, 62, 0, 0, 2887, 644, 1, 0, 0, 0, 2888, 2889, 5, 61, 0, 0, 2889, 2890, 5, 62, 0, 0, 2890, 646, 1, 0, 0, 0, 2891, 2892, 5, 124, 0, 0, 2892, 648, 1, 0, 0, 0, 2893, 2894, 5, 36, 0, 0, 2894, 650, 1, 0, 0, 0, 2895, 2896, 5, 94, 0, 0, 2896, 652, 1, 0, 0, 0, 2897, 2903, 5, 39, 0, 0, 2898, 2902, 8, 26, 0, 0, 2899, 2900, 5, 39, 0, 0, 2900, 2902, 5, 39, 0, 0, 2901, 2898, 1, 0, 0, 0, 2901, 2899, 1, 0, 0, 0, 2902, 2905, 1, 0, 0, 0, 2903, 2901, 1, 0, 0, 0, 2903, 2904, 1, 0, 0, 0, 2904, 2906, 1, 0, 0, 0, 2905, 2903, 1, 0, 0, 0, 2906, 2907, 5, 39, 0, 0, 2907, 654, 1, 0, 0, 0, 2908, 2909, 7, 15, 0, 0, 2909, 2910, 5, 38, 0, 0, 2910, 2911, 5, 39, 0, 0, 2911, 2917, 1, 0, 0, 0, 2912, 2916, 8, 26, 0, 0, 2913, 2914, 5, 39, 0, 0, 2914, 2916, 5, 39, 0, 0, 2915, 2912, 1, 0, 0, 0, 2915, 2913, 1, 0, 0, 0, 2916, 2919, 1, 0, 0, 0, 2917, 2915, 1, 0, 0, 0, 2917, 2918, 1, 0, 0, 0, 2918, 2920, 1, 0, 0, 0, 2919, 2917, 1, 0, 0, 0, 2920, 2921, 5, 39, 0, 0, 2921, 656, 1, 0, 0, 0, 2922, 2923, 7, 21, 0, 0, 2923, 2924, 5, 39, 0, 0, 2924, 2928, 1, 0, 0, 0, 2925, 2927, 8, 26, 0, 0, 2926, 2925, 1, 0, 0, 0, 2927, 2930, 1, 0, 0, 0, 2928, 2926, 1, 0, 0, 0, 2928, 2929, 1, 0, 0, 0, 2929, 2931, 1, 0, 0, 0, 2930, 2928, 1, 0, 0, 0, 2931, 2932, 5, 39, 0, 0, 2932, 658, 1, 0, 0, 0, 2933, 2935, 3, 675, 337, 0, 2934, 2933, 1, 0, 0, 0, 2935, 2936, 1, 0, 0, 0, 2936, 2934, 1, 0, 0, 0, 2936, 2937, 1, 0, 0, 0, 2937, 660, 1, 0, 0, 0, 2938, 2940, 3, 675, 337, 0, 2939, 2938, 1, 0, 0, 0, 2940, 2941, 1, 0, 0, 0, 2941, 2939, 1, 0, 0, 0, 2941, 2942, 1, 0, 0, 0, 2942, 2943, 1, 0, 0, 0, 2943, 2947, 5, 46, 0, 0, 2944, 2946, 3, 675, 337, 0, 2945, 2944, 1, 0, 0, 0, 2946, 2949, 1, 0, 0, 0, 2947, 2945, 1, 0, 0, 0, 2947, 2948, 1, 0, 0, 0, 2948, 2957, 1, 0, 0, 0, 2949, 2947, 1, 0, 0, 0, 2950, 2952, 5, 46, 0, 0, 2951, 2953, 3, 675, 337, 0, 2952, 2951, 1, 0, 0, 0, 2953, 2954, 1, 0, 0, 0, 2954, 2952, 1, 0, 0, 0, 2954, 2955, 1, 0, 0, 0, 2955, 2957, 1, 0, 0, 0, 2956, 2939, 1, 0, 0, 0, 2956, 2950, 1, 0, 0, 0, 2957, 662, 1, 0, 0, 0, 2958, 2960, 3, 675, 337, 0, 2959, 2958, 1, 0, 0, 0, 2960, 2961, 1, 0, 0, 0, 2961, 2959, 1, 0, 0, 0, 2961, 2962, 1, 0, 0, 0, 2962, 2970, 1, 0, 0, 0, 2963, 2967, 5, 46, 0, 0, 2964, 2966, 3, 675, 337, 0, 2965, 2964, 1, 0, 0, 0, 2966, 2969, 1, 0, 0, 0, 2967, 2965, 1, 0, 0, 0, 2967, 2968, 1, 0, 0, 0, 2968, 2971, 1, 0, 0, 0, 2969, 2967, 1, 0, 0, 0, 2970, 2963, 1, 0, 0, 0, 2970, 2971, 1, 0, 0, 0, 2971, 2972, 1, 0, 0, 0, 2972, 2973, 3, 673, 336, 0, 2973, 2983, 1, 0, 0, 0, 2974, 2976, 5, 46, 0, 0, 2975, 2977, 3, 675, 337, 0, 2976, 2975, 1, 0, 0, 0, 2977, 2978, 1, 0, 0, 0, 2978, 2976, 1, 0, 0, 0, 2978, 2979, 1, 0, 0, 0, 2979, 2980, 1, 0, 0, 0, 2980, 2981, 3, 673, 336, 0, 2981, 2983, 1, 0, 0, 0, 2982, 2959, 1, 0, 0, 0, 2982, 2974, 1, 0, 0, 0, 2983, 664, 1, 0, 0, 0, 2984, 2987, 3, 677, 338, 0, 2985, 2987, 5, 95, 0, 0, 2986, 2984, 1, 0, 0, 0, 2986, 2985, 1, 0, 0, 0, 2987, 2993, 1, 0, 0, 0, 2988, 2992, 3, 677, 338, 0, 2989, 2992, 3, 675, 337, 0, 2990, 2992, 5, 95, 0, 0, 2991, 2988, 1, 0, 0, 0, 2991, 2989, 1, 0, 0, 0, 2991, 2990, 1, 0, 0, 0, 2992, 2995, 1, 0, 0, 0, 2993, 2991, 1, 0, 0, 0, 2993, 2994, 1, 0, 0, 0, 2994, 666, 1, 0, 0, 0, 2995, 2993, 1, 0, 0, 0, 2996, 3000, 3, 675, 337, 0, 2997, 3001, 3, 677, 338, 0, 2998, 3001, 3, 675, 337, 0, 2999, 3001, 5, 95, 0, 0, 3000, 2997, 1, 0, 0, 0, 3000, 2998, 1, 0, 0, 0, 3000, 2999, 1, 0, 0, 0, 3001, 3002, 1, 0, 0, 0, 3002, 3000, 1, 0, 0, 0, 3002, 3003, 1, 0, 0, 0, 3003, 668, 1, 0, 0, 0, 3004, 3010, 5, 34, 0, 0, 3005, 3009, 8, 27, 0, 0, 3006, 3007, 5, 34, 0, 0, 3007, 3009, 5, 34, 0, 0, 3008, 3005, 1, 0, 0, 0, 3008, 3006, 1, 0, 0, 0, 3009, 3012, 1, 0, 0, 0, 3010, 3008, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3013, 1, 0, 0, 0, 3012, 3010, 1, 0, 0, 0, 3013, 3014, 5, 34, 0, 0, 3014, 670, 1, 0, 0, 0, 3015, 3021, 5, 96, 0, 0, 3016, 3020, 8, 28, 0, 0, 3017, 3018, 5, 96, 0, 0, 3018, 3020, 5, 96, 0, 0, 3019, 3016, 1, 0, 0, 0, 3019, 3017, 1, 0, 0, 0, 3020, 3023, 1, 0, 0, 0, 3021, 3019, 1, 0, 0, 0, 3021, 3022, 1, 0, 0, 0, 3022, 3024, 1, 0, 0, 0, 3023, 3021, 1, 0, 0, 0, 3024, 3025, 5, 96, 0, 0, 3025, 672, 1, 0, 0, 0, 3026, 3028, 7, 3, 0, 0, 3027, 3029, 7, 29, 0, 0, 3028, 3027, 1, 0, 0, 0, 3028, 3029, 1, 0, 0, 0, 3029, 3031, 1, 0, 0, 0, 3030, 3032, 3, 675, 337, 0, 3031, 3030, 1, 0, 0, 0, 3032, 3033, 1, 0, 0, 0, 3033, 3031, 1, 0, 0, 0, 3033, 3034, 1, 0, 0, 0, 3034, 674, 1, 0, 0, 0, 3035, 3036, 7, 30, 0, 0, 3036, 676, 1, 0, 0, 0, 3037, 3038, 7, 31, 0, 0, 3038, 678, 1, 0, 0, 0, 3039, 3040, 5, 45, 0, 0, 3040, 3041, 5, 45, 0, 0, 3041, 3045, 1, 0, 0, 0, 3042, 3044, 8, 32, 0, 0, 3043, 3042, 1, 0, 0, 0, 3044, 3047, 1, 0, 0, 0, 3045, 3043, 1, 0, 0, 0, 3045, 3046, 1, 0, 0, 0, 3046, 3049, 1, 0, 0, 0, 3047, 3045, 1, 0, 0, 0, 3048, 3050, 5, 13, 0, 0, 3049, 3048, 1, 0, 0, 0, 3049, 3050, 1, 0, 0, 0, 3050, 3052, 1, 0, 0, 0, 3051, 3053, 5, 10, 0, 0, 3052, 3051, 1, 0, 0, 0, 3052, 3053, 1, 0, 0, 0, 3053, 3054, 1, 0, 0, 0, 3054, 3055, 6, 339, 0, 0, 3055, 680, 1, 0, 0, 0, 3056, 3057, 5, 47, 0, 0, 3057, 3058, 5, 42, 0, 0, 3058, 3062, 1, 0, 0, 0, 3059, 3061, 9, 0, 0, 0, 3060, 3059, 1, 0, 0, 0, 3061, 3064, 1, 0, 0, 0, 3062, 3063, 1, 0, 0, 0, 3062, 3060, 1, 0, 0, 0, 3063, 3065, 1, 0, 0, 0, 3064, 3062, 1, 0, 0, 0, 3065, 3066, 5, 42, 0, 0, 3066, 3067, 5, 47, 0, 0, 3067, 3068, 1, 0, 0, 0, 3068, 3069, 6, 340, 0, 0, 3069, 682, 1, 0, 0, 0, 3070, 3072, 7, 33, 0, 0, 3071, 3070, 1, 0, 0, 0, 3072, 3073, 1, 0, 0, 0, 3073, 3071, 1, 0, 0, 0, 3073, 3074, 1, 0, 0, 0, 3074, 3075, 1, 0, 0, 0, 3075, 3076, 6, 341, 1, 0, 3076, 684, 1, 0, 0, 0, 3077, 3078, 9, 0, 0, 0, 3078, 686, 1, 0, 0, 0, 33, 0, 2828, 2901, 2903, 2915, 2917, 2928, 2936, 2941, 2947, 2954, 2956, 2961, 2967, 2970, 2978, 2982, 2986, 2991, 2993, 3000, 3002, 3008, 3010, 3019, 3021, 3028, 3033, 3045, 3049, 3052, 3062, 3073, 2, 6, 0, 0, 0, 1, 0] \ No newline at end of file diff --git a/src/autocomplete/databases/trino/generated/TrinoLexer.tokens b/src/autocomplete/databases/trino/generated/TrinoLexer.tokens new file mode 100644 index 000000000..b56900591 --- /dev/null +++ b/src/autocomplete/databases/trino/generated/TrinoLexer.tokens @@ -0,0 +1,665 @@ +ABSENT_=1 +ADD_=2 +ADMIN_=3 +AFTER_=4 +ALL_=5 +ALTER_=6 +ANALYZE_=7 +AND_=8 +ANY_=9 +ARRAY_=10 +AS_=11 +ASC_=12 +AT_=13 +AUTHORIZATION_=14 +BEGIN_=15 +BERNOULLI_=16 +BETWEEN_=17 +BOTH_=18 +BY_=19 +CALL_=20 +CALLED_=21 +CASCADE_=22 +CASE_=23 +CAST_=24 +CATALOG_=25 +CATALOGS_=26 +COLUMN_=27 +COLUMNS_=28 +COMMENT_=29 +COMMIT_=30 +COMMITTED_=31 +CONDITIONAL_=32 +CONSTRAINT_=33 +COUNT_=34 +COPARTITION_=35 +CREATE_=36 +CROSS_=37 +CUBE_=38 +CURRENT_=39 +CURRENT_CATALOG_=40 +CURRENT_DATE_=41 +CURRENT_PATH_=42 +CURRENT_ROLE_=43 +CURRENT_SCHEMA_=44 +CURRENT_TIME_=45 +CURRENT_TIMESTAMP_=46 +CURRENT_USER_=47 +DATA_=48 +DATE_=49 +DAY_=50 +DEALLOCATE_=51 +DECLARE_=52 +DEFAULT_=53 +DEFINE_=54 +DEFINER_=55 +DELETE_=56 +DENY_=57 +DESC_=58 +DESCRIBE_=59 +DESCRIPTOR_=60 +DETERMINISTIC_=61 +DISTINCT_=62 +DISTRIBUTED_=63 +DO_=64 +DOUBLE_=65 +DROP_=66 +ELSE_=67 +EMPTY_=68 +ELSEIF_=69 +ENCODING_=70 +END_=71 +ERROR_=72 +ESCAPE_=73 +EXCEPT_=74 +EXCLUDING_=75 +EXECUTE_=76 +EXISTS_=77 +EXPLAIN_=78 +EXTRACT_=79 +FALSE_=80 +FETCH_=81 +FILTER_=82 +FINAL_=83 +FIRST_=84 +FOLLOWING_=85 +FOR_=86 +FORMAT_=87 +FROM_=88 +FULL_=89 +FUNCTION_=90 +FUNCTIONS_=91 +GRACE_=92 +GRANT_=93 +GRANTED_=94 +GRANTS_=95 +GRAPHVIZ_=96 +GROUP_=97 +GROUPING_=98 +GROUPS_=99 +HAVING_=100 +HOUR_=101 +IF_=102 +IGNORE_=103 +IMMEDIATE_=104 +IN_=105 +INCLUDING_=106 +INITIAL_=107 +INNER_=108 +INPUT_=109 +INSERT_=110 +INTERSECT_=111 +INTERVAL_=112 +INTO_=113 +INVOKER_=114 +IO_=115 +IS_=116 +ISOLATION_=117 +ITERATE_=118 +JOIN_=119 +JSON_=120 +JSON_ARRAY_=121 +JSON_EXISTS_=122 +JSON_OBJECT_=123 +JSON_QUERY_=124 +JSON_TABLE_=125 +JSON_VALUE_=126 +KEEP_=127 +KEY_=128 +KEYS_=129 +LANGUAGE_=130 +LAST_=131 +LATERAL_=132 +LEADING_=133 +LEAVE_=134 +LEFT_=135 +LEVEL_=136 +LIKE_=137 +LIMIT_=138 +LISTAGG_=139 +LOCAL_=140 +LOCALTIME_=141 +LOCALTIMESTAMP_=142 +LOGICAL_=143 +LOOP_=144 +MAP_=145 +MATCH_=146 +MATCHED_=147 +MATCHES_=148 +MATCH_RECOGNIZE_=149 +MATERIALIZED_=150 +MEASURES_=151 +MERGE_=152 +MINUTE_=153 +MONTH_=154 +NATURAL_=155 +NESTED_=156 +NEXT_=157 +NFC_=158 +NFD_=159 +NFKC_=160 +NFKD_=161 +NO_=162 +NONE_=163 +NORMALIZE_=164 +NOT_=165 +NULL_=166 +NULLIF_=167 +NULLS_=168 +OBJECT_=169 +OF_=170 +OFFSET_=171 +OMIT_=172 +ON_=173 +ONE_=174 +ONLY_=175 +OPTION_=176 +OR_=177 +ORDER_=178 +ORDINALITY_=179 +OUTER_=180 +OUTPUT_=181 +OVER_=182 +OVERFLOW_=183 +PARTITION_=184 +PARTITIONS_=185 +PASSING_=186 +PAST_=187 +PATH_=188 +PATTERN_=189 +PER_=190 +PERIOD_=191 +PERMUTE_=192 +PLAN_=193 +POSITION_=194 +PRECEDING_=195 +PRECISION_=196 +PREPARE_=197 +PRIVILEGES_=198 +PROPERTIES_=199 +PRUNE_=200 +QUOTES_=201 +RANGE_=202 +READ_=203 +RECURSIVE_=204 +REFRESH_=205 +RENAME_=206 +REPEAT_=207 +REPEATABLE_=208 +REPLACE_=209 +RESET_=210 +RESPECT_=211 +RESTRICT_=212 +RETURN_=213 +RETURNING_=214 +RETURNS_=215 +REVOKE_=216 +RIGHT_=217 +ROLE_=218 +ROLES_=219 +ROLLBACK_=220 +ROLLUP_=221 +ROW_=222 +ROWS_=223 +RUNNING_=224 +SCALAR_=225 +SCHEMA_=226 +SCHEMAS_=227 +SECOND_=228 +SECURITY_=229 +SEEK_=230 +SELECT_=231 +SERIALIZABLE_=232 +SESSION_=233 +SET_=234 +SETS_=235 +SHOW_=236 +SKIP_=237 +SOME_=238 +START_=239 +STATS_=240 +SUBSET_=241 +SUBSTRING_=242 +SYSTEM_=243 +TABLE_=244 +TABLES_=245 +TABLESAMPLE_=246 +TEXT_=247 +TEXT_STRING_=248 +THEN_=249 +TIES_=250 +TIME_=251 +TIMESTAMP_=252 +TO_=253 +TRAILING_=254 +TRANSACTION_=255 +TRIM_=256 +TRUE_=257 +TRUNCATE_=258 +TRY_CAST_=259 +TYPE_=260 +UESCAPE_=261 +UNBOUNDED_=262 +UNCOMMITTED_=263 +UNCONDITIONAL_=264 +UNION_=265 +UNIQUE_=266 +UNKNOWN_=267 +UNMATCHED_=268 +UNNEST_=269 +UNTIL_=270 +UPDATE_=271 +USE_=272 +USER_=273 +USING_=274 +UTF16_=275 +UTF32_=276 +UTF8_=277 +VALIDATE_=278 +VALUE_=279 +VALUES_=280 +VERBOSE_=281 +VERSION_=282 +VIEW_=283 +WHEN_=284 +WHERE_=285 +WHILE_=286 +WINDOW_=287 +WITH_=288 +WITHIN_=289 +WITHOUT_=290 +WORK_=291 +WRAPPER_=292 +WRITE_=293 +YEAR_=294 +ZONE_=295 +EQ_=296 +NEQ_=297 +LT_=298 +LTE_=299 +GT_=300 +GTE_=301 +PLUS_=302 +MINUS_=303 +ASTERISK_=304 +SLASH_=305 +PERCENT_=306 +CONCAT_=307 +QUESTION_MARK_=308 +SEMICOLON_=309 +DOT_=310 +COLON_=311 +COMMA_=312 +LPAREN_=313 +RPAREN_=314 +LSQUARE_=315 +RSQUARE_=316 +LCURLY_=317 +RCURLY_=318 +LCURLYHYPHEN_=319 +RCURLYHYPHEN_=320 +LARROW_=321 +RARROW_=322 +RDOUBLEARROW_=323 +VBAR_=324 +DOLLAR_=325 +CARET_=326 +STRING_=327 +UNICODE_STRING_=328 +BINARY_LITERAL_=329 +INTEGER_VALUE_=330 +DECIMAL_VALUE_=331 +DOUBLE_VALUE_=332 +IDENTIFIER_=333 +DIGIT_IDENTIFIER_=334 +QUOTED_IDENTIFIER_=335 +BACKQUOTED_IDENTIFIER_=336 +SIMPLE_COMMENT_=337 +BRACKETED_COMMENT_=338 +WS_=339 +UNRECOGNIZED_=340 +'ABSENT'=1 +'ADD'=2 +'ADMIN'=3 +'AFTER'=4 +'ALL'=5 +'ALTER'=6 +'ANALYZE'=7 +'AND'=8 +'ANY'=9 +'ARRAY'=10 +'AS'=11 +'ASC'=12 +'AT'=13 +'AUTHORIZATION'=14 +'BEGIN'=15 +'BERNOULLI'=16 +'BETWEEN'=17 +'BOTH'=18 +'BY'=19 +'CALL'=20 +'CALLED'=21 +'CASCADE'=22 +'CASE'=23 +'CAST'=24 +'CATALOG'=25 +'CATALOGS'=26 +'COLUMN'=27 +'COLUMNS'=28 +'COMMENT'=29 +'COMMIT'=30 +'COMMITTED'=31 +'CONDITIONAL'=32 +'CONSTRAINT'=33 +'COUNT'=34 +'COPARTITION'=35 +'CREATE'=36 +'CROSS'=37 +'CUBE'=38 +'CURRENT'=39 +'CURRENT_CATALOG'=40 +'CURRENT_DATE'=41 +'CURRENT_PATH'=42 +'CURRENT_ROLE'=43 +'CURRENT_SCHEMA'=44 +'CURRENT_TIME'=45 +'CURRENT_TIMESTAMP'=46 +'CURRENT_USER'=47 +'DATA'=48 +'DATE'=49 +'DAY'=50 +'DEALLOCATE'=51 +'DECLARE'=52 +'DEFAULT'=53 +'DEFINE'=54 +'DEFINER'=55 +'DELETE'=56 +'DENY'=57 +'DESC'=58 +'DESCRIBE'=59 +'DESCRIPTOR'=60 +'DETERMINISTIC'=61 +'DISTINCT'=62 +'DISTRIBUTED'=63 +'DO'=64 +'DOUBLE'=65 +'DROP'=66 +'ELSE'=67 +'EMPTY'=68 +'ELSEIF'=69 +'ENCODING'=70 +'END'=71 +'ERROR'=72 +'ESCAPE'=73 +'EXCEPT'=74 +'EXCLUDING'=75 +'EXECUTE'=76 +'EXISTS'=77 +'EXPLAIN'=78 +'EXTRACT'=79 +'FALSE'=80 +'FETCH'=81 +'FILTER'=82 +'FINAL'=83 +'FIRST'=84 +'FOLLOWING'=85 +'FOR'=86 +'FORMAT'=87 +'FROM'=88 +'FULL'=89 +'FUNCTION'=90 +'FUNCTIONS'=91 +'GRACE'=92 +'GRANT'=93 +'GRANTED'=94 +'GRANTS'=95 +'GRAPHVIZ'=96 +'GROUP'=97 +'GROUPING'=98 +'GROUPS'=99 +'HAVING'=100 +'HOUR'=101 +'IF'=102 +'IGNORE'=103 +'IMMEDIATE'=104 +'IN'=105 +'INCLUDING'=106 +'INITIAL'=107 +'INNER'=108 +'INPUT'=109 +'INSERT'=110 +'INTERSECT'=111 +'INTERVAL'=112 +'INTO'=113 +'INVOKER'=114 +'IO'=115 +'IS'=116 +'ISOLATION'=117 +'ITERATE'=118 +'JOIN'=119 +'JSON'=120 +'JSON_ARRAY'=121 +'JSON_EXISTS'=122 +'JSON_OBJECT'=123 +'JSON_QUERY'=124 +'JSON_TABLE'=125 +'JSON_VALUE'=126 +'KEEP'=127 +'KEY'=128 +'KEYS'=129 +'LANGUAGE'=130 +'LAST'=131 +'LATERAL'=132 +'LEADING'=133 +'LEAVE'=134 +'LEFT'=135 +'LEVEL'=136 +'LIKE'=137 +'LIMIT'=138 +'LISTAGG'=139 +'LOCAL'=140 +'LOCALTIME'=141 +'LOCALTIMESTAMP'=142 +'LOGICAL'=143 +'LOOP'=144 +'MAP'=145 +'MATCH'=146 +'MATCHED'=147 +'MATCHES'=148 +'MATCH_RECOGNIZE'=149 +'MATERIALIZED'=150 +'MEASURES'=151 +'MERGE'=152 +'MINUTE'=153 +'MONTH'=154 +'NATURAL'=155 +'NESTED'=156 +'NEXT'=157 +'NFC'=158 +'NFD'=159 +'NFKC'=160 +'NFKD'=161 +'NO'=162 +'NONE'=163 +'NORMALIZE'=164 +'NOT'=165 +'NULL'=166 +'NULLIF'=167 +'NULLS'=168 +'OBJECT'=169 +'OF'=170 +'OFFSET'=171 +'OMIT'=172 +'ON'=173 +'ONE'=174 +'ONLY'=175 +'OPTION'=176 +'OR'=177 +'ORDER'=178 +'ORDINALITY'=179 +'OUTER'=180 +'OUTPUT'=181 +'OVER'=182 +'OVERFLOW'=183 +'PARTITION'=184 +'PARTITIONS'=185 +'PASSING'=186 +'PAST'=187 +'PATH'=188 +'PATTERN'=189 +'PER'=190 +'PERIOD'=191 +'PERMUTE'=192 +'PLAN'=193 +'POSITION'=194 +'PRECEDING'=195 +'PRECISION'=196 +'PREPARE'=197 +'PRIVILEGES'=198 +'PROPERTIES'=199 +'PRUNE'=200 +'QUOTES'=201 +'RANGE'=202 +'READ'=203 +'RECURSIVE'=204 +'REFRESH'=205 +'RENAME'=206 +'REPEAT'=207 +'REPEATABLE'=208 +'REPLACE'=209 +'RESET'=210 +'RESPECT'=211 +'RESTRICT'=212 +'RETURN'=213 +'RETURNING'=214 +'RETURNS'=215 +'REVOKE'=216 +'RIGHT'=217 +'ROLE'=218 +'ROLES'=219 +'ROLLBACK'=220 +'ROLLUP'=221 +'ROW'=222 +'ROWS'=223 +'RUNNING'=224 +'SCALAR'=225 +'SCHEMA'=226 +'SCHEMAS'=227 +'SECOND'=228 +'SECURITY'=229 +'SEEK'=230 +'SELECT'=231 +'SERIALIZABLE'=232 +'SESSION'=233 +'SET'=234 +'SETS'=235 +'SHOW'=236 +'SKIP'=237 +'SOME'=238 +'START'=239 +'STATS'=240 +'SUBSET'=241 +'SUBSTRING'=242 +'SYSTEM'=243 +'TABLE'=244 +'TABLES'=245 +'TABLESAMPLE'=246 +'TEXT'=247 +'STRING'=248 +'THEN'=249 +'TIES'=250 +'TIME'=251 +'TIMESTAMP'=252 +'TO'=253 +'TRAILING'=254 +'TRANSACTION'=255 +'TRIM'=256 +'TRUE'=257 +'TRUNCATE'=258 +'TRY_CAST'=259 +'TYPE'=260 +'UESCAPE'=261 +'UNBOUNDED'=262 +'UNCOMMITTED'=263 +'UNCONDITIONAL'=264 +'UNION'=265 +'UNIQUE'=266 +'UNKNOWN'=267 +'UNMATCHED'=268 +'UNNEST'=269 +'UNTIL'=270 +'UPDATE'=271 +'USE'=272 +'USER'=273 +'USING'=274 +'UTF16'=275 +'UTF32'=276 +'UTF8'=277 +'VALIDATE'=278 +'VALUE'=279 +'VALUES'=280 +'VERBOSE'=281 +'VERSION'=282 +'VIEW'=283 +'WHEN'=284 +'WHERE'=285 +'WHILE'=286 +'WINDOW'=287 +'WITH'=288 +'WITHIN'=289 +'WITHOUT'=290 +'WORK'=291 +'WRAPPER'=292 +'WRITE'=293 +'YEAR'=294 +'ZONE'=295 +'='=296 +'<'=298 +'<='=299 +'>'=300 +'>='=301 +'+'=302 +'-'=303 +'*'=304 +'/'=305 +'%'=306 +'||'=307 +'?'=308 +';'=309 +'.'=310 +'_:'=311 +','=312 +'('=313 +')'=314 +'['=315 +']'=316 +'{'=317 +'}'=318 +'{-'=319 +'-}'=320 +'<-'=321 +'->'=322 +'=>'=323 +'|'=324 +'$'=325 +'^'=326 diff --git a/src/autocomplete/databases/trino/generated/TrinoLexer.ts b/src/autocomplete/databases/trino/generated/TrinoLexer.ts new file mode 100644 index 000000000..cf824382e --- /dev/null +++ b/src/autocomplete/databases/trino/generated/TrinoLexer.ts @@ -0,0 +1,1728 @@ +//////////////////////////////////////////////////////// +// THIS FILE IS AUTOGENERATED, DON'T EDIT IT MANUALLY // +//////////////////////////////////////////////////////// + +// We don't really want to check types in generated code +// @ts-nocheck + + + +// Generated from src/autocomplete/databases/trino/grammar/TrinoLexer.g4 by ANTLR 4.13.1 + +import * as antlr from "antlr4ng"; +import { Token } from "antlr4ng"; + + +export class TrinoLexer extends antlr.Lexer { + public static readonly ABSENT_ = 1; + public static readonly ADD_ = 2; + public static readonly ADMIN_ = 3; + public static readonly AFTER_ = 4; + public static readonly ALL_ = 5; + public static readonly ALTER_ = 6; + public static readonly ANALYZE_ = 7; + public static readonly AND_ = 8; + public static readonly ANY_ = 9; + public static readonly ARRAY_ = 10; + public static readonly AS_ = 11; + public static readonly ASC_ = 12; + public static readonly AT_ = 13; + public static readonly AUTHORIZATION_ = 14; + public static readonly BEGIN_ = 15; + public static readonly BERNOULLI_ = 16; + public static readonly BETWEEN_ = 17; + public static readonly BOTH_ = 18; + public static readonly BY_ = 19; + public static readonly CALL_ = 20; + public static readonly CALLED_ = 21; + public static readonly CASCADE_ = 22; + public static readonly CASE_ = 23; + public static readonly CAST_ = 24; + public static readonly CATALOG_ = 25; + public static readonly CATALOGS_ = 26; + public static readonly COLUMN_ = 27; + public static readonly COLUMNS_ = 28; + public static readonly COMMENT_ = 29; + public static readonly COMMIT_ = 30; + public static readonly COMMITTED_ = 31; + public static readonly CONDITIONAL_ = 32; + public static readonly CONSTRAINT_ = 33; + public static readonly COUNT_ = 34; + public static readonly COPARTITION_ = 35; + public static readonly CREATE_ = 36; + public static readonly CROSS_ = 37; + public static readonly CUBE_ = 38; + public static readonly CURRENT_ = 39; + public static readonly CURRENT_CATALOG_ = 40; + public static readonly CURRENT_DATE_ = 41; + public static readonly CURRENT_PATH_ = 42; + public static readonly CURRENT_ROLE_ = 43; + public static readonly CURRENT_SCHEMA_ = 44; + public static readonly CURRENT_TIME_ = 45; + public static readonly CURRENT_TIMESTAMP_ = 46; + public static readonly CURRENT_USER_ = 47; + public static readonly DATA_ = 48; + public static readonly DATE_ = 49; + public static readonly DAY_ = 50; + public static readonly DEALLOCATE_ = 51; + public static readonly DECLARE_ = 52; + public static readonly DEFAULT_ = 53; + public static readonly DEFINE_ = 54; + public static readonly DEFINER_ = 55; + public static readonly DELETE_ = 56; + public static readonly DENY_ = 57; + public static readonly DESC_ = 58; + public static readonly DESCRIBE_ = 59; + public static readonly DESCRIPTOR_ = 60; + public static readonly DETERMINISTIC_ = 61; + public static readonly DISTINCT_ = 62; + public static readonly DISTRIBUTED_ = 63; + public static readonly DO_ = 64; + public static readonly DOUBLE_ = 65; + public static readonly DROP_ = 66; + public static readonly ELSE_ = 67; + public static readonly EMPTY_ = 68; + public static readonly ELSEIF_ = 69; + public static readonly ENCODING_ = 70; + public static readonly END_ = 71; + public static readonly ERROR_ = 72; + public static readonly ESCAPE_ = 73; + public static readonly EXCEPT_ = 74; + public static readonly EXCLUDING_ = 75; + public static readonly EXECUTE_ = 76; + public static readonly EXISTS_ = 77; + public static readonly EXPLAIN_ = 78; + public static readonly EXTRACT_ = 79; + public static readonly FALSE_ = 80; + public static readonly FETCH_ = 81; + public static readonly FILTER_ = 82; + public static readonly FINAL_ = 83; + public static readonly FIRST_ = 84; + public static readonly FOLLOWING_ = 85; + public static readonly FOR_ = 86; + public static readonly FORMAT_ = 87; + public static readonly FROM_ = 88; + public static readonly FULL_ = 89; + public static readonly FUNCTION_ = 90; + public static readonly FUNCTIONS_ = 91; + public static readonly GRACE_ = 92; + public static readonly GRANT_ = 93; + public static readonly GRANTED_ = 94; + public static readonly GRANTS_ = 95; + public static readonly GRAPHVIZ_ = 96; + public static readonly GROUP_ = 97; + public static readonly GROUPING_ = 98; + public static readonly GROUPS_ = 99; + public static readonly HAVING_ = 100; + public static readonly HOUR_ = 101; + public static readonly IF_ = 102; + public static readonly IGNORE_ = 103; + public static readonly IMMEDIATE_ = 104; + public static readonly IN_ = 105; + public static readonly INCLUDING_ = 106; + public static readonly INITIAL_ = 107; + public static readonly INNER_ = 108; + public static readonly INPUT_ = 109; + public static readonly INSERT_ = 110; + public static readonly INTERSECT_ = 111; + public static readonly INTERVAL_ = 112; + public static readonly INTO_ = 113; + public static readonly INVOKER_ = 114; + public static readonly IO_ = 115; + public static readonly IS_ = 116; + public static readonly ISOLATION_ = 117; + public static readonly ITERATE_ = 118; + public static readonly JOIN_ = 119; + public static readonly JSON_ = 120; + public static readonly JSON_ARRAY_ = 121; + public static readonly JSON_EXISTS_ = 122; + public static readonly JSON_OBJECT_ = 123; + public static readonly JSON_QUERY_ = 124; + public static readonly JSON_TABLE_ = 125; + public static readonly JSON_VALUE_ = 126; + public static readonly KEEP_ = 127; + public static readonly KEY_ = 128; + public static readonly KEYS_ = 129; + public static readonly LANGUAGE_ = 130; + public static readonly LAST_ = 131; + public static readonly LATERAL_ = 132; + public static readonly LEADING_ = 133; + public static readonly LEAVE_ = 134; + public static readonly LEFT_ = 135; + public static readonly LEVEL_ = 136; + public static readonly LIKE_ = 137; + public static readonly LIMIT_ = 138; + public static readonly LISTAGG_ = 139; + public static readonly LOCAL_ = 140; + public static readonly LOCALTIME_ = 141; + public static readonly LOCALTIMESTAMP_ = 142; + public static readonly LOGICAL_ = 143; + public static readonly LOOP_ = 144; + public static readonly MAP_ = 145; + public static readonly MATCH_ = 146; + public static readonly MATCHED_ = 147; + public static readonly MATCHES_ = 148; + public static readonly MATCH_RECOGNIZE_ = 149; + public static readonly MATERIALIZED_ = 150; + public static readonly MEASURES_ = 151; + public static readonly MERGE_ = 152; + public static readonly MINUTE_ = 153; + public static readonly MONTH_ = 154; + public static readonly NATURAL_ = 155; + public static readonly NESTED_ = 156; + public static readonly NEXT_ = 157; + public static readonly NFC_ = 158; + public static readonly NFD_ = 159; + public static readonly NFKC_ = 160; + public static readonly NFKD_ = 161; + public static readonly NO_ = 162; + public static readonly NONE_ = 163; + public static readonly NORMALIZE_ = 164; + public static readonly NOT_ = 165; + public static readonly NULL_ = 166; + public static readonly NULLIF_ = 167; + public static readonly NULLS_ = 168; + public static readonly OBJECT_ = 169; + public static readonly OF_ = 170; + public static readonly OFFSET_ = 171; + public static readonly OMIT_ = 172; + public static readonly ON_ = 173; + public static readonly ONE_ = 174; + public static readonly ONLY_ = 175; + public static readonly OPTION_ = 176; + public static readonly OR_ = 177; + public static readonly ORDER_ = 178; + public static readonly ORDINALITY_ = 179; + public static readonly OUTER_ = 180; + public static readonly OUTPUT_ = 181; + public static readonly OVER_ = 182; + public static readonly OVERFLOW_ = 183; + public static readonly PARTITION_ = 184; + public static readonly PARTITIONS_ = 185; + public static readonly PASSING_ = 186; + public static readonly PAST_ = 187; + public static readonly PATH_ = 188; + public static readonly PATTERN_ = 189; + public static readonly PER_ = 190; + public static readonly PERIOD_ = 191; + public static readonly PERMUTE_ = 192; + public static readonly PLAN_ = 193; + public static readonly POSITION_ = 194; + public static readonly PRECEDING_ = 195; + public static readonly PRECISION_ = 196; + public static readonly PREPARE_ = 197; + public static readonly PRIVILEGES_ = 198; + public static readonly PROPERTIES_ = 199; + public static readonly PRUNE_ = 200; + public static readonly QUOTES_ = 201; + public static readonly RANGE_ = 202; + public static readonly READ_ = 203; + public static readonly RECURSIVE_ = 204; + public static readonly REFRESH_ = 205; + public static readonly RENAME_ = 206; + public static readonly REPEAT_ = 207; + public static readonly REPEATABLE_ = 208; + public static readonly REPLACE_ = 209; + public static readonly RESET_ = 210; + public static readonly RESPECT_ = 211; + public static readonly RESTRICT_ = 212; + public static readonly RETURN_ = 213; + public static readonly RETURNING_ = 214; + public static readonly RETURNS_ = 215; + public static readonly REVOKE_ = 216; + public static readonly RIGHT_ = 217; + public static readonly ROLE_ = 218; + public static readonly ROLES_ = 219; + public static readonly ROLLBACK_ = 220; + public static readonly ROLLUP_ = 221; + public static readonly ROW_ = 222; + public static readonly ROWS_ = 223; + public static readonly RUNNING_ = 224; + public static readonly SCALAR_ = 225; + public static readonly SCHEMA_ = 226; + public static readonly SCHEMAS_ = 227; + public static readonly SECOND_ = 228; + public static readonly SECURITY_ = 229; + public static readonly SEEK_ = 230; + public static readonly SELECT_ = 231; + public static readonly SERIALIZABLE_ = 232; + public static readonly SESSION_ = 233; + public static readonly SET_ = 234; + public static readonly SETS_ = 235; + public static readonly SHOW_ = 236; + public static readonly SKIP_ = 237; + public static readonly SOME_ = 238; + public static readonly START_ = 239; + public static readonly STATS_ = 240; + public static readonly SUBSET_ = 241; + public static readonly SUBSTRING_ = 242; + public static readonly SYSTEM_ = 243; + public static readonly TABLE_ = 244; + public static readonly TABLES_ = 245; + public static readonly TABLESAMPLE_ = 246; + public static readonly TEXT_ = 247; + public static readonly TEXT_STRING_ = 248; + public static readonly THEN_ = 249; + public static readonly TIES_ = 250; + public static readonly TIME_ = 251; + public static readonly TIMESTAMP_ = 252; + public static readonly TO_ = 253; + public static readonly TRAILING_ = 254; + public static readonly TRANSACTION_ = 255; + public static readonly TRIM_ = 256; + public static readonly TRUE_ = 257; + public static readonly TRUNCATE_ = 258; + public static readonly TRY_CAST_ = 259; + public static readonly TYPE_ = 260; + public static readonly UESCAPE_ = 261; + public static readonly UNBOUNDED_ = 262; + public static readonly UNCOMMITTED_ = 263; + public static readonly UNCONDITIONAL_ = 264; + public static readonly UNION_ = 265; + public static readonly UNIQUE_ = 266; + public static readonly UNKNOWN_ = 267; + public static readonly UNMATCHED_ = 268; + public static readonly UNNEST_ = 269; + public static readonly UNTIL_ = 270; + public static readonly UPDATE_ = 271; + public static readonly USE_ = 272; + public static readonly USER_ = 273; + public static readonly USING_ = 274; + public static readonly UTF16_ = 275; + public static readonly UTF32_ = 276; + public static readonly UTF8_ = 277; + public static readonly VALIDATE_ = 278; + public static readonly VALUE_ = 279; + public static readonly VALUES_ = 280; + public static readonly VERBOSE_ = 281; + public static readonly VERSION_ = 282; + public static readonly VIEW_ = 283; + public static readonly WHEN_ = 284; + public static readonly WHERE_ = 285; + public static readonly WHILE_ = 286; + public static readonly WINDOW_ = 287; + public static readonly WITH_ = 288; + public static readonly WITHIN_ = 289; + public static readonly WITHOUT_ = 290; + public static readonly WORK_ = 291; + public static readonly WRAPPER_ = 292; + public static readonly WRITE_ = 293; + public static readonly YEAR_ = 294; + public static readonly ZONE_ = 295; + public static readonly EQ_ = 296; + public static readonly NEQ_ = 297; + public static readonly LT_ = 298; + public static readonly LTE_ = 299; + public static readonly GT_ = 300; + public static readonly GTE_ = 301; + public static readonly PLUS_ = 302; + public static readonly MINUS_ = 303; + public static readonly ASTERISK_ = 304; + public static readonly SLASH_ = 305; + public static readonly PERCENT_ = 306; + public static readonly CONCAT_ = 307; + public static readonly QUESTION_MARK_ = 308; + public static readonly SEMICOLON_ = 309; + public static readonly DOT_ = 310; + public static readonly COLON_ = 311; + public static readonly COMMA_ = 312; + public static readonly LPAREN_ = 313; + public static readonly RPAREN_ = 314; + public static readonly LSQUARE_ = 315; + public static readonly RSQUARE_ = 316; + public static readonly LCURLY_ = 317; + public static readonly RCURLY_ = 318; + public static readonly LCURLYHYPHEN_ = 319; + public static readonly RCURLYHYPHEN_ = 320; + public static readonly LARROW_ = 321; + public static readonly RARROW_ = 322; + public static readonly RDOUBLEARROW_ = 323; + public static readonly VBAR_ = 324; + public static readonly DOLLAR_ = 325; + public static readonly CARET_ = 326; + public static readonly STRING_ = 327; + public static readonly UNICODE_STRING_ = 328; + public static readonly BINARY_LITERAL_ = 329; + public static readonly INTEGER_VALUE_ = 330; + public static readonly DECIMAL_VALUE_ = 331; + public static readonly DOUBLE_VALUE_ = 332; + public static readonly IDENTIFIER_ = 333; + public static readonly DIGIT_IDENTIFIER_ = 334; + public static readonly QUOTED_IDENTIFIER_ = 335; + public static readonly BACKQUOTED_IDENTIFIER_ = 336; + public static readonly SIMPLE_COMMENT_ = 337; + public static readonly BRACKETED_COMMENT_ = 338; + public static readonly WS_ = 339; + public static readonly UNRECOGNIZED_ = 340; + + public static readonly channelNames = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + ]; + + public static readonly literalNames = [ + null, "'ABSENT'", "'ADD'", "'ADMIN'", "'AFTER'", "'ALL'", "'ALTER'", + "'ANALYZE'", "'AND'", "'ANY'", "'ARRAY'", "'AS'", "'ASC'", "'AT'", + "'AUTHORIZATION'", "'BEGIN'", "'BERNOULLI'", "'BETWEEN'", "'BOTH'", + "'BY'", "'CALL'", "'CALLED'", "'CASCADE'", "'CASE'", "'CAST'", "'CATALOG'", + "'CATALOGS'", "'COLUMN'", "'COLUMNS'", "'COMMENT'", "'COMMIT'", + "'COMMITTED'", "'CONDITIONAL'", "'CONSTRAINT'", "'COUNT'", "'COPARTITION'", + "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", "'CURRENT_CATALOG'", + "'CURRENT_DATE'", "'CURRENT_PATH'", "'CURRENT_ROLE'", "'CURRENT_SCHEMA'", + "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DATA'", + "'DATE'", "'DAY'", "'DEALLOCATE'", "'DECLARE'", "'DEFAULT'", "'DEFINE'", + "'DEFINER'", "'DELETE'", "'DENY'", "'DESC'", "'DESCRIBE'", "'DESCRIPTOR'", + "'DETERMINISTIC'", "'DISTINCT'", "'DISTRIBUTED'", "'DO'", "'DOUBLE'", + "'DROP'", "'ELSE'", "'EMPTY'", "'ELSEIF'", "'ENCODING'", "'END'", + "'ERROR'", "'ESCAPE'", "'EXCEPT'", "'EXCLUDING'", "'EXECUTE'", "'EXISTS'", + "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FILTER'", "'FINAL'", + "'FIRST'", "'FOLLOWING'", "'FOR'", "'FORMAT'", "'FROM'", "'FULL'", + "'FUNCTION'", "'FUNCTIONS'", "'GRACE'", "'GRANT'", "'GRANTED'", + "'GRANTS'", "'GRAPHVIZ'", "'GROUP'", "'GROUPING'", "'GROUPS'", "'HAVING'", + "'HOUR'", "'IF'", "'IGNORE'", "'IMMEDIATE'", "'IN'", "'INCLUDING'", + "'INITIAL'", "'INNER'", "'INPUT'", "'INSERT'", "'INTERSECT'", "'INTERVAL'", + "'INTO'", "'INVOKER'", "'IO'", "'IS'", "'ISOLATION'", "'ITERATE'", + "'JOIN'", "'JSON'", "'JSON_ARRAY'", "'JSON_EXISTS'", "'JSON_OBJECT'", + "'JSON_QUERY'", "'JSON_TABLE'", "'JSON_VALUE'", "'KEEP'", "'KEY'", + "'KEYS'", "'LANGUAGE'", "'LAST'", "'LATERAL'", "'LEADING'", "'LEAVE'", + "'LEFT'", "'LEVEL'", "'LIKE'", "'LIMIT'", "'LISTAGG'", "'LOCAL'", + "'LOCALTIME'", "'LOCALTIMESTAMP'", "'LOGICAL'", "'LOOP'", "'MAP'", + "'MATCH'", "'MATCHED'", "'MATCHES'", "'MATCH_RECOGNIZE'", "'MATERIALIZED'", + "'MEASURES'", "'MERGE'", "'MINUTE'", "'MONTH'", "'NATURAL'", "'NESTED'", + "'NEXT'", "'NFC'", "'NFD'", "'NFKC'", "'NFKD'", "'NO'", "'NONE'", + "'NORMALIZE'", "'NOT'", "'NULL'", "'NULLIF'", "'NULLS'", "'OBJECT'", + "'OF'", "'OFFSET'", "'OMIT'", "'ON'", "'ONE'", "'ONLY'", "'OPTION'", + "'OR'", "'ORDER'", "'ORDINALITY'", "'OUTER'", "'OUTPUT'", "'OVER'", + "'OVERFLOW'", "'PARTITION'", "'PARTITIONS'", "'PASSING'", "'PAST'", + "'PATH'", "'PATTERN'", "'PER'", "'PERIOD'", "'PERMUTE'", "'PLAN'", + "'POSITION'", "'PRECEDING'", "'PRECISION'", "'PREPARE'", "'PRIVILEGES'", + "'PROPERTIES'", "'PRUNE'", "'QUOTES'", "'RANGE'", "'READ'", "'RECURSIVE'", + "'REFRESH'", "'RENAME'", "'REPEAT'", "'REPEATABLE'", "'REPLACE'", + "'RESET'", "'RESPECT'", "'RESTRICT'", "'RETURN'", "'RETURNING'", + "'RETURNS'", "'REVOKE'", "'RIGHT'", "'ROLE'", "'ROLES'", "'ROLLBACK'", + "'ROLLUP'", "'ROW'", "'ROWS'", "'RUNNING'", "'SCALAR'", "'SCHEMA'", + "'SCHEMAS'", "'SECOND'", "'SECURITY'", "'SEEK'", "'SELECT'", "'SERIALIZABLE'", + "'SESSION'", "'SET'", "'SETS'", "'SHOW'", "'SKIP'", "'SOME'", "'START'", + "'STATS'", "'SUBSET'", "'SUBSTRING'", "'SYSTEM'", "'TABLE'", "'TABLES'", + "'TABLESAMPLE'", "'TEXT'", "'STRING'", "'THEN'", "'TIES'", "'TIME'", + "'TIMESTAMP'", "'TO'", "'TRAILING'", "'TRANSACTION'", "'TRIM'", + "'TRUE'", "'TRUNCATE'", "'TRY_CAST'", "'TYPE'", "'UESCAPE'", "'UNBOUNDED'", + "'UNCOMMITTED'", "'UNCONDITIONAL'", "'UNION'", "'UNIQUE'", "'UNKNOWN'", + "'UNMATCHED'", "'UNNEST'", "'UNTIL'", "'UPDATE'", "'USE'", "'USER'", + "'USING'", "'UTF16'", "'UTF32'", "'UTF8'", "'VALIDATE'", "'VALUE'", + "'VALUES'", "'VERBOSE'", "'VERSION'", "'VIEW'", "'WHEN'", "'WHERE'", + "'WHILE'", "'WINDOW'", "'WITH'", "'WITHIN'", "'WITHOUT'", "'WORK'", + "'WRAPPER'", "'WRITE'", "'YEAR'", "'ZONE'", "'='", null, "'<'", + "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'||'", + "'?'", "';'", "'.'", "'_:'", "','", "'('", "')'", "'['", "']'", + "'{'", "'}'", "'{-'", "'-}'", "'<-'", "'->'", "'=>'", "'|'", "'$'", + "'^'" + ]; + + public static readonly symbolicNames = [ + null, "ABSENT_", "ADD_", "ADMIN_", "AFTER_", "ALL_", "ALTER_", "ANALYZE_", + "AND_", "ANY_", "ARRAY_", "AS_", "ASC_", "AT_", "AUTHORIZATION_", + "BEGIN_", "BERNOULLI_", "BETWEEN_", "BOTH_", "BY_", "CALL_", "CALLED_", + "CASCADE_", "CASE_", "CAST_", "CATALOG_", "CATALOGS_", "COLUMN_", + "COLUMNS_", "COMMENT_", "COMMIT_", "COMMITTED_", "CONDITIONAL_", + "CONSTRAINT_", "COUNT_", "COPARTITION_", "CREATE_", "CROSS_", "CUBE_", + "CURRENT_", "CURRENT_CATALOG_", "CURRENT_DATE_", "CURRENT_PATH_", + "CURRENT_ROLE_", "CURRENT_SCHEMA_", "CURRENT_TIME_", "CURRENT_TIMESTAMP_", + "CURRENT_USER_", "DATA_", "DATE_", "DAY_", "DEALLOCATE_", "DECLARE_", + "DEFAULT_", "DEFINE_", "DEFINER_", "DELETE_", "DENY_", "DESC_", + "DESCRIBE_", "DESCRIPTOR_", "DETERMINISTIC_", "DISTINCT_", "DISTRIBUTED_", + "DO_", "DOUBLE_", "DROP_", "ELSE_", "EMPTY_", "ELSEIF_", "ENCODING_", + "END_", "ERROR_", "ESCAPE_", "EXCEPT_", "EXCLUDING_", "EXECUTE_", + "EXISTS_", "EXPLAIN_", "EXTRACT_", "FALSE_", "FETCH_", "FILTER_", + "FINAL_", "FIRST_", "FOLLOWING_", "FOR_", "FORMAT_", "FROM_", "FULL_", + "FUNCTION_", "FUNCTIONS_", "GRACE_", "GRANT_", "GRANTED_", "GRANTS_", + "GRAPHVIZ_", "GROUP_", "GROUPING_", "GROUPS_", "HAVING_", "HOUR_", + "IF_", "IGNORE_", "IMMEDIATE_", "IN_", "INCLUDING_", "INITIAL_", + "INNER_", "INPUT_", "INSERT_", "INTERSECT_", "INTERVAL_", "INTO_", + "INVOKER_", "IO_", "IS_", "ISOLATION_", "ITERATE_", "JOIN_", "JSON_", + "JSON_ARRAY_", "JSON_EXISTS_", "JSON_OBJECT_", "JSON_QUERY_", "JSON_TABLE_", + "JSON_VALUE_", "KEEP_", "KEY_", "KEYS_", "LANGUAGE_", "LAST_", "LATERAL_", + "LEADING_", "LEAVE_", "LEFT_", "LEVEL_", "LIKE_", "LIMIT_", "LISTAGG_", + "LOCAL_", "LOCALTIME_", "LOCALTIMESTAMP_", "LOGICAL_", "LOOP_", + "MAP_", "MATCH_", "MATCHED_", "MATCHES_", "MATCH_RECOGNIZE_", "MATERIALIZED_", + "MEASURES_", "MERGE_", "MINUTE_", "MONTH_", "NATURAL_", "NESTED_", + "NEXT_", "NFC_", "NFD_", "NFKC_", "NFKD_", "NO_", "NONE_", "NORMALIZE_", + "NOT_", "NULL_", "NULLIF_", "NULLS_", "OBJECT_", "OF_", "OFFSET_", + "OMIT_", "ON_", "ONE_", "ONLY_", "OPTION_", "OR_", "ORDER_", "ORDINALITY_", + "OUTER_", "OUTPUT_", "OVER_", "OVERFLOW_", "PARTITION_", "PARTITIONS_", + "PASSING_", "PAST_", "PATH_", "PATTERN_", "PER_", "PERIOD_", "PERMUTE_", + "PLAN_", "POSITION_", "PRECEDING_", "PRECISION_", "PREPARE_", "PRIVILEGES_", + "PROPERTIES_", "PRUNE_", "QUOTES_", "RANGE_", "READ_", "RECURSIVE_", + "REFRESH_", "RENAME_", "REPEAT_", "REPEATABLE_", "REPLACE_", "RESET_", + "RESPECT_", "RESTRICT_", "RETURN_", "RETURNING_", "RETURNS_", "REVOKE_", + "RIGHT_", "ROLE_", "ROLES_", "ROLLBACK_", "ROLLUP_", "ROW_", "ROWS_", + "RUNNING_", "SCALAR_", "SCHEMA_", "SCHEMAS_", "SECOND_", "SECURITY_", + "SEEK_", "SELECT_", "SERIALIZABLE_", "SESSION_", "SET_", "SETS_", + "SHOW_", "SKIP_", "SOME_", "START_", "STATS_", "SUBSET_", "SUBSTRING_", + "SYSTEM_", "TABLE_", "TABLES_", "TABLESAMPLE_", "TEXT_", "TEXT_STRING_", + "THEN_", "TIES_", "TIME_", "TIMESTAMP_", "TO_", "TRAILING_", "TRANSACTION_", + "TRIM_", "TRUE_", "TRUNCATE_", "TRY_CAST_", "TYPE_", "UESCAPE_", + "UNBOUNDED_", "UNCOMMITTED_", "UNCONDITIONAL_", "UNION_", "UNIQUE_", + "UNKNOWN_", "UNMATCHED_", "UNNEST_", "UNTIL_", "UPDATE_", "USE_", + "USER_", "USING_", "UTF16_", "UTF32_", "UTF8_", "VALIDATE_", "VALUE_", + "VALUES_", "VERBOSE_", "VERSION_", "VIEW_", "WHEN_", "WHERE_", "WHILE_", + "WINDOW_", "WITH_", "WITHIN_", "WITHOUT_", "WORK_", "WRAPPER_", + "WRITE_", "YEAR_", "ZONE_", "EQ_", "NEQ_", "LT_", "LTE_", "GT_", + "GTE_", "PLUS_", "MINUS_", "ASTERISK_", "SLASH_", "PERCENT_", "CONCAT_", + "QUESTION_MARK_", "SEMICOLON_", "DOT_", "COLON_", "COMMA_", "LPAREN_", + "RPAREN_", "LSQUARE_", "RSQUARE_", "LCURLY_", "RCURLY_", "LCURLYHYPHEN_", + "RCURLYHYPHEN_", "LARROW_", "RARROW_", "RDOUBLEARROW_", "VBAR_", + "DOLLAR_", "CARET_", "STRING_", "UNICODE_STRING_", "BINARY_LITERAL_", + "INTEGER_VALUE_", "DECIMAL_VALUE_", "DOUBLE_VALUE_", "IDENTIFIER_", + "DIGIT_IDENTIFIER_", "QUOTED_IDENTIFIER_", "BACKQUOTED_IDENTIFIER_", + "SIMPLE_COMMENT_", "BRACKETED_COMMENT_", "WS_", "UNRECOGNIZED_" + ]; + + public static readonly modeNames = [ + "DEFAULT_MODE", + ]; + + public static readonly ruleNames = [ + "ABSENT_", "ADD_", "ADMIN_", "AFTER_", "ALL_", "ALTER_", "ANALYZE_", + "AND_", "ANY_", "ARRAY_", "AS_", "ASC_", "AT_", "AUTHORIZATION_", + "BEGIN_", "BERNOULLI_", "BETWEEN_", "BOTH_", "BY_", "CALL_", "CALLED_", + "CASCADE_", "CASE_", "CAST_", "CATALOG_", "CATALOGS_", "COLUMN_", + "COLUMNS_", "COMMENT_", "COMMIT_", "COMMITTED_", "CONDITIONAL_", + "CONSTRAINT_", "COUNT_", "COPARTITION_", "CREATE_", "CROSS_", "CUBE_", + "CURRENT_", "CURRENT_CATALOG_", "CURRENT_DATE_", "CURRENT_PATH_", + "CURRENT_ROLE_", "CURRENT_SCHEMA_", "CURRENT_TIME_", "CURRENT_TIMESTAMP_", + "CURRENT_USER_", "DATA_", "DATE_", "DAY_", "DEALLOCATE_", "DECLARE_", + "DEFAULT_", "DEFINE_", "DEFINER_", "DELETE_", "DENY_", "DESC_", + "DESCRIBE_", "DESCRIPTOR_", "DETERMINISTIC_", "DISTINCT_", "DISTRIBUTED_", + "DO_", "DOUBLE_", "DROP_", "ELSE_", "EMPTY_", "ELSEIF_", "ENCODING_", + "END_", "ERROR_", "ESCAPE_", "EXCEPT_", "EXCLUDING_", "EXECUTE_", + "EXISTS_", "EXPLAIN_", "EXTRACT_", "FALSE_", "FETCH_", "FILTER_", + "FINAL_", "FIRST_", "FOLLOWING_", "FOR_", "FORMAT_", "FROM_", "FULL_", + "FUNCTION_", "FUNCTIONS_", "GRACE_", "GRANT_", "GRANTED_", "GRANTS_", + "GRAPHVIZ_", "GROUP_", "GROUPING_", "GROUPS_", "HAVING_", "HOUR_", + "IF_", "IGNORE_", "IMMEDIATE_", "IN_", "INCLUDING_", "INITIAL_", + "INNER_", "INPUT_", "INSERT_", "INTERSECT_", "INTERVAL_", "INTO_", + "INVOKER_", "IO_", "IS_", "ISOLATION_", "ITERATE_", "JOIN_", "JSON_", + "JSON_ARRAY_", "JSON_EXISTS_", "JSON_OBJECT_", "JSON_QUERY_", "JSON_TABLE_", + "JSON_VALUE_", "KEEP_", "KEY_", "KEYS_", "LANGUAGE_", "LAST_", "LATERAL_", + "LEADING_", "LEAVE_", "LEFT_", "LEVEL_", "LIKE_", "LIMIT_", "LISTAGG_", + "LOCAL_", "LOCALTIME_", "LOCALTIMESTAMP_", "LOGICAL_", "LOOP_", + "MAP_", "MATCH_", "MATCHED_", "MATCHES_", "MATCH_RECOGNIZE_", "MATERIALIZED_", + "MEASURES_", "MERGE_", "MINUTE_", "MONTH_", "NATURAL_", "NESTED_", + "NEXT_", "NFC_", "NFD_", "NFKC_", "NFKD_", "NO_", "NONE_", "NORMALIZE_", + "NOT_", "NULL_", "NULLIF_", "NULLS_", "OBJECT_", "OF_", "OFFSET_", + "OMIT_", "ON_", "ONE_", "ONLY_", "OPTION_", "OR_", "ORDER_", "ORDINALITY_", + "OUTER_", "OUTPUT_", "OVER_", "OVERFLOW_", "PARTITION_", "PARTITIONS_", + "PASSING_", "PAST_", "PATH_", "PATTERN_", "PER_", "PERIOD_", "PERMUTE_", + "PLAN_", "POSITION_", "PRECEDING_", "PRECISION_", "PREPARE_", "PRIVILEGES_", + "PROPERTIES_", "PRUNE_", "QUOTES_", "RANGE_", "READ_", "RECURSIVE_", + "REFRESH_", "RENAME_", "REPEAT_", "REPEATABLE_", "REPLACE_", "RESET_", + "RESPECT_", "RESTRICT_", "RETURN_", "RETURNING_", "RETURNS_", "REVOKE_", + "RIGHT_", "ROLE_", "ROLES_", "ROLLBACK_", "ROLLUP_", "ROW_", "ROWS_", + "RUNNING_", "SCALAR_", "SCHEMA_", "SCHEMAS_", "SECOND_", "SECURITY_", + "SEEK_", "SELECT_", "SERIALIZABLE_", "SESSION_", "SET_", "SETS_", + "SHOW_", "SKIP_", "SOME_", "START_", "STATS_", "SUBSET_", "SUBSTRING_", + "SYSTEM_", "TABLE_", "TABLES_", "TABLESAMPLE_", "TEXT_", "TEXT_STRING_", + "THEN_", "TIES_", "TIME_", "TIMESTAMP_", "TO_", "TRAILING_", "TRANSACTION_", + "TRIM_", "TRUE_", "TRUNCATE_", "TRY_CAST_", "TYPE_", "UESCAPE_", + "UNBOUNDED_", "UNCOMMITTED_", "UNCONDITIONAL_", "UNION_", "UNIQUE_", + "UNKNOWN_", "UNMATCHED_", "UNNEST_", "UNTIL_", "UPDATE_", "USE_", + "USER_", "USING_", "UTF16_", "UTF32_", "UTF8_", "VALIDATE_", "VALUE_", + "VALUES_", "VERBOSE_", "VERSION_", "VIEW_", "WHEN_", "WHERE_", "WHILE_", + "WINDOW_", "WITH_", "WITHIN_", "WITHOUT_", "WORK_", "WRAPPER_", + "WRITE_", "YEAR_", "ZONE_", "EQ_", "NEQ_", "LT_", "LTE_", "GT_", + "GTE_", "PLUS_", "MINUS_", "ASTERISK_", "SLASH_", "PERCENT_", "CONCAT_", + "QUESTION_MARK_", "SEMICOLON_", "DOT_", "COLON_", "COMMA_", "LPAREN_", + "RPAREN_", "LSQUARE_", "RSQUARE_", "LCURLY_", "RCURLY_", "LCURLYHYPHEN_", + "RCURLYHYPHEN_", "LARROW_", "RARROW_", "RDOUBLEARROW_", "VBAR_", + "DOLLAR_", "CARET_", "STRING_", "UNICODE_STRING_", "BINARY_LITERAL_", + "INTEGER_VALUE_", "DECIMAL_VALUE_", "DOUBLE_VALUE_", "IDENTIFIER_", + "DIGIT_IDENTIFIER_", "QUOTED_IDENTIFIER_", "BACKQUOTED_IDENTIFIER_", + "EXPONENT_", "DIGIT_", "LETTER_", "SIMPLE_COMMENT_", "BRACKETED_COMMENT_", + "WS_", "UNRECOGNIZED_", + ]; + + + public constructor(input: antlr.CharStream) { + super(input); + this.interpreter = new antlr.LexerATNSimulator(this, TrinoLexer._ATN, TrinoLexer.decisionsToDFA, new antlr.PredictionContextCache()); + } + + public get grammarFileName(): string { return "TrinoLexer.g4"; } + + public get literalNames(): (string | null)[] { return TrinoLexer.literalNames; } + public get symbolicNames(): (string | null)[] { return TrinoLexer.symbolicNames; } + public get ruleNames(): string[] { return TrinoLexer.ruleNames; } + + public get serializedATN(): number[] { return TrinoLexer._serializedATN; } + + public get channelNames(): string[] { return TrinoLexer.channelNames; } + + public get modeNames(): string[] { return TrinoLexer.modeNames; } + + public static readonly _serializedATN: number[] = [ + 4,0,340,3079,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12, + 2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19, + 7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, + 2,26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32, + 7,32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38, + 2,39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45, + 7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51, + 2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58, + 7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64, + 2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71, + 7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77, + 2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84, + 7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90, + 2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97, + 7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103, + 7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108, + 2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114, + 7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119, + 2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125, + 7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130, + 2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136, + 7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141, + 2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147, + 7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152, + 2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158, + 7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163, + 2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169, + 7,169,2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174, + 2,175,7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180, + 7,180,2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185, + 2,186,7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191, + 7,191,2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196, + 2,197,7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202, + 7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207, + 2,208,7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213, + 7,213,2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,2,218,7,218, + 2,219,7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224, + 7,224,2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229, + 2,230,7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235, + 7,235,2,236,7,236,2,237,7,237,2,238,7,238,2,239,7,239,2,240,7,240, + 2,241,7,241,2,242,7,242,2,243,7,243,2,244,7,244,2,245,7,245,2,246, + 7,246,2,247,7,247,2,248,7,248,2,249,7,249,2,250,7,250,2,251,7,251, + 2,252,7,252,2,253,7,253,2,254,7,254,2,255,7,255,2,256,7,256,2,257, + 7,257,2,258,7,258,2,259,7,259,2,260,7,260,2,261,7,261,2,262,7,262, + 2,263,7,263,2,264,7,264,2,265,7,265,2,266,7,266,2,267,7,267,2,268, + 7,268,2,269,7,269,2,270,7,270,2,271,7,271,2,272,7,272,2,273,7,273, + 2,274,7,274,2,275,7,275,2,276,7,276,2,277,7,277,2,278,7,278,2,279, + 7,279,2,280,7,280,2,281,7,281,2,282,7,282,2,283,7,283,2,284,7,284, + 2,285,7,285,2,286,7,286,2,287,7,287,2,288,7,288,2,289,7,289,2,290, + 7,290,2,291,7,291,2,292,7,292,2,293,7,293,2,294,7,294,2,295,7,295, + 2,296,7,296,2,297,7,297,2,298,7,298,2,299,7,299,2,300,7,300,2,301, + 7,301,2,302,7,302,2,303,7,303,2,304,7,304,2,305,7,305,2,306,7,306, + 2,307,7,307,2,308,7,308,2,309,7,309,2,310,7,310,2,311,7,311,2,312, + 7,312,2,313,7,313,2,314,7,314,2,315,7,315,2,316,7,316,2,317,7,317, + 2,318,7,318,2,319,7,319,2,320,7,320,2,321,7,321,2,322,7,322,2,323, + 7,323,2,324,7,324,2,325,7,325,2,326,7,326,2,327,7,327,2,328,7,328, + 2,329,7,329,2,330,7,330,2,331,7,331,2,332,7,332,2,333,7,333,2,334, + 7,334,2,335,7,335,2,336,7,336,2,337,7,337,2,338,7,338,2,339,7,339, + 2,340,7,340,2,341,7,341,2,342,7,342,1,0,1,0,1,0,1,0,1,0,1,0,1,0, + 1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3, + 1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6, + 1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9, + 1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,13,1,13,1,13, + 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14, + 1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, + 1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17, + 1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20, + 1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,22,1,22, + 1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24, + 1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26, + 1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27, + 1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29, + 1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,32, + 1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33, + 1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, + 1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36, + 1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38, + 1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, + 1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40, + 1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,43, + 1,43,1,43,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,45,1,45, + 1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,46, + 1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47, + 1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49, + 1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,51,1,51, + 1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,1,52, + 1,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54, + 1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,56,1,56,1,56, + 1,56,1,56,1,57,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,58, + 1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59, + 1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60, + 1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62, + 1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63, + 1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,66, + 1,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68, + 1,68,1,68,1,68,1,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69, + 1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,1,72, + 1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,74,1,74, + 1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75, + 1,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77, + 1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, + 1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,81, + 1,81,1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,83, + 1,83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84, + 1,84,1,84,1,85,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86, + 1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89, + 1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90, + 1,90,1,90,1,90,1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92, + 1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,94,1,94,1,94, + 1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95, + 1,96,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97, + 1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99, + 1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1, + 102,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,105,1,105, + 1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106, + 1,106,1,106,1,106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107, + 1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109, + 1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110, + 1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,112, + 1,112,1,112,1,112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113, + 1,113,1,114,1,114,1,114,1,115,1,115,1,115,1,116,1,116,1,116,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,1,117,1,117,1,117,1,117,1,117, + 1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,119,1,119,1,119, + 1,119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120, + 1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121, + 1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,1,122, + 1,122,1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123, + 1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124, + 1,124,1,124,1,124,1,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125, + 1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,127,1,127, + 1,127,1,127,1,128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,131, + 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,132,1,132,1,132,1,132, + 1,132,1,132,1,132,1,132,1,133,1,133,1,133,1,133,1,133,1,133,1,134, + 1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,135,1,136, + 1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,138, + 1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139, + 1,139,1,139,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140, + 1,140,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141,1,141, + 1,141,1,141,1,141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142, + 1,142,1,142,1,143,1,143,1,143,1,143,1,143,1,144,1,144,1,144,1,144, + 1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,1,146, + 1,146,1,146,1,146,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,147, + 1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148, + 1,148,1,148,1,148,1,148,1,148,1,149,1,149,1,149,1,149,1,149,1,149, + 1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,150,1,150,1,150,1,150, + 1,150,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,151,1,151,1,151, + 1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,153,1,153,1,153,1,153, + 1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,155, + 1,155,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156, + 1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,159,1,159,1,159, + 1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,161,1,161,1,161,1,162, + 1,162,1,162,1,162,1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163, + 1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165, + 1,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,167,1,167,1,167, + 1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,169, + 1,169,1,169,1,170,1,170,1,170,1,170,1,170,1,170,1,170,1,171,1,171, + 1,171,1,171,1,171,1,172,1,172,1,172,1,173,1,173,1,173,1,173,1,174, + 1,174,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175, + 1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178, + 1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,178,1,179,1,179, + 1,179,1,179,1,179,1,179,1,180,1,180,1,180,1,180,1,180,1,180,1,180, + 1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,182,1,182,1,182, + 1,182,1,182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183, + 1,183,1,183,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184, + 1,184,1,184,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,186, + 1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,188,1,188, + 1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,190, + 1,190,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1,191, + 1,191,1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,193,1,193,1,193, + 1,193,1,193,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194, + 1,194,1,194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,195, + 1,195,1,195,1,195,1,195,1,196,1,196,1,196,1,196,1,196,1,196,1,196, + 1,196,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197,1,197, + 1,197,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198, + 1,198,1,199,1,199,1,199,1,199,1,199,1,199,1,200,1,200,1,200,1,200, + 1,200,1,200,1,200,1,201,1,201,1,201,1,201,1,201,1,201,1,202,1,202, + 1,202,1,202,1,202,1,203,1,203,1,203,1,203,1,203,1,203,1,203,1,203, + 1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,204,1,205, + 1,205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206, + 1,206,1,206,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207,1,207, + 1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1,209, + 1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1,210, + 1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,211,1,211,1,211,1,211, + 1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,213,1,213,1,213,1,213, + 1,213,1,213,1,213,1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214, + 1,214,1,214,1,214,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,216, + 1,216,1,216,1,216,1,216,1,216,1,217,1,217,1,217,1,217,1,217,1,218, + 1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1,219,1,219,1,219, + 1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,220,1,221, + 1,221,1,221,1,221,1,222,1,222,1,222,1,222,1,222,1,223,1,223,1,223, + 1,223,1,223,1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,224,1,224, + 1,224,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1,226, + 1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,1,227, + 1,227,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229, + 1,229,1,229,1,229,1,229,1,230,1,230,1,230,1,230,1,230,1,230,1,230, + 1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231, + 1,231,1,231,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,232,1,233, + 1,233,1,233,1,233,1,234,1,234,1,234,1,234,1,234,1,235,1,235,1,235, + 1,235,1,235,1,236,1,236,1,236,1,236,1,236,1,237,1,237,1,237,1,237, + 1,237,1,238,1,238,1,238,1,238,1,238,1,238,1,239,1,239,1,239,1,239, + 1,239,1,239,1,240,1,240,1,240,1,240,1,240,1,240,1,240,1,241,1,241, + 1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,242, + 1,242,1,242,1,242,1,242,1,243,1,243,1,243,1,243,1,243,1,243,1,244, + 1,244,1,244,1,244,1,244,1,244,1,244,1,245,1,245,1,245,1,245,1,245, + 1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,246,1,246,1,246,1,246, + 1,246,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,248,1,248,1,248, + 1,248,1,248,1,249,1,249,1,249,1,249,1,249,1,250,1,250,1,250,1,250, + 1,250,1,251,1,251,1,251,1,251,1,251,1,251,1,251,1,251,1,251,1,251, + 1,252,1,252,1,252,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253, + 1,253,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254,1,254, + 1,254,1,254,1,255,1,255,1,255,1,255,1,255,1,256,1,256,1,256,1,256, + 1,256,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,258, + 1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,259,1,259,1,259, + 1,259,1,259,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,261, + 1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,262,1,262, + 1,262,1,262,1,262,1,262,1,262,1,262,1,262,1,262,1,262,1,262,1,263, + 1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263, + 1,263,1,263,1,264,1,264,1,264,1,264,1,264,1,264,1,265,1,265,1,265, + 1,265,1,265,1,265,1,265,1,266,1,266,1,266,1,266,1,266,1,266,1,266, + 1,266,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267,1,267, + 1,268,1,268,1,268,1,268,1,268,1,268,1,268,1,269,1,269,1,269,1,269, + 1,269,1,269,1,270,1,270,1,270,1,270,1,270,1,270,1,270,1,271,1,271, + 1,271,1,271,1,272,1,272,1,272,1,272,1,272,1,273,1,273,1,273,1,273, + 1,273,1,273,1,274,1,274,1,274,1,274,1,274,1,274,1,275,1,275,1,275, + 1,275,1,275,1,275,1,276,1,276,1,276,1,276,1,276,1,277,1,277,1,277, + 1,277,1,277,1,277,1,277,1,277,1,277,1,278,1,278,1,278,1,278,1,278, + 1,278,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,280,1,280,1,280, + 1,280,1,280,1,280,1,280,1,280,1,281,1,281,1,281,1,281,1,281,1,281, + 1,281,1,281,1,282,1,282,1,282,1,282,1,282,1,283,1,283,1,283,1,283, + 1,283,1,284,1,284,1,284,1,284,1,284,1,284,1,285,1,285,1,285,1,285, + 1,285,1,285,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,287,1,287, + 1,287,1,287,1,287,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,289, + 1,289,1,289,1,289,1,289,1,289,1,289,1,289,1,290,1,290,1,290,1,290, + 1,290,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,291,1,292,1,292, + 1,292,1,292,1,292,1,292,1,293,1,293,1,293,1,293,1,293,1,294,1,294, + 1,294,1,294,1,294,1,295,1,295,1,296,1,296,1,296,1,296,3,296,2829, + 8,296,1,297,1,297,1,298,1,298,1,298,1,299,1,299,1,300,1,300,1,300, + 1,301,1,301,1,302,1,302,1,303,1,303,1,304,1,304,1,305,1,305,1,306, + 1,306,1,306,1,307,1,307,1,308,1,308,1,309,1,309,1,310,1,310,1,310, + 1,311,1,311,1,312,1,312,1,313,1,313,1,314,1,314,1,315,1,315,1,316, + 1,316,1,317,1,317,1,318,1,318,1,318,1,319,1,319,1,319,1,320,1,320, + 1,320,1,321,1,321,1,321,1,322,1,322,1,322,1,323,1,323,1,324,1,324, + 1,325,1,325,1,326,1,326,1,326,1,326,5,326,2902,8,326,10,326,12,326, + 2905,9,326,1,326,1,326,1,327,1,327,1,327,1,327,1,327,1,327,1,327, + 5,327,2916,8,327,10,327,12,327,2919,9,327,1,327,1,327,1,328,1,328, + 1,328,1,328,5,328,2927,8,328,10,328,12,328,2930,9,328,1,328,1,328, + 1,329,4,329,2935,8,329,11,329,12,329,2936,1,330,4,330,2940,8,330, + 11,330,12,330,2941,1,330,1,330,5,330,2946,8,330,10,330,12,330,2949, + 9,330,1,330,1,330,4,330,2953,8,330,11,330,12,330,2954,3,330,2957, + 8,330,1,331,4,331,2960,8,331,11,331,12,331,2961,1,331,1,331,5,331, + 2966,8,331,10,331,12,331,2969,9,331,3,331,2971,8,331,1,331,1,331, + 1,331,1,331,4,331,2977,8,331,11,331,12,331,2978,1,331,1,331,3,331, + 2983,8,331,1,332,1,332,3,332,2987,8,332,1,332,1,332,1,332,5,332, + 2992,8,332,10,332,12,332,2995,9,332,1,333,1,333,1,333,1,333,4,333, + 3001,8,333,11,333,12,333,3002,1,334,1,334,1,334,1,334,5,334,3009, + 8,334,10,334,12,334,3012,9,334,1,334,1,334,1,335,1,335,1,335,1,335, + 5,335,3020,8,335,10,335,12,335,3023,9,335,1,335,1,335,1,336,1,336, + 3,336,3029,8,336,1,336,4,336,3032,8,336,11,336,12,336,3033,1,337, + 1,337,1,338,1,338,1,339,1,339,1,339,1,339,5,339,3044,8,339,10,339, + 12,339,3047,9,339,1,339,3,339,3050,8,339,1,339,3,339,3053,8,339, + 1,339,1,339,1,340,1,340,1,340,1,340,5,340,3061,8,340,10,340,12,340, + 3064,9,340,1,340,1,340,1,340,1,340,1,340,1,341,4,341,3072,8,341, + 11,341,12,341,3073,1,341,1,341,1,342,1,342,1,3062,0,343,1,1,3,2, + 5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29, + 15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51, + 26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73, + 37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95, + 48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57, + 115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66,133, + 67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76, + 153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171, + 86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95, + 191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207, + 104,209,105,211,106,213,107,215,108,217,109,219,110,221,111,223, + 112,225,113,227,114,229,115,231,116,233,117,235,118,237,119,239, + 120,241,121,243,122,245,123,247,124,249,125,251,126,253,127,255, + 128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271, + 136,273,137,275,138,277,139,279,140,281,141,283,142,285,143,287, + 144,289,145,291,146,293,147,295,148,297,149,299,150,301,151,303, + 152,305,153,307,154,309,155,311,156,313,157,315,158,317,159,319, + 160,321,161,323,162,325,163,327,164,329,165,331,166,333,167,335, + 168,337,169,339,170,341,171,343,172,345,173,347,174,349,175,351, + 176,353,177,355,178,357,179,359,180,361,181,363,182,365,183,367, + 184,369,185,371,186,373,187,375,188,377,189,379,190,381,191,383, + 192,385,193,387,194,389,195,391,196,393,197,395,198,397,199,399, + 200,401,201,403,202,405,203,407,204,409,205,411,206,413,207,415, + 208,417,209,419,210,421,211,423,212,425,213,427,214,429,215,431, + 216,433,217,435,218,437,219,439,220,441,221,443,222,445,223,447, + 224,449,225,451,226,453,227,455,228,457,229,459,230,461,231,463, + 232,465,233,467,234,469,235,471,236,473,237,475,238,477,239,479, + 240,481,241,483,242,485,243,487,244,489,245,491,246,493,247,495, + 248,497,249,499,250,501,251,503,252,505,253,507,254,509,255,511, + 256,513,257,515,258,517,259,519,260,521,261,523,262,525,263,527, + 264,529,265,531,266,533,267,535,268,537,269,539,270,541,271,543, + 272,545,273,547,274,549,275,551,276,553,277,555,278,557,279,559, + 280,561,281,563,282,565,283,567,284,569,285,571,286,573,287,575, + 288,577,289,579,290,581,291,583,292,585,293,587,294,589,295,591, + 296,593,297,595,298,597,299,599,300,601,301,603,302,605,303,607, + 304,609,305,611,306,613,307,615,308,617,309,619,310,621,311,623, + 312,625,313,627,314,629,315,631,316,633,317,635,318,637,319,639, + 320,641,321,643,322,645,323,647,324,649,325,651,326,653,327,655, + 328,657,329,659,330,661,331,663,332,665,333,667,334,669,335,671, + 336,673,0,675,0,677,0,679,337,681,338,683,339,685,340,1,0,34,2,0, + 65,65,97,97,2,0,66,66,98,98,2,0,83,83,115,115,2,0,69,69,101,101, + 2,0,78,78,110,110,2,0,84,84,116,116,2,0,68,68,100,100,2,0,77,77, + 109,109,2,0,73,73,105,105,2,0,70,70,102,102,2,0,82,82,114,114,2, + 0,76,76,108,108,2,0,89,89,121,121,2,0,90,90,122,122,2,0,67,67,99, + 99,2,0,85,85,117,117,2,0,72,72,104,104,2,0,79,79,111,111,2,0,71, + 71,103,103,2,0,87,87,119,119,2,0,80,80,112,112,2,0,88,88,120,120, + 2,0,86,86,118,118,2,0,75,75,107,107,2,0,74,74,106,106,2,0,81,81, + 113,113,1,0,39,39,1,0,34,34,1,0,96,96,2,0,43,43,45,45,1,0,48,57, + 2,0,65,90,97,122,2,0,10,10,13,13,3,0,9,10,13,13,32,32,3109,0,1,1, + 0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0, + 0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0, + 0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0, + 0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0, + 0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0, + 0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0, + 0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0, + 0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0, + 0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0, + 0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0, + 0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111, + 1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0, + 0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1, + 0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0, + 139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0, + 0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157, + 1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0, + 0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1, + 0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0, + 185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0, + 0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203, + 1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0, + 0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1, + 0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0, + 231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0, + 0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249, + 1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0, + 0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1, + 0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0, + 277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0, + 0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295, + 1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0, + 0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1, + 0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0, + 323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0, + 0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341, + 1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0, + 0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1, + 0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0, + 369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0, + 0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387, + 1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0, + 0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0,405,1, + 0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0, + 415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0, + 0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433, + 1,0,0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0, + 0,443,1,0,0,0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1, + 0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0, + 461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0, + 0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0,0,479, + 1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0, + 0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1, + 0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0,0, + 507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0, + 0,0,0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525, + 1,0,0,0,0,527,1,0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0, + 0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1, + 0,0,0,0,545,1,0,0,0,0,547,1,0,0,0,0,549,1,0,0,0,0,551,1,0,0,0,0, + 553,1,0,0,0,0,555,1,0,0,0,0,557,1,0,0,0,0,559,1,0,0,0,0,561,1,0, + 0,0,0,563,1,0,0,0,0,565,1,0,0,0,0,567,1,0,0,0,0,569,1,0,0,0,0,571, + 1,0,0,0,0,573,1,0,0,0,0,575,1,0,0,0,0,577,1,0,0,0,0,579,1,0,0,0, + 0,581,1,0,0,0,0,583,1,0,0,0,0,585,1,0,0,0,0,587,1,0,0,0,0,589,1, + 0,0,0,0,591,1,0,0,0,0,593,1,0,0,0,0,595,1,0,0,0,0,597,1,0,0,0,0, + 599,1,0,0,0,0,601,1,0,0,0,0,603,1,0,0,0,0,605,1,0,0,0,0,607,1,0, + 0,0,0,609,1,0,0,0,0,611,1,0,0,0,0,613,1,0,0,0,0,615,1,0,0,0,0,617, + 1,0,0,0,0,619,1,0,0,0,0,621,1,0,0,0,0,623,1,0,0,0,0,625,1,0,0,0, + 0,627,1,0,0,0,0,629,1,0,0,0,0,631,1,0,0,0,0,633,1,0,0,0,0,635,1, + 0,0,0,0,637,1,0,0,0,0,639,1,0,0,0,0,641,1,0,0,0,0,643,1,0,0,0,0, + 645,1,0,0,0,0,647,1,0,0,0,0,649,1,0,0,0,0,651,1,0,0,0,0,653,1,0, + 0,0,0,655,1,0,0,0,0,657,1,0,0,0,0,659,1,0,0,0,0,661,1,0,0,0,0,663, + 1,0,0,0,0,665,1,0,0,0,0,667,1,0,0,0,0,669,1,0,0,0,0,671,1,0,0,0, + 0,679,1,0,0,0,0,681,1,0,0,0,0,683,1,0,0,0,0,685,1,0,0,0,1,687,1, + 0,0,0,3,694,1,0,0,0,5,698,1,0,0,0,7,704,1,0,0,0,9,710,1,0,0,0,11, + 714,1,0,0,0,13,720,1,0,0,0,15,728,1,0,0,0,17,732,1,0,0,0,19,736, + 1,0,0,0,21,742,1,0,0,0,23,745,1,0,0,0,25,749,1,0,0,0,27,752,1,0, + 0,0,29,766,1,0,0,0,31,772,1,0,0,0,33,782,1,0,0,0,35,790,1,0,0,0, + 37,795,1,0,0,0,39,798,1,0,0,0,41,803,1,0,0,0,43,810,1,0,0,0,45,818, + 1,0,0,0,47,823,1,0,0,0,49,828,1,0,0,0,51,836,1,0,0,0,53,845,1,0, + 0,0,55,852,1,0,0,0,57,860,1,0,0,0,59,868,1,0,0,0,61,875,1,0,0,0, + 63,885,1,0,0,0,65,897,1,0,0,0,67,908,1,0,0,0,69,914,1,0,0,0,71,926, + 1,0,0,0,73,933,1,0,0,0,75,939,1,0,0,0,77,944,1,0,0,0,79,952,1,0, + 0,0,81,968,1,0,0,0,83,981,1,0,0,0,85,994,1,0,0,0,87,1007,1,0,0,0, + 89,1022,1,0,0,0,91,1035,1,0,0,0,93,1053,1,0,0,0,95,1066,1,0,0,0, + 97,1071,1,0,0,0,99,1076,1,0,0,0,101,1080,1,0,0,0,103,1091,1,0,0, + 0,105,1099,1,0,0,0,107,1107,1,0,0,0,109,1114,1,0,0,0,111,1122,1, + 0,0,0,113,1129,1,0,0,0,115,1134,1,0,0,0,117,1139,1,0,0,0,119,1148, + 1,0,0,0,121,1159,1,0,0,0,123,1173,1,0,0,0,125,1182,1,0,0,0,127,1194, + 1,0,0,0,129,1197,1,0,0,0,131,1204,1,0,0,0,133,1209,1,0,0,0,135,1214, + 1,0,0,0,137,1220,1,0,0,0,139,1227,1,0,0,0,141,1236,1,0,0,0,143,1240, + 1,0,0,0,145,1246,1,0,0,0,147,1253,1,0,0,0,149,1260,1,0,0,0,151,1270, + 1,0,0,0,153,1278,1,0,0,0,155,1285,1,0,0,0,157,1293,1,0,0,0,159,1301, + 1,0,0,0,161,1307,1,0,0,0,163,1313,1,0,0,0,165,1320,1,0,0,0,167,1326, + 1,0,0,0,169,1332,1,0,0,0,171,1342,1,0,0,0,173,1346,1,0,0,0,175,1353, + 1,0,0,0,177,1358,1,0,0,0,179,1363,1,0,0,0,181,1372,1,0,0,0,183,1382, + 1,0,0,0,185,1388,1,0,0,0,187,1394,1,0,0,0,189,1402,1,0,0,0,191,1409, + 1,0,0,0,193,1418,1,0,0,0,195,1424,1,0,0,0,197,1433,1,0,0,0,199,1440, + 1,0,0,0,201,1447,1,0,0,0,203,1452,1,0,0,0,205,1455,1,0,0,0,207,1462, + 1,0,0,0,209,1472,1,0,0,0,211,1475,1,0,0,0,213,1485,1,0,0,0,215,1493, + 1,0,0,0,217,1499,1,0,0,0,219,1505,1,0,0,0,221,1512,1,0,0,0,223,1522, + 1,0,0,0,225,1531,1,0,0,0,227,1536,1,0,0,0,229,1544,1,0,0,0,231,1547, + 1,0,0,0,233,1550,1,0,0,0,235,1560,1,0,0,0,237,1568,1,0,0,0,239,1573, + 1,0,0,0,241,1578,1,0,0,0,243,1589,1,0,0,0,245,1601,1,0,0,0,247,1613, + 1,0,0,0,249,1624,1,0,0,0,251,1635,1,0,0,0,253,1646,1,0,0,0,255,1651, + 1,0,0,0,257,1655,1,0,0,0,259,1660,1,0,0,0,261,1669,1,0,0,0,263,1674, + 1,0,0,0,265,1682,1,0,0,0,267,1690,1,0,0,0,269,1696,1,0,0,0,271,1701, + 1,0,0,0,273,1707,1,0,0,0,275,1712,1,0,0,0,277,1718,1,0,0,0,279,1726, + 1,0,0,0,281,1732,1,0,0,0,283,1742,1,0,0,0,285,1757,1,0,0,0,287,1765, + 1,0,0,0,289,1770,1,0,0,0,291,1774,1,0,0,0,293,1780,1,0,0,0,295,1788, + 1,0,0,0,297,1796,1,0,0,0,299,1812,1,0,0,0,301,1825,1,0,0,0,303,1834, + 1,0,0,0,305,1840,1,0,0,0,307,1847,1,0,0,0,309,1853,1,0,0,0,311,1861, + 1,0,0,0,313,1868,1,0,0,0,315,1873,1,0,0,0,317,1877,1,0,0,0,319,1881, + 1,0,0,0,321,1886,1,0,0,0,323,1891,1,0,0,0,325,1894,1,0,0,0,327,1899, + 1,0,0,0,329,1909,1,0,0,0,331,1913,1,0,0,0,333,1918,1,0,0,0,335,1925, + 1,0,0,0,337,1931,1,0,0,0,339,1938,1,0,0,0,341,1941,1,0,0,0,343,1948, + 1,0,0,0,345,1953,1,0,0,0,347,1956,1,0,0,0,349,1960,1,0,0,0,351,1965, + 1,0,0,0,353,1972,1,0,0,0,355,1975,1,0,0,0,357,1981,1,0,0,0,359,1992, + 1,0,0,0,361,1998,1,0,0,0,363,2005,1,0,0,0,365,2010,1,0,0,0,367,2019, + 1,0,0,0,369,2029,1,0,0,0,371,2040,1,0,0,0,373,2048,1,0,0,0,375,2053, + 1,0,0,0,377,2058,1,0,0,0,379,2066,1,0,0,0,381,2070,1,0,0,0,383,2077, + 1,0,0,0,385,2085,1,0,0,0,387,2090,1,0,0,0,389,2099,1,0,0,0,391,2109, + 1,0,0,0,393,2119,1,0,0,0,395,2127,1,0,0,0,397,2138,1,0,0,0,399,2149, + 1,0,0,0,401,2155,1,0,0,0,403,2162,1,0,0,0,405,2168,1,0,0,0,407,2173, + 1,0,0,0,409,2183,1,0,0,0,411,2191,1,0,0,0,413,2198,1,0,0,0,415,2205, + 1,0,0,0,417,2216,1,0,0,0,419,2224,1,0,0,0,421,2230,1,0,0,0,423,2238, + 1,0,0,0,425,2247,1,0,0,0,427,2254,1,0,0,0,429,2264,1,0,0,0,431,2272, + 1,0,0,0,433,2279,1,0,0,0,435,2285,1,0,0,0,437,2290,1,0,0,0,439,2296, + 1,0,0,0,441,2305,1,0,0,0,443,2312,1,0,0,0,445,2316,1,0,0,0,447,2321, + 1,0,0,0,449,2329,1,0,0,0,451,2336,1,0,0,0,453,2343,1,0,0,0,455,2351, + 1,0,0,0,457,2358,1,0,0,0,459,2367,1,0,0,0,461,2372,1,0,0,0,463,2379, + 1,0,0,0,465,2392,1,0,0,0,467,2400,1,0,0,0,469,2404,1,0,0,0,471,2409, + 1,0,0,0,473,2414,1,0,0,0,475,2419,1,0,0,0,477,2424,1,0,0,0,479,2430, + 1,0,0,0,481,2436,1,0,0,0,483,2443,1,0,0,0,485,2453,1,0,0,0,487,2460, + 1,0,0,0,489,2466,1,0,0,0,491,2473,1,0,0,0,493,2485,1,0,0,0,495,2490, + 1,0,0,0,497,2497,1,0,0,0,499,2502,1,0,0,0,501,2507,1,0,0,0,503,2512, + 1,0,0,0,505,2522,1,0,0,0,507,2525,1,0,0,0,509,2534,1,0,0,0,511,2546, + 1,0,0,0,513,2551,1,0,0,0,515,2556,1,0,0,0,517,2565,1,0,0,0,519,2574, + 1,0,0,0,521,2579,1,0,0,0,523,2587,1,0,0,0,525,2597,1,0,0,0,527,2609, + 1,0,0,0,529,2623,1,0,0,0,531,2629,1,0,0,0,533,2636,1,0,0,0,535,2644, + 1,0,0,0,537,2654,1,0,0,0,539,2661,1,0,0,0,541,2667,1,0,0,0,543,2674, + 1,0,0,0,545,2678,1,0,0,0,547,2683,1,0,0,0,549,2689,1,0,0,0,551,2695, + 1,0,0,0,553,2701,1,0,0,0,555,2706,1,0,0,0,557,2715,1,0,0,0,559,2721, + 1,0,0,0,561,2728,1,0,0,0,563,2736,1,0,0,0,565,2744,1,0,0,0,567,2749, + 1,0,0,0,569,2754,1,0,0,0,571,2760,1,0,0,0,573,2766,1,0,0,0,575,2773, + 1,0,0,0,577,2778,1,0,0,0,579,2785,1,0,0,0,581,2793,1,0,0,0,583,2798, + 1,0,0,0,585,2806,1,0,0,0,587,2812,1,0,0,0,589,2817,1,0,0,0,591,2822, + 1,0,0,0,593,2828,1,0,0,0,595,2830,1,0,0,0,597,2832,1,0,0,0,599,2835, + 1,0,0,0,601,2837,1,0,0,0,603,2840,1,0,0,0,605,2842,1,0,0,0,607,2844, + 1,0,0,0,609,2846,1,0,0,0,611,2848,1,0,0,0,613,2850,1,0,0,0,615,2853, + 1,0,0,0,617,2855,1,0,0,0,619,2857,1,0,0,0,621,2859,1,0,0,0,623,2862, + 1,0,0,0,625,2864,1,0,0,0,627,2866,1,0,0,0,629,2868,1,0,0,0,631,2870, + 1,0,0,0,633,2872,1,0,0,0,635,2874,1,0,0,0,637,2876,1,0,0,0,639,2879, + 1,0,0,0,641,2882,1,0,0,0,643,2885,1,0,0,0,645,2888,1,0,0,0,647,2891, + 1,0,0,0,649,2893,1,0,0,0,651,2895,1,0,0,0,653,2897,1,0,0,0,655,2908, + 1,0,0,0,657,2922,1,0,0,0,659,2934,1,0,0,0,661,2956,1,0,0,0,663,2982, + 1,0,0,0,665,2986,1,0,0,0,667,2996,1,0,0,0,669,3004,1,0,0,0,671,3015, + 1,0,0,0,673,3026,1,0,0,0,675,3035,1,0,0,0,677,3037,1,0,0,0,679,3039, + 1,0,0,0,681,3056,1,0,0,0,683,3071,1,0,0,0,685,3077,1,0,0,0,687,688, + 7,0,0,0,688,689,7,1,0,0,689,690,7,2,0,0,690,691,7,3,0,0,691,692, + 7,4,0,0,692,693,7,5,0,0,693,2,1,0,0,0,694,695,7,0,0,0,695,696,7, + 6,0,0,696,697,7,6,0,0,697,4,1,0,0,0,698,699,7,0,0,0,699,700,7,6, + 0,0,700,701,7,7,0,0,701,702,7,8,0,0,702,703,7,4,0,0,703,6,1,0,0, + 0,704,705,7,0,0,0,705,706,7,9,0,0,706,707,7,5,0,0,707,708,7,3,0, + 0,708,709,7,10,0,0,709,8,1,0,0,0,710,711,7,0,0,0,711,712,7,11,0, + 0,712,713,7,11,0,0,713,10,1,0,0,0,714,715,7,0,0,0,715,716,7,11,0, + 0,716,717,7,5,0,0,717,718,7,3,0,0,718,719,7,10,0,0,719,12,1,0,0, + 0,720,721,7,0,0,0,721,722,7,4,0,0,722,723,7,0,0,0,723,724,7,11,0, + 0,724,725,7,12,0,0,725,726,7,13,0,0,726,727,7,3,0,0,727,14,1,0,0, + 0,728,729,7,0,0,0,729,730,7,4,0,0,730,731,7,6,0,0,731,16,1,0,0,0, + 732,733,7,0,0,0,733,734,7,4,0,0,734,735,7,12,0,0,735,18,1,0,0,0, + 736,737,7,0,0,0,737,738,7,10,0,0,738,739,7,10,0,0,739,740,7,0,0, + 0,740,741,7,12,0,0,741,20,1,0,0,0,742,743,7,0,0,0,743,744,7,2,0, + 0,744,22,1,0,0,0,745,746,7,0,0,0,746,747,7,2,0,0,747,748,7,14,0, + 0,748,24,1,0,0,0,749,750,7,0,0,0,750,751,7,5,0,0,751,26,1,0,0,0, + 752,753,7,0,0,0,753,754,7,15,0,0,754,755,7,5,0,0,755,756,7,16,0, + 0,756,757,7,17,0,0,757,758,7,10,0,0,758,759,7,8,0,0,759,760,7,13, + 0,0,760,761,7,0,0,0,761,762,7,5,0,0,762,763,7,8,0,0,763,764,7,17, + 0,0,764,765,7,4,0,0,765,28,1,0,0,0,766,767,7,1,0,0,767,768,7,3,0, + 0,768,769,7,18,0,0,769,770,7,8,0,0,770,771,7,4,0,0,771,30,1,0,0, + 0,772,773,7,1,0,0,773,774,7,3,0,0,774,775,7,10,0,0,775,776,7,4,0, + 0,776,777,7,17,0,0,777,778,7,15,0,0,778,779,7,11,0,0,779,780,7,11, + 0,0,780,781,7,8,0,0,781,32,1,0,0,0,782,783,7,1,0,0,783,784,7,3,0, + 0,784,785,7,5,0,0,785,786,7,19,0,0,786,787,7,3,0,0,787,788,7,3,0, + 0,788,789,7,4,0,0,789,34,1,0,0,0,790,791,7,1,0,0,791,792,7,17,0, + 0,792,793,7,5,0,0,793,794,7,16,0,0,794,36,1,0,0,0,795,796,7,1,0, + 0,796,797,7,12,0,0,797,38,1,0,0,0,798,799,7,14,0,0,799,800,7,0,0, + 0,800,801,7,11,0,0,801,802,7,11,0,0,802,40,1,0,0,0,803,804,7,14, + 0,0,804,805,7,0,0,0,805,806,7,11,0,0,806,807,7,11,0,0,807,808,7, + 3,0,0,808,809,7,6,0,0,809,42,1,0,0,0,810,811,7,14,0,0,811,812,7, + 0,0,0,812,813,7,2,0,0,813,814,7,14,0,0,814,815,7,0,0,0,815,816,7, + 6,0,0,816,817,7,3,0,0,817,44,1,0,0,0,818,819,7,14,0,0,819,820,7, + 0,0,0,820,821,7,2,0,0,821,822,7,3,0,0,822,46,1,0,0,0,823,824,7,14, + 0,0,824,825,7,0,0,0,825,826,7,2,0,0,826,827,7,5,0,0,827,48,1,0,0, + 0,828,829,7,14,0,0,829,830,7,0,0,0,830,831,7,5,0,0,831,832,7,0,0, + 0,832,833,7,11,0,0,833,834,7,17,0,0,834,835,7,18,0,0,835,50,1,0, + 0,0,836,837,7,14,0,0,837,838,7,0,0,0,838,839,7,5,0,0,839,840,7,0, + 0,0,840,841,7,11,0,0,841,842,7,17,0,0,842,843,7,18,0,0,843,844,7, + 2,0,0,844,52,1,0,0,0,845,846,7,14,0,0,846,847,7,17,0,0,847,848,7, + 11,0,0,848,849,7,15,0,0,849,850,7,7,0,0,850,851,7,4,0,0,851,54,1, + 0,0,0,852,853,7,14,0,0,853,854,7,17,0,0,854,855,7,11,0,0,855,856, + 7,15,0,0,856,857,7,7,0,0,857,858,7,4,0,0,858,859,7,2,0,0,859,56, + 1,0,0,0,860,861,7,14,0,0,861,862,7,17,0,0,862,863,7,7,0,0,863,864, + 7,7,0,0,864,865,7,3,0,0,865,866,7,4,0,0,866,867,7,5,0,0,867,58,1, + 0,0,0,868,869,7,14,0,0,869,870,7,17,0,0,870,871,7,7,0,0,871,872, + 7,7,0,0,872,873,7,8,0,0,873,874,7,5,0,0,874,60,1,0,0,0,875,876,7, + 14,0,0,876,877,7,17,0,0,877,878,7,7,0,0,878,879,7,7,0,0,879,880, + 7,8,0,0,880,881,7,5,0,0,881,882,7,5,0,0,882,883,7,3,0,0,883,884, + 7,6,0,0,884,62,1,0,0,0,885,886,7,14,0,0,886,887,7,17,0,0,887,888, + 7,4,0,0,888,889,7,6,0,0,889,890,7,8,0,0,890,891,7,5,0,0,891,892, + 7,8,0,0,892,893,7,17,0,0,893,894,7,4,0,0,894,895,7,0,0,0,895,896, + 7,11,0,0,896,64,1,0,0,0,897,898,7,14,0,0,898,899,7,17,0,0,899,900, + 7,4,0,0,900,901,7,2,0,0,901,902,7,5,0,0,902,903,7,10,0,0,903,904, + 7,0,0,0,904,905,7,8,0,0,905,906,7,4,0,0,906,907,7,5,0,0,907,66,1, + 0,0,0,908,909,7,14,0,0,909,910,7,17,0,0,910,911,7,15,0,0,911,912, + 7,4,0,0,912,913,7,5,0,0,913,68,1,0,0,0,914,915,7,14,0,0,915,916, + 7,17,0,0,916,917,7,20,0,0,917,918,7,0,0,0,918,919,7,10,0,0,919,920, + 7,5,0,0,920,921,7,8,0,0,921,922,7,5,0,0,922,923,7,8,0,0,923,924, + 7,17,0,0,924,925,7,4,0,0,925,70,1,0,0,0,926,927,7,14,0,0,927,928, + 7,10,0,0,928,929,7,3,0,0,929,930,7,0,0,0,930,931,7,5,0,0,931,932, + 7,3,0,0,932,72,1,0,0,0,933,934,7,14,0,0,934,935,7,10,0,0,935,936, + 7,17,0,0,936,937,7,2,0,0,937,938,7,2,0,0,938,74,1,0,0,0,939,940, + 7,14,0,0,940,941,7,15,0,0,941,942,7,1,0,0,942,943,7,3,0,0,943,76, + 1,0,0,0,944,945,7,14,0,0,945,946,7,15,0,0,946,947,7,10,0,0,947,948, + 7,10,0,0,948,949,7,3,0,0,949,950,7,4,0,0,950,951,7,5,0,0,951,78, + 1,0,0,0,952,953,7,14,0,0,953,954,7,15,0,0,954,955,7,10,0,0,955,956, + 7,10,0,0,956,957,7,3,0,0,957,958,7,4,0,0,958,959,7,5,0,0,959,960, + 5,95,0,0,960,961,7,14,0,0,961,962,7,0,0,0,962,963,7,5,0,0,963,964, + 7,0,0,0,964,965,7,11,0,0,965,966,7,17,0,0,966,967,7,18,0,0,967,80, + 1,0,0,0,968,969,7,14,0,0,969,970,7,15,0,0,970,971,7,10,0,0,971,972, + 7,10,0,0,972,973,7,3,0,0,973,974,7,4,0,0,974,975,7,5,0,0,975,976, + 5,95,0,0,976,977,7,6,0,0,977,978,7,0,0,0,978,979,7,5,0,0,979,980, + 7,3,0,0,980,82,1,0,0,0,981,982,7,14,0,0,982,983,7,15,0,0,983,984, + 7,10,0,0,984,985,7,10,0,0,985,986,7,3,0,0,986,987,7,4,0,0,987,988, + 7,5,0,0,988,989,5,95,0,0,989,990,7,20,0,0,990,991,7,0,0,0,991,992, + 7,5,0,0,992,993,7,16,0,0,993,84,1,0,0,0,994,995,7,14,0,0,995,996, + 7,15,0,0,996,997,7,10,0,0,997,998,7,10,0,0,998,999,7,3,0,0,999,1000, + 7,4,0,0,1000,1001,7,5,0,0,1001,1002,5,95,0,0,1002,1003,7,10,0,0, + 1003,1004,7,17,0,0,1004,1005,7,11,0,0,1005,1006,7,3,0,0,1006,86, + 1,0,0,0,1007,1008,7,14,0,0,1008,1009,7,15,0,0,1009,1010,7,10,0,0, + 1010,1011,7,10,0,0,1011,1012,7,3,0,0,1012,1013,7,4,0,0,1013,1014, + 7,5,0,0,1014,1015,5,95,0,0,1015,1016,7,2,0,0,1016,1017,7,14,0,0, + 1017,1018,7,16,0,0,1018,1019,7,3,0,0,1019,1020,7,7,0,0,1020,1021, + 7,0,0,0,1021,88,1,0,0,0,1022,1023,7,14,0,0,1023,1024,7,15,0,0,1024, + 1025,7,10,0,0,1025,1026,7,10,0,0,1026,1027,7,3,0,0,1027,1028,7,4, + 0,0,1028,1029,7,5,0,0,1029,1030,5,95,0,0,1030,1031,7,5,0,0,1031, + 1032,7,8,0,0,1032,1033,7,7,0,0,1033,1034,7,3,0,0,1034,90,1,0,0,0, + 1035,1036,7,14,0,0,1036,1037,7,15,0,0,1037,1038,7,10,0,0,1038,1039, + 7,10,0,0,1039,1040,7,3,0,0,1040,1041,7,4,0,0,1041,1042,7,5,0,0,1042, + 1043,5,95,0,0,1043,1044,7,5,0,0,1044,1045,7,8,0,0,1045,1046,7,7, + 0,0,1046,1047,7,3,0,0,1047,1048,7,2,0,0,1048,1049,7,5,0,0,1049,1050, + 7,0,0,0,1050,1051,7,7,0,0,1051,1052,7,20,0,0,1052,92,1,0,0,0,1053, + 1054,7,14,0,0,1054,1055,7,15,0,0,1055,1056,7,10,0,0,1056,1057,7, + 10,0,0,1057,1058,7,3,0,0,1058,1059,7,4,0,0,1059,1060,7,5,0,0,1060, + 1061,5,95,0,0,1061,1062,7,15,0,0,1062,1063,7,2,0,0,1063,1064,7,3, + 0,0,1064,1065,7,10,0,0,1065,94,1,0,0,0,1066,1067,7,6,0,0,1067,1068, + 7,0,0,0,1068,1069,7,5,0,0,1069,1070,7,0,0,0,1070,96,1,0,0,0,1071, + 1072,7,6,0,0,1072,1073,7,0,0,0,1073,1074,7,5,0,0,1074,1075,7,3,0, + 0,1075,98,1,0,0,0,1076,1077,7,6,0,0,1077,1078,7,0,0,0,1078,1079, + 7,12,0,0,1079,100,1,0,0,0,1080,1081,7,6,0,0,1081,1082,7,3,0,0,1082, + 1083,7,0,0,0,1083,1084,7,11,0,0,1084,1085,7,11,0,0,1085,1086,7,17, + 0,0,1086,1087,7,14,0,0,1087,1088,7,0,0,0,1088,1089,7,5,0,0,1089, + 1090,7,3,0,0,1090,102,1,0,0,0,1091,1092,7,6,0,0,1092,1093,7,3,0, + 0,1093,1094,7,14,0,0,1094,1095,7,11,0,0,1095,1096,7,0,0,0,1096,1097, + 7,10,0,0,1097,1098,7,3,0,0,1098,104,1,0,0,0,1099,1100,7,6,0,0,1100, + 1101,7,3,0,0,1101,1102,7,9,0,0,1102,1103,7,0,0,0,1103,1104,7,15, + 0,0,1104,1105,7,11,0,0,1105,1106,7,5,0,0,1106,106,1,0,0,0,1107,1108, + 7,6,0,0,1108,1109,7,3,0,0,1109,1110,7,9,0,0,1110,1111,7,8,0,0,1111, + 1112,7,4,0,0,1112,1113,7,3,0,0,1113,108,1,0,0,0,1114,1115,7,6,0, + 0,1115,1116,7,3,0,0,1116,1117,7,9,0,0,1117,1118,7,8,0,0,1118,1119, + 7,4,0,0,1119,1120,7,3,0,0,1120,1121,7,10,0,0,1121,110,1,0,0,0,1122, + 1123,7,6,0,0,1123,1124,7,3,0,0,1124,1125,7,11,0,0,1125,1126,7,3, + 0,0,1126,1127,7,5,0,0,1127,1128,7,3,0,0,1128,112,1,0,0,0,1129,1130, + 7,6,0,0,1130,1131,7,3,0,0,1131,1132,7,4,0,0,1132,1133,7,12,0,0,1133, + 114,1,0,0,0,1134,1135,7,6,0,0,1135,1136,7,3,0,0,1136,1137,7,2,0, + 0,1137,1138,7,14,0,0,1138,116,1,0,0,0,1139,1140,7,6,0,0,1140,1141, + 7,3,0,0,1141,1142,7,2,0,0,1142,1143,7,14,0,0,1143,1144,7,10,0,0, + 1144,1145,7,8,0,0,1145,1146,7,1,0,0,1146,1147,7,3,0,0,1147,118,1, + 0,0,0,1148,1149,7,6,0,0,1149,1150,7,3,0,0,1150,1151,7,2,0,0,1151, + 1152,7,14,0,0,1152,1153,7,10,0,0,1153,1154,7,8,0,0,1154,1155,7,20, + 0,0,1155,1156,7,5,0,0,1156,1157,7,17,0,0,1157,1158,7,10,0,0,1158, + 120,1,0,0,0,1159,1160,7,6,0,0,1160,1161,7,3,0,0,1161,1162,7,5,0, + 0,1162,1163,7,3,0,0,1163,1164,7,10,0,0,1164,1165,7,7,0,0,1165,1166, + 7,8,0,0,1166,1167,7,4,0,0,1167,1168,7,8,0,0,1168,1169,7,2,0,0,1169, + 1170,7,5,0,0,1170,1171,7,8,0,0,1171,1172,7,14,0,0,1172,122,1,0,0, + 0,1173,1174,7,6,0,0,1174,1175,7,8,0,0,1175,1176,7,2,0,0,1176,1177, + 7,5,0,0,1177,1178,7,8,0,0,1178,1179,7,4,0,0,1179,1180,7,14,0,0,1180, + 1181,7,5,0,0,1181,124,1,0,0,0,1182,1183,7,6,0,0,1183,1184,7,8,0, + 0,1184,1185,7,2,0,0,1185,1186,7,5,0,0,1186,1187,7,10,0,0,1187,1188, + 7,8,0,0,1188,1189,7,1,0,0,1189,1190,7,15,0,0,1190,1191,7,5,0,0,1191, + 1192,7,3,0,0,1192,1193,7,6,0,0,1193,126,1,0,0,0,1194,1195,7,6,0, + 0,1195,1196,7,17,0,0,1196,128,1,0,0,0,1197,1198,7,6,0,0,1198,1199, + 7,17,0,0,1199,1200,7,15,0,0,1200,1201,7,1,0,0,1201,1202,7,11,0,0, + 1202,1203,7,3,0,0,1203,130,1,0,0,0,1204,1205,7,6,0,0,1205,1206,7, + 10,0,0,1206,1207,7,17,0,0,1207,1208,7,20,0,0,1208,132,1,0,0,0,1209, + 1210,7,3,0,0,1210,1211,7,11,0,0,1211,1212,7,2,0,0,1212,1213,7,3, + 0,0,1213,134,1,0,0,0,1214,1215,7,3,0,0,1215,1216,7,7,0,0,1216,1217, + 7,20,0,0,1217,1218,7,5,0,0,1218,1219,7,12,0,0,1219,136,1,0,0,0,1220, + 1221,7,3,0,0,1221,1222,7,11,0,0,1222,1223,7,2,0,0,1223,1224,7,3, + 0,0,1224,1225,7,8,0,0,1225,1226,7,9,0,0,1226,138,1,0,0,0,1227,1228, + 7,3,0,0,1228,1229,7,4,0,0,1229,1230,7,14,0,0,1230,1231,7,17,0,0, + 1231,1232,7,6,0,0,1232,1233,7,8,0,0,1233,1234,7,4,0,0,1234,1235, + 7,18,0,0,1235,140,1,0,0,0,1236,1237,7,3,0,0,1237,1238,7,4,0,0,1238, + 1239,7,6,0,0,1239,142,1,0,0,0,1240,1241,7,3,0,0,1241,1242,7,10,0, + 0,1242,1243,7,10,0,0,1243,1244,7,17,0,0,1244,1245,7,10,0,0,1245, + 144,1,0,0,0,1246,1247,7,3,0,0,1247,1248,7,2,0,0,1248,1249,7,14,0, + 0,1249,1250,7,0,0,0,1250,1251,7,20,0,0,1251,1252,7,3,0,0,1252,146, + 1,0,0,0,1253,1254,7,3,0,0,1254,1255,7,21,0,0,1255,1256,7,14,0,0, + 1256,1257,7,3,0,0,1257,1258,7,20,0,0,1258,1259,7,5,0,0,1259,148, + 1,0,0,0,1260,1261,7,3,0,0,1261,1262,7,21,0,0,1262,1263,7,14,0,0, + 1263,1264,7,11,0,0,1264,1265,7,15,0,0,1265,1266,7,6,0,0,1266,1267, + 7,8,0,0,1267,1268,7,4,0,0,1268,1269,7,18,0,0,1269,150,1,0,0,0,1270, + 1271,7,3,0,0,1271,1272,7,21,0,0,1272,1273,7,3,0,0,1273,1274,7,14, + 0,0,1274,1275,7,15,0,0,1275,1276,7,5,0,0,1276,1277,7,3,0,0,1277, + 152,1,0,0,0,1278,1279,7,3,0,0,1279,1280,7,21,0,0,1280,1281,7,8,0, + 0,1281,1282,7,2,0,0,1282,1283,7,5,0,0,1283,1284,7,2,0,0,1284,154, + 1,0,0,0,1285,1286,7,3,0,0,1286,1287,7,21,0,0,1287,1288,7,20,0,0, + 1288,1289,7,11,0,0,1289,1290,7,0,0,0,1290,1291,7,8,0,0,1291,1292, + 7,4,0,0,1292,156,1,0,0,0,1293,1294,7,3,0,0,1294,1295,7,21,0,0,1295, + 1296,7,5,0,0,1296,1297,7,10,0,0,1297,1298,7,0,0,0,1298,1299,7,14, + 0,0,1299,1300,7,5,0,0,1300,158,1,0,0,0,1301,1302,7,9,0,0,1302,1303, + 7,0,0,0,1303,1304,7,11,0,0,1304,1305,7,2,0,0,1305,1306,7,3,0,0,1306, + 160,1,0,0,0,1307,1308,7,9,0,0,1308,1309,7,3,0,0,1309,1310,7,5,0, + 0,1310,1311,7,14,0,0,1311,1312,7,16,0,0,1312,162,1,0,0,0,1313,1314, + 7,9,0,0,1314,1315,7,8,0,0,1315,1316,7,11,0,0,1316,1317,7,5,0,0,1317, + 1318,7,3,0,0,1318,1319,7,10,0,0,1319,164,1,0,0,0,1320,1321,7,9,0, + 0,1321,1322,7,8,0,0,1322,1323,7,4,0,0,1323,1324,7,0,0,0,1324,1325, + 7,11,0,0,1325,166,1,0,0,0,1326,1327,7,9,0,0,1327,1328,7,8,0,0,1328, + 1329,7,10,0,0,1329,1330,7,2,0,0,1330,1331,7,5,0,0,1331,168,1,0,0, + 0,1332,1333,7,9,0,0,1333,1334,7,17,0,0,1334,1335,7,11,0,0,1335,1336, + 7,11,0,0,1336,1337,7,17,0,0,1337,1338,7,19,0,0,1338,1339,7,8,0,0, + 1339,1340,7,4,0,0,1340,1341,7,18,0,0,1341,170,1,0,0,0,1342,1343, + 7,9,0,0,1343,1344,7,17,0,0,1344,1345,7,10,0,0,1345,172,1,0,0,0,1346, + 1347,7,9,0,0,1347,1348,7,17,0,0,1348,1349,7,10,0,0,1349,1350,7,7, + 0,0,1350,1351,7,0,0,0,1351,1352,7,5,0,0,1352,174,1,0,0,0,1353,1354, + 7,9,0,0,1354,1355,7,10,0,0,1355,1356,7,17,0,0,1356,1357,7,7,0,0, + 1357,176,1,0,0,0,1358,1359,7,9,0,0,1359,1360,7,15,0,0,1360,1361, + 7,11,0,0,1361,1362,7,11,0,0,1362,178,1,0,0,0,1363,1364,7,9,0,0,1364, + 1365,7,15,0,0,1365,1366,7,4,0,0,1366,1367,7,14,0,0,1367,1368,7,5, + 0,0,1368,1369,7,8,0,0,1369,1370,7,17,0,0,1370,1371,7,4,0,0,1371, + 180,1,0,0,0,1372,1373,7,9,0,0,1373,1374,7,15,0,0,1374,1375,7,4,0, + 0,1375,1376,7,14,0,0,1376,1377,7,5,0,0,1377,1378,7,8,0,0,1378,1379, + 7,17,0,0,1379,1380,7,4,0,0,1380,1381,7,2,0,0,1381,182,1,0,0,0,1382, + 1383,7,18,0,0,1383,1384,7,10,0,0,1384,1385,7,0,0,0,1385,1386,7,14, + 0,0,1386,1387,7,3,0,0,1387,184,1,0,0,0,1388,1389,7,18,0,0,1389,1390, + 7,10,0,0,1390,1391,7,0,0,0,1391,1392,7,4,0,0,1392,1393,7,5,0,0,1393, + 186,1,0,0,0,1394,1395,7,18,0,0,1395,1396,7,10,0,0,1396,1397,7,0, + 0,0,1397,1398,7,4,0,0,1398,1399,7,5,0,0,1399,1400,7,3,0,0,1400,1401, + 7,6,0,0,1401,188,1,0,0,0,1402,1403,7,18,0,0,1403,1404,7,10,0,0,1404, + 1405,7,0,0,0,1405,1406,7,4,0,0,1406,1407,7,5,0,0,1407,1408,7,2,0, + 0,1408,190,1,0,0,0,1409,1410,7,18,0,0,1410,1411,7,10,0,0,1411,1412, + 7,0,0,0,1412,1413,7,20,0,0,1413,1414,7,16,0,0,1414,1415,7,22,0,0, + 1415,1416,7,8,0,0,1416,1417,7,13,0,0,1417,192,1,0,0,0,1418,1419, + 7,18,0,0,1419,1420,7,10,0,0,1420,1421,7,17,0,0,1421,1422,7,15,0, + 0,1422,1423,7,20,0,0,1423,194,1,0,0,0,1424,1425,7,18,0,0,1425,1426, + 7,10,0,0,1426,1427,7,17,0,0,1427,1428,7,15,0,0,1428,1429,7,20,0, + 0,1429,1430,7,8,0,0,1430,1431,7,4,0,0,1431,1432,7,18,0,0,1432,196, + 1,0,0,0,1433,1434,7,18,0,0,1434,1435,7,10,0,0,1435,1436,7,17,0,0, + 1436,1437,7,15,0,0,1437,1438,7,20,0,0,1438,1439,7,2,0,0,1439,198, + 1,0,0,0,1440,1441,7,16,0,0,1441,1442,7,0,0,0,1442,1443,7,22,0,0, + 1443,1444,7,8,0,0,1444,1445,7,4,0,0,1445,1446,7,18,0,0,1446,200, + 1,0,0,0,1447,1448,7,16,0,0,1448,1449,7,17,0,0,1449,1450,7,15,0,0, + 1450,1451,7,10,0,0,1451,202,1,0,0,0,1452,1453,7,8,0,0,1453,1454, + 7,9,0,0,1454,204,1,0,0,0,1455,1456,7,8,0,0,1456,1457,7,18,0,0,1457, + 1458,7,4,0,0,1458,1459,7,17,0,0,1459,1460,7,10,0,0,1460,1461,7,3, + 0,0,1461,206,1,0,0,0,1462,1463,7,8,0,0,1463,1464,7,7,0,0,1464,1465, + 7,7,0,0,1465,1466,7,3,0,0,1466,1467,7,6,0,0,1467,1468,7,8,0,0,1468, + 1469,7,0,0,0,1469,1470,7,5,0,0,1470,1471,7,3,0,0,1471,208,1,0,0, + 0,1472,1473,7,8,0,0,1473,1474,7,4,0,0,1474,210,1,0,0,0,1475,1476, + 7,8,0,0,1476,1477,7,4,0,0,1477,1478,7,14,0,0,1478,1479,7,11,0,0, + 1479,1480,7,15,0,0,1480,1481,7,6,0,0,1481,1482,7,8,0,0,1482,1483, + 7,4,0,0,1483,1484,7,18,0,0,1484,212,1,0,0,0,1485,1486,7,8,0,0,1486, + 1487,7,4,0,0,1487,1488,7,8,0,0,1488,1489,7,5,0,0,1489,1490,7,8,0, + 0,1490,1491,7,0,0,0,1491,1492,7,11,0,0,1492,214,1,0,0,0,1493,1494, + 7,8,0,0,1494,1495,7,4,0,0,1495,1496,7,4,0,0,1496,1497,7,3,0,0,1497, + 1498,7,10,0,0,1498,216,1,0,0,0,1499,1500,7,8,0,0,1500,1501,7,4,0, + 0,1501,1502,7,20,0,0,1502,1503,7,15,0,0,1503,1504,7,5,0,0,1504,218, + 1,0,0,0,1505,1506,7,8,0,0,1506,1507,7,4,0,0,1507,1508,7,2,0,0,1508, + 1509,7,3,0,0,1509,1510,7,10,0,0,1510,1511,7,5,0,0,1511,220,1,0,0, + 0,1512,1513,7,8,0,0,1513,1514,7,4,0,0,1514,1515,7,5,0,0,1515,1516, + 7,3,0,0,1516,1517,7,10,0,0,1517,1518,7,2,0,0,1518,1519,7,3,0,0,1519, + 1520,7,14,0,0,1520,1521,7,5,0,0,1521,222,1,0,0,0,1522,1523,7,8,0, + 0,1523,1524,7,4,0,0,1524,1525,7,5,0,0,1525,1526,7,3,0,0,1526,1527, + 7,10,0,0,1527,1528,7,22,0,0,1528,1529,7,0,0,0,1529,1530,7,11,0,0, + 1530,224,1,0,0,0,1531,1532,7,8,0,0,1532,1533,7,4,0,0,1533,1534,7, + 5,0,0,1534,1535,7,17,0,0,1535,226,1,0,0,0,1536,1537,7,8,0,0,1537, + 1538,7,4,0,0,1538,1539,7,22,0,0,1539,1540,7,17,0,0,1540,1541,7,23, + 0,0,1541,1542,7,3,0,0,1542,1543,7,10,0,0,1543,228,1,0,0,0,1544,1545, + 7,8,0,0,1545,1546,7,17,0,0,1546,230,1,0,0,0,1547,1548,7,8,0,0,1548, + 1549,7,2,0,0,1549,232,1,0,0,0,1550,1551,7,8,0,0,1551,1552,7,2,0, + 0,1552,1553,7,17,0,0,1553,1554,7,11,0,0,1554,1555,7,0,0,0,1555,1556, + 7,5,0,0,1556,1557,7,8,0,0,1557,1558,7,17,0,0,1558,1559,7,4,0,0,1559, + 234,1,0,0,0,1560,1561,7,8,0,0,1561,1562,7,5,0,0,1562,1563,7,3,0, + 0,1563,1564,7,10,0,0,1564,1565,7,0,0,0,1565,1566,7,5,0,0,1566,1567, + 7,3,0,0,1567,236,1,0,0,0,1568,1569,7,24,0,0,1569,1570,7,17,0,0,1570, + 1571,7,8,0,0,1571,1572,7,4,0,0,1572,238,1,0,0,0,1573,1574,7,24,0, + 0,1574,1575,7,2,0,0,1575,1576,7,17,0,0,1576,1577,7,4,0,0,1577,240, + 1,0,0,0,1578,1579,7,24,0,0,1579,1580,7,2,0,0,1580,1581,7,17,0,0, + 1581,1582,7,4,0,0,1582,1583,5,95,0,0,1583,1584,7,0,0,0,1584,1585, + 7,10,0,0,1585,1586,7,10,0,0,1586,1587,7,0,0,0,1587,1588,7,12,0,0, + 1588,242,1,0,0,0,1589,1590,7,24,0,0,1590,1591,7,2,0,0,1591,1592, + 7,17,0,0,1592,1593,7,4,0,0,1593,1594,5,95,0,0,1594,1595,7,3,0,0, + 1595,1596,7,21,0,0,1596,1597,7,8,0,0,1597,1598,7,2,0,0,1598,1599, + 7,5,0,0,1599,1600,7,2,0,0,1600,244,1,0,0,0,1601,1602,7,24,0,0,1602, + 1603,7,2,0,0,1603,1604,7,17,0,0,1604,1605,7,4,0,0,1605,1606,5,95, + 0,0,1606,1607,7,17,0,0,1607,1608,7,1,0,0,1608,1609,7,24,0,0,1609, + 1610,7,3,0,0,1610,1611,7,14,0,0,1611,1612,7,5,0,0,1612,246,1,0,0, + 0,1613,1614,7,24,0,0,1614,1615,7,2,0,0,1615,1616,7,17,0,0,1616,1617, + 7,4,0,0,1617,1618,5,95,0,0,1618,1619,7,25,0,0,1619,1620,7,15,0,0, + 1620,1621,7,3,0,0,1621,1622,7,10,0,0,1622,1623,7,12,0,0,1623,248, + 1,0,0,0,1624,1625,7,24,0,0,1625,1626,7,2,0,0,1626,1627,7,17,0,0, + 1627,1628,7,4,0,0,1628,1629,5,95,0,0,1629,1630,7,5,0,0,1630,1631, + 7,0,0,0,1631,1632,7,1,0,0,1632,1633,7,11,0,0,1633,1634,7,3,0,0,1634, + 250,1,0,0,0,1635,1636,7,24,0,0,1636,1637,7,2,0,0,1637,1638,7,17, + 0,0,1638,1639,7,4,0,0,1639,1640,5,95,0,0,1640,1641,7,22,0,0,1641, + 1642,7,0,0,0,1642,1643,7,11,0,0,1643,1644,7,15,0,0,1644,1645,7,3, + 0,0,1645,252,1,0,0,0,1646,1647,7,23,0,0,1647,1648,7,3,0,0,1648,1649, + 7,3,0,0,1649,1650,7,20,0,0,1650,254,1,0,0,0,1651,1652,7,23,0,0,1652, + 1653,7,3,0,0,1653,1654,7,12,0,0,1654,256,1,0,0,0,1655,1656,7,23, + 0,0,1656,1657,7,3,0,0,1657,1658,7,12,0,0,1658,1659,7,2,0,0,1659, + 258,1,0,0,0,1660,1661,7,11,0,0,1661,1662,7,0,0,0,1662,1663,7,4,0, + 0,1663,1664,7,18,0,0,1664,1665,7,15,0,0,1665,1666,7,0,0,0,1666,1667, + 7,18,0,0,1667,1668,7,3,0,0,1668,260,1,0,0,0,1669,1670,7,11,0,0,1670, + 1671,7,0,0,0,1671,1672,7,2,0,0,1672,1673,7,5,0,0,1673,262,1,0,0, + 0,1674,1675,7,11,0,0,1675,1676,7,0,0,0,1676,1677,7,5,0,0,1677,1678, + 7,3,0,0,1678,1679,7,10,0,0,1679,1680,7,0,0,0,1680,1681,7,11,0,0, + 1681,264,1,0,0,0,1682,1683,7,11,0,0,1683,1684,7,3,0,0,1684,1685, + 7,0,0,0,1685,1686,7,6,0,0,1686,1687,7,8,0,0,1687,1688,7,4,0,0,1688, + 1689,7,18,0,0,1689,266,1,0,0,0,1690,1691,7,11,0,0,1691,1692,7,3, + 0,0,1692,1693,7,0,0,0,1693,1694,7,22,0,0,1694,1695,7,3,0,0,1695, + 268,1,0,0,0,1696,1697,7,11,0,0,1697,1698,7,3,0,0,1698,1699,7,9,0, + 0,1699,1700,7,5,0,0,1700,270,1,0,0,0,1701,1702,7,11,0,0,1702,1703, + 7,3,0,0,1703,1704,7,22,0,0,1704,1705,7,3,0,0,1705,1706,7,11,0,0, + 1706,272,1,0,0,0,1707,1708,7,11,0,0,1708,1709,7,8,0,0,1709,1710, + 7,23,0,0,1710,1711,7,3,0,0,1711,274,1,0,0,0,1712,1713,7,11,0,0,1713, + 1714,7,8,0,0,1714,1715,7,7,0,0,1715,1716,7,8,0,0,1716,1717,7,5,0, + 0,1717,276,1,0,0,0,1718,1719,7,11,0,0,1719,1720,7,8,0,0,1720,1721, + 7,2,0,0,1721,1722,7,5,0,0,1722,1723,7,0,0,0,1723,1724,7,18,0,0,1724, + 1725,7,18,0,0,1725,278,1,0,0,0,1726,1727,7,11,0,0,1727,1728,7,17, + 0,0,1728,1729,7,14,0,0,1729,1730,7,0,0,0,1730,1731,7,11,0,0,1731, + 280,1,0,0,0,1732,1733,7,11,0,0,1733,1734,7,17,0,0,1734,1735,7,14, + 0,0,1735,1736,7,0,0,0,1736,1737,7,11,0,0,1737,1738,7,5,0,0,1738, + 1739,7,8,0,0,1739,1740,7,7,0,0,1740,1741,7,3,0,0,1741,282,1,0,0, + 0,1742,1743,7,11,0,0,1743,1744,7,17,0,0,1744,1745,7,14,0,0,1745, + 1746,7,0,0,0,1746,1747,7,11,0,0,1747,1748,7,5,0,0,1748,1749,7,8, + 0,0,1749,1750,7,7,0,0,1750,1751,7,3,0,0,1751,1752,7,2,0,0,1752,1753, + 7,5,0,0,1753,1754,7,0,0,0,1754,1755,7,7,0,0,1755,1756,7,20,0,0,1756, + 284,1,0,0,0,1757,1758,7,11,0,0,1758,1759,7,17,0,0,1759,1760,7,18, + 0,0,1760,1761,7,8,0,0,1761,1762,7,14,0,0,1762,1763,7,0,0,0,1763, + 1764,7,11,0,0,1764,286,1,0,0,0,1765,1766,7,11,0,0,1766,1767,7,17, + 0,0,1767,1768,7,17,0,0,1768,1769,7,20,0,0,1769,288,1,0,0,0,1770, + 1771,7,7,0,0,1771,1772,7,0,0,0,1772,1773,7,20,0,0,1773,290,1,0,0, + 0,1774,1775,7,7,0,0,1775,1776,7,0,0,0,1776,1777,7,5,0,0,1777,1778, + 7,14,0,0,1778,1779,7,16,0,0,1779,292,1,0,0,0,1780,1781,7,7,0,0,1781, + 1782,7,0,0,0,1782,1783,7,5,0,0,1783,1784,7,14,0,0,1784,1785,7,16, + 0,0,1785,1786,7,3,0,0,1786,1787,7,6,0,0,1787,294,1,0,0,0,1788,1789, + 7,7,0,0,1789,1790,7,0,0,0,1790,1791,7,5,0,0,1791,1792,7,14,0,0,1792, + 1793,7,16,0,0,1793,1794,7,3,0,0,1794,1795,7,2,0,0,1795,296,1,0,0, + 0,1796,1797,7,7,0,0,1797,1798,7,0,0,0,1798,1799,7,5,0,0,1799,1800, + 7,14,0,0,1800,1801,7,16,0,0,1801,1802,5,95,0,0,1802,1803,7,10,0, + 0,1803,1804,7,3,0,0,1804,1805,7,14,0,0,1805,1806,7,17,0,0,1806,1807, + 7,18,0,0,1807,1808,7,4,0,0,1808,1809,7,8,0,0,1809,1810,7,13,0,0, + 1810,1811,7,3,0,0,1811,298,1,0,0,0,1812,1813,7,7,0,0,1813,1814,7, + 0,0,0,1814,1815,7,5,0,0,1815,1816,7,3,0,0,1816,1817,7,10,0,0,1817, + 1818,7,8,0,0,1818,1819,7,0,0,0,1819,1820,7,11,0,0,1820,1821,7,8, + 0,0,1821,1822,7,13,0,0,1822,1823,7,3,0,0,1823,1824,7,6,0,0,1824, + 300,1,0,0,0,1825,1826,7,7,0,0,1826,1827,7,3,0,0,1827,1828,7,0,0, + 0,1828,1829,7,2,0,0,1829,1830,7,15,0,0,1830,1831,7,10,0,0,1831,1832, + 7,3,0,0,1832,1833,7,2,0,0,1833,302,1,0,0,0,1834,1835,7,7,0,0,1835, + 1836,7,3,0,0,1836,1837,7,10,0,0,1837,1838,7,18,0,0,1838,1839,7,3, + 0,0,1839,304,1,0,0,0,1840,1841,7,7,0,0,1841,1842,7,8,0,0,1842,1843, + 7,4,0,0,1843,1844,7,15,0,0,1844,1845,7,5,0,0,1845,1846,7,3,0,0,1846, + 306,1,0,0,0,1847,1848,7,7,0,0,1848,1849,7,17,0,0,1849,1850,7,4,0, + 0,1850,1851,7,5,0,0,1851,1852,7,16,0,0,1852,308,1,0,0,0,1853,1854, + 7,4,0,0,1854,1855,7,0,0,0,1855,1856,7,5,0,0,1856,1857,7,15,0,0,1857, + 1858,7,10,0,0,1858,1859,7,0,0,0,1859,1860,7,11,0,0,1860,310,1,0, + 0,0,1861,1862,7,4,0,0,1862,1863,7,3,0,0,1863,1864,7,2,0,0,1864,1865, + 7,5,0,0,1865,1866,7,3,0,0,1866,1867,7,6,0,0,1867,312,1,0,0,0,1868, + 1869,7,4,0,0,1869,1870,7,3,0,0,1870,1871,7,21,0,0,1871,1872,7,5, + 0,0,1872,314,1,0,0,0,1873,1874,7,4,0,0,1874,1875,7,9,0,0,1875,1876, + 7,14,0,0,1876,316,1,0,0,0,1877,1878,7,4,0,0,1878,1879,7,9,0,0,1879, + 1880,7,6,0,0,1880,318,1,0,0,0,1881,1882,7,4,0,0,1882,1883,7,9,0, + 0,1883,1884,7,23,0,0,1884,1885,7,14,0,0,1885,320,1,0,0,0,1886,1887, + 7,4,0,0,1887,1888,7,9,0,0,1888,1889,7,23,0,0,1889,1890,7,6,0,0,1890, + 322,1,0,0,0,1891,1892,7,4,0,0,1892,1893,7,17,0,0,1893,324,1,0,0, + 0,1894,1895,7,4,0,0,1895,1896,7,17,0,0,1896,1897,7,4,0,0,1897,1898, + 7,3,0,0,1898,326,1,0,0,0,1899,1900,7,4,0,0,1900,1901,7,17,0,0,1901, + 1902,7,10,0,0,1902,1903,7,7,0,0,1903,1904,7,0,0,0,1904,1905,7,11, + 0,0,1905,1906,7,8,0,0,1906,1907,7,13,0,0,1907,1908,7,3,0,0,1908, + 328,1,0,0,0,1909,1910,7,4,0,0,1910,1911,7,17,0,0,1911,1912,7,5,0, + 0,1912,330,1,0,0,0,1913,1914,7,4,0,0,1914,1915,7,15,0,0,1915,1916, + 7,11,0,0,1916,1917,7,11,0,0,1917,332,1,0,0,0,1918,1919,7,4,0,0,1919, + 1920,7,15,0,0,1920,1921,7,11,0,0,1921,1922,7,11,0,0,1922,1923,7, + 8,0,0,1923,1924,7,9,0,0,1924,334,1,0,0,0,1925,1926,7,4,0,0,1926, + 1927,7,15,0,0,1927,1928,7,11,0,0,1928,1929,7,11,0,0,1929,1930,7, + 2,0,0,1930,336,1,0,0,0,1931,1932,7,17,0,0,1932,1933,7,1,0,0,1933, + 1934,7,24,0,0,1934,1935,7,3,0,0,1935,1936,7,14,0,0,1936,1937,7,5, + 0,0,1937,338,1,0,0,0,1938,1939,7,17,0,0,1939,1940,7,9,0,0,1940,340, + 1,0,0,0,1941,1942,7,17,0,0,1942,1943,7,9,0,0,1943,1944,7,9,0,0,1944, + 1945,7,2,0,0,1945,1946,7,3,0,0,1946,1947,7,5,0,0,1947,342,1,0,0, + 0,1948,1949,7,17,0,0,1949,1950,7,7,0,0,1950,1951,7,8,0,0,1951,1952, + 7,5,0,0,1952,344,1,0,0,0,1953,1954,7,17,0,0,1954,1955,7,4,0,0,1955, + 346,1,0,0,0,1956,1957,7,17,0,0,1957,1958,7,4,0,0,1958,1959,7,3,0, + 0,1959,348,1,0,0,0,1960,1961,7,17,0,0,1961,1962,7,4,0,0,1962,1963, + 7,11,0,0,1963,1964,7,12,0,0,1964,350,1,0,0,0,1965,1966,7,17,0,0, + 1966,1967,7,20,0,0,1967,1968,7,5,0,0,1968,1969,7,8,0,0,1969,1970, + 7,17,0,0,1970,1971,7,4,0,0,1971,352,1,0,0,0,1972,1973,7,17,0,0,1973, + 1974,7,10,0,0,1974,354,1,0,0,0,1975,1976,7,17,0,0,1976,1977,7,10, + 0,0,1977,1978,7,6,0,0,1978,1979,7,3,0,0,1979,1980,7,10,0,0,1980, + 356,1,0,0,0,1981,1982,7,17,0,0,1982,1983,7,10,0,0,1983,1984,7,6, + 0,0,1984,1985,7,8,0,0,1985,1986,7,4,0,0,1986,1987,7,0,0,0,1987,1988, + 7,11,0,0,1988,1989,7,8,0,0,1989,1990,7,5,0,0,1990,1991,7,12,0,0, + 1991,358,1,0,0,0,1992,1993,7,17,0,0,1993,1994,7,15,0,0,1994,1995, + 7,5,0,0,1995,1996,7,3,0,0,1996,1997,7,10,0,0,1997,360,1,0,0,0,1998, + 1999,7,17,0,0,1999,2000,7,15,0,0,2000,2001,7,5,0,0,2001,2002,7,20, + 0,0,2002,2003,7,15,0,0,2003,2004,7,5,0,0,2004,362,1,0,0,0,2005,2006, + 7,17,0,0,2006,2007,7,22,0,0,2007,2008,7,3,0,0,2008,2009,7,10,0,0, + 2009,364,1,0,0,0,2010,2011,7,17,0,0,2011,2012,7,22,0,0,2012,2013, + 7,3,0,0,2013,2014,7,10,0,0,2014,2015,7,9,0,0,2015,2016,7,11,0,0, + 2016,2017,7,17,0,0,2017,2018,7,19,0,0,2018,366,1,0,0,0,2019,2020, + 7,20,0,0,2020,2021,7,0,0,0,2021,2022,7,10,0,0,2022,2023,7,5,0,0, + 2023,2024,7,8,0,0,2024,2025,7,5,0,0,2025,2026,7,8,0,0,2026,2027, + 7,17,0,0,2027,2028,7,4,0,0,2028,368,1,0,0,0,2029,2030,7,20,0,0,2030, + 2031,7,0,0,0,2031,2032,7,10,0,0,2032,2033,7,5,0,0,2033,2034,7,8, + 0,0,2034,2035,7,5,0,0,2035,2036,7,8,0,0,2036,2037,7,17,0,0,2037, + 2038,7,4,0,0,2038,2039,7,2,0,0,2039,370,1,0,0,0,2040,2041,7,20,0, + 0,2041,2042,7,0,0,0,2042,2043,7,2,0,0,2043,2044,7,2,0,0,2044,2045, + 7,8,0,0,2045,2046,7,4,0,0,2046,2047,7,18,0,0,2047,372,1,0,0,0,2048, + 2049,7,20,0,0,2049,2050,7,0,0,0,2050,2051,7,2,0,0,2051,2052,7,5, + 0,0,2052,374,1,0,0,0,2053,2054,7,20,0,0,2054,2055,7,0,0,0,2055,2056, + 7,5,0,0,2056,2057,7,16,0,0,2057,376,1,0,0,0,2058,2059,7,20,0,0,2059, + 2060,7,0,0,0,2060,2061,7,5,0,0,2061,2062,7,5,0,0,2062,2063,7,3,0, + 0,2063,2064,7,10,0,0,2064,2065,7,4,0,0,2065,378,1,0,0,0,2066,2067, + 7,20,0,0,2067,2068,7,3,0,0,2068,2069,7,10,0,0,2069,380,1,0,0,0,2070, + 2071,7,20,0,0,2071,2072,7,3,0,0,2072,2073,7,10,0,0,2073,2074,7,8, + 0,0,2074,2075,7,17,0,0,2075,2076,7,6,0,0,2076,382,1,0,0,0,2077,2078, + 7,20,0,0,2078,2079,7,3,0,0,2079,2080,7,10,0,0,2080,2081,7,7,0,0, + 2081,2082,7,15,0,0,2082,2083,7,5,0,0,2083,2084,7,3,0,0,2084,384, + 1,0,0,0,2085,2086,7,20,0,0,2086,2087,7,11,0,0,2087,2088,7,0,0,0, + 2088,2089,7,4,0,0,2089,386,1,0,0,0,2090,2091,7,20,0,0,2091,2092, + 7,17,0,0,2092,2093,7,2,0,0,2093,2094,7,8,0,0,2094,2095,7,5,0,0,2095, + 2096,7,8,0,0,2096,2097,7,17,0,0,2097,2098,7,4,0,0,2098,388,1,0,0, + 0,2099,2100,7,20,0,0,2100,2101,7,10,0,0,2101,2102,7,3,0,0,2102,2103, + 7,14,0,0,2103,2104,7,3,0,0,2104,2105,7,6,0,0,2105,2106,7,8,0,0,2106, + 2107,7,4,0,0,2107,2108,7,18,0,0,2108,390,1,0,0,0,2109,2110,7,20, + 0,0,2110,2111,7,10,0,0,2111,2112,7,3,0,0,2112,2113,7,14,0,0,2113, + 2114,7,8,0,0,2114,2115,7,2,0,0,2115,2116,7,8,0,0,2116,2117,7,17, + 0,0,2117,2118,7,4,0,0,2118,392,1,0,0,0,2119,2120,7,20,0,0,2120,2121, + 7,10,0,0,2121,2122,7,3,0,0,2122,2123,7,20,0,0,2123,2124,7,0,0,0, + 2124,2125,7,10,0,0,2125,2126,7,3,0,0,2126,394,1,0,0,0,2127,2128, + 7,20,0,0,2128,2129,7,10,0,0,2129,2130,7,8,0,0,2130,2131,7,22,0,0, + 2131,2132,7,8,0,0,2132,2133,7,11,0,0,2133,2134,7,3,0,0,2134,2135, + 7,18,0,0,2135,2136,7,3,0,0,2136,2137,7,2,0,0,2137,396,1,0,0,0,2138, + 2139,7,20,0,0,2139,2140,7,10,0,0,2140,2141,7,17,0,0,2141,2142,7, + 20,0,0,2142,2143,7,3,0,0,2143,2144,7,10,0,0,2144,2145,7,5,0,0,2145, + 2146,7,8,0,0,2146,2147,7,3,0,0,2147,2148,7,2,0,0,2148,398,1,0,0, + 0,2149,2150,7,20,0,0,2150,2151,7,10,0,0,2151,2152,7,15,0,0,2152, + 2153,7,4,0,0,2153,2154,7,3,0,0,2154,400,1,0,0,0,2155,2156,7,25,0, + 0,2156,2157,7,15,0,0,2157,2158,7,17,0,0,2158,2159,7,5,0,0,2159,2160, + 7,3,0,0,2160,2161,7,2,0,0,2161,402,1,0,0,0,2162,2163,7,10,0,0,2163, + 2164,7,0,0,0,2164,2165,7,4,0,0,2165,2166,7,18,0,0,2166,2167,7,3, + 0,0,2167,404,1,0,0,0,2168,2169,7,10,0,0,2169,2170,7,3,0,0,2170,2171, + 7,0,0,0,2171,2172,7,6,0,0,2172,406,1,0,0,0,2173,2174,7,10,0,0,2174, + 2175,7,3,0,0,2175,2176,7,14,0,0,2176,2177,7,15,0,0,2177,2178,7,10, + 0,0,2178,2179,7,2,0,0,2179,2180,7,8,0,0,2180,2181,7,22,0,0,2181, + 2182,7,3,0,0,2182,408,1,0,0,0,2183,2184,7,10,0,0,2184,2185,7,3,0, + 0,2185,2186,7,9,0,0,2186,2187,7,10,0,0,2187,2188,7,3,0,0,2188,2189, + 7,2,0,0,2189,2190,7,16,0,0,2190,410,1,0,0,0,2191,2192,7,10,0,0,2192, + 2193,7,3,0,0,2193,2194,7,4,0,0,2194,2195,7,0,0,0,2195,2196,7,7,0, + 0,2196,2197,7,3,0,0,2197,412,1,0,0,0,2198,2199,7,10,0,0,2199,2200, + 7,3,0,0,2200,2201,7,20,0,0,2201,2202,7,3,0,0,2202,2203,7,0,0,0,2203, + 2204,7,5,0,0,2204,414,1,0,0,0,2205,2206,7,10,0,0,2206,2207,7,3,0, + 0,2207,2208,7,20,0,0,2208,2209,7,3,0,0,2209,2210,7,0,0,0,2210,2211, + 7,5,0,0,2211,2212,7,0,0,0,2212,2213,7,1,0,0,2213,2214,7,11,0,0,2214, + 2215,7,3,0,0,2215,416,1,0,0,0,2216,2217,7,10,0,0,2217,2218,7,3,0, + 0,2218,2219,7,20,0,0,2219,2220,7,11,0,0,2220,2221,7,0,0,0,2221,2222, + 7,14,0,0,2222,2223,7,3,0,0,2223,418,1,0,0,0,2224,2225,7,10,0,0,2225, + 2226,7,3,0,0,2226,2227,7,2,0,0,2227,2228,7,3,0,0,2228,2229,7,5,0, + 0,2229,420,1,0,0,0,2230,2231,7,10,0,0,2231,2232,7,3,0,0,2232,2233, + 7,2,0,0,2233,2234,7,20,0,0,2234,2235,7,3,0,0,2235,2236,7,14,0,0, + 2236,2237,7,5,0,0,2237,422,1,0,0,0,2238,2239,7,10,0,0,2239,2240, + 7,3,0,0,2240,2241,7,2,0,0,2241,2242,7,5,0,0,2242,2243,7,10,0,0,2243, + 2244,7,8,0,0,2244,2245,7,14,0,0,2245,2246,7,5,0,0,2246,424,1,0,0, + 0,2247,2248,7,10,0,0,2248,2249,7,3,0,0,2249,2250,7,5,0,0,2250,2251, + 7,15,0,0,2251,2252,7,10,0,0,2252,2253,7,4,0,0,2253,426,1,0,0,0,2254, + 2255,7,10,0,0,2255,2256,7,3,0,0,2256,2257,7,5,0,0,2257,2258,7,15, + 0,0,2258,2259,7,10,0,0,2259,2260,7,4,0,0,2260,2261,7,8,0,0,2261, + 2262,7,4,0,0,2262,2263,7,18,0,0,2263,428,1,0,0,0,2264,2265,7,10, + 0,0,2265,2266,7,3,0,0,2266,2267,7,5,0,0,2267,2268,7,15,0,0,2268, + 2269,7,10,0,0,2269,2270,7,4,0,0,2270,2271,7,2,0,0,2271,430,1,0,0, + 0,2272,2273,7,10,0,0,2273,2274,7,3,0,0,2274,2275,7,22,0,0,2275,2276, + 7,17,0,0,2276,2277,7,23,0,0,2277,2278,7,3,0,0,2278,432,1,0,0,0,2279, + 2280,7,10,0,0,2280,2281,7,8,0,0,2281,2282,7,18,0,0,2282,2283,7,16, + 0,0,2283,2284,7,5,0,0,2284,434,1,0,0,0,2285,2286,7,10,0,0,2286,2287, + 7,17,0,0,2287,2288,7,11,0,0,2288,2289,7,3,0,0,2289,436,1,0,0,0,2290, + 2291,7,10,0,0,2291,2292,7,17,0,0,2292,2293,7,11,0,0,2293,2294,7, + 3,0,0,2294,2295,7,2,0,0,2295,438,1,0,0,0,2296,2297,7,10,0,0,2297, + 2298,7,17,0,0,2298,2299,7,11,0,0,2299,2300,7,11,0,0,2300,2301,7, + 1,0,0,2301,2302,7,0,0,0,2302,2303,7,14,0,0,2303,2304,7,23,0,0,2304, + 440,1,0,0,0,2305,2306,7,10,0,0,2306,2307,7,17,0,0,2307,2308,7,11, + 0,0,2308,2309,7,11,0,0,2309,2310,7,15,0,0,2310,2311,7,20,0,0,2311, + 442,1,0,0,0,2312,2313,7,10,0,0,2313,2314,7,17,0,0,2314,2315,7,19, + 0,0,2315,444,1,0,0,0,2316,2317,7,10,0,0,2317,2318,7,17,0,0,2318, + 2319,7,19,0,0,2319,2320,7,2,0,0,2320,446,1,0,0,0,2321,2322,7,10, + 0,0,2322,2323,7,15,0,0,2323,2324,7,4,0,0,2324,2325,7,4,0,0,2325, + 2326,7,8,0,0,2326,2327,7,4,0,0,2327,2328,7,18,0,0,2328,448,1,0,0, + 0,2329,2330,7,2,0,0,2330,2331,7,14,0,0,2331,2332,7,0,0,0,2332,2333, + 7,11,0,0,2333,2334,7,0,0,0,2334,2335,7,10,0,0,2335,450,1,0,0,0,2336, + 2337,7,2,0,0,2337,2338,7,14,0,0,2338,2339,7,16,0,0,2339,2340,7,3, + 0,0,2340,2341,7,7,0,0,2341,2342,7,0,0,0,2342,452,1,0,0,0,2343,2344, + 7,2,0,0,2344,2345,7,14,0,0,2345,2346,7,16,0,0,2346,2347,7,3,0,0, + 2347,2348,7,7,0,0,2348,2349,7,0,0,0,2349,2350,7,2,0,0,2350,454,1, + 0,0,0,2351,2352,7,2,0,0,2352,2353,7,3,0,0,2353,2354,7,14,0,0,2354, + 2355,7,17,0,0,2355,2356,7,4,0,0,2356,2357,7,6,0,0,2357,456,1,0,0, + 0,2358,2359,7,2,0,0,2359,2360,7,3,0,0,2360,2361,7,14,0,0,2361,2362, + 7,15,0,0,2362,2363,7,10,0,0,2363,2364,7,8,0,0,2364,2365,7,5,0,0, + 2365,2366,7,12,0,0,2366,458,1,0,0,0,2367,2368,7,2,0,0,2368,2369, + 7,3,0,0,2369,2370,7,3,0,0,2370,2371,7,23,0,0,2371,460,1,0,0,0,2372, + 2373,7,2,0,0,2373,2374,7,3,0,0,2374,2375,7,11,0,0,2375,2376,7,3, + 0,0,2376,2377,7,14,0,0,2377,2378,7,5,0,0,2378,462,1,0,0,0,2379,2380, + 7,2,0,0,2380,2381,7,3,0,0,2381,2382,7,10,0,0,2382,2383,7,8,0,0,2383, + 2384,7,0,0,0,2384,2385,7,11,0,0,2385,2386,7,8,0,0,2386,2387,7,13, + 0,0,2387,2388,7,0,0,0,2388,2389,7,1,0,0,2389,2390,7,11,0,0,2390, + 2391,7,3,0,0,2391,464,1,0,0,0,2392,2393,7,2,0,0,2393,2394,7,3,0, + 0,2394,2395,7,2,0,0,2395,2396,7,2,0,0,2396,2397,7,8,0,0,2397,2398, + 7,17,0,0,2398,2399,7,4,0,0,2399,466,1,0,0,0,2400,2401,7,2,0,0,2401, + 2402,7,3,0,0,2402,2403,7,5,0,0,2403,468,1,0,0,0,2404,2405,7,2,0, + 0,2405,2406,7,3,0,0,2406,2407,7,5,0,0,2407,2408,7,2,0,0,2408,470, + 1,0,0,0,2409,2410,7,2,0,0,2410,2411,7,16,0,0,2411,2412,7,17,0,0, + 2412,2413,7,19,0,0,2413,472,1,0,0,0,2414,2415,7,2,0,0,2415,2416, + 7,23,0,0,2416,2417,7,8,0,0,2417,2418,7,20,0,0,2418,474,1,0,0,0,2419, + 2420,7,2,0,0,2420,2421,7,17,0,0,2421,2422,7,7,0,0,2422,2423,7,3, + 0,0,2423,476,1,0,0,0,2424,2425,7,2,0,0,2425,2426,7,5,0,0,2426,2427, + 7,0,0,0,2427,2428,7,10,0,0,2428,2429,7,5,0,0,2429,478,1,0,0,0,2430, + 2431,7,2,0,0,2431,2432,7,5,0,0,2432,2433,7,0,0,0,2433,2434,7,5,0, + 0,2434,2435,7,2,0,0,2435,480,1,0,0,0,2436,2437,7,2,0,0,2437,2438, + 7,15,0,0,2438,2439,7,1,0,0,2439,2440,7,2,0,0,2440,2441,7,3,0,0,2441, + 2442,7,5,0,0,2442,482,1,0,0,0,2443,2444,7,2,0,0,2444,2445,7,15,0, + 0,2445,2446,7,1,0,0,2446,2447,7,2,0,0,2447,2448,7,5,0,0,2448,2449, + 7,10,0,0,2449,2450,7,8,0,0,2450,2451,7,4,0,0,2451,2452,7,18,0,0, + 2452,484,1,0,0,0,2453,2454,7,2,0,0,2454,2455,7,12,0,0,2455,2456, + 7,2,0,0,2456,2457,7,5,0,0,2457,2458,7,3,0,0,2458,2459,7,7,0,0,2459, + 486,1,0,0,0,2460,2461,7,5,0,0,2461,2462,7,0,0,0,2462,2463,7,1,0, + 0,2463,2464,7,11,0,0,2464,2465,7,3,0,0,2465,488,1,0,0,0,2466,2467, + 7,5,0,0,2467,2468,7,0,0,0,2468,2469,7,1,0,0,2469,2470,7,11,0,0,2470, + 2471,7,3,0,0,2471,2472,7,2,0,0,2472,490,1,0,0,0,2473,2474,7,5,0, + 0,2474,2475,7,0,0,0,2475,2476,7,1,0,0,2476,2477,7,11,0,0,2477,2478, + 7,3,0,0,2478,2479,7,2,0,0,2479,2480,7,0,0,0,2480,2481,7,7,0,0,2481, + 2482,7,20,0,0,2482,2483,7,11,0,0,2483,2484,7,3,0,0,2484,492,1,0, + 0,0,2485,2486,7,5,0,0,2486,2487,7,3,0,0,2487,2488,7,21,0,0,2488, + 2489,7,5,0,0,2489,494,1,0,0,0,2490,2491,7,2,0,0,2491,2492,7,5,0, + 0,2492,2493,7,10,0,0,2493,2494,7,8,0,0,2494,2495,7,4,0,0,2495,2496, + 7,18,0,0,2496,496,1,0,0,0,2497,2498,7,5,0,0,2498,2499,7,16,0,0,2499, + 2500,7,3,0,0,2500,2501,7,4,0,0,2501,498,1,0,0,0,2502,2503,7,5,0, + 0,2503,2504,7,8,0,0,2504,2505,7,3,0,0,2505,2506,7,2,0,0,2506,500, + 1,0,0,0,2507,2508,7,5,0,0,2508,2509,7,8,0,0,2509,2510,7,7,0,0,2510, + 2511,7,3,0,0,2511,502,1,0,0,0,2512,2513,7,5,0,0,2513,2514,7,8,0, + 0,2514,2515,7,7,0,0,2515,2516,7,3,0,0,2516,2517,7,2,0,0,2517,2518, + 7,5,0,0,2518,2519,7,0,0,0,2519,2520,7,7,0,0,2520,2521,7,20,0,0,2521, + 504,1,0,0,0,2522,2523,7,5,0,0,2523,2524,7,17,0,0,2524,506,1,0,0, + 0,2525,2526,7,5,0,0,2526,2527,7,10,0,0,2527,2528,7,0,0,0,2528,2529, + 7,8,0,0,2529,2530,7,11,0,0,2530,2531,7,8,0,0,2531,2532,7,4,0,0,2532, + 2533,7,18,0,0,2533,508,1,0,0,0,2534,2535,7,5,0,0,2535,2536,7,10, + 0,0,2536,2537,7,0,0,0,2537,2538,7,4,0,0,2538,2539,7,2,0,0,2539,2540, + 7,0,0,0,2540,2541,7,14,0,0,2541,2542,7,5,0,0,2542,2543,7,8,0,0,2543, + 2544,7,17,0,0,2544,2545,7,4,0,0,2545,510,1,0,0,0,2546,2547,7,5,0, + 0,2547,2548,7,10,0,0,2548,2549,7,8,0,0,2549,2550,7,7,0,0,2550,512, + 1,0,0,0,2551,2552,7,5,0,0,2552,2553,7,10,0,0,2553,2554,7,15,0,0, + 2554,2555,7,3,0,0,2555,514,1,0,0,0,2556,2557,7,5,0,0,2557,2558,7, + 10,0,0,2558,2559,7,15,0,0,2559,2560,7,4,0,0,2560,2561,7,14,0,0,2561, + 2562,7,0,0,0,2562,2563,7,5,0,0,2563,2564,7,3,0,0,2564,516,1,0,0, + 0,2565,2566,7,5,0,0,2566,2567,7,10,0,0,2567,2568,7,12,0,0,2568,2569, + 5,95,0,0,2569,2570,7,14,0,0,2570,2571,7,0,0,0,2571,2572,7,2,0,0, + 2572,2573,7,5,0,0,2573,518,1,0,0,0,2574,2575,7,5,0,0,2575,2576,7, + 12,0,0,2576,2577,7,20,0,0,2577,2578,7,3,0,0,2578,520,1,0,0,0,2579, + 2580,7,15,0,0,2580,2581,7,3,0,0,2581,2582,7,2,0,0,2582,2583,7,14, + 0,0,2583,2584,7,0,0,0,2584,2585,7,20,0,0,2585,2586,7,3,0,0,2586, + 522,1,0,0,0,2587,2588,7,15,0,0,2588,2589,7,4,0,0,2589,2590,7,1,0, + 0,2590,2591,7,17,0,0,2591,2592,7,15,0,0,2592,2593,7,4,0,0,2593,2594, + 7,6,0,0,2594,2595,7,3,0,0,2595,2596,7,6,0,0,2596,524,1,0,0,0,2597, + 2598,7,15,0,0,2598,2599,7,4,0,0,2599,2600,7,14,0,0,2600,2601,7,17, + 0,0,2601,2602,7,7,0,0,2602,2603,7,7,0,0,2603,2604,7,8,0,0,2604,2605, + 7,5,0,0,2605,2606,7,5,0,0,2606,2607,7,3,0,0,2607,2608,7,6,0,0,2608, + 526,1,0,0,0,2609,2610,7,15,0,0,2610,2611,7,4,0,0,2611,2612,7,14, + 0,0,2612,2613,7,17,0,0,2613,2614,7,4,0,0,2614,2615,7,6,0,0,2615, + 2616,7,8,0,0,2616,2617,7,5,0,0,2617,2618,7,8,0,0,2618,2619,7,17, + 0,0,2619,2620,7,4,0,0,2620,2621,7,0,0,0,2621,2622,7,11,0,0,2622, + 528,1,0,0,0,2623,2624,7,15,0,0,2624,2625,7,4,0,0,2625,2626,7,8,0, + 0,2626,2627,7,17,0,0,2627,2628,7,4,0,0,2628,530,1,0,0,0,2629,2630, + 7,15,0,0,2630,2631,7,4,0,0,2631,2632,7,8,0,0,2632,2633,7,25,0,0, + 2633,2634,7,15,0,0,2634,2635,7,3,0,0,2635,532,1,0,0,0,2636,2637, + 7,15,0,0,2637,2638,7,4,0,0,2638,2639,7,23,0,0,2639,2640,7,4,0,0, + 2640,2641,7,17,0,0,2641,2642,7,19,0,0,2642,2643,7,4,0,0,2643,534, + 1,0,0,0,2644,2645,7,15,0,0,2645,2646,7,4,0,0,2646,2647,7,7,0,0,2647, + 2648,7,0,0,0,2648,2649,7,5,0,0,2649,2650,7,14,0,0,2650,2651,7,16, + 0,0,2651,2652,7,3,0,0,2652,2653,7,6,0,0,2653,536,1,0,0,0,2654,2655, + 7,15,0,0,2655,2656,7,4,0,0,2656,2657,7,4,0,0,2657,2658,7,3,0,0,2658, + 2659,7,2,0,0,2659,2660,7,5,0,0,2660,538,1,0,0,0,2661,2662,7,15,0, + 0,2662,2663,7,4,0,0,2663,2664,7,5,0,0,2664,2665,7,8,0,0,2665,2666, + 7,11,0,0,2666,540,1,0,0,0,2667,2668,7,15,0,0,2668,2669,7,20,0,0, + 2669,2670,7,6,0,0,2670,2671,7,0,0,0,2671,2672,7,5,0,0,2672,2673, + 7,3,0,0,2673,542,1,0,0,0,2674,2675,7,15,0,0,2675,2676,7,2,0,0,2676, + 2677,7,3,0,0,2677,544,1,0,0,0,2678,2679,7,15,0,0,2679,2680,7,2,0, + 0,2680,2681,7,3,0,0,2681,2682,7,10,0,0,2682,546,1,0,0,0,2683,2684, + 7,15,0,0,2684,2685,7,2,0,0,2685,2686,7,8,0,0,2686,2687,7,4,0,0,2687, + 2688,7,18,0,0,2688,548,1,0,0,0,2689,2690,7,15,0,0,2690,2691,7,5, + 0,0,2691,2692,7,9,0,0,2692,2693,5,49,0,0,2693,2694,5,54,0,0,2694, + 550,1,0,0,0,2695,2696,7,15,0,0,2696,2697,7,5,0,0,2697,2698,7,9,0, + 0,2698,2699,5,51,0,0,2699,2700,5,50,0,0,2700,552,1,0,0,0,2701,2702, + 7,15,0,0,2702,2703,7,5,0,0,2703,2704,7,9,0,0,2704,2705,5,56,0,0, + 2705,554,1,0,0,0,2706,2707,7,22,0,0,2707,2708,7,0,0,0,2708,2709, + 7,11,0,0,2709,2710,7,8,0,0,2710,2711,7,6,0,0,2711,2712,7,0,0,0,2712, + 2713,7,5,0,0,2713,2714,7,3,0,0,2714,556,1,0,0,0,2715,2716,7,22,0, + 0,2716,2717,7,0,0,0,2717,2718,7,11,0,0,2718,2719,7,15,0,0,2719,2720, + 7,3,0,0,2720,558,1,0,0,0,2721,2722,7,22,0,0,2722,2723,7,0,0,0,2723, + 2724,7,11,0,0,2724,2725,7,15,0,0,2725,2726,7,3,0,0,2726,2727,7,2, + 0,0,2727,560,1,0,0,0,2728,2729,7,22,0,0,2729,2730,7,3,0,0,2730,2731, + 7,10,0,0,2731,2732,7,1,0,0,2732,2733,7,17,0,0,2733,2734,7,2,0,0, + 2734,2735,7,3,0,0,2735,562,1,0,0,0,2736,2737,7,22,0,0,2737,2738, + 7,3,0,0,2738,2739,7,10,0,0,2739,2740,7,2,0,0,2740,2741,7,8,0,0,2741, + 2742,7,17,0,0,2742,2743,7,4,0,0,2743,564,1,0,0,0,2744,2745,7,22, + 0,0,2745,2746,7,8,0,0,2746,2747,7,3,0,0,2747,2748,7,19,0,0,2748, + 566,1,0,0,0,2749,2750,7,19,0,0,2750,2751,7,16,0,0,2751,2752,7,3, + 0,0,2752,2753,7,4,0,0,2753,568,1,0,0,0,2754,2755,7,19,0,0,2755,2756, + 7,16,0,0,2756,2757,7,3,0,0,2757,2758,7,10,0,0,2758,2759,7,3,0,0, + 2759,570,1,0,0,0,2760,2761,7,19,0,0,2761,2762,7,16,0,0,2762,2763, + 7,8,0,0,2763,2764,7,11,0,0,2764,2765,7,3,0,0,2765,572,1,0,0,0,2766, + 2767,7,19,0,0,2767,2768,7,8,0,0,2768,2769,7,4,0,0,2769,2770,7,6, + 0,0,2770,2771,7,17,0,0,2771,2772,7,19,0,0,2772,574,1,0,0,0,2773, + 2774,7,19,0,0,2774,2775,7,8,0,0,2775,2776,7,5,0,0,2776,2777,7,16, + 0,0,2777,576,1,0,0,0,2778,2779,7,19,0,0,2779,2780,7,8,0,0,2780,2781, + 7,5,0,0,2781,2782,7,16,0,0,2782,2783,7,8,0,0,2783,2784,7,4,0,0,2784, + 578,1,0,0,0,2785,2786,7,19,0,0,2786,2787,7,8,0,0,2787,2788,7,5,0, + 0,2788,2789,7,16,0,0,2789,2790,7,17,0,0,2790,2791,7,15,0,0,2791, + 2792,7,5,0,0,2792,580,1,0,0,0,2793,2794,7,19,0,0,2794,2795,7,17, + 0,0,2795,2796,7,10,0,0,2796,2797,7,23,0,0,2797,582,1,0,0,0,2798, + 2799,7,19,0,0,2799,2800,7,10,0,0,2800,2801,7,0,0,0,2801,2802,7,20, + 0,0,2802,2803,7,20,0,0,2803,2804,7,3,0,0,2804,2805,7,10,0,0,2805, + 584,1,0,0,0,2806,2807,7,19,0,0,2807,2808,7,10,0,0,2808,2809,7,8, + 0,0,2809,2810,7,5,0,0,2810,2811,7,3,0,0,2811,586,1,0,0,0,2812,2813, + 7,12,0,0,2813,2814,7,3,0,0,2814,2815,7,0,0,0,2815,2816,7,10,0,0, + 2816,588,1,0,0,0,2817,2818,7,13,0,0,2818,2819,7,17,0,0,2819,2820, + 7,4,0,0,2820,2821,7,3,0,0,2821,590,1,0,0,0,2822,2823,5,61,0,0,2823, + 592,1,0,0,0,2824,2825,5,60,0,0,2825,2829,5,62,0,0,2826,2827,5,33, + 0,0,2827,2829,5,61,0,0,2828,2824,1,0,0,0,2828,2826,1,0,0,0,2829, + 594,1,0,0,0,2830,2831,5,60,0,0,2831,596,1,0,0,0,2832,2833,5,60,0, + 0,2833,2834,5,61,0,0,2834,598,1,0,0,0,2835,2836,5,62,0,0,2836,600, + 1,0,0,0,2837,2838,5,62,0,0,2838,2839,5,61,0,0,2839,602,1,0,0,0,2840, + 2841,5,43,0,0,2841,604,1,0,0,0,2842,2843,5,45,0,0,2843,606,1,0,0, + 0,2844,2845,5,42,0,0,2845,608,1,0,0,0,2846,2847,5,47,0,0,2847,610, + 1,0,0,0,2848,2849,5,37,0,0,2849,612,1,0,0,0,2850,2851,5,124,0,0, + 2851,2852,5,124,0,0,2852,614,1,0,0,0,2853,2854,5,63,0,0,2854,616, + 1,0,0,0,2855,2856,5,59,0,0,2856,618,1,0,0,0,2857,2858,5,46,0,0,2858, + 620,1,0,0,0,2859,2860,5,95,0,0,2860,2861,5,58,0,0,2861,622,1,0,0, + 0,2862,2863,5,44,0,0,2863,624,1,0,0,0,2864,2865,5,40,0,0,2865,626, + 1,0,0,0,2866,2867,5,41,0,0,2867,628,1,0,0,0,2868,2869,5,91,0,0,2869, + 630,1,0,0,0,2870,2871,5,93,0,0,2871,632,1,0,0,0,2872,2873,5,123, + 0,0,2873,634,1,0,0,0,2874,2875,5,125,0,0,2875,636,1,0,0,0,2876,2877, + 5,123,0,0,2877,2878,5,45,0,0,2878,638,1,0,0,0,2879,2880,5,45,0,0, + 2880,2881,5,125,0,0,2881,640,1,0,0,0,2882,2883,5,60,0,0,2883,2884, + 5,45,0,0,2884,642,1,0,0,0,2885,2886,5,45,0,0,2886,2887,5,62,0,0, + 2887,644,1,0,0,0,2888,2889,5,61,0,0,2889,2890,5,62,0,0,2890,646, + 1,0,0,0,2891,2892,5,124,0,0,2892,648,1,0,0,0,2893,2894,5,36,0,0, + 2894,650,1,0,0,0,2895,2896,5,94,0,0,2896,652,1,0,0,0,2897,2903,5, + 39,0,0,2898,2902,8,26,0,0,2899,2900,5,39,0,0,2900,2902,5,39,0,0, + 2901,2898,1,0,0,0,2901,2899,1,0,0,0,2902,2905,1,0,0,0,2903,2901, + 1,0,0,0,2903,2904,1,0,0,0,2904,2906,1,0,0,0,2905,2903,1,0,0,0,2906, + 2907,5,39,0,0,2907,654,1,0,0,0,2908,2909,7,15,0,0,2909,2910,5,38, + 0,0,2910,2911,5,39,0,0,2911,2917,1,0,0,0,2912,2916,8,26,0,0,2913, + 2914,5,39,0,0,2914,2916,5,39,0,0,2915,2912,1,0,0,0,2915,2913,1,0, + 0,0,2916,2919,1,0,0,0,2917,2915,1,0,0,0,2917,2918,1,0,0,0,2918,2920, + 1,0,0,0,2919,2917,1,0,0,0,2920,2921,5,39,0,0,2921,656,1,0,0,0,2922, + 2923,7,21,0,0,2923,2924,5,39,0,0,2924,2928,1,0,0,0,2925,2927,8,26, + 0,0,2926,2925,1,0,0,0,2927,2930,1,0,0,0,2928,2926,1,0,0,0,2928,2929, + 1,0,0,0,2929,2931,1,0,0,0,2930,2928,1,0,0,0,2931,2932,5,39,0,0,2932, + 658,1,0,0,0,2933,2935,3,675,337,0,2934,2933,1,0,0,0,2935,2936,1, + 0,0,0,2936,2934,1,0,0,0,2936,2937,1,0,0,0,2937,660,1,0,0,0,2938, + 2940,3,675,337,0,2939,2938,1,0,0,0,2940,2941,1,0,0,0,2941,2939,1, + 0,0,0,2941,2942,1,0,0,0,2942,2943,1,0,0,0,2943,2947,5,46,0,0,2944, + 2946,3,675,337,0,2945,2944,1,0,0,0,2946,2949,1,0,0,0,2947,2945,1, + 0,0,0,2947,2948,1,0,0,0,2948,2957,1,0,0,0,2949,2947,1,0,0,0,2950, + 2952,5,46,0,0,2951,2953,3,675,337,0,2952,2951,1,0,0,0,2953,2954, + 1,0,0,0,2954,2952,1,0,0,0,2954,2955,1,0,0,0,2955,2957,1,0,0,0,2956, + 2939,1,0,0,0,2956,2950,1,0,0,0,2957,662,1,0,0,0,2958,2960,3,675, + 337,0,2959,2958,1,0,0,0,2960,2961,1,0,0,0,2961,2959,1,0,0,0,2961, + 2962,1,0,0,0,2962,2970,1,0,0,0,2963,2967,5,46,0,0,2964,2966,3,675, + 337,0,2965,2964,1,0,0,0,2966,2969,1,0,0,0,2967,2965,1,0,0,0,2967, + 2968,1,0,0,0,2968,2971,1,0,0,0,2969,2967,1,0,0,0,2970,2963,1,0,0, + 0,2970,2971,1,0,0,0,2971,2972,1,0,0,0,2972,2973,3,673,336,0,2973, + 2983,1,0,0,0,2974,2976,5,46,0,0,2975,2977,3,675,337,0,2976,2975, + 1,0,0,0,2977,2978,1,0,0,0,2978,2976,1,0,0,0,2978,2979,1,0,0,0,2979, + 2980,1,0,0,0,2980,2981,3,673,336,0,2981,2983,1,0,0,0,2982,2959,1, + 0,0,0,2982,2974,1,0,0,0,2983,664,1,0,0,0,2984,2987,3,677,338,0,2985, + 2987,5,95,0,0,2986,2984,1,0,0,0,2986,2985,1,0,0,0,2987,2993,1,0, + 0,0,2988,2992,3,677,338,0,2989,2992,3,675,337,0,2990,2992,5,95,0, + 0,2991,2988,1,0,0,0,2991,2989,1,0,0,0,2991,2990,1,0,0,0,2992,2995, + 1,0,0,0,2993,2991,1,0,0,0,2993,2994,1,0,0,0,2994,666,1,0,0,0,2995, + 2993,1,0,0,0,2996,3000,3,675,337,0,2997,3001,3,677,338,0,2998,3001, + 3,675,337,0,2999,3001,5,95,0,0,3000,2997,1,0,0,0,3000,2998,1,0,0, + 0,3000,2999,1,0,0,0,3001,3002,1,0,0,0,3002,3000,1,0,0,0,3002,3003, + 1,0,0,0,3003,668,1,0,0,0,3004,3010,5,34,0,0,3005,3009,8,27,0,0,3006, + 3007,5,34,0,0,3007,3009,5,34,0,0,3008,3005,1,0,0,0,3008,3006,1,0, + 0,0,3009,3012,1,0,0,0,3010,3008,1,0,0,0,3010,3011,1,0,0,0,3011,3013, + 1,0,0,0,3012,3010,1,0,0,0,3013,3014,5,34,0,0,3014,670,1,0,0,0,3015, + 3021,5,96,0,0,3016,3020,8,28,0,0,3017,3018,5,96,0,0,3018,3020,5, + 96,0,0,3019,3016,1,0,0,0,3019,3017,1,0,0,0,3020,3023,1,0,0,0,3021, + 3019,1,0,0,0,3021,3022,1,0,0,0,3022,3024,1,0,0,0,3023,3021,1,0,0, + 0,3024,3025,5,96,0,0,3025,672,1,0,0,0,3026,3028,7,3,0,0,3027,3029, + 7,29,0,0,3028,3027,1,0,0,0,3028,3029,1,0,0,0,3029,3031,1,0,0,0,3030, + 3032,3,675,337,0,3031,3030,1,0,0,0,3032,3033,1,0,0,0,3033,3031,1, + 0,0,0,3033,3034,1,0,0,0,3034,674,1,0,0,0,3035,3036,7,30,0,0,3036, + 676,1,0,0,0,3037,3038,7,31,0,0,3038,678,1,0,0,0,3039,3040,5,45,0, + 0,3040,3041,5,45,0,0,3041,3045,1,0,0,0,3042,3044,8,32,0,0,3043,3042, + 1,0,0,0,3044,3047,1,0,0,0,3045,3043,1,0,0,0,3045,3046,1,0,0,0,3046, + 3049,1,0,0,0,3047,3045,1,0,0,0,3048,3050,5,13,0,0,3049,3048,1,0, + 0,0,3049,3050,1,0,0,0,3050,3052,1,0,0,0,3051,3053,5,10,0,0,3052, + 3051,1,0,0,0,3052,3053,1,0,0,0,3053,3054,1,0,0,0,3054,3055,6,339, + 0,0,3055,680,1,0,0,0,3056,3057,5,47,0,0,3057,3058,5,42,0,0,3058, + 3062,1,0,0,0,3059,3061,9,0,0,0,3060,3059,1,0,0,0,3061,3064,1,0,0, + 0,3062,3063,1,0,0,0,3062,3060,1,0,0,0,3063,3065,1,0,0,0,3064,3062, + 1,0,0,0,3065,3066,5,42,0,0,3066,3067,5,47,0,0,3067,3068,1,0,0,0, + 3068,3069,6,340,0,0,3069,682,1,0,0,0,3070,3072,7,33,0,0,3071,3070, + 1,0,0,0,3072,3073,1,0,0,0,3073,3071,1,0,0,0,3073,3074,1,0,0,0,3074, + 3075,1,0,0,0,3075,3076,6,341,1,0,3076,684,1,0,0,0,3077,3078,9,0, + 0,0,3078,686,1,0,0,0,33,0,2828,2901,2903,2915,2917,2928,2936,2941, + 2947,2954,2956,2961,2967,2970,2978,2982,2986,2991,2993,3000,3002, + 3008,3010,3019,3021,3028,3033,3045,3049,3052,3062,3073,2,6,0,0,0, + 1,0 + ]; + + private static __ATN: antlr.ATN; + public static get _ATN(): antlr.ATN { + if (!TrinoLexer.__ATN) { + TrinoLexer.__ATN = new antlr.ATNDeserializer().deserialize(TrinoLexer._serializedATN); + } + + return TrinoLexer.__ATN; + } + + + private static readonly vocabulary = new antlr.Vocabulary(TrinoLexer.literalNames, TrinoLexer.symbolicNames, []); + + public override get vocabulary(): antlr.Vocabulary { + return TrinoLexer.vocabulary; + } + + private static readonly decisionsToDFA = TrinoLexer._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) ); +} diff --git a/src/autocomplete/databases/trino/generated/TrinoParser.interp b/src/autocomplete/databases/trino/generated/TrinoParser.interp new file mode 100644 index 000000000..150e8539a --- /dev/null +++ b/src/autocomplete/databases/trino/generated/TrinoParser.interp @@ -0,0 +1,811 @@ +token literal names: +null +'ABSENT' +'ADD' +'ADMIN' +'AFTER' +'ALL' +'ALTER' +'ANALYZE' +'AND' +'ANY' +'ARRAY' +'AS' +'ASC' +'AT' +'AUTHORIZATION' +'BEGIN' +'BERNOULLI' +'BETWEEN' +'BOTH' +'BY' +'CALL' +'CALLED' +'CASCADE' +'CASE' +'CAST' +'CATALOG' +'CATALOGS' +'COLUMN' +'COLUMNS' +'COMMENT' +'COMMIT' +'COMMITTED' +'CONDITIONAL' +'CONSTRAINT' +'COUNT' +'COPARTITION' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURRENT_CATALOG' +'CURRENT_DATE' +'CURRENT_PATH' +'CURRENT_ROLE' +'CURRENT_SCHEMA' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURRENT_USER' +'DATA' +'DATE' +'DAY' +'DEALLOCATE' +'DECLARE' +'DEFAULT' +'DEFINE' +'DEFINER' +'DELETE' +'DENY' +'DESC' +'DESCRIBE' +'DESCRIPTOR' +'DETERMINISTIC' +'DISTINCT' +'DISTRIBUTED' +'DO' +'DOUBLE' +'DROP' +'ELSE' +'EMPTY' +'ELSEIF' +'ENCODING' +'END' +'ERROR' +'ESCAPE' +'EXCEPT' +'EXCLUDING' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTRACT' +'FALSE' +'FETCH' +'FILTER' +'FINAL' +'FIRST' +'FOLLOWING' +'FOR' +'FORMAT' +'FROM' +'FULL' +'FUNCTION' +'FUNCTIONS' +'GRACE' +'GRANT' +'GRANTED' +'GRANTS' +'GRAPHVIZ' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IF' +'IGNORE' +'IMMEDIATE' +'IN' +'INCLUDING' +'INITIAL' +'INNER' +'INPUT' +'INSERT' +'INTERSECT' +'INTERVAL' +'INTO' +'INVOKER' +'IO' +'IS' +'ISOLATION' +'ITERATE' +'JOIN' +'JSON' +'JSON_ARRAY' +'JSON_EXISTS' +'JSON_OBJECT' +'JSON_QUERY' +'JSON_TABLE' +'JSON_VALUE' +'KEEP' +'KEY' +'KEYS' +'LANGUAGE' +'LAST' +'LATERAL' +'LEADING' +'LEAVE' +'LEFT' +'LEVEL' +'LIKE' +'LIMIT' +'LISTAGG' +'LOCAL' +'LOCALTIME' +'LOCALTIMESTAMP' +'LOGICAL' +'LOOP' +'MAP' +'MATCH' +'MATCHED' +'MATCHES' +'MATCH_RECOGNIZE' +'MATERIALIZED' +'MEASURES' +'MERGE' +'MINUTE' +'MONTH' +'NATURAL' +'NESTED' +'NEXT' +'NFC' +'NFD' +'NFKC' +'NFKD' +'NO' +'NONE' +'NORMALIZE' +'NOT' +'NULL' +'NULLIF' +'NULLS' +'OBJECT' +'OF' +'OFFSET' +'OMIT' +'ON' +'ONE' +'ONLY' +'OPTION' +'OR' +'ORDER' +'ORDINALITY' +'OUTER' +'OUTPUT' +'OVER' +'OVERFLOW' +'PARTITION' +'PARTITIONS' +'PASSING' +'PAST' +'PATH' +'PATTERN' +'PER' +'PERIOD' +'PERMUTE' +'PLAN' +'POSITION' +'PRECEDING' +'PRECISION' +'PREPARE' +'PRIVILEGES' +'PROPERTIES' +'PRUNE' +'QUOTES' +'RANGE' +'READ' +'RECURSIVE' +'REFRESH' +'RENAME' +'REPEAT' +'REPEATABLE' +'REPLACE' +'RESET' +'RESPECT' +'RESTRICT' +'RETURN' +'RETURNING' +'RETURNS' +'REVOKE' +'RIGHT' +'ROLE' +'ROLES' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'RUNNING' +'SCALAR' +'SCHEMA' +'SCHEMAS' +'SECOND' +'SECURITY' +'SEEK' +'SELECT' +'SERIALIZABLE' +'SESSION' +'SET' +'SETS' +'SHOW' +'SKIP' +'SOME' +'START' +'STATS' +'SUBSET' +'SUBSTRING' +'SYSTEM' +'TABLE' +'TABLES' +'TABLESAMPLE' +'TEXT' +'STRING' +'THEN' +'TIES' +'TIME' +'TIMESTAMP' +'TO' +'TRAILING' +'TRANSACTION' +'TRIM' +'TRUE' +'TRUNCATE' +'TRY_CAST' +'TYPE' +'UESCAPE' +'UNBOUNDED' +'UNCOMMITTED' +'UNCONDITIONAL' +'UNION' +'UNIQUE' +'UNKNOWN' +'UNMATCHED' +'UNNEST' +'UNTIL' +'UPDATE' +'USE' +'USER' +'USING' +'UTF16' +'UTF32' +'UTF8' +'VALIDATE' +'VALUE' +'VALUES' +'VERBOSE' +'VERSION' +'VIEW' +'WHEN' +'WHERE' +'WHILE' +'WINDOW' +'WITH' +'WITHIN' +'WITHOUT' +'WORK' +'WRAPPER' +'WRITE' +'YEAR' +'ZONE' +'=' +null +'<' +'<=' +'>' +'>=' +'+' +'-' +'*' +'/' +'%' +'||' +'?' +';' +'.' +'_:' +',' +'(' +')' +'[' +']' +'{' +'}' +'{-' +'-}' +'<-' +'->' +'=>' +'|' +'$' +'^' +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +ABSENT_ +ADD_ +ADMIN_ +AFTER_ +ALL_ +ALTER_ +ANALYZE_ +AND_ +ANY_ +ARRAY_ +AS_ +ASC_ +AT_ +AUTHORIZATION_ +BEGIN_ +BERNOULLI_ +BETWEEN_ +BOTH_ +BY_ +CALL_ +CALLED_ +CASCADE_ +CASE_ +CAST_ +CATALOG_ +CATALOGS_ +COLUMN_ +COLUMNS_ +COMMENT_ +COMMIT_ +COMMITTED_ +CONDITIONAL_ +CONSTRAINT_ +COUNT_ +COPARTITION_ +CREATE_ +CROSS_ +CUBE_ +CURRENT_ +CURRENT_CATALOG_ +CURRENT_DATE_ +CURRENT_PATH_ +CURRENT_ROLE_ +CURRENT_SCHEMA_ +CURRENT_TIME_ +CURRENT_TIMESTAMP_ +CURRENT_USER_ +DATA_ +DATE_ +DAY_ +DEALLOCATE_ +DECLARE_ +DEFAULT_ +DEFINE_ +DEFINER_ +DELETE_ +DENY_ +DESC_ +DESCRIBE_ +DESCRIPTOR_ +DETERMINISTIC_ +DISTINCT_ +DISTRIBUTED_ +DO_ +DOUBLE_ +DROP_ +ELSE_ +EMPTY_ +ELSEIF_ +ENCODING_ +END_ +ERROR_ +ESCAPE_ +EXCEPT_ +EXCLUDING_ +EXECUTE_ +EXISTS_ +EXPLAIN_ +EXTRACT_ +FALSE_ +FETCH_ +FILTER_ +FINAL_ +FIRST_ +FOLLOWING_ +FOR_ +FORMAT_ +FROM_ +FULL_ +FUNCTION_ +FUNCTIONS_ +GRACE_ +GRANT_ +GRANTED_ +GRANTS_ +GRAPHVIZ_ +GROUP_ +GROUPING_ +GROUPS_ +HAVING_ +HOUR_ +IF_ +IGNORE_ +IMMEDIATE_ +IN_ +INCLUDING_ +INITIAL_ +INNER_ +INPUT_ +INSERT_ +INTERSECT_ +INTERVAL_ +INTO_ +INVOKER_ +IO_ +IS_ +ISOLATION_ +ITERATE_ +JOIN_ +JSON_ +JSON_ARRAY_ +JSON_EXISTS_ +JSON_OBJECT_ +JSON_QUERY_ +JSON_TABLE_ +JSON_VALUE_ +KEEP_ +KEY_ +KEYS_ +LANGUAGE_ +LAST_ +LATERAL_ +LEADING_ +LEAVE_ +LEFT_ +LEVEL_ +LIKE_ +LIMIT_ +LISTAGG_ +LOCAL_ +LOCALTIME_ +LOCALTIMESTAMP_ +LOGICAL_ +LOOP_ +MAP_ +MATCH_ +MATCHED_ +MATCHES_ +MATCH_RECOGNIZE_ +MATERIALIZED_ +MEASURES_ +MERGE_ +MINUTE_ +MONTH_ +NATURAL_ +NESTED_ +NEXT_ +NFC_ +NFD_ +NFKC_ +NFKD_ +NO_ +NONE_ +NORMALIZE_ +NOT_ +NULL_ +NULLIF_ +NULLS_ +OBJECT_ +OF_ +OFFSET_ +OMIT_ +ON_ +ONE_ +ONLY_ +OPTION_ +OR_ +ORDER_ +ORDINALITY_ +OUTER_ +OUTPUT_ +OVER_ +OVERFLOW_ +PARTITION_ +PARTITIONS_ +PASSING_ +PAST_ +PATH_ +PATTERN_ +PER_ +PERIOD_ +PERMUTE_ +PLAN_ +POSITION_ +PRECEDING_ +PRECISION_ +PREPARE_ +PRIVILEGES_ +PROPERTIES_ +PRUNE_ +QUOTES_ +RANGE_ +READ_ +RECURSIVE_ +REFRESH_ +RENAME_ +REPEAT_ +REPEATABLE_ +REPLACE_ +RESET_ +RESPECT_ +RESTRICT_ +RETURN_ +RETURNING_ +RETURNS_ +REVOKE_ +RIGHT_ +ROLE_ +ROLES_ +ROLLBACK_ +ROLLUP_ +ROW_ +ROWS_ +RUNNING_ +SCALAR_ +SCHEMA_ +SCHEMAS_ +SECOND_ +SECURITY_ +SEEK_ +SELECT_ +SERIALIZABLE_ +SESSION_ +SET_ +SETS_ +SHOW_ +SKIP_ +SOME_ +START_ +STATS_ +SUBSET_ +SUBSTRING_ +SYSTEM_ +TABLE_ +TABLES_ +TABLESAMPLE_ +TEXT_ +TEXT_STRING_ +THEN_ +TIES_ +TIME_ +TIMESTAMP_ +TO_ +TRAILING_ +TRANSACTION_ +TRIM_ +TRUE_ +TRUNCATE_ +TRY_CAST_ +TYPE_ +UESCAPE_ +UNBOUNDED_ +UNCOMMITTED_ +UNCONDITIONAL_ +UNION_ +UNIQUE_ +UNKNOWN_ +UNMATCHED_ +UNNEST_ +UNTIL_ +UPDATE_ +USE_ +USER_ +USING_ +UTF16_ +UTF32_ +UTF8_ +VALIDATE_ +VALUE_ +VALUES_ +VERBOSE_ +VERSION_ +VIEW_ +WHEN_ +WHERE_ +WHILE_ +WINDOW_ +WITH_ +WITHIN_ +WITHOUT_ +WORK_ +WRAPPER_ +WRITE_ +YEAR_ +ZONE_ +EQ_ +NEQ_ +LT_ +LTE_ +GT_ +GTE_ +PLUS_ +MINUS_ +ASTERISK_ +SLASH_ +PERCENT_ +CONCAT_ +QUESTION_MARK_ +SEMICOLON_ +DOT_ +COLON_ +COMMA_ +LPAREN_ +RPAREN_ +LSQUARE_ +RSQUARE_ +LCURLY_ +RCURLY_ +LCURLYHYPHEN_ +RCURLYHYPHEN_ +LARROW_ +RARROW_ +RDOUBLEARROW_ +VBAR_ +DOLLAR_ +CARET_ +STRING_ +UNICODE_STRING_ +BINARY_LITERAL_ +INTEGER_VALUE_ +DECIMAL_VALUE_ +DOUBLE_VALUE_ +IDENTIFIER_ +DIGIT_IDENTIFIER_ +QUOTED_IDENTIFIER_ +BACKQUOTED_IDENTIFIER_ +SIMPLE_COMMENT_ +BRACKETED_COMMENT_ +WS_ +UNRECOGNIZED_ + +rule names: +parse +statements +statement +rootQuery +withFunction +query +with +tableElement +columnDefinition +likeClause +properties +propertyAssignments +property +propertyValue +queryNoWith +limitRowCount +rowCount +queryTerm +queryPrimary +sortItem +querySpecification +groupBy +groupingElement +groupingSet +windowDefinition +windowSpecification +namedQuery +setQuantifier +selectItem +relation +joinType +joinCriteria +sampledRelation +sampleType +trimsSpecification +listAggOverflowBehavior +listaggCountIndication +patternRecognition +measureDefinition +rowsPerMatch +emptyMatchHandling +skipTo +subsetDefinition +variableDefinition +aliasedRelation +columnAliases +relationPrimary +tableFunctionCall +tableFunctionArgument +tableArgument +tableArgumentRelation +descriptorArgument +descriptorField +copartitionTables +expression +booleanExpression +predicate_ +valueExpression +primaryExpression +jsonPathInvocation +jsonValueExpression +jsonRepresentation +jsonArgument +jsonExistsErrorBehavior +jsonValueBehavior +jsonQueryWrapperBehavior +jsonQueryBehavior +jsonObjectMember +processingMode +nullTreatment +string_ +timeZoneSpecifier +comparisonOperator +comparisonQuantifier +booleanValue +interval +intervalField +normalForm +type +rowField +typeParameter +whenClause +filter +mergeCase +over +windowFrame +frameExtent +frameBound +rowPattern +patternPrimary +patternQuantifier +updateAssignment +explainOption +transactionMode +levelOfIsolation +callArgument +pathElement +pathSpecification +functionSpecification +functionDeclaration +parameterDeclaration +returnsClause +routineCharacteristic +controlStatement +caseStatementWhenClause +elseIfClause +elseClause +variableDeclaration +sqlStatementList +privilege +qualifiedName +queryPeriod +rangeType +grantor +principal +roles +identifier +number +authorizationUser +nonReserved + + +atn: +[4, 1, 340, 3244, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 1, 0, 3, 0, 242, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 248, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 254, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 269, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 276, 8, 2, 1, 2, 1, 2, 3, 2, 280, 8, 2, 1, 2, 1, 2, 3, 2, 284, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 290, 8, 2, 1, 2, 1, 2, 3, 2, 294, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 301, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 306, 8, 2, 1, 2, 1, 2, 3, 2, 310, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 316, 8, 2, 1, 2, 1, 2, 3, 2, 320, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 339, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 345, 8, 2, 1, 2, 1, 2, 3, 2, 349, 8, 2, 1, 2, 1, 2, 3, 2, 353, 8, 2, 1, 2, 1, 2, 3, 2, 357, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 365, 8, 2, 1, 2, 1, 2, 3, 2, 369, 8, 2, 1, 2, 3, 2, 372, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 377, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 383, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 390, 8, 2, 10, 2, 12, 2, 393, 9, 2, 1, 2, 1, 2, 1, 2, 3, 2, 398, 8, 2, 1, 2, 1, 2, 3, 2, 402, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 408, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 415, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 424, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 436, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 445, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 454, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 460, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 471, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 479, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 487, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 494, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 504, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 511, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 519, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 553, 8, 2, 10, 2, 12, 2, 556, 9, 2, 3, 2, 558, 8, 2, 1, 2, 3, 2, 561, 8, 2, 1, 2, 1, 2, 3, 2, 565, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 571, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 576, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 583, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 589, 8, 2, 1, 2, 1, 2, 3, 2, 593, 8, 2, 1, 2, 1, 2, 3, 2, 597, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 605, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 611, 8, 2, 1, 2, 1, 2, 3, 2, 615, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 629, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 637, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 656, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 679, 8, 2, 10, 2, 12, 2, 682, 9, 2, 3, 2, 684, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 691, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 698, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 707, 8, 2, 1, 2, 1, 2, 3, 2, 711, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 718, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 726, 8, 2, 10, 2, 12, 2, 729, 9, 2, 1, 2, 1, 2, 1, 2, 3, 2, 734, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 739, 8, 2, 1, 2, 1, 2, 3, 2, 743, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 749, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 756, 8, 2, 10, 2, 12, 2, 759, 9, 2, 1, 2, 1, 2, 1, 2, 3, 2, 764, 8, 2, 1, 2, 1, 2, 3, 2, 768, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 775, 8, 2, 1, 2, 1, 2, 3, 2, 779, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 785, 8, 2, 10, 2, 12, 2, 788, 9, 2, 1, 2, 1, 2, 3, 2, 792, 8, 2, 1, 2, 1, 2, 3, 2, 796, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 804, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 810, 8, 2, 10, 2, 12, 2, 813, 9, 2, 1, 2, 1, 2, 3, 2, 817, 8, 2, 1, 2, 1, 2, 3, 2, 821, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 831, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 836, 8, 2, 10, 2, 12, 2, 839, 9, 2, 1, 2, 1, 2, 3, 2, 843, 8, 2, 1, 2, 1, 2, 3, 2, 847, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 857, 8, 2, 1, 2, 3, 2, 860, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 867, 8, 2, 10, 2, 12, 2, 870, 9, 2, 1, 2, 1, 2, 3, 2, 874, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 880, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 904, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 910, 8, 2, 3, 2, 912, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 918, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 924, 8, 2, 3, 2, 926, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 934, 8, 2, 3, 2, 936, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 942, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 948, 8, 2, 3, 2, 950, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 965, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 970, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 977, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 987, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 993, 8, 2, 3, 2, 995, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1003, 8, 2, 3, 2, 1005, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1028, 8, 2, 10, 2, 12, 2, 1031, 9, 2, 3, 2, 1033, 8, 2, 1, 2, 1, 2, 3, 2, 1037, 8, 2, 1, 2, 1, 2, 3, 2, 1041, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1057, 8, 2, 10, 2, 12, 2, 1060, 9, 2, 3, 2, 1062, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1071, 8, 2, 10, 2, 12, 2, 1074, 9, 2, 3, 2, 1076, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1092, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1100, 8, 2, 10, 2, 12, 2, 1103, 9, 2, 1, 2, 1, 2, 3, 2, 1107, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1113, 8, 2, 1, 2, 3, 2, 1116, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 4, 2, 1123, 8, 2, 11, 2, 12, 2, 1124, 3, 2, 1127, 8, 2, 1, 3, 3, 3, 1130, 8, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 1138, 8, 4, 10, 4, 12, 4, 1141, 9, 4, 1, 5, 3, 5, 1144, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 3, 6, 1150, 8, 6, 1, 6, 1, 6, 1, 6, 5, 6, 1155, 8, 6, 10, 6, 12, 6, 1158, 9, 6, 1, 7, 1, 7, 3, 7, 1162, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 1168, 8, 8, 1, 8, 1, 8, 3, 8, 1172, 8, 8, 1, 8, 1, 8, 3, 8, 1176, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 1182, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 5, 11, 1191, 8, 11, 10, 11, 12, 11, 1194, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 1202, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 1210, 8, 14, 10, 14, 12, 14, 1213, 9, 14, 3, 14, 1215, 8, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1220, 8, 14, 3, 14, 1222, 8, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1229, 8, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1235, 8, 14, 3, 14, 1237, 8, 14, 1, 15, 1, 15, 3, 15, 1241, 8, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1251, 8, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1257, 8, 17, 1, 17, 5, 17, 1260, 8, 17, 10, 17, 12, 17, 1263, 9, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 1272, 8, 18, 10, 18, 12, 18, 1275, 9, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 1281, 8, 18, 1, 19, 1, 19, 3, 19, 1285, 8, 19, 1, 19, 1, 19, 3, 19, 1289, 8, 19, 1, 20, 1, 20, 3, 20, 1293, 8, 20, 1, 20, 1, 20, 1, 20, 5, 20, 1298, 8, 20, 10, 20, 12, 20, 1301, 9, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 1307, 8, 20, 10, 20, 12, 20, 1310, 9, 20, 3, 20, 1312, 8, 20, 1, 20, 1, 20, 3, 20, 1316, 8, 20, 1, 20, 1, 20, 1, 20, 3, 20, 1321, 8, 20, 1, 20, 1, 20, 3, 20, 1325, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 1331, 8, 20, 10, 20, 12, 20, 1334, 9, 20, 3, 20, 1336, 8, 20, 1, 21, 3, 21, 1339, 8, 21, 1, 21, 1, 21, 1, 21, 5, 21, 1344, 8, 21, 10, 21, 12, 21, 1347, 9, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 1355, 8, 22, 10, 22, 12, 22, 1358, 9, 22, 3, 22, 1360, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 1368, 8, 22, 10, 22, 12, 22, 1371, 9, 22, 3, 22, 1373, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 1382, 8, 22, 10, 22, 12, 22, 1385, 9, 22, 1, 22, 1, 22, 3, 22, 1389, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 1395, 8, 23, 10, 23, 12, 23, 1398, 9, 23, 3, 23, 1400, 8, 23, 1, 23, 1, 23, 3, 23, 1404, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 3, 25, 1413, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 1420, 8, 25, 10, 25, 12, 25, 1423, 9, 25, 3, 25, 1425, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 1432, 8, 25, 10, 25, 12, 25, 1435, 9, 25, 3, 25, 1437, 8, 25, 1, 25, 3, 25, 1440, 8, 25, 1, 26, 1, 26, 3, 26, 1444, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 3, 28, 1455, 8, 28, 1, 28, 3, 28, 1458, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 1465, 8, 28, 1, 28, 3, 28, 1468, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1487, 8, 29, 5, 29, 1489, 8, 29, 10, 29, 12, 29, 1492, 9, 29, 1, 30, 3, 30, 1495, 8, 30, 1, 30, 1, 30, 3, 30, 1499, 8, 30, 3, 30, 1501, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 1510, 8, 31, 10, 31, 12, 31, 1513, 9, 31, 1, 31, 1, 31, 3, 31, 1517, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1526, 8, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 3, 35, 1535, 8, 35, 1, 35, 3, 35, 1538, 8, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1551, 8, 37, 10, 37, 12, 37, 1554, 9, 37, 3, 37, 1556, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1563, 8, 37, 10, 37, 12, 37, 1566, 9, 37, 3, 37, 1568, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1574, 8, 37, 10, 37, 12, 37, 1577, 9, 37, 3, 37, 1579, 8, 37, 1, 37, 3, 37, 1582, 8, 37, 1, 37, 1, 37, 1, 37, 3, 37, 1587, 8, 37, 1, 37, 3, 37, 1590, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1600, 8, 37, 10, 37, 12, 37, 1603, 9, 37, 3, 37, 1605, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 1611, 8, 37, 10, 37, 12, 37, 1614, 9, 37, 1, 37, 1, 37, 3, 37, 1618, 8, 37, 1, 37, 1, 37, 3, 37, 1622, 8, 37, 3, 37, 1624, 8, 37, 3, 37, 1626, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 1641, 8, 39, 3, 39, 1643, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 1654, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1661, 8, 41, 1, 41, 3, 41, 1664, 8, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1669, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 1677, 8, 42, 10, 42, 12, 42, 1680, 9, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 1690, 8, 44, 1, 44, 1, 44, 3, 44, 1694, 8, 44, 3, 44, 1696, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 1702, 8, 45, 10, 45, 12, 45, 1705, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 3, 46, 1711, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1722, 8, 46, 10, 46, 12, 46, 1725, 9, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1730, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1746, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1753, 8, 47, 10, 47, 12, 47, 1756, 9, 47, 3, 47, 1758, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1764, 8, 47, 10, 47, 12, 47, 1767, 9, 47, 3, 47, 1769, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 3, 48, 1776, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 1781, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 1790, 8, 49, 10, 49, 12, 49, 1793, 9, 49, 3, 49, 1795, 8, 49, 1, 49, 1, 49, 3, 49, 1799, 8, 49, 3, 49, 1801, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1809, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 1817, 8, 49, 10, 49, 12, 49, 1820, 9, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1825, 8, 49, 3, 49, 1827, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1834, 8, 50, 1, 50, 1, 50, 3, 50, 1838, 8, 50, 3, 50, 1840, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1847, 8, 50, 1, 50, 1, 50, 3, 50, 1851, 8, 50, 3, 50, 1853, 8, 50, 3, 50, 1855, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 5, 51, 1862, 8, 51, 10, 51, 12, 51, 1865, 9, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 1875, 8, 51, 1, 52, 1, 52, 3, 52, 1879, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 1887, 8, 53, 10, 53, 12, 53, 1890, 9, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 3, 55, 1899, 8, 55, 1, 55, 1, 55, 3, 55, 1903, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 1911, 8, 55, 10, 55, 12, 55, 1914, 9, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1926, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1934, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 1941, 8, 56, 10, 56, 12, 56, 1944, 9, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1949, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1957, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1963, 8, 56, 1, 56, 1, 56, 3, 56, 1967, 8, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1972, 8, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1977, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1983, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1997, 8, 57, 10, 57, 12, 57, 2000, 9, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 2027, 8, 58, 11, 58, 12, 58, 2028, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2038, 8, 58, 10, 58, 12, 58, 2041, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2048, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2053, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2058, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2069, 8, 58, 10, 58, 12, 58, 2072, 9, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2077, 8, 58, 1, 58, 3, 58, 2080, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2087, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2092, 8, 58, 1, 58, 3, 58, 2095, 8, 58, 1, 58, 3, 58, 2098, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2103, 8, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2108, 8, 58, 10, 58, 12, 58, 2111, 9, 58, 3, 58, 2113, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2120, 8, 58, 10, 58, 12, 58, 2123, 9, 58, 3, 58, 2125, 8, 58, 1, 58, 1, 58, 3, 58, 2129, 8, 58, 1, 58, 3, 58, 2132, 8, 58, 1, 58, 3, 58, 2135, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2148, 8, 58, 10, 58, 12, 58, 2151, 9, 58, 3, 58, 2153, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 2170, 8, 58, 11, 58, 12, 58, 2171, 1, 58, 1, 58, 3, 58, 2176, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 2182, 8, 58, 11, 58, 12, 58, 2183, 1, 58, 1, 58, 3, 58, 2188, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2211, 8, 58, 10, 58, 12, 58, 2214, 9, 58, 3, 58, 2216, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2225, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2231, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2237, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2243, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2252, 8, 58, 1, 58, 3, 58, 2255, 8, 58, 1, 58, 3, 58, 2258, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2277, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2286, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2306, 8, 58, 10, 58, 12, 58, 2309, 9, 58, 3, 58, 2311, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2321, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2330, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2336, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2342, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2353, 8, 58, 3, 58, 2355, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2360, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2367, 8, 58, 3, 58, 2369, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2375, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2381, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2390, 8, 58, 10, 58, 12, 58, 2393, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2401, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2406, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2411, 8, 58, 3, 58, 2413, 8, 58, 3, 58, 2415, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2421, 8, 58, 3, 58, 2423, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2431, 8, 58, 10, 58, 12, 58, 2434, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2442, 8, 58, 3, 58, 2444, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2450, 8, 58, 3, 58, 2452, 8, 58, 1, 58, 3, 58, 2455, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2465, 8, 58, 10, 58, 12, 58, 2468, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 2477, 8, 59, 10, 59, 12, 59, 2480, 9, 59, 3, 59, 2482, 8, 59, 1, 60, 1, 60, 1, 60, 3, 60, 2487, 8, 60, 1, 61, 1, 61, 1, 61, 3, 61, 2492, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 2504, 8, 64, 1, 65, 1, 65, 3, 65, 2508, 8, 65, 1, 65, 1, 65, 3, 65, 2512, 8, 65, 1, 65, 3, 65, 2515, 8, 65, 3, 65, 2517, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 2523, 8, 66, 1, 67, 3, 67, 2526, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 2536, 8, 67, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 2544, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 2550, 8, 70, 3, 70, 2552, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2560, 8, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 75, 1, 75, 3, 75, 2570, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 2576, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 2588, 8, 78, 10, 78, 12, 78, 2591, 9, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2599, 8, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2606, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2611, 8, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2618, 8, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2628, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2633, 8, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2640, 8, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 2664, 8, 78, 10, 78, 12, 78, 2667, 9, 78, 1, 78, 1, 78, 3, 78, 2671, 8, 78, 3, 78, 2673, 8, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 2680, 8, 78, 5, 78, 2682, 8, 78, 10, 78, 12, 78, 2685, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 2691, 8, 79, 1, 80, 1, 80, 3, 80, 2695, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 2712, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 2725, 8, 83, 10, 83, 12, 83, 2728, 9, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 2734, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 2743, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 2751, 8, 83, 10, 83, 12, 83, 2754, 9, 83, 1, 83, 1, 83, 3, 83, 2758, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 2765, 8, 83, 10, 83, 12, 83, 2768, 9, 83, 1, 83, 1, 83, 3, 83, 2772, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 2780, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 2786, 8, 85, 10, 85, 12, 85, 2789, 9, 85, 3, 85, 2791, 8, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 2797, 8, 85, 1, 85, 3, 85, 2800, 8, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 2807, 8, 85, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 2813, 8, 85, 10, 85, 12, 85, 2816, 9, 85, 3, 85, 2818, 8, 85, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 2824, 8, 85, 10, 85, 12, 85, 2827, 9, 85, 3, 85, 2829, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 2855, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 2866, 8, 87, 1, 88, 1, 88, 1, 88, 3, 88, 2871, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 2878, 8, 88, 10, 88, 12, 88, 2881, 9, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 5, 89, 2891, 8, 89, 10, 89, 12, 89, 2894, 9, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 2908, 8, 89, 1, 90, 1, 90, 3, 90, 2912, 8, 90, 1, 90, 1, 90, 3, 90, 2916, 8, 90, 1, 90, 1, 90, 3, 90, 2920, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 2926, 8, 90, 1, 90, 1, 90, 3, 90, 2930, 8, 90, 1, 90, 1, 90, 3, 90, 2934, 8, 90, 1, 90, 1, 90, 3, 90, 2938, 8, 90, 3, 90, 2940, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 3, 92, 2950, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 2957, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 2966, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 2973, 8, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 3, 96, 2980, 8, 96, 1, 97, 1, 97, 1, 97, 5, 97, 2985, 8, 97, 10, 97, 12, 97, 2988, 9, 97, 1, 98, 1, 98, 1, 98, 1, 98, 5, 98, 2994, 8, 98, 10, 98, 12, 98, 2997, 9, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 5, 99, 3006, 8, 99, 10, 99, 12, 99, 3009, 9, 99, 3, 99, 3011, 8, 99, 1, 99, 1, 99, 1, 100, 3, 100, 3016, 8, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 3, 102, 3026, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 3042, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 4, 103, 3054, 8, 103, 11, 103, 12, 103, 3055, 1, 103, 3, 103, 3059, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 4, 103, 3066, 8, 103, 11, 103, 12, 103, 3067, 1, 103, 3, 103, 3071, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 3081, 8, 103, 10, 103, 12, 103, 3084, 9, 103, 1, 103, 3, 103, 3087, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 3100, 8, 103, 10, 103, 12, 103, 3103, 9, 103, 1, 103, 3, 103, 3106, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 3112, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 3122, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 3134, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 3143, 8, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 5, 107, 3162, 8, 107, 10, 107, 12, 107, 3165, 9, 107, 1, 107, 1, 107, 1, 107, 3, 107, 3170, 8, 107, 1, 108, 1, 108, 1, 108, 4, 108, 3175, 8, 108, 11, 108, 12, 108, 3176, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 5, 110, 3184, 8, 110, 10, 110, 12, 110, 3187, 9, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 3, 113, 3200, 8, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 3207, 8, 114, 1, 115, 1, 115, 1, 115, 5, 115, 3212, 8, 115, 10, 115, 12, 115, 3215, 9, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 3222, 8, 116, 1, 117, 3, 117, 3225, 8, 117, 1, 117, 1, 117, 3, 117, 3229, 8, 117, 1, 117, 1, 117, 3, 117, 3233, 8, 117, 1, 117, 3, 117, 3236, 8, 117, 1, 118, 1, 118, 3, 118, 3240, 8, 118, 1, 119, 1, 119, 1, 119, 0, 7, 34, 58, 110, 114, 116, 156, 176, 120, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 0, 37, 2, 0, 22, 22, 212, 212, 2, 0, 55, 55, 114, 114, 2, 0, 226, 226, 244, 244, 2, 0, 88, 88, 105, 105, 2, 0, 75, 75, 106, 106, 1, 0, 222, 223, 2, 0, 84, 84, 157, 157, 2, 0, 308, 308, 330, 330, 2, 0, 74, 74, 265, 265, 2, 0, 12, 12, 58, 58, 2, 0, 84, 84, 131, 131, 2, 0, 5, 5, 62, 62, 3, 0, 89, 89, 135, 135, 217, 217, 2, 0, 16, 16, 243, 243, 3, 0, 18, 18, 133, 133, 254, 254, 2, 0, 288, 288, 290, 290, 2, 0, 107, 107, 230, 230, 1, 0, 302, 303, 1, 0, 304, 306, 2, 0, 127, 127, 172, 172, 1, 0, 275, 277, 4, 0, 72, 72, 80, 80, 257, 257, 267, 267, 2, 0, 32, 32, 264, 264, 2, 0, 10, 10, 169, 169, 2, 0, 83, 83, 224, 224, 1, 0, 296, 301, 3, 0, 5, 5, 9, 9, 238, 238, 2, 0, 80, 80, 257, 257, 5, 0, 50, 50, 101, 101, 153, 154, 228, 228, 294, 294, 1, 0, 158, 161, 2, 0, 85, 85, 195, 195, 3, 0, 96, 96, 120, 120, 247, 247, 4, 0, 63, 63, 115, 115, 143, 143, 278, 278, 2, 0, 175, 175, 293, 293, 5, 0, 36, 36, 56, 56, 110, 110, 231, 231, 271, 271, 2, 0, 252, 252, 282, 282, 55, 0, 1, 5, 7, 7, 9, 10, 12, 16, 18, 18, 20, 22, 25, 32, 34, 35, 39, 39, 48, 50, 52, 55, 57, 58, 60, 61, 63, 65, 68, 70, 72, 72, 75, 75, 78, 78, 81, 85, 87, 87, 90, 96, 99, 99, 101, 104, 106, 107, 109, 109, 112, 112, 114, 115, 117, 118, 120, 120, 127, 134, 136, 136, 138, 138, 140, 140, 143, 154, 156, 163, 167, 172, 174, 176, 179, 179, 181, 196, 198, 203, 205, 216, 218, 220, 222, 230, 232, 236, 238, 243, 245, 248, 250, 255, 258, 260, 262, 264, 266, 268, 270, 273, 275, 279, 281, 283, 286, 287, 289, 295, 3755, 0, 241, 1, 0, 0, 0, 2, 253, 1, 0, 0, 0, 4, 1126, 1, 0, 0, 0, 6, 1129, 1, 0, 0, 0, 8, 1133, 1, 0, 0, 0, 10, 1143, 1, 0, 0, 0, 12, 1147, 1, 0, 0, 0, 14, 1161, 1, 0, 0, 0, 16, 1163, 1, 0, 0, 0, 18, 1177, 1, 0, 0, 0, 20, 1183, 1, 0, 0, 0, 22, 1187, 1, 0, 0, 0, 24, 1195, 1, 0, 0, 0, 26, 1201, 1, 0, 0, 0, 28, 1203, 1, 0, 0, 0, 30, 1240, 1, 0, 0, 0, 32, 1242, 1, 0, 0, 0, 34, 1244, 1, 0, 0, 0, 36, 1280, 1, 0, 0, 0, 38, 1282, 1, 0, 0, 0, 40, 1290, 1, 0, 0, 0, 42, 1338, 1, 0, 0, 0, 44, 1388, 1, 0, 0, 0, 46, 1403, 1, 0, 0, 0, 48, 1405, 1, 0, 0, 0, 50, 1412, 1, 0, 0, 0, 52, 1441, 1, 0, 0, 0, 54, 1450, 1, 0, 0, 0, 56, 1467, 1, 0, 0, 0, 58, 1469, 1, 0, 0, 0, 60, 1500, 1, 0, 0, 0, 62, 1516, 1, 0, 0, 0, 64, 1518, 1, 0, 0, 0, 66, 1527, 1, 0, 0, 0, 68, 1529, 1, 0, 0, 0, 70, 1537, 1, 0, 0, 0, 72, 1539, 1, 0, 0, 0, 74, 1542, 1, 0, 0, 0, 76, 1627, 1, 0, 0, 0, 78, 1642, 1, 0, 0, 0, 80, 1653, 1, 0, 0, 0, 82, 1655, 1, 0, 0, 0, 84, 1670, 1, 0, 0, 0, 86, 1683, 1, 0, 0, 0, 88, 1687, 1, 0, 0, 0, 90, 1697, 1, 0, 0, 0, 92, 1745, 1, 0, 0, 0, 94, 1747, 1, 0, 0, 0, 96, 1775, 1, 0, 0, 0, 98, 1782, 1, 0, 0, 0, 100, 1854, 1, 0, 0, 0, 102, 1874, 1, 0, 0, 0, 104, 1876, 1, 0, 0, 0, 106, 1880, 1, 0, 0, 0, 108, 1893, 1, 0, 0, 0, 110, 1902, 1, 0, 0, 0, 112, 1976, 1, 0, 0, 0, 114, 1982, 1, 0, 0, 0, 116, 2454, 1, 0, 0, 0, 118, 2469, 1, 0, 0, 0, 120, 2483, 1, 0, 0, 0, 122, 2488, 1, 0, 0, 0, 124, 2493, 1, 0, 0, 0, 126, 2497, 1, 0, 0, 0, 128, 2503, 1, 0, 0, 0, 130, 2516, 1, 0, 0, 0, 132, 2522, 1, 0, 0, 0, 134, 2535, 1, 0, 0, 0, 136, 2537, 1, 0, 0, 0, 138, 2543, 1, 0, 0, 0, 140, 2551, 1, 0, 0, 0, 142, 2559, 1, 0, 0, 0, 144, 2561, 1, 0, 0, 0, 146, 2563, 1, 0, 0, 0, 148, 2565, 1, 0, 0, 0, 150, 2567, 1, 0, 0, 0, 152, 2577, 1, 0, 0, 0, 154, 2579, 1, 0, 0, 0, 156, 2672, 1, 0, 0, 0, 158, 2690, 1, 0, 0, 0, 160, 2694, 1, 0, 0, 0, 162, 2696, 1, 0, 0, 0, 164, 2701, 1, 0, 0, 0, 166, 2771, 1, 0, 0, 0, 168, 2773, 1, 0, 0, 0, 170, 2790, 1, 0, 0, 0, 172, 2854, 1, 0, 0, 0, 174, 2865, 1, 0, 0, 0, 176, 2867, 1, 0, 0, 0, 178, 2907, 1, 0, 0, 0, 180, 2939, 1, 0, 0, 0, 182, 2941, 1, 0, 0, 0, 184, 2949, 1, 0, 0, 0, 186, 2956, 1, 0, 0, 0, 188, 2965, 1, 0, 0, 0, 190, 2972, 1, 0, 0, 0, 192, 2979, 1, 0, 0, 0, 194, 2981, 1, 0, 0, 0, 196, 2989, 1, 0, 0, 0, 198, 3000, 1, 0, 0, 0, 200, 3015, 1, 0, 0, 0, 202, 3019, 1, 0, 0, 0, 204, 3041, 1, 0, 0, 0, 206, 3142, 1, 0, 0, 0, 208, 3144, 1, 0, 0, 0, 210, 3149, 1, 0, 0, 0, 212, 3154, 1, 0, 0, 0, 214, 3157, 1, 0, 0, 0, 216, 3174, 1, 0, 0, 0, 218, 3178, 1, 0, 0, 0, 220, 3180, 1, 0, 0, 0, 222, 3188, 1, 0, 0, 0, 224, 3194, 1, 0, 0, 0, 226, 3199, 1, 0, 0, 0, 228, 3206, 1, 0, 0, 0, 230, 3208, 1, 0, 0, 0, 232, 3221, 1, 0, 0, 0, 234, 3235, 1, 0, 0, 0, 236, 3239, 1, 0, 0, 0, 238, 3241, 1, 0, 0, 0, 240, 242, 3, 2, 1, 0, 241, 240, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 5, 0, 0, 1, 244, 1, 1, 0, 0, 0, 245, 247, 3, 4, 2, 0, 246, 248, 5, 309, 0, 0, 247, 246, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 254, 1, 0, 0, 0, 249, 250, 3, 4, 2, 0, 250, 251, 5, 309, 0, 0, 251, 252, 3, 2, 1, 0, 252, 254, 1, 0, 0, 0, 253, 245, 1, 0, 0, 0, 253, 249, 1, 0, 0, 0, 254, 3, 1, 0, 0, 0, 255, 1127, 3, 6, 3, 0, 256, 257, 5, 272, 0, 0, 257, 1127, 3, 232, 116, 0, 258, 259, 5, 272, 0, 0, 259, 260, 3, 232, 116, 0, 260, 261, 5, 310, 0, 0, 261, 262, 3, 232, 116, 0, 262, 1127, 1, 0, 0, 0, 263, 264, 5, 36, 0, 0, 264, 268, 5, 25, 0, 0, 265, 266, 5, 102, 0, 0, 266, 267, 5, 165, 0, 0, 267, 269, 5, 77, 0, 0, 268, 265, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 271, 3, 232, 116, 0, 271, 272, 5, 274, 0, 0, 272, 275, 3, 232, 116, 0, 273, 274, 5, 29, 0, 0, 274, 276, 3, 140, 70, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 279, 1, 0, 0, 0, 277, 278, 5, 14, 0, 0, 278, 280, 3, 228, 114, 0, 279, 277, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 282, 5, 288, 0, 0, 282, 284, 3, 20, 10, 0, 283, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 1127, 1, 0, 0, 0, 285, 286, 5, 66, 0, 0, 286, 289, 5, 25, 0, 0, 287, 288, 5, 102, 0, 0, 288, 290, 5, 77, 0, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 293, 3, 232, 116, 0, 292, 294, 7, 0, 0, 0, 293, 292, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 1127, 1, 0, 0, 0, 295, 296, 5, 36, 0, 0, 296, 300, 5, 226, 0, 0, 297, 298, 5, 102, 0, 0, 298, 299, 5, 165, 0, 0, 299, 301, 5, 77, 0, 0, 300, 297, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 305, 3, 220, 110, 0, 303, 304, 5, 14, 0, 0, 304, 306, 3, 228, 114, 0, 305, 303, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 308, 5, 288, 0, 0, 308, 310, 3, 20, 10, 0, 309, 307, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 1127, 1, 0, 0, 0, 311, 312, 5, 66, 0, 0, 312, 315, 5, 226, 0, 0, 313, 314, 5, 102, 0, 0, 314, 316, 5, 77, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 3, 220, 110, 0, 318, 320, 7, 0, 0, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 1127, 1, 0, 0, 0, 321, 322, 5, 6, 0, 0, 322, 323, 5, 226, 0, 0, 323, 324, 3, 220, 110, 0, 324, 325, 5, 206, 0, 0, 325, 326, 5, 253, 0, 0, 326, 327, 3, 232, 116, 0, 327, 1127, 1, 0, 0, 0, 328, 329, 5, 6, 0, 0, 329, 330, 5, 226, 0, 0, 330, 331, 3, 220, 110, 0, 331, 332, 5, 234, 0, 0, 332, 333, 5, 14, 0, 0, 333, 334, 3, 228, 114, 0, 334, 1127, 1, 0, 0, 0, 335, 338, 5, 36, 0, 0, 336, 337, 5, 177, 0, 0, 337, 339, 5, 209, 0, 0, 338, 336, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 344, 5, 244, 0, 0, 341, 342, 5, 102, 0, 0, 342, 343, 5, 165, 0, 0, 343, 345, 5, 77, 0, 0, 344, 341, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 3, 220, 110, 0, 347, 349, 3, 90, 45, 0, 348, 347, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 352, 1, 0, 0, 0, 350, 351, 5, 29, 0, 0, 351, 353, 3, 140, 70, 0, 352, 350, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 355, 5, 288, 0, 0, 355, 357, 3, 20, 10, 0, 356, 354, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 364, 5, 11, 0, 0, 359, 365, 3, 6, 3, 0, 360, 361, 5, 313, 0, 0, 361, 362, 3, 6, 3, 0, 362, 363, 5, 314, 0, 0, 363, 365, 1, 0, 0, 0, 364, 359, 1, 0, 0, 0, 364, 360, 1, 0, 0, 0, 365, 371, 1, 0, 0, 0, 366, 368, 5, 288, 0, 0, 367, 369, 5, 162, 0, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 5, 48, 0, 0, 371, 366, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 1127, 1, 0, 0, 0, 373, 376, 5, 36, 0, 0, 374, 375, 5, 177, 0, 0, 375, 377, 5, 209, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 382, 5, 244, 0, 0, 379, 380, 5, 102, 0, 0, 380, 381, 5, 165, 0, 0, 381, 383, 5, 77, 0, 0, 382, 379, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 385, 3, 220, 110, 0, 385, 386, 5, 313, 0, 0, 386, 391, 3, 14, 7, 0, 387, 388, 5, 312, 0, 0, 388, 390, 3, 14, 7, 0, 389, 387, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 394, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 397, 5, 314, 0, 0, 395, 396, 5, 29, 0, 0, 396, 398, 3, 140, 70, 0, 397, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 400, 5, 288, 0, 0, 400, 402, 3, 20, 10, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 1127, 1, 0, 0, 0, 403, 404, 5, 66, 0, 0, 404, 407, 5, 244, 0, 0, 405, 406, 5, 102, 0, 0, 406, 408, 5, 77, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 1127, 3, 220, 110, 0, 410, 411, 5, 110, 0, 0, 411, 412, 5, 113, 0, 0, 412, 414, 3, 220, 110, 0, 413, 415, 3, 90, 45, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 417, 3, 6, 3, 0, 417, 1127, 1, 0, 0, 0, 418, 419, 5, 56, 0, 0, 419, 420, 5, 88, 0, 0, 420, 423, 3, 220, 110, 0, 421, 422, 5, 285, 0, 0, 422, 424, 3, 110, 55, 0, 423, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 1127, 1, 0, 0, 0, 425, 426, 5, 258, 0, 0, 426, 427, 5, 244, 0, 0, 427, 1127, 3, 220, 110, 0, 428, 429, 5, 29, 0, 0, 429, 430, 5, 173, 0, 0, 430, 431, 5, 244, 0, 0, 431, 432, 3, 220, 110, 0, 432, 435, 5, 116, 0, 0, 433, 436, 3, 140, 70, 0, 434, 436, 5, 166, 0, 0, 435, 433, 1, 0, 0, 0, 435, 434, 1, 0, 0, 0, 436, 1127, 1, 0, 0, 0, 437, 438, 5, 29, 0, 0, 438, 439, 5, 173, 0, 0, 439, 440, 5, 283, 0, 0, 440, 441, 3, 220, 110, 0, 441, 444, 5, 116, 0, 0, 442, 445, 3, 140, 70, 0, 443, 445, 5, 166, 0, 0, 444, 442, 1, 0, 0, 0, 444, 443, 1, 0, 0, 0, 445, 1127, 1, 0, 0, 0, 446, 447, 5, 29, 0, 0, 447, 448, 5, 173, 0, 0, 448, 449, 5, 27, 0, 0, 449, 450, 3, 220, 110, 0, 450, 453, 5, 116, 0, 0, 451, 454, 3, 140, 70, 0, 452, 454, 5, 166, 0, 0, 453, 451, 1, 0, 0, 0, 453, 452, 1, 0, 0, 0, 454, 1127, 1, 0, 0, 0, 455, 456, 5, 6, 0, 0, 456, 459, 5, 244, 0, 0, 457, 458, 5, 102, 0, 0, 458, 460, 5, 77, 0, 0, 459, 457, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 462, 3, 220, 110, 0, 462, 463, 5, 206, 0, 0, 463, 464, 5, 253, 0, 0, 464, 465, 3, 220, 110, 0, 465, 1127, 1, 0, 0, 0, 466, 467, 5, 6, 0, 0, 467, 470, 5, 244, 0, 0, 468, 469, 5, 102, 0, 0, 469, 471, 5, 77, 0, 0, 470, 468, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 3, 220, 110, 0, 473, 474, 5, 2, 0, 0, 474, 478, 5, 27, 0, 0, 475, 476, 5, 102, 0, 0, 476, 477, 5, 165, 0, 0, 477, 479, 5, 77, 0, 0, 478, 475, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 481, 3, 16, 8, 0, 481, 1127, 1, 0, 0, 0, 482, 483, 5, 6, 0, 0, 483, 486, 5, 244, 0, 0, 484, 485, 5, 102, 0, 0, 485, 487, 5, 77, 0, 0, 486, 484, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 3, 220, 110, 0, 489, 490, 5, 206, 0, 0, 490, 493, 5, 27, 0, 0, 491, 492, 5, 102, 0, 0, 492, 494, 5, 77, 0, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 3, 220, 110, 0, 496, 497, 5, 253, 0, 0, 497, 498, 3, 232, 116, 0, 498, 1127, 1, 0, 0, 0, 499, 500, 5, 6, 0, 0, 500, 503, 5, 244, 0, 0, 501, 502, 5, 102, 0, 0, 502, 504, 5, 77, 0, 0, 503, 501, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 3, 220, 110, 0, 506, 507, 5, 66, 0, 0, 507, 510, 5, 27, 0, 0, 508, 509, 5, 102, 0, 0, 509, 511, 5, 77, 0, 0, 510, 508, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 3, 220, 110, 0, 513, 1127, 1, 0, 0, 0, 514, 515, 5, 6, 0, 0, 515, 518, 5, 244, 0, 0, 516, 517, 5, 102, 0, 0, 517, 519, 5, 77, 0, 0, 518, 516, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 3, 220, 110, 0, 521, 522, 5, 6, 0, 0, 522, 523, 5, 27, 0, 0, 523, 524, 3, 220, 110, 0, 524, 525, 5, 234, 0, 0, 525, 526, 5, 48, 0, 0, 526, 527, 5, 260, 0, 0, 527, 528, 3, 156, 78, 0, 528, 1127, 1, 0, 0, 0, 529, 530, 5, 6, 0, 0, 530, 531, 5, 244, 0, 0, 531, 532, 3, 220, 110, 0, 532, 533, 5, 234, 0, 0, 533, 534, 5, 14, 0, 0, 534, 535, 3, 228, 114, 0, 535, 1127, 1, 0, 0, 0, 536, 537, 5, 6, 0, 0, 537, 538, 5, 244, 0, 0, 538, 539, 3, 220, 110, 0, 539, 540, 5, 234, 0, 0, 540, 541, 5, 199, 0, 0, 541, 542, 3, 22, 11, 0, 542, 1127, 1, 0, 0, 0, 543, 544, 5, 6, 0, 0, 544, 545, 5, 244, 0, 0, 545, 546, 3, 220, 110, 0, 546, 547, 5, 76, 0, 0, 547, 560, 3, 232, 116, 0, 548, 557, 5, 313, 0, 0, 549, 554, 3, 190, 95, 0, 550, 551, 5, 312, 0, 0, 551, 553, 3, 190, 95, 0, 552, 550, 1, 0, 0, 0, 553, 556, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 558, 1, 0, 0, 0, 556, 554, 1, 0, 0, 0, 557, 549, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 561, 5, 314, 0, 0, 560, 548, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 563, 5, 285, 0, 0, 563, 565, 3, 110, 55, 0, 564, 562, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 1127, 1, 0, 0, 0, 566, 567, 5, 7, 0, 0, 567, 570, 3, 220, 110, 0, 568, 569, 5, 288, 0, 0, 569, 571, 3, 20, 10, 0, 570, 568, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 1127, 1, 0, 0, 0, 572, 575, 5, 36, 0, 0, 573, 574, 5, 177, 0, 0, 574, 576, 5, 209, 0, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 5, 150, 0, 0, 578, 582, 5, 283, 0, 0, 579, 580, 5, 102, 0, 0, 580, 581, 5, 165, 0, 0, 581, 583, 5, 77, 0, 0, 582, 579, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 588, 3, 220, 110, 0, 585, 586, 5, 92, 0, 0, 586, 587, 5, 191, 0, 0, 587, 589, 3, 150, 75, 0, 588, 585, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 592, 1, 0, 0, 0, 590, 591, 5, 29, 0, 0, 591, 593, 3, 140, 70, 0, 592, 590, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 596, 1, 0, 0, 0, 594, 595, 5, 288, 0, 0, 595, 597, 3, 20, 10, 0, 596, 594, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 5, 11, 0, 0, 599, 600, 3, 6, 3, 0, 600, 1127, 1, 0, 0, 0, 601, 604, 5, 36, 0, 0, 602, 603, 5, 177, 0, 0, 603, 605, 5, 209, 0, 0, 604, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 283, 0, 0, 607, 610, 3, 220, 110, 0, 608, 609, 5, 29, 0, 0, 609, 611, 3, 140, 70, 0, 610, 608, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 614, 1, 0, 0, 0, 612, 613, 5, 229, 0, 0, 613, 615, 7, 1, 0, 0, 614, 612, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 5, 11, 0, 0, 617, 618, 3, 6, 3, 0, 618, 1127, 1, 0, 0, 0, 619, 620, 5, 205, 0, 0, 620, 621, 5, 150, 0, 0, 621, 622, 5, 283, 0, 0, 622, 1127, 3, 220, 110, 0, 623, 624, 5, 66, 0, 0, 624, 625, 5, 150, 0, 0, 625, 628, 5, 283, 0, 0, 626, 627, 5, 102, 0, 0, 627, 629, 5, 77, 0, 0, 628, 626, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 1127, 3, 220, 110, 0, 631, 632, 5, 6, 0, 0, 632, 633, 5, 150, 0, 0, 633, 636, 5, 283, 0, 0, 634, 635, 5, 102, 0, 0, 635, 637, 5, 77, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 639, 3, 220, 110, 0, 639, 640, 5, 206, 0, 0, 640, 641, 5, 253, 0, 0, 641, 642, 3, 220, 110, 0, 642, 1127, 1, 0, 0, 0, 643, 644, 5, 6, 0, 0, 644, 645, 5, 150, 0, 0, 645, 646, 5, 283, 0, 0, 646, 647, 3, 220, 110, 0, 647, 648, 5, 234, 0, 0, 648, 649, 5, 199, 0, 0, 649, 650, 3, 22, 11, 0, 650, 1127, 1, 0, 0, 0, 651, 652, 5, 66, 0, 0, 652, 655, 5, 283, 0, 0, 653, 654, 5, 102, 0, 0, 654, 656, 5, 77, 0, 0, 655, 653, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 1127, 3, 220, 110, 0, 658, 659, 5, 6, 0, 0, 659, 660, 5, 283, 0, 0, 660, 661, 3, 220, 110, 0, 661, 662, 5, 206, 0, 0, 662, 663, 5, 253, 0, 0, 663, 664, 3, 220, 110, 0, 664, 1127, 1, 0, 0, 0, 665, 666, 5, 6, 0, 0, 666, 667, 5, 283, 0, 0, 667, 668, 3, 220, 110, 0, 668, 669, 5, 234, 0, 0, 669, 670, 5, 14, 0, 0, 670, 671, 3, 228, 114, 0, 671, 1127, 1, 0, 0, 0, 672, 673, 5, 20, 0, 0, 673, 674, 3, 220, 110, 0, 674, 683, 5, 313, 0, 0, 675, 680, 3, 190, 95, 0, 676, 677, 5, 312, 0, 0, 677, 679, 3, 190, 95, 0, 678, 676, 1, 0, 0, 0, 679, 682, 1, 0, 0, 0, 680, 678, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 684, 1, 0, 0, 0, 682, 680, 1, 0, 0, 0, 683, 675, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 5, 314, 0, 0, 686, 1127, 1, 0, 0, 0, 687, 690, 5, 36, 0, 0, 688, 689, 5, 177, 0, 0, 689, 691, 5, 209, 0, 0, 690, 688, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 1127, 3, 196, 98, 0, 693, 694, 5, 66, 0, 0, 694, 697, 5, 90, 0, 0, 695, 696, 5, 102, 0, 0, 696, 698, 5, 77, 0, 0, 697, 695, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 1127, 3, 198, 99, 0, 700, 701, 5, 36, 0, 0, 701, 702, 5, 218, 0, 0, 702, 706, 3, 232, 116, 0, 703, 704, 5, 288, 0, 0, 704, 705, 5, 3, 0, 0, 705, 707, 3, 226, 113, 0, 706, 703, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 710, 1, 0, 0, 0, 708, 709, 5, 105, 0, 0, 709, 711, 3, 232, 116, 0, 710, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 1127, 1, 0, 0, 0, 712, 713, 5, 66, 0, 0, 713, 714, 5, 218, 0, 0, 714, 717, 3, 232, 116, 0, 715, 716, 5, 105, 0, 0, 716, 718, 3, 232, 116, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 1127, 1, 0, 0, 0, 719, 720, 5, 93, 0, 0, 720, 721, 3, 230, 115, 0, 721, 722, 5, 253, 0, 0, 722, 727, 3, 228, 114, 0, 723, 724, 5, 312, 0, 0, 724, 726, 3, 228, 114, 0, 725, 723, 1, 0, 0, 0, 726, 729, 1, 0, 0, 0, 727, 725, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 733, 1, 0, 0, 0, 729, 727, 1, 0, 0, 0, 730, 731, 5, 288, 0, 0, 731, 732, 5, 3, 0, 0, 732, 734, 5, 176, 0, 0, 733, 730, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 738, 1, 0, 0, 0, 735, 736, 5, 94, 0, 0, 736, 737, 5, 19, 0, 0, 737, 739, 3, 226, 113, 0, 738, 735, 1, 0, 0, 0, 738, 739, 1, 0, 0, 0, 739, 742, 1, 0, 0, 0, 740, 741, 5, 105, 0, 0, 741, 743, 3, 232, 116, 0, 742, 740, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 1127, 1, 0, 0, 0, 744, 748, 5, 216, 0, 0, 745, 746, 5, 3, 0, 0, 746, 747, 5, 176, 0, 0, 747, 749, 5, 86, 0, 0, 748, 745, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 750, 1, 0, 0, 0, 750, 751, 3, 230, 115, 0, 751, 752, 5, 88, 0, 0, 752, 757, 3, 228, 114, 0, 753, 754, 5, 312, 0, 0, 754, 756, 3, 228, 114, 0, 755, 753, 1, 0, 0, 0, 756, 759, 1, 0, 0, 0, 757, 755, 1, 0, 0, 0, 757, 758, 1, 0, 0, 0, 758, 763, 1, 0, 0, 0, 759, 757, 1, 0, 0, 0, 760, 761, 5, 94, 0, 0, 761, 762, 5, 19, 0, 0, 762, 764, 3, 226, 113, 0, 763, 760, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 767, 1, 0, 0, 0, 765, 766, 5, 105, 0, 0, 766, 768, 3, 232, 116, 0, 767, 765, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 1127, 1, 0, 0, 0, 769, 770, 5, 234, 0, 0, 770, 774, 5, 218, 0, 0, 771, 775, 5, 5, 0, 0, 772, 775, 5, 163, 0, 0, 773, 775, 3, 232, 116, 0, 774, 771, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 774, 773, 1, 0, 0, 0, 775, 778, 1, 0, 0, 0, 776, 777, 5, 105, 0, 0, 777, 779, 3, 232, 116, 0, 778, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 1127, 1, 0, 0, 0, 780, 791, 5, 93, 0, 0, 781, 786, 3, 218, 109, 0, 782, 783, 5, 312, 0, 0, 783, 785, 3, 218, 109, 0, 784, 782, 1, 0, 0, 0, 785, 788, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 792, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 789, 790, 5, 5, 0, 0, 790, 792, 5, 198, 0, 0, 791, 781, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 792, 793, 1, 0, 0, 0, 793, 795, 5, 173, 0, 0, 794, 796, 7, 2, 0, 0, 795, 794, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 798, 3, 220, 110, 0, 798, 799, 5, 253, 0, 0, 799, 803, 3, 228, 114, 0, 800, 801, 5, 288, 0, 0, 801, 802, 5, 93, 0, 0, 802, 804, 5, 176, 0, 0, 803, 800, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 1127, 1, 0, 0, 0, 805, 816, 5, 57, 0, 0, 806, 811, 3, 218, 109, 0, 807, 808, 5, 312, 0, 0, 808, 810, 3, 218, 109, 0, 809, 807, 1, 0, 0, 0, 810, 813, 1, 0, 0, 0, 811, 809, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 817, 1, 0, 0, 0, 813, 811, 1, 0, 0, 0, 814, 815, 5, 5, 0, 0, 815, 817, 5, 198, 0, 0, 816, 806, 1, 0, 0, 0, 816, 814, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 820, 5, 173, 0, 0, 819, 821, 7, 2, 0, 0, 820, 819, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 823, 3, 220, 110, 0, 823, 824, 5, 253, 0, 0, 824, 825, 3, 228, 114, 0, 825, 1127, 1, 0, 0, 0, 826, 830, 5, 216, 0, 0, 827, 828, 5, 93, 0, 0, 828, 829, 5, 176, 0, 0, 829, 831, 5, 86, 0, 0, 830, 827, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 842, 1, 0, 0, 0, 832, 837, 3, 218, 109, 0, 833, 834, 5, 312, 0, 0, 834, 836, 3, 218, 109, 0, 835, 833, 1, 0, 0, 0, 836, 839, 1, 0, 0, 0, 837, 835, 1, 0, 0, 0, 837, 838, 1, 0, 0, 0, 838, 843, 1, 0, 0, 0, 839, 837, 1, 0, 0, 0, 840, 841, 5, 5, 0, 0, 841, 843, 5, 198, 0, 0, 842, 832, 1, 0, 0, 0, 842, 840, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 846, 5, 173, 0, 0, 845, 847, 7, 2, 0, 0, 846, 845, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 3, 220, 110, 0, 849, 850, 5, 88, 0, 0, 850, 851, 3, 228, 114, 0, 851, 1127, 1, 0, 0, 0, 852, 853, 5, 236, 0, 0, 853, 859, 5, 95, 0, 0, 854, 856, 5, 173, 0, 0, 855, 857, 5, 244, 0, 0, 856, 855, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 860, 3, 220, 110, 0, 859, 854, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 1127, 1, 0, 0, 0, 861, 873, 5, 78, 0, 0, 862, 863, 5, 313, 0, 0, 863, 868, 3, 184, 92, 0, 864, 865, 5, 312, 0, 0, 865, 867, 3, 184, 92, 0, 866, 864, 1, 0, 0, 0, 867, 870, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 871, 1, 0, 0, 0, 870, 868, 1, 0, 0, 0, 871, 872, 5, 314, 0, 0, 872, 874, 1, 0, 0, 0, 873, 862, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 1127, 3, 4, 2, 0, 876, 877, 5, 78, 0, 0, 877, 879, 5, 7, 0, 0, 878, 880, 5, 281, 0, 0, 879, 878, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 881, 1, 0, 0, 0, 881, 1127, 3, 4, 2, 0, 882, 883, 5, 236, 0, 0, 883, 884, 5, 36, 0, 0, 884, 885, 5, 244, 0, 0, 885, 1127, 3, 220, 110, 0, 886, 887, 5, 236, 0, 0, 887, 888, 5, 36, 0, 0, 888, 889, 5, 226, 0, 0, 889, 1127, 3, 220, 110, 0, 890, 891, 5, 236, 0, 0, 891, 892, 5, 36, 0, 0, 892, 893, 5, 283, 0, 0, 893, 1127, 3, 220, 110, 0, 894, 895, 5, 236, 0, 0, 895, 896, 5, 36, 0, 0, 896, 897, 5, 150, 0, 0, 897, 898, 5, 283, 0, 0, 898, 1127, 3, 220, 110, 0, 899, 900, 5, 236, 0, 0, 900, 903, 5, 245, 0, 0, 901, 902, 7, 3, 0, 0, 902, 904, 3, 220, 110, 0, 903, 901, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 911, 1, 0, 0, 0, 905, 906, 5, 137, 0, 0, 906, 909, 3, 140, 70, 0, 907, 908, 5, 73, 0, 0, 908, 910, 3, 140, 70, 0, 909, 907, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 912, 1, 0, 0, 0, 911, 905, 1, 0, 0, 0, 911, 912, 1, 0, 0, 0, 912, 1127, 1, 0, 0, 0, 913, 914, 5, 236, 0, 0, 914, 917, 5, 227, 0, 0, 915, 916, 7, 3, 0, 0, 916, 918, 3, 232, 116, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 925, 1, 0, 0, 0, 919, 920, 5, 137, 0, 0, 920, 923, 3, 140, 70, 0, 921, 922, 5, 73, 0, 0, 922, 924, 3, 140, 70, 0, 923, 921, 1, 0, 0, 0, 923, 924, 1, 0, 0, 0, 924, 926, 1, 0, 0, 0, 925, 919, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 1127, 1, 0, 0, 0, 927, 928, 5, 236, 0, 0, 928, 935, 5, 26, 0, 0, 929, 930, 5, 137, 0, 0, 930, 933, 3, 140, 70, 0, 931, 932, 5, 73, 0, 0, 932, 934, 3, 140, 70, 0, 933, 931, 1, 0, 0, 0, 933, 934, 1, 0, 0, 0, 934, 936, 1, 0, 0, 0, 935, 929, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 1127, 1, 0, 0, 0, 937, 938, 5, 236, 0, 0, 938, 939, 5, 28, 0, 0, 939, 941, 7, 3, 0, 0, 940, 942, 3, 220, 110, 0, 941, 940, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 949, 1, 0, 0, 0, 943, 944, 5, 137, 0, 0, 944, 947, 3, 140, 70, 0, 945, 946, 5, 73, 0, 0, 946, 948, 3, 140, 70, 0, 947, 945, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 950, 1, 0, 0, 0, 949, 943, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 1127, 1, 0, 0, 0, 951, 952, 5, 236, 0, 0, 952, 953, 5, 240, 0, 0, 953, 954, 5, 86, 0, 0, 954, 1127, 3, 220, 110, 0, 955, 956, 5, 236, 0, 0, 956, 957, 5, 240, 0, 0, 957, 958, 5, 86, 0, 0, 958, 959, 5, 313, 0, 0, 959, 960, 3, 6, 3, 0, 960, 961, 5, 314, 0, 0, 961, 1127, 1, 0, 0, 0, 962, 964, 5, 236, 0, 0, 963, 965, 5, 39, 0, 0, 964, 963, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 969, 5, 219, 0, 0, 967, 968, 7, 3, 0, 0, 968, 970, 3, 232, 116, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 1127, 1, 0, 0, 0, 971, 972, 5, 236, 0, 0, 972, 973, 5, 218, 0, 0, 973, 976, 5, 95, 0, 0, 974, 975, 7, 3, 0, 0, 975, 977, 3, 232, 116, 0, 976, 974, 1, 0, 0, 0, 976, 977, 1, 0, 0, 0, 977, 1127, 1, 0, 0, 0, 978, 979, 5, 59, 0, 0, 979, 1127, 3, 220, 110, 0, 980, 981, 5, 58, 0, 0, 981, 1127, 3, 220, 110, 0, 982, 983, 5, 236, 0, 0, 983, 986, 5, 91, 0, 0, 984, 985, 7, 3, 0, 0, 985, 987, 3, 220, 110, 0, 986, 984, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 994, 1, 0, 0, 0, 988, 989, 5, 137, 0, 0, 989, 992, 3, 140, 70, 0, 990, 991, 5, 73, 0, 0, 991, 993, 3, 140, 70, 0, 992, 990, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 995, 1, 0, 0, 0, 994, 988, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 1127, 1, 0, 0, 0, 996, 997, 5, 236, 0, 0, 997, 1004, 5, 233, 0, 0, 998, 999, 5, 137, 0, 0, 999, 1002, 3, 140, 70, 0, 1000, 1001, 5, 73, 0, 0, 1001, 1003, 3, 140, 70, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 1005, 1, 0, 0, 0, 1004, 998, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1127, 1, 0, 0, 0, 1006, 1007, 5, 234, 0, 0, 1007, 1008, 5, 233, 0, 0, 1008, 1009, 5, 14, 0, 0, 1009, 1127, 3, 236, 118, 0, 1010, 1011, 5, 210, 0, 0, 1011, 1012, 5, 233, 0, 0, 1012, 1127, 5, 14, 0, 0, 1013, 1014, 5, 234, 0, 0, 1014, 1015, 5, 233, 0, 0, 1015, 1016, 3, 220, 110, 0, 1016, 1017, 5, 296, 0, 0, 1017, 1018, 3, 108, 54, 0, 1018, 1127, 1, 0, 0, 0, 1019, 1020, 5, 210, 0, 0, 1020, 1021, 5, 233, 0, 0, 1021, 1127, 3, 220, 110, 0, 1022, 1023, 5, 239, 0, 0, 1023, 1032, 5, 255, 0, 0, 1024, 1029, 3, 186, 93, 0, 1025, 1026, 5, 312, 0, 0, 1026, 1028, 3, 186, 93, 0, 1027, 1025, 1, 0, 0, 0, 1028, 1031, 1, 0, 0, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1033, 1, 0, 0, 0, 1031, 1029, 1, 0, 0, 0, 1032, 1024, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1127, 1, 0, 0, 0, 1034, 1036, 5, 30, 0, 0, 1035, 1037, 5, 291, 0, 0, 1036, 1035, 1, 0, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 1127, 1, 0, 0, 0, 1038, 1040, 5, 220, 0, 0, 1039, 1041, 5, 291, 0, 0, 1040, 1039, 1, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1127, 1, 0, 0, 0, 1042, 1043, 5, 197, 0, 0, 1043, 1044, 3, 232, 116, 0, 1044, 1045, 5, 88, 0, 0, 1045, 1046, 3, 4, 2, 0, 1046, 1127, 1, 0, 0, 0, 1047, 1048, 5, 51, 0, 0, 1048, 1049, 5, 197, 0, 0, 1049, 1127, 3, 232, 116, 0, 1050, 1051, 5, 76, 0, 0, 1051, 1061, 3, 232, 116, 0, 1052, 1053, 5, 274, 0, 0, 1053, 1058, 3, 108, 54, 0, 1054, 1055, 5, 312, 0, 0, 1055, 1057, 3, 108, 54, 0, 1056, 1054, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1056, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 1062, 1, 0, 0, 0, 1060, 1058, 1, 0, 0, 0, 1061, 1052, 1, 0, 0, 0, 1061, 1062, 1, 0, 0, 0, 1062, 1127, 1, 0, 0, 0, 1063, 1064, 5, 76, 0, 0, 1064, 1065, 5, 104, 0, 0, 1065, 1075, 3, 140, 70, 0, 1066, 1067, 5, 274, 0, 0, 1067, 1072, 3, 108, 54, 0, 1068, 1069, 5, 312, 0, 0, 1069, 1071, 3, 108, 54, 0, 1070, 1068, 1, 0, 0, 0, 1071, 1074, 1, 0, 0, 0, 1072, 1070, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1076, 1, 0, 0, 0, 1074, 1072, 1, 0, 0, 0, 1075, 1066, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1127, 1, 0, 0, 0, 1077, 1078, 5, 59, 0, 0, 1078, 1079, 5, 109, 0, 0, 1079, 1127, 3, 232, 116, 0, 1080, 1081, 5, 59, 0, 0, 1081, 1082, 5, 181, 0, 0, 1082, 1127, 3, 232, 116, 0, 1083, 1084, 5, 234, 0, 0, 1084, 1085, 5, 188, 0, 0, 1085, 1127, 3, 194, 97, 0, 1086, 1087, 5, 234, 0, 0, 1087, 1088, 5, 251, 0, 0, 1088, 1091, 5, 295, 0, 0, 1089, 1092, 5, 140, 0, 0, 1090, 1092, 3, 108, 54, 0, 1091, 1089, 1, 0, 0, 0, 1091, 1090, 1, 0, 0, 0, 1092, 1127, 1, 0, 0, 0, 1093, 1094, 5, 271, 0, 0, 1094, 1095, 3, 220, 110, 0, 1095, 1096, 5, 234, 0, 0, 1096, 1101, 3, 182, 91, 0, 1097, 1098, 5, 312, 0, 0, 1098, 1100, 3, 182, 91, 0, 1099, 1097, 1, 0, 0, 0, 1100, 1103, 1, 0, 0, 0, 1101, 1099, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1106, 1, 0, 0, 0, 1103, 1101, 1, 0, 0, 0, 1104, 1105, 5, 285, 0, 0, 1105, 1107, 3, 110, 55, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1127, 1, 0, 0, 0, 1108, 1109, 5, 152, 0, 0, 1109, 1110, 5, 113, 0, 0, 1110, 1115, 3, 220, 110, 0, 1111, 1113, 5, 11, 0, 0, 1112, 1111, 1, 0, 0, 0, 1112, 1113, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1116, 3, 232, 116, 0, 1115, 1112, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1117, 1118, 5, 274, 0, 0, 1118, 1119, 3, 58, 29, 0, 1119, 1120, 5, 173, 0, 0, 1120, 1122, 3, 108, 54, 0, 1121, 1123, 3, 166, 83, 0, 1122, 1121, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1124, 1125, 1, 0, 0, 0, 1125, 1127, 1, 0, 0, 0, 1126, 255, 1, 0, 0, 0, 1126, 256, 1, 0, 0, 0, 1126, 258, 1, 0, 0, 0, 1126, 263, 1, 0, 0, 0, 1126, 285, 1, 0, 0, 0, 1126, 295, 1, 0, 0, 0, 1126, 311, 1, 0, 0, 0, 1126, 321, 1, 0, 0, 0, 1126, 328, 1, 0, 0, 0, 1126, 335, 1, 0, 0, 0, 1126, 373, 1, 0, 0, 0, 1126, 403, 1, 0, 0, 0, 1126, 410, 1, 0, 0, 0, 1126, 418, 1, 0, 0, 0, 1126, 425, 1, 0, 0, 0, 1126, 428, 1, 0, 0, 0, 1126, 437, 1, 0, 0, 0, 1126, 446, 1, 0, 0, 0, 1126, 455, 1, 0, 0, 0, 1126, 466, 1, 0, 0, 0, 1126, 482, 1, 0, 0, 0, 1126, 499, 1, 0, 0, 0, 1126, 514, 1, 0, 0, 0, 1126, 529, 1, 0, 0, 0, 1126, 536, 1, 0, 0, 0, 1126, 543, 1, 0, 0, 0, 1126, 566, 1, 0, 0, 0, 1126, 572, 1, 0, 0, 0, 1126, 601, 1, 0, 0, 0, 1126, 619, 1, 0, 0, 0, 1126, 623, 1, 0, 0, 0, 1126, 631, 1, 0, 0, 0, 1126, 643, 1, 0, 0, 0, 1126, 651, 1, 0, 0, 0, 1126, 658, 1, 0, 0, 0, 1126, 665, 1, 0, 0, 0, 1126, 672, 1, 0, 0, 0, 1126, 687, 1, 0, 0, 0, 1126, 693, 1, 0, 0, 0, 1126, 700, 1, 0, 0, 0, 1126, 712, 1, 0, 0, 0, 1126, 719, 1, 0, 0, 0, 1126, 744, 1, 0, 0, 0, 1126, 769, 1, 0, 0, 0, 1126, 780, 1, 0, 0, 0, 1126, 805, 1, 0, 0, 0, 1126, 826, 1, 0, 0, 0, 1126, 852, 1, 0, 0, 0, 1126, 861, 1, 0, 0, 0, 1126, 876, 1, 0, 0, 0, 1126, 882, 1, 0, 0, 0, 1126, 886, 1, 0, 0, 0, 1126, 890, 1, 0, 0, 0, 1126, 894, 1, 0, 0, 0, 1126, 899, 1, 0, 0, 0, 1126, 913, 1, 0, 0, 0, 1126, 927, 1, 0, 0, 0, 1126, 937, 1, 0, 0, 0, 1126, 951, 1, 0, 0, 0, 1126, 955, 1, 0, 0, 0, 1126, 962, 1, 0, 0, 0, 1126, 971, 1, 0, 0, 0, 1126, 978, 1, 0, 0, 0, 1126, 980, 1, 0, 0, 0, 1126, 982, 1, 0, 0, 0, 1126, 996, 1, 0, 0, 0, 1126, 1006, 1, 0, 0, 0, 1126, 1010, 1, 0, 0, 0, 1126, 1013, 1, 0, 0, 0, 1126, 1019, 1, 0, 0, 0, 1126, 1022, 1, 0, 0, 0, 1126, 1034, 1, 0, 0, 0, 1126, 1038, 1, 0, 0, 0, 1126, 1042, 1, 0, 0, 0, 1126, 1047, 1, 0, 0, 0, 1126, 1050, 1, 0, 0, 0, 1126, 1063, 1, 0, 0, 0, 1126, 1077, 1, 0, 0, 0, 1126, 1080, 1, 0, 0, 0, 1126, 1083, 1, 0, 0, 0, 1126, 1086, 1, 0, 0, 0, 1126, 1093, 1, 0, 0, 0, 1126, 1108, 1, 0, 0, 0, 1127, 5, 1, 0, 0, 0, 1128, 1130, 3, 8, 4, 0, 1129, 1128, 1, 0, 0, 0, 1129, 1130, 1, 0, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1132, 3, 10, 5, 0, 1132, 7, 1, 0, 0, 0, 1133, 1134, 5, 288, 0, 0, 1134, 1139, 3, 196, 98, 0, 1135, 1136, 5, 312, 0, 0, 1136, 1138, 3, 196, 98, 0, 1137, 1135, 1, 0, 0, 0, 1138, 1141, 1, 0, 0, 0, 1139, 1137, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 9, 1, 0, 0, 0, 1141, 1139, 1, 0, 0, 0, 1142, 1144, 3, 12, 6, 0, 1143, 1142, 1, 0, 0, 0, 1143, 1144, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1146, 3, 28, 14, 0, 1146, 11, 1, 0, 0, 0, 1147, 1149, 5, 288, 0, 0, 1148, 1150, 5, 204, 0, 0, 1149, 1148, 1, 0, 0, 0, 1149, 1150, 1, 0, 0, 0, 1150, 1151, 1, 0, 0, 0, 1151, 1156, 3, 52, 26, 0, 1152, 1153, 5, 312, 0, 0, 1153, 1155, 3, 52, 26, 0, 1154, 1152, 1, 0, 0, 0, 1155, 1158, 1, 0, 0, 0, 1156, 1154, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 13, 1, 0, 0, 0, 1158, 1156, 1, 0, 0, 0, 1159, 1162, 3, 16, 8, 0, 1160, 1162, 3, 18, 9, 0, 1161, 1159, 1, 0, 0, 0, 1161, 1160, 1, 0, 0, 0, 1162, 15, 1, 0, 0, 0, 1163, 1164, 3, 232, 116, 0, 1164, 1167, 3, 156, 78, 0, 1165, 1166, 5, 165, 0, 0, 1166, 1168, 5, 166, 0, 0, 1167, 1165, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1171, 1, 0, 0, 0, 1169, 1170, 5, 29, 0, 0, 1170, 1172, 3, 140, 70, 0, 1171, 1169, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1175, 1, 0, 0, 0, 1173, 1174, 5, 288, 0, 0, 1174, 1176, 3, 20, 10, 0, 1175, 1173, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 17, 1, 0, 0, 0, 1177, 1178, 5, 137, 0, 0, 1178, 1181, 3, 220, 110, 0, 1179, 1180, 7, 4, 0, 0, 1180, 1182, 5, 199, 0, 0, 1181, 1179, 1, 0, 0, 0, 1181, 1182, 1, 0, 0, 0, 1182, 19, 1, 0, 0, 0, 1183, 1184, 5, 313, 0, 0, 1184, 1185, 3, 22, 11, 0, 1185, 1186, 5, 314, 0, 0, 1186, 21, 1, 0, 0, 0, 1187, 1192, 3, 24, 12, 0, 1188, 1189, 5, 312, 0, 0, 1189, 1191, 3, 24, 12, 0, 1190, 1188, 1, 0, 0, 0, 1191, 1194, 1, 0, 0, 0, 1192, 1190, 1, 0, 0, 0, 1192, 1193, 1, 0, 0, 0, 1193, 23, 1, 0, 0, 0, 1194, 1192, 1, 0, 0, 0, 1195, 1196, 3, 232, 116, 0, 1196, 1197, 5, 296, 0, 0, 1197, 1198, 3, 26, 13, 0, 1198, 25, 1, 0, 0, 0, 1199, 1202, 5, 53, 0, 0, 1200, 1202, 3, 108, 54, 0, 1201, 1199, 1, 0, 0, 0, 1201, 1200, 1, 0, 0, 0, 1202, 27, 1, 0, 0, 0, 1203, 1214, 3, 34, 17, 0, 1204, 1205, 5, 178, 0, 0, 1205, 1206, 5, 19, 0, 0, 1206, 1211, 3, 38, 19, 0, 1207, 1208, 5, 312, 0, 0, 1208, 1210, 3, 38, 19, 0, 1209, 1207, 1, 0, 0, 0, 1210, 1213, 1, 0, 0, 0, 1211, 1209, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1215, 1, 0, 0, 0, 1213, 1211, 1, 0, 0, 0, 1214, 1204, 1, 0, 0, 0, 1214, 1215, 1, 0, 0, 0, 1215, 1221, 1, 0, 0, 0, 1216, 1217, 5, 171, 0, 0, 1217, 1219, 3, 32, 16, 0, 1218, 1220, 7, 5, 0, 0, 1219, 1218, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1222, 1, 0, 0, 0, 1221, 1216, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 1236, 1, 0, 0, 0, 1223, 1224, 5, 138, 0, 0, 1224, 1237, 3, 30, 15, 0, 1225, 1226, 5, 81, 0, 0, 1226, 1228, 7, 6, 0, 0, 1227, 1229, 3, 32, 16, 0, 1228, 1227, 1, 0, 0, 0, 1228, 1229, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1234, 7, 5, 0, 0, 1231, 1235, 5, 175, 0, 0, 1232, 1233, 5, 288, 0, 0, 1233, 1235, 5, 250, 0, 0, 1234, 1231, 1, 0, 0, 0, 1234, 1232, 1, 0, 0, 0, 1235, 1237, 1, 0, 0, 0, 1236, 1223, 1, 0, 0, 0, 1236, 1225, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 29, 1, 0, 0, 0, 1238, 1241, 5, 5, 0, 0, 1239, 1241, 3, 32, 16, 0, 1240, 1238, 1, 0, 0, 0, 1240, 1239, 1, 0, 0, 0, 1241, 31, 1, 0, 0, 0, 1242, 1243, 7, 7, 0, 0, 1243, 33, 1, 0, 0, 0, 1244, 1245, 6, 17, -1, 0, 1245, 1246, 3, 36, 18, 0, 1246, 1261, 1, 0, 0, 0, 1247, 1248, 10, 2, 0, 0, 1248, 1250, 5, 111, 0, 0, 1249, 1251, 3, 54, 27, 0, 1250, 1249, 1, 0, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 1260, 3, 34, 17, 3, 1253, 1254, 10, 1, 0, 0, 1254, 1256, 7, 8, 0, 0, 1255, 1257, 3, 54, 27, 0, 1256, 1255, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1258, 1, 0, 0, 0, 1258, 1260, 3, 34, 17, 2, 1259, 1247, 1, 0, 0, 0, 1259, 1253, 1, 0, 0, 0, 1260, 1263, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 35, 1, 0, 0, 0, 1263, 1261, 1, 0, 0, 0, 1264, 1281, 3, 40, 20, 0, 1265, 1266, 5, 244, 0, 0, 1266, 1281, 3, 220, 110, 0, 1267, 1268, 5, 280, 0, 0, 1268, 1273, 3, 108, 54, 0, 1269, 1270, 5, 312, 0, 0, 1270, 1272, 3, 108, 54, 0, 1271, 1269, 1, 0, 0, 0, 1272, 1275, 1, 0, 0, 0, 1273, 1271, 1, 0, 0, 0, 1273, 1274, 1, 0, 0, 0, 1274, 1281, 1, 0, 0, 0, 1275, 1273, 1, 0, 0, 0, 1276, 1277, 5, 313, 0, 0, 1277, 1278, 3, 28, 14, 0, 1278, 1279, 5, 314, 0, 0, 1279, 1281, 1, 0, 0, 0, 1280, 1264, 1, 0, 0, 0, 1280, 1265, 1, 0, 0, 0, 1280, 1267, 1, 0, 0, 0, 1280, 1276, 1, 0, 0, 0, 1281, 37, 1, 0, 0, 0, 1282, 1284, 3, 108, 54, 0, 1283, 1285, 7, 9, 0, 0, 1284, 1283, 1, 0, 0, 0, 1284, 1285, 1, 0, 0, 0, 1285, 1288, 1, 0, 0, 0, 1286, 1287, 5, 168, 0, 0, 1287, 1289, 7, 10, 0, 0, 1288, 1286, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 39, 1, 0, 0, 0, 1290, 1292, 5, 231, 0, 0, 1291, 1293, 3, 54, 27, 0, 1292, 1291, 1, 0, 0, 0, 1292, 1293, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1299, 3, 56, 28, 0, 1295, 1296, 5, 312, 0, 0, 1296, 1298, 3, 56, 28, 0, 1297, 1295, 1, 0, 0, 0, 1298, 1301, 1, 0, 0, 0, 1299, 1297, 1, 0, 0, 0, 1299, 1300, 1, 0, 0, 0, 1300, 1311, 1, 0, 0, 0, 1301, 1299, 1, 0, 0, 0, 1302, 1303, 5, 88, 0, 0, 1303, 1308, 3, 58, 29, 0, 1304, 1305, 5, 312, 0, 0, 1305, 1307, 3, 58, 29, 0, 1306, 1304, 1, 0, 0, 0, 1307, 1310, 1, 0, 0, 0, 1308, 1306, 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1312, 1, 0, 0, 0, 1310, 1308, 1, 0, 0, 0, 1311, 1302, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1315, 1, 0, 0, 0, 1313, 1314, 5, 285, 0, 0, 1314, 1316, 3, 110, 55, 0, 1315, 1313, 1, 0, 0, 0, 1315, 1316, 1, 0, 0, 0, 1316, 1320, 1, 0, 0, 0, 1317, 1318, 5, 97, 0, 0, 1318, 1319, 5, 19, 0, 0, 1319, 1321, 3, 42, 21, 0, 1320, 1317, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1324, 1, 0, 0, 0, 1322, 1323, 5, 100, 0, 0, 1323, 1325, 3, 110, 55, 0, 1324, 1322, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1335, 1, 0, 0, 0, 1326, 1327, 5, 287, 0, 0, 1327, 1332, 3, 48, 24, 0, 1328, 1329, 5, 312, 0, 0, 1329, 1331, 3, 48, 24, 0, 1330, 1328, 1, 0, 0, 0, 1331, 1334, 1, 0, 0, 0, 1332, 1330, 1, 0, 0, 0, 1332, 1333, 1, 0, 0, 0, 1333, 1336, 1, 0, 0, 0, 1334, 1332, 1, 0, 0, 0, 1335, 1326, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, 41, 1, 0, 0, 0, 1337, 1339, 3, 54, 27, 0, 1338, 1337, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1345, 3, 44, 22, 0, 1341, 1342, 5, 312, 0, 0, 1342, 1344, 3, 44, 22, 0, 1343, 1341, 1, 0, 0, 0, 1344, 1347, 1, 0, 0, 0, 1345, 1343, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 43, 1, 0, 0, 0, 1347, 1345, 1, 0, 0, 0, 1348, 1389, 3, 46, 23, 0, 1349, 1350, 5, 221, 0, 0, 1350, 1359, 5, 313, 0, 0, 1351, 1356, 3, 108, 54, 0, 1352, 1353, 5, 312, 0, 0, 1353, 1355, 3, 108, 54, 0, 1354, 1352, 1, 0, 0, 0, 1355, 1358, 1, 0, 0, 0, 1356, 1354, 1, 0, 0, 0, 1356, 1357, 1, 0, 0, 0, 1357, 1360, 1, 0, 0, 0, 1358, 1356, 1, 0, 0, 0, 1359, 1351, 1, 0, 0, 0, 1359, 1360, 1, 0, 0, 0, 1360, 1361, 1, 0, 0, 0, 1361, 1389, 5, 314, 0, 0, 1362, 1363, 5, 38, 0, 0, 1363, 1372, 5, 313, 0, 0, 1364, 1369, 3, 108, 54, 0, 1365, 1366, 5, 312, 0, 0, 1366, 1368, 3, 108, 54, 0, 1367, 1365, 1, 0, 0, 0, 1368, 1371, 1, 0, 0, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1373, 1, 0, 0, 0, 1371, 1369, 1, 0, 0, 0, 1372, 1364, 1, 0, 0, 0, 1372, 1373, 1, 0, 0, 0, 1373, 1374, 1, 0, 0, 0, 1374, 1389, 5, 314, 0, 0, 1375, 1376, 5, 98, 0, 0, 1376, 1377, 5, 235, 0, 0, 1377, 1378, 5, 313, 0, 0, 1378, 1383, 3, 46, 23, 0, 1379, 1380, 5, 312, 0, 0, 1380, 1382, 3, 46, 23, 0, 1381, 1379, 1, 0, 0, 0, 1382, 1385, 1, 0, 0, 0, 1383, 1381, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1386, 1, 0, 0, 0, 1385, 1383, 1, 0, 0, 0, 1386, 1387, 5, 314, 0, 0, 1387, 1389, 1, 0, 0, 0, 1388, 1348, 1, 0, 0, 0, 1388, 1349, 1, 0, 0, 0, 1388, 1362, 1, 0, 0, 0, 1388, 1375, 1, 0, 0, 0, 1389, 45, 1, 0, 0, 0, 1390, 1399, 5, 313, 0, 0, 1391, 1396, 3, 108, 54, 0, 1392, 1393, 5, 312, 0, 0, 1393, 1395, 3, 108, 54, 0, 1394, 1392, 1, 0, 0, 0, 1395, 1398, 1, 0, 0, 0, 1396, 1394, 1, 0, 0, 0, 1396, 1397, 1, 0, 0, 0, 1397, 1400, 1, 0, 0, 0, 1398, 1396, 1, 0, 0, 0, 1399, 1391, 1, 0, 0, 0, 1399, 1400, 1, 0, 0, 0, 1400, 1401, 1, 0, 0, 0, 1401, 1404, 5, 314, 0, 0, 1402, 1404, 3, 108, 54, 0, 1403, 1390, 1, 0, 0, 0, 1403, 1402, 1, 0, 0, 0, 1404, 47, 1, 0, 0, 0, 1405, 1406, 3, 232, 116, 0, 1406, 1407, 5, 11, 0, 0, 1407, 1408, 5, 313, 0, 0, 1408, 1409, 3, 50, 25, 0, 1409, 1410, 5, 314, 0, 0, 1410, 49, 1, 0, 0, 0, 1411, 1413, 3, 232, 116, 0, 1412, 1411, 1, 0, 0, 0, 1412, 1413, 1, 0, 0, 0, 1413, 1424, 1, 0, 0, 0, 1414, 1415, 5, 184, 0, 0, 1415, 1416, 5, 19, 0, 0, 1416, 1421, 3, 108, 54, 0, 1417, 1418, 5, 312, 0, 0, 1418, 1420, 3, 108, 54, 0, 1419, 1417, 1, 0, 0, 0, 1420, 1423, 1, 0, 0, 0, 1421, 1419, 1, 0, 0, 0, 1421, 1422, 1, 0, 0, 0, 1422, 1425, 1, 0, 0, 0, 1423, 1421, 1, 0, 0, 0, 1424, 1414, 1, 0, 0, 0, 1424, 1425, 1, 0, 0, 0, 1425, 1436, 1, 0, 0, 0, 1426, 1427, 5, 178, 0, 0, 1427, 1428, 5, 19, 0, 0, 1428, 1433, 3, 38, 19, 0, 1429, 1430, 5, 312, 0, 0, 1430, 1432, 3, 38, 19, 0, 1431, 1429, 1, 0, 0, 0, 1432, 1435, 1, 0, 0, 0, 1433, 1431, 1, 0, 0, 0, 1433, 1434, 1, 0, 0, 0, 1434, 1437, 1, 0, 0, 0, 1435, 1433, 1, 0, 0, 0, 1436, 1426, 1, 0, 0, 0, 1436, 1437, 1, 0, 0, 0, 1437, 1439, 1, 0, 0, 0, 1438, 1440, 3, 170, 85, 0, 1439, 1438, 1, 0, 0, 0, 1439, 1440, 1, 0, 0, 0, 1440, 51, 1, 0, 0, 0, 1441, 1443, 3, 232, 116, 0, 1442, 1444, 3, 90, 45, 0, 1443, 1442, 1, 0, 0, 0, 1443, 1444, 1, 0, 0, 0, 1444, 1445, 1, 0, 0, 0, 1445, 1446, 5, 11, 0, 0, 1446, 1447, 5, 313, 0, 0, 1447, 1448, 3, 10, 5, 0, 1448, 1449, 5, 314, 0, 0, 1449, 53, 1, 0, 0, 0, 1450, 1451, 7, 11, 0, 0, 1451, 55, 1, 0, 0, 0, 1452, 1457, 3, 108, 54, 0, 1453, 1455, 5, 11, 0, 0, 1454, 1453, 1, 0, 0, 0, 1454, 1455, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1458, 3, 232, 116, 0, 1457, 1454, 1, 0, 0, 0, 1457, 1458, 1, 0, 0, 0, 1458, 1468, 1, 0, 0, 0, 1459, 1460, 3, 116, 58, 0, 1460, 1461, 5, 310, 0, 0, 1461, 1464, 5, 304, 0, 0, 1462, 1463, 5, 11, 0, 0, 1463, 1465, 3, 90, 45, 0, 1464, 1462, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1468, 1, 0, 0, 0, 1466, 1468, 5, 304, 0, 0, 1467, 1452, 1, 0, 0, 0, 1467, 1459, 1, 0, 0, 0, 1467, 1466, 1, 0, 0, 0, 1468, 57, 1, 0, 0, 0, 1469, 1470, 6, 29, -1, 0, 1470, 1471, 3, 64, 32, 0, 1471, 1490, 1, 0, 0, 0, 1472, 1486, 10, 2, 0, 0, 1473, 1474, 5, 37, 0, 0, 1474, 1475, 5, 119, 0, 0, 1475, 1487, 3, 64, 32, 0, 1476, 1477, 3, 60, 30, 0, 1477, 1478, 5, 119, 0, 0, 1478, 1479, 3, 58, 29, 0, 1479, 1480, 3, 62, 31, 0, 1480, 1487, 1, 0, 0, 0, 1481, 1482, 5, 155, 0, 0, 1482, 1483, 3, 60, 30, 0, 1483, 1484, 5, 119, 0, 0, 1484, 1485, 3, 64, 32, 0, 1485, 1487, 1, 0, 0, 0, 1486, 1473, 1, 0, 0, 0, 1486, 1476, 1, 0, 0, 0, 1486, 1481, 1, 0, 0, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1472, 1, 0, 0, 0, 1489, 1492, 1, 0, 0, 0, 1490, 1488, 1, 0, 0, 0, 1490, 1491, 1, 0, 0, 0, 1491, 59, 1, 0, 0, 0, 1492, 1490, 1, 0, 0, 0, 1493, 1495, 5, 108, 0, 0, 1494, 1493, 1, 0, 0, 0, 1494, 1495, 1, 0, 0, 0, 1495, 1501, 1, 0, 0, 0, 1496, 1498, 7, 12, 0, 0, 1497, 1499, 5, 180, 0, 0, 1498, 1497, 1, 0, 0, 0, 1498, 1499, 1, 0, 0, 0, 1499, 1501, 1, 0, 0, 0, 1500, 1494, 1, 0, 0, 0, 1500, 1496, 1, 0, 0, 0, 1501, 61, 1, 0, 0, 0, 1502, 1503, 5, 173, 0, 0, 1503, 1517, 3, 110, 55, 0, 1504, 1505, 5, 274, 0, 0, 1505, 1506, 5, 313, 0, 0, 1506, 1511, 3, 232, 116, 0, 1507, 1508, 5, 312, 0, 0, 1508, 1510, 3, 232, 116, 0, 1509, 1507, 1, 0, 0, 0, 1510, 1513, 1, 0, 0, 0, 1511, 1509, 1, 0, 0, 0, 1511, 1512, 1, 0, 0, 0, 1512, 1514, 1, 0, 0, 0, 1513, 1511, 1, 0, 0, 0, 1514, 1515, 5, 314, 0, 0, 1515, 1517, 1, 0, 0, 0, 1516, 1502, 1, 0, 0, 0, 1516, 1504, 1, 0, 0, 0, 1517, 63, 1, 0, 0, 0, 1518, 1525, 3, 74, 37, 0, 1519, 1520, 5, 246, 0, 0, 1520, 1521, 3, 66, 33, 0, 1521, 1522, 5, 313, 0, 0, 1522, 1523, 3, 108, 54, 0, 1523, 1524, 5, 314, 0, 0, 1524, 1526, 1, 0, 0, 0, 1525, 1519, 1, 0, 0, 0, 1525, 1526, 1, 0, 0, 0, 1526, 65, 1, 0, 0, 0, 1527, 1528, 7, 13, 0, 0, 1528, 67, 1, 0, 0, 0, 1529, 1530, 7, 14, 0, 0, 1530, 69, 1, 0, 0, 0, 1531, 1538, 5, 72, 0, 0, 1532, 1534, 5, 258, 0, 0, 1533, 1535, 3, 140, 70, 0, 1534, 1533, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1538, 3, 72, 36, 0, 1537, 1531, 1, 0, 0, 0, 1537, 1532, 1, 0, 0, 0, 1538, 71, 1, 0, 0, 0, 1539, 1540, 7, 15, 0, 0, 1540, 1541, 5, 34, 0, 0, 1541, 73, 1, 0, 0, 0, 1542, 1625, 3, 88, 44, 0, 1543, 1544, 5, 149, 0, 0, 1544, 1555, 5, 313, 0, 0, 1545, 1546, 5, 184, 0, 0, 1546, 1547, 5, 19, 0, 0, 1547, 1552, 3, 108, 54, 0, 1548, 1549, 5, 312, 0, 0, 1549, 1551, 3, 108, 54, 0, 1550, 1548, 1, 0, 0, 0, 1551, 1554, 1, 0, 0, 0, 1552, 1550, 1, 0, 0, 0, 1552, 1553, 1, 0, 0, 0, 1553, 1556, 1, 0, 0, 0, 1554, 1552, 1, 0, 0, 0, 1555, 1545, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1567, 1, 0, 0, 0, 1557, 1558, 5, 178, 0, 0, 1558, 1559, 5, 19, 0, 0, 1559, 1564, 3, 38, 19, 0, 1560, 1561, 5, 312, 0, 0, 1561, 1563, 3, 38, 19, 0, 1562, 1560, 1, 0, 0, 0, 1563, 1566, 1, 0, 0, 0, 1564, 1562, 1, 0, 0, 0, 1564, 1565, 1, 0, 0, 0, 1565, 1568, 1, 0, 0, 0, 1566, 1564, 1, 0, 0, 0, 1567, 1557, 1, 0, 0, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1578, 1, 0, 0, 0, 1569, 1570, 5, 151, 0, 0, 1570, 1575, 3, 76, 38, 0, 1571, 1572, 5, 312, 0, 0, 1572, 1574, 3, 76, 38, 0, 1573, 1571, 1, 0, 0, 0, 1574, 1577, 1, 0, 0, 0, 1575, 1573, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1579, 1, 0, 0, 0, 1577, 1575, 1, 0, 0, 0, 1578, 1569, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 1581, 1, 0, 0, 0, 1580, 1582, 3, 78, 39, 0, 1581, 1580, 1, 0, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1586, 1, 0, 0, 0, 1583, 1584, 5, 4, 0, 0, 1584, 1585, 5, 146, 0, 0, 1585, 1587, 3, 82, 41, 0, 1586, 1583, 1, 0, 0, 0, 1586, 1587, 1, 0, 0, 0, 1587, 1589, 1, 0, 0, 0, 1588, 1590, 7, 16, 0, 0, 1589, 1588, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 1591, 1, 0, 0, 0, 1591, 1592, 5, 189, 0, 0, 1592, 1593, 5, 313, 0, 0, 1593, 1594, 3, 176, 88, 0, 1594, 1604, 5, 314, 0, 0, 1595, 1596, 5, 241, 0, 0, 1596, 1601, 3, 84, 42, 0, 1597, 1598, 5, 312, 0, 0, 1598, 1600, 3, 84, 42, 0, 1599, 1597, 1, 0, 0, 0, 1600, 1603, 1, 0, 0, 0, 1601, 1599, 1, 0, 0, 0, 1601, 1602, 1, 0, 0, 0, 1602, 1605, 1, 0, 0, 0, 1603, 1601, 1, 0, 0, 0, 1604, 1595, 1, 0, 0, 0, 1604, 1605, 1, 0, 0, 0, 1605, 1606, 1, 0, 0, 0, 1606, 1607, 5, 54, 0, 0, 1607, 1612, 3, 86, 43, 0, 1608, 1609, 5, 312, 0, 0, 1609, 1611, 3, 86, 43, 0, 1610, 1608, 1, 0, 0, 0, 1611, 1614, 1, 0, 0, 0, 1612, 1610, 1, 0, 0, 0, 1612, 1613, 1, 0, 0, 0, 1613, 1615, 1, 0, 0, 0, 1614, 1612, 1, 0, 0, 0, 1615, 1623, 5, 314, 0, 0, 1616, 1618, 5, 11, 0, 0, 1617, 1616, 1, 0, 0, 0, 1617, 1618, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 1621, 3, 232, 116, 0, 1620, 1622, 3, 90, 45, 0, 1621, 1620, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1622, 1624, 1, 0, 0, 0, 1623, 1617, 1, 0, 0, 0, 1623, 1624, 1, 0, 0, 0, 1624, 1626, 1, 0, 0, 0, 1625, 1543, 1, 0, 0, 0, 1625, 1626, 1, 0, 0, 0, 1626, 75, 1, 0, 0, 0, 1627, 1628, 3, 108, 54, 0, 1628, 1629, 5, 11, 0, 0, 1629, 1630, 3, 232, 116, 0, 1630, 77, 1, 0, 0, 0, 1631, 1632, 5, 174, 0, 0, 1632, 1633, 5, 222, 0, 0, 1633, 1634, 5, 190, 0, 0, 1634, 1643, 5, 146, 0, 0, 1635, 1636, 5, 5, 0, 0, 1636, 1637, 5, 223, 0, 0, 1637, 1638, 5, 190, 0, 0, 1638, 1640, 5, 146, 0, 0, 1639, 1641, 3, 80, 40, 0, 1640, 1639, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1643, 1, 0, 0, 0, 1642, 1631, 1, 0, 0, 0, 1642, 1635, 1, 0, 0, 0, 1643, 79, 1, 0, 0, 0, 1644, 1645, 5, 236, 0, 0, 1645, 1646, 5, 68, 0, 0, 1646, 1654, 5, 148, 0, 0, 1647, 1648, 5, 172, 0, 0, 1648, 1649, 5, 68, 0, 0, 1649, 1654, 5, 148, 0, 0, 1650, 1651, 5, 288, 0, 0, 1651, 1652, 5, 268, 0, 0, 1652, 1654, 5, 223, 0, 0, 1653, 1644, 1, 0, 0, 0, 1653, 1647, 1, 0, 0, 0, 1653, 1650, 1, 0, 0, 0, 1654, 81, 1, 0, 0, 0, 1655, 1668, 5, 237, 0, 0, 1656, 1663, 5, 253, 0, 0, 1657, 1658, 5, 157, 0, 0, 1658, 1664, 5, 222, 0, 0, 1659, 1661, 7, 10, 0, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1664, 3, 232, 116, 0, 1663, 1657, 1, 0, 0, 0, 1663, 1660, 1, 0, 0, 0, 1664, 1669, 1, 0, 0, 0, 1665, 1666, 5, 187, 0, 0, 1666, 1667, 5, 131, 0, 0, 1667, 1669, 5, 222, 0, 0, 1668, 1656, 1, 0, 0, 0, 1668, 1665, 1, 0, 0, 0, 1669, 83, 1, 0, 0, 0, 1670, 1671, 3, 232, 116, 0, 1671, 1672, 5, 296, 0, 0, 1672, 1673, 5, 313, 0, 0, 1673, 1678, 3, 232, 116, 0, 1674, 1675, 5, 312, 0, 0, 1675, 1677, 3, 232, 116, 0, 1676, 1674, 1, 0, 0, 0, 1677, 1680, 1, 0, 0, 0, 1678, 1676, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1681, 1, 0, 0, 0, 1680, 1678, 1, 0, 0, 0, 1681, 1682, 5, 314, 0, 0, 1682, 85, 1, 0, 0, 0, 1683, 1684, 3, 232, 116, 0, 1684, 1685, 5, 11, 0, 0, 1685, 1686, 3, 108, 54, 0, 1686, 87, 1, 0, 0, 0, 1687, 1695, 3, 92, 46, 0, 1688, 1690, 5, 11, 0, 0, 1689, 1688, 1, 0, 0, 0, 1689, 1690, 1, 0, 0, 0, 1690, 1691, 1, 0, 0, 0, 1691, 1693, 3, 232, 116, 0, 1692, 1694, 3, 90, 45, 0, 1693, 1692, 1, 0, 0, 0, 1693, 1694, 1, 0, 0, 0, 1694, 1696, 1, 0, 0, 0, 1695, 1689, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 89, 1, 0, 0, 0, 1697, 1698, 5, 313, 0, 0, 1698, 1703, 3, 232, 116, 0, 1699, 1700, 5, 312, 0, 0, 1700, 1702, 3, 232, 116, 0, 1701, 1699, 1, 0, 0, 0, 1702, 1705, 1, 0, 0, 0, 1703, 1701, 1, 0, 0, 0, 1703, 1704, 1, 0, 0, 0, 1704, 1706, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1706, 1707, 5, 314, 0, 0, 1707, 91, 1, 0, 0, 0, 1708, 1710, 3, 220, 110, 0, 1709, 1711, 3, 222, 111, 0, 1710, 1709, 1, 0, 0, 0, 1710, 1711, 1, 0, 0, 0, 1711, 1746, 1, 0, 0, 0, 1712, 1713, 5, 313, 0, 0, 1713, 1714, 3, 10, 5, 0, 1714, 1715, 5, 314, 0, 0, 1715, 1746, 1, 0, 0, 0, 1716, 1717, 5, 269, 0, 0, 1717, 1718, 5, 313, 0, 0, 1718, 1723, 3, 108, 54, 0, 1719, 1720, 5, 312, 0, 0, 1720, 1722, 3, 108, 54, 0, 1721, 1719, 1, 0, 0, 0, 1722, 1725, 1, 0, 0, 0, 1723, 1721, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1726, 1, 0, 0, 0, 1725, 1723, 1, 0, 0, 0, 1726, 1729, 5, 314, 0, 0, 1727, 1728, 5, 288, 0, 0, 1728, 1730, 5, 179, 0, 0, 1729, 1727, 1, 0, 0, 0, 1729, 1730, 1, 0, 0, 0, 1730, 1746, 1, 0, 0, 0, 1731, 1732, 5, 132, 0, 0, 1732, 1733, 5, 313, 0, 0, 1733, 1734, 3, 10, 5, 0, 1734, 1735, 5, 314, 0, 0, 1735, 1746, 1, 0, 0, 0, 1736, 1737, 5, 244, 0, 0, 1737, 1738, 5, 313, 0, 0, 1738, 1739, 3, 94, 47, 0, 1739, 1740, 5, 314, 0, 0, 1740, 1746, 1, 0, 0, 0, 1741, 1742, 5, 313, 0, 0, 1742, 1743, 3, 58, 29, 0, 1743, 1744, 5, 314, 0, 0, 1744, 1746, 1, 0, 0, 0, 1745, 1708, 1, 0, 0, 0, 1745, 1712, 1, 0, 0, 0, 1745, 1716, 1, 0, 0, 0, 1745, 1731, 1, 0, 0, 0, 1745, 1736, 1, 0, 0, 0, 1745, 1741, 1, 0, 0, 0, 1746, 93, 1, 0, 0, 0, 1747, 1748, 3, 220, 110, 0, 1748, 1757, 5, 313, 0, 0, 1749, 1754, 3, 96, 48, 0, 1750, 1751, 5, 312, 0, 0, 1751, 1753, 3, 96, 48, 0, 1752, 1750, 1, 0, 0, 0, 1753, 1756, 1, 0, 0, 0, 1754, 1752, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1758, 1, 0, 0, 0, 1756, 1754, 1, 0, 0, 0, 1757, 1749, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1768, 1, 0, 0, 0, 1759, 1760, 5, 35, 0, 0, 1760, 1765, 3, 106, 53, 0, 1761, 1762, 5, 312, 0, 0, 1762, 1764, 3, 106, 53, 0, 1763, 1761, 1, 0, 0, 0, 1764, 1767, 1, 0, 0, 0, 1765, 1763, 1, 0, 0, 0, 1765, 1766, 1, 0, 0, 0, 1766, 1769, 1, 0, 0, 0, 1767, 1765, 1, 0, 0, 0, 1768, 1759, 1, 0, 0, 0, 1768, 1769, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1770, 1771, 5, 314, 0, 0, 1771, 95, 1, 0, 0, 0, 1772, 1773, 3, 232, 116, 0, 1773, 1774, 5, 323, 0, 0, 1774, 1776, 1, 0, 0, 0, 1775, 1772, 1, 0, 0, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1780, 1, 0, 0, 0, 1777, 1781, 3, 98, 49, 0, 1778, 1781, 3, 102, 51, 0, 1779, 1781, 3, 108, 54, 0, 1780, 1777, 1, 0, 0, 0, 1780, 1778, 1, 0, 0, 0, 1780, 1779, 1, 0, 0, 0, 1781, 97, 1, 0, 0, 0, 1782, 1800, 3, 100, 50, 0, 1783, 1784, 5, 184, 0, 0, 1784, 1798, 5, 19, 0, 0, 1785, 1794, 5, 313, 0, 0, 1786, 1791, 3, 108, 54, 0, 1787, 1788, 5, 312, 0, 0, 1788, 1790, 3, 108, 54, 0, 1789, 1787, 1, 0, 0, 0, 1790, 1793, 1, 0, 0, 0, 1791, 1789, 1, 0, 0, 0, 1791, 1792, 1, 0, 0, 0, 1792, 1795, 1, 0, 0, 0, 1793, 1791, 1, 0, 0, 0, 1794, 1786, 1, 0, 0, 0, 1794, 1795, 1, 0, 0, 0, 1795, 1796, 1, 0, 0, 0, 1796, 1799, 5, 314, 0, 0, 1797, 1799, 3, 108, 54, 0, 1798, 1785, 1, 0, 0, 0, 1798, 1797, 1, 0, 0, 0, 1799, 1801, 1, 0, 0, 0, 1800, 1783, 1, 0, 0, 0, 1800, 1801, 1, 0, 0, 0, 1801, 1808, 1, 0, 0, 0, 1802, 1803, 5, 200, 0, 0, 1803, 1804, 5, 284, 0, 0, 1804, 1809, 5, 68, 0, 0, 1805, 1806, 5, 127, 0, 0, 1806, 1807, 5, 284, 0, 0, 1807, 1809, 5, 68, 0, 0, 1808, 1802, 1, 0, 0, 0, 1808, 1805, 1, 0, 0, 0, 1808, 1809, 1, 0, 0, 0, 1809, 1826, 1, 0, 0, 0, 1810, 1811, 5, 178, 0, 0, 1811, 1824, 5, 19, 0, 0, 1812, 1813, 5, 313, 0, 0, 1813, 1818, 3, 38, 19, 0, 1814, 1815, 5, 312, 0, 0, 1815, 1817, 3, 38, 19, 0, 1816, 1814, 1, 0, 0, 0, 1817, 1820, 1, 0, 0, 0, 1818, 1816, 1, 0, 0, 0, 1818, 1819, 1, 0, 0, 0, 1819, 1821, 1, 0, 0, 0, 1820, 1818, 1, 0, 0, 0, 1821, 1822, 5, 314, 0, 0, 1822, 1825, 1, 0, 0, 0, 1823, 1825, 3, 38, 19, 0, 1824, 1812, 1, 0, 0, 0, 1824, 1823, 1, 0, 0, 0, 1825, 1827, 1, 0, 0, 0, 1826, 1810, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 99, 1, 0, 0, 0, 1828, 1829, 5, 244, 0, 0, 1829, 1830, 5, 313, 0, 0, 1830, 1831, 3, 220, 110, 0, 1831, 1839, 5, 314, 0, 0, 1832, 1834, 5, 11, 0, 0, 1833, 1832, 1, 0, 0, 0, 1833, 1834, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1837, 3, 232, 116, 0, 1836, 1838, 3, 90, 45, 0, 1837, 1836, 1, 0, 0, 0, 1837, 1838, 1, 0, 0, 0, 1838, 1840, 1, 0, 0, 0, 1839, 1833, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1855, 1, 0, 0, 0, 1841, 1842, 5, 244, 0, 0, 1842, 1843, 5, 313, 0, 0, 1843, 1844, 3, 10, 5, 0, 1844, 1852, 5, 314, 0, 0, 1845, 1847, 5, 11, 0, 0, 1846, 1845, 1, 0, 0, 0, 1846, 1847, 1, 0, 0, 0, 1847, 1848, 1, 0, 0, 0, 1848, 1850, 3, 232, 116, 0, 1849, 1851, 3, 90, 45, 0, 1850, 1849, 1, 0, 0, 0, 1850, 1851, 1, 0, 0, 0, 1851, 1853, 1, 0, 0, 0, 1852, 1846, 1, 0, 0, 0, 1852, 1853, 1, 0, 0, 0, 1853, 1855, 1, 0, 0, 0, 1854, 1828, 1, 0, 0, 0, 1854, 1841, 1, 0, 0, 0, 1855, 101, 1, 0, 0, 0, 1856, 1857, 5, 60, 0, 0, 1857, 1858, 5, 313, 0, 0, 1858, 1863, 3, 104, 52, 0, 1859, 1860, 5, 312, 0, 0, 1860, 1862, 3, 104, 52, 0, 1861, 1859, 1, 0, 0, 0, 1862, 1865, 1, 0, 0, 0, 1863, 1861, 1, 0, 0, 0, 1863, 1864, 1, 0, 0, 0, 1864, 1866, 1, 0, 0, 0, 1865, 1863, 1, 0, 0, 0, 1866, 1867, 5, 314, 0, 0, 1867, 1875, 1, 0, 0, 0, 1868, 1869, 5, 24, 0, 0, 1869, 1870, 5, 313, 0, 0, 1870, 1871, 5, 166, 0, 0, 1871, 1872, 5, 11, 0, 0, 1872, 1873, 5, 60, 0, 0, 1873, 1875, 5, 314, 0, 0, 1874, 1856, 1, 0, 0, 0, 1874, 1868, 1, 0, 0, 0, 1875, 103, 1, 0, 0, 0, 1876, 1878, 3, 232, 116, 0, 1877, 1879, 3, 156, 78, 0, 1878, 1877, 1, 0, 0, 0, 1878, 1879, 1, 0, 0, 0, 1879, 105, 1, 0, 0, 0, 1880, 1881, 5, 313, 0, 0, 1881, 1882, 3, 220, 110, 0, 1882, 1883, 5, 312, 0, 0, 1883, 1888, 3, 220, 110, 0, 1884, 1885, 5, 312, 0, 0, 1885, 1887, 3, 220, 110, 0, 1886, 1884, 1, 0, 0, 0, 1887, 1890, 1, 0, 0, 0, 1888, 1886, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 1891, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1891, 1892, 5, 314, 0, 0, 1892, 107, 1, 0, 0, 0, 1893, 1894, 3, 110, 55, 0, 1894, 109, 1, 0, 0, 0, 1895, 1896, 6, 55, -1, 0, 1896, 1898, 3, 114, 57, 0, 1897, 1899, 3, 112, 56, 0, 1898, 1897, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 1903, 1, 0, 0, 0, 1900, 1901, 5, 165, 0, 0, 1901, 1903, 3, 110, 55, 3, 1902, 1895, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1903, 1912, 1, 0, 0, 0, 1904, 1905, 10, 2, 0, 0, 1905, 1906, 5, 8, 0, 0, 1906, 1911, 3, 110, 55, 3, 1907, 1908, 10, 1, 0, 0, 1908, 1909, 5, 177, 0, 0, 1909, 1911, 3, 110, 55, 2, 1910, 1904, 1, 0, 0, 0, 1910, 1907, 1, 0, 0, 0, 1911, 1914, 1, 0, 0, 0, 1912, 1910, 1, 0, 0, 0, 1912, 1913, 1, 0, 0, 0, 1913, 111, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1915, 1916, 3, 144, 72, 0, 1916, 1917, 3, 114, 57, 0, 1917, 1977, 1, 0, 0, 0, 1918, 1919, 3, 144, 72, 0, 1919, 1920, 3, 146, 73, 0, 1920, 1921, 5, 313, 0, 0, 1921, 1922, 3, 10, 5, 0, 1922, 1923, 5, 314, 0, 0, 1923, 1977, 1, 0, 0, 0, 1924, 1926, 5, 165, 0, 0, 1925, 1924, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1928, 5, 17, 0, 0, 1928, 1929, 3, 114, 57, 0, 1929, 1930, 5, 8, 0, 0, 1930, 1931, 3, 114, 57, 0, 1931, 1977, 1, 0, 0, 0, 1932, 1934, 5, 165, 0, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1936, 5, 105, 0, 0, 1936, 1937, 5, 313, 0, 0, 1937, 1942, 3, 108, 54, 0, 1938, 1939, 5, 312, 0, 0, 1939, 1941, 3, 108, 54, 0, 1940, 1938, 1, 0, 0, 0, 1941, 1944, 1, 0, 0, 0, 1942, 1940, 1, 0, 0, 0, 1942, 1943, 1, 0, 0, 0, 1943, 1945, 1, 0, 0, 0, 1944, 1942, 1, 0, 0, 0, 1945, 1946, 5, 314, 0, 0, 1946, 1977, 1, 0, 0, 0, 1947, 1949, 5, 165, 0, 0, 1948, 1947, 1, 0, 0, 0, 1948, 1949, 1, 0, 0, 0, 1949, 1950, 1, 0, 0, 0, 1950, 1951, 5, 105, 0, 0, 1951, 1952, 5, 313, 0, 0, 1952, 1953, 3, 10, 5, 0, 1953, 1954, 5, 314, 0, 0, 1954, 1977, 1, 0, 0, 0, 1955, 1957, 5, 165, 0, 0, 1956, 1955, 1, 0, 0, 0, 1956, 1957, 1, 0, 0, 0, 1957, 1958, 1, 0, 0, 0, 1958, 1959, 5, 137, 0, 0, 1959, 1962, 3, 114, 57, 0, 1960, 1961, 5, 73, 0, 0, 1961, 1963, 3, 114, 57, 0, 1962, 1960, 1, 0, 0, 0, 1962, 1963, 1, 0, 0, 0, 1963, 1977, 1, 0, 0, 0, 1964, 1966, 5, 116, 0, 0, 1965, 1967, 5, 165, 0, 0, 1966, 1965, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1977, 5, 166, 0, 0, 1969, 1971, 5, 116, 0, 0, 1970, 1972, 5, 165, 0, 0, 1971, 1970, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1974, 5, 62, 0, 0, 1974, 1975, 5, 88, 0, 0, 1975, 1977, 3, 114, 57, 0, 1976, 1915, 1, 0, 0, 0, 1976, 1918, 1, 0, 0, 0, 1976, 1925, 1, 0, 0, 0, 1976, 1933, 1, 0, 0, 0, 1976, 1948, 1, 0, 0, 0, 1976, 1956, 1, 0, 0, 0, 1976, 1964, 1, 0, 0, 0, 1976, 1969, 1, 0, 0, 0, 1977, 113, 1, 0, 0, 0, 1978, 1979, 6, 57, -1, 0, 1979, 1983, 3, 116, 58, 0, 1980, 1981, 7, 17, 0, 0, 1981, 1983, 3, 114, 57, 4, 1982, 1978, 1, 0, 0, 0, 1982, 1980, 1, 0, 0, 0, 1983, 1998, 1, 0, 0, 0, 1984, 1985, 10, 3, 0, 0, 1985, 1986, 7, 18, 0, 0, 1986, 1997, 3, 114, 57, 4, 1987, 1988, 10, 2, 0, 0, 1988, 1989, 7, 17, 0, 0, 1989, 1997, 3, 114, 57, 3, 1990, 1991, 10, 1, 0, 0, 1991, 1992, 5, 307, 0, 0, 1992, 1997, 3, 114, 57, 2, 1993, 1994, 10, 5, 0, 0, 1994, 1995, 5, 13, 0, 0, 1995, 1997, 3, 142, 71, 0, 1996, 1984, 1, 0, 0, 0, 1996, 1987, 1, 0, 0, 0, 1996, 1990, 1, 0, 0, 0, 1996, 1993, 1, 0, 0, 0, 1997, 2000, 1, 0, 0, 0, 1998, 1996, 1, 0, 0, 0, 1998, 1999, 1, 0, 0, 0, 1999, 115, 1, 0, 0, 0, 2000, 1998, 1, 0, 0, 0, 2001, 2002, 6, 58, -1, 0, 2002, 2455, 5, 166, 0, 0, 2003, 2455, 3, 150, 75, 0, 2004, 2005, 3, 232, 116, 0, 2005, 2006, 3, 140, 70, 0, 2006, 2455, 1, 0, 0, 0, 2007, 2008, 5, 65, 0, 0, 2008, 2009, 5, 196, 0, 0, 2009, 2455, 3, 140, 70, 0, 2010, 2455, 3, 234, 117, 0, 2011, 2455, 3, 148, 74, 0, 2012, 2455, 3, 140, 70, 0, 2013, 2455, 5, 329, 0, 0, 2014, 2455, 5, 308, 0, 0, 2015, 2016, 5, 194, 0, 0, 2016, 2017, 5, 313, 0, 0, 2017, 2018, 3, 114, 57, 0, 2018, 2019, 5, 105, 0, 0, 2019, 2020, 3, 114, 57, 0, 2020, 2021, 5, 314, 0, 0, 2021, 2455, 1, 0, 0, 0, 2022, 2023, 5, 313, 0, 0, 2023, 2026, 3, 108, 54, 0, 2024, 2025, 5, 312, 0, 0, 2025, 2027, 3, 108, 54, 0, 2026, 2024, 1, 0, 0, 0, 2027, 2028, 1, 0, 0, 0, 2028, 2026, 1, 0, 0, 0, 2028, 2029, 1, 0, 0, 0, 2029, 2030, 1, 0, 0, 0, 2030, 2031, 5, 314, 0, 0, 2031, 2455, 1, 0, 0, 0, 2032, 2033, 5, 222, 0, 0, 2033, 2034, 5, 313, 0, 0, 2034, 2039, 3, 108, 54, 0, 2035, 2036, 5, 312, 0, 0, 2036, 2038, 3, 108, 54, 0, 2037, 2035, 1, 0, 0, 0, 2038, 2041, 1, 0, 0, 0, 2039, 2037, 1, 0, 0, 0, 2039, 2040, 1, 0, 0, 0, 2040, 2042, 1, 0, 0, 0, 2041, 2039, 1, 0, 0, 0, 2042, 2043, 5, 314, 0, 0, 2043, 2455, 1, 0, 0, 0, 2044, 2045, 5, 139, 0, 0, 2045, 2047, 5, 313, 0, 0, 2046, 2048, 3, 54, 27, 0, 2047, 2046, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2052, 3, 108, 54, 0, 2050, 2051, 5, 312, 0, 0, 2051, 2053, 3, 140, 70, 0, 2052, 2050, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 2057, 1, 0, 0, 0, 2054, 2055, 5, 173, 0, 0, 2055, 2056, 5, 183, 0, 0, 2056, 2058, 3, 70, 35, 0, 2057, 2054, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2060, 5, 314, 0, 0, 2060, 2061, 5, 289, 0, 0, 2061, 2062, 5, 97, 0, 0, 2062, 2063, 5, 313, 0, 0, 2063, 2064, 5, 178, 0, 0, 2064, 2065, 5, 19, 0, 0, 2065, 2070, 3, 38, 19, 0, 2066, 2067, 5, 312, 0, 0, 2067, 2069, 3, 38, 19, 0, 2068, 2066, 1, 0, 0, 0, 2069, 2072, 1, 0, 0, 0, 2070, 2068, 1, 0, 0, 0, 2070, 2071, 1, 0, 0, 0, 2071, 2073, 1, 0, 0, 0, 2072, 2070, 1, 0, 0, 0, 2073, 2074, 5, 314, 0, 0, 2074, 2076, 1, 0, 0, 0, 2075, 2077, 3, 164, 82, 0, 2076, 2075, 1, 0, 0, 0, 2076, 2077, 1, 0, 0, 0, 2077, 2455, 1, 0, 0, 0, 2078, 2080, 3, 136, 68, 0, 2079, 2078, 1, 0, 0, 0, 2079, 2080, 1, 0, 0, 0, 2080, 2081, 1, 0, 0, 0, 2081, 2082, 3, 220, 110, 0, 2082, 2086, 5, 313, 0, 0, 2083, 2084, 3, 232, 116, 0, 2084, 2085, 5, 310, 0, 0, 2085, 2087, 1, 0, 0, 0, 2086, 2083, 1, 0, 0, 0, 2086, 2087, 1, 0, 0, 0, 2087, 2088, 1, 0, 0, 0, 2088, 2089, 5, 304, 0, 0, 2089, 2091, 5, 314, 0, 0, 2090, 2092, 3, 164, 82, 0, 2091, 2090, 1, 0, 0, 0, 2091, 2092, 1, 0, 0, 0, 2092, 2094, 1, 0, 0, 0, 2093, 2095, 3, 168, 84, 0, 2094, 2093, 1, 0, 0, 0, 2094, 2095, 1, 0, 0, 0, 2095, 2455, 1, 0, 0, 0, 2096, 2098, 3, 136, 68, 0, 2097, 2096, 1, 0, 0, 0, 2097, 2098, 1, 0, 0, 0, 2098, 2099, 1, 0, 0, 0, 2099, 2100, 3, 220, 110, 0, 2100, 2112, 5, 313, 0, 0, 2101, 2103, 3, 54, 27, 0, 2102, 2101, 1, 0, 0, 0, 2102, 2103, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2109, 3, 108, 54, 0, 2105, 2106, 5, 312, 0, 0, 2106, 2108, 3, 108, 54, 0, 2107, 2105, 1, 0, 0, 0, 2108, 2111, 1, 0, 0, 0, 2109, 2107, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2113, 1, 0, 0, 0, 2111, 2109, 1, 0, 0, 0, 2112, 2102, 1, 0, 0, 0, 2112, 2113, 1, 0, 0, 0, 2113, 2124, 1, 0, 0, 0, 2114, 2115, 5, 178, 0, 0, 2115, 2116, 5, 19, 0, 0, 2116, 2121, 3, 38, 19, 0, 2117, 2118, 5, 312, 0, 0, 2118, 2120, 3, 38, 19, 0, 2119, 2117, 1, 0, 0, 0, 2120, 2123, 1, 0, 0, 0, 2121, 2119, 1, 0, 0, 0, 2121, 2122, 1, 0, 0, 0, 2122, 2125, 1, 0, 0, 0, 2123, 2121, 1, 0, 0, 0, 2124, 2114, 1, 0, 0, 0, 2124, 2125, 1, 0, 0, 0, 2125, 2126, 1, 0, 0, 0, 2126, 2128, 5, 314, 0, 0, 2127, 2129, 3, 164, 82, 0, 2128, 2127, 1, 0, 0, 0, 2128, 2129, 1, 0, 0, 0, 2129, 2134, 1, 0, 0, 0, 2130, 2132, 3, 138, 69, 0, 2131, 2130, 1, 0, 0, 0, 2131, 2132, 1, 0, 0, 0, 2132, 2133, 1, 0, 0, 0, 2133, 2135, 3, 168, 84, 0, 2134, 2131, 1, 0, 0, 0, 2134, 2135, 1, 0, 0, 0, 2135, 2455, 1, 0, 0, 0, 2136, 2137, 3, 232, 116, 0, 2137, 2138, 3, 168, 84, 0, 2138, 2455, 1, 0, 0, 0, 2139, 2140, 3, 232, 116, 0, 2140, 2141, 5, 322, 0, 0, 2141, 2142, 3, 108, 54, 0, 2142, 2455, 1, 0, 0, 0, 2143, 2152, 5, 313, 0, 0, 2144, 2149, 3, 232, 116, 0, 2145, 2146, 5, 312, 0, 0, 2146, 2148, 3, 232, 116, 0, 2147, 2145, 1, 0, 0, 0, 2148, 2151, 1, 0, 0, 0, 2149, 2147, 1, 0, 0, 0, 2149, 2150, 1, 0, 0, 0, 2150, 2153, 1, 0, 0, 0, 2151, 2149, 1, 0, 0, 0, 2152, 2144, 1, 0, 0, 0, 2152, 2153, 1, 0, 0, 0, 2153, 2154, 1, 0, 0, 0, 2154, 2155, 5, 314, 0, 0, 2155, 2156, 5, 322, 0, 0, 2156, 2455, 3, 108, 54, 0, 2157, 2158, 5, 313, 0, 0, 2158, 2159, 3, 10, 5, 0, 2159, 2160, 5, 314, 0, 0, 2160, 2455, 1, 0, 0, 0, 2161, 2162, 5, 77, 0, 0, 2162, 2163, 5, 313, 0, 0, 2163, 2164, 3, 10, 5, 0, 2164, 2165, 5, 314, 0, 0, 2165, 2455, 1, 0, 0, 0, 2166, 2167, 5, 23, 0, 0, 2167, 2169, 3, 108, 54, 0, 2168, 2170, 3, 162, 81, 0, 2169, 2168, 1, 0, 0, 0, 2170, 2171, 1, 0, 0, 0, 2171, 2169, 1, 0, 0, 0, 2171, 2172, 1, 0, 0, 0, 2172, 2175, 1, 0, 0, 0, 2173, 2174, 5, 67, 0, 0, 2174, 2176, 3, 108, 54, 0, 2175, 2173, 1, 0, 0, 0, 2175, 2176, 1, 0, 0, 0, 2176, 2177, 1, 0, 0, 0, 2177, 2178, 5, 71, 0, 0, 2178, 2455, 1, 0, 0, 0, 2179, 2181, 5, 23, 0, 0, 2180, 2182, 3, 162, 81, 0, 2181, 2180, 1, 0, 0, 0, 2182, 2183, 1, 0, 0, 0, 2183, 2181, 1, 0, 0, 0, 2183, 2184, 1, 0, 0, 0, 2184, 2187, 1, 0, 0, 0, 2185, 2186, 5, 67, 0, 0, 2186, 2188, 3, 108, 54, 0, 2187, 2185, 1, 0, 0, 0, 2187, 2188, 1, 0, 0, 0, 2188, 2189, 1, 0, 0, 0, 2189, 2190, 5, 71, 0, 0, 2190, 2455, 1, 0, 0, 0, 2191, 2192, 5, 24, 0, 0, 2192, 2193, 5, 313, 0, 0, 2193, 2194, 3, 108, 54, 0, 2194, 2195, 5, 11, 0, 0, 2195, 2196, 3, 156, 78, 0, 2196, 2197, 5, 314, 0, 0, 2197, 2455, 1, 0, 0, 0, 2198, 2199, 5, 259, 0, 0, 2199, 2200, 5, 313, 0, 0, 2200, 2201, 3, 108, 54, 0, 2201, 2202, 5, 11, 0, 0, 2202, 2203, 3, 156, 78, 0, 2203, 2204, 5, 314, 0, 0, 2204, 2455, 1, 0, 0, 0, 2205, 2206, 5, 10, 0, 0, 2206, 2215, 5, 315, 0, 0, 2207, 2212, 3, 108, 54, 0, 2208, 2209, 5, 312, 0, 0, 2209, 2211, 3, 108, 54, 0, 2210, 2208, 1, 0, 0, 0, 2211, 2214, 1, 0, 0, 0, 2212, 2210, 1, 0, 0, 0, 2212, 2213, 1, 0, 0, 0, 2213, 2216, 1, 0, 0, 0, 2214, 2212, 1, 0, 0, 0, 2215, 2207, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2217, 1, 0, 0, 0, 2217, 2455, 5, 316, 0, 0, 2218, 2455, 3, 232, 116, 0, 2219, 2455, 5, 41, 0, 0, 2220, 2224, 5, 45, 0, 0, 2221, 2222, 5, 313, 0, 0, 2222, 2223, 5, 330, 0, 0, 2223, 2225, 5, 314, 0, 0, 2224, 2221, 1, 0, 0, 0, 2224, 2225, 1, 0, 0, 0, 2225, 2455, 1, 0, 0, 0, 2226, 2230, 5, 46, 0, 0, 2227, 2228, 5, 313, 0, 0, 2228, 2229, 5, 330, 0, 0, 2229, 2231, 5, 314, 0, 0, 2230, 2227, 1, 0, 0, 0, 2230, 2231, 1, 0, 0, 0, 2231, 2455, 1, 0, 0, 0, 2232, 2236, 5, 141, 0, 0, 2233, 2234, 5, 313, 0, 0, 2234, 2235, 5, 330, 0, 0, 2235, 2237, 5, 314, 0, 0, 2236, 2233, 1, 0, 0, 0, 2236, 2237, 1, 0, 0, 0, 2237, 2455, 1, 0, 0, 0, 2238, 2242, 5, 142, 0, 0, 2239, 2240, 5, 313, 0, 0, 2240, 2241, 5, 330, 0, 0, 2241, 2243, 5, 314, 0, 0, 2242, 2239, 1, 0, 0, 0, 2242, 2243, 1, 0, 0, 0, 2243, 2455, 1, 0, 0, 0, 2244, 2455, 5, 47, 0, 0, 2245, 2455, 5, 40, 0, 0, 2246, 2455, 5, 44, 0, 0, 2247, 2455, 5, 42, 0, 0, 2248, 2249, 5, 256, 0, 0, 2249, 2257, 5, 313, 0, 0, 2250, 2252, 3, 68, 34, 0, 2251, 2250, 1, 0, 0, 0, 2251, 2252, 1, 0, 0, 0, 2252, 2254, 1, 0, 0, 0, 2253, 2255, 3, 114, 57, 0, 2254, 2253, 1, 0, 0, 0, 2254, 2255, 1, 0, 0, 0, 2255, 2256, 1, 0, 0, 0, 2256, 2258, 5, 88, 0, 0, 2257, 2251, 1, 0, 0, 0, 2257, 2258, 1, 0, 0, 0, 2258, 2259, 1, 0, 0, 0, 2259, 2260, 3, 114, 57, 0, 2260, 2261, 5, 314, 0, 0, 2261, 2455, 1, 0, 0, 0, 2262, 2263, 5, 256, 0, 0, 2263, 2264, 5, 313, 0, 0, 2264, 2265, 3, 114, 57, 0, 2265, 2266, 5, 312, 0, 0, 2266, 2267, 3, 114, 57, 0, 2267, 2268, 5, 314, 0, 0, 2268, 2455, 1, 0, 0, 0, 2269, 2270, 5, 242, 0, 0, 2270, 2271, 5, 313, 0, 0, 2271, 2272, 3, 114, 57, 0, 2272, 2273, 5, 88, 0, 0, 2273, 2276, 3, 114, 57, 0, 2274, 2275, 5, 86, 0, 0, 2275, 2277, 3, 114, 57, 0, 2276, 2274, 1, 0, 0, 0, 2276, 2277, 1, 0, 0, 0, 2277, 2278, 1, 0, 0, 0, 2278, 2279, 5, 314, 0, 0, 2279, 2455, 1, 0, 0, 0, 2280, 2281, 5, 164, 0, 0, 2281, 2282, 5, 313, 0, 0, 2282, 2285, 3, 114, 57, 0, 2283, 2284, 5, 312, 0, 0, 2284, 2286, 3, 154, 77, 0, 2285, 2283, 1, 0, 0, 0, 2285, 2286, 1, 0, 0, 0, 2286, 2287, 1, 0, 0, 0, 2287, 2288, 5, 314, 0, 0, 2288, 2455, 1, 0, 0, 0, 2289, 2290, 5, 79, 0, 0, 2290, 2291, 5, 313, 0, 0, 2291, 2292, 3, 232, 116, 0, 2292, 2293, 5, 88, 0, 0, 2293, 2294, 3, 114, 57, 0, 2294, 2295, 5, 314, 0, 0, 2295, 2455, 1, 0, 0, 0, 2296, 2297, 5, 313, 0, 0, 2297, 2298, 3, 108, 54, 0, 2298, 2299, 5, 314, 0, 0, 2299, 2455, 1, 0, 0, 0, 2300, 2301, 5, 98, 0, 0, 2301, 2310, 5, 313, 0, 0, 2302, 2307, 3, 220, 110, 0, 2303, 2304, 5, 312, 0, 0, 2304, 2306, 3, 220, 110, 0, 2305, 2303, 1, 0, 0, 0, 2306, 2309, 1, 0, 0, 0, 2307, 2305, 1, 0, 0, 0, 2307, 2308, 1, 0, 0, 0, 2308, 2311, 1, 0, 0, 0, 2309, 2307, 1, 0, 0, 0, 2310, 2302, 1, 0, 0, 0, 2310, 2311, 1, 0, 0, 0, 2311, 2312, 1, 0, 0, 0, 2312, 2455, 5, 314, 0, 0, 2313, 2314, 5, 122, 0, 0, 2314, 2315, 5, 313, 0, 0, 2315, 2320, 3, 118, 59, 0, 2316, 2317, 3, 126, 63, 0, 2317, 2318, 5, 173, 0, 0, 2318, 2319, 5, 72, 0, 0, 2319, 2321, 1, 0, 0, 0, 2320, 2316, 1, 0, 0, 0, 2320, 2321, 1, 0, 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 2323, 5, 314, 0, 0, 2323, 2455, 1, 0, 0, 0, 2324, 2325, 5, 126, 0, 0, 2325, 2326, 5, 313, 0, 0, 2326, 2329, 3, 118, 59, 0, 2327, 2328, 5, 214, 0, 0, 2328, 2330, 3, 156, 78, 0, 2329, 2327, 1, 0, 0, 0, 2329, 2330, 1, 0, 0, 0, 2330, 2335, 1, 0, 0, 0, 2331, 2332, 3, 128, 64, 0, 2332, 2333, 5, 173, 0, 0, 2333, 2334, 5, 68, 0, 0, 2334, 2336, 1, 0, 0, 0, 2335, 2331, 1, 0, 0, 0, 2335, 2336, 1, 0, 0, 0, 2336, 2341, 1, 0, 0, 0, 2337, 2338, 3, 128, 64, 0, 2338, 2339, 5, 173, 0, 0, 2339, 2340, 5, 72, 0, 0, 2340, 2342, 1, 0, 0, 0, 2341, 2337, 1, 0, 0, 0, 2341, 2342, 1, 0, 0, 0, 2342, 2343, 1, 0, 0, 0, 2343, 2344, 5, 314, 0, 0, 2344, 2455, 1, 0, 0, 0, 2345, 2346, 5, 124, 0, 0, 2346, 2347, 5, 313, 0, 0, 2347, 2354, 3, 118, 59, 0, 2348, 2349, 5, 214, 0, 0, 2349, 2352, 3, 156, 78, 0, 2350, 2351, 5, 87, 0, 0, 2351, 2353, 3, 122, 61, 0, 2352, 2350, 1, 0, 0, 0, 2352, 2353, 1, 0, 0, 0, 2353, 2355, 1, 0, 0, 0, 2354, 2348, 1, 0, 0, 0, 2354, 2355, 1, 0, 0, 0, 2355, 2359, 1, 0, 0, 0, 2356, 2357, 3, 130, 65, 0, 2357, 2358, 5, 292, 0, 0, 2358, 2360, 1, 0, 0, 0, 2359, 2356, 1, 0, 0, 0, 2359, 2360, 1, 0, 0, 0, 2360, 2368, 1, 0, 0, 0, 2361, 2362, 7, 19, 0, 0, 2362, 2366, 5, 201, 0, 0, 2363, 2364, 5, 173, 0, 0, 2364, 2365, 5, 225, 0, 0, 2365, 2367, 5, 248, 0, 0, 2366, 2363, 1, 0, 0, 0, 2366, 2367, 1, 0, 0, 0, 2367, 2369, 1, 0, 0, 0, 2368, 2361, 1, 0, 0, 0, 2368, 2369, 1, 0, 0, 0, 2369, 2374, 1, 0, 0, 0, 2370, 2371, 3, 132, 66, 0, 2371, 2372, 5, 173, 0, 0, 2372, 2373, 5, 68, 0, 0, 2373, 2375, 1, 0, 0, 0, 2374, 2370, 1, 0, 0, 0, 2374, 2375, 1, 0, 0, 0, 2375, 2380, 1, 0, 0, 0, 2376, 2377, 3, 132, 66, 0, 2377, 2378, 5, 173, 0, 0, 2378, 2379, 5, 72, 0, 0, 2379, 2381, 1, 0, 0, 0, 2380, 2376, 1, 0, 0, 0, 2380, 2381, 1, 0, 0, 0, 2381, 2382, 1, 0, 0, 0, 2382, 2383, 5, 314, 0, 0, 2383, 2455, 1, 0, 0, 0, 2384, 2385, 5, 123, 0, 0, 2385, 2414, 5, 313, 0, 0, 2386, 2391, 3, 134, 67, 0, 2387, 2388, 5, 312, 0, 0, 2388, 2390, 3, 134, 67, 0, 2389, 2387, 1, 0, 0, 0, 2390, 2393, 1, 0, 0, 0, 2391, 2389, 1, 0, 0, 0, 2391, 2392, 1, 0, 0, 0, 2392, 2400, 1, 0, 0, 0, 2393, 2391, 1, 0, 0, 0, 2394, 2395, 5, 166, 0, 0, 2395, 2396, 5, 173, 0, 0, 2396, 2401, 5, 166, 0, 0, 2397, 2398, 5, 1, 0, 0, 2398, 2399, 5, 173, 0, 0, 2399, 2401, 5, 166, 0, 0, 2400, 2394, 1, 0, 0, 0, 2400, 2397, 1, 0, 0, 0, 2400, 2401, 1, 0, 0, 0, 2401, 2412, 1, 0, 0, 0, 2402, 2403, 5, 288, 0, 0, 2403, 2405, 5, 266, 0, 0, 2404, 2406, 5, 129, 0, 0, 2405, 2404, 1, 0, 0, 0, 2405, 2406, 1, 0, 0, 0, 2406, 2413, 1, 0, 0, 0, 2407, 2408, 5, 290, 0, 0, 2408, 2410, 5, 266, 0, 0, 2409, 2411, 5, 129, 0, 0, 2410, 2409, 1, 0, 0, 0, 2410, 2411, 1, 0, 0, 0, 2411, 2413, 1, 0, 0, 0, 2412, 2402, 1, 0, 0, 0, 2412, 2407, 1, 0, 0, 0, 2412, 2413, 1, 0, 0, 0, 2413, 2415, 1, 0, 0, 0, 2414, 2386, 1, 0, 0, 0, 2414, 2415, 1, 0, 0, 0, 2415, 2422, 1, 0, 0, 0, 2416, 2417, 5, 214, 0, 0, 2417, 2420, 3, 156, 78, 0, 2418, 2419, 5, 87, 0, 0, 2419, 2421, 3, 122, 61, 0, 2420, 2418, 1, 0, 0, 0, 2420, 2421, 1, 0, 0, 0, 2421, 2423, 1, 0, 0, 0, 2422, 2416, 1, 0, 0, 0, 2422, 2423, 1, 0, 0, 0, 2423, 2424, 1, 0, 0, 0, 2424, 2455, 5, 314, 0, 0, 2425, 2426, 5, 121, 0, 0, 2426, 2443, 5, 313, 0, 0, 2427, 2432, 3, 120, 60, 0, 2428, 2429, 5, 312, 0, 0, 2429, 2431, 3, 120, 60, 0, 2430, 2428, 1, 0, 0, 0, 2431, 2434, 1, 0, 0, 0, 2432, 2430, 1, 0, 0, 0, 2432, 2433, 1, 0, 0, 0, 2433, 2441, 1, 0, 0, 0, 2434, 2432, 1, 0, 0, 0, 2435, 2436, 5, 166, 0, 0, 2436, 2437, 5, 173, 0, 0, 2437, 2442, 5, 166, 0, 0, 2438, 2439, 5, 1, 0, 0, 2439, 2440, 5, 173, 0, 0, 2440, 2442, 5, 166, 0, 0, 2441, 2435, 1, 0, 0, 0, 2441, 2438, 1, 0, 0, 0, 2441, 2442, 1, 0, 0, 0, 2442, 2444, 1, 0, 0, 0, 2443, 2427, 1, 0, 0, 0, 2443, 2444, 1, 0, 0, 0, 2444, 2451, 1, 0, 0, 0, 2445, 2446, 5, 214, 0, 0, 2446, 2449, 3, 156, 78, 0, 2447, 2448, 5, 87, 0, 0, 2448, 2450, 3, 122, 61, 0, 2449, 2447, 1, 0, 0, 0, 2449, 2450, 1, 0, 0, 0, 2450, 2452, 1, 0, 0, 0, 2451, 2445, 1, 0, 0, 0, 2451, 2452, 1, 0, 0, 0, 2452, 2453, 1, 0, 0, 0, 2453, 2455, 5, 314, 0, 0, 2454, 2001, 1, 0, 0, 0, 2454, 2003, 1, 0, 0, 0, 2454, 2004, 1, 0, 0, 0, 2454, 2007, 1, 0, 0, 0, 2454, 2010, 1, 0, 0, 0, 2454, 2011, 1, 0, 0, 0, 2454, 2012, 1, 0, 0, 0, 2454, 2013, 1, 0, 0, 0, 2454, 2014, 1, 0, 0, 0, 2454, 2015, 1, 0, 0, 0, 2454, 2022, 1, 0, 0, 0, 2454, 2032, 1, 0, 0, 0, 2454, 2044, 1, 0, 0, 0, 2454, 2079, 1, 0, 0, 0, 2454, 2097, 1, 0, 0, 0, 2454, 2136, 1, 0, 0, 0, 2454, 2139, 1, 0, 0, 0, 2454, 2143, 1, 0, 0, 0, 2454, 2157, 1, 0, 0, 0, 2454, 2161, 1, 0, 0, 0, 2454, 2166, 1, 0, 0, 0, 2454, 2179, 1, 0, 0, 0, 2454, 2191, 1, 0, 0, 0, 2454, 2198, 1, 0, 0, 0, 2454, 2205, 1, 0, 0, 0, 2454, 2218, 1, 0, 0, 0, 2454, 2219, 1, 0, 0, 0, 2454, 2220, 1, 0, 0, 0, 2454, 2226, 1, 0, 0, 0, 2454, 2232, 1, 0, 0, 0, 2454, 2238, 1, 0, 0, 0, 2454, 2244, 1, 0, 0, 0, 2454, 2245, 1, 0, 0, 0, 2454, 2246, 1, 0, 0, 0, 2454, 2247, 1, 0, 0, 0, 2454, 2248, 1, 0, 0, 0, 2454, 2262, 1, 0, 0, 0, 2454, 2269, 1, 0, 0, 0, 2454, 2280, 1, 0, 0, 0, 2454, 2289, 1, 0, 0, 0, 2454, 2296, 1, 0, 0, 0, 2454, 2300, 1, 0, 0, 0, 2454, 2313, 1, 0, 0, 0, 2454, 2324, 1, 0, 0, 0, 2454, 2345, 1, 0, 0, 0, 2454, 2384, 1, 0, 0, 0, 2454, 2425, 1, 0, 0, 0, 2455, 2466, 1, 0, 0, 0, 2456, 2457, 10, 24, 0, 0, 2457, 2458, 5, 315, 0, 0, 2458, 2459, 3, 114, 57, 0, 2459, 2460, 5, 316, 0, 0, 2460, 2465, 1, 0, 0, 0, 2461, 2462, 10, 22, 0, 0, 2462, 2463, 5, 310, 0, 0, 2463, 2465, 3, 232, 116, 0, 2464, 2456, 1, 0, 0, 0, 2464, 2461, 1, 0, 0, 0, 2465, 2468, 1, 0, 0, 0, 2466, 2464, 1, 0, 0, 0, 2466, 2467, 1, 0, 0, 0, 2467, 117, 1, 0, 0, 0, 2468, 2466, 1, 0, 0, 0, 2469, 2470, 3, 120, 60, 0, 2470, 2471, 5, 312, 0, 0, 2471, 2481, 3, 140, 70, 0, 2472, 2473, 5, 186, 0, 0, 2473, 2478, 3, 124, 62, 0, 2474, 2475, 5, 312, 0, 0, 2475, 2477, 3, 124, 62, 0, 2476, 2474, 1, 0, 0, 0, 2477, 2480, 1, 0, 0, 0, 2478, 2476, 1, 0, 0, 0, 2478, 2479, 1, 0, 0, 0, 2479, 2482, 1, 0, 0, 0, 2480, 2478, 1, 0, 0, 0, 2481, 2472, 1, 0, 0, 0, 2481, 2482, 1, 0, 0, 0, 2482, 119, 1, 0, 0, 0, 2483, 2486, 3, 108, 54, 0, 2484, 2485, 5, 87, 0, 0, 2485, 2487, 3, 122, 61, 0, 2486, 2484, 1, 0, 0, 0, 2486, 2487, 1, 0, 0, 0, 2487, 121, 1, 0, 0, 0, 2488, 2491, 5, 120, 0, 0, 2489, 2490, 5, 70, 0, 0, 2490, 2492, 7, 20, 0, 0, 2491, 2489, 1, 0, 0, 0, 2491, 2492, 1, 0, 0, 0, 2492, 123, 1, 0, 0, 0, 2493, 2494, 3, 120, 60, 0, 2494, 2495, 5, 11, 0, 0, 2495, 2496, 3, 232, 116, 0, 2496, 125, 1, 0, 0, 0, 2497, 2498, 7, 21, 0, 0, 2498, 127, 1, 0, 0, 0, 2499, 2504, 5, 72, 0, 0, 2500, 2504, 5, 166, 0, 0, 2501, 2502, 5, 53, 0, 0, 2502, 2504, 3, 108, 54, 0, 2503, 2499, 1, 0, 0, 0, 2503, 2500, 1, 0, 0, 0, 2503, 2501, 1, 0, 0, 0, 2504, 129, 1, 0, 0, 0, 2505, 2507, 5, 290, 0, 0, 2506, 2508, 5, 10, 0, 0, 2507, 2506, 1, 0, 0, 0, 2507, 2508, 1, 0, 0, 0, 2508, 2517, 1, 0, 0, 0, 2509, 2511, 5, 288, 0, 0, 2510, 2512, 7, 22, 0, 0, 2511, 2510, 1, 0, 0, 0, 2511, 2512, 1, 0, 0, 0, 2512, 2514, 1, 0, 0, 0, 2513, 2515, 5, 10, 0, 0, 2514, 2513, 1, 0, 0, 0, 2514, 2515, 1, 0, 0, 0, 2515, 2517, 1, 0, 0, 0, 2516, 2505, 1, 0, 0, 0, 2516, 2509, 1, 0, 0, 0, 2517, 131, 1, 0, 0, 0, 2518, 2523, 5, 72, 0, 0, 2519, 2523, 5, 166, 0, 0, 2520, 2521, 5, 68, 0, 0, 2521, 2523, 7, 23, 0, 0, 2522, 2518, 1, 0, 0, 0, 2522, 2519, 1, 0, 0, 0, 2522, 2520, 1, 0, 0, 0, 2523, 133, 1, 0, 0, 0, 2524, 2526, 5, 128, 0, 0, 2525, 2524, 1, 0, 0, 0, 2525, 2526, 1, 0, 0, 0, 2526, 2527, 1, 0, 0, 0, 2527, 2528, 3, 108, 54, 0, 2528, 2529, 5, 279, 0, 0, 2529, 2530, 3, 120, 60, 0, 2530, 2536, 1, 0, 0, 0, 2531, 2532, 3, 108, 54, 0, 2532, 2533, 5, 311, 0, 0, 2533, 2534, 3, 120, 60, 0, 2534, 2536, 1, 0, 0, 0, 2535, 2525, 1, 0, 0, 0, 2535, 2531, 1, 0, 0, 0, 2536, 135, 1, 0, 0, 0, 2537, 2538, 7, 24, 0, 0, 2538, 137, 1, 0, 0, 0, 2539, 2540, 5, 103, 0, 0, 2540, 2544, 5, 168, 0, 0, 2541, 2542, 5, 211, 0, 0, 2542, 2544, 5, 168, 0, 0, 2543, 2539, 1, 0, 0, 0, 2543, 2541, 1, 0, 0, 0, 2544, 139, 1, 0, 0, 0, 2545, 2552, 5, 327, 0, 0, 2546, 2549, 5, 328, 0, 0, 2547, 2548, 5, 261, 0, 0, 2548, 2550, 5, 327, 0, 0, 2549, 2547, 1, 0, 0, 0, 2549, 2550, 1, 0, 0, 0, 2550, 2552, 1, 0, 0, 0, 2551, 2545, 1, 0, 0, 0, 2551, 2546, 1, 0, 0, 0, 2552, 141, 1, 0, 0, 0, 2553, 2554, 5, 251, 0, 0, 2554, 2555, 5, 295, 0, 0, 2555, 2560, 3, 150, 75, 0, 2556, 2557, 5, 251, 0, 0, 2557, 2558, 5, 295, 0, 0, 2558, 2560, 3, 140, 70, 0, 2559, 2553, 1, 0, 0, 0, 2559, 2556, 1, 0, 0, 0, 2560, 143, 1, 0, 0, 0, 2561, 2562, 7, 25, 0, 0, 2562, 145, 1, 0, 0, 0, 2563, 2564, 7, 26, 0, 0, 2564, 147, 1, 0, 0, 0, 2565, 2566, 7, 27, 0, 0, 2566, 149, 1, 0, 0, 0, 2567, 2569, 5, 112, 0, 0, 2568, 2570, 7, 17, 0, 0, 2569, 2568, 1, 0, 0, 0, 2569, 2570, 1, 0, 0, 0, 2570, 2571, 1, 0, 0, 0, 2571, 2572, 3, 140, 70, 0, 2572, 2575, 3, 152, 76, 0, 2573, 2574, 5, 253, 0, 0, 2574, 2576, 3, 152, 76, 0, 2575, 2573, 1, 0, 0, 0, 2575, 2576, 1, 0, 0, 0, 2576, 151, 1, 0, 0, 0, 2577, 2578, 7, 28, 0, 0, 2578, 153, 1, 0, 0, 0, 2579, 2580, 7, 29, 0, 0, 2580, 155, 1, 0, 0, 0, 2581, 2582, 6, 78, -1, 0, 2582, 2583, 5, 222, 0, 0, 2583, 2584, 5, 313, 0, 0, 2584, 2589, 3, 158, 79, 0, 2585, 2586, 5, 312, 0, 0, 2586, 2588, 3, 158, 79, 0, 2587, 2585, 1, 0, 0, 0, 2588, 2591, 1, 0, 0, 0, 2589, 2587, 1, 0, 0, 0, 2589, 2590, 1, 0, 0, 0, 2590, 2592, 1, 0, 0, 0, 2591, 2589, 1, 0, 0, 0, 2592, 2593, 5, 314, 0, 0, 2593, 2673, 1, 0, 0, 0, 2594, 2595, 5, 112, 0, 0, 2595, 2598, 3, 152, 76, 0, 2596, 2597, 5, 253, 0, 0, 2597, 2599, 3, 152, 76, 0, 2598, 2596, 1, 0, 0, 0, 2598, 2599, 1, 0, 0, 0, 2599, 2673, 1, 0, 0, 0, 2600, 2605, 5, 252, 0, 0, 2601, 2602, 5, 313, 0, 0, 2602, 2603, 3, 160, 80, 0, 2603, 2604, 5, 314, 0, 0, 2604, 2606, 1, 0, 0, 0, 2605, 2601, 1, 0, 0, 0, 2605, 2606, 1, 0, 0, 0, 2606, 2610, 1, 0, 0, 0, 2607, 2608, 5, 290, 0, 0, 2608, 2609, 5, 251, 0, 0, 2609, 2611, 5, 295, 0, 0, 2610, 2607, 1, 0, 0, 0, 2610, 2611, 1, 0, 0, 0, 2611, 2673, 1, 0, 0, 0, 2612, 2617, 5, 252, 0, 0, 2613, 2614, 5, 313, 0, 0, 2614, 2615, 3, 160, 80, 0, 2615, 2616, 5, 314, 0, 0, 2616, 2618, 1, 0, 0, 0, 2617, 2613, 1, 0, 0, 0, 2617, 2618, 1, 0, 0, 0, 2618, 2619, 1, 0, 0, 0, 2619, 2620, 5, 288, 0, 0, 2620, 2621, 5, 251, 0, 0, 2621, 2673, 5, 295, 0, 0, 2622, 2627, 5, 251, 0, 0, 2623, 2624, 5, 313, 0, 0, 2624, 2625, 3, 160, 80, 0, 2625, 2626, 5, 314, 0, 0, 2626, 2628, 1, 0, 0, 0, 2627, 2623, 1, 0, 0, 0, 2627, 2628, 1, 0, 0, 0, 2628, 2632, 1, 0, 0, 0, 2629, 2630, 5, 290, 0, 0, 2630, 2631, 5, 251, 0, 0, 2631, 2633, 5, 295, 0, 0, 2632, 2629, 1, 0, 0, 0, 2632, 2633, 1, 0, 0, 0, 2633, 2673, 1, 0, 0, 0, 2634, 2639, 5, 251, 0, 0, 2635, 2636, 5, 313, 0, 0, 2636, 2637, 3, 160, 80, 0, 2637, 2638, 5, 314, 0, 0, 2638, 2640, 1, 0, 0, 0, 2639, 2635, 1, 0, 0, 0, 2639, 2640, 1, 0, 0, 0, 2640, 2641, 1, 0, 0, 0, 2641, 2642, 5, 288, 0, 0, 2642, 2643, 5, 251, 0, 0, 2643, 2673, 5, 295, 0, 0, 2644, 2645, 5, 65, 0, 0, 2645, 2673, 5, 196, 0, 0, 2646, 2647, 5, 10, 0, 0, 2647, 2648, 5, 298, 0, 0, 2648, 2649, 3, 156, 78, 0, 2649, 2650, 5, 300, 0, 0, 2650, 2673, 1, 0, 0, 0, 2651, 2652, 5, 145, 0, 0, 2652, 2653, 5, 298, 0, 0, 2653, 2654, 3, 156, 78, 0, 2654, 2655, 5, 312, 0, 0, 2655, 2656, 3, 156, 78, 0, 2656, 2657, 5, 300, 0, 0, 2657, 2673, 1, 0, 0, 0, 2658, 2670, 3, 232, 116, 0, 2659, 2660, 5, 313, 0, 0, 2660, 2665, 3, 160, 80, 0, 2661, 2662, 5, 312, 0, 0, 2662, 2664, 3, 160, 80, 0, 2663, 2661, 1, 0, 0, 0, 2664, 2667, 1, 0, 0, 0, 2665, 2663, 1, 0, 0, 0, 2665, 2666, 1, 0, 0, 0, 2666, 2668, 1, 0, 0, 0, 2667, 2665, 1, 0, 0, 0, 2668, 2669, 5, 314, 0, 0, 2669, 2671, 1, 0, 0, 0, 2670, 2659, 1, 0, 0, 0, 2670, 2671, 1, 0, 0, 0, 2671, 2673, 1, 0, 0, 0, 2672, 2581, 1, 0, 0, 0, 2672, 2594, 1, 0, 0, 0, 2672, 2600, 1, 0, 0, 0, 2672, 2612, 1, 0, 0, 0, 2672, 2622, 1, 0, 0, 0, 2672, 2634, 1, 0, 0, 0, 2672, 2644, 1, 0, 0, 0, 2672, 2646, 1, 0, 0, 0, 2672, 2651, 1, 0, 0, 0, 2672, 2658, 1, 0, 0, 0, 2673, 2683, 1, 0, 0, 0, 2674, 2675, 10, 2, 0, 0, 2675, 2679, 5, 10, 0, 0, 2676, 2677, 5, 315, 0, 0, 2677, 2678, 5, 330, 0, 0, 2678, 2680, 5, 316, 0, 0, 2679, 2676, 1, 0, 0, 0, 2679, 2680, 1, 0, 0, 0, 2680, 2682, 1, 0, 0, 0, 2681, 2674, 1, 0, 0, 0, 2682, 2685, 1, 0, 0, 0, 2683, 2681, 1, 0, 0, 0, 2683, 2684, 1, 0, 0, 0, 2684, 157, 1, 0, 0, 0, 2685, 2683, 1, 0, 0, 0, 2686, 2691, 3, 156, 78, 0, 2687, 2688, 3, 232, 116, 0, 2688, 2689, 3, 156, 78, 0, 2689, 2691, 1, 0, 0, 0, 2690, 2686, 1, 0, 0, 0, 2690, 2687, 1, 0, 0, 0, 2691, 159, 1, 0, 0, 0, 2692, 2695, 5, 330, 0, 0, 2693, 2695, 3, 156, 78, 0, 2694, 2692, 1, 0, 0, 0, 2694, 2693, 1, 0, 0, 0, 2695, 161, 1, 0, 0, 0, 2696, 2697, 5, 284, 0, 0, 2697, 2698, 3, 108, 54, 0, 2698, 2699, 5, 249, 0, 0, 2699, 2700, 3, 108, 54, 0, 2700, 163, 1, 0, 0, 0, 2701, 2702, 5, 82, 0, 0, 2702, 2703, 5, 313, 0, 0, 2703, 2704, 5, 285, 0, 0, 2704, 2705, 3, 110, 55, 0, 2705, 2706, 5, 314, 0, 0, 2706, 165, 1, 0, 0, 0, 2707, 2708, 5, 284, 0, 0, 2708, 2711, 5, 147, 0, 0, 2709, 2710, 5, 8, 0, 0, 2710, 2712, 3, 108, 54, 0, 2711, 2709, 1, 0, 0, 0, 2711, 2712, 1, 0, 0, 0, 2712, 2713, 1, 0, 0, 0, 2713, 2714, 5, 249, 0, 0, 2714, 2715, 5, 271, 0, 0, 2715, 2716, 5, 234, 0, 0, 2716, 2717, 3, 232, 116, 0, 2717, 2718, 5, 296, 0, 0, 2718, 2726, 3, 108, 54, 0, 2719, 2720, 5, 312, 0, 0, 2720, 2721, 3, 232, 116, 0, 2721, 2722, 5, 296, 0, 0, 2722, 2723, 3, 108, 54, 0, 2723, 2725, 1, 0, 0, 0, 2724, 2719, 1, 0, 0, 0, 2725, 2728, 1, 0, 0, 0, 2726, 2724, 1, 0, 0, 0, 2726, 2727, 1, 0, 0, 0, 2727, 2772, 1, 0, 0, 0, 2728, 2726, 1, 0, 0, 0, 2729, 2730, 5, 284, 0, 0, 2730, 2733, 5, 147, 0, 0, 2731, 2732, 5, 8, 0, 0, 2732, 2734, 3, 108, 54, 0, 2733, 2731, 1, 0, 0, 0, 2733, 2734, 1, 0, 0, 0, 2734, 2735, 1, 0, 0, 0, 2735, 2736, 5, 249, 0, 0, 2736, 2772, 5, 56, 0, 0, 2737, 2738, 5, 284, 0, 0, 2738, 2739, 5, 165, 0, 0, 2739, 2742, 5, 147, 0, 0, 2740, 2741, 5, 8, 0, 0, 2741, 2743, 3, 108, 54, 0, 2742, 2740, 1, 0, 0, 0, 2742, 2743, 1, 0, 0, 0, 2743, 2744, 1, 0, 0, 0, 2744, 2745, 5, 249, 0, 0, 2745, 2757, 5, 110, 0, 0, 2746, 2747, 5, 313, 0, 0, 2747, 2752, 3, 232, 116, 0, 2748, 2749, 5, 312, 0, 0, 2749, 2751, 3, 232, 116, 0, 2750, 2748, 1, 0, 0, 0, 2751, 2754, 1, 0, 0, 0, 2752, 2750, 1, 0, 0, 0, 2752, 2753, 1, 0, 0, 0, 2753, 2755, 1, 0, 0, 0, 2754, 2752, 1, 0, 0, 0, 2755, 2756, 5, 314, 0, 0, 2756, 2758, 1, 0, 0, 0, 2757, 2746, 1, 0, 0, 0, 2757, 2758, 1, 0, 0, 0, 2758, 2759, 1, 0, 0, 0, 2759, 2760, 5, 280, 0, 0, 2760, 2761, 5, 313, 0, 0, 2761, 2766, 3, 108, 54, 0, 2762, 2763, 5, 312, 0, 0, 2763, 2765, 3, 108, 54, 0, 2764, 2762, 1, 0, 0, 0, 2765, 2768, 1, 0, 0, 0, 2766, 2764, 1, 0, 0, 0, 2766, 2767, 1, 0, 0, 0, 2767, 2769, 1, 0, 0, 0, 2768, 2766, 1, 0, 0, 0, 2769, 2770, 5, 314, 0, 0, 2770, 2772, 1, 0, 0, 0, 2771, 2707, 1, 0, 0, 0, 2771, 2729, 1, 0, 0, 0, 2771, 2737, 1, 0, 0, 0, 2772, 167, 1, 0, 0, 0, 2773, 2779, 5, 182, 0, 0, 2774, 2780, 3, 232, 116, 0, 2775, 2776, 5, 313, 0, 0, 2776, 2777, 3, 50, 25, 0, 2777, 2778, 5, 314, 0, 0, 2778, 2780, 1, 0, 0, 0, 2779, 2774, 1, 0, 0, 0, 2779, 2775, 1, 0, 0, 0, 2780, 169, 1, 0, 0, 0, 2781, 2782, 5, 151, 0, 0, 2782, 2787, 3, 76, 38, 0, 2783, 2784, 5, 312, 0, 0, 2784, 2786, 3, 76, 38, 0, 2785, 2783, 1, 0, 0, 0, 2786, 2789, 1, 0, 0, 0, 2787, 2785, 1, 0, 0, 0, 2787, 2788, 1, 0, 0, 0, 2788, 2791, 1, 0, 0, 0, 2789, 2787, 1, 0, 0, 0, 2790, 2781, 1, 0, 0, 0, 2790, 2791, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 2796, 3, 172, 86, 0, 2793, 2794, 5, 4, 0, 0, 2794, 2795, 5, 146, 0, 0, 2795, 2797, 3, 82, 41, 0, 2796, 2793, 1, 0, 0, 0, 2796, 2797, 1, 0, 0, 0, 2797, 2799, 1, 0, 0, 0, 2798, 2800, 7, 16, 0, 0, 2799, 2798, 1, 0, 0, 0, 2799, 2800, 1, 0, 0, 0, 2800, 2806, 1, 0, 0, 0, 2801, 2802, 5, 189, 0, 0, 2802, 2803, 5, 313, 0, 0, 2803, 2804, 3, 176, 88, 0, 2804, 2805, 5, 314, 0, 0, 2805, 2807, 1, 0, 0, 0, 2806, 2801, 1, 0, 0, 0, 2806, 2807, 1, 0, 0, 0, 2807, 2817, 1, 0, 0, 0, 2808, 2809, 5, 241, 0, 0, 2809, 2814, 3, 84, 42, 0, 2810, 2811, 5, 312, 0, 0, 2811, 2813, 3, 84, 42, 0, 2812, 2810, 1, 0, 0, 0, 2813, 2816, 1, 0, 0, 0, 2814, 2812, 1, 0, 0, 0, 2814, 2815, 1, 0, 0, 0, 2815, 2818, 1, 0, 0, 0, 2816, 2814, 1, 0, 0, 0, 2817, 2808, 1, 0, 0, 0, 2817, 2818, 1, 0, 0, 0, 2818, 2828, 1, 0, 0, 0, 2819, 2820, 5, 54, 0, 0, 2820, 2825, 3, 86, 43, 0, 2821, 2822, 5, 312, 0, 0, 2822, 2824, 3, 86, 43, 0, 2823, 2821, 1, 0, 0, 0, 2824, 2827, 1, 0, 0, 0, 2825, 2823, 1, 0, 0, 0, 2825, 2826, 1, 0, 0, 0, 2826, 2829, 1, 0, 0, 0, 2827, 2825, 1, 0, 0, 0, 2828, 2819, 1, 0, 0, 0, 2828, 2829, 1, 0, 0, 0, 2829, 171, 1, 0, 0, 0, 2830, 2831, 5, 202, 0, 0, 2831, 2855, 3, 174, 87, 0, 2832, 2833, 5, 223, 0, 0, 2833, 2855, 3, 174, 87, 0, 2834, 2835, 5, 99, 0, 0, 2835, 2855, 3, 174, 87, 0, 2836, 2837, 5, 202, 0, 0, 2837, 2838, 5, 17, 0, 0, 2838, 2839, 3, 174, 87, 0, 2839, 2840, 5, 8, 0, 0, 2840, 2841, 3, 174, 87, 0, 2841, 2855, 1, 0, 0, 0, 2842, 2843, 5, 223, 0, 0, 2843, 2844, 5, 17, 0, 0, 2844, 2845, 3, 174, 87, 0, 2845, 2846, 5, 8, 0, 0, 2846, 2847, 3, 174, 87, 0, 2847, 2855, 1, 0, 0, 0, 2848, 2849, 5, 99, 0, 0, 2849, 2850, 5, 17, 0, 0, 2850, 2851, 3, 174, 87, 0, 2851, 2852, 5, 8, 0, 0, 2852, 2853, 3, 174, 87, 0, 2853, 2855, 1, 0, 0, 0, 2854, 2830, 1, 0, 0, 0, 2854, 2832, 1, 0, 0, 0, 2854, 2834, 1, 0, 0, 0, 2854, 2836, 1, 0, 0, 0, 2854, 2842, 1, 0, 0, 0, 2854, 2848, 1, 0, 0, 0, 2855, 173, 1, 0, 0, 0, 2856, 2857, 5, 262, 0, 0, 2857, 2866, 5, 195, 0, 0, 2858, 2859, 5, 262, 0, 0, 2859, 2866, 5, 85, 0, 0, 2860, 2861, 5, 39, 0, 0, 2861, 2866, 5, 222, 0, 0, 2862, 2863, 3, 108, 54, 0, 2863, 2864, 7, 30, 0, 0, 2864, 2866, 1, 0, 0, 0, 2865, 2856, 1, 0, 0, 0, 2865, 2858, 1, 0, 0, 0, 2865, 2860, 1, 0, 0, 0, 2865, 2862, 1, 0, 0, 0, 2866, 175, 1, 0, 0, 0, 2867, 2868, 6, 88, -1, 0, 2868, 2870, 3, 178, 89, 0, 2869, 2871, 3, 180, 90, 0, 2870, 2869, 1, 0, 0, 0, 2870, 2871, 1, 0, 0, 0, 2871, 2879, 1, 0, 0, 0, 2872, 2873, 10, 2, 0, 0, 2873, 2878, 3, 176, 88, 3, 2874, 2875, 10, 1, 0, 0, 2875, 2876, 5, 324, 0, 0, 2876, 2878, 3, 176, 88, 2, 2877, 2872, 1, 0, 0, 0, 2877, 2874, 1, 0, 0, 0, 2878, 2881, 1, 0, 0, 0, 2879, 2877, 1, 0, 0, 0, 2879, 2880, 1, 0, 0, 0, 2880, 177, 1, 0, 0, 0, 2881, 2879, 1, 0, 0, 0, 2882, 2908, 3, 232, 116, 0, 2883, 2884, 5, 313, 0, 0, 2884, 2908, 5, 314, 0, 0, 2885, 2886, 5, 192, 0, 0, 2886, 2887, 5, 313, 0, 0, 2887, 2892, 3, 176, 88, 0, 2888, 2889, 5, 312, 0, 0, 2889, 2891, 3, 176, 88, 0, 2890, 2888, 1, 0, 0, 0, 2891, 2894, 1, 0, 0, 0, 2892, 2890, 1, 0, 0, 0, 2892, 2893, 1, 0, 0, 0, 2893, 2895, 1, 0, 0, 0, 2894, 2892, 1, 0, 0, 0, 2895, 2896, 5, 314, 0, 0, 2896, 2908, 1, 0, 0, 0, 2897, 2898, 5, 313, 0, 0, 2898, 2899, 3, 176, 88, 0, 2899, 2900, 5, 314, 0, 0, 2900, 2908, 1, 0, 0, 0, 2901, 2908, 5, 326, 0, 0, 2902, 2908, 5, 325, 0, 0, 2903, 2904, 5, 319, 0, 0, 2904, 2905, 3, 176, 88, 0, 2905, 2906, 5, 320, 0, 0, 2906, 2908, 1, 0, 0, 0, 2907, 2882, 1, 0, 0, 0, 2907, 2883, 1, 0, 0, 0, 2907, 2885, 1, 0, 0, 0, 2907, 2897, 1, 0, 0, 0, 2907, 2901, 1, 0, 0, 0, 2907, 2902, 1, 0, 0, 0, 2907, 2903, 1, 0, 0, 0, 2908, 179, 1, 0, 0, 0, 2909, 2911, 5, 304, 0, 0, 2910, 2912, 5, 308, 0, 0, 2911, 2910, 1, 0, 0, 0, 2911, 2912, 1, 0, 0, 0, 2912, 2940, 1, 0, 0, 0, 2913, 2915, 5, 302, 0, 0, 2914, 2916, 5, 308, 0, 0, 2915, 2914, 1, 0, 0, 0, 2915, 2916, 1, 0, 0, 0, 2916, 2940, 1, 0, 0, 0, 2917, 2919, 5, 308, 0, 0, 2918, 2920, 5, 308, 0, 0, 2919, 2918, 1, 0, 0, 0, 2919, 2920, 1, 0, 0, 0, 2920, 2940, 1, 0, 0, 0, 2921, 2922, 5, 317, 0, 0, 2922, 2923, 5, 330, 0, 0, 2923, 2925, 5, 318, 0, 0, 2924, 2926, 5, 308, 0, 0, 2925, 2924, 1, 0, 0, 0, 2925, 2926, 1, 0, 0, 0, 2926, 2940, 1, 0, 0, 0, 2927, 2929, 5, 317, 0, 0, 2928, 2930, 5, 330, 0, 0, 2929, 2928, 1, 0, 0, 0, 2929, 2930, 1, 0, 0, 0, 2930, 2931, 1, 0, 0, 0, 2931, 2933, 5, 312, 0, 0, 2932, 2934, 5, 330, 0, 0, 2933, 2932, 1, 0, 0, 0, 2933, 2934, 1, 0, 0, 0, 2934, 2935, 1, 0, 0, 0, 2935, 2937, 5, 318, 0, 0, 2936, 2938, 5, 308, 0, 0, 2937, 2936, 1, 0, 0, 0, 2937, 2938, 1, 0, 0, 0, 2938, 2940, 1, 0, 0, 0, 2939, 2909, 1, 0, 0, 0, 2939, 2913, 1, 0, 0, 0, 2939, 2917, 1, 0, 0, 0, 2939, 2921, 1, 0, 0, 0, 2939, 2927, 1, 0, 0, 0, 2940, 181, 1, 0, 0, 0, 2941, 2942, 3, 232, 116, 0, 2942, 2943, 5, 296, 0, 0, 2943, 2944, 3, 108, 54, 0, 2944, 183, 1, 0, 0, 0, 2945, 2946, 5, 87, 0, 0, 2946, 2950, 7, 31, 0, 0, 2947, 2948, 5, 260, 0, 0, 2948, 2950, 7, 32, 0, 0, 2949, 2945, 1, 0, 0, 0, 2949, 2947, 1, 0, 0, 0, 2950, 185, 1, 0, 0, 0, 2951, 2952, 5, 117, 0, 0, 2952, 2953, 5, 136, 0, 0, 2953, 2957, 3, 188, 94, 0, 2954, 2955, 5, 203, 0, 0, 2955, 2957, 7, 33, 0, 0, 2956, 2951, 1, 0, 0, 0, 2956, 2954, 1, 0, 0, 0, 2957, 187, 1, 0, 0, 0, 2958, 2959, 5, 203, 0, 0, 2959, 2966, 5, 263, 0, 0, 2960, 2961, 5, 203, 0, 0, 2961, 2966, 5, 31, 0, 0, 2962, 2963, 5, 208, 0, 0, 2963, 2966, 5, 203, 0, 0, 2964, 2966, 5, 232, 0, 0, 2965, 2958, 1, 0, 0, 0, 2965, 2960, 1, 0, 0, 0, 2965, 2962, 1, 0, 0, 0, 2965, 2964, 1, 0, 0, 0, 2966, 189, 1, 0, 0, 0, 2967, 2973, 3, 108, 54, 0, 2968, 2969, 3, 232, 116, 0, 2969, 2970, 5, 323, 0, 0, 2970, 2971, 3, 108, 54, 0, 2971, 2973, 1, 0, 0, 0, 2972, 2967, 1, 0, 0, 0, 2972, 2968, 1, 0, 0, 0, 2973, 191, 1, 0, 0, 0, 2974, 2975, 3, 232, 116, 0, 2975, 2976, 5, 310, 0, 0, 2976, 2977, 3, 232, 116, 0, 2977, 2980, 1, 0, 0, 0, 2978, 2980, 3, 232, 116, 0, 2979, 2974, 1, 0, 0, 0, 2979, 2978, 1, 0, 0, 0, 2980, 193, 1, 0, 0, 0, 2981, 2986, 3, 192, 96, 0, 2982, 2983, 5, 312, 0, 0, 2983, 2985, 3, 192, 96, 0, 2984, 2982, 1, 0, 0, 0, 2985, 2988, 1, 0, 0, 0, 2986, 2984, 1, 0, 0, 0, 2986, 2987, 1, 0, 0, 0, 2987, 195, 1, 0, 0, 0, 2988, 2986, 1, 0, 0, 0, 2989, 2990, 5, 90, 0, 0, 2990, 2991, 3, 198, 99, 0, 2991, 2995, 3, 202, 101, 0, 2992, 2994, 3, 204, 102, 0, 2993, 2992, 1, 0, 0, 0, 2994, 2997, 1, 0, 0, 0, 2995, 2993, 1, 0, 0, 0, 2995, 2996, 1, 0, 0, 0, 2996, 2998, 1, 0, 0, 0, 2997, 2995, 1, 0, 0, 0, 2998, 2999, 3, 206, 103, 0, 2999, 197, 1, 0, 0, 0, 3000, 3001, 3, 220, 110, 0, 3001, 3010, 5, 313, 0, 0, 3002, 3007, 3, 200, 100, 0, 3003, 3004, 5, 312, 0, 0, 3004, 3006, 3, 200, 100, 0, 3005, 3003, 1, 0, 0, 0, 3006, 3009, 1, 0, 0, 0, 3007, 3005, 1, 0, 0, 0, 3007, 3008, 1, 0, 0, 0, 3008, 3011, 1, 0, 0, 0, 3009, 3007, 1, 0, 0, 0, 3010, 3002, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3012, 1, 0, 0, 0, 3012, 3013, 5, 314, 0, 0, 3013, 199, 1, 0, 0, 0, 3014, 3016, 3, 232, 116, 0, 3015, 3014, 1, 0, 0, 0, 3015, 3016, 1, 0, 0, 0, 3016, 3017, 1, 0, 0, 0, 3017, 3018, 3, 156, 78, 0, 3018, 201, 1, 0, 0, 0, 3019, 3020, 5, 215, 0, 0, 3020, 3021, 3, 156, 78, 0, 3021, 203, 1, 0, 0, 0, 3022, 3023, 5, 130, 0, 0, 3023, 3042, 3, 232, 116, 0, 3024, 3026, 5, 165, 0, 0, 3025, 3024, 1, 0, 0, 0, 3025, 3026, 1, 0, 0, 0, 3026, 3027, 1, 0, 0, 0, 3027, 3042, 5, 61, 0, 0, 3028, 3029, 5, 215, 0, 0, 3029, 3030, 5, 166, 0, 0, 3030, 3031, 5, 173, 0, 0, 3031, 3032, 5, 166, 0, 0, 3032, 3042, 5, 109, 0, 0, 3033, 3034, 5, 21, 0, 0, 3034, 3035, 5, 173, 0, 0, 3035, 3036, 5, 166, 0, 0, 3036, 3042, 5, 109, 0, 0, 3037, 3038, 5, 229, 0, 0, 3038, 3042, 7, 1, 0, 0, 3039, 3040, 5, 29, 0, 0, 3040, 3042, 3, 140, 70, 0, 3041, 3022, 1, 0, 0, 0, 3041, 3025, 1, 0, 0, 0, 3041, 3028, 1, 0, 0, 0, 3041, 3033, 1, 0, 0, 0, 3041, 3037, 1, 0, 0, 0, 3041, 3039, 1, 0, 0, 0, 3042, 205, 1, 0, 0, 0, 3043, 3044, 5, 213, 0, 0, 3044, 3143, 3, 114, 57, 0, 3045, 3046, 5, 234, 0, 0, 3046, 3047, 3, 232, 116, 0, 3047, 3048, 5, 296, 0, 0, 3048, 3049, 3, 108, 54, 0, 3049, 3143, 1, 0, 0, 0, 3050, 3051, 5, 23, 0, 0, 3051, 3053, 3, 108, 54, 0, 3052, 3054, 3, 208, 104, 0, 3053, 3052, 1, 0, 0, 0, 3054, 3055, 1, 0, 0, 0, 3055, 3053, 1, 0, 0, 0, 3055, 3056, 1, 0, 0, 0, 3056, 3058, 1, 0, 0, 0, 3057, 3059, 3, 212, 106, 0, 3058, 3057, 1, 0, 0, 0, 3058, 3059, 1, 0, 0, 0, 3059, 3060, 1, 0, 0, 0, 3060, 3061, 5, 71, 0, 0, 3061, 3062, 5, 23, 0, 0, 3062, 3143, 1, 0, 0, 0, 3063, 3065, 5, 23, 0, 0, 3064, 3066, 3, 208, 104, 0, 3065, 3064, 1, 0, 0, 0, 3066, 3067, 1, 0, 0, 0, 3067, 3065, 1, 0, 0, 0, 3067, 3068, 1, 0, 0, 0, 3068, 3070, 1, 0, 0, 0, 3069, 3071, 3, 212, 106, 0, 3070, 3069, 1, 0, 0, 0, 3070, 3071, 1, 0, 0, 0, 3071, 3072, 1, 0, 0, 0, 3072, 3073, 5, 71, 0, 0, 3073, 3074, 5, 23, 0, 0, 3074, 3143, 1, 0, 0, 0, 3075, 3076, 5, 102, 0, 0, 3076, 3077, 3, 108, 54, 0, 3077, 3078, 5, 249, 0, 0, 3078, 3082, 3, 216, 108, 0, 3079, 3081, 3, 210, 105, 0, 3080, 3079, 1, 0, 0, 0, 3081, 3084, 1, 0, 0, 0, 3082, 3080, 1, 0, 0, 0, 3082, 3083, 1, 0, 0, 0, 3083, 3086, 1, 0, 0, 0, 3084, 3082, 1, 0, 0, 0, 3085, 3087, 3, 212, 106, 0, 3086, 3085, 1, 0, 0, 0, 3086, 3087, 1, 0, 0, 0, 3087, 3088, 1, 0, 0, 0, 3088, 3089, 5, 71, 0, 0, 3089, 3090, 5, 102, 0, 0, 3090, 3143, 1, 0, 0, 0, 3091, 3092, 5, 118, 0, 0, 3092, 3143, 3, 232, 116, 0, 3093, 3094, 5, 134, 0, 0, 3094, 3143, 3, 232, 116, 0, 3095, 3101, 5, 15, 0, 0, 3096, 3097, 3, 214, 107, 0, 3097, 3098, 5, 309, 0, 0, 3098, 3100, 1, 0, 0, 0, 3099, 3096, 1, 0, 0, 0, 3100, 3103, 1, 0, 0, 0, 3101, 3099, 1, 0, 0, 0, 3101, 3102, 1, 0, 0, 0, 3102, 3105, 1, 0, 0, 0, 3103, 3101, 1, 0, 0, 0, 3104, 3106, 3, 216, 108, 0, 3105, 3104, 1, 0, 0, 0, 3105, 3106, 1, 0, 0, 0, 3106, 3107, 1, 0, 0, 0, 3107, 3143, 5, 71, 0, 0, 3108, 3109, 3, 232, 116, 0, 3109, 3110, 5, 311, 0, 0, 3110, 3112, 1, 0, 0, 0, 3111, 3108, 1, 0, 0, 0, 3111, 3112, 1, 0, 0, 0, 3112, 3113, 1, 0, 0, 0, 3113, 3114, 5, 144, 0, 0, 3114, 3115, 3, 216, 108, 0, 3115, 3116, 5, 71, 0, 0, 3116, 3117, 5, 144, 0, 0, 3117, 3143, 1, 0, 0, 0, 3118, 3119, 3, 232, 116, 0, 3119, 3120, 5, 311, 0, 0, 3120, 3122, 1, 0, 0, 0, 3121, 3118, 1, 0, 0, 0, 3121, 3122, 1, 0, 0, 0, 3122, 3123, 1, 0, 0, 0, 3123, 3124, 5, 286, 0, 0, 3124, 3125, 3, 108, 54, 0, 3125, 3126, 5, 64, 0, 0, 3126, 3127, 3, 216, 108, 0, 3127, 3128, 5, 71, 0, 0, 3128, 3129, 5, 286, 0, 0, 3129, 3143, 1, 0, 0, 0, 3130, 3131, 3, 232, 116, 0, 3131, 3132, 5, 311, 0, 0, 3132, 3134, 1, 0, 0, 0, 3133, 3130, 1, 0, 0, 0, 3133, 3134, 1, 0, 0, 0, 3134, 3135, 1, 0, 0, 0, 3135, 3136, 5, 207, 0, 0, 3136, 3137, 3, 216, 108, 0, 3137, 3138, 5, 270, 0, 0, 3138, 3139, 3, 108, 54, 0, 3139, 3140, 5, 71, 0, 0, 3140, 3141, 5, 207, 0, 0, 3141, 3143, 1, 0, 0, 0, 3142, 3043, 1, 0, 0, 0, 3142, 3045, 1, 0, 0, 0, 3142, 3050, 1, 0, 0, 0, 3142, 3063, 1, 0, 0, 0, 3142, 3075, 1, 0, 0, 0, 3142, 3091, 1, 0, 0, 0, 3142, 3093, 1, 0, 0, 0, 3142, 3095, 1, 0, 0, 0, 3142, 3111, 1, 0, 0, 0, 3142, 3121, 1, 0, 0, 0, 3142, 3133, 1, 0, 0, 0, 3143, 207, 1, 0, 0, 0, 3144, 3145, 5, 284, 0, 0, 3145, 3146, 3, 108, 54, 0, 3146, 3147, 5, 249, 0, 0, 3147, 3148, 3, 216, 108, 0, 3148, 209, 1, 0, 0, 0, 3149, 3150, 5, 69, 0, 0, 3150, 3151, 3, 108, 54, 0, 3151, 3152, 5, 249, 0, 0, 3152, 3153, 3, 216, 108, 0, 3153, 211, 1, 0, 0, 0, 3154, 3155, 5, 67, 0, 0, 3155, 3156, 3, 216, 108, 0, 3156, 213, 1, 0, 0, 0, 3157, 3158, 5, 52, 0, 0, 3158, 3163, 3, 232, 116, 0, 3159, 3160, 5, 312, 0, 0, 3160, 3162, 3, 232, 116, 0, 3161, 3159, 1, 0, 0, 0, 3162, 3165, 1, 0, 0, 0, 3163, 3161, 1, 0, 0, 0, 3163, 3164, 1, 0, 0, 0, 3164, 3166, 1, 0, 0, 0, 3165, 3163, 1, 0, 0, 0, 3166, 3169, 3, 156, 78, 0, 3167, 3168, 5, 53, 0, 0, 3168, 3170, 3, 114, 57, 0, 3169, 3167, 1, 0, 0, 0, 3169, 3170, 1, 0, 0, 0, 3170, 215, 1, 0, 0, 0, 3171, 3172, 3, 206, 103, 0, 3172, 3173, 5, 309, 0, 0, 3173, 3175, 1, 0, 0, 0, 3174, 3171, 1, 0, 0, 0, 3175, 3176, 1, 0, 0, 0, 3176, 3174, 1, 0, 0, 0, 3176, 3177, 1, 0, 0, 0, 3177, 217, 1, 0, 0, 0, 3178, 3179, 7, 34, 0, 0, 3179, 219, 1, 0, 0, 0, 3180, 3185, 3, 232, 116, 0, 3181, 3182, 5, 310, 0, 0, 3182, 3184, 3, 232, 116, 0, 3183, 3181, 1, 0, 0, 0, 3184, 3187, 1, 0, 0, 0, 3185, 3183, 1, 0, 0, 0, 3185, 3186, 1, 0, 0, 0, 3186, 221, 1, 0, 0, 0, 3187, 3185, 1, 0, 0, 0, 3188, 3189, 5, 86, 0, 0, 3189, 3190, 3, 224, 112, 0, 3190, 3191, 5, 11, 0, 0, 3191, 3192, 5, 170, 0, 0, 3192, 3193, 3, 114, 57, 0, 3193, 223, 1, 0, 0, 0, 3194, 3195, 7, 35, 0, 0, 3195, 225, 1, 0, 0, 0, 3196, 3200, 3, 228, 114, 0, 3197, 3200, 5, 47, 0, 0, 3198, 3200, 5, 43, 0, 0, 3199, 3196, 1, 0, 0, 0, 3199, 3197, 1, 0, 0, 0, 3199, 3198, 1, 0, 0, 0, 3200, 227, 1, 0, 0, 0, 3201, 3207, 3, 232, 116, 0, 3202, 3203, 5, 273, 0, 0, 3203, 3207, 3, 232, 116, 0, 3204, 3205, 5, 218, 0, 0, 3205, 3207, 3, 232, 116, 0, 3206, 3201, 1, 0, 0, 0, 3206, 3202, 1, 0, 0, 0, 3206, 3204, 1, 0, 0, 0, 3207, 229, 1, 0, 0, 0, 3208, 3213, 3, 232, 116, 0, 3209, 3210, 5, 312, 0, 0, 3210, 3212, 3, 232, 116, 0, 3211, 3209, 1, 0, 0, 0, 3212, 3215, 1, 0, 0, 0, 3213, 3211, 1, 0, 0, 0, 3213, 3214, 1, 0, 0, 0, 3214, 231, 1, 0, 0, 0, 3215, 3213, 1, 0, 0, 0, 3216, 3222, 5, 333, 0, 0, 3217, 3222, 5, 335, 0, 0, 3218, 3222, 3, 238, 119, 0, 3219, 3222, 5, 336, 0, 0, 3220, 3222, 5, 334, 0, 0, 3221, 3216, 1, 0, 0, 0, 3221, 3217, 1, 0, 0, 0, 3221, 3218, 1, 0, 0, 0, 3221, 3219, 1, 0, 0, 0, 3221, 3220, 1, 0, 0, 0, 3222, 233, 1, 0, 0, 0, 3223, 3225, 5, 303, 0, 0, 3224, 3223, 1, 0, 0, 0, 3224, 3225, 1, 0, 0, 0, 3225, 3226, 1, 0, 0, 0, 3226, 3236, 5, 331, 0, 0, 3227, 3229, 5, 303, 0, 0, 3228, 3227, 1, 0, 0, 0, 3228, 3229, 1, 0, 0, 0, 3229, 3230, 1, 0, 0, 0, 3230, 3236, 5, 332, 0, 0, 3231, 3233, 5, 303, 0, 0, 3232, 3231, 1, 0, 0, 0, 3232, 3233, 1, 0, 0, 0, 3233, 3234, 1, 0, 0, 0, 3234, 3236, 5, 330, 0, 0, 3235, 3224, 1, 0, 0, 0, 3235, 3228, 1, 0, 0, 0, 3235, 3232, 1, 0, 0, 0, 3236, 235, 1, 0, 0, 0, 3237, 3240, 3, 232, 116, 0, 3238, 3240, 3, 140, 70, 0, 3239, 3237, 1, 0, 0, 0, 3239, 3238, 1, 0, 0, 0, 3240, 237, 1, 0, 0, 0, 3241, 3242, 7, 36, 0, 0, 3242, 239, 1, 0, 0, 0, 434, 241, 247, 253, 268, 275, 279, 283, 289, 293, 300, 305, 309, 315, 319, 338, 344, 348, 352, 356, 364, 368, 371, 376, 382, 391, 397, 401, 407, 414, 423, 435, 444, 453, 459, 470, 478, 486, 493, 503, 510, 518, 554, 557, 560, 564, 570, 575, 582, 588, 592, 596, 604, 610, 614, 628, 636, 655, 680, 683, 690, 697, 706, 710, 717, 727, 733, 738, 742, 748, 757, 763, 767, 774, 778, 786, 791, 795, 803, 811, 816, 820, 830, 837, 842, 846, 856, 859, 868, 873, 879, 903, 909, 911, 917, 923, 925, 933, 935, 941, 947, 949, 964, 969, 976, 986, 992, 994, 1002, 1004, 1029, 1032, 1036, 1040, 1058, 1061, 1072, 1075, 1091, 1101, 1106, 1112, 1115, 1124, 1126, 1129, 1139, 1143, 1149, 1156, 1161, 1167, 1171, 1175, 1181, 1192, 1201, 1211, 1214, 1219, 1221, 1228, 1234, 1236, 1240, 1250, 1256, 1259, 1261, 1273, 1280, 1284, 1288, 1292, 1299, 1308, 1311, 1315, 1320, 1324, 1332, 1335, 1338, 1345, 1356, 1359, 1369, 1372, 1383, 1388, 1396, 1399, 1403, 1412, 1421, 1424, 1433, 1436, 1439, 1443, 1454, 1457, 1464, 1467, 1486, 1490, 1494, 1498, 1500, 1511, 1516, 1525, 1534, 1537, 1552, 1555, 1564, 1567, 1575, 1578, 1581, 1586, 1589, 1601, 1604, 1612, 1617, 1621, 1623, 1625, 1640, 1642, 1653, 1660, 1663, 1668, 1678, 1689, 1693, 1695, 1703, 1710, 1723, 1729, 1745, 1754, 1757, 1765, 1768, 1775, 1780, 1791, 1794, 1798, 1800, 1808, 1818, 1824, 1826, 1833, 1837, 1839, 1846, 1850, 1852, 1854, 1863, 1874, 1878, 1888, 1898, 1902, 1910, 1912, 1925, 1933, 1942, 1948, 1956, 1962, 1966, 1971, 1976, 1982, 1996, 1998, 2028, 2039, 2047, 2052, 2057, 2070, 2076, 2079, 2086, 2091, 2094, 2097, 2102, 2109, 2112, 2121, 2124, 2128, 2131, 2134, 2149, 2152, 2171, 2175, 2183, 2187, 2212, 2215, 2224, 2230, 2236, 2242, 2251, 2254, 2257, 2276, 2285, 2307, 2310, 2320, 2329, 2335, 2341, 2352, 2354, 2359, 2366, 2368, 2374, 2380, 2391, 2400, 2405, 2410, 2412, 2414, 2420, 2422, 2432, 2441, 2443, 2449, 2451, 2454, 2464, 2466, 2478, 2481, 2486, 2491, 2503, 2507, 2511, 2514, 2516, 2522, 2525, 2535, 2543, 2549, 2551, 2559, 2569, 2575, 2589, 2598, 2605, 2610, 2617, 2627, 2632, 2639, 2665, 2670, 2672, 2679, 2683, 2690, 2694, 2711, 2726, 2733, 2742, 2752, 2757, 2766, 2771, 2779, 2787, 2790, 2796, 2799, 2806, 2814, 2817, 2825, 2828, 2854, 2865, 2870, 2877, 2879, 2892, 2907, 2911, 2915, 2919, 2925, 2929, 2933, 2937, 2939, 2949, 2956, 2965, 2972, 2979, 2986, 2995, 3007, 3010, 3015, 3025, 3041, 3055, 3058, 3067, 3070, 3082, 3086, 3101, 3105, 3111, 3121, 3133, 3142, 3163, 3169, 3176, 3185, 3199, 3206, 3213, 3221, 3224, 3228, 3232, 3235, 3239] \ No newline at end of file diff --git a/src/autocomplete/databases/trino/generated/TrinoParser.tokens b/src/autocomplete/databases/trino/generated/TrinoParser.tokens new file mode 100644 index 000000000..b56900591 --- /dev/null +++ b/src/autocomplete/databases/trino/generated/TrinoParser.tokens @@ -0,0 +1,665 @@ +ABSENT_=1 +ADD_=2 +ADMIN_=3 +AFTER_=4 +ALL_=5 +ALTER_=6 +ANALYZE_=7 +AND_=8 +ANY_=9 +ARRAY_=10 +AS_=11 +ASC_=12 +AT_=13 +AUTHORIZATION_=14 +BEGIN_=15 +BERNOULLI_=16 +BETWEEN_=17 +BOTH_=18 +BY_=19 +CALL_=20 +CALLED_=21 +CASCADE_=22 +CASE_=23 +CAST_=24 +CATALOG_=25 +CATALOGS_=26 +COLUMN_=27 +COLUMNS_=28 +COMMENT_=29 +COMMIT_=30 +COMMITTED_=31 +CONDITIONAL_=32 +CONSTRAINT_=33 +COUNT_=34 +COPARTITION_=35 +CREATE_=36 +CROSS_=37 +CUBE_=38 +CURRENT_=39 +CURRENT_CATALOG_=40 +CURRENT_DATE_=41 +CURRENT_PATH_=42 +CURRENT_ROLE_=43 +CURRENT_SCHEMA_=44 +CURRENT_TIME_=45 +CURRENT_TIMESTAMP_=46 +CURRENT_USER_=47 +DATA_=48 +DATE_=49 +DAY_=50 +DEALLOCATE_=51 +DECLARE_=52 +DEFAULT_=53 +DEFINE_=54 +DEFINER_=55 +DELETE_=56 +DENY_=57 +DESC_=58 +DESCRIBE_=59 +DESCRIPTOR_=60 +DETERMINISTIC_=61 +DISTINCT_=62 +DISTRIBUTED_=63 +DO_=64 +DOUBLE_=65 +DROP_=66 +ELSE_=67 +EMPTY_=68 +ELSEIF_=69 +ENCODING_=70 +END_=71 +ERROR_=72 +ESCAPE_=73 +EXCEPT_=74 +EXCLUDING_=75 +EXECUTE_=76 +EXISTS_=77 +EXPLAIN_=78 +EXTRACT_=79 +FALSE_=80 +FETCH_=81 +FILTER_=82 +FINAL_=83 +FIRST_=84 +FOLLOWING_=85 +FOR_=86 +FORMAT_=87 +FROM_=88 +FULL_=89 +FUNCTION_=90 +FUNCTIONS_=91 +GRACE_=92 +GRANT_=93 +GRANTED_=94 +GRANTS_=95 +GRAPHVIZ_=96 +GROUP_=97 +GROUPING_=98 +GROUPS_=99 +HAVING_=100 +HOUR_=101 +IF_=102 +IGNORE_=103 +IMMEDIATE_=104 +IN_=105 +INCLUDING_=106 +INITIAL_=107 +INNER_=108 +INPUT_=109 +INSERT_=110 +INTERSECT_=111 +INTERVAL_=112 +INTO_=113 +INVOKER_=114 +IO_=115 +IS_=116 +ISOLATION_=117 +ITERATE_=118 +JOIN_=119 +JSON_=120 +JSON_ARRAY_=121 +JSON_EXISTS_=122 +JSON_OBJECT_=123 +JSON_QUERY_=124 +JSON_TABLE_=125 +JSON_VALUE_=126 +KEEP_=127 +KEY_=128 +KEYS_=129 +LANGUAGE_=130 +LAST_=131 +LATERAL_=132 +LEADING_=133 +LEAVE_=134 +LEFT_=135 +LEVEL_=136 +LIKE_=137 +LIMIT_=138 +LISTAGG_=139 +LOCAL_=140 +LOCALTIME_=141 +LOCALTIMESTAMP_=142 +LOGICAL_=143 +LOOP_=144 +MAP_=145 +MATCH_=146 +MATCHED_=147 +MATCHES_=148 +MATCH_RECOGNIZE_=149 +MATERIALIZED_=150 +MEASURES_=151 +MERGE_=152 +MINUTE_=153 +MONTH_=154 +NATURAL_=155 +NESTED_=156 +NEXT_=157 +NFC_=158 +NFD_=159 +NFKC_=160 +NFKD_=161 +NO_=162 +NONE_=163 +NORMALIZE_=164 +NOT_=165 +NULL_=166 +NULLIF_=167 +NULLS_=168 +OBJECT_=169 +OF_=170 +OFFSET_=171 +OMIT_=172 +ON_=173 +ONE_=174 +ONLY_=175 +OPTION_=176 +OR_=177 +ORDER_=178 +ORDINALITY_=179 +OUTER_=180 +OUTPUT_=181 +OVER_=182 +OVERFLOW_=183 +PARTITION_=184 +PARTITIONS_=185 +PASSING_=186 +PAST_=187 +PATH_=188 +PATTERN_=189 +PER_=190 +PERIOD_=191 +PERMUTE_=192 +PLAN_=193 +POSITION_=194 +PRECEDING_=195 +PRECISION_=196 +PREPARE_=197 +PRIVILEGES_=198 +PROPERTIES_=199 +PRUNE_=200 +QUOTES_=201 +RANGE_=202 +READ_=203 +RECURSIVE_=204 +REFRESH_=205 +RENAME_=206 +REPEAT_=207 +REPEATABLE_=208 +REPLACE_=209 +RESET_=210 +RESPECT_=211 +RESTRICT_=212 +RETURN_=213 +RETURNING_=214 +RETURNS_=215 +REVOKE_=216 +RIGHT_=217 +ROLE_=218 +ROLES_=219 +ROLLBACK_=220 +ROLLUP_=221 +ROW_=222 +ROWS_=223 +RUNNING_=224 +SCALAR_=225 +SCHEMA_=226 +SCHEMAS_=227 +SECOND_=228 +SECURITY_=229 +SEEK_=230 +SELECT_=231 +SERIALIZABLE_=232 +SESSION_=233 +SET_=234 +SETS_=235 +SHOW_=236 +SKIP_=237 +SOME_=238 +START_=239 +STATS_=240 +SUBSET_=241 +SUBSTRING_=242 +SYSTEM_=243 +TABLE_=244 +TABLES_=245 +TABLESAMPLE_=246 +TEXT_=247 +TEXT_STRING_=248 +THEN_=249 +TIES_=250 +TIME_=251 +TIMESTAMP_=252 +TO_=253 +TRAILING_=254 +TRANSACTION_=255 +TRIM_=256 +TRUE_=257 +TRUNCATE_=258 +TRY_CAST_=259 +TYPE_=260 +UESCAPE_=261 +UNBOUNDED_=262 +UNCOMMITTED_=263 +UNCONDITIONAL_=264 +UNION_=265 +UNIQUE_=266 +UNKNOWN_=267 +UNMATCHED_=268 +UNNEST_=269 +UNTIL_=270 +UPDATE_=271 +USE_=272 +USER_=273 +USING_=274 +UTF16_=275 +UTF32_=276 +UTF8_=277 +VALIDATE_=278 +VALUE_=279 +VALUES_=280 +VERBOSE_=281 +VERSION_=282 +VIEW_=283 +WHEN_=284 +WHERE_=285 +WHILE_=286 +WINDOW_=287 +WITH_=288 +WITHIN_=289 +WITHOUT_=290 +WORK_=291 +WRAPPER_=292 +WRITE_=293 +YEAR_=294 +ZONE_=295 +EQ_=296 +NEQ_=297 +LT_=298 +LTE_=299 +GT_=300 +GTE_=301 +PLUS_=302 +MINUS_=303 +ASTERISK_=304 +SLASH_=305 +PERCENT_=306 +CONCAT_=307 +QUESTION_MARK_=308 +SEMICOLON_=309 +DOT_=310 +COLON_=311 +COMMA_=312 +LPAREN_=313 +RPAREN_=314 +LSQUARE_=315 +RSQUARE_=316 +LCURLY_=317 +RCURLY_=318 +LCURLYHYPHEN_=319 +RCURLYHYPHEN_=320 +LARROW_=321 +RARROW_=322 +RDOUBLEARROW_=323 +VBAR_=324 +DOLLAR_=325 +CARET_=326 +STRING_=327 +UNICODE_STRING_=328 +BINARY_LITERAL_=329 +INTEGER_VALUE_=330 +DECIMAL_VALUE_=331 +DOUBLE_VALUE_=332 +IDENTIFIER_=333 +DIGIT_IDENTIFIER_=334 +QUOTED_IDENTIFIER_=335 +BACKQUOTED_IDENTIFIER_=336 +SIMPLE_COMMENT_=337 +BRACKETED_COMMENT_=338 +WS_=339 +UNRECOGNIZED_=340 +'ABSENT'=1 +'ADD'=2 +'ADMIN'=3 +'AFTER'=4 +'ALL'=5 +'ALTER'=6 +'ANALYZE'=7 +'AND'=8 +'ANY'=9 +'ARRAY'=10 +'AS'=11 +'ASC'=12 +'AT'=13 +'AUTHORIZATION'=14 +'BEGIN'=15 +'BERNOULLI'=16 +'BETWEEN'=17 +'BOTH'=18 +'BY'=19 +'CALL'=20 +'CALLED'=21 +'CASCADE'=22 +'CASE'=23 +'CAST'=24 +'CATALOG'=25 +'CATALOGS'=26 +'COLUMN'=27 +'COLUMNS'=28 +'COMMENT'=29 +'COMMIT'=30 +'COMMITTED'=31 +'CONDITIONAL'=32 +'CONSTRAINT'=33 +'COUNT'=34 +'COPARTITION'=35 +'CREATE'=36 +'CROSS'=37 +'CUBE'=38 +'CURRENT'=39 +'CURRENT_CATALOG'=40 +'CURRENT_DATE'=41 +'CURRENT_PATH'=42 +'CURRENT_ROLE'=43 +'CURRENT_SCHEMA'=44 +'CURRENT_TIME'=45 +'CURRENT_TIMESTAMP'=46 +'CURRENT_USER'=47 +'DATA'=48 +'DATE'=49 +'DAY'=50 +'DEALLOCATE'=51 +'DECLARE'=52 +'DEFAULT'=53 +'DEFINE'=54 +'DEFINER'=55 +'DELETE'=56 +'DENY'=57 +'DESC'=58 +'DESCRIBE'=59 +'DESCRIPTOR'=60 +'DETERMINISTIC'=61 +'DISTINCT'=62 +'DISTRIBUTED'=63 +'DO'=64 +'DOUBLE'=65 +'DROP'=66 +'ELSE'=67 +'EMPTY'=68 +'ELSEIF'=69 +'ENCODING'=70 +'END'=71 +'ERROR'=72 +'ESCAPE'=73 +'EXCEPT'=74 +'EXCLUDING'=75 +'EXECUTE'=76 +'EXISTS'=77 +'EXPLAIN'=78 +'EXTRACT'=79 +'FALSE'=80 +'FETCH'=81 +'FILTER'=82 +'FINAL'=83 +'FIRST'=84 +'FOLLOWING'=85 +'FOR'=86 +'FORMAT'=87 +'FROM'=88 +'FULL'=89 +'FUNCTION'=90 +'FUNCTIONS'=91 +'GRACE'=92 +'GRANT'=93 +'GRANTED'=94 +'GRANTS'=95 +'GRAPHVIZ'=96 +'GROUP'=97 +'GROUPING'=98 +'GROUPS'=99 +'HAVING'=100 +'HOUR'=101 +'IF'=102 +'IGNORE'=103 +'IMMEDIATE'=104 +'IN'=105 +'INCLUDING'=106 +'INITIAL'=107 +'INNER'=108 +'INPUT'=109 +'INSERT'=110 +'INTERSECT'=111 +'INTERVAL'=112 +'INTO'=113 +'INVOKER'=114 +'IO'=115 +'IS'=116 +'ISOLATION'=117 +'ITERATE'=118 +'JOIN'=119 +'JSON'=120 +'JSON_ARRAY'=121 +'JSON_EXISTS'=122 +'JSON_OBJECT'=123 +'JSON_QUERY'=124 +'JSON_TABLE'=125 +'JSON_VALUE'=126 +'KEEP'=127 +'KEY'=128 +'KEYS'=129 +'LANGUAGE'=130 +'LAST'=131 +'LATERAL'=132 +'LEADING'=133 +'LEAVE'=134 +'LEFT'=135 +'LEVEL'=136 +'LIKE'=137 +'LIMIT'=138 +'LISTAGG'=139 +'LOCAL'=140 +'LOCALTIME'=141 +'LOCALTIMESTAMP'=142 +'LOGICAL'=143 +'LOOP'=144 +'MAP'=145 +'MATCH'=146 +'MATCHED'=147 +'MATCHES'=148 +'MATCH_RECOGNIZE'=149 +'MATERIALIZED'=150 +'MEASURES'=151 +'MERGE'=152 +'MINUTE'=153 +'MONTH'=154 +'NATURAL'=155 +'NESTED'=156 +'NEXT'=157 +'NFC'=158 +'NFD'=159 +'NFKC'=160 +'NFKD'=161 +'NO'=162 +'NONE'=163 +'NORMALIZE'=164 +'NOT'=165 +'NULL'=166 +'NULLIF'=167 +'NULLS'=168 +'OBJECT'=169 +'OF'=170 +'OFFSET'=171 +'OMIT'=172 +'ON'=173 +'ONE'=174 +'ONLY'=175 +'OPTION'=176 +'OR'=177 +'ORDER'=178 +'ORDINALITY'=179 +'OUTER'=180 +'OUTPUT'=181 +'OVER'=182 +'OVERFLOW'=183 +'PARTITION'=184 +'PARTITIONS'=185 +'PASSING'=186 +'PAST'=187 +'PATH'=188 +'PATTERN'=189 +'PER'=190 +'PERIOD'=191 +'PERMUTE'=192 +'PLAN'=193 +'POSITION'=194 +'PRECEDING'=195 +'PRECISION'=196 +'PREPARE'=197 +'PRIVILEGES'=198 +'PROPERTIES'=199 +'PRUNE'=200 +'QUOTES'=201 +'RANGE'=202 +'READ'=203 +'RECURSIVE'=204 +'REFRESH'=205 +'RENAME'=206 +'REPEAT'=207 +'REPEATABLE'=208 +'REPLACE'=209 +'RESET'=210 +'RESPECT'=211 +'RESTRICT'=212 +'RETURN'=213 +'RETURNING'=214 +'RETURNS'=215 +'REVOKE'=216 +'RIGHT'=217 +'ROLE'=218 +'ROLES'=219 +'ROLLBACK'=220 +'ROLLUP'=221 +'ROW'=222 +'ROWS'=223 +'RUNNING'=224 +'SCALAR'=225 +'SCHEMA'=226 +'SCHEMAS'=227 +'SECOND'=228 +'SECURITY'=229 +'SEEK'=230 +'SELECT'=231 +'SERIALIZABLE'=232 +'SESSION'=233 +'SET'=234 +'SETS'=235 +'SHOW'=236 +'SKIP'=237 +'SOME'=238 +'START'=239 +'STATS'=240 +'SUBSET'=241 +'SUBSTRING'=242 +'SYSTEM'=243 +'TABLE'=244 +'TABLES'=245 +'TABLESAMPLE'=246 +'TEXT'=247 +'STRING'=248 +'THEN'=249 +'TIES'=250 +'TIME'=251 +'TIMESTAMP'=252 +'TO'=253 +'TRAILING'=254 +'TRANSACTION'=255 +'TRIM'=256 +'TRUE'=257 +'TRUNCATE'=258 +'TRY_CAST'=259 +'TYPE'=260 +'UESCAPE'=261 +'UNBOUNDED'=262 +'UNCOMMITTED'=263 +'UNCONDITIONAL'=264 +'UNION'=265 +'UNIQUE'=266 +'UNKNOWN'=267 +'UNMATCHED'=268 +'UNNEST'=269 +'UNTIL'=270 +'UPDATE'=271 +'USE'=272 +'USER'=273 +'USING'=274 +'UTF16'=275 +'UTF32'=276 +'UTF8'=277 +'VALIDATE'=278 +'VALUE'=279 +'VALUES'=280 +'VERBOSE'=281 +'VERSION'=282 +'VIEW'=283 +'WHEN'=284 +'WHERE'=285 +'WHILE'=286 +'WINDOW'=287 +'WITH'=288 +'WITHIN'=289 +'WITHOUT'=290 +'WORK'=291 +'WRAPPER'=292 +'WRITE'=293 +'YEAR'=294 +'ZONE'=295 +'='=296 +'<'=298 +'<='=299 +'>'=300 +'>='=301 +'+'=302 +'-'=303 +'*'=304 +'/'=305 +'%'=306 +'||'=307 +'?'=308 +';'=309 +'.'=310 +'_:'=311 +','=312 +'('=313 +')'=314 +'['=315 +']'=316 +'{'=317 +'}'=318 +'{-'=319 +'-}'=320 +'<-'=321 +'->'=322 +'=>'=323 +'|'=324 +'$'=325 +'^'=326 diff --git a/src/autocomplete/databases/trino/generated/TrinoParser.ts b/src/autocomplete/databases/trino/generated/TrinoParser.ts new file mode 100644 index 000000000..ebd6c8237 --- /dev/null +++ b/src/autocomplete/databases/trino/generated/TrinoParser.ts @@ -0,0 +1,27453 @@ +//////////////////////////////////////////////////////// +// THIS FILE IS AUTOGENERATED, DON'T EDIT IT MANUALLY // +//////////////////////////////////////////////////////// + +// We don't really want to check types in generated code +// @ts-nocheck + + + +// Generated from src/autocomplete/databases/trino/grammar/TrinoParser.g4 by ANTLR 4.13.1 + +import * as antlr from "antlr4ng"; +import { Token } from "antlr4ng"; + +import { TrinoParserVisitor } from "./TrinoParserVisitor.js"; + +// for running tests with parameters, TODO: discuss strategy for typed parameters in CI +// eslint-disable-next-line no-unused-vars +type int = number; + + +export class TrinoParser extends antlr.Parser { + public static readonly ABSENT_ = 1; + public static readonly ADD_ = 2; + public static readonly ADMIN_ = 3; + public static readonly AFTER_ = 4; + public static readonly ALL_ = 5; + public static readonly ALTER_ = 6; + public static readonly ANALYZE_ = 7; + public static readonly AND_ = 8; + public static readonly ANY_ = 9; + public static readonly ARRAY_ = 10; + public static readonly AS_ = 11; + public static readonly ASC_ = 12; + public static readonly AT_ = 13; + public static readonly AUTHORIZATION_ = 14; + public static readonly BEGIN_ = 15; + public static readonly BERNOULLI_ = 16; + public static readonly BETWEEN_ = 17; + public static readonly BOTH_ = 18; + public static readonly BY_ = 19; + public static readonly CALL_ = 20; + public static readonly CALLED_ = 21; + public static readonly CASCADE_ = 22; + public static readonly CASE_ = 23; + public static readonly CAST_ = 24; + public static readonly CATALOG_ = 25; + public static readonly CATALOGS_ = 26; + public static readonly COLUMN_ = 27; + public static readonly COLUMNS_ = 28; + public static readonly COMMENT_ = 29; + public static readonly COMMIT_ = 30; + public static readonly COMMITTED_ = 31; + public static readonly CONDITIONAL_ = 32; + public static readonly CONSTRAINT_ = 33; + public static readonly COUNT_ = 34; + public static readonly COPARTITION_ = 35; + public static readonly CREATE_ = 36; + public static readonly CROSS_ = 37; + public static readonly CUBE_ = 38; + public static readonly CURRENT_ = 39; + public static readonly CURRENT_CATALOG_ = 40; + public static readonly CURRENT_DATE_ = 41; + public static readonly CURRENT_PATH_ = 42; + public static readonly CURRENT_ROLE_ = 43; + public static readonly CURRENT_SCHEMA_ = 44; + public static readonly CURRENT_TIME_ = 45; + public static readonly CURRENT_TIMESTAMP_ = 46; + public static readonly CURRENT_USER_ = 47; + public static readonly DATA_ = 48; + public static readonly DATE_ = 49; + public static readonly DAY_ = 50; + public static readonly DEALLOCATE_ = 51; + public static readonly DECLARE_ = 52; + public static readonly DEFAULT_ = 53; + public static readonly DEFINE_ = 54; + public static readonly DEFINER_ = 55; + public static readonly DELETE_ = 56; + public static readonly DENY_ = 57; + public static readonly DESC_ = 58; + public static readonly DESCRIBE_ = 59; + public static readonly DESCRIPTOR_ = 60; + public static readonly DETERMINISTIC_ = 61; + public static readonly DISTINCT_ = 62; + public static readonly DISTRIBUTED_ = 63; + public static readonly DO_ = 64; + public static readonly DOUBLE_ = 65; + public static readonly DROP_ = 66; + public static readonly ELSE_ = 67; + public static readonly EMPTY_ = 68; + public static readonly ELSEIF_ = 69; + public static readonly ENCODING_ = 70; + public static readonly END_ = 71; + public static readonly ERROR_ = 72; + public static readonly ESCAPE_ = 73; + public static readonly EXCEPT_ = 74; + public static readonly EXCLUDING_ = 75; + public static readonly EXECUTE_ = 76; + public static readonly EXISTS_ = 77; + public static readonly EXPLAIN_ = 78; + public static readonly EXTRACT_ = 79; + public static readonly FALSE_ = 80; + public static readonly FETCH_ = 81; + public static readonly FILTER_ = 82; + public static readonly FINAL_ = 83; + public static readonly FIRST_ = 84; + public static readonly FOLLOWING_ = 85; + public static readonly FOR_ = 86; + public static readonly FORMAT_ = 87; + public static readonly FROM_ = 88; + public static readonly FULL_ = 89; + public static readonly FUNCTION_ = 90; + public static readonly FUNCTIONS_ = 91; + public static readonly GRACE_ = 92; + public static readonly GRANT_ = 93; + public static readonly GRANTED_ = 94; + public static readonly GRANTS_ = 95; + public static readonly GRAPHVIZ_ = 96; + public static readonly GROUP_ = 97; + public static readonly GROUPING_ = 98; + public static readonly GROUPS_ = 99; + public static readonly HAVING_ = 100; + public static readonly HOUR_ = 101; + public static readonly IF_ = 102; + public static readonly IGNORE_ = 103; + public static readonly IMMEDIATE_ = 104; + public static readonly IN_ = 105; + public static readonly INCLUDING_ = 106; + public static readonly INITIAL_ = 107; + public static readonly INNER_ = 108; + public static readonly INPUT_ = 109; + public static readonly INSERT_ = 110; + public static readonly INTERSECT_ = 111; + public static readonly INTERVAL_ = 112; + public static readonly INTO_ = 113; + public static readonly INVOKER_ = 114; + public static readonly IO_ = 115; + public static readonly IS_ = 116; + public static readonly ISOLATION_ = 117; + public static readonly ITERATE_ = 118; + public static readonly JOIN_ = 119; + public static readonly JSON_ = 120; + public static readonly JSON_ARRAY_ = 121; + public static readonly JSON_EXISTS_ = 122; + public static readonly JSON_OBJECT_ = 123; + public static readonly JSON_QUERY_ = 124; + public static readonly JSON_TABLE_ = 125; + public static readonly JSON_VALUE_ = 126; + public static readonly KEEP_ = 127; + public static readonly KEY_ = 128; + public static readonly KEYS_ = 129; + public static readonly LANGUAGE_ = 130; + public static readonly LAST_ = 131; + public static readonly LATERAL_ = 132; + public static readonly LEADING_ = 133; + public static readonly LEAVE_ = 134; + public static readonly LEFT_ = 135; + public static readonly LEVEL_ = 136; + public static readonly LIKE_ = 137; + public static readonly LIMIT_ = 138; + public static readonly LISTAGG_ = 139; + public static readonly LOCAL_ = 140; + public static readonly LOCALTIME_ = 141; + public static readonly LOCALTIMESTAMP_ = 142; + public static readonly LOGICAL_ = 143; + public static readonly LOOP_ = 144; + public static readonly MAP_ = 145; + public static readonly MATCH_ = 146; + public static readonly MATCHED_ = 147; + public static readonly MATCHES_ = 148; + public static readonly MATCH_RECOGNIZE_ = 149; + public static readonly MATERIALIZED_ = 150; + public static readonly MEASURES_ = 151; + public static readonly MERGE_ = 152; + public static readonly MINUTE_ = 153; + public static readonly MONTH_ = 154; + public static readonly NATURAL_ = 155; + public static readonly NESTED_ = 156; + public static readonly NEXT_ = 157; + public static readonly NFC_ = 158; + public static readonly NFD_ = 159; + public static readonly NFKC_ = 160; + public static readonly NFKD_ = 161; + public static readonly NO_ = 162; + public static readonly NONE_ = 163; + public static readonly NORMALIZE_ = 164; + public static readonly NOT_ = 165; + public static readonly NULL_ = 166; + public static readonly NULLIF_ = 167; + public static readonly NULLS_ = 168; + public static readonly OBJECT_ = 169; + public static readonly OF_ = 170; + public static readonly OFFSET_ = 171; + public static readonly OMIT_ = 172; + public static readonly ON_ = 173; + public static readonly ONE_ = 174; + public static readonly ONLY_ = 175; + public static readonly OPTION_ = 176; + public static readonly OR_ = 177; + public static readonly ORDER_ = 178; + public static readonly ORDINALITY_ = 179; + public static readonly OUTER_ = 180; + public static readonly OUTPUT_ = 181; + public static readonly OVER_ = 182; + public static readonly OVERFLOW_ = 183; + public static readonly PARTITION_ = 184; + public static readonly PARTITIONS_ = 185; + public static readonly PASSING_ = 186; + public static readonly PAST_ = 187; + public static readonly PATH_ = 188; + public static readonly PATTERN_ = 189; + public static readonly PER_ = 190; + public static readonly PERIOD_ = 191; + public static readonly PERMUTE_ = 192; + public static readonly PLAN_ = 193; + public static readonly POSITION_ = 194; + public static readonly PRECEDING_ = 195; + public static readonly PRECISION_ = 196; + public static readonly PREPARE_ = 197; + public static readonly PRIVILEGES_ = 198; + public static readonly PROPERTIES_ = 199; + public static readonly PRUNE_ = 200; + public static readonly QUOTES_ = 201; + public static readonly RANGE_ = 202; + public static readonly READ_ = 203; + public static readonly RECURSIVE_ = 204; + public static readonly REFRESH_ = 205; + public static readonly RENAME_ = 206; + public static readonly REPEAT_ = 207; + public static readonly REPEATABLE_ = 208; + public static readonly REPLACE_ = 209; + public static readonly RESET_ = 210; + public static readonly RESPECT_ = 211; + public static readonly RESTRICT_ = 212; + public static readonly RETURN_ = 213; + public static readonly RETURNING_ = 214; + public static readonly RETURNS_ = 215; + public static readonly REVOKE_ = 216; + public static readonly RIGHT_ = 217; + public static readonly ROLE_ = 218; + public static readonly ROLES_ = 219; + public static readonly ROLLBACK_ = 220; + public static readonly ROLLUP_ = 221; + public static readonly ROW_ = 222; + public static readonly ROWS_ = 223; + public static readonly RUNNING_ = 224; + public static readonly SCALAR_ = 225; + public static readonly SCHEMA_ = 226; + public static readonly SCHEMAS_ = 227; + public static readonly SECOND_ = 228; + public static readonly SECURITY_ = 229; + public static readonly SEEK_ = 230; + public static readonly SELECT_ = 231; + public static readonly SERIALIZABLE_ = 232; + public static readonly SESSION_ = 233; + public static readonly SET_ = 234; + public static readonly SETS_ = 235; + public static readonly SHOW_ = 236; + public static readonly SKIP_ = 237; + public static readonly SOME_ = 238; + public static readonly START_ = 239; + public static readonly STATS_ = 240; + public static readonly SUBSET_ = 241; + public static readonly SUBSTRING_ = 242; + public static readonly SYSTEM_ = 243; + public static readonly TABLE_ = 244; + public static readonly TABLES_ = 245; + public static readonly TABLESAMPLE_ = 246; + public static readonly TEXT_ = 247; + public static readonly TEXT_STRING_ = 248; + public static readonly THEN_ = 249; + public static readonly TIES_ = 250; + public static readonly TIME_ = 251; + public static readonly TIMESTAMP_ = 252; + public static readonly TO_ = 253; + public static readonly TRAILING_ = 254; + public static readonly TRANSACTION_ = 255; + public static readonly TRIM_ = 256; + public static readonly TRUE_ = 257; + public static readonly TRUNCATE_ = 258; + public static readonly TRY_CAST_ = 259; + public static readonly TYPE_ = 260; + public static readonly UESCAPE_ = 261; + public static readonly UNBOUNDED_ = 262; + public static readonly UNCOMMITTED_ = 263; + public static readonly UNCONDITIONAL_ = 264; + public static readonly UNION_ = 265; + public static readonly UNIQUE_ = 266; + public static readonly UNKNOWN_ = 267; + public static readonly UNMATCHED_ = 268; + public static readonly UNNEST_ = 269; + public static readonly UNTIL_ = 270; + public static readonly UPDATE_ = 271; + public static readonly USE_ = 272; + public static readonly USER_ = 273; + public static readonly USING_ = 274; + public static readonly UTF16_ = 275; + public static readonly UTF32_ = 276; + public static readonly UTF8_ = 277; + public static readonly VALIDATE_ = 278; + public static readonly VALUE_ = 279; + public static readonly VALUES_ = 280; + public static readonly VERBOSE_ = 281; + public static readonly VERSION_ = 282; + public static readonly VIEW_ = 283; + public static readonly WHEN_ = 284; + public static readonly WHERE_ = 285; + public static readonly WHILE_ = 286; + public static readonly WINDOW_ = 287; + public static readonly WITH_ = 288; + public static readonly WITHIN_ = 289; + public static readonly WITHOUT_ = 290; + public static readonly WORK_ = 291; + public static readonly WRAPPER_ = 292; + public static readonly WRITE_ = 293; + public static readonly YEAR_ = 294; + public static readonly ZONE_ = 295; + public static readonly EQ_ = 296; + public static readonly NEQ_ = 297; + public static readonly LT_ = 298; + public static readonly LTE_ = 299; + public static readonly GT_ = 300; + public static readonly GTE_ = 301; + public static readonly PLUS_ = 302; + public static readonly MINUS_ = 303; + public static readonly ASTERISK_ = 304; + public static readonly SLASH_ = 305; + public static readonly PERCENT_ = 306; + public static readonly CONCAT_ = 307; + public static readonly QUESTION_MARK_ = 308; + public static readonly SEMICOLON_ = 309; + public static readonly DOT_ = 310; + public static readonly COLON_ = 311; + public static readonly COMMA_ = 312; + public static readonly LPAREN_ = 313; + public static readonly RPAREN_ = 314; + public static readonly LSQUARE_ = 315; + public static readonly RSQUARE_ = 316; + public static readonly LCURLY_ = 317; + public static readonly RCURLY_ = 318; + public static readonly LCURLYHYPHEN_ = 319; + public static readonly RCURLYHYPHEN_ = 320; + public static readonly LARROW_ = 321; + public static readonly RARROW_ = 322; + public static readonly RDOUBLEARROW_ = 323; + public static readonly VBAR_ = 324; + public static readonly DOLLAR_ = 325; + public static readonly CARET_ = 326; + public static readonly STRING_ = 327; + public static readonly UNICODE_STRING_ = 328; + public static readonly BINARY_LITERAL_ = 329; + public static readonly INTEGER_VALUE_ = 330; + public static readonly DECIMAL_VALUE_ = 331; + public static readonly DOUBLE_VALUE_ = 332; + public static readonly IDENTIFIER_ = 333; + public static readonly DIGIT_IDENTIFIER_ = 334; + public static readonly QUOTED_IDENTIFIER_ = 335; + public static readonly BACKQUOTED_IDENTIFIER_ = 336; + public static readonly SIMPLE_COMMENT_ = 337; + public static readonly BRACKETED_COMMENT_ = 338; + public static readonly WS_ = 339; + public static readonly UNRECOGNIZED_ = 340; + public static readonly RULE_parse = 0; + public static readonly RULE_statements = 1; + public static readonly RULE_statement = 2; + public static readonly RULE_rootQuery = 3; + public static readonly RULE_withFunction = 4; + public static readonly RULE_query = 5; + public static readonly RULE_with = 6; + public static readonly RULE_tableElement = 7; + public static readonly RULE_columnDefinition = 8; + public static readonly RULE_likeClause = 9; + public static readonly RULE_properties = 10; + public static readonly RULE_propertyAssignments = 11; + public static readonly RULE_property = 12; + public static readonly RULE_propertyValue = 13; + public static readonly RULE_queryNoWith = 14; + public static readonly RULE_limitRowCount = 15; + public static readonly RULE_rowCount = 16; + public static readonly RULE_queryTerm = 17; + public static readonly RULE_queryPrimary = 18; + public static readonly RULE_sortItem = 19; + public static readonly RULE_querySpecification = 20; + public static readonly RULE_groupBy = 21; + public static readonly RULE_groupingElement = 22; + public static readonly RULE_groupingSet = 23; + public static readonly RULE_windowDefinition = 24; + public static readonly RULE_windowSpecification = 25; + public static readonly RULE_namedQuery = 26; + public static readonly RULE_setQuantifier = 27; + public static readonly RULE_selectItem = 28; + public static readonly RULE_relation = 29; + public static readonly RULE_joinType = 30; + public static readonly RULE_joinCriteria = 31; + public static readonly RULE_sampledRelation = 32; + public static readonly RULE_sampleType = 33; + public static readonly RULE_trimsSpecification = 34; + public static readonly RULE_listAggOverflowBehavior = 35; + public static readonly RULE_listaggCountIndication = 36; + public static readonly RULE_patternRecognition = 37; + public static readonly RULE_measureDefinition = 38; + public static readonly RULE_rowsPerMatch = 39; + public static readonly RULE_emptyMatchHandling = 40; + public static readonly RULE_skipTo = 41; + public static readonly RULE_subsetDefinition = 42; + public static readonly RULE_variableDefinition = 43; + public static readonly RULE_aliasedRelation = 44; + public static readonly RULE_columnAliases = 45; + public static readonly RULE_relationPrimary = 46; + public static readonly RULE_tableFunctionCall = 47; + public static readonly RULE_tableFunctionArgument = 48; + public static readonly RULE_tableArgument = 49; + public static readonly RULE_tableArgumentRelation = 50; + public static readonly RULE_descriptorArgument = 51; + public static readonly RULE_descriptorField = 52; + public static readonly RULE_copartitionTables = 53; + public static readonly RULE_expression = 54; + public static readonly RULE_booleanExpression = 55; + public static readonly RULE_predicate_ = 56; + public static readonly RULE_valueExpression = 57; + public static readonly RULE_primaryExpression = 58; + public static readonly RULE_jsonPathInvocation = 59; + public static readonly RULE_jsonValueExpression = 60; + public static readonly RULE_jsonRepresentation = 61; + public static readonly RULE_jsonArgument = 62; + public static readonly RULE_jsonExistsErrorBehavior = 63; + public static readonly RULE_jsonValueBehavior = 64; + public static readonly RULE_jsonQueryWrapperBehavior = 65; + public static readonly RULE_jsonQueryBehavior = 66; + public static readonly RULE_jsonObjectMember = 67; + public static readonly RULE_processingMode = 68; + public static readonly RULE_nullTreatment = 69; + public static readonly RULE_string_ = 70; + public static readonly RULE_timeZoneSpecifier = 71; + public static readonly RULE_comparisonOperator = 72; + public static readonly RULE_comparisonQuantifier = 73; + public static readonly RULE_booleanValue = 74; + public static readonly RULE_interval = 75; + public static readonly RULE_intervalField = 76; + public static readonly RULE_normalForm = 77; + public static readonly RULE_type = 78; + public static readonly RULE_rowField = 79; + public static readonly RULE_typeParameter = 80; + public static readonly RULE_whenClause = 81; + public static readonly RULE_filter = 82; + public static readonly RULE_mergeCase = 83; + public static readonly RULE_over = 84; + public static readonly RULE_windowFrame = 85; + public static readonly RULE_frameExtent = 86; + public static readonly RULE_frameBound = 87; + public static readonly RULE_rowPattern = 88; + public static readonly RULE_patternPrimary = 89; + public static readonly RULE_patternQuantifier = 90; + public static readonly RULE_updateAssignment = 91; + public static readonly RULE_explainOption = 92; + public static readonly RULE_transactionMode = 93; + public static readonly RULE_levelOfIsolation = 94; + public static readonly RULE_callArgument = 95; + public static readonly RULE_pathElement = 96; + public static readonly RULE_pathSpecification = 97; + public static readonly RULE_functionSpecification = 98; + public static readonly RULE_functionDeclaration = 99; + public static readonly RULE_parameterDeclaration = 100; + public static readonly RULE_returnsClause = 101; + public static readonly RULE_routineCharacteristic = 102; + public static readonly RULE_controlStatement = 103; + public static readonly RULE_caseStatementWhenClause = 104; + public static readonly RULE_elseIfClause = 105; + public static readonly RULE_elseClause = 106; + public static readonly RULE_variableDeclaration = 107; + public static readonly RULE_sqlStatementList = 108; + public static readonly RULE_privilege = 109; + public static readonly RULE_qualifiedName = 110; + public static readonly RULE_queryPeriod = 111; + public static readonly RULE_rangeType = 112; + public static readonly RULE_grantor = 113; + public static readonly RULE_principal = 114; + public static readonly RULE_roles = 115; + public static readonly RULE_identifier = 116; + public static readonly RULE_number = 117; + public static readonly RULE_authorizationUser = 118; + public static readonly RULE_nonReserved = 119; + + public static readonly literalNames = [ + null, "'ABSENT'", "'ADD'", "'ADMIN'", "'AFTER'", "'ALL'", "'ALTER'", + "'ANALYZE'", "'AND'", "'ANY'", "'ARRAY'", "'AS'", "'ASC'", "'AT'", + "'AUTHORIZATION'", "'BEGIN'", "'BERNOULLI'", "'BETWEEN'", "'BOTH'", + "'BY'", "'CALL'", "'CALLED'", "'CASCADE'", "'CASE'", "'CAST'", "'CATALOG'", + "'CATALOGS'", "'COLUMN'", "'COLUMNS'", "'COMMENT'", "'COMMIT'", + "'COMMITTED'", "'CONDITIONAL'", "'CONSTRAINT'", "'COUNT'", "'COPARTITION'", + "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", "'CURRENT_CATALOG'", + "'CURRENT_DATE'", "'CURRENT_PATH'", "'CURRENT_ROLE'", "'CURRENT_SCHEMA'", + "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", "'DATA'", + "'DATE'", "'DAY'", "'DEALLOCATE'", "'DECLARE'", "'DEFAULT'", "'DEFINE'", + "'DEFINER'", "'DELETE'", "'DENY'", "'DESC'", "'DESCRIBE'", "'DESCRIPTOR'", + "'DETERMINISTIC'", "'DISTINCT'", "'DISTRIBUTED'", "'DO'", "'DOUBLE'", + "'DROP'", "'ELSE'", "'EMPTY'", "'ELSEIF'", "'ENCODING'", "'END'", + "'ERROR'", "'ESCAPE'", "'EXCEPT'", "'EXCLUDING'", "'EXECUTE'", "'EXISTS'", + "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FILTER'", "'FINAL'", + "'FIRST'", "'FOLLOWING'", "'FOR'", "'FORMAT'", "'FROM'", "'FULL'", + "'FUNCTION'", "'FUNCTIONS'", "'GRACE'", "'GRANT'", "'GRANTED'", + "'GRANTS'", "'GRAPHVIZ'", "'GROUP'", "'GROUPING'", "'GROUPS'", "'HAVING'", + "'HOUR'", "'IF'", "'IGNORE'", "'IMMEDIATE'", "'IN'", "'INCLUDING'", + "'INITIAL'", "'INNER'", "'INPUT'", "'INSERT'", "'INTERSECT'", "'INTERVAL'", + "'INTO'", "'INVOKER'", "'IO'", "'IS'", "'ISOLATION'", "'ITERATE'", + "'JOIN'", "'JSON'", "'JSON_ARRAY'", "'JSON_EXISTS'", "'JSON_OBJECT'", + "'JSON_QUERY'", "'JSON_TABLE'", "'JSON_VALUE'", "'KEEP'", "'KEY'", + "'KEYS'", "'LANGUAGE'", "'LAST'", "'LATERAL'", "'LEADING'", "'LEAVE'", + "'LEFT'", "'LEVEL'", "'LIKE'", "'LIMIT'", "'LISTAGG'", "'LOCAL'", + "'LOCALTIME'", "'LOCALTIMESTAMP'", "'LOGICAL'", "'LOOP'", "'MAP'", + "'MATCH'", "'MATCHED'", "'MATCHES'", "'MATCH_RECOGNIZE'", "'MATERIALIZED'", + "'MEASURES'", "'MERGE'", "'MINUTE'", "'MONTH'", "'NATURAL'", "'NESTED'", + "'NEXT'", "'NFC'", "'NFD'", "'NFKC'", "'NFKD'", "'NO'", "'NONE'", + "'NORMALIZE'", "'NOT'", "'NULL'", "'NULLIF'", "'NULLS'", "'OBJECT'", + "'OF'", "'OFFSET'", "'OMIT'", "'ON'", "'ONE'", "'ONLY'", "'OPTION'", + "'OR'", "'ORDER'", "'ORDINALITY'", "'OUTER'", "'OUTPUT'", "'OVER'", + "'OVERFLOW'", "'PARTITION'", "'PARTITIONS'", "'PASSING'", "'PAST'", + "'PATH'", "'PATTERN'", "'PER'", "'PERIOD'", "'PERMUTE'", "'PLAN'", + "'POSITION'", "'PRECEDING'", "'PRECISION'", "'PREPARE'", "'PRIVILEGES'", + "'PROPERTIES'", "'PRUNE'", "'QUOTES'", "'RANGE'", "'READ'", "'RECURSIVE'", + "'REFRESH'", "'RENAME'", "'REPEAT'", "'REPEATABLE'", "'REPLACE'", + "'RESET'", "'RESPECT'", "'RESTRICT'", "'RETURN'", "'RETURNING'", + "'RETURNS'", "'REVOKE'", "'RIGHT'", "'ROLE'", "'ROLES'", "'ROLLBACK'", + "'ROLLUP'", "'ROW'", "'ROWS'", "'RUNNING'", "'SCALAR'", "'SCHEMA'", + "'SCHEMAS'", "'SECOND'", "'SECURITY'", "'SEEK'", "'SELECT'", "'SERIALIZABLE'", + "'SESSION'", "'SET'", "'SETS'", "'SHOW'", "'SKIP'", "'SOME'", "'START'", + "'STATS'", "'SUBSET'", "'SUBSTRING'", "'SYSTEM'", "'TABLE'", "'TABLES'", + "'TABLESAMPLE'", "'TEXT'", "'STRING'", "'THEN'", "'TIES'", "'TIME'", + "'TIMESTAMP'", "'TO'", "'TRAILING'", "'TRANSACTION'", "'TRIM'", + "'TRUE'", "'TRUNCATE'", "'TRY_CAST'", "'TYPE'", "'UESCAPE'", "'UNBOUNDED'", + "'UNCOMMITTED'", "'UNCONDITIONAL'", "'UNION'", "'UNIQUE'", "'UNKNOWN'", + "'UNMATCHED'", "'UNNEST'", "'UNTIL'", "'UPDATE'", "'USE'", "'USER'", + "'USING'", "'UTF16'", "'UTF32'", "'UTF8'", "'VALIDATE'", "'VALUE'", + "'VALUES'", "'VERBOSE'", "'VERSION'", "'VIEW'", "'WHEN'", "'WHERE'", + "'WHILE'", "'WINDOW'", "'WITH'", "'WITHIN'", "'WITHOUT'", "'WORK'", + "'WRAPPER'", "'WRITE'", "'YEAR'", "'ZONE'", "'='", null, "'<'", + "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'||'", + "'?'", "';'", "'.'", "'_:'", "','", "'('", "')'", "'['", "']'", + "'{'", "'}'", "'{-'", "'-}'", "'<-'", "'->'", "'=>'", "'|'", "'$'", + "'^'" + ]; + + public static readonly symbolicNames = [ + null, "ABSENT_", "ADD_", "ADMIN_", "AFTER_", "ALL_", "ALTER_", "ANALYZE_", + "AND_", "ANY_", "ARRAY_", "AS_", "ASC_", "AT_", "AUTHORIZATION_", + "BEGIN_", "BERNOULLI_", "BETWEEN_", "BOTH_", "BY_", "CALL_", "CALLED_", + "CASCADE_", "CASE_", "CAST_", "CATALOG_", "CATALOGS_", "COLUMN_", + "COLUMNS_", "COMMENT_", "COMMIT_", "COMMITTED_", "CONDITIONAL_", + "CONSTRAINT_", "COUNT_", "COPARTITION_", "CREATE_", "CROSS_", "CUBE_", + "CURRENT_", "CURRENT_CATALOG_", "CURRENT_DATE_", "CURRENT_PATH_", + "CURRENT_ROLE_", "CURRENT_SCHEMA_", "CURRENT_TIME_", "CURRENT_TIMESTAMP_", + "CURRENT_USER_", "DATA_", "DATE_", "DAY_", "DEALLOCATE_", "DECLARE_", + "DEFAULT_", "DEFINE_", "DEFINER_", "DELETE_", "DENY_", "DESC_", + "DESCRIBE_", "DESCRIPTOR_", "DETERMINISTIC_", "DISTINCT_", "DISTRIBUTED_", + "DO_", "DOUBLE_", "DROP_", "ELSE_", "EMPTY_", "ELSEIF_", "ENCODING_", + "END_", "ERROR_", "ESCAPE_", "EXCEPT_", "EXCLUDING_", "EXECUTE_", + "EXISTS_", "EXPLAIN_", "EXTRACT_", "FALSE_", "FETCH_", "FILTER_", + "FINAL_", "FIRST_", "FOLLOWING_", "FOR_", "FORMAT_", "FROM_", "FULL_", + "FUNCTION_", "FUNCTIONS_", "GRACE_", "GRANT_", "GRANTED_", "GRANTS_", + "GRAPHVIZ_", "GROUP_", "GROUPING_", "GROUPS_", "HAVING_", "HOUR_", + "IF_", "IGNORE_", "IMMEDIATE_", "IN_", "INCLUDING_", "INITIAL_", + "INNER_", "INPUT_", "INSERT_", "INTERSECT_", "INTERVAL_", "INTO_", + "INVOKER_", "IO_", "IS_", "ISOLATION_", "ITERATE_", "JOIN_", "JSON_", + "JSON_ARRAY_", "JSON_EXISTS_", "JSON_OBJECT_", "JSON_QUERY_", "JSON_TABLE_", + "JSON_VALUE_", "KEEP_", "KEY_", "KEYS_", "LANGUAGE_", "LAST_", "LATERAL_", + "LEADING_", "LEAVE_", "LEFT_", "LEVEL_", "LIKE_", "LIMIT_", "LISTAGG_", + "LOCAL_", "LOCALTIME_", "LOCALTIMESTAMP_", "LOGICAL_", "LOOP_", + "MAP_", "MATCH_", "MATCHED_", "MATCHES_", "MATCH_RECOGNIZE_", "MATERIALIZED_", + "MEASURES_", "MERGE_", "MINUTE_", "MONTH_", "NATURAL_", "NESTED_", + "NEXT_", "NFC_", "NFD_", "NFKC_", "NFKD_", "NO_", "NONE_", "NORMALIZE_", + "NOT_", "NULL_", "NULLIF_", "NULLS_", "OBJECT_", "OF_", "OFFSET_", + "OMIT_", "ON_", "ONE_", "ONLY_", "OPTION_", "OR_", "ORDER_", "ORDINALITY_", + "OUTER_", "OUTPUT_", "OVER_", "OVERFLOW_", "PARTITION_", "PARTITIONS_", + "PASSING_", "PAST_", "PATH_", "PATTERN_", "PER_", "PERIOD_", "PERMUTE_", + "PLAN_", "POSITION_", "PRECEDING_", "PRECISION_", "PREPARE_", "PRIVILEGES_", + "PROPERTIES_", "PRUNE_", "QUOTES_", "RANGE_", "READ_", "RECURSIVE_", + "REFRESH_", "RENAME_", "REPEAT_", "REPEATABLE_", "REPLACE_", "RESET_", + "RESPECT_", "RESTRICT_", "RETURN_", "RETURNING_", "RETURNS_", "REVOKE_", + "RIGHT_", "ROLE_", "ROLES_", "ROLLBACK_", "ROLLUP_", "ROW_", "ROWS_", + "RUNNING_", "SCALAR_", "SCHEMA_", "SCHEMAS_", "SECOND_", "SECURITY_", + "SEEK_", "SELECT_", "SERIALIZABLE_", "SESSION_", "SET_", "SETS_", + "SHOW_", "SKIP_", "SOME_", "START_", "STATS_", "SUBSET_", "SUBSTRING_", + "SYSTEM_", "TABLE_", "TABLES_", "TABLESAMPLE_", "TEXT_", "TEXT_STRING_", + "THEN_", "TIES_", "TIME_", "TIMESTAMP_", "TO_", "TRAILING_", "TRANSACTION_", + "TRIM_", "TRUE_", "TRUNCATE_", "TRY_CAST_", "TYPE_", "UESCAPE_", + "UNBOUNDED_", "UNCOMMITTED_", "UNCONDITIONAL_", "UNION_", "UNIQUE_", + "UNKNOWN_", "UNMATCHED_", "UNNEST_", "UNTIL_", "UPDATE_", "USE_", + "USER_", "USING_", "UTF16_", "UTF32_", "UTF8_", "VALIDATE_", "VALUE_", + "VALUES_", "VERBOSE_", "VERSION_", "VIEW_", "WHEN_", "WHERE_", "WHILE_", + "WINDOW_", "WITH_", "WITHIN_", "WITHOUT_", "WORK_", "WRAPPER_", + "WRITE_", "YEAR_", "ZONE_", "EQ_", "NEQ_", "LT_", "LTE_", "GT_", + "GTE_", "PLUS_", "MINUS_", "ASTERISK_", "SLASH_", "PERCENT_", "CONCAT_", + "QUESTION_MARK_", "SEMICOLON_", "DOT_", "COLON_", "COMMA_", "LPAREN_", + "RPAREN_", "LSQUARE_", "RSQUARE_", "LCURLY_", "RCURLY_", "LCURLYHYPHEN_", + "RCURLYHYPHEN_", "LARROW_", "RARROW_", "RDOUBLEARROW_", "VBAR_", + "DOLLAR_", "CARET_", "STRING_", "UNICODE_STRING_", "BINARY_LITERAL_", + "INTEGER_VALUE_", "DECIMAL_VALUE_", "DOUBLE_VALUE_", "IDENTIFIER_", + "DIGIT_IDENTIFIER_", "QUOTED_IDENTIFIER_", "BACKQUOTED_IDENTIFIER_", + "SIMPLE_COMMENT_", "BRACKETED_COMMENT_", "WS_", "UNRECOGNIZED_" + ]; + public static readonly ruleNames = [ + "parse", "statements", "statement", "rootQuery", "withFunction", + "query", "with", "tableElement", "columnDefinition", "likeClause", + "properties", "propertyAssignments", "property", "propertyValue", + "queryNoWith", "limitRowCount", "rowCount", "queryTerm", "queryPrimary", + "sortItem", "querySpecification", "groupBy", "groupingElement", + "groupingSet", "windowDefinition", "windowSpecification", "namedQuery", + "setQuantifier", "selectItem", "relation", "joinType", "joinCriteria", + "sampledRelation", "sampleType", "trimsSpecification", "listAggOverflowBehavior", + "listaggCountIndication", "patternRecognition", "measureDefinition", + "rowsPerMatch", "emptyMatchHandling", "skipTo", "subsetDefinition", + "variableDefinition", "aliasedRelation", "columnAliases", "relationPrimary", + "tableFunctionCall", "tableFunctionArgument", "tableArgument", "tableArgumentRelation", + "descriptorArgument", "descriptorField", "copartitionTables", "expression", + "booleanExpression", "predicate_", "valueExpression", "primaryExpression", + "jsonPathInvocation", "jsonValueExpression", "jsonRepresentation", + "jsonArgument", "jsonExistsErrorBehavior", "jsonValueBehavior", + "jsonQueryWrapperBehavior", "jsonQueryBehavior", "jsonObjectMember", + "processingMode", "nullTreatment", "string_", "timeZoneSpecifier", + "comparisonOperator", "comparisonQuantifier", "booleanValue", "interval", + "intervalField", "normalForm", "type", "rowField", "typeParameter", + "whenClause", "filter", "mergeCase", "over", "windowFrame", "frameExtent", + "frameBound", "rowPattern", "patternPrimary", "patternQuantifier", + "updateAssignment", "explainOption", "transactionMode", "levelOfIsolation", + "callArgument", "pathElement", "pathSpecification", "functionSpecification", + "functionDeclaration", "parameterDeclaration", "returnsClause", + "routineCharacteristic", "controlStatement", "caseStatementWhenClause", + "elseIfClause", "elseClause", "variableDeclaration", "sqlStatementList", + "privilege", "qualifiedName", "queryPeriod", "rangeType", "grantor", + "principal", "roles", "identifier", "number", "authorizationUser", + "nonReserved", + ]; + + public get grammarFileName(): string { return "TrinoParser.g4"; } + public get literalNames(): (string | null)[] { return TrinoParser.literalNames; } + public get symbolicNames(): (string | null)[] { return TrinoParser.symbolicNames; } + public get ruleNames(): string[] { return TrinoParser.ruleNames; } + public get serializedATN(): number[] { return TrinoParser._serializedATN; } + + protected createFailedPredicateException(predicate?: string, message?: string): antlr.FailedPredicateException { + return new antlr.FailedPredicateException(this, predicate, message); + } + + public constructor(input: antlr.TokenStream) { + super(input); + this.interpreter = new antlr.ParserATNSimulator(this, TrinoParser._ATN, TrinoParser.decisionsToDFA, new antlr.PredictionContextCache()); + } + public parse(): ParseContext { + let localContext = new ParseContext(this.context, this.state); + this.enterRule(localContext, 0, TrinoParser.RULE_parse); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 241; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 6)) & ~0x1F) === 0 && ((1 << (_la - 6)) & 1098924035) !== 0) || ((((_la - 51)) & ~0x1F) === 0 && ((1 << (_la - 51)) & 167805409) !== 0) || _la === 93 || _la === 110 || _la === 152 || ((((_la - 197)) & ~0x1F) === 0 && ((1 << (_la - 197)) & 8921345) !== 0) || ((((_la - 231)) & ~0x1F) === 0 && ((1 << (_la - 231)) & 134226217) !== 0) || ((((_la - 271)) & ~0x1F) === 0 && ((1 << (_la - 271)) & 131587) !== 0) || _la === 313) { + { + this.state = 240; + this.statements(); + } + } + + this.state = 243; + this.match(TrinoParser.EOF); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public statements(): StatementsContext { + let localContext = new StatementsContext(this.context, this.state); + this.enterRule(localContext, 2, TrinoParser.RULE_statements); + let _la: number; + try { + this.state = 253; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 2, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 245; + this.statement(); + this.state = 247; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 309) { + { + this.state = 246; + this.match(TrinoParser.SEMICOLON_); + } + } + + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 249; + this.statement(); + this.state = 250; + this.match(TrinoParser.SEMICOLON_); + this.state = 251; + this.statements(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public statement(): StatementContext { + let localContext = new StatementContext(this.context, this.state); + this.enterRule(localContext, 4, TrinoParser.RULE_statement); + let _la: number; + try { + this.state = 1126; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 123, this.context) ) { + case 1: + localContext = new StatementDefaultContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 255; + this.rootQuery(); + } + break; + case 2: + localContext = new UseContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 256; + this.match(TrinoParser.USE_); + this.state = 257; + (localContext as UseContext)._schema = this.identifier(); + } + break; + case 3: + localContext = new UseContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 258; + this.match(TrinoParser.USE_); + this.state = 259; + (localContext as UseContext)._catalog = this.identifier(); + this.state = 260; + this.match(TrinoParser.DOT_); + this.state = 261; + (localContext as UseContext)._schema = this.identifier(); + } + break; + case 4: + localContext = new CreateCatalogContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 263; + this.match(TrinoParser.CREATE_); + this.state = 264; + this.match(TrinoParser.CATALOG_); + this.state = 268; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) { + case 1: + { + this.state = 265; + this.match(TrinoParser.IF_); + this.state = 266; + this.match(TrinoParser.NOT_); + this.state = 267; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 270; + (localContext as CreateCatalogContext)._catalog = this.identifier(); + this.state = 271; + this.match(TrinoParser.USING_); + this.state = 272; + (localContext as CreateCatalogContext)._connectorName = this.identifier(); + this.state = 275; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 29) { + { + this.state = 273; + this.match(TrinoParser.COMMENT_); + this.state = 274; + this.string_(); + } + } + + this.state = 279; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 14) { + { + this.state = 277; + this.match(TrinoParser.AUTHORIZATION_); + this.state = 278; + this.principal(); + } + } + + this.state = 283; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 281; + this.match(TrinoParser.WITH_); + this.state = 282; + this.properties(); + } + } + + } + break; + case 5: + localContext = new DropCatalogContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 285; + this.match(TrinoParser.DROP_); + this.state = 286; + this.match(TrinoParser.CATALOG_); + this.state = 289; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 7, this.context) ) { + case 1: + { + this.state = 287; + this.match(TrinoParser.IF_); + this.state = 288; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 291; + (localContext as DropCatalogContext)._catalog = this.identifier(); + this.state = 293; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 22 || _la === 212) { + { + this.state = 292; + _la = this.tokenStream.LA(1); + if(!(_la === 22 || _la === 212)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + } + break; + case 6: + localContext = new CreateSchemaContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 295; + this.match(TrinoParser.CREATE_); + this.state = 296; + this.match(TrinoParser.SCHEMA_); + this.state = 300; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) { + case 1: + { + this.state = 297; + this.match(TrinoParser.IF_); + this.state = 298; + this.match(TrinoParser.NOT_); + this.state = 299; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 302; + this.qualifiedName(); + this.state = 305; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 14) { + { + this.state = 303; + this.match(TrinoParser.AUTHORIZATION_); + this.state = 304; + this.principal(); + } + } + + this.state = 309; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 307; + this.match(TrinoParser.WITH_); + this.state = 308; + this.properties(); + } + } + + } + break; + case 7: + localContext = new DropSchemaContext(localContext); + this.enterOuterAlt(localContext, 7); + { + this.state = 311; + this.match(TrinoParser.DROP_); + this.state = 312; + this.match(TrinoParser.SCHEMA_); + this.state = 315; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 12, this.context) ) { + case 1: + { + this.state = 313; + this.match(TrinoParser.IF_); + this.state = 314; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 317; + this.qualifiedName(); + this.state = 319; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 22 || _la === 212) { + { + this.state = 318; + _la = this.tokenStream.LA(1); + if(!(_la === 22 || _la === 212)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + } + break; + case 8: + localContext = new RenameSchemaContext(localContext); + this.enterOuterAlt(localContext, 8); + { + this.state = 321; + this.match(TrinoParser.ALTER_); + this.state = 322; + this.match(TrinoParser.SCHEMA_); + this.state = 323; + this.qualifiedName(); + this.state = 324; + this.match(TrinoParser.RENAME_); + this.state = 325; + this.match(TrinoParser.TO_); + this.state = 326; + this.identifier(); + } + break; + case 9: + localContext = new SetSchemaAuthorizationContext(localContext); + this.enterOuterAlt(localContext, 9); + { + this.state = 328; + this.match(TrinoParser.ALTER_); + this.state = 329; + this.match(TrinoParser.SCHEMA_); + this.state = 330; + this.qualifiedName(); + this.state = 331; + this.match(TrinoParser.SET_); + this.state = 332; + this.match(TrinoParser.AUTHORIZATION_); + this.state = 333; + this.principal(); + } + break; + case 10: + localContext = new CreateTableAsSelectContext(localContext); + this.enterOuterAlt(localContext, 10); + { + this.state = 335; + this.match(TrinoParser.CREATE_); + this.state = 338; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177) { + { + this.state = 336; + this.match(TrinoParser.OR_); + this.state = 337; + this.match(TrinoParser.REPLACE_); + } + } + + this.state = 340; + this.match(TrinoParser.TABLE_); + this.state = 344; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 15, this.context) ) { + case 1: + { + this.state = 341; + this.match(TrinoParser.IF_); + this.state = 342; + this.match(TrinoParser.NOT_); + this.state = 343; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 346; + this.qualifiedName(); + this.state = 348; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 347; + this.columnAliases(); + } + } + + this.state = 352; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 29) { + { + this.state = 350; + this.match(TrinoParser.COMMENT_); + this.state = 351; + this.string_(); + } + } + + this.state = 356; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 354; + this.match(TrinoParser.WITH_); + this.state = 355; + this.properties(); + } + } + + this.state = 358; + this.match(TrinoParser.AS_); + this.state = 364; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 19, this.context) ) { + case 1: + { + this.state = 359; + this.rootQuery(); + } + break; + case 2: + { + this.state = 360; + this.match(TrinoParser.LPAREN_); + this.state = 361; + this.rootQuery(); + this.state = 362; + this.match(TrinoParser.RPAREN_); + } + break; + } + this.state = 371; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 366; + this.match(TrinoParser.WITH_); + this.state = 368; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 162) { + { + this.state = 367; + this.match(TrinoParser.NO_); + } + } + + this.state = 370; + this.match(TrinoParser.DATA_); + } + } + + } + break; + case 11: + localContext = new CreateTableContext(localContext); + this.enterOuterAlt(localContext, 11); + { + this.state = 373; + this.match(TrinoParser.CREATE_); + this.state = 376; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177) { + { + this.state = 374; + this.match(TrinoParser.OR_); + this.state = 375; + this.match(TrinoParser.REPLACE_); + } + } + + this.state = 378; + this.match(TrinoParser.TABLE_); + this.state = 382; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 23, this.context) ) { + case 1: + { + this.state = 379; + this.match(TrinoParser.IF_); + this.state = 380; + this.match(TrinoParser.NOT_); + this.state = 381; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 384; + this.qualifiedName(); + this.state = 385; + this.match(TrinoParser.LPAREN_); + this.state = 386; + this.tableElement(); + this.state = 391; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 387; + this.match(TrinoParser.COMMA_); + this.state = 388; + this.tableElement(); + } + } + this.state = 393; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 394; + this.match(TrinoParser.RPAREN_); + this.state = 397; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 29) { + { + this.state = 395; + this.match(TrinoParser.COMMENT_); + this.state = 396; + this.string_(); + } + } + + this.state = 401; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 399; + this.match(TrinoParser.WITH_); + this.state = 400; + this.properties(); + } + } + + } + break; + case 12: + localContext = new DropTableContext(localContext); + this.enterOuterAlt(localContext, 12); + { + this.state = 403; + this.match(TrinoParser.DROP_); + this.state = 404; + this.match(TrinoParser.TABLE_); + this.state = 407; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 27, this.context) ) { + case 1: + { + this.state = 405; + this.match(TrinoParser.IF_); + this.state = 406; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 409; + this.qualifiedName(); + } + break; + case 13: + localContext = new InsertIntoContext(localContext); + this.enterOuterAlt(localContext, 13); + { + this.state = 410; + this.match(TrinoParser.INSERT_); + this.state = 411; + this.match(TrinoParser.INTO_); + this.state = 412; + this.qualifiedName(); + this.state = 414; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 28, this.context) ) { + case 1: + { + this.state = 413; + this.columnAliases(); + } + break; + } + this.state = 416; + this.rootQuery(); + } + break; + case 14: + localContext = new DeleteContext(localContext); + this.enterOuterAlt(localContext, 14); + { + this.state = 418; + this.match(TrinoParser.DELETE_); + this.state = 419; + this.match(TrinoParser.FROM_); + this.state = 420; + this.qualifiedName(); + this.state = 423; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 285) { + { + this.state = 421; + this.match(TrinoParser.WHERE_); + this.state = 422; + this.booleanExpression(0); + } + } + + } + break; + case 15: + localContext = new TruncateTableContext(localContext); + this.enterOuterAlt(localContext, 15); + { + this.state = 425; + this.match(TrinoParser.TRUNCATE_); + this.state = 426; + this.match(TrinoParser.TABLE_); + this.state = 427; + this.qualifiedName(); + } + break; + case 16: + localContext = new CommentTableContext(localContext); + this.enterOuterAlt(localContext, 16); + { + this.state = 428; + this.match(TrinoParser.COMMENT_); + this.state = 429; + this.match(TrinoParser.ON_); + this.state = 430; + this.match(TrinoParser.TABLE_); + this.state = 431; + this.qualifiedName(); + this.state = 432; + this.match(TrinoParser.IS_); + this.state = 435; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.STRING_: + case TrinoParser.UNICODE_STRING_: + { + this.state = 433; + this.string_(); + } + break; + case TrinoParser.NULL_: + { + this.state = 434; + this.match(TrinoParser.NULL_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + break; + case 17: + localContext = new CommentViewContext(localContext); + this.enterOuterAlt(localContext, 17); + { + this.state = 437; + this.match(TrinoParser.COMMENT_); + this.state = 438; + this.match(TrinoParser.ON_); + this.state = 439; + this.match(TrinoParser.VIEW_); + this.state = 440; + this.qualifiedName(); + this.state = 441; + this.match(TrinoParser.IS_); + this.state = 444; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.STRING_: + case TrinoParser.UNICODE_STRING_: + { + this.state = 442; + this.string_(); + } + break; + case TrinoParser.NULL_: + { + this.state = 443; + this.match(TrinoParser.NULL_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + break; + case 18: + localContext = new CommentColumnContext(localContext); + this.enterOuterAlt(localContext, 18); + { + this.state = 446; + this.match(TrinoParser.COMMENT_); + this.state = 447; + this.match(TrinoParser.ON_); + this.state = 448; + this.match(TrinoParser.COLUMN_); + this.state = 449; + this.qualifiedName(); + this.state = 450; + this.match(TrinoParser.IS_); + this.state = 453; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.STRING_: + case TrinoParser.UNICODE_STRING_: + { + this.state = 451; + this.string_(); + } + break; + case TrinoParser.NULL_: + { + this.state = 452; + this.match(TrinoParser.NULL_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + break; + case 19: + localContext = new RenameTableContext(localContext); + this.enterOuterAlt(localContext, 19); + { + this.state = 455; + this.match(TrinoParser.ALTER_); + this.state = 456; + this.match(TrinoParser.TABLE_); + this.state = 459; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 33, this.context) ) { + case 1: + { + this.state = 457; + this.match(TrinoParser.IF_); + this.state = 458; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 461; + (localContext as RenameTableContext)._from_ = this.qualifiedName(); + this.state = 462; + this.match(TrinoParser.RENAME_); + this.state = 463; + this.match(TrinoParser.TO_); + this.state = 464; + (localContext as RenameTableContext)._to = this.qualifiedName(); + } + break; + case 20: + localContext = new AddColumnContext(localContext); + this.enterOuterAlt(localContext, 20); + { + this.state = 466; + this.match(TrinoParser.ALTER_); + this.state = 467; + this.match(TrinoParser.TABLE_); + this.state = 470; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 34, this.context) ) { + case 1: + { + this.state = 468; + this.match(TrinoParser.IF_); + this.state = 469; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 472; + (localContext as AddColumnContext)._tableName = this.qualifiedName(); + this.state = 473; + this.match(TrinoParser.ADD_); + this.state = 474; + this.match(TrinoParser.COLUMN_); + this.state = 478; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 35, this.context) ) { + case 1: + { + this.state = 475; + this.match(TrinoParser.IF_); + this.state = 476; + this.match(TrinoParser.NOT_); + this.state = 477; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 480; + (localContext as AddColumnContext)._column = this.columnDefinition(); + } + break; + case 21: + localContext = new RenameColumnContext(localContext); + this.enterOuterAlt(localContext, 21); + { + this.state = 482; + this.match(TrinoParser.ALTER_); + this.state = 483; + this.match(TrinoParser.TABLE_); + this.state = 486; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 36, this.context) ) { + case 1: + { + this.state = 484; + this.match(TrinoParser.IF_); + this.state = 485; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 488; + (localContext as RenameColumnContext)._tableName = this.qualifiedName(); + this.state = 489; + this.match(TrinoParser.RENAME_); + this.state = 490; + this.match(TrinoParser.COLUMN_); + this.state = 493; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 37, this.context) ) { + case 1: + { + this.state = 491; + this.match(TrinoParser.IF_); + this.state = 492; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 495; + (localContext as RenameColumnContext)._from_ = this.qualifiedName(); + this.state = 496; + this.match(TrinoParser.TO_); + this.state = 497; + (localContext as RenameColumnContext)._to = this.identifier(); + } + break; + case 22: + localContext = new DropColumnContext(localContext); + this.enterOuterAlt(localContext, 22); + { + this.state = 499; + this.match(TrinoParser.ALTER_); + this.state = 500; + this.match(TrinoParser.TABLE_); + this.state = 503; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 38, this.context) ) { + case 1: + { + this.state = 501; + this.match(TrinoParser.IF_); + this.state = 502; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 505; + (localContext as DropColumnContext)._tableName = this.qualifiedName(); + this.state = 506; + this.match(TrinoParser.DROP_); + this.state = 507; + this.match(TrinoParser.COLUMN_); + this.state = 510; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 39, this.context) ) { + case 1: + { + this.state = 508; + this.match(TrinoParser.IF_); + this.state = 509; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 512; + (localContext as DropColumnContext)._column = this.qualifiedName(); + } + break; + case 23: + localContext = new SetColumnTypeContext(localContext); + this.enterOuterAlt(localContext, 23); + { + this.state = 514; + this.match(TrinoParser.ALTER_); + this.state = 515; + this.match(TrinoParser.TABLE_); + this.state = 518; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 40, this.context) ) { + case 1: + { + this.state = 516; + this.match(TrinoParser.IF_); + this.state = 517; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 520; + (localContext as SetColumnTypeContext)._tableName = this.qualifiedName(); + this.state = 521; + this.match(TrinoParser.ALTER_); + this.state = 522; + this.match(TrinoParser.COLUMN_); + this.state = 523; + (localContext as SetColumnTypeContext)._columnName = this.qualifiedName(); + this.state = 524; + this.match(TrinoParser.SET_); + this.state = 525; + this.match(TrinoParser.DATA_); + this.state = 526; + this.match(TrinoParser.TYPE_); + this.state = 527; + this.type_(0); + } + break; + case 24: + localContext = new SetTableAuthorizationContext(localContext); + this.enterOuterAlt(localContext, 24); + { + this.state = 529; + this.match(TrinoParser.ALTER_); + this.state = 530; + this.match(TrinoParser.TABLE_); + this.state = 531; + (localContext as SetTableAuthorizationContext)._tableName = this.qualifiedName(); + this.state = 532; + this.match(TrinoParser.SET_); + this.state = 533; + this.match(TrinoParser.AUTHORIZATION_); + this.state = 534; + this.principal(); + } + break; + case 25: + localContext = new SetTablePropertiesContext(localContext); + this.enterOuterAlt(localContext, 25); + { + this.state = 536; + this.match(TrinoParser.ALTER_); + this.state = 537; + this.match(TrinoParser.TABLE_); + this.state = 538; + (localContext as SetTablePropertiesContext)._tableName = this.qualifiedName(); + this.state = 539; + this.match(TrinoParser.SET_); + this.state = 540; + this.match(TrinoParser.PROPERTIES_); + this.state = 541; + this.propertyAssignments(); + } + break; + case 26: + localContext = new TableExecuteContext(localContext); + this.enterOuterAlt(localContext, 26); + { + this.state = 543; + this.match(TrinoParser.ALTER_); + this.state = 544; + this.match(TrinoParser.TABLE_); + this.state = 545; + (localContext as TableExecuteContext)._tableName = this.qualifiedName(); + this.state = 546; + this.match(TrinoParser.EXECUTE_); + this.state = 547; + (localContext as TableExecuteContext)._procedureName = this.identifier(); + this.state = 560; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 548; + this.match(TrinoParser.LPAREN_); + this.state = 557; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 549; + this.callArgument(); + this.state = 554; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 550; + this.match(TrinoParser.COMMA_); + this.state = 551; + this.callArgument(); + } + } + this.state = 556; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 559; + this.match(TrinoParser.RPAREN_); + } + } + + this.state = 564; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 285) { + { + this.state = 562; + this.match(TrinoParser.WHERE_); + this.state = 563; + (localContext as TableExecuteContext)._where = this.booleanExpression(0); + } + } + + } + break; + case 27: + localContext = new AnalyzeContext(localContext); + this.enterOuterAlt(localContext, 27); + { + this.state = 566; + this.match(TrinoParser.ANALYZE_); + this.state = 567; + this.qualifiedName(); + this.state = 570; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 568; + this.match(TrinoParser.WITH_); + this.state = 569; + this.properties(); + } + } + + } + break; + case 28: + localContext = new CreateMaterializedViewContext(localContext); + this.enterOuterAlt(localContext, 28); + { + this.state = 572; + this.match(TrinoParser.CREATE_); + this.state = 575; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177) { + { + this.state = 573; + this.match(TrinoParser.OR_); + this.state = 574; + this.match(TrinoParser.REPLACE_); + } + } + + this.state = 577; + this.match(TrinoParser.MATERIALIZED_); + this.state = 578; + this.match(TrinoParser.VIEW_); + this.state = 582; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 47, this.context) ) { + case 1: + { + this.state = 579; + this.match(TrinoParser.IF_); + this.state = 580; + this.match(TrinoParser.NOT_); + this.state = 581; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 584; + this.qualifiedName(); + this.state = 588; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 92) { + { + this.state = 585; + this.match(TrinoParser.GRACE_); + this.state = 586; + this.match(TrinoParser.PERIOD_); + this.state = 587; + this.interval(); + } + } + + this.state = 592; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 29) { + { + this.state = 590; + this.match(TrinoParser.COMMENT_); + this.state = 591; + this.string_(); + } + } + + this.state = 596; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 594; + this.match(TrinoParser.WITH_); + this.state = 595; + this.properties(); + } + } + + this.state = 598; + this.match(TrinoParser.AS_); + this.state = 599; + this.rootQuery(); + } + break; + case 29: + localContext = new CreateViewContext(localContext); + this.enterOuterAlt(localContext, 29); + { + this.state = 601; + this.match(TrinoParser.CREATE_); + this.state = 604; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177) { + { + this.state = 602; + this.match(TrinoParser.OR_); + this.state = 603; + this.match(TrinoParser.REPLACE_); + } + } + + this.state = 606; + this.match(TrinoParser.VIEW_); + this.state = 607; + this.qualifiedName(); + this.state = 610; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 29) { + { + this.state = 608; + this.match(TrinoParser.COMMENT_); + this.state = 609; + this.string_(); + } + } + + this.state = 614; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 229) { + { + this.state = 612; + this.match(TrinoParser.SECURITY_); + this.state = 613; + _la = this.tokenStream.LA(1); + if(!(_la === 55 || _la === 114)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 616; + this.match(TrinoParser.AS_); + this.state = 617; + this.rootQuery(); + } + break; + case 30: + localContext = new RefreshMaterializedViewContext(localContext); + this.enterOuterAlt(localContext, 30); + { + this.state = 619; + this.match(TrinoParser.REFRESH_); + this.state = 620; + this.match(TrinoParser.MATERIALIZED_); + this.state = 621; + this.match(TrinoParser.VIEW_); + this.state = 622; + this.qualifiedName(); + } + break; + case 31: + localContext = new DropMaterializedViewContext(localContext); + this.enterOuterAlt(localContext, 31); + { + this.state = 623; + this.match(TrinoParser.DROP_); + this.state = 624; + this.match(TrinoParser.MATERIALIZED_); + this.state = 625; + this.match(TrinoParser.VIEW_); + this.state = 628; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 54, this.context) ) { + case 1: + { + this.state = 626; + this.match(TrinoParser.IF_); + this.state = 627; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 630; + this.qualifiedName(); + } + break; + case 32: + localContext = new RenameMaterializedViewContext(localContext); + this.enterOuterAlt(localContext, 32); + { + this.state = 631; + this.match(TrinoParser.ALTER_); + this.state = 632; + this.match(TrinoParser.MATERIALIZED_); + this.state = 633; + this.match(TrinoParser.VIEW_); + this.state = 636; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 55, this.context) ) { + case 1: + { + this.state = 634; + this.match(TrinoParser.IF_); + this.state = 635; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 638; + (localContext as RenameMaterializedViewContext)._from_ = this.qualifiedName(); + this.state = 639; + this.match(TrinoParser.RENAME_); + this.state = 640; + this.match(TrinoParser.TO_); + this.state = 641; + (localContext as RenameMaterializedViewContext)._to = this.qualifiedName(); + } + break; + case 33: + localContext = new SetMaterializedViewPropertiesContext(localContext); + this.enterOuterAlt(localContext, 33); + { + this.state = 643; + this.match(TrinoParser.ALTER_); + this.state = 644; + this.match(TrinoParser.MATERIALIZED_); + this.state = 645; + this.match(TrinoParser.VIEW_); + this.state = 646; + this.qualifiedName(); + this.state = 647; + this.match(TrinoParser.SET_); + this.state = 648; + this.match(TrinoParser.PROPERTIES_); + this.state = 649; + this.propertyAssignments(); + } + break; + case 34: + localContext = new DropViewContext(localContext); + this.enterOuterAlt(localContext, 34); + { + this.state = 651; + this.match(TrinoParser.DROP_); + this.state = 652; + this.match(TrinoParser.VIEW_); + this.state = 655; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 56, this.context) ) { + case 1: + { + this.state = 653; + this.match(TrinoParser.IF_); + this.state = 654; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 657; + this.qualifiedName(); + } + break; + case 35: + localContext = new RenameViewContext(localContext); + this.enterOuterAlt(localContext, 35); + { + this.state = 658; + this.match(TrinoParser.ALTER_); + this.state = 659; + this.match(TrinoParser.VIEW_); + this.state = 660; + (localContext as RenameViewContext)._from_ = this.qualifiedName(); + this.state = 661; + this.match(TrinoParser.RENAME_); + this.state = 662; + this.match(TrinoParser.TO_); + this.state = 663; + (localContext as RenameViewContext)._to = this.qualifiedName(); + } + break; + case 36: + localContext = new SetViewAuthorizationContext(localContext); + this.enterOuterAlt(localContext, 36); + { + this.state = 665; + this.match(TrinoParser.ALTER_); + this.state = 666; + this.match(TrinoParser.VIEW_); + this.state = 667; + (localContext as SetViewAuthorizationContext)._from_ = this.qualifiedName(); + this.state = 668; + this.match(TrinoParser.SET_); + this.state = 669; + this.match(TrinoParser.AUTHORIZATION_); + this.state = 670; + this.principal(); + } + break; + case 37: + localContext = new CallContext(localContext); + this.enterOuterAlt(localContext, 37); + { + this.state = 672; + this.match(TrinoParser.CALL_); + this.state = 673; + this.qualifiedName(); + this.state = 674; + this.match(TrinoParser.LPAREN_); + this.state = 683; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 675; + this.callArgument(); + this.state = 680; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 676; + this.match(TrinoParser.COMMA_); + this.state = 677; + this.callArgument(); + } + } + this.state = 682; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 685; + this.match(TrinoParser.RPAREN_); + } + break; + case 38: + localContext = new CreateFunctionContext(localContext); + this.enterOuterAlt(localContext, 38); + { + this.state = 687; + this.match(TrinoParser.CREATE_); + this.state = 690; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 177) { + { + this.state = 688; + this.match(TrinoParser.OR_); + this.state = 689; + this.match(TrinoParser.REPLACE_); + } + } + + this.state = 692; + this.functionSpecification(); + } + break; + case 39: + localContext = new DropFunctionContext(localContext); + this.enterOuterAlt(localContext, 39); + { + this.state = 693; + this.match(TrinoParser.DROP_); + this.state = 694; + this.match(TrinoParser.FUNCTION_); + this.state = 697; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 60, this.context) ) { + case 1: + { + this.state = 695; + this.match(TrinoParser.IF_); + this.state = 696; + this.match(TrinoParser.EXISTS_); + } + break; + } + this.state = 699; + this.functionDeclaration(); + } + break; + case 40: + localContext = new CreateRoleContext(localContext); + this.enterOuterAlt(localContext, 40); + { + this.state = 700; + this.match(TrinoParser.CREATE_); + this.state = 701; + this.match(TrinoParser.ROLE_); + this.state = 702; + (localContext as CreateRoleContext)._name = this.identifier(); + this.state = 706; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 703; + this.match(TrinoParser.WITH_); + this.state = 704; + this.match(TrinoParser.ADMIN_); + this.state = 705; + this.grantor(); + } + } + + this.state = 710; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 105) { + { + this.state = 708; + this.match(TrinoParser.IN_); + this.state = 709; + (localContext as CreateRoleContext)._catalog = this.identifier(); + } + } + + } + break; + case 41: + localContext = new DropRoleContext(localContext); + this.enterOuterAlt(localContext, 41); + { + this.state = 712; + this.match(TrinoParser.DROP_); + this.state = 713; + this.match(TrinoParser.ROLE_); + this.state = 714; + (localContext as DropRoleContext)._name = this.identifier(); + this.state = 717; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 105) { + { + this.state = 715; + this.match(TrinoParser.IN_); + this.state = 716; + (localContext as DropRoleContext)._catalog = this.identifier(); + } + } + + } + break; + case 42: + localContext = new GrantRolesContext(localContext); + this.enterOuterAlt(localContext, 42); + { + this.state = 719; + this.match(TrinoParser.GRANT_); + this.state = 720; + this.roles(); + this.state = 721; + this.match(TrinoParser.TO_); + this.state = 722; + this.principal(); + this.state = 727; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 723; + this.match(TrinoParser.COMMA_); + this.state = 724; + this.principal(); + } + } + this.state = 729; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 733; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 730; + this.match(TrinoParser.WITH_); + this.state = 731; + this.match(TrinoParser.ADMIN_); + this.state = 732; + this.match(TrinoParser.OPTION_); + } + } + + this.state = 738; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 94) { + { + this.state = 735; + this.match(TrinoParser.GRANTED_); + this.state = 736; + this.match(TrinoParser.BY_); + this.state = 737; + this.grantor(); + } + } + + this.state = 742; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 105) { + { + this.state = 740; + this.match(TrinoParser.IN_); + this.state = 741; + (localContext as GrantRolesContext)._catalog = this.identifier(); + } + } + + } + break; + case 43: + localContext = new RevokeRolesContext(localContext); + this.enterOuterAlt(localContext, 43); + { + this.state = 744; + this.match(TrinoParser.REVOKE_); + this.state = 748; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 68, this.context) ) { + case 1: + { + this.state = 745; + this.match(TrinoParser.ADMIN_); + this.state = 746; + this.match(TrinoParser.OPTION_); + this.state = 747; + this.match(TrinoParser.FOR_); + } + break; + } + this.state = 750; + this.roles(); + this.state = 751; + this.match(TrinoParser.FROM_); + this.state = 752; + this.principal(); + this.state = 757; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 753; + this.match(TrinoParser.COMMA_); + this.state = 754; + this.principal(); + } + } + this.state = 759; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 763; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 94) { + { + this.state = 760; + this.match(TrinoParser.GRANTED_); + this.state = 761; + this.match(TrinoParser.BY_); + this.state = 762; + this.grantor(); + } + } + + this.state = 767; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 105) { + { + this.state = 765; + this.match(TrinoParser.IN_); + this.state = 766; + (localContext as RevokeRolesContext)._catalog = this.identifier(); + } + } + + } + break; + case 44: + localContext = new SetRoleContext(localContext); + this.enterOuterAlt(localContext, 44); + { + this.state = 769; + this.match(TrinoParser.SET_); + this.state = 770; + this.match(TrinoParser.ROLE_); + this.state = 774; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 72, this.context) ) { + case 1: + { + this.state = 771; + this.match(TrinoParser.ALL_); + } + break; + case 2: + { + this.state = 772; + this.match(TrinoParser.NONE_); + } + break; + case 3: + { + this.state = 773; + (localContext as SetRoleContext)._role = this.identifier(); + } + break; + } + this.state = 778; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 105) { + { + this.state = 776; + this.match(TrinoParser.IN_); + this.state = 777; + (localContext as SetRoleContext)._catalog = this.identifier(); + } + } + + } + break; + case 45: + localContext = new GrantContext(localContext); + this.enterOuterAlt(localContext, 45); + { + this.state = 780; + this.match(TrinoParser.GRANT_); + this.state = 791; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.CREATE_: + case TrinoParser.DELETE_: + case TrinoParser.INSERT_: + case TrinoParser.SELECT_: + case TrinoParser.UPDATE_: + { + this.state = 781; + this.privilege(); + this.state = 786; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 782; + this.match(TrinoParser.COMMA_); + this.state = 783; + this.privilege(); + } + } + this.state = 788; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + break; + case TrinoParser.ALL_: + { + this.state = 789; + this.match(TrinoParser.ALL_); + this.state = 790; + this.match(TrinoParser.PRIVILEGES_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.state = 793; + this.match(TrinoParser.ON_); + this.state = 795; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 76, this.context) ) { + case 1: + { + this.state = 794; + _la = this.tokenStream.LA(1); + if(!(_la === 226 || _la === 244)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 797; + this.qualifiedName(); + this.state = 798; + this.match(TrinoParser.TO_); + this.state = 799; + (localContext as GrantContext)._grantee = this.principal(); + this.state = 803; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 800; + this.match(TrinoParser.WITH_); + this.state = 801; + this.match(TrinoParser.GRANT_); + this.state = 802; + this.match(TrinoParser.OPTION_); + } + } + + } + break; + case 46: + localContext = new DenyContext(localContext); + this.enterOuterAlt(localContext, 46); + { + this.state = 805; + this.match(TrinoParser.DENY_); + this.state = 816; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.CREATE_: + case TrinoParser.DELETE_: + case TrinoParser.INSERT_: + case TrinoParser.SELECT_: + case TrinoParser.UPDATE_: + { + this.state = 806; + this.privilege(); + this.state = 811; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 807; + this.match(TrinoParser.COMMA_); + this.state = 808; + this.privilege(); + } + } + this.state = 813; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + break; + case TrinoParser.ALL_: + { + this.state = 814; + this.match(TrinoParser.ALL_); + this.state = 815; + this.match(TrinoParser.PRIVILEGES_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.state = 818; + this.match(TrinoParser.ON_); + this.state = 820; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 80, this.context) ) { + case 1: + { + this.state = 819; + _la = this.tokenStream.LA(1); + if(!(_la === 226 || _la === 244)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 822; + this.qualifiedName(); + this.state = 823; + this.match(TrinoParser.TO_); + this.state = 824; + (localContext as DenyContext)._grantee = this.principal(); + } + break; + case 47: + localContext = new RevokeContext(localContext); + this.enterOuterAlt(localContext, 47); + { + this.state = 826; + this.match(TrinoParser.REVOKE_); + this.state = 830; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 93) { + { + this.state = 827; + this.match(TrinoParser.GRANT_); + this.state = 828; + this.match(TrinoParser.OPTION_); + this.state = 829; + this.match(TrinoParser.FOR_); + } + } + + this.state = 842; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.CREATE_: + case TrinoParser.DELETE_: + case TrinoParser.INSERT_: + case TrinoParser.SELECT_: + case TrinoParser.UPDATE_: + { + this.state = 832; + this.privilege(); + this.state = 837; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 833; + this.match(TrinoParser.COMMA_); + this.state = 834; + this.privilege(); + } + } + this.state = 839; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + break; + case TrinoParser.ALL_: + { + this.state = 840; + this.match(TrinoParser.ALL_); + this.state = 841; + this.match(TrinoParser.PRIVILEGES_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.state = 844; + this.match(TrinoParser.ON_); + this.state = 846; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 84, this.context) ) { + case 1: + { + this.state = 845; + _la = this.tokenStream.LA(1); + if(!(_la === 226 || _la === 244)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 848; + this.qualifiedName(); + this.state = 849; + this.match(TrinoParser.FROM_); + this.state = 850; + (localContext as RevokeContext)._grantee = this.principal(); + } + break; + case 48: + localContext = new ShowGrantsContext(localContext); + this.enterOuterAlt(localContext, 48); + { + this.state = 852; + this.match(TrinoParser.SHOW_); + this.state = 853; + this.match(TrinoParser.GRANTS_); + this.state = 859; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 173) { + { + this.state = 854; + this.match(TrinoParser.ON_); + this.state = 856; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 244) { + { + this.state = 855; + this.match(TrinoParser.TABLE_); + } + } + + this.state = 858; + this.qualifiedName(); + } + } + + } + break; + case 49: + localContext = new ExplainContext(localContext); + this.enterOuterAlt(localContext, 49); + { + this.state = 861; + this.match(TrinoParser.EXPLAIN_); + this.state = 873; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 88, this.context) ) { + case 1: + { + this.state = 862; + this.match(TrinoParser.LPAREN_); + this.state = 863; + this.explainOption(); + this.state = 868; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 864; + this.match(TrinoParser.COMMA_); + this.state = 865; + this.explainOption(); + } + } + this.state = 870; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 871; + this.match(TrinoParser.RPAREN_); + } + break; + } + this.state = 875; + this.statement(); + } + break; + case 50: + localContext = new ExplainAnalyzeContext(localContext); + this.enterOuterAlt(localContext, 50); + { + this.state = 876; + this.match(TrinoParser.EXPLAIN_); + this.state = 877; + this.match(TrinoParser.ANALYZE_); + this.state = 879; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 281) { + { + this.state = 878; + this.match(TrinoParser.VERBOSE_); + } + } + + this.state = 881; + this.statement(); + } + break; + case 51: + localContext = new ShowCreateTableContext(localContext); + this.enterOuterAlt(localContext, 51); + { + this.state = 882; + this.match(TrinoParser.SHOW_); + this.state = 883; + this.match(TrinoParser.CREATE_); + this.state = 884; + this.match(TrinoParser.TABLE_); + this.state = 885; + this.qualifiedName(); + } + break; + case 52: + localContext = new ShowCreateSchemaContext(localContext); + this.enterOuterAlt(localContext, 52); + { + this.state = 886; + this.match(TrinoParser.SHOW_); + this.state = 887; + this.match(TrinoParser.CREATE_); + this.state = 888; + this.match(TrinoParser.SCHEMA_); + this.state = 889; + this.qualifiedName(); + } + break; + case 53: + localContext = new ShowCreateViewContext(localContext); + this.enterOuterAlt(localContext, 53); + { + this.state = 890; + this.match(TrinoParser.SHOW_); + this.state = 891; + this.match(TrinoParser.CREATE_); + this.state = 892; + this.match(TrinoParser.VIEW_); + this.state = 893; + this.qualifiedName(); + } + break; + case 54: + localContext = new ShowCreateMaterializedViewContext(localContext); + this.enterOuterAlt(localContext, 54); + { + this.state = 894; + this.match(TrinoParser.SHOW_); + this.state = 895; + this.match(TrinoParser.CREATE_); + this.state = 896; + this.match(TrinoParser.MATERIALIZED_); + this.state = 897; + this.match(TrinoParser.VIEW_); + this.state = 898; + this.qualifiedName(); + } + break; + case 55: + localContext = new ShowTablesContext(localContext); + this.enterOuterAlt(localContext, 55); + { + this.state = 899; + this.match(TrinoParser.SHOW_); + this.state = 900; + this.match(TrinoParser.TABLES_); + this.state = 903; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 88 || _la === 105) { + { + this.state = 901; + _la = this.tokenStream.LA(1); + if(!(_la === 88 || _la === 105)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 902; + this.qualifiedName(); + } + } + + this.state = 911; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 137) { + { + this.state = 905; + this.match(TrinoParser.LIKE_); + this.state = 906; + (localContext as ShowTablesContext)._pattern = this.string_(); + this.state = 909; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 73) { + { + this.state = 907; + this.match(TrinoParser.ESCAPE_); + this.state = 908; + (localContext as ShowTablesContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 56: + localContext = new ShowSchemasContext(localContext); + this.enterOuterAlt(localContext, 56); + { + this.state = 913; + this.match(TrinoParser.SHOW_); + this.state = 914; + this.match(TrinoParser.SCHEMAS_); + this.state = 917; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 88 || _la === 105) { + { + this.state = 915; + _la = this.tokenStream.LA(1); + if(!(_la === 88 || _la === 105)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 916; + this.identifier(); + } + } + + this.state = 925; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 137) { + { + this.state = 919; + this.match(TrinoParser.LIKE_); + this.state = 920; + (localContext as ShowSchemasContext)._pattern = this.string_(); + this.state = 923; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 73) { + { + this.state = 921; + this.match(TrinoParser.ESCAPE_); + this.state = 922; + (localContext as ShowSchemasContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 57: + localContext = new ShowCatalogsContext(localContext); + this.enterOuterAlt(localContext, 57); + { + this.state = 927; + this.match(TrinoParser.SHOW_); + this.state = 928; + this.match(TrinoParser.CATALOGS_); + this.state = 935; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 137) { + { + this.state = 929; + this.match(TrinoParser.LIKE_); + this.state = 930; + (localContext as ShowCatalogsContext)._pattern = this.string_(); + this.state = 933; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 73) { + { + this.state = 931; + this.match(TrinoParser.ESCAPE_); + this.state = 932; + (localContext as ShowCatalogsContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 58: + localContext = new ShowColumnsContext(localContext); + this.enterOuterAlt(localContext, 58); + { + this.state = 937; + this.match(TrinoParser.SHOW_); + this.state = 938; + this.match(TrinoParser.COLUMNS_); + this.state = 939; + _la = this.tokenStream.LA(1); + if(!(_la === 88 || _la === 105)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 941; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282055519) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 940; + this.qualifiedName(); + } + } + + this.state = 949; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 137) { + { + this.state = 943; + this.match(TrinoParser.LIKE_); + this.state = 944; + (localContext as ShowColumnsContext)._pattern = this.string_(); + this.state = 947; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 73) { + { + this.state = 945; + this.match(TrinoParser.ESCAPE_); + this.state = 946; + (localContext as ShowColumnsContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 59: + localContext = new ShowStatsContext(localContext); + this.enterOuterAlt(localContext, 59); + { + this.state = 951; + this.match(TrinoParser.SHOW_); + this.state = 952; + this.match(TrinoParser.STATS_); + this.state = 953; + this.match(TrinoParser.FOR_); + this.state = 954; + this.qualifiedName(); + } + break; + case 60: + localContext = new ShowStatsForQueryContext(localContext); + this.enterOuterAlt(localContext, 60); + { + this.state = 955; + this.match(TrinoParser.SHOW_); + this.state = 956; + this.match(TrinoParser.STATS_); + this.state = 957; + this.match(TrinoParser.FOR_); + this.state = 958; + this.match(TrinoParser.LPAREN_); + this.state = 959; + this.rootQuery(); + this.state = 960; + this.match(TrinoParser.RPAREN_); + } + break; + case 61: + localContext = new ShowRolesContext(localContext); + this.enterOuterAlt(localContext, 61); + { + this.state = 962; + this.match(TrinoParser.SHOW_); + this.state = 964; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 39) { + { + this.state = 963; + this.match(TrinoParser.CURRENT_); + } + } + + this.state = 966; + this.match(TrinoParser.ROLES_); + this.state = 969; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 88 || _la === 105) { + { + this.state = 967; + _la = this.tokenStream.LA(1); + if(!(_la === 88 || _la === 105)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 968; + this.identifier(); + } + } + + } + break; + case 62: + localContext = new ShowRoleGrantsContext(localContext); + this.enterOuterAlt(localContext, 62); + { + this.state = 971; + this.match(TrinoParser.SHOW_); + this.state = 972; + this.match(TrinoParser.ROLE_); + this.state = 973; + this.match(TrinoParser.GRANTS_); + this.state = 976; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 88 || _la === 105) { + { + this.state = 974; + _la = this.tokenStream.LA(1); + if(!(_la === 88 || _la === 105)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 975; + this.identifier(); + } + } + + } + break; + case 63: + localContext = new ShowColumnsContext(localContext); + this.enterOuterAlt(localContext, 63); + { + this.state = 978; + this.match(TrinoParser.DESCRIBE_); + this.state = 979; + this.qualifiedName(); + } + break; + case 64: + localContext = new ShowColumnsContext(localContext); + this.enterOuterAlt(localContext, 64); + { + this.state = 980; + this.match(TrinoParser.DESC_); + this.state = 981; + this.qualifiedName(); + } + break; + case 65: + localContext = new ShowFunctionsContext(localContext); + this.enterOuterAlt(localContext, 65); + { + this.state = 982; + this.match(TrinoParser.SHOW_); + this.state = 983; + this.match(TrinoParser.FUNCTIONS_); + this.state = 986; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 88 || _la === 105) { + { + this.state = 984; + _la = this.tokenStream.LA(1); + if(!(_la === 88 || _la === 105)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 985; + this.qualifiedName(); + } + } + + this.state = 994; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 137) { + { + this.state = 988; + this.match(TrinoParser.LIKE_); + this.state = 989; + (localContext as ShowFunctionsContext)._pattern = this.string_(); + this.state = 992; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 73) { + { + this.state = 990; + this.match(TrinoParser.ESCAPE_); + this.state = 991; + (localContext as ShowFunctionsContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 66: + localContext = new ShowSessionContext(localContext); + this.enterOuterAlt(localContext, 66); + { + this.state = 996; + this.match(TrinoParser.SHOW_); + this.state = 997; + this.match(TrinoParser.SESSION_); + this.state = 1004; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 137) { + { + this.state = 998; + this.match(TrinoParser.LIKE_); + this.state = 999; + (localContext as ShowSessionContext)._pattern = this.string_(); + this.state = 1002; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 73) { + { + this.state = 1000; + this.match(TrinoParser.ESCAPE_); + this.state = 1001; + (localContext as ShowSessionContext)._escape = this.string_(); + } + } + + } + } + + } + break; + case 67: + localContext = new SetSessionAuthorizationContext(localContext); + this.enterOuterAlt(localContext, 67); + { + this.state = 1006; + this.match(TrinoParser.SET_); + this.state = 1007; + this.match(TrinoParser.SESSION_); + this.state = 1008; + this.match(TrinoParser.AUTHORIZATION_); + this.state = 1009; + this.authorizationUser(); + } + break; + case 68: + localContext = new ResetSessionAuthorizationContext(localContext); + this.enterOuterAlt(localContext, 68); + { + this.state = 1010; + this.match(TrinoParser.RESET_); + this.state = 1011; + this.match(TrinoParser.SESSION_); + this.state = 1012; + this.match(TrinoParser.AUTHORIZATION_); + } + break; + case 69: + localContext = new SetSessionContext(localContext); + this.enterOuterAlt(localContext, 69); + { + this.state = 1013; + this.match(TrinoParser.SET_); + this.state = 1014; + this.match(TrinoParser.SESSION_); + this.state = 1015; + this.qualifiedName(); + this.state = 1016; + this.match(TrinoParser.EQ_); + this.state = 1017; + this.expression(); + } + break; + case 70: + localContext = new ResetSessionContext(localContext); + this.enterOuterAlt(localContext, 70); + { + this.state = 1019; + this.match(TrinoParser.RESET_); + this.state = 1020; + this.match(TrinoParser.SESSION_); + this.state = 1021; + this.qualifiedName(); + } + break; + case 71: + localContext = new StartTransactionContext(localContext); + this.enterOuterAlt(localContext, 71); + { + this.state = 1022; + this.match(TrinoParser.START_); + this.state = 1023; + this.match(TrinoParser.TRANSACTION_); + this.state = 1032; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 117 || _la === 203) { + { + this.state = 1024; + this.transactionMode(); + this.state = 1029; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1025; + this.match(TrinoParser.COMMA_); + this.state = 1026; + this.transactionMode(); + } + } + this.state = 1031; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + break; + case 72: + localContext = new CommitContext(localContext); + this.enterOuterAlt(localContext, 72); + { + this.state = 1034; + this.match(TrinoParser.COMMIT_); + this.state = 1036; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 291) { + { + this.state = 1035; + this.match(TrinoParser.WORK_); + } + } + + } + break; + case 73: + localContext = new RollbackContext(localContext); + this.enterOuterAlt(localContext, 73); + { + this.state = 1038; + this.match(TrinoParser.ROLLBACK_); + this.state = 1040; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 291) { + { + this.state = 1039; + this.match(TrinoParser.WORK_); + } + } + + } + break; + case 74: + localContext = new PrepareContext(localContext); + this.enterOuterAlt(localContext, 74); + { + this.state = 1042; + this.match(TrinoParser.PREPARE_); + this.state = 1043; + this.identifier(); + this.state = 1044; + this.match(TrinoParser.FROM_); + this.state = 1045; + this.statement(); + } + break; + case 75: + localContext = new DeallocateContext(localContext); + this.enterOuterAlt(localContext, 75); + { + this.state = 1047; + this.match(TrinoParser.DEALLOCATE_); + this.state = 1048; + this.match(TrinoParser.PREPARE_); + this.state = 1049; + this.identifier(); + } + break; + case 76: + localContext = new ExecuteContext(localContext); + this.enterOuterAlt(localContext, 76); + { + this.state = 1050; + this.match(TrinoParser.EXECUTE_); + this.state = 1051; + this.identifier(); + this.state = 1061; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 274) { + { + this.state = 1052; + this.match(TrinoParser.USING_); + this.state = 1053; + this.expression(); + this.state = 1058; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1054; + this.match(TrinoParser.COMMA_); + this.state = 1055; + this.expression(); + } + } + this.state = 1060; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + break; + case 77: + localContext = new ExecuteImmediateContext(localContext); + this.enterOuterAlt(localContext, 77); + { + this.state = 1063; + this.match(TrinoParser.EXECUTE_); + this.state = 1064; + this.match(TrinoParser.IMMEDIATE_); + this.state = 1065; + this.string_(); + this.state = 1075; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 274) { + { + this.state = 1066; + this.match(TrinoParser.USING_); + this.state = 1067; + this.expression(); + this.state = 1072; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1068; + this.match(TrinoParser.COMMA_); + this.state = 1069; + this.expression(); + } + } + this.state = 1074; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + break; + case 78: + localContext = new DescribeInputContext(localContext); + this.enterOuterAlt(localContext, 78); + { + this.state = 1077; + this.match(TrinoParser.DESCRIBE_); + this.state = 1078; + this.match(TrinoParser.INPUT_); + this.state = 1079; + this.identifier(); + } + break; + case 79: + localContext = new DescribeOutputContext(localContext); + this.enterOuterAlt(localContext, 79); + { + this.state = 1080; + this.match(TrinoParser.DESCRIBE_); + this.state = 1081; + this.match(TrinoParser.OUTPUT_); + this.state = 1082; + this.identifier(); + } + break; + case 80: + localContext = new SetPathContext(localContext); + this.enterOuterAlt(localContext, 80); + { + this.state = 1083; + this.match(TrinoParser.SET_); + this.state = 1084; + this.match(TrinoParser.PATH_); + this.state = 1085; + this.pathSpecification(); + } + break; + case 81: + localContext = new SetTimeZoneContext(localContext); + this.enterOuterAlt(localContext, 81); + { + this.state = 1086; + this.match(TrinoParser.SET_); + this.state = 1087; + this.match(TrinoParser.TIME_); + this.state = 1088; + this.match(TrinoParser.ZONE_); + this.state = 1091; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 117, this.context) ) { + case 1: + { + this.state = 1089; + this.match(TrinoParser.LOCAL_); + } + break; + case 2: + { + this.state = 1090; + this.expression(); + } + break; + } + } + break; + case 82: + localContext = new UpdateContext(localContext); + this.enterOuterAlt(localContext, 82); + { + this.state = 1093; + this.match(TrinoParser.UPDATE_); + this.state = 1094; + this.qualifiedName(); + this.state = 1095; + this.match(TrinoParser.SET_); + this.state = 1096; + this.updateAssignment(); + this.state = 1101; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1097; + this.match(TrinoParser.COMMA_); + this.state = 1098; + this.updateAssignment(); + } + } + this.state = 1103; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1106; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 285) { + { + this.state = 1104; + this.match(TrinoParser.WHERE_); + this.state = 1105; + (localContext as UpdateContext)._where = this.booleanExpression(0); + } + } + + } + break; + case 83: + localContext = new MergeContext(localContext); + this.enterOuterAlt(localContext, 83); + { + this.state = 1108; + this.match(TrinoParser.MERGE_); + this.state = 1109; + this.match(TrinoParser.INTO_); + this.state = 1110; + this.qualifiedName(); + this.state = 1115; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282056543) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 1112; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 11) { + { + this.state = 1111; + this.match(TrinoParser.AS_); + } + } + + this.state = 1114; + this.identifier(); + } + } + + this.state = 1117; + this.match(TrinoParser.USING_); + this.state = 1118; + this.relation(0); + this.state = 1119; + this.match(TrinoParser.ON_); + this.state = 1120; + this.expression(); + this.state = 1122; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 1121; + this.mergeCase(); + } + } + this.state = 1124; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 284); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public rootQuery(): RootQueryContext { + let localContext = new RootQueryContext(this.context, this.state); + this.enterRule(localContext, 6, TrinoParser.RULE_rootQuery); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1129; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 124, this.context) ) { + case 1: + { + this.state = 1128; + this.withFunction(); + } + break; + } + this.state = 1131; + this.query(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public withFunction(): WithFunctionContext { + let localContext = new WithFunctionContext(this.context, this.state); + this.enterRule(localContext, 8, TrinoParser.RULE_withFunction); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1133; + this.match(TrinoParser.WITH_); + this.state = 1134; + this.functionSpecification(); + this.state = 1139; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1135; + this.match(TrinoParser.COMMA_); + this.state = 1136; + this.functionSpecification(); + } + } + this.state = 1141; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public query(): QueryContext { + let localContext = new QueryContext(this.context, this.state); + this.enterRule(localContext, 10, TrinoParser.RULE_query); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1143; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 1142; + this.with_(); + } + } + + this.state = 1145; + this.queryNoWith(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public with_(): WithContext { + let localContext = new WithContext(this.context, this.state); + this.enterRule(localContext, 12, TrinoParser.RULE_with); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1147; + this.match(TrinoParser.WITH_); + this.state = 1149; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 204) { + { + this.state = 1148; + this.match(TrinoParser.RECURSIVE_); + } + } + + this.state = 1151; + this.namedQuery(); + this.state = 1156; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1152; + this.match(TrinoParser.COMMA_); + this.state = 1153; + this.namedQuery(); + } + } + this.state = 1158; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableElement(): TableElementContext { + let localContext = new TableElementContext(this.context, this.state); + this.enterRule(localContext, 14, TrinoParser.RULE_tableElement); + try { + this.state = 1161; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ABSENT_: + case TrinoParser.ADD_: + case TrinoParser.ADMIN_: + case TrinoParser.AFTER_: + case TrinoParser.ALL_: + case TrinoParser.ANALYZE_: + case TrinoParser.ANY_: + case TrinoParser.ARRAY_: + case TrinoParser.ASC_: + case TrinoParser.AT_: + case TrinoParser.AUTHORIZATION_: + case TrinoParser.BEGIN_: + case TrinoParser.BERNOULLI_: + case TrinoParser.BOTH_: + case TrinoParser.CALL_: + case TrinoParser.CALLED_: + case TrinoParser.CASCADE_: + case TrinoParser.CATALOG_: + case TrinoParser.CATALOGS_: + case TrinoParser.COLUMN_: + case TrinoParser.COLUMNS_: + case TrinoParser.COMMENT_: + case TrinoParser.COMMIT_: + case TrinoParser.COMMITTED_: + case TrinoParser.CONDITIONAL_: + case TrinoParser.COUNT_: + case TrinoParser.COPARTITION_: + case TrinoParser.CURRENT_: + case TrinoParser.DATA_: + case TrinoParser.DATE_: + case TrinoParser.DAY_: + case TrinoParser.DECLARE_: + case TrinoParser.DEFAULT_: + case TrinoParser.DEFINE_: + case TrinoParser.DEFINER_: + case TrinoParser.DENY_: + case TrinoParser.DESC_: + case TrinoParser.DESCRIPTOR_: + case TrinoParser.DETERMINISTIC_: + case TrinoParser.DISTRIBUTED_: + case TrinoParser.DO_: + case TrinoParser.DOUBLE_: + case TrinoParser.EMPTY_: + case TrinoParser.ELSEIF_: + case TrinoParser.ENCODING_: + case TrinoParser.ERROR_: + case TrinoParser.EXCLUDING_: + case TrinoParser.EXPLAIN_: + case TrinoParser.FETCH_: + case TrinoParser.FILTER_: + case TrinoParser.FINAL_: + case TrinoParser.FIRST_: + case TrinoParser.FOLLOWING_: + case TrinoParser.FORMAT_: + case TrinoParser.FUNCTION_: + case TrinoParser.FUNCTIONS_: + case TrinoParser.GRACE_: + case TrinoParser.GRANT_: + case TrinoParser.GRANTED_: + case TrinoParser.GRANTS_: + case TrinoParser.GRAPHVIZ_: + case TrinoParser.GROUPS_: + case TrinoParser.HOUR_: + case TrinoParser.IF_: + case TrinoParser.IGNORE_: + case TrinoParser.IMMEDIATE_: + case TrinoParser.INCLUDING_: + case TrinoParser.INITIAL_: + case TrinoParser.INPUT_: + case TrinoParser.INTERVAL_: + case TrinoParser.INVOKER_: + case TrinoParser.IO_: + case TrinoParser.ISOLATION_: + case TrinoParser.ITERATE_: + case TrinoParser.JSON_: + case TrinoParser.KEEP_: + case TrinoParser.KEY_: + case TrinoParser.KEYS_: + case TrinoParser.LANGUAGE_: + case TrinoParser.LAST_: + case TrinoParser.LATERAL_: + case TrinoParser.LEADING_: + case TrinoParser.LEAVE_: + case TrinoParser.LEVEL_: + case TrinoParser.LIMIT_: + case TrinoParser.LOCAL_: + case TrinoParser.LOGICAL_: + case TrinoParser.LOOP_: + case TrinoParser.MAP_: + case TrinoParser.MATCH_: + case TrinoParser.MATCHED_: + case TrinoParser.MATCHES_: + case TrinoParser.MATCH_RECOGNIZE_: + case TrinoParser.MATERIALIZED_: + case TrinoParser.MEASURES_: + case TrinoParser.MERGE_: + case TrinoParser.MINUTE_: + case TrinoParser.MONTH_: + case TrinoParser.NESTED_: + case TrinoParser.NEXT_: + case TrinoParser.NFC_: + case TrinoParser.NFD_: + case TrinoParser.NFKC_: + case TrinoParser.NFKD_: + case TrinoParser.NO_: + case TrinoParser.NONE_: + case TrinoParser.NULLIF_: + case TrinoParser.NULLS_: + case TrinoParser.OBJECT_: + case TrinoParser.OF_: + case TrinoParser.OFFSET_: + case TrinoParser.OMIT_: + case TrinoParser.ONE_: + case TrinoParser.ONLY_: + case TrinoParser.OPTION_: + case TrinoParser.ORDINALITY_: + case TrinoParser.OUTPUT_: + case TrinoParser.OVER_: + case TrinoParser.OVERFLOW_: + case TrinoParser.PARTITION_: + case TrinoParser.PARTITIONS_: + case TrinoParser.PASSING_: + case TrinoParser.PAST_: + case TrinoParser.PATH_: + case TrinoParser.PATTERN_: + case TrinoParser.PER_: + case TrinoParser.PERIOD_: + case TrinoParser.PERMUTE_: + case TrinoParser.PLAN_: + case TrinoParser.POSITION_: + case TrinoParser.PRECEDING_: + case TrinoParser.PRECISION_: + case TrinoParser.PRIVILEGES_: + case TrinoParser.PROPERTIES_: + case TrinoParser.PRUNE_: + case TrinoParser.QUOTES_: + case TrinoParser.RANGE_: + case TrinoParser.READ_: + case TrinoParser.REFRESH_: + case TrinoParser.RENAME_: + case TrinoParser.REPEAT_: + case TrinoParser.REPEATABLE_: + case TrinoParser.REPLACE_: + case TrinoParser.RESET_: + case TrinoParser.RESPECT_: + case TrinoParser.RESTRICT_: + case TrinoParser.RETURN_: + case TrinoParser.RETURNING_: + case TrinoParser.RETURNS_: + case TrinoParser.REVOKE_: + case TrinoParser.ROLE_: + case TrinoParser.ROLES_: + case TrinoParser.ROLLBACK_: + case TrinoParser.ROW_: + case TrinoParser.ROWS_: + case TrinoParser.RUNNING_: + case TrinoParser.SCALAR_: + case TrinoParser.SCHEMA_: + case TrinoParser.SCHEMAS_: + case TrinoParser.SECOND_: + case TrinoParser.SECURITY_: + case TrinoParser.SEEK_: + case TrinoParser.SERIALIZABLE_: + case TrinoParser.SESSION_: + case TrinoParser.SET_: + case TrinoParser.SETS_: + case TrinoParser.SHOW_: + case TrinoParser.SOME_: + case TrinoParser.START_: + case TrinoParser.STATS_: + case TrinoParser.SUBSET_: + case TrinoParser.SUBSTRING_: + case TrinoParser.SYSTEM_: + case TrinoParser.TABLES_: + case TrinoParser.TABLESAMPLE_: + case TrinoParser.TEXT_: + case TrinoParser.TEXT_STRING_: + case TrinoParser.TIES_: + case TrinoParser.TIME_: + case TrinoParser.TIMESTAMP_: + case TrinoParser.TO_: + case TrinoParser.TRAILING_: + case TrinoParser.TRANSACTION_: + case TrinoParser.TRUNCATE_: + case TrinoParser.TRY_CAST_: + case TrinoParser.TYPE_: + case TrinoParser.UNBOUNDED_: + case TrinoParser.UNCOMMITTED_: + case TrinoParser.UNCONDITIONAL_: + case TrinoParser.UNIQUE_: + case TrinoParser.UNKNOWN_: + case TrinoParser.UNMATCHED_: + case TrinoParser.UNTIL_: + case TrinoParser.UPDATE_: + case TrinoParser.USE_: + case TrinoParser.USER_: + case TrinoParser.UTF16_: + case TrinoParser.UTF32_: + case TrinoParser.UTF8_: + case TrinoParser.VALIDATE_: + case TrinoParser.VALUE_: + case TrinoParser.VERBOSE_: + case TrinoParser.VERSION_: + case TrinoParser.VIEW_: + case TrinoParser.WHILE_: + case TrinoParser.WINDOW_: + case TrinoParser.WITHIN_: + case TrinoParser.WITHOUT_: + case TrinoParser.WORK_: + case TrinoParser.WRAPPER_: + case TrinoParser.WRITE_: + case TrinoParser.YEAR_: + case TrinoParser.ZONE_: + case TrinoParser.IDENTIFIER_: + case TrinoParser.DIGIT_IDENTIFIER_: + case TrinoParser.QUOTED_IDENTIFIER_: + case TrinoParser.BACKQUOTED_IDENTIFIER_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1159; + this.columnDefinition(); + } + break; + case TrinoParser.LIKE_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1160; + this.likeClause(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public columnDefinition(): ColumnDefinitionContext { + let localContext = new ColumnDefinitionContext(this.context, this.state); + this.enterRule(localContext, 16, TrinoParser.RULE_columnDefinition); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1163; + this.identifier(); + this.state = 1164; + this.type_(0); + this.state = 1167; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 1165; + this.match(TrinoParser.NOT_); + this.state = 1166; + this.match(TrinoParser.NULL_); + } + } + + this.state = 1171; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 29) { + { + this.state = 1169; + this.match(TrinoParser.COMMENT_); + this.state = 1170; + this.string_(); + } + } + + this.state = 1175; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288) { + { + this.state = 1173; + this.match(TrinoParser.WITH_); + this.state = 1174; + this.properties(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public likeClause(): LikeClauseContext { + let localContext = new LikeClauseContext(this.context, this.state); + this.enterRule(localContext, 18, TrinoParser.RULE_likeClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1177; + this.match(TrinoParser.LIKE_); + this.state = 1178; + this.qualifiedName(); + this.state = 1181; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 75 || _la === 106) { + { + this.state = 1179; + localContext._optionType = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 75 || _la === 106)) { + localContext._optionType = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1180; + this.match(TrinoParser.PROPERTIES_); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public properties(): PropertiesContext { + let localContext = new PropertiesContext(this.context, this.state); + this.enterRule(localContext, 20, TrinoParser.RULE_properties); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1183; + this.match(TrinoParser.LPAREN_); + this.state = 1184; + this.propertyAssignments(); + this.state = 1185; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public propertyAssignments(): PropertyAssignmentsContext { + let localContext = new PropertyAssignmentsContext(this.context, this.state); + this.enterRule(localContext, 22, TrinoParser.RULE_propertyAssignments); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1187; + this.property(); + this.state = 1192; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1188; + this.match(TrinoParser.COMMA_); + this.state = 1189; + this.property(); + } + } + this.state = 1194; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public property(): PropertyContext { + let localContext = new PropertyContext(this.context, this.state); + this.enterRule(localContext, 24, TrinoParser.RULE_property); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1195; + this.identifier(); + this.state = 1196; + this.match(TrinoParser.EQ_); + this.state = 1197; + this.propertyValue(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public propertyValue(): PropertyValueContext { + let localContext = new PropertyValueContext(this.context, this.state); + this.enterRule(localContext, 26, TrinoParser.RULE_propertyValue); + try { + this.state = 1201; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 135, this.context) ) { + case 1: + localContext = new DefaultPropertyValueContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1199; + this.match(TrinoParser.DEFAULT_); + } + break; + case 2: + localContext = new NonDefaultPropertyValueContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1200; + this.expression(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public queryNoWith(): QueryNoWithContext { + let localContext = new QueryNoWithContext(this.context, this.state); + this.enterRule(localContext, 28, TrinoParser.RULE_queryNoWith); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1203; + this.queryTerm(0); + this.state = 1214; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 178) { + { + this.state = 1204; + this.match(TrinoParser.ORDER_); + this.state = 1205; + this.match(TrinoParser.BY_); + this.state = 1206; + this.sortItem(); + this.state = 1211; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1207; + this.match(TrinoParser.COMMA_); + this.state = 1208; + this.sortItem(); + } + } + this.state = 1213; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1221; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 171) { + { + this.state = 1216; + this.match(TrinoParser.OFFSET_); + this.state = 1217; + localContext._offset = this.rowCount(); + this.state = 1219; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 222 || _la === 223) { + { + this.state = 1218; + _la = this.tokenStream.LA(1); + if(!(_la === 222 || _la === 223)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + } + } + + this.state = 1236; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.LIMIT_: + { + this.state = 1223; + this.match(TrinoParser.LIMIT_); + this.state = 1224; + localContext._limit = this.limitRowCount(); + } + break; + case TrinoParser.FETCH_: + { + this.state = 1225; + this.match(TrinoParser.FETCH_); + this.state = 1226; + _la = this.tokenStream.LA(1); + if(!(_la === 84 || _la === 157)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1228; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 308 || _la === 330) { + { + this.state = 1227; + localContext._fetchFirst = this.rowCount(); + } + } + + this.state = 1230; + _la = this.tokenStream.LA(1); + if(!(_la === 222 || _la === 223)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1234; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ONLY_: + { + this.state = 1231; + this.match(TrinoParser.ONLY_); + } + break; + case TrinoParser.WITH_: + { + this.state = 1232; + this.match(TrinoParser.WITH_); + this.state = 1233; + this.match(TrinoParser.TIES_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + break; + case TrinoParser.EOF: + case TrinoParser.WITH_: + case TrinoParser.SEMICOLON_: + case TrinoParser.RPAREN_: + break; + default: + break; + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public limitRowCount(): LimitRowCountContext { + let localContext = new LimitRowCountContext(this.context, this.state); + this.enterRule(localContext, 30, TrinoParser.RULE_limitRowCount); + try { + this.state = 1240; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ALL_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1238; + this.match(TrinoParser.ALL_); + } + break; + case TrinoParser.QUESTION_MARK_: + case TrinoParser.INTEGER_VALUE_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1239; + this.rowCount(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public rowCount(): RowCountContext { + let localContext = new RowCountContext(this.context, this.state); + this.enterRule(localContext, 32, TrinoParser.RULE_rowCount); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1242; + _la = this.tokenStream.LA(1); + if(!(_la === 308 || _la === 330)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public queryTerm(): QueryTermContext; + public queryTerm(_p: number): QueryTermContext; + public queryTerm(_p?: number): QueryTermContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new QueryTermContext(this.context, parentState); + let previousContext = localContext; + let _startState = 34; + this.enterRecursionRule(localContext, 34, TrinoParser.RULE_queryTerm, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + { + localContext = new QueryTermDefaultContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1245; + this.queryPrimary(); + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 1261; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 147, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 1259; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 146, this.context) ) { + case 1: + { + localContext = new SetOperationContext(new QueryTermContext(parentContext, parentState)); + (localContext as SetOperationContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_queryTerm); + this.state = 1247; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 1248; + (localContext as SetOperationContext)._operator = this.match(TrinoParser.INTERSECT_); + this.state = 1250; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 5 || _la === 62) { + { + this.state = 1249; + this.setQuantifier(); + } + } + + this.state = 1252; + (localContext as SetOperationContext)._right = this.queryTerm(3); + } + break; + case 2: + { + localContext = new SetOperationContext(new QueryTermContext(parentContext, parentState)); + (localContext as SetOperationContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_queryTerm); + this.state = 1253; + if (!(this.precpred(this.context, 1))) { + throw this.createFailedPredicateException("this.precpred(this.context, 1)"); + } + this.state = 1254; + (localContext as SetOperationContext)._operator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 74 || _la === 265)) { + (localContext as SetOperationContext)._operator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1256; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 5 || _la === 62) { + { + this.state = 1255; + this.setQuantifier(); + } + } + + this.state = 1258; + (localContext as SetOperationContext)._right = this.queryTerm(2); + } + break; + } + } + } + this.state = 1263; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 147, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public queryPrimary(): QueryPrimaryContext { + let localContext = new QueryPrimaryContext(this.context, this.state); + this.enterRule(localContext, 36, TrinoParser.RULE_queryPrimary); + try { + let alternative: number; + this.state = 1280; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.SELECT_: + localContext = new QueryPrimaryDefaultContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1264; + this.querySpecification(); + } + break; + case TrinoParser.TABLE_: + localContext = new TableContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1265; + this.match(TrinoParser.TABLE_); + this.state = 1266; + this.qualifiedName(); + } + break; + case TrinoParser.VALUES_: + localContext = new InlineTableContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 1267; + this.match(TrinoParser.VALUES_); + this.state = 1268; + this.expression(); + this.state = 1273; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 148, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1269; + this.match(TrinoParser.COMMA_); + this.state = 1270; + this.expression(); + } + } + } + this.state = 1275; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 148, this.context); + } + } + break; + case TrinoParser.LPAREN_: + localContext = new SubqueryContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 1276; + this.match(TrinoParser.LPAREN_); + this.state = 1277; + this.queryNoWith(); + this.state = 1278; + this.match(TrinoParser.RPAREN_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sortItem(): SortItemContext { + let localContext = new SortItemContext(this.context, this.state); + this.enterRule(localContext, 38, TrinoParser.RULE_sortItem); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1282; + this.expression(); + this.state = 1284; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 12 || _la === 58) { + { + this.state = 1283; + localContext._ordering = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 12 || _la === 58)) { + localContext._ordering = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1288; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 168) { + { + this.state = 1286; + this.match(TrinoParser.NULLS_); + this.state = 1287; + localContext._nullOrdering = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 84 || _la === 131)) { + localContext._nullOrdering = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public querySpecification(): QuerySpecificationContext { + let localContext = new QuerySpecificationContext(this.context, this.state); + this.enterRule(localContext, 40, TrinoParser.RULE_querySpecification); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1290; + this.match(TrinoParser.SELECT_); + this.state = 1292; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 152, this.context) ) { + case 1: + { + this.state = 1291; + this.setQuantifier(); + } + break; + } + this.state = 1294; + this.selectItem(); + this.state = 1299; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 153, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1295; + this.match(TrinoParser.COMMA_); + this.state = 1296; + this.selectItem(); + } + } + } + this.state = 1301; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 153, this.context); + } + this.state = 1311; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 155, this.context) ) { + case 1: + { + this.state = 1302; + this.match(TrinoParser.FROM_); + this.state = 1303; + this.relation(0); + this.state = 1308; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 154, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1304; + this.match(TrinoParser.COMMA_); + this.state = 1305; + this.relation(0); + } + } + } + this.state = 1310; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 154, this.context); + } + } + break; + } + this.state = 1315; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 156, this.context) ) { + case 1: + { + this.state = 1313; + this.match(TrinoParser.WHERE_); + this.state = 1314; + localContext._where = this.booleanExpression(0); + } + break; + } + this.state = 1320; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 157, this.context) ) { + case 1: + { + this.state = 1317; + this.match(TrinoParser.GROUP_); + this.state = 1318; + this.match(TrinoParser.BY_); + this.state = 1319; + this.groupBy(); + } + break; + } + this.state = 1324; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 158, this.context) ) { + case 1: + { + this.state = 1322; + this.match(TrinoParser.HAVING_); + this.state = 1323; + localContext._having = this.booleanExpression(0); + } + break; + } + this.state = 1335; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 160, this.context) ) { + case 1: + { + this.state = 1326; + this.match(TrinoParser.WINDOW_); + this.state = 1327; + this.windowDefinition(); + this.state = 1332; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 159, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1328; + this.match(TrinoParser.COMMA_); + this.state = 1329; + this.windowDefinition(); + } + } + } + this.state = 1334; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 159, this.context); + } + } + break; + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public groupBy(): GroupByContext { + let localContext = new GroupByContext(this.context, this.state); + this.enterRule(localContext, 42, TrinoParser.RULE_groupBy); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1338; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 161, this.context) ) { + case 1: + { + this.state = 1337; + this.setQuantifier(); + } + break; + } + this.state = 1340; + this.groupingElement(); + this.state = 1345; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 162, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1341; + this.match(TrinoParser.COMMA_); + this.state = 1342; + this.groupingElement(); + } + } + } + this.state = 1347; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 162, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public groupingElement(): GroupingElementContext { + let localContext = new GroupingElementContext(this.context, this.state); + this.enterRule(localContext, 44, TrinoParser.RULE_groupingElement); + let _la: number; + try { + this.state = 1388; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 168, this.context) ) { + case 1: + localContext = new SingleGroupingSetContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1348; + this.groupingSet(); + } + break; + case 2: + localContext = new RollupContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1349; + this.match(TrinoParser.ROLLUP_); + this.state = 1350; + this.match(TrinoParser.LPAREN_); + this.state = 1359; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 1351; + this.expression(); + this.state = 1356; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1352; + this.match(TrinoParser.COMMA_); + this.state = 1353; + this.expression(); + } + } + this.state = 1358; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1361; + this.match(TrinoParser.RPAREN_); + } + break; + case 3: + localContext = new CubeContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 1362; + this.match(TrinoParser.CUBE_); + this.state = 1363; + this.match(TrinoParser.LPAREN_); + this.state = 1372; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 1364; + this.expression(); + this.state = 1369; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1365; + this.match(TrinoParser.COMMA_); + this.state = 1366; + this.expression(); + } + } + this.state = 1371; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1374; + this.match(TrinoParser.RPAREN_); + } + break; + case 4: + localContext = new MultipleGroupingSetsContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 1375; + this.match(TrinoParser.GROUPING_); + this.state = 1376; + this.match(TrinoParser.SETS_); + this.state = 1377; + this.match(TrinoParser.LPAREN_); + this.state = 1378; + this.groupingSet(); + this.state = 1383; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1379; + this.match(TrinoParser.COMMA_); + this.state = 1380; + this.groupingSet(); + } + } + this.state = 1385; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1386; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public groupingSet(): GroupingSetContext { + let localContext = new GroupingSetContext(this.context, this.state); + this.enterRule(localContext, 46, TrinoParser.RULE_groupingSet); + let _la: number; + try { + this.state = 1403; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 171, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 1390; + this.match(TrinoParser.LPAREN_); + this.state = 1399; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 1391; + this.expression(); + this.state = 1396; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1392; + this.match(TrinoParser.COMMA_); + this.state = 1393; + this.expression(); + } + } + this.state = 1398; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1401; + this.match(TrinoParser.RPAREN_); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1402; + this.expression(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public windowDefinition(): WindowDefinitionContext { + let localContext = new WindowDefinitionContext(this.context, this.state); + this.enterRule(localContext, 48, TrinoParser.RULE_windowDefinition); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1405; + localContext._name = this.identifier(); + this.state = 1406; + this.match(TrinoParser.AS_); + this.state = 1407; + this.match(TrinoParser.LPAREN_); + this.state = 1408; + this.windowSpecification(); + this.state = 1409; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public windowSpecification(): WindowSpecificationContext { + let localContext = new WindowSpecificationContext(this.context, this.state); + this.enterRule(localContext, 50, TrinoParser.RULE_windowSpecification); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1412; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 172, this.context) ) { + case 1: + { + this.state = 1411; + localContext._existingWindowName = this.identifier(); + } + break; + } + this.state = 1424; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 184) { + { + this.state = 1414; + this.match(TrinoParser.PARTITION_); + this.state = 1415; + this.match(TrinoParser.BY_); + this.state = 1416; + localContext._expression = this.expression(); + localContext._partition.push(localContext._expression!); + this.state = 1421; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1417; + this.match(TrinoParser.COMMA_); + this.state = 1418; + localContext._expression = this.expression(); + localContext._partition.push(localContext._expression!); + } + } + this.state = 1423; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1436; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 178) { + { + this.state = 1426; + this.match(TrinoParser.ORDER_); + this.state = 1427; + this.match(TrinoParser.BY_); + this.state = 1428; + this.sortItem(); + this.state = 1433; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1429; + this.match(TrinoParser.COMMA_); + this.state = 1430; + this.sortItem(); + } + } + this.state = 1435; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1439; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 99 || _la === 151 || _la === 202 || _la === 223) { + { + this.state = 1438; + this.windowFrame(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public namedQuery(): NamedQueryContext { + let localContext = new NamedQueryContext(this.context, this.state); + this.enterRule(localContext, 52, TrinoParser.RULE_namedQuery); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1441; + localContext._name = this.identifier(); + this.state = 1443; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 1442; + this.columnAliases(); + } + } + + this.state = 1445; + this.match(TrinoParser.AS_); + this.state = 1446; + this.match(TrinoParser.LPAREN_); + this.state = 1447; + this.query(); + this.state = 1448; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public setQuantifier(): SetQuantifierContext { + let localContext = new SetQuantifierContext(this.context, this.state); + this.enterRule(localContext, 54, TrinoParser.RULE_setQuantifier); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1450; + _la = this.tokenStream.LA(1); + if(!(_la === 5 || _la === 62)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public selectItem(): SelectItemContext { + let localContext = new SelectItemContext(this.context, this.state); + this.enterRule(localContext, 56, TrinoParser.RULE_selectItem); + let _la: number; + try { + this.state = 1467; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 182, this.context) ) { + case 1: + localContext = new SelectSingleContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1452; + this.expression(); + this.state = 1457; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 180, this.context) ) { + case 1: + { + this.state = 1454; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 11) { + { + this.state = 1453; + this.match(TrinoParser.AS_); + } + } + + this.state = 1456; + this.identifier(); + } + break; + } + } + break; + case 2: + localContext = new SelectAllContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1459; + this.primaryExpression(0); + this.state = 1460; + this.match(TrinoParser.DOT_); + this.state = 1461; + this.match(TrinoParser.ASTERISK_); + this.state = 1464; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 181, this.context) ) { + case 1: + { + this.state = 1462; + this.match(TrinoParser.AS_); + this.state = 1463; + this.columnAliases(); + } + break; + } + } + break; + case 3: + localContext = new SelectAllContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 1466; + this.match(TrinoParser.ASTERISK_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public relation(): RelationContext; + public relation(_p: number): RelationContext; + public relation(_p?: number): RelationContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new RelationContext(this.context, parentState); + let previousContext = localContext; + let _startState = 58; + this.enterRecursionRule(localContext, 58, TrinoParser.RULE_relation, _p); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + { + localContext = new RelationDefaultContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1470; + this.sampledRelation(); + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 1490; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 184, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + { + localContext = new JoinRelationContext(new RelationContext(parentContext, parentState)); + (localContext as JoinRelationContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_relation); + this.state = 1472; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 1486; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.CROSS_: + { + this.state = 1473; + this.match(TrinoParser.CROSS_); + this.state = 1474; + this.match(TrinoParser.JOIN_); + this.state = 1475; + (localContext as JoinRelationContext)._right = this.sampledRelation(); + } + break; + case TrinoParser.FULL_: + case TrinoParser.INNER_: + case TrinoParser.JOIN_: + case TrinoParser.LEFT_: + case TrinoParser.RIGHT_: + { + this.state = 1476; + this.joinType(); + this.state = 1477; + this.match(TrinoParser.JOIN_); + this.state = 1478; + (localContext as JoinRelationContext)._rightRelation = this.relation(0); + this.state = 1479; + this.joinCriteria(); + } + break; + case TrinoParser.NATURAL_: + { + this.state = 1481; + this.match(TrinoParser.NATURAL_); + this.state = 1482; + this.joinType(); + this.state = 1483; + this.match(TrinoParser.JOIN_); + this.state = 1484; + (localContext as JoinRelationContext)._right = this.sampledRelation(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + } + } + this.state = 1492; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 184, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public joinType(): JoinTypeContext { + let localContext = new JoinTypeContext(this.context, this.state); + this.enterRule(localContext, 60, TrinoParser.RULE_joinType); + let _la: number; + try { + this.state = 1500; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.INNER_: + case TrinoParser.JOIN_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1494; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 108) { + { + this.state = 1493; + this.match(TrinoParser.INNER_); + } + } + + } + break; + case TrinoParser.FULL_: + case TrinoParser.LEFT_: + case TrinoParser.RIGHT_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1496; + _la = this.tokenStream.LA(1); + if(!(_la === 89 || _la === 135 || _la === 217)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1498; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 180) { + { + this.state = 1497; + this.match(TrinoParser.OUTER_); + } + } + + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public joinCriteria(): JoinCriteriaContext { + let localContext = new JoinCriteriaContext(this.context, this.state); + this.enterRule(localContext, 62, TrinoParser.RULE_joinCriteria); + let _la: number; + try { + this.state = 1516; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ON_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1502; + this.match(TrinoParser.ON_); + this.state = 1503; + this.booleanExpression(0); + } + break; + case TrinoParser.USING_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1504; + this.match(TrinoParser.USING_); + this.state = 1505; + this.match(TrinoParser.LPAREN_); + this.state = 1506; + this.identifier(); + this.state = 1511; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1507; + this.match(TrinoParser.COMMA_); + this.state = 1508; + this.identifier(); + } + } + this.state = 1513; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1514; + this.match(TrinoParser.RPAREN_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sampledRelation(): SampledRelationContext { + let localContext = new SampledRelationContext(this.context, this.state); + this.enterRule(localContext, 64, TrinoParser.RULE_sampledRelation); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1518; + this.patternRecognition(); + this.state = 1525; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 190, this.context) ) { + case 1: + { + this.state = 1519; + this.match(TrinoParser.TABLESAMPLE_); + this.state = 1520; + this.sampleType(); + this.state = 1521; + this.match(TrinoParser.LPAREN_); + this.state = 1522; + localContext._percentage = this.expression(); + this.state = 1523; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sampleType(): SampleTypeContext { + let localContext = new SampleTypeContext(this.context, this.state); + this.enterRule(localContext, 66, TrinoParser.RULE_sampleType); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1527; + _la = this.tokenStream.LA(1); + if(!(_la === 16 || _la === 243)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public trimsSpecification(): TrimsSpecificationContext { + let localContext = new TrimsSpecificationContext(this.context, this.state); + this.enterRule(localContext, 68, TrinoParser.RULE_trimsSpecification); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1529; + _la = this.tokenStream.LA(1); + if(!(_la === 18 || _la === 133 || _la === 254)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public listAggOverflowBehavior(): ListAggOverflowBehaviorContext { + let localContext = new ListAggOverflowBehaviorContext(this.context, this.state); + this.enterRule(localContext, 70, TrinoParser.RULE_listAggOverflowBehavior); + let _la: number; + try { + this.state = 1537; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ERROR_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1531; + this.match(TrinoParser.ERROR_); + } + break; + case TrinoParser.TRUNCATE_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1532; + this.match(TrinoParser.TRUNCATE_); + this.state = 1534; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 327 || _la === 328) { + { + this.state = 1533; + this.string_(); + } + } + + this.state = 1536; + this.listaggCountIndication(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public listaggCountIndication(): ListaggCountIndicationContext { + let localContext = new ListaggCountIndicationContext(this.context, this.state); + this.enterRule(localContext, 72, TrinoParser.RULE_listaggCountIndication); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1539; + _la = this.tokenStream.LA(1); + if(!(_la === 288 || _la === 290)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1540; + this.match(TrinoParser.COUNT_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public patternRecognition(): PatternRecognitionContext { + let localContext = new PatternRecognitionContext(this.context, this.state); + this.enterRule(localContext, 74, TrinoParser.RULE_patternRecognition); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1542; + this.aliasedRelation(); + this.state = 1625; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 208, this.context) ) { + case 1: + { + this.state = 1543; + this.match(TrinoParser.MATCH_RECOGNIZE_); + this.state = 1544; + this.match(TrinoParser.LPAREN_); + this.state = 1555; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 184) { + { + this.state = 1545; + this.match(TrinoParser.PARTITION_); + this.state = 1546; + this.match(TrinoParser.BY_); + this.state = 1547; + localContext._expression = this.expression(); + localContext._partition.push(localContext._expression!); + this.state = 1552; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1548; + this.match(TrinoParser.COMMA_); + this.state = 1549; + localContext._expression = this.expression(); + localContext._partition.push(localContext._expression!); + } + } + this.state = 1554; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1567; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 178) { + { + this.state = 1557; + this.match(TrinoParser.ORDER_); + this.state = 1558; + this.match(TrinoParser.BY_); + this.state = 1559; + this.sortItem(); + this.state = 1564; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1560; + this.match(TrinoParser.COMMA_); + this.state = 1561; + this.sortItem(); + } + } + this.state = 1566; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1578; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 151) { + { + this.state = 1569; + this.match(TrinoParser.MEASURES_); + this.state = 1570; + this.measureDefinition(); + this.state = 1575; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1571; + this.match(TrinoParser.COMMA_); + this.state = 1572; + this.measureDefinition(); + } + } + this.state = 1577; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1581; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 5 || _la === 174) { + { + this.state = 1580; + this.rowsPerMatch(); + } + } + + this.state = 1586; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 4) { + { + this.state = 1583; + this.match(TrinoParser.AFTER_); + this.state = 1584; + this.match(TrinoParser.MATCH_); + this.state = 1585; + this.skipTo(); + } + } + + this.state = 1589; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 107 || _la === 230) { + { + this.state = 1588; + _la = this.tokenStream.LA(1); + if(!(_la === 107 || _la === 230)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 1591; + this.match(TrinoParser.PATTERN_); + this.state = 1592; + this.match(TrinoParser.LPAREN_); + this.state = 1593; + this.rowPattern(0); + this.state = 1594; + this.match(TrinoParser.RPAREN_); + this.state = 1604; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 241) { + { + this.state = 1595; + this.match(TrinoParser.SUBSET_); + this.state = 1596; + this.subsetDefinition(); + this.state = 1601; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1597; + this.match(TrinoParser.COMMA_); + this.state = 1598; + this.subsetDefinition(); + } + } + this.state = 1603; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1606; + this.match(TrinoParser.DEFINE_); + this.state = 1607; + this.variableDefinition(); + this.state = 1612; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1608; + this.match(TrinoParser.COMMA_); + this.state = 1609; + this.variableDefinition(); + } + } + this.state = 1614; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1615; + this.match(TrinoParser.RPAREN_); + this.state = 1623; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 207, this.context) ) { + case 1: + { + this.state = 1617; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 11) { + { + this.state = 1616; + this.match(TrinoParser.AS_); + } + } + + this.state = 1619; + this.identifier(); + this.state = 1621; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 206, this.context) ) { + case 1: + { + this.state = 1620; + this.columnAliases(); + } + break; + } + } + break; + } + } + break; + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public measureDefinition(): MeasureDefinitionContext { + let localContext = new MeasureDefinitionContext(this.context, this.state); + this.enterRule(localContext, 76, TrinoParser.RULE_measureDefinition); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1627; + this.expression(); + this.state = 1628; + this.match(TrinoParser.AS_); + this.state = 1629; + this.identifier(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public rowsPerMatch(): RowsPerMatchContext { + let localContext = new RowsPerMatchContext(this.context, this.state); + this.enterRule(localContext, 78, TrinoParser.RULE_rowsPerMatch); + let _la: number; + try { + this.state = 1642; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ONE_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1631; + this.match(TrinoParser.ONE_); + this.state = 1632; + this.match(TrinoParser.ROW_); + this.state = 1633; + this.match(TrinoParser.PER_); + this.state = 1634; + this.match(TrinoParser.MATCH_); + } + break; + case TrinoParser.ALL_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1635; + this.match(TrinoParser.ALL_); + this.state = 1636; + this.match(TrinoParser.ROWS_); + this.state = 1637; + this.match(TrinoParser.PER_); + this.state = 1638; + this.match(TrinoParser.MATCH_); + this.state = 1640; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 172 || _la === 236 || _la === 288) { + { + this.state = 1639; + this.emptyMatchHandling(); + } + } + + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public emptyMatchHandling(): EmptyMatchHandlingContext { + let localContext = new EmptyMatchHandlingContext(this.context, this.state); + this.enterRule(localContext, 80, TrinoParser.RULE_emptyMatchHandling); + try { + this.state = 1653; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.SHOW_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1644; + this.match(TrinoParser.SHOW_); + this.state = 1645; + this.match(TrinoParser.EMPTY_); + this.state = 1646; + this.match(TrinoParser.MATCHES_); + } + break; + case TrinoParser.OMIT_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1647; + this.match(TrinoParser.OMIT_); + this.state = 1648; + this.match(TrinoParser.EMPTY_); + this.state = 1649; + this.match(TrinoParser.MATCHES_); + } + break; + case TrinoParser.WITH_: + this.enterOuterAlt(localContext, 3); + { + this.state = 1650; + this.match(TrinoParser.WITH_); + this.state = 1651; + this.match(TrinoParser.UNMATCHED_); + this.state = 1652; + this.match(TrinoParser.ROWS_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public skipTo(): SkipToContext { + let localContext = new SkipToContext(this.context, this.state); + this.enterRule(localContext, 82, TrinoParser.RULE_skipTo); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1655; + this.match(TrinoParser.SKIP_); + this.state = 1668; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.TO_: + { + this.state = 1656; + this.match(TrinoParser.TO_); + this.state = 1663; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 213, this.context) ) { + case 1: + { + this.state = 1657; + this.match(TrinoParser.NEXT_); + this.state = 1658; + this.match(TrinoParser.ROW_); + } + break; + case 2: + { + this.state = 1660; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 212, this.context) ) { + case 1: + { + this.state = 1659; + _la = this.tokenStream.LA(1); + if(!(_la === 84 || _la === 131)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 1662; + this.identifier(); + } + break; + } + } + break; + case TrinoParser.PAST_: + { + this.state = 1665; + this.match(TrinoParser.PAST_); + this.state = 1666; + this.match(TrinoParser.LAST_); + this.state = 1667; + this.match(TrinoParser.ROW_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public subsetDefinition(): SubsetDefinitionContext { + let localContext = new SubsetDefinitionContext(this.context, this.state); + this.enterRule(localContext, 84, TrinoParser.RULE_subsetDefinition); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1670; + localContext._name = this.identifier(); + this.state = 1671; + this.match(TrinoParser.EQ_); + this.state = 1672; + this.match(TrinoParser.LPAREN_); + this.state = 1673; + localContext._identifier = this.identifier(); + localContext._union.push(localContext._identifier!); + this.state = 1678; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1674; + this.match(TrinoParser.COMMA_); + this.state = 1675; + localContext._identifier = this.identifier(); + localContext._union.push(localContext._identifier!); + } + } + this.state = 1680; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1681; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public variableDefinition(): VariableDefinitionContext { + let localContext = new VariableDefinitionContext(this.context, this.state); + this.enterRule(localContext, 86, TrinoParser.RULE_variableDefinition); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1683; + this.identifier(); + this.state = 1684; + this.match(TrinoParser.AS_); + this.state = 1685; + this.expression(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public aliasedRelation(): AliasedRelationContext { + let localContext = new AliasedRelationContext(this.context, this.state); + this.enterRule(localContext, 88, TrinoParser.RULE_aliasedRelation); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1687; + this.relationPrimary(); + this.state = 1695; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 218, this.context) ) { + case 1: + { + this.state = 1689; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 11) { + { + this.state = 1688; + this.match(TrinoParser.AS_); + } + } + + this.state = 1691; + this.identifier(); + this.state = 1693; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 217, this.context) ) { + case 1: + { + this.state = 1692; + this.columnAliases(); + } + break; + } + } + break; + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public columnAliases(): ColumnAliasesContext { + let localContext = new ColumnAliasesContext(this.context, this.state); + this.enterRule(localContext, 90, TrinoParser.RULE_columnAliases); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1697; + this.match(TrinoParser.LPAREN_); + this.state = 1698; + this.identifier(); + this.state = 1703; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1699; + this.match(TrinoParser.COMMA_); + this.state = 1700; + this.identifier(); + } + } + this.state = 1705; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1706; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public relationPrimary(): RelationPrimaryContext { + let localContext = new RelationPrimaryContext(this.context, this.state); + this.enterRule(localContext, 92, TrinoParser.RULE_relationPrimary); + let _la: number; + try { + this.state = 1745; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 223, this.context) ) { + case 1: + localContext = new TableNameContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1708; + this.qualifiedName(); + this.state = 1710; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 220, this.context) ) { + case 1: + { + this.state = 1709; + this.queryPeriod(); + } + break; + } + } + break; + case 2: + localContext = new SubqueryRelationContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1712; + this.match(TrinoParser.LPAREN_); + this.state = 1713; + this.query(); + this.state = 1714; + this.match(TrinoParser.RPAREN_); + } + break; + case 3: + localContext = new UnnestContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 1716; + this.match(TrinoParser.UNNEST_); + this.state = 1717; + this.match(TrinoParser.LPAREN_); + this.state = 1718; + this.expression(); + this.state = 1723; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1719; + this.match(TrinoParser.COMMA_); + this.state = 1720; + this.expression(); + } + } + this.state = 1725; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1726; + this.match(TrinoParser.RPAREN_); + this.state = 1729; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 222, this.context) ) { + case 1: + { + this.state = 1727; + this.match(TrinoParser.WITH_); + this.state = 1728; + this.match(TrinoParser.ORDINALITY_); + } + break; + } + } + break; + case 4: + localContext = new LateralContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 1731; + this.match(TrinoParser.LATERAL_); + this.state = 1732; + this.match(TrinoParser.LPAREN_); + this.state = 1733; + this.query(); + this.state = 1734; + this.match(TrinoParser.RPAREN_); + } + break; + case 5: + localContext = new TableFunctionInvocationContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 1736; + this.match(TrinoParser.TABLE_); + this.state = 1737; + this.match(TrinoParser.LPAREN_); + this.state = 1738; + this.tableFunctionCall(); + this.state = 1739; + this.match(TrinoParser.RPAREN_); + } + break; + case 6: + localContext = new ParenthesizedRelationContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 1741; + this.match(TrinoParser.LPAREN_); + this.state = 1742; + this.relation(0); + this.state = 1743; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableFunctionCall(): TableFunctionCallContext { + let localContext = new TableFunctionCallContext(this.context, this.state); + this.enterRule(localContext, 94, TrinoParser.RULE_tableFunctionCall); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1747; + this.qualifiedName(); + this.state = 1748; + this.match(TrinoParser.LPAREN_); + this.state = 1757; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 225, this.context) ) { + case 1: + { + this.state = 1749; + this.tableFunctionArgument(); + this.state = 1754; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1750; + this.match(TrinoParser.COMMA_); + this.state = 1751; + this.tableFunctionArgument(); + } + } + this.state = 1756; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + break; + } + this.state = 1768; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 35) { + { + this.state = 1759; + this.match(TrinoParser.COPARTITION_); + this.state = 1760; + this.copartitionTables(); + this.state = 1765; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1761; + this.match(TrinoParser.COMMA_); + this.state = 1762; + this.copartitionTables(); + } + } + this.state = 1767; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1770; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableFunctionArgument(): TableFunctionArgumentContext { + let localContext = new TableFunctionArgumentContext(this.context, this.state); + this.enterRule(localContext, 96, TrinoParser.RULE_tableFunctionArgument); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1775; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 228, this.context) ) { + case 1: + { + this.state = 1772; + this.identifier(); + this.state = 1773; + this.match(TrinoParser.RDOUBLEARROW_); + } + break; + } + this.state = 1780; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 229, this.context) ) { + case 1: + { + this.state = 1777; + this.tableArgument(); + } + break; + case 2: + { + this.state = 1778; + this.descriptorArgument(); + } + break; + case 3: + { + this.state = 1779; + this.expression(); + } + break; + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableArgument(): TableArgumentContext { + let localContext = new TableArgumentContext(this.context, this.state); + this.enterRule(localContext, 98, TrinoParser.RULE_tableArgument); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1782; + this.tableArgumentRelation(); + this.state = 1800; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 184) { + { + this.state = 1783; + this.match(TrinoParser.PARTITION_); + this.state = 1784; + this.match(TrinoParser.BY_); + this.state = 1798; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 232, this.context) ) { + case 1: + { + this.state = 1785; + this.match(TrinoParser.LPAREN_); + this.state = 1794; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 1786; + this.expression(); + this.state = 1791; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1787; + this.match(TrinoParser.COMMA_); + this.state = 1788; + this.expression(); + } + } + this.state = 1793; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1796; + this.match(TrinoParser.RPAREN_); + } + break; + case 2: + { + this.state = 1797; + this.expression(); + } + break; + } + } + } + + this.state = 1808; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.PRUNE_: + { + this.state = 1802; + this.match(TrinoParser.PRUNE_); + this.state = 1803; + this.match(TrinoParser.WHEN_); + this.state = 1804; + this.match(TrinoParser.EMPTY_); + } + break; + case TrinoParser.KEEP_: + { + this.state = 1805; + this.match(TrinoParser.KEEP_); + this.state = 1806; + this.match(TrinoParser.WHEN_); + this.state = 1807; + this.match(TrinoParser.EMPTY_); + } + break; + case TrinoParser.COPARTITION_: + case TrinoParser.ORDER_: + case TrinoParser.COMMA_: + case TrinoParser.RPAREN_: + break; + default: + break; + } + this.state = 1826; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 178) { + { + this.state = 1810; + this.match(TrinoParser.ORDER_); + this.state = 1811; + this.match(TrinoParser.BY_); + this.state = 1824; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 236, this.context) ) { + case 1: + { + this.state = 1812; + this.match(TrinoParser.LPAREN_); + this.state = 1813; + this.sortItem(); + this.state = 1818; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1814; + this.match(TrinoParser.COMMA_); + this.state = 1815; + this.sortItem(); + } + } + this.state = 1820; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1821; + this.match(TrinoParser.RPAREN_); + } + break; + case 2: + { + this.state = 1823; + this.sortItem(); + } + break; + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public tableArgumentRelation(): TableArgumentRelationContext { + let localContext = new TableArgumentRelationContext(this.context, this.state); + this.enterRule(localContext, 100, TrinoParser.RULE_tableArgumentRelation); + let _la: number; + try { + this.state = 1854; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 244, this.context) ) { + case 1: + localContext = new TableArgumentTableContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1828; + this.match(TrinoParser.TABLE_); + this.state = 1829; + this.match(TrinoParser.LPAREN_); + this.state = 1830; + this.qualifiedName(); + this.state = 1831; + this.match(TrinoParser.RPAREN_); + this.state = 1839; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 240, this.context) ) { + case 1: + { + this.state = 1833; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 11) { + { + this.state = 1832; + this.match(TrinoParser.AS_); + } + } + + this.state = 1835; + this.identifier(); + this.state = 1837; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 1836; + this.columnAliases(); + } + } + + } + break; + } + } + break; + case 2: + localContext = new TableArgumentQueryContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1841; + this.match(TrinoParser.TABLE_); + this.state = 1842; + this.match(TrinoParser.LPAREN_); + this.state = 1843; + this.query(); + this.state = 1844; + this.match(TrinoParser.RPAREN_); + this.state = 1852; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 243, this.context) ) { + case 1: + { + this.state = 1846; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 11) { + { + this.state = 1845; + this.match(TrinoParser.AS_); + } + } + + this.state = 1848; + this.identifier(); + this.state = 1850; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 1849; + this.columnAliases(); + } + } + + } + break; + } + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public descriptorArgument(): DescriptorArgumentContext { + let localContext = new DescriptorArgumentContext(this.context, this.state); + this.enterRule(localContext, 102, TrinoParser.RULE_descriptorArgument); + let _la: number; + try { + this.state = 1874; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.DESCRIPTOR_: + this.enterOuterAlt(localContext, 1); + { + this.state = 1856; + this.match(TrinoParser.DESCRIPTOR_); + this.state = 1857; + this.match(TrinoParser.LPAREN_); + this.state = 1858; + this.descriptorField(); + this.state = 1863; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1859; + this.match(TrinoParser.COMMA_); + this.state = 1860; + this.descriptorField(); + } + } + this.state = 1865; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1866; + this.match(TrinoParser.RPAREN_); + } + break; + case TrinoParser.CAST_: + this.enterOuterAlt(localContext, 2); + { + this.state = 1868; + this.match(TrinoParser.CAST_); + this.state = 1869; + this.match(TrinoParser.LPAREN_); + this.state = 1870; + this.match(TrinoParser.NULL_); + this.state = 1871; + this.match(TrinoParser.AS_); + this.state = 1872; + this.match(TrinoParser.DESCRIPTOR_); + this.state = 1873; + this.match(TrinoParser.RPAREN_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public descriptorField(): DescriptorFieldContext { + let localContext = new DescriptorFieldContext(this.context, this.state); + this.enterRule(localContext, 104, TrinoParser.RULE_descriptorField); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1876; + this.identifier(); + this.state = 1878; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282055519) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 1877; + this.type_(0); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public copartitionTables(): CopartitionTablesContext { + let localContext = new CopartitionTablesContext(this.context, this.state); + this.enterRule(localContext, 106, TrinoParser.RULE_copartitionTables); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1880; + this.match(TrinoParser.LPAREN_); + this.state = 1881; + this.qualifiedName(); + this.state = 1882; + this.match(TrinoParser.COMMA_); + this.state = 1883; + this.qualifiedName(); + this.state = 1888; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1884; + this.match(TrinoParser.COMMA_); + this.state = 1885; + this.qualifiedName(); + } + } + this.state = 1890; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1891; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public expression(): ExpressionContext { + let localContext = new ExpressionContext(this.context, this.state); + this.enterRule(localContext, 108, TrinoParser.RULE_expression); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1893; + this.booleanExpression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public booleanExpression(): BooleanExpressionContext; + public booleanExpression(_p: number): BooleanExpressionContext; + public booleanExpression(_p?: number): BooleanExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new BooleanExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 110; + this.enterRecursionRule(localContext, 110, TrinoParser.RULE_booleanExpression, _p); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1902; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ABSENT_: + case TrinoParser.ADD_: + case TrinoParser.ADMIN_: + case TrinoParser.AFTER_: + case TrinoParser.ALL_: + case TrinoParser.ANALYZE_: + case TrinoParser.ANY_: + case TrinoParser.ARRAY_: + case TrinoParser.ASC_: + case TrinoParser.AT_: + case TrinoParser.AUTHORIZATION_: + case TrinoParser.BEGIN_: + case TrinoParser.BERNOULLI_: + case TrinoParser.BOTH_: + case TrinoParser.CALL_: + case TrinoParser.CALLED_: + case TrinoParser.CASCADE_: + case TrinoParser.CASE_: + case TrinoParser.CAST_: + case TrinoParser.CATALOG_: + case TrinoParser.CATALOGS_: + case TrinoParser.COLUMN_: + case TrinoParser.COLUMNS_: + case TrinoParser.COMMENT_: + case TrinoParser.COMMIT_: + case TrinoParser.COMMITTED_: + case TrinoParser.CONDITIONAL_: + case TrinoParser.COUNT_: + case TrinoParser.COPARTITION_: + case TrinoParser.CURRENT_: + case TrinoParser.CURRENT_CATALOG_: + case TrinoParser.CURRENT_DATE_: + case TrinoParser.CURRENT_PATH_: + case TrinoParser.CURRENT_SCHEMA_: + case TrinoParser.CURRENT_TIME_: + case TrinoParser.CURRENT_TIMESTAMP_: + case TrinoParser.CURRENT_USER_: + case TrinoParser.DATA_: + case TrinoParser.DATE_: + case TrinoParser.DAY_: + case TrinoParser.DECLARE_: + case TrinoParser.DEFAULT_: + case TrinoParser.DEFINE_: + case TrinoParser.DEFINER_: + case TrinoParser.DENY_: + case TrinoParser.DESC_: + case TrinoParser.DESCRIPTOR_: + case TrinoParser.DETERMINISTIC_: + case TrinoParser.DISTRIBUTED_: + case TrinoParser.DO_: + case TrinoParser.DOUBLE_: + case TrinoParser.EMPTY_: + case TrinoParser.ELSEIF_: + case TrinoParser.ENCODING_: + case TrinoParser.ERROR_: + case TrinoParser.EXCLUDING_: + case TrinoParser.EXISTS_: + case TrinoParser.EXPLAIN_: + case TrinoParser.EXTRACT_: + case TrinoParser.FALSE_: + case TrinoParser.FETCH_: + case TrinoParser.FILTER_: + case TrinoParser.FINAL_: + case TrinoParser.FIRST_: + case TrinoParser.FOLLOWING_: + case TrinoParser.FORMAT_: + case TrinoParser.FUNCTION_: + case TrinoParser.FUNCTIONS_: + case TrinoParser.GRACE_: + case TrinoParser.GRANT_: + case TrinoParser.GRANTED_: + case TrinoParser.GRANTS_: + case TrinoParser.GRAPHVIZ_: + case TrinoParser.GROUPING_: + case TrinoParser.GROUPS_: + case TrinoParser.HOUR_: + case TrinoParser.IF_: + case TrinoParser.IGNORE_: + case TrinoParser.IMMEDIATE_: + case TrinoParser.INCLUDING_: + case TrinoParser.INITIAL_: + case TrinoParser.INPUT_: + case TrinoParser.INTERVAL_: + case TrinoParser.INVOKER_: + case TrinoParser.IO_: + case TrinoParser.ISOLATION_: + case TrinoParser.ITERATE_: + case TrinoParser.JSON_: + case TrinoParser.JSON_ARRAY_: + case TrinoParser.JSON_EXISTS_: + case TrinoParser.JSON_OBJECT_: + case TrinoParser.JSON_QUERY_: + case TrinoParser.JSON_VALUE_: + case TrinoParser.KEEP_: + case TrinoParser.KEY_: + case TrinoParser.KEYS_: + case TrinoParser.LANGUAGE_: + case TrinoParser.LAST_: + case TrinoParser.LATERAL_: + case TrinoParser.LEADING_: + case TrinoParser.LEAVE_: + case TrinoParser.LEVEL_: + case TrinoParser.LIMIT_: + case TrinoParser.LISTAGG_: + case TrinoParser.LOCAL_: + case TrinoParser.LOCALTIME_: + case TrinoParser.LOCALTIMESTAMP_: + case TrinoParser.LOGICAL_: + case TrinoParser.LOOP_: + case TrinoParser.MAP_: + case TrinoParser.MATCH_: + case TrinoParser.MATCHED_: + case TrinoParser.MATCHES_: + case TrinoParser.MATCH_RECOGNIZE_: + case TrinoParser.MATERIALIZED_: + case TrinoParser.MEASURES_: + case TrinoParser.MERGE_: + case TrinoParser.MINUTE_: + case TrinoParser.MONTH_: + case TrinoParser.NESTED_: + case TrinoParser.NEXT_: + case TrinoParser.NFC_: + case TrinoParser.NFD_: + case TrinoParser.NFKC_: + case TrinoParser.NFKD_: + case TrinoParser.NO_: + case TrinoParser.NONE_: + case TrinoParser.NORMALIZE_: + case TrinoParser.NULL_: + case TrinoParser.NULLIF_: + case TrinoParser.NULLS_: + case TrinoParser.OBJECT_: + case TrinoParser.OF_: + case TrinoParser.OFFSET_: + case TrinoParser.OMIT_: + case TrinoParser.ONE_: + case TrinoParser.ONLY_: + case TrinoParser.OPTION_: + case TrinoParser.ORDINALITY_: + case TrinoParser.OUTPUT_: + case TrinoParser.OVER_: + case TrinoParser.OVERFLOW_: + case TrinoParser.PARTITION_: + case TrinoParser.PARTITIONS_: + case TrinoParser.PASSING_: + case TrinoParser.PAST_: + case TrinoParser.PATH_: + case TrinoParser.PATTERN_: + case TrinoParser.PER_: + case TrinoParser.PERIOD_: + case TrinoParser.PERMUTE_: + case TrinoParser.PLAN_: + case TrinoParser.POSITION_: + case TrinoParser.PRECEDING_: + case TrinoParser.PRECISION_: + case TrinoParser.PRIVILEGES_: + case TrinoParser.PROPERTIES_: + case TrinoParser.PRUNE_: + case TrinoParser.QUOTES_: + case TrinoParser.RANGE_: + case TrinoParser.READ_: + case TrinoParser.REFRESH_: + case TrinoParser.RENAME_: + case TrinoParser.REPEAT_: + case TrinoParser.REPEATABLE_: + case TrinoParser.REPLACE_: + case TrinoParser.RESET_: + case TrinoParser.RESPECT_: + case TrinoParser.RESTRICT_: + case TrinoParser.RETURN_: + case TrinoParser.RETURNING_: + case TrinoParser.RETURNS_: + case TrinoParser.REVOKE_: + case TrinoParser.ROLE_: + case TrinoParser.ROLES_: + case TrinoParser.ROLLBACK_: + case TrinoParser.ROW_: + case TrinoParser.ROWS_: + case TrinoParser.RUNNING_: + case TrinoParser.SCALAR_: + case TrinoParser.SCHEMA_: + case TrinoParser.SCHEMAS_: + case TrinoParser.SECOND_: + case TrinoParser.SECURITY_: + case TrinoParser.SEEK_: + case TrinoParser.SERIALIZABLE_: + case TrinoParser.SESSION_: + case TrinoParser.SET_: + case TrinoParser.SETS_: + case TrinoParser.SHOW_: + case TrinoParser.SOME_: + case TrinoParser.START_: + case TrinoParser.STATS_: + case TrinoParser.SUBSET_: + case TrinoParser.SUBSTRING_: + case TrinoParser.SYSTEM_: + case TrinoParser.TABLES_: + case TrinoParser.TABLESAMPLE_: + case TrinoParser.TEXT_: + case TrinoParser.TEXT_STRING_: + case TrinoParser.TIES_: + case TrinoParser.TIME_: + case TrinoParser.TIMESTAMP_: + case TrinoParser.TO_: + case TrinoParser.TRAILING_: + case TrinoParser.TRANSACTION_: + case TrinoParser.TRIM_: + case TrinoParser.TRUE_: + case TrinoParser.TRUNCATE_: + case TrinoParser.TRY_CAST_: + case TrinoParser.TYPE_: + case TrinoParser.UNBOUNDED_: + case TrinoParser.UNCOMMITTED_: + case TrinoParser.UNCONDITIONAL_: + case TrinoParser.UNIQUE_: + case TrinoParser.UNKNOWN_: + case TrinoParser.UNMATCHED_: + case TrinoParser.UNTIL_: + case TrinoParser.UPDATE_: + case TrinoParser.USE_: + case TrinoParser.USER_: + case TrinoParser.UTF16_: + case TrinoParser.UTF32_: + case TrinoParser.UTF8_: + case TrinoParser.VALIDATE_: + case TrinoParser.VALUE_: + case TrinoParser.VERBOSE_: + case TrinoParser.VERSION_: + case TrinoParser.VIEW_: + case TrinoParser.WHILE_: + case TrinoParser.WINDOW_: + case TrinoParser.WITHIN_: + case TrinoParser.WITHOUT_: + case TrinoParser.WORK_: + case TrinoParser.WRAPPER_: + case TrinoParser.WRITE_: + case TrinoParser.YEAR_: + case TrinoParser.ZONE_: + case TrinoParser.PLUS_: + case TrinoParser.MINUS_: + case TrinoParser.QUESTION_MARK_: + case TrinoParser.LPAREN_: + case TrinoParser.STRING_: + case TrinoParser.UNICODE_STRING_: + case TrinoParser.BINARY_LITERAL_: + case TrinoParser.INTEGER_VALUE_: + case TrinoParser.DECIMAL_VALUE_: + case TrinoParser.DOUBLE_VALUE_: + case TrinoParser.IDENTIFIER_: + case TrinoParser.DIGIT_IDENTIFIER_: + case TrinoParser.QUOTED_IDENTIFIER_: + case TrinoParser.BACKQUOTED_IDENTIFIER_: + { + localContext = new PredicatedContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1896; + this.valueExpression(0); + this.state = 1898; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 249, this.context) ) { + case 1: + { + this.state = 1897; + this.predicate_(); + } + break; + } + } + break; + case TrinoParser.NOT_: + { + localContext = new LogicalNotContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1900; + this.match(TrinoParser.NOT_); + this.state = 1901; + this.booleanExpression(3); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 1912; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 252, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 1910; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 251, this.context) ) { + case 1: + { + localContext = new AndContext(new BooleanExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_booleanExpression); + this.state = 1904; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 1905; + this.match(TrinoParser.AND_); + this.state = 1906; + this.booleanExpression(3); + } + break; + case 2: + { + localContext = new OrContext(new BooleanExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_booleanExpression); + this.state = 1907; + if (!(this.precpred(this.context, 1))) { + throw this.createFailedPredicateException("this.precpred(this.context, 1)"); + } + this.state = 1908; + this.match(TrinoParser.OR_); + this.state = 1909; + this.booleanExpression(2); + } + break; + } + } + } + this.state = 1914; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 252, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public predicate_(): Predicate_Context { + let localContext = new Predicate_Context(this.context, this.state); + this.enterRule(localContext, 112, TrinoParser.RULE_predicate_); + let _la: number; + try { + this.state = 1976; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 261, this.context) ) { + case 1: + localContext = new ComparisonContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 1915; + this.comparisonOperator(); + this.state = 1916; + (localContext as ComparisonContext)._right = this.valueExpression(0); + } + break; + case 2: + localContext = new QuantifiedComparisonContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 1918; + this.comparisonOperator(); + this.state = 1919; + this.comparisonQuantifier(); + this.state = 1920; + this.match(TrinoParser.LPAREN_); + this.state = 1921; + this.query(); + this.state = 1922; + this.match(TrinoParser.RPAREN_); + } + break; + case 3: + localContext = new BetweenContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 1925; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 1924; + this.match(TrinoParser.NOT_); + } + } + + this.state = 1927; + this.match(TrinoParser.BETWEEN_); + this.state = 1928; + (localContext as BetweenContext)._lower = this.valueExpression(0); + this.state = 1929; + this.match(TrinoParser.AND_); + this.state = 1930; + (localContext as BetweenContext)._upper = this.valueExpression(0); + } + break; + case 4: + localContext = new InListContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 1933; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 1932; + this.match(TrinoParser.NOT_); + } + } + + this.state = 1935; + this.match(TrinoParser.IN_); + this.state = 1936; + this.match(TrinoParser.LPAREN_); + this.state = 1937; + this.expression(); + this.state = 1942; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 1938; + this.match(TrinoParser.COMMA_); + this.state = 1939; + this.expression(); + } + } + this.state = 1944; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 1945; + this.match(TrinoParser.RPAREN_); + } + break; + case 5: + localContext = new InSubqueryContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 1948; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 1947; + this.match(TrinoParser.NOT_); + } + } + + this.state = 1950; + this.match(TrinoParser.IN_); + this.state = 1951; + this.match(TrinoParser.LPAREN_); + this.state = 1952; + this.query(); + this.state = 1953; + this.match(TrinoParser.RPAREN_); + } + break; + case 6: + localContext = new LikeContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 1956; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 1955; + this.match(TrinoParser.NOT_); + } + } + + this.state = 1958; + this.match(TrinoParser.LIKE_); + this.state = 1959; + (localContext as LikeContext)._pattern = this.valueExpression(0); + this.state = 1962; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 258, this.context) ) { + case 1: + { + this.state = 1960; + this.match(TrinoParser.ESCAPE_); + this.state = 1961; + (localContext as LikeContext)._escape = this.valueExpression(0); + } + break; + } + } + break; + case 7: + localContext = new NullPredicateContext(localContext); + this.enterOuterAlt(localContext, 7); + { + this.state = 1964; + this.match(TrinoParser.IS_); + this.state = 1966; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 1965; + this.match(TrinoParser.NOT_); + } + } + + this.state = 1968; + this.match(TrinoParser.NULL_); + } + break; + case 8: + localContext = new DistinctFromContext(localContext); + this.enterOuterAlt(localContext, 8); + { + this.state = 1969; + this.match(TrinoParser.IS_); + this.state = 1971; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 1970; + this.match(TrinoParser.NOT_); + } + } + + this.state = 1973; + this.match(TrinoParser.DISTINCT_); + this.state = 1974; + this.match(TrinoParser.FROM_); + this.state = 1975; + (localContext as DistinctFromContext)._right = this.valueExpression(0); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public valueExpression(): ValueExpressionContext; + public valueExpression(_p: number): ValueExpressionContext; + public valueExpression(_p?: number): ValueExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new ValueExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 114; + this.enterRecursionRule(localContext, 114, TrinoParser.RULE_valueExpression, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1982; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 262, this.context) ) { + case 1: + { + localContext = new ValueExpressionDefaultContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1979; + this.primaryExpression(0); + } + break; + case 2: + { + localContext = new ArithmeticUnaryContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1980; + (localContext as ArithmeticUnaryContext)._operator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 302 || _la === 303)) { + (localContext as ArithmeticUnaryContext)._operator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1981; + this.valueExpression(4); + } + break; + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 1998; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 264, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 1996; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 263, this.context) ) { + case 1: + { + localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); + (localContext as ArithmeticBinaryContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_valueExpression); + this.state = 1984; + if (!(this.precpred(this.context, 3))) { + throw this.createFailedPredicateException("this.precpred(this.context, 3)"); + } + this.state = 1985; + (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(((((_la - 304)) & ~0x1F) === 0 && ((1 << (_la - 304)) & 7) !== 0))) { + (localContext as ArithmeticBinaryContext)._operator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1986; + (localContext as ArithmeticBinaryContext)._right = this.valueExpression(4); + } + break; + case 2: + { + localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); + (localContext as ArithmeticBinaryContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_valueExpression); + this.state = 1987; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 1988; + (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 302 || _la === 303)) { + (localContext as ArithmeticBinaryContext)._operator = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1989; + (localContext as ArithmeticBinaryContext)._right = this.valueExpression(3); + } + break; + case 3: + { + localContext = new ConcatenationContext(new ValueExpressionContext(parentContext, parentState)); + (localContext as ConcatenationContext)._left = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_valueExpression); + this.state = 1990; + if (!(this.precpred(this.context, 1))) { + throw this.createFailedPredicateException("this.precpred(this.context, 1)"); + } + this.state = 1991; + this.match(TrinoParser.CONCAT_); + this.state = 1992; + (localContext as ConcatenationContext)._right = this.valueExpression(2); + } + break; + case 4: + { + localContext = new AtTimeZoneContext(new ValueExpressionContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_valueExpression); + this.state = 1993; + if (!(this.precpred(this.context, 5))) { + throw this.createFailedPredicateException("this.precpred(this.context, 5)"); + } + this.state = 1994; + this.match(TrinoParser.AT_); + this.state = 1995; + this.timeZoneSpecifier(); + } + break; + } + } + } + this.state = 2000; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 264, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + + public primaryExpression(): PrimaryExpressionContext; + public primaryExpression(_p: number): PrimaryExpressionContext; + public primaryExpression(_p?: number): PrimaryExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new PrimaryExpressionContext(this.context, parentState); + let previousContext = localContext; + let _startState = 116; + this.enterRecursionRule(localContext, 116, TrinoParser.RULE_primaryExpression, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 2454; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 328, this.context) ) { + case 1: + { + localContext = new NullLiteralContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 2002; + this.match(TrinoParser.NULL_); + } + break; + case 2: + { + localContext = new IntervalLiteralContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2003; + this.interval(); + } + break; + case 3: + { + localContext = new TypeConstructorContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2004; + this.identifier(); + this.state = 2005; + this.string_(); + } + break; + case 4: + { + localContext = new TypeConstructorContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2007; + this.match(TrinoParser.DOUBLE_); + this.state = 2008; + this.match(TrinoParser.PRECISION_); + this.state = 2009; + this.string_(); + } + break; + case 5: + { + localContext = new NumericLiteralContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2010; + this.number_(); + } + break; + case 6: + { + localContext = new BooleanLiteralContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2011; + this.booleanValue(); + } + break; + case 7: + { + localContext = new StringLiteralContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2012; + this.string_(); + } + break; + case 8: + { + localContext = new BinaryLiteralContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2013; + this.match(TrinoParser.BINARY_LITERAL_); + } + break; + case 9: + { + localContext = new ParameterContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2014; + this.match(TrinoParser.QUESTION_MARK_); + } + break; + case 10: + { + localContext = new PositionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2015; + this.match(TrinoParser.POSITION_); + this.state = 2016; + this.match(TrinoParser.LPAREN_); + this.state = 2017; + this.valueExpression(0); + this.state = 2018; + this.match(TrinoParser.IN_); + this.state = 2019; + this.valueExpression(0); + this.state = 2020; + this.match(TrinoParser.RPAREN_); + } + break; + case 11: + { + localContext = new RowConstructorContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2022; + this.match(TrinoParser.LPAREN_); + this.state = 2023; + this.expression(); + this.state = 2026; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 2024; + this.match(TrinoParser.COMMA_); + this.state = 2025; + this.expression(); + } + } + this.state = 2028; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 312); + this.state = 2030; + this.match(TrinoParser.RPAREN_); + } + break; + case 12: + { + localContext = new RowConstructorContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2032; + this.match(TrinoParser.ROW_); + this.state = 2033; + this.match(TrinoParser.LPAREN_); + this.state = 2034; + this.expression(); + this.state = 2039; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2035; + this.match(TrinoParser.COMMA_); + this.state = 2036; + this.expression(); + } + } + this.state = 2041; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2042; + this.match(TrinoParser.RPAREN_); + } + break; + case 13: + { + localContext = new ListaggContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2044; + (localContext as ListaggContext)._name = this.match(TrinoParser.LISTAGG_); + this.state = 2045; + this.match(TrinoParser.LPAREN_); + this.state = 2047; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 267, this.context) ) { + case 1: + { + this.state = 2046; + this.setQuantifier(); + } + break; + } + this.state = 2049; + this.expression(); + this.state = 2052; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 312) { + { + this.state = 2050; + this.match(TrinoParser.COMMA_); + this.state = 2051; + this.string_(); + } + } + + this.state = 2057; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 173) { + { + this.state = 2054; + this.match(TrinoParser.ON_); + this.state = 2055; + this.match(TrinoParser.OVERFLOW_); + this.state = 2056; + this.listAggOverflowBehavior(); + } + } + + this.state = 2059; + this.match(TrinoParser.RPAREN_); + { + this.state = 2060; + this.match(TrinoParser.WITHIN_); + this.state = 2061; + this.match(TrinoParser.GROUP_); + this.state = 2062; + this.match(TrinoParser.LPAREN_); + this.state = 2063; + this.match(TrinoParser.ORDER_); + this.state = 2064; + this.match(TrinoParser.BY_); + this.state = 2065; + this.sortItem(); + this.state = 2070; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2066; + this.match(TrinoParser.COMMA_); + this.state = 2067; + this.sortItem(); + } + } + this.state = 2072; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2073; + this.match(TrinoParser.RPAREN_); + } + this.state = 2076; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 271, this.context) ) { + case 1: + { + this.state = 2075; + this.filter(); + } + break; + } + } + break; + case 14: + { + localContext = new FunctionCallContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2079; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 272, this.context) ) { + case 1: + { + this.state = 2078; + this.processingMode(); + } + break; + } + this.state = 2081; + this.qualifiedName(); + this.state = 2082; + this.match(TrinoParser.LPAREN_); + this.state = 2086; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282055519) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 2083; + (localContext as FunctionCallContext)._label = this.identifier(); + this.state = 2084; + this.match(TrinoParser.DOT_); + } + } + + this.state = 2088; + this.match(TrinoParser.ASTERISK_); + this.state = 2089; + this.match(TrinoParser.RPAREN_); + this.state = 2091; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 274, this.context) ) { + case 1: + { + this.state = 2090; + this.filter(); + } + break; + } + this.state = 2094; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 275, this.context) ) { + case 1: + { + this.state = 2093; + this.over(); + } + break; + } + } + break; + case 15: + { + localContext = new FunctionCallContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2097; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 276, this.context) ) { + case 1: + { + this.state = 2096; + this.processingMode(); + } + break; + } + this.state = 2099; + this.qualifiedName(); + this.state = 2100; + this.match(TrinoParser.LPAREN_); + this.state = 2112; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4143445901) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 2102; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 277, this.context) ) { + case 1: + { + this.state = 2101; + this.setQuantifier(); + } + break; + } + this.state = 2104; + this.expression(); + this.state = 2109; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2105; + this.match(TrinoParser.COMMA_); + this.state = 2106; + this.expression(); + } + } + this.state = 2111; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 2124; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 178) { + { + this.state = 2114; + this.match(TrinoParser.ORDER_); + this.state = 2115; + this.match(TrinoParser.BY_); + this.state = 2116; + this.sortItem(); + this.state = 2121; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2117; + this.match(TrinoParser.COMMA_); + this.state = 2118; + this.sortItem(); + } + } + this.state = 2123; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 2126; + this.match(TrinoParser.RPAREN_); + this.state = 2128; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 282, this.context) ) { + case 1: + { + this.state = 2127; + this.filter(); + } + break; + } + this.state = 2134; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 284, this.context) ) { + case 1: + { + this.state = 2131; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 103 || _la === 211) { + { + this.state = 2130; + this.nullTreatment(); + } + } + + this.state = 2133; + this.over(); + } + break; + } + } + break; + case 16: + { + localContext = new MeasureContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2136; + this.identifier(); + this.state = 2137; + this.over(); + } + break; + case 17: + { + localContext = new LambdaContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2139; + this.identifier(); + this.state = 2140; + this.match(TrinoParser.RARROW_); + this.state = 2141; + this.expression(); + } + break; + case 18: + { + localContext = new LambdaContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2143; + this.match(TrinoParser.LPAREN_); + this.state = 2152; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282055519) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 2144; + this.identifier(); + this.state = 2149; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2145; + this.match(TrinoParser.COMMA_); + this.state = 2146; + this.identifier(); + } + } + this.state = 2151; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 2154; + this.match(TrinoParser.RPAREN_); + this.state = 2155; + this.match(TrinoParser.RARROW_); + this.state = 2156; + this.expression(); + } + break; + case 19: + { + localContext = new SubqueryExpressionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2157; + this.match(TrinoParser.LPAREN_); + this.state = 2158; + this.query(); + this.state = 2159; + this.match(TrinoParser.RPAREN_); + } + break; + case 20: + { + localContext = new ExistsContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2161; + this.match(TrinoParser.EXISTS_); + this.state = 2162; + this.match(TrinoParser.LPAREN_); + this.state = 2163; + this.query(); + this.state = 2164; + this.match(TrinoParser.RPAREN_); + } + break; + case 21: + { + localContext = new SimpleCaseContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2166; + this.match(TrinoParser.CASE_); + this.state = 2167; + (localContext as SimpleCaseContext)._operand = this.expression(); + this.state = 2169; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 2168; + this.whenClause(); + } + } + this.state = 2171; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 284); + this.state = 2175; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 67) { + { + this.state = 2173; + this.match(TrinoParser.ELSE_); + this.state = 2174; + (localContext as SimpleCaseContext)._elseExpression = this.expression(); + } + } + + this.state = 2177; + this.match(TrinoParser.END_); + } + break; + case 22: + { + localContext = new SearchedCaseContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2179; + this.match(TrinoParser.CASE_); + this.state = 2181; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 2180; + this.whenClause(); + } + } + this.state = 2183; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 284); + this.state = 2187; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 67) { + { + this.state = 2185; + this.match(TrinoParser.ELSE_); + this.state = 2186; + (localContext as SearchedCaseContext)._elseExpression = this.expression(); + } + } + + this.state = 2189; + this.match(TrinoParser.END_); + } + break; + case 23: + { + localContext = new CastContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2191; + this.match(TrinoParser.CAST_); + this.state = 2192; + this.match(TrinoParser.LPAREN_); + this.state = 2193; + this.expression(); + this.state = 2194; + this.match(TrinoParser.AS_); + this.state = 2195; + this.type_(0); + this.state = 2196; + this.match(TrinoParser.RPAREN_); + } + break; + case 24: + { + localContext = new CastContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2198; + this.match(TrinoParser.TRY_CAST_); + this.state = 2199; + this.match(TrinoParser.LPAREN_); + this.state = 2200; + this.expression(); + this.state = 2201; + this.match(TrinoParser.AS_); + this.state = 2202; + this.type_(0); + this.state = 2203; + this.match(TrinoParser.RPAREN_); + } + break; + case 25: + { + localContext = new ArrayConstructorContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2205; + this.match(TrinoParser.ARRAY_); + this.state = 2206; + this.match(TrinoParser.LSQUARE_); + this.state = 2215; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517311) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 2207; + this.expression(); + this.state = 2212; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2208; + this.match(TrinoParser.COMMA_); + this.state = 2209; + this.expression(); + } + } + this.state = 2214; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 2217; + this.match(TrinoParser.RSQUARE_); + } + break; + case 26: + { + localContext = new ColumnReferenceContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2218; + this.identifier(); + } + break; + case 27: + { + localContext = new SpecialDateTimeFunctionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2219; + (localContext as SpecialDateTimeFunctionContext)._name = this.match(TrinoParser.CURRENT_DATE_); + } + break; + case 28: + { + localContext = new SpecialDateTimeFunctionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2220; + (localContext as SpecialDateTimeFunctionContext)._name = this.match(TrinoParser.CURRENT_TIME_); + this.state = 2224; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 293, this.context) ) { + case 1: + { + this.state = 2221; + this.match(TrinoParser.LPAREN_); + this.state = 2222; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(TrinoParser.INTEGER_VALUE_); + this.state = 2223; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + break; + case 29: + { + localContext = new SpecialDateTimeFunctionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2226; + (localContext as SpecialDateTimeFunctionContext)._name = this.match(TrinoParser.CURRENT_TIMESTAMP_); + this.state = 2230; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 294, this.context) ) { + case 1: + { + this.state = 2227; + this.match(TrinoParser.LPAREN_); + this.state = 2228; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(TrinoParser.INTEGER_VALUE_); + this.state = 2229; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + break; + case 30: + { + localContext = new SpecialDateTimeFunctionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2232; + (localContext as SpecialDateTimeFunctionContext)._name = this.match(TrinoParser.LOCALTIME_); + this.state = 2236; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 295, this.context) ) { + case 1: + { + this.state = 2233; + this.match(TrinoParser.LPAREN_); + this.state = 2234; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(TrinoParser.INTEGER_VALUE_); + this.state = 2235; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + break; + case 31: + { + localContext = new SpecialDateTimeFunctionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2238; + (localContext as SpecialDateTimeFunctionContext)._name = this.match(TrinoParser.LOCALTIMESTAMP_); + this.state = 2242; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 296, this.context) ) { + case 1: + { + this.state = 2239; + this.match(TrinoParser.LPAREN_); + this.state = 2240; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(TrinoParser.INTEGER_VALUE_); + this.state = 2241; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + break; + case 32: + { + localContext = new CurrentUserContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2244; + (localContext as CurrentUserContext)._name = this.match(TrinoParser.CURRENT_USER_); + } + break; + case 33: + { + localContext = new CurrentCatalogContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2245; + (localContext as CurrentCatalogContext)._name = this.match(TrinoParser.CURRENT_CATALOG_); + } + break; + case 34: + { + localContext = new CurrentSchemaContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2246; + (localContext as CurrentSchemaContext)._name = this.match(TrinoParser.CURRENT_SCHEMA_); + } + break; + case 35: + { + localContext = new CurrentPathContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2247; + (localContext as CurrentPathContext)._name = this.match(TrinoParser.CURRENT_PATH_); + } + break; + case 36: + { + localContext = new TrimContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2248; + this.match(TrinoParser.TRIM_); + this.state = 2249; + this.match(TrinoParser.LPAREN_); + this.state = 2257; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 299, this.context) ) { + case 1: + { + this.state = 2251; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 297, this.context) ) { + case 1: + { + this.state = 2250; + this.trimsSpecification(); + } + break; + } + this.state = 2254; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294309566) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 3069704077) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4240435571) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3748474349) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4160748927) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4293517279) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 3724537823) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4260355967) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 3472612831) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & 17326207) !== 0) || ((((_la - 327)) & ~0x1F) === 0 && ((1 << (_la - 327)) & 1023) !== 0)) { + { + this.state = 2253; + (localContext as TrimContext)._trimChar = this.valueExpression(0); + } + } + + this.state = 2256; + this.match(TrinoParser.FROM_); + } + break; + } + this.state = 2259; + (localContext as TrimContext)._trimSource = this.valueExpression(0); + this.state = 2260; + this.match(TrinoParser.RPAREN_); + } + break; + case 37: + { + localContext = new TrimContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2262; + this.match(TrinoParser.TRIM_); + this.state = 2263; + this.match(TrinoParser.LPAREN_); + this.state = 2264; + (localContext as TrimContext)._trimSource = this.valueExpression(0); + this.state = 2265; + this.match(TrinoParser.COMMA_); + this.state = 2266; + (localContext as TrimContext)._trimChar = this.valueExpression(0); + this.state = 2267; + this.match(TrinoParser.RPAREN_); + } + break; + case 38: + { + localContext = new SubstringContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2269; + this.match(TrinoParser.SUBSTRING_); + this.state = 2270; + this.match(TrinoParser.LPAREN_); + this.state = 2271; + this.valueExpression(0); + this.state = 2272; + this.match(TrinoParser.FROM_); + this.state = 2273; + this.valueExpression(0); + this.state = 2276; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 86) { + { + this.state = 2274; + this.match(TrinoParser.FOR_); + this.state = 2275; + this.valueExpression(0); + } + } + + this.state = 2278; + this.match(TrinoParser.RPAREN_); + } + break; + case 39: + { + localContext = new NormalizeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2280; + this.match(TrinoParser.NORMALIZE_); + this.state = 2281; + this.match(TrinoParser.LPAREN_); + this.state = 2282; + this.valueExpression(0); + this.state = 2285; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 312) { + { + this.state = 2283; + this.match(TrinoParser.COMMA_); + this.state = 2284; + this.normalForm(); + } + } + + this.state = 2287; + this.match(TrinoParser.RPAREN_); + } + break; + case 40: + { + localContext = new ExtractContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2289; + this.match(TrinoParser.EXTRACT_); + this.state = 2290; + this.match(TrinoParser.LPAREN_); + this.state = 2291; + this.identifier(); + this.state = 2292; + this.match(TrinoParser.FROM_); + this.state = 2293; + this.valueExpression(0); + this.state = 2294; + this.match(TrinoParser.RPAREN_); + } + break; + case 41: + { + localContext = new ParenthesizedExpressionContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2296; + this.match(TrinoParser.LPAREN_); + this.state = 2297; + this.expression(); + this.state = 2298; + this.match(TrinoParser.RPAREN_); + } + break; + case 42: + { + localContext = new GroupingOperationContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2300; + this.match(TrinoParser.GROUPING_); + this.state = 2301; + this.match(TrinoParser.LPAREN_); + this.state = 2310; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282055519) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 2302; + this.qualifiedName(); + this.state = 2307; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2303; + this.match(TrinoParser.COMMA_); + this.state = 2304; + this.qualifiedName(); + } + } + this.state = 2309; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 2312; + this.match(TrinoParser.RPAREN_); + } + break; + case 43: + { + localContext = new JsonExistsContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2313; + this.match(TrinoParser.JSON_EXISTS_); + this.state = 2314; + this.match(TrinoParser.LPAREN_); + this.state = 2315; + this.jsonPathInvocation(); + this.state = 2320; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 72 || _la === 80 || _la === 257 || _la === 267) { + { + this.state = 2316; + this.jsonExistsErrorBehavior(); + this.state = 2317; + this.match(TrinoParser.ON_); + this.state = 2318; + this.match(TrinoParser.ERROR_); + } + } + + this.state = 2322; + this.match(TrinoParser.RPAREN_); + } + break; + case 44: + { + localContext = new JsonValueContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2324; + this.match(TrinoParser.JSON_VALUE_); + this.state = 2325; + this.match(TrinoParser.LPAREN_); + this.state = 2326; + this.jsonPathInvocation(); + this.state = 2329; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 214) { + { + this.state = 2327; + this.match(TrinoParser.RETURNING_); + this.state = 2328; + this.type_(0); + } + } + + this.state = 2335; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 306, this.context) ) { + case 1: + { + this.state = 2331; + (localContext as JsonValueContext)._emptyBehavior = this.jsonValueBehavior(); + this.state = 2332; + this.match(TrinoParser.ON_); + this.state = 2333; + this.match(TrinoParser.EMPTY_); + } + break; + } + this.state = 2341; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 53 || _la === 72 || _la === 166) { + { + this.state = 2337; + (localContext as JsonValueContext)._errorBehavior = this.jsonValueBehavior(); + this.state = 2338; + this.match(TrinoParser.ON_); + this.state = 2339; + this.match(TrinoParser.ERROR_); + } + } + + this.state = 2343; + this.match(TrinoParser.RPAREN_); + } + break; + case 45: + { + localContext = new JsonQueryContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2345; + this.match(TrinoParser.JSON_QUERY_); + this.state = 2346; + this.match(TrinoParser.LPAREN_); + this.state = 2347; + this.jsonPathInvocation(); + this.state = 2354; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 214) { + { + this.state = 2348; + this.match(TrinoParser.RETURNING_); + this.state = 2349; + this.type_(0); + this.state = 2352; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 87) { + { + this.state = 2350; + this.match(TrinoParser.FORMAT_); + this.state = 2351; + this.jsonRepresentation(); + } + } + + } + } + + this.state = 2359; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 288 || _la === 290) { + { + this.state = 2356; + this.jsonQueryWrapperBehavior(); + this.state = 2357; + this.match(TrinoParser.WRAPPER_); + } + } + + this.state = 2368; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 127 || _la === 172) { + { + this.state = 2361; + _la = this.tokenStream.LA(1); + if(!(_la === 127 || _la === 172)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 2362; + this.match(TrinoParser.QUOTES_); + this.state = 2366; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 173) { + { + this.state = 2363; + this.match(TrinoParser.ON_); + this.state = 2364; + this.match(TrinoParser.SCALAR_); + this.state = 2365; + this.match(TrinoParser.TEXT_STRING_); + } + } + + } + } + + this.state = 2374; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 313, this.context) ) { + case 1: + { + this.state = 2370; + (localContext as JsonQueryContext)._emptyBehavior = this.jsonQueryBehavior(); + this.state = 2371; + this.match(TrinoParser.ON_); + this.state = 2372; + this.match(TrinoParser.EMPTY_); + } + break; + } + this.state = 2380; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 68 || _la === 72 || _la === 166) { + { + this.state = 2376; + (localContext as JsonQueryContext)._errorBehavior = this.jsonQueryBehavior(); + this.state = 2377; + this.match(TrinoParser.ON_); + this.state = 2378; + this.match(TrinoParser.ERROR_); + } + } + + this.state = 2382; + this.match(TrinoParser.RPAREN_); + } + break; + case 46: + { + localContext = new JsonObjectContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2384; + this.match(TrinoParser.JSON_OBJECT_); + this.state = 2385; + this.match(TrinoParser.LPAREN_); + this.state = 2414; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 320, this.context) ) { + case 1: + { + this.state = 2386; + this.jsonObjectMember(); + this.state = 2391; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2387; + this.match(TrinoParser.COMMA_); + this.state = 2388; + this.jsonObjectMember(); + } + } + this.state = 2393; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2400; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.NULL_: + { + this.state = 2394; + this.match(TrinoParser.NULL_); + this.state = 2395; + this.match(TrinoParser.ON_); + this.state = 2396; + this.match(TrinoParser.NULL_); + } + break; + case TrinoParser.ABSENT_: + { + this.state = 2397; + this.match(TrinoParser.ABSENT_); + this.state = 2398; + this.match(TrinoParser.ON_); + this.state = 2399; + this.match(TrinoParser.NULL_); + } + break; + case TrinoParser.RETURNING_: + case TrinoParser.WITH_: + case TrinoParser.WITHOUT_: + case TrinoParser.RPAREN_: + break; + default: + break; + } + this.state = 2412; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.WITH_: + { + this.state = 2402; + this.match(TrinoParser.WITH_); + this.state = 2403; + this.match(TrinoParser.UNIQUE_); + this.state = 2405; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 129) { + { + this.state = 2404; + this.match(TrinoParser.KEYS_); + } + } + + } + break; + case TrinoParser.WITHOUT_: + { + this.state = 2407; + this.match(TrinoParser.WITHOUT_); + this.state = 2408; + this.match(TrinoParser.UNIQUE_); + this.state = 2410; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 129) { + { + this.state = 2409; + this.match(TrinoParser.KEYS_); + } + } + + } + break; + case TrinoParser.RETURNING_: + case TrinoParser.RPAREN_: + break; + default: + break; + } + } + break; + } + this.state = 2422; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 214) { + { + this.state = 2416; + this.match(TrinoParser.RETURNING_); + this.state = 2417; + this.type_(0); + this.state = 2420; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 87) { + { + this.state = 2418; + this.match(TrinoParser.FORMAT_); + this.state = 2419; + this.jsonRepresentation(); + } + } + + } + } + + this.state = 2424; + this.match(TrinoParser.RPAREN_); + } + break; + case 47: + { + localContext = new JsonArrayContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2425; + this.match(TrinoParser.JSON_ARRAY_); + this.state = 2426; + this.match(TrinoParser.LPAREN_); + this.state = 2443; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 325, this.context) ) { + case 1: + { + this.state = 2427; + this.jsonValueExpression(); + this.state = 2432; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2428; + this.match(TrinoParser.COMMA_); + this.state = 2429; + this.jsonValueExpression(); + } + } + this.state = 2434; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2441; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.NULL_: + { + this.state = 2435; + this.match(TrinoParser.NULL_); + this.state = 2436; + this.match(TrinoParser.ON_); + this.state = 2437; + this.match(TrinoParser.NULL_); + } + break; + case TrinoParser.ABSENT_: + { + this.state = 2438; + this.match(TrinoParser.ABSENT_); + this.state = 2439; + this.match(TrinoParser.ON_); + this.state = 2440; + this.match(TrinoParser.NULL_); + } + break; + case TrinoParser.RETURNING_: + case TrinoParser.RPAREN_: + break; + default: + break; + } + } + break; + } + this.state = 2451; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 214) { + { + this.state = 2445; + this.match(TrinoParser.RETURNING_); + this.state = 2446; + this.type_(0); + this.state = 2449; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 87) { + { + this.state = 2447; + this.match(TrinoParser.FORMAT_); + this.state = 2448; + this.jsonRepresentation(); + } + } + + } + } + + this.state = 2453; + this.match(TrinoParser.RPAREN_); + } + break; + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 2466; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 330, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 2464; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 329, this.context) ) { + case 1: + { + localContext = new SubscriptContext(new PrimaryExpressionContext(parentContext, parentState)); + (localContext as SubscriptContext)._value = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_primaryExpression); + this.state = 2456; + if (!(this.precpred(this.context, 24))) { + throw this.createFailedPredicateException("this.precpred(this.context, 24)"); + } + this.state = 2457; + this.match(TrinoParser.LSQUARE_); + this.state = 2458; + (localContext as SubscriptContext)._index = this.valueExpression(0); + this.state = 2459; + this.match(TrinoParser.RSQUARE_); + } + break; + case 2: + { + localContext = new DereferenceContext(new PrimaryExpressionContext(parentContext, parentState)); + (localContext as DereferenceContext)._base_ = previousContext; + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_primaryExpression); + this.state = 2461; + if (!(this.precpred(this.context, 22))) { + throw this.createFailedPredicateException("this.precpred(this.context, 22)"); + } + this.state = 2462; + this.match(TrinoParser.DOT_); + this.state = 2463; + (localContext as DereferenceContext)._fieldName = this.identifier(); + } + break; + } + } + } + this.state = 2468; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 330, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public jsonPathInvocation(): JsonPathInvocationContext { + let localContext = new JsonPathInvocationContext(this.context, this.state); + this.enterRule(localContext, 118, TrinoParser.RULE_jsonPathInvocation); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2469; + this.jsonValueExpression(); + this.state = 2470; + this.match(TrinoParser.COMMA_); + this.state = 2471; + localContext._path = this.string_(); + this.state = 2481; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 186) { + { + this.state = 2472; + this.match(TrinoParser.PASSING_); + this.state = 2473; + this.jsonArgument(); + this.state = 2478; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2474; + this.match(TrinoParser.COMMA_); + this.state = 2475; + this.jsonArgument(); + } + } + this.state = 2480; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonValueExpression(): JsonValueExpressionContext { + let localContext = new JsonValueExpressionContext(this.context, this.state); + this.enterRule(localContext, 120, TrinoParser.RULE_jsonValueExpression); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2483; + this.expression(); + this.state = 2486; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 87) { + { + this.state = 2484; + this.match(TrinoParser.FORMAT_); + this.state = 2485; + this.jsonRepresentation(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonRepresentation(): JsonRepresentationContext { + let localContext = new JsonRepresentationContext(this.context, this.state); + this.enterRule(localContext, 122, TrinoParser.RULE_jsonRepresentation); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2488; + this.match(TrinoParser.JSON_); + this.state = 2491; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 70) { + { + this.state = 2489; + this.match(TrinoParser.ENCODING_); + this.state = 2490; + _la = this.tokenStream.LA(1); + if(!(((((_la - 275)) & ~0x1F) === 0 && ((1 << (_la - 275)) & 7) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonArgument(): JsonArgumentContext { + let localContext = new JsonArgumentContext(this.context, this.state); + this.enterRule(localContext, 124, TrinoParser.RULE_jsonArgument); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2493; + this.jsonValueExpression(); + this.state = 2494; + this.match(TrinoParser.AS_); + this.state = 2495; + this.identifier(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonExistsErrorBehavior(): JsonExistsErrorBehaviorContext { + let localContext = new JsonExistsErrorBehaviorContext(this.context, this.state); + this.enterRule(localContext, 126, TrinoParser.RULE_jsonExistsErrorBehavior); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2497; + _la = this.tokenStream.LA(1); + if(!(_la === 72 || _la === 80 || _la === 257 || _la === 267)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonValueBehavior(): JsonValueBehaviorContext { + let localContext = new JsonValueBehaviorContext(this.context, this.state); + this.enterRule(localContext, 128, TrinoParser.RULE_jsonValueBehavior); + try { + this.state = 2503; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ERROR_: + this.enterOuterAlt(localContext, 1); + { + this.state = 2499; + this.match(TrinoParser.ERROR_); + } + break; + case TrinoParser.NULL_: + this.enterOuterAlt(localContext, 2); + { + this.state = 2500; + this.match(TrinoParser.NULL_); + } + break; + case TrinoParser.DEFAULT_: + this.enterOuterAlt(localContext, 3); + { + this.state = 2501; + this.match(TrinoParser.DEFAULT_); + this.state = 2502; + this.expression(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonQueryWrapperBehavior(): JsonQueryWrapperBehaviorContext { + let localContext = new JsonQueryWrapperBehaviorContext(this.context, this.state); + this.enterRule(localContext, 130, TrinoParser.RULE_jsonQueryWrapperBehavior); + let _la: number; + try { + this.state = 2516; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.WITHOUT_: + this.enterOuterAlt(localContext, 1); + { + this.state = 2505; + this.match(TrinoParser.WITHOUT_); + this.state = 2507; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 10) { + { + this.state = 2506; + this.match(TrinoParser.ARRAY_); + } + } + + } + break; + case TrinoParser.WITH_: + this.enterOuterAlt(localContext, 2); + { + this.state = 2509; + this.match(TrinoParser.WITH_); + this.state = 2511; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 32 || _la === 264) { + { + this.state = 2510; + _la = this.tokenStream.LA(1); + if(!(_la === 32 || _la === 264)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 2514; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 10) { + { + this.state = 2513; + this.match(TrinoParser.ARRAY_); + } + } + + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonQueryBehavior(): JsonQueryBehaviorContext { + let localContext = new JsonQueryBehaviorContext(this.context, this.state); + this.enterRule(localContext, 132, TrinoParser.RULE_jsonQueryBehavior); + let _la: number; + try { + this.state = 2522; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ERROR_: + this.enterOuterAlt(localContext, 1); + { + this.state = 2518; + this.match(TrinoParser.ERROR_); + } + break; + case TrinoParser.NULL_: + this.enterOuterAlt(localContext, 2); + { + this.state = 2519; + this.match(TrinoParser.NULL_); + } + break; + case TrinoParser.EMPTY_: + this.enterOuterAlt(localContext, 3); + { + this.state = 2520; + this.match(TrinoParser.EMPTY_); + this.state = 2521; + _la = this.tokenStream.LA(1); + if(!(_la === 10 || _la === 169)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public jsonObjectMember(): JsonObjectMemberContext { + let localContext = new JsonObjectMemberContext(this.context, this.state); + this.enterRule(localContext, 134, TrinoParser.RULE_jsonObjectMember); + try { + this.state = 2535; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 342, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 2525; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 341, this.context) ) { + case 1: + { + this.state = 2524; + this.match(TrinoParser.KEY_); + } + break; + } + this.state = 2527; + this.expression(); + this.state = 2528; + this.match(TrinoParser.VALUE_); + this.state = 2529; + this.jsonValueExpression(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 2531; + this.expression(); + this.state = 2532; + this.match(TrinoParser.COLON_); + this.state = 2533; + this.jsonValueExpression(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public processingMode(): ProcessingModeContext { + let localContext = new ProcessingModeContext(this.context, this.state); + this.enterRule(localContext, 136, TrinoParser.RULE_processingMode); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2537; + _la = this.tokenStream.LA(1); + if(!(_la === 83 || _la === 224)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public nullTreatment(): NullTreatmentContext { + let localContext = new NullTreatmentContext(this.context, this.state); + this.enterRule(localContext, 138, TrinoParser.RULE_nullTreatment); + try { + this.state = 2543; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.IGNORE_: + this.enterOuterAlt(localContext, 1); + { + this.state = 2539; + this.match(TrinoParser.IGNORE_); + this.state = 2540; + this.match(TrinoParser.NULLS_); + } + break; + case TrinoParser.RESPECT_: + this.enterOuterAlt(localContext, 2); + { + this.state = 2541; + this.match(TrinoParser.RESPECT_); + this.state = 2542; + this.match(TrinoParser.NULLS_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public string_(): String_Context { + let localContext = new String_Context(this.context, this.state); + this.enterRule(localContext, 140, TrinoParser.RULE_string_); + try { + this.state = 2551; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.STRING_: + localContext = new BasicStringLiteralContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2545; + this.match(TrinoParser.STRING_); + } + break; + case TrinoParser.UNICODE_STRING_: + localContext = new UnicodeStringLiteralContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2546; + this.match(TrinoParser.UNICODE_STRING_); + this.state = 2549; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 344, this.context) ) { + case 1: + { + this.state = 2547; + this.match(TrinoParser.UESCAPE_); + this.state = 2548; + this.match(TrinoParser.STRING_); + } + break; + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public timeZoneSpecifier(): TimeZoneSpecifierContext { + let localContext = new TimeZoneSpecifierContext(this.context, this.state); + this.enterRule(localContext, 142, TrinoParser.RULE_timeZoneSpecifier); + try { + this.state = 2559; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 346, this.context) ) { + case 1: + localContext = new TimeZoneIntervalContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2553; + this.match(TrinoParser.TIME_); + this.state = 2554; + this.match(TrinoParser.ZONE_); + this.state = 2555; + this.interval(); + } + break; + case 2: + localContext = new TimeZoneStringContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2556; + this.match(TrinoParser.TIME_); + this.state = 2557; + this.match(TrinoParser.ZONE_); + this.state = 2558; + this.string_(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public comparisonOperator(): ComparisonOperatorContext { + let localContext = new ComparisonOperatorContext(this.context, this.state); + this.enterRule(localContext, 144, TrinoParser.RULE_comparisonOperator); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2561; + _la = this.tokenStream.LA(1); + if(!(((((_la - 296)) & ~0x1F) === 0 && ((1 << (_la - 296)) & 63) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public comparisonQuantifier(): ComparisonQuantifierContext { + let localContext = new ComparisonQuantifierContext(this.context, this.state); + this.enterRule(localContext, 146, TrinoParser.RULE_comparisonQuantifier); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2563; + _la = this.tokenStream.LA(1); + if(!(_la === 5 || _la === 9 || _la === 238)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public booleanValue(): BooleanValueContext { + let localContext = new BooleanValueContext(this.context, this.state); + this.enterRule(localContext, 148, TrinoParser.RULE_booleanValue); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2565; + _la = this.tokenStream.LA(1); + if(!(_la === 80 || _la === 257)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public interval(): IntervalContext { + let localContext = new IntervalContext(this.context, this.state); + this.enterRule(localContext, 150, TrinoParser.RULE_interval); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2567; + this.match(TrinoParser.INTERVAL_); + this.state = 2569; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 302 || _la === 303) { + { + this.state = 2568; + localContext._sign = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 302 || _la === 303)) { + localContext._sign = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 2571; + this.string_(); + this.state = 2572; + localContext._from_ = this.intervalField(); + this.state = 2575; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 348, this.context) ) { + case 1: + { + this.state = 2573; + this.match(TrinoParser.TO_); + this.state = 2574; + localContext._to = this.intervalField(); + } + break; + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public intervalField(): IntervalFieldContext { + let localContext = new IntervalFieldContext(this.context, this.state); + this.enterRule(localContext, 152, TrinoParser.RULE_intervalField); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2577; + _la = this.tokenStream.LA(1); + if(!(_la === 50 || _la === 101 || _la === 153 || _la === 154 || _la === 228 || _la === 294)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public normalForm(): NormalFormContext { + let localContext = new NormalFormContext(this.context, this.state); + this.enterRule(localContext, 154, TrinoParser.RULE_normalForm); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2579; + _la = this.tokenStream.LA(1); + if(!(((((_la - 158)) & ~0x1F) === 0 && ((1 << (_la - 158)) & 15) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public type_(): TypeContext; + public type_(_p: number): TypeContext; + public type_(_p?: number): TypeContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new TypeContext(this.context, parentState); + let previousContext = localContext; + let _startState = 156; + this.enterRecursionRule(localContext, 156, TrinoParser.RULE_type, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 2672; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 359, this.context) ) { + case 1: + { + localContext = new RowTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 2582; + this.match(TrinoParser.ROW_); + this.state = 2583; + this.match(TrinoParser.LPAREN_); + this.state = 2584; + this.rowField(); + this.state = 2589; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2585; + this.match(TrinoParser.COMMA_); + this.state = 2586; + this.rowField(); + } + } + this.state = 2591; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2592; + this.match(TrinoParser.RPAREN_); + } + break; + case 2: + { + localContext = new IntervalTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2594; + this.match(TrinoParser.INTERVAL_); + this.state = 2595; + (localContext as IntervalTypeContext)._from_ = this.intervalField(); + this.state = 2598; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 350, this.context) ) { + case 1: + { + this.state = 2596; + this.match(TrinoParser.TO_); + this.state = 2597; + (localContext as IntervalTypeContext)._to = this.intervalField(); + } + break; + } + } + break; + case 3: + { + localContext = new DateTimeTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2600; + (localContext as DateTimeTypeContext)._base_ = this.match(TrinoParser.TIMESTAMP_); + this.state = 2605; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 351, this.context) ) { + case 1: + { + this.state = 2601; + this.match(TrinoParser.LPAREN_); + this.state = 2602; + (localContext as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2603; + this.match(TrinoParser.RPAREN_); + } + break; + } + this.state = 2610; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 352, this.context) ) { + case 1: + { + this.state = 2607; + this.match(TrinoParser.WITHOUT_); + this.state = 2608; + this.match(TrinoParser.TIME_); + this.state = 2609; + this.match(TrinoParser.ZONE_); + } + break; + } + } + break; + case 4: + { + localContext = new DateTimeTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2612; + (localContext as DateTimeTypeContext)._base_ = this.match(TrinoParser.TIMESTAMP_); + this.state = 2617; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 2613; + this.match(TrinoParser.LPAREN_); + this.state = 2614; + (localContext as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2615; + this.match(TrinoParser.RPAREN_); + } + } + + this.state = 2619; + this.match(TrinoParser.WITH_); + this.state = 2620; + this.match(TrinoParser.TIME_); + this.state = 2621; + this.match(TrinoParser.ZONE_); + } + break; + case 5: + { + localContext = new DateTimeTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2622; + (localContext as DateTimeTypeContext)._base_ = this.match(TrinoParser.TIME_); + this.state = 2627; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 354, this.context) ) { + case 1: + { + this.state = 2623; + this.match(TrinoParser.LPAREN_); + this.state = 2624; + (localContext as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2625; + this.match(TrinoParser.RPAREN_); + } + break; + } + this.state = 2632; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 355, this.context) ) { + case 1: + { + this.state = 2629; + this.match(TrinoParser.WITHOUT_); + this.state = 2630; + this.match(TrinoParser.TIME_); + this.state = 2631; + this.match(TrinoParser.ZONE_); + } + break; + } + } + break; + case 6: + { + localContext = new DateTimeTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2634; + (localContext as DateTimeTypeContext)._base_ = this.match(TrinoParser.TIME_); + this.state = 2639; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 2635; + this.match(TrinoParser.LPAREN_); + this.state = 2636; + (localContext as DateTimeTypeContext)._precision = this.typeParameter(); + this.state = 2637; + this.match(TrinoParser.RPAREN_); + } + } + + this.state = 2641; + this.match(TrinoParser.WITH_); + this.state = 2642; + this.match(TrinoParser.TIME_); + this.state = 2643; + this.match(TrinoParser.ZONE_); + } + break; + case 7: + { + localContext = new DoublePrecisionTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2644; + this.match(TrinoParser.DOUBLE_); + this.state = 2645; + this.match(TrinoParser.PRECISION_); + } + break; + case 8: + { + localContext = new LegacyArrayTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2646; + this.match(TrinoParser.ARRAY_); + this.state = 2647; + this.match(TrinoParser.LT_); + this.state = 2648; + this.type_(0); + this.state = 2649; + this.match(TrinoParser.GT_); + } + break; + case 9: + { + localContext = new LegacyMapTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2651; + this.match(TrinoParser.MAP_); + this.state = 2652; + this.match(TrinoParser.LT_); + this.state = 2653; + (localContext as LegacyMapTypeContext)._keyType = this.type_(0); + this.state = 2654; + this.match(TrinoParser.COMMA_); + this.state = 2655; + (localContext as LegacyMapTypeContext)._valueType = this.type_(0); + this.state = 2656; + this.match(TrinoParser.GT_); + } + break; + case 10: + { + localContext = new GenericTypeContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 2658; + this.identifier(); + this.state = 2670; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 358, this.context) ) { + case 1: + { + this.state = 2659; + this.match(TrinoParser.LPAREN_); + this.state = 2660; + this.typeParameter(); + this.state = 2665; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2661; + this.match(TrinoParser.COMMA_); + this.state = 2662; + this.typeParameter(); + } + } + this.state = 2667; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2668; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + break; + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 2683; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 361, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + { + localContext = new ArrayTypeContext(new TypeContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_type); + this.state = 2674; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 2675; + this.match(TrinoParser.ARRAY_); + this.state = 2679; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 360, this.context) ) { + case 1: + { + this.state = 2676; + this.match(TrinoParser.LSQUARE_); + this.state = 2677; + this.match(TrinoParser.INTEGER_VALUE_); + this.state = 2678; + this.match(TrinoParser.RSQUARE_); + } + break; + } + } + } + } + this.state = 2685; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 361, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public rowField(): RowFieldContext { + let localContext = new RowFieldContext(this.context, this.state); + this.enterRule(localContext, 158, TrinoParser.RULE_rowField); + try { + this.state = 2690; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 362, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 2686; + this.type_(0); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 2687; + this.identifier(); + this.state = 2688; + this.type_(0); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public typeParameter(): TypeParameterContext { + let localContext = new TypeParameterContext(this.context, this.state); + this.enterRule(localContext, 160, TrinoParser.RULE_typeParameter); + try { + this.state = 2694; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.INTEGER_VALUE_: + this.enterOuterAlt(localContext, 1); + { + this.state = 2692; + this.match(TrinoParser.INTEGER_VALUE_); + } + break; + case TrinoParser.ABSENT_: + case TrinoParser.ADD_: + case TrinoParser.ADMIN_: + case TrinoParser.AFTER_: + case TrinoParser.ALL_: + case TrinoParser.ANALYZE_: + case TrinoParser.ANY_: + case TrinoParser.ARRAY_: + case TrinoParser.ASC_: + case TrinoParser.AT_: + case TrinoParser.AUTHORIZATION_: + case TrinoParser.BEGIN_: + case TrinoParser.BERNOULLI_: + case TrinoParser.BOTH_: + case TrinoParser.CALL_: + case TrinoParser.CALLED_: + case TrinoParser.CASCADE_: + case TrinoParser.CATALOG_: + case TrinoParser.CATALOGS_: + case TrinoParser.COLUMN_: + case TrinoParser.COLUMNS_: + case TrinoParser.COMMENT_: + case TrinoParser.COMMIT_: + case TrinoParser.COMMITTED_: + case TrinoParser.CONDITIONAL_: + case TrinoParser.COUNT_: + case TrinoParser.COPARTITION_: + case TrinoParser.CURRENT_: + case TrinoParser.DATA_: + case TrinoParser.DATE_: + case TrinoParser.DAY_: + case TrinoParser.DECLARE_: + case TrinoParser.DEFAULT_: + case TrinoParser.DEFINE_: + case TrinoParser.DEFINER_: + case TrinoParser.DENY_: + case TrinoParser.DESC_: + case TrinoParser.DESCRIPTOR_: + case TrinoParser.DETERMINISTIC_: + case TrinoParser.DISTRIBUTED_: + case TrinoParser.DO_: + case TrinoParser.DOUBLE_: + case TrinoParser.EMPTY_: + case TrinoParser.ELSEIF_: + case TrinoParser.ENCODING_: + case TrinoParser.ERROR_: + case TrinoParser.EXCLUDING_: + case TrinoParser.EXPLAIN_: + case TrinoParser.FETCH_: + case TrinoParser.FILTER_: + case TrinoParser.FINAL_: + case TrinoParser.FIRST_: + case TrinoParser.FOLLOWING_: + case TrinoParser.FORMAT_: + case TrinoParser.FUNCTION_: + case TrinoParser.FUNCTIONS_: + case TrinoParser.GRACE_: + case TrinoParser.GRANT_: + case TrinoParser.GRANTED_: + case TrinoParser.GRANTS_: + case TrinoParser.GRAPHVIZ_: + case TrinoParser.GROUPS_: + case TrinoParser.HOUR_: + case TrinoParser.IF_: + case TrinoParser.IGNORE_: + case TrinoParser.IMMEDIATE_: + case TrinoParser.INCLUDING_: + case TrinoParser.INITIAL_: + case TrinoParser.INPUT_: + case TrinoParser.INTERVAL_: + case TrinoParser.INVOKER_: + case TrinoParser.IO_: + case TrinoParser.ISOLATION_: + case TrinoParser.ITERATE_: + case TrinoParser.JSON_: + case TrinoParser.KEEP_: + case TrinoParser.KEY_: + case TrinoParser.KEYS_: + case TrinoParser.LANGUAGE_: + case TrinoParser.LAST_: + case TrinoParser.LATERAL_: + case TrinoParser.LEADING_: + case TrinoParser.LEAVE_: + case TrinoParser.LEVEL_: + case TrinoParser.LIMIT_: + case TrinoParser.LOCAL_: + case TrinoParser.LOGICAL_: + case TrinoParser.LOOP_: + case TrinoParser.MAP_: + case TrinoParser.MATCH_: + case TrinoParser.MATCHED_: + case TrinoParser.MATCHES_: + case TrinoParser.MATCH_RECOGNIZE_: + case TrinoParser.MATERIALIZED_: + case TrinoParser.MEASURES_: + case TrinoParser.MERGE_: + case TrinoParser.MINUTE_: + case TrinoParser.MONTH_: + case TrinoParser.NESTED_: + case TrinoParser.NEXT_: + case TrinoParser.NFC_: + case TrinoParser.NFD_: + case TrinoParser.NFKC_: + case TrinoParser.NFKD_: + case TrinoParser.NO_: + case TrinoParser.NONE_: + case TrinoParser.NULLIF_: + case TrinoParser.NULLS_: + case TrinoParser.OBJECT_: + case TrinoParser.OF_: + case TrinoParser.OFFSET_: + case TrinoParser.OMIT_: + case TrinoParser.ONE_: + case TrinoParser.ONLY_: + case TrinoParser.OPTION_: + case TrinoParser.ORDINALITY_: + case TrinoParser.OUTPUT_: + case TrinoParser.OVER_: + case TrinoParser.OVERFLOW_: + case TrinoParser.PARTITION_: + case TrinoParser.PARTITIONS_: + case TrinoParser.PASSING_: + case TrinoParser.PAST_: + case TrinoParser.PATH_: + case TrinoParser.PATTERN_: + case TrinoParser.PER_: + case TrinoParser.PERIOD_: + case TrinoParser.PERMUTE_: + case TrinoParser.PLAN_: + case TrinoParser.POSITION_: + case TrinoParser.PRECEDING_: + case TrinoParser.PRECISION_: + case TrinoParser.PRIVILEGES_: + case TrinoParser.PROPERTIES_: + case TrinoParser.PRUNE_: + case TrinoParser.QUOTES_: + case TrinoParser.RANGE_: + case TrinoParser.READ_: + case TrinoParser.REFRESH_: + case TrinoParser.RENAME_: + case TrinoParser.REPEAT_: + case TrinoParser.REPEATABLE_: + case TrinoParser.REPLACE_: + case TrinoParser.RESET_: + case TrinoParser.RESPECT_: + case TrinoParser.RESTRICT_: + case TrinoParser.RETURN_: + case TrinoParser.RETURNING_: + case TrinoParser.RETURNS_: + case TrinoParser.REVOKE_: + case TrinoParser.ROLE_: + case TrinoParser.ROLES_: + case TrinoParser.ROLLBACK_: + case TrinoParser.ROW_: + case TrinoParser.ROWS_: + case TrinoParser.RUNNING_: + case TrinoParser.SCALAR_: + case TrinoParser.SCHEMA_: + case TrinoParser.SCHEMAS_: + case TrinoParser.SECOND_: + case TrinoParser.SECURITY_: + case TrinoParser.SEEK_: + case TrinoParser.SERIALIZABLE_: + case TrinoParser.SESSION_: + case TrinoParser.SET_: + case TrinoParser.SETS_: + case TrinoParser.SHOW_: + case TrinoParser.SOME_: + case TrinoParser.START_: + case TrinoParser.STATS_: + case TrinoParser.SUBSET_: + case TrinoParser.SUBSTRING_: + case TrinoParser.SYSTEM_: + case TrinoParser.TABLES_: + case TrinoParser.TABLESAMPLE_: + case TrinoParser.TEXT_: + case TrinoParser.TEXT_STRING_: + case TrinoParser.TIES_: + case TrinoParser.TIME_: + case TrinoParser.TIMESTAMP_: + case TrinoParser.TO_: + case TrinoParser.TRAILING_: + case TrinoParser.TRANSACTION_: + case TrinoParser.TRUNCATE_: + case TrinoParser.TRY_CAST_: + case TrinoParser.TYPE_: + case TrinoParser.UNBOUNDED_: + case TrinoParser.UNCOMMITTED_: + case TrinoParser.UNCONDITIONAL_: + case TrinoParser.UNIQUE_: + case TrinoParser.UNKNOWN_: + case TrinoParser.UNMATCHED_: + case TrinoParser.UNTIL_: + case TrinoParser.UPDATE_: + case TrinoParser.USE_: + case TrinoParser.USER_: + case TrinoParser.UTF16_: + case TrinoParser.UTF32_: + case TrinoParser.UTF8_: + case TrinoParser.VALIDATE_: + case TrinoParser.VALUE_: + case TrinoParser.VERBOSE_: + case TrinoParser.VERSION_: + case TrinoParser.VIEW_: + case TrinoParser.WHILE_: + case TrinoParser.WINDOW_: + case TrinoParser.WITHIN_: + case TrinoParser.WITHOUT_: + case TrinoParser.WORK_: + case TrinoParser.WRAPPER_: + case TrinoParser.WRITE_: + case TrinoParser.YEAR_: + case TrinoParser.ZONE_: + case TrinoParser.IDENTIFIER_: + case TrinoParser.DIGIT_IDENTIFIER_: + case TrinoParser.QUOTED_IDENTIFIER_: + case TrinoParser.BACKQUOTED_IDENTIFIER_: + this.enterOuterAlt(localContext, 2); + { + this.state = 2693; + this.type_(0); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public whenClause(): WhenClauseContext { + let localContext = new WhenClauseContext(this.context, this.state); + this.enterRule(localContext, 162, TrinoParser.RULE_whenClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2696; + this.match(TrinoParser.WHEN_); + this.state = 2697; + localContext._condition = this.expression(); + this.state = 2698; + this.match(TrinoParser.THEN_); + this.state = 2699; + localContext._result = this.expression(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public filter(): FilterContext { + let localContext = new FilterContext(this.context, this.state); + this.enterRule(localContext, 164, TrinoParser.RULE_filter); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2701; + this.match(TrinoParser.FILTER_); + this.state = 2702; + this.match(TrinoParser.LPAREN_); + this.state = 2703; + this.match(TrinoParser.WHERE_); + this.state = 2704; + this.booleanExpression(0); + this.state = 2705; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public mergeCase(): MergeCaseContext { + let localContext = new MergeCaseContext(this.context, this.state); + this.enterRule(localContext, 166, TrinoParser.RULE_mergeCase); + let _la: number; + try { + this.state = 2771; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 371, this.context) ) { + case 1: + localContext = new MergeUpdateContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2707; + this.match(TrinoParser.WHEN_); + this.state = 2708; + this.match(TrinoParser.MATCHED_); + this.state = 2711; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 8) { + { + this.state = 2709; + this.match(TrinoParser.AND_); + this.state = 2710; + (localContext as MergeUpdateContext)._condition = this.expression(); + } + } + + this.state = 2713; + this.match(TrinoParser.THEN_); + this.state = 2714; + this.match(TrinoParser.UPDATE_); + this.state = 2715; + this.match(TrinoParser.SET_); + this.state = 2716; + (localContext as MergeUpdateContext)._identifier = this.identifier(); + (localContext as MergeUpdateContext)._targets.push((localContext as MergeUpdateContext)._identifier!); + this.state = 2717; + this.match(TrinoParser.EQ_); + this.state = 2718; + (localContext as MergeUpdateContext)._expression = this.expression(); + (localContext as MergeUpdateContext)._values.push((localContext as MergeUpdateContext)._expression!); + this.state = 2726; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2719; + this.match(TrinoParser.COMMA_); + this.state = 2720; + (localContext as MergeUpdateContext)._identifier = this.identifier(); + (localContext as MergeUpdateContext)._targets.push((localContext as MergeUpdateContext)._identifier!); + this.state = 2721; + this.match(TrinoParser.EQ_); + this.state = 2722; + (localContext as MergeUpdateContext)._expression = this.expression(); + (localContext as MergeUpdateContext)._values.push((localContext as MergeUpdateContext)._expression!); + } + } + this.state = 2728; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + break; + case 2: + localContext = new MergeDeleteContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2729; + this.match(TrinoParser.WHEN_); + this.state = 2730; + this.match(TrinoParser.MATCHED_); + this.state = 2733; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 8) { + { + this.state = 2731; + this.match(TrinoParser.AND_); + this.state = 2732; + (localContext as MergeDeleteContext)._condition = this.expression(); + } + } + + this.state = 2735; + this.match(TrinoParser.THEN_); + this.state = 2736; + this.match(TrinoParser.DELETE_); + } + break; + case 3: + localContext = new MergeInsertContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 2737; + this.match(TrinoParser.WHEN_); + this.state = 2738; + this.match(TrinoParser.NOT_); + this.state = 2739; + this.match(TrinoParser.MATCHED_); + this.state = 2742; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 8) { + { + this.state = 2740; + this.match(TrinoParser.AND_); + this.state = 2741; + (localContext as MergeInsertContext)._condition = this.expression(); + } + } + + this.state = 2744; + this.match(TrinoParser.THEN_); + this.state = 2745; + this.match(TrinoParser.INSERT_); + this.state = 2757; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 313) { + { + this.state = 2746; + this.match(TrinoParser.LPAREN_); + this.state = 2747; + (localContext as MergeInsertContext)._identifier = this.identifier(); + (localContext as MergeInsertContext)._targets.push((localContext as MergeInsertContext)._identifier!); + this.state = 2752; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2748; + this.match(TrinoParser.COMMA_); + this.state = 2749; + (localContext as MergeInsertContext)._identifier = this.identifier(); + (localContext as MergeInsertContext)._targets.push((localContext as MergeInsertContext)._identifier!); + } + } + this.state = 2754; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2755; + this.match(TrinoParser.RPAREN_); + } + } + + this.state = 2759; + this.match(TrinoParser.VALUES_); + this.state = 2760; + this.match(TrinoParser.LPAREN_); + this.state = 2761; + (localContext as MergeInsertContext)._expression = this.expression(); + (localContext as MergeInsertContext)._values.push((localContext as MergeInsertContext)._expression!); + this.state = 2766; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2762; + this.match(TrinoParser.COMMA_); + this.state = 2763; + (localContext as MergeInsertContext)._expression = this.expression(); + (localContext as MergeInsertContext)._values.push((localContext as MergeInsertContext)._expression!); + } + } + this.state = 2768; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2769; + this.match(TrinoParser.RPAREN_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public over(): OverContext { + let localContext = new OverContext(this.context, this.state); + this.enterRule(localContext, 168, TrinoParser.RULE_over); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2773; + this.match(TrinoParser.OVER_); + this.state = 2779; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ABSENT_: + case TrinoParser.ADD_: + case TrinoParser.ADMIN_: + case TrinoParser.AFTER_: + case TrinoParser.ALL_: + case TrinoParser.ANALYZE_: + case TrinoParser.ANY_: + case TrinoParser.ARRAY_: + case TrinoParser.ASC_: + case TrinoParser.AT_: + case TrinoParser.AUTHORIZATION_: + case TrinoParser.BEGIN_: + case TrinoParser.BERNOULLI_: + case TrinoParser.BOTH_: + case TrinoParser.CALL_: + case TrinoParser.CALLED_: + case TrinoParser.CASCADE_: + case TrinoParser.CATALOG_: + case TrinoParser.CATALOGS_: + case TrinoParser.COLUMN_: + case TrinoParser.COLUMNS_: + case TrinoParser.COMMENT_: + case TrinoParser.COMMIT_: + case TrinoParser.COMMITTED_: + case TrinoParser.CONDITIONAL_: + case TrinoParser.COUNT_: + case TrinoParser.COPARTITION_: + case TrinoParser.CURRENT_: + case TrinoParser.DATA_: + case TrinoParser.DATE_: + case TrinoParser.DAY_: + case TrinoParser.DECLARE_: + case TrinoParser.DEFAULT_: + case TrinoParser.DEFINE_: + case TrinoParser.DEFINER_: + case TrinoParser.DENY_: + case TrinoParser.DESC_: + case TrinoParser.DESCRIPTOR_: + case TrinoParser.DETERMINISTIC_: + case TrinoParser.DISTRIBUTED_: + case TrinoParser.DO_: + case TrinoParser.DOUBLE_: + case TrinoParser.EMPTY_: + case TrinoParser.ELSEIF_: + case TrinoParser.ENCODING_: + case TrinoParser.ERROR_: + case TrinoParser.EXCLUDING_: + case TrinoParser.EXPLAIN_: + case TrinoParser.FETCH_: + case TrinoParser.FILTER_: + case TrinoParser.FINAL_: + case TrinoParser.FIRST_: + case TrinoParser.FOLLOWING_: + case TrinoParser.FORMAT_: + case TrinoParser.FUNCTION_: + case TrinoParser.FUNCTIONS_: + case TrinoParser.GRACE_: + case TrinoParser.GRANT_: + case TrinoParser.GRANTED_: + case TrinoParser.GRANTS_: + case TrinoParser.GRAPHVIZ_: + case TrinoParser.GROUPS_: + case TrinoParser.HOUR_: + case TrinoParser.IF_: + case TrinoParser.IGNORE_: + case TrinoParser.IMMEDIATE_: + case TrinoParser.INCLUDING_: + case TrinoParser.INITIAL_: + case TrinoParser.INPUT_: + case TrinoParser.INTERVAL_: + case TrinoParser.INVOKER_: + case TrinoParser.IO_: + case TrinoParser.ISOLATION_: + case TrinoParser.ITERATE_: + case TrinoParser.JSON_: + case TrinoParser.KEEP_: + case TrinoParser.KEY_: + case TrinoParser.KEYS_: + case TrinoParser.LANGUAGE_: + case TrinoParser.LAST_: + case TrinoParser.LATERAL_: + case TrinoParser.LEADING_: + case TrinoParser.LEAVE_: + case TrinoParser.LEVEL_: + case TrinoParser.LIMIT_: + case TrinoParser.LOCAL_: + case TrinoParser.LOGICAL_: + case TrinoParser.LOOP_: + case TrinoParser.MAP_: + case TrinoParser.MATCH_: + case TrinoParser.MATCHED_: + case TrinoParser.MATCHES_: + case TrinoParser.MATCH_RECOGNIZE_: + case TrinoParser.MATERIALIZED_: + case TrinoParser.MEASURES_: + case TrinoParser.MERGE_: + case TrinoParser.MINUTE_: + case TrinoParser.MONTH_: + case TrinoParser.NESTED_: + case TrinoParser.NEXT_: + case TrinoParser.NFC_: + case TrinoParser.NFD_: + case TrinoParser.NFKC_: + case TrinoParser.NFKD_: + case TrinoParser.NO_: + case TrinoParser.NONE_: + case TrinoParser.NULLIF_: + case TrinoParser.NULLS_: + case TrinoParser.OBJECT_: + case TrinoParser.OF_: + case TrinoParser.OFFSET_: + case TrinoParser.OMIT_: + case TrinoParser.ONE_: + case TrinoParser.ONLY_: + case TrinoParser.OPTION_: + case TrinoParser.ORDINALITY_: + case TrinoParser.OUTPUT_: + case TrinoParser.OVER_: + case TrinoParser.OVERFLOW_: + case TrinoParser.PARTITION_: + case TrinoParser.PARTITIONS_: + case TrinoParser.PASSING_: + case TrinoParser.PAST_: + case TrinoParser.PATH_: + case TrinoParser.PATTERN_: + case TrinoParser.PER_: + case TrinoParser.PERIOD_: + case TrinoParser.PERMUTE_: + case TrinoParser.PLAN_: + case TrinoParser.POSITION_: + case TrinoParser.PRECEDING_: + case TrinoParser.PRECISION_: + case TrinoParser.PRIVILEGES_: + case TrinoParser.PROPERTIES_: + case TrinoParser.PRUNE_: + case TrinoParser.QUOTES_: + case TrinoParser.RANGE_: + case TrinoParser.READ_: + case TrinoParser.REFRESH_: + case TrinoParser.RENAME_: + case TrinoParser.REPEAT_: + case TrinoParser.REPEATABLE_: + case TrinoParser.REPLACE_: + case TrinoParser.RESET_: + case TrinoParser.RESPECT_: + case TrinoParser.RESTRICT_: + case TrinoParser.RETURN_: + case TrinoParser.RETURNING_: + case TrinoParser.RETURNS_: + case TrinoParser.REVOKE_: + case TrinoParser.ROLE_: + case TrinoParser.ROLES_: + case TrinoParser.ROLLBACK_: + case TrinoParser.ROW_: + case TrinoParser.ROWS_: + case TrinoParser.RUNNING_: + case TrinoParser.SCALAR_: + case TrinoParser.SCHEMA_: + case TrinoParser.SCHEMAS_: + case TrinoParser.SECOND_: + case TrinoParser.SECURITY_: + case TrinoParser.SEEK_: + case TrinoParser.SERIALIZABLE_: + case TrinoParser.SESSION_: + case TrinoParser.SET_: + case TrinoParser.SETS_: + case TrinoParser.SHOW_: + case TrinoParser.SOME_: + case TrinoParser.START_: + case TrinoParser.STATS_: + case TrinoParser.SUBSET_: + case TrinoParser.SUBSTRING_: + case TrinoParser.SYSTEM_: + case TrinoParser.TABLES_: + case TrinoParser.TABLESAMPLE_: + case TrinoParser.TEXT_: + case TrinoParser.TEXT_STRING_: + case TrinoParser.TIES_: + case TrinoParser.TIME_: + case TrinoParser.TIMESTAMP_: + case TrinoParser.TO_: + case TrinoParser.TRAILING_: + case TrinoParser.TRANSACTION_: + case TrinoParser.TRUNCATE_: + case TrinoParser.TRY_CAST_: + case TrinoParser.TYPE_: + case TrinoParser.UNBOUNDED_: + case TrinoParser.UNCOMMITTED_: + case TrinoParser.UNCONDITIONAL_: + case TrinoParser.UNIQUE_: + case TrinoParser.UNKNOWN_: + case TrinoParser.UNMATCHED_: + case TrinoParser.UNTIL_: + case TrinoParser.UPDATE_: + case TrinoParser.USE_: + case TrinoParser.USER_: + case TrinoParser.UTF16_: + case TrinoParser.UTF32_: + case TrinoParser.UTF8_: + case TrinoParser.VALIDATE_: + case TrinoParser.VALUE_: + case TrinoParser.VERBOSE_: + case TrinoParser.VERSION_: + case TrinoParser.VIEW_: + case TrinoParser.WHILE_: + case TrinoParser.WINDOW_: + case TrinoParser.WITHIN_: + case TrinoParser.WITHOUT_: + case TrinoParser.WORK_: + case TrinoParser.WRAPPER_: + case TrinoParser.WRITE_: + case TrinoParser.YEAR_: + case TrinoParser.ZONE_: + case TrinoParser.IDENTIFIER_: + case TrinoParser.DIGIT_IDENTIFIER_: + case TrinoParser.QUOTED_IDENTIFIER_: + case TrinoParser.BACKQUOTED_IDENTIFIER_: + { + this.state = 2774; + localContext._windowName = this.identifier(); + } + break; + case TrinoParser.LPAREN_: + { + this.state = 2775; + this.match(TrinoParser.LPAREN_); + this.state = 2776; + this.windowSpecification(); + this.state = 2777; + this.match(TrinoParser.RPAREN_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public windowFrame(): WindowFrameContext { + let localContext = new WindowFrameContext(this.context, this.state); + this.enterRule(localContext, 170, TrinoParser.RULE_windowFrame); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2790; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 151) { + { + this.state = 2781; + this.match(TrinoParser.MEASURES_); + this.state = 2782; + this.measureDefinition(); + this.state = 2787; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2783; + this.match(TrinoParser.COMMA_); + this.state = 2784; + this.measureDefinition(); + } + } + this.state = 2789; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 2792; + this.frameExtent(); + this.state = 2796; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 4) { + { + this.state = 2793; + this.match(TrinoParser.AFTER_); + this.state = 2794; + this.match(TrinoParser.MATCH_); + this.state = 2795; + this.skipTo(); + } + } + + this.state = 2799; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 107 || _la === 230) { + { + this.state = 2798; + _la = this.tokenStream.LA(1); + if(!(_la === 107 || _la === 230)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + + this.state = 2806; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 189) { + { + this.state = 2801; + this.match(TrinoParser.PATTERN_); + this.state = 2802; + this.match(TrinoParser.LPAREN_); + this.state = 2803; + this.rowPattern(0); + this.state = 2804; + this.match(TrinoParser.RPAREN_); + } + } + + this.state = 2817; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 241) { + { + this.state = 2808; + this.match(TrinoParser.SUBSET_); + this.state = 2809; + this.subsetDefinition(); + this.state = 2814; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2810; + this.match(TrinoParser.COMMA_); + this.state = 2811; + this.subsetDefinition(); + } + } + this.state = 2816; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 2828; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 54) { + { + this.state = 2819; + this.match(TrinoParser.DEFINE_); + this.state = 2820; + this.variableDefinition(); + this.state = 2825; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2821; + this.match(TrinoParser.COMMA_); + this.state = 2822; + this.variableDefinition(); + } + } + this.state = 2827; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public frameExtent(): FrameExtentContext { + let localContext = new FrameExtentContext(this.context, this.state); + this.enterRule(localContext, 172, TrinoParser.RULE_frameExtent); + try { + this.state = 2854; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 382, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 2830; + localContext._frameType = this.match(TrinoParser.RANGE_); + this.state = 2831; + localContext._start_ = this.frameBound(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 2832; + localContext._frameType = this.match(TrinoParser.ROWS_); + this.state = 2833; + localContext._start_ = this.frameBound(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 2834; + localContext._frameType = this.match(TrinoParser.GROUPS_); + this.state = 2835; + localContext._start_ = this.frameBound(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 2836; + localContext._frameType = this.match(TrinoParser.RANGE_); + this.state = 2837; + this.match(TrinoParser.BETWEEN_); + this.state = 2838; + localContext._start_ = this.frameBound(); + this.state = 2839; + this.match(TrinoParser.AND_); + this.state = 2840; + localContext._end_ = this.frameBound(); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 2842; + localContext._frameType = this.match(TrinoParser.ROWS_); + this.state = 2843; + this.match(TrinoParser.BETWEEN_); + this.state = 2844; + localContext._start_ = this.frameBound(); + this.state = 2845; + this.match(TrinoParser.AND_); + this.state = 2846; + localContext._end_ = this.frameBound(); + } + break; + case 6: + this.enterOuterAlt(localContext, 6); + { + this.state = 2848; + localContext._frameType = this.match(TrinoParser.GROUPS_); + this.state = 2849; + this.match(TrinoParser.BETWEEN_); + this.state = 2850; + localContext._start_ = this.frameBound(); + this.state = 2851; + this.match(TrinoParser.AND_); + this.state = 2852; + localContext._end_ = this.frameBound(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public frameBound(): FrameBoundContext { + let localContext = new FrameBoundContext(this.context, this.state); + this.enterRule(localContext, 174, TrinoParser.RULE_frameBound); + let _la: number; + try { + this.state = 2865; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 383, this.context) ) { + case 1: + localContext = new UnboundedFrameContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2856; + this.match(TrinoParser.UNBOUNDED_); + this.state = 2857; + (localContext as UnboundedFrameContext)._boundType = this.match(TrinoParser.PRECEDING_); + } + break; + case 2: + localContext = new UnboundedFrameContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2858; + this.match(TrinoParser.UNBOUNDED_); + this.state = 2859; + (localContext as UnboundedFrameContext)._boundType = this.match(TrinoParser.FOLLOWING_); + } + break; + case 3: + localContext = new CurrentRowBoundContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 2860; + this.match(TrinoParser.CURRENT_); + this.state = 2861; + this.match(TrinoParser.ROW_); + } + break; + case 4: + localContext = new BoundedFrameContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 2862; + this.expression(); + this.state = 2863; + (localContext as BoundedFrameContext)._boundType = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 85 || _la === 195)) { + (localContext as BoundedFrameContext)._boundType = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public rowPattern(): RowPatternContext; + public rowPattern(_p: number): RowPatternContext; + public rowPattern(_p?: number): RowPatternContext { + if (_p === undefined) { + _p = 0; + } + + let parentContext = this.context; + let parentState = this.state; + let localContext = new RowPatternContext(this.context, parentState); + let previousContext = localContext; + let _startState = 176; + this.enterRecursionRule(localContext, 176, TrinoParser.RULE_rowPattern, _p); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + { + localContext = new QuantifiedPrimaryContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 2868; + this.patternPrimary(); + this.state = 2870; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 384, this.context) ) { + case 1: + { + this.state = 2869; + this.patternQuantifier(); + } + break; + } + } + this.context!.stop = this.tokenStream.LT(-1); + this.state = 2879; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 386, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + if (this.parseListeners != null) { + this.triggerExitRuleEvent(); + } + previousContext = localContext; + { + this.state = 2877; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 385, this.context) ) { + case 1: + { + localContext = new PatternConcatenationContext(new RowPatternContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_rowPattern); + this.state = 2872; + if (!(this.precpred(this.context, 2))) { + throw this.createFailedPredicateException("this.precpred(this.context, 2)"); + } + this.state = 2873; + this.rowPattern(3); + } + break; + case 2: + { + localContext = new PatternAlternationContext(new RowPatternContext(parentContext, parentState)); + this.pushNewRecursionContext(localContext, _startState, TrinoParser.RULE_rowPattern); + this.state = 2874; + if (!(this.precpred(this.context, 1))) { + throw this.createFailedPredicateException("this.precpred(this.context, 1)"); + } + this.state = 2875; + this.match(TrinoParser.VBAR_); + this.state = 2876; + this.rowPattern(2); + } + break; + } + } + } + this.state = 2881; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 386, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(parentContext); + } + return localContext; + } + public patternPrimary(): PatternPrimaryContext { + let localContext = new PatternPrimaryContext(this.context, this.state); + this.enterRule(localContext, 178, TrinoParser.RULE_patternPrimary); + let _la: number; + try { + this.state = 2907; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 388, this.context) ) { + case 1: + localContext = new PatternVariableContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2882; + this.identifier(); + } + break; + case 2: + localContext = new EmptyPatternContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2883; + this.match(TrinoParser.LPAREN_); + this.state = 2884; + this.match(TrinoParser.RPAREN_); + } + break; + case 3: + localContext = new PatternPermutationContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 2885; + this.match(TrinoParser.PERMUTE_); + this.state = 2886; + this.match(TrinoParser.LPAREN_); + this.state = 2887; + this.rowPattern(0); + this.state = 2892; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2888; + this.match(TrinoParser.COMMA_); + this.state = 2889; + this.rowPattern(0); + } + } + this.state = 2894; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 2895; + this.match(TrinoParser.RPAREN_); + } + break; + case 4: + localContext = new GroupedPatternContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 2897; + this.match(TrinoParser.LPAREN_); + this.state = 2898; + this.rowPattern(0); + this.state = 2899; + this.match(TrinoParser.RPAREN_); + } + break; + case 5: + localContext = new PartitionStartAnchorContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 2901; + this.match(TrinoParser.CARET_); + } + break; + case 6: + localContext = new PartitionEndAnchorContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 2902; + this.match(TrinoParser.DOLLAR_); + } + break; + case 7: + localContext = new ExcludedPatternContext(localContext); + this.enterOuterAlt(localContext, 7); + { + this.state = 2903; + this.match(TrinoParser.LCURLYHYPHEN_); + this.state = 2904; + this.rowPattern(0); + this.state = 2905; + this.match(TrinoParser.RCURLYHYPHEN_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public patternQuantifier(): PatternQuantifierContext { + let localContext = new PatternQuantifierContext(this.context, this.state); + this.enterRule(localContext, 180, TrinoParser.RULE_patternQuantifier); + let _la: number; + try { + this.state = 2939; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 396, this.context) ) { + case 1: + localContext = new ZeroOrMoreQuantifierContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2909; + this.match(TrinoParser.ASTERISK_); + this.state = 2911; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 389, this.context) ) { + case 1: + { + this.state = 2910; + (localContext as ZeroOrMoreQuantifierContext)._reluctant = this.match(TrinoParser.QUESTION_MARK_); + } + break; + } + } + break; + case 2: + localContext = new OneOrMoreQuantifierContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2913; + this.match(TrinoParser.PLUS_); + this.state = 2915; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 390, this.context) ) { + case 1: + { + this.state = 2914; + (localContext as OneOrMoreQuantifierContext)._reluctant = this.match(TrinoParser.QUESTION_MARK_); + } + break; + } + } + break; + case 3: + localContext = new ZeroOrOneQuantifierContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 2917; + this.match(TrinoParser.QUESTION_MARK_); + this.state = 2919; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 391, this.context) ) { + case 1: + { + this.state = 2918; + (localContext as ZeroOrOneQuantifierContext)._reluctant = this.match(TrinoParser.QUESTION_MARK_); + } + break; + } + } + break; + case 4: + localContext = new RangeQuantifierContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 2921; + this.match(TrinoParser.LCURLY_); + this.state = 2922; + (localContext as RangeQuantifierContext)._exactly = this.match(TrinoParser.INTEGER_VALUE_); + this.state = 2923; + this.match(TrinoParser.RCURLY_); + this.state = 2925; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 392, this.context) ) { + case 1: + { + this.state = 2924; + (localContext as RangeQuantifierContext)._reluctant = this.match(TrinoParser.QUESTION_MARK_); + } + break; + } + } + break; + case 5: + localContext = new RangeQuantifierContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 2927; + this.match(TrinoParser.LCURLY_); + this.state = 2929; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 330) { + { + this.state = 2928; + (localContext as RangeQuantifierContext)._atLeast = this.match(TrinoParser.INTEGER_VALUE_); + } + } + + this.state = 2931; + this.match(TrinoParser.COMMA_); + this.state = 2933; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 330) { + { + this.state = 2932; + (localContext as RangeQuantifierContext)._atMost = this.match(TrinoParser.INTEGER_VALUE_); + } + } + + this.state = 2935; + this.match(TrinoParser.RCURLY_); + this.state = 2937; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 395, this.context) ) { + case 1: + { + this.state = 2936; + (localContext as RangeQuantifierContext)._reluctant = this.match(TrinoParser.QUESTION_MARK_); + } + break; + } + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public updateAssignment(): UpdateAssignmentContext { + let localContext = new UpdateAssignmentContext(this.context, this.state); + this.enterRule(localContext, 182, TrinoParser.RULE_updateAssignment); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2941; + this.identifier(); + this.state = 2942; + this.match(TrinoParser.EQ_); + this.state = 2943; + this.expression(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public explainOption(): ExplainOptionContext { + let localContext = new ExplainOptionContext(this.context, this.state); + this.enterRule(localContext, 184, TrinoParser.RULE_explainOption); + let _la: number; + try { + this.state = 2949; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.FORMAT_: + localContext = new ExplainFormatContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2945; + this.match(TrinoParser.FORMAT_); + this.state = 2946; + (localContext as ExplainFormatContext)._value = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 96 || _la === 120 || _la === 247)) { + (localContext as ExplainFormatContext)._value = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + case TrinoParser.TYPE_: + localContext = new ExplainTypeContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2947; + this.match(TrinoParser.TYPE_); + this.state = 2948; + (localContext as ExplainTypeContext)._value = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 63 || _la === 115 || _la === 143 || _la === 278)) { + (localContext as ExplainTypeContext)._value = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public transactionMode(): TransactionModeContext { + let localContext = new TransactionModeContext(this.context, this.state); + this.enterRule(localContext, 186, TrinoParser.RULE_transactionMode); + let _la: number; + try { + this.state = 2956; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ISOLATION_: + localContext = new IsolationLevelContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2951; + this.match(TrinoParser.ISOLATION_); + this.state = 2952; + this.match(TrinoParser.LEVEL_); + this.state = 2953; + this.levelOfIsolation(); + } + break; + case TrinoParser.READ_: + localContext = new TransactionAccessModeContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2954; + this.match(TrinoParser.READ_); + this.state = 2955; + (localContext as TransactionAccessModeContext)._accessMode = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 175 || _la === 293)) { + (localContext as TransactionAccessModeContext)._accessMode = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public levelOfIsolation(): LevelOfIsolationContext { + let localContext = new LevelOfIsolationContext(this.context, this.state); + this.enterRule(localContext, 188, TrinoParser.RULE_levelOfIsolation); + try { + this.state = 2965; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 399, this.context) ) { + case 1: + localContext = new ReadUncommittedContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2958; + this.match(TrinoParser.READ_); + this.state = 2959; + this.match(TrinoParser.UNCOMMITTED_); + } + break; + case 2: + localContext = new ReadCommittedContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2960; + this.match(TrinoParser.READ_); + this.state = 2961; + this.match(TrinoParser.COMMITTED_); + } + break; + case 3: + localContext = new RepeatableReadContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 2962; + this.match(TrinoParser.REPEATABLE_); + this.state = 2963; + this.match(TrinoParser.READ_); + } + break; + case 4: + localContext = new SerializableContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 2964; + this.match(TrinoParser.SERIALIZABLE_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public callArgument(): CallArgumentContext { + let localContext = new CallArgumentContext(this.context, this.state); + this.enterRule(localContext, 190, TrinoParser.RULE_callArgument); + try { + this.state = 2972; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 400, this.context) ) { + case 1: + localContext = new PositionalArgumentContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2967; + this.expression(); + } + break; + case 2: + localContext = new NamedArgumentContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2968; + this.identifier(); + this.state = 2969; + this.match(TrinoParser.RDOUBLEARROW_); + this.state = 2970; + this.expression(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public pathElement(): PathElementContext { + let localContext = new PathElementContext(this.context, this.state); + this.enterRule(localContext, 192, TrinoParser.RULE_pathElement); + try { + this.state = 2979; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 401, this.context) ) { + case 1: + localContext = new QualifiedArgumentContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 2974; + this.identifier(); + this.state = 2975; + this.match(TrinoParser.DOT_); + this.state = 2976; + this.identifier(); + } + break; + case 2: + localContext = new UnqualifiedArgumentContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 2978; + this.identifier(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public pathSpecification(): PathSpecificationContext { + let localContext = new PathSpecificationContext(this.context, this.state); + this.enterRule(localContext, 194, TrinoParser.RULE_pathSpecification); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2981; + this.pathElement(); + this.state = 2986; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 2982; + this.match(TrinoParser.COMMA_); + this.state = 2983; + this.pathElement(); + } + } + this.state = 2988; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionSpecification(): FunctionSpecificationContext { + let localContext = new FunctionSpecificationContext(this.context, this.state); + this.enterRule(localContext, 196, TrinoParser.RULE_functionSpecification); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 2989; + this.match(TrinoParser.FUNCTION_); + this.state = 2990; + this.functionDeclaration(); + this.state = 2991; + this.returnsClause(); + this.state = 2995; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 403, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 2992; + this.routineCharacteristic(); + } + } + } + this.state = 2997; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 403, this.context); + } + this.state = 2998; + this.controlStatement(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionDeclaration(): FunctionDeclarationContext { + let localContext = new FunctionDeclarationContext(this.context, this.state); + this.enterRule(localContext, 198, TrinoParser.RULE_functionDeclaration); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3000; + this.qualifiedName(); + this.state = 3001; + this.match(TrinoParser.LPAREN_); + this.state = 3010; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282055519) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 3002; + this.parameterDeclaration(); + this.state = 3007; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 3003; + this.match(TrinoParser.COMMA_); + this.state = 3004; + this.parameterDeclaration(); + } + } + this.state = 3009; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 3012; + this.match(TrinoParser.RPAREN_); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public parameterDeclaration(): ParameterDeclarationContext { + let localContext = new ParameterDeclarationContext(this.context, this.state); + this.enterRule(localContext, 200, TrinoParser.RULE_parameterDeclaration); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3015; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 406, this.context) ) { + case 1: + { + this.state = 3014; + this.identifier(); + } + break; + } + this.state = 3017; + this.type_(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public returnsClause(): ReturnsClauseContext { + let localContext = new ReturnsClauseContext(this.context, this.state); + this.enterRule(localContext, 202, TrinoParser.RULE_returnsClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3019; + this.match(TrinoParser.RETURNS_); + this.state = 3020; + this.type_(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public routineCharacteristic(): RoutineCharacteristicContext { + let localContext = new RoutineCharacteristicContext(this.context, this.state); + this.enterRule(localContext, 204, TrinoParser.RULE_routineCharacteristic); + let _la: number; + try { + this.state = 3041; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.LANGUAGE_: + localContext = new LanguageCharacteristicContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 3022; + this.match(TrinoParser.LANGUAGE_); + this.state = 3023; + this.identifier(); + } + break; + case TrinoParser.DETERMINISTIC_: + case TrinoParser.NOT_: + localContext = new DeterministicCharacteristicContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 3025; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 165) { + { + this.state = 3024; + this.match(TrinoParser.NOT_); + } + } + + this.state = 3027; + this.match(TrinoParser.DETERMINISTIC_); + } + break; + case TrinoParser.RETURNS_: + localContext = new ReturnsNullOnNullInputCharacteristicContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 3028; + this.match(TrinoParser.RETURNS_); + this.state = 3029; + this.match(TrinoParser.NULL_); + this.state = 3030; + this.match(TrinoParser.ON_); + this.state = 3031; + this.match(TrinoParser.NULL_); + this.state = 3032; + this.match(TrinoParser.INPUT_); + } + break; + case TrinoParser.CALLED_: + localContext = new CalledOnNullInputCharacteristicContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 3033; + this.match(TrinoParser.CALLED_); + this.state = 3034; + this.match(TrinoParser.ON_); + this.state = 3035; + this.match(TrinoParser.NULL_); + this.state = 3036; + this.match(TrinoParser.INPUT_); + } + break; + case TrinoParser.SECURITY_: + localContext = new SecurityCharacteristicContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 3037; + this.match(TrinoParser.SECURITY_); + this.state = 3038; + _la = this.tokenStream.LA(1); + if(!(_la === 55 || _la === 114)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; + case TrinoParser.COMMENT_: + localContext = new CommentCharacteristicContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 3039; + this.match(TrinoParser.COMMENT_); + this.state = 3040; + this.string_(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public controlStatement(): ControlStatementContext { + let localContext = new ControlStatementContext(this.context, this.state); + this.enterRule(localContext, 206, TrinoParser.RULE_controlStatement); + let _la: number; + try { + let alternative: number; + this.state = 3142; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 420, this.context) ) { + case 1: + localContext = new ReturnStatementContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 3043; + this.match(TrinoParser.RETURN_); + this.state = 3044; + this.valueExpression(0); + } + break; + case 2: + localContext = new AssignmentStatementContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 3045; + this.match(TrinoParser.SET_); + this.state = 3046; + this.identifier(); + this.state = 3047; + this.match(TrinoParser.EQ_); + this.state = 3048; + this.expression(); + } + break; + case 3: + localContext = new SimpleCaseStatementContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 3050; + this.match(TrinoParser.CASE_); + this.state = 3051; + this.expression(); + this.state = 3053; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 3052; + this.caseStatementWhenClause(); + } + } + this.state = 3055; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 284); + this.state = 3058; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 67) { + { + this.state = 3057; + this.elseClause(); + } + } + + this.state = 3060; + this.match(TrinoParser.END_); + this.state = 3061; + this.match(TrinoParser.CASE_); + } + break; + case 4: + localContext = new SearchedCaseStatementContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 3063; + this.match(TrinoParser.CASE_); + this.state = 3065; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 3064; + this.caseStatementWhenClause(); + } + } + this.state = 3067; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 284); + this.state = 3070; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 67) { + { + this.state = 3069; + this.elseClause(); + } + } + + this.state = 3072; + this.match(TrinoParser.END_); + this.state = 3073; + this.match(TrinoParser.CASE_); + } + break; + case 5: + localContext = new IfStatementContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 3075; + this.match(TrinoParser.IF_); + this.state = 3076; + this.expression(); + this.state = 3077; + this.match(TrinoParser.THEN_); + this.state = 3078; + this.sqlStatementList(); + this.state = 3082; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 69) { + { + { + this.state = 3079; + this.elseIfClause(); + } + } + this.state = 3084; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 3086; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 67) { + { + this.state = 3085; + this.elseClause(); + } + } + + this.state = 3088; + this.match(TrinoParser.END_); + this.state = 3089; + this.match(TrinoParser.IF_); + } + break; + case 6: + localContext = new IterateStatementContext(localContext); + this.enterOuterAlt(localContext, 6); + { + this.state = 3091; + this.match(TrinoParser.ITERATE_); + this.state = 3092; + this.identifier(); + } + break; + case 7: + localContext = new LeaveStatementContext(localContext); + this.enterOuterAlt(localContext, 7); + { + this.state = 3093; + this.match(TrinoParser.LEAVE_); + this.state = 3094; + this.identifier(); + } + break; + case 8: + localContext = new CompoundStatementContext(localContext); + this.enterOuterAlt(localContext, 8); + { + this.state = 3095; + this.match(TrinoParser.BEGIN_); + this.state = 3101; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 415, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 3096; + this.variableDeclaration(); + this.state = 3097; + this.match(TrinoParser.SEMICOLON_); + } + } + } + this.state = 3103; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 415, this.context); + } + this.state = 3105; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4286249823) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0) || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 15) !== 0)) { + { + this.state = 3104; + this.sqlStatementList(); + } + } + + this.state = 3107; + this.match(TrinoParser.END_); + } + break; + case 9: + localContext = new LoopStatementContext(localContext); + this.enterOuterAlt(localContext, 9); + { + this.state = 3111; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 417, this.context) ) { + case 1: + { + this.state = 3108; + (localContext as LoopStatementContext)._label = this.identifier(); + this.state = 3109; + this.match(TrinoParser.COLON_); + } + break; + } + this.state = 3113; + this.match(TrinoParser.LOOP_); + this.state = 3114; + this.sqlStatementList(); + this.state = 3115; + this.match(TrinoParser.END_); + this.state = 3116; + this.match(TrinoParser.LOOP_); + } + break; + case 10: + localContext = new WhileStatementContext(localContext); + this.enterOuterAlt(localContext, 10); + { + this.state = 3121; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 418, this.context) ) { + case 1: + { + this.state = 3118; + (localContext as WhileStatementContext)._label = this.identifier(); + this.state = 3119; + this.match(TrinoParser.COLON_); + } + break; + } + this.state = 3123; + this.match(TrinoParser.WHILE_); + this.state = 3124; + this.expression(); + this.state = 3125; + this.match(TrinoParser.DO_); + this.state = 3126; + this.sqlStatementList(); + this.state = 3127; + this.match(TrinoParser.END_); + this.state = 3128; + this.match(TrinoParser.WHILE_); + } + break; + case 11: + localContext = new RepeatStatementContext(localContext); + this.enterOuterAlt(localContext, 11); + { + this.state = 3133; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 419, this.context) ) { + case 1: + { + this.state = 3130; + (localContext as RepeatStatementContext)._label = this.identifier(); + this.state = 3131; + this.match(TrinoParser.COLON_); + } + break; + } + this.state = 3135; + this.match(TrinoParser.REPEAT_); + this.state = 3136; + this.sqlStatementList(); + this.state = 3137; + this.match(TrinoParser.UNTIL_); + this.state = 3138; + this.expression(); + this.state = 3139; + this.match(TrinoParser.END_); + this.state = 3140; + this.match(TrinoParser.REPEAT_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public caseStatementWhenClause(): CaseStatementWhenClauseContext { + let localContext = new CaseStatementWhenClauseContext(this.context, this.state); + this.enterRule(localContext, 208, TrinoParser.RULE_caseStatementWhenClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3144; + this.match(TrinoParser.WHEN_); + this.state = 3145; + this.expression(); + this.state = 3146; + this.match(TrinoParser.THEN_); + this.state = 3147; + this.sqlStatementList(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public elseIfClause(): ElseIfClauseContext { + let localContext = new ElseIfClauseContext(this.context, this.state); + this.enterRule(localContext, 210, TrinoParser.RULE_elseIfClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3149; + this.match(TrinoParser.ELSEIF_); + this.state = 3150; + this.expression(); + this.state = 3151; + this.match(TrinoParser.THEN_); + this.state = 3152; + this.sqlStatementList(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public elseClause(): ElseClauseContext { + let localContext = new ElseClauseContext(this.context, this.state); + this.enterRule(localContext, 212, TrinoParser.RULE_elseClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3154; + this.match(TrinoParser.ELSE_); + this.state = 3155; + this.sqlStatementList(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public variableDeclaration(): VariableDeclarationContext { + let localContext = new VariableDeclarationContext(this.context, this.state); + this.enterRule(localContext, 214, TrinoParser.RULE_variableDeclaration); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3157; + this.match(TrinoParser.DECLARE_); + this.state = 3158; + this.identifier(); + this.state = 3163; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 3159; + this.match(TrinoParser.COMMA_); + this.state = 3160; + this.identifier(); + } + } + this.state = 3165; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 3166; + this.type_(0); + this.state = 3169; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 53) { + { + this.state = 3167; + this.match(TrinoParser.DEFAULT_); + this.state = 3168; + this.valueExpression(0); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public sqlStatementList(): SqlStatementListContext { + let localContext = new SqlStatementListContext(this.context, this.state); + this.enterRule(localContext, 216, TrinoParser.RULE_sqlStatementList); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 3174; + this.errorHandler.sync(this); + alternative = 1; + do { + switch (alternative) { + case 1: + { + { + this.state = 3171; + this.controlStatement(); + this.state = 3172; + this.match(TrinoParser.SEMICOLON_); + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.state = 3176; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 423, this.context); + } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public privilege(): PrivilegeContext { + let localContext = new PrivilegeContext(this.context, this.state); + this.enterRule(localContext, 218, TrinoParser.RULE_privilege); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3178; + _la = this.tokenStream.LA(1); + if(!(_la === 36 || _la === 56 || _la === 110 || _la === 231 || _la === 271)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public qualifiedName(): QualifiedNameContext { + let localContext = new QualifiedNameContext(this.context, this.state); + this.enterRule(localContext, 220, TrinoParser.RULE_qualifiedName); + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 3180; + this.identifier(); + this.state = 3185; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 424, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 3181; + this.match(TrinoParser.DOT_); + this.state = 3182; + this.identifier(); + } + } + } + this.state = 3187; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 424, this.context); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public queryPeriod(): QueryPeriodContext { + let localContext = new QueryPeriodContext(this.context, this.state); + this.enterRule(localContext, 222, TrinoParser.RULE_queryPeriod); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3188; + this.match(TrinoParser.FOR_); + this.state = 3189; + this.rangeType(); + this.state = 3190; + this.match(TrinoParser.AS_); + this.state = 3191; + this.match(TrinoParser.OF_); + this.state = 3192; + localContext._end = this.valueExpression(0); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public rangeType(): RangeTypeContext { + let localContext = new RangeTypeContext(this.context, this.state); + this.enterRule(localContext, 224, TrinoParser.RULE_rangeType); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3194; + _la = this.tokenStream.LA(1); + if(!(_la === 252 || _la === 282)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public grantor(): GrantorContext { + let localContext = new GrantorContext(this.context, this.state); + this.enterRule(localContext, 226, TrinoParser.RULE_grantor); + try { + this.state = 3199; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ABSENT_: + case TrinoParser.ADD_: + case TrinoParser.ADMIN_: + case TrinoParser.AFTER_: + case TrinoParser.ALL_: + case TrinoParser.ANALYZE_: + case TrinoParser.ANY_: + case TrinoParser.ARRAY_: + case TrinoParser.ASC_: + case TrinoParser.AT_: + case TrinoParser.AUTHORIZATION_: + case TrinoParser.BEGIN_: + case TrinoParser.BERNOULLI_: + case TrinoParser.BOTH_: + case TrinoParser.CALL_: + case TrinoParser.CALLED_: + case TrinoParser.CASCADE_: + case TrinoParser.CATALOG_: + case TrinoParser.CATALOGS_: + case TrinoParser.COLUMN_: + case TrinoParser.COLUMNS_: + case TrinoParser.COMMENT_: + case TrinoParser.COMMIT_: + case TrinoParser.COMMITTED_: + case TrinoParser.CONDITIONAL_: + case TrinoParser.COUNT_: + case TrinoParser.COPARTITION_: + case TrinoParser.CURRENT_: + case TrinoParser.DATA_: + case TrinoParser.DATE_: + case TrinoParser.DAY_: + case TrinoParser.DECLARE_: + case TrinoParser.DEFAULT_: + case TrinoParser.DEFINE_: + case TrinoParser.DEFINER_: + case TrinoParser.DENY_: + case TrinoParser.DESC_: + case TrinoParser.DESCRIPTOR_: + case TrinoParser.DETERMINISTIC_: + case TrinoParser.DISTRIBUTED_: + case TrinoParser.DO_: + case TrinoParser.DOUBLE_: + case TrinoParser.EMPTY_: + case TrinoParser.ELSEIF_: + case TrinoParser.ENCODING_: + case TrinoParser.ERROR_: + case TrinoParser.EXCLUDING_: + case TrinoParser.EXPLAIN_: + case TrinoParser.FETCH_: + case TrinoParser.FILTER_: + case TrinoParser.FINAL_: + case TrinoParser.FIRST_: + case TrinoParser.FOLLOWING_: + case TrinoParser.FORMAT_: + case TrinoParser.FUNCTION_: + case TrinoParser.FUNCTIONS_: + case TrinoParser.GRACE_: + case TrinoParser.GRANT_: + case TrinoParser.GRANTED_: + case TrinoParser.GRANTS_: + case TrinoParser.GRAPHVIZ_: + case TrinoParser.GROUPS_: + case TrinoParser.HOUR_: + case TrinoParser.IF_: + case TrinoParser.IGNORE_: + case TrinoParser.IMMEDIATE_: + case TrinoParser.INCLUDING_: + case TrinoParser.INITIAL_: + case TrinoParser.INPUT_: + case TrinoParser.INTERVAL_: + case TrinoParser.INVOKER_: + case TrinoParser.IO_: + case TrinoParser.ISOLATION_: + case TrinoParser.ITERATE_: + case TrinoParser.JSON_: + case TrinoParser.KEEP_: + case TrinoParser.KEY_: + case TrinoParser.KEYS_: + case TrinoParser.LANGUAGE_: + case TrinoParser.LAST_: + case TrinoParser.LATERAL_: + case TrinoParser.LEADING_: + case TrinoParser.LEAVE_: + case TrinoParser.LEVEL_: + case TrinoParser.LIMIT_: + case TrinoParser.LOCAL_: + case TrinoParser.LOGICAL_: + case TrinoParser.LOOP_: + case TrinoParser.MAP_: + case TrinoParser.MATCH_: + case TrinoParser.MATCHED_: + case TrinoParser.MATCHES_: + case TrinoParser.MATCH_RECOGNIZE_: + case TrinoParser.MATERIALIZED_: + case TrinoParser.MEASURES_: + case TrinoParser.MERGE_: + case TrinoParser.MINUTE_: + case TrinoParser.MONTH_: + case TrinoParser.NESTED_: + case TrinoParser.NEXT_: + case TrinoParser.NFC_: + case TrinoParser.NFD_: + case TrinoParser.NFKC_: + case TrinoParser.NFKD_: + case TrinoParser.NO_: + case TrinoParser.NONE_: + case TrinoParser.NULLIF_: + case TrinoParser.NULLS_: + case TrinoParser.OBJECT_: + case TrinoParser.OF_: + case TrinoParser.OFFSET_: + case TrinoParser.OMIT_: + case TrinoParser.ONE_: + case TrinoParser.ONLY_: + case TrinoParser.OPTION_: + case TrinoParser.ORDINALITY_: + case TrinoParser.OUTPUT_: + case TrinoParser.OVER_: + case TrinoParser.OVERFLOW_: + case TrinoParser.PARTITION_: + case TrinoParser.PARTITIONS_: + case TrinoParser.PASSING_: + case TrinoParser.PAST_: + case TrinoParser.PATH_: + case TrinoParser.PATTERN_: + case TrinoParser.PER_: + case TrinoParser.PERIOD_: + case TrinoParser.PERMUTE_: + case TrinoParser.PLAN_: + case TrinoParser.POSITION_: + case TrinoParser.PRECEDING_: + case TrinoParser.PRECISION_: + case TrinoParser.PRIVILEGES_: + case TrinoParser.PROPERTIES_: + case TrinoParser.PRUNE_: + case TrinoParser.QUOTES_: + case TrinoParser.RANGE_: + case TrinoParser.READ_: + case TrinoParser.REFRESH_: + case TrinoParser.RENAME_: + case TrinoParser.REPEAT_: + case TrinoParser.REPEATABLE_: + case TrinoParser.REPLACE_: + case TrinoParser.RESET_: + case TrinoParser.RESPECT_: + case TrinoParser.RESTRICT_: + case TrinoParser.RETURN_: + case TrinoParser.RETURNING_: + case TrinoParser.RETURNS_: + case TrinoParser.REVOKE_: + case TrinoParser.ROLE_: + case TrinoParser.ROLES_: + case TrinoParser.ROLLBACK_: + case TrinoParser.ROW_: + case TrinoParser.ROWS_: + case TrinoParser.RUNNING_: + case TrinoParser.SCALAR_: + case TrinoParser.SCHEMA_: + case TrinoParser.SCHEMAS_: + case TrinoParser.SECOND_: + case TrinoParser.SECURITY_: + case TrinoParser.SEEK_: + case TrinoParser.SERIALIZABLE_: + case TrinoParser.SESSION_: + case TrinoParser.SET_: + case TrinoParser.SETS_: + case TrinoParser.SHOW_: + case TrinoParser.SOME_: + case TrinoParser.START_: + case TrinoParser.STATS_: + case TrinoParser.SUBSET_: + case TrinoParser.SUBSTRING_: + case TrinoParser.SYSTEM_: + case TrinoParser.TABLES_: + case TrinoParser.TABLESAMPLE_: + case TrinoParser.TEXT_: + case TrinoParser.TEXT_STRING_: + case TrinoParser.TIES_: + case TrinoParser.TIME_: + case TrinoParser.TIMESTAMP_: + case TrinoParser.TO_: + case TrinoParser.TRAILING_: + case TrinoParser.TRANSACTION_: + case TrinoParser.TRUNCATE_: + case TrinoParser.TRY_CAST_: + case TrinoParser.TYPE_: + case TrinoParser.UNBOUNDED_: + case TrinoParser.UNCOMMITTED_: + case TrinoParser.UNCONDITIONAL_: + case TrinoParser.UNIQUE_: + case TrinoParser.UNKNOWN_: + case TrinoParser.UNMATCHED_: + case TrinoParser.UNTIL_: + case TrinoParser.UPDATE_: + case TrinoParser.USE_: + case TrinoParser.USER_: + case TrinoParser.UTF16_: + case TrinoParser.UTF32_: + case TrinoParser.UTF8_: + case TrinoParser.VALIDATE_: + case TrinoParser.VALUE_: + case TrinoParser.VERBOSE_: + case TrinoParser.VERSION_: + case TrinoParser.VIEW_: + case TrinoParser.WHILE_: + case TrinoParser.WINDOW_: + case TrinoParser.WITHIN_: + case TrinoParser.WITHOUT_: + case TrinoParser.WORK_: + case TrinoParser.WRAPPER_: + case TrinoParser.WRITE_: + case TrinoParser.YEAR_: + case TrinoParser.ZONE_: + case TrinoParser.IDENTIFIER_: + case TrinoParser.DIGIT_IDENTIFIER_: + case TrinoParser.QUOTED_IDENTIFIER_: + case TrinoParser.BACKQUOTED_IDENTIFIER_: + localContext = new SpecifiedPrincipalContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 3196; + this.principal(); + } + break; + case TrinoParser.CURRENT_USER_: + localContext = new CurrentUserGrantorContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 3197; + this.match(TrinoParser.CURRENT_USER_); + } + break; + case TrinoParser.CURRENT_ROLE_: + localContext = new CurrentRoleGrantorContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 3198; + this.match(TrinoParser.CURRENT_ROLE_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public principal(): PrincipalContext { + let localContext = new PrincipalContext(this.context, this.state); + this.enterRule(localContext, 228, TrinoParser.RULE_principal); + try { + this.state = 3206; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 426, this.context) ) { + case 1: + localContext = new UnspecifiedPrincipalContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 3201; + this.identifier(); + } + break; + case 2: + localContext = new UserPrincipalContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 3202; + this.match(TrinoParser.USER_); + this.state = 3203; + this.identifier(); + } + break; + case 3: + localContext = new RolePrincipalContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 3204; + this.match(TrinoParser.ROLE_); + this.state = 3205; + this.identifier(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public roles(): RolesContext { + let localContext = new RolesContext(this.context, this.state); + this.enterRule(localContext, 230, TrinoParser.RULE_roles); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3208; + this.identifier(); + this.state = 3213; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 312) { + { + { + this.state = 3209; + this.match(TrinoParser.COMMA_); + this.state = 3210; + this.identifier(); + } + } + this.state = 3215; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public identifier(): IdentifierContext { + let localContext = new IdentifierContext(this.context, this.state); + this.enterRule(localContext, 232, TrinoParser.RULE_identifier); + try { + this.state = 3221; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.IDENTIFIER_: + localContext = new UnquotedIdentifierContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 3216; + this.match(TrinoParser.IDENTIFIER_); + } + break; + case TrinoParser.QUOTED_IDENTIFIER_: + localContext = new QuotedIdentifierContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 3217; + this.match(TrinoParser.QUOTED_IDENTIFIER_); + } + break; + case TrinoParser.ABSENT_: + case TrinoParser.ADD_: + case TrinoParser.ADMIN_: + case TrinoParser.AFTER_: + case TrinoParser.ALL_: + case TrinoParser.ANALYZE_: + case TrinoParser.ANY_: + case TrinoParser.ARRAY_: + case TrinoParser.ASC_: + case TrinoParser.AT_: + case TrinoParser.AUTHORIZATION_: + case TrinoParser.BEGIN_: + case TrinoParser.BERNOULLI_: + case TrinoParser.BOTH_: + case TrinoParser.CALL_: + case TrinoParser.CALLED_: + case TrinoParser.CASCADE_: + case TrinoParser.CATALOG_: + case TrinoParser.CATALOGS_: + case TrinoParser.COLUMN_: + case TrinoParser.COLUMNS_: + case TrinoParser.COMMENT_: + case TrinoParser.COMMIT_: + case TrinoParser.COMMITTED_: + case TrinoParser.CONDITIONAL_: + case TrinoParser.COUNT_: + case TrinoParser.COPARTITION_: + case TrinoParser.CURRENT_: + case TrinoParser.DATA_: + case TrinoParser.DATE_: + case TrinoParser.DAY_: + case TrinoParser.DECLARE_: + case TrinoParser.DEFAULT_: + case TrinoParser.DEFINE_: + case TrinoParser.DEFINER_: + case TrinoParser.DENY_: + case TrinoParser.DESC_: + case TrinoParser.DESCRIPTOR_: + case TrinoParser.DETERMINISTIC_: + case TrinoParser.DISTRIBUTED_: + case TrinoParser.DO_: + case TrinoParser.DOUBLE_: + case TrinoParser.EMPTY_: + case TrinoParser.ELSEIF_: + case TrinoParser.ENCODING_: + case TrinoParser.ERROR_: + case TrinoParser.EXCLUDING_: + case TrinoParser.EXPLAIN_: + case TrinoParser.FETCH_: + case TrinoParser.FILTER_: + case TrinoParser.FINAL_: + case TrinoParser.FIRST_: + case TrinoParser.FOLLOWING_: + case TrinoParser.FORMAT_: + case TrinoParser.FUNCTION_: + case TrinoParser.FUNCTIONS_: + case TrinoParser.GRACE_: + case TrinoParser.GRANT_: + case TrinoParser.GRANTED_: + case TrinoParser.GRANTS_: + case TrinoParser.GRAPHVIZ_: + case TrinoParser.GROUPS_: + case TrinoParser.HOUR_: + case TrinoParser.IF_: + case TrinoParser.IGNORE_: + case TrinoParser.IMMEDIATE_: + case TrinoParser.INCLUDING_: + case TrinoParser.INITIAL_: + case TrinoParser.INPUT_: + case TrinoParser.INTERVAL_: + case TrinoParser.INVOKER_: + case TrinoParser.IO_: + case TrinoParser.ISOLATION_: + case TrinoParser.ITERATE_: + case TrinoParser.JSON_: + case TrinoParser.KEEP_: + case TrinoParser.KEY_: + case TrinoParser.KEYS_: + case TrinoParser.LANGUAGE_: + case TrinoParser.LAST_: + case TrinoParser.LATERAL_: + case TrinoParser.LEADING_: + case TrinoParser.LEAVE_: + case TrinoParser.LEVEL_: + case TrinoParser.LIMIT_: + case TrinoParser.LOCAL_: + case TrinoParser.LOGICAL_: + case TrinoParser.LOOP_: + case TrinoParser.MAP_: + case TrinoParser.MATCH_: + case TrinoParser.MATCHED_: + case TrinoParser.MATCHES_: + case TrinoParser.MATCH_RECOGNIZE_: + case TrinoParser.MATERIALIZED_: + case TrinoParser.MEASURES_: + case TrinoParser.MERGE_: + case TrinoParser.MINUTE_: + case TrinoParser.MONTH_: + case TrinoParser.NESTED_: + case TrinoParser.NEXT_: + case TrinoParser.NFC_: + case TrinoParser.NFD_: + case TrinoParser.NFKC_: + case TrinoParser.NFKD_: + case TrinoParser.NO_: + case TrinoParser.NONE_: + case TrinoParser.NULLIF_: + case TrinoParser.NULLS_: + case TrinoParser.OBJECT_: + case TrinoParser.OF_: + case TrinoParser.OFFSET_: + case TrinoParser.OMIT_: + case TrinoParser.ONE_: + case TrinoParser.ONLY_: + case TrinoParser.OPTION_: + case TrinoParser.ORDINALITY_: + case TrinoParser.OUTPUT_: + case TrinoParser.OVER_: + case TrinoParser.OVERFLOW_: + case TrinoParser.PARTITION_: + case TrinoParser.PARTITIONS_: + case TrinoParser.PASSING_: + case TrinoParser.PAST_: + case TrinoParser.PATH_: + case TrinoParser.PATTERN_: + case TrinoParser.PER_: + case TrinoParser.PERIOD_: + case TrinoParser.PERMUTE_: + case TrinoParser.PLAN_: + case TrinoParser.POSITION_: + case TrinoParser.PRECEDING_: + case TrinoParser.PRECISION_: + case TrinoParser.PRIVILEGES_: + case TrinoParser.PROPERTIES_: + case TrinoParser.PRUNE_: + case TrinoParser.QUOTES_: + case TrinoParser.RANGE_: + case TrinoParser.READ_: + case TrinoParser.REFRESH_: + case TrinoParser.RENAME_: + case TrinoParser.REPEAT_: + case TrinoParser.REPEATABLE_: + case TrinoParser.REPLACE_: + case TrinoParser.RESET_: + case TrinoParser.RESPECT_: + case TrinoParser.RESTRICT_: + case TrinoParser.RETURN_: + case TrinoParser.RETURNING_: + case TrinoParser.RETURNS_: + case TrinoParser.REVOKE_: + case TrinoParser.ROLE_: + case TrinoParser.ROLES_: + case TrinoParser.ROLLBACK_: + case TrinoParser.ROW_: + case TrinoParser.ROWS_: + case TrinoParser.RUNNING_: + case TrinoParser.SCALAR_: + case TrinoParser.SCHEMA_: + case TrinoParser.SCHEMAS_: + case TrinoParser.SECOND_: + case TrinoParser.SECURITY_: + case TrinoParser.SEEK_: + case TrinoParser.SERIALIZABLE_: + case TrinoParser.SESSION_: + case TrinoParser.SET_: + case TrinoParser.SETS_: + case TrinoParser.SHOW_: + case TrinoParser.SOME_: + case TrinoParser.START_: + case TrinoParser.STATS_: + case TrinoParser.SUBSET_: + case TrinoParser.SUBSTRING_: + case TrinoParser.SYSTEM_: + case TrinoParser.TABLES_: + case TrinoParser.TABLESAMPLE_: + case TrinoParser.TEXT_: + case TrinoParser.TEXT_STRING_: + case TrinoParser.TIES_: + case TrinoParser.TIME_: + case TrinoParser.TIMESTAMP_: + case TrinoParser.TO_: + case TrinoParser.TRAILING_: + case TrinoParser.TRANSACTION_: + case TrinoParser.TRUNCATE_: + case TrinoParser.TRY_CAST_: + case TrinoParser.TYPE_: + case TrinoParser.UNBOUNDED_: + case TrinoParser.UNCOMMITTED_: + case TrinoParser.UNCONDITIONAL_: + case TrinoParser.UNIQUE_: + case TrinoParser.UNKNOWN_: + case TrinoParser.UNMATCHED_: + case TrinoParser.UNTIL_: + case TrinoParser.UPDATE_: + case TrinoParser.USE_: + case TrinoParser.USER_: + case TrinoParser.UTF16_: + case TrinoParser.UTF32_: + case TrinoParser.UTF8_: + case TrinoParser.VALIDATE_: + case TrinoParser.VALUE_: + case TrinoParser.VERBOSE_: + case TrinoParser.VERSION_: + case TrinoParser.VIEW_: + case TrinoParser.WHILE_: + case TrinoParser.WINDOW_: + case TrinoParser.WITHIN_: + case TrinoParser.WITHOUT_: + case TrinoParser.WORK_: + case TrinoParser.WRAPPER_: + case TrinoParser.WRITE_: + case TrinoParser.YEAR_: + case TrinoParser.ZONE_: + localContext = new UnquotedIdentifierContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 3218; + this.nonReserved(); + } + break; + case TrinoParser.BACKQUOTED_IDENTIFIER_: + localContext = new BackQuotedIdentifierContext(localContext); + this.enterOuterAlt(localContext, 4); + { + this.state = 3219; + this.match(TrinoParser.BACKQUOTED_IDENTIFIER_); + } + break; + case TrinoParser.DIGIT_IDENTIFIER_: + localContext = new DigitIdentifierContext(localContext); + this.enterOuterAlt(localContext, 5); + { + this.state = 3220; + this.match(TrinoParser.DIGIT_IDENTIFIER_); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public number_(): NumberContext { + let localContext = new NumberContext(this.context, this.state); + this.enterRule(localContext, 234, TrinoParser.RULE_number); + let _la: number; + try { + this.state = 3235; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 432, this.context) ) { + case 1: + localContext = new DecimalLiteralContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 3224; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 303) { + { + this.state = 3223; + this.match(TrinoParser.MINUS_); + } + } + + this.state = 3226; + this.match(TrinoParser.DECIMAL_VALUE_); + } + break; + case 2: + localContext = new DoubleLiteralContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 3228; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 303) { + { + this.state = 3227; + this.match(TrinoParser.MINUS_); + } + } + + this.state = 3230; + this.match(TrinoParser.DOUBLE_VALUE_); + } + break; + case 3: + localContext = new IntegerLiteralContext(localContext); + this.enterOuterAlt(localContext, 3); + { + this.state = 3232; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 303) { + { + this.state = 3231; + this.match(TrinoParser.MINUS_); + } + } + + this.state = 3234; + this.match(TrinoParser.INTEGER_VALUE_); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public authorizationUser(): AuthorizationUserContext { + let localContext = new AuthorizationUserContext(this.context, this.state); + this.enterRule(localContext, 236, TrinoParser.RULE_authorizationUser); + try { + this.state = 3239; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case TrinoParser.ABSENT_: + case TrinoParser.ADD_: + case TrinoParser.ADMIN_: + case TrinoParser.AFTER_: + case TrinoParser.ALL_: + case TrinoParser.ANALYZE_: + case TrinoParser.ANY_: + case TrinoParser.ARRAY_: + case TrinoParser.ASC_: + case TrinoParser.AT_: + case TrinoParser.AUTHORIZATION_: + case TrinoParser.BEGIN_: + case TrinoParser.BERNOULLI_: + case TrinoParser.BOTH_: + case TrinoParser.CALL_: + case TrinoParser.CALLED_: + case TrinoParser.CASCADE_: + case TrinoParser.CATALOG_: + case TrinoParser.CATALOGS_: + case TrinoParser.COLUMN_: + case TrinoParser.COLUMNS_: + case TrinoParser.COMMENT_: + case TrinoParser.COMMIT_: + case TrinoParser.COMMITTED_: + case TrinoParser.CONDITIONAL_: + case TrinoParser.COUNT_: + case TrinoParser.COPARTITION_: + case TrinoParser.CURRENT_: + case TrinoParser.DATA_: + case TrinoParser.DATE_: + case TrinoParser.DAY_: + case TrinoParser.DECLARE_: + case TrinoParser.DEFAULT_: + case TrinoParser.DEFINE_: + case TrinoParser.DEFINER_: + case TrinoParser.DENY_: + case TrinoParser.DESC_: + case TrinoParser.DESCRIPTOR_: + case TrinoParser.DETERMINISTIC_: + case TrinoParser.DISTRIBUTED_: + case TrinoParser.DO_: + case TrinoParser.DOUBLE_: + case TrinoParser.EMPTY_: + case TrinoParser.ELSEIF_: + case TrinoParser.ENCODING_: + case TrinoParser.ERROR_: + case TrinoParser.EXCLUDING_: + case TrinoParser.EXPLAIN_: + case TrinoParser.FETCH_: + case TrinoParser.FILTER_: + case TrinoParser.FINAL_: + case TrinoParser.FIRST_: + case TrinoParser.FOLLOWING_: + case TrinoParser.FORMAT_: + case TrinoParser.FUNCTION_: + case TrinoParser.FUNCTIONS_: + case TrinoParser.GRACE_: + case TrinoParser.GRANT_: + case TrinoParser.GRANTED_: + case TrinoParser.GRANTS_: + case TrinoParser.GRAPHVIZ_: + case TrinoParser.GROUPS_: + case TrinoParser.HOUR_: + case TrinoParser.IF_: + case TrinoParser.IGNORE_: + case TrinoParser.IMMEDIATE_: + case TrinoParser.INCLUDING_: + case TrinoParser.INITIAL_: + case TrinoParser.INPUT_: + case TrinoParser.INTERVAL_: + case TrinoParser.INVOKER_: + case TrinoParser.IO_: + case TrinoParser.ISOLATION_: + case TrinoParser.ITERATE_: + case TrinoParser.JSON_: + case TrinoParser.KEEP_: + case TrinoParser.KEY_: + case TrinoParser.KEYS_: + case TrinoParser.LANGUAGE_: + case TrinoParser.LAST_: + case TrinoParser.LATERAL_: + case TrinoParser.LEADING_: + case TrinoParser.LEAVE_: + case TrinoParser.LEVEL_: + case TrinoParser.LIMIT_: + case TrinoParser.LOCAL_: + case TrinoParser.LOGICAL_: + case TrinoParser.LOOP_: + case TrinoParser.MAP_: + case TrinoParser.MATCH_: + case TrinoParser.MATCHED_: + case TrinoParser.MATCHES_: + case TrinoParser.MATCH_RECOGNIZE_: + case TrinoParser.MATERIALIZED_: + case TrinoParser.MEASURES_: + case TrinoParser.MERGE_: + case TrinoParser.MINUTE_: + case TrinoParser.MONTH_: + case TrinoParser.NESTED_: + case TrinoParser.NEXT_: + case TrinoParser.NFC_: + case TrinoParser.NFD_: + case TrinoParser.NFKC_: + case TrinoParser.NFKD_: + case TrinoParser.NO_: + case TrinoParser.NONE_: + case TrinoParser.NULLIF_: + case TrinoParser.NULLS_: + case TrinoParser.OBJECT_: + case TrinoParser.OF_: + case TrinoParser.OFFSET_: + case TrinoParser.OMIT_: + case TrinoParser.ONE_: + case TrinoParser.ONLY_: + case TrinoParser.OPTION_: + case TrinoParser.ORDINALITY_: + case TrinoParser.OUTPUT_: + case TrinoParser.OVER_: + case TrinoParser.OVERFLOW_: + case TrinoParser.PARTITION_: + case TrinoParser.PARTITIONS_: + case TrinoParser.PASSING_: + case TrinoParser.PAST_: + case TrinoParser.PATH_: + case TrinoParser.PATTERN_: + case TrinoParser.PER_: + case TrinoParser.PERIOD_: + case TrinoParser.PERMUTE_: + case TrinoParser.PLAN_: + case TrinoParser.POSITION_: + case TrinoParser.PRECEDING_: + case TrinoParser.PRECISION_: + case TrinoParser.PRIVILEGES_: + case TrinoParser.PROPERTIES_: + case TrinoParser.PRUNE_: + case TrinoParser.QUOTES_: + case TrinoParser.RANGE_: + case TrinoParser.READ_: + case TrinoParser.REFRESH_: + case TrinoParser.RENAME_: + case TrinoParser.REPEAT_: + case TrinoParser.REPEATABLE_: + case TrinoParser.REPLACE_: + case TrinoParser.RESET_: + case TrinoParser.RESPECT_: + case TrinoParser.RESTRICT_: + case TrinoParser.RETURN_: + case TrinoParser.RETURNING_: + case TrinoParser.RETURNS_: + case TrinoParser.REVOKE_: + case TrinoParser.ROLE_: + case TrinoParser.ROLES_: + case TrinoParser.ROLLBACK_: + case TrinoParser.ROW_: + case TrinoParser.ROWS_: + case TrinoParser.RUNNING_: + case TrinoParser.SCALAR_: + case TrinoParser.SCHEMA_: + case TrinoParser.SCHEMAS_: + case TrinoParser.SECOND_: + case TrinoParser.SECURITY_: + case TrinoParser.SEEK_: + case TrinoParser.SERIALIZABLE_: + case TrinoParser.SESSION_: + case TrinoParser.SET_: + case TrinoParser.SETS_: + case TrinoParser.SHOW_: + case TrinoParser.SOME_: + case TrinoParser.START_: + case TrinoParser.STATS_: + case TrinoParser.SUBSET_: + case TrinoParser.SUBSTRING_: + case TrinoParser.SYSTEM_: + case TrinoParser.TABLES_: + case TrinoParser.TABLESAMPLE_: + case TrinoParser.TEXT_: + case TrinoParser.TEXT_STRING_: + case TrinoParser.TIES_: + case TrinoParser.TIME_: + case TrinoParser.TIMESTAMP_: + case TrinoParser.TO_: + case TrinoParser.TRAILING_: + case TrinoParser.TRANSACTION_: + case TrinoParser.TRUNCATE_: + case TrinoParser.TRY_CAST_: + case TrinoParser.TYPE_: + case TrinoParser.UNBOUNDED_: + case TrinoParser.UNCOMMITTED_: + case TrinoParser.UNCONDITIONAL_: + case TrinoParser.UNIQUE_: + case TrinoParser.UNKNOWN_: + case TrinoParser.UNMATCHED_: + case TrinoParser.UNTIL_: + case TrinoParser.UPDATE_: + case TrinoParser.USE_: + case TrinoParser.USER_: + case TrinoParser.UTF16_: + case TrinoParser.UTF32_: + case TrinoParser.UTF8_: + case TrinoParser.VALIDATE_: + case TrinoParser.VALUE_: + case TrinoParser.VERBOSE_: + case TrinoParser.VERSION_: + case TrinoParser.VIEW_: + case TrinoParser.WHILE_: + case TrinoParser.WINDOW_: + case TrinoParser.WITHIN_: + case TrinoParser.WITHOUT_: + case TrinoParser.WORK_: + case TrinoParser.WRAPPER_: + case TrinoParser.WRITE_: + case TrinoParser.YEAR_: + case TrinoParser.ZONE_: + case TrinoParser.IDENTIFIER_: + case TrinoParser.DIGIT_IDENTIFIER_: + case TrinoParser.QUOTED_IDENTIFIER_: + case TrinoParser.BACKQUOTED_IDENTIFIER_: + localContext = new IdentifierUserContext(localContext); + this.enterOuterAlt(localContext, 1); + { + this.state = 3237; + this.identifier(); + } + break; + case TrinoParser.STRING_: + case TrinoParser.UNICODE_STRING_: + localContext = new StringUserContext(localContext); + this.enterOuterAlt(localContext, 2); + { + this.state = 3238; + this.string_(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public nonReserved(): NonReservedContext { + let localContext = new NonReservedContext(this.context, this.state); + this.enterRule(localContext, 238, TrinoParser.RULE_nonReserved); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3241; + _la = this.tokenStream.LA(1); + if(!(((((_la - 1)) & ~0x1F) === 0 && ((1 << (_la - 1)) & 4282055519) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 3988635683) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 2680939671) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 4228606319) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 2143288491) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 3221214143) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4290510815) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 3707629535) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 4274977757) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + + public override sempred(localContext: antlr.ParserRuleContext | null, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 17: + return this.queryTerm_sempred(localContext as QueryTermContext, predIndex); + case 29: + return this.relation_sempred(localContext as RelationContext, predIndex); + case 55: + return this.booleanExpression_sempred(localContext as BooleanExpressionContext, predIndex); + case 57: + return this.valueExpression_sempred(localContext as ValueExpressionContext, predIndex); + case 58: + return this.primaryExpression_sempred(localContext as PrimaryExpressionContext, predIndex); + case 78: + return this.type_sempred(localContext as TypeContext, predIndex); + case 88: + return this.rowPattern_sempred(localContext as RowPatternContext, predIndex); + } + return true; + } + private queryTerm_sempred(localContext: QueryTermContext | null, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.precpred(this.context, 2); + case 1: + return this.precpred(this.context, 1); + } + return true; + } + private relation_sempred(localContext: RelationContext | null, predIndex: number): boolean { + switch (predIndex) { + case 2: + return this.precpred(this.context, 2); + } + return true; + } + private booleanExpression_sempred(localContext: BooleanExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 3: + return this.precpred(this.context, 2); + case 4: + return this.precpred(this.context, 1); + } + return true; + } + private valueExpression_sempred(localContext: ValueExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 5: + return this.precpred(this.context, 3); + case 6: + return this.precpred(this.context, 2); + case 7: + return this.precpred(this.context, 1); + case 8: + return this.precpred(this.context, 5); + } + return true; + } + private primaryExpression_sempred(localContext: PrimaryExpressionContext | null, predIndex: number): boolean { + switch (predIndex) { + case 9: + return this.precpred(this.context, 24); + case 10: + return this.precpred(this.context, 22); + } + return true; + } + private type_sempred(localContext: TypeContext | null, predIndex: number): boolean { + switch (predIndex) { + case 11: + return this.precpred(this.context, 2); + } + return true; + } + private rowPattern_sempred(localContext: RowPatternContext | null, predIndex: number): boolean { + switch (predIndex) { + case 12: + return this.precpred(this.context, 2); + case 13: + return this.precpred(this.context, 1); + } + return true; + } + + public static readonly _serializedATN: number[] = [ + 4,1,340,3244,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, + 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, + 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, + 26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2, + 33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7, + 39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, + 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7, + 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2, + 59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7, + 65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2, + 72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7, + 78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2, + 85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7, + 91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2, + 98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103, + 2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109, + 7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,7,114, + 2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119,1,0, + 3,0,242,8,0,1,0,1,0,1,1,1,1,3,1,248,8,1,1,1,1,1,1,1,1,1,3,1,254, + 8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,269, + 8,2,1,2,1,2,1,2,1,2,1,2,3,2,276,8,2,1,2,1,2,3,2,280,8,2,1,2,1,2, + 3,2,284,8,2,1,2,1,2,1,2,1,2,3,2,290,8,2,1,2,1,2,3,2,294,8,2,1,2, + 1,2,1,2,1,2,1,2,3,2,301,8,2,1,2,1,2,1,2,3,2,306,8,2,1,2,1,2,3,2, + 310,8,2,1,2,1,2,1,2,1,2,3,2,316,8,2,1,2,1,2,3,2,320,8,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2, + 339,8,2,1,2,1,2,1,2,1,2,3,2,345,8,2,1,2,1,2,3,2,349,8,2,1,2,1,2, + 3,2,353,8,2,1,2,1,2,3,2,357,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,365, + 8,2,1,2,1,2,3,2,369,8,2,1,2,3,2,372,8,2,1,2,1,2,1,2,3,2,377,8,2, + 1,2,1,2,1,2,1,2,3,2,383,8,2,1,2,1,2,1,2,1,2,1,2,5,2,390,8,2,10,2, + 12,2,393,9,2,1,2,1,2,1,2,3,2,398,8,2,1,2,1,2,3,2,402,8,2,1,2,1,2, + 1,2,1,2,3,2,408,8,2,1,2,1,2,1,2,1,2,1,2,3,2,415,8,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,3,2,424,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,3,2,436,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,445,8,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,3,2,454,8,2,1,2,1,2,1,2,1,2,3,2,460,8,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,471,8,2,1,2,1,2,1,2,1,2,1,2, + 1,2,3,2,479,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,487,8,2,1,2,1,2,1,2, + 1,2,1,2,3,2,494,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,504,8,2, + 1,2,1,2,1,2,1,2,1,2,3,2,511,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,519, + 8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,5,2,553,8,2,10,2,12,2,556,9,2,3,2,558,8,2,1,2,3,2,561,8,2,1, + 2,1,2,3,2,565,8,2,1,2,1,2,1,2,1,2,3,2,571,8,2,1,2,1,2,1,2,3,2,576, + 8,2,1,2,1,2,1,2,1,2,1,2,3,2,583,8,2,1,2,1,2,1,2,1,2,3,2,589,8,2, + 1,2,1,2,3,2,593,8,2,1,2,1,2,3,2,597,8,2,1,2,1,2,1,2,1,2,1,2,1,2, + 3,2,605,8,2,1,2,1,2,1,2,1,2,3,2,611,8,2,1,2,1,2,3,2,615,8,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,629,8,2,1,2,1,2, + 1,2,1,2,1,2,1,2,3,2,637,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,656,8,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 5,2,679,8,2,10,2,12,2,682,9,2,3,2,684,8,2,1,2,1,2,1,2,1,2,1,2,3, + 2,691,8,2,1,2,1,2,1,2,1,2,1,2,3,2,698,8,2,1,2,1,2,1,2,1,2,1,2,1, + 2,1,2,3,2,707,8,2,1,2,1,2,3,2,711,8,2,1,2,1,2,1,2,1,2,1,2,3,2,718, + 8,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,726,8,2,10,2,12,2,729,9,2,1,2,1, + 2,1,2,3,2,734,8,2,1,2,1,2,1,2,3,2,739,8,2,1,2,1,2,3,2,743,8,2,1, + 2,1,2,1,2,1,2,3,2,749,8,2,1,2,1,2,1,2,1,2,1,2,5,2,756,8,2,10,2,12, + 2,759,9,2,1,2,1,2,1,2,3,2,764,8,2,1,2,1,2,3,2,768,8,2,1,2,1,2,1, + 2,1,2,1,2,3,2,775,8,2,1,2,1,2,3,2,779,8,2,1,2,1,2,1,2,1,2,5,2,785, + 8,2,10,2,12,2,788,9,2,1,2,1,2,3,2,792,8,2,1,2,1,2,3,2,796,8,2,1, + 2,1,2,1,2,1,2,1,2,1,2,3,2,804,8,2,1,2,1,2,1,2,1,2,5,2,810,8,2,10, + 2,12,2,813,9,2,1,2,1,2,3,2,817,8,2,1,2,1,2,3,2,821,8,2,1,2,1,2,1, + 2,1,2,1,2,1,2,1,2,1,2,3,2,831,8,2,1,2,1,2,1,2,5,2,836,8,2,10,2,12, + 2,839,9,2,1,2,1,2,3,2,843,8,2,1,2,1,2,3,2,847,8,2,1,2,1,2,1,2,1, + 2,1,2,1,2,1,2,1,2,3,2,857,8,2,1,2,3,2,860,8,2,1,2,1,2,1,2,1,2,1, + 2,5,2,867,8,2,10,2,12,2,870,9,2,1,2,1,2,3,2,874,8,2,1,2,1,2,1,2, + 1,2,3,2,880,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,904,8,2,1,2,1,2,1,2, + 1,2,3,2,910,8,2,3,2,912,8,2,1,2,1,2,1,2,1,2,3,2,918,8,2,1,2,1,2, + 1,2,1,2,3,2,924,8,2,3,2,926,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,934, + 8,2,3,2,936,8,2,1,2,1,2,1,2,1,2,3,2,942,8,2,1,2,1,2,1,2,1,2,3,2, + 948,8,2,3,2,950,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,3,2,965,8,2,1,2,1,2,1,2,3,2,970,8,2,1,2,1,2,1,2,1,2,1,2, + 3,2,977,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,987,8,2,1,2,1,2, + 1,2,1,2,3,2,993,8,2,3,2,995,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1003, + 8,2,3,2,1005,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,1028,8,2,10,2,12,2,1031, + 9,2,3,2,1033,8,2,1,2,1,2,3,2,1037,8,2,1,2,1,2,3,2,1041,8,2,1,2,1, + 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,1057,8,2,10, + 2,12,2,1060,9,2,3,2,1062,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,1071, + 8,2,10,2,12,2,1074,9,2,3,2,1076,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1092,8,2,1,2,1,2,1,2,1,2,1,2,1,2, + 5,2,1100,8,2,10,2,12,2,1103,9,2,1,2,1,2,3,2,1107,8,2,1,2,1,2,1,2, + 1,2,3,2,1113,8,2,1,2,3,2,1116,8,2,1,2,1,2,1,2,1,2,1,2,4,2,1123,8, + 2,11,2,12,2,1124,3,2,1127,8,2,1,3,3,3,1130,8,3,1,3,1,3,1,4,1,4,1, + 4,1,4,5,4,1138,8,4,10,4,12,4,1141,9,4,1,5,3,5,1144,8,5,1,5,1,5,1, + 6,1,6,3,6,1150,8,6,1,6,1,6,1,6,5,6,1155,8,6,10,6,12,6,1158,9,6,1, + 7,1,7,3,7,1162,8,7,1,8,1,8,1,8,1,8,3,8,1168,8,8,1,8,1,8,3,8,1172, + 8,8,1,8,1,8,3,8,1176,8,8,1,9,1,9,1,9,1,9,3,9,1182,8,9,1,10,1,10, + 1,10,1,10,1,11,1,11,1,11,5,11,1191,8,11,10,11,12,11,1194,9,11,1, + 12,1,12,1,12,1,12,1,13,1,13,3,13,1202,8,13,1,14,1,14,1,14,1,14,1, + 14,1,14,5,14,1210,8,14,10,14,12,14,1213,9,14,3,14,1215,8,14,1,14, + 1,14,1,14,3,14,1220,8,14,3,14,1222,8,14,1,14,1,14,1,14,1,14,1,14, + 3,14,1229,8,14,1,14,1,14,1,14,1,14,3,14,1235,8,14,3,14,1237,8,14, + 1,15,1,15,3,15,1241,8,15,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17, + 3,17,1251,8,17,1,17,1,17,1,17,1,17,3,17,1257,8,17,1,17,5,17,1260, + 8,17,10,17,12,17,1263,9,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,5, + 18,1272,8,18,10,18,12,18,1275,9,18,1,18,1,18,1,18,1,18,3,18,1281, + 8,18,1,19,1,19,3,19,1285,8,19,1,19,1,19,3,19,1289,8,19,1,20,1,20, + 3,20,1293,8,20,1,20,1,20,1,20,5,20,1298,8,20,10,20,12,20,1301,9, + 20,1,20,1,20,1,20,1,20,5,20,1307,8,20,10,20,12,20,1310,9,20,3,20, + 1312,8,20,1,20,1,20,3,20,1316,8,20,1,20,1,20,1,20,3,20,1321,8,20, + 1,20,1,20,3,20,1325,8,20,1,20,1,20,1,20,1,20,5,20,1331,8,20,10,20, + 12,20,1334,9,20,3,20,1336,8,20,1,21,3,21,1339,8,21,1,21,1,21,1,21, + 5,21,1344,8,21,10,21,12,21,1347,9,21,1,22,1,22,1,22,1,22,1,22,1, + 22,5,22,1355,8,22,10,22,12,22,1358,9,22,3,22,1360,8,22,1,22,1,22, + 1,22,1,22,1,22,1,22,5,22,1368,8,22,10,22,12,22,1371,9,22,3,22,1373, + 8,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,5,22,1382,8,22,10,22,12, + 22,1385,9,22,1,22,1,22,3,22,1389,8,22,1,23,1,23,1,23,1,23,5,23,1395, + 8,23,10,23,12,23,1398,9,23,3,23,1400,8,23,1,23,1,23,3,23,1404,8, + 23,1,24,1,24,1,24,1,24,1,24,1,24,1,25,3,25,1413,8,25,1,25,1,25,1, + 25,1,25,1,25,5,25,1420,8,25,10,25,12,25,1423,9,25,3,25,1425,8,25, + 1,25,1,25,1,25,1,25,1,25,5,25,1432,8,25,10,25,12,25,1435,9,25,3, + 25,1437,8,25,1,25,3,25,1440,8,25,1,26,1,26,3,26,1444,8,26,1,26,1, + 26,1,26,1,26,1,26,1,27,1,27,1,28,1,28,3,28,1455,8,28,1,28,3,28,1458, + 8,28,1,28,1,28,1,28,1,28,1,28,3,28,1465,8,28,1,28,3,28,1468,8,28, + 1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,29, + 1,29,1,29,1,29,1,29,3,29,1487,8,29,5,29,1489,8,29,10,29,12,29,1492, + 9,29,1,30,3,30,1495,8,30,1,30,1,30,3,30,1499,8,30,3,30,1501,8,30, + 1,31,1,31,1,31,1,31,1,31,1,31,1,31,5,31,1510,8,31,10,31,12,31,1513, + 9,31,1,31,1,31,3,31,1517,8,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32, + 3,32,1526,8,32,1,33,1,33,1,34,1,34,1,35,1,35,1,35,3,35,1535,8,35, + 1,35,3,35,1538,8,35,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,5,37,1551,8,37,10,37,12,37,1554,9,37,3,37,1556,8,37,1, + 37,1,37,1,37,1,37,1,37,5,37,1563,8,37,10,37,12,37,1566,9,37,3,37, + 1568,8,37,1,37,1,37,1,37,1,37,5,37,1574,8,37,10,37,12,37,1577,9, + 37,3,37,1579,8,37,1,37,3,37,1582,8,37,1,37,1,37,1,37,3,37,1587,8, + 37,1,37,3,37,1590,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,5, + 37,1600,8,37,10,37,12,37,1603,9,37,3,37,1605,8,37,1,37,1,37,1,37, + 1,37,5,37,1611,8,37,10,37,12,37,1614,9,37,1,37,1,37,3,37,1618,8, + 37,1,37,1,37,3,37,1622,8,37,3,37,1624,8,37,3,37,1626,8,37,1,38,1, + 38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39,1641, + 8,39,3,39,1643,8,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40, + 3,40,1654,8,40,1,41,1,41,1,41,1,41,1,41,3,41,1661,8,41,1,41,3,41, + 1664,8,41,1,41,1,41,1,41,3,41,1669,8,41,1,42,1,42,1,42,1,42,1,42, + 1,42,5,42,1677,8,42,10,42,12,42,1680,9,42,1,42,1,42,1,43,1,43,1, + 43,1,43,1,44,1,44,3,44,1690,8,44,1,44,1,44,3,44,1694,8,44,3,44,1696, + 8,44,1,45,1,45,1,45,1,45,5,45,1702,8,45,10,45,12,45,1705,9,45,1, + 45,1,45,1,46,1,46,3,46,1711,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1, + 46,1,46,1,46,5,46,1722,8,46,10,46,12,46,1725,9,46,1,46,1,46,1,46, + 3,46,1730,8,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46, + 1,46,1,46,1,46,1,46,3,46,1746,8,46,1,47,1,47,1,47,1,47,1,47,5,47, + 1753,8,47,10,47,12,47,1756,9,47,3,47,1758,8,47,1,47,1,47,1,47,1, + 47,5,47,1764,8,47,10,47,12,47,1767,9,47,3,47,1769,8,47,1,47,1,47, + 1,48,1,48,1,48,3,48,1776,8,48,1,48,1,48,1,48,3,48,1781,8,48,1,49, + 1,49,1,49,1,49,1,49,1,49,1,49,5,49,1790,8,49,10,49,12,49,1793,9, + 49,3,49,1795,8,49,1,49,1,49,3,49,1799,8,49,3,49,1801,8,49,1,49,1, + 49,1,49,1,49,1,49,1,49,3,49,1809,8,49,1,49,1,49,1,49,1,49,1,49,1, + 49,5,49,1817,8,49,10,49,12,49,1820,9,49,1,49,1,49,1,49,3,49,1825, + 8,49,3,49,1827,8,49,1,50,1,50,1,50,1,50,1,50,3,50,1834,8,50,1,50, + 1,50,3,50,1838,8,50,3,50,1840,8,50,1,50,1,50,1,50,1,50,1,50,3,50, + 1847,8,50,1,50,1,50,3,50,1851,8,50,3,50,1853,8,50,3,50,1855,8,50, + 1,51,1,51,1,51,1,51,1,51,5,51,1862,8,51,10,51,12,51,1865,9,51,1, + 51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,1875,8,51,1,52,1,52,3, + 52,1879,8,52,1,53,1,53,1,53,1,53,1,53,1,53,5,53,1887,8,53,10,53, + 12,53,1890,9,53,1,53,1,53,1,54,1,54,1,55,1,55,1,55,3,55,1899,8,55, + 1,55,1,55,3,55,1903,8,55,1,55,1,55,1,55,1,55,1,55,1,55,5,55,1911, + 8,55,10,55,12,55,1914,9,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1, + 56,1,56,1,56,3,56,1926,8,56,1,56,1,56,1,56,1,56,1,56,1,56,3,56,1934, + 8,56,1,56,1,56,1,56,1,56,1,56,5,56,1941,8,56,10,56,12,56,1944,9, + 56,1,56,1,56,1,56,3,56,1949,8,56,1,56,1,56,1,56,1,56,1,56,1,56,3, + 56,1957,8,56,1,56,1,56,1,56,1,56,3,56,1963,8,56,1,56,1,56,3,56,1967, + 8,56,1,56,1,56,1,56,3,56,1972,8,56,1,56,1,56,1,56,3,56,1977,8,56, + 1,57,1,57,1,57,1,57,3,57,1983,8,57,1,57,1,57,1,57,1,57,1,57,1,57, + 1,57,1,57,1,57,1,57,1,57,1,57,5,57,1997,8,57,10,57,12,57,2000,9, + 57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1, + 58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,4, + 58,2027,8,58,11,58,12,58,2028,1,58,1,58,1,58,1,58,1,58,1,58,1,58, + 5,58,2038,8,58,10,58,12,58,2041,9,58,1,58,1,58,1,58,1,58,1,58,3, + 58,2048,8,58,1,58,1,58,1,58,3,58,2053,8,58,1,58,1,58,1,58,3,58,2058, + 8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,5,58,2069,8,58, + 10,58,12,58,2072,9,58,1,58,1,58,1,58,3,58,2077,8,58,1,58,3,58,2080, + 8,58,1,58,1,58,1,58,1,58,1,58,3,58,2087,8,58,1,58,1,58,1,58,3,58, + 2092,8,58,1,58,3,58,2095,8,58,1,58,3,58,2098,8,58,1,58,1,58,1,58, + 3,58,2103,8,58,1,58,1,58,1,58,5,58,2108,8,58,10,58,12,58,2111,9, + 58,3,58,2113,8,58,1,58,1,58,1,58,1,58,1,58,5,58,2120,8,58,10,58, + 12,58,2123,9,58,3,58,2125,8,58,1,58,1,58,3,58,2129,8,58,1,58,3,58, + 2132,8,58,1,58,3,58,2135,8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58, + 1,58,1,58,1,58,1,58,5,58,2148,8,58,10,58,12,58,2151,9,58,3,58,2153, + 8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58, + 1,58,1,58,1,58,4,58,2170,8,58,11,58,12,58,2171,1,58,1,58,3,58,2176, + 8,58,1,58,1,58,1,58,1,58,4,58,2182,8,58,11,58,12,58,2183,1,58,1, + 58,3,58,2188,8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1, + 58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,5,58,2211, + 8,58,10,58,12,58,2214,9,58,3,58,2216,8,58,1,58,1,58,1,58,1,58,1, + 58,1,58,1,58,3,58,2225,8,58,1,58,1,58,1,58,1,58,3,58,2231,8,58,1, + 58,1,58,1,58,1,58,3,58,2237,8,58,1,58,1,58,1,58,1,58,3,58,2243,8, + 58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,3,58,2252,8,58,1,58,3,58,2255, + 8,58,1,58,3,58,2258,8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58, + 1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,3,58,2277,8,58,1,58, + 1,58,1,58,1,58,1,58,1,58,1,58,3,58,2286,8,58,1,58,1,58,1,58,1,58, + 1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58, + 1,58,5,58,2306,8,58,10,58,12,58,2309,9,58,3,58,2311,8,58,1,58,1, + 58,1,58,1,58,1,58,1,58,1,58,1,58,3,58,2321,8,58,1,58,1,58,1,58,1, + 58,1,58,1,58,1,58,3,58,2330,8,58,1,58,1,58,1,58,1,58,3,58,2336,8, + 58,1,58,1,58,1,58,1,58,3,58,2342,8,58,1,58,1,58,1,58,1,58,1,58,1, + 58,1,58,1,58,1,58,3,58,2353,8,58,3,58,2355,8,58,1,58,1,58,1,58,3, + 58,2360,8,58,1,58,1,58,1,58,1,58,1,58,3,58,2367,8,58,3,58,2369,8, + 58,1,58,1,58,1,58,1,58,3,58,2375,8,58,1,58,1,58,1,58,1,58,3,58,2381, + 8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,5,58,2390,8,58,10,58,12, + 58,2393,9,58,1,58,1,58,1,58,1,58,1,58,1,58,3,58,2401,8,58,1,58,1, + 58,1,58,3,58,2406,8,58,1,58,1,58,1,58,3,58,2411,8,58,3,58,2413,8, + 58,3,58,2415,8,58,1,58,1,58,1,58,1,58,3,58,2421,8,58,3,58,2423,8, + 58,1,58,1,58,1,58,1,58,1,58,1,58,5,58,2431,8,58,10,58,12,58,2434, + 9,58,1,58,1,58,1,58,1,58,1,58,1,58,3,58,2442,8,58,3,58,2444,8,58, + 1,58,1,58,1,58,1,58,3,58,2450,8,58,3,58,2452,8,58,1,58,3,58,2455, + 8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,5,58,2465,8,58,10,58, + 12,58,2468,9,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,5,59,2477,8,59, + 10,59,12,59,2480,9,59,3,59,2482,8,59,1,60,1,60,1,60,3,60,2487,8, + 60,1,61,1,61,1,61,3,61,2492,8,61,1,62,1,62,1,62,1,62,1,63,1,63,1, + 64,1,64,1,64,1,64,3,64,2504,8,64,1,65,1,65,3,65,2508,8,65,1,65,1, + 65,3,65,2512,8,65,1,65,3,65,2515,8,65,3,65,2517,8,65,1,66,1,66,1, + 66,1,66,3,66,2523,8,66,1,67,3,67,2526,8,67,1,67,1,67,1,67,1,67,1, + 67,1,67,1,67,1,67,3,67,2536,8,67,1,68,1,68,1,69,1,69,1,69,1,69,3, + 69,2544,8,69,1,70,1,70,1,70,1,70,3,70,2550,8,70,3,70,2552,8,70,1, + 71,1,71,1,71,1,71,1,71,1,71,3,71,2560,8,71,1,72,1,72,1,73,1,73,1, + 74,1,74,1,75,1,75,3,75,2570,8,75,1,75,1,75,1,75,1,75,3,75,2576,8, + 75,1,76,1,76,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,5,78,2588,8, + 78,10,78,12,78,2591,9,78,1,78,1,78,1,78,1,78,1,78,1,78,3,78,2599, + 8,78,1,78,1,78,1,78,1,78,1,78,3,78,2606,8,78,1,78,1,78,1,78,3,78, + 2611,8,78,1,78,1,78,1,78,1,78,1,78,3,78,2618,8,78,1,78,1,78,1,78, + 1,78,1,78,1,78,1,78,1,78,3,78,2628,8,78,1,78,1,78,1,78,3,78,2633, + 8,78,1,78,1,78,1,78,1,78,1,78,3,78,2640,8,78,1,78,1,78,1,78,1,78, + 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, + 1,78,1,78,1,78,1,78,1,78,5,78,2664,8,78,10,78,12,78,2667,9,78,1, + 78,1,78,3,78,2671,8,78,3,78,2673,8,78,1,78,1,78,1,78,1,78,1,78,3, + 78,2680,8,78,5,78,2682,8,78,10,78,12,78,2685,9,78,1,79,1,79,1,79, + 1,79,3,79,2691,8,79,1,80,1,80,3,80,2695,8,80,1,81,1,81,1,81,1,81, + 1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,3,83,2712, + 8,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,5,83, + 2725,8,83,10,83,12,83,2728,9,83,1,83,1,83,1,83,1,83,3,83,2734,8, + 83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,3,83,2743,8,83,1,83,1,83,1, + 83,1,83,1,83,1,83,5,83,2751,8,83,10,83,12,83,2754,9,83,1,83,1,83, + 3,83,2758,8,83,1,83,1,83,1,83,1,83,1,83,5,83,2765,8,83,10,83,12, + 83,2768,9,83,1,83,1,83,3,83,2772,8,83,1,84,1,84,1,84,1,84,1,84,1, + 84,3,84,2780,8,84,1,85,1,85,1,85,1,85,5,85,2786,8,85,10,85,12,85, + 2789,9,85,3,85,2791,8,85,1,85,1,85,1,85,1,85,3,85,2797,8,85,1,85, + 3,85,2800,8,85,1,85,1,85,1,85,1,85,1,85,3,85,2807,8,85,1,85,1,85, + 1,85,1,85,5,85,2813,8,85,10,85,12,85,2816,9,85,3,85,2818,8,85,1, + 85,1,85,1,85,1,85,5,85,2824,8,85,10,85,12,85,2827,9,85,3,85,2829, + 8,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86, + 1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,3,86, + 2855,8,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,3,87,2866, + 8,87,1,88,1,88,1,88,3,88,2871,8,88,1,88,1,88,1,88,1,88,1,88,5,88, + 2878,8,88,10,88,12,88,2881,9,88,1,89,1,89,1,89,1,89,1,89,1,89,1, + 89,1,89,5,89,2891,8,89,10,89,12,89,2894,9,89,1,89,1,89,1,89,1,89, + 1,89,1,89,1,89,1,89,1,89,1,89,1,89,1,89,3,89,2908,8,89,1,90,1,90, + 3,90,2912,8,90,1,90,1,90,3,90,2916,8,90,1,90,1,90,3,90,2920,8,90, + 1,90,1,90,1,90,1,90,3,90,2926,8,90,1,90,1,90,3,90,2930,8,90,1,90, + 1,90,3,90,2934,8,90,1,90,1,90,3,90,2938,8,90,3,90,2940,8,90,1,91, + 1,91,1,91,1,91,1,92,1,92,1,92,1,92,3,92,2950,8,92,1,93,1,93,1,93, + 1,93,1,93,3,93,2957,8,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,3,94, + 2966,8,94,1,95,1,95,1,95,1,95,1,95,3,95,2973,8,95,1,96,1,96,1,96, + 1,96,1,96,3,96,2980,8,96,1,97,1,97,1,97,5,97,2985,8,97,10,97,12, + 97,2988,9,97,1,98,1,98,1,98,1,98,5,98,2994,8,98,10,98,12,98,2997, + 9,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,5,99,3006,8,99,10,99,12, + 99,3009,9,99,3,99,3011,8,99,1,99,1,99,1,100,3,100,3016,8,100,1,100, + 1,100,1,101,1,101,1,101,1,102,1,102,1,102,3,102,3026,8,102,1,102, + 1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102, + 1,102,1,102,3,102,3042,8,102,1,103,1,103,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,4,103,3054,8,103,11,103,12,103,3055,1,103, + 3,103,3059,8,103,1,103,1,103,1,103,1,103,1,103,4,103,3066,8,103, + 11,103,12,103,3067,1,103,3,103,3071,8,103,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,5,103,3081,8,103,10,103,12,103,3084,9,103, + 1,103,3,103,3087,8,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,5,103,3100,8,103,10,103,12,103,3103,9,103, + 1,103,3,103,3106,8,103,1,103,1,103,1,103,1,103,3,103,3112,8,103, + 1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,3,103,3122,8,103, + 1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,3,103, + 3134,8,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,3,103,3143, + 8,103,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105, + 1,106,1,106,1,106,1,107,1,107,1,107,1,107,5,107,3162,8,107,10,107, + 12,107,3165,9,107,1,107,1,107,1,107,3,107,3170,8,107,1,108,1,108, + 1,108,4,108,3175,8,108,11,108,12,108,3176,1,109,1,109,1,110,1,110, + 1,110,5,110,3184,8,110,10,110,12,110,3187,9,110,1,111,1,111,1,111, + 1,111,1,111,1,111,1,112,1,112,1,113,1,113,1,113,3,113,3200,8,113, + 1,114,1,114,1,114,1,114,1,114,3,114,3207,8,114,1,115,1,115,1,115, + 5,115,3212,8,115,10,115,12,115,3215,9,115,1,116,1,116,1,116,1,116, + 1,116,3,116,3222,8,116,1,117,3,117,3225,8,117,1,117,1,117,3,117, + 3229,8,117,1,117,1,117,3,117,3233,8,117,1,117,3,117,3236,8,117,1, + 118,1,118,3,118,3240,8,118,1,119,1,119,1,119,0,7,34,58,110,114,116, + 156,176,120,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36, + 38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80, + 82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118, + 120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150, + 152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182, + 184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214, + 216,218,220,222,224,226,228,230,232,234,236,238,0,37,2,0,22,22,212, + 212,2,0,55,55,114,114,2,0,226,226,244,244,2,0,88,88,105,105,2,0, + 75,75,106,106,1,0,222,223,2,0,84,84,157,157,2,0,308,308,330,330, + 2,0,74,74,265,265,2,0,12,12,58,58,2,0,84,84,131,131,2,0,5,5,62,62, + 3,0,89,89,135,135,217,217,2,0,16,16,243,243,3,0,18,18,133,133,254, + 254,2,0,288,288,290,290,2,0,107,107,230,230,1,0,302,303,1,0,304, + 306,2,0,127,127,172,172,1,0,275,277,4,0,72,72,80,80,257,257,267, + 267,2,0,32,32,264,264,2,0,10,10,169,169,2,0,83,83,224,224,1,0,296, + 301,3,0,5,5,9,9,238,238,2,0,80,80,257,257,5,0,50,50,101,101,153, + 154,228,228,294,294,1,0,158,161,2,0,85,85,195,195,3,0,96,96,120, + 120,247,247,4,0,63,63,115,115,143,143,278,278,2,0,175,175,293,293, + 5,0,36,36,56,56,110,110,231,231,271,271,2,0,252,252,282,282,55,0, + 1,5,7,7,9,10,12,16,18,18,20,22,25,32,34,35,39,39,48,50,52,55,57, + 58,60,61,63,65,68,70,72,72,75,75,78,78,81,85,87,87,90,96,99,99,101, + 104,106,107,109,109,112,112,114,115,117,118,120,120,127,134,136, + 136,138,138,140,140,143,154,156,163,167,172,174,176,179,179,181, + 196,198,203,205,216,218,220,222,230,232,236,238,243,245,248,250, + 255,258,260,262,264,266,268,270,273,275,279,281,283,286,287,289, + 295,3755,0,241,1,0,0,0,2,253,1,0,0,0,4,1126,1,0,0,0,6,1129,1,0,0, + 0,8,1133,1,0,0,0,10,1143,1,0,0,0,12,1147,1,0,0,0,14,1161,1,0,0,0, + 16,1163,1,0,0,0,18,1177,1,0,0,0,20,1183,1,0,0,0,22,1187,1,0,0,0, + 24,1195,1,0,0,0,26,1201,1,0,0,0,28,1203,1,0,0,0,30,1240,1,0,0,0, + 32,1242,1,0,0,0,34,1244,1,0,0,0,36,1280,1,0,0,0,38,1282,1,0,0,0, + 40,1290,1,0,0,0,42,1338,1,0,0,0,44,1388,1,0,0,0,46,1403,1,0,0,0, + 48,1405,1,0,0,0,50,1412,1,0,0,0,52,1441,1,0,0,0,54,1450,1,0,0,0, + 56,1467,1,0,0,0,58,1469,1,0,0,0,60,1500,1,0,0,0,62,1516,1,0,0,0, + 64,1518,1,0,0,0,66,1527,1,0,0,0,68,1529,1,0,0,0,70,1537,1,0,0,0, + 72,1539,1,0,0,0,74,1542,1,0,0,0,76,1627,1,0,0,0,78,1642,1,0,0,0, + 80,1653,1,0,0,0,82,1655,1,0,0,0,84,1670,1,0,0,0,86,1683,1,0,0,0, + 88,1687,1,0,0,0,90,1697,1,0,0,0,92,1745,1,0,0,0,94,1747,1,0,0,0, + 96,1775,1,0,0,0,98,1782,1,0,0,0,100,1854,1,0,0,0,102,1874,1,0,0, + 0,104,1876,1,0,0,0,106,1880,1,0,0,0,108,1893,1,0,0,0,110,1902,1, + 0,0,0,112,1976,1,0,0,0,114,1982,1,0,0,0,116,2454,1,0,0,0,118,2469, + 1,0,0,0,120,2483,1,0,0,0,122,2488,1,0,0,0,124,2493,1,0,0,0,126,2497, + 1,0,0,0,128,2503,1,0,0,0,130,2516,1,0,0,0,132,2522,1,0,0,0,134,2535, + 1,0,0,0,136,2537,1,0,0,0,138,2543,1,0,0,0,140,2551,1,0,0,0,142,2559, + 1,0,0,0,144,2561,1,0,0,0,146,2563,1,0,0,0,148,2565,1,0,0,0,150,2567, + 1,0,0,0,152,2577,1,0,0,0,154,2579,1,0,0,0,156,2672,1,0,0,0,158,2690, + 1,0,0,0,160,2694,1,0,0,0,162,2696,1,0,0,0,164,2701,1,0,0,0,166,2771, + 1,0,0,0,168,2773,1,0,0,0,170,2790,1,0,0,0,172,2854,1,0,0,0,174,2865, + 1,0,0,0,176,2867,1,0,0,0,178,2907,1,0,0,0,180,2939,1,0,0,0,182,2941, + 1,0,0,0,184,2949,1,0,0,0,186,2956,1,0,0,0,188,2965,1,0,0,0,190,2972, + 1,0,0,0,192,2979,1,0,0,0,194,2981,1,0,0,0,196,2989,1,0,0,0,198,3000, + 1,0,0,0,200,3015,1,0,0,0,202,3019,1,0,0,0,204,3041,1,0,0,0,206,3142, + 1,0,0,0,208,3144,1,0,0,0,210,3149,1,0,0,0,212,3154,1,0,0,0,214,3157, + 1,0,0,0,216,3174,1,0,0,0,218,3178,1,0,0,0,220,3180,1,0,0,0,222,3188, + 1,0,0,0,224,3194,1,0,0,0,226,3199,1,0,0,0,228,3206,1,0,0,0,230,3208, + 1,0,0,0,232,3221,1,0,0,0,234,3235,1,0,0,0,236,3239,1,0,0,0,238,3241, + 1,0,0,0,240,242,3,2,1,0,241,240,1,0,0,0,241,242,1,0,0,0,242,243, + 1,0,0,0,243,244,5,0,0,1,244,1,1,0,0,0,245,247,3,4,2,0,246,248,5, + 309,0,0,247,246,1,0,0,0,247,248,1,0,0,0,248,254,1,0,0,0,249,250, + 3,4,2,0,250,251,5,309,0,0,251,252,3,2,1,0,252,254,1,0,0,0,253,245, + 1,0,0,0,253,249,1,0,0,0,254,3,1,0,0,0,255,1127,3,6,3,0,256,257,5, + 272,0,0,257,1127,3,232,116,0,258,259,5,272,0,0,259,260,3,232,116, + 0,260,261,5,310,0,0,261,262,3,232,116,0,262,1127,1,0,0,0,263,264, + 5,36,0,0,264,268,5,25,0,0,265,266,5,102,0,0,266,267,5,165,0,0,267, + 269,5,77,0,0,268,265,1,0,0,0,268,269,1,0,0,0,269,270,1,0,0,0,270, + 271,3,232,116,0,271,272,5,274,0,0,272,275,3,232,116,0,273,274,5, + 29,0,0,274,276,3,140,70,0,275,273,1,0,0,0,275,276,1,0,0,0,276,279, + 1,0,0,0,277,278,5,14,0,0,278,280,3,228,114,0,279,277,1,0,0,0,279, + 280,1,0,0,0,280,283,1,0,0,0,281,282,5,288,0,0,282,284,3,20,10,0, + 283,281,1,0,0,0,283,284,1,0,0,0,284,1127,1,0,0,0,285,286,5,66,0, + 0,286,289,5,25,0,0,287,288,5,102,0,0,288,290,5,77,0,0,289,287,1, + 0,0,0,289,290,1,0,0,0,290,291,1,0,0,0,291,293,3,232,116,0,292,294, + 7,0,0,0,293,292,1,0,0,0,293,294,1,0,0,0,294,1127,1,0,0,0,295,296, + 5,36,0,0,296,300,5,226,0,0,297,298,5,102,0,0,298,299,5,165,0,0,299, + 301,5,77,0,0,300,297,1,0,0,0,300,301,1,0,0,0,301,302,1,0,0,0,302, + 305,3,220,110,0,303,304,5,14,0,0,304,306,3,228,114,0,305,303,1,0, + 0,0,305,306,1,0,0,0,306,309,1,0,0,0,307,308,5,288,0,0,308,310,3, + 20,10,0,309,307,1,0,0,0,309,310,1,0,0,0,310,1127,1,0,0,0,311,312, + 5,66,0,0,312,315,5,226,0,0,313,314,5,102,0,0,314,316,5,77,0,0,315, + 313,1,0,0,0,315,316,1,0,0,0,316,317,1,0,0,0,317,319,3,220,110,0, + 318,320,7,0,0,0,319,318,1,0,0,0,319,320,1,0,0,0,320,1127,1,0,0,0, + 321,322,5,6,0,0,322,323,5,226,0,0,323,324,3,220,110,0,324,325,5, + 206,0,0,325,326,5,253,0,0,326,327,3,232,116,0,327,1127,1,0,0,0,328, + 329,5,6,0,0,329,330,5,226,0,0,330,331,3,220,110,0,331,332,5,234, + 0,0,332,333,5,14,0,0,333,334,3,228,114,0,334,1127,1,0,0,0,335,338, + 5,36,0,0,336,337,5,177,0,0,337,339,5,209,0,0,338,336,1,0,0,0,338, + 339,1,0,0,0,339,340,1,0,0,0,340,344,5,244,0,0,341,342,5,102,0,0, + 342,343,5,165,0,0,343,345,5,77,0,0,344,341,1,0,0,0,344,345,1,0,0, + 0,345,346,1,0,0,0,346,348,3,220,110,0,347,349,3,90,45,0,348,347, + 1,0,0,0,348,349,1,0,0,0,349,352,1,0,0,0,350,351,5,29,0,0,351,353, + 3,140,70,0,352,350,1,0,0,0,352,353,1,0,0,0,353,356,1,0,0,0,354,355, + 5,288,0,0,355,357,3,20,10,0,356,354,1,0,0,0,356,357,1,0,0,0,357, + 358,1,0,0,0,358,364,5,11,0,0,359,365,3,6,3,0,360,361,5,313,0,0,361, + 362,3,6,3,0,362,363,5,314,0,0,363,365,1,0,0,0,364,359,1,0,0,0,364, + 360,1,0,0,0,365,371,1,0,0,0,366,368,5,288,0,0,367,369,5,162,0,0, + 368,367,1,0,0,0,368,369,1,0,0,0,369,370,1,0,0,0,370,372,5,48,0,0, + 371,366,1,0,0,0,371,372,1,0,0,0,372,1127,1,0,0,0,373,376,5,36,0, + 0,374,375,5,177,0,0,375,377,5,209,0,0,376,374,1,0,0,0,376,377,1, + 0,0,0,377,378,1,0,0,0,378,382,5,244,0,0,379,380,5,102,0,0,380,381, + 5,165,0,0,381,383,5,77,0,0,382,379,1,0,0,0,382,383,1,0,0,0,383,384, + 1,0,0,0,384,385,3,220,110,0,385,386,5,313,0,0,386,391,3,14,7,0,387, + 388,5,312,0,0,388,390,3,14,7,0,389,387,1,0,0,0,390,393,1,0,0,0,391, + 389,1,0,0,0,391,392,1,0,0,0,392,394,1,0,0,0,393,391,1,0,0,0,394, + 397,5,314,0,0,395,396,5,29,0,0,396,398,3,140,70,0,397,395,1,0,0, + 0,397,398,1,0,0,0,398,401,1,0,0,0,399,400,5,288,0,0,400,402,3,20, + 10,0,401,399,1,0,0,0,401,402,1,0,0,0,402,1127,1,0,0,0,403,404,5, + 66,0,0,404,407,5,244,0,0,405,406,5,102,0,0,406,408,5,77,0,0,407, + 405,1,0,0,0,407,408,1,0,0,0,408,409,1,0,0,0,409,1127,3,220,110,0, + 410,411,5,110,0,0,411,412,5,113,0,0,412,414,3,220,110,0,413,415, + 3,90,45,0,414,413,1,0,0,0,414,415,1,0,0,0,415,416,1,0,0,0,416,417, + 3,6,3,0,417,1127,1,0,0,0,418,419,5,56,0,0,419,420,5,88,0,0,420,423, + 3,220,110,0,421,422,5,285,0,0,422,424,3,110,55,0,423,421,1,0,0,0, + 423,424,1,0,0,0,424,1127,1,0,0,0,425,426,5,258,0,0,426,427,5,244, + 0,0,427,1127,3,220,110,0,428,429,5,29,0,0,429,430,5,173,0,0,430, + 431,5,244,0,0,431,432,3,220,110,0,432,435,5,116,0,0,433,436,3,140, + 70,0,434,436,5,166,0,0,435,433,1,0,0,0,435,434,1,0,0,0,436,1127, + 1,0,0,0,437,438,5,29,0,0,438,439,5,173,0,0,439,440,5,283,0,0,440, + 441,3,220,110,0,441,444,5,116,0,0,442,445,3,140,70,0,443,445,5,166, + 0,0,444,442,1,0,0,0,444,443,1,0,0,0,445,1127,1,0,0,0,446,447,5,29, + 0,0,447,448,5,173,0,0,448,449,5,27,0,0,449,450,3,220,110,0,450,453, + 5,116,0,0,451,454,3,140,70,0,452,454,5,166,0,0,453,451,1,0,0,0,453, + 452,1,0,0,0,454,1127,1,0,0,0,455,456,5,6,0,0,456,459,5,244,0,0,457, + 458,5,102,0,0,458,460,5,77,0,0,459,457,1,0,0,0,459,460,1,0,0,0,460, + 461,1,0,0,0,461,462,3,220,110,0,462,463,5,206,0,0,463,464,5,253, + 0,0,464,465,3,220,110,0,465,1127,1,0,0,0,466,467,5,6,0,0,467,470, + 5,244,0,0,468,469,5,102,0,0,469,471,5,77,0,0,470,468,1,0,0,0,470, + 471,1,0,0,0,471,472,1,0,0,0,472,473,3,220,110,0,473,474,5,2,0,0, + 474,478,5,27,0,0,475,476,5,102,0,0,476,477,5,165,0,0,477,479,5,77, + 0,0,478,475,1,0,0,0,478,479,1,0,0,0,479,480,1,0,0,0,480,481,3,16, + 8,0,481,1127,1,0,0,0,482,483,5,6,0,0,483,486,5,244,0,0,484,485,5, + 102,0,0,485,487,5,77,0,0,486,484,1,0,0,0,486,487,1,0,0,0,487,488, + 1,0,0,0,488,489,3,220,110,0,489,490,5,206,0,0,490,493,5,27,0,0,491, + 492,5,102,0,0,492,494,5,77,0,0,493,491,1,0,0,0,493,494,1,0,0,0,494, + 495,1,0,0,0,495,496,3,220,110,0,496,497,5,253,0,0,497,498,3,232, + 116,0,498,1127,1,0,0,0,499,500,5,6,0,0,500,503,5,244,0,0,501,502, + 5,102,0,0,502,504,5,77,0,0,503,501,1,0,0,0,503,504,1,0,0,0,504,505, + 1,0,0,0,505,506,3,220,110,0,506,507,5,66,0,0,507,510,5,27,0,0,508, + 509,5,102,0,0,509,511,5,77,0,0,510,508,1,0,0,0,510,511,1,0,0,0,511, + 512,1,0,0,0,512,513,3,220,110,0,513,1127,1,0,0,0,514,515,5,6,0,0, + 515,518,5,244,0,0,516,517,5,102,0,0,517,519,5,77,0,0,518,516,1,0, + 0,0,518,519,1,0,0,0,519,520,1,0,0,0,520,521,3,220,110,0,521,522, + 5,6,0,0,522,523,5,27,0,0,523,524,3,220,110,0,524,525,5,234,0,0,525, + 526,5,48,0,0,526,527,5,260,0,0,527,528,3,156,78,0,528,1127,1,0,0, + 0,529,530,5,6,0,0,530,531,5,244,0,0,531,532,3,220,110,0,532,533, + 5,234,0,0,533,534,5,14,0,0,534,535,3,228,114,0,535,1127,1,0,0,0, + 536,537,5,6,0,0,537,538,5,244,0,0,538,539,3,220,110,0,539,540,5, + 234,0,0,540,541,5,199,0,0,541,542,3,22,11,0,542,1127,1,0,0,0,543, + 544,5,6,0,0,544,545,5,244,0,0,545,546,3,220,110,0,546,547,5,76,0, + 0,547,560,3,232,116,0,548,557,5,313,0,0,549,554,3,190,95,0,550,551, + 5,312,0,0,551,553,3,190,95,0,552,550,1,0,0,0,553,556,1,0,0,0,554, + 552,1,0,0,0,554,555,1,0,0,0,555,558,1,0,0,0,556,554,1,0,0,0,557, + 549,1,0,0,0,557,558,1,0,0,0,558,559,1,0,0,0,559,561,5,314,0,0,560, + 548,1,0,0,0,560,561,1,0,0,0,561,564,1,0,0,0,562,563,5,285,0,0,563, + 565,3,110,55,0,564,562,1,0,0,0,564,565,1,0,0,0,565,1127,1,0,0,0, + 566,567,5,7,0,0,567,570,3,220,110,0,568,569,5,288,0,0,569,571,3, + 20,10,0,570,568,1,0,0,0,570,571,1,0,0,0,571,1127,1,0,0,0,572,575, + 5,36,0,0,573,574,5,177,0,0,574,576,5,209,0,0,575,573,1,0,0,0,575, + 576,1,0,0,0,576,577,1,0,0,0,577,578,5,150,0,0,578,582,5,283,0,0, + 579,580,5,102,0,0,580,581,5,165,0,0,581,583,5,77,0,0,582,579,1,0, + 0,0,582,583,1,0,0,0,583,584,1,0,0,0,584,588,3,220,110,0,585,586, + 5,92,0,0,586,587,5,191,0,0,587,589,3,150,75,0,588,585,1,0,0,0,588, + 589,1,0,0,0,589,592,1,0,0,0,590,591,5,29,0,0,591,593,3,140,70,0, + 592,590,1,0,0,0,592,593,1,0,0,0,593,596,1,0,0,0,594,595,5,288,0, + 0,595,597,3,20,10,0,596,594,1,0,0,0,596,597,1,0,0,0,597,598,1,0, + 0,0,598,599,5,11,0,0,599,600,3,6,3,0,600,1127,1,0,0,0,601,604,5, + 36,0,0,602,603,5,177,0,0,603,605,5,209,0,0,604,602,1,0,0,0,604,605, + 1,0,0,0,605,606,1,0,0,0,606,607,5,283,0,0,607,610,3,220,110,0,608, + 609,5,29,0,0,609,611,3,140,70,0,610,608,1,0,0,0,610,611,1,0,0,0, + 611,614,1,0,0,0,612,613,5,229,0,0,613,615,7,1,0,0,614,612,1,0,0, + 0,614,615,1,0,0,0,615,616,1,0,0,0,616,617,5,11,0,0,617,618,3,6,3, + 0,618,1127,1,0,0,0,619,620,5,205,0,0,620,621,5,150,0,0,621,622,5, + 283,0,0,622,1127,3,220,110,0,623,624,5,66,0,0,624,625,5,150,0,0, + 625,628,5,283,0,0,626,627,5,102,0,0,627,629,5,77,0,0,628,626,1,0, + 0,0,628,629,1,0,0,0,629,630,1,0,0,0,630,1127,3,220,110,0,631,632, + 5,6,0,0,632,633,5,150,0,0,633,636,5,283,0,0,634,635,5,102,0,0,635, + 637,5,77,0,0,636,634,1,0,0,0,636,637,1,0,0,0,637,638,1,0,0,0,638, + 639,3,220,110,0,639,640,5,206,0,0,640,641,5,253,0,0,641,642,3,220, + 110,0,642,1127,1,0,0,0,643,644,5,6,0,0,644,645,5,150,0,0,645,646, + 5,283,0,0,646,647,3,220,110,0,647,648,5,234,0,0,648,649,5,199,0, + 0,649,650,3,22,11,0,650,1127,1,0,0,0,651,652,5,66,0,0,652,655,5, + 283,0,0,653,654,5,102,0,0,654,656,5,77,0,0,655,653,1,0,0,0,655,656, + 1,0,0,0,656,657,1,0,0,0,657,1127,3,220,110,0,658,659,5,6,0,0,659, + 660,5,283,0,0,660,661,3,220,110,0,661,662,5,206,0,0,662,663,5,253, + 0,0,663,664,3,220,110,0,664,1127,1,0,0,0,665,666,5,6,0,0,666,667, + 5,283,0,0,667,668,3,220,110,0,668,669,5,234,0,0,669,670,5,14,0,0, + 670,671,3,228,114,0,671,1127,1,0,0,0,672,673,5,20,0,0,673,674,3, + 220,110,0,674,683,5,313,0,0,675,680,3,190,95,0,676,677,5,312,0,0, + 677,679,3,190,95,0,678,676,1,0,0,0,679,682,1,0,0,0,680,678,1,0,0, + 0,680,681,1,0,0,0,681,684,1,0,0,0,682,680,1,0,0,0,683,675,1,0,0, + 0,683,684,1,0,0,0,684,685,1,0,0,0,685,686,5,314,0,0,686,1127,1,0, + 0,0,687,690,5,36,0,0,688,689,5,177,0,0,689,691,5,209,0,0,690,688, + 1,0,0,0,690,691,1,0,0,0,691,692,1,0,0,0,692,1127,3,196,98,0,693, + 694,5,66,0,0,694,697,5,90,0,0,695,696,5,102,0,0,696,698,5,77,0,0, + 697,695,1,0,0,0,697,698,1,0,0,0,698,699,1,0,0,0,699,1127,3,198,99, + 0,700,701,5,36,0,0,701,702,5,218,0,0,702,706,3,232,116,0,703,704, + 5,288,0,0,704,705,5,3,0,0,705,707,3,226,113,0,706,703,1,0,0,0,706, + 707,1,0,0,0,707,710,1,0,0,0,708,709,5,105,0,0,709,711,3,232,116, + 0,710,708,1,0,0,0,710,711,1,0,0,0,711,1127,1,0,0,0,712,713,5,66, + 0,0,713,714,5,218,0,0,714,717,3,232,116,0,715,716,5,105,0,0,716, + 718,3,232,116,0,717,715,1,0,0,0,717,718,1,0,0,0,718,1127,1,0,0,0, + 719,720,5,93,0,0,720,721,3,230,115,0,721,722,5,253,0,0,722,727,3, + 228,114,0,723,724,5,312,0,0,724,726,3,228,114,0,725,723,1,0,0,0, + 726,729,1,0,0,0,727,725,1,0,0,0,727,728,1,0,0,0,728,733,1,0,0,0, + 729,727,1,0,0,0,730,731,5,288,0,0,731,732,5,3,0,0,732,734,5,176, + 0,0,733,730,1,0,0,0,733,734,1,0,0,0,734,738,1,0,0,0,735,736,5,94, + 0,0,736,737,5,19,0,0,737,739,3,226,113,0,738,735,1,0,0,0,738,739, + 1,0,0,0,739,742,1,0,0,0,740,741,5,105,0,0,741,743,3,232,116,0,742, + 740,1,0,0,0,742,743,1,0,0,0,743,1127,1,0,0,0,744,748,5,216,0,0,745, + 746,5,3,0,0,746,747,5,176,0,0,747,749,5,86,0,0,748,745,1,0,0,0,748, + 749,1,0,0,0,749,750,1,0,0,0,750,751,3,230,115,0,751,752,5,88,0,0, + 752,757,3,228,114,0,753,754,5,312,0,0,754,756,3,228,114,0,755,753, + 1,0,0,0,756,759,1,0,0,0,757,755,1,0,0,0,757,758,1,0,0,0,758,763, + 1,0,0,0,759,757,1,0,0,0,760,761,5,94,0,0,761,762,5,19,0,0,762,764, + 3,226,113,0,763,760,1,0,0,0,763,764,1,0,0,0,764,767,1,0,0,0,765, + 766,5,105,0,0,766,768,3,232,116,0,767,765,1,0,0,0,767,768,1,0,0, + 0,768,1127,1,0,0,0,769,770,5,234,0,0,770,774,5,218,0,0,771,775,5, + 5,0,0,772,775,5,163,0,0,773,775,3,232,116,0,774,771,1,0,0,0,774, + 772,1,0,0,0,774,773,1,0,0,0,775,778,1,0,0,0,776,777,5,105,0,0,777, + 779,3,232,116,0,778,776,1,0,0,0,778,779,1,0,0,0,779,1127,1,0,0,0, + 780,791,5,93,0,0,781,786,3,218,109,0,782,783,5,312,0,0,783,785,3, + 218,109,0,784,782,1,0,0,0,785,788,1,0,0,0,786,784,1,0,0,0,786,787, + 1,0,0,0,787,792,1,0,0,0,788,786,1,0,0,0,789,790,5,5,0,0,790,792, + 5,198,0,0,791,781,1,0,0,0,791,789,1,0,0,0,792,793,1,0,0,0,793,795, + 5,173,0,0,794,796,7,2,0,0,795,794,1,0,0,0,795,796,1,0,0,0,796,797, + 1,0,0,0,797,798,3,220,110,0,798,799,5,253,0,0,799,803,3,228,114, + 0,800,801,5,288,0,0,801,802,5,93,0,0,802,804,5,176,0,0,803,800,1, + 0,0,0,803,804,1,0,0,0,804,1127,1,0,0,0,805,816,5,57,0,0,806,811, + 3,218,109,0,807,808,5,312,0,0,808,810,3,218,109,0,809,807,1,0,0, + 0,810,813,1,0,0,0,811,809,1,0,0,0,811,812,1,0,0,0,812,817,1,0,0, + 0,813,811,1,0,0,0,814,815,5,5,0,0,815,817,5,198,0,0,816,806,1,0, + 0,0,816,814,1,0,0,0,817,818,1,0,0,0,818,820,5,173,0,0,819,821,7, + 2,0,0,820,819,1,0,0,0,820,821,1,0,0,0,821,822,1,0,0,0,822,823,3, + 220,110,0,823,824,5,253,0,0,824,825,3,228,114,0,825,1127,1,0,0,0, + 826,830,5,216,0,0,827,828,5,93,0,0,828,829,5,176,0,0,829,831,5,86, + 0,0,830,827,1,0,0,0,830,831,1,0,0,0,831,842,1,0,0,0,832,837,3,218, + 109,0,833,834,5,312,0,0,834,836,3,218,109,0,835,833,1,0,0,0,836, + 839,1,0,0,0,837,835,1,0,0,0,837,838,1,0,0,0,838,843,1,0,0,0,839, + 837,1,0,0,0,840,841,5,5,0,0,841,843,5,198,0,0,842,832,1,0,0,0,842, + 840,1,0,0,0,843,844,1,0,0,0,844,846,5,173,0,0,845,847,7,2,0,0,846, + 845,1,0,0,0,846,847,1,0,0,0,847,848,1,0,0,0,848,849,3,220,110,0, + 849,850,5,88,0,0,850,851,3,228,114,0,851,1127,1,0,0,0,852,853,5, + 236,0,0,853,859,5,95,0,0,854,856,5,173,0,0,855,857,5,244,0,0,856, + 855,1,0,0,0,856,857,1,0,0,0,857,858,1,0,0,0,858,860,3,220,110,0, + 859,854,1,0,0,0,859,860,1,0,0,0,860,1127,1,0,0,0,861,873,5,78,0, + 0,862,863,5,313,0,0,863,868,3,184,92,0,864,865,5,312,0,0,865,867, + 3,184,92,0,866,864,1,0,0,0,867,870,1,0,0,0,868,866,1,0,0,0,868,869, + 1,0,0,0,869,871,1,0,0,0,870,868,1,0,0,0,871,872,5,314,0,0,872,874, + 1,0,0,0,873,862,1,0,0,0,873,874,1,0,0,0,874,875,1,0,0,0,875,1127, + 3,4,2,0,876,877,5,78,0,0,877,879,5,7,0,0,878,880,5,281,0,0,879,878, + 1,0,0,0,879,880,1,0,0,0,880,881,1,0,0,0,881,1127,3,4,2,0,882,883, + 5,236,0,0,883,884,5,36,0,0,884,885,5,244,0,0,885,1127,3,220,110, + 0,886,887,5,236,0,0,887,888,5,36,0,0,888,889,5,226,0,0,889,1127, + 3,220,110,0,890,891,5,236,0,0,891,892,5,36,0,0,892,893,5,283,0,0, + 893,1127,3,220,110,0,894,895,5,236,0,0,895,896,5,36,0,0,896,897, + 5,150,0,0,897,898,5,283,0,0,898,1127,3,220,110,0,899,900,5,236,0, + 0,900,903,5,245,0,0,901,902,7,3,0,0,902,904,3,220,110,0,903,901, + 1,0,0,0,903,904,1,0,0,0,904,911,1,0,0,0,905,906,5,137,0,0,906,909, + 3,140,70,0,907,908,5,73,0,0,908,910,3,140,70,0,909,907,1,0,0,0,909, + 910,1,0,0,0,910,912,1,0,0,0,911,905,1,0,0,0,911,912,1,0,0,0,912, + 1127,1,0,0,0,913,914,5,236,0,0,914,917,5,227,0,0,915,916,7,3,0,0, + 916,918,3,232,116,0,917,915,1,0,0,0,917,918,1,0,0,0,918,925,1,0, + 0,0,919,920,5,137,0,0,920,923,3,140,70,0,921,922,5,73,0,0,922,924, + 3,140,70,0,923,921,1,0,0,0,923,924,1,0,0,0,924,926,1,0,0,0,925,919, + 1,0,0,0,925,926,1,0,0,0,926,1127,1,0,0,0,927,928,5,236,0,0,928,935, + 5,26,0,0,929,930,5,137,0,0,930,933,3,140,70,0,931,932,5,73,0,0,932, + 934,3,140,70,0,933,931,1,0,0,0,933,934,1,0,0,0,934,936,1,0,0,0,935, + 929,1,0,0,0,935,936,1,0,0,0,936,1127,1,0,0,0,937,938,5,236,0,0,938, + 939,5,28,0,0,939,941,7,3,0,0,940,942,3,220,110,0,941,940,1,0,0,0, + 941,942,1,0,0,0,942,949,1,0,0,0,943,944,5,137,0,0,944,947,3,140, + 70,0,945,946,5,73,0,0,946,948,3,140,70,0,947,945,1,0,0,0,947,948, + 1,0,0,0,948,950,1,0,0,0,949,943,1,0,0,0,949,950,1,0,0,0,950,1127, + 1,0,0,0,951,952,5,236,0,0,952,953,5,240,0,0,953,954,5,86,0,0,954, + 1127,3,220,110,0,955,956,5,236,0,0,956,957,5,240,0,0,957,958,5,86, + 0,0,958,959,5,313,0,0,959,960,3,6,3,0,960,961,5,314,0,0,961,1127, + 1,0,0,0,962,964,5,236,0,0,963,965,5,39,0,0,964,963,1,0,0,0,964,965, + 1,0,0,0,965,966,1,0,0,0,966,969,5,219,0,0,967,968,7,3,0,0,968,970, + 3,232,116,0,969,967,1,0,0,0,969,970,1,0,0,0,970,1127,1,0,0,0,971, + 972,5,236,0,0,972,973,5,218,0,0,973,976,5,95,0,0,974,975,7,3,0,0, + 975,977,3,232,116,0,976,974,1,0,0,0,976,977,1,0,0,0,977,1127,1,0, + 0,0,978,979,5,59,0,0,979,1127,3,220,110,0,980,981,5,58,0,0,981,1127, + 3,220,110,0,982,983,5,236,0,0,983,986,5,91,0,0,984,985,7,3,0,0,985, + 987,3,220,110,0,986,984,1,0,0,0,986,987,1,0,0,0,987,994,1,0,0,0, + 988,989,5,137,0,0,989,992,3,140,70,0,990,991,5,73,0,0,991,993,3, + 140,70,0,992,990,1,0,0,0,992,993,1,0,0,0,993,995,1,0,0,0,994,988, + 1,0,0,0,994,995,1,0,0,0,995,1127,1,0,0,0,996,997,5,236,0,0,997,1004, + 5,233,0,0,998,999,5,137,0,0,999,1002,3,140,70,0,1000,1001,5,73,0, + 0,1001,1003,3,140,70,0,1002,1000,1,0,0,0,1002,1003,1,0,0,0,1003, + 1005,1,0,0,0,1004,998,1,0,0,0,1004,1005,1,0,0,0,1005,1127,1,0,0, + 0,1006,1007,5,234,0,0,1007,1008,5,233,0,0,1008,1009,5,14,0,0,1009, + 1127,3,236,118,0,1010,1011,5,210,0,0,1011,1012,5,233,0,0,1012,1127, + 5,14,0,0,1013,1014,5,234,0,0,1014,1015,5,233,0,0,1015,1016,3,220, + 110,0,1016,1017,5,296,0,0,1017,1018,3,108,54,0,1018,1127,1,0,0,0, + 1019,1020,5,210,0,0,1020,1021,5,233,0,0,1021,1127,3,220,110,0,1022, + 1023,5,239,0,0,1023,1032,5,255,0,0,1024,1029,3,186,93,0,1025,1026, + 5,312,0,0,1026,1028,3,186,93,0,1027,1025,1,0,0,0,1028,1031,1,0,0, + 0,1029,1027,1,0,0,0,1029,1030,1,0,0,0,1030,1033,1,0,0,0,1031,1029, + 1,0,0,0,1032,1024,1,0,0,0,1032,1033,1,0,0,0,1033,1127,1,0,0,0,1034, + 1036,5,30,0,0,1035,1037,5,291,0,0,1036,1035,1,0,0,0,1036,1037,1, + 0,0,0,1037,1127,1,0,0,0,1038,1040,5,220,0,0,1039,1041,5,291,0,0, + 1040,1039,1,0,0,0,1040,1041,1,0,0,0,1041,1127,1,0,0,0,1042,1043, + 5,197,0,0,1043,1044,3,232,116,0,1044,1045,5,88,0,0,1045,1046,3,4, + 2,0,1046,1127,1,0,0,0,1047,1048,5,51,0,0,1048,1049,5,197,0,0,1049, + 1127,3,232,116,0,1050,1051,5,76,0,0,1051,1061,3,232,116,0,1052,1053, + 5,274,0,0,1053,1058,3,108,54,0,1054,1055,5,312,0,0,1055,1057,3,108, + 54,0,1056,1054,1,0,0,0,1057,1060,1,0,0,0,1058,1056,1,0,0,0,1058, + 1059,1,0,0,0,1059,1062,1,0,0,0,1060,1058,1,0,0,0,1061,1052,1,0,0, + 0,1061,1062,1,0,0,0,1062,1127,1,0,0,0,1063,1064,5,76,0,0,1064,1065, + 5,104,0,0,1065,1075,3,140,70,0,1066,1067,5,274,0,0,1067,1072,3,108, + 54,0,1068,1069,5,312,0,0,1069,1071,3,108,54,0,1070,1068,1,0,0,0, + 1071,1074,1,0,0,0,1072,1070,1,0,0,0,1072,1073,1,0,0,0,1073,1076, + 1,0,0,0,1074,1072,1,0,0,0,1075,1066,1,0,0,0,1075,1076,1,0,0,0,1076, + 1127,1,0,0,0,1077,1078,5,59,0,0,1078,1079,5,109,0,0,1079,1127,3, + 232,116,0,1080,1081,5,59,0,0,1081,1082,5,181,0,0,1082,1127,3,232, + 116,0,1083,1084,5,234,0,0,1084,1085,5,188,0,0,1085,1127,3,194,97, + 0,1086,1087,5,234,0,0,1087,1088,5,251,0,0,1088,1091,5,295,0,0,1089, + 1092,5,140,0,0,1090,1092,3,108,54,0,1091,1089,1,0,0,0,1091,1090, + 1,0,0,0,1092,1127,1,0,0,0,1093,1094,5,271,0,0,1094,1095,3,220,110, + 0,1095,1096,5,234,0,0,1096,1101,3,182,91,0,1097,1098,5,312,0,0,1098, + 1100,3,182,91,0,1099,1097,1,0,0,0,1100,1103,1,0,0,0,1101,1099,1, + 0,0,0,1101,1102,1,0,0,0,1102,1106,1,0,0,0,1103,1101,1,0,0,0,1104, + 1105,5,285,0,0,1105,1107,3,110,55,0,1106,1104,1,0,0,0,1106,1107, + 1,0,0,0,1107,1127,1,0,0,0,1108,1109,5,152,0,0,1109,1110,5,113,0, + 0,1110,1115,3,220,110,0,1111,1113,5,11,0,0,1112,1111,1,0,0,0,1112, + 1113,1,0,0,0,1113,1114,1,0,0,0,1114,1116,3,232,116,0,1115,1112,1, + 0,0,0,1115,1116,1,0,0,0,1116,1117,1,0,0,0,1117,1118,5,274,0,0,1118, + 1119,3,58,29,0,1119,1120,5,173,0,0,1120,1122,3,108,54,0,1121,1123, + 3,166,83,0,1122,1121,1,0,0,0,1123,1124,1,0,0,0,1124,1122,1,0,0,0, + 1124,1125,1,0,0,0,1125,1127,1,0,0,0,1126,255,1,0,0,0,1126,256,1, + 0,0,0,1126,258,1,0,0,0,1126,263,1,0,0,0,1126,285,1,0,0,0,1126,295, + 1,0,0,0,1126,311,1,0,0,0,1126,321,1,0,0,0,1126,328,1,0,0,0,1126, + 335,1,0,0,0,1126,373,1,0,0,0,1126,403,1,0,0,0,1126,410,1,0,0,0,1126, + 418,1,0,0,0,1126,425,1,0,0,0,1126,428,1,0,0,0,1126,437,1,0,0,0,1126, + 446,1,0,0,0,1126,455,1,0,0,0,1126,466,1,0,0,0,1126,482,1,0,0,0,1126, + 499,1,0,0,0,1126,514,1,0,0,0,1126,529,1,0,0,0,1126,536,1,0,0,0,1126, + 543,1,0,0,0,1126,566,1,0,0,0,1126,572,1,0,0,0,1126,601,1,0,0,0,1126, + 619,1,0,0,0,1126,623,1,0,0,0,1126,631,1,0,0,0,1126,643,1,0,0,0,1126, + 651,1,0,0,0,1126,658,1,0,0,0,1126,665,1,0,0,0,1126,672,1,0,0,0,1126, + 687,1,0,0,0,1126,693,1,0,0,0,1126,700,1,0,0,0,1126,712,1,0,0,0,1126, + 719,1,0,0,0,1126,744,1,0,0,0,1126,769,1,0,0,0,1126,780,1,0,0,0,1126, + 805,1,0,0,0,1126,826,1,0,0,0,1126,852,1,0,0,0,1126,861,1,0,0,0,1126, + 876,1,0,0,0,1126,882,1,0,0,0,1126,886,1,0,0,0,1126,890,1,0,0,0,1126, + 894,1,0,0,0,1126,899,1,0,0,0,1126,913,1,0,0,0,1126,927,1,0,0,0,1126, + 937,1,0,0,0,1126,951,1,0,0,0,1126,955,1,0,0,0,1126,962,1,0,0,0,1126, + 971,1,0,0,0,1126,978,1,0,0,0,1126,980,1,0,0,0,1126,982,1,0,0,0,1126, + 996,1,0,0,0,1126,1006,1,0,0,0,1126,1010,1,0,0,0,1126,1013,1,0,0, + 0,1126,1019,1,0,0,0,1126,1022,1,0,0,0,1126,1034,1,0,0,0,1126,1038, + 1,0,0,0,1126,1042,1,0,0,0,1126,1047,1,0,0,0,1126,1050,1,0,0,0,1126, + 1063,1,0,0,0,1126,1077,1,0,0,0,1126,1080,1,0,0,0,1126,1083,1,0,0, + 0,1126,1086,1,0,0,0,1126,1093,1,0,0,0,1126,1108,1,0,0,0,1127,5,1, + 0,0,0,1128,1130,3,8,4,0,1129,1128,1,0,0,0,1129,1130,1,0,0,0,1130, + 1131,1,0,0,0,1131,1132,3,10,5,0,1132,7,1,0,0,0,1133,1134,5,288,0, + 0,1134,1139,3,196,98,0,1135,1136,5,312,0,0,1136,1138,3,196,98,0, + 1137,1135,1,0,0,0,1138,1141,1,0,0,0,1139,1137,1,0,0,0,1139,1140, + 1,0,0,0,1140,9,1,0,0,0,1141,1139,1,0,0,0,1142,1144,3,12,6,0,1143, + 1142,1,0,0,0,1143,1144,1,0,0,0,1144,1145,1,0,0,0,1145,1146,3,28, + 14,0,1146,11,1,0,0,0,1147,1149,5,288,0,0,1148,1150,5,204,0,0,1149, + 1148,1,0,0,0,1149,1150,1,0,0,0,1150,1151,1,0,0,0,1151,1156,3,52, + 26,0,1152,1153,5,312,0,0,1153,1155,3,52,26,0,1154,1152,1,0,0,0,1155, + 1158,1,0,0,0,1156,1154,1,0,0,0,1156,1157,1,0,0,0,1157,13,1,0,0,0, + 1158,1156,1,0,0,0,1159,1162,3,16,8,0,1160,1162,3,18,9,0,1161,1159, + 1,0,0,0,1161,1160,1,0,0,0,1162,15,1,0,0,0,1163,1164,3,232,116,0, + 1164,1167,3,156,78,0,1165,1166,5,165,0,0,1166,1168,5,166,0,0,1167, + 1165,1,0,0,0,1167,1168,1,0,0,0,1168,1171,1,0,0,0,1169,1170,5,29, + 0,0,1170,1172,3,140,70,0,1171,1169,1,0,0,0,1171,1172,1,0,0,0,1172, + 1175,1,0,0,0,1173,1174,5,288,0,0,1174,1176,3,20,10,0,1175,1173,1, + 0,0,0,1175,1176,1,0,0,0,1176,17,1,0,0,0,1177,1178,5,137,0,0,1178, + 1181,3,220,110,0,1179,1180,7,4,0,0,1180,1182,5,199,0,0,1181,1179, + 1,0,0,0,1181,1182,1,0,0,0,1182,19,1,0,0,0,1183,1184,5,313,0,0,1184, + 1185,3,22,11,0,1185,1186,5,314,0,0,1186,21,1,0,0,0,1187,1192,3,24, + 12,0,1188,1189,5,312,0,0,1189,1191,3,24,12,0,1190,1188,1,0,0,0,1191, + 1194,1,0,0,0,1192,1190,1,0,0,0,1192,1193,1,0,0,0,1193,23,1,0,0,0, + 1194,1192,1,0,0,0,1195,1196,3,232,116,0,1196,1197,5,296,0,0,1197, + 1198,3,26,13,0,1198,25,1,0,0,0,1199,1202,5,53,0,0,1200,1202,3,108, + 54,0,1201,1199,1,0,0,0,1201,1200,1,0,0,0,1202,27,1,0,0,0,1203,1214, + 3,34,17,0,1204,1205,5,178,0,0,1205,1206,5,19,0,0,1206,1211,3,38, + 19,0,1207,1208,5,312,0,0,1208,1210,3,38,19,0,1209,1207,1,0,0,0,1210, + 1213,1,0,0,0,1211,1209,1,0,0,0,1211,1212,1,0,0,0,1212,1215,1,0,0, + 0,1213,1211,1,0,0,0,1214,1204,1,0,0,0,1214,1215,1,0,0,0,1215,1221, + 1,0,0,0,1216,1217,5,171,0,0,1217,1219,3,32,16,0,1218,1220,7,5,0, + 0,1219,1218,1,0,0,0,1219,1220,1,0,0,0,1220,1222,1,0,0,0,1221,1216, + 1,0,0,0,1221,1222,1,0,0,0,1222,1236,1,0,0,0,1223,1224,5,138,0,0, + 1224,1237,3,30,15,0,1225,1226,5,81,0,0,1226,1228,7,6,0,0,1227,1229, + 3,32,16,0,1228,1227,1,0,0,0,1228,1229,1,0,0,0,1229,1230,1,0,0,0, + 1230,1234,7,5,0,0,1231,1235,5,175,0,0,1232,1233,5,288,0,0,1233,1235, + 5,250,0,0,1234,1231,1,0,0,0,1234,1232,1,0,0,0,1235,1237,1,0,0,0, + 1236,1223,1,0,0,0,1236,1225,1,0,0,0,1236,1237,1,0,0,0,1237,29,1, + 0,0,0,1238,1241,5,5,0,0,1239,1241,3,32,16,0,1240,1238,1,0,0,0,1240, + 1239,1,0,0,0,1241,31,1,0,0,0,1242,1243,7,7,0,0,1243,33,1,0,0,0,1244, + 1245,6,17,-1,0,1245,1246,3,36,18,0,1246,1261,1,0,0,0,1247,1248,10, + 2,0,0,1248,1250,5,111,0,0,1249,1251,3,54,27,0,1250,1249,1,0,0,0, + 1250,1251,1,0,0,0,1251,1252,1,0,0,0,1252,1260,3,34,17,3,1253,1254, + 10,1,0,0,1254,1256,7,8,0,0,1255,1257,3,54,27,0,1256,1255,1,0,0,0, + 1256,1257,1,0,0,0,1257,1258,1,0,0,0,1258,1260,3,34,17,2,1259,1247, + 1,0,0,0,1259,1253,1,0,0,0,1260,1263,1,0,0,0,1261,1259,1,0,0,0,1261, + 1262,1,0,0,0,1262,35,1,0,0,0,1263,1261,1,0,0,0,1264,1281,3,40,20, + 0,1265,1266,5,244,0,0,1266,1281,3,220,110,0,1267,1268,5,280,0,0, + 1268,1273,3,108,54,0,1269,1270,5,312,0,0,1270,1272,3,108,54,0,1271, + 1269,1,0,0,0,1272,1275,1,0,0,0,1273,1271,1,0,0,0,1273,1274,1,0,0, + 0,1274,1281,1,0,0,0,1275,1273,1,0,0,0,1276,1277,5,313,0,0,1277,1278, + 3,28,14,0,1278,1279,5,314,0,0,1279,1281,1,0,0,0,1280,1264,1,0,0, + 0,1280,1265,1,0,0,0,1280,1267,1,0,0,0,1280,1276,1,0,0,0,1281,37, + 1,0,0,0,1282,1284,3,108,54,0,1283,1285,7,9,0,0,1284,1283,1,0,0,0, + 1284,1285,1,0,0,0,1285,1288,1,0,0,0,1286,1287,5,168,0,0,1287,1289, + 7,10,0,0,1288,1286,1,0,0,0,1288,1289,1,0,0,0,1289,39,1,0,0,0,1290, + 1292,5,231,0,0,1291,1293,3,54,27,0,1292,1291,1,0,0,0,1292,1293,1, + 0,0,0,1293,1294,1,0,0,0,1294,1299,3,56,28,0,1295,1296,5,312,0,0, + 1296,1298,3,56,28,0,1297,1295,1,0,0,0,1298,1301,1,0,0,0,1299,1297, + 1,0,0,0,1299,1300,1,0,0,0,1300,1311,1,0,0,0,1301,1299,1,0,0,0,1302, + 1303,5,88,0,0,1303,1308,3,58,29,0,1304,1305,5,312,0,0,1305,1307, + 3,58,29,0,1306,1304,1,0,0,0,1307,1310,1,0,0,0,1308,1306,1,0,0,0, + 1308,1309,1,0,0,0,1309,1312,1,0,0,0,1310,1308,1,0,0,0,1311,1302, + 1,0,0,0,1311,1312,1,0,0,0,1312,1315,1,0,0,0,1313,1314,5,285,0,0, + 1314,1316,3,110,55,0,1315,1313,1,0,0,0,1315,1316,1,0,0,0,1316,1320, + 1,0,0,0,1317,1318,5,97,0,0,1318,1319,5,19,0,0,1319,1321,3,42,21, + 0,1320,1317,1,0,0,0,1320,1321,1,0,0,0,1321,1324,1,0,0,0,1322,1323, + 5,100,0,0,1323,1325,3,110,55,0,1324,1322,1,0,0,0,1324,1325,1,0,0, + 0,1325,1335,1,0,0,0,1326,1327,5,287,0,0,1327,1332,3,48,24,0,1328, + 1329,5,312,0,0,1329,1331,3,48,24,0,1330,1328,1,0,0,0,1331,1334,1, + 0,0,0,1332,1330,1,0,0,0,1332,1333,1,0,0,0,1333,1336,1,0,0,0,1334, + 1332,1,0,0,0,1335,1326,1,0,0,0,1335,1336,1,0,0,0,1336,41,1,0,0,0, + 1337,1339,3,54,27,0,1338,1337,1,0,0,0,1338,1339,1,0,0,0,1339,1340, + 1,0,0,0,1340,1345,3,44,22,0,1341,1342,5,312,0,0,1342,1344,3,44,22, + 0,1343,1341,1,0,0,0,1344,1347,1,0,0,0,1345,1343,1,0,0,0,1345,1346, + 1,0,0,0,1346,43,1,0,0,0,1347,1345,1,0,0,0,1348,1389,3,46,23,0,1349, + 1350,5,221,0,0,1350,1359,5,313,0,0,1351,1356,3,108,54,0,1352,1353, + 5,312,0,0,1353,1355,3,108,54,0,1354,1352,1,0,0,0,1355,1358,1,0,0, + 0,1356,1354,1,0,0,0,1356,1357,1,0,0,0,1357,1360,1,0,0,0,1358,1356, + 1,0,0,0,1359,1351,1,0,0,0,1359,1360,1,0,0,0,1360,1361,1,0,0,0,1361, + 1389,5,314,0,0,1362,1363,5,38,0,0,1363,1372,5,313,0,0,1364,1369, + 3,108,54,0,1365,1366,5,312,0,0,1366,1368,3,108,54,0,1367,1365,1, + 0,0,0,1368,1371,1,0,0,0,1369,1367,1,0,0,0,1369,1370,1,0,0,0,1370, + 1373,1,0,0,0,1371,1369,1,0,0,0,1372,1364,1,0,0,0,1372,1373,1,0,0, + 0,1373,1374,1,0,0,0,1374,1389,5,314,0,0,1375,1376,5,98,0,0,1376, + 1377,5,235,0,0,1377,1378,5,313,0,0,1378,1383,3,46,23,0,1379,1380, + 5,312,0,0,1380,1382,3,46,23,0,1381,1379,1,0,0,0,1382,1385,1,0,0, + 0,1383,1381,1,0,0,0,1383,1384,1,0,0,0,1384,1386,1,0,0,0,1385,1383, + 1,0,0,0,1386,1387,5,314,0,0,1387,1389,1,0,0,0,1388,1348,1,0,0,0, + 1388,1349,1,0,0,0,1388,1362,1,0,0,0,1388,1375,1,0,0,0,1389,45,1, + 0,0,0,1390,1399,5,313,0,0,1391,1396,3,108,54,0,1392,1393,5,312,0, + 0,1393,1395,3,108,54,0,1394,1392,1,0,0,0,1395,1398,1,0,0,0,1396, + 1394,1,0,0,0,1396,1397,1,0,0,0,1397,1400,1,0,0,0,1398,1396,1,0,0, + 0,1399,1391,1,0,0,0,1399,1400,1,0,0,0,1400,1401,1,0,0,0,1401,1404, + 5,314,0,0,1402,1404,3,108,54,0,1403,1390,1,0,0,0,1403,1402,1,0,0, + 0,1404,47,1,0,0,0,1405,1406,3,232,116,0,1406,1407,5,11,0,0,1407, + 1408,5,313,0,0,1408,1409,3,50,25,0,1409,1410,5,314,0,0,1410,49,1, + 0,0,0,1411,1413,3,232,116,0,1412,1411,1,0,0,0,1412,1413,1,0,0,0, + 1413,1424,1,0,0,0,1414,1415,5,184,0,0,1415,1416,5,19,0,0,1416,1421, + 3,108,54,0,1417,1418,5,312,0,0,1418,1420,3,108,54,0,1419,1417,1, + 0,0,0,1420,1423,1,0,0,0,1421,1419,1,0,0,0,1421,1422,1,0,0,0,1422, + 1425,1,0,0,0,1423,1421,1,0,0,0,1424,1414,1,0,0,0,1424,1425,1,0,0, + 0,1425,1436,1,0,0,0,1426,1427,5,178,0,0,1427,1428,5,19,0,0,1428, + 1433,3,38,19,0,1429,1430,5,312,0,0,1430,1432,3,38,19,0,1431,1429, + 1,0,0,0,1432,1435,1,0,0,0,1433,1431,1,0,0,0,1433,1434,1,0,0,0,1434, + 1437,1,0,0,0,1435,1433,1,0,0,0,1436,1426,1,0,0,0,1436,1437,1,0,0, + 0,1437,1439,1,0,0,0,1438,1440,3,170,85,0,1439,1438,1,0,0,0,1439, + 1440,1,0,0,0,1440,51,1,0,0,0,1441,1443,3,232,116,0,1442,1444,3,90, + 45,0,1443,1442,1,0,0,0,1443,1444,1,0,0,0,1444,1445,1,0,0,0,1445, + 1446,5,11,0,0,1446,1447,5,313,0,0,1447,1448,3,10,5,0,1448,1449,5, + 314,0,0,1449,53,1,0,0,0,1450,1451,7,11,0,0,1451,55,1,0,0,0,1452, + 1457,3,108,54,0,1453,1455,5,11,0,0,1454,1453,1,0,0,0,1454,1455,1, + 0,0,0,1455,1456,1,0,0,0,1456,1458,3,232,116,0,1457,1454,1,0,0,0, + 1457,1458,1,0,0,0,1458,1468,1,0,0,0,1459,1460,3,116,58,0,1460,1461, + 5,310,0,0,1461,1464,5,304,0,0,1462,1463,5,11,0,0,1463,1465,3,90, + 45,0,1464,1462,1,0,0,0,1464,1465,1,0,0,0,1465,1468,1,0,0,0,1466, + 1468,5,304,0,0,1467,1452,1,0,0,0,1467,1459,1,0,0,0,1467,1466,1,0, + 0,0,1468,57,1,0,0,0,1469,1470,6,29,-1,0,1470,1471,3,64,32,0,1471, + 1490,1,0,0,0,1472,1486,10,2,0,0,1473,1474,5,37,0,0,1474,1475,5,119, + 0,0,1475,1487,3,64,32,0,1476,1477,3,60,30,0,1477,1478,5,119,0,0, + 1478,1479,3,58,29,0,1479,1480,3,62,31,0,1480,1487,1,0,0,0,1481,1482, + 5,155,0,0,1482,1483,3,60,30,0,1483,1484,5,119,0,0,1484,1485,3,64, + 32,0,1485,1487,1,0,0,0,1486,1473,1,0,0,0,1486,1476,1,0,0,0,1486, + 1481,1,0,0,0,1487,1489,1,0,0,0,1488,1472,1,0,0,0,1489,1492,1,0,0, + 0,1490,1488,1,0,0,0,1490,1491,1,0,0,0,1491,59,1,0,0,0,1492,1490, + 1,0,0,0,1493,1495,5,108,0,0,1494,1493,1,0,0,0,1494,1495,1,0,0,0, + 1495,1501,1,0,0,0,1496,1498,7,12,0,0,1497,1499,5,180,0,0,1498,1497, + 1,0,0,0,1498,1499,1,0,0,0,1499,1501,1,0,0,0,1500,1494,1,0,0,0,1500, + 1496,1,0,0,0,1501,61,1,0,0,0,1502,1503,5,173,0,0,1503,1517,3,110, + 55,0,1504,1505,5,274,0,0,1505,1506,5,313,0,0,1506,1511,3,232,116, + 0,1507,1508,5,312,0,0,1508,1510,3,232,116,0,1509,1507,1,0,0,0,1510, + 1513,1,0,0,0,1511,1509,1,0,0,0,1511,1512,1,0,0,0,1512,1514,1,0,0, + 0,1513,1511,1,0,0,0,1514,1515,5,314,0,0,1515,1517,1,0,0,0,1516,1502, + 1,0,0,0,1516,1504,1,0,0,0,1517,63,1,0,0,0,1518,1525,3,74,37,0,1519, + 1520,5,246,0,0,1520,1521,3,66,33,0,1521,1522,5,313,0,0,1522,1523, + 3,108,54,0,1523,1524,5,314,0,0,1524,1526,1,0,0,0,1525,1519,1,0,0, + 0,1525,1526,1,0,0,0,1526,65,1,0,0,0,1527,1528,7,13,0,0,1528,67,1, + 0,0,0,1529,1530,7,14,0,0,1530,69,1,0,0,0,1531,1538,5,72,0,0,1532, + 1534,5,258,0,0,1533,1535,3,140,70,0,1534,1533,1,0,0,0,1534,1535, + 1,0,0,0,1535,1536,1,0,0,0,1536,1538,3,72,36,0,1537,1531,1,0,0,0, + 1537,1532,1,0,0,0,1538,71,1,0,0,0,1539,1540,7,15,0,0,1540,1541,5, + 34,0,0,1541,73,1,0,0,0,1542,1625,3,88,44,0,1543,1544,5,149,0,0,1544, + 1555,5,313,0,0,1545,1546,5,184,0,0,1546,1547,5,19,0,0,1547,1552, + 3,108,54,0,1548,1549,5,312,0,0,1549,1551,3,108,54,0,1550,1548,1, + 0,0,0,1551,1554,1,0,0,0,1552,1550,1,0,0,0,1552,1553,1,0,0,0,1553, + 1556,1,0,0,0,1554,1552,1,0,0,0,1555,1545,1,0,0,0,1555,1556,1,0,0, + 0,1556,1567,1,0,0,0,1557,1558,5,178,0,0,1558,1559,5,19,0,0,1559, + 1564,3,38,19,0,1560,1561,5,312,0,0,1561,1563,3,38,19,0,1562,1560, + 1,0,0,0,1563,1566,1,0,0,0,1564,1562,1,0,0,0,1564,1565,1,0,0,0,1565, + 1568,1,0,0,0,1566,1564,1,0,0,0,1567,1557,1,0,0,0,1567,1568,1,0,0, + 0,1568,1578,1,0,0,0,1569,1570,5,151,0,0,1570,1575,3,76,38,0,1571, + 1572,5,312,0,0,1572,1574,3,76,38,0,1573,1571,1,0,0,0,1574,1577,1, + 0,0,0,1575,1573,1,0,0,0,1575,1576,1,0,0,0,1576,1579,1,0,0,0,1577, + 1575,1,0,0,0,1578,1569,1,0,0,0,1578,1579,1,0,0,0,1579,1581,1,0,0, + 0,1580,1582,3,78,39,0,1581,1580,1,0,0,0,1581,1582,1,0,0,0,1582,1586, + 1,0,0,0,1583,1584,5,4,0,0,1584,1585,5,146,0,0,1585,1587,3,82,41, + 0,1586,1583,1,0,0,0,1586,1587,1,0,0,0,1587,1589,1,0,0,0,1588,1590, + 7,16,0,0,1589,1588,1,0,0,0,1589,1590,1,0,0,0,1590,1591,1,0,0,0,1591, + 1592,5,189,0,0,1592,1593,5,313,0,0,1593,1594,3,176,88,0,1594,1604, + 5,314,0,0,1595,1596,5,241,0,0,1596,1601,3,84,42,0,1597,1598,5,312, + 0,0,1598,1600,3,84,42,0,1599,1597,1,0,0,0,1600,1603,1,0,0,0,1601, + 1599,1,0,0,0,1601,1602,1,0,0,0,1602,1605,1,0,0,0,1603,1601,1,0,0, + 0,1604,1595,1,0,0,0,1604,1605,1,0,0,0,1605,1606,1,0,0,0,1606,1607, + 5,54,0,0,1607,1612,3,86,43,0,1608,1609,5,312,0,0,1609,1611,3,86, + 43,0,1610,1608,1,0,0,0,1611,1614,1,0,0,0,1612,1610,1,0,0,0,1612, + 1613,1,0,0,0,1613,1615,1,0,0,0,1614,1612,1,0,0,0,1615,1623,5,314, + 0,0,1616,1618,5,11,0,0,1617,1616,1,0,0,0,1617,1618,1,0,0,0,1618, + 1619,1,0,0,0,1619,1621,3,232,116,0,1620,1622,3,90,45,0,1621,1620, + 1,0,0,0,1621,1622,1,0,0,0,1622,1624,1,0,0,0,1623,1617,1,0,0,0,1623, + 1624,1,0,0,0,1624,1626,1,0,0,0,1625,1543,1,0,0,0,1625,1626,1,0,0, + 0,1626,75,1,0,0,0,1627,1628,3,108,54,0,1628,1629,5,11,0,0,1629,1630, + 3,232,116,0,1630,77,1,0,0,0,1631,1632,5,174,0,0,1632,1633,5,222, + 0,0,1633,1634,5,190,0,0,1634,1643,5,146,0,0,1635,1636,5,5,0,0,1636, + 1637,5,223,0,0,1637,1638,5,190,0,0,1638,1640,5,146,0,0,1639,1641, + 3,80,40,0,1640,1639,1,0,0,0,1640,1641,1,0,0,0,1641,1643,1,0,0,0, + 1642,1631,1,0,0,0,1642,1635,1,0,0,0,1643,79,1,0,0,0,1644,1645,5, + 236,0,0,1645,1646,5,68,0,0,1646,1654,5,148,0,0,1647,1648,5,172,0, + 0,1648,1649,5,68,0,0,1649,1654,5,148,0,0,1650,1651,5,288,0,0,1651, + 1652,5,268,0,0,1652,1654,5,223,0,0,1653,1644,1,0,0,0,1653,1647,1, + 0,0,0,1653,1650,1,0,0,0,1654,81,1,0,0,0,1655,1668,5,237,0,0,1656, + 1663,5,253,0,0,1657,1658,5,157,0,0,1658,1664,5,222,0,0,1659,1661, + 7,10,0,0,1660,1659,1,0,0,0,1660,1661,1,0,0,0,1661,1662,1,0,0,0,1662, + 1664,3,232,116,0,1663,1657,1,0,0,0,1663,1660,1,0,0,0,1664,1669,1, + 0,0,0,1665,1666,5,187,0,0,1666,1667,5,131,0,0,1667,1669,5,222,0, + 0,1668,1656,1,0,0,0,1668,1665,1,0,0,0,1669,83,1,0,0,0,1670,1671, + 3,232,116,0,1671,1672,5,296,0,0,1672,1673,5,313,0,0,1673,1678,3, + 232,116,0,1674,1675,5,312,0,0,1675,1677,3,232,116,0,1676,1674,1, + 0,0,0,1677,1680,1,0,0,0,1678,1676,1,0,0,0,1678,1679,1,0,0,0,1679, + 1681,1,0,0,0,1680,1678,1,0,0,0,1681,1682,5,314,0,0,1682,85,1,0,0, + 0,1683,1684,3,232,116,0,1684,1685,5,11,0,0,1685,1686,3,108,54,0, + 1686,87,1,0,0,0,1687,1695,3,92,46,0,1688,1690,5,11,0,0,1689,1688, + 1,0,0,0,1689,1690,1,0,0,0,1690,1691,1,0,0,0,1691,1693,3,232,116, + 0,1692,1694,3,90,45,0,1693,1692,1,0,0,0,1693,1694,1,0,0,0,1694,1696, + 1,0,0,0,1695,1689,1,0,0,0,1695,1696,1,0,0,0,1696,89,1,0,0,0,1697, + 1698,5,313,0,0,1698,1703,3,232,116,0,1699,1700,5,312,0,0,1700,1702, + 3,232,116,0,1701,1699,1,0,0,0,1702,1705,1,0,0,0,1703,1701,1,0,0, + 0,1703,1704,1,0,0,0,1704,1706,1,0,0,0,1705,1703,1,0,0,0,1706,1707, + 5,314,0,0,1707,91,1,0,0,0,1708,1710,3,220,110,0,1709,1711,3,222, + 111,0,1710,1709,1,0,0,0,1710,1711,1,0,0,0,1711,1746,1,0,0,0,1712, + 1713,5,313,0,0,1713,1714,3,10,5,0,1714,1715,5,314,0,0,1715,1746, + 1,0,0,0,1716,1717,5,269,0,0,1717,1718,5,313,0,0,1718,1723,3,108, + 54,0,1719,1720,5,312,0,0,1720,1722,3,108,54,0,1721,1719,1,0,0,0, + 1722,1725,1,0,0,0,1723,1721,1,0,0,0,1723,1724,1,0,0,0,1724,1726, + 1,0,0,0,1725,1723,1,0,0,0,1726,1729,5,314,0,0,1727,1728,5,288,0, + 0,1728,1730,5,179,0,0,1729,1727,1,0,0,0,1729,1730,1,0,0,0,1730,1746, + 1,0,0,0,1731,1732,5,132,0,0,1732,1733,5,313,0,0,1733,1734,3,10,5, + 0,1734,1735,5,314,0,0,1735,1746,1,0,0,0,1736,1737,5,244,0,0,1737, + 1738,5,313,0,0,1738,1739,3,94,47,0,1739,1740,5,314,0,0,1740,1746, + 1,0,0,0,1741,1742,5,313,0,0,1742,1743,3,58,29,0,1743,1744,5,314, + 0,0,1744,1746,1,0,0,0,1745,1708,1,0,0,0,1745,1712,1,0,0,0,1745,1716, + 1,0,0,0,1745,1731,1,0,0,0,1745,1736,1,0,0,0,1745,1741,1,0,0,0,1746, + 93,1,0,0,0,1747,1748,3,220,110,0,1748,1757,5,313,0,0,1749,1754,3, + 96,48,0,1750,1751,5,312,0,0,1751,1753,3,96,48,0,1752,1750,1,0,0, + 0,1753,1756,1,0,0,0,1754,1752,1,0,0,0,1754,1755,1,0,0,0,1755,1758, + 1,0,0,0,1756,1754,1,0,0,0,1757,1749,1,0,0,0,1757,1758,1,0,0,0,1758, + 1768,1,0,0,0,1759,1760,5,35,0,0,1760,1765,3,106,53,0,1761,1762,5, + 312,0,0,1762,1764,3,106,53,0,1763,1761,1,0,0,0,1764,1767,1,0,0,0, + 1765,1763,1,0,0,0,1765,1766,1,0,0,0,1766,1769,1,0,0,0,1767,1765, + 1,0,0,0,1768,1759,1,0,0,0,1768,1769,1,0,0,0,1769,1770,1,0,0,0,1770, + 1771,5,314,0,0,1771,95,1,0,0,0,1772,1773,3,232,116,0,1773,1774,5, + 323,0,0,1774,1776,1,0,0,0,1775,1772,1,0,0,0,1775,1776,1,0,0,0,1776, + 1780,1,0,0,0,1777,1781,3,98,49,0,1778,1781,3,102,51,0,1779,1781, + 3,108,54,0,1780,1777,1,0,0,0,1780,1778,1,0,0,0,1780,1779,1,0,0,0, + 1781,97,1,0,0,0,1782,1800,3,100,50,0,1783,1784,5,184,0,0,1784,1798, + 5,19,0,0,1785,1794,5,313,0,0,1786,1791,3,108,54,0,1787,1788,5,312, + 0,0,1788,1790,3,108,54,0,1789,1787,1,0,0,0,1790,1793,1,0,0,0,1791, + 1789,1,0,0,0,1791,1792,1,0,0,0,1792,1795,1,0,0,0,1793,1791,1,0,0, + 0,1794,1786,1,0,0,0,1794,1795,1,0,0,0,1795,1796,1,0,0,0,1796,1799, + 5,314,0,0,1797,1799,3,108,54,0,1798,1785,1,0,0,0,1798,1797,1,0,0, + 0,1799,1801,1,0,0,0,1800,1783,1,0,0,0,1800,1801,1,0,0,0,1801,1808, + 1,0,0,0,1802,1803,5,200,0,0,1803,1804,5,284,0,0,1804,1809,5,68,0, + 0,1805,1806,5,127,0,0,1806,1807,5,284,0,0,1807,1809,5,68,0,0,1808, + 1802,1,0,0,0,1808,1805,1,0,0,0,1808,1809,1,0,0,0,1809,1826,1,0,0, + 0,1810,1811,5,178,0,0,1811,1824,5,19,0,0,1812,1813,5,313,0,0,1813, + 1818,3,38,19,0,1814,1815,5,312,0,0,1815,1817,3,38,19,0,1816,1814, + 1,0,0,0,1817,1820,1,0,0,0,1818,1816,1,0,0,0,1818,1819,1,0,0,0,1819, + 1821,1,0,0,0,1820,1818,1,0,0,0,1821,1822,5,314,0,0,1822,1825,1,0, + 0,0,1823,1825,3,38,19,0,1824,1812,1,0,0,0,1824,1823,1,0,0,0,1825, + 1827,1,0,0,0,1826,1810,1,0,0,0,1826,1827,1,0,0,0,1827,99,1,0,0,0, + 1828,1829,5,244,0,0,1829,1830,5,313,0,0,1830,1831,3,220,110,0,1831, + 1839,5,314,0,0,1832,1834,5,11,0,0,1833,1832,1,0,0,0,1833,1834,1, + 0,0,0,1834,1835,1,0,0,0,1835,1837,3,232,116,0,1836,1838,3,90,45, + 0,1837,1836,1,0,0,0,1837,1838,1,0,0,0,1838,1840,1,0,0,0,1839,1833, + 1,0,0,0,1839,1840,1,0,0,0,1840,1855,1,0,0,0,1841,1842,5,244,0,0, + 1842,1843,5,313,0,0,1843,1844,3,10,5,0,1844,1852,5,314,0,0,1845, + 1847,5,11,0,0,1846,1845,1,0,0,0,1846,1847,1,0,0,0,1847,1848,1,0, + 0,0,1848,1850,3,232,116,0,1849,1851,3,90,45,0,1850,1849,1,0,0,0, + 1850,1851,1,0,0,0,1851,1853,1,0,0,0,1852,1846,1,0,0,0,1852,1853, + 1,0,0,0,1853,1855,1,0,0,0,1854,1828,1,0,0,0,1854,1841,1,0,0,0,1855, + 101,1,0,0,0,1856,1857,5,60,0,0,1857,1858,5,313,0,0,1858,1863,3,104, + 52,0,1859,1860,5,312,0,0,1860,1862,3,104,52,0,1861,1859,1,0,0,0, + 1862,1865,1,0,0,0,1863,1861,1,0,0,0,1863,1864,1,0,0,0,1864,1866, + 1,0,0,0,1865,1863,1,0,0,0,1866,1867,5,314,0,0,1867,1875,1,0,0,0, + 1868,1869,5,24,0,0,1869,1870,5,313,0,0,1870,1871,5,166,0,0,1871, + 1872,5,11,0,0,1872,1873,5,60,0,0,1873,1875,5,314,0,0,1874,1856,1, + 0,0,0,1874,1868,1,0,0,0,1875,103,1,0,0,0,1876,1878,3,232,116,0,1877, + 1879,3,156,78,0,1878,1877,1,0,0,0,1878,1879,1,0,0,0,1879,105,1,0, + 0,0,1880,1881,5,313,0,0,1881,1882,3,220,110,0,1882,1883,5,312,0, + 0,1883,1888,3,220,110,0,1884,1885,5,312,0,0,1885,1887,3,220,110, + 0,1886,1884,1,0,0,0,1887,1890,1,0,0,0,1888,1886,1,0,0,0,1888,1889, + 1,0,0,0,1889,1891,1,0,0,0,1890,1888,1,0,0,0,1891,1892,5,314,0,0, + 1892,107,1,0,0,0,1893,1894,3,110,55,0,1894,109,1,0,0,0,1895,1896, + 6,55,-1,0,1896,1898,3,114,57,0,1897,1899,3,112,56,0,1898,1897,1, + 0,0,0,1898,1899,1,0,0,0,1899,1903,1,0,0,0,1900,1901,5,165,0,0,1901, + 1903,3,110,55,3,1902,1895,1,0,0,0,1902,1900,1,0,0,0,1903,1912,1, + 0,0,0,1904,1905,10,2,0,0,1905,1906,5,8,0,0,1906,1911,3,110,55,3, + 1907,1908,10,1,0,0,1908,1909,5,177,0,0,1909,1911,3,110,55,2,1910, + 1904,1,0,0,0,1910,1907,1,0,0,0,1911,1914,1,0,0,0,1912,1910,1,0,0, + 0,1912,1913,1,0,0,0,1913,111,1,0,0,0,1914,1912,1,0,0,0,1915,1916, + 3,144,72,0,1916,1917,3,114,57,0,1917,1977,1,0,0,0,1918,1919,3,144, + 72,0,1919,1920,3,146,73,0,1920,1921,5,313,0,0,1921,1922,3,10,5,0, + 1922,1923,5,314,0,0,1923,1977,1,0,0,0,1924,1926,5,165,0,0,1925,1924, + 1,0,0,0,1925,1926,1,0,0,0,1926,1927,1,0,0,0,1927,1928,5,17,0,0,1928, + 1929,3,114,57,0,1929,1930,5,8,0,0,1930,1931,3,114,57,0,1931,1977, + 1,0,0,0,1932,1934,5,165,0,0,1933,1932,1,0,0,0,1933,1934,1,0,0,0, + 1934,1935,1,0,0,0,1935,1936,5,105,0,0,1936,1937,5,313,0,0,1937,1942, + 3,108,54,0,1938,1939,5,312,0,0,1939,1941,3,108,54,0,1940,1938,1, + 0,0,0,1941,1944,1,0,0,0,1942,1940,1,0,0,0,1942,1943,1,0,0,0,1943, + 1945,1,0,0,0,1944,1942,1,0,0,0,1945,1946,5,314,0,0,1946,1977,1,0, + 0,0,1947,1949,5,165,0,0,1948,1947,1,0,0,0,1948,1949,1,0,0,0,1949, + 1950,1,0,0,0,1950,1951,5,105,0,0,1951,1952,5,313,0,0,1952,1953,3, + 10,5,0,1953,1954,5,314,0,0,1954,1977,1,0,0,0,1955,1957,5,165,0,0, + 1956,1955,1,0,0,0,1956,1957,1,0,0,0,1957,1958,1,0,0,0,1958,1959, + 5,137,0,0,1959,1962,3,114,57,0,1960,1961,5,73,0,0,1961,1963,3,114, + 57,0,1962,1960,1,0,0,0,1962,1963,1,0,0,0,1963,1977,1,0,0,0,1964, + 1966,5,116,0,0,1965,1967,5,165,0,0,1966,1965,1,0,0,0,1966,1967,1, + 0,0,0,1967,1968,1,0,0,0,1968,1977,5,166,0,0,1969,1971,5,116,0,0, + 1970,1972,5,165,0,0,1971,1970,1,0,0,0,1971,1972,1,0,0,0,1972,1973, + 1,0,0,0,1973,1974,5,62,0,0,1974,1975,5,88,0,0,1975,1977,3,114,57, + 0,1976,1915,1,0,0,0,1976,1918,1,0,0,0,1976,1925,1,0,0,0,1976,1933, + 1,0,0,0,1976,1948,1,0,0,0,1976,1956,1,0,0,0,1976,1964,1,0,0,0,1976, + 1969,1,0,0,0,1977,113,1,0,0,0,1978,1979,6,57,-1,0,1979,1983,3,116, + 58,0,1980,1981,7,17,0,0,1981,1983,3,114,57,4,1982,1978,1,0,0,0,1982, + 1980,1,0,0,0,1983,1998,1,0,0,0,1984,1985,10,3,0,0,1985,1986,7,18, + 0,0,1986,1997,3,114,57,4,1987,1988,10,2,0,0,1988,1989,7,17,0,0,1989, + 1997,3,114,57,3,1990,1991,10,1,0,0,1991,1992,5,307,0,0,1992,1997, + 3,114,57,2,1993,1994,10,5,0,0,1994,1995,5,13,0,0,1995,1997,3,142, + 71,0,1996,1984,1,0,0,0,1996,1987,1,0,0,0,1996,1990,1,0,0,0,1996, + 1993,1,0,0,0,1997,2000,1,0,0,0,1998,1996,1,0,0,0,1998,1999,1,0,0, + 0,1999,115,1,0,0,0,2000,1998,1,0,0,0,2001,2002,6,58,-1,0,2002,2455, + 5,166,0,0,2003,2455,3,150,75,0,2004,2005,3,232,116,0,2005,2006,3, + 140,70,0,2006,2455,1,0,0,0,2007,2008,5,65,0,0,2008,2009,5,196,0, + 0,2009,2455,3,140,70,0,2010,2455,3,234,117,0,2011,2455,3,148,74, + 0,2012,2455,3,140,70,0,2013,2455,5,329,0,0,2014,2455,5,308,0,0,2015, + 2016,5,194,0,0,2016,2017,5,313,0,0,2017,2018,3,114,57,0,2018,2019, + 5,105,0,0,2019,2020,3,114,57,0,2020,2021,5,314,0,0,2021,2455,1,0, + 0,0,2022,2023,5,313,0,0,2023,2026,3,108,54,0,2024,2025,5,312,0,0, + 2025,2027,3,108,54,0,2026,2024,1,0,0,0,2027,2028,1,0,0,0,2028,2026, + 1,0,0,0,2028,2029,1,0,0,0,2029,2030,1,0,0,0,2030,2031,5,314,0,0, + 2031,2455,1,0,0,0,2032,2033,5,222,0,0,2033,2034,5,313,0,0,2034,2039, + 3,108,54,0,2035,2036,5,312,0,0,2036,2038,3,108,54,0,2037,2035,1, + 0,0,0,2038,2041,1,0,0,0,2039,2037,1,0,0,0,2039,2040,1,0,0,0,2040, + 2042,1,0,0,0,2041,2039,1,0,0,0,2042,2043,5,314,0,0,2043,2455,1,0, + 0,0,2044,2045,5,139,0,0,2045,2047,5,313,0,0,2046,2048,3,54,27,0, + 2047,2046,1,0,0,0,2047,2048,1,0,0,0,2048,2049,1,0,0,0,2049,2052, + 3,108,54,0,2050,2051,5,312,0,0,2051,2053,3,140,70,0,2052,2050,1, + 0,0,0,2052,2053,1,0,0,0,2053,2057,1,0,0,0,2054,2055,5,173,0,0,2055, + 2056,5,183,0,0,2056,2058,3,70,35,0,2057,2054,1,0,0,0,2057,2058,1, + 0,0,0,2058,2059,1,0,0,0,2059,2060,5,314,0,0,2060,2061,5,289,0,0, + 2061,2062,5,97,0,0,2062,2063,5,313,0,0,2063,2064,5,178,0,0,2064, + 2065,5,19,0,0,2065,2070,3,38,19,0,2066,2067,5,312,0,0,2067,2069, + 3,38,19,0,2068,2066,1,0,0,0,2069,2072,1,0,0,0,2070,2068,1,0,0,0, + 2070,2071,1,0,0,0,2071,2073,1,0,0,0,2072,2070,1,0,0,0,2073,2074, + 5,314,0,0,2074,2076,1,0,0,0,2075,2077,3,164,82,0,2076,2075,1,0,0, + 0,2076,2077,1,0,0,0,2077,2455,1,0,0,0,2078,2080,3,136,68,0,2079, + 2078,1,0,0,0,2079,2080,1,0,0,0,2080,2081,1,0,0,0,2081,2082,3,220, + 110,0,2082,2086,5,313,0,0,2083,2084,3,232,116,0,2084,2085,5,310, + 0,0,2085,2087,1,0,0,0,2086,2083,1,0,0,0,2086,2087,1,0,0,0,2087,2088, + 1,0,0,0,2088,2089,5,304,0,0,2089,2091,5,314,0,0,2090,2092,3,164, + 82,0,2091,2090,1,0,0,0,2091,2092,1,0,0,0,2092,2094,1,0,0,0,2093, + 2095,3,168,84,0,2094,2093,1,0,0,0,2094,2095,1,0,0,0,2095,2455,1, + 0,0,0,2096,2098,3,136,68,0,2097,2096,1,0,0,0,2097,2098,1,0,0,0,2098, + 2099,1,0,0,0,2099,2100,3,220,110,0,2100,2112,5,313,0,0,2101,2103, + 3,54,27,0,2102,2101,1,0,0,0,2102,2103,1,0,0,0,2103,2104,1,0,0,0, + 2104,2109,3,108,54,0,2105,2106,5,312,0,0,2106,2108,3,108,54,0,2107, + 2105,1,0,0,0,2108,2111,1,0,0,0,2109,2107,1,0,0,0,2109,2110,1,0,0, + 0,2110,2113,1,0,0,0,2111,2109,1,0,0,0,2112,2102,1,0,0,0,2112,2113, + 1,0,0,0,2113,2124,1,0,0,0,2114,2115,5,178,0,0,2115,2116,5,19,0,0, + 2116,2121,3,38,19,0,2117,2118,5,312,0,0,2118,2120,3,38,19,0,2119, + 2117,1,0,0,0,2120,2123,1,0,0,0,2121,2119,1,0,0,0,2121,2122,1,0,0, + 0,2122,2125,1,0,0,0,2123,2121,1,0,0,0,2124,2114,1,0,0,0,2124,2125, + 1,0,0,0,2125,2126,1,0,0,0,2126,2128,5,314,0,0,2127,2129,3,164,82, + 0,2128,2127,1,0,0,0,2128,2129,1,0,0,0,2129,2134,1,0,0,0,2130,2132, + 3,138,69,0,2131,2130,1,0,0,0,2131,2132,1,0,0,0,2132,2133,1,0,0,0, + 2133,2135,3,168,84,0,2134,2131,1,0,0,0,2134,2135,1,0,0,0,2135,2455, + 1,0,0,0,2136,2137,3,232,116,0,2137,2138,3,168,84,0,2138,2455,1,0, + 0,0,2139,2140,3,232,116,0,2140,2141,5,322,0,0,2141,2142,3,108,54, + 0,2142,2455,1,0,0,0,2143,2152,5,313,0,0,2144,2149,3,232,116,0,2145, + 2146,5,312,0,0,2146,2148,3,232,116,0,2147,2145,1,0,0,0,2148,2151, + 1,0,0,0,2149,2147,1,0,0,0,2149,2150,1,0,0,0,2150,2153,1,0,0,0,2151, + 2149,1,0,0,0,2152,2144,1,0,0,0,2152,2153,1,0,0,0,2153,2154,1,0,0, + 0,2154,2155,5,314,0,0,2155,2156,5,322,0,0,2156,2455,3,108,54,0,2157, + 2158,5,313,0,0,2158,2159,3,10,5,0,2159,2160,5,314,0,0,2160,2455, + 1,0,0,0,2161,2162,5,77,0,0,2162,2163,5,313,0,0,2163,2164,3,10,5, + 0,2164,2165,5,314,0,0,2165,2455,1,0,0,0,2166,2167,5,23,0,0,2167, + 2169,3,108,54,0,2168,2170,3,162,81,0,2169,2168,1,0,0,0,2170,2171, + 1,0,0,0,2171,2169,1,0,0,0,2171,2172,1,0,0,0,2172,2175,1,0,0,0,2173, + 2174,5,67,0,0,2174,2176,3,108,54,0,2175,2173,1,0,0,0,2175,2176,1, + 0,0,0,2176,2177,1,0,0,0,2177,2178,5,71,0,0,2178,2455,1,0,0,0,2179, + 2181,5,23,0,0,2180,2182,3,162,81,0,2181,2180,1,0,0,0,2182,2183,1, + 0,0,0,2183,2181,1,0,0,0,2183,2184,1,0,0,0,2184,2187,1,0,0,0,2185, + 2186,5,67,0,0,2186,2188,3,108,54,0,2187,2185,1,0,0,0,2187,2188,1, + 0,0,0,2188,2189,1,0,0,0,2189,2190,5,71,0,0,2190,2455,1,0,0,0,2191, + 2192,5,24,0,0,2192,2193,5,313,0,0,2193,2194,3,108,54,0,2194,2195, + 5,11,0,0,2195,2196,3,156,78,0,2196,2197,5,314,0,0,2197,2455,1,0, + 0,0,2198,2199,5,259,0,0,2199,2200,5,313,0,0,2200,2201,3,108,54,0, + 2201,2202,5,11,0,0,2202,2203,3,156,78,0,2203,2204,5,314,0,0,2204, + 2455,1,0,0,0,2205,2206,5,10,0,0,2206,2215,5,315,0,0,2207,2212,3, + 108,54,0,2208,2209,5,312,0,0,2209,2211,3,108,54,0,2210,2208,1,0, + 0,0,2211,2214,1,0,0,0,2212,2210,1,0,0,0,2212,2213,1,0,0,0,2213,2216, + 1,0,0,0,2214,2212,1,0,0,0,2215,2207,1,0,0,0,2215,2216,1,0,0,0,2216, + 2217,1,0,0,0,2217,2455,5,316,0,0,2218,2455,3,232,116,0,2219,2455, + 5,41,0,0,2220,2224,5,45,0,0,2221,2222,5,313,0,0,2222,2223,5,330, + 0,0,2223,2225,5,314,0,0,2224,2221,1,0,0,0,2224,2225,1,0,0,0,2225, + 2455,1,0,0,0,2226,2230,5,46,0,0,2227,2228,5,313,0,0,2228,2229,5, + 330,0,0,2229,2231,5,314,0,0,2230,2227,1,0,0,0,2230,2231,1,0,0,0, + 2231,2455,1,0,0,0,2232,2236,5,141,0,0,2233,2234,5,313,0,0,2234,2235, + 5,330,0,0,2235,2237,5,314,0,0,2236,2233,1,0,0,0,2236,2237,1,0,0, + 0,2237,2455,1,0,0,0,2238,2242,5,142,0,0,2239,2240,5,313,0,0,2240, + 2241,5,330,0,0,2241,2243,5,314,0,0,2242,2239,1,0,0,0,2242,2243,1, + 0,0,0,2243,2455,1,0,0,0,2244,2455,5,47,0,0,2245,2455,5,40,0,0,2246, + 2455,5,44,0,0,2247,2455,5,42,0,0,2248,2249,5,256,0,0,2249,2257,5, + 313,0,0,2250,2252,3,68,34,0,2251,2250,1,0,0,0,2251,2252,1,0,0,0, + 2252,2254,1,0,0,0,2253,2255,3,114,57,0,2254,2253,1,0,0,0,2254,2255, + 1,0,0,0,2255,2256,1,0,0,0,2256,2258,5,88,0,0,2257,2251,1,0,0,0,2257, + 2258,1,0,0,0,2258,2259,1,0,0,0,2259,2260,3,114,57,0,2260,2261,5, + 314,0,0,2261,2455,1,0,0,0,2262,2263,5,256,0,0,2263,2264,5,313,0, + 0,2264,2265,3,114,57,0,2265,2266,5,312,0,0,2266,2267,3,114,57,0, + 2267,2268,5,314,0,0,2268,2455,1,0,0,0,2269,2270,5,242,0,0,2270,2271, + 5,313,0,0,2271,2272,3,114,57,0,2272,2273,5,88,0,0,2273,2276,3,114, + 57,0,2274,2275,5,86,0,0,2275,2277,3,114,57,0,2276,2274,1,0,0,0,2276, + 2277,1,0,0,0,2277,2278,1,0,0,0,2278,2279,5,314,0,0,2279,2455,1,0, + 0,0,2280,2281,5,164,0,0,2281,2282,5,313,0,0,2282,2285,3,114,57,0, + 2283,2284,5,312,0,0,2284,2286,3,154,77,0,2285,2283,1,0,0,0,2285, + 2286,1,0,0,0,2286,2287,1,0,0,0,2287,2288,5,314,0,0,2288,2455,1,0, + 0,0,2289,2290,5,79,0,0,2290,2291,5,313,0,0,2291,2292,3,232,116,0, + 2292,2293,5,88,0,0,2293,2294,3,114,57,0,2294,2295,5,314,0,0,2295, + 2455,1,0,0,0,2296,2297,5,313,0,0,2297,2298,3,108,54,0,2298,2299, + 5,314,0,0,2299,2455,1,0,0,0,2300,2301,5,98,0,0,2301,2310,5,313,0, + 0,2302,2307,3,220,110,0,2303,2304,5,312,0,0,2304,2306,3,220,110, + 0,2305,2303,1,0,0,0,2306,2309,1,0,0,0,2307,2305,1,0,0,0,2307,2308, + 1,0,0,0,2308,2311,1,0,0,0,2309,2307,1,0,0,0,2310,2302,1,0,0,0,2310, + 2311,1,0,0,0,2311,2312,1,0,0,0,2312,2455,5,314,0,0,2313,2314,5,122, + 0,0,2314,2315,5,313,0,0,2315,2320,3,118,59,0,2316,2317,3,126,63, + 0,2317,2318,5,173,0,0,2318,2319,5,72,0,0,2319,2321,1,0,0,0,2320, + 2316,1,0,0,0,2320,2321,1,0,0,0,2321,2322,1,0,0,0,2322,2323,5,314, + 0,0,2323,2455,1,0,0,0,2324,2325,5,126,0,0,2325,2326,5,313,0,0,2326, + 2329,3,118,59,0,2327,2328,5,214,0,0,2328,2330,3,156,78,0,2329,2327, + 1,0,0,0,2329,2330,1,0,0,0,2330,2335,1,0,0,0,2331,2332,3,128,64,0, + 2332,2333,5,173,0,0,2333,2334,5,68,0,0,2334,2336,1,0,0,0,2335,2331, + 1,0,0,0,2335,2336,1,0,0,0,2336,2341,1,0,0,0,2337,2338,3,128,64,0, + 2338,2339,5,173,0,0,2339,2340,5,72,0,0,2340,2342,1,0,0,0,2341,2337, + 1,0,0,0,2341,2342,1,0,0,0,2342,2343,1,0,0,0,2343,2344,5,314,0,0, + 2344,2455,1,0,0,0,2345,2346,5,124,0,0,2346,2347,5,313,0,0,2347,2354, + 3,118,59,0,2348,2349,5,214,0,0,2349,2352,3,156,78,0,2350,2351,5, + 87,0,0,2351,2353,3,122,61,0,2352,2350,1,0,0,0,2352,2353,1,0,0,0, + 2353,2355,1,0,0,0,2354,2348,1,0,0,0,2354,2355,1,0,0,0,2355,2359, + 1,0,0,0,2356,2357,3,130,65,0,2357,2358,5,292,0,0,2358,2360,1,0,0, + 0,2359,2356,1,0,0,0,2359,2360,1,0,0,0,2360,2368,1,0,0,0,2361,2362, + 7,19,0,0,2362,2366,5,201,0,0,2363,2364,5,173,0,0,2364,2365,5,225, + 0,0,2365,2367,5,248,0,0,2366,2363,1,0,0,0,2366,2367,1,0,0,0,2367, + 2369,1,0,0,0,2368,2361,1,0,0,0,2368,2369,1,0,0,0,2369,2374,1,0,0, + 0,2370,2371,3,132,66,0,2371,2372,5,173,0,0,2372,2373,5,68,0,0,2373, + 2375,1,0,0,0,2374,2370,1,0,0,0,2374,2375,1,0,0,0,2375,2380,1,0,0, + 0,2376,2377,3,132,66,0,2377,2378,5,173,0,0,2378,2379,5,72,0,0,2379, + 2381,1,0,0,0,2380,2376,1,0,0,0,2380,2381,1,0,0,0,2381,2382,1,0,0, + 0,2382,2383,5,314,0,0,2383,2455,1,0,0,0,2384,2385,5,123,0,0,2385, + 2414,5,313,0,0,2386,2391,3,134,67,0,2387,2388,5,312,0,0,2388,2390, + 3,134,67,0,2389,2387,1,0,0,0,2390,2393,1,0,0,0,2391,2389,1,0,0,0, + 2391,2392,1,0,0,0,2392,2400,1,0,0,0,2393,2391,1,0,0,0,2394,2395, + 5,166,0,0,2395,2396,5,173,0,0,2396,2401,5,166,0,0,2397,2398,5,1, + 0,0,2398,2399,5,173,0,0,2399,2401,5,166,0,0,2400,2394,1,0,0,0,2400, + 2397,1,0,0,0,2400,2401,1,0,0,0,2401,2412,1,0,0,0,2402,2403,5,288, + 0,0,2403,2405,5,266,0,0,2404,2406,5,129,0,0,2405,2404,1,0,0,0,2405, + 2406,1,0,0,0,2406,2413,1,0,0,0,2407,2408,5,290,0,0,2408,2410,5,266, + 0,0,2409,2411,5,129,0,0,2410,2409,1,0,0,0,2410,2411,1,0,0,0,2411, + 2413,1,0,0,0,2412,2402,1,0,0,0,2412,2407,1,0,0,0,2412,2413,1,0,0, + 0,2413,2415,1,0,0,0,2414,2386,1,0,0,0,2414,2415,1,0,0,0,2415,2422, + 1,0,0,0,2416,2417,5,214,0,0,2417,2420,3,156,78,0,2418,2419,5,87, + 0,0,2419,2421,3,122,61,0,2420,2418,1,0,0,0,2420,2421,1,0,0,0,2421, + 2423,1,0,0,0,2422,2416,1,0,0,0,2422,2423,1,0,0,0,2423,2424,1,0,0, + 0,2424,2455,5,314,0,0,2425,2426,5,121,0,0,2426,2443,5,313,0,0,2427, + 2432,3,120,60,0,2428,2429,5,312,0,0,2429,2431,3,120,60,0,2430,2428, + 1,0,0,0,2431,2434,1,0,0,0,2432,2430,1,0,0,0,2432,2433,1,0,0,0,2433, + 2441,1,0,0,0,2434,2432,1,0,0,0,2435,2436,5,166,0,0,2436,2437,5,173, + 0,0,2437,2442,5,166,0,0,2438,2439,5,1,0,0,2439,2440,5,173,0,0,2440, + 2442,5,166,0,0,2441,2435,1,0,0,0,2441,2438,1,0,0,0,2441,2442,1,0, + 0,0,2442,2444,1,0,0,0,2443,2427,1,0,0,0,2443,2444,1,0,0,0,2444,2451, + 1,0,0,0,2445,2446,5,214,0,0,2446,2449,3,156,78,0,2447,2448,5,87, + 0,0,2448,2450,3,122,61,0,2449,2447,1,0,0,0,2449,2450,1,0,0,0,2450, + 2452,1,0,0,0,2451,2445,1,0,0,0,2451,2452,1,0,0,0,2452,2453,1,0,0, + 0,2453,2455,5,314,0,0,2454,2001,1,0,0,0,2454,2003,1,0,0,0,2454,2004, + 1,0,0,0,2454,2007,1,0,0,0,2454,2010,1,0,0,0,2454,2011,1,0,0,0,2454, + 2012,1,0,0,0,2454,2013,1,0,0,0,2454,2014,1,0,0,0,2454,2015,1,0,0, + 0,2454,2022,1,0,0,0,2454,2032,1,0,0,0,2454,2044,1,0,0,0,2454,2079, + 1,0,0,0,2454,2097,1,0,0,0,2454,2136,1,0,0,0,2454,2139,1,0,0,0,2454, + 2143,1,0,0,0,2454,2157,1,0,0,0,2454,2161,1,0,0,0,2454,2166,1,0,0, + 0,2454,2179,1,0,0,0,2454,2191,1,0,0,0,2454,2198,1,0,0,0,2454,2205, + 1,0,0,0,2454,2218,1,0,0,0,2454,2219,1,0,0,0,2454,2220,1,0,0,0,2454, + 2226,1,0,0,0,2454,2232,1,0,0,0,2454,2238,1,0,0,0,2454,2244,1,0,0, + 0,2454,2245,1,0,0,0,2454,2246,1,0,0,0,2454,2247,1,0,0,0,2454,2248, + 1,0,0,0,2454,2262,1,0,0,0,2454,2269,1,0,0,0,2454,2280,1,0,0,0,2454, + 2289,1,0,0,0,2454,2296,1,0,0,0,2454,2300,1,0,0,0,2454,2313,1,0,0, + 0,2454,2324,1,0,0,0,2454,2345,1,0,0,0,2454,2384,1,0,0,0,2454,2425, + 1,0,0,0,2455,2466,1,0,0,0,2456,2457,10,24,0,0,2457,2458,5,315,0, + 0,2458,2459,3,114,57,0,2459,2460,5,316,0,0,2460,2465,1,0,0,0,2461, + 2462,10,22,0,0,2462,2463,5,310,0,0,2463,2465,3,232,116,0,2464,2456, + 1,0,0,0,2464,2461,1,0,0,0,2465,2468,1,0,0,0,2466,2464,1,0,0,0,2466, + 2467,1,0,0,0,2467,117,1,0,0,0,2468,2466,1,0,0,0,2469,2470,3,120, + 60,0,2470,2471,5,312,0,0,2471,2481,3,140,70,0,2472,2473,5,186,0, + 0,2473,2478,3,124,62,0,2474,2475,5,312,0,0,2475,2477,3,124,62,0, + 2476,2474,1,0,0,0,2477,2480,1,0,0,0,2478,2476,1,0,0,0,2478,2479, + 1,0,0,0,2479,2482,1,0,0,0,2480,2478,1,0,0,0,2481,2472,1,0,0,0,2481, + 2482,1,0,0,0,2482,119,1,0,0,0,2483,2486,3,108,54,0,2484,2485,5,87, + 0,0,2485,2487,3,122,61,0,2486,2484,1,0,0,0,2486,2487,1,0,0,0,2487, + 121,1,0,0,0,2488,2491,5,120,0,0,2489,2490,5,70,0,0,2490,2492,7,20, + 0,0,2491,2489,1,0,0,0,2491,2492,1,0,0,0,2492,123,1,0,0,0,2493,2494, + 3,120,60,0,2494,2495,5,11,0,0,2495,2496,3,232,116,0,2496,125,1,0, + 0,0,2497,2498,7,21,0,0,2498,127,1,0,0,0,2499,2504,5,72,0,0,2500, + 2504,5,166,0,0,2501,2502,5,53,0,0,2502,2504,3,108,54,0,2503,2499, + 1,0,0,0,2503,2500,1,0,0,0,2503,2501,1,0,0,0,2504,129,1,0,0,0,2505, + 2507,5,290,0,0,2506,2508,5,10,0,0,2507,2506,1,0,0,0,2507,2508,1, + 0,0,0,2508,2517,1,0,0,0,2509,2511,5,288,0,0,2510,2512,7,22,0,0,2511, + 2510,1,0,0,0,2511,2512,1,0,0,0,2512,2514,1,0,0,0,2513,2515,5,10, + 0,0,2514,2513,1,0,0,0,2514,2515,1,0,0,0,2515,2517,1,0,0,0,2516,2505, + 1,0,0,0,2516,2509,1,0,0,0,2517,131,1,0,0,0,2518,2523,5,72,0,0,2519, + 2523,5,166,0,0,2520,2521,5,68,0,0,2521,2523,7,23,0,0,2522,2518,1, + 0,0,0,2522,2519,1,0,0,0,2522,2520,1,0,0,0,2523,133,1,0,0,0,2524, + 2526,5,128,0,0,2525,2524,1,0,0,0,2525,2526,1,0,0,0,2526,2527,1,0, + 0,0,2527,2528,3,108,54,0,2528,2529,5,279,0,0,2529,2530,3,120,60, + 0,2530,2536,1,0,0,0,2531,2532,3,108,54,0,2532,2533,5,311,0,0,2533, + 2534,3,120,60,0,2534,2536,1,0,0,0,2535,2525,1,0,0,0,2535,2531,1, + 0,0,0,2536,135,1,0,0,0,2537,2538,7,24,0,0,2538,137,1,0,0,0,2539, + 2540,5,103,0,0,2540,2544,5,168,0,0,2541,2542,5,211,0,0,2542,2544, + 5,168,0,0,2543,2539,1,0,0,0,2543,2541,1,0,0,0,2544,139,1,0,0,0,2545, + 2552,5,327,0,0,2546,2549,5,328,0,0,2547,2548,5,261,0,0,2548,2550, + 5,327,0,0,2549,2547,1,0,0,0,2549,2550,1,0,0,0,2550,2552,1,0,0,0, + 2551,2545,1,0,0,0,2551,2546,1,0,0,0,2552,141,1,0,0,0,2553,2554,5, + 251,0,0,2554,2555,5,295,0,0,2555,2560,3,150,75,0,2556,2557,5,251, + 0,0,2557,2558,5,295,0,0,2558,2560,3,140,70,0,2559,2553,1,0,0,0,2559, + 2556,1,0,0,0,2560,143,1,0,0,0,2561,2562,7,25,0,0,2562,145,1,0,0, + 0,2563,2564,7,26,0,0,2564,147,1,0,0,0,2565,2566,7,27,0,0,2566,149, + 1,0,0,0,2567,2569,5,112,0,0,2568,2570,7,17,0,0,2569,2568,1,0,0,0, + 2569,2570,1,0,0,0,2570,2571,1,0,0,0,2571,2572,3,140,70,0,2572,2575, + 3,152,76,0,2573,2574,5,253,0,0,2574,2576,3,152,76,0,2575,2573,1, + 0,0,0,2575,2576,1,0,0,0,2576,151,1,0,0,0,2577,2578,7,28,0,0,2578, + 153,1,0,0,0,2579,2580,7,29,0,0,2580,155,1,0,0,0,2581,2582,6,78,-1, + 0,2582,2583,5,222,0,0,2583,2584,5,313,0,0,2584,2589,3,158,79,0,2585, + 2586,5,312,0,0,2586,2588,3,158,79,0,2587,2585,1,0,0,0,2588,2591, + 1,0,0,0,2589,2587,1,0,0,0,2589,2590,1,0,0,0,2590,2592,1,0,0,0,2591, + 2589,1,0,0,0,2592,2593,5,314,0,0,2593,2673,1,0,0,0,2594,2595,5,112, + 0,0,2595,2598,3,152,76,0,2596,2597,5,253,0,0,2597,2599,3,152,76, + 0,2598,2596,1,0,0,0,2598,2599,1,0,0,0,2599,2673,1,0,0,0,2600,2605, + 5,252,0,0,2601,2602,5,313,0,0,2602,2603,3,160,80,0,2603,2604,5,314, + 0,0,2604,2606,1,0,0,0,2605,2601,1,0,0,0,2605,2606,1,0,0,0,2606,2610, + 1,0,0,0,2607,2608,5,290,0,0,2608,2609,5,251,0,0,2609,2611,5,295, + 0,0,2610,2607,1,0,0,0,2610,2611,1,0,0,0,2611,2673,1,0,0,0,2612,2617, + 5,252,0,0,2613,2614,5,313,0,0,2614,2615,3,160,80,0,2615,2616,5,314, + 0,0,2616,2618,1,0,0,0,2617,2613,1,0,0,0,2617,2618,1,0,0,0,2618,2619, + 1,0,0,0,2619,2620,5,288,0,0,2620,2621,5,251,0,0,2621,2673,5,295, + 0,0,2622,2627,5,251,0,0,2623,2624,5,313,0,0,2624,2625,3,160,80,0, + 2625,2626,5,314,0,0,2626,2628,1,0,0,0,2627,2623,1,0,0,0,2627,2628, + 1,0,0,0,2628,2632,1,0,0,0,2629,2630,5,290,0,0,2630,2631,5,251,0, + 0,2631,2633,5,295,0,0,2632,2629,1,0,0,0,2632,2633,1,0,0,0,2633,2673, + 1,0,0,0,2634,2639,5,251,0,0,2635,2636,5,313,0,0,2636,2637,3,160, + 80,0,2637,2638,5,314,0,0,2638,2640,1,0,0,0,2639,2635,1,0,0,0,2639, + 2640,1,0,0,0,2640,2641,1,0,0,0,2641,2642,5,288,0,0,2642,2643,5,251, + 0,0,2643,2673,5,295,0,0,2644,2645,5,65,0,0,2645,2673,5,196,0,0,2646, + 2647,5,10,0,0,2647,2648,5,298,0,0,2648,2649,3,156,78,0,2649,2650, + 5,300,0,0,2650,2673,1,0,0,0,2651,2652,5,145,0,0,2652,2653,5,298, + 0,0,2653,2654,3,156,78,0,2654,2655,5,312,0,0,2655,2656,3,156,78, + 0,2656,2657,5,300,0,0,2657,2673,1,0,0,0,2658,2670,3,232,116,0,2659, + 2660,5,313,0,0,2660,2665,3,160,80,0,2661,2662,5,312,0,0,2662,2664, + 3,160,80,0,2663,2661,1,0,0,0,2664,2667,1,0,0,0,2665,2663,1,0,0,0, + 2665,2666,1,0,0,0,2666,2668,1,0,0,0,2667,2665,1,0,0,0,2668,2669, + 5,314,0,0,2669,2671,1,0,0,0,2670,2659,1,0,0,0,2670,2671,1,0,0,0, + 2671,2673,1,0,0,0,2672,2581,1,0,0,0,2672,2594,1,0,0,0,2672,2600, + 1,0,0,0,2672,2612,1,0,0,0,2672,2622,1,0,0,0,2672,2634,1,0,0,0,2672, + 2644,1,0,0,0,2672,2646,1,0,0,0,2672,2651,1,0,0,0,2672,2658,1,0,0, + 0,2673,2683,1,0,0,0,2674,2675,10,2,0,0,2675,2679,5,10,0,0,2676,2677, + 5,315,0,0,2677,2678,5,330,0,0,2678,2680,5,316,0,0,2679,2676,1,0, + 0,0,2679,2680,1,0,0,0,2680,2682,1,0,0,0,2681,2674,1,0,0,0,2682,2685, + 1,0,0,0,2683,2681,1,0,0,0,2683,2684,1,0,0,0,2684,157,1,0,0,0,2685, + 2683,1,0,0,0,2686,2691,3,156,78,0,2687,2688,3,232,116,0,2688,2689, + 3,156,78,0,2689,2691,1,0,0,0,2690,2686,1,0,0,0,2690,2687,1,0,0,0, + 2691,159,1,0,0,0,2692,2695,5,330,0,0,2693,2695,3,156,78,0,2694,2692, + 1,0,0,0,2694,2693,1,0,0,0,2695,161,1,0,0,0,2696,2697,5,284,0,0,2697, + 2698,3,108,54,0,2698,2699,5,249,0,0,2699,2700,3,108,54,0,2700,163, + 1,0,0,0,2701,2702,5,82,0,0,2702,2703,5,313,0,0,2703,2704,5,285,0, + 0,2704,2705,3,110,55,0,2705,2706,5,314,0,0,2706,165,1,0,0,0,2707, + 2708,5,284,0,0,2708,2711,5,147,0,0,2709,2710,5,8,0,0,2710,2712,3, + 108,54,0,2711,2709,1,0,0,0,2711,2712,1,0,0,0,2712,2713,1,0,0,0,2713, + 2714,5,249,0,0,2714,2715,5,271,0,0,2715,2716,5,234,0,0,2716,2717, + 3,232,116,0,2717,2718,5,296,0,0,2718,2726,3,108,54,0,2719,2720,5, + 312,0,0,2720,2721,3,232,116,0,2721,2722,5,296,0,0,2722,2723,3,108, + 54,0,2723,2725,1,0,0,0,2724,2719,1,0,0,0,2725,2728,1,0,0,0,2726, + 2724,1,0,0,0,2726,2727,1,0,0,0,2727,2772,1,0,0,0,2728,2726,1,0,0, + 0,2729,2730,5,284,0,0,2730,2733,5,147,0,0,2731,2732,5,8,0,0,2732, + 2734,3,108,54,0,2733,2731,1,0,0,0,2733,2734,1,0,0,0,2734,2735,1, + 0,0,0,2735,2736,5,249,0,0,2736,2772,5,56,0,0,2737,2738,5,284,0,0, + 2738,2739,5,165,0,0,2739,2742,5,147,0,0,2740,2741,5,8,0,0,2741,2743, + 3,108,54,0,2742,2740,1,0,0,0,2742,2743,1,0,0,0,2743,2744,1,0,0,0, + 2744,2745,5,249,0,0,2745,2757,5,110,0,0,2746,2747,5,313,0,0,2747, + 2752,3,232,116,0,2748,2749,5,312,0,0,2749,2751,3,232,116,0,2750, + 2748,1,0,0,0,2751,2754,1,0,0,0,2752,2750,1,0,0,0,2752,2753,1,0,0, + 0,2753,2755,1,0,0,0,2754,2752,1,0,0,0,2755,2756,5,314,0,0,2756,2758, + 1,0,0,0,2757,2746,1,0,0,0,2757,2758,1,0,0,0,2758,2759,1,0,0,0,2759, + 2760,5,280,0,0,2760,2761,5,313,0,0,2761,2766,3,108,54,0,2762,2763, + 5,312,0,0,2763,2765,3,108,54,0,2764,2762,1,0,0,0,2765,2768,1,0,0, + 0,2766,2764,1,0,0,0,2766,2767,1,0,0,0,2767,2769,1,0,0,0,2768,2766, + 1,0,0,0,2769,2770,5,314,0,0,2770,2772,1,0,0,0,2771,2707,1,0,0,0, + 2771,2729,1,0,0,0,2771,2737,1,0,0,0,2772,167,1,0,0,0,2773,2779,5, + 182,0,0,2774,2780,3,232,116,0,2775,2776,5,313,0,0,2776,2777,3,50, + 25,0,2777,2778,5,314,0,0,2778,2780,1,0,0,0,2779,2774,1,0,0,0,2779, + 2775,1,0,0,0,2780,169,1,0,0,0,2781,2782,5,151,0,0,2782,2787,3,76, + 38,0,2783,2784,5,312,0,0,2784,2786,3,76,38,0,2785,2783,1,0,0,0,2786, + 2789,1,0,0,0,2787,2785,1,0,0,0,2787,2788,1,0,0,0,2788,2791,1,0,0, + 0,2789,2787,1,0,0,0,2790,2781,1,0,0,0,2790,2791,1,0,0,0,2791,2792, + 1,0,0,0,2792,2796,3,172,86,0,2793,2794,5,4,0,0,2794,2795,5,146,0, + 0,2795,2797,3,82,41,0,2796,2793,1,0,0,0,2796,2797,1,0,0,0,2797,2799, + 1,0,0,0,2798,2800,7,16,0,0,2799,2798,1,0,0,0,2799,2800,1,0,0,0,2800, + 2806,1,0,0,0,2801,2802,5,189,0,0,2802,2803,5,313,0,0,2803,2804,3, + 176,88,0,2804,2805,5,314,0,0,2805,2807,1,0,0,0,2806,2801,1,0,0,0, + 2806,2807,1,0,0,0,2807,2817,1,0,0,0,2808,2809,5,241,0,0,2809,2814, + 3,84,42,0,2810,2811,5,312,0,0,2811,2813,3,84,42,0,2812,2810,1,0, + 0,0,2813,2816,1,0,0,0,2814,2812,1,0,0,0,2814,2815,1,0,0,0,2815,2818, + 1,0,0,0,2816,2814,1,0,0,0,2817,2808,1,0,0,0,2817,2818,1,0,0,0,2818, + 2828,1,0,0,0,2819,2820,5,54,0,0,2820,2825,3,86,43,0,2821,2822,5, + 312,0,0,2822,2824,3,86,43,0,2823,2821,1,0,0,0,2824,2827,1,0,0,0, + 2825,2823,1,0,0,0,2825,2826,1,0,0,0,2826,2829,1,0,0,0,2827,2825, + 1,0,0,0,2828,2819,1,0,0,0,2828,2829,1,0,0,0,2829,171,1,0,0,0,2830, + 2831,5,202,0,0,2831,2855,3,174,87,0,2832,2833,5,223,0,0,2833,2855, + 3,174,87,0,2834,2835,5,99,0,0,2835,2855,3,174,87,0,2836,2837,5,202, + 0,0,2837,2838,5,17,0,0,2838,2839,3,174,87,0,2839,2840,5,8,0,0,2840, + 2841,3,174,87,0,2841,2855,1,0,0,0,2842,2843,5,223,0,0,2843,2844, + 5,17,0,0,2844,2845,3,174,87,0,2845,2846,5,8,0,0,2846,2847,3,174, + 87,0,2847,2855,1,0,0,0,2848,2849,5,99,0,0,2849,2850,5,17,0,0,2850, + 2851,3,174,87,0,2851,2852,5,8,0,0,2852,2853,3,174,87,0,2853,2855, + 1,0,0,0,2854,2830,1,0,0,0,2854,2832,1,0,0,0,2854,2834,1,0,0,0,2854, + 2836,1,0,0,0,2854,2842,1,0,0,0,2854,2848,1,0,0,0,2855,173,1,0,0, + 0,2856,2857,5,262,0,0,2857,2866,5,195,0,0,2858,2859,5,262,0,0,2859, + 2866,5,85,0,0,2860,2861,5,39,0,0,2861,2866,5,222,0,0,2862,2863,3, + 108,54,0,2863,2864,7,30,0,0,2864,2866,1,0,0,0,2865,2856,1,0,0,0, + 2865,2858,1,0,0,0,2865,2860,1,0,0,0,2865,2862,1,0,0,0,2866,175,1, + 0,0,0,2867,2868,6,88,-1,0,2868,2870,3,178,89,0,2869,2871,3,180,90, + 0,2870,2869,1,0,0,0,2870,2871,1,0,0,0,2871,2879,1,0,0,0,2872,2873, + 10,2,0,0,2873,2878,3,176,88,3,2874,2875,10,1,0,0,2875,2876,5,324, + 0,0,2876,2878,3,176,88,2,2877,2872,1,0,0,0,2877,2874,1,0,0,0,2878, + 2881,1,0,0,0,2879,2877,1,0,0,0,2879,2880,1,0,0,0,2880,177,1,0,0, + 0,2881,2879,1,0,0,0,2882,2908,3,232,116,0,2883,2884,5,313,0,0,2884, + 2908,5,314,0,0,2885,2886,5,192,0,0,2886,2887,5,313,0,0,2887,2892, + 3,176,88,0,2888,2889,5,312,0,0,2889,2891,3,176,88,0,2890,2888,1, + 0,0,0,2891,2894,1,0,0,0,2892,2890,1,0,0,0,2892,2893,1,0,0,0,2893, + 2895,1,0,0,0,2894,2892,1,0,0,0,2895,2896,5,314,0,0,2896,2908,1,0, + 0,0,2897,2898,5,313,0,0,2898,2899,3,176,88,0,2899,2900,5,314,0,0, + 2900,2908,1,0,0,0,2901,2908,5,326,0,0,2902,2908,5,325,0,0,2903,2904, + 5,319,0,0,2904,2905,3,176,88,0,2905,2906,5,320,0,0,2906,2908,1,0, + 0,0,2907,2882,1,0,0,0,2907,2883,1,0,0,0,2907,2885,1,0,0,0,2907,2897, + 1,0,0,0,2907,2901,1,0,0,0,2907,2902,1,0,0,0,2907,2903,1,0,0,0,2908, + 179,1,0,0,0,2909,2911,5,304,0,0,2910,2912,5,308,0,0,2911,2910,1, + 0,0,0,2911,2912,1,0,0,0,2912,2940,1,0,0,0,2913,2915,5,302,0,0,2914, + 2916,5,308,0,0,2915,2914,1,0,0,0,2915,2916,1,0,0,0,2916,2940,1,0, + 0,0,2917,2919,5,308,0,0,2918,2920,5,308,0,0,2919,2918,1,0,0,0,2919, + 2920,1,0,0,0,2920,2940,1,0,0,0,2921,2922,5,317,0,0,2922,2923,5,330, + 0,0,2923,2925,5,318,0,0,2924,2926,5,308,0,0,2925,2924,1,0,0,0,2925, + 2926,1,0,0,0,2926,2940,1,0,0,0,2927,2929,5,317,0,0,2928,2930,5,330, + 0,0,2929,2928,1,0,0,0,2929,2930,1,0,0,0,2930,2931,1,0,0,0,2931,2933, + 5,312,0,0,2932,2934,5,330,0,0,2933,2932,1,0,0,0,2933,2934,1,0,0, + 0,2934,2935,1,0,0,0,2935,2937,5,318,0,0,2936,2938,5,308,0,0,2937, + 2936,1,0,0,0,2937,2938,1,0,0,0,2938,2940,1,0,0,0,2939,2909,1,0,0, + 0,2939,2913,1,0,0,0,2939,2917,1,0,0,0,2939,2921,1,0,0,0,2939,2927, + 1,0,0,0,2940,181,1,0,0,0,2941,2942,3,232,116,0,2942,2943,5,296,0, + 0,2943,2944,3,108,54,0,2944,183,1,0,0,0,2945,2946,5,87,0,0,2946, + 2950,7,31,0,0,2947,2948,5,260,0,0,2948,2950,7,32,0,0,2949,2945,1, + 0,0,0,2949,2947,1,0,0,0,2950,185,1,0,0,0,2951,2952,5,117,0,0,2952, + 2953,5,136,0,0,2953,2957,3,188,94,0,2954,2955,5,203,0,0,2955,2957, + 7,33,0,0,2956,2951,1,0,0,0,2956,2954,1,0,0,0,2957,187,1,0,0,0,2958, + 2959,5,203,0,0,2959,2966,5,263,0,0,2960,2961,5,203,0,0,2961,2966, + 5,31,0,0,2962,2963,5,208,0,0,2963,2966,5,203,0,0,2964,2966,5,232, + 0,0,2965,2958,1,0,0,0,2965,2960,1,0,0,0,2965,2962,1,0,0,0,2965,2964, + 1,0,0,0,2966,189,1,0,0,0,2967,2973,3,108,54,0,2968,2969,3,232,116, + 0,2969,2970,5,323,0,0,2970,2971,3,108,54,0,2971,2973,1,0,0,0,2972, + 2967,1,0,0,0,2972,2968,1,0,0,0,2973,191,1,0,0,0,2974,2975,3,232, + 116,0,2975,2976,5,310,0,0,2976,2977,3,232,116,0,2977,2980,1,0,0, + 0,2978,2980,3,232,116,0,2979,2974,1,0,0,0,2979,2978,1,0,0,0,2980, + 193,1,0,0,0,2981,2986,3,192,96,0,2982,2983,5,312,0,0,2983,2985,3, + 192,96,0,2984,2982,1,0,0,0,2985,2988,1,0,0,0,2986,2984,1,0,0,0,2986, + 2987,1,0,0,0,2987,195,1,0,0,0,2988,2986,1,0,0,0,2989,2990,5,90,0, + 0,2990,2991,3,198,99,0,2991,2995,3,202,101,0,2992,2994,3,204,102, + 0,2993,2992,1,0,0,0,2994,2997,1,0,0,0,2995,2993,1,0,0,0,2995,2996, + 1,0,0,0,2996,2998,1,0,0,0,2997,2995,1,0,0,0,2998,2999,3,206,103, + 0,2999,197,1,0,0,0,3000,3001,3,220,110,0,3001,3010,5,313,0,0,3002, + 3007,3,200,100,0,3003,3004,5,312,0,0,3004,3006,3,200,100,0,3005, + 3003,1,0,0,0,3006,3009,1,0,0,0,3007,3005,1,0,0,0,3007,3008,1,0,0, + 0,3008,3011,1,0,0,0,3009,3007,1,0,0,0,3010,3002,1,0,0,0,3010,3011, + 1,0,0,0,3011,3012,1,0,0,0,3012,3013,5,314,0,0,3013,199,1,0,0,0,3014, + 3016,3,232,116,0,3015,3014,1,0,0,0,3015,3016,1,0,0,0,3016,3017,1, + 0,0,0,3017,3018,3,156,78,0,3018,201,1,0,0,0,3019,3020,5,215,0,0, + 3020,3021,3,156,78,0,3021,203,1,0,0,0,3022,3023,5,130,0,0,3023,3042, + 3,232,116,0,3024,3026,5,165,0,0,3025,3024,1,0,0,0,3025,3026,1,0, + 0,0,3026,3027,1,0,0,0,3027,3042,5,61,0,0,3028,3029,5,215,0,0,3029, + 3030,5,166,0,0,3030,3031,5,173,0,0,3031,3032,5,166,0,0,3032,3042, + 5,109,0,0,3033,3034,5,21,0,0,3034,3035,5,173,0,0,3035,3036,5,166, + 0,0,3036,3042,5,109,0,0,3037,3038,5,229,0,0,3038,3042,7,1,0,0,3039, + 3040,5,29,0,0,3040,3042,3,140,70,0,3041,3022,1,0,0,0,3041,3025,1, + 0,0,0,3041,3028,1,0,0,0,3041,3033,1,0,0,0,3041,3037,1,0,0,0,3041, + 3039,1,0,0,0,3042,205,1,0,0,0,3043,3044,5,213,0,0,3044,3143,3,114, + 57,0,3045,3046,5,234,0,0,3046,3047,3,232,116,0,3047,3048,5,296,0, + 0,3048,3049,3,108,54,0,3049,3143,1,0,0,0,3050,3051,5,23,0,0,3051, + 3053,3,108,54,0,3052,3054,3,208,104,0,3053,3052,1,0,0,0,3054,3055, + 1,0,0,0,3055,3053,1,0,0,0,3055,3056,1,0,0,0,3056,3058,1,0,0,0,3057, + 3059,3,212,106,0,3058,3057,1,0,0,0,3058,3059,1,0,0,0,3059,3060,1, + 0,0,0,3060,3061,5,71,0,0,3061,3062,5,23,0,0,3062,3143,1,0,0,0,3063, + 3065,5,23,0,0,3064,3066,3,208,104,0,3065,3064,1,0,0,0,3066,3067, + 1,0,0,0,3067,3065,1,0,0,0,3067,3068,1,0,0,0,3068,3070,1,0,0,0,3069, + 3071,3,212,106,0,3070,3069,1,0,0,0,3070,3071,1,0,0,0,3071,3072,1, + 0,0,0,3072,3073,5,71,0,0,3073,3074,5,23,0,0,3074,3143,1,0,0,0,3075, + 3076,5,102,0,0,3076,3077,3,108,54,0,3077,3078,5,249,0,0,3078,3082, + 3,216,108,0,3079,3081,3,210,105,0,3080,3079,1,0,0,0,3081,3084,1, + 0,0,0,3082,3080,1,0,0,0,3082,3083,1,0,0,0,3083,3086,1,0,0,0,3084, + 3082,1,0,0,0,3085,3087,3,212,106,0,3086,3085,1,0,0,0,3086,3087,1, + 0,0,0,3087,3088,1,0,0,0,3088,3089,5,71,0,0,3089,3090,5,102,0,0,3090, + 3143,1,0,0,0,3091,3092,5,118,0,0,3092,3143,3,232,116,0,3093,3094, + 5,134,0,0,3094,3143,3,232,116,0,3095,3101,5,15,0,0,3096,3097,3,214, + 107,0,3097,3098,5,309,0,0,3098,3100,1,0,0,0,3099,3096,1,0,0,0,3100, + 3103,1,0,0,0,3101,3099,1,0,0,0,3101,3102,1,0,0,0,3102,3105,1,0,0, + 0,3103,3101,1,0,0,0,3104,3106,3,216,108,0,3105,3104,1,0,0,0,3105, + 3106,1,0,0,0,3106,3107,1,0,0,0,3107,3143,5,71,0,0,3108,3109,3,232, + 116,0,3109,3110,5,311,0,0,3110,3112,1,0,0,0,3111,3108,1,0,0,0,3111, + 3112,1,0,0,0,3112,3113,1,0,0,0,3113,3114,5,144,0,0,3114,3115,3,216, + 108,0,3115,3116,5,71,0,0,3116,3117,5,144,0,0,3117,3143,1,0,0,0,3118, + 3119,3,232,116,0,3119,3120,5,311,0,0,3120,3122,1,0,0,0,3121,3118, + 1,0,0,0,3121,3122,1,0,0,0,3122,3123,1,0,0,0,3123,3124,5,286,0,0, + 3124,3125,3,108,54,0,3125,3126,5,64,0,0,3126,3127,3,216,108,0,3127, + 3128,5,71,0,0,3128,3129,5,286,0,0,3129,3143,1,0,0,0,3130,3131,3, + 232,116,0,3131,3132,5,311,0,0,3132,3134,1,0,0,0,3133,3130,1,0,0, + 0,3133,3134,1,0,0,0,3134,3135,1,0,0,0,3135,3136,5,207,0,0,3136,3137, + 3,216,108,0,3137,3138,5,270,0,0,3138,3139,3,108,54,0,3139,3140,5, + 71,0,0,3140,3141,5,207,0,0,3141,3143,1,0,0,0,3142,3043,1,0,0,0,3142, + 3045,1,0,0,0,3142,3050,1,0,0,0,3142,3063,1,0,0,0,3142,3075,1,0,0, + 0,3142,3091,1,0,0,0,3142,3093,1,0,0,0,3142,3095,1,0,0,0,3142,3111, + 1,0,0,0,3142,3121,1,0,0,0,3142,3133,1,0,0,0,3143,207,1,0,0,0,3144, + 3145,5,284,0,0,3145,3146,3,108,54,0,3146,3147,5,249,0,0,3147,3148, + 3,216,108,0,3148,209,1,0,0,0,3149,3150,5,69,0,0,3150,3151,3,108, + 54,0,3151,3152,5,249,0,0,3152,3153,3,216,108,0,3153,211,1,0,0,0, + 3154,3155,5,67,0,0,3155,3156,3,216,108,0,3156,213,1,0,0,0,3157,3158, + 5,52,0,0,3158,3163,3,232,116,0,3159,3160,5,312,0,0,3160,3162,3,232, + 116,0,3161,3159,1,0,0,0,3162,3165,1,0,0,0,3163,3161,1,0,0,0,3163, + 3164,1,0,0,0,3164,3166,1,0,0,0,3165,3163,1,0,0,0,3166,3169,3,156, + 78,0,3167,3168,5,53,0,0,3168,3170,3,114,57,0,3169,3167,1,0,0,0,3169, + 3170,1,0,0,0,3170,215,1,0,0,0,3171,3172,3,206,103,0,3172,3173,5, + 309,0,0,3173,3175,1,0,0,0,3174,3171,1,0,0,0,3175,3176,1,0,0,0,3176, + 3174,1,0,0,0,3176,3177,1,0,0,0,3177,217,1,0,0,0,3178,3179,7,34,0, + 0,3179,219,1,0,0,0,3180,3185,3,232,116,0,3181,3182,5,310,0,0,3182, + 3184,3,232,116,0,3183,3181,1,0,0,0,3184,3187,1,0,0,0,3185,3183,1, + 0,0,0,3185,3186,1,0,0,0,3186,221,1,0,0,0,3187,3185,1,0,0,0,3188, + 3189,5,86,0,0,3189,3190,3,224,112,0,3190,3191,5,11,0,0,3191,3192, + 5,170,0,0,3192,3193,3,114,57,0,3193,223,1,0,0,0,3194,3195,7,35,0, + 0,3195,225,1,0,0,0,3196,3200,3,228,114,0,3197,3200,5,47,0,0,3198, + 3200,5,43,0,0,3199,3196,1,0,0,0,3199,3197,1,0,0,0,3199,3198,1,0, + 0,0,3200,227,1,0,0,0,3201,3207,3,232,116,0,3202,3203,5,273,0,0,3203, + 3207,3,232,116,0,3204,3205,5,218,0,0,3205,3207,3,232,116,0,3206, + 3201,1,0,0,0,3206,3202,1,0,0,0,3206,3204,1,0,0,0,3207,229,1,0,0, + 0,3208,3213,3,232,116,0,3209,3210,5,312,0,0,3210,3212,3,232,116, + 0,3211,3209,1,0,0,0,3212,3215,1,0,0,0,3213,3211,1,0,0,0,3213,3214, + 1,0,0,0,3214,231,1,0,0,0,3215,3213,1,0,0,0,3216,3222,5,333,0,0,3217, + 3222,5,335,0,0,3218,3222,3,238,119,0,3219,3222,5,336,0,0,3220,3222, + 5,334,0,0,3221,3216,1,0,0,0,3221,3217,1,0,0,0,3221,3218,1,0,0,0, + 3221,3219,1,0,0,0,3221,3220,1,0,0,0,3222,233,1,0,0,0,3223,3225,5, + 303,0,0,3224,3223,1,0,0,0,3224,3225,1,0,0,0,3225,3226,1,0,0,0,3226, + 3236,5,331,0,0,3227,3229,5,303,0,0,3228,3227,1,0,0,0,3228,3229,1, + 0,0,0,3229,3230,1,0,0,0,3230,3236,5,332,0,0,3231,3233,5,303,0,0, + 3232,3231,1,0,0,0,3232,3233,1,0,0,0,3233,3234,1,0,0,0,3234,3236, + 5,330,0,0,3235,3224,1,0,0,0,3235,3228,1,0,0,0,3235,3232,1,0,0,0, + 3236,235,1,0,0,0,3237,3240,3,232,116,0,3238,3240,3,140,70,0,3239, + 3237,1,0,0,0,3239,3238,1,0,0,0,3240,237,1,0,0,0,3241,3242,7,36,0, + 0,3242,239,1,0,0,0,434,241,247,253,268,275,279,283,289,293,300,305, + 309,315,319,338,344,348,352,356,364,368,371,376,382,391,397,401, + 407,414,423,435,444,453,459,470,478,486,493,503,510,518,554,557, + 560,564,570,575,582,588,592,596,604,610,614,628,636,655,680,683, + 690,697,706,710,717,727,733,738,742,748,757,763,767,774,778,786, + 791,795,803,811,816,820,830,837,842,846,856,859,868,873,879,903, + 909,911,917,923,925,933,935,941,947,949,964,969,976,986,992,994, + 1002,1004,1029,1032,1036,1040,1058,1061,1072,1075,1091,1101,1106, + 1112,1115,1124,1126,1129,1139,1143,1149,1156,1161,1167,1171,1175, + 1181,1192,1201,1211,1214,1219,1221,1228,1234,1236,1240,1250,1256, + 1259,1261,1273,1280,1284,1288,1292,1299,1308,1311,1315,1320,1324, + 1332,1335,1338,1345,1356,1359,1369,1372,1383,1388,1396,1399,1403, + 1412,1421,1424,1433,1436,1439,1443,1454,1457,1464,1467,1486,1490, + 1494,1498,1500,1511,1516,1525,1534,1537,1552,1555,1564,1567,1575, + 1578,1581,1586,1589,1601,1604,1612,1617,1621,1623,1625,1640,1642, + 1653,1660,1663,1668,1678,1689,1693,1695,1703,1710,1723,1729,1745, + 1754,1757,1765,1768,1775,1780,1791,1794,1798,1800,1808,1818,1824, + 1826,1833,1837,1839,1846,1850,1852,1854,1863,1874,1878,1888,1898, + 1902,1910,1912,1925,1933,1942,1948,1956,1962,1966,1971,1976,1982, + 1996,1998,2028,2039,2047,2052,2057,2070,2076,2079,2086,2091,2094, + 2097,2102,2109,2112,2121,2124,2128,2131,2134,2149,2152,2171,2175, + 2183,2187,2212,2215,2224,2230,2236,2242,2251,2254,2257,2276,2285, + 2307,2310,2320,2329,2335,2341,2352,2354,2359,2366,2368,2374,2380, + 2391,2400,2405,2410,2412,2414,2420,2422,2432,2441,2443,2449,2451, + 2454,2464,2466,2478,2481,2486,2491,2503,2507,2511,2514,2516,2522, + 2525,2535,2543,2549,2551,2559,2569,2575,2589,2598,2605,2610,2617, + 2627,2632,2639,2665,2670,2672,2679,2683,2690,2694,2711,2726,2733, + 2742,2752,2757,2766,2771,2779,2787,2790,2796,2799,2806,2814,2817, + 2825,2828,2854,2865,2870,2877,2879,2892,2907,2911,2915,2919,2925, + 2929,2933,2937,2939,2949,2956,2965,2972,2979,2986,2995,3007,3010, + 3015,3025,3041,3055,3058,3067,3070,3082,3086,3101,3105,3111,3121, + 3133,3142,3163,3169,3176,3185,3199,3206,3213,3221,3224,3228,3232, + 3235,3239 + ]; + + private static __ATN: antlr.ATN; + public static get _ATN(): antlr.ATN { + if (!TrinoParser.__ATN) { + TrinoParser.__ATN = new antlr.ATNDeserializer().deserialize(TrinoParser._serializedATN); + } + + return TrinoParser.__ATN; + } + + + private static readonly vocabulary = new antlr.Vocabulary(TrinoParser.literalNames, TrinoParser.symbolicNames, []); + + public override get vocabulary(): antlr.Vocabulary { + return TrinoParser.vocabulary; + } + + private static readonly decisionsToDFA = TrinoParser._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) ); +} + +export class ParseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EOF(): antlr.TerminalNode { + return this.getToken(TrinoParser.EOF, 0)!; + } + public statements(): StatementsContext | null { + return this.getRuleContext(0, StatementsContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_parse; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitParse) { + return visitor.visitParse(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatementsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public statement(): StatementContext { + return this.getRuleContext(0, StatementContext)!; + } + public SEMICOLON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SEMICOLON_, 0); + } + public statements(): StatementsContext | null { + return this.getRuleContext(0, StatementsContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_statements; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitStatements) { + return visitor.visitStatements(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_statement; + } + public override copyFrom(ctx: StatementContext): void { + super.copyFrom(ctx); + } +} +export class ExplainContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public EXPLAIN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EXPLAIN_, 0)!; + } + public statement(): StatementContext { + return this.getRuleContext(0, StatementContext)!; + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public explainOption(): ExplainOptionContext[]; + public explainOption(i: number): ExplainOptionContext | null; + public explainOption(i?: number): ExplainOptionContext[] | ExplainOptionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExplainOptionContext); + } + + return this.getRuleContext(i, ExplainOptionContext); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExplain) { + return visitor.visitExplain(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PrepareContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public PREPARE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PREPARE_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public FROM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FROM_, 0)!; + } + public statement(): StatementContext { + return this.getRuleContext(0, StatementContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPrepare) { + return visitor.visitPrepare(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropMaterializedViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public MATERIALIZED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATERIALIZED_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropMaterializedView) { + return visitor.visitDropMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetMaterializedViewPropertiesContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public MATERIALIZED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATERIALIZED_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public PROPERTIES_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PROPERTIES_, 0)!; + } + public propertyAssignments(): PropertyAssignmentsContext { + return this.getRuleContext(0, PropertyAssignmentsContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetMaterializedViewProperties) { + return visitor.visitSetMaterializedViewProperties(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UseContext extends StatementContext { + public _schema?: IdentifierContext; + public _catalog?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public USE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.USE_, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public DOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DOT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUse) { + return visitor.visitUse(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DeallocateContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DEALLOCATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DEALLOCATE_, 0)!; + } + public PREPARE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PREPARE_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDeallocate) { + return visitor.visitDeallocate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameTableContext extends StatementContext { + public _from_?: QualifiedNameContext; + public _to?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public RENAME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RENAME_, 0)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRenameTable) { + return visitor.visitRenameTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommitContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMIT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COMMIT_, 0)!; + } + public WORK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WORK_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCommit) { + return visitor.visitCommit(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateRoleContext extends StatementContext { + public _name?: IdentifierContext; + public _catalog?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public ROLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLE_, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public ADMIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ADMIN_, 0); + } + public grantor(): GrantorContext | null { + return this.getRuleContext(0, GrantorContext); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateRole) { + return visitor.visitCreateRole(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropColumnContext extends StatementContext { + public _tableName?: QualifiedNameContext; + public _column?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public COLUMN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COLUMN_, 0)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public IF_(): antlr.TerminalNode[]; + public IF_(i: number): antlr.TerminalNode | null; + public IF_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.IF_); + } else { + return this.getToken(TrinoParser.IF_, i); + } + } + public EXISTS_(): antlr.TerminalNode[]; + public EXISTS_(i: number): antlr.TerminalNode | null; + public EXISTS_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.EXISTS_); + } else { + return this.getToken(TrinoParser.EXISTS_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropColumn) { + return visitor.visitDropColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropView) { + return visitor.visitDropView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowTablesContext extends StatementContext { + public _pattern?: String_Context; + public _escape?: String_Context; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public TABLES_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLES_, 0)!; + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public LIKE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIKE_, 0); + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public string_(): String_Context[]; + public string_(i: number): String_Context | null; + public string_(i?: number): String_Context[] | String_Context | null { + if (i === undefined) { + return this.getRuleContexts(String_Context); + } + + return this.getRuleContext(i, String_Context); + } + public ESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ESCAPE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowTables) { + return visitor.visitShowTables(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetViewAuthorizationContext extends StatementContext { + public _from_?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public AUTHORIZATION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AUTHORIZATION_, 0)!; + } + public principal(): PrincipalContext { + return this.getRuleContext(0, PrincipalContext)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetViewAuthorization) { + return visitor.visitSetViewAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCatalogsContext extends StatementContext { + public _pattern?: String_Context; + public _escape?: String_Context; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public CATALOGS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CATALOGS_, 0)!; + } + public LIKE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIKE_, 0); + } + public string_(): String_Context[]; + public string_(i: number): String_Context | null; + public string_(i?: number): String_Context[] | String_Context | null { + if (i === undefined) { + return this.getRuleContexts(String_Context); + } + + return this.getRuleContext(i, String_Context); + } + public ESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ESCAPE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowCatalogs) { + return visitor.visitShowCatalogs(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowRolesContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public ROLES_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLES_, 0)!; + } + public CURRENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CURRENT_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowRoles) { + return visitor.visitShowRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MergeContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public MERGE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MERGE_, 0)!; + } + public INTO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INTO_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public USING_(): antlr.TerminalNode { + return this.getToken(TrinoParser.USING_, 0)!; + } + public relation(): RelationContext { + return this.getRuleContext(0, RelationContext)!; + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public mergeCase(): MergeCaseContext[]; + public mergeCase(i: number): MergeCaseContext | null; + public mergeCase(i?: number): MergeCaseContext[] | MergeCaseContext | null { + if (i === undefined) { + return this.getRuleContexts(MergeCaseContext); + } + + return this.getRuleContext(i, MergeCaseContext); + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitMerge) { + return visitor.visitMerge(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameColumnContext extends StatementContext { + public _tableName?: QualifiedNameContext; + public _from_?: QualifiedNameContext; + public _to?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public RENAME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RENAME_, 0)!; + } + public COLUMN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COLUMN_, 0)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public IF_(): antlr.TerminalNode[]; + public IF_(i: number): antlr.TerminalNode | null; + public IF_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.IF_); + } else { + return this.getToken(TrinoParser.IF_, i); + } + } + public EXISTS_(): antlr.TerminalNode[]; + public EXISTS_(i: number): antlr.TerminalNode | null; + public EXISTS_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.EXISTS_); + } else { + return this.getToken(TrinoParser.EXISTS_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRenameColumn) { + return visitor.visitRenameColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommentColumnContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMENT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COMMENT_, 0)!; + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public COLUMN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COLUMN_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IS_, 0)!; + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public NULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULL_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCommentColumn) { + return visitor.visitCommentColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RevokeRolesContext extends StatementContext { + public _catalog?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public REVOKE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.REVOKE_, 0)!; + } + public roles(): RolesContext { + return this.getRuleContext(0, RolesContext)!; + } + public FROM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FROM_, 0)!; + } + public principal(): PrincipalContext[]; + public principal(i: number): PrincipalContext | null; + public principal(i?: number): PrincipalContext[] | PrincipalContext | null { + if (i === undefined) { + return this.getRuleContexts(PrincipalContext); + } + + return this.getRuleContext(i, PrincipalContext); + } + public ADMIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ADMIN_, 0); + } + public OPTION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OPTION_, 0); + } + public FOR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FOR_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public GRANTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRANTED_, 0); + } + public BY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BY_, 0); + } + public grantor(): GrantorContext | null { + return this.getRuleContext(0, GrantorContext); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRevokeRoles) { + return visitor.visitRevokeRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateTableContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowCreateTable) { + return visitor.visitShowCreateTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowColumnsContext extends StatementContext { + public _pattern?: String_Context; + public _escape?: String_Context; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SHOW_, 0); + } + public COLUMNS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COLUMNS_, 0); + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public LIKE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIKE_, 0); + } + public string_(): String_Context[]; + public string_(i: number): String_Context | null; + public string_(i?: number): String_Context[] | String_Context | null { + if (i === undefined) { + return this.getRuleContexts(String_Context); + } + + return this.getRuleContext(i, String_Context); + } + public ESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ESCAPE_, 0); + } + public DESCRIBE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DESCRIBE_, 0); + } + public DESC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DESC_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowColumns) { + return visitor.visitShowColumns(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowRoleGrantsContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public ROLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLE_, 0)!; + } + public GRANTS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.GRANTS_, 0)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowRoleGrants) { + return visitor.visitShowRoleGrants(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AddColumnContext extends StatementContext { + public _tableName?: QualifiedNameContext; + public _column?: ColumnDefinitionContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public ADD_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ADD_, 0)!; + } + public COLUMN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COLUMN_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public columnDefinition(): ColumnDefinitionContext { + return this.getRuleContext(0, ColumnDefinitionContext)!; + } + public IF_(): antlr.TerminalNode[]; + public IF_(i: number): antlr.TerminalNode | null; + public IF_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.IF_); + } else { + return this.getToken(TrinoParser.IF_, i); + } + } + public EXISTS_(): antlr.TerminalNode[]; + public EXISTS_(i: number): antlr.TerminalNode | null; + public EXISTS_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.EXISTS_); + } else { + return this.getToken(TrinoParser.EXISTS_, i); + } + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitAddColumn) { + return visitor.visitAddColumn(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DenyContext extends StatementContext { + public _grantee?: PrincipalContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DENY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DENY_, 0)!; + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public principal(): PrincipalContext { + return this.getRuleContext(0, PrincipalContext)!; + } + public privilege(): PrivilegeContext[]; + public privilege(i: number): PrivilegeContext | null; + public privilege(i?: number): PrivilegeContext[] | PrivilegeContext | null { + if (i === undefined) { + return this.getRuleContexts(PrivilegeContext); + } + + return this.getRuleContext(i, PrivilegeContext); + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public PRIVILEGES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRIVILEGES_, 0); + } + public SCHEMA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SCHEMA_, 0); + } + public TABLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TABLE_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDeny) { + return visitor.visitDeny(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ResetSessionContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public RESET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RESET_, 0)!; + } + public SESSION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SESSION_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitResetSession) { + return visitor.visitResetSession(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InsertIntoContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public INSERT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INSERT_, 0)!; + } + public INTO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INTO_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public rootQuery(): RootQueryContext { + return this.getRuleContext(0, RootQueryContext)!; + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitInsertInto) { + return visitor.visitInsertInto(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowSessionContext extends StatementContext { + public _pattern?: String_Context; + public _escape?: String_Context; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public SESSION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SESSION_, 0)!; + } + public LIKE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIKE_, 0); + } + public string_(): String_Context[]; + public string_(i: number): String_Context | null; + public string_(i?: number): String_Context[] | String_Context | null { + if (i === undefined) { + return this.getRuleContexts(String_Context); + } + + return this.getRuleContext(i, String_Context); + } + public ESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ESCAPE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowSession) { + return visitor.visitShowSession(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateSchemaContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public SCHEMA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SCHEMA_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public AUTHORIZATION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AUTHORIZATION_, 0); + } + public principal(): PrincipalContext | null { + return this.getRuleContext(0, PrincipalContext); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public properties(): PropertiesContext | null { + return this.getRuleContext(0, PropertiesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateSchema) { + return visitor.visitCreateSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetSessionAuthorizationContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public SESSION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SESSION_, 0)!; + } + public AUTHORIZATION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AUTHORIZATION_, 0)!; + } + public authorizationUser(): AuthorizationUserContext { + return this.getRuleContext(0, AuthorizationUserContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetSessionAuthorization) { + return visitor.visitSetSessionAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExplainAnalyzeContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public EXPLAIN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EXPLAIN_, 0)!; + } + public ANALYZE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ANALYZE_, 0)!; + } + public statement(): StatementContext { + return this.getRuleContext(0, StatementContext)!; + } + public VERBOSE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VERBOSE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExplainAnalyze) { + return visitor.visitExplainAnalyze(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExecuteContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public EXECUTE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EXECUTE_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public USING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.USING_, 0); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExecute) { + return visitor.visitExecute(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameSchemaContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public SCHEMA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SCHEMA_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public RENAME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RENAME_, 0)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRenameSchema) { + return visitor.visitRenameSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropRoleContext extends StatementContext { + public _name?: IdentifierContext; + public _catalog?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public ROLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLE_, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropRole) { + return visitor.visitDropRole(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AnalyzeContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ANALYZE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ANALYZE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public properties(): PropertiesContext | null { + return this.getRuleContext(0, PropertiesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitAnalyze) { + return visitor.visitAnalyze(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetRoleContext extends StatementContext { + public _role?: IdentifierContext; + public _catalog?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public ROLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLE_, 0)!; + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public NONE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NONE_, 0); + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetRole) { + return visitor.visitSetRole(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateFunctionContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public functionSpecification(): FunctionSpecificationContext { + return this.getRuleContext(0, FunctionSpecificationContext)!; + } + public OR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OR_, 0); + } + public REPLACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPLACE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateFunction) { + return visitor.visitCreateFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropCatalogContext extends StatementContext { + public _catalog?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public CATALOG_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CATALOG_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public CASCADE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CASCADE_, 0); + } + public RESTRICT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RESTRICT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropCatalog) { + return visitor.visitDropCatalog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowGrantsContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public GRANTS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.GRANTS_, 0)!; + } + public ON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ON_, 0); + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public TABLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TABLE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowGrants) { + return visitor.visitShowGrants(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropSchemaContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public SCHEMA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SCHEMA_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public CASCADE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CASCADE_, 0); + } + public RESTRICT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RESTRICT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropSchema) { + return visitor.visitDropSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ResetSessionAuthorizationContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public RESET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RESET_, 0)!; + } + public SESSION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SESSION_, 0)!; + } + public AUTHORIZATION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AUTHORIZATION_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitResetSessionAuthorization) { + return visitor.visitResetSessionAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetTableAuthorizationContext extends StatementContext { + public _tableName?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public AUTHORIZATION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AUTHORIZATION_, 0)!; + } + public principal(): PrincipalContext { + return this.getRuleContext(0, PrincipalContext)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetTableAuthorization) { + return visitor.visitSetTableAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowCreateView) { + return visitor.visitShowCreateView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateTableContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public tableElement(): TableElementContext[]; + public tableElement(i: number): TableElementContext | null; + public tableElement(i?: number): TableElementContext[] | TableElementContext | null { + if (i === undefined) { + return this.getRuleContexts(TableElementContext); + } + + return this.getRuleContext(i, TableElementContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public OR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OR_, 0); + } + public REPLACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPLACE_, 0); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public COMMENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMENT_, 0); + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public properties(): PropertiesContext | null { + return this.getRuleContext(0, PropertiesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateTable) { + return visitor.visitCreateTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StartTransactionContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public START_(): antlr.TerminalNode { + return this.getToken(TrinoParser.START_, 0)!; + } + public TRANSACTION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TRANSACTION_, 0)!; + } + public transactionMode(): TransactionModeContext[]; + public transactionMode(i: number): TransactionModeContext | null; + public transactionMode(i?: number): TransactionModeContext[] | TransactionModeContext | null { + if (i === undefined) { + return this.getRuleContexts(TransactionModeContext); + } + + return this.getRuleContext(i, TransactionModeContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitStartTransaction) { + return visitor.visitStartTransaction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateTableAsSelectContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public rootQuery(): RootQueryContext | null { + return this.getRuleContext(0, RootQueryContext); + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public OR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OR_, 0); + } + public REPLACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPLACE_, 0); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public COMMENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMENT_, 0); + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public WITH_(): antlr.TerminalNode[]; + public WITH_(i: number): antlr.TerminalNode | null; + public WITH_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.WITH_); + } else { + return this.getToken(TrinoParser.WITH_, i); + } + } + public properties(): PropertiesContext | null { + return this.getRuleContext(0, PropertiesContext); + } + public DATA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DATA_, 0); + } + public NO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NO_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateTableAsSelect) { + return visitor.visitCreateTableAsSelect(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommentViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMENT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COMMENT_, 0)!; + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IS_, 0)!; + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public NULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULL_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCommentView) { + return visitor.visitCommentView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowStatsContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public STATS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.STATS_, 0)!; + } + public FOR_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FOR_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowStats) { + return visitor.visitShowStats(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateSchemaContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public SCHEMA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SCHEMA_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowCreateSchema) { + return visitor.visitShowCreateSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropFunctionContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public FUNCTION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FUNCTION_, 0)!; + } + public functionDeclaration(): FunctionDeclarationContext { + return this.getRuleContext(0, FunctionDeclarationContext)!; + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropFunction) { + return visitor.visitDropFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RevokeContext extends StatementContext { + public _grantee?: PrincipalContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public REVOKE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.REVOKE_, 0)!; + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public FROM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FROM_, 0)!; + } + public principal(): PrincipalContext { + return this.getRuleContext(0, PrincipalContext)!; + } + public privilege(): PrivilegeContext[]; + public privilege(i: number): PrivilegeContext | null; + public privilege(i?: number): PrivilegeContext[] | PrivilegeContext | null { + if (i === undefined) { + return this.getRuleContexts(PrivilegeContext); + } + + return this.getRuleContext(i, PrivilegeContext); + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public PRIVILEGES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRIVILEGES_, 0); + } + public GRANT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRANT_, 0); + } + public OPTION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OPTION_, 0); + } + public FOR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FOR_, 0); + } + public SCHEMA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SCHEMA_, 0); + } + public TABLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TABLE_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRevoke) { + return visitor.visitRevoke(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UpdateContext extends StatementContext { + public _where?: BooleanExpressionContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public UPDATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.UPDATE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public updateAssignment(): UpdateAssignmentContext[]; + public updateAssignment(i: number): UpdateAssignmentContext | null; + public updateAssignment(i?: number): UpdateAssignmentContext[] | UpdateAssignmentContext | null { + if (i === undefined) { + return this.getRuleContexts(UpdateAssignmentContext); + } + + return this.getRuleContext(i, UpdateAssignmentContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public WHERE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WHERE_, 0); + } + public booleanExpression(): BooleanExpressionContext | null { + return this.getRuleContext(0, BooleanExpressionContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUpdate) { + return visitor.visitUpdate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableExecuteContext extends StatementContext { + public _tableName?: QualifiedNameContext; + public _procedureName?: IdentifierContext; + public _where?: BooleanExpressionContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public EXECUTE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EXECUTE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public WHERE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WHERE_, 0); + } + public booleanExpression(): BooleanExpressionContext | null { + return this.getRuleContext(0, BooleanExpressionContext); + } + public callArgument(): CallArgumentContext[]; + public callArgument(i: number): CallArgumentContext | null; + public callArgument(i?: number): CallArgumentContext[] | CallArgumentContext | null { + if (i === undefined) { + return this.getRuleContexts(CallArgumentContext); + } + + return this.getRuleContext(i, CallArgumentContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableExecute) { + return visitor.visitTableExecute(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DeleteContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DELETE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DELETE_, 0)!; + } + public FROM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FROM_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public WHERE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WHERE_, 0); + } + public booleanExpression(): BooleanExpressionContext | null { + return this.getRuleContext(0, BooleanExpressionContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDelete) { + return visitor.visitDelete(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DescribeInputContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DESCRIBE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DESCRIBE_, 0)!; + } + public INPUT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INPUT_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDescribeInput) { + return visitor.visitDescribeInput(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowStatsForQueryContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public STATS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.STATS_, 0)!; + } + public FOR_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FOR_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public rootQuery(): RootQueryContext { + return this.getRuleContext(0, RootQueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowStatsForQuery) { + return visitor.visitShowStatsForQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetColumnTypeContext extends StatementContext { + public _tableName?: QualifiedNameContext; + public _columnName?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode[]; + public ALTER_(i: number): antlr.TerminalNode | null; + public ALTER_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.ALTER_); + } else { + return this.getToken(TrinoParser.ALTER_, i); + } + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public COLUMN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COLUMN_, 0)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public DATA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DATA_, 0)!; + } + public TYPE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TYPE_, 0)!; + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetColumnType) { + return visitor.visitSetColumnType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StatementDefaultContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public rootQuery(): RootQueryContext { + return this.getRuleContext(0, RootQueryContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitStatementDefault) { + return visitor.visitStatementDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetTimeZoneContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public TIME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TIME_, 0)!; + } + public ZONE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ZONE_, 0)!; + } + public LOCAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LOCAL_, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetTimeZone) { + return visitor.visitSetTimeZone(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TruncateTableContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TRUNCATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TRUNCATE_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTruncateTable) { + return visitor.visitTruncateTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateMaterializedViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public MATERIALIZED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATERIALIZED_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public rootQuery(): RootQueryContext { + return this.getRuleContext(0, RootQueryContext)!; + } + public OR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OR_, 0); + } + public REPLACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPLACE_, 0); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public GRACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRACE_, 0); + } + public PERIOD_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PERIOD_, 0); + } + public interval(): IntervalContext | null { + return this.getRuleContext(0, IntervalContext); + } + public COMMENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMENT_, 0); + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public properties(): PropertiesContext | null { + return this.getRuleContext(0, PropertiesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateMaterializedView) { + return visitor.visitCreateMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetSessionContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public SESSION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SESSION_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public EQ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EQ_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetSession) { + return visitor.visitSetSession(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public rootQuery(): RootQueryContext { + return this.getRuleContext(0, RootQueryContext)!; + } + public OR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OR_, 0); + } + public REPLACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPLACE_, 0); + } + public COMMENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMENT_, 0); + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public SECURITY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SECURITY_, 0); + } + public DEFINER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFINER_, 0); + } + public INVOKER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INVOKER_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateView) { + return visitor.visitCreateView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameMaterializedViewContext extends StatementContext { + public _from_?: QualifiedNameContext; + public _to?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public MATERIALIZED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATERIALIZED_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public RENAME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RENAME_, 0)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRenameMaterializedView) { + return visitor.visitRenameMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowSchemasContext extends StatementContext { + public _pattern?: String_Context; + public _escape?: String_Context; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public SCHEMAS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SCHEMAS_, 0)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public LIKE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIKE_, 0); + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public string_(): String_Context[]; + public string_(i: number): String_Context | null; + public string_(i?: number): String_Context[] | String_Context | null { + if (i === undefined) { + return this.getRuleContexts(String_Context); + } + + return this.getRuleContext(i, String_Context); + } + public ESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ESCAPE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowSchemas) { + return visitor.visitShowSchemas(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DropTableContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DROP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DROP_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDropTable) { + return visitor.visitDropTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetSchemaAuthorizationContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public SCHEMA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SCHEMA_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public AUTHORIZATION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AUTHORIZATION_, 0)!; + } + public principal(): PrincipalContext { + return this.getRuleContext(0, PrincipalContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetSchemaAuthorization) { + return visitor.visitSetSchemaAuthorization(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RollbackContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ROLLBACK_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLLBACK_, 0)!; + } + public WORK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WORK_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRollback) { + return visitor.visitRollback(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommentTableContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMENT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COMMENT_, 0)!; + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public IS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IS_, 0)!; + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public NULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULL_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCommentTable) { + return visitor.visitCommentTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExecuteImmediateContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public EXECUTE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EXECUTE_, 0)!; + } + public IMMEDIATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IMMEDIATE_, 0)!; + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public USING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.USING_, 0); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExecuteImmediate) { + return visitor.visitExecuteImmediate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RenameViewContext extends StatementContext { + public _from_?: QualifiedNameContext; + public _to?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public RENAME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RENAME_, 0)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRenameView) { + return visitor.visitRenameView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetPathContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public PATH_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PATH_, 0)!; + } + public pathSpecification(): PathSpecificationContext { + return this.getRuleContext(0, PathSpecificationContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetPath) { + return visitor.visitSetPath(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GrantRolesContext extends StatementContext { + public _catalog?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public GRANT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.GRANT_, 0)!; + } + public roles(): RolesContext { + return this.getRuleContext(0, RolesContext)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public principal(): PrincipalContext[]; + public principal(i: number): PrincipalContext | null; + public principal(i?: number): PrincipalContext[] | PrincipalContext | null { + if (i === undefined) { + return this.getRuleContexts(PrincipalContext); + } + + return this.getRuleContext(i, PrincipalContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public ADMIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ADMIN_, 0); + } + public OPTION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OPTION_, 0); + } + public GRANTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRANTED_, 0); + } + public BY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BY_, 0); + } + public grantor(): GrantorContext | null { + return this.getRuleContext(0, GrantorContext); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitGrantRoles) { + return visitor.visitGrantRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CallContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CALL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CALL_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public callArgument(): CallArgumentContext[]; + public callArgument(i: number): CallArgumentContext | null; + public callArgument(i?: number): CallArgumentContext[] | CallArgumentContext | null { + if (i === undefined) { + return this.getRuleContexts(CallArgumentContext); + } + + return this.getRuleContext(i, CallArgumentContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCall) { + return visitor.visitCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RefreshMaterializedViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public REFRESH_(): antlr.TerminalNode { + return this.getToken(TrinoParser.REFRESH_, 0)!; + } + public MATERIALIZED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATERIALIZED_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRefreshMaterializedView) { + return visitor.visitRefreshMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowCreateMaterializedViewContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public MATERIALIZED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATERIALIZED_, 0)!; + } + public VIEW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VIEW_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowCreateMaterializedView) { + return visitor.visitShowCreateMaterializedView(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CreateCatalogContext extends StatementContext { + public _catalog?: IdentifierContext; + public _connectorName?: IdentifierContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CREATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CREATE_, 0)!; + } + public CATALOG_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CATALOG_, 0)!; + } + public USING_(): antlr.TerminalNode { + return this.getToken(TrinoParser.USING_, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public EXISTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXISTS_, 0); + } + public COMMENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMENT_, 0); + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public AUTHORIZATION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AUTHORIZATION_, 0); + } + public principal(): PrincipalContext | null { + return this.getRuleContext(0, PrincipalContext); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public properties(): PropertiesContext | null { + return this.getRuleContext(0, PropertiesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCreateCatalog) { + return visitor.visitCreateCatalog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ShowFunctionsContext extends StatementContext { + public _pattern?: String_Context; + public _escape?: String_Context; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SHOW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SHOW_, 0)!; + } + public FUNCTIONS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FUNCTIONS_, 0)!; + } + public qualifiedName(): QualifiedNameContext | null { + return this.getRuleContext(0, QualifiedNameContext); + } + public LIKE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIKE_, 0); + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public IN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IN_, 0); + } + public string_(): String_Context[]; + public string_(i: number): String_Context | null; + public string_(i?: number): String_Context[] | String_Context | null { + if (i === undefined) { + return this.getRuleContexts(String_Context); + } + + return this.getRuleContext(i, String_Context); + } + public ESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ESCAPE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitShowFunctions) { + return visitor.visitShowFunctions(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DescribeOutputContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DESCRIBE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DESCRIBE_, 0)!; + } + public OUTPUT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.OUTPUT_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDescribeOutput) { + return visitor.visitDescribeOutput(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GrantContext extends StatementContext { + public _grantee?: PrincipalContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public GRANT_(): antlr.TerminalNode[]; + public GRANT_(i: number): antlr.TerminalNode | null; + public GRANT_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.GRANT_); + } else { + return this.getToken(TrinoParser.GRANT_, i); + } + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public TO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TO_, 0)!; + } + public principal(): PrincipalContext { + return this.getRuleContext(0, PrincipalContext)!; + } + public privilege(): PrivilegeContext[]; + public privilege(i: number): PrivilegeContext | null; + public privilege(i?: number): PrivilegeContext[] | PrivilegeContext | null { + if (i === undefined) { + return this.getRuleContexts(PrivilegeContext); + } + + return this.getRuleContext(i, PrivilegeContext); + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public PRIVILEGES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRIVILEGES_, 0); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public OPTION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OPTION_, 0); + } + public SCHEMA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SCHEMA_, 0); + } + public TABLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TABLE_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitGrant) { + return visitor.visitGrant(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetTablePropertiesContext extends StatementContext { + public _tableName?: QualifiedNameContext; + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ALTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ALTER_, 0)!; + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public PROPERTIES_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PROPERTIES_, 0)!; + } + public propertyAssignments(): PropertyAssignmentsContext { + return this.getRuleContext(0, PropertyAssignmentsContext)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetTableProperties) { + return visitor.visitSetTableProperties(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RootQueryContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public withFunction(): WithFunctionContext | null { + return this.getRuleContext(0, WithFunctionContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_rootQuery; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRootQuery) { + return visitor.visitRootQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WithFunctionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WITH_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WITH_, 0)!; + } + public functionSpecification(): FunctionSpecificationContext[]; + public functionSpecification(i: number): FunctionSpecificationContext | null; + public functionSpecification(i?: number): FunctionSpecificationContext[] | FunctionSpecificationContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionSpecificationContext); + } + + return this.getRuleContext(i, FunctionSpecificationContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_withFunction; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitWithFunction) { + return visitor.visitWithFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public queryNoWith(): QueryNoWithContext { + return this.getRuleContext(0, QueryNoWithContext)!; + } + public with(): WithContext | null { + return this.getRuleContext(0, WithContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_query; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQuery) { + return visitor.visitQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WithContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WITH_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WITH_, 0)!; + } + public namedQuery(): NamedQueryContext[]; + public namedQuery(i: number): NamedQueryContext | null; + public namedQuery(i?: number): NamedQueryContext[] | NamedQueryContext | null { + if (i === undefined) { + return this.getRuleContexts(NamedQueryContext); + } + + return this.getRuleContext(i, NamedQueryContext); + } + public RECURSIVE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RECURSIVE_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_with; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitWith) { + return visitor.visitWith(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableElementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public columnDefinition(): ColumnDefinitionContext | null { + return this.getRuleContext(0, ColumnDefinitionContext); + } + public likeClause(): LikeClauseContext | null { + return this.getRuleContext(0, LikeClauseContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_tableElement; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableElement) { + return visitor.visitTableElement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ColumnDefinitionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public NULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULL_, 0); + } + public COMMENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMENT_, 0); + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public properties(): PropertiesContext | null { + return this.getRuleContext(0, PropertiesContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_columnDefinition; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitColumnDefinition) { + return visitor.visitColumnDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LikeClauseContext extends antlr.ParserRuleContext { + public _optionType?: Token | null; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LIKE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LIKE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public PROPERTIES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PROPERTIES_, 0); + } + public INCLUDING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INCLUDING_, 0); + } + public EXCLUDING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXCLUDING_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_likeClause; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLikeClause) { + return visitor.visitLikeClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertiesContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public propertyAssignments(): PropertyAssignmentsContext { + return this.getRuleContext(0, PropertyAssignmentsContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_properties; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitProperties) { + return visitor.visitProperties(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertyAssignmentsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public property(): PropertyContext[]; + public property(i: number): PropertyContext | null; + public property(i?: number): PropertyContext[] | PropertyContext | null { + if (i === undefined) { + return this.getRuleContexts(PropertyContext); + } + + return this.getRuleContext(i, PropertyContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_propertyAssignments; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPropertyAssignments) { + return visitor.visitPropertyAssignments(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertyContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public EQ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EQ_, 0)!; + } + public propertyValue(): PropertyValueContext { + return this.getRuleContext(0, PropertyValueContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_property; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitProperty) { + return visitor.visitProperty(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PropertyValueContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_propertyValue; + } + public override copyFrom(ctx: PropertyValueContext): void { + super.copyFrom(ctx); + } +} +export class DefaultPropertyValueContext extends PropertyValueContext { + public constructor(ctx: PropertyValueContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DEFAULT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DEFAULT_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDefaultPropertyValue) { + return visitor.visitDefaultPropertyValue(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NonDefaultPropertyValueContext extends PropertyValueContext { + public constructor(ctx: PropertyValueContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNonDefaultPropertyValue) { + return visitor.visitNonDefaultPropertyValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryNoWithContext extends antlr.ParserRuleContext { + public _offset?: RowCountContext; + public _limit?: LimitRowCountContext; + public _fetchFirst?: RowCountContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public queryTerm(): QueryTermContext { + return this.getRuleContext(0, QueryTermContext)!; + } + public ORDER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDER_, 0); + } + public BY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BY_, 0); + } + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext | null; + public sortItem(i?: number): SortItemContext[] | SortItemContext | null { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } + + return this.getRuleContext(i, SortItemContext); + } + public OFFSET_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OFFSET_, 0); + } + public LIMIT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIMIT_, 0); + } + public FETCH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FETCH_, 0); + } + public rowCount(): RowCountContext[]; + public rowCount(i: number): RowCountContext | null; + public rowCount(i?: number): RowCountContext[] | RowCountContext | null { + if (i === undefined) { + return this.getRuleContexts(RowCountContext); + } + + return this.getRuleContext(i, RowCountContext); + } + public limitRowCount(): LimitRowCountContext | null { + return this.getRuleContext(0, LimitRowCountContext); + } + public FIRST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FIRST_, 0); + } + public NEXT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NEXT_, 0); + } + public ROW_(): antlr.TerminalNode[]; + public ROW_(i: number): antlr.TerminalNode | null; + public ROW_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.ROW_); + } else { + return this.getToken(TrinoParser.ROW_, i); + } + } + public ROWS_(): antlr.TerminalNode[]; + public ROWS_(i: number): antlr.TerminalNode | null; + public ROWS_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.ROWS_); + } else { + return this.getToken(TrinoParser.ROWS_, i); + } + } + public ONLY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ONLY_, 0); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public TIES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TIES_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_queryNoWith; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQueryNoWith) { + return visitor.visitQueryNoWith(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LimitRowCountContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public rowCount(): RowCountContext | null { + return this.getRuleContext(0, RowCountContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_limitRowCount; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLimitRowCount) { + return visitor.visitLimitRowCount(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowCountContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public INTEGER_VALUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INTEGER_VALUE_, 0); + } + public QUESTION_MARK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.QUESTION_MARK_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_rowCount; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRowCount) { + return visitor.visitRowCount(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryTermContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_queryTerm; + } + public override copyFrom(ctx: QueryTermContext): void { + super.copyFrom(ctx); + } +} +export class QueryTermDefaultContext extends QueryTermContext { + public constructor(ctx: QueryTermContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public queryPrimary(): QueryPrimaryContext { + return this.getRuleContext(0, QueryPrimaryContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQueryTermDefault) { + return visitor.visitQueryTermDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetOperationContext extends QueryTermContext { + public _left?: QueryTermContext; + public _operator?: Token | null; + public _right?: QueryTermContext; + public constructor(ctx: QueryTermContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public queryTerm(): QueryTermContext[]; + public queryTerm(i: number): QueryTermContext | null; + public queryTerm(i?: number): QueryTermContext[] | QueryTermContext | null { + if (i === undefined) { + return this.getRuleContexts(QueryTermContext); + } + + return this.getRuleContext(i, QueryTermContext); + } + public INTERSECT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INTERSECT_, 0); + } + public setQuantifier(): SetQuantifierContext | null { + return this.getRuleContext(0, SetQuantifierContext); + } + public UNION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNION_, 0); + } + public EXCEPT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXCEPT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetOperation) { + return visitor.visitSetOperation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryPrimaryContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_queryPrimary; + } + public override copyFrom(ctx: QueryPrimaryContext): void { + super.copyFrom(ctx); + } +} +export class SubqueryContext extends QueryPrimaryContext { + public constructor(ctx: QueryPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public queryNoWith(): QueryNoWithContext { + return this.getRuleContext(0, QueryNoWithContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSubquery) { + return visitor.visitSubquery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class QueryPrimaryDefaultContext extends QueryPrimaryContext { + public constructor(ctx: QueryPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public querySpecification(): QuerySpecificationContext { + return this.getRuleContext(0, QuerySpecificationContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQueryPrimaryDefault) { + return visitor.visitQueryPrimaryDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableContext extends QueryPrimaryContext { + public constructor(ctx: QueryPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTable) { + return visitor.visitTable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InlineTableContext extends QueryPrimaryContext { + public constructor(ctx: QueryPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public VALUES_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VALUES_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitInlineTable) { + return visitor.visitInlineTable(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SortItemContext extends antlr.ParserRuleContext { + public _ordering?: Token | null; + public _nullOrdering?: Token | null; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public NULLS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULLS_, 0); + } + public ASC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ASC_, 0); + } + public DESC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DESC_, 0); + } + public FIRST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FIRST_, 0); + } + public LAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LAST_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_sortItem; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSortItem) { + return visitor.visitSortItem(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QuerySpecificationContext extends antlr.ParserRuleContext { + public _where?: BooleanExpressionContext; + public _having?: BooleanExpressionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SELECT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SELECT_, 0)!; + } + public selectItem(): SelectItemContext[]; + public selectItem(i: number): SelectItemContext | null; + public selectItem(i?: number): SelectItemContext[] | SelectItemContext | null { + if (i === undefined) { + return this.getRuleContexts(SelectItemContext); + } + + return this.getRuleContext(i, SelectItemContext); + } + public setQuantifier(): SetQuantifierContext | null { + return this.getRuleContext(0, SetQuantifierContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public relation(): RelationContext[]; + public relation(i: number): RelationContext | null; + public relation(i?: number): RelationContext[] | RelationContext | null { + if (i === undefined) { + return this.getRuleContexts(RelationContext); + } + + return this.getRuleContext(i, RelationContext); + } + public WHERE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WHERE_, 0); + } + public GROUP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GROUP_, 0); + } + public BY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BY_, 0); + } + public groupBy(): GroupByContext | null { + return this.getRuleContext(0, GroupByContext); + } + public HAVING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.HAVING_, 0); + } + public WINDOW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WINDOW_, 0); + } + public windowDefinition(): WindowDefinitionContext[]; + public windowDefinition(i: number): WindowDefinitionContext | null; + public windowDefinition(i?: number): WindowDefinitionContext[] | WindowDefinitionContext | null { + if (i === undefined) { + return this.getRuleContexts(WindowDefinitionContext); + } + + return this.getRuleContext(i, WindowDefinitionContext); + } + public booleanExpression(): BooleanExpressionContext[]; + public booleanExpression(i: number): BooleanExpressionContext | null; + public booleanExpression(i?: number): BooleanExpressionContext[] | BooleanExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(BooleanExpressionContext); + } + + return this.getRuleContext(i, BooleanExpressionContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_querySpecification; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQuerySpecification) { + return visitor.visitQuerySpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupByContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public groupingElement(): GroupingElementContext[]; + public groupingElement(i: number): GroupingElementContext | null; + public groupingElement(i?: number): GroupingElementContext[] | GroupingElementContext | null { + if (i === undefined) { + return this.getRuleContexts(GroupingElementContext); + } + + return this.getRuleContext(i, GroupingElementContext); + } + public setQuantifier(): SetQuantifierContext | null { + return this.getRuleContext(0, SetQuantifierContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_groupBy; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitGroupBy) { + return visitor.visitGroupBy(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupingElementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_groupingElement; + } + public override copyFrom(ctx: GroupingElementContext): void { + super.copyFrom(ctx); + } +} +export class MultipleGroupingSetsContext extends GroupingElementContext { + public constructor(ctx: GroupingElementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public GROUPING_(): antlr.TerminalNode { + return this.getToken(TrinoParser.GROUPING_, 0)!; + } + public SETS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SETS_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public groupingSet(): GroupingSetContext[]; + public groupingSet(i: number): GroupingSetContext | null; + public groupingSet(i?: number): GroupingSetContext[] | GroupingSetContext | null { + if (i === undefined) { + return this.getRuleContexts(GroupingSetContext); + } + + return this.getRuleContext(i, GroupingSetContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitMultipleGroupingSets) { + return visitor.visitMultipleGroupingSets(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SingleGroupingSetContext extends GroupingElementContext { + public constructor(ctx: GroupingElementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public groupingSet(): GroupingSetContext { + return this.getRuleContext(0, GroupingSetContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSingleGroupingSet) { + return visitor.visitSingleGroupingSet(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CubeContext extends GroupingElementContext { + public constructor(ctx: GroupingElementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CUBE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CUBE_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCube) { + return visitor.visitCube(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RollupContext extends GroupingElementContext { + public constructor(ctx: GroupingElementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ROLLUP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLLUP_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRollup) { + return visitor.visitRollup(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GroupingSetContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_groupingSet; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitGroupingSet) { + return visitor.visitGroupingSet(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowDefinitionContext extends antlr.ParserRuleContext { + public _name?: IdentifierContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public windowSpecification(): WindowSpecificationContext { + return this.getRuleContext(0, WindowSpecificationContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_windowDefinition; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitWindowDefinition) { + return visitor.visitWindowDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowSpecificationContext extends antlr.ParserRuleContext { + public _existingWindowName?: IdentifierContext; + public _expression?: ExpressionContext; + public _partition: ExpressionContext[] = []; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public PARTITION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PARTITION_, 0); + } + public BY_(): antlr.TerminalNode[]; + public BY_(i: number): antlr.TerminalNode | null; + public BY_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.BY_); + } else { + return this.getToken(TrinoParser.BY_, i); + } + } + public ORDER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDER_, 0); + } + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext | null; + public sortItem(i?: number): SortItemContext[] | SortItemContext | null { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } + + return this.getRuleContext(i, SortItemContext); + } + public windowFrame(): WindowFrameContext | null { + return this.getRuleContext(0, WindowFrameContext); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_windowSpecification; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitWindowSpecification) { + return visitor.visitWindowSpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NamedQueryContext extends antlr.ParserRuleContext { + public _name?: IdentifierContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_namedQuery; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNamedQuery) { + return visitor.visitNamedQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SetQuantifierContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DISTINCT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DISTINCT_, 0); + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_setQuantifier; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSetQuantifier) { + return visitor.visitSetQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SelectItemContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_selectItem; + } + public override copyFrom(ctx: SelectItemContext): void { + super.copyFrom(ctx); + } +} +export class SelectAllContext extends SelectItemContext { + public constructor(ctx: SelectItemContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public primaryExpression(): PrimaryExpressionContext | null { + return this.getRuleContext(0, PrimaryExpressionContext); + } + public DOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DOT_, 0); + } + public ASTERISK_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ASTERISK_, 0)!; + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSelectAll) { + return visitor.visitSelectAll(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SelectSingleContext extends SelectItemContext { + public constructor(ctx: SelectItemContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSelectSingle) { + return visitor.visitSelectSingle(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_relation; + } + public override copyFrom(ctx: RelationContext): void { + super.copyFrom(ctx); + } +} +export class RelationDefaultContext extends RelationContext { + public constructor(ctx: RelationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public sampledRelation(): SampledRelationContext { + return this.getRuleContext(0, SampledRelationContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRelationDefault) { + return visitor.visitRelationDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JoinRelationContext extends RelationContext { + public _left?: RelationContext; + public _right?: SampledRelationContext; + public _rightRelation?: RelationContext; + public constructor(ctx: RelationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public relation(): RelationContext[]; + public relation(i: number): RelationContext | null; + public relation(i?: number): RelationContext[] | RelationContext | null { + if (i === undefined) { + return this.getRuleContexts(RelationContext); + } + + return this.getRuleContext(i, RelationContext); + } + public CROSS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CROSS_, 0); + } + public JOIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.JOIN_, 0); + } + public joinType(): JoinTypeContext | null { + return this.getRuleContext(0, JoinTypeContext); + } + public joinCriteria(): JoinCriteriaContext | null { + return this.getRuleContext(0, JoinCriteriaContext); + } + public NATURAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NATURAL_, 0); + } + public sampledRelation(): SampledRelationContext | null { + return this.getRuleContext(0, SampledRelationContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJoinRelation) { + return visitor.visitJoinRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JoinTypeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public INNER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INNER_, 0); + } + public LEFT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LEFT_, 0); + } + public RIGHT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RIGHT_, 0); + } + public FULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FULL_, 0); + } + public OUTER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OUTER_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_joinType; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJoinType) { + return visitor.visitJoinType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JoinCriteriaContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ON_, 0); + } + public booleanExpression(): BooleanExpressionContext | null { + return this.getRuleContext(0, BooleanExpressionContext); + } + public USING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.USING_, 0); + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_joinCriteria; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJoinCriteria) { + return visitor.visitJoinCriteria(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SampledRelationContext extends antlr.ParserRuleContext { + public _percentage?: ExpressionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public patternRecognition(): PatternRecognitionContext { + return this.getRuleContext(0, PatternRecognitionContext)!; + } + public TABLESAMPLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TABLESAMPLE_, 0); + } + public sampleType(): SampleTypeContext | null { + return this.getRuleContext(0, SampleTypeContext); + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_sampledRelation; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSampledRelation) { + return visitor.visitSampledRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SampleTypeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public BERNOULLI_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BERNOULLI_, 0); + } + public SYSTEM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SYSTEM_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_sampleType; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSampleType) { + return visitor.visitSampleType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TrimsSpecificationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LEADING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LEADING_, 0); + } + public TRAILING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRAILING_, 0); + } + public BOTH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BOTH_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_trimsSpecification; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTrimsSpecification) { + return visitor.visitTrimsSpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ListAggOverflowBehaviorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public TRUNCATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRUNCATE_, 0); + } + public listaggCountIndication(): ListaggCountIndicationContext | null { + return this.getRuleContext(0, ListaggCountIndicationContext); + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_listAggOverflowBehavior; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitListAggOverflowBehavior) { + return visitor.visitListAggOverflowBehavior(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ListaggCountIndicationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public COUNT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COUNT_, 0)!; + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public WITHOUT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITHOUT_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_listaggCountIndication; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitListaggCountIndication) { + return visitor.visitListaggCountIndication(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternRecognitionContext extends antlr.ParserRuleContext { + public _expression?: ExpressionContext; + public _partition: ExpressionContext[] = []; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public aliasedRelation(): AliasedRelationContext { + return this.getRuleContext(0, AliasedRelationContext)!; + } + public MATCH_RECOGNIZE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCH_RECOGNIZE_, 0); + } + public LPAREN_(): antlr.TerminalNode[]; + public LPAREN_(i: number): antlr.TerminalNode | null; + public LPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.LPAREN_); + } else { + return this.getToken(TrinoParser.LPAREN_, i); + } + } + public PATTERN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PATTERN_, 0); + } + public rowPattern(): RowPatternContext | null { + return this.getRuleContext(0, RowPatternContext); + } + public RPAREN_(): antlr.TerminalNode[]; + public RPAREN_(i: number): antlr.TerminalNode | null; + public RPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.RPAREN_); + } else { + return this.getToken(TrinoParser.RPAREN_, i); + } + } + public DEFINE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFINE_, 0); + } + public variableDefinition(): VariableDefinitionContext[]; + public variableDefinition(i: number): VariableDefinitionContext | null; + public variableDefinition(i?: number): VariableDefinitionContext[] | VariableDefinitionContext | null { + if (i === undefined) { + return this.getRuleContexts(VariableDefinitionContext); + } + + return this.getRuleContext(i, VariableDefinitionContext); + } + public PARTITION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PARTITION_, 0); + } + public BY_(): antlr.TerminalNode[]; + public BY_(i: number): antlr.TerminalNode | null; + public BY_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.BY_); + } else { + return this.getToken(TrinoParser.BY_, i); + } + } + public ORDER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDER_, 0); + } + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext | null; + public sortItem(i?: number): SortItemContext[] | SortItemContext | null { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } + + return this.getRuleContext(i, SortItemContext); + } + public MEASURES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MEASURES_, 0); + } + public measureDefinition(): MeasureDefinitionContext[]; + public measureDefinition(i: number): MeasureDefinitionContext | null; + public measureDefinition(i?: number): MeasureDefinitionContext[] | MeasureDefinitionContext | null { + if (i === undefined) { + return this.getRuleContexts(MeasureDefinitionContext); + } + + return this.getRuleContext(i, MeasureDefinitionContext); + } + public rowsPerMatch(): RowsPerMatchContext | null { + return this.getRuleContext(0, RowsPerMatchContext); + } + public AFTER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AFTER_, 0); + } + public MATCH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCH_, 0); + } + public skipTo(): SkipToContext | null { + return this.getRuleContext(0, SkipToContext); + } + public SUBSET_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SUBSET_, 0); + } + public subsetDefinition(): SubsetDefinitionContext[]; + public subsetDefinition(i: number): SubsetDefinitionContext | null; + public subsetDefinition(i?: number): SubsetDefinitionContext[] | SubsetDefinitionContext | null { + if (i === undefined) { + return this.getRuleContexts(SubsetDefinitionContext); + } + + return this.getRuleContext(i, SubsetDefinitionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public INITIAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INITIAL_, 0); + } + public SEEK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SEEK_, 0); + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_patternRecognition; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPatternRecognition) { + return visitor.visitPatternRecognition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MeasureDefinitionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_measureDefinition; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitMeasureDefinition) { + return visitor.visitMeasureDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowsPerMatchContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ONE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ONE_, 0); + } + public ROW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROW_, 0); + } + public PER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PER_, 0)!; + } + public MATCH_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATCH_, 0)!; + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public ROWS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROWS_, 0); + } + public emptyMatchHandling(): EmptyMatchHandlingContext | null { + return this.getRuleContext(0, EmptyMatchHandlingContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_rowsPerMatch; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRowsPerMatch) { + return visitor.visitRowsPerMatch(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class EmptyMatchHandlingContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SHOW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SHOW_, 0); + } + public EMPTY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EMPTY_, 0); + } + public MATCHES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCHES_, 0); + } + public OMIT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OMIT_, 0); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public UNMATCHED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNMATCHED_, 0); + } + public ROWS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROWS_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_emptyMatchHandling; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitEmptyMatchHandling) { + return visitor.visitEmptyMatchHandling(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SkipToContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public SKIP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SKIP_, 0)!; + } + public TO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TO_, 0); + } + public PAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PAST_, 0); + } + public LAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LAST_, 0); + } + public ROW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROW_, 0); + } + public NEXT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NEXT_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public FIRST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FIRST_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_skipTo; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSkipTo) { + return visitor.visitSkipTo(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SubsetDefinitionContext extends antlr.ParserRuleContext { + public _name?: IdentifierContext; + public _identifier?: IdentifierContext; + public _union: IdentifierContext[] = []; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EQ_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_subsetDefinition; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSubsetDefinition) { + return visitor.visitSubsetDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class VariableDefinitionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_variableDefinition; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitVariableDefinition) { + return visitor.visitVariableDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AliasedRelationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public relationPrimary(): RelationPrimaryContext { + return this.getRuleContext(0, RelationPrimaryContext)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_aliasedRelation; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitAliasedRelation) { + return visitor.visitAliasedRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ColumnAliasesContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_columnAliases; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitColumnAliases) { + return visitor.visitColumnAliases(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RelationPrimaryContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_relationPrimary; + } + public override copyFrom(ctx: RelationPrimaryContext): void { + super.copyFrom(ctx); + } +} +export class SubqueryRelationContext extends RelationPrimaryContext { + public constructor(ctx: RelationPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSubqueryRelation) { + return visitor.visitSubqueryRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ParenthesizedRelationContext extends RelationPrimaryContext { + public constructor(ctx: RelationPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public relation(): RelationContext { + return this.getRuleContext(0, RelationContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitParenthesizedRelation) { + return visitor.visitParenthesizedRelation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnnestContext extends RelationPrimaryContext { + public constructor(ctx: RelationPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public UNNEST_(): antlr.TerminalNode { + return this.getToken(TrinoParser.UNNEST_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public ORDINALITY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDINALITY_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUnnest) { + return visitor.visitUnnest(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableFunctionInvocationContext extends RelationPrimaryContext { + public constructor(ctx: RelationPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public tableFunctionCall(): TableFunctionCallContext { + return this.getRuleContext(0, TableFunctionCallContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableFunctionInvocation) { + return visitor.visitTableFunctionInvocation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LateralContext extends RelationPrimaryContext { + public constructor(ctx: RelationPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LATERAL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LATERAL_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLateral) { + return visitor.visitLateral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableNameContext extends RelationPrimaryContext { + public constructor(ctx: RelationPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public queryPeriod(): QueryPeriodContext | null { + return this.getRuleContext(0, QueryPeriodContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableName) { + return visitor.visitTableName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableFunctionCallContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public tableFunctionArgument(): TableFunctionArgumentContext[]; + public tableFunctionArgument(i: number): TableFunctionArgumentContext | null; + public tableFunctionArgument(i?: number): TableFunctionArgumentContext[] | TableFunctionArgumentContext | null { + if (i === undefined) { + return this.getRuleContexts(TableFunctionArgumentContext); + } + + return this.getRuleContext(i, TableFunctionArgumentContext); + } + public COPARTITION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COPARTITION_, 0); + } + public copartitionTables(): CopartitionTablesContext[]; + public copartitionTables(i: number): CopartitionTablesContext | null; + public copartitionTables(i?: number): CopartitionTablesContext[] | CopartitionTablesContext | null { + if (i === undefined) { + return this.getRuleContexts(CopartitionTablesContext); + } + + return this.getRuleContext(i, CopartitionTablesContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_tableFunctionCall; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableFunctionCall) { + return visitor.visitTableFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableFunctionArgumentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public tableArgument(): TableArgumentContext | null { + return this.getRuleContext(0, TableArgumentContext); + } + public descriptorArgument(): DescriptorArgumentContext | null { + return this.getRuleContext(0, DescriptorArgumentContext); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public RDOUBLEARROW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RDOUBLEARROW_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_tableFunctionArgument; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableFunctionArgument) { + return visitor.visitTableFunctionArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableArgumentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public tableArgumentRelation(): TableArgumentRelationContext { + return this.getRuleContext(0, TableArgumentRelationContext)!; + } + public PARTITION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PARTITION_, 0); + } + public BY_(): antlr.TerminalNode[]; + public BY_(i: number): antlr.TerminalNode | null; + public BY_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.BY_); + } else { + return this.getToken(TrinoParser.BY_, i); + } + } + public PRUNE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRUNE_, 0); + } + public WHEN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WHEN_, 0); + } + public EMPTY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EMPTY_, 0); + } + public KEEP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.KEEP_, 0); + } + public ORDER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDER_, 0); + } + public LPAREN_(): antlr.TerminalNode[]; + public LPAREN_(i: number): antlr.TerminalNode | null; + public LPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.LPAREN_); + } else { + return this.getToken(TrinoParser.LPAREN_, i); + } + } + public RPAREN_(): antlr.TerminalNode[]; + public RPAREN_(i: number): antlr.TerminalNode | null; + public RPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.RPAREN_); + } else { + return this.getToken(TrinoParser.RPAREN_, i); + } + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext | null; + public sortItem(i?: number): SortItemContext[] | SortItemContext | null { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } + + return this.getRuleContext(i, SortItemContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_tableArgument; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableArgument) { + return visitor.visitTableArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TableArgumentRelationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_tableArgumentRelation; + } + public override copyFrom(ctx: TableArgumentRelationContext): void { + super.copyFrom(ctx); + } +} +export class TableArgumentQueryContext extends TableArgumentRelationContext { + public constructor(ctx: TableArgumentRelationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableArgumentQuery) { + return visitor.visitTableArgumentQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TableArgumentTableContext extends TableArgumentRelationContext { + public constructor(ctx: TableArgumentRelationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TABLE_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public columnAliases(): ColumnAliasesContext | null { + return this.getRuleContext(0, ColumnAliasesContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTableArgumentTable) { + return visitor.visitTableArgumentTable(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DescriptorArgumentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DESCRIPTOR_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DESCRIPTOR_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public descriptorField(): DescriptorFieldContext[]; + public descriptorField(i: number): DescriptorFieldContext | null; + public descriptorField(i?: number): DescriptorFieldContext[] | DescriptorFieldContext | null { + if (i === undefined) { + return this.getRuleContexts(DescriptorFieldContext); + } + + return this.getRuleContext(i, DescriptorFieldContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public CAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CAST_, 0); + } + public NULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULL_, 0); + } + public AS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AS_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_descriptorArgument; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDescriptorArgument) { + return visitor.visitDescriptorArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DescriptorFieldContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public type(): TypeContext | null { + return this.getRuleContext(0, TypeContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_descriptorField; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDescriptorField) { + return visitor.visitDescriptorField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CopartitionTablesContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_copartitionTables; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCopartitionTables) { + return visitor.visitCopartitionTables(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public booleanExpression(): BooleanExpressionContext { + return this.getRuleContext(0, BooleanExpressionContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_expression; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExpression) { + return visitor.visitExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_booleanExpression; + } + public override copyFrom(ctx: BooleanExpressionContext): void { + super.copyFrom(ctx); + } +} +export class LogicalNotContext extends BooleanExpressionContext { + public constructor(ctx: BooleanExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NOT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.NOT_, 0)!; + } + public booleanExpression(): BooleanExpressionContext { + return this.getRuleContext(0, BooleanExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLogicalNot) { + return visitor.visitLogicalNot(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PredicatedContext extends BooleanExpressionContext { + public constructor(ctx: BooleanExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public predicate_(): Predicate_Context | null { + return this.getRuleContext(0, Predicate_Context); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPredicated) { + return visitor.visitPredicated(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class OrContext extends BooleanExpressionContext { + public constructor(ctx: BooleanExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public booleanExpression(): BooleanExpressionContext[]; + public booleanExpression(i: number): BooleanExpressionContext | null; + public booleanExpression(i?: number): BooleanExpressionContext[] | BooleanExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(BooleanExpressionContext); + } + + return this.getRuleContext(i, BooleanExpressionContext); + } + public OR_(): antlr.TerminalNode { + return this.getToken(TrinoParser.OR_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitOr) { + return visitor.visitOr(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AndContext extends BooleanExpressionContext { + public constructor(ctx: BooleanExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public booleanExpression(): BooleanExpressionContext[]; + public booleanExpression(i: number): BooleanExpressionContext | null; + public booleanExpression(i?: number): BooleanExpressionContext[] | BooleanExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(BooleanExpressionContext); + } + + return this.getRuleContext(i, BooleanExpressionContext); + } + public AND_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AND_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitAnd) { + return visitor.visitAnd(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class Predicate_Context extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_predicate_; + } + public override copyFrom(ctx: Predicate_Context): void { + super.copyFrom(ctx); + } +} +export class ComparisonContext extends Predicate_Context { + public _right?: ValueExpressionContext; + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public comparisonOperator(): ComparisonOperatorContext { + return this.getRuleContext(0, ComparisonOperatorContext)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitComparison) { + return visitor.visitComparison(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LikeContext extends Predicate_Context { + public _pattern?: ValueExpressionContext; + public _escape?: ValueExpressionContext; + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LIKE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LIKE_, 0)!; + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public ESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ESCAPE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLike) { + return visitor.visitLike(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InSubqueryContext extends Predicate_Context { + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public IN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IN_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitInSubquery) { + return visitor.visitInSubquery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DistinctFromContext extends Predicate_Context { + public _right?: ValueExpressionContext; + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public IS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IS_, 0)!; + } + public DISTINCT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DISTINCT_, 0)!; + } + public FROM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FROM_, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDistinctFrom) { + return visitor.visitDistinctFrom(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InListContext extends Predicate_Context { + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public IN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IN_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitInList) { + return visitor.visitInList(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NullPredicateContext extends Predicate_Context { + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public IS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IS_, 0)!; + } + public NULL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.NULL_, 0)!; + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNullPredicate) { + return visitor.visitNullPredicate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BetweenContext extends Predicate_Context { + public _lower?: ValueExpressionContext; + public _upper?: ValueExpressionContext; + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public BETWEEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.BETWEEN_, 0)!; + } + public AND_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AND_, 0)!; + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitBetween) { + return visitor.visitBetween(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class QuantifiedComparisonContext extends Predicate_Context { + public constructor(ctx: Predicate_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public comparisonOperator(): ComparisonOperatorContext { + return this.getRuleContext(0, ComparisonOperatorContext)!; + } + public comparisonQuantifier(): ComparisonQuantifierContext { + return this.getRuleContext(0, ComparisonQuantifierContext)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQuantifiedComparison) { + return visitor.visitQuantifiedComparison(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ValueExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_valueExpression; + } + public override copyFrom(ctx: ValueExpressionContext): void { + super.copyFrom(ctx); + } +} +export class ValueExpressionDefaultContext extends ValueExpressionContext { + public constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public primaryExpression(): PrimaryExpressionContext { + return this.getRuleContext(0, PrimaryExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitValueExpressionDefault) { + return visitor.visitValueExpressionDefault(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ConcatenationContext extends ValueExpressionContext { + public _left?: ValueExpressionContext; + public _right?: ValueExpressionContext; + public constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CONCAT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CONCAT_, 0)!; + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitConcatenation) { + return visitor.visitConcatenation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArithmeticBinaryContext extends ValueExpressionContext { + public _left?: ValueExpressionContext; + public _operator?: Token | null; + public _right?: ValueExpressionContext; + public constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public ASTERISK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ASTERISK_, 0); + } + public SLASH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SLASH_, 0); + } + public PERCENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PERCENT_, 0); + } + public PLUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PLUS_, 0); + } + public MINUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitArithmeticBinary) { + return visitor.visitArithmeticBinary(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArithmeticUnaryContext extends ValueExpressionContext { + public _operator?: Token | null; + public constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public MINUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUS_, 0); + } + public PLUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PLUS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitArithmeticUnary) { + return visitor.visitArithmeticUnary(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AtTimeZoneContext extends ValueExpressionContext { + public constructor(ctx: ValueExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public AT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AT_, 0)!; + } + public timeZoneSpecifier(): TimeZoneSpecifierContext { + return this.getRuleContext(0, TimeZoneSpecifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitAtTimeZone) { + return visitor.visitAtTimeZone(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PrimaryExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_primaryExpression; + } + public override copyFrom(ctx: PrimaryExpressionContext): void { + super.copyFrom(ctx); + } +} +export class DereferenceContext extends PrimaryExpressionContext { + public _base_?: PrimaryExpressionContext; + public _fieldName?: IdentifierContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DOT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DOT_, 0)!; + } + public primaryExpression(): PrimaryExpressionContext { + return this.getRuleContext(0, PrimaryExpressionContext)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDereference) { + return visitor.visitDereference(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TypeConstructorContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public DOUBLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DOUBLE_, 0); + } + public PRECISION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRECISION_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTypeConstructor) { + return visitor.visitTypeConstructor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JsonValueContext extends PrimaryExpressionContext { + public _emptyBehavior?: JsonValueBehaviorContext; + public _errorBehavior?: JsonValueBehaviorContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public JSON_VALUE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.JSON_VALUE_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public jsonPathInvocation(): JsonPathInvocationContext { + return this.getRuleContext(0, JsonPathInvocationContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public RETURNING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RETURNING_, 0); + } + public type(): TypeContext | null { + return this.getRuleContext(0, TypeContext); + } + public ON_(): antlr.TerminalNode[]; + public ON_(i: number): antlr.TerminalNode | null; + public ON_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.ON_); + } else { + return this.getToken(TrinoParser.ON_, i); + } + } + public EMPTY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EMPTY_, 0); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public jsonValueBehavior(): JsonValueBehaviorContext[]; + public jsonValueBehavior(i: number): JsonValueBehaviorContext | null; + public jsonValueBehavior(i?: number): JsonValueBehaviorContext[] | JsonValueBehaviorContext | null { + if (i === undefined) { + return this.getRuleContexts(JsonValueBehaviorContext); + } + + return this.getRuleContext(i, JsonValueBehaviorContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonValue) { + return visitor.visitJsonValue(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SpecialDateTimeFunctionContext extends PrimaryExpressionContext { + public _name?: Token | null; + public _precision?: Token | null; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_DATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CURRENT_DATE_, 0); + } + public CURRENT_TIME_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CURRENT_TIME_, 0); + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public INTEGER_VALUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INTEGER_VALUE_, 0); + } + public CURRENT_TIMESTAMP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CURRENT_TIMESTAMP_, 0); + } + public LOCALTIME_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LOCALTIME_, 0); + } + public LOCALTIMESTAMP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LOCALTIMESTAMP_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSpecialDateTimeFunction) { + return visitor.visitSpecialDateTimeFunction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SubstringContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SUBSTRING_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SUBSTRING_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public FROM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FROM_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public FOR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FOR_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSubstring) { + return visitor.visitSubstring(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CastContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CAST_, 0); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public TRY_CAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRY_CAST_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCast) { + return visitor.visitCast(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LambdaContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public RARROW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RARROW_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLambda) { + return visitor.visitLambda(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ParenthesizedExpressionContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitParenthesizedExpression) { + return visitor.visitParenthesizedExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TrimContext extends PrimaryExpressionContext { + public _trimChar?: ValueExpressionContext; + public _trimSource?: ValueExpressionContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TRIM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TRIM_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public FROM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FROM_, 0); + } + public trimsSpecification(): TrimsSpecificationContext | null { + return this.getRuleContext(0, TrimsSpecificationContext); + } + public COMMA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMA_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTrim) { + return visitor.visitTrim(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ParameterContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public QUESTION_MARK_(): antlr.TerminalNode { + return this.getToken(TrinoParser.QUESTION_MARK_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitParameter) { + return visitor.visitParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NormalizeContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NORMALIZE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.NORMALIZE_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMA_, 0); + } + public normalForm(): NormalFormContext | null { + return this.getRuleContext(0, NormalFormContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNormalize) { + return visitor.visitNormalize(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JsonObjectContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public JSON_OBJECT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.JSON_OBJECT_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public jsonObjectMember(): JsonObjectMemberContext[]; + public jsonObjectMember(i: number): JsonObjectMemberContext | null; + public jsonObjectMember(i?: number): JsonObjectMemberContext[] | JsonObjectMemberContext | null { + if (i === undefined) { + return this.getRuleContexts(JsonObjectMemberContext); + } + + return this.getRuleContext(i, JsonObjectMemberContext); + } + public RETURNING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RETURNING_, 0); + } + public type(): TypeContext | null { + return this.getRuleContext(0, TypeContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public NULL_(): antlr.TerminalNode[]; + public NULL_(i: number): antlr.TerminalNode | null; + public NULL_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.NULL_); + } else { + return this.getToken(TrinoParser.NULL_, i); + } + } + public ON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ON_, 0); + } + public ABSENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ABSENT_, 0); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public UNIQUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNIQUE_, 0); + } + public WITHOUT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITHOUT_, 0); + } + public FORMAT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FORMAT_, 0); + } + public jsonRepresentation(): JsonRepresentationContext | null { + return this.getRuleContext(0, JsonRepresentationContext); + } + public KEYS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.KEYS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonObject) { + return visitor.visitJsonObject(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IntervalLiteralContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public interval(): IntervalContext { + return this.getRuleContext(0, IntervalContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIntervalLiteral) { + return visitor.visitIntervalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NumericLiteralContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public number(): NumberContext { + return this.getRuleContext(0, NumberContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNumericLiteral) { + return visitor.visitNumericLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BooleanLiteralContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public booleanValue(): BooleanValueContext { + return this.getRuleContext(0, BooleanValueContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitBooleanLiteral) { + return visitor.visitBooleanLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JsonArrayContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public JSON_ARRAY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.JSON_ARRAY_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public jsonValueExpression(): JsonValueExpressionContext[]; + public jsonValueExpression(i: number): JsonValueExpressionContext | null; + public jsonValueExpression(i?: number): JsonValueExpressionContext[] | JsonValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(JsonValueExpressionContext); + } + + return this.getRuleContext(i, JsonValueExpressionContext); + } + public RETURNING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RETURNING_, 0); + } + public type(): TypeContext | null { + return this.getRuleContext(0, TypeContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public NULL_(): antlr.TerminalNode[]; + public NULL_(i: number): antlr.TerminalNode | null; + public NULL_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.NULL_); + } else { + return this.getToken(TrinoParser.NULL_, i); + } + } + public ON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ON_, 0); + } + public ABSENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ABSENT_, 0); + } + public FORMAT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FORMAT_, 0); + } + public jsonRepresentation(): JsonRepresentationContext | null { + return this.getRuleContext(0, JsonRepresentationContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonArray) { + return visitor.visitJsonArray(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SimpleCaseContext extends PrimaryExpressionContext { + public _operand?: ExpressionContext; + public _elseExpression?: ExpressionContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CASE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CASE_, 0)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public whenClause(): WhenClauseContext[]; + public whenClause(i: number): WhenClauseContext | null; + public whenClause(i?: number): WhenClauseContext[] | WhenClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(WhenClauseContext); + } + + return this.getRuleContext(i, WhenClauseContext); + } + public ELSE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ELSE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSimpleCase) { + return visitor.visitSimpleCase(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ColumnReferenceContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitColumnReference) { + return visitor.visitColumnReference(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NullLiteralContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public NULL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.NULL_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNullLiteral) { + return visitor.visitNullLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RowConstructorContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public ROW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROW_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRowConstructor) { + return visitor.visitRowConstructor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SubscriptContext extends PrimaryExpressionContext { + public _value?: PrimaryExpressionContext; + public _index?: ValueExpressionContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LSQUARE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LSQUARE_, 0)!; + } + public RSQUARE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RSQUARE_, 0)!; + } + public primaryExpression(): PrimaryExpressionContext { + return this.getRuleContext(0, PrimaryExpressionContext)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSubscript) { + return visitor.visitSubscript(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JsonExistsContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public JSON_EXISTS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.JSON_EXISTS_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public jsonPathInvocation(): JsonPathInvocationContext { + return this.getRuleContext(0, JsonPathInvocationContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public jsonExistsErrorBehavior(): JsonExistsErrorBehaviorContext | null { + return this.getRuleContext(0, JsonExistsErrorBehaviorContext); + } + public ON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ON_, 0); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonExists) { + return visitor.visitJsonExists(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentPathContext extends PrimaryExpressionContext { + public _name?: Token | null; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_PATH_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CURRENT_PATH_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCurrentPath) { + return visitor.visitCurrentPath(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SubqueryExpressionContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSubqueryExpression) { + return visitor.visitSubqueryExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BinaryLiteralContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public BINARY_LITERAL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.BINARY_LITERAL_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitBinaryLiteral) { + return visitor.visitBinaryLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentUserContext extends PrimaryExpressionContext { + public _name?: Token | null; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_USER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CURRENT_USER_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCurrentUser) { + return visitor.visitCurrentUser(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JsonQueryContext extends PrimaryExpressionContext { + public _emptyBehavior?: JsonQueryBehaviorContext; + public _errorBehavior?: JsonQueryBehaviorContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public JSON_QUERY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.JSON_QUERY_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public jsonPathInvocation(): JsonPathInvocationContext { + return this.getRuleContext(0, JsonPathInvocationContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public RETURNING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RETURNING_, 0); + } + public type(): TypeContext | null { + return this.getRuleContext(0, TypeContext); + } + public jsonQueryWrapperBehavior(): JsonQueryWrapperBehaviorContext | null { + return this.getRuleContext(0, JsonQueryWrapperBehaviorContext); + } + public WRAPPER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WRAPPER_, 0); + } + public QUOTES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.QUOTES_, 0); + } + public ON_(): antlr.TerminalNode[]; + public ON_(i: number): antlr.TerminalNode | null; + public ON_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.ON_); + } else { + return this.getToken(TrinoParser.ON_, i); + } + } + public EMPTY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EMPTY_, 0); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public KEEP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.KEEP_, 0); + } + public OMIT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OMIT_, 0); + } + public jsonQueryBehavior(): JsonQueryBehaviorContext[]; + public jsonQueryBehavior(i: number): JsonQueryBehaviorContext | null; + public jsonQueryBehavior(i?: number): JsonQueryBehaviorContext[] | JsonQueryBehaviorContext | null { + if (i === undefined) { + return this.getRuleContexts(JsonQueryBehaviorContext); + } + + return this.getRuleContext(i, JsonQueryBehaviorContext); + } + public FORMAT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FORMAT_, 0); + } + public jsonRepresentation(): JsonRepresentationContext | null { + return this.getRuleContext(0, JsonRepresentationContext); + } + public SCALAR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SCALAR_, 0); + } + public TEXT_STRING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TEXT_STRING_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonQuery) { + return visitor.visitJsonQuery(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MeasureContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public over(): OverContext { + return this.getRuleContext(0, OverContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitMeasure) { + return visitor.visitMeasure(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExtractContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public EXTRACT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EXTRACT_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public FROM_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FROM_, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExtract) { + return visitor.visitExtract(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class StringLiteralContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitStringLiteral) { + return visitor.visitStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArrayConstructorContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ARRAY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ARRAY_, 0)!; + } + public LSQUARE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LSQUARE_, 0)!; + } + public RSQUARE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RSQUARE_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitArrayConstructor) { + return visitor.visitArrayConstructor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class FunctionCallContext extends PrimaryExpressionContext { + public _label?: IdentifierContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public ASTERISK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ASTERISK_, 0); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public processingMode(): ProcessingModeContext | null { + return this.getRuleContext(0, ProcessingModeContext); + } + public DOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DOT_, 0); + } + public filter(): FilterContext | null { + return this.getRuleContext(0, FilterContext); + } + public over(): OverContext | null { + return this.getRuleContext(0, OverContext); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public ORDER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDER_, 0); + } + public BY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BY_, 0); + } + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext | null; + public sortItem(i?: number): SortItemContext[] | SortItemContext | null { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } + + return this.getRuleContext(i, SortItemContext); + } + public setQuantifier(): SetQuantifierContext | null { + return this.getRuleContext(0, SetQuantifierContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public nullTreatment(): NullTreatmentContext | null { + return this.getRuleContext(0, NullTreatmentContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitFunctionCall) { + return visitor.visitFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentSchemaContext extends PrimaryExpressionContext { + public _name?: Token | null; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_SCHEMA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CURRENT_SCHEMA_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCurrentSchema) { + return visitor.visitCurrentSchema(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExistsContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public EXISTS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EXISTS_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExists) { + return visitor.visitExists(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PositionContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public POSITION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.POSITION_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext | null; + public valueExpression(i?: number): ValueExpressionContext[] | ValueExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } + + return this.getRuleContext(i, ValueExpressionContext); + } + public IN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.IN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPosition) { + return visitor.visitPosition(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ListaggContext extends PrimaryExpressionContext { + public _name?: Token | null; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode[]; + public LPAREN_(i: number): antlr.TerminalNode | null; + public LPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.LPAREN_); + } else { + return this.getToken(TrinoParser.LPAREN_, i); + } + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public RPAREN_(): antlr.TerminalNode[]; + public RPAREN_(i: number): antlr.TerminalNode | null; + public RPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.RPAREN_); + } else { + return this.getToken(TrinoParser.RPAREN_, i); + } + } + public LISTAGG_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LISTAGG_, 0)!; + } + public WITHIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITHIN_, 0); + } + public GROUP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GROUP_, 0); + } + public ORDER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDER_, 0); + } + public BY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BY_, 0); + } + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext | null; + public sortItem(i?: number): SortItemContext[] | SortItemContext | null { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } + + return this.getRuleContext(i, SortItemContext); + } + public setQuantifier(): SetQuantifierContext | null { + return this.getRuleContext(0, SetQuantifierContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public string_(): String_Context | null { + return this.getRuleContext(0, String_Context); + } + public ON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ON_, 0); + } + public OVERFLOW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OVERFLOW_, 0); + } + public listAggOverflowBehavior(): ListAggOverflowBehaviorContext | null { + return this.getRuleContext(0, ListAggOverflowBehaviorContext); + } + public filter(): FilterContext | null { + return this.getRuleContext(0, FilterContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitListagg) { + return visitor.visitListagg(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SearchedCaseContext extends PrimaryExpressionContext { + public _elseExpression?: ExpressionContext; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CASE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CASE_, 0)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public whenClause(): WhenClauseContext[]; + public whenClause(i: number): WhenClauseContext | null; + public whenClause(i?: number): WhenClauseContext[] | WhenClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(WhenClauseContext); + } + + return this.getRuleContext(i, WhenClauseContext); + } + public ELSE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ELSE_, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSearchedCase) { + return visitor.visitSearchedCase(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentCatalogContext extends PrimaryExpressionContext { + public _name?: Token | null; + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_CATALOG_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CURRENT_CATALOG_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCurrentCatalog) { + return visitor.visitCurrentCatalog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GroupingOperationContext extends PrimaryExpressionContext { + public constructor(ctx: PrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public GROUPING_(): antlr.TerminalNode { + return this.getToken(TrinoParser.GROUPING_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public qualifiedName(): QualifiedNameContext[]; + public qualifiedName(i: number): QualifiedNameContext | null; + public qualifiedName(i?: number): QualifiedNameContext[] | QualifiedNameContext | null { + if (i === undefined) { + return this.getRuleContexts(QualifiedNameContext); + } + + return this.getRuleContext(i, QualifiedNameContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitGroupingOperation) { + return visitor.visitGroupingOperation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonPathInvocationContext extends antlr.ParserRuleContext { + public _path?: String_Context; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public jsonValueExpression(): JsonValueExpressionContext { + return this.getRuleContext(0, JsonValueExpressionContext)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public PASSING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PASSING_, 0); + } + public jsonArgument(): JsonArgumentContext[]; + public jsonArgument(i: number): JsonArgumentContext | null; + public jsonArgument(i?: number): JsonArgumentContext[] | JsonArgumentContext | null { + if (i === undefined) { + return this.getRuleContexts(JsonArgumentContext); + } + + return this.getRuleContext(i, JsonArgumentContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonPathInvocation; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonPathInvocation) { + return visitor.visitJsonPathInvocation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonValueExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public FORMAT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FORMAT_, 0); + } + public jsonRepresentation(): JsonRepresentationContext | null { + return this.getRuleContext(0, JsonRepresentationContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonValueExpression; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonValueExpression) { + return visitor.visitJsonValueExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonRepresentationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public JSON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.JSON_, 0)!; + } + public ENCODING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ENCODING_, 0); + } + public UTF8_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UTF8_, 0); + } + public UTF16_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UTF16_, 0); + } + public UTF32_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UTF32_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonRepresentation; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonRepresentation) { + return visitor.visitJsonRepresentation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonArgumentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public jsonValueExpression(): JsonValueExpressionContext { + return this.getRuleContext(0, JsonValueExpressionContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonArgument; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonArgument) { + return visitor.visitJsonArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonExistsErrorBehaviorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TRUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRUE_, 0); + } + public FALSE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FALSE_, 0); + } + public UNKNOWN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNKNOWN_, 0); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonExistsErrorBehavior; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonExistsErrorBehavior) { + return visitor.visitJsonExistsErrorBehavior(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonValueBehaviorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public NULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULL_, 0); + } + public DEFAULT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFAULT_, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonValueBehavior; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonValueBehavior) { + return visitor.visitJsonValueBehavior(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonQueryWrapperBehaviorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WITHOUT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITHOUT_, 0); + } + public ARRAY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ARRAY_, 0); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public CONDITIONAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CONDITIONAL_, 0); + } + public UNCONDITIONAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNCONDITIONAL_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonQueryWrapperBehavior; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonQueryWrapperBehavior) { + return visitor.visitJsonQueryWrapperBehavior(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonQueryBehaviorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public NULL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULL_, 0); + } + public EMPTY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EMPTY_, 0); + } + public ARRAY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ARRAY_, 0); + } + public OBJECT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OBJECT_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonQueryBehavior; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonQueryBehavior) { + return visitor.visitJsonQueryBehavior(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class JsonObjectMemberContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public VALUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VALUE_, 0); + } + public jsonValueExpression(): JsonValueExpressionContext { + return this.getRuleContext(0, JsonValueExpressionContext)!; + } + public KEY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.KEY_, 0); + } + public COLON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COLON_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_jsonObjectMember; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitJsonObjectMember) { + return visitor.visitJsonObjectMember(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ProcessingModeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public RUNNING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RUNNING_, 0); + } + public FINAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FINAL_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_processingMode; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitProcessingMode) { + return visitor.visitProcessingMode(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NullTreatmentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public IGNORE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IGNORE_, 0); + } + public NULLS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.NULLS_, 0)!; + } + public RESPECT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RESPECT_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_nullTreatment; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNullTreatment) { + return visitor.visitNullTreatment(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class String_Context extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_string_; + } + public override copyFrom(ctx: String_Context): void { + super.copyFrom(ctx); + } +} +export class UnicodeStringLiteralContext extends String_Context { + public constructor(ctx: String_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public UNICODE_STRING_(): antlr.TerminalNode { + return this.getToken(TrinoParser.UNICODE_STRING_, 0)!; + } + public UESCAPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UESCAPE_, 0); + } + public STRING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.STRING_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUnicodeStringLiteral) { + return visitor.visitUnicodeStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BasicStringLiteralContext extends String_Context { + public constructor(ctx: String_Context) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public STRING_(): antlr.TerminalNode { + return this.getToken(TrinoParser.STRING_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitBasicStringLiteral) { + return visitor.visitBasicStringLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeZoneSpecifierContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_timeZoneSpecifier; + } + public override copyFrom(ctx: TimeZoneSpecifierContext): void { + super.copyFrom(ctx); + } +} +export class TimeZoneIntervalContext extends TimeZoneSpecifierContext { + public constructor(ctx: TimeZoneSpecifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TIME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TIME_, 0)!; + } + public ZONE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ZONE_, 0)!; + } + public interval(): IntervalContext { + return this.getRuleContext(0, IntervalContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTimeZoneInterval) { + return visitor.visitTimeZoneInterval(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TimeZoneStringContext extends TimeZoneSpecifierContext { + public constructor(ctx: TimeZoneSpecifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TIME_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TIME_, 0)!; + } + public ZONE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ZONE_, 0)!; + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTimeZoneString) { + return visitor.visitTimeZoneString(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComparisonOperatorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public EQ_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EQ_, 0); + } + public NEQ_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NEQ_, 0); + } + public LT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LT_, 0); + } + public LTE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LTE_, 0); + } + public GT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GT_, 0); + } + public GTE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GTE_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_comparisonOperator; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitComparisonOperator) { + return visitor.visitComparisonOperator(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ComparisonQuantifierContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public SOME_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SOME_, 0); + } + public ANY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ANY_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_comparisonQuantifier; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitComparisonQuantifier) { + return visitor.visitComparisonQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BooleanValueContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TRUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRUE_, 0); + } + public FALSE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FALSE_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_booleanValue; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitBooleanValue) { + return visitor.visitBooleanValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalContext extends antlr.ParserRuleContext { + public _sign?: Token | null; + public _from_?: IntervalFieldContext; + public _to?: IntervalFieldContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public INTERVAL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INTERVAL_, 0)!; + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public intervalField(): IntervalFieldContext[]; + public intervalField(i: number): IntervalFieldContext | null; + public intervalField(i?: number): IntervalFieldContext[] | IntervalFieldContext | null { + if (i === undefined) { + return this.getRuleContexts(IntervalFieldContext); + } + + return this.getRuleContext(i, IntervalFieldContext); + } + public TO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TO_, 0); + } + public PLUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PLUS_, 0); + } + public MINUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUS_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_interval; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitInterval) { + return visitor.visitInterval(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IntervalFieldContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public YEAR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.YEAR_, 0); + } + public MONTH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MONTH_, 0); + } + public DAY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DAY_, 0); + } + public HOUR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.HOUR_, 0); + } + public MINUTE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUTE_, 0); + } + public SECOND_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SECOND_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_intervalField; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIntervalField) { + return visitor.visitIntervalField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NormalFormContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public NFD_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFD_, 0); + } + public NFC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFC_, 0); + } + public NFKD_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFKD_, 0); + } + public NFKC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFKC_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_normalForm; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNormalForm) { + return visitor.visitNormalForm(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TypeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_type; + } + public override copyFrom(ctx: TypeContext): void { + super.copyFrom(ctx); + } +} +export class RowTypeContext extends TypeContext { + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ROW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROW_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public rowField(): RowFieldContext[]; + public rowField(i: number): RowFieldContext | null; + public rowField(i?: number): RowFieldContext[] | RowFieldContext | null { + if (i === undefined) { + return this.getRuleContexts(RowFieldContext); + } + + return this.getRuleContext(i, RowFieldContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRowType) { + return visitor.visitRowType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IntervalTypeContext extends TypeContext { + public _from_?: IntervalFieldContext; + public _to?: IntervalFieldContext; + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public INTERVAL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INTERVAL_, 0)!; + } + public intervalField(): IntervalFieldContext[]; + public intervalField(i: number): IntervalFieldContext | null; + public intervalField(i?: number): IntervalFieldContext[] | IntervalFieldContext | null { + if (i === undefined) { + return this.getRuleContexts(IntervalFieldContext); + } + + return this.getRuleContext(i, IntervalFieldContext); + } + public TO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TO_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIntervalType) { + return visitor.visitIntervalType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArrayTypeContext extends TypeContext { + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public ARRAY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ARRAY_, 0)!; + } + public LSQUARE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LSQUARE_, 0); + } + public INTEGER_VALUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INTEGER_VALUE_, 0); + } + public RSQUARE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RSQUARE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitArrayType) { + return visitor.visitArrayType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DoublePrecisionTypeContext extends TypeContext { + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DOUBLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DOUBLE_, 0)!; + } + public PRECISION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PRECISION_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDoublePrecisionType) { + return visitor.visitDoublePrecisionType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LegacyArrayTypeContext extends TypeContext { + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ARRAY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ARRAY_, 0)!; + } + public LT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LT_, 0)!; + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public GT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.GT_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLegacyArrayType) { + return visitor.visitLegacyArrayType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GenericTypeContext extends TypeContext { + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public typeParameter(): TypeParameterContext[]; + public typeParameter(i: number): TypeParameterContext | null; + public typeParameter(i?: number): TypeParameterContext[] | TypeParameterContext | null { + if (i === undefined) { + return this.getRuleContexts(TypeParameterContext); + } + + return this.getRuleContext(i, TypeParameterContext); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitGenericType) { + return visitor.visitGenericType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DateTimeTypeContext extends TypeContext { + public _base_?: Token | null; + public _precision?: TypeParameterContext; + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TIMESTAMP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TIMESTAMP_, 0); + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public WITHOUT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITHOUT_, 0); + } + public TIME_(): antlr.TerminalNode[]; + public TIME_(i: number): antlr.TerminalNode | null; + public TIME_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.TIME_); + } else { + return this.getToken(TrinoParser.TIME_, i); + } + } + public ZONE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ZONE_, 0); + } + public typeParameter(): TypeParameterContext | null { + return this.getRuleContext(0, TypeParameterContext); + } + public WITH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITH_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDateTimeType) { + return visitor.visitDateTimeType(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LegacyMapTypeContext extends TypeContext { + public _keyType?: TypeContext; + public _valueType?: TypeContext; + public constructor(ctx: TypeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public MAP_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MAP_, 0)!; + } + public LT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LT_, 0)!; + } + public COMMA_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COMMA_, 0)!; + } + public GT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.GT_, 0)!; + } + public type_(): TypeContext[]; + public type_(i: number): TypeContext | null; + public type_(i?: number): TypeContext[] | TypeContext | null { + if (i === undefined) { + return this.getRuleContexts(TypeContext); + } + + return this.getRuleContext(i, TypeContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLegacyMapType) { + return visitor.visitLegacyMapType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowFieldContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_rowField; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRowField) { + return visitor.visitRowField(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TypeParameterContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public INTEGER_VALUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INTEGER_VALUE_, 0); + } + public type(): TypeContext | null { + return this.getRuleContext(0, TypeContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_typeParameter; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTypeParameter) { + return visitor.visitTypeParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WhenClauseContext extends antlr.ParserRuleContext { + public _condition?: ExpressionContext; + public _result?: ExpressionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WHEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WHEN_, 0)!; + } + public THEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.THEN_, 0)!; + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_whenClause; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitWhenClause) { + return visitor.visitWhenClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FilterContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FILTER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FILTER_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public WHERE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WHERE_, 0)!; + } + public booleanExpression(): BooleanExpressionContext { + return this.getRuleContext(0, BooleanExpressionContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_filter; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitFilter) { + return visitor.visitFilter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class MergeCaseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_mergeCase; + } + public override copyFrom(ctx: MergeCaseContext): void { + super.copyFrom(ctx); + } +} +export class MergeInsertContext extends MergeCaseContext { + public _condition?: ExpressionContext; + public _identifier?: IdentifierContext; + public _targets: IdentifierContext[] = []; + public _expression?: ExpressionContext; + public _values: ExpressionContext[] = []; + public constructor(ctx: MergeCaseContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public WHEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WHEN_, 0)!; + } + public NOT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.NOT_, 0)!; + } + public MATCHED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATCHED_, 0)!; + } + public THEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.THEN_, 0)!; + } + public INSERT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INSERT_, 0)!; + } + public VALUES_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VALUES_, 0)!; + } + public LPAREN_(): antlr.TerminalNode[]; + public LPAREN_(i: number): antlr.TerminalNode | null; + public LPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.LPAREN_); + } else { + return this.getToken(TrinoParser.LPAREN_, i); + } + } + public RPAREN_(): antlr.TerminalNode[]; + public RPAREN_(i: number): antlr.TerminalNode | null; + public RPAREN_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.RPAREN_); + } else { + return this.getToken(TrinoParser.RPAREN_, i); + } + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public AND_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AND_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitMergeInsert) { + return visitor.visitMergeInsert(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MergeUpdateContext extends MergeCaseContext { + public _condition?: ExpressionContext; + public _identifier?: IdentifierContext; + public _targets: IdentifierContext[] = []; + public _expression?: ExpressionContext; + public _values: ExpressionContext[] = []; + public constructor(ctx: MergeCaseContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public WHEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WHEN_, 0)!; + } + public MATCHED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATCHED_, 0)!; + } + public THEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.THEN_, 0)!; + } + public UPDATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.UPDATE_, 0)!; + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public EQ_(): antlr.TerminalNode[]; + public EQ_(i: number): antlr.TerminalNode | null; + public EQ_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.EQ_); + } else { + return this.getToken(TrinoParser.EQ_, i); + } + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext | null; + public expression(i?: number): ExpressionContext[] | ExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } + + return this.getRuleContext(i, ExpressionContext); + } + public AND_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AND_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitMergeUpdate) { + return visitor.visitMergeUpdate(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class MergeDeleteContext extends MergeCaseContext { + public _condition?: ExpressionContext; + public constructor(ctx: MergeCaseContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public WHEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WHEN_, 0)!; + } + public MATCHED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.MATCHED_, 0)!; + } + public THEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.THEN_, 0)!; + } + public DELETE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DELETE_, 0)!; + } + public AND_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AND_, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitMergeDelete) { + return visitor.visitMergeDelete(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class OverContext extends antlr.ParserRuleContext { + public _windowName?: IdentifierContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public OVER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.OVER_, 0)!; + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public windowSpecification(): WindowSpecificationContext | null { + return this.getRuleContext(0, WindowSpecificationContext); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_over; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitOver) { + return visitor.visitOver(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class WindowFrameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public frameExtent(): FrameExtentContext { + return this.getRuleContext(0, FrameExtentContext)!; + } + public MEASURES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MEASURES_, 0); + } + public measureDefinition(): MeasureDefinitionContext[]; + public measureDefinition(i: number): MeasureDefinitionContext | null; + public measureDefinition(i?: number): MeasureDefinitionContext[] | MeasureDefinitionContext | null { + if (i === undefined) { + return this.getRuleContexts(MeasureDefinitionContext); + } + + return this.getRuleContext(i, MeasureDefinitionContext); + } + public AFTER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AFTER_, 0); + } + public MATCH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCH_, 0); + } + public skipTo(): SkipToContext | null { + return this.getRuleContext(0, SkipToContext); + } + public PATTERN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PATTERN_, 0); + } + public LPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LPAREN_, 0); + } + public rowPattern(): RowPatternContext | null { + return this.getRuleContext(0, RowPatternContext); + } + public RPAREN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RPAREN_, 0); + } + public SUBSET_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SUBSET_, 0); + } + public subsetDefinition(): SubsetDefinitionContext[]; + public subsetDefinition(i: number): SubsetDefinitionContext | null; + public subsetDefinition(i?: number): SubsetDefinitionContext[] | SubsetDefinitionContext | null { + if (i === undefined) { + return this.getRuleContexts(SubsetDefinitionContext); + } + + return this.getRuleContext(i, SubsetDefinitionContext); + } + public DEFINE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFINE_, 0); + } + public variableDefinition(): VariableDefinitionContext[]; + public variableDefinition(i: number): VariableDefinitionContext | null; + public variableDefinition(i?: number): VariableDefinitionContext[] | VariableDefinitionContext | null { + if (i === undefined) { + return this.getRuleContexts(VariableDefinitionContext); + } + + return this.getRuleContext(i, VariableDefinitionContext); + } + public INITIAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INITIAL_, 0); + } + public SEEK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SEEK_, 0); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_windowFrame; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitWindowFrame) { + return visitor.visitWindowFrame(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FrameExtentContext extends antlr.ParserRuleContext { + public _frameType?: Token | null; + public _start_?: FrameBoundContext; + public _end_?: FrameBoundContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public RANGE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RANGE_, 0); + } + public frameBound(): FrameBoundContext[]; + public frameBound(i: number): FrameBoundContext | null; + public frameBound(i?: number): FrameBoundContext[] | FrameBoundContext | null { + if (i === undefined) { + return this.getRuleContexts(FrameBoundContext); + } + + return this.getRuleContext(i, FrameBoundContext); + } + public ROWS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROWS_, 0); + } + public GROUPS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GROUPS_, 0); + } + public BETWEEN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BETWEEN_, 0); + } + public AND_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AND_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_frameExtent; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitFrameExtent) { + return visitor.visitFrameExtent(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FrameBoundContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_frameBound; + } + public override copyFrom(ctx: FrameBoundContext): void { + super.copyFrom(ctx); + } +} +export class BoundedFrameContext extends FrameBoundContext { + public _boundType?: Token | null; + public constructor(ctx: FrameBoundContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public PRECEDING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRECEDING_, 0); + } + public FOLLOWING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FOLLOWING_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitBoundedFrame) { + return visitor.visitBoundedFrame(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnboundedFrameContext extends FrameBoundContext { + public _boundType?: Token | null; + public constructor(ctx: FrameBoundContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public UNBOUNDED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.UNBOUNDED_, 0)!; + } + public PRECEDING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRECEDING_, 0); + } + public FOLLOWING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FOLLOWING_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUnboundedFrame) { + return visitor.visitUnboundedFrame(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentRowBoundContext extends FrameBoundContext { + public constructor(ctx: FrameBoundContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CURRENT_, 0)!; + } + public ROW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROW_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCurrentRowBound) { + return visitor.visitCurrentRowBound(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RowPatternContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_rowPattern; + } + public override copyFrom(ctx: RowPatternContext): void { + super.copyFrom(ctx); + } +} +export class QuantifiedPrimaryContext extends RowPatternContext { + public constructor(ctx: RowPatternContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public patternPrimary(): PatternPrimaryContext { + return this.getRuleContext(0, PatternPrimaryContext)!; + } + public patternQuantifier(): PatternQuantifierContext | null { + return this.getRuleContext(0, PatternQuantifierContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQuantifiedPrimary) { + return visitor.visitQuantifiedPrimary(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PatternConcatenationContext extends RowPatternContext { + public constructor(ctx: RowPatternContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public rowPattern(): RowPatternContext[]; + public rowPattern(i: number): RowPatternContext | null; + public rowPattern(i?: number): RowPatternContext[] | RowPatternContext | null { + if (i === undefined) { + return this.getRuleContexts(RowPatternContext); + } + + return this.getRuleContext(i, RowPatternContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPatternConcatenation) { + return visitor.visitPatternConcatenation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PatternAlternationContext extends RowPatternContext { + public constructor(ctx: RowPatternContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public rowPattern(): RowPatternContext[]; + public rowPattern(i: number): RowPatternContext | null; + public rowPattern(i?: number): RowPatternContext[] | RowPatternContext | null { + if (i === undefined) { + return this.getRuleContexts(RowPatternContext); + } + + return this.getRuleContext(i, RowPatternContext); + } + public VBAR_(): antlr.TerminalNode { + return this.getToken(TrinoParser.VBAR_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPatternAlternation) { + return visitor.visitPatternAlternation(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternPrimaryContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_patternPrimary; + } + public override copyFrom(ctx: PatternPrimaryContext): void { + super.copyFrom(ctx); + } +} +export class PatternPermutationContext extends PatternPrimaryContext { + public constructor(ctx: PatternPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public PERMUTE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PERMUTE_, 0)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public rowPattern(): RowPatternContext[]; + public rowPattern(i: number): RowPatternContext | null; + public rowPattern(i?: number): RowPatternContext[] | RowPatternContext | null { + if (i === undefined) { + return this.getRuleContexts(RowPatternContext); + } + + return this.getRuleContext(i, RowPatternContext); + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPatternPermutation) { + return visitor.visitPatternPermutation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PartitionEndAnchorContext extends PatternPrimaryContext { + public constructor(ctx: PatternPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DOLLAR_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DOLLAR_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPartitionEndAnchor) { + return visitor.visitPartitionEndAnchor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PatternVariableContext extends PatternPrimaryContext { + public constructor(ctx: PatternPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPatternVariable) { + return visitor.visitPatternVariable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExcludedPatternContext extends PatternPrimaryContext { + public constructor(ctx: PatternPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LCURLYHYPHEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LCURLYHYPHEN_, 0)!; + } + public rowPattern(): RowPatternContext { + return this.getRuleContext(0, RowPatternContext)!; + } + public RCURLYHYPHEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RCURLYHYPHEN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExcludedPattern) { + return visitor.visitExcludedPattern(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PartitionStartAnchorContext extends PatternPrimaryContext { + public constructor(ctx: PatternPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CARET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CARET_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPartitionStartAnchor) { + return visitor.visitPartitionStartAnchor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class EmptyPatternContext extends PatternPrimaryContext { + public constructor(ctx: PatternPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitEmptyPattern) { + return visitor.visitEmptyPattern(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GroupedPatternContext extends PatternPrimaryContext { + public constructor(ctx: PatternPrimaryContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public rowPattern(): RowPatternContext { + return this.getRuleContext(0, RowPatternContext)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitGroupedPattern) { + return visitor.visitGroupedPattern(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PatternQuantifierContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_patternQuantifier; + } + public override copyFrom(ctx: PatternQuantifierContext): void { + super.copyFrom(ctx); + } +} +export class ZeroOrMoreQuantifierContext extends PatternQuantifierContext { + public _reluctant?: Token | null; + public constructor(ctx: PatternQuantifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ASTERISK_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ASTERISK_, 0)!; + } + public QUESTION_MARK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.QUESTION_MARK_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitZeroOrMoreQuantifier) { + return visitor.visitZeroOrMoreQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class OneOrMoreQuantifierContext extends PatternQuantifierContext { + public _reluctant?: Token | null; + public constructor(ctx: PatternQuantifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public PLUS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.PLUS_, 0)!; + } + public QUESTION_MARK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.QUESTION_MARK_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitOneOrMoreQuantifier) { + return visitor.visitOneOrMoreQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ZeroOrOneQuantifierContext extends PatternQuantifierContext { + public _reluctant?: Token | null; + public constructor(ctx: PatternQuantifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public QUESTION_MARK_(): antlr.TerminalNode[]; + public QUESTION_MARK_(i: number): antlr.TerminalNode | null; + public QUESTION_MARK_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.QUESTION_MARK_); + } else { + return this.getToken(TrinoParser.QUESTION_MARK_, i); + } + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitZeroOrOneQuantifier) { + return visitor.visitZeroOrOneQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RangeQuantifierContext extends PatternQuantifierContext { + public _exactly?: Token | null; + public _reluctant?: Token | null; + public _atLeast?: Token | null; + public _atMost?: Token | null; + public constructor(ctx: PatternQuantifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LCURLY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LCURLY_, 0)!; + } + public RCURLY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RCURLY_, 0)!; + } + public INTEGER_VALUE_(): antlr.TerminalNode[]; + public INTEGER_VALUE_(i: number): antlr.TerminalNode | null; + public INTEGER_VALUE_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.INTEGER_VALUE_); + } else { + return this.getToken(TrinoParser.INTEGER_VALUE_, i); + } + } + public QUESTION_MARK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.QUESTION_MARK_, 0); + } + public COMMA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMA_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRangeQuantifier) { + return visitor.visitRangeQuantifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class UpdateAssignmentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public EQ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EQ_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_updateAssignment; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUpdateAssignment) { + return visitor.visitUpdateAssignment(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExplainOptionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_explainOption; + } + public override copyFrom(ctx: ExplainOptionContext): void { + super.copyFrom(ctx); + } +} +export class ExplainFormatContext extends ExplainOptionContext { + public _value?: Token | null; + public constructor(ctx: ExplainOptionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public FORMAT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FORMAT_, 0)!; + } + public TEXT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TEXT_, 0); + } + public GRAPHVIZ_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRAPHVIZ_, 0); + } + public JSON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.JSON_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExplainFormat) { + return visitor.visitExplainFormat(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExplainTypeContext extends ExplainOptionContext { + public _value?: Token | null; + public constructor(ctx: ExplainOptionContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public TYPE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.TYPE_, 0)!; + } + public LOGICAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LOGICAL_, 0); + } + public DISTRIBUTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DISTRIBUTED_, 0); + } + public VALIDATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VALIDATE_, 0); + } + public IO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IO_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitExplainType) { + return visitor.visitExplainType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TransactionModeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_transactionMode; + } + public override copyFrom(ctx: TransactionModeContext): void { + super.copyFrom(ctx); + } +} +export class TransactionAccessModeContext extends TransactionModeContext { + public _accessMode?: Token | null; + public constructor(ctx: TransactionModeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public READ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.READ_, 0)!; + } + public ONLY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ONLY_, 0); + } + public WRITE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WRITE_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitTransactionAccessMode) { + return visitor.visitTransactionAccessMode(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IsolationLevelContext extends TransactionModeContext { + public constructor(ctx: TransactionModeContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ISOLATION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ISOLATION_, 0)!; + } + public LEVEL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LEVEL_, 0)!; + } + public levelOfIsolation(): LevelOfIsolationContext { + return this.getRuleContext(0, LevelOfIsolationContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIsolationLevel) { + return visitor.visitIsolationLevel(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LevelOfIsolationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_levelOfIsolation; + } + public override copyFrom(ctx: LevelOfIsolationContext): void { + super.copyFrom(ctx); + } +} +export class ReadUncommittedContext extends LevelOfIsolationContext { + public constructor(ctx: LevelOfIsolationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public READ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.READ_, 0)!; + } + public UNCOMMITTED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.UNCOMMITTED_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitReadUncommitted) { + return visitor.visitReadUncommitted(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SerializableContext extends LevelOfIsolationContext { + public constructor(ctx: LevelOfIsolationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SERIALIZABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SERIALIZABLE_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSerializable) { + return visitor.visitSerializable(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReadCommittedContext extends LevelOfIsolationContext { + public constructor(ctx: LevelOfIsolationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public READ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.READ_, 0)!; + } + public COMMITTED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COMMITTED_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitReadCommitted) { + return visitor.visitReadCommitted(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RepeatableReadContext extends LevelOfIsolationContext { + public constructor(ctx: LevelOfIsolationContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public REPEATABLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.REPEATABLE_, 0)!; + } + public READ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.READ_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRepeatableRead) { + return visitor.visitRepeatableRead(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CallArgumentContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_callArgument; + } + public override copyFrom(ctx: CallArgumentContext): void { + super.copyFrom(ctx); + } +} +export class PositionalArgumentContext extends CallArgumentContext { + public constructor(ctx: CallArgumentContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPositionalArgument) { + return visitor.visitPositionalArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NamedArgumentContext extends CallArgumentContext { + public constructor(ctx: CallArgumentContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public RDOUBLEARROW_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RDOUBLEARROW_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNamedArgument) { + return visitor.visitNamedArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PathElementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_pathElement; + } + public override copyFrom(ctx: PathElementContext): void { + super.copyFrom(ctx); + } +} +export class QualifiedArgumentContext extends PathElementContext { + public constructor(ctx: PathElementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public DOT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DOT_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQualifiedArgument) { + return visitor.visitQualifiedArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnqualifiedArgumentContext extends PathElementContext { + public constructor(ctx: PathElementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUnqualifiedArgument) { + return visitor.visitUnqualifiedArgument(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PathSpecificationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public pathElement(): PathElementContext[]; + public pathElement(i: number): PathElementContext | null; + public pathElement(i?: number): PathElementContext[] | PathElementContext | null { + if (i === undefined) { + return this.getRuleContexts(PathElementContext); + } + + return this.getRuleContext(i, PathElementContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_pathSpecification; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPathSpecification) { + return visitor.visitPathSpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionSpecificationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FUNCTION_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FUNCTION_, 0)!; + } + public functionDeclaration(): FunctionDeclarationContext { + return this.getRuleContext(0, FunctionDeclarationContext)!; + } + public returnsClause(): ReturnsClauseContext { + return this.getRuleContext(0, ReturnsClauseContext)!; + } + public controlStatement(): ControlStatementContext { + return this.getRuleContext(0, ControlStatementContext)!; + } + public routineCharacteristic(): RoutineCharacteristicContext[]; + public routineCharacteristic(i: number): RoutineCharacteristicContext | null; + public routineCharacteristic(i?: number): RoutineCharacteristicContext[] | RoutineCharacteristicContext | null { + if (i === undefined) { + return this.getRuleContexts(RoutineCharacteristicContext); + } + + return this.getRuleContext(i, RoutineCharacteristicContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_functionSpecification; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitFunctionSpecification) { + return visitor.visitFunctionSpecification(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionDeclarationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public qualifiedName(): QualifiedNameContext { + return this.getRuleContext(0, QualifiedNameContext)!; + } + public LPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LPAREN_, 0)!; + } + public RPAREN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RPAREN_, 0)!; + } + public parameterDeclaration(): ParameterDeclarationContext[]; + public parameterDeclaration(i: number): ParameterDeclarationContext | null; + public parameterDeclaration(i?: number): ParameterDeclarationContext[] | ParameterDeclarationContext | null { + if (i === undefined) { + return this.getRuleContexts(ParameterDeclarationContext); + } + + return this.getRuleContext(i, ParameterDeclarationContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_functionDeclaration; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitFunctionDeclaration) { + return visitor.visitFunctionDeclaration(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ParameterDeclarationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_parameterDeclaration; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitParameterDeclaration) { + return visitor.visitParameterDeclaration(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ReturnsClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public RETURNS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RETURNS_, 0)!; + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_returnsClause; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitReturnsClause) { + return visitor.visitReturnsClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RoutineCharacteristicContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_routineCharacteristic; + } + public override copyFrom(ctx: RoutineCharacteristicContext): void { + super.copyFrom(ctx); + } +} +export class ReturnsNullOnNullInputCharacteristicContext extends RoutineCharacteristicContext { + public constructor(ctx: RoutineCharacteristicContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public RETURNS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RETURNS_, 0)!; + } + public NULL_(): antlr.TerminalNode[]; + public NULL_(i: number): antlr.TerminalNode | null; + public NULL_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.NULL_); + } else { + return this.getToken(TrinoParser.NULL_, i); + } + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public INPUT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INPUT_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitReturnsNullOnNullInputCharacteristic) { + return visitor.visitReturnsNullOnNullInputCharacteristic(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SecurityCharacteristicContext extends RoutineCharacteristicContext { + public constructor(ctx: RoutineCharacteristicContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SECURITY_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SECURITY_, 0)!; + } + public DEFINER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFINER_, 0); + } + public INVOKER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INVOKER_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSecurityCharacteristic) { + return visitor.visitSecurityCharacteristic(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CalledOnNullInputCharacteristicContext extends RoutineCharacteristicContext { + public constructor(ctx: RoutineCharacteristicContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CALLED_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CALLED_, 0)!; + } + public ON_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ON_, 0)!; + } + public NULL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.NULL_, 0)!; + } + public INPUT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INPUT_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCalledOnNullInputCharacteristic) { + return visitor.visitCalledOnNullInputCharacteristic(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CommentCharacteristicContext extends RoutineCharacteristicContext { + public constructor(ctx: RoutineCharacteristicContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public COMMENT_(): antlr.TerminalNode { + return this.getToken(TrinoParser.COMMENT_, 0)!; + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCommentCharacteristic) { + return visitor.visitCommentCharacteristic(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LanguageCharacteristicContext extends RoutineCharacteristicContext { + public constructor(ctx: RoutineCharacteristicContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LANGUAGE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LANGUAGE_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLanguageCharacteristic) { + return visitor.visitLanguageCharacteristic(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DeterministicCharacteristicContext extends RoutineCharacteristicContext { + public constructor(ctx: RoutineCharacteristicContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DETERMINISTIC_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DETERMINISTIC_, 0)!; + } + public NOT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NOT_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDeterministicCharacteristic) { + return visitor.visitDeterministicCharacteristic(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ControlStatementContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_controlStatement; + } + public override copyFrom(ctx: ControlStatementContext): void { + super.copyFrom(ctx); + } +} +export class WhileStatementContext extends ControlStatementContext { + public _label?: IdentifierContext; + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public WHILE_(): antlr.TerminalNode[]; + public WHILE_(i: number): antlr.TerminalNode | null; + public WHILE_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.WHILE_); + } else { + return this.getToken(TrinoParser.WHILE_, i); + } + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public DO_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DO_, 0)!; + } + public sqlStatementList(): SqlStatementListContext { + return this.getRuleContext(0, SqlStatementListContext)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public COLON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COLON_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitWhileStatement) { + return visitor.visitWhileStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SimpleCaseStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CASE_(): antlr.TerminalNode[]; + public CASE_(i: number): antlr.TerminalNode | null; + public CASE_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.CASE_); + } else { + return this.getToken(TrinoParser.CASE_, i); + } + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public caseStatementWhenClause(): CaseStatementWhenClauseContext[]; + public caseStatementWhenClause(i: number): CaseStatementWhenClauseContext | null; + public caseStatementWhenClause(i?: number): CaseStatementWhenClauseContext[] | CaseStatementWhenClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(CaseStatementWhenClauseContext); + } + + return this.getRuleContext(i, CaseStatementWhenClauseContext); + } + public elseClause(): ElseClauseContext | null { + return this.getRuleContext(0, ElseClauseContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSimpleCaseStatement) { + return visitor.visitSimpleCaseStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RepeatStatementContext extends ControlStatementContext { + public _label?: IdentifierContext; + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public REPEAT_(): antlr.TerminalNode[]; + public REPEAT_(i: number): antlr.TerminalNode | null; + public REPEAT_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.REPEAT_); + } else { + return this.getToken(TrinoParser.REPEAT_, i); + } + } + public sqlStatementList(): SqlStatementListContext { + return this.getRuleContext(0, SqlStatementListContext)!; + } + public UNTIL_(): antlr.TerminalNode { + return this.getToken(TrinoParser.UNTIL_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public COLON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COLON_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRepeatStatement) { + return visitor.visitRepeatStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AssignmentStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public SET_(): antlr.TerminalNode { + return this.getToken(TrinoParser.SET_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public EQ_(): antlr.TerminalNode { + return this.getToken(TrinoParser.EQ_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitAssignmentStatement) { + return visitor.visitAssignmentStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LeaveStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LEAVE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.LEAVE_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLeaveStatement) { + return visitor.visitLeaveStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CompoundStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public BEGIN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.BEGIN_, 0)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public variableDeclaration(): VariableDeclarationContext[]; + public variableDeclaration(i: number): VariableDeclarationContext | null; + public variableDeclaration(i?: number): VariableDeclarationContext[] | VariableDeclarationContext | null { + if (i === undefined) { + return this.getRuleContexts(VariableDeclarationContext); + } + + return this.getRuleContext(i, VariableDeclarationContext); + } + public SEMICOLON_(): antlr.TerminalNode[]; + public SEMICOLON_(i: number): antlr.TerminalNode | null; + public SEMICOLON_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.SEMICOLON_); + } else { + return this.getToken(TrinoParser.SEMICOLON_, i); + } + } + public sqlStatementList(): SqlStatementListContext | null { + return this.getRuleContext(0, SqlStatementListContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCompoundStatement) { + return visitor.visitCompoundStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IterateStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ITERATE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ITERATE_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIterateStatement) { + return visitor.visitIterateStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LoopStatementContext extends ControlStatementContext { + public _label?: IdentifierContext; + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public LOOP_(): antlr.TerminalNode[]; + public LOOP_(i: number): antlr.TerminalNode | null; + public LOOP_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.LOOP_); + } else { + return this.getToken(TrinoParser.LOOP_, i); + } + } + public sqlStatementList(): SqlStatementListContext { + return this.getRuleContext(0, SqlStatementListContext)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public COLON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COLON_, 0); + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitLoopStatement) { + return visitor.visitLoopStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReturnStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public RETURN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.RETURN_, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitReturnStatement) { + return visitor.visitReturnStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IfStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public IF_(): antlr.TerminalNode[]; + public IF_(i: number): antlr.TerminalNode | null; + public IF_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.IF_); + } else { + return this.getToken(TrinoParser.IF_, i); + } + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public THEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.THEN_, 0)!; + } + public sqlStatementList(): SqlStatementListContext { + return this.getRuleContext(0, SqlStatementListContext)!; + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public elseIfClause(): ElseIfClauseContext[]; + public elseIfClause(i: number): ElseIfClauseContext | null; + public elseIfClause(i?: number): ElseIfClauseContext[] | ElseIfClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(ElseIfClauseContext); + } + + return this.getRuleContext(i, ElseIfClauseContext); + } + public elseClause(): ElseClauseContext | null { + return this.getRuleContext(0, ElseClauseContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIfStatement) { + return visitor.visitIfStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SearchedCaseStatementContext extends ControlStatementContext { + public constructor(ctx: ControlStatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CASE_(): antlr.TerminalNode[]; + public CASE_(i: number): antlr.TerminalNode | null; + public CASE_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.CASE_); + } else { + return this.getToken(TrinoParser.CASE_, i); + } + } + public END_(): antlr.TerminalNode { + return this.getToken(TrinoParser.END_, 0)!; + } + public caseStatementWhenClause(): CaseStatementWhenClauseContext[]; + public caseStatementWhenClause(i: number): CaseStatementWhenClauseContext | null; + public caseStatementWhenClause(i?: number): CaseStatementWhenClauseContext[] | CaseStatementWhenClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(CaseStatementWhenClauseContext); + } + + return this.getRuleContext(i, CaseStatementWhenClauseContext); + } + public elseClause(): ElseClauseContext | null { + return this.getRuleContext(0, ElseClauseContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSearchedCaseStatement) { + return visitor.visitSearchedCaseStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class CaseStatementWhenClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public WHEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.WHEN_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public THEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.THEN_, 0)!; + } + public sqlStatementList(): SqlStatementListContext { + return this.getRuleContext(0, SqlStatementListContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_caseStatementWhenClause; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCaseStatementWhenClause) { + return visitor.visitCaseStatementWhenClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ElseIfClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ELSEIF_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ELSEIF_, 0)!; + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext)!; + } + public THEN_(): antlr.TerminalNode { + return this.getToken(TrinoParser.THEN_, 0)!; + } + public sqlStatementList(): SqlStatementListContext { + return this.getRuleContext(0, SqlStatementListContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_elseIfClause; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitElseIfClause) { + return visitor.visitElseIfClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ElseClauseContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ELSE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ELSE_, 0)!; + } + public sqlStatementList(): SqlStatementListContext { + return this.getRuleContext(0, SqlStatementListContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_elseClause; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitElseClause) { + return visitor.visitElseClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class VariableDeclarationContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public DECLARE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DECLARE_, 0)!; + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public type(): TypeContext { + return this.getRuleContext(0, TypeContext)!; + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public DEFAULT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFAULT_, 0); + } + public valueExpression(): ValueExpressionContext | null { + return this.getRuleContext(0, ValueExpressionContext); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_variableDeclaration; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitVariableDeclaration) { + return visitor.visitVariableDeclaration(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SqlStatementListContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public controlStatement(): ControlStatementContext[]; + public controlStatement(i: number): ControlStatementContext | null; + public controlStatement(i?: number): ControlStatementContext[] | ControlStatementContext | null { + if (i === undefined) { + return this.getRuleContexts(ControlStatementContext); + } + + return this.getRuleContext(i, ControlStatementContext); + } + public SEMICOLON_(): antlr.TerminalNode[]; + public SEMICOLON_(i: number): antlr.TerminalNode | null; + public SEMICOLON_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.SEMICOLON_); + } else { + return this.getToken(TrinoParser.SEMICOLON_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_sqlStatementList; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSqlStatementList) { + return visitor.visitSqlStatementList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PrivilegeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public CREATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CREATE_, 0); + } + public SELECT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SELECT_, 0); + } + public DELETE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DELETE_, 0); + } + public INSERT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INSERT_, 0); + } + public UPDATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UPDATE_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_privilege; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitPrivilege) { + return visitor.visitPrivilege(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QualifiedNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public DOT_(): antlr.TerminalNode[]; + public DOT_(i: number): antlr.TerminalNode | null; + public DOT_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.DOT_); + } else { + return this.getToken(TrinoParser.DOT_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_qualifiedName; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQualifiedName) { + return visitor.visitQualifiedName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class QueryPeriodContext extends antlr.ParserRuleContext { + public _end?: ValueExpressionContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public FOR_(): antlr.TerminalNode { + return this.getToken(TrinoParser.FOR_, 0)!; + } + public rangeType(): RangeTypeContext { + return this.getRuleContext(0, RangeTypeContext)!; + } + public AS_(): antlr.TerminalNode { + return this.getToken(TrinoParser.AS_, 0)!; + } + public OF_(): antlr.TerminalNode { + return this.getToken(TrinoParser.OF_, 0)!; + } + public valueExpression(): ValueExpressionContext { + return this.getRuleContext(0, ValueExpressionContext)!; + } + public override get ruleIndex(): number { + return TrinoParser.RULE_queryPeriod; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQueryPeriod) { + return visitor.visitQueryPeriod(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RangeTypeContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public TIMESTAMP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TIMESTAMP_, 0); + } + public VERSION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VERSION_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_rangeType; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRangeType) { + return visitor.visitRangeType(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class GrantorContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_grantor; + } + public override copyFrom(ctx: GrantorContext): void { + super.copyFrom(ctx); + } +} +export class CurrentUserGrantorContext extends GrantorContext { + public constructor(ctx: GrantorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_USER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CURRENT_USER_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCurrentUserGrantor) { + return visitor.visitCurrentUserGrantor(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SpecifiedPrincipalContext extends GrantorContext { + public constructor(ctx: GrantorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public principal(): PrincipalContext { + return this.getRuleContext(0, PrincipalContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitSpecifiedPrincipal) { + return visitor.visitSpecifiedPrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CurrentRoleGrantorContext extends GrantorContext { + public constructor(ctx: GrantorContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public CURRENT_ROLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.CURRENT_ROLE_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitCurrentRoleGrantor) { + return visitor.visitCurrentRoleGrantor(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PrincipalContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_principal; + } + public override copyFrom(ctx: PrincipalContext): void { + super.copyFrom(ctx); + } +} +export class UnspecifiedPrincipalContext extends PrincipalContext { + public constructor(ctx: PrincipalContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUnspecifiedPrincipal) { + return visitor.visitUnspecifiedPrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UserPrincipalContext extends PrincipalContext { + public constructor(ctx: PrincipalContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public USER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.USER_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUserPrincipal) { + return visitor.visitUserPrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class RolePrincipalContext extends PrincipalContext { + public constructor(ctx: PrincipalContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public ROLE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.ROLE_, 0)!; + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRolePrincipal) { + return visitor.visitRolePrincipal(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RolesContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } + + return this.getRuleContext(i, IdentifierContext); + } + public COMMA_(): antlr.TerminalNode[]; + public COMMA_(i: number): antlr.TerminalNode | null; + public COMMA_(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(TrinoParser.COMMA_); + } else { + return this.getToken(TrinoParser.COMMA_, i); + } + } + public override get ruleIndex(): number { + return TrinoParser.RULE_roles; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitRoles) { + return visitor.visitRoles(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IdentifierContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_identifier; + } + public override copyFrom(ctx: IdentifierContext): void { + super.copyFrom(ctx); + } +} +export class BackQuotedIdentifierContext extends IdentifierContext { + public constructor(ctx: IdentifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public BACKQUOTED_IDENTIFIER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.BACKQUOTED_IDENTIFIER_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitBackQuotedIdentifier) { + return visitor.visitBackQuotedIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class QuotedIdentifierContext extends IdentifierContext { + public constructor(ctx: IdentifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public QUOTED_IDENTIFIER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.QUOTED_IDENTIFIER_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitQuotedIdentifier) { + return visitor.visitQuotedIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DigitIdentifierContext extends IdentifierContext { + public constructor(ctx: IdentifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DIGIT_IDENTIFIER_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DIGIT_IDENTIFIER_, 0)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDigitIdentifier) { + return visitor.visitDigitIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnquotedIdentifierContext extends IdentifierContext { + public constructor(ctx: IdentifierContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public IDENTIFIER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IDENTIFIER_, 0); + } + public nonReserved(): NonReservedContext | null { + return this.getRuleContext(0, NonReservedContext); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitUnquotedIdentifier) { + return visitor.visitUnquotedIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NumberContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_number; + } + public override copyFrom(ctx: NumberContext): void { + super.copyFrom(ctx); + } +} +export class DecimalLiteralContext extends NumberContext { + public constructor(ctx: NumberContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DECIMAL_VALUE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DECIMAL_VALUE_, 0)!; + } + public MINUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDecimalLiteral) { + return visitor.visitDecimalLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DoubleLiteralContext extends NumberContext { + public constructor(ctx: NumberContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public DOUBLE_VALUE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.DOUBLE_VALUE_, 0)!; + } + public MINUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitDoubleLiteral) { + return visitor.visitDoubleLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IntegerLiteralContext extends NumberContext { + public constructor(ctx: NumberContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public INTEGER_VALUE_(): antlr.TerminalNode { + return this.getToken(TrinoParser.INTEGER_VALUE_, 0)!; + } + public MINUS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUS_, 0); + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIntegerLiteral) { + return visitor.visitIntegerLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AuthorizationUserContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_authorizationUser; + } + public override copyFrom(ctx: AuthorizationUserContext): void { + super.copyFrom(ctx); + } +} +export class StringUserContext extends AuthorizationUserContext { + public constructor(ctx: AuthorizationUserContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public string_(): String_Context { + return this.getRuleContext(0, String_Context)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitStringUser) { + return visitor.visitStringUser(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IdentifierUserContext extends AuthorizationUserContext { + public constructor(ctx: AuthorizationUserContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); + } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext)!; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitIdentifierUser) { + return visitor.visitIdentifierUser(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NonReservedContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public ABSENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ABSENT_, 0); + } + public ADD_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ADD_, 0); + } + public ADMIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ADMIN_, 0); + } + public AFTER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AFTER_, 0); + } + public ALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ALL_, 0); + } + public ANALYZE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ANALYZE_, 0); + } + public ANY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ANY_, 0); + } + public ARRAY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ARRAY_, 0); + } + public ASC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ASC_, 0); + } + public AT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AT_, 0); + } + public AUTHORIZATION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.AUTHORIZATION_, 0); + } + public BEGIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BEGIN_, 0); + } + public BERNOULLI_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BERNOULLI_, 0); + } + public BOTH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.BOTH_, 0); + } + public CALL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CALL_, 0); + } + public CALLED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CALLED_, 0); + } + public CASCADE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CASCADE_, 0); + } + public CATALOG_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CATALOG_, 0); + } + public CATALOGS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CATALOGS_, 0); + } + public COLUMN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COLUMN_, 0); + } + public COLUMNS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COLUMNS_, 0); + } + public COMMENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMENT_, 0); + } + public COMMIT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMIT_, 0); + } + public COMMITTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COMMITTED_, 0); + } + public CONDITIONAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CONDITIONAL_, 0); + } + public COPARTITION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COPARTITION_, 0); + } + public COUNT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.COUNT_, 0); + } + public CURRENT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.CURRENT_, 0); + } + public DATA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DATA_, 0); + } + public DATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DATE_, 0); + } + public DAY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DAY_, 0); + } + public DECLARE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DECLARE_, 0); + } + public DEFAULT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFAULT_, 0); + } + public DEFINE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFINE_, 0); + } + public DEFINER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DEFINER_, 0); + } + public DENY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DENY_, 0); + } + public DESC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DESC_, 0); + } + public DESCRIPTOR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DESCRIPTOR_, 0); + } + public DETERMINISTIC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DETERMINISTIC_, 0); + } + public DISTRIBUTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DISTRIBUTED_, 0); + } + public DO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DO_, 0); + } + public DOUBLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.DOUBLE_, 0); + } + public ELSEIF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ELSEIF_, 0); + } + public EMPTY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EMPTY_, 0); + } + public ENCODING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ENCODING_, 0); + } + public ERROR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ERROR_, 0); + } + public EXCLUDING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXCLUDING_, 0); + } + public EXPLAIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.EXPLAIN_, 0); + } + public FETCH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FETCH_, 0); + } + public FILTER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FILTER_, 0); + } + public FINAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FINAL_, 0); + } + public FIRST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FIRST_, 0); + } + public FOLLOWING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FOLLOWING_, 0); + } + public FORMAT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FORMAT_, 0); + } + public FUNCTION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FUNCTION_, 0); + } + public FUNCTIONS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.FUNCTIONS_, 0); + } + public GRACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRACE_, 0); + } + public GRANT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRANT_, 0); + } + public GRANTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRANTED_, 0); + } + public GRANTS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRANTS_, 0); + } + public GRAPHVIZ_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GRAPHVIZ_, 0); + } + public GROUPS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.GROUPS_, 0); + } + public HOUR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.HOUR_, 0); + } + public IF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IF_, 0); + } + public IGNORE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IGNORE_, 0); + } + public IMMEDIATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IMMEDIATE_, 0); + } + public INCLUDING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INCLUDING_, 0); + } + public INITIAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INITIAL_, 0); + } + public INPUT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INPUT_, 0); + } + public INTERVAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INTERVAL_, 0); + } + public INVOKER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.INVOKER_, 0); + } + public IO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.IO_, 0); + } + public ITERATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ITERATE_, 0); + } + public ISOLATION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ISOLATION_, 0); + } + public JSON_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.JSON_, 0); + } + public KEEP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.KEEP_, 0); + } + public KEY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.KEY_, 0); + } + public KEYS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.KEYS_, 0); + } + public LANGUAGE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LANGUAGE_, 0); + } + public LAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LAST_, 0); + } + public LATERAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LATERAL_, 0); + } + public LEADING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LEADING_, 0); + } + public LEAVE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LEAVE_, 0); + } + public LEVEL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LEVEL_, 0); + } + public LIMIT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LIMIT_, 0); + } + public LOCAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LOCAL_, 0); + } + public LOGICAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LOGICAL_, 0); + } + public LOOP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.LOOP_, 0); + } + public MAP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MAP_, 0); + } + public MATCH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCH_, 0); + } + public MATCHED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCHED_, 0); + } + public MATCHES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCHES_, 0); + } + public MATCH_RECOGNIZE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATCH_RECOGNIZE_, 0); + } + public MATERIALIZED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MATERIALIZED_, 0); + } + public MEASURES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MEASURES_, 0); + } + public MERGE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MERGE_, 0); + } + public MINUTE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MINUTE_, 0); + } + public MONTH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.MONTH_, 0); + } + public NESTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NESTED_, 0); + } + public NEXT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NEXT_, 0); + } + public NFC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFC_, 0); + } + public NFD_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFD_, 0); + } + public NFKC_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFKC_, 0); + } + public NFKD_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NFKD_, 0); + } + public NO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NO_, 0); + } + public NONE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NONE_, 0); + } + public NULLIF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULLIF_, 0); + } + public NULLS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.NULLS_, 0); + } + public OBJECT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OBJECT_, 0); + } + public OF_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OF_, 0); + } + public OFFSET_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OFFSET_, 0); + } + public OMIT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OMIT_, 0); + } + public ONE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ONE_, 0); + } + public ONLY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ONLY_, 0); + } + public OPTION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OPTION_, 0); + } + public ORDINALITY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ORDINALITY_, 0); + } + public OUTPUT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OUTPUT_, 0); + } + public OVER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OVER_, 0); + } + public OVERFLOW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.OVERFLOW_, 0); + } + public PARTITION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PARTITION_, 0); + } + public PARTITIONS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PARTITIONS_, 0); + } + public PASSING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PASSING_, 0); + } + public PAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PAST_, 0); + } + public PATH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PATH_, 0); + } + public PATTERN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PATTERN_, 0); + } + public PER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PER_, 0); + } + public PERIOD_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PERIOD_, 0); + } + public PERMUTE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PERMUTE_, 0); + } + public PLAN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PLAN_, 0); + } + public POSITION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.POSITION_, 0); + } + public PRECEDING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRECEDING_, 0); + } + public PRECISION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRECISION_, 0); + } + public PRIVILEGES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRIVILEGES_, 0); + } + public PROPERTIES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PROPERTIES_, 0); + } + public PRUNE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.PRUNE_, 0); + } + public QUOTES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.QUOTES_, 0); + } + public RANGE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RANGE_, 0); + } + public READ_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.READ_, 0); + } + public REFRESH_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REFRESH_, 0); + } + public RENAME_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RENAME_, 0); + } + public REPEAT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPEAT_, 0); + } + public REPEATABLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPEATABLE_, 0); + } + public REPLACE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REPLACE_, 0); + } + public RESET_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RESET_, 0); + } + public RESPECT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RESPECT_, 0); + } + public RESTRICT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RESTRICT_, 0); + } + public RETURN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RETURN_, 0); + } + public RETURNING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RETURNING_, 0); + } + public RETURNS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RETURNS_, 0); + } + public REVOKE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.REVOKE_, 0); + } + public ROLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROLE_, 0); + } + public ROLES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROLES_, 0); + } + public ROLLBACK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROLLBACK_, 0); + } + public ROW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROW_, 0); + } + public ROWS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ROWS_, 0); + } + public RUNNING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.RUNNING_, 0); + } + public SCALAR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SCALAR_, 0); + } + public SCHEMA_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SCHEMA_, 0); + } + public SCHEMAS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SCHEMAS_, 0); + } + public SECOND_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SECOND_, 0); + } + public SECURITY_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SECURITY_, 0); + } + public SEEK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SEEK_, 0); + } + public SERIALIZABLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SERIALIZABLE_, 0); + } + public SESSION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SESSION_, 0); + } + public SET_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SET_, 0); + } + public SETS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SETS_, 0); + } + public SHOW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SHOW_, 0); + } + public SOME_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SOME_, 0); + } + public START_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.START_, 0); + } + public STATS_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.STATS_, 0); + } + public SUBSET_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SUBSET_, 0); + } + public SUBSTRING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SUBSTRING_, 0); + } + public SYSTEM_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.SYSTEM_, 0); + } + public TABLES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TABLES_, 0); + } + public TABLESAMPLE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TABLESAMPLE_, 0); + } + public TEXT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TEXT_, 0); + } + public TEXT_STRING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TEXT_STRING_, 0); + } + public TIES_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TIES_, 0); + } + public TIME_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TIME_, 0); + } + public TIMESTAMP_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TIMESTAMP_, 0); + } + public TO_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TO_, 0); + } + public TRAILING_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRAILING_, 0); + } + public TRANSACTION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRANSACTION_, 0); + } + public TRUNCATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRUNCATE_, 0); + } + public TRY_CAST_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TRY_CAST_, 0); + } + public TYPE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.TYPE_, 0); + } + public UNBOUNDED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNBOUNDED_, 0); + } + public UNCOMMITTED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNCOMMITTED_, 0); + } + public UNCONDITIONAL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNCONDITIONAL_, 0); + } + public UNIQUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNIQUE_, 0); + } + public UNKNOWN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNKNOWN_, 0); + } + public UNMATCHED_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNMATCHED_, 0); + } + public UNTIL_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UNTIL_, 0); + } + public UPDATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UPDATE_, 0); + } + public USE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.USE_, 0); + } + public USER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.USER_, 0); + } + public UTF16_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UTF16_, 0); + } + public UTF32_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UTF32_, 0); + } + public UTF8_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.UTF8_, 0); + } + public VALIDATE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VALIDATE_, 0); + } + public VALUE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VALUE_, 0); + } + public VERBOSE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VERBOSE_, 0); + } + public VERSION_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VERSION_, 0); + } + public VIEW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.VIEW_, 0); + } + public WHILE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WHILE_, 0); + } + public WINDOW_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WINDOW_, 0); + } + public WITHIN_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITHIN_, 0); + } + public WITHOUT_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WITHOUT_, 0); + } + public WORK_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WORK_, 0); + } + public WRAPPER_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WRAPPER_, 0); + } + public WRITE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.WRITE_, 0); + } + public YEAR_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.YEAR_, 0); + } + public ZONE_(): antlr.TerminalNode | null { + return this.getToken(TrinoParser.ZONE_, 0); + } + public override get ruleIndex(): number { + return TrinoParser.RULE_nonReserved; + } + public override accept(visitor: TrinoParserVisitor): Result | null { + if (visitor.visitNonReserved) { + return visitor.visitNonReserved(this); + } else { + return visitor.visitChildren(this); + } + } +} diff --git a/src/autocomplete/databases/trino/generated/TrinoParserVisitor.ts b/src/autocomplete/databases/trino/generated/TrinoParserVisitor.ts new file mode 100644 index 000000000..14c7943a9 --- /dev/null +++ b/src/autocomplete/databases/trino/generated/TrinoParserVisitor.ts @@ -0,0 +1,2522 @@ +//////////////////////////////////////////////////////// +// THIS FILE IS AUTOGENERATED, DON'T EDIT IT MANUALLY // +//////////////////////////////////////////////////////// + +// We don't really want to check types in generated code +// @ts-nocheck + + + +// Generated from src/autocomplete/databases/trino/grammar/TrinoParser.g4 by ANTLR 4.13.1 + +import { AbstractParseTreeVisitor } from "antlr4ng"; + + +import { ParseContext } from "./TrinoParser.js"; +import { StatementsContext } from "./TrinoParser.js"; +import { StatementDefaultContext } from "./TrinoParser.js"; +import { UseContext } from "./TrinoParser.js"; +import { CreateCatalogContext } from "./TrinoParser.js"; +import { DropCatalogContext } from "./TrinoParser.js"; +import { CreateSchemaContext } from "./TrinoParser.js"; +import { DropSchemaContext } from "./TrinoParser.js"; +import { RenameSchemaContext } from "./TrinoParser.js"; +import { SetSchemaAuthorizationContext } from "./TrinoParser.js"; +import { CreateTableAsSelectContext } from "./TrinoParser.js"; +import { CreateTableContext } from "./TrinoParser.js"; +import { DropTableContext } from "./TrinoParser.js"; +import { InsertIntoContext } from "./TrinoParser.js"; +import { DeleteContext } from "./TrinoParser.js"; +import { TruncateTableContext } from "./TrinoParser.js"; +import { CommentTableContext } from "./TrinoParser.js"; +import { CommentViewContext } from "./TrinoParser.js"; +import { CommentColumnContext } from "./TrinoParser.js"; +import { RenameTableContext } from "./TrinoParser.js"; +import { AddColumnContext } from "./TrinoParser.js"; +import { RenameColumnContext } from "./TrinoParser.js"; +import { DropColumnContext } from "./TrinoParser.js"; +import { SetColumnTypeContext } from "./TrinoParser.js"; +import { SetTableAuthorizationContext } from "./TrinoParser.js"; +import { SetTablePropertiesContext } from "./TrinoParser.js"; +import { TableExecuteContext } from "./TrinoParser.js"; +import { AnalyzeContext } from "./TrinoParser.js"; +import { CreateMaterializedViewContext } from "./TrinoParser.js"; +import { CreateViewContext } from "./TrinoParser.js"; +import { RefreshMaterializedViewContext } from "./TrinoParser.js"; +import { DropMaterializedViewContext } from "./TrinoParser.js"; +import { RenameMaterializedViewContext } from "./TrinoParser.js"; +import { SetMaterializedViewPropertiesContext } from "./TrinoParser.js"; +import { DropViewContext } from "./TrinoParser.js"; +import { RenameViewContext } from "./TrinoParser.js"; +import { SetViewAuthorizationContext } from "./TrinoParser.js"; +import { CallContext } from "./TrinoParser.js"; +import { CreateFunctionContext } from "./TrinoParser.js"; +import { DropFunctionContext } from "./TrinoParser.js"; +import { CreateRoleContext } from "./TrinoParser.js"; +import { DropRoleContext } from "./TrinoParser.js"; +import { GrantRolesContext } from "./TrinoParser.js"; +import { RevokeRolesContext } from "./TrinoParser.js"; +import { SetRoleContext } from "./TrinoParser.js"; +import { GrantContext } from "./TrinoParser.js"; +import { DenyContext } from "./TrinoParser.js"; +import { RevokeContext } from "./TrinoParser.js"; +import { ShowGrantsContext } from "./TrinoParser.js"; +import { ExplainContext } from "./TrinoParser.js"; +import { ExplainAnalyzeContext } from "./TrinoParser.js"; +import { ShowCreateTableContext } from "./TrinoParser.js"; +import { ShowCreateSchemaContext } from "./TrinoParser.js"; +import { ShowCreateViewContext } from "./TrinoParser.js"; +import { ShowCreateMaterializedViewContext } from "./TrinoParser.js"; +import { ShowTablesContext } from "./TrinoParser.js"; +import { ShowSchemasContext } from "./TrinoParser.js"; +import { ShowCatalogsContext } from "./TrinoParser.js"; +import { ShowColumnsContext } from "./TrinoParser.js"; +import { ShowStatsContext } from "./TrinoParser.js"; +import { ShowStatsForQueryContext } from "./TrinoParser.js"; +import { ShowRolesContext } from "./TrinoParser.js"; +import { ShowRoleGrantsContext } from "./TrinoParser.js"; +import { ShowFunctionsContext } from "./TrinoParser.js"; +import { ShowSessionContext } from "./TrinoParser.js"; +import { SetSessionAuthorizationContext } from "./TrinoParser.js"; +import { ResetSessionAuthorizationContext } from "./TrinoParser.js"; +import { SetSessionContext } from "./TrinoParser.js"; +import { ResetSessionContext } from "./TrinoParser.js"; +import { StartTransactionContext } from "./TrinoParser.js"; +import { CommitContext } from "./TrinoParser.js"; +import { RollbackContext } from "./TrinoParser.js"; +import { PrepareContext } from "./TrinoParser.js"; +import { DeallocateContext } from "./TrinoParser.js"; +import { ExecuteContext } from "./TrinoParser.js"; +import { ExecuteImmediateContext } from "./TrinoParser.js"; +import { DescribeInputContext } from "./TrinoParser.js"; +import { DescribeOutputContext } from "./TrinoParser.js"; +import { SetPathContext } from "./TrinoParser.js"; +import { SetTimeZoneContext } from "./TrinoParser.js"; +import { UpdateContext } from "./TrinoParser.js"; +import { MergeContext } from "./TrinoParser.js"; +import { RootQueryContext } from "./TrinoParser.js"; +import { WithFunctionContext } from "./TrinoParser.js"; +import { QueryContext } from "./TrinoParser.js"; +import { WithContext } from "./TrinoParser.js"; +import { TableElementContext } from "./TrinoParser.js"; +import { ColumnDefinitionContext } from "./TrinoParser.js"; +import { LikeClauseContext } from "./TrinoParser.js"; +import { PropertiesContext } from "./TrinoParser.js"; +import { PropertyAssignmentsContext } from "./TrinoParser.js"; +import { PropertyContext } from "./TrinoParser.js"; +import { DefaultPropertyValueContext } from "./TrinoParser.js"; +import { NonDefaultPropertyValueContext } from "./TrinoParser.js"; +import { QueryNoWithContext } from "./TrinoParser.js"; +import { LimitRowCountContext } from "./TrinoParser.js"; +import { RowCountContext } from "./TrinoParser.js"; +import { QueryTermDefaultContext } from "./TrinoParser.js"; +import { SetOperationContext } from "./TrinoParser.js"; +import { QueryPrimaryDefaultContext } from "./TrinoParser.js"; +import { TableContext } from "./TrinoParser.js"; +import { InlineTableContext } from "./TrinoParser.js"; +import { SubqueryContext } from "./TrinoParser.js"; +import { SortItemContext } from "./TrinoParser.js"; +import { QuerySpecificationContext } from "./TrinoParser.js"; +import { GroupByContext } from "./TrinoParser.js"; +import { SingleGroupingSetContext } from "./TrinoParser.js"; +import { RollupContext } from "./TrinoParser.js"; +import { CubeContext } from "./TrinoParser.js"; +import { MultipleGroupingSetsContext } from "./TrinoParser.js"; +import { GroupingSetContext } from "./TrinoParser.js"; +import { WindowDefinitionContext } from "./TrinoParser.js"; +import { WindowSpecificationContext } from "./TrinoParser.js"; +import { NamedQueryContext } from "./TrinoParser.js"; +import { SetQuantifierContext } from "./TrinoParser.js"; +import { SelectSingleContext } from "./TrinoParser.js"; +import { SelectAllContext } from "./TrinoParser.js"; +import { RelationDefaultContext } from "./TrinoParser.js"; +import { JoinRelationContext } from "./TrinoParser.js"; +import { JoinTypeContext } from "./TrinoParser.js"; +import { JoinCriteriaContext } from "./TrinoParser.js"; +import { SampledRelationContext } from "./TrinoParser.js"; +import { SampleTypeContext } from "./TrinoParser.js"; +import { TrimsSpecificationContext } from "./TrinoParser.js"; +import { ListAggOverflowBehaviorContext } from "./TrinoParser.js"; +import { ListaggCountIndicationContext } from "./TrinoParser.js"; +import { PatternRecognitionContext } from "./TrinoParser.js"; +import { MeasureDefinitionContext } from "./TrinoParser.js"; +import { RowsPerMatchContext } from "./TrinoParser.js"; +import { EmptyMatchHandlingContext } from "./TrinoParser.js"; +import { SkipToContext } from "./TrinoParser.js"; +import { SubsetDefinitionContext } from "./TrinoParser.js"; +import { VariableDefinitionContext } from "./TrinoParser.js"; +import { AliasedRelationContext } from "./TrinoParser.js"; +import { ColumnAliasesContext } from "./TrinoParser.js"; +import { TableNameContext } from "./TrinoParser.js"; +import { SubqueryRelationContext } from "./TrinoParser.js"; +import { UnnestContext } from "./TrinoParser.js"; +import { LateralContext } from "./TrinoParser.js"; +import { TableFunctionInvocationContext } from "./TrinoParser.js"; +import { ParenthesizedRelationContext } from "./TrinoParser.js"; +import { TableFunctionCallContext } from "./TrinoParser.js"; +import { TableFunctionArgumentContext } from "./TrinoParser.js"; +import { TableArgumentContext } from "./TrinoParser.js"; +import { TableArgumentTableContext } from "./TrinoParser.js"; +import { TableArgumentQueryContext } from "./TrinoParser.js"; +import { DescriptorArgumentContext } from "./TrinoParser.js"; +import { DescriptorFieldContext } from "./TrinoParser.js"; +import { CopartitionTablesContext } from "./TrinoParser.js"; +import { ExpressionContext } from "./TrinoParser.js"; +import { LogicalNotContext } from "./TrinoParser.js"; +import { PredicatedContext } from "./TrinoParser.js"; +import { OrContext } from "./TrinoParser.js"; +import { AndContext } from "./TrinoParser.js"; +import { ComparisonContext } from "./TrinoParser.js"; +import { QuantifiedComparisonContext } from "./TrinoParser.js"; +import { BetweenContext } from "./TrinoParser.js"; +import { InListContext } from "./TrinoParser.js"; +import { InSubqueryContext } from "./TrinoParser.js"; +import { LikeContext } from "./TrinoParser.js"; +import { NullPredicateContext } from "./TrinoParser.js"; +import { DistinctFromContext } from "./TrinoParser.js"; +import { ValueExpressionDefaultContext } from "./TrinoParser.js"; +import { ConcatenationContext } from "./TrinoParser.js"; +import { ArithmeticBinaryContext } from "./TrinoParser.js"; +import { ArithmeticUnaryContext } from "./TrinoParser.js"; +import { AtTimeZoneContext } from "./TrinoParser.js"; +import { DereferenceContext } from "./TrinoParser.js"; +import { TypeConstructorContext } from "./TrinoParser.js"; +import { JsonValueContext } from "./TrinoParser.js"; +import { SpecialDateTimeFunctionContext } from "./TrinoParser.js"; +import { SubstringContext } from "./TrinoParser.js"; +import { CastContext } from "./TrinoParser.js"; +import { LambdaContext } from "./TrinoParser.js"; +import { ParenthesizedExpressionContext } from "./TrinoParser.js"; +import { TrimContext } from "./TrinoParser.js"; +import { ParameterContext } from "./TrinoParser.js"; +import { NormalizeContext } from "./TrinoParser.js"; +import { JsonObjectContext } from "./TrinoParser.js"; +import { IntervalLiteralContext } from "./TrinoParser.js"; +import { NumericLiteralContext } from "./TrinoParser.js"; +import { BooleanLiteralContext } from "./TrinoParser.js"; +import { JsonArrayContext } from "./TrinoParser.js"; +import { SimpleCaseContext } from "./TrinoParser.js"; +import { ColumnReferenceContext } from "./TrinoParser.js"; +import { NullLiteralContext } from "./TrinoParser.js"; +import { RowConstructorContext } from "./TrinoParser.js"; +import { SubscriptContext } from "./TrinoParser.js"; +import { JsonExistsContext } from "./TrinoParser.js"; +import { CurrentPathContext } from "./TrinoParser.js"; +import { SubqueryExpressionContext } from "./TrinoParser.js"; +import { BinaryLiteralContext } from "./TrinoParser.js"; +import { CurrentUserContext } from "./TrinoParser.js"; +import { JsonQueryContext } from "./TrinoParser.js"; +import { MeasureContext } from "./TrinoParser.js"; +import { ExtractContext } from "./TrinoParser.js"; +import { StringLiteralContext } from "./TrinoParser.js"; +import { ArrayConstructorContext } from "./TrinoParser.js"; +import { FunctionCallContext } from "./TrinoParser.js"; +import { CurrentSchemaContext } from "./TrinoParser.js"; +import { ExistsContext } from "./TrinoParser.js"; +import { PositionContext } from "./TrinoParser.js"; +import { ListaggContext } from "./TrinoParser.js"; +import { SearchedCaseContext } from "./TrinoParser.js"; +import { CurrentCatalogContext } from "./TrinoParser.js"; +import { GroupingOperationContext } from "./TrinoParser.js"; +import { JsonPathInvocationContext } from "./TrinoParser.js"; +import { JsonValueExpressionContext } from "./TrinoParser.js"; +import { JsonRepresentationContext } from "./TrinoParser.js"; +import { JsonArgumentContext } from "./TrinoParser.js"; +import { JsonExistsErrorBehaviorContext } from "./TrinoParser.js"; +import { JsonValueBehaviorContext } from "./TrinoParser.js"; +import { JsonQueryWrapperBehaviorContext } from "./TrinoParser.js"; +import { JsonQueryBehaviorContext } from "./TrinoParser.js"; +import { JsonObjectMemberContext } from "./TrinoParser.js"; +import { ProcessingModeContext } from "./TrinoParser.js"; +import { NullTreatmentContext } from "./TrinoParser.js"; +import { BasicStringLiteralContext } from "./TrinoParser.js"; +import { UnicodeStringLiteralContext } from "./TrinoParser.js"; +import { TimeZoneIntervalContext } from "./TrinoParser.js"; +import { TimeZoneStringContext } from "./TrinoParser.js"; +import { ComparisonOperatorContext } from "./TrinoParser.js"; +import { ComparisonQuantifierContext } from "./TrinoParser.js"; +import { BooleanValueContext } from "./TrinoParser.js"; +import { IntervalContext } from "./TrinoParser.js"; +import { IntervalFieldContext } from "./TrinoParser.js"; +import { NormalFormContext } from "./TrinoParser.js"; +import { RowTypeContext } from "./TrinoParser.js"; +import { IntervalTypeContext } from "./TrinoParser.js"; +import { ArrayTypeContext } from "./TrinoParser.js"; +import { DoublePrecisionTypeContext } from "./TrinoParser.js"; +import { LegacyArrayTypeContext } from "./TrinoParser.js"; +import { GenericTypeContext } from "./TrinoParser.js"; +import { DateTimeTypeContext } from "./TrinoParser.js"; +import { LegacyMapTypeContext } from "./TrinoParser.js"; +import { RowFieldContext } from "./TrinoParser.js"; +import { TypeParameterContext } from "./TrinoParser.js"; +import { WhenClauseContext } from "./TrinoParser.js"; +import { FilterContext } from "./TrinoParser.js"; +import { MergeUpdateContext } from "./TrinoParser.js"; +import { MergeDeleteContext } from "./TrinoParser.js"; +import { MergeInsertContext } from "./TrinoParser.js"; +import { OverContext } from "./TrinoParser.js"; +import { WindowFrameContext } from "./TrinoParser.js"; +import { FrameExtentContext } from "./TrinoParser.js"; +import { UnboundedFrameContext } from "./TrinoParser.js"; +import { CurrentRowBoundContext } from "./TrinoParser.js"; +import { BoundedFrameContext } from "./TrinoParser.js"; +import { QuantifiedPrimaryContext } from "./TrinoParser.js"; +import { PatternConcatenationContext } from "./TrinoParser.js"; +import { PatternAlternationContext } from "./TrinoParser.js"; +import { PatternVariableContext } from "./TrinoParser.js"; +import { EmptyPatternContext } from "./TrinoParser.js"; +import { PatternPermutationContext } from "./TrinoParser.js"; +import { GroupedPatternContext } from "./TrinoParser.js"; +import { PartitionStartAnchorContext } from "./TrinoParser.js"; +import { PartitionEndAnchorContext } from "./TrinoParser.js"; +import { ExcludedPatternContext } from "./TrinoParser.js"; +import { ZeroOrMoreQuantifierContext } from "./TrinoParser.js"; +import { OneOrMoreQuantifierContext } from "./TrinoParser.js"; +import { ZeroOrOneQuantifierContext } from "./TrinoParser.js"; +import { RangeQuantifierContext } from "./TrinoParser.js"; +import { UpdateAssignmentContext } from "./TrinoParser.js"; +import { ExplainFormatContext } from "./TrinoParser.js"; +import { ExplainTypeContext } from "./TrinoParser.js"; +import { IsolationLevelContext } from "./TrinoParser.js"; +import { TransactionAccessModeContext } from "./TrinoParser.js"; +import { ReadUncommittedContext } from "./TrinoParser.js"; +import { ReadCommittedContext } from "./TrinoParser.js"; +import { RepeatableReadContext } from "./TrinoParser.js"; +import { SerializableContext } from "./TrinoParser.js"; +import { PositionalArgumentContext } from "./TrinoParser.js"; +import { NamedArgumentContext } from "./TrinoParser.js"; +import { QualifiedArgumentContext } from "./TrinoParser.js"; +import { UnqualifiedArgumentContext } from "./TrinoParser.js"; +import { PathSpecificationContext } from "./TrinoParser.js"; +import { FunctionSpecificationContext } from "./TrinoParser.js"; +import { FunctionDeclarationContext } from "./TrinoParser.js"; +import { ParameterDeclarationContext } from "./TrinoParser.js"; +import { ReturnsClauseContext } from "./TrinoParser.js"; +import { LanguageCharacteristicContext } from "./TrinoParser.js"; +import { DeterministicCharacteristicContext } from "./TrinoParser.js"; +import { ReturnsNullOnNullInputCharacteristicContext } from "./TrinoParser.js"; +import { CalledOnNullInputCharacteristicContext } from "./TrinoParser.js"; +import { SecurityCharacteristicContext } from "./TrinoParser.js"; +import { CommentCharacteristicContext } from "./TrinoParser.js"; +import { ReturnStatementContext } from "./TrinoParser.js"; +import { AssignmentStatementContext } from "./TrinoParser.js"; +import { SimpleCaseStatementContext } from "./TrinoParser.js"; +import { SearchedCaseStatementContext } from "./TrinoParser.js"; +import { IfStatementContext } from "./TrinoParser.js"; +import { IterateStatementContext } from "./TrinoParser.js"; +import { LeaveStatementContext } from "./TrinoParser.js"; +import { CompoundStatementContext } from "./TrinoParser.js"; +import { LoopStatementContext } from "./TrinoParser.js"; +import { WhileStatementContext } from "./TrinoParser.js"; +import { RepeatStatementContext } from "./TrinoParser.js"; +import { CaseStatementWhenClauseContext } from "./TrinoParser.js"; +import { ElseIfClauseContext } from "./TrinoParser.js"; +import { ElseClauseContext } from "./TrinoParser.js"; +import { VariableDeclarationContext } from "./TrinoParser.js"; +import { SqlStatementListContext } from "./TrinoParser.js"; +import { PrivilegeContext } from "./TrinoParser.js"; +import { QualifiedNameContext } from "./TrinoParser.js"; +import { QueryPeriodContext } from "./TrinoParser.js"; +import { RangeTypeContext } from "./TrinoParser.js"; +import { SpecifiedPrincipalContext } from "./TrinoParser.js"; +import { CurrentUserGrantorContext } from "./TrinoParser.js"; +import { CurrentRoleGrantorContext } from "./TrinoParser.js"; +import { UnspecifiedPrincipalContext } from "./TrinoParser.js"; +import { UserPrincipalContext } from "./TrinoParser.js"; +import { RolePrincipalContext } from "./TrinoParser.js"; +import { RolesContext } from "./TrinoParser.js"; +import { UnquotedIdentifierContext } from "./TrinoParser.js"; +import { QuotedIdentifierContext } from "./TrinoParser.js"; +import { BackQuotedIdentifierContext } from "./TrinoParser.js"; +import { DigitIdentifierContext } from "./TrinoParser.js"; +import { DecimalLiteralContext } from "./TrinoParser.js"; +import { DoubleLiteralContext } from "./TrinoParser.js"; +import { IntegerLiteralContext } from "./TrinoParser.js"; +import { IdentifierUserContext } from "./TrinoParser.js"; +import { StringUserContext } from "./TrinoParser.js"; +import { NonReservedContext } from "./TrinoParser.js"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `TrinoParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export class TrinoParserVisitor extends AbstractParseTreeVisitor { + /** + * Visit a parse tree produced by `TrinoParser.parse`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParse?: (ctx: ParseContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.statements`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatements?: (ctx: StatementsContext) => Result; + /** + * Visit a parse tree produced by the `statementDefault` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatementDefault?: (ctx: StatementDefaultContext) => Result; + /** + * Visit a parse tree produced by the `use` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUse?: (ctx: UseContext) => Result; + /** + * Visit a parse tree produced by the `createCatalog` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateCatalog?: (ctx: CreateCatalogContext) => Result; + /** + * Visit a parse tree produced by the `dropCatalog` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropCatalog?: (ctx: DropCatalogContext) => Result; + /** + * Visit a parse tree produced by the `createSchema` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateSchema?: (ctx: CreateSchemaContext) => Result; + /** + * Visit a parse tree produced by the `dropSchema` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropSchema?: (ctx: DropSchemaContext) => Result; + /** + * Visit a parse tree produced by the `renameSchema` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameSchema?: (ctx: RenameSchemaContext) => Result; + /** + * Visit a parse tree produced by the `setSchemaAuthorization` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetSchemaAuthorization?: (ctx: SetSchemaAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `createTableAsSelect` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateTableAsSelect?: (ctx: CreateTableAsSelectContext) => Result; + /** + * Visit a parse tree produced by the `createTable` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateTable?: (ctx: CreateTableContext) => Result; + /** + * Visit a parse tree produced by the `dropTable` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropTable?: (ctx: DropTableContext) => Result; + /** + * Visit a parse tree produced by the `insertInto` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInsertInto?: (ctx: InsertIntoContext) => Result; + /** + * Visit a parse tree produced by the `delete` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDelete?: (ctx: DeleteContext) => Result; + /** + * Visit a parse tree produced by the `truncateTable` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTruncateTable?: (ctx: TruncateTableContext) => Result; + /** + * Visit a parse tree produced by the `commentTable` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentTable?: (ctx: CommentTableContext) => Result; + /** + * Visit a parse tree produced by the `commentView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentView?: (ctx: CommentViewContext) => Result; + /** + * Visit a parse tree produced by the `commentColumn` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentColumn?: (ctx: CommentColumnContext) => Result; + /** + * Visit a parse tree produced by the `renameTable` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameTable?: (ctx: RenameTableContext) => Result; + /** + * Visit a parse tree produced by the `addColumn` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAddColumn?: (ctx: AddColumnContext) => Result; + /** + * Visit a parse tree produced by the `renameColumn` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameColumn?: (ctx: RenameColumnContext) => Result; + /** + * Visit a parse tree produced by the `dropColumn` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropColumn?: (ctx: DropColumnContext) => Result; + /** + * Visit a parse tree produced by the `setColumnType` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetColumnType?: (ctx: SetColumnTypeContext) => Result; + /** + * Visit a parse tree produced by the `setTableAuthorization` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetTableAuthorization?: (ctx: SetTableAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `setTableProperties` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetTableProperties?: (ctx: SetTablePropertiesContext) => Result; + /** + * Visit a parse tree produced by the `tableExecute` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableExecute?: (ctx: TableExecuteContext) => Result; + /** + * Visit a parse tree produced by the `analyze` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAnalyze?: (ctx: AnalyzeContext) => Result; + /** + * Visit a parse tree produced by the `createMaterializedView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateMaterializedView?: (ctx: CreateMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `createView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateView?: (ctx: CreateViewContext) => Result; + /** + * Visit a parse tree produced by the `refreshMaterializedView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRefreshMaterializedView?: (ctx: RefreshMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `dropMaterializedView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropMaterializedView?: (ctx: DropMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `renameMaterializedView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameMaterializedView?: (ctx: RenameMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `setMaterializedViewProperties` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetMaterializedViewProperties?: (ctx: SetMaterializedViewPropertiesContext) => Result; + /** + * Visit a parse tree produced by the `dropView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropView?: (ctx: DropViewContext) => Result; + /** + * Visit a parse tree produced by the `renameView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRenameView?: (ctx: RenameViewContext) => Result; + /** + * Visit a parse tree produced by the `setViewAuthorization` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetViewAuthorization?: (ctx: SetViewAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `call` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCall?: (ctx: CallContext) => Result; + /** + * Visit a parse tree produced by the `createFunction` + * labeled alternative in `TrinoParser.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 `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropFunction?: (ctx: DropFunctionContext) => Result; + /** + * Visit a parse tree produced by the `createRole` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateRole?: (ctx: CreateRoleContext) => Result; + /** + * Visit a parse tree produced by the `dropRole` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDropRole?: (ctx: DropRoleContext) => Result; + /** + * Visit a parse tree produced by the `grantRoles` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGrantRoles?: (ctx: GrantRolesContext) => Result; + /** + * Visit a parse tree produced by the `revokeRoles` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRevokeRoles?: (ctx: RevokeRolesContext) => Result; + /** + * Visit a parse tree produced by the `setRole` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetRole?: (ctx: SetRoleContext) => Result; + /** + * Visit a parse tree produced by the `grant` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGrant?: (ctx: GrantContext) => Result; + /** + * Visit a parse tree produced by the `deny` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDeny?: (ctx: DenyContext) => Result; + /** + * Visit a parse tree produced by the `revoke` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRevoke?: (ctx: RevokeContext) => Result; + /** + * Visit a parse tree produced by the `showGrants` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowGrants?: (ctx: ShowGrantsContext) => Result; + /** + * Visit a parse tree produced by the `explain` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplain?: (ctx: ExplainContext) => Result; + /** + * Visit a parse tree produced by the `explainAnalyze` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplainAnalyze?: (ctx: ExplainAnalyzeContext) => Result; + /** + * Visit a parse tree produced by the `showCreateTable` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateTable?: (ctx: ShowCreateTableContext) => Result; + /** + * Visit a parse tree produced by the `showCreateSchema` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateSchema?: (ctx: ShowCreateSchemaContext) => Result; + /** + * Visit a parse tree produced by the `showCreateView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateView?: (ctx: ShowCreateViewContext) => Result; + /** + * Visit a parse tree produced by the `showCreateMaterializedView` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCreateMaterializedView?: (ctx: ShowCreateMaterializedViewContext) => Result; + /** + * Visit a parse tree produced by the `showTables` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowTables?: (ctx: ShowTablesContext) => Result; + /** + * Visit a parse tree produced by the `showSchemas` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowSchemas?: (ctx: ShowSchemasContext) => Result; + /** + * Visit a parse tree produced by the `showCatalogs` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowCatalogs?: (ctx: ShowCatalogsContext) => Result; + /** + * Visit a parse tree produced by the `showColumns` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowColumns?: (ctx: ShowColumnsContext) => Result; + /** + * Visit a parse tree produced by the `showStats` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowStats?: (ctx: ShowStatsContext) => Result; + /** + * Visit a parse tree produced by the `showStatsForQuery` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowStatsForQuery?: (ctx: ShowStatsForQueryContext) => Result; + /** + * Visit a parse tree produced by the `showRoles` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowRoles?: (ctx: ShowRolesContext) => Result; + /** + * Visit a parse tree produced by the `showRoleGrants` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowRoleGrants?: (ctx: ShowRoleGrantsContext) => Result; + /** + * Visit a parse tree produced by the `showFunctions` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowFunctions?: (ctx: ShowFunctionsContext) => Result; + /** + * Visit a parse tree produced by the `showSession` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitShowSession?: (ctx: ShowSessionContext) => Result; + /** + * Visit a parse tree produced by the `setSessionAuthorization` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetSessionAuthorization?: (ctx: SetSessionAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `resetSessionAuthorization` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitResetSessionAuthorization?: (ctx: ResetSessionAuthorizationContext) => Result; + /** + * Visit a parse tree produced by the `setSession` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetSession?: (ctx: SetSessionContext) => Result; + /** + * Visit a parse tree produced by the `resetSession` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitResetSession?: (ctx: ResetSessionContext) => Result; + /** + * Visit a parse tree produced by the `startTransaction` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStartTransaction?: (ctx: StartTransactionContext) => Result; + /** + * Visit a parse tree produced by the `commit` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommit?: (ctx: CommitContext) => Result; + /** + * Visit a parse tree produced by the `rollback` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRollback?: (ctx: RollbackContext) => Result; + /** + * Visit a parse tree produced by the `prepare` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPrepare?: (ctx: PrepareContext) => Result; + /** + * Visit a parse tree produced by the `deallocate` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDeallocate?: (ctx: DeallocateContext) => Result; + /** + * Visit a parse tree produced by the `execute` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExecute?: (ctx: ExecuteContext) => Result; + /** + * Visit a parse tree produced by the `executeImmediate` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExecuteImmediate?: (ctx: ExecuteImmediateContext) => Result; + /** + * Visit a parse tree produced by the `describeInput` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeInput?: (ctx: DescribeInputContext) => Result; + /** + * Visit a parse tree produced by the `describeOutput` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeOutput?: (ctx: DescribeOutputContext) => Result; + /** + * Visit a parse tree produced by the `setPath` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetPath?: (ctx: SetPathContext) => Result; + /** + * Visit a parse tree produced by the `setTimeZone` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetTimeZone?: (ctx: SetTimeZoneContext) => Result; + /** + * Visit a parse tree produced by the `update` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUpdate?: (ctx: UpdateContext) => Result; + /** + * Visit a parse tree produced by the `merge` + * labeled alternative in `TrinoParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMerge?: (ctx: MergeContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.rootQuery`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRootQuery?: (ctx: RootQueryContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.withFunction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWithFunction?: (ctx: WithFunctionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.query`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuery?: (ctx: QueryContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.with`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWith?: (ctx: WithContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.tableElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableElement?: (ctx: TableElementContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.columnDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnDefinition?: (ctx: ColumnDefinitionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.likeClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLikeClause?: (ctx: LikeClauseContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.properties`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProperties?: (ctx: PropertiesContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.propertyAssignments`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPropertyAssignments?: (ctx: PropertyAssignmentsContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.property`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProperty?: (ctx: PropertyContext) => Result; + /** + * Visit a parse tree produced by the `defaultPropertyValue` + * labeled alternative in `TrinoParser.propertyValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDefaultPropertyValue?: (ctx: DefaultPropertyValueContext) => Result; + /** + * Visit a parse tree produced by the `nonDefaultPropertyValue` + * labeled alternative in `TrinoParser.propertyValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNonDefaultPropertyValue?: (ctx: NonDefaultPropertyValueContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.queryNoWith`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryNoWith?: (ctx: QueryNoWithContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.limitRowCount`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLimitRowCount?: (ctx: LimitRowCountContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.rowCount`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowCount?: (ctx: RowCountContext) => Result; + /** + * Visit a parse tree produced by the `queryTermDefault` + * labeled alternative in `TrinoParser.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 `TrinoParser.queryTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetOperation?: (ctx: SetOperationContext) => Result; + /** + * Visit a parse tree produced by the `queryPrimaryDefault` + * labeled alternative in `TrinoParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryPrimaryDefault?: (ctx: QueryPrimaryDefaultContext) => Result; + /** + * Visit a parse tree produced by the `table` + * labeled alternative in `TrinoParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTable?: (ctx: TableContext) => Result; + /** + * Visit a parse tree produced by the `inlineTable` + * labeled alternative in `TrinoParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInlineTable?: (ctx: InlineTableContext) => Result; + /** + * Visit a parse tree produced by the `subquery` + * labeled alternative in `TrinoParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubquery?: (ctx: SubqueryContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.sortItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSortItem?: (ctx: SortItemContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.querySpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuerySpecification?: (ctx: QuerySpecificationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.groupBy`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupBy?: (ctx: GroupByContext) => Result; + /** + * Visit a parse tree produced by the `singleGroupingSet` + * labeled alternative in `TrinoParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleGroupingSet?: (ctx: SingleGroupingSetContext) => Result; + /** + * Visit a parse tree produced by the `rollup` + * labeled alternative in `TrinoParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRollup?: (ctx: RollupContext) => Result; + /** + * Visit a parse tree produced by the `cube` + * labeled alternative in `TrinoParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCube?: (ctx: CubeContext) => Result; + /** + * Visit a parse tree produced by the `multipleGroupingSets` + * labeled alternative in `TrinoParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultipleGroupingSets?: (ctx: MultipleGroupingSetsContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.groupingSet`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingSet?: (ctx: GroupingSetContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.windowDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowDefinition?: (ctx: WindowDefinitionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.windowSpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowSpecification?: (ctx: WindowSpecificationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.namedQuery`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedQuery?: (ctx: NamedQueryContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.setQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetQuantifier?: (ctx: SetQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `selectSingle` + * labeled alternative in `TrinoParser.selectItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectSingle?: (ctx: SelectSingleContext) => Result; + /** + * Visit a parse tree produced by the `selectAll` + * labeled alternative in `TrinoParser.selectItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectAll?: (ctx: SelectAllContext) => Result; + /** + * Visit a parse tree produced by the `relationDefault` + * labeled alternative in `TrinoParser.relation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelationDefault?: (ctx: RelationDefaultContext) => Result; + /** + * Visit a parse tree produced by the `joinRelation` + * labeled alternative in `TrinoParser.relation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinRelation?: (ctx: JoinRelationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.joinType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinType?: (ctx: JoinTypeContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.joinCriteria`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinCriteria?: (ctx: JoinCriteriaContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.sampledRelation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSampledRelation?: (ctx: SampledRelationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.sampleType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSampleType?: (ctx: SampleTypeContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.trimsSpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTrimsSpecification?: (ctx: TrimsSpecificationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.listAggOverflowBehavior`. + * @param ctx the parse tree + * @return the visitor result + */ + visitListAggOverflowBehavior?: (ctx: ListAggOverflowBehaviorContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.listaggCountIndication`. + * @param ctx the parse tree + * @return the visitor result + */ + visitListaggCountIndication?: (ctx: ListaggCountIndicationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.patternRecognition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternRecognition?: (ctx: PatternRecognitionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.measureDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMeasureDefinition?: (ctx: MeasureDefinitionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.rowsPerMatch`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowsPerMatch?: (ctx: RowsPerMatchContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.emptyMatchHandling`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEmptyMatchHandling?: (ctx: EmptyMatchHandlingContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.skipTo`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSkipTo?: (ctx: SkipToContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.subsetDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubsetDefinition?: (ctx: SubsetDefinitionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.variableDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVariableDefinition?: (ctx: VariableDefinitionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.aliasedRelation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAliasedRelation?: (ctx: AliasedRelationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.columnAliases`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnAliases?: (ctx: ColumnAliasesContext) => Result; + /** + * Visit a parse tree produced by the `tableName` + * labeled alternative in `TrinoParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableName?: (ctx: TableNameContext) => Result; + /** + * Visit a parse tree produced by the `subqueryRelation` + * labeled alternative in `TrinoParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubqueryRelation?: (ctx: SubqueryRelationContext) => Result; + /** + * Visit a parse tree produced by the `unnest` + * labeled alternative in `TrinoParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnnest?: (ctx: UnnestContext) => Result; + /** + * Visit a parse tree produced by the `lateral` + * labeled alternative in `TrinoParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLateral?: (ctx: LateralContext) => Result; + /** + * Visit a parse tree produced by the `tableFunctionInvocation` + * labeled alternative in `TrinoParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableFunctionInvocation?: (ctx: TableFunctionInvocationContext) => Result; + /** + * Visit a parse tree produced by the `parenthesizedRelation` + * labeled alternative in `TrinoParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParenthesizedRelation?: (ctx: ParenthesizedRelationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.tableFunctionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableFunctionCall?: (ctx: TableFunctionCallContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.tableFunctionArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableFunctionArgument?: (ctx: TableFunctionArgumentContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.tableArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableArgument?: (ctx: TableArgumentContext) => Result; + /** + * Visit a parse tree produced by the `tableArgumentTable` + * labeled alternative in `TrinoParser.tableArgumentRelation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableArgumentTable?: (ctx: TableArgumentTableContext) => Result; + /** + * Visit a parse tree produced by the `tableArgumentQuery` + * labeled alternative in `TrinoParser.tableArgumentRelation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableArgumentQuery?: (ctx: TableArgumentQueryContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.descriptorArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescriptorArgument?: (ctx: DescriptorArgumentContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.descriptorField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescriptorField?: (ctx: DescriptorFieldContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.copartitionTables`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCopartitionTables?: (ctx: CopartitionTablesContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpression?: (ctx: ExpressionContext) => Result; + /** + * Visit a parse tree produced by the `logicalNot` + * labeled alternative in `TrinoParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLogicalNot?: (ctx: LogicalNotContext) => Result; + /** + * Visit a parse tree produced by the `predicated` + * labeled alternative in `TrinoParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPredicated?: (ctx: PredicatedContext) => Result; + /** + * Visit a parse tree produced by the `or` + * labeled alternative in `TrinoParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOr?: (ctx: OrContext) => Result; + /** + * Visit a parse tree produced by the `and` + * labeled alternative in `TrinoParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAnd?: (ctx: AndContext) => Result; + /** + * Visit a parse tree produced by the `comparison` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparison?: (ctx: ComparisonContext) => Result; + /** + * Visit a parse tree produced by the `quantifiedComparison` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuantifiedComparison?: (ctx: QuantifiedComparisonContext) => Result; + /** + * Visit a parse tree produced by the `between` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBetween?: (ctx: BetweenContext) => Result; + /** + * Visit a parse tree produced by the `inList` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInList?: (ctx: InListContext) => Result; + /** + * Visit a parse tree produced by the `inSubquery` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInSubquery?: (ctx: InSubqueryContext) => Result; + /** + * Visit a parse tree produced by the `like` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLike?: (ctx: LikeContext) => Result; + /** + * Visit a parse tree produced by the `nullPredicate` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullPredicate?: (ctx: NullPredicateContext) => Result; + /** + * Visit a parse tree produced by the `distinctFrom` + * labeled alternative in `TrinoParser.predicate_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDistinctFrom?: (ctx: DistinctFromContext) => Result; + /** + * Visit a parse tree produced by the `valueExpressionDefault` + * labeled alternative in `TrinoParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => Result; + /** + * Visit a parse tree produced by the `concatenation` + * labeled alternative in `TrinoParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConcatenation?: (ctx: ConcatenationContext) => Result; + /** + * Visit a parse tree produced by the `arithmeticBinary` + * labeled alternative in `TrinoParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArithmeticBinary?: (ctx: ArithmeticBinaryContext) => Result; + /** + * Visit a parse tree produced by the `arithmeticUnary` + * labeled alternative in `TrinoParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => Result; + /** + * Visit a parse tree produced by the `atTimeZone` + * labeled alternative in `TrinoParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAtTimeZone?: (ctx: AtTimeZoneContext) => Result; + /** + * Visit a parse tree produced by the `dereference` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDereference?: (ctx: DereferenceContext) => Result; + /** + * Visit a parse tree produced by the `typeConstructor` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTypeConstructor?: (ctx: TypeConstructorContext) => Result; + /** + * Visit a parse tree produced by the `jsonValue` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonValue?: (ctx: JsonValueContext) => Result; + /** + * Visit a parse tree produced by the `specialDateTimeFunction` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpecialDateTimeFunction?: (ctx: SpecialDateTimeFunctionContext) => Result; + /** + * Visit a parse tree produced by the `substring` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubstring?: (ctx: SubstringContext) => Result; + /** + * Visit a parse tree produced by the `cast` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCast?: (ctx: CastContext) => Result; + /** + * Visit a parse tree produced by the `lambda` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLambda?: (ctx: LambdaContext) => Result; + /** + * Visit a parse tree produced by the `parenthesizedExpression` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => Result; + /** + * Visit a parse tree produced by the `trim` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTrim?: (ctx: TrimContext) => Result; + /** + * Visit a parse tree produced by the `parameter` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParameter?: (ctx: ParameterContext) => Result; + /** + * Visit a parse tree produced by the `normalize` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNormalize?: (ctx: NormalizeContext) => Result; + /** + * Visit a parse tree produced by the `jsonObject` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonObject?: (ctx: JsonObjectContext) => Result; + /** + * Visit a parse tree produced by the `intervalLiteral` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalLiteral?: (ctx: IntervalLiteralContext) => Result; + /** + * Visit a parse tree produced by the `numericLiteral` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNumericLiteral?: (ctx: NumericLiteralContext) => Result; + /** + * Visit a parse tree produced by the `booleanLiteral` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanLiteral?: (ctx: BooleanLiteralContext) => Result; + /** + * Visit a parse tree produced by the `jsonArray` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonArray?: (ctx: JsonArrayContext) => Result; + /** + * Visit a parse tree produced by the `simpleCase` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSimpleCase?: (ctx: SimpleCaseContext) => Result; + /** + * Visit a parse tree produced by the `columnReference` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColumnReference?: (ctx: ColumnReferenceContext) => Result; + /** + * Visit a parse tree produced by the `nullLiteral` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullLiteral?: (ctx: NullLiteralContext) => Result; + /** + * Visit a parse tree produced by the `rowConstructor` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowConstructor?: (ctx: RowConstructorContext) => Result; + /** + * Visit a parse tree produced by the `subscript` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubscript?: (ctx: SubscriptContext) => Result; + /** + * Visit a parse tree produced by the `jsonExists` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonExists?: (ctx: JsonExistsContext) => Result; + /** + * Visit a parse tree produced by the `currentPath` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentPath?: (ctx: CurrentPathContext) => Result; + /** + * Visit a parse tree produced by the `subqueryExpression` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSubqueryExpression?: (ctx: SubqueryExpressionContext) => Result; + /** + * Visit a parse tree produced by the `binaryLiteral` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinaryLiteral?: (ctx: BinaryLiteralContext) => Result; + /** + * Visit a parse tree produced by the `currentUser` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentUser?: (ctx: CurrentUserContext) => Result; + /** + * Visit a parse tree produced by the `jsonQuery` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonQuery?: (ctx: JsonQueryContext) => Result; + /** + * Visit a parse tree produced by the `measure` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMeasure?: (ctx: MeasureContext) => Result; + /** + * Visit a parse tree produced by the `extract` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExtract?: (ctx: ExtractContext) => Result; + /** + * Visit a parse tree produced by the `stringLiteral` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringLiteral?: (ctx: StringLiteralContext) => Result; + /** + * Visit a parse tree produced by the `arrayConstructor` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArrayConstructor?: (ctx: ArrayConstructorContext) => Result; + /** + * Visit a parse tree produced by the `functionCall` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionCall?: (ctx: FunctionCallContext) => Result; + /** + * Visit a parse tree produced by the `currentSchema` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentSchema?: (ctx: CurrentSchemaContext) => Result; + /** + * Visit a parse tree produced by the `exists` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExists?: (ctx: ExistsContext) => Result; + /** + * Visit a parse tree produced by the `position` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPosition?: (ctx: PositionContext) => Result; + /** + * Visit a parse tree produced by the `listagg` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitListagg?: (ctx: ListaggContext) => Result; + /** + * Visit a parse tree produced by the `searchedCase` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchedCase?: (ctx: SearchedCaseContext) => Result; + /** + * Visit a parse tree produced by the `currentCatalog` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentCatalog?: (ctx: CurrentCatalogContext) => Result; + /** + * Visit a parse tree produced by the `groupingOperation` + * labeled alternative in `TrinoParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingOperation?: (ctx: GroupingOperationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonPathInvocation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonPathInvocation?: (ctx: JsonPathInvocationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonValueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonValueExpression?: (ctx: JsonValueExpressionContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonRepresentation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonRepresentation?: (ctx: JsonRepresentationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonArgument?: (ctx: JsonArgumentContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonExistsErrorBehavior`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonExistsErrorBehavior?: (ctx: JsonExistsErrorBehaviorContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonValueBehavior`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonValueBehavior?: (ctx: JsonValueBehaviorContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonQueryWrapperBehavior`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonQueryWrapperBehavior?: (ctx: JsonQueryWrapperBehaviorContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonQueryBehavior`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonQueryBehavior?: (ctx: JsonQueryBehaviorContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.jsonObjectMember`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJsonObjectMember?: (ctx: JsonObjectMemberContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.processingMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProcessingMode?: (ctx: ProcessingModeContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.nullTreatment`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNullTreatment?: (ctx: NullTreatmentContext) => Result; + /** + * Visit a parse tree produced by the `basicStringLiteral` + * labeled alternative in `TrinoParser.string_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBasicStringLiteral?: (ctx: BasicStringLiteralContext) => Result; + /** + * Visit a parse tree produced by the `unicodeStringLiteral` + * labeled alternative in `TrinoParser.string_`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnicodeStringLiteral?: (ctx: UnicodeStringLiteralContext) => Result; + /** + * Visit a parse tree produced by the `timeZoneInterval` + * labeled alternative in `TrinoParser.timeZoneSpecifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeZoneInterval?: (ctx: TimeZoneIntervalContext) => Result; + /** + * Visit a parse tree produced by the `timeZoneString` + * labeled alternative in `TrinoParser.timeZoneSpecifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeZoneString?: (ctx: TimeZoneStringContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.comparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonOperator?: (ctx: ComparisonOperatorContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.comparisonQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonQuantifier?: (ctx: ComparisonQuantifierContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.booleanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanValue?: (ctx: BooleanValueContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.interval`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInterval?: (ctx: IntervalContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.intervalField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalField?: (ctx: IntervalFieldContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.normalForm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNormalForm?: (ctx: NormalFormContext) => Result; + /** + * Visit a parse tree produced by the `rowType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowType?: (ctx: RowTypeContext) => Result; + /** + * Visit a parse tree produced by the `intervalType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalType?: (ctx: IntervalTypeContext) => Result; + /** + * Visit a parse tree produced by the `arrayType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArrayType?: (ctx: ArrayTypeContext) => Result; + /** + * Visit a parse tree produced by the `doublePrecisionType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDoublePrecisionType?: (ctx: DoublePrecisionTypeContext) => Result; + /** + * Visit a parse tree produced by the `legacyArrayType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLegacyArrayType?: (ctx: LegacyArrayTypeContext) => Result; + /** + * Visit a parse tree produced by the `genericType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGenericType?: (ctx: GenericTypeContext) => Result; + /** + * Visit a parse tree produced by the `dateTimeType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDateTimeType?: (ctx: DateTimeTypeContext) => Result; + /** + * Visit a parse tree produced by the `legacyMapType` + * labeled alternative in `TrinoParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLegacyMapType?: (ctx: LegacyMapTypeContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.rowField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowField?: (ctx: RowFieldContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.typeParameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTypeParameter?: (ctx: TypeParameterContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.whenClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWhenClause?: (ctx: WhenClauseContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.filter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFilter?: (ctx: FilterContext) => Result; + /** + * Visit a parse tree produced by the `mergeUpdate` + * labeled alternative in `TrinoParser.mergeCase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMergeUpdate?: (ctx: MergeUpdateContext) => Result; + /** + * Visit a parse tree produced by the `mergeDelete` + * labeled alternative in `TrinoParser.mergeCase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMergeDelete?: (ctx: MergeDeleteContext) => Result; + /** + * Visit a parse tree produced by the `mergeInsert` + * labeled alternative in `TrinoParser.mergeCase`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMergeInsert?: (ctx: MergeInsertContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.over`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOver?: (ctx: OverContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.windowFrame`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowFrame?: (ctx: WindowFrameContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.frameExtent`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFrameExtent?: (ctx: FrameExtentContext) => Result; + /** + * Visit a parse tree produced by the `unboundedFrame` + * labeled alternative in `TrinoParser.frameBound`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnboundedFrame?: (ctx: UnboundedFrameContext) => Result; + /** + * Visit a parse tree produced by the `currentRowBound` + * labeled alternative in `TrinoParser.frameBound`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentRowBound?: (ctx: CurrentRowBoundContext) => Result; + /** + * Visit a parse tree produced by the `boundedFrame` + * labeled alternative in `TrinoParser.frameBound`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBoundedFrame?: (ctx: BoundedFrameContext) => Result; + /** + * Visit a parse tree produced by the `quantifiedPrimary` + * labeled alternative in `TrinoParser.rowPattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuantifiedPrimary?: (ctx: QuantifiedPrimaryContext) => Result; + /** + * Visit a parse tree produced by the `patternConcatenation` + * labeled alternative in `TrinoParser.rowPattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternConcatenation?: (ctx: PatternConcatenationContext) => Result; + /** + * Visit a parse tree produced by the `patternAlternation` + * labeled alternative in `TrinoParser.rowPattern`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternAlternation?: (ctx: PatternAlternationContext) => Result; + /** + * Visit a parse tree produced by the `patternVariable` + * labeled alternative in `TrinoParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternVariable?: (ctx: PatternVariableContext) => Result; + /** + * Visit a parse tree produced by the `emptyPattern` + * labeled alternative in `TrinoParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEmptyPattern?: (ctx: EmptyPatternContext) => Result; + /** + * Visit a parse tree produced by the `patternPermutation` + * labeled alternative in `TrinoParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPatternPermutation?: (ctx: PatternPermutationContext) => Result; + /** + * Visit a parse tree produced by the `groupedPattern` + * labeled alternative in `TrinoParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupedPattern?: (ctx: GroupedPatternContext) => Result; + /** + * Visit a parse tree produced by the `partitionStartAnchor` + * labeled alternative in `TrinoParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionStartAnchor?: (ctx: PartitionStartAnchorContext) => Result; + /** + * Visit a parse tree produced by the `partitionEndAnchor` + * labeled alternative in `TrinoParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionEndAnchor?: (ctx: PartitionEndAnchorContext) => Result; + /** + * Visit a parse tree produced by the `excludedPattern` + * labeled alternative in `TrinoParser.patternPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExcludedPattern?: (ctx: ExcludedPatternContext) => Result; + /** + * Visit a parse tree produced by the `zeroOrMoreQuantifier` + * labeled alternative in `TrinoParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitZeroOrMoreQuantifier?: (ctx: ZeroOrMoreQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `oneOrMoreQuantifier` + * labeled alternative in `TrinoParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOneOrMoreQuantifier?: (ctx: OneOrMoreQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `zeroOrOneQuantifier` + * labeled alternative in `TrinoParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitZeroOrOneQuantifier?: (ctx: ZeroOrOneQuantifierContext) => Result; + /** + * Visit a parse tree produced by the `rangeQuantifier` + * labeled alternative in `TrinoParser.patternQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRangeQuantifier?: (ctx: RangeQuantifierContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.updateAssignment`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUpdateAssignment?: (ctx: UpdateAssignmentContext) => Result; + /** + * Visit a parse tree produced by the `explainFormat` + * labeled alternative in `TrinoParser.explainOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplainFormat?: (ctx: ExplainFormatContext) => Result; + /** + * Visit a parse tree produced by the `explainType` + * labeled alternative in `TrinoParser.explainOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExplainType?: (ctx: ExplainTypeContext) => Result; + /** + * Visit a parse tree produced by the `isolationLevel` + * labeled alternative in `TrinoParser.transactionMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIsolationLevel?: (ctx: IsolationLevelContext) => Result; + /** + * Visit a parse tree produced by the `transactionAccessMode` + * labeled alternative in `TrinoParser.transactionMode`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransactionAccessMode?: (ctx: TransactionAccessModeContext) => Result; + /** + * Visit a parse tree produced by the `readUncommitted` + * labeled alternative in `TrinoParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReadUncommitted?: (ctx: ReadUncommittedContext) => Result; + /** + * Visit a parse tree produced by the `readCommitted` + * labeled alternative in `TrinoParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReadCommitted?: (ctx: ReadCommittedContext) => Result; + /** + * Visit a parse tree produced by the `repeatableRead` + * labeled alternative in `TrinoParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRepeatableRead?: (ctx: RepeatableReadContext) => Result; + /** + * Visit a parse tree produced by the `serializable` + * labeled alternative in `TrinoParser.levelOfIsolation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSerializable?: (ctx: SerializableContext) => Result; + /** + * Visit a parse tree produced by the `positionalArgument` + * labeled alternative in `TrinoParser.callArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPositionalArgument?: (ctx: PositionalArgumentContext) => Result; + /** + * Visit a parse tree produced by the `namedArgument` + * labeled alternative in `TrinoParser.callArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedArgument?: (ctx: NamedArgumentContext) => Result; + /** + * Visit a parse tree produced by the `qualifiedArgument` + * labeled alternative in `TrinoParser.pathElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedArgument?: (ctx: QualifiedArgumentContext) => Result; + /** + * Visit a parse tree produced by the `unqualifiedArgument` + * labeled alternative in `TrinoParser.pathElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnqualifiedArgument?: (ctx: UnqualifiedArgumentContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.pathSpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPathSpecification?: (ctx: PathSpecificationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.functionSpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionSpecification?: (ctx: FunctionSpecificationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.functionDeclaration`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionDeclaration?: (ctx: FunctionDeclarationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.parameterDeclaration`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParameterDeclaration?: (ctx: ParameterDeclarationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.returnsClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReturnsClause?: (ctx: ReturnsClauseContext) => Result; + /** + * Visit a parse tree produced by the `languageCharacteristic` + * labeled alternative in `TrinoParser.routineCharacteristic`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLanguageCharacteristic?: (ctx: LanguageCharacteristicContext) => Result; + /** + * Visit a parse tree produced by the `deterministicCharacteristic` + * labeled alternative in `TrinoParser.routineCharacteristic`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDeterministicCharacteristic?: (ctx: DeterministicCharacteristicContext) => Result; + /** + * Visit a parse tree produced by the `returnsNullOnNullInputCharacteristic` + * labeled alternative in `TrinoParser.routineCharacteristic`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReturnsNullOnNullInputCharacteristic?: (ctx: ReturnsNullOnNullInputCharacteristicContext) => Result; + /** + * Visit a parse tree produced by the `calledOnNullInputCharacteristic` + * labeled alternative in `TrinoParser.routineCharacteristic`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCalledOnNullInputCharacteristic?: (ctx: CalledOnNullInputCharacteristicContext) => Result; + /** + * Visit a parse tree produced by the `securityCharacteristic` + * labeled alternative in `TrinoParser.routineCharacteristic`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSecurityCharacteristic?: (ctx: SecurityCharacteristicContext) => Result; + /** + * Visit a parse tree produced by the `commentCharacteristic` + * labeled alternative in `TrinoParser.routineCharacteristic`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentCharacteristic?: (ctx: CommentCharacteristicContext) => Result; + /** + * Visit a parse tree produced by the `returnStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReturnStatement?: (ctx: ReturnStatementContext) => Result; + /** + * Visit a parse tree produced by the `assignmentStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAssignmentStatement?: (ctx: AssignmentStatementContext) => Result; + /** + * Visit a parse tree produced by the `simpleCaseStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSimpleCaseStatement?: (ctx: SimpleCaseStatementContext) => Result; + /** + * Visit a parse tree produced by the `searchedCaseStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSearchedCaseStatement?: (ctx: SearchedCaseStatementContext) => Result; + /** + * Visit a parse tree produced by the `ifStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfStatement?: (ctx: IfStatementContext) => Result; + /** + * Visit a parse tree produced by the `iterateStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIterateStatement?: (ctx: IterateStatementContext) => Result; + /** + * Visit a parse tree produced by the `leaveStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLeaveStatement?: (ctx: LeaveStatementContext) => Result; + /** + * Visit a parse tree produced by the `compoundStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCompoundStatement?: (ctx: CompoundStatementContext) => Result; + /** + * Visit a parse tree produced by the `loopStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLoopStatement?: (ctx: LoopStatementContext) => Result; + /** + * Visit a parse tree produced by the `whileStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWhileStatement?: (ctx: WhileStatementContext) => Result; + /** + * Visit a parse tree produced by the `repeatStatement` + * labeled alternative in `TrinoParser.controlStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRepeatStatement?: (ctx: RepeatStatementContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.caseStatementWhenClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCaseStatementWhenClause?: (ctx: CaseStatementWhenClauseContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.elseIfClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitElseIfClause?: (ctx: ElseIfClauseContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.elseClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitElseClause?: (ctx: ElseClauseContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.variableDeclaration`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVariableDeclaration?: (ctx: VariableDeclarationContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.sqlStatementList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSqlStatementList?: (ctx: SqlStatementListContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.privilege`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPrivilege?: (ctx: PrivilegeContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.qualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedName?: (ctx: QualifiedNameContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.queryPeriod`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryPeriod?: (ctx: QueryPeriodContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.rangeType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRangeType?: (ctx: RangeTypeContext) => Result; + /** + * Visit a parse tree produced by the `specifiedPrincipal` + * labeled alternative in `TrinoParser.grantor`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSpecifiedPrincipal?: (ctx: SpecifiedPrincipalContext) => Result; + /** + * Visit a parse tree produced by the `currentUserGrantor` + * labeled alternative in `TrinoParser.grantor`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentUserGrantor?: (ctx: CurrentUserGrantorContext) => Result; + /** + * Visit a parse tree produced by the `currentRoleGrantor` + * labeled alternative in `TrinoParser.grantor`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCurrentRoleGrantor?: (ctx: CurrentRoleGrantorContext) => Result; + /** + * Visit a parse tree produced by the `unspecifiedPrincipal` + * labeled alternative in `TrinoParser.principal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnspecifiedPrincipal?: (ctx: UnspecifiedPrincipalContext) => Result; + /** + * Visit a parse tree produced by the `userPrincipal` + * labeled alternative in `TrinoParser.principal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUserPrincipal?: (ctx: UserPrincipalContext) => Result; + /** + * Visit a parse tree produced by the `rolePrincipal` + * labeled alternative in `TrinoParser.principal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRolePrincipal?: (ctx: RolePrincipalContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.roles`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRoles?: (ctx: RolesContext) => Result; + /** + * Visit a parse tree produced by the `unquotedIdentifier` + * labeled alternative in `TrinoParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnquotedIdentifier?: (ctx: UnquotedIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `quotedIdentifier` + * labeled alternative in `TrinoParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `backQuotedIdentifier` + * labeled alternative in `TrinoParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `digitIdentifier` + * labeled alternative in `TrinoParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDigitIdentifier?: (ctx: DigitIdentifierContext) => Result; + /** + * Visit a parse tree produced by the `decimalLiteral` + * labeled alternative in `TrinoParser.number`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDecimalLiteral?: (ctx: DecimalLiteralContext) => Result; + /** + * Visit a parse tree produced by the `doubleLiteral` + * labeled alternative in `TrinoParser.number`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDoubleLiteral?: (ctx: DoubleLiteralContext) => Result; + /** + * Visit a parse tree produced by the `integerLiteral` + * labeled alternative in `TrinoParser.number`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntegerLiteral?: (ctx: IntegerLiteralContext) => Result; + /** + * Visit a parse tree produced by the `identifierUser` + * labeled alternative in `TrinoParser.authorizationUser`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierUser?: (ctx: IdentifierUserContext) => Result; + /** + * Visit a parse tree produced by the `stringUser` + * labeled alternative in `TrinoParser.authorizationUser`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringUser?: (ctx: StringUserContext) => Result; + /** + * Visit a parse tree produced by `TrinoParser.nonReserved`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNonReserved?: (ctx: NonReservedContext) => Result; +} diff --git a/src/autocomplete/databases/trino/grammar/TrinoLexer.g4 b/src/autocomplete/databases/trino/grammar/TrinoLexer.g4 new file mode 100644 index 000000000..a1891c700 --- /dev/null +++ b/src/autocomplete/databases/trino/grammar/TrinoLexer.g4 @@ -0,0 +1,384 @@ +// $antlr-format alignTrailingComments true, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine true, allowShortBlocksOnASingleLine true, minEmptyLines 0, alignSemicolons ownLine +// $antlr-format alignColons trailing, singleLineOverrulesHangingColon true, alignLexerCommands true, alignLabels true, alignTrailers true + +lexer grammar TrinoLexer; + +options { + caseInsensitive = true; +} + +ABSENT_ : 'ABSENT'; +ADD_ : 'ADD'; +ADMIN_ : 'ADMIN'; +AFTER_ : 'AFTER'; +ALL_ : 'ALL'; +ALTER_ : 'ALTER'; +ANALYZE_ : 'ANALYZE'; +AND_ : 'AND'; +ANY_ : 'ANY'; +ARRAY_ : 'ARRAY'; +AS_ : 'AS'; +ASC_ : 'ASC'; +AT_ : 'AT'; +AUTHORIZATION_ : 'AUTHORIZATION'; +BEGIN_ : 'BEGIN'; +BERNOULLI_ : 'BERNOULLI'; +BETWEEN_ : 'BETWEEN'; +BOTH_ : 'BOTH'; +BY_ : 'BY'; +CALL_ : 'CALL'; +CALLED_ : 'CALLED'; +CASCADE_ : 'CASCADE'; +CASE_ : 'CASE'; +CAST_ : 'CAST'; +CATALOG_ : 'CATALOG'; +CATALOGS_ : 'CATALOGS'; +COLUMN_ : 'COLUMN'; +COLUMNS_ : 'COLUMNS'; +COMMENT_ : 'COMMENT'; +COMMIT_ : 'COMMIT'; +COMMITTED_ : 'COMMITTED'; +CONDITIONAL_ : 'CONDITIONAL'; +CONSTRAINT_ : 'CONSTRAINT'; +COUNT_ : 'COUNT'; +COPARTITION_ : 'COPARTITION'; +CREATE_ : 'CREATE'; +CROSS_ : 'CROSS'; +CUBE_ : 'CUBE'; +CURRENT_ : 'CURRENT'; +CURRENT_CATALOG_ : 'CURRENT_CATALOG'; +CURRENT_DATE_ : 'CURRENT_DATE'; +CURRENT_PATH_ : 'CURRENT_PATH'; +CURRENT_ROLE_ : 'CURRENT_ROLE'; +CURRENT_SCHEMA_ : 'CURRENT_SCHEMA'; +CURRENT_TIME_ : 'CURRENT_TIME'; +CURRENT_TIMESTAMP_ : 'CURRENT_TIMESTAMP'; +CURRENT_USER_ : 'CURRENT_USER'; +DATA_ : 'DATA'; +DATE_ : 'DATE'; +DAY_ : 'DAY'; +DEALLOCATE_ : 'DEALLOCATE'; +DECLARE_ : 'DECLARE'; +DEFAULT_ : 'DEFAULT'; +DEFINE_ : 'DEFINE'; +DEFINER_ : 'DEFINER'; +DELETE_ : 'DELETE'; +DENY_ : 'DENY'; +DESC_ : 'DESC'; +DESCRIBE_ : 'DESCRIBE'; +DESCRIPTOR_ : 'DESCRIPTOR'; +DETERMINISTIC_ : 'DETERMINISTIC'; +DISTINCT_ : 'DISTINCT'; +DISTRIBUTED_ : 'DISTRIBUTED'; +DO_ : 'DO'; +DOUBLE_ : 'DOUBLE'; +DROP_ : 'DROP'; +ELSE_ : 'ELSE'; +EMPTY_ : 'EMPTY'; +ELSEIF_ : 'ELSEIF'; +ENCODING_ : 'ENCODING'; +END_ : 'END'; +ERROR_ : 'ERROR'; +ESCAPE_ : 'ESCAPE'; +EXCEPT_ : 'EXCEPT'; +EXCLUDING_ : 'EXCLUDING'; +EXECUTE_ : 'EXECUTE'; +EXISTS_ : 'EXISTS'; +EXPLAIN_ : 'EXPLAIN'; +EXTRACT_ : 'EXTRACT'; +FALSE_ : 'FALSE'; +FETCH_ : 'FETCH'; +FILTER_ : 'FILTER'; +FINAL_ : 'FINAL'; +FIRST_ : 'FIRST'; +FOLLOWING_ : 'FOLLOWING'; +FOR_ : 'FOR'; +FORMAT_ : 'FORMAT'; +FROM_ : 'FROM'; +FULL_ : 'FULL'; +FUNCTION_ : 'FUNCTION'; +FUNCTIONS_ : 'FUNCTIONS'; +GRACE_ : 'GRACE'; +GRANT_ : 'GRANT'; +GRANTED_ : 'GRANTED'; +GRANTS_ : 'GRANTS'; +GRAPHVIZ_ : 'GRAPHVIZ'; +GROUP_ : 'GROUP'; +GROUPING_ : 'GROUPING'; +GROUPS_ : 'GROUPS'; +HAVING_ : 'HAVING'; +HOUR_ : 'HOUR'; +IF_ : 'IF'; +IGNORE_ : 'IGNORE'; +IMMEDIATE_ : 'IMMEDIATE'; +IN_ : 'IN'; +INCLUDING_ : 'INCLUDING'; +INITIAL_ : 'INITIAL'; +INNER_ : 'INNER'; +INPUT_ : 'INPUT'; +INSERT_ : 'INSERT'; +INTERSECT_ : 'INTERSECT'; +INTERVAL_ : 'INTERVAL'; +INTO_ : 'INTO'; +INVOKER_ : 'INVOKER'; +IO_ : 'IO'; +IS_ : 'IS'; +ISOLATION_ : 'ISOLATION'; +ITERATE_ : 'ITERATE'; +JOIN_ : 'JOIN'; +JSON_ : 'JSON'; +JSON_ARRAY_ : 'JSON_ARRAY'; +JSON_EXISTS_ : 'JSON_EXISTS'; +JSON_OBJECT_ : 'JSON_OBJECT'; +JSON_QUERY_ : 'JSON_QUERY'; +JSON_TABLE_ : 'JSON_TABLE'; +JSON_VALUE_ : 'JSON_VALUE'; +KEEP_ : 'KEEP'; +KEY_ : 'KEY'; +KEYS_ : 'KEYS'; +LANGUAGE_ : 'LANGUAGE'; +LAST_ : 'LAST'; +LATERAL_ : 'LATERAL'; +LEADING_ : 'LEADING'; +LEAVE_ : 'LEAVE'; +LEFT_ : 'LEFT'; +LEVEL_ : 'LEVEL'; +LIKE_ : 'LIKE'; +LIMIT_ : 'LIMIT'; +LISTAGG_ : 'LISTAGG'; +LOCAL_ : 'LOCAL'; +LOCALTIME_ : 'LOCALTIME'; +LOCALTIMESTAMP_ : 'LOCALTIMESTAMP'; +LOGICAL_ : 'LOGICAL'; +LOOP_ : 'LOOP'; +MAP_ : 'MAP'; +MATCH_ : 'MATCH'; +MATCHED_ : 'MATCHED'; +MATCHES_ : 'MATCHES'; +MATCH_RECOGNIZE_ : 'MATCH_RECOGNIZE'; +MATERIALIZED_ : 'MATERIALIZED'; +MEASURES_ : 'MEASURES'; +MERGE_ : 'MERGE'; +MINUTE_ : 'MINUTE'; +MONTH_ : 'MONTH'; +NATURAL_ : 'NATURAL'; +NESTED_ : 'NESTED'; +NEXT_ : 'NEXT'; +NFC_ : 'NFC'; +NFD_ : 'NFD'; +NFKC_ : 'NFKC'; +NFKD_ : 'NFKD'; +NO_ : 'NO'; +NONE_ : 'NONE'; +NORMALIZE_ : 'NORMALIZE'; +NOT_ : 'NOT'; +NULL_ : 'NULL'; +NULLIF_ : 'NULLIF'; +NULLS_ : 'NULLS'; +OBJECT_ : 'OBJECT'; +OF_ : 'OF'; +OFFSET_ : 'OFFSET'; +OMIT_ : 'OMIT'; +ON_ : 'ON'; +ONE_ : 'ONE'; +ONLY_ : 'ONLY'; +OPTION_ : 'OPTION'; +OR_ : 'OR'; +ORDER_ : 'ORDER'; +ORDINALITY_ : 'ORDINALITY'; +OUTER_ : 'OUTER'; +OUTPUT_ : 'OUTPUT'; +OVER_ : 'OVER'; +OVERFLOW_ : 'OVERFLOW'; +PARTITION_ : 'PARTITION'; +PARTITIONS_ : 'PARTITIONS'; +PASSING_ : 'PASSING'; +PAST_ : 'PAST'; +PATH_ : 'PATH'; +PATTERN_ : 'PATTERN'; +PER_ : 'PER'; +PERIOD_ : 'PERIOD'; +PERMUTE_ : 'PERMUTE'; +PLAN_ : 'PLAN'; +POSITION_ : 'POSITION'; +PRECEDING_ : 'PRECEDING'; +PRECISION_ : 'PRECISION'; +PREPARE_ : 'PREPARE'; +PRIVILEGES_ : 'PRIVILEGES'; +PROPERTIES_ : 'PROPERTIES'; +PRUNE_ : 'PRUNE'; +QUOTES_ : 'QUOTES'; +RANGE_ : 'RANGE'; +READ_ : 'READ'; +RECURSIVE_ : 'RECURSIVE'; +REFRESH_ : 'REFRESH'; +RENAME_ : 'RENAME'; +REPEAT_ : 'REPEAT'; +REPEATABLE_ : 'REPEATABLE'; +REPLACE_ : 'REPLACE'; +RESET_ : 'RESET'; +RESPECT_ : 'RESPECT'; +RESTRICT_ : 'RESTRICT'; +RETURN_ : 'RETURN'; +RETURNING_ : 'RETURNING'; +RETURNS_ : 'RETURNS'; +REVOKE_ : 'REVOKE'; +RIGHT_ : 'RIGHT'; +ROLE_ : 'ROLE'; +ROLES_ : 'ROLES'; +ROLLBACK_ : 'ROLLBACK'; +ROLLUP_ : 'ROLLUP'; +ROW_ : 'ROW'; +ROWS_ : 'ROWS'; +RUNNING_ : 'RUNNING'; +SCALAR_ : 'SCALAR'; +SCHEMA_ : 'SCHEMA'; +SCHEMAS_ : 'SCHEMAS'; +SECOND_ : 'SECOND'; +SECURITY_ : 'SECURITY'; +SEEK_ : 'SEEK'; +SELECT_ : 'SELECT'; +SERIALIZABLE_ : 'SERIALIZABLE'; +SESSION_ : 'SESSION'; +SET_ : 'SET'; +SETS_ : 'SETS'; +SHOW_ : 'SHOW'; +// Missing SKIP in official g4 +SKIP_ : 'SKIP'; +SOME_ : 'SOME'; +START_ : 'START'; +STATS_ : 'STATS'; +SUBSET_ : 'SUBSET'; +SUBSTRING_ : 'SUBSTRING'; +SYSTEM_ : 'SYSTEM'; +TABLE_ : 'TABLE'; +TABLES_ : 'TABLES'; +TABLESAMPLE_ : 'TABLESAMPLE'; +TEXT_ : 'TEXT'; +TEXT_STRING_ : 'STRING'; +THEN_ : 'THEN'; +TIES_ : 'TIES'; +TIME_ : 'TIME'; +TIMESTAMP_ : 'TIMESTAMP'; +TO_ : 'TO'; +TRAILING_ : 'TRAILING'; +TRANSACTION_ : 'TRANSACTION'; +TRIM_ : 'TRIM'; +TRUE_ : 'TRUE'; +TRUNCATE_ : 'TRUNCATE'; +TRY_CAST_ : 'TRY_CAST'; +TYPE_ : 'TYPE'; +UESCAPE_ : 'UESCAPE'; +UNBOUNDED_ : 'UNBOUNDED'; +UNCOMMITTED_ : 'UNCOMMITTED'; +UNCONDITIONAL_ : 'UNCONDITIONAL'; +UNION_ : 'UNION'; +UNIQUE_ : 'UNIQUE'; +UNKNOWN_ : 'UNKNOWN'; +UNMATCHED_ : 'UNMATCHED'; +UNNEST_ : 'UNNEST'; +UNTIL_ : 'UNTIL'; +UPDATE_ : 'UPDATE'; +USE_ : 'USE'; +USER_ : 'USER'; +USING_ : 'USING'; +UTF16_ : 'UTF16'; +UTF32_ : 'UTF32'; +UTF8_ : 'UTF8'; +VALIDATE_ : 'VALIDATE'; +VALUE_ : 'VALUE'; +VALUES_ : 'VALUES'; +VERBOSE_ : 'VERBOSE'; +VERSION_ : 'VERSION'; +VIEW_ : 'VIEW'; +WHEN_ : 'WHEN'; +WHERE_ : 'WHERE'; +WHILE_ : 'WHILE'; +WINDOW_ : 'WINDOW'; +WITH_ : 'WITH'; +WITHIN_ : 'WITHIN'; +WITHOUT_ : 'WITHOUT'; +WORK_ : 'WORK'; +WRAPPER_ : 'WRAPPER'; +WRITE_ : 'WRITE'; +YEAR_ : 'YEAR'; +ZONE_ : 'ZONE'; + +EQ_ : '='; +NEQ_ : '<>' | '!='; +LT_ : '<'; +LTE_ : '<='; +GT_ : '>'; +GTE_ : '>='; + +PLUS_ : '+'; +MINUS_ : '-'; +ASTERISK_ : '*'; +SLASH_ : '/'; +PERCENT_ : '%'; +CONCAT_ : '||'; +QUESTION_MARK_ : '?'; +SEMICOLON_ : ';'; + +// Punctuations not provided by official g4 file +DOT_ : '.'; +COLON_ : '_:'; +COMMA_ : ','; + +LPAREN_ : '('; +RPAREN_ : ')'; +LSQUARE_ : '['; +RSQUARE_ : ']'; +LCURLY_ : '{'; +RCURLY_ : '}'; +LCURLYHYPHEN_ : '{-'; +RCURLYHYPHEN_ : '-}'; + +LARROW_ : '<-'; +RARROW_ : '->'; +RDOUBLEARROW_ : '=>'; + +VBAR_ : '|'; +DOLLAR_ : '$'; +CARET_ : '^'; + +STRING_: '\'' ( ~'\'' | '\'\'')* '\''; + +UNICODE_STRING_: 'U&\'' ( ~'\'' | '\'\'')* '\''; + +// Note_: we allow any character inside the binary literal and validate +// its a correct literal when the AST is being constructed. This +// allows us to provide more meaningful error messages to the user +BINARY_LITERAL_: 'X\'' ~'\''* '\''; + +INTEGER_VALUE_: DIGIT_+; + +DECIMAL_VALUE_: DIGIT_+ '.' DIGIT_* | '.' DIGIT_+; + +DOUBLE_VALUE_: DIGIT_+ ('.' DIGIT_*)? EXPONENT_ | '.' DIGIT_+ EXPONENT_; + +IDENTIFIER_: (LETTER_ | '_') (LETTER_ | DIGIT_ | '_')*; + +DIGIT_IDENTIFIER_: DIGIT_ (LETTER_ | DIGIT_ | '_')+; + +QUOTED_IDENTIFIER_: '"' ( ~'"' | '""')* '"'; + +BACKQUOTED_IDENTIFIER_: '`' ( ~'`' | '``')* '`'; + +fragment EXPONENT_: 'E' [+-]? DIGIT_+; + +fragment DIGIT_: [0-9]; + +fragment LETTER_: [A-Z]; + +SIMPLE_COMMENT_: '--' ~[\r\n]* '\r'? '\n'? -> skip; + +BRACKETED_COMMENT_: '/*' .*? '*/' -> skip; + +WS_: [ \r\n\t]+ -> channel(HIDDEN); + +// Catch-all for anything we can't recognize. +// We use this to be able to ignore and recover all the text +// when splitting statements with DelimiterLexer +UNRECOGNIZED_: .; \ No newline at end of file diff --git a/src/autocomplete/databases/trino/grammar/TrinoParser.g4 b/src/autocomplete/databases/trino/grammar/TrinoParser.g4 new file mode 100644 index 000000000..a3845d01d --- /dev/null +++ b/src/autocomplete/databases/trino/grammar/TrinoParser.g4 @@ -0,0 +1,1081 @@ +// $antlr-format alignTrailingComments true, columnLimit 150, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false, useTab false +// $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true, alignSemicolons hanging, alignColons hanging + +parser grammar TrinoParser; + +options { + tokenVocab = TrinoLexer; +} + +parse + : statements? EOF + ; + +statements + : statement SEMICOLON_? + | statement SEMICOLON_ statements + ; + +statement + : rootQuery # statementDefault + | USE_ schema = identifier # use + | USE_ catalog = identifier DOT_ schema = identifier # use + | CREATE_ CATALOG_ (IF_ NOT_ EXISTS_)? catalog = identifier USING_ connectorName = identifier ( + COMMENT_ string_ + )? (AUTHORIZATION_ principal)? (WITH_ properties)? # createCatalog + | DROP_ CATALOG_ (IF_ EXISTS_)? catalog = identifier (CASCADE_ | RESTRICT_)? # dropCatalog + | CREATE_ SCHEMA_ (IF_ NOT_ EXISTS_)? qualifiedName (AUTHORIZATION_ principal)? ( + WITH_ properties + )? # createSchema + | DROP_ SCHEMA_ (IF_ EXISTS_)? qualifiedName (CASCADE_ | RESTRICT_)? # dropSchema + | ALTER_ SCHEMA_ qualifiedName RENAME_ TO_ identifier # renameSchema + | ALTER_ SCHEMA_ qualifiedName SET_ AUTHORIZATION_ principal # setSchemaAuthorization + | CREATE_ (OR_ REPLACE_)? TABLE_ (IF_ NOT_ EXISTS_)? qualifiedName columnAliases? ( + COMMENT_ string_ + )? (WITH_ properties)? AS_ (rootQuery | LPAREN_ rootQuery RPAREN_) (WITH_ (NO_)? DATA_)? # createTableAsSelect + | CREATE_ (OR_ REPLACE_)? TABLE_ (IF_ NOT_ EXISTS_)? qualifiedName LPAREN_ tableElement ( + COMMA_ tableElement + )* RPAREN_ (COMMENT_ string_)? (WITH_ properties)? # createTable + | DROP_ TABLE_ (IF_ EXISTS_)? qualifiedName # dropTable + | INSERT_ INTO_ qualifiedName columnAliases? rootQuery # insertInto + | DELETE_ FROM_ qualifiedName (WHERE_ booleanExpression)? # delete + | TRUNCATE_ TABLE_ qualifiedName # truncateTable + | COMMENT_ ON_ TABLE_ qualifiedName IS_ (string_ | NULL_) # commentTable + | COMMENT_ ON_ VIEW_ qualifiedName IS_ (string_ | NULL_) # commentView + | COMMENT_ ON_ COLUMN_ qualifiedName IS_ (string_ | NULL_) # commentColumn + | ALTER_ TABLE_ (IF_ EXISTS_)? from = qualifiedName RENAME_ TO_ to = qualifiedName # renameTable + | ALTER_ TABLE_ (IF_ EXISTS_)? tableName = qualifiedName ADD_ COLUMN_ (IF_ NOT_ EXISTS_)? column = columnDefinition # addColumn + | ALTER_ TABLE_ (IF_ EXISTS_)? tableName = qualifiedName RENAME_ COLUMN_ (IF_ EXISTS_)? from = qualifiedName TO_ to = identifier # renameColumn + | ALTER_ TABLE_ (IF_ EXISTS_)? tableName = qualifiedName DROP_ COLUMN_ (IF_ EXISTS_)? column = qualifiedName # dropColumn + | ALTER_ TABLE_ (IF_ EXISTS_)? tableName = qualifiedName ALTER_ COLUMN_ columnName = qualifiedName SET_ DATA_ TYPE_ type # setColumnType + | ALTER_ TABLE_ tableName = qualifiedName SET_ AUTHORIZATION_ principal # setTableAuthorization + | ALTER_ TABLE_ tableName = qualifiedName SET_ PROPERTIES_ propertyAssignments # setTableProperties + | ALTER_ TABLE_ tableName = qualifiedName EXECUTE_ procedureName = identifier ( + LPAREN_ (callArgument (COMMA_ callArgument)*)? RPAREN_ + )? (WHERE_ where = booleanExpression)? # tableExecute + | ANALYZE_ qualifiedName (WITH_ properties)? # analyze + | CREATE_ (OR_ REPLACE_)? MATERIALIZED_ VIEW_ (IF_ NOT_ EXISTS_)? qualifiedName ( + GRACE_ PERIOD_ interval + )? (COMMENT_ string_)? (WITH_ properties)? AS_ rootQuery # createMaterializedView + | CREATE_ (OR_ REPLACE_)? VIEW_ qualifiedName (COMMENT_ string_)? ( + SECURITY_ (DEFINER_ | INVOKER_) + )? AS_ rootQuery # createView + | REFRESH_ MATERIALIZED_ VIEW_ qualifiedName # refreshMaterializedView + | DROP_ MATERIALIZED_ VIEW_ (IF_ EXISTS_)? qualifiedName # dropMaterializedView + | ALTER_ MATERIALIZED_ VIEW_ (IF_ EXISTS_)? from = qualifiedName RENAME_ TO_ to = qualifiedName # renameMaterializedView + | ALTER_ MATERIALIZED_ VIEW_ qualifiedName SET_ PROPERTIES_ propertyAssignments # setMaterializedViewProperties + | DROP_ VIEW_ (IF_ EXISTS_)? qualifiedName # dropView + | ALTER_ VIEW_ from = qualifiedName RENAME_ TO_ to = qualifiedName # renameView + | ALTER_ VIEW_ from = qualifiedName SET_ AUTHORIZATION_ principal # setViewAuthorization + | CALL_ qualifiedName LPAREN_ (callArgument (COMMA_ callArgument)*)? RPAREN_ # call + | CREATE_ (OR_ REPLACE_)? functionSpecification # createFunction + | DROP_ FUNCTION_ (IF_ EXISTS_)? functionDeclaration # dropFunction + | CREATE_ ROLE_ name = identifier (WITH_ ADMIN_ grantor)? (IN_ catalog = identifier)? # createRole + | DROP_ ROLE_ name = identifier (IN_ catalog = identifier)? # dropRole + | GRANT_ roles TO_ principal (COMMA_ principal)* (WITH_ ADMIN_ OPTION_)? (GRANTED_ BY_ grantor)? ( + IN_ catalog = identifier + )? # grantRoles + | REVOKE_ (ADMIN_ OPTION_ FOR_)? roles FROM_ principal (COMMA_ principal)* ( + GRANTED_ BY_ grantor + )? (IN_ catalog = identifier)? # revokeRoles + | SET_ ROLE_ (ALL_ | NONE_ | role = identifier) (IN_ catalog = identifier)? # setRole + | GRANT_ (privilege (COMMA_ privilege)* | ALL_ PRIVILEGES_) ON_ (SCHEMA_ | TABLE_)? qualifiedName TO_ grantee = principal ( + WITH_ GRANT_ OPTION_ + )? # grant + | DENY_ (privilege (COMMA_ privilege)* | ALL_ PRIVILEGES_) ON_ (SCHEMA_ | TABLE_)? qualifiedName TO_ grantee = principal # deny + | REVOKE_ (GRANT_ OPTION_ FOR_)? (privilege (COMMA_ privilege)* | ALL_ PRIVILEGES_) ON_ ( + SCHEMA_ + | TABLE_ + )? qualifiedName FROM_ grantee = principal # revoke + | SHOW_ GRANTS_ (ON_ TABLE_? qualifiedName)? # showGrants + | EXPLAIN_ (LPAREN_ explainOption (COMMA_ explainOption)* RPAREN_)? statement # explain + | EXPLAIN_ ANALYZE_ VERBOSE_? statement # explainAnalyze + | SHOW_ CREATE_ TABLE_ qualifiedName # showCreateTable + | SHOW_ CREATE_ SCHEMA_ qualifiedName # showCreateSchema + | SHOW_ CREATE_ VIEW_ qualifiedName # showCreateView + | SHOW_ CREATE_ MATERIALIZED_ VIEW_ qualifiedName # showCreateMaterializedView + | SHOW_ TABLES_ ((FROM_ | IN_) qualifiedName)? ( + LIKE_ pattern = string_ (ESCAPE_ escape = string_)? + )? # showTables + | SHOW_ SCHEMAS_ ((FROM_ | IN_) identifier)? ( + LIKE_ pattern = string_ (ESCAPE_ escape = string_)? + )? # showSchemas + | SHOW_ CATALOGS_ (LIKE_ pattern = string_ (ESCAPE_ escape = string_)?)? # showCatalogs + | SHOW_ COLUMNS_ (FROM_ | IN_) qualifiedName? ( + LIKE_ pattern = string_ (ESCAPE_ escape = string_)? + )? # showColumns + | SHOW_ STATS_ FOR_ qualifiedName # showStats + | SHOW_ STATS_ FOR_ LPAREN_ rootQuery RPAREN_ # showStatsForQuery + | SHOW_ CURRENT_? ROLES_ ((FROM_ | IN_) identifier)? # showRoles + | SHOW_ ROLE_ GRANTS_ ((FROM_ | IN_) identifier)? # showRoleGrants + | DESCRIBE_ qualifiedName # showColumns + | DESC_ qualifiedName # showColumns + | SHOW_ FUNCTIONS_ ((FROM_ | IN_) qualifiedName)? ( + LIKE_ pattern = string_ (ESCAPE_ escape = string_)? + )? # showFunctions + | SHOW_ SESSION_ (LIKE_ pattern = string_ (ESCAPE_ escape = string_)?)? # showSession + | SET_ SESSION_ AUTHORIZATION_ authorizationUser # setSessionAuthorization + | RESET_ SESSION_ AUTHORIZATION_ # resetSessionAuthorization + | SET_ SESSION_ qualifiedName EQ_ expression # setSession + | RESET_ SESSION_ qualifiedName # resetSession + | START_ TRANSACTION_ (transactionMode (COMMA_ transactionMode)*)? # startTransaction + | COMMIT_ WORK_? # commit + | ROLLBACK_ WORK_? # rollback + | PREPARE_ identifier FROM_ statement # prepare + | DEALLOCATE_ PREPARE_ identifier # deallocate + | EXECUTE_ identifier (USING_ expression (COMMA_ expression)*)? # execute + | EXECUTE_ IMMEDIATE_ string_ (USING_ expression (COMMA_ expression)*)? # executeImmediate + | DESCRIBE_ INPUT_ identifier # describeInput + | DESCRIBE_ OUTPUT_ identifier # describeOutput + | SET_ PATH_ pathSpecification # setPath + | SET_ TIME_ ZONE_ (LOCAL_ | expression) # setTimeZone + | UPDATE_ qualifiedName SET_ updateAssignment (COMMA_ updateAssignment)* ( + WHERE_ where = booleanExpression + )? # update + | MERGE_ INTO_ qualifiedName (AS_? identifier)? USING_ relation ON_ expression mergeCase+ # merge + ; + +rootQuery + : withFunction? query + ; + +withFunction + : WITH_ functionSpecification (COMMA_ functionSpecification)* + ; + +query + : with? queryNoWith + ; + +with + : WITH_ RECURSIVE_? namedQuery (COMMA_ namedQuery)* + ; + +tableElement + : columnDefinition + | likeClause + ; + +columnDefinition + : identifier type (NOT_ NULL_)? (COMMENT_ string_)? (WITH_ properties)? + ; + +likeClause + : LIKE_ qualifiedName (optionType = (INCLUDING_ | EXCLUDING_) PROPERTIES_)? + ; + +properties + : LPAREN_ propertyAssignments RPAREN_ + ; + +propertyAssignments + : property (COMMA_ property)* + ; + +property + : identifier EQ_ propertyValue + ; + +propertyValue + : DEFAULT_ # defaultPropertyValue + | expression # nonDefaultPropertyValue + ; + +queryNoWith + : queryTerm (ORDER_ BY_ sortItem (COMMA_ sortItem)*)? ( + OFFSET_ offset = rowCount (ROW_ | ROWS_)? + )? ( + LIMIT_ limit = limitRowCount + | FETCH_ (FIRST_ | NEXT_) (fetchFirst = rowCount)? (ROW_ | ROWS_) (ONLY_ | WITH_ TIES_) + )? + ; + +limitRowCount + : ALL_ + | rowCount + ; + +rowCount + : INTEGER_VALUE_ + | QUESTION_MARK_ + ; + +queryTerm + : queryPrimary # queryTermDefault + | left = queryTerm operator = INTERSECT_ setQuantifier? right = queryTerm # setOperation + | left = queryTerm operator = (UNION_ | EXCEPT_) setQuantifier? right = queryTerm # setOperation + ; + +queryPrimary + : querySpecification # queryPrimaryDefault + | TABLE_ qualifiedName # table + | VALUES_ expression (COMMA_ expression)* # inlineTable + | LPAREN_ queryNoWith RPAREN_ # subquery + ; + +sortItem + : expression ordering = (ASC_ | DESC_)? (NULLS_ nullOrdering = (FIRST_ | LAST_))? + ; + +querySpecification + : SELECT_ setQuantifier? selectItem (COMMA_ selectItem)* (FROM_ relation (COMMA_ relation)*)? ( + WHERE_ where = booleanExpression + )? (GROUP_ BY_ groupBy)? (HAVING_ having = booleanExpression)? ( + WINDOW_ windowDefinition (COMMA_ windowDefinition)* + )? + ; + +groupBy + : setQuantifier? groupingElement (COMMA_ groupingElement)* + ; + +groupingElement + : groupingSet # singleGroupingSet + | ROLLUP_ LPAREN_ (expression (COMMA_ expression)*)? RPAREN_ # rollup + | CUBE_ LPAREN_ (expression (COMMA_ expression)*)? RPAREN_ # cube + | GROUPING_ SETS_ LPAREN_ groupingSet (COMMA_ groupingSet)* RPAREN_ # multipleGroupingSets + ; + +groupingSet + : LPAREN_ (expression (COMMA_ expression)*)? RPAREN_ + | expression + ; + +windowDefinition + : name = identifier AS_ LPAREN_ windowSpecification RPAREN_ + ; + +windowSpecification + : (existingWindowName = identifier)? ( + PARTITION_ BY_ partition += expression (COMMA_ partition += expression)* + )? (ORDER_ BY_ sortItem (COMMA_ sortItem)*)? windowFrame? + ; + +namedQuery + : name = identifier (columnAliases)? AS_ LPAREN_ query RPAREN_ + ; + +setQuantifier + : DISTINCT_ + | ALL_ + ; + +selectItem + : expression (AS_? identifier)? # selectSingle + | primaryExpression DOT_ ASTERISK_ (AS_ columnAliases)? # selectAll + | ASTERISK_ # selectAll + ; + +relation + : left = relation ( + CROSS_ JOIN_ right = sampledRelation + | joinType JOIN_ rightRelation = relation joinCriteria + | NATURAL_ joinType JOIN_ right = sampledRelation + ) # joinRelation + | sampledRelation # relationDefault + ; + +joinType + : INNER_? + | (LEFT_ | RIGHT_ | FULL_) OUTER_? + ; + +joinCriteria + : ON_ booleanExpression + | USING_ LPAREN_ identifier (COMMA_ identifier)* RPAREN_ + ; + +sampledRelation + : patternRecognition (TABLESAMPLE_ sampleType LPAREN_ percentage = expression RPAREN_)? + ; + +sampleType + : BERNOULLI_ + | SYSTEM_ + ; + +trimsSpecification + : LEADING_ + | TRAILING_ + | BOTH_ + ; + +listAggOverflowBehavior + : ERROR_ + | TRUNCATE_ string_? listaggCountIndication + ; + +listaggCountIndication + : (WITH_ | WITHOUT_) COUNT_ + ; + +patternRecognition + : aliasedRelation ( + MATCH_RECOGNIZE_ LPAREN_ ( + PARTITION_ BY_ partition += expression (COMMA_ partition += expression)* + )? (ORDER_ BY_ sortItem (COMMA_ sortItem)*)? ( + MEASURES_ measureDefinition (COMMA_ measureDefinition)* + )? rowsPerMatch? (AFTER_ MATCH_ skipTo)? (INITIAL_ | SEEK_)? PATTERN_ LPAREN_ rowPattern RPAREN_ ( + SUBSET_ subsetDefinition (COMMA_ subsetDefinition)* + )? DEFINE_ variableDefinition (COMMA_ variableDefinition)* RPAREN_ ( + AS_? identifier columnAliases? + )? + )? + ; + +measureDefinition + : expression AS_ identifier + ; + +rowsPerMatch + : ONE_ ROW_ PER_ MATCH_ + | ALL_ ROWS_ PER_ MATCH_ emptyMatchHandling? + ; + +emptyMatchHandling + : SHOW_ EMPTY_ MATCHES_ + | OMIT_ EMPTY_ MATCHES_ + | WITH_ UNMATCHED_ ROWS_ + ; + +skipTo + : SKIP_ (TO_ (NEXT_ ROW_ | (FIRST_ | LAST_)? identifier) | PAST_ LAST_ ROW_) + ; + +subsetDefinition + : name = identifier EQ_ LPAREN_ union += identifier (COMMA_ union += identifier)* RPAREN_ + ; + +variableDefinition + : identifier AS_ expression + ; + +aliasedRelation + : relationPrimary (AS_? identifier columnAliases?)? + ; + +columnAliases + : LPAREN_ identifier (COMMA_ identifier)* RPAREN_ + ; + +relationPrimary + : qualifiedName queryPeriod? # tableName + | LPAREN_ query RPAREN_ # subqueryRelation + | UNNEST_ LPAREN_ expression (COMMA_ expression)* RPAREN_ (WITH_ ORDINALITY_)? # unnest + | LATERAL_ LPAREN_ query RPAREN_ # lateral + | TABLE_ LPAREN_ tableFunctionCall RPAREN_ # tableFunctionInvocation + | LPAREN_ relation RPAREN_ # parenthesizedRelation + ; + +tableFunctionCall + : qualifiedName LPAREN_ (tableFunctionArgument (COMMA_ tableFunctionArgument)*)? ( + COPARTITION_ copartitionTables (COMMA_ copartitionTables)* + )? RPAREN_ + ; + +tableFunctionArgument + : (identifier RDOUBLEARROW_)? ( + tableArgument + | descriptorArgument + | expression + ) // descriptor before expression to avoid parsing descriptor as a function call + ; + +tableArgument + : tableArgumentRelation ( + PARTITION_ BY_ (LPAREN_ (expression (COMMA_ expression)*)? RPAREN_ | expression) + )? (PRUNE_ WHEN_ EMPTY_ | KEEP_ WHEN_ EMPTY_)? ( + ORDER_ BY_ (LPAREN_ sortItem (COMMA_ sortItem)* RPAREN_ | sortItem) + )? + ; + +tableArgumentRelation + : TABLE_ LPAREN_ qualifiedName RPAREN_ (AS_? identifier columnAliases?)? # tableArgumentTable + | TABLE_ LPAREN_ query RPAREN_ (AS_? identifier columnAliases?)? # tableArgumentQuery + ; + +descriptorArgument + : DESCRIPTOR_ LPAREN_ descriptorField (COMMA_ descriptorField)* RPAREN_ + | CAST_ LPAREN_ NULL_ AS_ DESCRIPTOR_ RPAREN_ + ; + +descriptorField + : identifier type? + ; + +copartitionTables + : LPAREN_ qualifiedName COMMA_ qualifiedName (COMMA_ qualifiedName)* RPAREN_ + ; + +expression + : booleanExpression + ; + +booleanExpression + : valueExpression predicate_? # predicated + | NOT_ booleanExpression # logicalNot + | booleanExpression AND_ booleanExpression # and + | booleanExpression OR_ booleanExpression # or + ; + +// workaround for https://github.com/antlr/antlr4/issues/780 +predicate_ + : comparisonOperator right = valueExpression # comparison + | comparisonOperator comparisonQuantifier LPAREN_ query RPAREN_ # quantifiedComparison + | NOT_? BETWEEN_ lower = valueExpression AND_ upper = valueExpression # between + | NOT_? IN_ LPAREN_ expression (COMMA_ expression)* RPAREN_ # inList + | NOT_? IN_ LPAREN_ query RPAREN_ # inSubquery + | NOT_? LIKE_ pattern = valueExpression (ESCAPE_ escape = valueExpression)? # like + | IS_ NOT_? NULL_ # nullPredicate + | IS_ NOT_? DISTINCT_ FROM_ right = valueExpression # distinctFrom + ; + +valueExpression + : primaryExpression # valueExpressionDefault + | valueExpression AT_ timeZoneSpecifier # atTimeZone + | operator = (MINUS_ | PLUS_) valueExpression # arithmeticUnary + | left = valueExpression operator = (ASTERISK_ | SLASH_ | PERCENT_) right = valueExpression # arithmeticBinary + | left = valueExpression operator = (PLUS_ | MINUS_) right = valueExpression # arithmeticBinary + | left = valueExpression CONCAT_ right = valueExpression # concatenation + ; + +primaryExpression + : NULL_ # nullLiteral + | interval # intervalLiteral + | identifier string_ # typeConstructor + | DOUBLE_ PRECISION_ string_ # typeConstructor + | number # numericLiteral + | booleanValue # booleanLiteral + | string_ # stringLiteral + | BINARY_LITERAL_ # binaryLiteral + | QUESTION_MARK_ # parameter + | POSITION_ LPAREN_ valueExpression IN_ valueExpression RPAREN_ # position + | LPAREN_ expression (COMMA_ expression)+ RPAREN_ # rowConstructor + | ROW_ LPAREN_ expression (COMMA_ expression)* RPAREN_ # rowConstructor + | name = LISTAGG_ LPAREN_ setQuantifier? expression (COMMA_ string_)? ( + ON_ OVERFLOW_ listAggOverflowBehavior + )? RPAREN_ (WITHIN_ GROUP_ LPAREN_ ORDER_ BY_ sortItem (COMMA_ sortItem)* RPAREN_) filter? # listagg + | processingMode? qualifiedName LPAREN_ (label = identifier DOT_)? ASTERISK_ RPAREN_ filter? over? # functionCall + | processingMode? qualifiedName LPAREN_ (setQuantifier? expression (COMMA_ expression)*)? ( + ORDER_ BY_ sortItem (COMMA_ sortItem)* + )? RPAREN_ filter? (nullTreatment? over)? # functionCall + | identifier over # measure + | identifier RARROW_ expression # lambda + | LPAREN_ (identifier (COMMA_ identifier)*)? RPAREN_ RARROW_ expression # lambda + | LPAREN_ query RPAREN_ # subqueryExpression + // This is an extension to ANSI_ SQL, which considers EXISTS_ to be a + | EXISTS_ LPAREN_ query RPAREN_ # exists + | CASE_ operand = expression whenClause+ (ELSE_ elseExpression = expression)? END_ # simpleCase + | CASE_ whenClause+ (ELSE_ elseExpression = expression)? END_ # searchedCase + | CAST_ LPAREN_ expression AS_ type RPAREN_ # cast + | TRY_CAST_ LPAREN_ expression AS_ type RPAREN_ # cast + | ARRAY_ LSQUARE_ (expression (COMMA_ expression)*)? RSQUARE_ # arrayConstructor + | value = primaryExpression LSQUARE_ index = valueExpression RSQUARE_ # subscript + | identifier # columnReference + | base_ = primaryExpression DOT_ fieldName = identifier # dereference + | name = CURRENT_DATE_ # specialDateTimeFunction + | name = CURRENT_TIME_ (LPAREN_ precision = INTEGER_VALUE_ RPAREN_)? # specialDateTimeFunction + | name = CURRENT_TIMESTAMP_ (LPAREN_ precision = INTEGER_VALUE_ RPAREN_)? # specialDateTimeFunction + | name = LOCALTIME_ (LPAREN_ precision = INTEGER_VALUE_ RPAREN_)? # specialDateTimeFunction + | name = LOCALTIMESTAMP_ (LPAREN_ precision = INTEGER_VALUE_ RPAREN_)? # specialDateTimeFunction + | name = CURRENT_USER_ # currentUser + | name = CURRENT_CATALOG_ # currentCatalog + | name = CURRENT_SCHEMA_ # currentSchema + | name = CURRENT_PATH_ # currentPath + | TRIM_ LPAREN_ (trimsSpecification? trimChar = valueExpression? FROM_)? trimSource = valueExpression RPAREN_ # trim + | TRIM_ LPAREN_ trimSource = valueExpression COMMA_ trimChar = valueExpression RPAREN_ # trim + | SUBSTRING_ LPAREN_ valueExpression FROM_ valueExpression (FOR_ valueExpression)? RPAREN_ # substring + | NORMALIZE_ LPAREN_ valueExpression (COMMA_ normalForm)? RPAREN_ # normalize + | EXTRACT_ LPAREN_ identifier FROM_ valueExpression RPAREN_ # extract + | LPAREN_ expression RPAREN_ # parenthesizedExpression + | GROUPING_ LPAREN_ (qualifiedName (COMMA_ qualifiedName)*)? RPAREN_ # groupingOperation + | JSON_EXISTS_ LPAREN_ jsonPathInvocation (jsonExistsErrorBehavior ON_ ERROR_)? RPAREN_ # jsonExists + | JSON_VALUE_ LPAREN_ jsonPathInvocation (RETURNING_ type)? ( + emptyBehavior = jsonValueBehavior ON_ EMPTY_ + )? (errorBehavior = jsonValueBehavior ON_ ERROR_)? RPAREN_ # jsonValue + | JSON_QUERY_ LPAREN_ jsonPathInvocation (RETURNING_ type (FORMAT_ jsonRepresentation)?)? ( + jsonQueryWrapperBehavior WRAPPER_ + )? ((KEEP_ | OMIT_) QUOTES_ (ON_ SCALAR_ TEXT_STRING_)?)? ( + emptyBehavior = jsonQueryBehavior ON_ EMPTY_ + )? (errorBehavior = jsonQueryBehavior ON_ ERROR_)? RPAREN_ # jsonQuery + | JSON_OBJECT_ LPAREN_ ( + jsonObjectMember (COMMA_ jsonObjectMember)* (NULL_ ON_ NULL_ | ABSENT_ ON_ NULL_)? ( + WITH_ UNIQUE_ KEYS_? + | WITHOUT_ UNIQUE_ KEYS_? + )? + )? (RETURNING_ type (FORMAT_ jsonRepresentation)?)? RPAREN_ # jsonObject + | JSON_ARRAY_ LPAREN_ ( + jsonValueExpression (COMMA_ jsonValueExpression)* (NULL_ ON_ NULL_ | ABSENT_ ON_ NULL_)? + )? (RETURNING_ type (FORMAT_ jsonRepresentation)?)? RPAREN_ # jsonArray + ; + +jsonPathInvocation + : jsonValueExpression COMMA_ path = string_ (PASSING_ jsonArgument (COMMA_ jsonArgument)*)? + ; + +jsonValueExpression + : expression (FORMAT_ jsonRepresentation)? + ; + +jsonRepresentation + : JSON_ (ENCODING_ (UTF8_ | UTF16_ | UTF32_))? // TODO_ add implementation-defined JSON_ representation option + ; + +jsonArgument + : jsonValueExpression AS_ identifier + ; + +jsonExistsErrorBehavior + : TRUE_ + | FALSE_ + | UNKNOWN_ + | ERROR_ + ; + +jsonValueBehavior + : ERROR_ + | NULL_ + | DEFAULT_ expression + ; + +jsonQueryWrapperBehavior + : WITHOUT_ ARRAY_? + | WITH_ (CONDITIONAL_ | UNCONDITIONAL_)? ARRAY_? + ; + +jsonQueryBehavior + : ERROR_ + | NULL_ + | EMPTY_ (ARRAY_ | OBJECT_) + ; + +jsonObjectMember + : KEY_? expression VALUE_ jsonValueExpression + | expression COLON_ jsonValueExpression + ; + +processingMode + : RUNNING_ + | FINAL_ + ; + +nullTreatment + : IGNORE_ NULLS_ + | RESPECT_ NULLS_ + ; + +// renamed from "string" to avoid golang name conflict +string_ + : STRING_ # basicStringLiteral + | UNICODE_STRING_ (UESCAPE_ STRING_)? # unicodeStringLiteral + ; + +timeZoneSpecifier + : TIME_ ZONE_ interval # timeZoneInterval + | TIME_ ZONE_ string_ # timeZoneString + ; + +comparisonOperator + : EQ_ + | NEQ_ + | LT_ + | LTE_ + | GT_ + | GTE_ + ; + +comparisonQuantifier + : ALL_ + | SOME_ + | ANY_ + ; + +booleanValue + : TRUE_ + | FALSE_ + ; + +interval + : INTERVAL_ sign = (PLUS_ | MINUS_)? string_ from = intervalField (TO_ to = intervalField)? + ; + +intervalField + : YEAR_ + | MONTH_ + | DAY_ + | HOUR_ + | MINUTE_ + | SECOND_ + ; + +normalForm + : NFD_ + | NFC_ + | NFKD_ + | NFKC_ + ; + +type + : ROW_ LPAREN_ rowField (COMMA_ rowField)* RPAREN_ # rowType + | INTERVAL_ from = intervalField (TO_ to = intervalField)? # intervalType + | base_ = TIMESTAMP_ (LPAREN_ precision = typeParameter RPAREN_)? (WITHOUT_ TIME_ ZONE_)? # dateTimeType + | base_ = TIMESTAMP_ (LPAREN_ precision = typeParameter RPAREN_)? WITH_ TIME_ ZONE_ # dateTimeType + | base_ = TIME_ (LPAREN_ precision = typeParameter RPAREN_)? (WITHOUT_ TIME_ ZONE_)? # dateTimeType + | base_ = TIME_ (LPAREN_ precision = typeParameter RPAREN_)? WITH_ TIME_ ZONE_ # dateTimeType + | DOUBLE_ PRECISION_ # doublePrecisionType + | ARRAY_ LT_ type GT_ # legacyArrayType + | MAP_ LT_ keyType = type COMMA_ valueType = type GT_ # legacyMapType + | type ARRAY_ (LSQUARE_ INTEGER_VALUE_ RSQUARE_)? # arrayType + | identifier (LPAREN_ typeParameter (COMMA_ typeParameter)* RPAREN_)? # genericType + ; + +rowField + : type + | identifier type + ; + +typeParameter + : INTEGER_VALUE_ + | type + ; + +whenClause + : WHEN_ condition = expression THEN_ result = expression + ; + +filter + : FILTER_ LPAREN_ WHERE_ booleanExpression RPAREN_ + ; + +mergeCase + : WHEN_ MATCHED_ (AND_ condition = expression)? THEN_ UPDATE_ SET_ targets += identifier EQ_ values += expression ( + COMMA_ targets += identifier EQ_ values += expression + )* # mergeUpdate + | WHEN_ MATCHED_ (AND_ condition = expression)? THEN_ DELETE_ # mergeDelete + | WHEN_ NOT_ MATCHED_ (AND_ condition = expression)? THEN_ INSERT_ ( + LPAREN_ targets += identifier (COMMA_ targets += identifier)* RPAREN_ + )? VALUES_ LPAREN_ values += expression (COMMA_ values += expression)* RPAREN_ # mergeInsert + ; + +over + : OVER_ (windowName = identifier | LPAREN_ windowSpecification RPAREN_) + ; + +windowFrame + : (MEASURES_ measureDefinition (COMMA_ measureDefinition)*)? frameExtent (AFTER_ MATCH_ skipTo)? ( + INITIAL_ + | SEEK_ + )? (PATTERN_ LPAREN_ rowPattern RPAREN_)? (SUBSET_ subsetDefinition (COMMA_ subsetDefinition)*)? ( + DEFINE_ variableDefinition (COMMA_ variableDefinition)* + )? + ; + +// renamed start and stop to avoid Dart name conflict +frameExtent + : frameType = RANGE_ start_ = frameBound + | frameType = ROWS_ start_ = frameBound + | frameType = GROUPS_ start_ = frameBound + | frameType = RANGE_ BETWEEN_ start_ = frameBound AND_ end_ = frameBound + | frameType = ROWS_ BETWEEN_ start_ = frameBound AND_ end_ = frameBound + | frameType = GROUPS_ BETWEEN_ start_ = frameBound AND_ end_ = frameBound + ; + +frameBound + : UNBOUNDED_ boundType = PRECEDING_ # unboundedFrame + | UNBOUNDED_ boundType = FOLLOWING_ # unboundedFrame + | CURRENT_ ROW_ # currentRowBound + | expression boundType = (PRECEDING_ | FOLLOWING_) # boundedFrame + ; + +rowPattern + : patternPrimary patternQuantifier? # quantifiedPrimary + | rowPattern rowPattern # patternConcatenation + | rowPattern VBAR_ rowPattern # patternAlternation + ; + +patternPrimary + : identifier # patternVariable + | LPAREN_ RPAREN_ # emptyPattern + | PERMUTE_ LPAREN_ rowPattern (COMMA_ rowPattern)* RPAREN_ # patternPermutation + | LPAREN_ rowPattern RPAREN_ # groupedPattern + | CARET_ # partitionStartAnchor + | DOLLAR_ # partitionEndAnchor + | LCURLYHYPHEN_ rowPattern RCURLYHYPHEN_ # excludedPattern + ; + +patternQuantifier + : ASTERISK_ (reluctant = QUESTION_MARK_)? # zeroOrMoreQuantifier + | PLUS_ (reluctant = QUESTION_MARK_)? # oneOrMoreQuantifier + | QUESTION_MARK_ (reluctant = QUESTION_MARK_)? # zeroOrOneQuantifier + | LCURLY_ exactly = INTEGER_VALUE_ RCURLY_ (reluctant = QUESTION_MARK_)? # rangeQuantifier + | LCURLY_ (atLeast = INTEGER_VALUE_)? COMMA_ (atMost = INTEGER_VALUE_)? RCURLY_ ( + reluctant = QUESTION_MARK_ + )? # rangeQuantifier + ; + +updateAssignment + : identifier EQ_ expression + ; + +explainOption + : FORMAT_ value = (TEXT_ | GRAPHVIZ_ | JSON_) # explainFormat + | TYPE_ value = (LOGICAL_ | DISTRIBUTED_ | VALIDATE_ | IO_) # explainType + ; + +transactionMode + : ISOLATION_ LEVEL_ levelOfIsolation # isolationLevel + | READ_ accessMode = (ONLY_ | WRITE_) # transactionAccessMode + ; + +levelOfIsolation + : READ_ UNCOMMITTED_ # readUncommitted + | READ_ COMMITTED_ # readCommitted + | REPEATABLE_ READ_ # repeatableRead + | SERIALIZABLE_ # serializable + ; + +callArgument + : expression # positionalArgument + | identifier RDOUBLEARROW_ expression # namedArgument + ; + +pathElement + : identifier DOT_ identifier # qualifiedArgument + | identifier # unqualifiedArgument + ; + +pathSpecification + : pathElement (COMMA_ pathElement)* + ; + +functionSpecification + : FUNCTION_ functionDeclaration returnsClause routineCharacteristic* controlStatement + ; + +functionDeclaration + : qualifiedName LPAREN_ (parameterDeclaration (COMMA_ parameterDeclaration)*)? RPAREN_ + ; + +parameterDeclaration + : identifier? type + ; + +returnsClause + : RETURNS_ type + ; + +routineCharacteristic + : LANGUAGE_ identifier # languageCharacteristic + | NOT_? DETERMINISTIC_ # deterministicCharacteristic + | RETURNS_ NULL_ ON_ NULL_ INPUT_ # returnsNullOnNullInputCharacteristic + | CALLED_ ON_ NULL_ INPUT_ # calledOnNullInputCharacteristic + | SECURITY_ (DEFINER_ | INVOKER_) # securityCharacteristic + | COMMENT_ string_ # commentCharacteristic + ; + +controlStatement + : RETURN_ valueExpression # returnStatement + | SET_ identifier EQ_ expression # assignmentStatement + | CASE_ expression caseStatementWhenClause+ elseClause? END_ CASE_ # simpleCaseStatement + | CASE_ caseStatementWhenClause+ elseClause? END_ CASE_ # searchedCaseStatement + | IF_ expression THEN_ sqlStatementList elseIfClause* elseClause? END_ IF_ # ifStatement + | ITERATE_ identifier # iterateStatement + | LEAVE_ identifier # leaveStatement + | BEGIN_ (variableDeclaration SEMICOLON_)* sqlStatementList? END_ # compoundStatement + | (label = identifier COLON_)? LOOP_ sqlStatementList END_ LOOP_ # loopStatement + | (label = identifier COLON_)? WHILE_ expression DO_ sqlStatementList END_ WHILE_ # whileStatement + | (label = identifier COLON_)? REPEAT_ sqlStatementList UNTIL_ expression END_ REPEAT_ # repeatStatement + ; + +caseStatementWhenClause + : WHEN_ expression THEN_ sqlStatementList + ; + +elseIfClause + : ELSEIF_ expression THEN_ sqlStatementList + ; + +elseClause + : ELSE_ sqlStatementList + ; + +variableDeclaration + : DECLARE_ identifier (COMMA_ identifier)* type (DEFAULT_ valueExpression)? + ; + +sqlStatementList + : (controlStatement SEMICOLON_)+ + ; + +privilege + : CREATE_ + | SELECT_ + | DELETE_ + | INSERT_ + | UPDATE_ + ; + +qualifiedName + : identifier (DOT_ identifier)* + ; + +queryPeriod + : FOR_ rangeType AS_ OF_ end = valueExpression + ; + +rangeType + : TIMESTAMP_ + | VERSION_ + ; + +grantor + : principal # specifiedPrincipal + | CURRENT_USER_ # currentUserGrantor + | CURRENT_ROLE_ # currentRoleGrantor + ; + +principal + : identifier # unspecifiedPrincipal + | USER_ identifier # userPrincipal + | ROLE_ identifier # rolePrincipal + ; + +roles + : identifier (COMMA_ identifier)* + ; + +identifier + : IDENTIFIER_ # unquotedIdentifier + | QUOTED_IDENTIFIER_ # quotedIdentifier + | nonReserved # unquotedIdentifier + | BACKQUOTED_IDENTIFIER_ # backQuotedIdentifier + | DIGIT_IDENTIFIER_ # digitIdentifier + ; + +number + : MINUS_? DECIMAL_VALUE_ # decimalLiteral + | MINUS_? DOUBLE_VALUE_ # doubleLiteral + | MINUS_? INTEGER_VALUE_ # integerLiteral + ; + +authorizationUser + : identifier # identifierUser + | string_ # stringUser + ; + +nonReserved + // IMPORTANT: this rule must only contain tokens. Nested rules are not supported. See SqlParser.exitNonReserved + : ABSENT_ + | ADD_ + | ADMIN_ + | AFTER_ + | ALL_ + | ANALYZE_ + | ANY_ + | ARRAY_ + | ASC_ + | AT_ + | AUTHORIZATION_ + | BEGIN_ + | BERNOULLI_ + | BOTH_ + | CALL_ + | CALLED_ + | CASCADE_ + | CATALOG_ + | CATALOGS_ + | COLUMN_ + | COLUMNS_ + | COMMENT_ + | COMMIT_ + | COMMITTED_ + | CONDITIONAL_ + | COPARTITION_ + | COUNT_ + | CURRENT_ + | DATA_ + | DATE_ + | DAY_ + | DECLARE_ + | DEFAULT_ + | DEFINE_ + | DEFINER_ + | DENY_ + | DESC_ + | DESCRIPTOR_ + | DETERMINISTIC_ + | DISTRIBUTED_ + | DO_ + | DOUBLE_ + | ELSEIF_ + | EMPTY_ + | ENCODING_ + | ERROR_ + | EXCLUDING_ + | EXPLAIN_ + | FETCH_ + | FILTER_ + | FINAL_ + | FIRST_ + | FOLLOWING_ + | FORMAT_ + | FUNCTION_ + | FUNCTIONS_ + | GRACE_ + | GRANT_ + | GRANTED_ + | GRANTS_ + | GRAPHVIZ_ + | GROUPS_ + | HOUR_ + | IF_ + | IGNORE_ + | IMMEDIATE_ + | INCLUDING_ + | INITIAL_ + | INPUT_ + | INTERVAL_ + | INVOKER_ + | IO_ + | ITERATE_ + | ISOLATION_ + | JSON_ + | KEEP_ + | KEY_ + | KEYS_ + | LANGUAGE_ + | LAST_ + | LATERAL_ + | LEADING_ + | LEAVE_ + | LEVEL_ + | LIMIT_ + | LOCAL_ + | LOGICAL_ + | LOOP_ + | MAP_ + | MATCH_ + | MATCHED_ + | MATCHES_ + | MATCH_RECOGNIZE_ + | MATERIALIZED_ + | MEASURES_ + | MERGE_ + | MINUTE_ + | MONTH_ + | NESTED_ + | NEXT_ + | NFC_ + | NFD_ + | NFKC_ + | NFKD_ + | NO_ + | NONE_ + | NULLIF_ + | NULLS_ + | OBJECT_ + | OF_ + | OFFSET_ + | OMIT_ + | ONE_ + | ONLY_ + | OPTION_ + | ORDINALITY_ + | OUTPUT_ + | OVER_ + | OVERFLOW_ + | PARTITION_ + | PARTITIONS_ + | PASSING_ + | PAST_ + | PATH_ + | PATTERN_ + | PER_ + | PERIOD_ + | PERMUTE_ + | PLAN_ + | POSITION_ + | PRECEDING_ + | PRECISION_ + | PRIVILEGES_ + | PROPERTIES_ + | PRUNE_ + | QUOTES_ + | RANGE_ + | READ_ + | REFRESH_ + | RENAME_ + | REPEAT_ + | REPEATABLE_ + | REPLACE_ + | RESET_ + | RESPECT_ + | RESTRICT_ + | RETURN_ + | RETURNING_ + | RETURNS_ + | REVOKE_ + | ROLE_ + | ROLES_ + | ROLLBACK_ + | ROW_ + | ROWS_ + | RUNNING_ + | SCALAR_ + | SCHEMA_ + | SCHEMAS_ + | SECOND_ + | SECURITY_ + | SEEK_ + | SERIALIZABLE_ + | SESSION_ + | SET_ + | SETS_ + | SHOW_ + | SOME_ + | START_ + | STATS_ + | SUBSET_ + | SUBSTRING_ + | SYSTEM_ + | TABLES_ + | TABLESAMPLE_ + | TEXT_ + | TEXT_STRING_ + | TIES_ + | TIME_ + | TIMESTAMP_ + | TO_ + | TRAILING_ + | TRANSACTION_ + | TRUNCATE_ + | TRY_CAST_ + | TYPE_ + | UNBOUNDED_ + | UNCOMMITTED_ + | UNCONDITIONAL_ + | UNIQUE_ + | UNKNOWN_ + | UNMATCHED_ + | UNTIL_ + | UPDATE_ + | USE_ + | USER_ + | UTF16_ + | UTF32_ + | UTF8_ + | VALIDATE_ + | VALUE_ + | VERBOSE_ + | VERSION_ + | VIEW_ + | WHILE_ + | WINDOW_ + | WITHIN_ + | WITHOUT_ + | WORK_ + | WRAPPER_ + | WRITE_ + | YEAR_ + | ZONE_ + ; \ No newline at end of file diff --git a/src/autocomplete/databases/trino/index.ts b/src/autocomplete/databases/trino/index.ts new file mode 100644 index 000000000..7a5661aa9 --- /dev/null +++ b/src/autocomplete/databases/trino/index.ts @@ -0,0 +1,71 @@ +import { + CursorPosition, + SqlAutocompleteResult, + TableOrViewSuggestion, +} from '../../shared/autocomplete-types'; +import {trinoAutocompleteData} from './trino-autocomplete'; +import {parseQuery, parseQueryWithoutCursor} from '../../shared/autocomplete'; +import {separateQueryAndCursor} from '../../shared/parse-query-with-cursor'; +import { + ExtractStatementPositionsResult, + extractStatementPositionsFromQuery, +} from '../../shared/extract-statement-positions-from-query'; +import {TrinoParser} from './generated/TrinoParser'; + +export interface TrinoAutocompleteResult extends SqlAutocompleteResult { + suggestViewsOrTables?: TableOrViewSuggestion; + suggestSchemas?: true; + suggestCatalogs?: true; + + // TODO-TRINO: enrich autocomplete + suggestAggregateFunctions?: undefined; + suggestFunctions?: undefined; + suggestColumns?: undefined; + suggestColumnAliases?: undefined; + suggestDatabases?: undefined; +} + +export function parseTrinoQueryWithoutCursor( + query: string, +): Pick { + return parseQueryWithoutCursor( + trinoAutocompleteData.Lexer, + trinoAutocompleteData.Parser, + trinoAutocompleteData.tokenDictionary.SPACE, + trinoAutocompleteData.getParseTree, + query, + ); +} + +export function parseTrinoQuery(query: string, cursor: CursorPosition): TrinoAutocompleteResult { + return parseQuery( + trinoAutocompleteData.Lexer, + trinoAutocompleteData.Parser, + trinoAutocompleteData.tokenDictionary.SPACE, + trinoAutocompleteData.ignoredTokens, + trinoAutocompleteData.rulesToVisit, + trinoAutocompleteData.getParseTree, + trinoAutocompleteData.enrichAutocompleteResult, + query, + cursor, + ); +} + +export function parseTrinoQueryWithCursor(queryWithCursor: string): TrinoAutocompleteResult { + return parseTrinoQuery(...separateQueryAndCursor(queryWithCursor)); +} + +export function extractTrinoStatementPositionsFromQuery( + query: string, +): ExtractStatementPositionsResult { + return extractStatementPositionsFromQuery( + query, + trinoAutocompleteData.Lexer, + trinoAutocompleteData.Parser, + trinoAutocompleteData.tokenDictionary.SPACE, + [trinoAutocompleteData.tokenDictionary.SPACE], + trinoAutocompleteData.tokenDictionary.SEMICOLON, + TrinoParser.RULE_statement, + trinoAutocompleteData.getParseTree, + ); +} diff --git a/src/autocomplete/databases/trino/tests/alter/alter-column.test.ts b/src/autocomplete/databases/trino/tests/alter/alter-column.test.ts new file mode 100644 index 000000000..0dc8d4d69 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/alter/alter-column.test.ts @@ -0,0 +1,58 @@ +// TODO-TRINO: Add more tests +test('should not fail jest', () => {}); + +// TODO-TRINO: support column suggestions +// test('should suggest view name after ALTER COLUMN', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER VIEW test_view ALTER COLUMN |', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_view'}]}; +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +// TODO-TRINO: support column suggestions +// test('should suggest view name after ALTER COLUMN between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; ALTER VIEW test_view ALTER COLUMN | ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_view'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +// TODO-TRINO: support column suggestions +// test('should suggest table name after ALTER COLUMN', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE test_table ALTER COLUMN |', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +// TODO-TRINO: support column suggestions +// test('should suggest table name after ALTER COLUMN between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; ALTER TABLE test_table ALTER COLUMN | ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +// TODO-TRINO: add more tests +// test('should not report errors', () => { +// const autocompleteResult = parseTrinoQueryWithoutCursor( +// 'ALTER TABLE test_table ALTER COLUMN id SET DEFAULT 1;', +// ); +// +// expect(autocompleteResult.errors).toHaveLength(0); +// }); +// +// test('should not report errors', () => { +// const autocompleteResult = parseTrinoQueryWithoutCursor( +// 'ALTER VIEW test_view ALTER COLUMN id SET DEFAULT;', +// ); +// +// expect(autocompleteResult.errors).toHaveLength(0); +// }); diff --git a/src/autocomplete/databases/trino/tests/alter/alter-schema.test.ts b/src/autocomplete/databases/trino/tests/alter/alter-schema.test.ts new file mode 100644 index 000000000..b9e1fffa2 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/alter/alter-schema.test.ts @@ -0,0 +1,19 @@ +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; + +test('should suggest after ALTER SCHEMA', () => { + const autocompleteResult = parseTrinoQueryWithCursor('ALTER SCHEMA |'); + + const keywordSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordSuggestion); + + // TODO-TRINO: support schema suggestions + // expect(autocompleteResult.suggestSchemas).toEqual(true); +}); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'ALTER SCHEMA test_schema RENAME TO test_schema_2;', + ); + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/alter/alter.test.ts b/src/autocomplete/databases/trino/tests/alter/alter.test.ts new file mode 100644 index 000000000..6e53afd7a --- /dev/null +++ b/src/autocomplete/databases/trino/tests/alter/alter.test.ts @@ -0,0 +1,80 @@ +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parseTrinoQueryWithCursor} from '../../index'; + +test('should suggest keywords after ALTER', () => { + const autocompleteResult = parseTrinoQueryWithCursor('ALTER |'); + const keywords: KeywordSuggestion[] = [ + {value: 'VIEW'}, + {value: 'MATERIALIZED'}, + {value: 'TABLE'}, + {value: 'SCHEMA'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest VIEW after ALTER MATERIALIZED', () => { + const autocompleteResult = parseTrinoQueryWithCursor('ALTER MATERIALIZED |'); + const keywords: KeywordSuggestion[] = [{value: 'VIEW'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest views after ALTER MATERIALIZED VIEW', () => { + const autocompleteResult = parseTrinoQueryWithCursor('ALTER MATERIALIZED VIEW |'); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest keywords after TABLE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('ALTER TABLE |'); + + const keywords: KeywordSuggestion[] = [{value: 'IF'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywords); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables after ALTER TABLE between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'DROP VIEW before_view; ALTER TABLE | ; DROP VIEW after_view;', + ); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest keywords after TABLE 2', () => { + const autocompleteResult = parseTrinoQueryWithCursor('ALTER TABLE test_table |'); + + const keywords: KeywordSuggestion[] = [ + {value: 'EXECUTE'}, + {value: 'SET'}, + {value: 'ALTER'}, + {value: 'DROP'}, + {value: 'RENAME'}, + {value: 'ADD'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest tables after ALTER VIEW', () => { + const autocompleteResult = parseTrinoQueryWithCursor('ALTER VIEW |'); + + const keywords: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywords); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables after ALTER VIEW between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; ALTER VIEW | ; ALTER TABLE after_table DROP COLUMN id;', + ); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); diff --git a/src/autocomplete/databases/trino/tests/comment/comment-table.test.ts b/src/autocomplete/databases/trino/tests/comment/comment-table.test.ts new file mode 100644 index 000000000..e589404d6 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/comment/comment-table.test.ts @@ -0,0 +1,16 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; + +// TODO Get context of table in COMMENT statement +test.skip('should suggest properly after COMMENT ON CONSTRAINT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('COMMENT ON TABLE |'); + + expect(autocompleteResult.suggestKeywords).toEqual([]); + // expect(autocompleteResult.suggestConstraints).toEqual(true); +}); + +test('should not report errors on full statement', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + "COMMENT ON TABLE test_constraint IS 'test_comment';", + ); + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/create/create-catalog.test.ts b/src/autocomplete/databases/trino/tests/create/create-catalog.test.ts new file mode 100644 index 000000000..43e6ca14a --- /dev/null +++ b/src/autocomplete/databases/trino/tests/create/create-catalog.test.ts @@ -0,0 +1,16 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after CATALOG', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE CATALOG |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'IF'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after CATALOG name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE CATALOG test_catalog |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'USING'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); diff --git a/src/autocomplete/databases/trino/tests/create/create-function.test.ts b/src/autocomplete/databases/trino/tests/create/create-function.test.ts new file mode 100644 index 000000000..0aeb9c2fe --- /dev/null +++ b/src/autocomplete/databases/trino/tests/create/create-function.test.ts @@ -0,0 +1,95 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after FUNCTION', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE FUNCTION |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after function name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE FUNCTION test_function |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after argument', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'CREATE FUNCTION test_function (test_argument |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ARRAY'}, + {value: 'ROW'}, + {value: 'INTERVAL'}, + {value: 'TIMESTAMP'}, + {value: 'TIME'}, + {value: 'DOUBLE'}, + {value: 'MAP'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after arguments', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'CREATE FUNCTION test_function (test_argument CHARACTER) |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'RETURNS'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after RETURNS', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'CREATE FUNCTION test_function (test_argument CHARACTER) RETURNS |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ROW'}, + {value: 'INTERVAL'}, + {value: 'TIMESTAMP'}, + {value: 'TIME'}, + {value: 'DOUBLE'}, + {value: 'ARRAY'}, + {value: 'MAP'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after RETURNS and a type', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'CREATE FUNCTION test_function (test_argument CHARACTER) RETURNS TEXT |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ARRAY'}, + {value: 'RETURN'}, + {value: 'SET'}, + {value: 'CASE'}, + {value: 'IF'}, + {value: 'ITERATE'}, + {value: 'LEAVE'}, + {value: 'BEGIN'}, + {value: 'LOOP'}, + {value: 'WHILE'}, + {value: 'REPEAT'}, + {value: 'LANGUAGE'}, + {value: 'NOT'}, + {value: 'DETERMINISTIC'}, + {value: 'RETURNS'}, + {value: 'CALLED'}, + {value: 'SECURITY'}, + {value: 'COMMENT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'CREATE FUNCTION example.default.meaning_of_life() RETURNS bigint BEGIN RETURN 42; END;', + ); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/create/create-role.test.ts b/src/autocomplete/databases/trino/tests/create/create-role.test.ts new file mode 100644 index 000000000..ad20d4371 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/create/create-role.test.ts @@ -0,0 +1,37 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after ROLE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE ROLE |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after role name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE ROLE test_role |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'IN'}, {value: 'WITH'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +// TODO-TRINO: Add more tests +// test('should suggest properly after WITH', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('CREATE ROLE test_role WITH |'); +// +// const keywordsSuggestion: KeywordSuggestion[] = [ +// {value: 'PASSWORD'}, +// {value: 'ENCRYPTED'}, +// {value: 'UNENCRYPTED'}, +// {value: 'INHERIT'}, +// {value: 'CONNECTION'}, +// {value: 'VALID'}, +// {value: 'GROUP'}, +// {value: 'USER'}, +// {value: 'ROLE'}, +// {value: 'SYSID'}, +// {value: 'ADMIN'}, +// {value: 'IN'}, +// ]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +// }); diff --git a/src/autocomplete/databases/trino/tests/create/create-schema.test.ts b/src/autocomplete/databases/trino/tests/create/create-schema.test.ts new file mode 100644 index 000000000..8f233263f --- /dev/null +++ b/src/autocomplete/databases/trino/tests/create/create-schema.test.ts @@ -0,0 +1,16 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after SCHEMA', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE SCHEMA |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'IF'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after schema name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE SCHEMA test_schema |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'WITH'}, {value: 'AUTHORIZATION'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); diff --git a/src/autocomplete/databases/trino/tests/create/create-table.test.ts b/src/autocomplete/databases/trino/tests/create/create-table.test.ts new file mode 100644 index 000000000..5f12aea4e --- /dev/null +++ b/src/autocomplete/databases/trino/tests/create/create-table.test.ts @@ -0,0 +1,64 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after TABLE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE TABLE |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'IF'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support table names properly + // expect(autocompleteResult.suggestViewsOrTables).toBeUndefined(); +}); + +test('should suggest properly after table name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE TABLE test_table |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'AS'}, + {value: 'WITH'}, + {value: 'COMMENT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after the first column', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE TABLE test_table (test_column |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ROW'}, + {value: 'INTERVAL'}, + {value: 'TIMESTAMP'}, + {value: 'TIME'}, + {value: 'DOUBLE'}, + {value: 'ARRAY'}, + {value: 'MAP'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after the second column', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'CREATE TABLE test_table (test_column TEXT, test_column_2 |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ROW'}, + {value: 'INTERVAL'}, + {value: 'TIMESTAMP'}, + {value: 'TIME'}, + {value: 'DOUBLE'}, + {value: 'ARRAY'}, + {value: 'MAP'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after the columns', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'CREATE TABLE test_table (test_column TEXT, test_column_2 TEXT) |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'WITH'}, {value: 'COMMENT'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); diff --git a/src/autocomplete/databases/trino/tests/create/create.test.ts b/src/autocomplete/databases/trino/tests/create/create.test.ts new file mode 100644 index 000000000..af6d5c304 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/create/create.test.ts @@ -0,0 +1,18 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after CREATE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('CREATE |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ROLE'}, + {value: 'FUNCTION'}, + {value: 'OR'}, + {value: 'VIEW'}, + {value: 'MATERIALIZED'}, + {value: 'TABLE'}, + {value: 'SCHEMA'}, + {value: 'CATALOG'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); diff --git a/src/autocomplete/databases/trino/tests/delete/delete.test.ts b/src/autocomplete/databases/trino/tests/delete/delete.test.ts new file mode 100644 index 000000000..3f3b5698b --- /dev/null +++ b/src/autocomplete/databases/trino/tests/delete/delete.test.ts @@ -0,0 +1,75 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after DELETE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DELETE |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'FROM'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after FROM', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DELETE FROM |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest properly after table name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DELETE FROM test_table |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'WHERE'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after WHERE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DELETE FROM test_table WHERE |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after WHERE with alias', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DELETE FROM test_table t WHERE |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); diff --git a/src/autocomplete/databases/trino/tests/drop/drop-catalog.test.ts b/src/autocomplete/databases/trino/tests/drop/drop-catalog.test.ts new file mode 100644 index 000000000..b49002bf0 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/drop/drop-catalog.test.ts @@ -0,0 +1,17 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after DROP', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP CATALOG |'); + + const keywords: KeywordSuggestion[] = [{value: 'IF'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywords); + + // TODO-TRINO: support catalogs + // expect(autocompleteResult.suggestCatalogs).toEqual(true); +}); + +test('should not report errors on full statement', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('DROP CATALOG test_catalog;'); + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/drop/drop-role.test.ts b/src/autocomplete/databases/trino/tests/drop/drop-role.test.ts new file mode 100644 index 000000000..93b4e550e --- /dev/null +++ b/src/autocomplete/databases/trino/tests/drop/drop-role.test.ts @@ -0,0 +1,16 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after DROP ROLE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP ROLE |'); + + const keywordSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordSuggestion); + + // expect(autocompleteResult.suggestRoles).toEqual(true); +}); + +test('should not report an error of a full statement', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('DROP ROLE test_role;'); + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/drop/drop-schema.test.ts b/src/autocomplete/databases/trino/tests/drop/drop-schema.test.ts new file mode 100644 index 000000000..f465dd49a --- /dev/null +++ b/src/autocomplete/databases/trino/tests/drop/drop-schema.test.ts @@ -0,0 +1,17 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after DROP SCHEMA', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP SCHEMA |'); + + const keywords: KeywordSuggestion[] = [{value: 'IF'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywords); + + // TODO-TRINO: support schemas + // expect(autocompleteResult.suggestSchemas).toEqual(true); +}); + +test('should not report errors on full statement', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('DROP SCHEMA test_schema;'); + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/drop/drop.test.ts b/src/autocomplete/databases/trino/tests/drop/drop.test.ts new file mode 100644 index 000000000..5b6cbdadc --- /dev/null +++ b/src/autocomplete/databases/trino/tests/drop/drop.test.ts @@ -0,0 +1,71 @@ +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; + +test('should suggest keywords after DROP', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP |'); + const keywords: KeywordSuggestion[] = [ + {value: 'ROLE'}, + {value: 'FUNCTION'}, + {value: 'VIEW'}, + {value: 'MATERIALIZED'}, + {value: 'TABLE'}, + {value: 'SCHEMA'}, + {value: 'CATALOG'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest VIEW after DROP MATERIALIZED', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP MATERIALIZED |'); + const keywords: KeywordSuggestion[] = [{value: 'VIEW'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest views after DROP MATERIALIZED VIEW', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP MATERIALIZED VIEW |'); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables after DROP TABLE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP TABLE |'); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest views after DROP VIEW', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP VIEW |'); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables after multiple drop statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP VIEW test_view; DROP TABLE |'); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest views after multiple drop statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor('DROP TABLE test_table; DROP VIEW |'); + + // TODO-TRINO: decouple views from tables + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should not report error on DROP TABLE', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('DROP TABLE test_table;'); + + expect(autocompleteResult.errors).toHaveLength(0); +}); + +test('should not report error on DROP VIEW', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('DROP VIEW test_view;'); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/empty-query.test.ts b/src/autocomplete/databases/trino/tests/empty-query.test.ts new file mode 100644 index 000000000..fd5a0a69c --- /dev/null +++ b/src/autocomplete/databases/trino/tests/empty-query.test.ts @@ -0,0 +1,43 @@ +import {parseTrinoQueryWithCursor} from '../index'; +import {KeywordSuggestion} from '../../../shared/autocomplete-types'; + +test('should suggest properly for an empty query', () => { + const autocompleteResult = parseTrinoQueryWithCursor('|'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'WITH'}, + {value: 'SELECT'}, + {value: 'TABLE'}, + {value: 'VALUES'}, + {value: 'USE'}, + {value: 'CREATE'}, + {value: 'DROP'}, + {value: 'ALTER'}, + {value: 'INSERT'}, + {value: 'DELETE'}, + {value: 'TRUNCATE'}, + {value: 'COMMENT'}, + {value: 'ANALYZE'}, + {value: 'REFRESH'}, + {value: 'CALL'}, + {value: 'GRANT'}, + {value: 'REVOKE'}, + {value: 'SET'}, + {value: 'DENY'}, + {value: 'SHOW'}, + {value: 'EXPLAIN'}, + {value: 'DESCRIBE'}, + {value: 'DESC'}, + {value: 'RESET'}, + {value: 'START'}, + {value: 'COMMIT'}, + {value: 'ROLLBACK'}, + {value: 'PREPARE'}, + {value: 'DEALLOCATE'}, + {value: 'EXECUTE'}, + {value: 'UPDATE'}, + {value: 'MERGE'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + expect(autocompleteResult.suggestTemplates).toEqual(true); +}); diff --git a/src/autocomplete/databases/trino/tests/explain/explain.test.ts b/src/autocomplete/databases/trino/tests/explain/explain.test.ts new file mode 100644 index 000000000..b45fb748f --- /dev/null +++ b/src/autocomplete/databases/trino/tests/explain/explain.test.ts @@ -0,0 +1,43 @@ +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseTrinoQueryWithCursor} from '../../index'; + +test('should suggest SELECT and contain suggestTemplates with EXPLAIN prefix', () => { + const autocompleteResult = parseTrinoQueryWithCursor('EXPLAIN |'); + const keywordSuggestion: KeywordSuggestion[] = [ + {value: 'ANALYZE'}, + {value: 'WITH'}, + {value: 'SELECT'}, + {value: 'TABLE'}, + {value: 'VALUES'}, + {value: 'USE'}, + {value: 'CREATE'}, + {value: 'DROP'}, + {value: 'ALTER'}, + {value: 'INSERT'}, + {value: 'DELETE'}, + {value: 'TRUNCATE'}, + {value: 'COMMENT'}, + {value: 'REFRESH'}, + {value: 'CALL'}, + {value: 'GRANT'}, + {value: 'REVOKE'}, + {value: 'SET'}, + {value: 'DENY'}, + {value: 'SHOW'}, + {value: 'EXPLAIN'}, + {value: 'DESCRIBE'}, + {value: 'DESC'}, + {value: 'RESET'}, + {value: 'START'}, + {value: 'COMMIT'}, + {value: 'ROLLBACK'}, + {value: 'PREPARE'}, + {value: 'DEALLOCATE'}, + {value: 'EXECUTE'}, + {value: 'UPDATE'}, + {value: 'MERGE'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordSuggestion); + expect(autocompleteResult.suggestTemplates).toEqual(true); +}); diff --git a/src/autocomplete/databases/trino/tests/extract-statement-positions.test.ts b/src/autocomplete/databases/trino/tests/extract-statement-positions.test.ts new file mode 100644 index 000000000..be3cfd165 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/extract-statement-positions.test.ts @@ -0,0 +1,295 @@ +import { + ExtractStatementPositionsResult, + StatementExtractionStrategy, +} from '../../../shared/extract-statement-positions-from-query'; +import {extractTrinoStatementPositionsFromQuery} from '../index'; + +test('should extract statements from single query', () => { + const query = 'SELECT * FROM art WHERE id = 1;'; + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 31, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id = 1;'); +}); + +test('should extract statements from single query with block comment inside', () => { + const query = 'SELECT * FROM /* comment inside */ art WHERE id = 1;'; + const result = extractTrinoStatementPositionsFromQuery(query); + + expect(result).toEqual({ + statementPositions: [ + { + startIndex: 0, + endIndex: 52, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM /* comment inside */ art WHERE id = 1;'); +}); + +test('should extract statements from single query with inlined comment inside', () => { + const query = `SELECT * FROM + art -- comment here + WHERE id = 1;`; + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 67, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe( + `SELECT * FROM + art -- comment here + WHERE id = 1;`, + ); +}); + +test('should extract statement from query without inlined comment at the end', () => { + const query = 'SELECT * FROM art WHERE id = 1; -- comment here'; + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 31, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id = 1;'); +}); + +test('should extract unfinished statement', () => { + const query = 'SELECT * FROM art WHERE id ='; + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 28, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id ='); +}); + +test('should extract finished and unfinished statements', () => { + const query = `SELECT * FROM art WHERE id = 1; SELECT * FROM art WHERE id =`; + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 31, + }, + { + startIndex: 32, + endIndex: 60, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id = 1;'); + expect( + query.slice( + result.statementPositions[1]?.startIndex, + result.statementPositions[1]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id ='); +}); + +test('should not extract any statement from comments', () => { + const query = ` + -- SELECT * FROM art WHERE id = 1; + /* SELECT * FROM art WHERE id = 1; */ + `; + const result = extractTrinoStatementPositionsFromQuery(query); + + expect(result).toEqual({statementPositions: [], strategy: StatementExtractionStrategy.Tokens}); +}); + +test('should ignore empty statements', () => { + const query = `;;;;;;`; + const result = extractTrinoStatementPositionsFromQuery(query); + + expect(result).toEqual({statementPositions: [], strategy: StatementExtractionStrategy.Tokens}); +}); + +test('should ignore newlines', () => { + const query = '\n\n\n\n'; + const result = extractTrinoStatementPositionsFromQuery(query); + + expect(result).toEqual({statementPositions: [], strategy: StatementExtractionStrategy.Tokens}); +}); + +test('should extract statements from multiple query', () => { + const query = 'SELECT * FROM art WHERE id = 1;\nSELECT * FROM art2 WHERE id = 2;'; + + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 31, + }, + { + startIndex: 32, + endIndex: 64, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id = 1;'); + expect( + query.slice( + result.statementPositions[1]?.startIndex, + result.statementPositions[1]?.endIndex, + ), + ).toBe('SELECT * FROM art2 WHERE id = 2;'); +}); + +test('should extract three statements from query', () => { + const query = + 'SELECT * FROM art WHERE id = 1;\nSELECT * FROM art2 WHERE id = 2;/* comment inside */SELECT 1;'; + + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 31, + }, + { + startIndex: 32, + endIndex: 64, + }, + { + startIndex: 84, + endIndex: 93, + }, + ], + strategy: StatementExtractionStrategy.Autocomplete, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id = 1;'); + expect( + query.slice( + result.statementPositions[1]?.startIndex, + result.statementPositions[1]?.endIndex, + ), + ).toBe('SELECT * FROM art2 WHERE id = 2;'); + expect( + query.slice( + result.statementPositions[2]?.startIndex, + result.statementPositions[2]?.endIndex, + ), + ).toBe('SELECT 1;'); +}); + +test('should fallback to tokens when query is not valid', () => { + const query = 'SELECT * FROM art WHERE id = 1;\nsel asd aaasdjalkdj'; + + const result = extractTrinoStatementPositionsFromQuery(query); + const expectedResult: ExtractStatementPositionsResult = { + statementPositions: [ + { + startIndex: 0, + endIndex: 31, + }, + { + startIndex: 32, + endIndex: 51, + }, + ], + strategy: StatementExtractionStrategy.Tokens, + }; + + expect(result).toEqual(expectedResult); + + expect( + query.slice( + result.statementPositions[0]?.startIndex, + result.statementPositions[0]?.endIndex, + ), + ).toBe('SELECT * FROM art WHERE id = 1;'); + expect( + query.slice( + result.statementPositions[1]?.startIndex, + result.statementPositions[1]?.endIndex, + ), + ).toBe('sel asd aaasdjalkdj'); +}); diff --git a/src/autocomplete/databases/trino/tests/grant/grant.test.ts b/src/autocomplete/databases/trino/tests/grant/grant.test.ts new file mode 100644 index 000000000..a4ca069e6 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/grant/grant.test.ts @@ -0,0 +1,93 @@ +// TODO-TRINO: add more tests +test('should not fail jest', () => {}); + +// test('should suggest keywords after GRANT', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('GRANT |'); +// +// const keywords: KeywordSuggestion[] = [ +// {value: 'SELECT'}, +// {value: 'REFERENCES'}, +// {value: 'CREATE'}, +// {value: 'ALL'}, +// ]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('GRANT SELECT |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'TO'}, {value: 'ON'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT ON', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('GRANT SELECT ON |'); +// +// const keywords: KeywordSuggestion[] = [ +// {value: 'TABLE'}, +// {value: 'SEQUENCE'}, +// {value: 'FOREIGN'}, +// {value: 'FUNCTION'}, +// {value: 'PROCEDURE'}, +// {value: 'ROUTINE'}, +// {value: 'DATABASE'}, +// {value: 'DOMAIN'}, +// {value: 'LANGUAGE'}, +// {value: 'LARGE'}, +// {value: 'SCHEMA'}, +// {value: 'TABLESPACE'}, +// {value: 'TYPE'}, +// {value: 'ALL'}, +// ]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT ON table', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('GRANT SELECT ON TABLE test_table |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'TO'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT ON table TO', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'GRANT SELECT ON TABLE test_table TO |', +// ); +// +// const keywords: KeywordSuggestion[] = [{value: 'GROUP'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT ON table TO user', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'GRANT SELECT ON TABLE test_table TO test_user |', +// ); +// +// const keywords: KeywordSuggestion[] = [{value: 'WITH'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest sequences', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('GRANT ALL ON SEQUENCE |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'TO'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest schemas', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('GRANT ALL ON SCHEMA |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'TO'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// +// expect(autocompleteResult.suggestSchemas).toEqual(true); +// }); +// +// test('should suggest databases', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('GRANT ALL ON DATABASE |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'TO'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// +// expect(autocompleteResult.suggestDatabases).toEqual(true); +// }); diff --git a/src/autocomplete/databases/trino/tests/insert/insert.test.ts b/src/autocomplete/databases/trino/tests/insert/insert.test.ts new file mode 100644 index 000000000..7ee8324bf --- /dev/null +++ b/src/autocomplete/databases/trino/tests/insert/insert.test.ts @@ -0,0 +1,250 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after INSERT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'INTO'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after INTO', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT INTO |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables after INSERT INTO between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; INSERT INTO | ; ALTER TABLE after_table DROP COLUMN id;', + ); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest properly after table name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT INTO test_table |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'WITH'}, + {value: 'SELECT'}, + {value: 'TABLE'}, + {value: 'VALUES'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after VALUES', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT INTO test_table VALUES |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after VALUES with a bracket', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT INTO test_table VALUES ( |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + {value: 'WITH'}, + {value: 'SELECT'}, + {value: 'TABLE'}, + {value: 'VALUES'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after VALUES with a bracket after a value', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'INSERT INTO test_table VALUES ("test", |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after VALUES contents', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'INSERT INTO test_table VALUES ("test") | ', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'AT'}, + {value: '*'}, + {value: 'OR'}, + {value: 'AND'}, + {value: 'NOT'}, + {value: 'BETWEEN'}, + {value: 'IN'}, + {value: 'LIKE'}, + {value: 'IS'}, + {value: 'EXCEPT'}, + {value: 'UNION'}, + {value: 'INTERSECT'}, + {value: 'FETCH'}, + {value: 'LIMIT'}, + {value: 'OFFSET'}, + {value: 'ORDER'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after table name with a bracket', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT INTO test_table( | '); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'SELECT'}, + {value: 'TABLE'}, + {value: 'VALUES'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +}); + +// TODO-TRINO: support column suggestions +// test('should suggest table name for column between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; INSERT INTO test_table(| ; ALTER TABLE after_table DROP COLUMN id', +// ); +// +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +test('should suggest properly after the first column', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT INTO test_table(test_column, | '); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after table with columns', () => { + const autocompleteResult = parseTrinoQueryWithCursor('INSERT INTO test_table(test_column) | '); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'WITH'}, + {value: 'SELECT'}, + {value: 'TABLE'}, + {value: 'VALUES'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'INSERT INTO test_table(id) VALUES(1);', + ); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/multiple-statements.test.ts b/src/autocomplete/databases/trino/tests/multiple-statements.test.ts new file mode 100644 index 000000000..55c3c824b --- /dev/null +++ b/src/autocomplete/databases/trino/tests/multiple-statements.test.ts @@ -0,0 +1,11 @@ +import {parseTrinoQueryWithoutCursor} from '../index'; + +test('should not report errors on multiple statements', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor(` + SELECT * FROM test_table; + SELECT * FROM test_table; + SELECT * FROM test_table; + `); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/newline.test.ts b/src/autocomplete/databases/trino/tests/newline.test.ts new file mode 100644 index 000000000..957ff7992 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/newline.test.ts @@ -0,0 +1,13 @@ +import {parseTrinoQueryWithoutCursor} from '../index'; + +test('should not report errors with newlines \n', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('SELECT *\n\n\nFROM test_table'); + + expect(autocompleteResult.errors).toHaveLength(0); +}); + +test('should not report errors with newlines \r\n', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('SELECT *\r\n\r\n\r\nFROM test_table'); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/revoke/revoke.test.ts b/src/autocomplete/databases/trino/tests/revoke/revoke.test.ts new file mode 100644 index 000000000..53cf1357e --- /dev/null +++ b/src/autocomplete/databases/trino/tests/revoke/revoke.test.ts @@ -0,0 +1,102 @@ +// TODO-TRINO: add more tests + +test('should not fail jest', () => {}); + +// test('should suggest keywords after REVOKE', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('REVOKE |'); +// +// const keywords: KeywordSuggestion[] = [ +// {value: 'ADMIN'}, +// {value: 'SELECT'}, +// {value: 'REFERENCES'}, +// {value: 'CREATE'}, +// {value: 'GRANT'}, +// {value: 'ALL'}, +// ]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('REVOKE SELECT |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'FROM'}, {value: 'ON'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT ON', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('REVOKE SELECT ON |'); +// +// const keywords: KeywordSuggestion[] = [ +// {value: 'TABLE'}, +// {value: 'SEQUENCE'}, +// {value: 'FOREIGN'}, +// {value: 'FUNCTION'}, +// {value: 'PROCEDURE'}, +// {value: 'ROUTINE'}, +// {value: 'DATABASE'}, +// {value: 'DOMAIN'}, +// {value: 'LANGUAGE'}, +// {value: 'LARGE'}, +// {value: 'SCHEMA'}, +// {value: 'TABLESPACE'}, +// {value: 'TYPE'}, +// {value: 'ALL'}, +// ]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT ON table', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'REVOKE SELECT ON TABLE test_table |', +// ); +// +// const keywords: KeywordSuggestion[] = [{value: 'FROM'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest keywords after SELECT ON table TO', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'REVOKE SELECT ON TABLE test_table FROM |', +// ); +// +// const keywords: KeywordSuggestion[] = [{value: 'GROUP'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// +// // expect(autocompleteResult.suggestRoles).toEqual(true); +// }); +// +// test('should suggest keywords after SELECT ON table TO user', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'REVOKE SELECT ON TABLE test_table FROM test_user |', +// ); +// +// const keywords: KeywordSuggestion[] = [{value: 'CASCADE'}, {value: 'RESTRICT'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// }); +// +// test('should suggest sequences', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('REVOKE ALL ON SEQUENCE |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'FROM'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// +// // expect(autocompleteResult.suggestSequences).toEqual(true); +// }); +// +// test('should suggest schemas', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('REVOKE ALL ON SCHEMA |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'FROM'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// +// expect(autocompleteResult.suggestSchemas).toEqual(true); +// }); +// +// test('should suggest databases', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('REVOKE ALL ON DATABASE |'); +// +// const keywords: KeywordSuggestion[] = [{value: 'FROM'}]; +// expect(autocompleteResult.suggestKeywords).toEqual(keywords); +// +// expect(autocompleteResult.suggestDatabases).toEqual(true); +// }); diff --git a/src/autocomplete/databases/trino/tests/select/group-by-clause.test.ts b/src/autocomplete/databases/trino/tests/select/group-by-clause.test.ts new file mode 100644 index 000000000..35b944e80 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/select/group-by-clause.test.ts @@ -0,0 +1,249 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after GROUP', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table as t GROUP |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'BY'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after GROUP BY', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'SELECT count(*) as count, test_column t1 FROM test_table as t GROUP BY |', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ALL'}, + {value: 'DISTINCT'}, + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + {value: 'ROLLUP'}, + {value: 'CUBE'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: suggest functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); + +test('should suggest properly after GROUP BY between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; ' + + 'SELECT count(*) as count, test_column t1 FROM test_table as t GROUP BY | ; ' + + 'ALTER TABLE after_table DROP COLUMN id;', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ALL'}, + {value: 'DISTINCT'}, + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + {value: 'ROLLUP'}, + {value: 'CUBE'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); + +test('should suggest properly after GROUP BY in nested statement', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'SELECT id as id1 FROM (SELECT count(*) as count, test_column t1 FROM test_table as t GROUP BY |', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ALL'}, + {value: 'DISTINCT'}, + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + {value: 'ROLLUP'}, + {value: 'CUBE'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); + +test('should suggest properly after GROUP BY between statements in nested statement', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; ' + + 'SELECT id as id1 FROM (SELECT count(*) as count, test_column t1 FROM test_table as t GROUP BY | ; ' + + 'ALTER TABLE after_table DROP COLUMN id;', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'ALL'}, + {value: 'DISTINCT'}, + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + {value: 'ROLLUP'}, + {value: 'CUBE'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); diff --git a/src/autocomplete/databases/trino/tests/select/join-clause.test.ts b/src/autocomplete/databases/trino/tests/select/join-clause.test.ts new file mode 100644 index 000000000..7b0a902bb --- /dev/null +++ b/src/autocomplete/databases/trino/tests/select/join-clause.test.ts @@ -0,0 +1,205 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest keywords after INNER', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table INNER |'); + const keywords: KeywordSuggestion[] = [{value: 'JOIN'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest keywords after LEFT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table LEFT |'); + const keywords: KeywordSuggestion[] = [{value: 'OUTER'}, {value: 'JOIN'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest keywords after RIGHT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table RIGHT |'); + const keywords: KeywordSuggestion[] = [{value: 'OUTER'}, {value: 'JOIN'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest keywords after FULL', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table FULL |'); + const keywords: KeywordSuggestion[] = [{value: 'OUTER'}, {value: 'JOIN'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest keywords after LEFT OUTER', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table LEFT OUTER |'); + const keywords: KeywordSuggestion[] = [{value: 'JOIN'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest keywords after RIGHT OUTER', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table RIGHT OUTER |'); + const keywords: KeywordSuggestion[] = [{value: 'JOIN'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest keywords after FULL OUTER', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table FULL OUTER |'); + const keywords: KeywordSuggestion[] = [{value: 'JOIN'}]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +test('should suggest tables after JOIN', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table JOIN |'); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables after JOIN between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; SELECT * FROM test_table JOIN | ; ALTER TABLE after_table DROP COLUMN id;', + ); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest keywords after JOIN table', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'SELECT * FROM test_table_1 JOIN test_table_2 |', + ); + const keywords: KeywordSuggestion[] = [ + {value: 'FOR'}, + {value: 'AS'}, + {value: 'MATCH_RECOGNIZE'}, + {value: 'TABLESAMPLE'}, + {value: 'NATURAL'}, + {value: 'INNER'}, + {value: 'FULL'}, + {value: 'LEFT'}, + {value: 'RIGHT'}, + {value: 'JOIN'}, + {value: 'CROSS'}, + {value: 'ON'}, + {value: 'USING'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywords); +}); + +// TODO-TRINO: support column suggestions +// test('should suggest table names for ON clause', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 JOIN test_table_2 ON |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [{name: 'test_table_1'}, {name: 'test_table_2'}], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// test('should suggest table names and aliases for ON clause', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 t1 JOIN test_table_2 t2 ON |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// test('should suggest table names and aliases for ON clause if table name not unique', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 t1 JOIN test_table_1 t2 ON |', +// ); +// +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_1', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table names and aliases for ON clause between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; SELECT * FROM test_table_1 t1 JOIN test_table_2 t2 ON | ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table names and aliases (with AS) for ON clause', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 AS t1 JOIN test_table_2 AS t2 ON |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table names and aliases for ON clause for second column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 AS t1 JOIN test_table_2 AS t2 ON id = |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table names and aliases for ON clause for second condition', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 AS t1 JOIN test_table_2 AS t2 ON id = id AND |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table names and aliases for WHERE clause', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 AS t1 JOIN test_table_2 AS t2 ON id = id WHERE |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'SELECT * FROM test_table_1 AS t1 JOIN test_table_2 AS t2 ON t1.id = t2.id;', + ); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/select/nested-statements.test.ts b/src/autocomplete/databases/trino/tests/select/nested-statements.test.ts new file mode 100644 index 000000000..c62f04c58 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/select/nested-statements.test.ts @@ -0,0 +1,117 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest nested SELECT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM (|'); + const selectKeyword: KeywordSuggestion = {value: 'SELECT'}; + + expect(autocompleteResult.suggestKeywords).toContainEqual(selectKeyword); +}); + +// TODO-TRINO: support column suggestions +// test('should suggest table name for nested SELECT column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM (SELECT | FROM test_table', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table name for nested SELECT column between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; SELECT * FROM (SELECT | FROM test_table ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table name for nested WHERE condition', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM (SELECT * FROM test_table WHERE |', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table name for nested JOIN condition', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM (SELECT * FROM test_table_1 t1 JOIN test_table_2 t2 ON |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +test('should suggest double nested SELECT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM (SELECT * FROM (|'); + const selectKeyword: KeywordSuggestion = {value: 'SELECT'}; + + expect(autocompleteResult.suggestKeywords).toContainEqual(selectKeyword); +}); + +// TODO-TRINO: support column suggestions +// test('should suggest table name for double nested SELECT column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM (SELECT * FROM (SELECT | FROM test_table', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table name for double nested SELECT column between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; SELECT * FROM (SELECT * FROM (SELECT | FROM test_table ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table name for double nested WHERE condition', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM (SELECT * FROM (SELECT * FROM test_table WHERE |', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table name for double nested JOIN condition', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM (SELECT * FROM (SELECT * FROM test_table_1 t1 JOIN test_table_2 t2 ON |', +// ); +// const columnSuggestion: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'SELECT * FROM (SELECT * FROM test_table) t1;', + ); + + expect(autocompleteResult.errors).toHaveLength(0); +}); + +// TODO PostgreSQL grammar doesn't throw error here but it should +test.skip('should report errors on missing alias', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'SELECT * FROM (SELECT * FROM test_table);', + ); + + expect(autocompleteResult.errors).toHaveLength(1); +}); diff --git a/src/autocomplete/databases/trino/tests/select/order-by-clause.test.ts b/src/autocomplete/databases/trino/tests/select/order-by-clause.test.ts new file mode 100644 index 000000000..6336d5593 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/select/order-by-clause.test.ts @@ -0,0 +1,241 @@ +import {parseTrinoQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after ORDER', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table ORDER |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'BY'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after ORDER with alias', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table as t ORDER |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'BY'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after ORDER BY', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'SELECT count(*) as count, test_column t1 FROM test_table as t ORDER BY |', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); + +test('should suggest properly after ORDER BY between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; ' + + 'SELECT count(*) as count, test_column t1 FROM test_table as t ORDER BY | ; ' + + 'ALTER TABLE after_table DROP COLUMN id;', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); + +test('should suggest properly after ORDER BY in nested statement', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'SELECT id as id1 FROM (SELECT count(*) as count, test_column t1 FROM test_table as t ORDER BY |', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); + +test('should suggest properly after ORDER BY between statements in nested statement', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; ' + + 'SELECT id as id1 FROM (SELECT count(*) as count, test_column t1 FROM test_table as t ORDER BY | ; ' + + 'ALTER TABLE after_table DROP COLUMN id;', + ); + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); + // const columnAliasSuggestion: ColumnAliasSuggestion[] = [{name: 'count'}, {name: 't1'}]; + // expect(autocompleteResult.suggestColumnAliases).toEqual(columnAliasSuggestion); +}); diff --git a/src/autocomplete/databases/trino/tests/select/select.test.ts b/src/autocomplete/databases/trino/tests/select/select.test.ts new file mode 100644 index 000000000..91f9d536e --- /dev/null +++ b/src/autocomplete/databases/trino/tests/select/select.test.ts @@ -0,0 +1,294 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after SELECT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + {value: '*'}, + {value: 'ALL'}, + {value: 'DISTINCT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support functions and aggregate functions + // expect(autocompleteResult.suggestFunctions).toEqual(true); + // expect(autocompleteResult.suggestAggregateFunctions).toEqual(true); + + expect(autocompleteResult.suggestTemplates).toEqual(false); +}); + +test('should suggest properly after *', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'WINDOW'}, + {value: 'HAVING'}, + {value: 'GROUP'}, + {value: 'WHERE'}, + {value: 'FROM'}, + {value: 'EXCEPT'}, + {value: 'UNION'}, + {value: 'INTERSECT'}, + {value: 'FETCH'}, + {value: 'LIMIT'}, + {value: 'OFFSET'}, + {value: 'ORDER'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after FROM', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'UNNEST'}, + {value: 'LATERAL'}, + {value: 'TABLE'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest ALL tables between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; SELECT * FROM | ; ALTER TABLE after_table DROP COLUMN id;', + ); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables with inline comment', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'SELECT * FROM | --SELECT * FROM test_table', + ); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables with multiline comment', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'SELECT * FROM | /*SELECT * FROM test_table*/', + ); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest properly after table name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'FOR'}, + {value: 'AS'}, + {value: 'MATCH_RECOGNIZE'}, + {value: 'TABLESAMPLE'}, + {value: 'NATURAL'}, + {value: 'INNER'}, + {value: 'FULL'}, + {value: 'LEFT'}, + {value: 'RIGHT'}, + {value: 'JOIN'}, + {value: 'CROSS'}, + {value: 'WINDOW'}, + {value: 'HAVING'}, + {value: 'GROUP'}, + {value: 'WHERE'}, + {value: 'EXCEPT'}, + {value: 'UNION'}, + {value: 'INTERSECT'}, + {value: 'FETCH'}, + {value: 'LIMIT'}, + {value: 'OFFSET'}, + {value: 'ORDER'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +// TODO-TRINO: support column suggestions +// test('should suggest table name for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('SELECT | FROM test_table'); +// const columnSuggestions: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest table name for column between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; SELECT | FROM test_table ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestions: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest table name and alias for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('SELECT | FROM test_table t'); +// const columnSuggestions: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest table name and alias (with AS) for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('SELECT | FROM test_table AS t'); +// const columnSuggestions: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest table name and alias for second column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('SELECT id, | FROM test_table AS t'); +// const columnSuggestions: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest multiple table names for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT | FROM test_table_1, test_table_2', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [{name: 'test_table_1'}, {name: 'test_table_2'}], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest multiple table names for column between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; SELECT | FROM test_table_1, test_table_2 ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [{name: 'test_table_1'}, {name: 'test_table_2'}], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest multiple table names and aliases for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT | FROM test_table_1 t1, test_table_2 t2', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest multiple table names and aliases (with AS) for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT | FROM test_table_1 AS t1, test_table_2 AS t2', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); + +test('should suggest properly after HAVING', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table as t HAVING |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after LIMIT', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table as t LIMIT |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'ALL'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + expect(autocompleteResult.suggestColumns).toBeUndefined(); +}); + +test('should suggest properly after OFFSET', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table as t OFFSET |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + expect(autocompleteResult.suggestColumns).toBeUndefined(); +}); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor('SELECT c1, c2 FROM test_table;'); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/select/where-clause.test.ts b/src/autocomplete/databases/trino/tests/select/where-clause.test.ts new file mode 100644 index 000000000..80cfc3ad5 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/select/where-clause.test.ts @@ -0,0 +1,142 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after WHERE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('SELECT * FROM test_table WHERE |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support column suggestions + // const columnSuggestions: ColumnSuggestion = { + // tables: [{name: 'test_table'}], + // }; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +}); + +// TODO-TRINO: support column suggestions +// test('should suggest table name for column between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; SELECT * FROM test_table WHERE | ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [{name: 'test_table'}], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest table name and alias for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table t1 WHERE |', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [{name: 'test_table', alias: 't1'}], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest table name and alias (with AS) for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table AS t1 WHERE |', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [{name: 'test_table', alias: 't1'}], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest table name and alias for second column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table AS t1 WHERE id = 2 AND |', +// ); +// const columnSuggestions: ColumnSuggestion = {tables: [{name: 'test_table', alias: 't1'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest multiple table names for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1, test_table_2 WHERE |', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [{name: 'test_table_1'}, {name: 'test_table_2'}], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest multiple table names and aliases for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 t1, test_table_2 t2 WHERE |', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); +// +// test('should suggest multiple table names and aliases (with AS) for column', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'SELECT * FROM test_table_1 AS t1, test_table_2 AS t2 WHERE |', +// ); +// const columnSuggestions: ColumnSuggestion = { +// tables: [ +// {name: 'test_table_1', alias: 't1'}, +// {name: 'test_table_2', alias: 't2'}, +// ], +// }; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestions); +// }); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'SELECT * FROM test_table WHERE id = 1;', + ); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/tests/update/update.test.ts b/src/autocomplete/databases/trino/tests/update/update.test.ts new file mode 100644 index 000000000..16d6be782 --- /dev/null +++ b/src/autocomplete/databases/trino/tests/update/update.test.ts @@ -0,0 +1,208 @@ +import {parseTrinoQueryWithCursor, parseTrinoQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; + +test('should suggest properly after UPDATE', () => { + const autocompleteResult = parseTrinoQueryWithCursor('UPDATE |'); + + expect(autocompleteResult.suggestKeywords).toEqual([]); + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest tables after UPDATE between statements', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'ALTER TABLE before_table DROP COLUMN id; UPDATE | ; ALTER TABLE after_table DROP COLUMN id;', + ); + + expect(autocompleteResult.suggestViewsOrTables).toEqual(TableOrViewSuggestion.ALL); +}); + +test('should suggest properly after table name', () => { + const autocompleteResult = parseTrinoQueryWithCursor('UPDATE test_table |'); + + const keywordsSuggestion: KeywordSuggestion[] = [{value: 'SET'}]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after SET', () => { + const autocompleteResult = parseTrinoQueryWithCursor('UPDATE test_table SET |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: Add column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +}); + +// TODO-TRINO: Add column suggestions +// test('should suggest table name for column after SET between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; UPDATE test_table SET | ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +test('should suggest properly after column', () => { + const autocompleteResult = parseTrinoQueryWithCursor('UPDATE test_table SET test_column |'); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after column equals', () => { + const autocompleteResult = parseTrinoQueryWithCursor('UPDATE test_table SET test_column = |'); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should suggest properly after the first column', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'UPDATE test_table SET test_column = "test" |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'OVER'}, + {value: 'AT'}, + {value: '*'}, + {value: 'OR'}, + {value: 'AND'}, + {value: 'NOT'}, + {value: 'BETWEEN'}, + {value: 'IN'}, + {value: 'LIKE'}, + {value: 'IS'}, + {value: 'WHERE'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +// TODO-TRINO: support column suggestions +// test('should suggest table name for second column after SET', () => { +// const autocompleteResult = parseTrinoQueryWithCursor('UPDATE test_table SET id = 1, |'); +// +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); +// +// test('should suggest table name for second column after SET between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; UPDATE test_table SET id = 1, | ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +test('should suggest properly after WHERE', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'UPDATE test_table SET test_column = "test" WHERE |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = [ + {value: 'NULL'}, + {value: 'INTERVAL'}, + {value: 'DOUBLE'}, + {value: 'FALSE'}, + {value: 'TRUE'}, + {value: 'POSITION'}, + {value: 'ROW'}, + {value: 'LISTAGG'}, + {value: 'FINAL'}, + {value: 'RUNNING'}, + {value: 'EXISTS'}, + {value: 'CASE'}, + {value: 'CAST'}, + {value: 'TRY_CAST'}, + {value: 'ARRAY'}, + {value: 'CURRENT_DATE'}, + {value: 'CURRENT_TIME'}, + {value: 'CURRENT_TIMESTAMP'}, + {value: 'LOCALTIME'}, + {value: 'LOCALTIMESTAMP'}, + {value: 'CURRENT_USER'}, + {value: 'CURRENT_CATALOG'}, + {value: 'CURRENT_SCHEMA'}, + {value: 'CURRENT_PATH'}, + {value: 'TRIM'}, + {value: 'SUBSTRING'}, + {value: 'NORMALIZE'}, + {value: 'EXTRACT'}, + {value: 'GROUPING'}, + {value: 'JSON_EXISTS'}, + {value: 'JSON_VALUE'}, + {value: 'JSON_QUERY'}, + {value: 'JSON_OBJECT'}, + {value: 'JSON_ARRAY'}, + {value: 'NOT'}, + ]; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); + + // TODO-TRINO: support column suggestions + // const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; + // expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +}); + +// test('should suggest table name for column after WHERE between statements', () => { +// const autocompleteResult = parseTrinoQueryWithCursor( +// 'ALTER TABLE before_table DROP COLUMN id; UPDATE test_table SET id = 1 WHERE | ; ALTER TABLE after_table DROP COLUMN id;', +// ); +// const columnSuggestion: ColumnSuggestion = {tables: [{name: 'test_table'}]}; +// +// expect(autocompleteResult.suggestColumns).toEqual(columnSuggestion); +// }); + +test('should suggest properly after RETURNING', () => { + const autocompleteResult = parseTrinoQueryWithCursor( + 'UPDATE test_table SET test_column = "test" RETURNING |', + ); + + const keywordsSuggestion: KeywordSuggestion[] = []; + expect(autocompleteResult.suggestKeywords).toEqual(keywordsSuggestion); +}); + +test('should not report errors', () => { + const autocompleteResult = parseTrinoQueryWithoutCursor( + 'UPDATE test_table SET id = 1 WHERE id = 1;', + ); + + expect(autocompleteResult.errors).toHaveLength(0); +}); diff --git a/src/autocomplete/databases/trino/trino-autocomplete.ts b/src/autocomplete/databases/trino/trino-autocomplete.ts new file mode 100644 index 000000000..b6c7f1262 --- /dev/null +++ b/src/autocomplete/databases/trino/trino-autocomplete.ts @@ -0,0 +1,120 @@ +import {ParseTree, TokenStream} from 'antlr4ng'; +import * as c3 from 'antlr4-c3'; + +import { + AutocompleteData, + AutocompleteResultBase, + CursorPosition, + ProcessVisitedRulesResult, + TableOrViewSuggestion, +} from '../../shared/autocomplete-types.js'; +import {TrinoLexer} from './generated/TrinoLexer.js'; +import {TrinoParser} from './generated/TrinoParser.js'; +import { + TableQueryPosition, + TokenDictionary, + isStartingToWriteRule, + shouldSuggestTemplates, +} from '../../shared'; +import {TrinoAutocompleteResult} from './index.js'; + +const tokenDictionary: TokenDictionary = { + SPACE: TrinoParser.WS_, + FROM: TrinoParser.FROM_, + OPENING_BRACKET: TrinoParser.LPAREN_, + CLOSING_BRACKET: TrinoParser.RPAREN_, + ALTER: TrinoParser.ALTER_, + INSERT: TrinoParser.INSERT_, + UPDATE: TrinoParser.UPDATE_, + JOIN: TrinoParser.JOIN_, + SEMICOLON: TrinoParser.SEMICOLON_, + SELECT: TrinoParser.SELECT_, +}; + +// These are keywords that we do not want to show in autocomplete +function getIgnoredTokens(): number[] { + const tokens = []; + + const firstOperatorIndex = TrinoParser.EQ_; + const lastOperatorIndex = TrinoParser.UNRECOGNIZED_; + for (let i = firstOperatorIndex; i <= lastOperatorIndex; i++) { + // We actually want Star to appear in autocomplete + if (i !== TrinoParser.ASTERISK_) { + tokens.push(i); + } + } + + tokens.push(TrinoParser.EOF); + + return tokens; +} + +const ignoredTokens = new Set(getIgnoredTokens()); + +const rulesToVisit = new Set([ + // TODO: add catalogName, schemaName, tableName + TrinoParser.RULE_identifier, +]); + +function processVisitedRules( + rules: c3.CandidatesCollection['rules'], + cursorTokenIndex: number, + _tokenStream: TokenStream, +): ProcessVisitedRulesResult { + let suggestViewsOrTables: TrinoAutocompleteResult['suggestViewsOrTables']; + + for (const [ruleId, rule] of rules) { + if (!isStartingToWriteRule(cursorTokenIndex, rule)) { + continue; + } + + switch (ruleId) { + case TrinoParser.RULE_identifier: { + suggestViewsOrTables = TableOrViewSuggestion.ALL; + } + } + } + + return { + suggestViewsOrTables, + }; +} + +function getParseTree( + parser: TrinoParser, + _type?: TableQueryPosition['type'] | 'select', +): ParseTree { + return parser.parse(); +} + +function enrichAutocompleteResult( + baseResult: AutocompleteResultBase, + rules: c3.CandidatesCollection['rules'], + tokenStream: TokenStream, + cursorTokenIndex: number, + cursor: CursorPosition, + query: string, +): TrinoAutocompleteResult { + const suggestionsFromRules = processVisitedRules(rules, cursorTokenIndex, tokenStream); + const suggestTemplates = shouldSuggestTemplates(query, cursor); + return { + ...baseResult, + ...suggestionsFromRules, + suggestDatabases: undefined, + suggestTemplates, + }; +} + +export const trinoAutocompleteData: AutocompleteData< + TrinoAutocompleteResult, + TrinoLexer, + TrinoParser +> = { + Lexer: TrinoLexer, + Parser: TrinoParser, + tokenDictionary, + ignoredTokens, + rulesToVisit, + getParseTree, + enrichAutocompleteResult, +};