diff --git a/CHANGELOG.md b/CHANGELOG.md index 67823fa9f..daf2b03b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,75 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [4.1.1](https://github.com/DTStack/dt-sql-parser/compare/v4.1.0...v4.1.1) (2025-02-17) + + +### Bug Fixes + +* **flink:** [#398](https://github.com/DTStack/dt-sql-parser/issues/398) fix flinksql built-in function's using ([#399](https://github.com/DTStack/dt-sql-parser/issues/399)) ([f8afbe2](https://github.com/DTStack/dt-sql-parser/commit/f8afbe29b3bbe47ace0e04476ceb50fb44994235)) + +## [4.1.0](https://github.com/DTStack/dt-sql-parser/compare/v4.0.1...v4.1.0) (2025-02-13) + + +### Features + +* add alter table stmt ([#312](https://github.com/DTStack/dt-sql-parser/issues/312)) ([5aade9e](https://github.com/DTStack/dt-sql-parser/commit/5aade9e6daafc2c6e70c5202d7ef06572ec37f6e)) +* add benchmark test suite ([#273](https://github.com/DTStack/dt-sql-parser/issues/273)) ([de1bd9d](https://github.com/DTStack/dt-sql-parser/commit/de1bd9de4cb7c3b42d51bedd79635eb91afba9ed)) +* **basicSql:** remove judge splitListener/collectListener, all sqlParser implements it ([#316](https://github.com/DTStack/dt-sql-parser/issues/316)) ([eb2e920](https://github.com/DTStack/dt-sql-parser/commit/eb2e920e345aef98285ba261c2060db61d1d56b8)) +* sync some useful syntax from antlr/grammars-v4 ([95a1087](https://github.com/DTStack/dt-sql-parser/commit/95a108744bb40e418056faaf86bd97b85dd191f8)) +* upgrade trino to 450 ([#323](https://github.com/DTStack/dt-sql-parser/issues/323)) ([2b0de6a](https://github.com/DTStack/dt-sql-parser/commit/2b0de6a3da16561ec52b0c69d4e052226d54a553)) +* use common sql to run benchmark ([#326](https://github.com/DTStack/dt-sql-parser/issues/326)) ([76d0900](https://github.com/DTStack/dt-sql-parser/commit/76d090040e7af26227727673a82f77cda08b3f9e)) + + +### Bug Fixes + +* [#351](https://github.com/DTStack/dt-sql-parser/issues/351) antlr4 command optimize ([74d6435](https://github.com/DTStack/dt-sql-parser/commit/74d643599eb5603279a180262c49eccb04779a30)) +* [#381](https://github.com/DTStack/dt-sql-parser/issues/381) antlr4 flink grammar ([74be81c](https://github.com/DTStack/dt-sql-parser/commit/74be81cc695cb26f9b7e90c866e8183f34020a42)) +* add hash partition table keywords MODULUS and REMAINDER ([#384](https://github.com/DTStack/dt-sql-parser/issues/384)) ([f2e6b60](https://github.com/DTStack/dt-sql-parser/commit/f2e6b605eca5f8221588d2ca9b85ac2b824aae8d)) +* alert to alterView ([#346](https://github.com/DTStack/dt-sql-parser/issues/346)) ([9ba5100](https://github.com/DTStack/dt-sql-parser/commit/9ba51007e2f21ab8bc42623596ee281801904cfa)) +* **benchmark:** add reports dir judge and remove plsql and include pgsql ([9c534c2](https://github.com/DTStack/dt-sql-parser/commit/9c534c25cacba3cfba6bd234c68e8f27bd90b2e2)) +* build mysql ([5d6ff46](https://github.com/DTStack/dt-sql-parser/commit/5d6ff4662a11acf9f16b1f18c41c204922890df9)) +* **ci:** add antlr4 all sql in ci ([2b30e78](https://github.com/DTStack/dt-sql-parser/commit/2b30e781a24f9d7685e46ebc90b1cc153f7e267e)) +* **ci:** change ci and add hash judge ([276cc34](https://github.com/DTStack/dt-sql-parser/commit/276cc34c55bacd34cda4e8eeb7eef5f0955f9b82)) +* **ci:** change crypto to devDependencies ([b788e1c](https://github.com/DTStack/dt-sql-parser/commit/b788e1ca788308cc56601bcbf7ae24f3156e3af9)) +* createFunction and createFunctionLoadable ([e83449a](https://github.com/DTStack/dt-sql-parser/commit/e83449a0cc0a50be510c7b4a3337597b1890fc92)) +* flinksql function params add more time functions ([#347](https://github.com/DTStack/dt-sql-parser/issues/347)) ([b835c4b](https://github.com/DTStack/dt-sql-parser/commit/b835c4b5b506c8e4bf0bd9c99fe66c15e53a179b)) +* **hive:** add select into configPropertiesItem ([#365](https://github.com/DTStack/dt-sql-parser/issues/365)) ([bdb4b96](https://github.com/DTStack/dt-sql-parser/commit/bdb4b962f2e170c4e703359a9cd6a451f7b8fd60)) +* **impala:** fix alter table change statement ([#332](https://github.com/DTStack/dt-sql-parser/issues/332)) ([4a9681e](https://github.com/DTStack/dt-sql-parser/commit/4a9681ed3bd188e41c30a6d7be39d6e77df7f61b)) +* mysql case when ([#317](https://github.com/DTStack/dt-sql-parser/issues/317)) ([fea1ad1](https://github.com/DTStack/dt-sql-parser/commit/fea1ad1a357b70291a240eca6d2058bab9b49469)) +* **postgresql:** change func_application to add column_name and paren ([#359](https://github.com/DTStack/dt-sql-parser/issues/359)) ([9a5eda8](https://github.com/DTStack/dt-sql-parser/commit/9a5eda8d80789e37f2904a1ceb3f8c646237a207)) +* **postgresql:** combine plsql_unreserved_keyword to unreserved_keyword and remove unused rules ([7884cbe](https://github.com/DTStack/dt-sql-parser/commit/7884cbe37844c057fa41fde4d0716af43c4023af)) +* **trino:** update timezone grammar to avoid ambiguity ([#394](https://github.com/DTStack/dt-sql-parser/issues/394)) ([05134bc](https://github.com/DTStack/dt-sql-parser/commit/05134bc569996d108f961a7228c2e34cea0fd98b)) +* update isContainCaret judgment when caret position token is whit… ([#390](https://github.com/DTStack/dt-sql-parser/issues/390)) ([20f065d](https://github.com/DTStack/dt-sql-parser/commit/20f065d6f099ee6e021d9b0499e4c4aa7de92e6b)) + +## [4.1.0-beta.0](https://github.com/DTStack/dt-sql-parser/compare/v4.0.1...v4.1.0-beta.0) (2024-08-27) + + +### Features + +* add alter table stmt ([#312](https://github.com/DTStack/dt-sql-parser/issues/312)) ([5aade9e](https://github.com/DTStack/dt-sql-parser/commit/5aade9e6daafc2c6e70c5202d7ef06572ec37f6e)) +* add benchmark test suite ([#273](https://github.com/DTStack/dt-sql-parser/issues/273)) ([de1bd9d](https://github.com/DTStack/dt-sql-parser/commit/de1bd9de4cb7c3b42d51bedd79635eb91afba9ed)) +* **basicSql:** remove judge splitListener/collectListener, all sqlParser implements it ([#316](https://github.com/DTStack/dt-sql-parser/issues/316)) ([eb2e920](https://github.com/DTStack/dt-sql-parser/commit/eb2e920e345aef98285ba261c2060db61d1d56b8)) +* collect entity's attribute([#333](https://github.com/DTStack/dt-sql-parser/issues/333)) ([a3b6b7e](https://github.com/DTStack/dt-sql-parser/commit/a3b6b7eb8bad2444b16481985278461c35360570)) +* **flinksql:** collect comment, type attribute for entity ([#319](https://github.com/DTStack/dt-sql-parser/issues/319)) ([ae52ebd](https://github.com/DTStack/dt-sql-parser/commit/ae52ebdd6b6d1511cf92eb09521b06bdec66ba0d)), closes [#305](https://github.com/DTStack/dt-sql-parser/issues/305) +* improve errorListener msg ([#281](https://github.com/DTStack/dt-sql-parser/issues/281)) ([deef123](https://github.com/DTStack/dt-sql-parser/commit/deef1238bb25d5bfee80ddaf1fea5ad48178d17b)) +* sync some useful syntax from antlr/grammars-v4 ([95a1087](https://github.com/DTStack/dt-sql-parser/commit/95a108744bb40e418056faaf86bd97b85dd191f8)) +* upgrade trino to 450 ([#323](https://github.com/DTStack/dt-sql-parser/issues/323)) ([2b0de6a](https://github.com/DTStack/dt-sql-parser/commit/2b0de6a3da16561ec52b0c69d4e052226d54a553)) +* use common sql to run benchmark ([#326](https://github.com/DTStack/dt-sql-parser/issues/326)) ([76d0900](https://github.com/DTStack/dt-sql-parser/commit/76d090040e7af26227727673a82f77cda08b3f9e)) + + +### Bug Fixes + +* alert to alterView ([#346](https://github.com/DTStack/dt-sql-parser/issues/346)) ([9ba5100](https://github.com/DTStack/dt-sql-parser/commit/9ba51007e2f21ab8bc42623596ee281801904cfa)) +* **benchmark:** add reports dir judge and remove plsql and include pgsql ([9c534c2](https://github.com/DTStack/dt-sql-parser/commit/9c534c25cacba3cfba6bd234c68e8f27bd90b2e2)) +* build mysql ([5d6ff46](https://github.com/DTStack/dt-sql-parser/commit/5d6ff4662a11acf9f16b1f18c41c204922890df9)) +* createFunction and createFunctionLoadable ([e83449a](https://github.com/DTStack/dt-sql-parser/commit/e83449a0cc0a50be510c7b4a3337597b1890fc92)) +* flinksql function params add more time functions ([#347](https://github.com/DTStack/dt-sql-parser/issues/347)) ([b835c4b](https://github.com/DTStack/dt-sql-parser/commit/b835c4b5b506c8e4bf0bd9c99fe66c15e53a179b)) +* **impala:** fix alter table change statement ([#332](https://github.com/DTStack/dt-sql-parser/issues/332)) ([4a9681e](https://github.com/DTStack/dt-sql-parser/commit/4a9681ed3bd188e41c30a6d7be39d6e77df7f61b)) +* mysql case when ([#317](https://github.com/DTStack/dt-sql-parser/issues/317)) ([fea1ad1](https://github.com/DTStack/dt-sql-parser/commit/fea1ad1a357b70291a240eca6d2058bab9b49469)) +* **postgresql:** combine plsql_unreserved_keyword to unreserved_keyword and remove unused rules ([7884cbe](https://github.com/DTStack/dt-sql-parser/commit/7884cbe37844c057fa41fde4d0716af43c4023af)) +* spell check ([#337](https://github.com/DTStack/dt-sql-parser/issues/337)) ([694b0cd](https://github.com/DTStack/dt-sql-parser/commit/694b0cdf15943d02a9402a748155a1b06508af95)) + ### [4.0.2](https://github.com/DTStack/dt-sql-parser/compare/v4.0.1...v4.0.2) (2024-06-19) @@ -61,7 +130,7 @@ All notable changes to this project will be documented in this file. See [standa ### Features -* add toMatchUnorderedArrary matcher and apply it ([#271](https://github.com/DTStack/dt-sql-parser/issues/271)) ([a05f099](https://github.com/DTStack/dt-sql-parser/commit/a05f099aa1ad555c408bc2018240fb4611ec09b8)) +* add toMatchUnorderedArray matcher and apply it ([#271](https://github.com/DTStack/dt-sql-parser/issues/271)) ([a05f099](https://github.com/DTStack/dt-sql-parser/commit/a05f099aa1ad555c408bc2018240fb4611ec09b8)) * collect entity ([#265](https://github.com/DTStack/dt-sql-parser/issues/265)) ([a997211](https://github.com/DTStack/dt-sql-parser/commit/a99721162be0d463b513f53bb13ada6d10168548)), closes [#256](https://github.com/DTStack/dt-sql-parser/issues/256) [#263](https://github.com/DTStack/dt-sql-parser/issues/263) [#268](https://github.com/DTStack/dt-sql-parser/issues/268) * migrate to antlr4ng ([#267](https://github.com/DTStack/dt-sql-parser/issues/267)) ([195878d](https://github.com/DTStack/dt-sql-parser/commit/195878da9bb1ff8011b5d60c02389fa66d2bc0b8)) * **spark:** support materialized view for spark sql ([#262](https://github.com/DTStack/dt-sql-parser/issues/262)) ([5ce89cb](https://github.com/DTStack/dt-sql-parser/commit/5ce89cb421de18330d56e23a4ab5b658b2130a0b)) diff --git a/README-zh_CN.md b/README-zh_CN.md index b82cc61cc..8ec501475 100644 --- a/README-zh_CN.md +++ b/README-zh_CN.md @@ -356,6 +356,55 @@ console.log(sqlSlices) 行列号信息不是必传的,如果传了行列号信息,那么收集到的实体中,如果实体位于对应行列号所在的语句下,那么实体的所属的语句对象上会带有 `isContainCaret` 标识,这在与自动补全功能结合时,可以帮助你快速筛选出需要的实体信息。 + +### 获取语义上下文信息 +调用 SQL 实例上的 `getSemanticContextAtCaretPosition` 方法,传入 sql 文本和指定位置的行列号, 例如: +```typescript +import { HiveSQL } from 'dt-sql-parser'; + +const hive = new HiveSQL(); +const sql = 'SELECT * FROM tb;'; +const pos = { lineNumber: 1, column: 18 }; // 'tb;' 的后面 +const semanticContext = hive.getSemanticContextAtCaretPosition(sql, pos); + +console.log(semanticContext); +``` + +*输出* + +```typescript +/* +{ + isStatementBeginning: true, +} +*/ +``` + +目前能收集到的语义上下文信息如下,如果有更多的需求,欢迎提[issue](https://github.com/DTStack/dt-sql-parser/issues) +- `isStatementBeginning` 当前输入位置是否为一条语句的开头 + +默认情况下,`isStatementBeginning` 的收集策略为`SqlSplitStrategy.STRICT` + +有两种可选策略: +- `SqlSplitStrategy.STRICT` 严格策略, 仅以语句分隔符`;`作为上一条语句结束的标识 +- `SqlSplitStrategy.LOOSE` 宽松策略, 以语法解析树为基础分割SQL + +两种策略的差异: +如输入SQL为 +```sql +CREATE TABLE tb (id INT) + +SELECT +``` +CREATE语句后未添加分号,那么当获取SELECT后的语义上下文时, +在`SqlSplitStrategy.STRICT`策略下`isStatementBeginning` 为`false`, 因为CREATE语句未以分号结尾,那么会被认为这条语句尚未结束; +在`SqlSplitStrategy.LOOSE`策略下`isStatementBeginning` 为`true`, 因为语法解析树中这条SQL被拆分成了CREATE独立语句与SELECT独立语句。 + +可以通过第三个`options`参数设置策略: +```typescript +hive.getSemanticContextAtCaretPosition(sql, pos, { splitSqlStrategy: SqlSplitStrategy.LOOSE }); +``` + ### 其他 API - `createLexer` 创建一个 Antlr4 Lexer 实例并返回; diff --git a/README.md b/README.md index 7d65aa8d0..30a472b18 100644 --- a/README.md +++ b/README.md @@ -357,6 +357,57 @@ Call the `getAllEntities` method on the SQL instance, and pass in the sql text a Position is not required, if the position is passed, then in the collected entities, if the entity is located under the statement where the corresponding position is located, then the statement object to which the entity belongs will be marked with `isContainCaret`, which can help you quickly filter out the required entities when combined with the code completion function. +### Get semantic context information + +Call the `getSemanticContextAtCaretPosition` method on the SQL instance, passing in the sql text and the line and column numbers at the specified position, for example: + +```typescript +import { HiveSQL } from 'dt-sql-parser'; + +const hive = new HiveSQL(); +const sql = 'SELECT * FROM tb;'; +const pos = { lineNumber: 1, column: 18 }; // after 'tb;' +const semanticContext = hive.getSemanticContextAtCaretPosition(sql, pos); + +console.log(semanticContext); +``` + +*output* + +```typescript +/* +{ + isStatementBeginning: true, +} +*/ +``` + +Currently, the semantic context information that can be collected is as follows. If there are more requirements, please submit an [issue](https://github.com/DTStack/dt-sql-parser/issues). + +- `isStatementBeginning` Whether the current input position is the beginning of a statement + +The **default strategy** for `isStatementBeginning` is `SqlSplitStrategy.STRICT` + +There are two optional strategies: +- `SqlSplitStrategy.STRICT` Strict strategy, only the statement delimiter `;` is used as the identifier for the end of the previous statement +- `SqlSplitStrategy.LOOSE` Loose strategy, based on the syntax parsing tree to split SQL + +The difference between the two strategies: +For example, if the input SQL is: +```sql +CREATE TABLE tb (id INT) + +SELECT +``` +In the `SqlSplitStrategy.STRICT` strategy, `isStatementBeginning` is `false`, because the CREATE statement is not terminated by a semicolon. + +In the `SqlSplitStrategy.LOOSE` strategy, `isStatementBeginning` is `true`, because the syntax parsing tree splits the SQL into two independent statements: CREATE and SELECT. + +You can set the strategy through the third `options` parameter: +```typescript +hive.getSemanticContextAtCaretPosition(sql, pos, { splitSqlStrategy: SqlSplitStrategy.LOOSE }); +``` + ### Other API - `createLexer` Create an instance of Antlr4 Lexer and return it; diff --git a/benchmark/benchmark.config.ts b/benchmark/benchmark.config.ts index f77731eb9..9a1b10c74 100644 --- a/benchmark/benchmark.config.ts +++ b/benchmark/benchmark.config.ts @@ -80,6 +80,11 @@ const testFiles: TestFile[] = [ includes: ['flink'], testTypes: ['getSuggestionAtCaretPosition'], }, + { + name: 'Collect Semantics', + sqlFileName: 'select.sql', + testTypes: ['getSemanticContextAtCaretPosition'], + }, ]; export default { diff --git a/benchmark/data/params.json b/benchmark/data/params.json index 5e4525c15..5ceb91e37 100644 --- a/benchmark/data/params.json +++ b/benchmark/data/params.json @@ -6,5 +6,8 @@ "suggestion_flink": { "getAllEntities": ["$sql", { "lineNumber": 1020, "column": 38 }], "getSuggestionAtCaretPosition": ["$sql", { "lineNumber": 1020, "column": 38 }] + }, + "select": { + "getSemanticContextAtCaretPosition": ["$sql", { "lineNumber": 997, "column": 25 }] } } diff --git a/benchmark_reports/cold_start/flink.benchmark.md b/benchmark_reports/cold_start/flink.benchmark.md index b286177b8..d3764583a 100644 --- a/benchmark_reports/cold_start/flink.benchmark.md +++ b/benchmark_reports/cold_start/flink.benchmark.md @@ -4,16 +4,16 @@ FlinkSQL ### Report Time -2024/9/9 19:55:03 +2024/12/18 14:50:08 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,16 +21,17 @@ macOS 14.4.1 Cold Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 227 | -|Query Collection| validate | 1015 | 221 | -| Insert Columns | getAllTokens | 1001 | 65 | -| Insert Columns | validate | 1001 | 65 | -| Create Table | getAllTokens | 1004 | 27 | -| Create Table | validate | 1004 | 26 | -| Split SQL | splitSQLByStatement | 999 | 52 | -|Collect Entities| getAllEntities | 1056 | 141 | -| Suggestion |getSuggestionAtCaretPosition| 1056 | 131 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 257 | +| Query Collection| validate | 1015 | 277 | +| Insert Columns | getAllTokens | 1001 | 66 | +| Insert Columns | validate | 1001 | 67 | +| Create Table | getAllTokens | 1004 | 27 | +| Create Table | validate | 1004 | 28 | +| Split SQL | splitSQLByStatement | 999 | 53 | +| Collect Entities| getAllEntities | 1056 | 191 | +| Suggestion | getSuggestionAtCaretPosition | 1056 | 185 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 247 | diff --git a/benchmark_reports/cold_start/hive.benchmark.md b/benchmark_reports/cold_start/hive.benchmark.md index 59aef79d0..bd318df84 100644 --- a/benchmark_reports/cold_start/hive.benchmark.md +++ b/benchmark_reports/cold_start/hive.benchmark.md @@ -4,16 +4,16 @@ HiveSQL ### Report Time -2024/9/9 19:55:03 +2024/12/18 14:50:08 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Cold Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 185 | -|Query Collection| validate | 1015 | 179 | -| Update Table | getAllTokens | 1011 | 112 | -| Update Table | validate | 1011 | 109 | -| Insert Columns | getAllTokens | 1001 | 329 | -| Insert Columns | validate | 1001 | 329 | -| Create Table | getAllTokens | 1002 | 21 | -| Create Table | validate | 1002 | 20 | -| Split SQL | splitSQLByStatement | 1001 | 72 | -|Collect Entities| getAllEntities | 1066 | 106 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 100 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 194 | +| Query Collection| validate | 1015 | 194 | +| Update Table | getAllTokens | 1011 | 126 | +| Update Table | validate | 1011 | 119 | +| Insert Columns | getAllTokens | 1001 | 326 | +| Insert Columns | validate | 1001 | 323 | +| Create Table | getAllTokens | 1002 | 21 | +| Create Table | validate | 1002 | 20 | +| Split SQL | splitSQLByStatement | 1001 | 71 | +| Collect Entities| getAllEntities | 1066 | 338 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 148 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 201 | diff --git a/benchmark_reports/cold_start/impala.benchmark.md b/benchmark_reports/cold_start/impala.benchmark.md index c9b5f0ed4..4c4cb6f61 100644 --- a/benchmark_reports/cold_start/impala.benchmark.md +++ b/benchmark_reports/cold_start/impala.benchmark.md @@ -4,16 +4,16 @@ ImpalaSQL ### Report Time -2024/9/9 19:55:03 +2024/12/18 14:50:08 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Cold Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 71 | -|Query Collection| validate | 1015 | 71 | -| Update Table | getAllTokens | 1011 | 113 | -| Update Table | validate | 1011 | 108 | -| Insert Columns | getAllTokens | 1001 | 208 | -| Insert Columns | validate | 1001 | 213 | -| Create Table | getAllTokens | 1002 | 23 | -| Create Table | validate | 1002 | 23 | -| Split SQL | splitSQLByStatement | 1001 | 65 | -|Collect Entities| getAllEntities | 1066 | 82 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 83 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 77 | +| Query Collection| validate | 1015 | 72 | +| Update Table | getAllTokens | 1011 | 120 | +| Update Table | validate | 1011 | 121 | +| Insert Columns | getAllTokens | 1001 | 218 | +| Insert Columns | validate | 1001 | 217 | +| Create Table | getAllTokens | 1002 | 25 | +| Create Table | validate | 1002 | 25 | +| Split SQL | splitSQLByStatement | 1001 | 67 | +| Collect Entities| getAllEntities | 1066 | 93 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 101 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 80 | diff --git a/benchmark_reports/cold_start/mysql.benchmark.md b/benchmark_reports/cold_start/mysql.benchmark.md index 93bbc7b22..184191377 100644 --- a/benchmark_reports/cold_start/mysql.benchmark.md +++ b/benchmark_reports/cold_start/mysql.benchmark.md @@ -4,16 +4,16 @@ MySQL ### Report Time -2024/9/9 19:55:03 +2024/12/18 14:50:08 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Cold Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 1281 | -|Query Collection| validate | 1015 | 1254 | -| Update Table | getAllTokens | 1011 | 876 | -| Update Table | validate | 1011 | 842 | -| Insert Columns | getAllTokens | 1001 | 261 | -| Insert Columns | validate | 1001 | 266 | -| Create Table | getAllTokens | 1002 | 48 | -| Create Table | validate | 1002 | 45 | -| Split SQL | splitSQLByStatement | 1001 | 287 | -|Collect Entities| getAllEntities | 1066 | 474 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 462 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 1339 | +| Query Collection| validate | 1015 | 1305 | +| Update Table | getAllTokens | 1011 | 860 | +| Update Table | validate | 1011 | 898 | +| Insert Columns | getAllTokens | 1001 | 282 | +| Insert Columns | validate | 1001 | 284 | +| Create Table | getAllTokens | 1002 | 48 | +| Create Table | validate | 1002 | 50 | +| Split SQL | splitSQLByStatement | 1001 | 305 | +| Collect Entities| getAllEntities | 1066 | 653 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 637 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 1418 | diff --git a/benchmark_reports/cold_start/postgresql.benchmark.md b/benchmark_reports/cold_start/postgresql.benchmark.md index 2065d5e5e..4a3810e74 100644 --- a/benchmark_reports/cold_start/postgresql.benchmark.md +++ b/benchmark_reports/cold_start/postgresql.benchmark.md @@ -4,16 +4,16 @@ PostgreSQL ### Report Time -2024/9/9 19:55:03 +2024/12/18 14:50:08 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Cold Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 1086 | -|Query Collection| validate | 1015 | 1078 | -| Update Table | getAllTokens | 1011 | 1193 | -| Update Table | validate | 1011 | 1183 | -| Insert Columns | getAllTokens | 1001 | 539 | -| Insert Columns | validate | 1001 | 565 | -| Create Table | getAllTokens | 1002 | 294 | -| Create Table | validate | 1002 | 275 | -| Split SQL | splitSQLByStatement | 1001 | 597 | -|Collect Entities| getAllEntities | 1066 | 797 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 776 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 1008 | +| Query Collection| validate | 1015 | 955 | +| Update Table | getAllTokens | 1011 | 941 | +| Update Table | validate | 1011 | 936 | +| Insert Columns | getAllTokens | 1001 | 534 | +| Insert Columns | validate | 1001 | 547 | +| Create Table | getAllTokens | 1002 | 288 | +| Create Table | validate | 1002 | 288 | +| Split SQL | splitSQLByStatement | 1001 | 522 | +| Collect Entities| getAllEntities | 1066 | 744 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 719 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 941 | diff --git a/benchmark_reports/cold_start/spark.benchmark.md b/benchmark_reports/cold_start/spark.benchmark.md index 73da08c66..f2a3b611b 100644 --- a/benchmark_reports/cold_start/spark.benchmark.md +++ b/benchmark_reports/cold_start/spark.benchmark.md @@ -4,16 +4,16 @@ SparkSQL ### Report Time -2024/9/9 19:55:03 +2024/12/18 14:50:08 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Cold Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 268 | -|Query Collection| validate | 1015 | 259 | -| Update Table | getAllTokens | 1011 | 232 | -| Update Table | validate | 1011 | 226 | -| Insert Columns | getAllTokens | 1001 | 198 | -| Insert Columns | validate | 1001 | 200 | -| Create Table | getAllTokens | 1002 | 29 | -| Create Table | validate | 1002 | 30 | -| Split SQL | splitSQLByStatement | 1001 | 111 | -|Collect Entities| getAllEntities | 1066 | 170 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 164 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 287 | +| Query Collection| validate | 1015 | 277 | +| Update Table | getAllTokens | 1011 | 264 | +| Update Table | validate | 1011 | 253 | +| Insert Columns | getAllTokens | 1001 | 216 | +| Insert Columns | validate | 1001 | 213 | +| Create Table | getAllTokens | 1002 | 29 | +| Create Table | validate | 1002 | 30 | +| Split SQL | splitSQLByStatement | 1001 | 132 | +| Collect Entities| getAllEntities | 1066 | 298 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 263 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 319 | diff --git a/benchmark_reports/cold_start/trino.benchmark.md b/benchmark_reports/cold_start/trino.benchmark.md index f6be16797..8c62f0b74 100644 --- a/benchmark_reports/cold_start/trino.benchmark.md +++ b/benchmark_reports/cold_start/trino.benchmark.md @@ -4,16 +4,16 @@ TrinoSQL ### Report Time -2024/9/9 19:55:03 +2024/12/18 14:50:08 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Cold Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 89 | -|Query Collection| validate | 1015 | 90 | -| Update Table | getAllTokens | 1011 | 109 | -| Update Table | validate | 1011 | 104 | -| Insert Columns | getAllTokens | 1001 | 202 | -| Insert Columns | validate | 1001 | 202 | -| Create Table | getAllTokens | 1002 | 27 | -| Create Table | validate | 1002 | 26 | -| Split SQL | splitSQLByStatement | 1001 | 71 | -|Collect Entities| getAllEntities | 1066 | 101 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 94 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 91 | +| Query Collection| validate | 1015 | 94 | +| Update Table | getAllTokens | 1011 | 114 | +| Update Table | validate | 1011 | 127 | +| Insert Columns | getAllTokens | 1001 | 214 | +| Insert Columns | validate | 1001 | 204 | +| Create Table | getAllTokens | 1002 | 28 | +| Create Table | validate | 1002 | 28 | +| Split SQL | splitSQLByStatement | 1001 | 72 | +| Collect Entities| getAllEntities | 1066 | 119 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 117 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 108 | diff --git a/benchmark_reports/hot_start/flink.benchmark.md b/benchmark_reports/hot_start/flink.benchmark.md index 5d42130f2..472d2dbc1 100644 --- a/benchmark_reports/hot_start/flink.benchmark.md +++ b/benchmark_reports/hot_start/flink.benchmark.md @@ -4,16 +4,16 @@ FlinkSQL ### Report Time -2024/9/9 19:47:32 +2024/12/18 14:59:09 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,16 +21,17 @@ macOS 14.4.1 Hot Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 26 | -|Query Collection| validate | 1015 | 29 | -| Insert Columns | getAllTokens | 1001 | 61 | -| Insert Columns | validate | 1001 | 58 | -| Create Table | getAllTokens | 1004 | 16 | -| Create Table | validate | 1004 | 15 | -| Split SQL | splitSQLByStatement | 999 | 22 | -|Collect Entities| getAllEntities | 1056 | 30 | -| Suggestion |getSuggestionAtCaretPosition| 1056 | 28 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 25 | +| Query Collection| validate | 1015 | 25 | +| Insert Columns | getAllTokens | 1001 | 60 | +| Insert Columns | validate | 1001 | 61 | +| Create Table | getAllTokens | 1004 | 18 | +| Create Table | validate | 1004 | 17 | +| Split SQL | splitSQLByStatement | 999 | 22 | +| Collect Entities| getAllEntities | 1056 | 70 | +| Suggestion | getSuggestionAtCaretPosition | 1056 | 70 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 26 | diff --git a/benchmark_reports/hot_start/hive.benchmark.md b/benchmark_reports/hot_start/hive.benchmark.md index 061a23970..b421ba2e1 100644 --- a/benchmark_reports/hot_start/hive.benchmark.md +++ b/benchmark_reports/hot_start/hive.benchmark.md @@ -4,16 +4,16 @@ HiveSQL ### Report Time -2024/9/9 19:47:32 +2024/12/18 14:59:09 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Hot Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 21 | -|Query Collection| validate | 1015 | 20 | -| Update Table | getAllTokens | 1011 | 22 | -| Update Table | validate | 1011 | 22 | -| Insert Columns | getAllTokens | 1001 | 293 | -| Insert Columns | validate | 1001 | 287 | -| Create Table | getAllTokens | 1002 | 12 | -| Create Table | validate | 1002 | 12 | -| Split SQL | splitSQLByStatement | 1001 | 23 | -|Collect Entities| getAllEntities | 1066 | 20 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 17 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 20 | +| Query Collection| validate | 1015 | 20 | +| Update Table | getAllTokens | 1011 | 21 | +| Update Table | validate | 1011 | 21 | +| Insert Columns | getAllTokens | 1001 | 294 | +| Insert Columns | validate | 1001 | 293 | +| Create Table | getAllTokens | 1002 | 12 | +| Create Table | validate | 1002 | 12 | +| Split SQL | splitSQLByStatement | 1001 | 24 | +| Collect Entities| getAllEntities | 1066 | 233 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 58 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 29 | diff --git a/benchmark_reports/hot_start/impala.benchmark.md b/benchmark_reports/hot_start/impala.benchmark.md index 83accc433..f876e0e8e 100644 --- a/benchmark_reports/hot_start/impala.benchmark.md +++ b/benchmark_reports/hot_start/impala.benchmark.md @@ -4,16 +4,16 @@ ImpalaSQL ### Report Time -2024/9/9 19:47:32 +2024/12/18 14:59:09 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Hot Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 25 | -|Query Collection| validate | 1015 | 24 | -| Update Table | getAllTokens | 1011 | 24 | -| Update Table | validate | 1011 | 23 | -| Insert Columns | getAllTokens | 1001 | 186 | -| Insert Columns | validate | 1001 | 187 | -| Create Table | getAllTokens | 1002 | 16 | -| Create Table | validate | 1002 | 15 | -| Split SQL | splitSQLByStatement | 1001 | 23 | -|Collect Entities| getAllEntities | 1066 | 21 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 18 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 27 | +| Query Collection| validate | 1015 | 25 | +| Update Table | getAllTokens | 1011 | 26 | +| Update Table | validate | 1011 | 24 | +| Insert Columns | getAllTokens | 1001 | 190 | +| Insert Columns | validate | 1001 | 191 | +| Create Table | getAllTokens | 1002 | 15 | +| Create Table | validate | 1002 | 14 | +| Split SQL | splitSQLByStatement | 1001 | 22 | +| Collect Entities| getAllEntities | 1066 | 30 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 27 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 26 | diff --git a/benchmark_reports/hot_start/mysql.benchmark.md b/benchmark_reports/hot_start/mysql.benchmark.md index b0999ee29..51c9a8bf6 100644 --- a/benchmark_reports/hot_start/mysql.benchmark.md +++ b/benchmark_reports/hot_start/mysql.benchmark.md @@ -4,16 +4,16 @@ MySQL ### Report Time -2024/9/9 19:47:32 +2024/12/18 14:59:09 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Hot Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 28 | -|Query Collection| validate | 1015 | 29 | -| Update Table | getAllTokens | 1011 | 26 | -| Update Table | validate | 1011 | 26 | -| Insert Columns | getAllTokens | 1001 | 184 | -| Insert Columns | validate | 1001 | 188 | -| Create Table | getAllTokens | 1002 | 23 | -| Create Table | validate | 1002 | 19 | -| Split SQL | splitSQLByStatement | 1001 | 27 | -|Collect Entities| getAllEntities | 1066 | 29 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 23 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 29 | +| Query Collection| validate | 1015 | 29 | +| Update Table | getAllTokens | 1011 | 27 | +| Update Table | validate | 1011 | 27 | +| Insert Columns | getAllTokens | 1001 | 181 | +| Insert Columns | validate | 1001 | 184 | +| Create Table | getAllTokens | 1002 | 19 | +| Create Table | validate | 1002 | 20 | +| Split SQL | splitSQLByStatement | 1001 | 28 | +| Collect Entities| getAllEntities | 1066 | 106 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 75 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 31 | diff --git a/benchmark_reports/hot_start/postgresql.benchmark.md b/benchmark_reports/hot_start/postgresql.benchmark.md index a4fc43f09..87973b803 100644 --- a/benchmark_reports/hot_start/postgresql.benchmark.md +++ b/benchmark_reports/hot_start/postgresql.benchmark.md @@ -4,16 +4,16 @@ PostgreSQL ### Report Time -2024/9/9 19:47:32 +2024/12/18 14:59:09 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Hot Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 36 | -|Query Collection| validate | 1015 | 37 | -| Update Table | getAllTokens | 1011 | 32 | -| Update Table | validate | 1011 | 31 | -| Insert Columns | getAllTokens | 1001 | 213 | -| Insert Columns | validate | 1001 | 214 | -| Create Table | getAllTokens | 1002 | 18 | -| Create Table | validate | 1002 | 19 | -| Split SQL | splitSQLByStatement | 1001 | 30 | -|Collect Entities| getAllEntities | 1066 | 31 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 24 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 40 | +| Query Collection| validate | 1015 | 44 | +| Update Table | getAllTokens | 1011 | 33 | +| Update Table | validate | 1011 | 34 | +| Insert Columns | getAllTokens | 1001 | 223 | +| Insert Columns | validate | 1001 | 230 | +| Create Table | getAllTokens | 1002 | 21 | +| Create Table | validate | 1002 | 20 | +| Split SQL | splitSQLByStatement | 1001 | 29 | +| Collect Entities| getAllEntities | 1066 | 41 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 40 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 41 | diff --git a/benchmark_reports/hot_start/spark.benchmark.md b/benchmark_reports/hot_start/spark.benchmark.md index f859015b4..344e4495c 100644 --- a/benchmark_reports/hot_start/spark.benchmark.md +++ b/benchmark_reports/hot_start/spark.benchmark.md @@ -4,16 +4,16 @@ SparkSQL ### Report Time -2024/9/9 19:47:32 +2024/12/18 14:59:09 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Hot Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 24 | -|Query Collection| validate | 1015 | 28 | -| Update Table | getAllTokens | 1011 | 22 | -| Update Table | validate | 1011 | 22 | -| Insert Columns | getAllTokens | 1001 | 167 | -| Insert Columns | validate | 1001 | 172 | -| Create Table | getAllTokens | 1002 | 13 | -| Create Table | validate | 1002 | 14 | -| Split SQL | splitSQLByStatement | 1001 | 23 | -|Collect Entities| getAllEntities | 1066 | 30 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 24 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 24 | +| Query Collection| validate | 1015 | 24 | +| Update Table | getAllTokens | 1011 | 23 | +| Update Table | validate | 1011 | 22 | +| Insert Columns | getAllTokens | 1001 | 172 | +| Insert Columns | validate | 1001 | 168 | +| Create Table | getAllTokens | 1002 | 13 | +| Create Table | validate | 1002 | 16 | +| Split SQL | splitSQLByStatement | 1001 | 25 | +| Collect Entities| getAllEntities | 1066 | 127 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 118 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 27 | diff --git a/benchmark_reports/hot_start/trino.benchmark.md b/benchmark_reports/hot_start/trino.benchmark.md index b14e5fd06..b950d9a30 100644 --- a/benchmark_reports/hot_start/trino.benchmark.md +++ b/benchmark_reports/hot_start/trino.benchmark.md @@ -4,16 +4,16 @@ TrinoSQL ### Report Time -2024/9/9 19:47:32 +2024/12/18 14:59:09 ### Device -macOS 14.4.1 +macOS 15.0.1 (8) arm64 Apple M1 Pro 16.00 GB ### Version `nodejs`: v21.6.1 -`dt-sql-parser`: v4.0.2 +`dt-sql-parser`: v4.1.0-beta.0 `antlr4-c3`: v3.3.7 `antlr4ng`: v2.0.11 @@ -21,18 +21,19 @@ macOS 14.4.1 Hot Start ### Report -| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| -|----------------|----------------------------|--------|----------------| -|Query Collection| getAllTokens | 1015 | 24 | -|Query Collection| validate | 1015 | 24 | -| Update Table | getAllTokens | 1011 | 23 | -| Update Table | validate | 1011 | 25 | -| Insert Columns | getAllTokens | 1001 | 181 | -| Insert Columns | validate | 1001 | 182 | -| Create Table | getAllTokens | 1002 | 17 | -| Create Table | validate | 1002 | 16 | -| Split SQL | splitSQLByStatement | 1001 | 24 | -|Collect Entities| getAllEntities | 1066 | 21 | -| Suggestion |getSuggestionAtCaretPosition| 1066 | 19 | +| Benchmark Name | Method Name |SQL Rows|Average Time(ms)| +|-----------------|---------------------------------|--------|----------------| +| Query Collection| getAllTokens | 1015 | 27 | +| Query Collection| validate | 1015 | 28 | +| Update Table | getAllTokens | 1011 | 25 | +| Update Table | validate | 1011 | 30 | +| Insert Columns | getAllTokens | 1001 | 193 | +| Insert Columns | validate | 1001 | 189 | +| Create Table | getAllTokens | 1002 | 16 | +| Create Table | validate | 1002 | 16 | +| Split SQL | splitSQLByStatement | 1001 | 25 | +| Collect Entities| getAllEntities | 1066 | 33 | +| Suggestion | getSuggestionAtCaretPosition | 1066 | 30 | +|Collect Semantics|getSemanticContextAtCaretPosition| 1015 | 27 | diff --git a/package.json b/package.json index 89aed4af6..8de7d4863 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dt-sql-parser", - "version": "4.0.2", + "version": "4.1.1", "authors": "DTStack Corporation", "description": "SQL Parsers for BigData, built with antlr4", "keywords": [ @@ -27,6 +27,7 @@ "prepublishOnly": "npm run build", "antlr4": "node ./scripts/antlr4.js", "build": "rm -rf dist && tsc", + "watch": "tsc -w", "check-types": "tsc -p ./tsconfig.json && tsc -p ./test/tsconfig.json", "test": "NODE_OPTIONS=--max_old_space_size=4096 && jest", "release": "node ./scripts/release.js", diff --git a/scripts/antlr4.js b/scripts/antlr4.js index a85140e1b..68e759d94 100644 --- a/scripts/antlr4.js +++ b/scripts/antlr4.js @@ -61,7 +61,7 @@ function compile(language) { return newHash !== prevHash; }); - if (changedFiles.length > 0) { + if (changedFiles.length > 0 && argv.check) { return reject(`${language} not run antlr4`); } resolve(); diff --git a/scripts/benchmark.js b/scripts/benchmark.js index 0ab348d95..01f104d6a 100644 --- a/scripts/benchmark.js +++ b/scripts/benchmark.js @@ -43,7 +43,9 @@ function checkVersion() { if (semver.lt(currentVersion, MIN_VERSION)) { console.error( chalk.bold.red( - `Current Node.js version (v${currentVersion}) is lower than required version (v${semver.major(MIN_VERSION)}.x)` + `Current Node.js version (v${currentVersion}) is lower than required version (v${semver.major( + MIN_VERSION + )}.x)` ) ); return false; @@ -51,7 +53,9 @@ function checkVersion() { if (isRelease && semver.lt(currentVersion, RELEASE_VERSION)) { console.error( chalk.bold.red( - `Node.js version v${semver.major(RELEASE_VERSION)}.x+ is required for release benchmark!` + `Node.js version v${semver.major( + RELEASE_VERSION + )}.x+ is required for release benchmark!` ) ); return false; @@ -81,7 +85,9 @@ function prompt() { 'Cold start' + (isNodeVersionOk ? '' - : ` (Only supported on Node.js v${semver.major(RECOMMENDED_VERSION)}.x+)`), + : ` (Only supported on Node.js v${semver.major( + RECOMMENDED_VERSION + )}.x+)`), value: 'cold', disabled: !isNodeVersionOk, }, diff --git a/src/grammar/flink/FlinkSqlParser.g4 b/src/grammar/flink/FlinkSqlParser.g4 index 9691f5a64..06694f5a4 100644 --- a/src/grammar/flink/FlinkSqlParser.g4 +++ b/src/grammar/flink/FlinkSqlParser.g4 @@ -156,8 +156,9 @@ createTable simpleCreateTable : KW_CREATE KW_TEMPORARY? KW_TABLE ifNotExists? tablePathCreate LR_BRACKET columnOptionDefinition ( COMMA columnOptionDefinition - )* (COMMA watermarkDefinition)? (COMMA tableConstraint)? (COMMA selfDefinitionClause)? RR_BRACKET commentSpec? partitionDefinition? withOption - likeDefinition? + )* (COMMA watermarkDefinition)? (COMMA tableConstraint)? (COMMA selfDefinitionClause)? RR_BRACKET ( + KW_COMMENT comment=STRING_LITERAL + )? partitionDefinition? withOption likeDefinition? ; /* @@ -175,7 +176,7 @@ columnOptionDefinition ; physicalColumnDefinition - : columnNameCreate columnType columnConstraint? commentSpec? + : columnNameCreate columnType columnConstraint? (KW_COMMENT comment=STRING_LITERAL)? ; columnNameCreate @@ -193,8 +194,8 @@ columnNameList ; columnType - : typeName=(KW_DATE | KW_BOOLEAN | KW_NULL) - | typeName=( + : colType=(KW_DATE | KW_BOOLEAN | KW_NULL) + | colType=( KW_CHAR | KW_VARCHAR | KW_STRING @@ -210,12 +211,12 @@ columnType | KW_TIMESTAMP_LTZ | KW_DATETIME ) lengthOneDimension? - | typeName=KW_TIMESTAMP lengthOneDimension? ((KW_WITHOUT | KW_WITH) KW_LOCAL? KW_TIME KW_ZONE)? - | typeName=(KW_DECIMAL | KW_DEC | KW_NUMERIC | KW_FLOAT | KW_DOUBLE) lengthTwoOptionalDimension? - | type=(KW_ARRAY | KW_MULTISET) lengthOneTypeDimension? - | type=KW_MAP mapTypeDimension? - | type=KW_ROW rowTypeDimension? - | type=KW_RAW lengthTwoStringDimension? + | colType=KW_TIMESTAMP lengthOneDimension? ((KW_WITHOUT | KW_WITH) KW_LOCAL? KW_TIME KW_ZONE)? + | colType=(KW_DECIMAL | KW_DEC | KW_NUMERIC | KW_FLOAT | KW_DOUBLE) lengthTwoOptionalDimension? + | colType=(KW_ARRAY | KW_MULTISET) lengthOneTypeDimension? + | colType=KW_MAP mapTypeDimension? + | colType=KW_ROW rowTypeDimension? + | colType=KW_RAW lengthTwoStringDimension? ; lengthOneDimension @@ -240,6 +241,7 @@ mapTypeDimension rowTypeDimension : LESS_SYMBOL columnName columnType (COMMA columnName columnType)* GREATER_SYMBOL + | LR_BRACKET columnName columnType (COMMA columnName columnType)* RR_BRACKET ; columnConstraint @@ -247,10 +249,6 @@ columnConstraint | KW_NOT? KW_NULL ; -commentSpec - : KW_COMMENT STRING_LITERAL - ; - metadataColumnDefinition : columnNameCreate columnType KW_METADATA (KW_FROM metadataKey)? KW_VIRTUAL? ; @@ -260,7 +258,7 @@ metadataKey ; computedColumnDefinition - : columnNameCreate KW_AS computedColumnExpression commentSpec? + : columnNameCreate KW_AS computedColumnExpression (KW_COMMENT comment=STRING_LITERAL)? ; // 计算表达式 @@ -316,11 +314,13 @@ createCatalog ; createDatabase - : KW_CREATE KW_DATABASE ifNotExists? databasePathCreate commentSpec? withOption + : KW_CREATE KW_DATABASE ifNotExists? databasePathCreate (KW_COMMENT comment=STRING_LITERAL)? withOption ; createView - : KW_CREATE KW_TEMPORARY? KW_VIEW ifNotExists? viewPathCreate columnNameList? commentSpec? KW_AS queryStatement + : KW_CREATE KW_TEMPORARY? KW_VIEW ifNotExists? viewPathCreate columnNameList? ( + KW_COMMENT comment=STRING_LITERAL + )? KW_AS queryStatement ; createFunction @@ -487,8 +487,8 @@ selectClause projectItemDefinition : overWindowItem - | columnName (KW_AS? expression)? | expression (KW_AS? columnName)? + | columnName (KW_AS? expression)? ; overWindowItem @@ -513,9 +513,9 @@ tableReference ; tablePrimary - : KW_TABLE? tablePath systemTimePeriod? (KW_AS? correlationName)? - | viewPath systemTimePeriod? (KW_AS? correlationName)? - | KW_LATERAL KW_TABLE LR_BRACKET functionName LR_BRACKET functionParam (COMMA functionParam)* RR_BRACKET RR_BRACKET + : KW_TABLE? tablePath systemTimePeriod? + | viewPath systemTimePeriod? + | KW_LATERAL KW_TABLE LR_BRACKET functionCallExpression RR_BRACKET | KW_LATERAL? LR_BRACKET queryStatement RR_BRACKET | KW_UNNEST LR_BRACKET expression RR_BRACKET ; @@ -648,7 +648,7 @@ limitClause ; partitionByClause - : KW_PARTITION KW_BY columnName (COMMA columnName)* + : KW_PARTITION KW_BY (columnName | primaryExpression) (COMMA (columnName | primaryExpression))* ; quantifiers @@ -747,6 +747,12 @@ valueExpression | left=valueExpression comparisonOperator right=valueExpression # comparison ; +functionCallExpression + : reservedKeywordsNoParamsUsedAsFuncName + | functionNameAndParams + | functionNameWithParams LR_BRACKET (setQuantifier? functionParam (COMMA functionParam)*)? RR_BRACKET + ; + primaryExpression : KW_CASE whenClause+ (KW_ELSE elseExpression=expression)? KW_END # searchedCase | KW_CASE value=expression whenClause+ (KW_ELSE elseExpression=expression)? KW_END # simpleCase @@ -759,15 +765,14 @@ primaryExpression | ASTERISK_SIGN # star | uid DOT ASTERISK_SIGN # star // | LR_BRACKET namedExpression (COMMA namedExpression)+ RR_BRACKET #rowConstructor - | LR_BRACKET queryStatement RR_BRACKET # subqueryExpression - | functionName LR_BRACKET (setQuantifier? functionParam (COMMA functionParam)*)? RR_BRACKET # functionCall + | LR_BRACKET queryStatement RR_BRACKET # subqueryExpression + | functionCallExpression # functionCall // | identifier '->' expression #lambda // | '(' identifier (',' identifier)+ ')' '->' expression #lambda | value=primaryExpression LS_BRACKET index=valueExpression RS_BRACKET # subscript | identifier # columnReference | dereferenceDefinition # dereference | LR_BRACKET expression RR_BRACKET # parenthesizedExpression - | KW_CURRENT_TIMESTAMP # dateFunctionExpression // | EXTRACT LR_BRACKET field=identifier KW_FROM source=valueExpression RR_BRACKET #extract // | (SUBSTR | SUBSTRING) LR_BRACKET str=valueExpression (KW_FROM | COMMA) pos=valueExpression // ((KW_FOR | COMMA) len=valueExpression)? RR_BRACKET #substring @@ -782,6 +787,25 @@ functionNameCreate ; functionName + : reservedKeywordsUsedAsFuncName + | reservedKeywordsNoParamsUsedAsFuncName + | reservedKeywordsFollowParamsUsedAsFuncName + | uid + ; + +/** +* Built-in function name that is following with params directly without parentheses +* Reference Link:https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/functions/systemfunctions/#%E6%97%B6%E9%97%B4%E5%87%BD%E6%95%B0 +*/ +functionNameAndParams + : reservedKeywordsFollowParamsUsedAsFuncName STRING_LITERAL + | timeIntervalExpression + ; + +/** +* Function name that is need to follow with parentheses and params +*/ +functionNameWithParams : reservedKeywordsUsedAsFuncName | uid ; @@ -834,7 +858,7 @@ intervalValue ; tableAlias - : KW_AS? identifier identifierList? + : KW_AS? alias=identifier identifierList? ; errorCapturingIdentifier @@ -1077,6 +1101,23 @@ reservedKeywordsUsedAsFuncParam | ASTERISK_SIGN ; +/** +* Built-in function name without parentheses and params +*/ +reservedKeywordsNoParamsUsedAsFuncName + : KW_LOCALTIME + | KW_LOCALTIMESTAMP + | KW_CURRENT_TIME + | KW_CURRENT_DATE + | KW_CURRENT_TIMESTAMP + ; + +reservedKeywordsFollowParamsUsedAsFuncName + : KW_DATE + | KW_TIME + | KW_TIMESTAMP + ; + reservedKeywordsUsedAsFuncName : KW_ABS | KW_ARRAY @@ -1089,10 +1130,6 @@ reservedKeywordsUsedAsFuncName | KW_COLLECT | KW_COUNT | KW_CUME_DIST - | KW_CURRENT_DATE - | KW_CURRENT_TIME - | KW_CURRENT_TIMESTAMP - | KW_DATE | KW_DAYOFWEEK | KW_DAYOFYEAR | KW_DENSE_RANK @@ -1109,8 +1146,6 @@ reservedKeywordsUsedAsFuncName | KW_LEAD | KW_LEFT | KW_LN - | KW_LOCALTIME - | KW_LOCALTIMESTAMP | KW_LOWER | KW_MAP | KW_MAX @@ -1135,8 +1170,6 @@ reservedKeywordsUsedAsFuncName | KW_STDDEV_SAMP | KW_SUBSTRING | KW_SUM - | KW_TIME - | KW_TIMESTAMP | KW_TIMESTAMP_DIFF | KW_TRIM | KW_TRUNCATE @@ -1217,4 +1250,4 @@ nonReservedKeywords | KW_WEEK | KW_YEARS | KW_ZONE - ; + ; \ No newline at end of file diff --git a/src/grammar/hive/HiveSqlParser.g4 b/src/grammar/hive/HiveSqlParser.g4 index 68c177044..42eca35c0 100644 --- a/src/grammar/hive/HiveSqlParser.g4 +++ b/src/grammar/hive/HiveSqlParser.g4 @@ -86,7 +86,7 @@ execStatement | KW_MERGE QUERY_HINT? KW_INTO tableName (KW_AS? id_)? KW_USING joinSourcePart KW_ON expression whenClauses | KW_PREPARE id_ KW_FROM queryStatementExpression | KW_EXECUTE id_ KW_USING constantList - | KW_SET configPropertiesItem (DOT configPropertiesItem)* EQUAL .*? + | KW_SET configPropertiesItem ((DOT | COLON) configPropertiesItem)* EQUAL .*? ; loadStatement @@ -887,7 +887,9 @@ tableConstraint ; columnNameTypeConstraint - : colName=columnNameCreate columnType columnConstraint? (KW_COMMENT comment=StringLiteral)? + : colName=columnNameCreate colType=columnType columnConstraint? ( + KW_COMMENT comment=StringLiteral + )? ; columnConstraint @@ -1363,10 +1365,12 @@ joinToken ; lateralView - : KW_LATERAL KW_VIEW KW_OUTER function_ tableAlias (KW_AS id_ (COMMA id_)*)? + : KW_LATERAL KW_VIEW KW_OUTER function_ alias=tableAlias (KW_AS id_ (COMMA id_)*)? | COMMA? KW_LATERAL ( - KW_VIEW function_ tableAlias (KW_AS id_ (COMMA id_)*)? - | KW_TABLE LPAREN valuesClause RPAREN KW_AS? tableAlias (LPAREN id_ (COMMA id_)* RPAREN)? + KW_VIEW function_ alias=tableAlias (KW_AS id_ (COMMA id_)*)? + | KW_TABLE LPAREN valuesClause RPAREN KW_AS? alias=tableAlias ( + LPAREN id_ (COMMA id_)* RPAREN + )? ) ; diff --git a/src/grammar/impala/ImpalaSqlParser.g4 b/src/grammar/impala/ImpalaSqlParser.g4 index 198db2b31..75cb5889d 100644 --- a/src/grammar/impala/ImpalaSqlParser.g4 +++ b/src/grammar/impala/ImpalaSqlParser.g4 @@ -96,20 +96,20 @@ createKuduTableAsSelect : KW_CREATE KW_EXTERNAL? KW_TABLE ifNotExists? tableNameCreate ( LPAREN kuduTableElement (COMMA kuduTableElement)* (COMMA KW_PRIMARY KW_KEY columnAliases)? RPAREN )? (KW_PRIMARY KW_KEY columnAliases?)? (KW_PARTITION KW_BY kuduPartitionClause)? ( - KW_COMMENT stringLiteral + commentClause )? KW_STORED KW_AS KW_KUDU (KW_TBLPROPERTIES tblProp=properties)? (KW_AS queryStatement)? ; createView - : KW_CREATE KW_VIEW ifNotExists? viewNameCreate viewColumns? (KW_COMMENT stringLiteral)? ( + : KW_CREATE KW_VIEW ifNotExists? viewNameCreate viewColumns? commentClause? ( KW_TBLPROPERTIES tblProp=properties )? KW_AS queryStatement ; createSchema - : KW_CREATE (KW_SCHEMA | KW_DATABASE) ifNotExists? databaseNameCreate ( - KW_COMMENT comment=stringLiteral - )? (KW_LOCATION location=stringLiteral)? + : KW_CREATE (KW_SCHEMA | KW_DATABASE) ifNotExists? databaseNameCreate (commentClause)? ( + KW_LOCATION location=stringLiteral + )? ; createRole @@ -119,14 +119,14 @@ createRole createAggregateFunction : KW_CREATE KW_AGGREGATE? KW_FUNCTION ifNotExists? functionNameCreate ( LPAREN (type (COMMA type)*)? RPAREN - )? KW_RETURNS type (KW_INTERMEDIATE type)? KW_LOCATION STRING (KW_INIT_FN EQ STRING)? KW_UPDATE_FN EQ STRING KW_MERGE_FN EQ STRING ( + )? KW_RETURNS returnType=type (KW_INTERMEDIATE type)? KW_LOCATION STRING (KW_INIT_FN EQ STRING)? KW_UPDATE_FN EQ STRING KW_MERGE_FN EQ STRING ( KW_PREPARE_FN EQ STRING )? (KW_CLOSEFN EQ STRING)? (KW_SERIALIZE_FN EQ STRING)? (KW_FINALIZE_FN EQ STRING)? ; createFunction : KW_CREATE KW_FUNCTION ifNotExists? functionNameCreate (LPAREN (type (COMMA type)*)? RPAREN)? ( - KW_RETURNS type + KW_RETURNS returnType=type )? KW_LOCATION STRING KW_SYMBOL EQ symbol=stringLiteral ; @@ -569,11 +569,9 @@ tableOrViewPath ; createCommonItem - : (KW_SORT KW_BY columnAliases)? (KW_COMMENT comment=stringLiteral)? ( - KW_ROW KW_FORMAT rowFormat - )? (KW_WITH KW_SERDEPROPERTIES serdProp=properties)? (KW_STORED KW_AS fileFormat)? ( - KW_LOCATION location=stringLiteral - )? ( + : (KW_SORT KW_BY columnAliases)? commentClause? (KW_ROW KW_FORMAT rowFormat)? ( + KW_WITH KW_SERDEPROPERTIES serdProp=properties + )? (KW_STORED KW_AS fileFormat)? (KW_LOCATION location=stringLiteral)? ( KW_CACHED KW_IN cacheName=qualifiedName (KW_WITH KW_REPLICATION EQ INTEGER_VALUE)? | KW_UNCACHED )? (KW_TBLPROPERTIES tblProp=properties)? @@ -588,9 +586,11 @@ assignmentItem ; viewColumns - : LPAREN columnNamePathCreate (KW_COMMENT stringLiteral)? ( - COMMA columnNamePathCreate (KW_COMMENT stringLiteral)? - )* RPAREN + : LPAREN viewColumnItem? (COMMA viewColumnItem?)* RPAREN + ; + +viewColumnItem + : columnNamePathCreate commentClause? ; queryStatement @@ -621,7 +621,7 @@ columnSpec ; columnDefinition - : columnNamePathCreate type (KW_COMMENT stringLiteral)? + : columnNamePathCreate colType=type commentClause? ; kuduTableElement @@ -629,11 +629,15 @@ kuduTableElement ; kuduColumnDefinition - : columnNamePathCreate type (kuduAttributes kuduAttributes*?)? (KW_COMMENT stringLiteral)? ( + : columnNamePathCreate colType=type (kuduAttributes kuduAttributes*?)? commentClause? ( KW_PRIMARY KW_KEY )? ; +commentClause + : KW_COMMENT comment=stringLiteral + ; + columnSpecWithKudu : columnSpec (kuduAttributes kuduAttributes*?)? ; @@ -838,7 +842,7 @@ sampleType ; aliasedRelation - : relationPrimary (KW_AS? identifier columnAliases?)? + : relationPrimary (KW_AS? alias=identifier columnAliases?)? ; columnAliases diff --git a/src/grammar/mysql/MySqlParser.g4 b/src/grammar/mysql/MySqlParser.g4 index 328a55891..bc299c294 100644 --- a/src/grammar/mysql/MySqlParser.g4 +++ b/src/grammar/mysql/MySqlParser.g4 @@ -442,7 +442,7 @@ functionParameter ; routineOption - : KW_COMMENT STRING_LITERAL # routineComment + : KW_COMMENT comment=STRING_LITERAL # routineComment | KW_LANGUAGE KW_SQL # routineLanguage | KW_NOT? KW_DETERMINISTIC # routineBehavior | (KW_CONTAINS KW_SQL | KW_NO KW_SQL | KW_READS KW_SQL KW_DATA | KW_MODIFIES KW_SQL KW_DATA) # routineData @@ -483,7 +483,7 @@ constraintSymbol ; columnDefinition - : dataType columnConstraint* + : colType=dataType columnConstraint* ; columnConstraint @@ -494,7 +494,7 @@ columnConstraint | (KW_AUTO_INCREMENT | KW_ON KW_UPDATE currentTimestamp) # autoIncrementColumnConstraint | KW_PRIMARY? KW_KEY # primaryKeyColumnConstraint | KW_UNIQUE KW_KEY? # uniqueKeyColumnConstraint - | KW_COMMENT STRING_LITERAL # commentColumnConstraint + | KW_COMMENT comment=STRING_LITERAL # commentColumnConstraint | KW_COLUMN_FORMAT colformat=(KW_FIXED | KW_DYNAMIC | KW_DEFAULT) # formatColumnConstraint | KW_STORAGE storageval=(KW_DISK | KW_MEMORY | KW_DEFAULT) # storageColumnConstraint | referenceDefinition # referenceColumnConstraint @@ -536,7 +536,7 @@ tableOption | KW_DEFAULT? charSet '='? (charsetName | KW_DEFAULT) # tableOptionCharset | (KW_CHECKSUM | KW_PAGE_CHECKSUM) '='? boolValue=('0' | '1') # tableOptionChecksum | KW_DEFAULT? KW_COLLATE '='? collationName # tableOptionCollate - | KW_COMMENT '='? STRING_LITERAL # tableOptionComment + | KW_COMMENT '='? comment=STRING_LITERAL # tableOptionComment | KW_COMPRESSION '='? (STRING_LITERAL | ID) # tableOptionCompression | KW_CONNECTION '='? STRING_LITERAL # tableOptionConnection | (KW_DATA | KW_INDEX) KW_DIRECTORY '='? STRING_LITERAL # tableOptionDataDirectory diff --git a/src/grammar/postgresql/PostgreSqlParser.g4 b/src/grammar/postgresql/PostgreSqlParser.g4 index 0644229c9..21462305e 100644 --- a/src/grammar/postgresql/PostgreSqlParser.g4 +++ b/src/grammar/postgresql/PostgreSqlParser.g4 @@ -618,7 +618,7 @@ typedtableelement ; column_def - : column_name_create typename create_generic_options? ( + : column_name_create colType=typename create_generic_options? ( KW_STORAGE (KW_PLAIN | KW_EXTERNAL | KW_EXTENDED | KW_MAIN | KW_DEFAULT | colid) )? (KW_COMPRESSION colid)? (opt_collate_clause)? (KW_WITH KW_OPTIONS)? colconstraint* ; @@ -2161,12 +2161,12 @@ table_ref ; alias_clause - : KW_AS? colid (OPEN_PAREN name_list CLOSE_PAREN)? + : KW_AS? alias=colid (OPEN_PAREN name_list CLOSE_PAREN)? ; func_alias_clause : alias_clause - | (KW_AS colid? | colid) OPEN_PAREN tablefuncelementlist CLOSE_PAREN + | (KW_AS alias=colid? | alias=colid) OPEN_PAREN tablefuncelementlist CLOSE_PAREN ; join_type @@ -2596,7 +2596,7 @@ func_arg_list func_arg_expr : column_name | expression - | type_function_name (COLON_EQUALS | EQUALS_GREATER) expression + | type_function_name ((COLON_EQUALS | EQUALS_GREATER) expression)? ; array_expr diff --git a/src/grammar/spark/SparkSqlParser.g4 b/src/grammar/spark/SparkSqlParser.g4 index f87e0f23e..a08b71432 100644 --- a/src/grammar/spark/SparkSqlParser.g4 +++ b/src/grammar/spark/SparkSqlParser.g4 @@ -48,28 +48,30 @@ statement | KW_USE namespace? namespaceName # useNamespace | KW_SET KW_CATALOG (identifier | stringLit) # setCatalog | KW_CREATE namespace (ifNotExists)? namespaceNameCreate ( - commentSpec - | locationSpec + (KW_COMMENT comment=stringLit) + | (KW_LOCATION stringLit) | (KW_WITH (KW_DBPROPERTIES | KW_PROPERTIES) propertyList) - )* # createNamespace - | KW_ALTER namespace namespaceName KW_SET (KW_DBPROPERTIES | KW_PROPERTIES) propertyList # setNamespaceProperties - | KW_ALTER namespace namespaceName KW_SET locationSpec # setNamespaceLocation - | KW_DROP namespace (ifExists)? namespaceName (KW_RESTRICT | KW_CASCADE)? # dropNamespace - | KW_SHOW namespaces ((KW_FROM | KW_IN) multipartIdentifier)? (KW_LIKE? pattern=stringLit)? # showNamespaces - | createTableHeader (LEFT_PAREN createOrReplaceTableColTypeList RIGHT_PAREN)? tableProvider? createTableClauses ( - KW_AS? query - )? # createTable + )* # createNamespace + | KW_ALTER namespace namespaceName KW_SET (KW_DBPROPERTIES | KW_PROPERTIES) propertyList # setNamespaceProperties + | KW_ALTER namespace namespaceName KW_SET KW_LOCATION stringLit # setNamespaceLocation + | KW_DROP namespace (ifExists)? namespaceName (KW_RESTRICT | KW_CASCADE)? # dropNamespace + | KW_SHOW (KW_NAMESPACES | KW_DATABASES | KW_SCHEMAS) ((KW_FROM | KW_IN) multipartIdentifier)? ( + KW_LIKE? pattern=stringLit + )? # showNamespaces + | KW_CREATE KW_TEMPORARY? KW_EXTERNAL? KW_TABLE (ifNotExists)? tableNameCreate ( + LEFT_PAREN createOrReplaceTableColTypeList RIGHT_PAREN + )? tableProvider? createTableClauses (KW_AS? query)? # createTable | KW_CREATE KW_TABLE (ifNotExists)? target=tableNameCreate KW_LIKE source=tableName ( tableProvider | rowFormat | createFileFormat - | locationSpec + | (KW_LOCATION stringLit) | (KW_TBLPROPERTIES tableProps=propertyList) | tableLifecycle )* # createTableLike - | replaceTableHeader (LEFT_PAREN createOrReplaceTableColTypeList RIGHT_PAREN)? tableProvider? createTableClauses ( - KW_AS? query - )? # replaceTable + | (KW_CREATE KW_OR)? KW_REPLACE KW_TABLE tableNameCreate ( + LEFT_PAREN createOrReplaceTableColTypeList RIGHT_PAREN + )? tableProvider? createTableClauses (KW_AS? query)? # replaceTable | KW_ANALYZE KW_TABLE tableName partitionSpec? KW_COMPUTE KW_STATISTICS ( KW_NOSCAN | KW_FOR KW_COLUMNS columnNameSeq @@ -85,7 +87,7 @@ statement | KW_ALTER (KW_TABLE tableName | KW_VIEW viewName) KW_SET KW_TBLPROPERTIES propertyList # setTableProperties | KW_ALTER (KW_TABLE tableName | KW_VIEW viewName) KW_UNSET KW_TBLPROPERTIES (ifExists)? propertyList # unsetTableProperties | KW_ALTER KW_TABLE table=tableName (KW_ALTER | KW_CHANGE) KW_COLUMN? column=columnName alterColumnAction? # alterTableAlterColumn - | KW_ALTER KW_TABLE table=tableName partitionSpec? KW_CHANGE KW_COLUMN? colName=columnName colType colPosition? # hiveChangeColumn + | KW_ALTER KW_TABLE table=tableName partitionSpec? KW_CHANGE KW_COLUMN? colName=columnName columnType colPosition? # hiveChangeColumn | KW_ALTER KW_TABLE table=tableName partitionSpec? KW_REPLACE KW_COLUMNS LEFT_PAREN qualifiedColTypeWithPositionSeqForReplace RIGHT_PAREN # hiveReplaceColumns | KW_ALTER KW_TABLE tableName (partitionSpec)? KW_SET KW_SERDE stringLit ( @@ -97,7 +99,7 @@ statement | KW_ALTER (KW_TABLE tableName | KW_VIEW viewName) KW_DROP (ifExists)? partitionSpec ( COMMA partitionSpec )* KW_PURGE? # dropTablePartitions - | KW_ALTER KW_TABLE tableName (partitionSpec)? KW_SET locationSpec # setTableLocation + | KW_ALTER KW_TABLE tableName (partitionSpec)? KW_SET KW_LOCATION stringLit # setTableLocation | KW_ALTER KW_TABLE tableName KW_RECOVER KW_PARTITIONS # recoverPartitions | KW_ALTER KW_MATERIALIZED KW_VIEW viewName (KW_ENABLE | KW_DISABLE) KW_REWRITE # alterMaterializedViewRewrite | KW_ALTER KW_MATERIALIZED KW_VIEW viewName KW_SET KW_TBLPROPERTIES propertyList # alterMaterializedViewProperties @@ -105,7 +107,7 @@ statement | KW_DROP KW_VIEW (ifExists)? viewName # dropView | KW_DROP KW_MATERIALIZED KW_VIEW (ifExists)? viewName # dropMaterializedView | KW_CREATE (KW_OR KW_REPLACE)? (KW_GLOBAL? KW_TEMPORARY)? KW_VIEW (ifNotExists)? viewNameCreate identifierCommentList? ( - commentSpec + (KW_COMMENT comment=stringLit) | (KW_PARTITIONED KW_ON identifierList) | (KW_TBLPROPERTIES propertyList) )* KW_AS query # createView @@ -114,7 +116,7 @@ statement )? tableProvider (KW_OPTIONS propertyList)? # createTempViewUsing | KW_ALTER KW_VIEW viewName KW_AS? query # alterViewQuery | KW_CREATE (KW_OR KW_REPLACE)? KW_TEMPORARY? KW_FUNCTION (ifNotExists)? functionNameCreate KW_AS className=stringLit ( - KW_USING resource (COMMA resource)* + KW_USING (identifier stringLit) (COMMA (identifier stringLit))* )? # createFunction | // Self developed materialized view syntax by dtstack, spark not support now. @@ -125,8 +127,8 @@ statement | bucketSpec | rowFormat | createFileFormat - | locationSpec - | commentSpec + | (KW_LOCATION stringLit) + | (KW_COMMENT comment=stringLit) | (KW_TBLPROPERTIES tableProps=propertyList) )* KW_AS query # createMaterializedView | KW_DROP KW_TEMPORARY? KW_FUNCTION (ifExists)? functionName # dropFunction @@ -139,7 +141,7 @@ statement | KW_SHOW KW_COLUMNS (KW_FROM | KW_IN) table=tableName ((KW_FROM | KW_IN) namespaceName)? # showColumns | KW_SHOW KW_VIEWS ((KW_FROM | KW_IN) namespaceName)? (KW_LIKE? pattern=stringLit)? # showViews | KW_SHOW KW_PARTITIONS tableName partitionSpec? # showPartitions - | KW_SHOW functionKind? KW_FUNCTIONS ((KW_FROM | KW_IN) ns=namespaceName)? ( + | KW_SHOW (KW_USER | KW_SYSTEM | KW_ALL)? KW_FUNCTIONS ((KW_FROM | KW_IN) ns=namespaceName)? ( KW_LIKE? (legacy=multipartIdentifier | pattern=stringLit) )? # showFunctions | KW_SHOW KW_CREATE KW_TABLE tableName (KW_AS KW_SERDE)? # showCreateTable @@ -153,107 +155,78 @@ statement | (KW_DESC | KW_DESCRIBE) KW_DATABASE KW_EXTENDED? namespaceName # describeNamespace | (KW_DESC | KW_DESCRIBE) KW_TABLE? option=(KW_EXTENDED | KW_FORMATTED)? tableName partitionSpec? describeColName? # describeRelation | (KW_DESC | KW_DESCRIBE) KW_QUERY? query # describeQuery - | KW_COMMENT KW_ON namespace namespaceName KW_IS comment # commentNamespace - | KW_COMMENT KW_ON KW_TABLE tableName KW_IS comment # commentTable - | KW_REFRESH KW_TABLE tableName # refreshTable - | KW_REFRESH KW_FUNCTION functionName # refreshFunction - | KW_REFRESH (stringLit | .*?) # refreshResource - | KW_REFRESH KW_MATERIALIZED KW_VIEW viewName # refreshMaterializedView - | KW_CACHE KW_LAZY? KW_TABLE tableName (KW_OPTIONS options=propertyList)? (KW_AS? query)? # cacheTable - | KW_UNCACHE KW_TABLE (ifExists)? tableName # unCacheTable - | KW_CLEAR KW_CACHE # clearCache - | KW_LOAD KW_DATA KW_LOCAL? KW_INPATH path=stringLit KW_OVERWRITE? KW_INTO KW_TABLE tableName partitionSpec? # loadData - | KW_TRUNCATE KW_TABLE tableName partitionSpec? # truncateTable - | (KW_MSCK)? KW_REPAIR KW_TABLE tableName (option=(KW_ADD | KW_DROP | KW_SYNC) KW_PARTITIONS)? # repairTable - | op=(KW_ADD | KW_LIST) identifier .*? # manageResource - | KW_SET KW_ROLE .*? # failNativeCommand - | KW_SET KW_TIME KW_ZONE interval # setTimeZoneInterval - | KW_SET KW_TIME KW_ZONE timezone # setTimeZone - | KW_SET KW_TIME KW_ZONE .*? # setTimeZoneAny - | KW_SET (KW_VARIABLE | KW_VAR) assignmentList # setVariableAssignment - | KW_SET (KW_VARIABLE | KW_VAR) LEFT_PAREN multipartIdentifierList RIGHT_PAREN EQ LEFT_PAREN query RIGHT_PAREN # setVariableMultiAssignment - | KW_SET configKey EQ configValue # setConfig - | KW_SET configKey (EQ .*?)? # setConfigAndValue - | KW_SET .*? EQ configValue # setConfigAnyKey - | KW_SET .*? # setAny - | KW_RESET configKey # resetConfig - | KW_RESET .*? # resetAny + | KW_COMMENT KW_ON ((namespace namespaceName) | (KW_TABLE tableName)) KW_IS ( + stringLit + | KW_NULL + ) # commentTable + | KW_REFRESH KW_TABLE tableName # refreshTable + | KW_REFRESH KW_FUNCTION functionName # refreshFunction + | KW_REFRESH (stringLit | .*?) # refreshResource + | KW_REFRESH KW_MATERIALIZED KW_VIEW viewName # refreshMaterializedView + | KW_CACHE KW_LAZY? KW_TABLE tableName (KW_OPTIONS options=propertyList)? (KW_AS? query)? # cacheTable + | KW_UNCACHE KW_TABLE (ifExists)? tableName # unCacheTable + | KW_CLEAR KW_CACHE # clearCache + | KW_LOAD KW_DATA KW_LOCAL? KW_INPATH path=stringLit KW_OVERWRITE? KW_INTO KW_TABLE tableName partitionSpec? # loadData + | KW_TRUNCATE KW_TABLE tableName partitionSpec? # truncateTable + | (KW_MSCK)? KW_REPAIR KW_TABLE tableName (option=(KW_ADD | KW_DROP | KW_SYNC) KW_PARTITIONS)? # repairTable + | op=(KW_ADD | KW_LIST) identifier .*? # manageResource + | KW_SET KW_ROLE .*? # failNativeCommand + | KW_SET KW_TIME KW_ZONE interval # setTimeZoneInterval + | KW_SET KW_TIME KW_ZONE (stringLit | KW_LOCAL) # setTimeZone + | KW_SET KW_TIME KW_ZONE .*? # setTimeZoneAny + | KW_SET (KW_VARIABLE | KW_VAR) assignmentList # setVariableAssignment + | KW_SET (KW_VARIABLE | KW_VAR) LEFT_PAREN multipartIdentifierList RIGHT_PAREN EQ LEFT_PAREN query RIGHT_PAREN # setVariableMultiAssignment + | KW_SET quotedIdentifier EQ BACKQUOTED_IDENTIFIER # setConfig + | KW_SET quotedIdentifier (EQ .*?)? # setConfigAndValue + | KW_SET .*? EQ BACKQUOTED_IDENTIFIER # setConfigAnyKey + | KW_SET .*? # setAny + | KW_RESET quotedIdentifier # resetConfig + | KW_RESET .*? # resetAny | KW_CREATE KW_INDEX (ifNotExists)? identifier KW_ON KW_TABLE? tableName ( KW_USING indexType=identifier )? LEFT_PAREN multipartIdentifierPropertyList RIGHT_PAREN (KW_OPTIONS options=propertyList)? # createIndex | KW_DROP KW_INDEX (ifExists)? identifier KW_ON KW_TABLE? tableName # dropIndex - | KW_OPTIMIZE tableName whereClause? zorderClause # optimizeTable + | KW_OPTIMIZE tableName whereClause? KW_ZORDER KW_BY columnNameSeq # optimizeTable | unsupportedHiveNativeCommands .*? # unsupportHiveCommands ; -timezone - : stringLit - | KW_LOCAL - ; - -configKey - : quotedIdentifier - ; - -configValue - : backQuotedIdentifier - ; - unsupportedHiveNativeCommands - : kw1=KW_CREATE kw2=KW_ROLE - | kw1=KW_DROP kw2=KW_ROLE - | kw1=KW_GRANT kw2=KW_ROLE? - | kw1=KW_REVOKE kw2=KW_ROLE? - | kw1=KW_SHOW kw2=KW_GRANT + : kw1=(KW_CREATE | KW_DROP) kw2=KW_ROLE + | kw1=(KW_GRANT | KW_REVOKE) kw2=KW_ROLE? + | kw1=KW_SHOW kw2=( + KW_GRANT + | KW_PRINCIPALS + | KW_COMPACTIONS + | KW_TRANSACTIONS + | KW_INDEXES + | KW_LOCKS + ) | kw1=KW_SHOW kw2=KW_ROLE kw3=KW_GRANT? - | kw1=KW_SHOW kw2=KW_PRINCIPALS - | kw1=KW_SHOW kw2=KW_ROLES - | kw1=KW_SHOW kw2=KW_CURRENT kw3=KW_ROLES - | kw1=KW_EXPORT kw2=KW_TABLE - | kw1=KW_IMPORT kw2=KW_TABLE - | kw1=KW_SHOW kw2=KW_COMPACTIONS + | kw1=KW_SHOW KW_CURRENT? KW_ROLES | kw1=KW_SHOW kw2=KW_CREATE kw3=KW_TABLE - | kw1=KW_SHOW kw2=KW_TRANSACTIONS - | kw1=KW_SHOW kw2=KW_INDEXES - | kw1=KW_SHOW kw2=KW_LOCKS - | kw1=KW_CREATE kw2=KW_INDEX - | kw1=KW_DROP kw2=KW_INDEX - | kw1=KW_ALTER kw2=KW_INDEX - | kw1=KW_LOCK kw2=KW_TABLE - | kw1=KW_LOCK kw2=KW_DATABASE - | kw1=KW_UNLOCK kw2=KW_TABLE - | kw1=KW_UNLOCK kw2=KW_DATABASE - | kw1=KW_CREATE kw2=KW_TEMPORARY kw3=KW_MACRO - | kw1=KW_DROP kw2=KW_TEMPORARY kw3=KW_MACRO - | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_NOT kw4=KW_CLUSTERED - | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_CLUSTERED kw4=KW_BY - | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_NOT kw4=KW_SORTED + | kw1=(KW_CREATE | KW_DROP | KW_ALTER) kw2=KW_INDEX + | kw1=(KW_EXPORT | KW_IMPORT | KW_LOCK | KW_UNLOCK) kw2=KW_TABLE + | kw1=(KW_LOCK | KW_UNLOCK) kw2=KW_DATABASE + | kw1=(KW_CREATE | KW_DROP) kw2=KW_TEMPORARY kw3=KW_MACRO + | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_NOT kw4=(KW_CLUSTERED | KW_SORTED | KW_SKEWED) + | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=(KW_CLUSTERED | KW_SKEWED) kw4=KW_BY | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_SKEWED kw4=KW_BY - | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_NOT kw4=KW_SKEWED | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_NOT kw4=KW_STORED kw5=KW_AS kw6=KW_DIRECTORIES | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_SET kw4=KW_SKEWED kw5=KW_LOCATION - | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_EXCHANGE kw4=KW_PARTITION - | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_ARCHIVE kw4=KW_PARTITION - | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_UNARCHIVE kw4=KW_PARTITION + | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=(KW_EXCHANGE | KW_ARCHIVE | KW_UNARCHIVE) kw4=KW_PARTITION | kw1=KW_ALTER kw2=KW_TABLE tableName kw3=KW_TOUCH - | kw1=KW_ALTER kw2=KW_TABLE tableName partitionSpec? kw3=KW_COMPACT - | kw1=KW_ALTER kw2=KW_TABLE tableName partitionSpec? kw3=KW_CONCATENATE - | kw1=KW_ALTER kw2=KW_TABLE tableName partitionSpec? kw3=KW_SET kw4=KW_FILEFORMAT - | kw1=KW_ALTER kw2=KW_TABLE tableName partitionSpec? kw3=KW_REPLACE kw4=KW_COLUMNS + | kw1=KW_ALTER kw2=KW_TABLE tableName partitionSpec? ( + KW_COMPACT + | KW_CONCATENATE + | (KW_SET KW_FILEFORMAT) + | (KW_REPLACE KW_COLUMNS) + ) | kw1=KW_START kw2=KW_TRANSACTION | kw1=KW_COMMIT | kw1=KW_ROLLBACK | kw1=KW_DFS ; -createTableHeader - : KW_CREATE KW_TEMPORARY? KW_EXTERNAL? KW_TABLE (ifNotExists)? tableNameCreate - ; - -replaceTableHeader - : (KW_CREATE KW_OR)? KW_REPLACE KW_TABLE tableNameCreate - ; - bucketSpec : KW_CLUSTERED KW_BY identifierList (KW_SORTED KW_BY orderedIdentifierList)? KW_INTO INTEGER_VALUE KW_BUCKETS ; @@ -264,14 +237,6 @@ skewSpec )? ; -locationSpec - : KW_LOCATION stringLit - ; - -commentSpec - : KW_COMMENT stringLit - ; - query : ctes? queryTerm queryOrganization # queryStatement ; @@ -293,7 +258,7 @@ insertInto ; partitionSpecLocation - : partitionSpec locationSpec? + : partitionSpec (KW_LOCATION stringLit)? ; partitionSpec @@ -311,12 +276,6 @@ namespace | KW_SCHEMA ; -namespaces - : KW_NAMESPACES - | KW_DATABASES - | KW_SCHEMAS - ; - describeFuncName : identifierReference | stringLit @@ -349,8 +308,8 @@ createTableClauses | bucketSpec | rowFormat | createFileFormat - | locationSpec - | commentSpec + | KW_LOCATION stringLit + | KW_COMMENT comment=stringLit | (KW_TBLPROPERTIES tableProps=propertyList) | tableLifecycle )* @@ -411,13 +370,9 @@ storageHandler : stringLit (KW_WITH KW_SERDEPROPERTIES propertyList)? ; -resource - : identifier stringLit - ; - dmlStatementNoWith : insertInto query # insertFromQuery - | fromClause multiInsertQueryBody+ # multipleInsert + | fromClause (insertInto fromStatementBody)+ # multipleInsert | KW_DELETE KW_FROM tableName tableAlias whereClause? # deleteFromTable | KW_UPDATE tableName tableAlias setClause whereClause? # updateTable | KW_MERGE KW_INTO target=tableName targetAlias=tableAlias KW_USING ( @@ -476,10 +431,6 @@ queryOrganization )? windowClause? (KW_LIMIT (KW_ALL | limit=expression))? (KW_OFFSET offset=expression)? ; -multiInsertQueryBody - : insertInto fromStatementBody - ; - queryTerm : queryPrimary | left=queryTerm operator=(KW_INTERSECT | KW_UNION | KW_EXCEPT | KW_MINUS) setQuantifier? right=queryTerm @@ -489,9 +440,9 @@ queryTerm queryPrimary : querySpecification - | fromStatement + | fromClause fromStatementBody+ | KW_TABLE tableName - | inlineTable + | KW_VALUES expression (COMMA expression)* tableAlias | LEFT_PAREN query RIGHT_PAREN ; @@ -501,10 +452,6 @@ sortItem )? ; -fromStatement - : fromClause fromStatementBody+ - ; - fromStatementBody : transformClause whereClause? queryOrganization | selectClause lateralView* whereClause? aggregationClause? havingClause? windowClause? queryOrganization @@ -538,7 +485,10 @@ setClause ; matchedClause - : KW_WHEN KW_MATCHED (KW_AND matchedCond=booleanExpression)? KW_THEN matchedAction + : KW_WHEN KW_MATCHED (KW_AND matchedCond=booleanExpression)? KW_THEN ( + KW_DELETE + | KW_UPDATE KW_SET (ASTERISK | assignmentList) + ) ; notMatchedClause @@ -546,13 +496,10 @@ notMatchedClause ; notMatchedBySourceClause - : KW_WHEN KW_NOT KW_MATCHED KW_BY KW_SOURCE (KW_AND notMatchedBySourceCond=booleanExpression)? KW_THEN notMatchedBySourceAction - ; - -matchedAction - : KW_DELETE - | KW_UPDATE KW_SET ASTERISK - | KW_UPDATE KW_SET assignmentList + : KW_WHEN KW_NOT KW_MATCHED KW_BY KW_SOURCE (KW_AND notMatchedBySourceCond=booleanExpression)? KW_THEN ( + KW_DELETE + | KW_UPDATE KW_SET assignmentList + ) ; notMatchedAction @@ -562,11 +509,6 @@ notMatchedAction )* RIGHT_PAREN ; -notMatchedBySourceAction - : KW_DELETE - | KW_UPDATE KW_SET assignmentList - ; - assignmentList : assignment (COMMA assignment)* ; @@ -598,14 +540,8 @@ fromClause : KW_FROM relation (COMMA relation)* lateralView* pivotClause? unpivotClause? ; -functionKind - : KW_USER - | KW_SYSTEM - | KW_ALL - ; - temporalClause - : KW_FOR? (KW_SYSTEM_VERSION | KW_VERSION) KW_AS KW_OF version + : KW_FOR? (KW_SYSTEM_VERSION | KW_VERSION) KW_AS KW_OF (INTEGER_VALUE | stringLit) | KW_FOR? (KW_SYSTEM_TIME | KW_TIMESTAMP) KW_AS KW_OF timestamp=valueExpression ; @@ -628,12 +564,9 @@ groupByClause groupingAnalytics : (KW_ROLLUP | KW_CUBE) LEFT_PAREN groupingSet (COMMA groupingSet)* RIGHT_PAREN - | KW_GROUPING KW_SETS LEFT_PAREN groupingElement (COMMA groupingElement)* RIGHT_PAREN - ; - -groupingElement - : groupingAnalytics - | groupingSet + | KW_GROUPING KW_SETS LEFT_PAREN (groupingAnalytics | groupingSet) ( + COMMA (groupingAnalytics | groupingSet) + )* RIGHT_PAREN ; groupingSet @@ -658,55 +591,31 @@ pivotValue ; unpivotClause - : KW_UNPIVOT nullOperator=unpivotNullClause? LEFT_PAREN operator=unpivotOperator RIGHT_PAREN ( - KW_AS? identifier - )? - ; - -unpivotNullClause - : (KW_INCLUDE | KW_EXCLUDE) KW_NULLS - ; - -unpivotOperator - : (unpivotSingleValueColumnClause | unpivotMultiValueColumnClause) + : KW_UNPIVOT ((KW_INCLUDE | KW_EXCLUDE) KW_NULLS)? LEFT_PAREN ( + unpivotSingleValueColumnClause + | unpivotMultiValueColumnClause + ) RIGHT_PAREN (KW_AS? identifier)? ; unpivotSingleValueColumnClause - : unpivotValueColumn KW_FOR unpivotNameColumn KW_IN LEFT_PAREN unpivotColumns+=unpivotColumnAndAlias ( + : identifier KW_FOR identifier KW_IN LEFT_PAREN unpivotColumns+=unpivotColumnAndAlias ( COMMA unpivotColumns+=unpivotColumnAndAlias )* RIGHT_PAREN ; unpivotMultiValueColumnClause - : LEFT_PAREN unpivotValueColumns+=unpivotValueColumn ( - COMMA unpivotValueColumns+=unpivotValueColumn - )* RIGHT_PAREN KW_FOR unpivotNameColumn KW_IN LEFT_PAREN unpivotColumnSets+=unpivotColumnSet ( - COMMA unpivotColumnSets+=unpivotColumnSet - )* RIGHT_PAREN + : LEFT_PAREN unpivotValueColumns+=identifier (COMMA unpivotValueColumns+=identifier)* RIGHT_PAREN KW_FOR identifier KW_IN LEFT_PAREN + unpivotColumnSets+=unpivotColumnSet (COMMA unpivotColumnSets+=unpivotColumnSet)* RIGHT_PAREN ; unpivotColumnSet - : LEFT_PAREN unpivotColumns+=unpivotColumn (COMMA unpivotColumns+=unpivotColumn)* RIGHT_PAREN unpivotAlias? - ; - -unpivotValueColumn - : identifier - ; - -unpivotNameColumn - : identifier + : LEFT_PAREN unpivotColumns+=multipartIdentifier (COMMA unpivotColumns+=multipartIdentifier)* RIGHT_PAREN ( + KW_AS? identifier + )? ; unpivotColumnAndAlias - : unpivotColumn unpivotAlias? - ; - -unpivotColumn - : multipartIdentifier - ; - -unpivotAlias - : KW_AS? identifier + : multipartIdentifier (KW_AS? identifier)? ; ifNotExists @@ -730,13 +639,7 @@ setQuantifier relation : tableName - | KW_LATERAL? relationPrimary relationExtension* - ; - -relationExtension - : joinRelation - | pivotClause - | unpivotClause + | KW_LATERAL? relationPrimary (joinRelation | pivotClause | unpivotClause)* ; joinRelation @@ -748,10 +651,8 @@ joinType : KW_INNER? | KW_CROSS | KW_LEFT KW_OUTER? - | KW_LEFT? KW_SEMI - | KW_RIGHT KW_OUTER? - | KW_FULL KW_OUTER? - | KW_LEFT? KW_ANTI + | KW_LEFT? (KW_SEMI | KW_ANTI) + | (KW_RIGHT | KW_FULL) KW_OUTER? ; joinCriteria @@ -795,19 +696,15 @@ identifierCommentList ; identifierComment - : columnNameCreate commentSpec? + : columnNameCreate (KW_COMMENT comment=stringLit)? ; relationPrimary : (tableName | viewName | identifierReference) temporalClause? sample? tableAlias | LEFT_PAREN query RIGHT_PAREN sample? tableAlias | LEFT_PAREN relation RIGHT_PAREN sample? tableAlias - | inlineTable - | functionTable - ; - -inlineTable - : KW_VALUES expression (COMMA expression)* tableAlias + | KW_VALUES expression (COMMA expression)* tableAlias + | functionName LEFT_PAREN (functionTableArgument (COMMA functionTableArgument)*)? RIGHT_PAREN tableAlias ; functionTableSubqueryArgument @@ -846,12 +743,8 @@ functionTableArgument | functionArgument ; -functionTable - : functionName LEFT_PAREN (functionTableArgument (COMMA functionTableArgument)*)? RIGHT_PAREN tableAlias - ; - tableAlias - : (KW_AS? strictIdentifier identifierList?)? + : (KW_AS? alias=strictIdentifier identifierList?)? ; rowFormat @@ -905,7 +798,7 @@ partitionFieldList partitionField : transform - | colType + | columnType ; transform @@ -1187,7 +1080,7 @@ type dataType : complex=KW_ARRAY LT dataType GT | complex=KW_MAP LT dataType COMMA dataType GT - | complex=KW_STRUCT (LT complexColTypeList? GT | NEQ) + | complex=KW_STRUCT (LT (complexColType (COMMA complexColType)*)? GT | NEQ) | KW_INTERVAL (KW_YEAR | KW_MONTH) (KW_TO KW_MONTH)? | KW_INTERVAL (KW_DAY | KW_HOUR | KW_MINUTE | KW_SECOND) ( KW_TO (KW_HOUR | KW_MINUTE | KW_SECOND) @@ -1213,25 +1106,21 @@ qualifiedColTypeWithPositionForReplace colDefinitionDescriptorWithPosition : KW_NOT KW_NULL - | defaultExpression - | commentSpec + | KW_DEFAULT expression + | KW_COMMENT comment=stringLit | colPosition ; -defaultExpression - : KW_DEFAULT expression - ; - variableDefaultExpression : (KW_DEFAULT | EQ) expression ; colTypeList - : colType (COMMA colType)* + : columnType (COMMA columnType)* ; -colType - : colName=errorCapturingIdentifier dataType (KW_NOT KW_NULL)? commentSpec? +columnType + : colName=errorCapturingIdentifier dataType (KW_NOT KW_NULL)? (KW_COMMENT comment=stringLit)? ; createOrReplaceTableColTypeList @@ -1239,26 +1128,18 @@ createOrReplaceTableColTypeList ; createOrReplaceTableColType - : colName=columnNameCreate dataType colDefinitionOption* + : colName=columnNameCreate colType=dataType colDefinitionOption* ; colDefinitionOption : KW_NOT KW_NULL - | defaultExpression - | generationExpression - | commentSpec - ; - -generationExpression - : KW_GENERATED KW_ALWAYS KW_AS LEFT_PAREN expression RIGHT_PAREN - ; - -complexColTypeList - : complexColType (COMMA complexColType)* + | KW_DEFAULT expression + | KW_GENERATED KW_ALWAYS KW_AS LEFT_PAREN expression RIGHT_PAREN + | KW_COMMENT comment=stringLit ; complexColType - : identifier COLON? dataType (KW_NOT KW_NULL)? commentSpec? + : identifier COLON? dataType (KW_NOT KW_NULL)? (KW_COMMENT comment=stringLit)? ; whenClause @@ -1266,15 +1147,9 @@ whenClause ; windowClause - : KW_WINDOW namedWindow (COMMA namedWindow)* - ; - -zorderClause - : KW_ZORDER KW_BY columnNameSeq - ; - -namedWindow - : name=errorCapturingIdentifier KW_AS windowSpec + : KW_WINDOW name=errorCapturingIdentifier KW_AS windowSpec ( + COMMA name=errorCapturingIdentifier KW_AS windowSpec + )* ; windowSpec @@ -1295,10 +1170,8 @@ windowSpec * https://github.com/tunnelvisionlabs/antlr4ts/issues/417 */ windowFrame - : frameType=KW_RANGE start_=frameBound - | frameType=KW_ROWS start_=frameBound - | frameType=KW_RANGE KW_BETWEEN start_=frameBound KW_AND end=frameBound - | frameType=KW_ROWS KW_BETWEEN start_=frameBound KW_AND end=frameBound + : frameType=(KW_RANGE | KW_ROWS) start_=frameBound + | frameType=(KW_RANGE | KW_ROWS) KW_BETWEEN start_=frameBound KW_AND end=frameBound ; frameBound @@ -1357,29 +1230,26 @@ quotedIdentifier | DOUBLEQUOTED_STRING ; -backQuotedIdentifier - : BACKQUOTED_IDENTIFIER - ; - number - : MINUS? EXPONENT_VALUE - | MINUS? DECIMAL_VALUE - | MINUS? (EXPONENT_VALUE | DECIMAL_VALUE) - | MINUS? INTEGER_VALUE - | MINUS? BIGINT_LITERAL - | MINUS? SMALLINT_LITERAL - | MINUS? TINYINT_LITERAL - | MINUS? DOUBLE_LITERAL - | MINUS? FLOAT_LITERAL - | MINUS? BIGDECIMAL_LITERAL + : MINUS? ( + EXPONENT_VALUE + | DECIMAL_VALUE + | INTEGER_VALUE + | BIGINT_LITERAL + | SMALLINT_LITERAL + | TINYINT_LITERAL + | DOUBLE_LITERAL + | FLOAT_LITERAL + | BIGDECIMAL_LITERAL + ) ; alterColumnAction : KW_TYPE dataType - | commentSpec + | KW_COMMENT comment=stringLit | colPosition | setOrDrop=(KW_SET | KW_DROP) KW_NOT KW_NULL - | KW_SET defaultExpression + | KW_SET KW_DEFAULT expression | dropDefault=KW_DROP KW_DEFAULT ; @@ -1388,16 +1258,6 @@ stringLit | DOUBLEQUOTED_STRING ; -comment - : stringLit - | KW_NULL - ; - -version - : INTEGER_VALUE - | stringLit - ; - // When `SQL_standard_keyword_behavior=true`, there are 2 kinds of keywords in Spark SQL. // - Reserved keywords: // Keywords that are reserved and can't be used as identifiers for table, view, column, diff --git a/src/grammar/trino/TrinoSql.g4 b/src/grammar/trino/TrinoSql.g4 index 340d40491..6ce90a081 100644 --- a/src/grammar/trino/TrinoSql.g4 +++ b/src/grammar/trino/TrinoSql.g4 @@ -84,11 +84,11 @@ statement | KW_ALTER KW_SCHEMA schemaRef KW_RENAME KW_TO schemaNameCreate # renameSchema | KW_ALTER KW_SCHEMA schemaRef KW_SET KW_AUTHORIZATION principal # setSchemaAuthorization | KW_CREATE (KW_OR KW_REPLACE)? KW_TABLE (KW_IF KW_NOT KW_EXISTS)? tableNameCreate columnListCreate? ( - KW_COMMENT string + KW_COMMENT comment=string )? (KW_WITH properties)? KW_AS (rootQuery | '(' rootQuery ')') (KW_WITH (KW_NO)? KW_DATA)? # createTableAsSelect | KW_CREATE (KW_OR KW_REPLACE)? KW_TABLE (KW_IF KW_NOT KW_EXISTS)? tableNameCreate '(' tableElement ( ',' tableElement - )* ')' (KW_COMMENT string)? (KW_WITH properties)? # createTable + )* ')' (KW_COMMENT comment=string)? (KW_WITH properties)? # createTable | KW_DROP KW_TABLE (KW_IF KW_EXISTS)? tableRef # dropTable | KW_INSERT KW_INTO tableRef columnList? rootQuery # insertInto | KW_DELETE KW_FROM tableRef (KW_WHERE booleanExpression)? # delete @@ -110,8 +110,8 @@ statement | KW_ANALYZE tableRef (KW_WITH properties)? # analyze | KW_CREATE (KW_OR KW_REPLACE)? KW_MATERIALIZED KW_VIEW (KW_IF KW_NOT KW_EXISTS)? viewNameCreate ( KW_GRACE KW_PERIOD interval - )? (KW_COMMENT string)? (KW_WITH properties)? KW_AS rootQuery # createMaterializedView - | KW_CREATE (KW_OR KW_REPLACE)? KW_VIEW viewNameCreate (KW_COMMENT string)? ( + )? (KW_COMMENT comment=string)? (KW_WITH properties)? KW_AS rootQuery # createMaterializedView + | KW_CREATE (KW_OR KW_REPLACE)? KW_VIEW viewNameCreate (KW_COMMENT comment=string)? ( KW_SECURITY (KW_DEFINER | KW_INVOKER) )? (KW_WITH properties)? KW_AS rootQuery # createView | KW_REFRESH KW_MATERIALIZED KW_VIEW viewRef # refreshMaterializedView @@ -214,7 +214,7 @@ tableElement ; columnDefinition - : columnNameCreate type (KW_NOT KW_NULL)? (KW_COMMENT string)? (KW_WITH properties)? + : columnNameCreate colType=type (KW_NOT KW_NULL)? (KW_COMMENT comment=string)? (KW_WITH properties)? ; likeClause @@ -330,7 +330,7 @@ setQuantifier ; selectItem - : (columnRef | expression) (KW_AS? identifier)? # selectSingle + : (columnRef | expression) (KW_AS? alias=identifier)? # selectSingle | primaryExpression '.' ASTERISK (KW_AS columnAliases)? # selectAll | ASTERISK # selectAll ; @@ -425,7 +425,7 @@ variableDefinition ; aliasedRelation - : relationPrimary (KW_AS? identifier columnAliases?)? + : relationPrimary (KW_AS? alias=identifier columnAliases?)? ; columnListCreate diff --git a/src/index.ts b/src/index.ts index 315aa589c..75cef682d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -27,4 +27,10 @@ export type { WordRange, TextSlice } from './parser/common/textAndWord'; export type { SyntaxError, ParseError, ErrorListener } from './parser/common/parseErrorListener'; -export type { StmtContext, EntityContext } from './parser/common/entityCollector'; +export type { + StmtContext, + EntityContext, + CommonEntityContext, + ColumnEntityContext, + FuncEntityContext, +} from './parser/common/entityCollector'; diff --git a/src/lib/flink/FlinkSqlParser.interp b/src/lib/flink/FlinkSqlParser.interp index 858009caf..3eb10c9ad 100644 --- a/src/lib/flink/FlinkSqlParser.interp +++ b/src/lib/flink/FlinkSqlParser.interp @@ -1123,7 +1123,6 @@ lengthOneTypeDimension mapTypeDimension rowTypeDimension columnConstraint -commentSpec metadataColumnDefinition metadataKey computedColumnDefinition @@ -1221,9 +1220,12 @@ booleanExpression predicate likePredicate valueExpression +functionCallExpression primaryExpression functionNameCreate functionName +functionNameAndParams +functionNameWithParams functionParam dereferenceDefinition correlationName @@ -1273,9 +1275,11 @@ setQuantifier timePointUnit timeIntervalUnit reservedKeywordsUsedAsFuncParam +reservedKeywordsNoParamsUsedAsFuncName +reservedKeywordsFollowParamsUsedAsFuncName reservedKeywordsUsedAsFuncName nonReservedKeywords atn: -[4, 1, 541, 2272, 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, 1, 0, 5, 0, 378, 8, 0, 10, 0, 12, 0, 381, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 387, 8, 1, 1, 1, 3, 1, 390, 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, 3, 2, 404, 8, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 422, 8, 4, 1, 5, 1, 5, 3, 5, 426, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 435, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 440, 8, 7, 1, 8, 1, 8, 1, 8, 5, 8, 445, 8, 8, 10, 8, 12, 8, 448, 9, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 458, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 465, 8, 11, 10, 11, 12, 11, 468, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 479, 8, 12, 1, 12, 3, 12, 482, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 489, 8, 12, 1, 12, 3, 12, 492, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 500, 8, 12, 1, 12, 1, 12, 3, 12, 504, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 509, 8, 12, 1, 12, 3, 12, 512, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 519, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 3, 15, 527, 8, 15, 1, 16, 1, 16, 3, 16, 531, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 543, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 551, 8, 18, 1, 18, 1, 18, 3, 18, 555, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 587, 8, 18, 1, 19, 3, 19, 590, 8, 19, 1, 19, 4, 19, 593, 8, 19, 11, 19, 12, 19, 594, 1, 20, 1, 20, 3, 20, 599, 8, 20, 1, 21, 1, 21, 3, 21, 603, 8, 21, 1, 21, 1, 21, 3, 21, 607, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 614, 8, 21, 10, 21, 12, 21, 617, 9, 21, 1, 21, 1, 21, 3, 21, 621, 8, 21, 1, 21, 1, 21, 3, 21, 625, 8, 21, 1, 21, 1, 21, 3, 21, 629, 8, 21, 1, 21, 1, 21, 3, 21, 633, 8, 21, 1, 21, 3, 21, 636, 8, 21, 1, 21, 1, 21, 3, 21, 640, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 645, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 651, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 656, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 661, 8, 24, 1, 24, 3, 24, 664, 8, 24, 1, 25, 1, 25, 3, 25, 668, 8, 25, 1, 26, 1, 26, 3, 26, 672, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 678, 8, 27, 10, 27, 12, 27, 681, 9, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 3, 28, 688, 8, 28, 1, 28, 1, 28, 3, 28, 692, 8, 28, 1, 28, 1, 28, 3, 28, 696, 8, 28, 1, 28, 1, 28, 3, 28, 700, 8, 28, 1, 28, 1, 28, 3, 28, 704, 8, 28, 1, 28, 1, 28, 3, 28, 708, 8, 28, 1, 28, 1, 28, 3, 28, 712, 8, 28, 1, 28, 1, 28, 3, 28, 716, 8, 28, 1, 28, 1, 28, 3, 28, 720, 8, 28, 3, 28, 722, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 732, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 740, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 762, 8, 34, 10, 34, 12, 34, 765, 9, 34, 1, 34, 1, 34, 1, 35, 1, 35, 3, 35, 771, 8, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 777, 8, 35, 1, 35, 3, 35, 780, 8, 35, 1, 35, 3, 35, 783, 8, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 793, 8, 37, 1, 37, 3, 37, 796, 8, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 804, 8, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 3, 42, 816, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 838, 8, 46, 10, 46, 12, 46, 841, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 5, 47, 850, 8, 47, 10, 47, 12, 47, 853, 9, 47, 1, 47, 1, 47, 3, 47, 857, 8, 47, 1, 48, 1, 48, 3, 48, 861, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 5, 49, 867, 8, 49, 10, 49, 12, 49, 870, 9, 49, 1, 49, 3, 49, 873, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 879, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 889, 8, 52, 1, 52, 1, 52, 3, 52, 893, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 899, 8, 53, 1, 53, 1, 53, 3, 53, 903, 8, 53, 1, 53, 1, 53, 3, 53, 907, 8, 53, 1, 53, 3, 53, 910, 8, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 919, 8, 54, 1, 54, 1, 54, 3, 54, 923, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 930, 8, 54, 1, 54, 3, 54, 933, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 941, 8, 55, 10, 55, 12, 55, 944, 9, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 951, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 959, 8, 57, 1, 58, 1, 58, 3, 58, 963, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 978, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 997, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1008, 8, 66, 1, 66, 1, 66, 3, 66, 1012, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1019, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 1024, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 1030, 8, 68, 1, 68, 1, 68, 3, 68, 1034, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 3, 69, 1041, 8, 69, 1, 69, 1, 69, 3, 69, 1045, 8, 69, 1, 70, 1, 70, 3, 70, 1049, 8, 70, 1, 70, 1, 70, 3, 70, 1053, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1061, 8, 71, 1, 71, 1, 71, 3, 71, 1065, 8, 71, 1, 71, 1, 71, 1, 72, 3, 72, 1070, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1076, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1082, 8, 73, 1, 73, 3, 73, 1085, 8, 73, 1, 73, 1, 73, 3, 73, 1089, 8, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1098, 8, 75, 10, 75, 12, 75, 1101, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 1107, 8, 76, 10, 76, 12, 76, 1110, 9, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1121, 8, 77, 11, 77, 12, 77, 1122, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 4, 78, 1133, 8, 78, 11, 78, 12, 78, 1134, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 1150, 8, 79, 1, 79, 3, 79, 1153, 8, 79, 1, 79, 1, 79, 3, 79, 1157, 8, 79, 1, 79, 3, 79, 1160, 8, 79, 3, 79, 1162, 8, 79, 1, 79, 1, 79, 1, 79, 3, 79, 1167, 8, 79, 1, 79, 1, 79, 3, 79, 1171, 8, 79, 1, 79, 3, 79, 1174, 8, 79, 5, 79, 1176, 8, 79, 10, 79, 12, 79, 1179, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1185, 8, 80, 10, 80, 12, 80, 1188, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1194, 8, 81, 10, 81, 12, 81, 1197, 9, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, 1204, 8, 82, 10, 82, 12, 82, 1207, 9, 82, 1, 82, 1, 82, 3, 82, 1211, 8, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 84, 1, 84, 3, 84, 1222, 8, 84, 1, 84, 3, 84, 1225, 8, 84, 1, 84, 3, 84, 1228, 8, 84, 1, 84, 3, 84, 1231, 8, 84, 1, 84, 3, 84, 1234, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 1240, 8, 84, 1, 85, 1, 85, 3, 85, 1244, 8, 85, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 1250, 8, 85, 10, 85, 12, 85, 1253, 9, 85, 3, 85, 1255, 8, 85, 1, 86, 1, 86, 1, 86, 3, 86, 1260, 8, 86, 1, 86, 3, 86, 1263, 8, 86, 1, 86, 1, 86, 3, 86, 1267, 8, 86, 1, 86, 3, 86, 1270, 8, 86, 3, 86, 1272, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1286, 8, 87, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 5, 89, 1295, 8, 89, 10, 89, 12, 89, 1298, 9, 89, 1, 89, 1, 89, 3, 89, 1302, 8, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1310, 8, 89, 1, 89, 3, 89, 1313, 8, 89, 1, 89, 3, 89, 1316, 8, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1321, 8, 89, 5, 89, 1323, 8, 89, 10, 89, 12, 89, 1326, 9, 89, 1, 90, 1, 90, 3, 90, 1330, 8, 90, 1, 91, 3, 91, 1333, 8, 91, 1, 91, 1, 91, 3, 91, 1337, 8, 91, 1, 91, 3, 91, 1340, 8, 91, 1, 91, 3, 91, 1343, 8, 91, 1, 91, 1, 91, 3, 91, 1347, 8, 91, 1, 91, 3, 91, 1350, 8, 91, 1, 91, 3, 91, 1353, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 5, 91, 1363, 8, 91, 10, 91, 12, 91, 1366, 9, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1372, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 1383, 8, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 5, 96, 1408, 8, 96, 10, 96, 12, 96, 1411, 9, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1432, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1445, 8, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1455, 8, 103, 10, 103, 12, 103, 1458, 9, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1468, 8, 104, 10, 104, 12, 104, 1471, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1480, 8, 104, 10, 104, 12, 104, 1483, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1492, 8, 104, 10, 104, 12, 104, 1495, 9, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1500, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1525, 8, 111, 10, 111, 12, 111, 1528, 9, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 3, 113, 1535, 8, 113, 1, 113, 1, 113, 3, 113, 1539, 8, 113, 1, 113, 3, 113, 1542, 8, 113, 1, 113, 3, 113, 1545, 8, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1552, 8, 114, 1, 114, 3, 114, 1555, 8, 114, 1, 114, 3, 114, 1558, 8, 114, 1, 114, 3, 114, 1561, 8, 114, 1, 114, 3, 114, 1564, 8, 114, 1, 114, 3, 114, 1567, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1572, 8, 114, 1, 114, 3, 114, 1575, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1582, 8, 115, 10, 115, 12, 115, 1585, 9, 115, 1, 116, 1, 116, 3, 116, 1589, 8, 116, 1, 116, 1, 116, 3, 116, 1593, 8, 116, 1, 117, 1, 117, 1, 117, 3, 117, 1598, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1605, 8, 118, 10, 118, 12, 118, 1608, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1626, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1632, 8, 120, 10, 120, 12, 120, 1635, 9, 120, 1, 121, 1, 121, 1, 121, 4, 121, 1640, 8, 121, 11, 121, 12, 121, 1641, 1, 121, 1, 121, 3, 121, 1646, 8, 121, 1, 122, 1, 122, 3, 122, 1650, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1660, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1686, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 5, 125, 1692, 8, 125, 10, 125, 12, 125, 1695, 9, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1706, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1728, 8, 130, 3, 130, 1730, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1741, 8, 130, 1, 130, 5, 130, 1744, 8, 130, 10, 130, 12, 130, 1747, 9, 130, 1, 131, 3, 131, 1750, 8, 131, 1, 131, 1, 131, 3, 131, 1754, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1761, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1768, 8, 131, 10, 131, 12, 131, 1771, 9, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1776, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1789, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1796, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1801, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1807, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1814, 8, 131, 3, 131, 1816, 8, 131, 1, 132, 3, 132, 1819, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1829, 8, 132, 10, 132, 12, 132, 1832, 9, 132, 1, 132, 1, 132, 3, 132, 1836, 8, 132, 1, 132, 3, 132, 1839, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1845, 8, 132, 3, 132, 1847, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1853, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1874, 8, 133, 10, 133, 12, 133, 1877, 9, 133, 1, 134, 1, 134, 1, 134, 4, 134, 1882, 8, 134, 11, 134, 12, 134, 1883, 1, 134, 1, 134, 3, 134, 1888, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 4, 134, 1895, 8, 134, 11, 134, 12, 134, 1896, 1, 134, 1, 134, 3, 134, 1901, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1917, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1926, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1950, 8, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1955, 8, 134, 10, 134, 12, 134, 1958, 9, 134, 3, 134, 1960, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1971, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1978, 8, 134, 10, 134, 12, 134, 1981, 9, 134, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 1987, 8, 136, 1, 137, 1, 137, 1, 137, 1, 137, 3, 137, 1993, 8, 137, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 3, 140, 2001, 8, 140, 1, 141, 1, 141, 1, 141, 3, 141, 2006, 8, 141, 1, 142, 1, 142, 3, 142, 2010, 8, 142, 1, 143, 1, 143, 1, 143, 4, 143, 2015, 8, 143, 11, 143, 12, 143, 2016, 1, 144, 1, 144, 1, 144, 3, 144, 2022, 8, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 3, 146, 2030, 8, 146, 1, 146, 1, 146, 3, 146, 2034, 8, 146, 1, 147, 3, 147, 2037, 8, 147, 1, 147, 1, 147, 3, 147, 2041, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 2048, 8, 149, 11, 149, 12, 149, 2049, 1, 149, 3, 149, 2053, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 5, 151, 2062, 8, 151, 10, 151, 12, 151, 2065, 9, 151, 1, 152, 1, 152, 1, 152, 3, 152, 2070, 8, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 3, 158, 2088, 8, 158, 1, 159, 1, 159, 1, 159, 3, 159, 2093, 8, 159, 1, 160, 1, 160, 1, 160, 3, 160, 2098, 8, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 3, 160, 2105, 8, 160, 3, 160, 2107, 8, 160, 1, 161, 1, 161, 1, 161, 3, 161, 2112, 8, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 3, 161, 2119, 8, 161, 3, 161, 2121, 8, 161, 1, 162, 1, 162, 1, 162, 3, 162, 2126, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2133, 8, 162, 3, 162, 2135, 8, 162, 1, 163, 1, 163, 1, 163, 3, 163, 2140, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2147, 8, 163, 3, 163, 2149, 8, 163, 1, 164, 1, 164, 1, 164, 5, 164, 2154, 8, 164, 10, 164, 12, 164, 2157, 9, 164, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 5, 168, 2173, 8, 168, 10, 168, 12, 168, 2176, 9, 168, 1, 168, 1, 168, 1, 169, 1, 169, 3, 169, 2182, 8, 169, 1, 169, 3, 169, 2185, 8, 169, 1, 170, 1, 170, 1, 170, 3, 170, 2190, 8, 170, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 2196, 8, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 2204, 8, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2220, 8, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2229, 8, 174, 1, 175, 1, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 2239, 8, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 2246, 8, 177, 1, 177, 3, 177, 2249, 8, 177, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 180, 1, 180, 1, 181, 1, 181, 1, 182, 1, 182, 1, 183, 1, 183, 1, 184, 1, 184, 1, 185, 1, 185, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 2155, 5, 158, 178, 260, 266, 268, 188, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 0, 45, 2, 0, 109, 109, 450, 450, 3, 0, 45, 45, 128, 128, 188, 188, 4, 0, 42, 42, 90, 90, 422, 422, 464, 464, 2, 0, 441, 441, 447, 447, 2, 0, 151, 151, 170, 170, 2, 0, 437, 437, 489, 489, 2, 0, 482, 485, 487, 487, 3, 0, 32, 32, 91, 91, 244, 244, 11, 0, 28, 29, 35, 35, 46, 46, 92, 92, 178, 179, 344, 344, 360, 360, 378, 378, 381, 381, 387, 387, 416, 417, 2, 0, 433, 433, 435, 435, 4, 0, 101, 102, 115, 115, 144, 144, 246, 246, 2, 0, 13, 13, 231, 231, 2, 0, 455, 455, 462, 462, 3, 0, 5, 5, 270, 270, 444, 444, 3, 0, 266, 266, 455, 455, 462, 462, 3, 0, 425, 425, 458, 458, 477, 477, 3, 0, 330, 330, 465, 465, 481, 481, 2, 0, 440, 440, 490, 490, 2, 0, 183, 183, 265, 265, 3, 0, 130, 130, 180, 180, 402, 402, 4, 0, 152, 152, 174, 174, 201, 201, 317, 317, 3, 0, 445, 445, 459, 459, 499, 499, 4, 0, 250, 250, 446, 446, 494, 496, 498, 498, 2, 0, 74, 74, 320, 320, 3, 0, 459, 459, 492, 492, 499, 499, 2, 0, 439, 439, 450, 450, 2, 0, 457, 457, 467, 467, 4, 0, 140, 140, 244, 244, 397, 397, 404, 404, 2, 0, 19, 19, 369, 369, 2, 0, 5, 5, 11, 11, 2, 0, 509, 509, 529, 530, 4, 0, 452, 452, 527, 527, 531, 531, 534, 534, 2, 0, 529, 530, 532, 532, 1, 0, 529, 530, 1, 0, 538, 539, 2, 0, 538, 538, 541, 541, 4, 0, 452, 452, 527, 527, 529, 531, 533, 534, 3, 0, 241, 241, 508, 509, 529, 530, 2, 0, 140, 140, 397, 397, 2, 0, 5, 5, 113, 113, 10, 0, 97, 97, 165, 165, 222, 222, 229, 229, 334, 334, 436, 436, 470, 470, 472, 472, 488, 488, 502, 502, 15, 0, 97, 97, 165, 165, 222, 222, 229, 229, 334, 334, 427, 427, 436, 436, 442, 442, 448, 449, 454, 454, 460, 460, 470, 475, 488, 488, 491, 491, 502, 503, 11, 0, 5, 5, 13, 13, 33, 33, 78, 78, 84, 85, 113, 113, 200, 200, 207, 208, 389, 389, 413, 413, 527, 527, 55, 0, 4, 4, 13, 13, 23, 23, 38, 38, 41, 41, 43, 44, 54, 54, 56, 56, 69, 69, 75, 75, 78, 78, 84, 85, 91, 91, 98, 99, 107, 107, 119, 119, 134, 134, 139, 139, 143, 143, 145, 145, 160, 160, 165, 165, 167, 167, 194, 194, 197, 197, 199, 199, 201, 201, 205, 205, 207, 209, 214, 214, 220, 220, 222, 223, 229, 229, 243, 243, 245, 245, 264, 264, 276, 276, 281, 281, 283, 283, 293, 293, 317, 317, 321, 323, 334, 334, 357, 358, 364, 364, 367, 367, 378, 380, 395, 395, 398, 399, 408, 408, 419, 420, 436, 436, 469, 469, 488, 488, 502, 502, 1, 0, 437, 504, 2475, 0, 379, 1, 0, 0, 0, 2, 389, 1, 0, 0, 0, 4, 403, 1, 0, 0, 0, 6, 405, 1, 0, 0, 0, 8, 421, 1, 0, 0, 0, 10, 425, 1, 0, 0, 0, 12, 427, 1, 0, 0, 0, 14, 430, 1, 0, 0, 0, 16, 441, 1, 0, 0, 0, 18, 449, 1, 0, 0, 0, 20, 457, 1, 0, 0, 0, 22, 459, 1, 0, 0, 0, 24, 511, 1, 0, 0, 0, 26, 513, 1, 0, 0, 0, 28, 520, 1, 0, 0, 0, 30, 524, 1, 0, 0, 0, 32, 528, 1, 0, 0, 0, 34, 532, 1, 0, 0, 0, 36, 586, 1, 0, 0, 0, 38, 592, 1, 0, 0, 0, 40, 598, 1, 0, 0, 0, 42, 600, 1, 0, 0, 0, 44, 641, 1, 0, 0, 0, 46, 655, 1, 0, 0, 0, 48, 657, 1, 0, 0, 0, 50, 667, 1, 0, 0, 0, 52, 671, 1, 0, 0, 0, 54, 673, 1, 0, 0, 0, 56, 721, 1, 0, 0, 0, 58, 723, 1, 0, 0, 0, 60, 727, 1, 0, 0, 0, 62, 735, 1, 0, 0, 0, 64, 743, 1, 0, 0, 0, 66, 747, 1, 0, 0, 0, 68, 754, 1, 0, 0, 0, 70, 782, 1, 0, 0, 0, 72, 784, 1, 0, 0, 0, 74, 787, 1, 0, 0, 0, 76, 797, 1, 0, 0, 0, 78, 799, 1, 0, 0, 0, 80, 805, 1, 0, 0, 0, 82, 807, 1, 0, 0, 0, 84, 815, 1, 0, 0, 0, 86, 823, 1, 0, 0, 0, 88, 825, 1, 0, 0, 0, 90, 829, 1, 0, 0, 0, 92, 833, 1, 0, 0, 0, 94, 856, 1, 0, 0, 0, 96, 860, 1, 0, 0, 0, 98, 862, 1, 0, 0, 0, 100, 878, 1, 0, 0, 0, 102, 880, 1, 0, 0, 0, 104, 885, 1, 0, 0, 0, 106, 896, 1, 0, 0, 0, 108, 914, 1, 0, 0, 0, 110, 934, 1, 0, 0, 0, 112, 945, 1, 0, 0, 0, 114, 947, 1, 0, 0, 0, 116, 960, 1, 0, 0, 0, 118, 967, 1, 0, 0, 0, 120, 970, 1, 0, 0, 0, 122, 979, 1, 0, 0, 0, 124, 983, 1, 0, 0, 0, 126, 987, 1, 0, 0, 0, 128, 990, 1, 0, 0, 0, 130, 998, 1, 0, 0, 0, 132, 1003, 1, 0, 0, 0, 134, 1020, 1, 0, 0, 0, 136, 1027, 1, 0, 0, 0, 138, 1037, 1, 0, 0, 0, 140, 1046, 1, 0, 0, 0, 142, 1056, 1, 0, 0, 0, 144, 1075, 1, 0, 0, 0, 146, 1077, 1, 0, 0, 0, 148, 1090, 1, 0, 0, 0, 150, 1093, 1, 0, 0, 0, 152, 1102, 1, 0, 0, 0, 154, 1113, 1, 0, 0, 0, 156, 1126, 1, 0, 0, 0, 158, 1161, 1, 0, 0, 0, 160, 1180, 1, 0, 0, 0, 162, 1189, 1, 0, 0, 0, 164, 1198, 1, 0, 0, 0, 166, 1217, 1, 0, 0, 0, 168, 1239, 1, 0, 0, 0, 170, 1241, 1, 0, 0, 0, 172, 1271, 1, 0, 0, 0, 174, 1285, 1, 0, 0, 0, 176, 1287, 1, 0, 0, 0, 178, 1301, 1, 0, 0, 0, 180, 1327, 1, 0, 0, 0, 182, 1382, 1, 0, 0, 0, 184, 1384, 1, 0, 0, 0, 186, 1390, 1, 0, 0, 0, 188, 1392, 1, 0, 0, 0, 190, 1397, 1, 0, 0, 0, 192, 1402, 1, 0, 0, 0, 194, 1414, 1, 0, 0, 0, 196, 1431, 1, 0, 0, 0, 198, 1433, 1, 0, 0, 0, 200, 1435, 1, 0, 0, 0, 202, 1444, 1, 0, 0, 0, 204, 1446, 1, 0, 0, 0, 206, 1449, 1, 0, 0, 0, 208, 1499, 1, 0, 0, 0, 210, 1501, 1, 0, 0, 0, 212, 1504, 1, 0, 0, 0, 214, 1506, 1, 0, 0, 0, 216, 1513, 1, 0, 0, 0, 218, 1515, 1, 0, 0, 0, 220, 1517, 1, 0, 0, 0, 222, 1520, 1, 0, 0, 0, 224, 1529, 1, 0, 0, 0, 226, 1534, 1, 0, 0, 0, 228, 1548, 1, 0, 0, 0, 230, 1576, 1, 0, 0, 0, 232, 1586, 1, 0, 0, 0, 234, 1594, 1, 0, 0, 0, 236, 1599, 1, 0, 0, 0, 238, 1625, 1, 0, 0, 0, 240, 1627, 1, 0, 0, 0, 242, 1636, 1, 0, 0, 0, 244, 1647, 1, 0, 0, 0, 246, 1659, 1, 0, 0, 0, 248, 1685, 1, 0, 0, 0, 250, 1687, 1, 0, 0, 0, 252, 1705, 1, 0, 0, 0, 254, 1707, 1, 0, 0, 0, 256, 1712, 1, 0, 0, 0, 258, 1715, 1, 0, 0, 0, 260, 1729, 1, 0, 0, 0, 262, 1815, 1, 0, 0, 0, 264, 1846, 1, 0, 0, 0, 266, 1852, 1, 0, 0, 0, 268, 1970, 1, 0, 0, 0, 270, 1982, 1, 0, 0, 0, 272, 1986, 1, 0, 0, 0, 274, 1992, 1, 0, 0, 0, 276, 1994, 1, 0, 0, 0, 278, 1996, 1, 0, 0, 0, 280, 2000, 1, 0, 0, 0, 282, 2002, 1, 0, 0, 0, 284, 2007, 1, 0, 0, 0, 286, 2014, 1, 0, 0, 0, 288, 2018, 1, 0, 0, 0, 290, 2023, 1, 0, 0, 0, 292, 2033, 1, 0, 0, 0, 294, 2036, 1, 0, 0, 0, 296, 2042, 1, 0, 0, 0, 298, 2052, 1, 0, 0, 0, 300, 2054, 1, 0, 0, 0, 302, 2058, 1, 0, 0, 0, 304, 2069, 1, 0, 0, 0, 306, 2071, 1, 0, 0, 0, 308, 2073, 1, 0, 0, 0, 310, 2075, 1, 0, 0, 0, 312, 2080, 1, 0, 0, 0, 314, 2082, 1, 0, 0, 0, 316, 2084, 1, 0, 0, 0, 318, 2089, 1, 0, 0, 0, 320, 2106, 1, 0, 0, 0, 322, 2120, 1, 0, 0, 0, 324, 2134, 1, 0, 0, 0, 326, 2148, 1, 0, 0, 0, 328, 2150, 1, 0, 0, 0, 330, 2158, 1, 0, 0, 0, 332, 2161, 1, 0, 0, 0, 334, 2165, 1, 0, 0, 0, 336, 2168, 1, 0, 0, 0, 338, 2179, 1, 0, 0, 0, 340, 2189, 1, 0, 0, 0, 342, 2195, 1, 0, 0, 0, 344, 2203, 1, 0, 0, 0, 346, 2219, 1, 0, 0, 0, 348, 2228, 1, 0, 0, 0, 350, 2230, 1, 0, 0, 0, 352, 2232, 1, 0, 0, 0, 354, 2248, 1, 0, 0, 0, 356, 2250, 1, 0, 0, 0, 358, 2253, 1, 0, 0, 0, 360, 2255, 1, 0, 0, 0, 362, 2257, 1, 0, 0, 0, 364, 2259, 1, 0, 0, 0, 366, 2261, 1, 0, 0, 0, 368, 2263, 1, 0, 0, 0, 370, 2265, 1, 0, 0, 0, 372, 2267, 1, 0, 0, 0, 374, 2269, 1, 0, 0, 0, 376, 378, 3, 2, 1, 0, 377, 376, 1, 0, 0, 0, 378, 381, 1, 0, 0, 0, 379, 377, 1, 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 382, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 383, 5, 0, 0, 1, 383, 1, 1, 0, 0, 0, 384, 386, 3, 4, 2, 0, 385, 387, 5, 521, 0, 0, 386, 385, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 390, 3, 6, 3, 0, 389, 384, 1, 0, 0, 0, 389, 388, 1, 0, 0, 0, 390, 3, 1, 0, 0, 0, 391, 404, 3, 8, 4, 0, 392, 404, 3, 10, 5, 0, 393, 404, 3, 12, 6, 0, 394, 404, 3, 14, 7, 0, 395, 404, 3, 20, 10, 0, 396, 404, 3, 24, 12, 0, 397, 404, 3, 26, 13, 0, 398, 404, 3, 28, 14, 0, 399, 404, 3, 30, 15, 0, 400, 404, 3, 32, 16, 0, 401, 404, 3, 34, 17, 0, 402, 404, 3, 36, 18, 0, 403, 391, 1, 0, 0, 0, 403, 392, 1, 0, 0, 0, 403, 393, 1, 0, 0, 0, 403, 394, 1, 0, 0, 0, 403, 395, 1, 0, 0, 0, 403, 396, 1, 0, 0, 0, 403, 397, 1, 0, 0, 0, 403, 398, 1, 0, 0, 0, 403, 399, 1, 0, 0, 0, 403, 400, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 402, 1, 0, 0, 0, 404, 5, 1, 0, 0, 0, 405, 406, 5, 521, 0, 0, 406, 7, 1, 0, 0, 0, 407, 422, 3, 40, 20, 0, 408, 422, 3, 104, 52, 0, 409, 422, 3, 106, 53, 0, 410, 422, 3, 108, 54, 0, 411, 422, 3, 102, 51, 0, 412, 422, 3, 114, 57, 0, 413, 422, 3, 128, 64, 0, 414, 422, 3, 130, 65, 0, 415, 422, 3, 132, 66, 0, 416, 422, 3, 134, 67, 0, 417, 422, 3, 136, 68, 0, 418, 422, 3, 138, 69, 0, 419, 422, 3, 140, 70, 0, 420, 422, 3, 142, 71, 0, 421, 407, 1, 0, 0, 0, 421, 408, 1, 0, 0, 0, 421, 409, 1, 0, 0, 0, 421, 410, 1, 0, 0, 0, 421, 411, 1, 0, 0, 0, 421, 412, 1, 0, 0, 0, 421, 413, 1, 0, 0, 0, 421, 414, 1, 0, 0, 0, 421, 415, 1, 0, 0, 0, 421, 416, 1, 0, 0, 0, 421, 417, 1, 0, 0, 0, 421, 418, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 421, 420, 1, 0, 0, 0, 422, 9, 1, 0, 0, 0, 423, 426, 3, 158, 79, 0, 424, 426, 3, 144, 72, 0, 425, 423, 1, 0, 0, 0, 425, 424, 1, 0, 0, 0, 426, 11, 1, 0, 0, 0, 427, 428, 7, 0, 0, 0, 428, 429, 3, 322, 161, 0, 429, 13, 1, 0, 0, 0, 430, 434, 5, 135, 0, 0, 431, 435, 3, 16, 8, 0, 432, 433, 5, 479, 0, 0, 433, 435, 5, 146, 0, 0, 434, 431, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 439, 1, 0, 0, 0, 436, 440, 3, 10, 5, 0, 437, 440, 3, 146, 73, 0, 438, 440, 3, 156, 78, 0, 439, 436, 1, 0, 0, 0, 439, 437, 1, 0, 0, 0, 439, 438, 1, 0, 0, 0, 440, 15, 1, 0, 0, 0, 441, 446, 3, 18, 9, 0, 442, 443, 5, 520, 0, 0, 443, 445, 3, 18, 9, 0, 444, 442, 1, 0, 0, 0, 445, 448, 1, 0, 0, 0, 446, 444, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 17, 1, 0, 0, 0, 448, 446, 1, 0, 0, 0, 449, 450, 7, 1, 0, 0, 450, 19, 1, 0, 0, 0, 451, 452, 5, 410, 0, 0, 452, 453, 5, 441, 0, 0, 453, 458, 3, 312, 156, 0, 454, 455, 5, 410, 0, 0, 455, 458, 3, 316, 158, 0, 456, 458, 3, 22, 11, 0, 457, 451, 1, 0, 0, 0, 457, 454, 1, 0, 0, 0, 457, 456, 1, 0, 0, 0, 458, 21, 1, 0, 0, 0, 459, 460, 5, 410, 0, 0, 460, 461, 5, 227, 0, 0, 461, 466, 3, 328, 164, 0, 462, 463, 5, 520, 0, 0, 463, 465, 3, 328, 164, 0, 464, 462, 1, 0, 0, 0, 465, 468, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 23, 1, 0, 0, 0, 468, 466, 1, 0, 0, 0, 469, 470, 5, 341, 0, 0, 470, 512, 7, 2, 0, 0, 471, 472, 5, 341, 0, 0, 472, 473, 5, 76, 0, 0, 473, 512, 7, 3, 0, 0, 474, 475, 5, 341, 0, 0, 475, 478, 5, 374, 0, 0, 476, 477, 7, 4, 0, 0, 477, 479, 3, 316, 158, 0, 478, 476, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 481, 1, 0, 0, 0, 480, 482, 3, 264, 132, 0, 481, 480, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 512, 1, 0, 0, 0, 483, 484, 5, 341, 0, 0, 484, 485, 5, 58, 0, 0, 485, 488, 7, 4, 0, 0, 486, 489, 3, 324, 162, 0, 487, 489, 3, 322, 161, 0, 488, 486, 1, 0, 0, 0, 488, 487, 1, 0, 0, 0, 489, 491, 1, 0, 0, 0, 490, 492, 3, 264, 132, 0, 491, 490, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, 492, 512, 1, 0, 0, 0, 493, 494, 5, 341, 0, 0, 494, 499, 5, 72, 0, 0, 495, 496, 5, 373, 0, 0, 496, 500, 3, 322, 161, 0, 497, 498, 5, 501, 0, 0, 498, 500, 3, 324, 162, 0, 499, 495, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 512, 1, 0, 0, 0, 501, 503, 5, 341, 0, 0, 502, 504, 5, 411, 0, 0, 503, 502, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 512, 5, 154, 0, 0, 506, 508, 5, 341, 0, 0, 507, 509, 5, 152, 0, 0, 508, 507, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 512, 5, 227, 0, 0, 511, 469, 1, 0, 0, 0, 511, 471, 1, 0, 0, 0, 511, 474, 1, 0, 0, 0, 511, 483, 1, 0, 0, 0, 511, 493, 1, 0, 0, 0, 511, 501, 1, 0, 0, 0, 511, 506, 1, 0, 0, 0, 512, 25, 1, 0, 0, 0, 513, 514, 5, 468, 0, 0, 514, 515, 5, 226, 0, 0, 515, 518, 3, 328, 164, 0, 516, 517, 5, 433, 0, 0, 517, 519, 3, 336, 168, 0, 518, 516, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 27, 1, 0, 0, 0, 520, 521, 5, 500, 0, 0, 521, 522, 5, 226, 0, 0, 522, 523, 3, 328, 164, 0, 523, 29, 1, 0, 0, 0, 524, 526, 5, 340, 0, 0, 525, 527, 3, 338, 169, 0, 526, 525, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 31, 1, 0, 0, 0, 528, 530, 5, 312, 0, 0, 529, 531, 3, 340, 170, 0, 530, 529, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 33, 1, 0, 0, 0, 532, 533, 7, 5, 0, 0, 533, 534, 5, 463, 0, 0, 534, 535, 3, 112, 56, 0, 535, 35, 1, 0, 0, 0, 536, 537, 5, 437, 0, 0, 537, 538, 5, 463, 0, 0, 538, 539, 5, 433, 0, 0, 539, 542, 3, 38, 19, 0, 540, 541, 5, 17, 0, 0, 541, 543, 3, 328, 164, 0, 542, 540, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 587, 1, 0, 0, 0, 544, 545, 5, 437, 0, 0, 545, 546, 5, 456, 0, 0, 546, 547, 5, 433, 0, 0, 547, 550, 3, 38, 19, 0, 548, 549, 5, 17, 0, 0, 549, 551, 3, 328, 164, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 553, 5, 311, 0, 0, 553, 555, 3, 328, 164, 0, 554, 552, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 587, 1, 0, 0, 0, 556, 557, 5, 437, 0, 0, 557, 558, 7, 6, 0, 0, 558, 559, 5, 433, 0, 0, 559, 560, 3, 38, 19, 0, 560, 561, 5, 311, 0, 0, 561, 562, 3, 328, 164, 0, 562, 587, 1, 0, 0, 0, 563, 564, 5, 437, 0, 0, 564, 565, 5, 486, 0, 0, 565, 587, 3, 38, 19, 0, 566, 567, 5, 437, 0, 0, 567, 568, 5, 453, 0, 0, 568, 569, 5, 456, 0, 0, 569, 570, 5, 433, 0, 0, 570, 571, 3, 38, 19, 0, 571, 572, 5, 311, 0, 0, 572, 573, 3, 328, 164, 0, 573, 574, 5, 466, 0, 0, 574, 575, 3, 328, 164, 0, 575, 587, 1, 0, 0, 0, 576, 577, 5, 437, 0, 0, 577, 578, 5, 443, 0, 0, 578, 579, 5, 456, 0, 0, 579, 580, 5, 433, 0, 0, 580, 581, 3, 38, 19, 0, 581, 582, 5, 146, 0, 0, 582, 583, 3, 328, 164, 0, 583, 584, 5, 17, 0, 0, 584, 585, 3, 328, 164, 0, 585, 587, 1, 0, 0, 0, 586, 536, 1, 0, 0, 0, 586, 544, 1, 0, 0, 0, 586, 556, 1, 0, 0, 0, 586, 563, 1, 0, 0, 0, 586, 566, 1, 0, 0, 0, 586, 576, 1, 0, 0, 0, 587, 37, 1, 0, 0, 0, 588, 590, 5, 534, 0, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 593, 3, 328, 164, 0, 592, 589, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 39, 1, 0, 0, 0, 596, 599, 3, 42, 21, 0, 597, 599, 3, 44, 22, 0, 598, 596, 1, 0, 0, 0, 598, 597, 1, 0, 0, 0, 599, 41, 1, 0, 0, 0, 600, 602, 5, 72, 0, 0, 601, 603, 5, 497, 0, 0, 602, 601, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 606, 5, 373, 0, 0, 605, 607, 3, 332, 166, 0, 606, 605, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 3, 320, 160, 0, 609, 610, 5, 516, 0, 0, 610, 615, 3, 46, 23, 0, 611, 612, 5, 520, 0, 0, 612, 614, 3, 46, 23, 0, 613, 611, 1, 0, 0, 0, 614, 617, 1, 0, 0, 0, 615, 613, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 620, 1, 0, 0, 0, 617, 615, 1, 0, 0, 0, 618, 619, 5, 520, 0, 0, 619, 621, 3, 82, 41, 0, 620, 618, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 624, 1, 0, 0, 0, 622, 623, 5, 520, 0, 0, 623, 625, 3, 84, 42, 0, 624, 622, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 627, 5, 520, 0, 0, 627, 629, 3, 88, 44, 0, 628, 626, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 632, 5, 517, 0, 0, 631, 633, 3, 72, 36, 0, 632, 631, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 635, 1, 0, 0, 0, 634, 636, 3, 90, 45, 0, 635, 634, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 639, 3, 330, 165, 0, 638, 640, 3, 98, 49, 0, 639, 638, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 43, 1, 0, 0, 0, 641, 642, 5, 72, 0, 0, 642, 644, 5, 373, 0, 0, 643, 645, 3, 332, 166, 0, 644, 643, 1, 0, 0, 0, 644, 645, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 647, 3, 320, 160, 0, 647, 650, 3, 330, 165, 0, 648, 649, 5, 17, 0, 0, 649, 651, 3, 158, 79, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 45, 1, 0, 0, 0, 652, 656, 3, 48, 24, 0, 653, 656, 3, 74, 37, 0, 654, 656, 3, 78, 39, 0, 655, 652, 1, 0, 0, 0, 655, 653, 1, 0, 0, 0, 655, 654, 1, 0, 0, 0, 656, 47, 1, 0, 0, 0, 657, 658, 3, 50, 25, 0, 658, 660, 3, 56, 28, 0, 659, 661, 3, 70, 35, 0, 660, 659, 1, 0, 0, 0, 660, 661, 1, 0, 0, 0, 661, 663, 1, 0, 0, 0, 662, 664, 3, 72, 36, 0, 663, 662, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 49, 1, 0, 0, 0, 665, 668, 3, 328, 164, 0, 666, 668, 3, 258, 129, 0, 667, 665, 1, 0, 0, 0, 667, 666, 1, 0, 0, 0, 668, 51, 1, 0, 0, 0, 669, 672, 3, 328, 164, 0, 670, 672, 4, 26, 0, 0, 671, 669, 1, 0, 0, 0, 671, 670, 1, 0, 0, 0, 672, 53, 1, 0, 0, 0, 673, 674, 5, 516, 0, 0, 674, 679, 3, 52, 26, 0, 675, 676, 5, 520, 0, 0, 676, 678, 3, 52, 26, 0, 677, 675, 1, 0, 0, 0, 678, 681, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 682, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 682, 683, 5, 517, 0, 0, 683, 55, 1, 0, 0, 0, 684, 722, 7, 7, 0, 0, 685, 687, 7, 8, 0, 0, 686, 688, 3, 58, 29, 0, 687, 686, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 722, 1, 0, 0, 0, 689, 691, 5, 379, 0, 0, 690, 692, 3, 58, 29, 0, 691, 690, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 699, 1, 0, 0, 0, 693, 695, 7, 9, 0, 0, 694, 696, 5, 206, 0, 0, 695, 694, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 5, 378, 0, 0, 698, 700, 5, 504, 0, 0, 699, 693, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 722, 1, 0, 0, 0, 701, 703, 7, 10, 0, 0, 702, 704, 3, 60, 30, 0, 703, 702, 1, 0, 0, 0, 703, 704, 1, 0, 0, 0, 704, 722, 1, 0, 0, 0, 705, 707, 7, 11, 0, 0, 706, 708, 3, 64, 32, 0, 707, 706, 1, 0, 0, 0, 707, 708, 1, 0, 0, 0, 708, 722, 1, 0, 0, 0, 709, 711, 5, 469, 0, 0, 710, 712, 3, 66, 33, 0, 711, 710, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 722, 1, 0, 0, 0, 713, 715, 5, 321, 0, 0, 714, 716, 3, 68, 34, 0, 715, 714, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 722, 1, 0, 0, 0, 717, 719, 5, 294, 0, 0, 718, 720, 3, 62, 31, 0, 719, 718, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 722, 1, 0, 0, 0, 721, 684, 1, 0, 0, 0, 721, 685, 1, 0, 0, 0, 721, 689, 1, 0, 0, 0, 721, 701, 1, 0, 0, 0, 721, 705, 1, 0, 0, 0, 721, 709, 1, 0, 0, 0, 721, 713, 1, 0, 0, 0, 721, 717, 1, 0, 0, 0, 722, 57, 1, 0, 0, 0, 723, 724, 5, 516, 0, 0, 724, 725, 3, 360, 180, 0, 725, 726, 5, 517, 0, 0, 726, 59, 1, 0, 0, 0, 727, 728, 5, 516, 0, 0, 728, 731, 3, 360, 180, 0, 729, 730, 5, 520, 0, 0, 730, 732, 3, 360, 180, 0, 731, 729, 1, 0, 0, 0, 731, 732, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 5, 517, 0, 0, 734, 61, 1, 0, 0, 0, 735, 736, 5, 516, 0, 0, 736, 739, 3, 358, 179, 0, 737, 738, 5, 520, 0, 0, 738, 740, 3, 358, 179, 0, 739, 737, 1, 0, 0, 0, 739, 740, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 742, 5, 517, 0, 0, 742, 63, 1, 0, 0, 0, 743, 744, 5, 507, 0, 0, 744, 745, 3, 56, 28, 0, 745, 746, 5, 506, 0, 0, 746, 65, 1, 0, 0, 0, 747, 748, 5, 507, 0, 0, 748, 749, 3, 56, 28, 0, 749, 750, 5, 520, 0, 0, 750, 751, 3, 56, 28, 0, 751, 752, 1, 0, 0, 0, 752, 753, 5, 506, 0, 0, 753, 67, 1, 0, 0, 0, 754, 755, 5, 507, 0, 0, 755, 756, 3, 52, 26, 0, 756, 763, 3, 56, 28, 0, 757, 758, 5, 520, 0, 0, 758, 759, 3, 52, 26, 0, 759, 760, 3, 56, 28, 0, 760, 762, 1, 0, 0, 0, 761, 757, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 766, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 767, 5, 506, 0, 0, 767, 69, 1, 0, 0, 0, 768, 769, 5, 64, 0, 0, 769, 771, 3, 86, 43, 0, 770, 768, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 772, 773, 5, 288, 0, 0, 773, 776, 5, 466, 0, 0, 774, 775, 5, 241, 0, 0, 775, 777, 5, 125, 0, 0, 776, 774, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 783, 1, 0, 0, 0, 778, 780, 5, 241, 0, 0, 779, 778, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 783, 5, 244, 0, 0, 782, 770, 1, 0, 0, 0, 782, 779, 1, 0, 0, 0, 783, 71, 1, 0, 0, 0, 784, 785, 5, 59, 0, 0, 785, 786, 5, 537, 0, 0, 786, 73, 1, 0, 0, 0, 787, 788, 3, 50, 25, 0, 788, 789, 3, 56, 28, 0, 789, 792, 5, 218, 0, 0, 790, 791, 5, 151, 0, 0, 791, 793, 3, 76, 38, 0, 792, 790, 1, 0, 0, 0, 792, 793, 1, 0, 0, 0, 793, 795, 1, 0, 0, 0, 794, 796, 5, 423, 0, 0, 795, 794, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 75, 1, 0, 0, 0, 797, 798, 5, 537, 0, 0, 798, 77, 1, 0, 0, 0, 799, 800, 3, 50, 25, 0, 800, 801, 5, 17, 0, 0, 801, 803, 3, 80, 40, 0, 802, 804, 3, 72, 36, 0, 803, 802, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 79, 1, 0, 0, 0, 805, 806, 3, 258, 129, 0, 806, 81, 1, 0, 0, 0, 807, 808, 5, 424, 0, 0, 808, 809, 5, 146, 0, 0, 809, 810, 3, 52, 26, 0, 810, 811, 5, 17, 0, 0, 811, 812, 3, 258, 129, 0, 812, 83, 1, 0, 0, 0, 813, 814, 5, 64, 0, 0, 814, 816, 3, 86, 43, 0, 815, 813, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 818, 5, 288, 0, 0, 818, 819, 5, 466, 0, 0, 819, 820, 3, 54, 27, 0, 820, 821, 5, 241, 0, 0, 821, 822, 5, 125, 0, 0, 822, 85, 1, 0, 0, 0, 823, 824, 3, 304, 152, 0, 824, 87, 1, 0, 0, 0, 825, 826, 5, 277, 0, 0, 826, 827, 5, 146, 0, 0, 827, 828, 5, 371, 0, 0, 828, 89, 1, 0, 0, 0, 829, 830, 5, 269, 0, 0, 830, 831, 5, 34, 0, 0, 831, 832, 3, 92, 46, 0, 832, 91, 1, 0, 0, 0, 833, 834, 5, 516, 0, 0, 834, 839, 3, 94, 47, 0, 835, 836, 5, 520, 0, 0, 836, 838, 3, 94, 47, 0, 837, 835, 1, 0, 0, 0, 838, 841, 1, 0, 0, 0, 839, 837, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 1, 0, 0, 0, 841, 839, 1, 0, 0, 0, 842, 843, 5, 517, 0, 0, 843, 93, 1, 0, 0, 0, 844, 857, 3, 52, 26, 0, 845, 846, 5, 516, 0, 0, 846, 851, 3, 96, 48, 0, 847, 848, 5, 520, 0, 0, 848, 850, 3, 96, 48, 0, 849, 847, 1, 0, 0, 0, 850, 853, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 854, 1, 0, 0, 0, 853, 851, 1, 0, 0, 0, 854, 855, 5, 517, 0, 0, 855, 857, 1, 0, 0, 0, 856, 844, 1, 0, 0, 0, 856, 845, 1, 0, 0, 0, 857, 95, 1, 0, 0, 0, 858, 861, 3, 280, 140, 0, 859, 861, 3, 354, 177, 0, 860, 858, 1, 0, 0, 0, 860, 859, 1, 0, 0, 0, 861, 97, 1, 0, 0, 0, 862, 863, 5, 202, 0, 0, 863, 872, 3, 322, 161, 0, 864, 868, 5, 516, 0, 0, 865, 867, 3, 100, 50, 0, 866, 865, 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, 873, 5, 517, 0, 0, 872, 864, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 99, 1, 0, 0, 0, 874, 875, 7, 12, 0, 0, 875, 879, 7, 13, 0, 0, 876, 877, 7, 14, 0, 0, 877, 879, 7, 15, 0, 0, 878, 874, 1, 0, 0, 0, 878, 876, 1, 0, 0, 0, 879, 101, 1, 0, 0, 0, 880, 881, 5, 72, 0, 0, 881, 882, 5, 441, 0, 0, 882, 883, 3, 314, 157, 0, 883, 884, 3, 330, 165, 0, 884, 103, 1, 0, 0, 0, 885, 886, 5, 72, 0, 0, 886, 888, 5, 447, 0, 0, 887, 889, 3, 332, 166, 0, 888, 887, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 892, 3, 318, 159, 0, 891, 893, 3, 72, 36, 0, 892, 891, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 3, 330, 165, 0, 895, 105, 1, 0, 0, 0, 896, 898, 5, 72, 0, 0, 897, 899, 5, 497, 0, 0, 898, 897, 1, 0, 0, 0, 898, 899, 1, 0, 0, 0, 899, 900, 1, 0, 0, 0, 900, 902, 5, 501, 0, 0, 901, 903, 3, 332, 166, 0, 902, 901, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 906, 3, 326, 163, 0, 905, 907, 3, 54, 27, 0, 906, 905, 1, 0, 0, 0, 906, 907, 1, 0, 0, 0, 907, 909, 1, 0, 0, 0, 908, 910, 3, 72, 36, 0, 909, 908, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 912, 5, 17, 0, 0, 912, 913, 3, 158, 79, 0, 913, 107, 1, 0, 0, 0, 914, 918, 5, 72, 0, 0, 915, 919, 5, 497, 0, 0, 916, 917, 5, 497, 0, 0, 917, 919, 5, 370, 0, 0, 918, 915, 1, 0, 0, 0, 918, 916, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 920, 1, 0, 0, 0, 920, 922, 5, 153, 0, 0, 921, 923, 3, 332, 166, 0, 922, 921, 1, 0, 0, 0, 922, 923, 1, 0, 0, 0, 923, 924, 1, 0, 0, 0, 924, 925, 3, 270, 135, 0, 925, 926, 5, 17, 0, 0, 926, 929, 3, 304, 152, 0, 927, 928, 5, 195, 0, 0, 928, 930, 7, 16, 0, 0, 929, 927, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 932, 1, 0, 0, 0, 931, 933, 3, 110, 55, 0, 932, 931, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 109, 1, 0, 0, 0, 934, 935, 5, 412, 0, 0, 935, 936, 5, 463, 0, 0, 936, 942, 3, 112, 56, 0, 937, 938, 5, 520, 0, 0, 938, 939, 5, 463, 0, 0, 939, 941, 3, 112, 56, 0, 940, 937, 1, 0, 0, 0, 941, 944, 1, 0, 0, 0, 942, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 111, 1, 0, 0, 0, 944, 942, 1, 0, 0, 0, 945, 946, 5, 537, 0, 0, 946, 113, 1, 0, 0, 0, 947, 948, 5, 8, 0, 0, 948, 950, 5, 373, 0, 0, 949, 951, 3, 334, 167, 0, 950, 949, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 958, 3, 322, 161, 0, 953, 959, 3, 116, 58, 0, 954, 959, 3, 118, 59, 0, 955, 959, 3, 120, 60, 0, 956, 959, 3, 122, 61, 0, 957, 959, 3, 124, 62, 0, 958, 953, 1, 0, 0, 0, 958, 954, 1, 0, 0, 0, 958, 955, 1, 0, 0, 0, 958, 956, 1, 0, 0, 0, 958, 957, 1, 0, 0, 0, 959, 115, 1, 0, 0, 0, 960, 962, 5, 311, 0, 0, 961, 963, 3, 328, 164, 0, 962, 961, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 964, 1, 0, 0, 0, 964, 965, 5, 388, 0, 0, 965, 966, 3, 328, 164, 0, 966, 117, 1, 0, 0, 0, 967, 968, 5, 340, 0, 0, 968, 969, 3, 336, 168, 0, 969, 119, 1, 0, 0, 0, 970, 971, 5, 437, 0, 0, 971, 972, 5, 64, 0, 0, 972, 973, 3, 86, 43, 0, 973, 974, 5, 288, 0, 0, 974, 975, 5, 466, 0, 0, 975, 977, 3, 54, 27, 0, 976, 978, 3, 126, 63, 0, 977, 976, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 121, 1, 0, 0, 0, 979, 980, 5, 116, 0, 0, 980, 981, 5, 64, 0, 0, 981, 982, 3, 86, 43, 0, 982, 123, 1, 0, 0, 0, 983, 984, 5, 437, 0, 0, 984, 985, 5, 403, 0, 0, 985, 986, 3, 54, 27, 0, 986, 125, 1, 0, 0, 0, 987, 988, 5, 241, 0, 0, 988, 989, 5, 125, 0, 0, 989, 127, 1, 0, 0, 0, 990, 991, 5, 8, 0, 0, 991, 992, 5, 501, 0, 0, 992, 996, 3, 324, 162, 0, 993, 997, 3, 116, 58, 0, 994, 995, 5, 17, 0, 0, 995, 997, 3, 158, 79, 0, 996, 993, 1, 0, 0, 0, 996, 994, 1, 0, 0, 0, 997, 129, 1, 0, 0, 0, 998, 999, 5, 8, 0, 0, 999, 1000, 5, 447, 0, 0, 1000, 1001, 3, 316, 158, 0, 1001, 1002, 3, 118, 59, 0, 1002, 131, 1, 0, 0, 0, 1003, 1007, 5, 8, 0, 0, 1004, 1008, 5, 497, 0, 0, 1005, 1006, 5, 497, 0, 0, 1006, 1008, 5, 370, 0, 0, 1007, 1004, 1, 0, 0, 0, 1007, 1005, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1011, 5, 153, 0, 0, 1010, 1012, 3, 334, 167, 0, 1011, 1010, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1014, 3, 272, 136, 0, 1014, 1015, 5, 17, 0, 0, 1015, 1018, 3, 304, 152, 0, 1016, 1017, 5, 195, 0, 0, 1017, 1019, 7, 16, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 133, 1, 0, 0, 0, 1020, 1021, 5, 116, 0, 0, 1021, 1023, 5, 441, 0, 0, 1022, 1024, 3, 334, 167, 0, 1023, 1022, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1026, 3, 312, 156, 0, 1026, 135, 1, 0, 0, 0, 1027, 1029, 5, 116, 0, 0, 1028, 1030, 5, 497, 0, 0, 1029, 1028, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1033, 5, 373, 0, 0, 1032, 1034, 3, 334, 167, 0, 1033, 1032, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1036, 3, 322, 161, 0, 1036, 137, 1, 0, 0, 0, 1037, 1038, 5, 116, 0, 0, 1038, 1040, 5, 447, 0, 0, 1039, 1041, 3, 334, 167, 0, 1040, 1039, 1, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 1044, 3, 316, 158, 0, 1043, 1045, 7, 17, 0, 0, 1044, 1043, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 139, 1, 0, 0, 0, 1046, 1048, 5, 116, 0, 0, 1047, 1049, 5, 497, 0, 0, 1048, 1047, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1052, 5, 501, 0, 0, 1051, 1053, 3, 334, 167, 0, 1052, 1051, 1, 0, 0, 0, 1052, 1053, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1055, 3, 324, 162, 0, 1055, 141, 1, 0, 0, 0, 1056, 1060, 5, 116, 0, 0, 1057, 1061, 5, 497, 0, 0, 1058, 1059, 5, 497, 0, 0, 1059, 1061, 5, 370, 0, 0, 1060, 1057, 1, 0, 0, 0, 1060, 1058, 1, 0, 0, 0, 1060, 1061, 1, 0, 0, 0, 1061, 1062, 1, 0, 0, 0, 1062, 1064, 5, 153, 0, 0, 1063, 1065, 3, 334, 167, 0, 1064, 1063, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1067, 3, 272, 136, 0, 1067, 143, 1, 0, 0, 0, 1068, 1070, 5, 132, 0, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1076, 3, 146, 73, 0, 1072, 1076, 3, 154, 77, 0, 1073, 1074, 5, 132, 0, 0, 1074, 1076, 3, 156, 78, 0, 1075, 1069, 1, 0, 0, 0, 1075, 1072, 1, 0, 0, 0, 1075, 1073, 1, 0, 0, 0, 1076, 145, 1, 0, 0, 0, 1077, 1078, 5, 177, 0, 0, 1078, 1079, 7, 18, 0, 0, 1079, 1088, 3, 322, 161, 0, 1080, 1082, 3, 148, 74, 0, 1081, 1080, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 1084, 1, 0, 0, 0, 1083, 1085, 3, 54, 27, 0, 1084, 1083, 1, 0, 0, 0, 1084, 1085, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1089, 3, 158, 79, 0, 1087, 1089, 3, 150, 75, 0, 1088, 1081, 1, 0, 0, 0, 1088, 1087, 1, 0, 0, 0, 1089, 147, 1, 0, 0, 0, 1090, 1091, 5, 268, 0, 0, 1091, 1092, 3, 336, 168, 0, 1092, 149, 1, 0, 0, 0, 1093, 1094, 5, 414, 0, 0, 1094, 1099, 3, 152, 76, 0, 1095, 1096, 5, 520, 0, 0, 1096, 1098, 3, 152, 76, 0, 1097, 1095, 1, 0, 0, 0, 1098, 1101, 1, 0, 0, 0, 1099, 1097, 1, 0, 0, 0, 1099, 1100, 1, 0, 0, 0, 1100, 151, 1, 0, 0, 0, 1101, 1099, 1, 0, 0, 0, 1102, 1103, 5, 516, 0, 0, 1103, 1108, 3, 354, 177, 0, 1104, 1105, 5, 520, 0, 0, 1105, 1107, 3, 354, 177, 0, 1106, 1104, 1, 0, 0, 0, 1107, 1110, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1108, 1109, 1, 0, 0, 0, 1109, 1111, 1, 0, 0, 0, 1110, 1108, 1, 0, 0, 0, 1111, 1112, 5, 517, 0, 0, 1112, 153, 1, 0, 0, 0, 1113, 1114, 5, 24, 0, 0, 1114, 1115, 5, 354, 0, 0, 1115, 1116, 5, 340, 0, 0, 1116, 1120, 5, 521, 0, 0, 1117, 1118, 3, 146, 73, 0, 1118, 1119, 5, 521, 0, 0, 1119, 1121, 1, 0, 0, 0, 1120, 1117, 1, 0, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 1120, 1, 0, 0, 0, 1122, 1123, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 1125, 5, 122, 0, 0, 1125, 155, 1, 0, 0, 0, 1126, 1127, 5, 354, 0, 0, 1127, 1128, 5, 340, 0, 0, 1128, 1132, 5, 24, 0, 0, 1129, 1130, 3, 146, 73, 0, 1130, 1131, 5, 521, 0, 0, 1131, 1133, 1, 0, 0, 0, 1132, 1129, 1, 0, 0, 0, 1133, 1134, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1137, 5, 122, 0, 0, 1137, 157, 1, 0, 0, 0, 1138, 1139, 6, 79, -1, 0, 1139, 1162, 3, 160, 80, 0, 1140, 1141, 3, 162, 81, 0, 1141, 1142, 3, 158, 79, 5, 1142, 1162, 1, 0, 0, 0, 1143, 1144, 5, 516, 0, 0, 1144, 1145, 3, 158, 79, 0, 1145, 1146, 5, 517, 0, 0, 1146, 1162, 1, 0, 0, 0, 1147, 1149, 3, 170, 85, 0, 1148, 1150, 3, 230, 115, 0, 1149, 1148, 1, 0, 0, 0, 1149, 1150, 1, 0, 0, 0, 1150, 1152, 1, 0, 0, 0, 1151, 1153, 3, 234, 117, 0, 1152, 1151, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1162, 1, 0, 0, 0, 1154, 1156, 3, 168, 84, 0, 1155, 1157, 3, 230, 115, 0, 1156, 1155, 1, 0, 0, 0, 1156, 1157, 1, 0, 0, 0, 1157, 1159, 1, 0, 0, 0, 1158, 1160, 3, 234, 117, 0, 1159, 1158, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1162, 1, 0, 0, 0, 1161, 1138, 1, 0, 0, 0, 1161, 1140, 1, 0, 0, 0, 1161, 1143, 1, 0, 0, 0, 1161, 1147, 1, 0, 0, 0, 1161, 1154, 1, 0, 0, 0, 1162, 1177, 1, 0, 0, 0, 1163, 1164, 10, 3, 0, 0, 1164, 1166, 7, 19, 0, 0, 1165, 1167, 5, 5, 0, 0, 1166, 1165, 1, 0, 0, 0, 1166, 1167, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1170, 3, 158, 79, 0, 1169, 1171, 3, 230, 115, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1173, 1, 0, 0, 0, 1172, 1174, 3, 234, 117, 0, 1173, 1172, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1176, 1, 0, 0, 0, 1175, 1163, 1, 0, 0, 0, 1176, 1179, 1, 0, 0, 0, 1177, 1175, 1, 0, 0, 0, 1177, 1178, 1, 0, 0, 0, 1178, 159, 1, 0, 0, 0, 1179, 1177, 1, 0, 0, 0, 1180, 1181, 5, 414, 0, 0, 1181, 1186, 3, 258, 129, 0, 1182, 1183, 5, 520, 0, 0, 1183, 1185, 3, 258, 129, 0, 1184, 1182, 1, 0, 0, 0, 1185, 1188, 1, 0, 0, 0, 1186, 1184, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 161, 1, 0, 0, 0, 1188, 1186, 1, 0, 0, 0, 1189, 1190, 5, 433, 0, 0, 1190, 1195, 3, 164, 82, 0, 1191, 1192, 5, 520, 0, 0, 1192, 1194, 3, 164, 82, 0, 1193, 1191, 1, 0, 0, 0, 1194, 1197, 1, 0, 0, 0, 1195, 1193, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 163, 1, 0, 0, 0, 1197, 1195, 1, 0, 0, 0, 1198, 1210, 3, 166, 83, 0, 1199, 1200, 5, 516, 0, 0, 1200, 1205, 3, 52, 26, 0, 1201, 1202, 5, 520, 0, 0, 1202, 1204, 3, 52, 26, 0, 1203, 1201, 1, 0, 0, 0, 1204, 1207, 1, 0, 0, 0, 1205, 1203, 1, 0, 0, 0, 1205, 1206, 1, 0, 0, 0, 1206, 1208, 1, 0, 0, 0, 1207, 1205, 1, 0, 0, 0, 1208, 1209, 5, 517, 0, 0, 1209, 1211, 1, 0, 0, 0, 1210, 1199, 1, 0, 0, 0, 1210, 1211, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 5, 17, 0, 0, 1213, 1214, 5, 516, 0, 0, 1214, 1215, 3, 158, 79, 0, 1215, 1216, 5, 517, 0, 0, 1216, 165, 1, 0, 0, 0, 1217, 1218, 3, 304, 152, 0, 1218, 167, 1, 0, 0, 0, 1219, 1221, 3, 170, 85, 0, 1220, 1222, 3, 176, 88, 0, 1221, 1220, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 1224, 1, 0, 0, 0, 1223, 1225, 3, 204, 102, 0, 1224, 1223, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 1227, 1, 0, 0, 0, 1226, 1228, 3, 206, 103, 0, 1227, 1226, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1230, 1, 0, 0, 0, 1229, 1231, 3, 220, 110, 0, 1230, 1229, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1233, 1, 0, 0, 0, 1232, 1234, 3, 222, 111, 0, 1233, 1232, 1, 0, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1240, 1, 0, 0, 0, 1235, 1236, 3, 170, 85, 0, 1236, 1237, 3, 176, 88, 0, 1237, 1238, 3, 228, 114, 0, 1238, 1240, 1, 0, 0, 0, 1239, 1219, 1, 0, 0, 0, 1239, 1235, 1, 0, 0, 0, 1240, 169, 1, 0, 0, 0, 1241, 1243, 5, 336, 0, 0, 1242, 1244, 3, 364, 182, 0, 1243, 1242, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1254, 1, 0, 0, 0, 1245, 1255, 5, 527, 0, 0, 1246, 1251, 3, 172, 86, 0, 1247, 1248, 5, 520, 0, 0, 1248, 1250, 3, 172, 86, 0, 1249, 1247, 1, 0, 0, 0, 1250, 1253, 1, 0, 0, 0, 1251, 1249, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 1255, 1, 0, 0, 0, 1253, 1251, 1, 0, 0, 0, 1254, 1245, 1, 0, 0, 0, 1254, 1246, 1, 0, 0, 0, 1255, 171, 1, 0, 0, 0, 1256, 1272, 3, 174, 87, 0, 1257, 1262, 3, 52, 26, 0, 1258, 1260, 5, 17, 0, 0, 1259, 1258, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1263, 3, 258, 129, 0, 1262, 1259, 1, 0, 0, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1272, 1, 0, 0, 0, 1264, 1269, 3, 258, 129, 0, 1265, 1267, 5, 17, 0, 0, 1266, 1265, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1270, 3, 52, 26, 0, 1269, 1266, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 1272, 1, 0, 0, 0, 1271, 1256, 1, 0, 0, 0, 1271, 1257, 1, 0, 0, 0, 1271, 1264, 1, 0, 0, 0, 1272, 173, 1, 0, 0, 0, 1273, 1274, 3, 268, 134, 0, 1274, 1275, 5, 262, 0, 0, 1275, 1276, 3, 226, 113, 0, 1276, 1277, 5, 17, 0, 0, 1277, 1278, 3, 304, 152, 0, 1278, 1286, 1, 0, 0, 0, 1279, 1280, 3, 268, 134, 0, 1280, 1281, 5, 262, 0, 0, 1281, 1282, 3, 296, 148, 0, 1282, 1283, 5, 17, 0, 0, 1283, 1284, 3, 304, 152, 0, 1284, 1286, 1, 0, 0, 0, 1285, 1273, 1, 0, 0, 0, 1285, 1279, 1, 0, 0, 0, 1286, 175, 1, 0, 0, 0, 1287, 1288, 5, 151, 0, 0, 1288, 1289, 3, 178, 89, 0, 1289, 177, 1, 0, 0, 0, 1290, 1291, 6, 89, -1, 0, 1291, 1296, 3, 180, 90, 0, 1292, 1293, 5, 520, 0, 0, 1293, 1295, 3, 180, 90, 0, 1294, 1292, 1, 0, 0, 0, 1295, 1298, 1, 0, 0, 0, 1296, 1294, 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1302, 1, 0, 0, 0, 1298, 1296, 1, 0, 0, 0, 1299, 1302, 3, 188, 94, 0, 1300, 1302, 3, 190, 95, 0, 1301, 1290, 1, 0, 0, 0, 1301, 1299, 1, 0, 0, 0, 1301, 1300, 1, 0, 0, 0, 1302, 1324, 1, 0, 0, 0, 1303, 1304, 10, 3, 0, 0, 1304, 1305, 5, 73, 0, 0, 1305, 1306, 5, 185, 0, 0, 1306, 1323, 3, 178, 89, 4, 1307, 1309, 10, 4, 0, 0, 1308, 1310, 5, 233, 0, 0, 1309, 1308, 1, 0, 0, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1312, 1, 0, 0, 0, 1311, 1313, 7, 20, 0, 0, 1312, 1311, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, 1316, 5, 261, 0, 0, 1315, 1314, 1, 0, 0, 0, 1315, 1316, 1, 0, 0, 0, 1316, 1317, 1, 0, 0, 0, 1317, 1318, 5, 185, 0, 0, 1318, 1320, 3, 178, 89, 0, 1319, 1321, 3, 202, 101, 0, 1320, 1319, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1323, 1, 0, 0, 0, 1322, 1303, 1, 0, 0, 0, 1322, 1307, 1, 0, 0, 0, 1323, 1326, 1, 0, 0, 0, 1324, 1322, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 179, 1, 0, 0, 0, 1326, 1324, 1, 0, 0, 0, 1327, 1329, 3, 182, 91, 0, 1328, 1330, 3, 294, 147, 0, 1329, 1328, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 181, 1, 0, 0, 0, 1331, 1333, 5, 373, 0, 0, 1332, 1331, 1, 0, 0, 0, 1332, 1333, 1, 0, 0, 0, 1333, 1334, 1, 0, 0, 0, 1334, 1336, 3, 322, 161, 0, 1335, 1337, 3, 184, 92, 0, 1336, 1335, 1, 0, 0, 0, 1336, 1337, 1, 0, 0, 0, 1337, 1342, 1, 0, 0, 0, 1338, 1340, 5, 17, 0, 0, 1339, 1338, 1, 0, 0, 0, 1339, 1340, 1, 0, 0, 0, 1340, 1341, 1, 0, 0, 0, 1341, 1343, 3, 278, 139, 0, 1342, 1339, 1, 0, 0, 0, 1342, 1343, 1, 0, 0, 0, 1343, 1383, 1, 0, 0, 0, 1344, 1346, 3, 324, 162, 0, 1345, 1347, 3, 184, 92, 0, 1346, 1345, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1352, 1, 0, 0, 0, 1348, 1350, 5, 17, 0, 0, 1349, 1348, 1, 0, 0, 0, 1349, 1350, 1, 0, 0, 0, 1350, 1351, 1, 0, 0, 0, 1351, 1353, 3, 278, 139, 0, 1352, 1349, 1, 0, 0, 0, 1352, 1353, 1, 0, 0, 0, 1353, 1383, 1, 0, 0, 0, 1354, 1355, 5, 198, 0, 0, 1355, 1356, 5, 373, 0, 0, 1356, 1357, 5, 516, 0, 0, 1357, 1358, 3, 272, 136, 0, 1358, 1359, 5, 516, 0, 0, 1359, 1364, 3, 274, 137, 0, 1360, 1361, 5, 520, 0, 0, 1361, 1363, 3, 274, 137, 0, 1362, 1360, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 1367, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1368, 5, 517, 0, 0, 1368, 1369, 5, 517, 0, 0, 1369, 1383, 1, 0, 0, 0, 1370, 1372, 5, 198, 0, 0, 1371, 1370, 1, 0, 0, 0, 1371, 1372, 1, 0, 0, 0, 1372, 1373, 1, 0, 0, 0, 1373, 1374, 5, 516, 0, 0, 1374, 1375, 3, 158, 79, 0, 1375, 1376, 5, 517, 0, 0, 1376, 1383, 1, 0, 0, 0, 1377, 1378, 5, 405, 0, 0, 1378, 1379, 5, 516, 0, 0, 1379, 1380, 3, 258, 129, 0, 1380, 1381, 5, 517, 0, 0, 1381, 1383, 1, 0, 0, 0, 1382, 1332, 1, 0, 0, 0, 1382, 1344, 1, 0, 0, 0, 1382, 1354, 1, 0, 0, 0, 1382, 1371, 1, 0, 0, 0, 1382, 1377, 1, 0, 0, 0, 1383, 183, 1, 0, 0, 0, 1384, 1385, 5, 146, 0, 0, 1385, 1386, 5, 371, 0, 0, 1386, 1387, 5, 17, 0, 0, 1387, 1388, 5, 249, 0, 0, 1388, 1389, 3, 186, 93, 0, 1389, 185, 1, 0, 0, 0, 1390, 1391, 3, 258, 129, 0, 1391, 187, 1, 0, 0, 0, 1392, 1393, 5, 516, 0, 0, 1393, 1394, 3, 150, 75, 0, 1394, 1395, 5, 517, 0, 0, 1395, 1396, 3, 294, 147, 0, 1396, 189, 1, 0, 0, 0, 1397, 1398, 5, 373, 0, 0, 1398, 1399, 5, 516, 0, 0, 1399, 1400, 3, 192, 96, 0, 1400, 1401, 5, 517, 0, 0, 1401, 191, 1, 0, 0, 0, 1402, 1403, 3, 194, 97, 0, 1403, 1404, 5, 516, 0, 0, 1404, 1409, 3, 196, 98, 0, 1405, 1406, 5, 520, 0, 0, 1406, 1408, 3, 196, 98, 0, 1407, 1405, 1, 0, 0, 0, 1408, 1411, 1, 0, 0, 0, 1409, 1407, 1, 0, 0, 0, 1409, 1410, 1, 0, 0, 0, 1410, 1412, 1, 0, 0, 0, 1411, 1409, 1, 0, 0, 0, 1412, 1413, 5, 517, 0, 0, 1413, 193, 1, 0, 0, 0, 1414, 1415, 7, 21, 0, 0, 1415, 195, 1, 0, 0, 0, 1416, 1417, 5, 373, 0, 0, 1417, 1432, 3, 218, 109, 0, 1418, 1432, 3, 200, 100, 0, 1419, 1432, 3, 282, 141, 0, 1420, 1421, 5, 446, 0, 0, 1421, 1422, 5, 536, 0, 0, 1422, 1423, 5, 373, 0, 0, 1423, 1432, 3, 218, 109, 0, 1424, 1425, 5, 498, 0, 0, 1425, 1426, 5, 536, 0, 0, 1426, 1432, 3, 200, 100, 0, 1427, 1428, 3, 198, 99, 0, 1428, 1429, 5, 536, 0, 0, 1429, 1430, 3, 282, 141, 0, 1430, 1432, 1, 0, 0, 0, 1431, 1416, 1, 0, 0, 0, 1431, 1418, 1, 0, 0, 0, 1431, 1419, 1, 0, 0, 0, 1431, 1420, 1, 0, 0, 0, 1431, 1424, 1, 0, 0, 0, 1431, 1427, 1, 0, 0, 0, 1432, 197, 1, 0, 0, 0, 1433, 1434, 7, 22, 0, 0, 1434, 199, 1, 0, 0, 0, 1435, 1436, 5, 451, 0, 0, 1436, 1437, 5, 516, 0, 0, 1437, 1438, 3, 52, 26, 0, 1438, 1439, 5, 517, 0, 0, 1439, 201, 1, 0, 0, 0, 1440, 1441, 5, 253, 0, 0, 1441, 1445, 3, 260, 130, 0, 1442, 1443, 5, 412, 0, 0, 1443, 1445, 3, 54, 27, 0, 1444, 1440, 1, 0, 0, 0, 1444, 1442, 1, 0, 0, 0, 1445, 203, 1, 0, 0, 0, 1446, 1447, 5, 430, 0, 0, 1447, 1448, 3, 260, 130, 0, 1448, 205, 1, 0, 0, 0, 1449, 1450, 5, 159, 0, 0, 1450, 1451, 5, 34, 0, 0, 1451, 1456, 3, 208, 104, 0, 1452, 1453, 5, 520, 0, 0, 1453, 1455, 3, 208, 104, 0, 1454, 1452, 1, 0, 0, 0, 1455, 1458, 1, 0, 0, 0, 1456, 1454, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 207, 1, 0, 0, 0, 1458, 1456, 1, 0, 0, 0, 1459, 1500, 3, 52, 26, 0, 1460, 1500, 3, 214, 107, 0, 1461, 1462, 5, 516, 0, 0, 1462, 1500, 5, 517, 0, 0, 1463, 1464, 5, 516, 0, 0, 1464, 1469, 3, 258, 129, 0, 1465, 1466, 5, 520, 0, 0, 1466, 1468, 3, 258, 129, 0, 1467, 1465, 1, 0, 0, 0, 1468, 1471, 1, 0, 0, 0, 1469, 1467, 1, 0, 0, 0, 1469, 1470, 1, 0, 0, 0, 1470, 1472, 1, 0, 0, 0, 1471, 1469, 1, 0, 0, 0, 1472, 1473, 5, 517, 0, 0, 1473, 1500, 1, 0, 0, 0, 1474, 1475, 3, 212, 106, 0, 1475, 1476, 5, 516, 0, 0, 1476, 1481, 3, 258, 129, 0, 1477, 1478, 5, 520, 0, 0, 1478, 1480, 3, 258, 129, 0, 1479, 1477, 1, 0, 0, 0, 1480, 1483, 1, 0, 0, 0, 1481, 1479, 1, 0, 0, 0, 1481, 1482, 1, 0, 0, 0, 1482, 1484, 1, 0, 0, 0, 1483, 1481, 1, 0, 0, 0, 1484, 1485, 5, 517, 0, 0, 1485, 1500, 1, 0, 0, 0, 1486, 1487, 3, 210, 105, 0, 1487, 1488, 5, 516, 0, 0, 1488, 1493, 3, 208, 104, 0, 1489, 1490, 5, 520, 0, 0, 1490, 1492, 3, 208, 104, 0, 1491, 1489, 1, 0, 0, 0, 1492, 1495, 1, 0, 0, 0, 1493, 1491, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 1496, 1, 0, 0, 0, 1495, 1493, 1, 0, 0, 0, 1496, 1497, 5, 517, 0, 0, 1497, 1500, 1, 0, 0, 0, 1498, 1500, 3, 258, 129, 0, 1499, 1459, 1, 0, 0, 0, 1499, 1460, 1, 0, 0, 0, 1499, 1461, 1, 0, 0, 0, 1499, 1463, 1, 0, 0, 0, 1499, 1474, 1, 0, 0, 0, 1499, 1486, 1, 0, 0, 0, 1499, 1498, 1, 0, 0, 0, 1500, 209, 1, 0, 0, 0, 1501, 1502, 5, 160, 0, 0, 1502, 1503, 5, 493, 0, 0, 1503, 211, 1, 0, 0, 0, 1504, 1505, 7, 23, 0, 0, 1505, 213, 1, 0, 0, 0, 1506, 1507, 3, 216, 108, 0, 1507, 1508, 5, 516, 0, 0, 1508, 1509, 3, 218, 109, 0, 1509, 1510, 5, 520, 0, 0, 1510, 1511, 3, 282, 141, 0, 1511, 1512, 5, 517, 0, 0, 1512, 215, 1, 0, 0, 0, 1513, 1514, 7, 24, 0, 0, 1514, 217, 1, 0, 0, 0, 1515, 1516, 3, 328, 164, 0, 1516, 219, 1, 0, 0, 0, 1517, 1518, 5, 163, 0, 0, 1518, 1519, 3, 260, 130, 0, 1519, 221, 1, 0, 0, 0, 1520, 1521, 5, 432, 0, 0, 1521, 1526, 3, 224, 112, 0, 1522, 1523, 5, 520, 0, 0, 1523, 1525, 3, 224, 112, 0, 1524, 1522, 1, 0, 0, 0, 1525, 1528, 1, 0, 0, 0, 1526, 1524, 1, 0, 0, 0, 1526, 1527, 1, 0, 0, 0, 1527, 223, 1, 0, 0, 0, 1528, 1526, 1, 0, 0, 0, 1529, 1530, 3, 296, 148, 0, 1530, 1531, 5, 17, 0, 0, 1531, 1532, 3, 226, 113, 0, 1532, 225, 1, 0, 0, 0, 1533, 1535, 3, 296, 148, 0, 1534, 1533, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1538, 5, 516, 0, 0, 1537, 1539, 3, 236, 118, 0, 1538, 1537, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1541, 1, 0, 0, 0, 1540, 1542, 3, 230, 115, 0, 1541, 1540, 1, 0, 0, 0, 1541, 1542, 1, 0, 0, 0, 1542, 1544, 1, 0, 0, 0, 1543, 1545, 3, 252, 126, 0, 1544, 1543, 1, 0, 0, 0, 1544, 1545, 1, 0, 0, 0, 1545, 1546, 1, 0, 0, 0, 1546, 1547, 5, 517, 0, 0, 1547, 227, 1, 0, 0, 0, 1548, 1549, 5, 213, 0, 0, 1549, 1551, 5, 516, 0, 0, 1550, 1552, 3, 236, 118, 0, 1551, 1550, 1, 0, 0, 0, 1551, 1552, 1, 0, 0, 0, 1552, 1554, 1, 0, 0, 0, 1553, 1555, 3, 230, 115, 0, 1554, 1553, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 1557, 1, 0, 0, 0, 1556, 1558, 3, 240, 120, 0, 1557, 1556, 1, 0, 0, 0, 1557, 1558, 1, 0, 0, 0, 1558, 1560, 1, 0, 0, 0, 1559, 1561, 3, 246, 123, 0, 1560, 1559, 1, 0, 0, 0, 1560, 1561, 1, 0, 0, 0, 1561, 1563, 1, 0, 0, 0, 1562, 1564, 3, 248, 124, 0, 1563, 1562, 1, 0, 0, 0, 1563, 1564, 1, 0, 0, 0, 1564, 1566, 1, 0, 0, 0, 1565, 1567, 3, 242, 121, 0, 1566, 1565, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1569, 3, 250, 125, 0, 1569, 1574, 5, 517, 0, 0, 1570, 1572, 5, 17, 0, 0, 1571, 1570, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1573, 1, 0, 0, 0, 1573, 1575, 3, 304, 152, 0, 1574, 1571, 1, 0, 0, 0, 1574, 1575, 1, 0, 0, 0, 1575, 229, 1, 0, 0, 0, 1576, 1577, 5, 258, 0, 0, 1577, 1578, 5, 34, 0, 0, 1578, 1583, 3, 232, 116, 0, 1579, 1580, 5, 520, 0, 0, 1580, 1582, 3, 232, 116, 0, 1581, 1579, 1, 0, 0, 0, 1582, 1585, 1, 0, 0, 0, 1583, 1581, 1, 0, 0, 0, 1583, 1584, 1, 0, 0, 0, 1584, 231, 1, 0, 0, 0, 1585, 1583, 1, 0, 0, 0, 1586, 1588, 3, 52, 26, 0, 1587, 1589, 7, 25, 0, 0, 1588, 1587, 1, 0, 0, 0, 1588, 1589, 1, 0, 0, 0, 1589, 1592, 1, 0, 0, 0, 1590, 1591, 5, 476, 0, 0, 1591, 1593, 7, 26, 0, 0, 1592, 1590, 1, 0, 0, 0, 1592, 1593, 1, 0, 0, 0, 1593, 233, 1, 0, 0, 0, 1594, 1597, 5, 204, 0, 0, 1595, 1598, 5, 5, 0, 0, 1596, 1598, 3, 258, 129, 0, 1597, 1595, 1, 0, 0, 0, 1597, 1596, 1, 0, 0, 0, 1598, 235, 1, 0, 0, 0, 1599, 1600, 5, 268, 0, 0, 1600, 1601, 5, 34, 0, 0, 1601, 1606, 3, 52, 26, 0, 1602, 1603, 5, 520, 0, 0, 1603, 1605, 3, 52, 26, 0, 1604, 1602, 1, 0, 0, 0, 1605, 1608, 1, 0, 0, 0, 1606, 1604, 1, 0, 0, 0, 1606, 1607, 1, 0, 0, 0, 1607, 237, 1, 0, 0, 0, 1608, 1606, 1, 0, 0, 0, 1609, 1626, 5, 527, 0, 0, 1610, 1626, 5, 530, 0, 0, 1611, 1626, 5, 535, 0, 0, 1612, 1613, 5, 518, 0, 0, 1613, 1614, 5, 538, 0, 0, 1614, 1615, 5, 520, 0, 0, 1615, 1616, 5, 538, 0, 0, 1616, 1626, 5, 519, 0, 0, 1617, 1618, 5, 518, 0, 0, 1618, 1619, 5, 538, 0, 0, 1619, 1620, 5, 520, 0, 0, 1620, 1626, 5, 519, 0, 0, 1621, 1622, 5, 518, 0, 0, 1622, 1623, 5, 520, 0, 0, 1623, 1624, 5, 538, 0, 0, 1624, 1626, 5, 519, 0, 0, 1625, 1609, 1, 0, 0, 0, 1625, 1610, 1, 0, 0, 0, 1625, 1611, 1, 0, 0, 0, 1625, 1612, 1, 0, 0, 0, 1625, 1617, 1, 0, 0, 0, 1625, 1621, 1, 0, 0, 0, 1626, 239, 1, 0, 0, 0, 1627, 1628, 5, 215, 0, 0, 1628, 1633, 3, 172, 86, 0, 1629, 1630, 5, 520, 0, 0, 1630, 1632, 3, 172, 86, 0, 1631, 1629, 1, 0, 0, 0, 1632, 1635, 1, 0, 0, 0, 1633, 1631, 1, 0, 0, 0, 1633, 1634, 1, 0, 0, 0, 1634, 241, 1, 0, 0, 0, 1635, 1633, 1, 0, 0, 0, 1636, 1637, 5, 271, 0, 0, 1637, 1639, 5, 516, 0, 0, 1638, 1640, 3, 244, 122, 0, 1639, 1638, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1639, 1, 0, 0, 0, 1641, 1642, 1, 0, 0, 0, 1642, 1643, 1, 0, 0, 0, 1643, 1645, 5, 517, 0, 0, 1644, 1646, 3, 256, 128, 0, 1645, 1644, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 243, 1, 0, 0, 0, 1647, 1649, 3, 306, 153, 0, 1648, 1650, 3, 238, 119, 0, 1649, 1648, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 245, 1, 0, 0, 0, 1651, 1652, 5, 5, 0, 0, 1652, 1653, 5, 322, 0, 0, 1653, 1654, 5, 272, 0, 0, 1654, 1660, 5, 210, 0, 0, 1655, 1656, 5, 254, 0, 0, 1656, 1657, 5, 321, 0, 0, 1657, 1658, 5, 272, 0, 0, 1658, 1660, 5, 210, 0, 0, 1659, 1651, 1, 0, 0, 0, 1659, 1655, 1, 0, 0, 0, 1660, 247, 1, 0, 0, 0, 1661, 1662, 5, 438, 0, 0, 1662, 1663, 5, 210, 0, 0, 1663, 1664, 5, 343, 0, 0, 1664, 1665, 5, 478, 0, 0, 1665, 1666, 5, 467, 0, 0, 1666, 1686, 5, 321, 0, 0, 1667, 1668, 5, 438, 0, 0, 1668, 1669, 5, 210, 0, 0, 1669, 1670, 5, 343, 0, 0, 1670, 1671, 5, 388, 0, 0, 1671, 1672, 5, 237, 0, 0, 1672, 1686, 5, 321, 0, 0, 1673, 1674, 5, 438, 0, 0, 1674, 1675, 5, 210, 0, 0, 1675, 1676, 5, 343, 0, 0, 1676, 1677, 5, 388, 0, 0, 1677, 1678, 5, 467, 0, 0, 1678, 1686, 3, 306, 153, 0, 1679, 1680, 5, 438, 0, 0, 1680, 1681, 5, 210, 0, 0, 1681, 1682, 5, 343, 0, 0, 1682, 1683, 5, 388, 0, 0, 1683, 1684, 5, 457, 0, 0, 1684, 1686, 3, 306, 153, 0, 1685, 1661, 1, 0, 0, 0, 1685, 1667, 1, 0, 0, 0, 1685, 1673, 1, 0, 0, 0, 1685, 1679, 1, 0, 0, 0, 1686, 249, 1, 0, 0, 0, 1687, 1688, 5, 105, 0, 0, 1688, 1693, 3, 172, 86, 0, 1689, 1690, 5, 520, 0, 0, 1690, 1692, 3, 172, 86, 0, 1691, 1689, 1, 0, 0, 0, 1692, 1695, 1, 0, 0, 0, 1693, 1691, 1, 0, 0, 0, 1693, 1694, 1, 0, 0, 0, 1694, 251, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1696, 1697, 5, 292, 0, 0, 1697, 1698, 5, 27, 0, 0, 1698, 1699, 3, 282, 141, 0, 1699, 1700, 3, 254, 127, 0, 1700, 1706, 1, 0, 0, 0, 1701, 1702, 5, 322, 0, 0, 1702, 1703, 5, 27, 0, 0, 1703, 1704, 5, 538, 0, 0, 1704, 1706, 3, 254, 127, 0, 1705, 1696, 1, 0, 0, 0, 1705, 1701, 1, 0, 0, 0, 1706, 253, 1, 0, 0, 0, 1707, 1708, 5, 480, 0, 0, 1708, 1709, 5, 10, 0, 0, 1709, 1710, 5, 76, 0, 0, 1710, 1711, 5, 321, 0, 0, 1711, 255, 1, 0, 0, 0, 1712, 1713, 5, 434, 0, 0, 1713, 1714, 3, 282, 141, 0, 1714, 257, 1, 0, 0, 0, 1715, 1716, 3, 260, 130, 0, 1716, 259, 1, 0, 0, 0, 1717, 1718, 6, 130, -1, 0, 1718, 1719, 5, 241, 0, 0, 1719, 1730, 3, 260, 130, 6, 1720, 1721, 5, 133, 0, 0, 1721, 1722, 5, 516, 0, 0, 1722, 1723, 3, 158, 79, 0, 1723, 1724, 5, 517, 0, 0, 1724, 1730, 1, 0, 0, 0, 1725, 1727, 3, 266, 133, 0, 1726, 1728, 3, 262, 131, 0, 1727, 1726, 1, 0, 0, 0, 1727, 1728, 1, 0, 0, 0, 1728, 1730, 1, 0, 0, 0, 1729, 1717, 1, 0, 0, 0, 1729, 1720, 1, 0, 0, 0, 1729, 1725, 1, 0, 0, 0, 1730, 1745, 1, 0, 0, 0, 1731, 1732, 10, 3, 0, 0, 1732, 1733, 5, 10, 0, 0, 1733, 1744, 3, 260, 130, 4, 1734, 1735, 10, 2, 0, 0, 1735, 1736, 5, 257, 0, 0, 1736, 1744, 3, 260, 130, 3, 1737, 1738, 10, 1, 0, 0, 1738, 1740, 5, 184, 0, 0, 1739, 1741, 5, 241, 0, 0, 1740, 1739, 1, 0, 0, 0, 1740, 1741, 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1744, 7, 27, 0, 0, 1743, 1731, 1, 0, 0, 0, 1743, 1734, 1, 0, 0, 0, 1743, 1737, 1, 0, 0, 0, 1744, 1747, 1, 0, 0, 0, 1745, 1743, 1, 0, 0, 0, 1745, 1746, 1, 0, 0, 0, 1746, 261, 1, 0, 0, 0, 1747, 1745, 1, 0, 0, 0, 1748, 1750, 5, 241, 0, 0, 1749, 1748, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1753, 5, 27, 0, 0, 1752, 1754, 7, 28, 0, 0, 1753, 1752, 1, 0, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1756, 3, 266, 133, 0, 1756, 1757, 5, 10, 0, 0, 1757, 1758, 3, 266, 133, 0, 1758, 1816, 1, 0, 0, 0, 1759, 1761, 5, 241, 0, 0, 1760, 1759, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1763, 5, 170, 0, 0, 1763, 1764, 5, 516, 0, 0, 1764, 1769, 3, 258, 129, 0, 1765, 1766, 5, 520, 0, 0, 1766, 1768, 3, 258, 129, 0, 1767, 1765, 1, 0, 0, 0, 1768, 1771, 1, 0, 0, 0, 1769, 1767, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1770, 1772, 1, 0, 0, 0, 1771, 1769, 1, 0, 0, 0, 1772, 1773, 5, 517, 0, 0, 1773, 1816, 1, 0, 0, 0, 1774, 1776, 5, 241, 0, 0, 1775, 1774, 1, 0, 0, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1777, 1, 0, 0, 0, 1777, 1778, 5, 170, 0, 0, 1778, 1779, 5, 516, 0, 0, 1779, 1780, 3, 158, 79, 0, 1780, 1781, 5, 517, 0, 0, 1781, 1816, 1, 0, 0, 0, 1782, 1783, 5, 133, 0, 0, 1783, 1784, 5, 516, 0, 0, 1784, 1785, 3, 158, 79, 0, 1785, 1786, 5, 517, 0, 0, 1786, 1816, 1, 0, 0, 0, 1787, 1789, 5, 241, 0, 0, 1788, 1787, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1790, 1791, 5, 318, 0, 0, 1791, 1816, 3, 266, 133, 0, 1792, 1816, 3, 264, 132, 0, 1793, 1795, 5, 184, 0, 0, 1794, 1796, 5, 241, 0, 0, 1795, 1794, 1, 0, 0, 0, 1795, 1796, 1, 0, 0, 0, 1796, 1797, 1, 0, 0, 0, 1797, 1816, 7, 27, 0, 0, 1798, 1800, 5, 184, 0, 0, 1799, 1801, 5, 241, 0, 0, 1800, 1799, 1, 0, 0, 0, 1800, 1801, 1, 0, 0, 0, 1801, 1802, 1, 0, 0, 0, 1802, 1803, 5, 113, 0, 0, 1803, 1804, 5, 151, 0, 0, 1804, 1816, 3, 266, 133, 0, 1805, 1807, 5, 241, 0, 0, 1806, 1805, 1, 0, 0, 0, 1806, 1807, 1, 0, 0, 0, 1807, 1808, 1, 0, 0, 0, 1808, 1809, 5, 342, 0, 0, 1809, 1810, 5, 388, 0, 0, 1810, 1813, 3, 266, 133, 0, 1811, 1812, 5, 127, 0, 0, 1812, 1814, 3, 358, 179, 0, 1813, 1811, 1, 0, 0, 0, 1813, 1814, 1, 0, 0, 0, 1814, 1816, 1, 0, 0, 0, 1815, 1749, 1, 0, 0, 0, 1815, 1760, 1, 0, 0, 0, 1815, 1775, 1, 0, 0, 0, 1815, 1782, 1, 0, 0, 0, 1815, 1788, 1, 0, 0, 0, 1815, 1792, 1, 0, 0, 0, 1815, 1793, 1, 0, 0, 0, 1815, 1798, 1, 0, 0, 0, 1815, 1806, 1, 0, 0, 0, 1816, 263, 1, 0, 0, 0, 1817, 1819, 5, 241, 0, 0, 1818, 1817, 1, 0, 0, 0, 1818, 1819, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1821, 5, 202, 0, 0, 1821, 1835, 7, 29, 0, 0, 1822, 1823, 5, 516, 0, 0, 1823, 1836, 5, 517, 0, 0, 1824, 1825, 5, 516, 0, 0, 1825, 1830, 3, 258, 129, 0, 1826, 1827, 5, 520, 0, 0, 1827, 1829, 3, 258, 129, 0, 1828, 1826, 1, 0, 0, 0, 1829, 1832, 1, 0, 0, 0, 1830, 1828, 1, 0, 0, 0, 1830, 1831, 1, 0, 0, 0, 1831, 1833, 1, 0, 0, 0, 1832, 1830, 1, 0, 0, 0, 1833, 1834, 5, 517, 0, 0, 1834, 1836, 1, 0, 0, 0, 1835, 1822, 1, 0, 0, 0, 1835, 1824, 1, 0, 0, 0, 1836, 1847, 1, 0, 0, 0, 1837, 1839, 5, 241, 0, 0, 1838, 1837, 1, 0, 0, 0, 1838, 1839, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1841, 5, 202, 0, 0, 1841, 1844, 3, 266, 133, 0, 1842, 1843, 5, 127, 0, 0, 1843, 1845, 3, 358, 179, 0, 1844, 1842, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 1847, 1, 0, 0, 0, 1846, 1818, 1, 0, 0, 0, 1846, 1838, 1, 0, 0, 0, 1847, 265, 1, 0, 0, 0, 1848, 1849, 6, 133, -1, 0, 1849, 1853, 3, 268, 134, 0, 1850, 1851, 7, 30, 0, 0, 1851, 1853, 3, 266, 133, 7, 1852, 1848, 1, 0, 0, 0, 1852, 1850, 1, 0, 0, 0, 1853, 1875, 1, 0, 0, 0, 1854, 1855, 10, 6, 0, 0, 1855, 1856, 7, 31, 0, 0, 1856, 1874, 3, 266, 133, 7, 1857, 1858, 10, 5, 0, 0, 1858, 1859, 7, 32, 0, 0, 1859, 1874, 3, 266, 133, 6, 1860, 1861, 10, 4, 0, 0, 1861, 1862, 5, 511, 0, 0, 1862, 1874, 3, 266, 133, 5, 1863, 1864, 10, 3, 0, 0, 1864, 1865, 5, 512, 0, 0, 1865, 1874, 3, 266, 133, 4, 1866, 1867, 10, 2, 0, 0, 1867, 1868, 5, 510, 0, 0, 1868, 1874, 3, 266, 133, 3, 1869, 1870, 10, 1, 0, 0, 1870, 1871, 3, 346, 173, 0, 1871, 1872, 3, 266, 133, 2, 1872, 1874, 1, 0, 0, 0, 1873, 1854, 1, 0, 0, 0, 1873, 1857, 1, 0, 0, 0, 1873, 1860, 1, 0, 0, 0, 1873, 1863, 1, 0, 0, 0, 1873, 1866, 1, 0, 0, 0, 1873, 1869, 1, 0, 0, 0, 1874, 1877, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 267, 1, 0, 0, 0, 1877, 1875, 1, 0, 0, 0, 1878, 1879, 6, 134, -1, 0, 1879, 1881, 5, 40, 0, 0, 1880, 1882, 3, 310, 155, 0, 1881, 1880, 1, 0, 0, 0, 1882, 1883, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 1887, 1, 0, 0, 0, 1885, 1886, 5, 120, 0, 0, 1886, 1888, 3, 258, 129, 0, 1887, 1885, 1, 0, 0, 0, 1887, 1888, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 1890, 5, 122, 0, 0, 1890, 1971, 1, 0, 0, 0, 1891, 1892, 5, 40, 0, 0, 1892, 1894, 3, 258, 129, 0, 1893, 1895, 3, 310, 155, 0, 1894, 1893, 1, 0, 0, 0, 1895, 1896, 1, 0, 0, 0, 1896, 1894, 1, 0, 0, 0, 1896, 1897, 1, 0, 0, 0, 1897, 1900, 1, 0, 0, 0, 1898, 1899, 5, 120, 0, 0, 1899, 1901, 3, 258, 129, 0, 1900, 1898, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1901, 1902, 1, 0, 0, 0, 1902, 1903, 5, 122, 0, 0, 1903, 1971, 1, 0, 0, 0, 1904, 1905, 5, 41, 0, 0, 1905, 1906, 5, 516, 0, 0, 1906, 1907, 3, 258, 129, 0, 1907, 1908, 5, 17, 0, 0, 1908, 1909, 3, 56, 28, 0, 1909, 1910, 5, 517, 0, 0, 1910, 1971, 1, 0, 0, 0, 1911, 1912, 5, 457, 0, 0, 1912, 1913, 5, 516, 0, 0, 1913, 1916, 3, 258, 129, 0, 1914, 1915, 5, 461, 0, 0, 1915, 1917, 5, 476, 0, 0, 1916, 1914, 1, 0, 0, 0, 1916, 1917, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 1919, 5, 517, 0, 0, 1919, 1971, 1, 0, 0, 0, 1920, 1921, 5, 467, 0, 0, 1921, 1922, 5, 516, 0, 0, 1922, 1925, 3, 258, 129, 0, 1923, 1924, 5, 461, 0, 0, 1924, 1926, 5, 476, 0, 0, 1925, 1923, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1928, 5, 517, 0, 0, 1928, 1971, 1, 0, 0, 0, 1929, 1930, 5, 281, 0, 0, 1930, 1931, 5, 516, 0, 0, 1931, 1932, 3, 266, 133, 0, 1932, 1933, 5, 170, 0, 0, 1933, 1934, 3, 266, 133, 0, 1934, 1935, 5, 517, 0, 0, 1935, 1971, 1, 0, 0, 0, 1936, 1971, 3, 354, 177, 0, 1937, 1971, 5, 527, 0, 0, 1938, 1939, 3, 328, 164, 0, 1939, 1940, 5, 513, 0, 0, 1940, 1941, 5, 527, 0, 0, 1941, 1971, 1, 0, 0, 0, 1942, 1943, 5, 516, 0, 0, 1943, 1944, 3, 158, 79, 0, 1944, 1945, 5, 517, 0, 0, 1945, 1971, 1, 0, 0, 0, 1946, 1947, 3, 272, 136, 0, 1947, 1959, 5, 516, 0, 0, 1948, 1950, 3, 364, 182, 0, 1949, 1948, 1, 0, 0, 0, 1949, 1950, 1, 0, 0, 0, 1950, 1951, 1, 0, 0, 0, 1951, 1956, 3, 274, 137, 0, 1952, 1953, 5, 520, 0, 0, 1953, 1955, 3, 274, 137, 0, 1954, 1952, 1, 0, 0, 0, 1955, 1958, 1, 0, 0, 0, 1956, 1954, 1, 0, 0, 0, 1956, 1957, 1, 0, 0, 0, 1957, 1960, 1, 0, 0, 0, 1958, 1956, 1, 0, 0, 0, 1959, 1949, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1962, 5, 517, 0, 0, 1962, 1971, 1, 0, 0, 0, 1963, 1971, 3, 304, 152, 0, 1964, 1971, 3, 276, 138, 0, 1965, 1966, 5, 516, 0, 0, 1966, 1967, 3, 258, 129, 0, 1967, 1968, 5, 517, 0, 0, 1968, 1971, 1, 0, 0, 0, 1969, 1971, 5, 85, 0, 0, 1970, 1878, 1, 0, 0, 0, 1970, 1891, 1, 0, 0, 0, 1970, 1904, 1, 0, 0, 0, 1970, 1911, 1, 0, 0, 0, 1970, 1920, 1, 0, 0, 0, 1970, 1929, 1, 0, 0, 0, 1970, 1936, 1, 0, 0, 0, 1970, 1937, 1, 0, 0, 0, 1970, 1938, 1, 0, 0, 0, 1970, 1942, 1, 0, 0, 0, 1970, 1946, 1, 0, 0, 0, 1970, 1963, 1, 0, 0, 0, 1970, 1964, 1, 0, 0, 0, 1970, 1965, 1, 0, 0, 0, 1970, 1969, 1, 0, 0, 0, 1971, 1979, 1, 0, 0, 0, 1972, 1973, 10, 5, 0, 0, 1973, 1974, 5, 514, 0, 0, 1974, 1975, 3, 266, 133, 0, 1975, 1976, 5, 515, 0, 0, 1976, 1978, 1, 0, 0, 0, 1977, 1972, 1, 0, 0, 0, 1978, 1981, 1, 0, 0, 0, 1979, 1977, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 269, 1, 0, 0, 0, 1981, 1979, 1, 0, 0, 0, 1982, 1983, 3, 328, 164, 0, 1983, 271, 1, 0, 0, 0, 1984, 1987, 3, 372, 186, 0, 1985, 1987, 3, 328, 164, 0, 1986, 1984, 1, 0, 0, 0, 1986, 1985, 1, 0, 0, 0, 1987, 273, 1, 0, 0, 0, 1988, 1993, 3, 370, 185, 0, 1989, 1993, 3, 368, 184, 0, 1990, 1993, 3, 366, 183, 0, 1991, 1993, 3, 258, 129, 0, 1992, 1988, 1, 0, 0, 0, 1992, 1989, 1, 0, 0, 0, 1992, 1990, 1, 0, 0, 0, 1992, 1991, 1, 0, 0, 0, 1993, 275, 1, 0, 0, 0, 1994, 1995, 3, 328, 164, 0, 1995, 277, 1, 0, 0, 0, 1996, 1997, 3, 304, 152, 0, 1997, 279, 1, 0, 0, 0, 1998, 2001, 3, 304, 152, 0, 1999, 2001, 3, 276, 138, 0, 2000, 1998, 1, 0, 0, 0, 2000, 1999, 1, 0, 0, 0, 2001, 281, 1, 0, 0, 0, 2002, 2005, 5, 182, 0, 0, 2003, 2006, 3, 284, 142, 0, 2004, 2006, 3, 288, 144, 0, 2005, 2003, 1, 0, 0, 0, 2005, 2004, 1, 0, 0, 0, 2005, 2006, 1, 0, 0, 0, 2006, 283, 1, 0, 0, 0, 2007, 2009, 3, 286, 143, 0, 2008, 2010, 3, 290, 145, 0, 2009, 2008, 1, 0, 0, 0, 2009, 2010, 1, 0, 0, 0, 2010, 285, 1, 0, 0, 0, 2011, 2012, 3, 292, 146, 0, 2012, 2013, 3, 368, 184, 0, 2013, 2015, 1, 0, 0, 0, 2014, 2011, 1, 0, 0, 0, 2015, 2016, 1, 0, 0, 0, 2016, 2014, 1, 0, 0, 0, 2016, 2017, 1, 0, 0, 0, 2017, 287, 1, 0, 0, 0, 2018, 2021, 3, 290, 145, 0, 2019, 2022, 3, 286, 143, 0, 2020, 2022, 3, 290, 145, 0, 2021, 2019, 1, 0, 0, 0, 2021, 2020, 1, 0, 0, 0, 2021, 2022, 1, 0, 0, 0, 2022, 289, 1, 0, 0, 0, 2023, 2024, 3, 292, 146, 0, 2024, 2025, 3, 368, 184, 0, 2025, 2026, 5, 388, 0, 0, 2026, 2027, 3, 368, 184, 0, 2027, 291, 1, 0, 0, 0, 2028, 2030, 7, 33, 0, 0, 2029, 2028, 1, 0, 0, 0, 2029, 2030, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 2034, 7, 34, 0, 0, 2032, 2034, 5, 537, 0, 0, 2033, 2029, 1, 0, 0, 0, 2033, 2032, 1, 0, 0, 0, 2034, 293, 1, 0, 0, 0, 2035, 2037, 5, 17, 0, 0, 2036, 2035, 1, 0, 0, 0, 2036, 2037, 1, 0, 0, 0, 2037, 2038, 1, 0, 0, 0, 2038, 2040, 3, 304, 152, 0, 2039, 2041, 3, 300, 150, 0, 2040, 2039, 1, 0, 0, 0, 2040, 2041, 1, 0, 0, 0, 2041, 295, 1, 0, 0, 0, 2042, 2043, 3, 304, 152, 0, 2043, 2044, 3, 298, 149, 0, 2044, 297, 1, 0, 0, 0, 2045, 2046, 5, 221, 0, 0, 2046, 2048, 3, 304, 152, 0, 2047, 2045, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2047, 1, 0, 0, 0, 2049, 2050, 1, 0, 0, 0, 2050, 2053, 1, 0, 0, 0, 2051, 2053, 1, 0, 0, 0, 2052, 2047, 1, 0, 0, 0, 2052, 2051, 1, 0, 0, 0, 2053, 299, 1, 0, 0, 0, 2054, 2055, 5, 516, 0, 0, 2055, 2056, 3, 302, 151, 0, 2056, 2057, 5, 517, 0, 0, 2057, 301, 1, 0, 0, 0, 2058, 2063, 3, 304, 152, 0, 2059, 2060, 5, 520, 0, 0, 2060, 2062, 3, 304, 152, 0, 2061, 2059, 1, 0, 0, 0, 2062, 2065, 1, 0, 0, 0, 2063, 2061, 1, 0, 0, 0, 2063, 2064, 1, 0, 0, 0, 2064, 303, 1, 0, 0, 0, 2065, 2063, 1, 0, 0, 0, 2066, 2070, 3, 306, 153, 0, 2067, 2070, 3, 308, 154, 0, 2068, 2070, 3, 374, 187, 0, 2069, 2066, 1, 0, 0, 0, 2069, 2067, 1, 0, 0, 0, 2069, 2068, 1, 0, 0, 0, 2070, 305, 1, 0, 0, 0, 2071, 2072, 7, 35, 0, 0, 2072, 307, 1, 0, 0, 0, 2073, 2074, 5, 537, 0, 0, 2074, 309, 1, 0, 0, 0, 2075, 2076, 5, 428, 0, 0, 2076, 2077, 3, 258, 129, 0, 2077, 2078, 5, 376, 0, 0, 2078, 2079, 3, 258, 129, 0, 2079, 311, 1, 0, 0, 0, 2080, 2081, 3, 304, 152, 0, 2081, 313, 1, 0, 0, 0, 2082, 2083, 3, 304, 152, 0, 2083, 315, 1, 0, 0, 0, 2084, 2087, 3, 304, 152, 0, 2085, 2086, 5, 513, 0, 0, 2086, 2088, 3, 304, 152, 0, 2087, 2085, 1, 0, 0, 0, 2087, 2088, 1, 0, 0, 0, 2088, 317, 1, 0, 0, 0, 2089, 2092, 3, 304, 152, 0, 2090, 2091, 5, 513, 0, 0, 2091, 2093, 3, 304, 152, 0, 2092, 2090, 1, 0, 0, 0, 2092, 2093, 1, 0, 0, 0, 2093, 319, 1, 0, 0, 0, 2094, 2097, 3, 304, 152, 0, 2095, 2096, 5, 513, 0, 0, 2096, 2098, 3, 304, 152, 0, 2097, 2095, 1, 0, 0, 0, 2097, 2098, 1, 0, 0, 0, 2098, 2107, 1, 0, 0, 0, 2099, 2100, 3, 304, 152, 0, 2100, 2101, 5, 513, 0, 0, 2101, 2104, 3, 304, 152, 0, 2102, 2103, 5, 513, 0, 0, 2103, 2105, 3, 304, 152, 0, 2104, 2102, 1, 0, 0, 0, 2104, 2105, 1, 0, 0, 0, 2105, 2107, 1, 0, 0, 0, 2106, 2094, 1, 0, 0, 0, 2106, 2099, 1, 0, 0, 0, 2107, 321, 1, 0, 0, 0, 2108, 2111, 3, 304, 152, 0, 2109, 2110, 5, 513, 0, 0, 2110, 2112, 3, 304, 152, 0, 2111, 2109, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2121, 1, 0, 0, 0, 2113, 2114, 3, 304, 152, 0, 2114, 2115, 5, 513, 0, 0, 2115, 2118, 3, 304, 152, 0, 2116, 2117, 5, 513, 0, 0, 2117, 2119, 3, 304, 152, 0, 2118, 2116, 1, 0, 0, 0, 2118, 2119, 1, 0, 0, 0, 2119, 2121, 1, 0, 0, 0, 2120, 2108, 1, 0, 0, 0, 2120, 2113, 1, 0, 0, 0, 2121, 323, 1, 0, 0, 0, 2122, 2125, 3, 304, 152, 0, 2123, 2124, 5, 513, 0, 0, 2124, 2126, 3, 304, 152, 0, 2125, 2123, 1, 0, 0, 0, 2125, 2126, 1, 0, 0, 0, 2126, 2135, 1, 0, 0, 0, 2127, 2128, 3, 304, 152, 0, 2128, 2129, 5, 513, 0, 0, 2129, 2132, 3, 304, 152, 0, 2130, 2131, 5, 513, 0, 0, 2131, 2133, 3, 304, 152, 0, 2132, 2130, 1, 0, 0, 0, 2132, 2133, 1, 0, 0, 0, 2133, 2135, 1, 0, 0, 0, 2134, 2122, 1, 0, 0, 0, 2134, 2127, 1, 0, 0, 0, 2135, 325, 1, 0, 0, 0, 2136, 2139, 3, 304, 152, 0, 2137, 2138, 5, 513, 0, 0, 2138, 2140, 3, 304, 152, 0, 2139, 2137, 1, 0, 0, 0, 2139, 2140, 1, 0, 0, 0, 2140, 2149, 1, 0, 0, 0, 2141, 2142, 3, 304, 152, 0, 2142, 2143, 5, 513, 0, 0, 2143, 2146, 3, 304, 152, 0, 2144, 2145, 5, 513, 0, 0, 2145, 2147, 3, 304, 152, 0, 2146, 2144, 1, 0, 0, 0, 2146, 2147, 1, 0, 0, 0, 2147, 2149, 1, 0, 0, 0, 2148, 2136, 1, 0, 0, 0, 2148, 2141, 1, 0, 0, 0, 2149, 327, 1, 0, 0, 0, 2150, 2155, 3, 304, 152, 0, 2151, 2152, 5, 513, 0, 0, 2152, 2154, 3, 304, 152, 0, 2153, 2151, 1, 0, 0, 0, 2154, 2157, 1, 0, 0, 0, 2155, 2156, 1, 0, 0, 0, 2155, 2153, 1, 0, 0, 0, 2156, 329, 1, 0, 0, 0, 2157, 2155, 1, 0, 0, 0, 2158, 2159, 5, 433, 0, 0, 2159, 2160, 3, 336, 168, 0, 2160, 331, 1, 0, 0, 0, 2161, 2162, 5, 167, 0, 0, 2162, 2163, 5, 241, 0, 0, 2163, 2164, 5, 133, 0, 0, 2164, 333, 1, 0, 0, 0, 2165, 2166, 5, 167, 0, 0, 2166, 2167, 5, 133, 0, 0, 2167, 335, 1, 0, 0, 0, 2168, 2169, 5, 516, 0, 0, 2169, 2174, 3, 338, 169, 0, 2170, 2171, 5, 520, 0, 0, 2171, 2173, 3, 338, 169, 0, 2172, 2170, 1, 0, 0, 0, 2173, 2176, 1, 0, 0, 0, 2174, 2172, 1, 0, 0, 0, 2174, 2175, 1, 0, 0, 0, 2175, 2177, 1, 0, 0, 0, 2176, 2174, 1, 0, 0, 0, 2177, 2178, 5, 517, 0, 0, 2178, 337, 1, 0, 0, 0, 2179, 2184, 3, 340, 170, 0, 2180, 2182, 5, 505, 0, 0, 2181, 2180, 1, 0, 0, 0, 2181, 2182, 1, 0, 0, 0, 2182, 2183, 1, 0, 0, 0, 2183, 2185, 3, 342, 171, 0, 2184, 2181, 1, 0, 0, 0, 2184, 2185, 1, 0, 0, 0, 2185, 339, 1, 0, 0, 0, 2186, 2190, 3, 304, 152, 0, 2187, 2190, 3, 276, 138, 0, 2188, 2190, 5, 537, 0, 0, 2189, 2186, 1, 0, 0, 0, 2189, 2187, 1, 0, 0, 0, 2189, 2188, 1, 0, 0, 0, 2190, 341, 1, 0, 0, 0, 2191, 2196, 5, 538, 0, 0, 2192, 2196, 5, 539, 0, 0, 2193, 2196, 3, 362, 181, 0, 2194, 2196, 5, 537, 0, 0, 2195, 2191, 1, 0, 0, 0, 2195, 2192, 1, 0, 0, 0, 2195, 2193, 1, 0, 0, 0, 2195, 2194, 1, 0, 0, 0, 2196, 343, 1, 0, 0, 0, 2197, 2204, 5, 10, 0, 0, 2198, 2199, 5, 511, 0, 0, 2199, 2204, 5, 511, 0, 0, 2200, 2204, 5, 257, 0, 0, 2201, 2202, 5, 510, 0, 0, 2202, 2204, 5, 510, 0, 0, 2203, 2197, 1, 0, 0, 0, 2203, 2198, 1, 0, 0, 0, 2203, 2200, 1, 0, 0, 0, 2203, 2201, 1, 0, 0, 0, 2204, 345, 1, 0, 0, 0, 2205, 2220, 5, 505, 0, 0, 2206, 2220, 5, 506, 0, 0, 2207, 2220, 5, 507, 0, 0, 2208, 2209, 5, 507, 0, 0, 2209, 2220, 5, 505, 0, 0, 2210, 2211, 5, 506, 0, 0, 2211, 2220, 5, 505, 0, 0, 2212, 2213, 5, 507, 0, 0, 2213, 2220, 5, 506, 0, 0, 2214, 2215, 5, 508, 0, 0, 2215, 2220, 5, 505, 0, 0, 2216, 2217, 5, 507, 0, 0, 2217, 2218, 5, 505, 0, 0, 2218, 2220, 5, 506, 0, 0, 2219, 2205, 1, 0, 0, 0, 2219, 2206, 1, 0, 0, 0, 2219, 2207, 1, 0, 0, 0, 2219, 2208, 1, 0, 0, 0, 2219, 2210, 1, 0, 0, 0, 2219, 2212, 1, 0, 0, 0, 2219, 2214, 1, 0, 0, 0, 2219, 2216, 1, 0, 0, 0, 2220, 347, 1, 0, 0, 0, 2221, 2222, 5, 507, 0, 0, 2222, 2229, 5, 507, 0, 0, 2223, 2224, 5, 506, 0, 0, 2224, 2229, 5, 506, 0, 0, 2225, 2229, 5, 511, 0, 0, 2226, 2229, 5, 512, 0, 0, 2227, 2229, 5, 510, 0, 0, 2228, 2221, 1, 0, 0, 0, 2228, 2223, 1, 0, 0, 0, 2228, 2225, 1, 0, 0, 0, 2228, 2226, 1, 0, 0, 0, 2228, 2227, 1, 0, 0, 0, 2229, 349, 1, 0, 0, 0, 2230, 2231, 7, 36, 0, 0, 2231, 351, 1, 0, 0, 0, 2232, 2233, 7, 37, 0, 0, 2233, 353, 1, 0, 0, 0, 2234, 2249, 3, 282, 141, 0, 2235, 2249, 3, 356, 178, 0, 2236, 2249, 3, 358, 179, 0, 2237, 2239, 5, 529, 0, 0, 2238, 2237, 1, 0, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 2240, 1, 0, 0, 0, 2240, 2249, 3, 360, 180, 0, 2241, 2249, 3, 362, 181, 0, 2242, 2249, 5, 539, 0, 0, 2243, 2249, 5, 540, 0, 0, 2244, 2246, 5, 241, 0, 0, 2245, 2244, 1, 0, 0, 0, 2245, 2246, 1, 0, 0, 0, 2246, 2247, 1, 0, 0, 0, 2247, 2249, 5, 244, 0, 0, 2248, 2234, 1, 0, 0, 0, 2248, 2235, 1, 0, 0, 0, 2248, 2236, 1, 0, 0, 0, 2248, 2238, 1, 0, 0, 0, 2248, 2241, 1, 0, 0, 0, 2248, 2242, 1, 0, 0, 0, 2248, 2243, 1, 0, 0, 0, 2248, 2245, 1, 0, 0, 0, 2249, 355, 1, 0, 0, 0, 2250, 2251, 3, 366, 183, 0, 2251, 2252, 3, 358, 179, 0, 2252, 357, 1, 0, 0, 0, 2253, 2254, 5, 537, 0, 0, 2254, 359, 1, 0, 0, 0, 2255, 2256, 5, 538, 0, 0, 2256, 361, 1, 0, 0, 0, 2257, 2258, 7, 38, 0, 0, 2258, 363, 1, 0, 0, 0, 2259, 2260, 7, 39, 0, 0, 2260, 365, 1, 0, 0, 0, 2261, 2262, 7, 40, 0, 0, 2262, 367, 1, 0, 0, 0, 2263, 2264, 7, 41, 0, 0, 2264, 369, 1, 0, 0, 0, 2265, 2266, 7, 42, 0, 0, 2266, 371, 1, 0, 0, 0, 2267, 2268, 7, 43, 0, 0, 2268, 373, 1, 0, 0, 0, 2269, 2270, 7, 44, 0, 0, 2270, 375, 1, 0, 0, 0, 270, 379, 386, 389, 403, 421, 425, 434, 439, 446, 457, 466, 478, 481, 488, 491, 499, 503, 508, 511, 518, 526, 530, 542, 550, 554, 586, 589, 594, 598, 602, 606, 615, 620, 624, 628, 632, 635, 639, 644, 650, 655, 660, 663, 667, 671, 679, 687, 691, 695, 699, 703, 707, 711, 715, 719, 721, 731, 739, 763, 770, 776, 779, 782, 792, 795, 803, 815, 839, 851, 856, 860, 868, 872, 878, 888, 892, 898, 902, 906, 909, 918, 922, 929, 932, 942, 950, 958, 962, 977, 996, 1007, 1011, 1018, 1023, 1029, 1033, 1040, 1044, 1048, 1052, 1060, 1064, 1069, 1075, 1081, 1084, 1088, 1099, 1108, 1122, 1134, 1149, 1152, 1156, 1159, 1161, 1166, 1170, 1173, 1177, 1186, 1195, 1205, 1210, 1221, 1224, 1227, 1230, 1233, 1239, 1243, 1251, 1254, 1259, 1262, 1266, 1269, 1271, 1285, 1296, 1301, 1309, 1312, 1315, 1320, 1322, 1324, 1329, 1332, 1336, 1339, 1342, 1346, 1349, 1352, 1364, 1371, 1382, 1409, 1431, 1444, 1456, 1469, 1481, 1493, 1499, 1526, 1534, 1538, 1541, 1544, 1551, 1554, 1557, 1560, 1563, 1566, 1571, 1574, 1583, 1588, 1592, 1597, 1606, 1625, 1633, 1641, 1645, 1649, 1659, 1685, 1693, 1705, 1727, 1729, 1740, 1743, 1745, 1749, 1753, 1760, 1769, 1775, 1788, 1795, 1800, 1806, 1813, 1815, 1818, 1830, 1835, 1838, 1844, 1846, 1852, 1873, 1875, 1883, 1887, 1896, 1900, 1916, 1925, 1949, 1956, 1959, 1970, 1979, 1986, 1992, 2000, 2005, 2009, 2016, 2021, 2029, 2033, 2036, 2040, 2049, 2052, 2063, 2069, 2087, 2092, 2097, 2104, 2106, 2111, 2118, 2120, 2125, 2132, 2134, 2139, 2146, 2148, 2155, 2174, 2181, 2184, 2189, 2195, 2203, 2219, 2228, 2238, 2245, 2248] \ No newline at end of file +[4, 1, 541, 2302, 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, 1, 0, 5, 0, 386, 8, 0, 10, 0, 12, 0, 389, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 395, 8, 1, 1, 1, 3, 1, 398, 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, 3, 2, 412, 8, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 430, 8, 4, 1, 5, 1, 5, 3, 5, 434, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 443, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 448, 8, 7, 1, 8, 1, 8, 1, 8, 5, 8, 453, 8, 8, 10, 8, 12, 8, 456, 9, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 466, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 473, 8, 11, 10, 11, 12, 11, 476, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 487, 8, 12, 1, 12, 3, 12, 490, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 497, 8, 12, 1, 12, 3, 12, 500, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 508, 8, 12, 1, 12, 1, 12, 3, 12, 512, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 517, 8, 12, 1, 12, 3, 12, 520, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 527, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 3, 15, 535, 8, 15, 1, 16, 1, 16, 3, 16, 539, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 551, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 559, 8, 18, 1, 18, 1, 18, 3, 18, 563, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 595, 8, 18, 1, 19, 3, 19, 598, 8, 19, 1, 19, 4, 19, 601, 8, 19, 11, 19, 12, 19, 602, 1, 20, 1, 20, 3, 20, 607, 8, 20, 1, 21, 1, 21, 3, 21, 611, 8, 21, 1, 21, 1, 21, 3, 21, 615, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 622, 8, 21, 10, 21, 12, 21, 625, 9, 21, 1, 21, 1, 21, 3, 21, 629, 8, 21, 1, 21, 1, 21, 3, 21, 633, 8, 21, 1, 21, 1, 21, 3, 21, 637, 8, 21, 1, 21, 1, 21, 1, 21, 3, 21, 642, 8, 21, 1, 21, 3, 21, 645, 8, 21, 1, 21, 1, 21, 3, 21, 649, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 654, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 660, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 665, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 670, 8, 24, 1, 24, 1, 24, 3, 24, 674, 8, 24, 1, 25, 1, 25, 3, 25, 678, 8, 25, 1, 26, 1, 26, 3, 26, 682, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 688, 8, 27, 10, 27, 12, 27, 691, 9, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 3, 28, 698, 8, 28, 1, 28, 1, 28, 3, 28, 702, 8, 28, 1, 28, 1, 28, 3, 28, 706, 8, 28, 1, 28, 1, 28, 3, 28, 710, 8, 28, 1, 28, 1, 28, 3, 28, 714, 8, 28, 1, 28, 1, 28, 3, 28, 718, 8, 28, 1, 28, 1, 28, 3, 28, 722, 8, 28, 1, 28, 1, 28, 3, 28, 726, 8, 28, 1, 28, 1, 28, 3, 28, 730, 8, 28, 3, 28, 732, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 742, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 750, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 772, 8, 34, 10, 34, 12, 34, 775, 9, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 786, 8, 34, 10, 34, 12, 34, 789, 9, 34, 1, 34, 1, 34, 3, 34, 793, 8, 34, 1, 35, 1, 35, 3, 35, 797, 8, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 803, 8, 35, 1, 35, 3, 35, 806, 8, 35, 1, 35, 3, 35, 809, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 816, 8, 36, 1, 36, 3, 36, 819, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 828, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 840, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 862, 8, 45, 10, 45, 12, 45, 865, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 874, 8, 46, 10, 46, 12, 46, 877, 9, 46, 1, 46, 1, 46, 3, 46, 881, 8, 46, 1, 47, 1, 47, 3, 47, 885, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 891, 8, 48, 10, 48, 12, 48, 894, 9, 48, 1, 48, 3, 48, 897, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 903, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 3, 51, 913, 8, 51, 1, 51, 1, 51, 1, 51, 3, 51, 918, 8, 51, 1, 51, 1, 51, 1, 52, 1, 52, 3, 52, 924, 8, 52, 1, 52, 1, 52, 3, 52, 928, 8, 52, 1, 52, 1, 52, 3, 52, 932, 8, 52, 1, 52, 1, 52, 3, 52, 936, 8, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 945, 8, 53, 1, 53, 1, 53, 3, 53, 949, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 956, 8, 53, 1, 53, 3, 53, 959, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 967, 8, 54, 10, 54, 12, 54, 970, 9, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 3, 56, 977, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 985, 8, 56, 1, 57, 1, 57, 3, 57, 989, 8, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1004, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1023, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1034, 8, 65, 1, 65, 1, 65, 3, 65, 1038, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1045, 8, 65, 1, 66, 1, 66, 1, 66, 3, 66, 1050, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 3, 67, 1056, 8, 67, 1, 67, 1, 67, 3, 67, 1060, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 3, 68, 1067, 8, 68, 1, 68, 1, 68, 3, 68, 1071, 8, 68, 1, 69, 1, 69, 3, 69, 1075, 8, 69, 1, 69, 1, 69, 3, 69, 1079, 8, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1087, 8, 70, 1, 70, 1, 70, 3, 70, 1091, 8, 70, 1, 70, 1, 70, 1, 71, 3, 71, 1096, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1102, 8, 71, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1108, 8, 72, 1, 72, 3, 72, 1111, 8, 72, 1, 72, 1, 72, 3, 72, 1115, 8, 72, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 5, 74, 1124, 8, 74, 10, 74, 12, 74, 1127, 9, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1133, 8, 75, 10, 75, 12, 75, 1136, 9, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 4, 76, 1147, 8, 76, 11, 76, 12, 76, 1148, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1159, 8, 77, 11, 77, 12, 77, 1160, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1176, 8, 78, 1, 78, 3, 78, 1179, 8, 78, 1, 78, 1, 78, 3, 78, 1183, 8, 78, 1, 78, 3, 78, 1186, 8, 78, 3, 78, 1188, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1193, 8, 78, 1, 78, 1, 78, 3, 78, 1197, 8, 78, 1, 78, 3, 78, 1200, 8, 78, 5, 78, 1202, 8, 78, 10, 78, 12, 78, 1205, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1211, 8, 79, 10, 79, 12, 79, 1214, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1220, 8, 80, 10, 80, 12, 80, 1223, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1230, 8, 81, 10, 81, 12, 81, 1233, 9, 81, 1, 81, 1, 81, 3, 81, 1237, 8, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 1248, 8, 83, 1, 83, 3, 83, 1251, 8, 83, 1, 83, 3, 83, 1254, 8, 83, 1, 83, 3, 83, 1257, 8, 83, 1, 83, 3, 83, 1260, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1266, 8, 83, 1, 84, 1, 84, 3, 84, 1270, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1276, 8, 84, 10, 84, 12, 84, 1279, 9, 84, 3, 84, 1281, 8, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1286, 8, 85, 1, 85, 3, 85, 1289, 8, 85, 1, 85, 1, 85, 3, 85, 1293, 8, 85, 1, 85, 3, 85, 1296, 8, 85, 3, 85, 1298, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1312, 8, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1321, 8, 88, 10, 88, 12, 88, 1324, 9, 88, 1, 88, 1, 88, 3, 88, 1328, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1336, 8, 88, 1, 88, 3, 88, 1339, 8, 88, 1, 88, 3, 88, 1342, 8, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1347, 8, 88, 5, 88, 1349, 8, 88, 10, 88, 12, 88, 1352, 9, 88, 1, 89, 1, 89, 3, 89, 1356, 8, 89, 1, 90, 3, 90, 1359, 8, 90, 1, 90, 1, 90, 3, 90, 1363, 8, 90, 1, 90, 1, 90, 3, 90, 1367, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1376, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1387, 8, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 5, 95, 1412, 8, 95, 10, 95, 12, 95, 1415, 9, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 1436, 8, 97, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 1449, 8, 100, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 5, 102, 1459, 8, 102, 10, 102, 12, 102, 1462, 9, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1472, 8, 103, 10, 103, 12, 103, 1475, 9, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1484, 8, 103, 10, 103, 12, 103, 1487, 9, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1496, 8, 103, 10, 103, 12, 103, 1499, 9, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1504, 8, 103, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1529, 8, 110, 10, 110, 12, 110, 1532, 9, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 3, 112, 1539, 8, 112, 1, 112, 1, 112, 3, 112, 1543, 8, 112, 1, 112, 3, 112, 1546, 8, 112, 1, 112, 3, 112, 1549, 8, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 3, 113, 1556, 8, 113, 1, 113, 3, 113, 1559, 8, 113, 1, 113, 3, 113, 1562, 8, 113, 1, 113, 3, 113, 1565, 8, 113, 1, 113, 3, 113, 1568, 8, 113, 1, 113, 3, 113, 1571, 8, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1576, 8, 113, 1, 113, 3, 113, 1579, 8, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1586, 8, 114, 10, 114, 12, 114, 1589, 9, 114, 1, 115, 1, 115, 3, 115, 1593, 8, 115, 1, 115, 1, 115, 3, 115, 1597, 8, 115, 1, 116, 1, 116, 1, 116, 3, 116, 1602, 8, 116, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1608, 8, 117, 1, 117, 1, 117, 1, 117, 3, 117, 1613, 8, 117, 5, 117, 1615, 8, 117, 10, 117, 12, 117, 1618, 9, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 1636, 8, 118, 1, 119, 1, 119, 1, 119, 1, 119, 5, 119, 1642, 8, 119, 10, 119, 12, 119, 1645, 9, 119, 1, 120, 1, 120, 1, 120, 4, 120, 1650, 8, 120, 11, 120, 12, 120, 1651, 1, 120, 1, 120, 3, 120, 1656, 8, 120, 1, 121, 1, 121, 3, 121, 1660, 8, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1670, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1696, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 5, 124, 1702, 8, 124, 10, 124, 12, 124, 1705, 9, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 3, 125, 1716, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1738, 8, 129, 3, 129, 1740, 8, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1751, 8, 129, 1, 129, 5, 129, 1754, 8, 129, 10, 129, 12, 129, 1757, 9, 129, 1, 130, 3, 130, 1760, 8, 130, 1, 130, 1, 130, 3, 130, 1764, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1771, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 5, 130, 1778, 8, 130, 10, 130, 12, 130, 1781, 9, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1786, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1799, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1806, 8, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1811, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1817, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1824, 8, 130, 3, 130, 1826, 8, 130, 1, 131, 3, 131, 1829, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1839, 8, 131, 10, 131, 12, 131, 1842, 9, 131, 1, 131, 1, 131, 3, 131, 1846, 8, 131, 1, 131, 3, 131, 1849, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1855, 8, 131, 3, 131, 1857, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1863, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1884, 8, 132, 10, 132, 12, 132, 1887, 9, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1894, 8, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1899, 8, 133, 10, 133, 12, 133, 1902, 9, 133, 3, 133, 1904, 8, 133, 1, 133, 1, 133, 3, 133, 1908, 8, 133, 1, 134, 1, 134, 1, 134, 4, 134, 1913, 8, 134, 11, 134, 12, 134, 1914, 1, 134, 1, 134, 3, 134, 1919, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 4, 134, 1926, 8, 134, 11, 134, 12, 134, 1927, 1, 134, 1, 134, 3, 134, 1932, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1948, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1957, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1985, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1992, 8, 134, 10, 134, 12, 134, 1995, 9, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 3, 136, 2003, 8, 136, 1, 137, 1, 137, 1, 137, 1, 137, 3, 137, 2009, 8, 137, 1, 138, 1, 138, 3, 138, 2013, 8, 138, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 2019, 8, 139, 1, 140, 1, 140, 1, 141, 1, 141, 1, 142, 1, 142, 3, 142, 2027, 8, 142, 1, 143, 1, 143, 1, 143, 3, 143, 2032, 8, 143, 1, 144, 1, 144, 3, 144, 2036, 8, 144, 1, 145, 1, 145, 1, 145, 4, 145, 2041, 8, 145, 11, 145, 12, 145, 2042, 1, 146, 1, 146, 1, 146, 3, 146, 2048, 8, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 3, 148, 2056, 8, 148, 1, 148, 1, 148, 3, 148, 2060, 8, 148, 1, 149, 3, 149, 2063, 8, 149, 1, 149, 1, 149, 3, 149, 2067, 8, 149, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 4, 151, 2074, 8, 151, 11, 151, 12, 151, 2075, 1, 151, 3, 151, 2079, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 5, 153, 2088, 8, 153, 10, 153, 12, 153, 2091, 9, 153, 1, 154, 1, 154, 1, 154, 3, 154, 2096, 8, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 3, 160, 2114, 8, 160, 1, 161, 1, 161, 1, 161, 3, 161, 2119, 8, 161, 1, 162, 1, 162, 1, 162, 3, 162, 2124, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 2131, 8, 162, 3, 162, 2133, 8, 162, 1, 163, 1, 163, 1, 163, 3, 163, 2138, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2145, 8, 163, 3, 163, 2147, 8, 163, 1, 164, 1, 164, 1, 164, 3, 164, 2152, 8, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 2159, 8, 164, 3, 164, 2161, 8, 164, 1, 165, 1, 165, 1, 165, 3, 165, 2166, 8, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2173, 8, 165, 3, 165, 2175, 8, 165, 1, 166, 1, 166, 1, 166, 5, 166, 2180, 8, 166, 10, 166, 12, 166, 2183, 9, 166, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2199, 8, 170, 10, 170, 12, 170, 2202, 9, 170, 1, 170, 1, 170, 1, 171, 1, 171, 3, 171, 2208, 8, 171, 1, 171, 3, 171, 2211, 8, 171, 1, 172, 1, 172, 1, 172, 3, 172, 2216, 8, 172, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2222, 8, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2230, 8, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 2246, 8, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 3, 176, 2255, 8, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 3, 179, 2265, 8, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 3, 179, 2272, 8, 179, 1, 179, 3, 179, 2275, 8, 179, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 182, 1, 182, 1, 183, 1, 183, 1, 184, 1, 184, 1, 185, 1, 185, 1, 186, 1, 186, 1, 187, 1, 187, 1, 188, 1, 188, 1, 189, 1, 189, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 2181, 5, 156, 176, 258, 264, 268, 192, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 0, 47, 2, 0, 109, 109, 450, 450, 3, 0, 45, 45, 128, 128, 188, 188, 4, 0, 42, 42, 90, 90, 422, 422, 464, 464, 2, 0, 441, 441, 447, 447, 2, 0, 151, 151, 170, 170, 2, 0, 437, 437, 489, 489, 2, 0, 482, 485, 487, 487, 3, 0, 32, 32, 91, 91, 244, 244, 11, 0, 28, 29, 35, 35, 46, 46, 92, 92, 178, 179, 344, 344, 360, 360, 378, 378, 381, 381, 387, 387, 416, 417, 2, 0, 433, 433, 435, 435, 4, 0, 101, 102, 115, 115, 144, 144, 246, 246, 2, 0, 13, 13, 231, 231, 2, 0, 455, 455, 462, 462, 3, 0, 5, 5, 270, 270, 444, 444, 3, 0, 266, 266, 455, 455, 462, 462, 3, 0, 425, 425, 458, 458, 477, 477, 3, 0, 330, 330, 465, 465, 481, 481, 2, 0, 440, 440, 490, 490, 2, 0, 183, 183, 265, 265, 3, 0, 130, 130, 180, 180, 402, 402, 4, 0, 152, 152, 174, 174, 201, 201, 317, 317, 3, 0, 445, 445, 459, 459, 499, 499, 4, 0, 250, 250, 446, 446, 494, 496, 498, 498, 2, 0, 74, 74, 320, 320, 3, 0, 459, 459, 492, 492, 499, 499, 2, 0, 439, 439, 450, 450, 2, 0, 457, 457, 467, 467, 4, 0, 140, 140, 244, 244, 397, 397, 404, 404, 2, 0, 19, 19, 369, 369, 2, 0, 5, 5, 11, 11, 2, 0, 509, 509, 529, 530, 4, 0, 452, 452, 527, 527, 531, 531, 534, 534, 2, 0, 529, 530, 532, 532, 1, 0, 529, 530, 1, 0, 538, 539, 2, 0, 538, 538, 541, 541, 4, 0, 452, 452, 527, 527, 529, 531, 533, 534, 3, 0, 241, 241, 508, 509, 529, 530, 2, 0, 140, 140, 397, 397, 2, 0, 5, 5, 113, 113, 10, 0, 97, 97, 165, 165, 222, 222, 229, 229, 334, 334, 436, 436, 470, 470, 472, 472, 488, 488, 502, 502, 15, 0, 97, 97, 165, 165, 222, 222, 229, 229, 334, 334, 427, 427, 436, 436, 442, 442, 448, 449, 454, 454, 460, 460, 470, 475, 488, 488, 491, 491, 502, 503, 11, 0, 5, 5, 13, 13, 33, 33, 78, 78, 84, 85, 113, 113, 200, 200, 207, 208, 389, 389, 413, 413, 527, 527, 3, 0, 78, 78, 84, 85, 207, 208, 2, 0, 91, 91, 378, 379, 52, 0, 4, 4, 13, 13, 23, 23, 38, 38, 41, 41, 43, 44, 54, 54, 56, 56, 69, 69, 75, 75, 98, 99, 107, 107, 119, 119, 134, 134, 139, 139, 143, 143, 145, 145, 160, 160, 165, 165, 167, 167, 194, 194, 197, 197, 199, 199, 201, 201, 205, 205, 209, 209, 214, 214, 220, 220, 222, 223, 229, 229, 243, 243, 245, 245, 264, 264, 276, 276, 281, 281, 283, 283, 293, 293, 317, 317, 321, 323, 334, 334, 357, 358, 364, 364, 367, 367, 380, 380, 395, 395, 398, 399, 408, 408, 419, 420, 436, 436, 469, 469, 488, 488, 502, 502, 1, 0, 437, 504, 2505, 0, 387, 1, 0, 0, 0, 2, 397, 1, 0, 0, 0, 4, 411, 1, 0, 0, 0, 6, 413, 1, 0, 0, 0, 8, 429, 1, 0, 0, 0, 10, 433, 1, 0, 0, 0, 12, 435, 1, 0, 0, 0, 14, 438, 1, 0, 0, 0, 16, 449, 1, 0, 0, 0, 18, 457, 1, 0, 0, 0, 20, 465, 1, 0, 0, 0, 22, 467, 1, 0, 0, 0, 24, 519, 1, 0, 0, 0, 26, 521, 1, 0, 0, 0, 28, 528, 1, 0, 0, 0, 30, 532, 1, 0, 0, 0, 32, 536, 1, 0, 0, 0, 34, 540, 1, 0, 0, 0, 36, 594, 1, 0, 0, 0, 38, 600, 1, 0, 0, 0, 40, 606, 1, 0, 0, 0, 42, 608, 1, 0, 0, 0, 44, 650, 1, 0, 0, 0, 46, 664, 1, 0, 0, 0, 48, 666, 1, 0, 0, 0, 50, 677, 1, 0, 0, 0, 52, 681, 1, 0, 0, 0, 54, 683, 1, 0, 0, 0, 56, 731, 1, 0, 0, 0, 58, 733, 1, 0, 0, 0, 60, 737, 1, 0, 0, 0, 62, 745, 1, 0, 0, 0, 64, 753, 1, 0, 0, 0, 66, 757, 1, 0, 0, 0, 68, 792, 1, 0, 0, 0, 70, 808, 1, 0, 0, 0, 72, 810, 1, 0, 0, 0, 74, 820, 1, 0, 0, 0, 76, 822, 1, 0, 0, 0, 78, 829, 1, 0, 0, 0, 80, 831, 1, 0, 0, 0, 82, 839, 1, 0, 0, 0, 84, 847, 1, 0, 0, 0, 86, 849, 1, 0, 0, 0, 88, 853, 1, 0, 0, 0, 90, 857, 1, 0, 0, 0, 92, 880, 1, 0, 0, 0, 94, 884, 1, 0, 0, 0, 96, 886, 1, 0, 0, 0, 98, 902, 1, 0, 0, 0, 100, 904, 1, 0, 0, 0, 102, 909, 1, 0, 0, 0, 104, 921, 1, 0, 0, 0, 106, 940, 1, 0, 0, 0, 108, 960, 1, 0, 0, 0, 110, 971, 1, 0, 0, 0, 112, 973, 1, 0, 0, 0, 114, 986, 1, 0, 0, 0, 116, 993, 1, 0, 0, 0, 118, 996, 1, 0, 0, 0, 120, 1005, 1, 0, 0, 0, 122, 1009, 1, 0, 0, 0, 124, 1013, 1, 0, 0, 0, 126, 1016, 1, 0, 0, 0, 128, 1024, 1, 0, 0, 0, 130, 1029, 1, 0, 0, 0, 132, 1046, 1, 0, 0, 0, 134, 1053, 1, 0, 0, 0, 136, 1063, 1, 0, 0, 0, 138, 1072, 1, 0, 0, 0, 140, 1082, 1, 0, 0, 0, 142, 1101, 1, 0, 0, 0, 144, 1103, 1, 0, 0, 0, 146, 1116, 1, 0, 0, 0, 148, 1119, 1, 0, 0, 0, 150, 1128, 1, 0, 0, 0, 152, 1139, 1, 0, 0, 0, 154, 1152, 1, 0, 0, 0, 156, 1187, 1, 0, 0, 0, 158, 1206, 1, 0, 0, 0, 160, 1215, 1, 0, 0, 0, 162, 1224, 1, 0, 0, 0, 164, 1243, 1, 0, 0, 0, 166, 1265, 1, 0, 0, 0, 168, 1267, 1, 0, 0, 0, 170, 1297, 1, 0, 0, 0, 172, 1311, 1, 0, 0, 0, 174, 1313, 1, 0, 0, 0, 176, 1327, 1, 0, 0, 0, 178, 1353, 1, 0, 0, 0, 180, 1386, 1, 0, 0, 0, 182, 1388, 1, 0, 0, 0, 184, 1394, 1, 0, 0, 0, 186, 1396, 1, 0, 0, 0, 188, 1401, 1, 0, 0, 0, 190, 1406, 1, 0, 0, 0, 192, 1418, 1, 0, 0, 0, 194, 1435, 1, 0, 0, 0, 196, 1437, 1, 0, 0, 0, 198, 1439, 1, 0, 0, 0, 200, 1448, 1, 0, 0, 0, 202, 1450, 1, 0, 0, 0, 204, 1453, 1, 0, 0, 0, 206, 1503, 1, 0, 0, 0, 208, 1505, 1, 0, 0, 0, 210, 1508, 1, 0, 0, 0, 212, 1510, 1, 0, 0, 0, 214, 1517, 1, 0, 0, 0, 216, 1519, 1, 0, 0, 0, 218, 1521, 1, 0, 0, 0, 220, 1524, 1, 0, 0, 0, 222, 1533, 1, 0, 0, 0, 224, 1538, 1, 0, 0, 0, 226, 1552, 1, 0, 0, 0, 228, 1580, 1, 0, 0, 0, 230, 1590, 1, 0, 0, 0, 232, 1598, 1, 0, 0, 0, 234, 1603, 1, 0, 0, 0, 236, 1635, 1, 0, 0, 0, 238, 1637, 1, 0, 0, 0, 240, 1646, 1, 0, 0, 0, 242, 1657, 1, 0, 0, 0, 244, 1669, 1, 0, 0, 0, 246, 1695, 1, 0, 0, 0, 248, 1697, 1, 0, 0, 0, 250, 1715, 1, 0, 0, 0, 252, 1717, 1, 0, 0, 0, 254, 1722, 1, 0, 0, 0, 256, 1725, 1, 0, 0, 0, 258, 1739, 1, 0, 0, 0, 260, 1825, 1, 0, 0, 0, 262, 1856, 1, 0, 0, 0, 264, 1862, 1, 0, 0, 0, 266, 1907, 1, 0, 0, 0, 268, 1984, 1, 0, 0, 0, 270, 1996, 1, 0, 0, 0, 272, 2002, 1, 0, 0, 0, 274, 2008, 1, 0, 0, 0, 276, 2012, 1, 0, 0, 0, 278, 2018, 1, 0, 0, 0, 280, 2020, 1, 0, 0, 0, 282, 2022, 1, 0, 0, 0, 284, 2026, 1, 0, 0, 0, 286, 2028, 1, 0, 0, 0, 288, 2033, 1, 0, 0, 0, 290, 2040, 1, 0, 0, 0, 292, 2044, 1, 0, 0, 0, 294, 2049, 1, 0, 0, 0, 296, 2059, 1, 0, 0, 0, 298, 2062, 1, 0, 0, 0, 300, 2068, 1, 0, 0, 0, 302, 2078, 1, 0, 0, 0, 304, 2080, 1, 0, 0, 0, 306, 2084, 1, 0, 0, 0, 308, 2095, 1, 0, 0, 0, 310, 2097, 1, 0, 0, 0, 312, 2099, 1, 0, 0, 0, 314, 2101, 1, 0, 0, 0, 316, 2106, 1, 0, 0, 0, 318, 2108, 1, 0, 0, 0, 320, 2110, 1, 0, 0, 0, 322, 2115, 1, 0, 0, 0, 324, 2132, 1, 0, 0, 0, 326, 2146, 1, 0, 0, 0, 328, 2160, 1, 0, 0, 0, 330, 2174, 1, 0, 0, 0, 332, 2176, 1, 0, 0, 0, 334, 2184, 1, 0, 0, 0, 336, 2187, 1, 0, 0, 0, 338, 2191, 1, 0, 0, 0, 340, 2194, 1, 0, 0, 0, 342, 2205, 1, 0, 0, 0, 344, 2215, 1, 0, 0, 0, 346, 2221, 1, 0, 0, 0, 348, 2229, 1, 0, 0, 0, 350, 2245, 1, 0, 0, 0, 352, 2254, 1, 0, 0, 0, 354, 2256, 1, 0, 0, 0, 356, 2258, 1, 0, 0, 0, 358, 2274, 1, 0, 0, 0, 360, 2276, 1, 0, 0, 0, 362, 2279, 1, 0, 0, 0, 364, 2281, 1, 0, 0, 0, 366, 2283, 1, 0, 0, 0, 368, 2285, 1, 0, 0, 0, 370, 2287, 1, 0, 0, 0, 372, 2289, 1, 0, 0, 0, 374, 2291, 1, 0, 0, 0, 376, 2293, 1, 0, 0, 0, 378, 2295, 1, 0, 0, 0, 380, 2297, 1, 0, 0, 0, 382, 2299, 1, 0, 0, 0, 384, 386, 3, 2, 1, 0, 385, 384, 1, 0, 0, 0, 386, 389, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 390, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 390, 391, 5, 0, 0, 1, 391, 1, 1, 0, 0, 0, 392, 394, 3, 4, 2, 0, 393, 395, 5, 521, 0, 0, 394, 393, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 398, 3, 6, 3, 0, 397, 392, 1, 0, 0, 0, 397, 396, 1, 0, 0, 0, 398, 3, 1, 0, 0, 0, 399, 412, 3, 8, 4, 0, 400, 412, 3, 10, 5, 0, 401, 412, 3, 12, 6, 0, 402, 412, 3, 14, 7, 0, 403, 412, 3, 20, 10, 0, 404, 412, 3, 24, 12, 0, 405, 412, 3, 26, 13, 0, 406, 412, 3, 28, 14, 0, 407, 412, 3, 30, 15, 0, 408, 412, 3, 32, 16, 0, 409, 412, 3, 34, 17, 0, 410, 412, 3, 36, 18, 0, 411, 399, 1, 0, 0, 0, 411, 400, 1, 0, 0, 0, 411, 401, 1, 0, 0, 0, 411, 402, 1, 0, 0, 0, 411, 403, 1, 0, 0, 0, 411, 404, 1, 0, 0, 0, 411, 405, 1, 0, 0, 0, 411, 406, 1, 0, 0, 0, 411, 407, 1, 0, 0, 0, 411, 408, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 410, 1, 0, 0, 0, 412, 5, 1, 0, 0, 0, 413, 414, 5, 521, 0, 0, 414, 7, 1, 0, 0, 0, 415, 430, 3, 40, 20, 0, 416, 430, 3, 102, 51, 0, 417, 430, 3, 104, 52, 0, 418, 430, 3, 106, 53, 0, 419, 430, 3, 100, 50, 0, 420, 430, 3, 112, 56, 0, 421, 430, 3, 126, 63, 0, 422, 430, 3, 128, 64, 0, 423, 430, 3, 130, 65, 0, 424, 430, 3, 132, 66, 0, 425, 430, 3, 134, 67, 0, 426, 430, 3, 136, 68, 0, 427, 430, 3, 138, 69, 0, 428, 430, 3, 140, 70, 0, 429, 415, 1, 0, 0, 0, 429, 416, 1, 0, 0, 0, 429, 417, 1, 0, 0, 0, 429, 418, 1, 0, 0, 0, 429, 419, 1, 0, 0, 0, 429, 420, 1, 0, 0, 0, 429, 421, 1, 0, 0, 0, 429, 422, 1, 0, 0, 0, 429, 423, 1, 0, 0, 0, 429, 424, 1, 0, 0, 0, 429, 425, 1, 0, 0, 0, 429, 426, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 428, 1, 0, 0, 0, 430, 9, 1, 0, 0, 0, 431, 434, 3, 156, 78, 0, 432, 434, 3, 142, 71, 0, 433, 431, 1, 0, 0, 0, 433, 432, 1, 0, 0, 0, 434, 11, 1, 0, 0, 0, 435, 436, 7, 0, 0, 0, 436, 437, 3, 326, 163, 0, 437, 13, 1, 0, 0, 0, 438, 442, 5, 135, 0, 0, 439, 443, 3, 16, 8, 0, 440, 441, 5, 479, 0, 0, 441, 443, 5, 146, 0, 0, 442, 439, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 447, 1, 0, 0, 0, 444, 448, 3, 10, 5, 0, 445, 448, 3, 144, 72, 0, 446, 448, 3, 154, 77, 0, 447, 444, 1, 0, 0, 0, 447, 445, 1, 0, 0, 0, 447, 446, 1, 0, 0, 0, 448, 15, 1, 0, 0, 0, 449, 454, 3, 18, 9, 0, 450, 451, 5, 520, 0, 0, 451, 453, 3, 18, 9, 0, 452, 450, 1, 0, 0, 0, 453, 456, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 17, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 457, 458, 7, 1, 0, 0, 458, 19, 1, 0, 0, 0, 459, 460, 5, 410, 0, 0, 460, 461, 5, 441, 0, 0, 461, 466, 3, 316, 158, 0, 462, 463, 5, 410, 0, 0, 463, 466, 3, 320, 160, 0, 464, 466, 3, 22, 11, 0, 465, 459, 1, 0, 0, 0, 465, 462, 1, 0, 0, 0, 465, 464, 1, 0, 0, 0, 466, 21, 1, 0, 0, 0, 467, 468, 5, 410, 0, 0, 468, 469, 5, 227, 0, 0, 469, 474, 3, 332, 166, 0, 470, 471, 5, 520, 0, 0, 471, 473, 3, 332, 166, 0, 472, 470, 1, 0, 0, 0, 473, 476, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 23, 1, 0, 0, 0, 476, 474, 1, 0, 0, 0, 477, 478, 5, 341, 0, 0, 478, 520, 7, 2, 0, 0, 479, 480, 5, 341, 0, 0, 480, 481, 5, 76, 0, 0, 481, 520, 7, 3, 0, 0, 482, 483, 5, 341, 0, 0, 483, 486, 5, 374, 0, 0, 484, 485, 7, 4, 0, 0, 485, 487, 3, 320, 160, 0, 486, 484, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 489, 1, 0, 0, 0, 488, 490, 3, 262, 131, 0, 489, 488, 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 520, 1, 0, 0, 0, 491, 492, 5, 341, 0, 0, 492, 493, 5, 58, 0, 0, 493, 496, 7, 4, 0, 0, 494, 497, 3, 328, 164, 0, 495, 497, 3, 326, 163, 0, 496, 494, 1, 0, 0, 0, 496, 495, 1, 0, 0, 0, 497, 499, 1, 0, 0, 0, 498, 500, 3, 262, 131, 0, 499, 498, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 520, 1, 0, 0, 0, 501, 502, 5, 341, 0, 0, 502, 507, 5, 72, 0, 0, 503, 504, 5, 373, 0, 0, 504, 508, 3, 326, 163, 0, 505, 506, 5, 501, 0, 0, 506, 508, 3, 328, 164, 0, 507, 503, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 520, 1, 0, 0, 0, 509, 511, 5, 341, 0, 0, 510, 512, 5, 411, 0, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 520, 5, 154, 0, 0, 514, 516, 5, 341, 0, 0, 515, 517, 5, 152, 0, 0, 516, 515, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 5, 227, 0, 0, 519, 477, 1, 0, 0, 0, 519, 479, 1, 0, 0, 0, 519, 482, 1, 0, 0, 0, 519, 491, 1, 0, 0, 0, 519, 501, 1, 0, 0, 0, 519, 509, 1, 0, 0, 0, 519, 514, 1, 0, 0, 0, 520, 25, 1, 0, 0, 0, 521, 522, 5, 468, 0, 0, 522, 523, 5, 226, 0, 0, 523, 526, 3, 332, 166, 0, 524, 525, 5, 433, 0, 0, 525, 527, 3, 340, 170, 0, 526, 524, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 27, 1, 0, 0, 0, 528, 529, 5, 500, 0, 0, 529, 530, 5, 226, 0, 0, 530, 531, 3, 332, 166, 0, 531, 29, 1, 0, 0, 0, 532, 534, 5, 340, 0, 0, 533, 535, 3, 342, 171, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 31, 1, 0, 0, 0, 536, 538, 5, 312, 0, 0, 537, 539, 3, 344, 172, 0, 538, 537, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 33, 1, 0, 0, 0, 540, 541, 7, 5, 0, 0, 541, 542, 5, 463, 0, 0, 542, 543, 3, 110, 55, 0, 543, 35, 1, 0, 0, 0, 544, 545, 5, 437, 0, 0, 545, 546, 5, 463, 0, 0, 546, 547, 5, 433, 0, 0, 547, 550, 3, 38, 19, 0, 548, 549, 5, 17, 0, 0, 549, 551, 3, 332, 166, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 595, 1, 0, 0, 0, 552, 553, 5, 437, 0, 0, 553, 554, 5, 456, 0, 0, 554, 555, 5, 433, 0, 0, 555, 558, 3, 38, 19, 0, 556, 557, 5, 17, 0, 0, 557, 559, 3, 332, 166, 0, 558, 556, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 562, 1, 0, 0, 0, 560, 561, 5, 311, 0, 0, 561, 563, 3, 332, 166, 0, 562, 560, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 595, 1, 0, 0, 0, 564, 565, 5, 437, 0, 0, 565, 566, 7, 6, 0, 0, 566, 567, 5, 433, 0, 0, 567, 568, 3, 38, 19, 0, 568, 569, 5, 311, 0, 0, 569, 570, 3, 332, 166, 0, 570, 595, 1, 0, 0, 0, 571, 572, 5, 437, 0, 0, 572, 573, 5, 486, 0, 0, 573, 595, 3, 38, 19, 0, 574, 575, 5, 437, 0, 0, 575, 576, 5, 453, 0, 0, 576, 577, 5, 456, 0, 0, 577, 578, 5, 433, 0, 0, 578, 579, 3, 38, 19, 0, 579, 580, 5, 311, 0, 0, 580, 581, 3, 332, 166, 0, 581, 582, 5, 466, 0, 0, 582, 583, 3, 332, 166, 0, 583, 595, 1, 0, 0, 0, 584, 585, 5, 437, 0, 0, 585, 586, 5, 443, 0, 0, 586, 587, 5, 456, 0, 0, 587, 588, 5, 433, 0, 0, 588, 589, 3, 38, 19, 0, 589, 590, 5, 146, 0, 0, 590, 591, 3, 332, 166, 0, 591, 592, 5, 17, 0, 0, 592, 593, 3, 332, 166, 0, 593, 595, 1, 0, 0, 0, 594, 544, 1, 0, 0, 0, 594, 552, 1, 0, 0, 0, 594, 564, 1, 0, 0, 0, 594, 571, 1, 0, 0, 0, 594, 574, 1, 0, 0, 0, 594, 584, 1, 0, 0, 0, 595, 37, 1, 0, 0, 0, 596, 598, 5, 534, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 601, 3, 332, 166, 0, 600, 597, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 600, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 39, 1, 0, 0, 0, 604, 607, 3, 42, 21, 0, 605, 607, 3, 44, 22, 0, 606, 604, 1, 0, 0, 0, 606, 605, 1, 0, 0, 0, 607, 41, 1, 0, 0, 0, 608, 610, 5, 72, 0, 0, 609, 611, 5, 497, 0, 0, 610, 609, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 614, 5, 373, 0, 0, 613, 615, 3, 336, 168, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 3, 324, 162, 0, 617, 618, 5, 516, 0, 0, 618, 623, 3, 46, 23, 0, 619, 620, 5, 520, 0, 0, 620, 622, 3, 46, 23, 0, 621, 619, 1, 0, 0, 0, 622, 625, 1, 0, 0, 0, 623, 621, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 628, 1, 0, 0, 0, 625, 623, 1, 0, 0, 0, 626, 627, 5, 520, 0, 0, 627, 629, 3, 80, 40, 0, 628, 626, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 632, 1, 0, 0, 0, 630, 631, 5, 520, 0, 0, 631, 633, 3, 82, 41, 0, 632, 630, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 636, 1, 0, 0, 0, 634, 635, 5, 520, 0, 0, 635, 637, 3, 86, 43, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 641, 5, 517, 0, 0, 639, 640, 5, 59, 0, 0, 640, 642, 5, 537, 0, 0, 641, 639, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 644, 1, 0, 0, 0, 643, 645, 3, 88, 44, 0, 644, 643, 1, 0, 0, 0, 644, 645, 1, 0, 0, 0, 645, 646, 1, 0, 0, 0, 646, 648, 3, 334, 167, 0, 647, 649, 3, 96, 48, 0, 648, 647, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 43, 1, 0, 0, 0, 650, 651, 5, 72, 0, 0, 651, 653, 5, 373, 0, 0, 652, 654, 3, 336, 168, 0, 653, 652, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 656, 3, 324, 162, 0, 656, 659, 3, 334, 167, 0, 657, 658, 5, 17, 0, 0, 658, 660, 3, 156, 78, 0, 659, 657, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 45, 1, 0, 0, 0, 661, 665, 3, 48, 24, 0, 662, 665, 3, 72, 36, 0, 663, 665, 3, 76, 38, 0, 664, 661, 1, 0, 0, 0, 664, 662, 1, 0, 0, 0, 664, 663, 1, 0, 0, 0, 665, 47, 1, 0, 0, 0, 666, 667, 3, 50, 25, 0, 667, 669, 3, 56, 28, 0, 668, 670, 3, 70, 35, 0, 669, 668, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 673, 1, 0, 0, 0, 671, 672, 5, 59, 0, 0, 672, 674, 5, 537, 0, 0, 673, 671, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 49, 1, 0, 0, 0, 675, 678, 3, 332, 166, 0, 676, 678, 3, 256, 128, 0, 677, 675, 1, 0, 0, 0, 677, 676, 1, 0, 0, 0, 678, 51, 1, 0, 0, 0, 679, 682, 3, 332, 166, 0, 680, 682, 4, 26, 0, 0, 681, 679, 1, 0, 0, 0, 681, 680, 1, 0, 0, 0, 682, 53, 1, 0, 0, 0, 683, 684, 5, 516, 0, 0, 684, 689, 3, 52, 26, 0, 685, 686, 5, 520, 0, 0, 686, 688, 3, 52, 26, 0, 687, 685, 1, 0, 0, 0, 688, 691, 1, 0, 0, 0, 689, 687, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 692, 1, 0, 0, 0, 691, 689, 1, 0, 0, 0, 692, 693, 5, 517, 0, 0, 693, 55, 1, 0, 0, 0, 694, 732, 7, 7, 0, 0, 695, 697, 7, 8, 0, 0, 696, 698, 3, 58, 29, 0, 697, 696, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 732, 1, 0, 0, 0, 699, 701, 5, 379, 0, 0, 700, 702, 3, 58, 29, 0, 701, 700, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 709, 1, 0, 0, 0, 703, 705, 7, 9, 0, 0, 704, 706, 5, 206, 0, 0, 705, 704, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 5, 378, 0, 0, 708, 710, 5, 504, 0, 0, 709, 703, 1, 0, 0, 0, 709, 710, 1, 0, 0, 0, 710, 732, 1, 0, 0, 0, 711, 713, 7, 10, 0, 0, 712, 714, 3, 60, 30, 0, 713, 712, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 732, 1, 0, 0, 0, 715, 717, 7, 11, 0, 0, 716, 718, 3, 64, 32, 0, 717, 716, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 732, 1, 0, 0, 0, 719, 721, 5, 469, 0, 0, 720, 722, 3, 66, 33, 0, 721, 720, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 732, 1, 0, 0, 0, 723, 725, 5, 321, 0, 0, 724, 726, 3, 68, 34, 0, 725, 724, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 732, 1, 0, 0, 0, 727, 729, 5, 294, 0, 0, 728, 730, 3, 62, 31, 0, 729, 728, 1, 0, 0, 0, 729, 730, 1, 0, 0, 0, 730, 732, 1, 0, 0, 0, 731, 694, 1, 0, 0, 0, 731, 695, 1, 0, 0, 0, 731, 699, 1, 0, 0, 0, 731, 711, 1, 0, 0, 0, 731, 715, 1, 0, 0, 0, 731, 719, 1, 0, 0, 0, 731, 723, 1, 0, 0, 0, 731, 727, 1, 0, 0, 0, 732, 57, 1, 0, 0, 0, 733, 734, 5, 516, 0, 0, 734, 735, 3, 364, 182, 0, 735, 736, 5, 517, 0, 0, 736, 59, 1, 0, 0, 0, 737, 738, 5, 516, 0, 0, 738, 741, 3, 364, 182, 0, 739, 740, 5, 520, 0, 0, 740, 742, 3, 364, 182, 0, 741, 739, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 5, 517, 0, 0, 744, 61, 1, 0, 0, 0, 745, 746, 5, 516, 0, 0, 746, 749, 3, 362, 181, 0, 747, 748, 5, 520, 0, 0, 748, 750, 3, 362, 181, 0, 749, 747, 1, 0, 0, 0, 749, 750, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 752, 5, 517, 0, 0, 752, 63, 1, 0, 0, 0, 753, 754, 5, 507, 0, 0, 754, 755, 3, 56, 28, 0, 755, 756, 5, 506, 0, 0, 756, 65, 1, 0, 0, 0, 757, 758, 5, 507, 0, 0, 758, 759, 3, 56, 28, 0, 759, 760, 5, 520, 0, 0, 760, 761, 3, 56, 28, 0, 761, 762, 1, 0, 0, 0, 762, 763, 5, 506, 0, 0, 763, 67, 1, 0, 0, 0, 764, 765, 5, 507, 0, 0, 765, 766, 3, 52, 26, 0, 766, 773, 3, 56, 28, 0, 767, 768, 5, 520, 0, 0, 768, 769, 3, 52, 26, 0, 769, 770, 3, 56, 28, 0, 770, 772, 1, 0, 0, 0, 771, 767, 1, 0, 0, 0, 772, 775, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 773, 774, 1, 0, 0, 0, 774, 776, 1, 0, 0, 0, 775, 773, 1, 0, 0, 0, 776, 777, 5, 506, 0, 0, 777, 793, 1, 0, 0, 0, 778, 779, 5, 516, 0, 0, 779, 780, 3, 52, 26, 0, 780, 787, 3, 56, 28, 0, 781, 782, 5, 520, 0, 0, 782, 783, 3, 52, 26, 0, 783, 784, 3, 56, 28, 0, 784, 786, 1, 0, 0, 0, 785, 781, 1, 0, 0, 0, 786, 789, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 787, 788, 1, 0, 0, 0, 788, 790, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 790, 791, 5, 517, 0, 0, 791, 793, 1, 0, 0, 0, 792, 764, 1, 0, 0, 0, 792, 778, 1, 0, 0, 0, 793, 69, 1, 0, 0, 0, 794, 795, 5, 64, 0, 0, 795, 797, 3, 84, 42, 0, 796, 794, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 799, 5, 288, 0, 0, 799, 802, 5, 466, 0, 0, 800, 801, 5, 241, 0, 0, 801, 803, 5, 125, 0, 0, 802, 800, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 809, 1, 0, 0, 0, 804, 806, 5, 241, 0, 0, 805, 804, 1, 0, 0, 0, 805, 806, 1, 0, 0, 0, 806, 807, 1, 0, 0, 0, 807, 809, 5, 244, 0, 0, 808, 796, 1, 0, 0, 0, 808, 805, 1, 0, 0, 0, 809, 71, 1, 0, 0, 0, 810, 811, 3, 50, 25, 0, 811, 812, 3, 56, 28, 0, 812, 815, 5, 218, 0, 0, 813, 814, 5, 151, 0, 0, 814, 816, 3, 74, 37, 0, 815, 813, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 818, 1, 0, 0, 0, 817, 819, 5, 423, 0, 0, 818, 817, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 73, 1, 0, 0, 0, 820, 821, 5, 537, 0, 0, 821, 75, 1, 0, 0, 0, 822, 823, 3, 50, 25, 0, 823, 824, 5, 17, 0, 0, 824, 827, 3, 78, 39, 0, 825, 826, 5, 59, 0, 0, 826, 828, 5, 537, 0, 0, 827, 825, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 77, 1, 0, 0, 0, 829, 830, 3, 256, 128, 0, 830, 79, 1, 0, 0, 0, 831, 832, 5, 424, 0, 0, 832, 833, 5, 146, 0, 0, 833, 834, 3, 52, 26, 0, 834, 835, 5, 17, 0, 0, 835, 836, 3, 256, 128, 0, 836, 81, 1, 0, 0, 0, 837, 838, 5, 64, 0, 0, 838, 840, 3, 84, 42, 0, 839, 837, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 842, 5, 288, 0, 0, 842, 843, 5, 466, 0, 0, 843, 844, 3, 54, 27, 0, 844, 845, 5, 241, 0, 0, 845, 846, 5, 125, 0, 0, 846, 83, 1, 0, 0, 0, 847, 848, 3, 308, 154, 0, 848, 85, 1, 0, 0, 0, 849, 850, 5, 277, 0, 0, 850, 851, 5, 146, 0, 0, 851, 852, 5, 371, 0, 0, 852, 87, 1, 0, 0, 0, 853, 854, 5, 269, 0, 0, 854, 855, 5, 34, 0, 0, 855, 856, 3, 90, 45, 0, 856, 89, 1, 0, 0, 0, 857, 858, 5, 516, 0, 0, 858, 863, 3, 92, 46, 0, 859, 860, 5, 520, 0, 0, 860, 862, 3, 92, 46, 0, 861, 859, 1, 0, 0, 0, 862, 865, 1, 0, 0, 0, 863, 861, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 866, 1, 0, 0, 0, 865, 863, 1, 0, 0, 0, 866, 867, 5, 517, 0, 0, 867, 91, 1, 0, 0, 0, 868, 881, 3, 52, 26, 0, 869, 870, 5, 516, 0, 0, 870, 875, 3, 94, 47, 0, 871, 872, 5, 520, 0, 0, 872, 874, 3, 94, 47, 0, 873, 871, 1, 0, 0, 0, 874, 877, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 1, 0, 0, 0, 877, 875, 1, 0, 0, 0, 878, 879, 5, 517, 0, 0, 879, 881, 1, 0, 0, 0, 880, 868, 1, 0, 0, 0, 880, 869, 1, 0, 0, 0, 881, 93, 1, 0, 0, 0, 882, 885, 3, 284, 142, 0, 883, 885, 3, 358, 179, 0, 884, 882, 1, 0, 0, 0, 884, 883, 1, 0, 0, 0, 885, 95, 1, 0, 0, 0, 886, 887, 5, 202, 0, 0, 887, 896, 3, 326, 163, 0, 888, 892, 5, 516, 0, 0, 889, 891, 3, 98, 49, 0, 890, 889, 1, 0, 0, 0, 891, 894, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 895, 1, 0, 0, 0, 894, 892, 1, 0, 0, 0, 895, 897, 5, 517, 0, 0, 896, 888, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 97, 1, 0, 0, 0, 898, 899, 7, 12, 0, 0, 899, 903, 7, 13, 0, 0, 900, 901, 7, 14, 0, 0, 901, 903, 7, 15, 0, 0, 902, 898, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 903, 99, 1, 0, 0, 0, 904, 905, 5, 72, 0, 0, 905, 906, 5, 441, 0, 0, 906, 907, 3, 318, 159, 0, 907, 908, 3, 334, 167, 0, 908, 101, 1, 0, 0, 0, 909, 910, 5, 72, 0, 0, 910, 912, 5, 447, 0, 0, 911, 913, 3, 336, 168, 0, 912, 911, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 917, 3, 322, 161, 0, 915, 916, 5, 59, 0, 0, 916, 918, 5, 537, 0, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 920, 3, 334, 167, 0, 920, 103, 1, 0, 0, 0, 921, 923, 5, 72, 0, 0, 922, 924, 5, 497, 0, 0, 923, 922, 1, 0, 0, 0, 923, 924, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 927, 5, 501, 0, 0, 926, 928, 3, 336, 168, 0, 927, 926, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 929, 1, 0, 0, 0, 929, 931, 3, 330, 165, 0, 930, 932, 3, 54, 27, 0, 931, 930, 1, 0, 0, 0, 931, 932, 1, 0, 0, 0, 932, 935, 1, 0, 0, 0, 933, 934, 5, 59, 0, 0, 934, 936, 5, 537, 0, 0, 935, 933, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 937, 1, 0, 0, 0, 937, 938, 5, 17, 0, 0, 938, 939, 3, 156, 78, 0, 939, 105, 1, 0, 0, 0, 940, 944, 5, 72, 0, 0, 941, 945, 5, 497, 0, 0, 942, 943, 5, 497, 0, 0, 943, 945, 5, 370, 0, 0, 944, 941, 1, 0, 0, 0, 944, 942, 1, 0, 0, 0, 944, 945, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 948, 5, 153, 0, 0, 947, 949, 3, 336, 168, 0, 948, 947, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 951, 3, 270, 135, 0, 951, 952, 5, 17, 0, 0, 952, 955, 3, 308, 154, 0, 953, 954, 5, 195, 0, 0, 954, 956, 7, 16, 0, 0, 955, 953, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 958, 1, 0, 0, 0, 957, 959, 3, 108, 54, 0, 958, 957, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 107, 1, 0, 0, 0, 960, 961, 5, 412, 0, 0, 961, 962, 5, 463, 0, 0, 962, 968, 3, 110, 55, 0, 963, 964, 5, 520, 0, 0, 964, 965, 5, 463, 0, 0, 965, 967, 3, 110, 55, 0, 966, 963, 1, 0, 0, 0, 967, 970, 1, 0, 0, 0, 968, 966, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 109, 1, 0, 0, 0, 970, 968, 1, 0, 0, 0, 971, 972, 5, 537, 0, 0, 972, 111, 1, 0, 0, 0, 973, 974, 5, 8, 0, 0, 974, 976, 5, 373, 0, 0, 975, 977, 3, 338, 169, 0, 976, 975, 1, 0, 0, 0, 976, 977, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 984, 3, 326, 163, 0, 979, 985, 3, 114, 57, 0, 980, 985, 3, 116, 58, 0, 981, 985, 3, 118, 59, 0, 982, 985, 3, 120, 60, 0, 983, 985, 3, 122, 61, 0, 984, 979, 1, 0, 0, 0, 984, 980, 1, 0, 0, 0, 984, 981, 1, 0, 0, 0, 984, 982, 1, 0, 0, 0, 984, 983, 1, 0, 0, 0, 985, 113, 1, 0, 0, 0, 986, 988, 5, 311, 0, 0, 987, 989, 3, 332, 166, 0, 988, 987, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 990, 1, 0, 0, 0, 990, 991, 5, 388, 0, 0, 991, 992, 3, 332, 166, 0, 992, 115, 1, 0, 0, 0, 993, 994, 5, 340, 0, 0, 994, 995, 3, 340, 170, 0, 995, 117, 1, 0, 0, 0, 996, 997, 5, 437, 0, 0, 997, 998, 5, 64, 0, 0, 998, 999, 3, 84, 42, 0, 999, 1000, 5, 288, 0, 0, 1000, 1001, 5, 466, 0, 0, 1001, 1003, 3, 54, 27, 0, 1002, 1004, 3, 124, 62, 0, 1003, 1002, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 119, 1, 0, 0, 0, 1005, 1006, 5, 116, 0, 0, 1006, 1007, 5, 64, 0, 0, 1007, 1008, 3, 84, 42, 0, 1008, 121, 1, 0, 0, 0, 1009, 1010, 5, 437, 0, 0, 1010, 1011, 5, 403, 0, 0, 1011, 1012, 3, 54, 27, 0, 1012, 123, 1, 0, 0, 0, 1013, 1014, 5, 241, 0, 0, 1014, 1015, 5, 125, 0, 0, 1015, 125, 1, 0, 0, 0, 1016, 1017, 5, 8, 0, 0, 1017, 1018, 5, 501, 0, 0, 1018, 1022, 3, 328, 164, 0, 1019, 1023, 3, 114, 57, 0, 1020, 1021, 5, 17, 0, 0, 1021, 1023, 3, 156, 78, 0, 1022, 1019, 1, 0, 0, 0, 1022, 1020, 1, 0, 0, 0, 1023, 127, 1, 0, 0, 0, 1024, 1025, 5, 8, 0, 0, 1025, 1026, 5, 447, 0, 0, 1026, 1027, 3, 320, 160, 0, 1027, 1028, 3, 116, 58, 0, 1028, 129, 1, 0, 0, 0, 1029, 1033, 5, 8, 0, 0, 1030, 1034, 5, 497, 0, 0, 1031, 1032, 5, 497, 0, 0, 1032, 1034, 5, 370, 0, 0, 1033, 1030, 1, 0, 0, 0, 1033, 1031, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1037, 5, 153, 0, 0, 1036, 1038, 3, 338, 169, 0, 1037, 1036, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1040, 3, 272, 136, 0, 1040, 1041, 5, 17, 0, 0, 1041, 1044, 3, 308, 154, 0, 1042, 1043, 5, 195, 0, 0, 1043, 1045, 7, 16, 0, 0, 1044, 1042, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 131, 1, 0, 0, 0, 1046, 1047, 5, 116, 0, 0, 1047, 1049, 5, 441, 0, 0, 1048, 1050, 3, 338, 169, 0, 1049, 1048, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 1052, 3, 316, 158, 0, 1052, 133, 1, 0, 0, 0, 1053, 1055, 5, 116, 0, 0, 1054, 1056, 5, 497, 0, 0, 1055, 1054, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1059, 5, 373, 0, 0, 1058, 1060, 3, 338, 169, 0, 1059, 1058, 1, 0, 0, 0, 1059, 1060, 1, 0, 0, 0, 1060, 1061, 1, 0, 0, 0, 1061, 1062, 3, 326, 163, 0, 1062, 135, 1, 0, 0, 0, 1063, 1064, 5, 116, 0, 0, 1064, 1066, 5, 447, 0, 0, 1065, 1067, 3, 338, 169, 0, 1066, 1065, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1068, 1, 0, 0, 0, 1068, 1070, 3, 320, 160, 0, 1069, 1071, 7, 17, 0, 0, 1070, 1069, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 137, 1, 0, 0, 0, 1072, 1074, 5, 116, 0, 0, 1073, 1075, 5, 497, 0, 0, 1074, 1073, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1078, 5, 501, 0, 0, 1077, 1079, 3, 338, 169, 0, 1078, 1077, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1080, 1, 0, 0, 0, 1080, 1081, 3, 328, 164, 0, 1081, 139, 1, 0, 0, 0, 1082, 1086, 5, 116, 0, 0, 1083, 1087, 5, 497, 0, 0, 1084, 1085, 5, 497, 0, 0, 1085, 1087, 5, 370, 0, 0, 1086, 1083, 1, 0, 0, 0, 1086, 1084, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1088, 1, 0, 0, 0, 1088, 1090, 5, 153, 0, 0, 1089, 1091, 3, 338, 169, 0, 1090, 1089, 1, 0, 0, 0, 1090, 1091, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1093, 3, 272, 136, 0, 1093, 141, 1, 0, 0, 0, 1094, 1096, 5, 132, 0, 0, 1095, 1094, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1102, 3, 144, 72, 0, 1098, 1102, 3, 152, 76, 0, 1099, 1100, 5, 132, 0, 0, 1100, 1102, 3, 154, 77, 0, 1101, 1095, 1, 0, 0, 0, 1101, 1098, 1, 0, 0, 0, 1101, 1099, 1, 0, 0, 0, 1102, 143, 1, 0, 0, 0, 1103, 1104, 5, 177, 0, 0, 1104, 1105, 7, 18, 0, 0, 1105, 1114, 3, 326, 163, 0, 1106, 1108, 3, 146, 73, 0, 1107, 1106, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1110, 1, 0, 0, 0, 1109, 1111, 3, 54, 27, 0, 1110, 1109, 1, 0, 0, 0, 1110, 1111, 1, 0, 0, 0, 1111, 1112, 1, 0, 0, 0, 1112, 1115, 3, 156, 78, 0, 1113, 1115, 3, 148, 74, 0, 1114, 1107, 1, 0, 0, 0, 1114, 1113, 1, 0, 0, 0, 1115, 145, 1, 0, 0, 0, 1116, 1117, 5, 268, 0, 0, 1117, 1118, 3, 340, 170, 0, 1118, 147, 1, 0, 0, 0, 1119, 1120, 5, 414, 0, 0, 1120, 1125, 3, 150, 75, 0, 1121, 1122, 5, 520, 0, 0, 1122, 1124, 3, 150, 75, 0, 1123, 1121, 1, 0, 0, 0, 1124, 1127, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1126, 149, 1, 0, 0, 0, 1127, 1125, 1, 0, 0, 0, 1128, 1129, 5, 516, 0, 0, 1129, 1134, 3, 358, 179, 0, 1130, 1131, 5, 520, 0, 0, 1131, 1133, 3, 358, 179, 0, 1132, 1130, 1, 0, 0, 0, 1133, 1136, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1137, 1, 0, 0, 0, 1136, 1134, 1, 0, 0, 0, 1137, 1138, 5, 517, 0, 0, 1138, 151, 1, 0, 0, 0, 1139, 1140, 5, 24, 0, 0, 1140, 1141, 5, 354, 0, 0, 1141, 1142, 5, 340, 0, 0, 1142, 1146, 5, 521, 0, 0, 1143, 1144, 3, 144, 72, 0, 1144, 1145, 5, 521, 0, 0, 1145, 1147, 1, 0, 0, 0, 1146, 1143, 1, 0, 0, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1146, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1150, 1, 0, 0, 0, 1150, 1151, 5, 122, 0, 0, 1151, 153, 1, 0, 0, 0, 1152, 1153, 5, 354, 0, 0, 1153, 1154, 5, 340, 0, 0, 1154, 1158, 5, 24, 0, 0, 1155, 1156, 3, 144, 72, 0, 1156, 1157, 5, 521, 0, 0, 1157, 1159, 1, 0, 0, 0, 1158, 1155, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1158, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1163, 5, 122, 0, 0, 1163, 155, 1, 0, 0, 0, 1164, 1165, 6, 78, -1, 0, 1165, 1188, 3, 158, 79, 0, 1166, 1167, 3, 160, 80, 0, 1167, 1168, 3, 156, 78, 5, 1168, 1188, 1, 0, 0, 0, 1169, 1170, 5, 516, 0, 0, 1170, 1171, 3, 156, 78, 0, 1171, 1172, 5, 517, 0, 0, 1172, 1188, 1, 0, 0, 0, 1173, 1175, 3, 168, 84, 0, 1174, 1176, 3, 228, 114, 0, 1175, 1174, 1, 0, 0, 0, 1175, 1176, 1, 0, 0, 0, 1176, 1178, 1, 0, 0, 0, 1177, 1179, 3, 232, 116, 0, 1178, 1177, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1188, 1, 0, 0, 0, 1180, 1182, 3, 166, 83, 0, 1181, 1183, 3, 228, 114, 0, 1182, 1181, 1, 0, 0, 0, 1182, 1183, 1, 0, 0, 0, 1183, 1185, 1, 0, 0, 0, 1184, 1186, 3, 232, 116, 0, 1185, 1184, 1, 0, 0, 0, 1185, 1186, 1, 0, 0, 0, 1186, 1188, 1, 0, 0, 0, 1187, 1164, 1, 0, 0, 0, 1187, 1166, 1, 0, 0, 0, 1187, 1169, 1, 0, 0, 0, 1187, 1173, 1, 0, 0, 0, 1187, 1180, 1, 0, 0, 0, 1188, 1203, 1, 0, 0, 0, 1189, 1190, 10, 3, 0, 0, 1190, 1192, 7, 19, 0, 0, 1191, 1193, 5, 5, 0, 0, 1192, 1191, 1, 0, 0, 0, 1192, 1193, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1196, 3, 156, 78, 0, 1195, 1197, 3, 228, 114, 0, 1196, 1195, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, 1199, 1, 0, 0, 0, 1198, 1200, 3, 232, 116, 0, 1199, 1198, 1, 0, 0, 0, 1199, 1200, 1, 0, 0, 0, 1200, 1202, 1, 0, 0, 0, 1201, 1189, 1, 0, 0, 0, 1202, 1205, 1, 0, 0, 0, 1203, 1201, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 157, 1, 0, 0, 0, 1205, 1203, 1, 0, 0, 0, 1206, 1207, 5, 414, 0, 0, 1207, 1212, 3, 256, 128, 0, 1208, 1209, 5, 520, 0, 0, 1209, 1211, 3, 256, 128, 0, 1210, 1208, 1, 0, 0, 0, 1211, 1214, 1, 0, 0, 0, 1212, 1210, 1, 0, 0, 0, 1212, 1213, 1, 0, 0, 0, 1213, 159, 1, 0, 0, 0, 1214, 1212, 1, 0, 0, 0, 1215, 1216, 5, 433, 0, 0, 1216, 1221, 3, 162, 81, 0, 1217, 1218, 5, 520, 0, 0, 1218, 1220, 3, 162, 81, 0, 1219, 1217, 1, 0, 0, 0, 1220, 1223, 1, 0, 0, 0, 1221, 1219, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 161, 1, 0, 0, 0, 1223, 1221, 1, 0, 0, 0, 1224, 1236, 3, 164, 82, 0, 1225, 1226, 5, 516, 0, 0, 1226, 1231, 3, 52, 26, 0, 1227, 1228, 5, 520, 0, 0, 1228, 1230, 3, 52, 26, 0, 1229, 1227, 1, 0, 0, 0, 1230, 1233, 1, 0, 0, 0, 1231, 1229, 1, 0, 0, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1234, 1, 0, 0, 0, 1233, 1231, 1, 0, 0, 0, 1234, 1235, 5, 517, 0, 0, 1235, 1237, 1, 0, 0, 0, 1236, 1225, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1238, 1, 0, 0, 0, 1238, 1239, 5, 17, 0, 0, 1239, 1240, 5, 516, 0, 0, 1240, 1241, 3, 156, 78, 0, 1241, 1242, 5, 517, 0, 0, 1242, 163, 1, 0, 0, 0, 1243, 1244, 3, 308, 154, 0, 1244, 165, 1, 0, 0, 0, 1245, 1247, 3, 168, 84, 0, 1246, 1248, 3, 174, 87, 0, 1247, 1246, 1, 0, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 1250, 1, 0, 0, 0, 1249, 1251, 3, 202, 101, 0, 1250, 1249, 1, 0, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1253, 1, 0, 0, 0, 1252, 1254, 3, 204, 102, 0, 1253, 1252, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1256, 1, 0, 0, 0, 1255, 1257, 3, 218, 109, 0, 1256, 1255, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1259, 1, 0, 0, 0, 1258, 1260, 3, 220, 110, 0, 1259, 1258, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1266, 1, 0, 0, 0, 1261, 1262, 3, 168, 84, 0, 1262, 1263, 3, 174, 87, 0, 1263, 1264, 3, 226, 113, 0, 1264, 1266, 1, 0, 0, 0, 1265, 1245, 1, 0, 0, 0, 1265, 1261, 1, 0, 0, 0, 1266, 167, 1, 0, 0, 0, 1267, 1269, 5, 336, 0, 0, 1268, 1270, 3, 368, 184, 0, 1269, 1268, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 1280, 1, 0, 0, 0, 1271, 1281, 5, 527, 0, 0, 1272, 1277, 3, 170, 85, 0, 1273, 1274, 5, 520, 0, 0, 1274, 1276, 3, 170, 85, 0, 1275, 1273, 1, 0, 0, 0, 1276, 1279, 1, 0, 0, 0, 1277, 1275, 1, 0, 0, 0, 1277, 1278, 1, 0, 0, 0, 1278, 1281, 1, 0, 0, 0, 1279, 1277, 1, 0, 0, 0, 1280, 1271, 1, 0, 0, 0, 1280, 1272, 1, 0, 0, 0, 1281, 169, 1, 0, 0, 0, 1282, 1298, 3, 172, 86, 0, 1283, 1288, 3, 256, 128, 0, 1284, 1286, 5, 17, 0, 0, 1285, 1284, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1287, 1, 0, 0, 0, 1287, 1289, 3, 52, 26, 0, 1288, 1285, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1298, 1, 0, 0, 0, 1290, 1295, 3, 52, 26, 0, 1291, 1293, 5, 17, 0, 0, 1292, 1291, 1, 0, 0, 0, 1292, 1293, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1296, 3, 256, 128, 0, 1295, 1292, 1, 0, 0, 0, 1295, 1296, 1, 0, 0, 0, 1296, 1298, 1, 0, 0, 0, 1297, 1282, 1, 0, 0, 0, 1297, 1283, 1, 0, 0, 0, 1297, 1290, 1, 0, 0, 0, 1298, 171, 1, 0, 0, 0, 1299, 1300, 3, 268, 134, 0, 1300, 1301, 5, 262, 0, 0, 1301, 1302, 3, 224, 112, 0, 1302, 1303, 5, 17, 0, 0, 1303, 1304, 3, 308, 154, 0, 1304, 1312, 1, 0, 0, 0, 1305, 1306, 3, 268, 134, 0, 1306, 1307, 5, 262, 0, 0, 1307, 1308, 3, 300, 150, 0, 1308, 1309, 5, 17, 0, 0, 1309, 1310, 3, 308, 154, 0, 1310, 1312, 1, 0, 0, 0, 1311, 1299, 1, 0, 0, 0, 1311, 1305, 1, 0, 0, 0, 1312, 173, 1, 0, 0, 0, 1313, 1314, 5, 151, 0, 0, 1314, 1315, 3, 176, 88, 0, 1315, 175, 1, 0, 0, 0, 1316, 1317, 6, 88, -1, 0, 1317, 1322, 3, 178, 89, 0, 1318, 1319, 5, 520, 0, 0, 1319, 1321, 3, 178, 89, 0, 1320, 1318, 1, 0, 0, 0, 1321, 1324, 1, 0, 0, 0, 1322, 1320, 1, 0, 0, 0, 1322, 1323, 1, 0, 0, 0, 1323, 1328, 1, 0, 0, 0, 1324, 1322, 1, 0, 0, 0, 1325, 1328, 3, 186, 93, 0, 1326, 1328, 3, 188, 94, 0, 1327, 1316, 1, 0, 0, 0, 1327, 1325, 1, 0, 0, 0, 1327, 1326, 1, 0, 0, 0, 1328, 1350, 1, 0, 0, 0, 1329, 1330, 10, 3, 0, 0, 1330, 1331, 5, 73, 0, 0, 1331, 1332, 5, 185, 0, 0, 1332, 1349, 3, 176, 88, 4, 1333, 1335, 10, 4, 0, 0, 1334, 1336, 5, 233, 0, 0, 1335, 1334, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, 1338, 1, 0, 0, 0, 1337, 1339, 7, 20, 0, 0, 1338, 1337, 1, 0, 0, 0, 1338, 1339, 1, 0, 0, 0, 1339, 1341, 1, 0, 0, 0, 1340, 1342, 5, 261, 0, 0, 1341, 1340, 1, 0, 0, 0, 1341, 1342, 1, 0, 0, 0, 1342, 1343, 1, 0, 0, 0, 1343, 1344, 5, 185, 0, 0, 1344, 1346, 3, 176, 88, 0, 1345, 1347, 3, 200, 100, 0, 1346, 1345, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 1349, 1, 0, 0, 0, 1348, 1329, 1, 0, 0, 0, 1348, 1333, 1, 0, 0, 0, 1349, 1352, 1, 0, 0, 0, 1350, 1348, 1, 0, 0, 0, 1350, 1351, 1, 0, 0, 0, 1351, 177, 1, 0, 0, 0, 1352, 1350, 1, 0, 0, 0, 1353, 1355, 3, 180, 90, 0, 1354, 1356, 3, 298, 149, 0, 1355, 1354, 1, 0, 0, 0, 1355, 1356, 1, 0, 0, 0, 1356, 179, 1, 0, 0, 0, 1357, 1359, 5, 373, 0, 0, 1358, 1357, 1, 0, 0, 0, 1358, 1359, 1, 0, 0, 0, 1359, 1360, 1, 0, 0, 0, 1360, 1362, 3, 326, 163, 0, 1361, 1363, 3, 182, 91, 0, 1362, 1361, 1, 0, 0, 0, 1362, 1363, 1, 0, 0, 0, 1363, 1387, 1, 0, 0, 0, 1364, 1366, 3, 328, 164, 0, 1365, 1367, 3, 182, 91, 0, 1366, 1365, 1, 0, 0, 0, 1366, 1367, 1, 0, 0, 0, 1367, 1387, 1, 0, 0, 0, 1368, 1369, 5, 198, 0, 0, 1369, 1370, 5, 373, 0, 0, 1370, 1371, 5, 516, 0, 0, 1371, 1372, 3, 266, 133, 0, 1372, 1373, 5, 517, 0, 0, 1373, 1387, 1, 0, 0, 0, 1374, 1376, 5, 198, 0, 0, 1375, 1374, 1, 0, 0, 0, 1375, 1376, 1, 0, 0, 0, 1376, 1377, 1, 0, 0, 0, 1377, 1378, 5, 516, 0, 0, 1378, 1379, 3, 156, 78, 0, 1379, 1380, 5, 517, 0, 0, 1380, 1387, 1, 0, 0, 0, 1381, 1382, 5, 405, 0, 0, 1382, 1383, 5, 516, 0, 0, 1383, 1384, 3, 256, 128, 0, 1384, 1385, 5, 517, 0, 0, 1385, 1387, 1, 0, 0, 0, 1386, 1358, 1, 0, 0, 0, 1386, 1364, 1, 0, 0, 0, 1386, 1368, 1, 0, 0, 0, 1386, 1375, 1, 0, 0, 0, 1386, 1381, 1, 0, 0, 0, 1387, 181, 1, 0, 0, 0, 1388, 1389, 5, 146, 0, 0, 1389, 1390, 5, 371, 0, 0, 1390, 1391, 5, 17, 0, 0, 1391, 1392, 5, 249, 0, 0, 1392, 1393, 3, 184, 92, 0, 1393, 183, 1, 0, 0, 0, 1394, 1395, 3, 256, 128, 0, 1395, 185, 1, 0, 0, 0, 1396, 1397, 5, 516, 0, 0, 1397, 1398, 3, 148, 74, 0, 1398, 1399, 5, 517, 0, 0, 1399, 1400, 3, 298, 149, 0, 1400, 187, 1, 0, 0, 0, 1401, 1402, 5, 373, 0, 0, 1402, 1403, 5, 516, 0, 0, 1403, 1404, 3, 190, 95, 0, 1404, 1405, 5, 517, 0, 0, 1405, 189, 1, 0, 0, 0, 1406, 1407, 3, 192, 96, 0, 1407, 1408, 5, 516, 0, 0, 1408, 1413, 3, 194, 97, 0, 1409, 1410, 5, 520, 0, 0, 1410, 1412, 3, 194, 97, 0, 1411, 1409, 1, 0, 0, 0, 1412, 1415, 1, 0, 0, 0, 1413, 1411, 1, 0, 0, 0, 1413, 1414, 1, 0, 0, 0, 1414, 1416, 1, 0, 0, 0, 1415, 1413, 1, 0, 0, 0, 1416, 1417, 5, 517, 0, 0, 1417, 191, 1, 0, 0, 0, 1418, 1419, 7, 21, 0, 0, 1419, 193, 1, 0, 0, 0, 1420, 1421, 5, 373, 0, 0, 1421, 1436, 3, 216, 108, 0, 1422, 1436, 3, 198, 99, 0, 1423, 1436, 3, 286, 143, 0, 1424, 1425, 5, 446, 0, 0, 1425, 1426, 5, 536, 0, 0, 1426, 1427, 5, 373, 0, 0, 1427, 1436, 3, 216, 108, 0, 1428, 1429, 5, 498, 0, 0, 1429, 1430, 5, 536, 0, 0, 1430, 1436, 3, 198, 99, 0, 1431, 1432, 3, 196, 98, 0, 1432, 1433, 5, 536, 0, 0, 1433, 1434, 3, 286, 143, 0, 1434, 1436, 1, 0, 0, 0, 1435, 1420, 1, 0, 0, 0, 1435, 1422, 1, 0, 0, 0, 1435, 1423, 1, 0, 0, 0, 1435, 1424, 1, 0, 0, 0, 1435, 1428, 1, 0, 0, 0, 1435, 1431, 1, 0, 0, 0, 1436, 195, 1, 0, 0, 0, 1437, 1438, 7, 22, 0, 0, 1438, 197, 1, 0, 0, 0, 1439, 1440, 5, 451, 0, 0, 1440, 1441, 5, 516, 0, 0, 1441, 1442, 3, 52, 26, 0, 1442, 1443, 5, 517, 0, 0, 1443, 199, 1, 0, 0, 0, 1444, 1445, 5, 253, 0, 0, 1445, 1449, 3, 258, 129, 0, 1446, 1447, 5, 412, 0, 0, 1447, 1449, 3, 54, 27, 0, 1448, 1444, 1, 0, 0, 0, 1448, 1446, 1, 0, 0, 0, 1449, 201, 1, 0, 0, 0, 1450, 1451, 5, 430, 0, 0, 1451, 1452, 3, 258, 129, 0, 1452, 203, 1, 0, 0, 0, 1453, 1454, 5, 159, 0, 0, 1454, 1455, 5, 34, 0, 0, 1455, 1460, 3, 206, 103, 0, 1456, 1457, 5, 520, 0, 0, 1457, 1459, 3, 206, 103, 0, 1458, 1456, 1, 0, 0, 0, 1459, 1462, 1, 0, 0, 0, 1460, 1458, 1, 0, 0, 0, 1460, 1461, 1, 0, 0, 0, 1461, 205, 1, 0, 0, 0, 1462, 1460, 1, 0, 0, 0, 1463, 1504, 3, 52, 26, 0, 1464, 1504, 3, 212, 106, 0, 1465, 1466, 5, 516, 0, 0, 1466, 1504, 5, 517, 0, 0, 1467, 1468, 5, 516, 0, 0, 1468, 1473, 3, 256, 128, 0, 1469, 1470, 5, 520, 0, 0, 1470, 1472, 3, 256, 128, 0, 1471, 1469, 1, 0, 0, 0, 1472, 1475, 1, 0, 0, 0, 1473, 1471, 1, 0, 0, 0, 1473, 1474, 1, 0, 0, 0, 1474, 1476, 1, 0, 0, 0, 1475, 1473, 1, 0, 0, 0, 1476, 1477, 5, 517, 0, 0, 1477, 1504, 1, 0, 0, 0, 1478, 1479, 3, 210, 105, 0, 1479, 1480, 5, 516, 0, 0, 1480, 1485, 3, 256, 128, 0, 1481, 1482, 5, 520, 0, 0, 1482, 1484, 3, 256, 128, 0, 1483, 1481, 1, 0, 0, 0, 1484, 1487, 1, 0, 0, 0, 1485, 1483, 1, 0, 0, 0, 1485, 1486, 1, 0, 0, 0, 1486, 1488, 1, 0, 0, 0, 1487, 1485, 1, 0, 0, 0, 1488, 1489, 5, 517, 0, 0, 1489, 1504, 1, 0, 0, 0, 1490, 1491, 3, 208, 104, 0, 1491, 1492, 5, 516, 0, 0, 1492, 1497, 3, 206, 103, 0, 1493, 1494, 5, 520, 0, 0, 1494, 1496, 3, 206, 103, 0, 1495, 1493, 1, 0, 0, 0, 1496, 1499, 1, 0, 0, 0, 1497, 1495, 1, 0, 0, 0, 1497, 1498, 1, 0, 0, 0, 1498, 1500, 1, 0, 0, 0, 1499, 1497, 1, 0, 0, 0, 1500, 1501, 5, 517, 0, 0, 1501, 1504, 1, 0, 0, 0, 1502, 1504, 3, 256, 128, 0, 1503, 1463, 1, 0, 0, 0, 1503, 1464, 1, 0, 0, 0, 1503, 1465, 1, 0, 0, 0, 1503, 1467, 1, 0, 0, 0, 1503, 1478, 1, 0, 0, 0, 1503, 1490, 1, 0, 0, 0, 1503, 1502, 1, 0, 0, 0, 1504, 207, 1, 0, 0, 0, 1505, 1506, 5, 160, 0, 0, 1506, 1507, 5, 493, 0, 0, 1507, 209, 1, 0, 0, 0, 1508, 1509, 7, 23, 0, 0, 1509, 211, 1, 0, 0, 0, 1510, 1511, 3, 214, 107, 0, 1511, 1512, 5, 516, 0, 0, 1512, 1513, 3, 216, 108, 0, 1513, 1514, 5, 520, 0, 0, 1514, 1515, 3, 286, 143, 0, 1515, 1516, 5, 517, 0, 0, 1516, 213, 1, 0, 0, 0, 1517, 1518, 7, 24, 0, 0, 1518, 215, 1, 0, 0, 0, 1519, 1520, 3, 332, 166, 0, 1520, 217, 1, 0, 0, 0, 1521, 1522, 5, 163, 0, 0, 1522, 1523, 3, 258, 129, 0, 1523, 219, 1, 0, 0, 0, 1524, 1525, 5, 432, 0, 0, 1525, 1530, 3, 222, 111, 0, 1526, 1527, 5, 520, 0, 0, 1527, 1529, 3, 222, 111, 0, 1528, 1526, 1, 0, 0, 0, 1529, 1532, 1, 0, 0, 0, 1530, 1528, 1, 0, 0, 0, 1530, 1531, 1, 0, 0, 0, 1531, 221, 1, 0, 0, 0, 1532, 1530, 1, 0, 0, 0, 1533, 1534, 3, 300, 150, 0, 1534, 1535, 5, 17, 0, 0, 1535, 1536, 3, 224, 112, 0, 1536, 223, 1, 0, 0, 0, 1537, 1539, 3, 300, 150, 0, 1538, 1537, 1, 0, 0, 0, 1538, 1539, 1, 0, 0, 0, 1539, 1540, 1, 0, 0, 0, 1540, 1542, 5, 516, 0, 0, 1541, 1543, 3, 234, 117, 0, 1542, 1541, 1, 0, 0, 0, 1542, 1543, 1, 0, 0, 0, 1543, 1545, 1, 0, 0, 0, 1544, 1546, 3, 228, 114, 0, 1545, 1544, 1, 0, 0, 0, 1545, 1546, 1, 0, 0, 0, 1546, 1548, 1, 0, 0, 0, 1547, 1549, 3, 250, 125, 0, 1548, 1547, 1, 0, 0, 0, 1548, 1549, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 1551, 5, 517, 0, 0, 1551, 225, 1, 0, 0, 0, 1552, 1553, 5, 213, 0, 0, 1553, 1555, 5, 516, 0, 0, 1554, 1556, 3, 234, 117, 0, 1555, 1554, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1558, 1, 0, 0, 0, 1557, 1559, 3, 228, 114, 0, 1558, 1557, 1, 0, 0, 0, 1558, 1559, 1, 0, 0, 0, 1559, 1561, 1, 0, 0, 0, 1560, 1562, 3, 238, 119, 0, 1561, 1560, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1564, 1, 0, 0, 0, 1563, 1565, 3, 244, 122, 0, 1564, 1563, 1, 0, 0, 0, 1564, 1565, 1, 0, 0, 0, 1565, 1567, 1, 0, 0, 0, 1566, 1568, 3, 246, 123, 0, 1567, 1566, 1, 0, 0, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1570, 1, 0, 0, 0, 1569, 1571, 3, 240, 120, 0, 1570, 1569, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1573, 3, 248, 124, 0, 1573, 1578, 5, 517, 0, 0, 1574, 1576, 5, 17, 0, 0, 1575, 1574, 1, 0, 0, 0, 1575, 1576, 1, 0, 0, 0, 1576, 1577, 1, 0, 0, 0, 1577, 1579, 3, 308, 154, 0, 1578, 1575, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 227, 1, 0, 0, 0, 1580, 1581, 5, 258, 0, 0, 1581, 1582, 5, 34, 0, 0, 1582, 1587, 3, 230, 115, 0, 1583, 1584, 5, 520, 0, 0, 1584, 1586, 3, 230, 115, 0, 1585, 1583, 1, 0, 0, 0, 1586, 1589, 1, 0, 0, 0, 1587, 1585, 1, 0, 0, 0, 1587, 1588, 1, 0, 0, 0, 1588, 229, 1, 0, 0, 0, 1589, 1587, 1, 0, 0, 0, 1590, 1592, 3, 52, 26, 0, 1591, 1593, 7, 25, 0, 0, 1592, 1591, 1, 0, 0, 0, 1592, 1593, 1, 0, 0, 0, 1593, 1596, 1, 0, 0, 0, 1594, 1595, 5, 476, 0, 0, 1595, 1597, 7, 26, 0, 0, 1596, 1594, 1, 0, 0, 0, 1596, 1597, 1, 0, 0, 0, 1597, 231, 1, 0, 0, 0, 1598, 1601, 5, 204, 0, 0, 1599, 1602, 5, 5, 0, 0, 1600, 1602, 3, 256, 128, 0, 1601, 1599, 1, 0, 0, 0, 1601, 1600, 1, 0, 0, 0, 1602, 233, 1, 0, 0, 0, 1603, 1604, 5, 268, 0, 0, 1604, 1607, 5, 34, 0, 0, 1605, 1608, 3, 52, 26, 0, 1606, 1608, 3, 268, 134, 0, 1607, 1605, 1, 0, 0, 0, 1607, 1606, 1, 0, 0, 0, 1608, 1616, 1, 0, 0, 0, 1609, 1612, 5, 520, 0, 0, 1610, 1613, 3, 52, 26, 0, 1611, 1613, 3, 268, 134, 0, 1612, 1610, 1, 0, 0, 0, 1612, 1611, 1, 0, 0, 0, 1613, 1615, 1, 0, 0, 0, 1614, 1609, 1, 0, 0, 0, 1615, 1618, 1, 0, 0, 0, 1616, 1614, 1, 0, 0, 0, 1616, 1617, 1, 0, 0, 0, 1617, 235, 1, 0, 0, 0, 1618, 1616, 1, 0, 0, 0, 1619, 1636, 5, 527, 0, 0, 1620, 1636, 5, 530, 0, 0, 1621, 1636, 5, 535, 0, 0, 1622, 1623, 5, 518, 0, 0, 1623, 1624, 5, 538, 0, 0, 1624, 1625, 5, 520, 0, 0, 1625, 1626, 5, 538, 0, 0, 1626, 1636, 5, 519, 0, 0, 1627, 1628, 5, 518, 0, 0, 1628, 1629, 5, 538, 0, 0, 1629, 1630, 5, 520, 0, 0, 1630, 1636, 5, 519, 0, 0, 1631, 1632, 5, 518, 0, 0, 1632, 1633, 5, 520, 0, 0, 1633, 1634, 5, 538, 0, 0, 1634, 1636, 5, 519, 0, 0, 1635, 1619, 1, 0, 0, 0, 1635, 1620, 1, 0, 0, 0, 1635, 1621, 1, 0, 0, 0, 1635, 1622, 1, 0, 0, 0, 1635, 1627, 1, 0, 0, 0, 1635, 1631, 1, 0, 0, 0, 1636, 237, 1, 0, 0, 0, 1637, 1638, 5, 215, 0, 0, 1638, 1643, 3, 170, 85, 0, 1639, 1640, 5, 520, 0, 0, 1640, 1642, 3, 170, 85, 0, 1641, 1639, 1, 0, 0, 0, 1642, 1645, 1, 0, 0, 0, 1643, 1641, 1, 0, 0, 0, 1643, 1644, 1, 0, 0, 0, 1644, 239, 1, 0, 0, 0, 1645, 1643, 1, 0, 0, 0, 1646, 1647, 5, 271, 0, 0, 1647, 1649, 5, 516, 0, 0, 1648, 1650, 3, 242, 121, 0, 1649, 1648, 1, 0, 0, 0, 1650, 1651, 1, 0, 0, 0, 1651, 1649, 1, 0, 0, 0, 1651, 1652, 1, 0, 0, 0, 1652, 1653, 1, 0, 0, 0, 1653, 1655, 5, 517, 0, 0, 1654, 1656, 3, 254, 127, 0, 1655, 1654, 1, 0, 0, 0, 1655, 1656, 1, 0, 0, 0, 1656, 241, 1, 0, 0, 0, 1657, 1659, 3, 310, 155, 0, 1658, 1660, 3, 236, 118, 0, 1659, 1658, 1, 0, 0, 0, 1659, 1660, 1, 0, 0, 0, 1660, 243, 1, 0, 0, 0, 1661, 1662, 5, 5, 0, 0, 1662, 1663, 5, 322, 0, 0, 1663, 1664, 5, 272, 0, 0, 1664, 1670, 5, 210, 0, 0, 1665, 1666, 5, 254, 0, 0, 1666, 1667, 5, 321, 0, 0, 1667, 1668, 5, 272, 0, 0, 1668, 1670, 5, 210, 0, 0, 1669, 1661, 1, 0, 0, 0, 1669, 1665, 1, 0, 0, 0, 1670, 245, 1, 0, 0, 0, 1671, 1672, 5, 438, 0, 0, 1672, 1673, 5, 210, 0, 0, 1673, 1674, 5, 343, 0, 0, 1674, 1675, 5, 478, 0, 0, 1675, 1676, 5, 467, 0, 0, 1676, 1696, 5, 321, 0, 0, 1677, 1678, 5, 438, 0, 0, 1678, 1679, 5, 210, 0, 0, 1679, 1680, 5, 343, 0, 0, 1680, 1681, 5, 388, 0, 0, 1681, 1682, 5, 237, 0, 0, 1682, 1696, 5, 321, 0, 0, 1683, 1684, 5, 438, 0, 0, 1684, 1685, 5, 210, 0, 0, 1685, 1686, 5, 343, 0, 0, 1686, 1687, 5, 388, 0, 0, 1687, 1688, 5, 467, 0, 0, 1688, 1696, 3, 310, 155, 0, 1689, 1690, 5, 438, 0, 0, 1690, 1691, 5, 210, 0, 0, 1691, 1692, 5, 343, 0, 0, 1692, 1693, 5, 388, 0, 0, 1693, 1694, 5, 457, 0, 0, 1694, 1696, 3, 310, 155, 0, 1695, 1671, 1, 0, 0, 0, 1695, 1677, 1, 0, 0, 0, 1695, 1683, 1, 0, 0, 0, 1695, 1689, 1, 0, 0, 0, 1696, 247, 1, 0, 0, 0, 1697, 1698, 5, 105, 0, 0, 1698, 1703, 3, 170, 85, 0, 1699, 1700, 5, 520, 0, 0, 1700, 1702, 3, 170, 85, 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, 249, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1706, 1707, 5, 292, 0, 0, 1707, 1708, 5, 27, 0, 0, 1708, 1709, 3, 286, 143, 0, 1709, 1710, 3, 252, 126, 0, 1710, 1716, 1, 0, 0, 0, 1711, 1712, 5, 322, 0, 0, 1712, 1713, 5, 27, 0, 0, 1713, 1714, 5, 538, 0, 0, 1714, 1716, 3, 252, 126, 0, 1715, 1706, 1, 0, 0, 0, 1715, 1711, 1, 0, 0, 0, 1716, 251, 1, 0, 0, 0, 1717, 1718, 5, 480, 0, 0, 1718, 1719, 5, 10, 0, 0, 1719, 1720, 5, 76, 0, 0, 1720, 1721, 5, 321, 0, 0, 1721, 253, 1, 0, 0, 0, 1722, 1723, 5, 434, 0, 0, 1723, 1724, 3, 286, 143, 0, 1724, 255, 1, 0, 0, 0, 1725, 1726, 3, 258, 129, 0, 1726, 257, 1, 0, 0, 0, 1727, 1728, 6, 129, -1, 0, 1728, 1729, 5, 241, 0, 0, 1729, 1740, 3, 258, 129, 6, 1730, 1731, 5, 133, 0, 0, 1731, 1732, 5, 516, 0, 0, 1732, 1733, 3, 156, 78, 0, 1733, 1734, 5, 517, 0, 0, 1734, 1740, 1, 0, 0, 0, 1735, 1737, 3, 264, 132, 0, 1736, 1738, 3, 260, 130, 0, 1737, 1736, 1, 0, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1740, 1, 0, 0, 0, 1739, 1727, 1, 0, 0, 0, 1739, 1730, 1, 0, 0, 0, 1739, 1735, 1, 0, 0, 0, 1740, 1755, 1, 0, 0, 0, 1741, 1742, 10, 3, 0, 0, 1742, 1743, 5, 10, 0, 0, 1743, 1754, 3, 258, 129, 4, 1744, 1745, 10, 2, 0, 0, 1745, 1746, 5, 257, 0, 0, 1746, 1754, 3, 258, 129, 3, 1747, 1748, 10, 1, 0, 0, 1748, 1750, 5, 184, 0, 0, 1749, 1751, 5, 241, 0, 0, 1750, 1749, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1752, 1, 0, 0, 0, 1752, 1754, 7, 27, 0, 0, 1753, 1741, 1, 0, 0, 0, 1753, 1744, 1, 0, 0, 0, 1753, 1747, 1, 0, 0, 0, 1754, 1757, 1, 0, 0, 0, 1755, 1753, 1, 0, 0, 0, 1755, 1756, 1, 0, 0, 0, 1756, 259, 1, 0, 0, 0, 1757, 1755, 1, 0, 0, 0, 1758, 1760, 5, 241, 0, 0, 1759, 1758, 1, 0, 0, 0, 1759, 1760, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 1763, 5, 27, 0, 0, 1762, 1764, 7, 28, 0, 0, 1763, 1762, 1, 0, 0, 0, 1763, 1764, 1, 0, 0, 0, 1764, 1765, 1, 0, 0, 0, 1765, 1766, 3, 264, 132, 0, 1766, 1767, 5, 10, 0, 0, 1767, 1768, 3, 264, 132, 0, 1768, 1826, 1, 0, 0, 0, 1769, 1771, 5, 241, 0, 0, 1770, 1769, 1, 0, 0, 0, 1770, 1771, 1, 0, 0, 0, 1771, 1772, 1, 0, 0, 0, 1772, 1773, 5, 170, 0, 0, 1773, 1774, 5, 516, 0, 0, 1774, 1779, 3, 256, 128, 0, 1775, 1776, 5, 520, 0, 0, 1776, 1778, 3, 256, 128, 0, 1777, 1775, 1, 0, 0, 0, 1778, 1781, 1, 0, 0, 0, 1779, 1777, 1, 0, 0, 0, 1779, 1780, 1, 0, 0, 0, 1780, 1782, 1, 0, 0, 0, 1781, 1779, 1, 0, 0, 0, 1782, 1783, 5, 517, 0, 0, 1783, 1826, 1, 0, 0, 0, 1784, 1786, 5, 241, 0, 0, 1785, 1784, 1, 0, 0, 0, 1785, 1786, 1, 0, 0, 0, 1786, 1787, 1, 0, 0, 0, 1787, 1788, 5, 170, 0, 0, 1788, 1789, 5, 516, 0, 0, 1789, 1790, 3, 156, 78, 0, 1790, 1791, 5, 517, 0, 0, 1791, 1826, 1, 0, 0, 0, 1792, 1793, 5, 133, 0, 0, 1793, 1794, 5, 516, 0, 0, 1794, 1795, 3, 156, 78, 0, 1795, 1796, 5, 517, 0, 0, 1796, 1826, 1, 0, 0, 0, 1797, 1799, 5, 241, 0, 0, 1798, 1797, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1800, 1, 0, 0, 0, 1800, 1801, 5, 318, 0, 0, 1801, 1826, 3, 264, 132, 0, 1802, 1826, 3, 262, 131, 0, 1803, 1805, 5, 184, 0, 0, 1804, 1806, 5, 241, 0, 0, 1805, 1804, 1, 0, 0, 0, 1805, 1806, 1, 0, 0, 0, 1806, 1807, 1, 0, 0, 0, 1807, 1826, 7, 27, 0, 0, 1808, 1810, 5, 184, 0, 0, 1809, 1811, 5, 241, 0, 0, 1810, 1809, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1812, 1, 0, 0, 0, 1812, 1813, 5, 113, 0, 0, 1813, 1814, 5, 151, 0, 0, 1814, 1826, 3, 264, 132, 0, 1815, 1817, 5, 241, 0, 0, 1816, 1815, 1, 0, 0, 0, 1816, 1817, 1, 0, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1819, 5, 342, 0, 0, 1819, 1820, 5, 388, 0, 0, 1820, 1823, 3, 264, 132, 0, 1821, 1822, 5, 127, 0, 0, 1822, 1824, 3, 362, 181, 0, 1823, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1826, 1, 0, 0, 0, 1825, 1759, 1, 0, 0, 0, 1825, 1770, 1, 0, 0, 0, 1825, 1785, 1, 0, 0, 0, 1825, 1792, 1, 0, 0, 0, 1825, 1798, 1, 0, 0, 0, 1825, 1802, 1, 0, 0, 0, 1825, 1803, 1, 0, 0, 0, 1825, 1808, 1, 0, 0, 0, 1825, 1816, 1, 0, 0, 0, 1826, 261, 1, 0, 0, 0, 1827, 1829, 5, 241, 0, 0, 1828, 1827, 1, 0, 0, 0, 1828, 1829, 1, 0, 0, 0, 1829, 1830, 1, 0, 0, 0, 1830, 1831, 5, 202, 0, 0, 1831, 1845, 7, 29, 0, 0, 1832, 1833, 5, 516, 0, 0, 1833, 1846, 5, 517, 0, 0, 1834, 1835, 5, 516, 0, 0, 1835, 1840, 3, 256, 128, 0, 1836, 1837, 5, 520, 0, 0, 1837, 1839, 3, 256, 128, 0, 1838, 1836, 1, 0, 0, 0, 1839, 1842, 1, 0, 0, 0, 1840, 1838, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 1843, 1, 0, 0, 0, 1842, 1840, 1, 0, 0, 0, 1843, 1844, 5, 517, 0, 0, 1844, 1846, 1, 0, 0, 0, 1845, 1832, 1, 0, 0, 0, 1845, 1834, 1, 0, 0, 0, 1846, 1857, 1, 0, 0, 0, 1847, 1849, 5, 241, 0, 0, 1848, 1847, 1, 0, 0, 0, 1848, 1849, 1, 0, 0, 0, 1849, 1850, 1, 0, 0, 0, 1850, 1851, 5, 202, 0, 0, 1851, 1854, 3, 264, 132, 0, 1852, 1853, 5, 127, 0, 0, 1853, 1855, 3, 362, 181, 0, 1854, 1852, 1, 0, 0, 0, 1854, 1855, 1, 0, 0, 0, 1855, 1857, 1, 0, 0, 0, 1856, 1828, 1, 0, 0, 0, 1856, 1848, 1, 0, 0, 0, 1857, 263, 1, 0, 0, 0, 1858, 1859, 6, 132, -1, 0, 1859, 1863, 3, 268, 134, 0, 1860, 1861, 7, 30, 0, 0, 1861, 1863, 3, 264, 132, 7, 1862, 1858, 1, 0, 0, 0, 1862, 1860, 1, 0, 0, 0, 1863, 1885, 1, 0, 0, 0, 1864, 1865, 10, 6, 0, 0, 1865, 1866, 7, 31, 0, 0, 1866, 1884, 3, 264, 132, 7, 1867, 1868, 10, 5, 0, 0, 1868, 1869, 7, 32, 0, 0, 1869, 1884, 3, 264, 132, 6, 1870, 1871, 10, 4, 0, 0, 1871, 1872, 5, 511, 0, 0, 1872, 1884, 3, 264, 132, 5, 1873, 1874, 10, 3, 0, 0, 1874, 1875, 5, 512, 0, 0, 1875, 1884, 3, 264, 132, 4, 1876, 1877, 10, 2, 0, 0, 1877, 1878, 5, 510, 0, 0, 1878, 1884, 3, 264, 132, 3, 1879, 1880, 10, 1, 0, 0, 1880, 1881, 3, 350, 175, 0, 1881, 1882, 3, 264, 132, 2, 1882, 1884, 1, 0, 0, 0, 1883, 1864, 1, 0, 0, 0, 1883, 1867, 1, 0, 0, 0, 1883, 1870, 1, 0, 0, 0, 1883, 1873, 1, 0, 0, 0, 1883, 1876, 1, 0, 0, 0, 1883, 1879, 1, 0, 0, 0, 1884, 1887, 1, 0, 0, 0, 1885, 1883, 1, 0, 0, 0, 1885, 1886, 1, 0, 0, 0, 1886, 265, 1, 0, 0, 0, 1887, 1885, 1, 0, 0, 0, 1888, 1908, 3, 376, 188, 0, 1889, 1908, 3, 274, 137, 0, 1890, 1891, 3, 276, 138, 0, 1891, 1903, 5, 516, 0, 0, 1892, 1894, 3, 368, 184, 0, 1893, 1892, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 1, 0, 0, 0, 1895, 1900, 3, 278, 139, 0, 1896, 1897, 5, 520, 0, 0, 1897, 1899, 3, 278, 139, 0, 1898, 1896, 1, 0, 0, 0, 1899, 1902, 1, 0, 0, 0, 1900, 1898, 1, 0, 0, 0, 1900, 1901, 1, 0, 0, 0, 1901, 1904, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1903, 1893, 1, 0, 0, 0, 1903, 1904, 1, 0, 0, 0, 1904, 1905, 1, 0, 0, 0, 1905, 1906, 5, 517, 0, 0, 1906, 1908, 1, 0, 0, 0, 1907, 1888, 1, 0, 0, 0, 1907, 1889, 1, 0, 0, 0, 1907, 1890, 1, 0, 0, 0, 1908, 267, 1, 0, 0, 0, 1909, 1910, 6, 134, -1, 0, 1910, 1912, 5, 40, 0, 0, 1911, 1913, 3, 314, 157, 0, 1912, 1911, 1, 0, 0, 0, 1913, 1914, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1914, 1915, 1, 0, 0, 0, 1915, 1918, 1, 0, 0, 0, 1916, 1917, 5, 120, 0, 0, 1917, 1919, 3, 256, 128, 0, 1918, 1916, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 1, 0, 0, 0, 1920, 1921, 5, 122, 0, 0, 1921, 1985, 1, 0, 0, 0, 1922, 1923, 5, 40, 0, 0, 1923, 1925, 3, 256, 128, 0, 1924, 1926, 3, 314, 157, 0, 1925, 1924, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1925, 1, 0, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1931, 1, 0, 0, 0, 1929, 1930, 5, 120, 0, 0, 1930, 1932, 3, 256, 128, 0, 1931, 1929, 1, 0, 0, 0, 1931, 1932, 1, 0, 0, 0, 1932, 1933, 1, 0, 0, 0, 1933, 1934, 5, 122, 0, 0, 1934, 1985, 1, 0, 0, 0, 1935, 1936, 5, 41, 0, 0, 1936, 1937, 5, 516, 0, 0, 1937, 1938, 3, 256, 128, 0, 1938, 1939, 5, 17, 0, 0, 1939, 1940, 3, 56, 28, 0, 1940, 1941, 5, 517, 0, 0, 1941, 1985, 1, 0, 0, 0, 1942, 1943, 5, 457, 0, 0, 1943, 1944, 5, 516, 0, 0, 1944, 1947, 3, 256, 128, 0, 1945, 1946, 5, 461, 0, 0, 1946, 1948, 5, 476, 0, 0, 1947, 1945, 1, 0, 0, 0, 1947, 1948, 1, 0, 0, 0, 1948, 1949, 1, 0, 0, 0, 1949, 1950, 5, 517, 0, 0, 1950, 1985, 1, 0, 0, 0, 1951, 1952, 5, 467, 0, 0, 1952, 1953, 5, 516, 0, 0, 1953, 1956, 3, 256, 128, 0, 1954, 1955, 5, 461, 0, 0, 1955, 1957, 5, 476, 0, 0, 1956, 1954, 1, 0, 0, 0, 1956, 1957, 1, 0, 0, 0, 1957, 1958, 1, 0, 0, 0, 1958, 1959, 5, 517, 0, 0, 1959, 1985, 1, 0, 0, 0, 1960, 1961, 5, 281, 0, 0, 1961, 1962, 5, 516, 0, 0, 1962, 1963, 3, 264, 132, 0, 1963, 1964, 5, 170, 0, 0, 1964, 1965, 3, 264, 132, 0, 1965, 1966, 5, 517, 0, 0, 1966, 1985, 1, 0, 0, 0, 1967, 1985, 3, 358, 179, 0, 1968, 1985, 5, 527, 0, 0, 1969, 1970, 3, 332, 166, 0, 1970, 1971, 5, 513, 0, 0, 1971, 1972, 5, 527, 0, 0, 1972, 1985, 1, 0, 0, 0, 1973, 1974, 5, 516, 0, 0, 1974, 1975, 3, 156, 78, 0, 1975, 1976, 5, 517, 0, 0, 1976, 1985, 1, 0, 0, 0, 1977, 1985, 3, 266, 133, 0, 1978, 1985, 3, 308, 154, 0, 1979, 1985, 3, 280, 140, 0, 1980, 1981, 5, 516, 0, 0, 1981, 1982, 3, 256, 128, 0, 1982, 1983, 5, 517, 0, 0, 1983, 1985, 1, 0, 0, 0, 1984, 1909, 1, 0, 0, 0, 1984, 1922, 1, 0, 0, 0, 1984, 1935, 1, 0, 0, 0, 1984, 1942, 1, 0, 0, 0, 1984, 1951, 1, 0, 0, 0, 1984, 1960, 1, 0, 0, 0, 1984, 1967, 1, 0, 0, 0, 1984, 1968, 1, 0, 0, 0, 1984, 1969, 1, 0, 0, 0, 1984, 1973, 1, 0, 0, 0, 1984, 1977, 1, 0, 0, 0, 1984, 1978, 1, 0, 0, 0, 1984, 1979, 1, 0, 0, 0, 1984, 1980, 1, 0, 0, 0, 1985, 1993, 1, 0, 0, 0, 1986, 1987, 10, 4, 0, 0, 1987, 1988, 5, 514, 0, 0, 1988, 1989, 3, 264, 132, 0, 1989, 1990, 5, 515, 0, 0, 1990, 1992, 1, 0, 0, 0, 1991, 1986, 1, 0, 0, 0, 1992, 1995, 1, 0, 0, 0, 1993, 1991, 1, 0, 0, 0, 1993, 1994, 1, 0, 0, 0, 1994, 269, 1, 0, 0, 0, 1995, 1993, 1, 0, 0, 0, 1996, 1997, 3, 332, 166, 0, 1997, 271, 1, 0, 0, 0, 1998, 2003, 3, 380, 190, 0, 1999, 2003, 3, 376, 188, 0, 2000, 2003, 3, 378, 189, 0, 2001, 2003, 3, 332, 166, 0, 2002, 1998, 1, 0, 0, 0, 2002, 1999, 1, 0, 0, 0, 2002, 2000, 1, 0, 0, 0, 2002, 2001, 1, 0, 0, 0, 2003, 273, 1, 0, 0, 0, 2004, 2005, 3, 378, 189, 0, 2005, 2006, 5, 537, 0, 0, 2006, 2009, 1, 0, 0, 0, 2007, 2009, 3, 286, 143, 0, 2008, 2004, 1, 0, 0, 0, 2008, 2007, 1, 0, 0, 0, 2009, 275, 1, 0, 0, 0, 2010, 2013, 3, 380, 190, 0, 2011, 2013, 3, 332, 166, 0, 2012, 2010, 1, 0, 0, 0, 2012, 2011, 1, 0, 0, 0, 2013, 277, 1, 0, 0, 0, 2014, 2019, 3, 374, 187, 0, 2015, 2019, 3, 372, 186, 0, 2016, 2019, 3, 370, 185, 0, 2017, 2019, 3, 256, 128, 0, 2018, 2014, 1, 0, 0, 0, 2018, 2015, 1, 0, 0, 0, 2018, 2016, 1, 0, 0, 0, 2018, 2017, 1, 0, 0, 0, 2019, 279, 1, 0, 0, 0, 2020, 2021, 3, 332, 166, 0, 2021, 281, 1, 0, 0, 0, 2022, 2023, 3, 308, 154, 0, 2023, 283, 1, 0, 0, 0, 2024, 2027, 3, 308, 154, 0, 2025, 2027, 3, 280, 140, 0, 2026, 2024, 1, 0, 0, 0, 2026, 2025, 1, 0, 0, 0, 2027, 285, 1, 0, 0, 0, 2028, 2031, 5, 182, 0, 0, 2029, 2032, 3, 288, 144, 0, 2030, 2032, 3, 292, 146, 0, 2031, 2029, 1, 0, 0, 0, 2031, 2030, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 287, 1, 0, 0, 0, 2033, 2035, 3, 290, 145, 0, 2034, 2036, 3, 294, 147, 0, 2035, 2034, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 289, 1, 0, 0, 0, 2037, 2038, 3, 296, 148, 0, 2038, 2039, 3, 372, 186, 0, 2039, 2041, 1, 0, 0, 0, 2040, 2037, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2040, 1, 0, 0, 0, 2042, 2043, 1, 0, 0, 0, 2043, 291, 1, 0, 0, 0, 2044, 2047, 3, 294, 147, 0, 2045, 2048, 3, 290, 145, 0, 2046, 2048, 3, 294, 147, 0, 2047, 2045, 1, 0, 0, 0, 2047, 2046, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 293, 1, 0, 0, 0, 2049, 2050, 3, 296, 148, 0, 2050, 2051, 3, 372, 186, 0, 2051, 2052, 5, 388, 0, 0, 2052, 2053, 3, 372, 186, 0, 2053, 295, 1, 0, 0, 0, 2054, 2056, 7, 33, 0, 0, 2055, 2054, 1, 0, 0, 0, 2055, 2056, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2060, 7, 34, 0, 0, 2058, 2060, 5, 537, 0, 0, 2059, 2055, 1, 0, 0, 0, 2059, 2058, 1, 0, 0, 0, 2060, 297, 1, 0, 0, 0, 2061, 2063, 5, 17, 0, 0, 2062, 2061, 1, 0, 0, 0, 2062, 2063, 1, 0, 0, 0, 2063, 2064, 1, 0, 0, 0, 2064, 2066, 3, 308, 154, 0, 2065, 2067, 3, 304, 152, 0, 2066, 2065, 1, 0, 0, 0, 2066, 2067, 1, 0, 0, 0, 2067, 299, 1, 0, 0, 0, 2068, 2069, 3, 308, 154, 0, 2069, 2070, 3, 302, 151, 0, 2070, 301, 1, 0, 0, 0, 2071, 2072, 5, 221, 0, 0, 2072, 2074, 3, 308, 154, 0, 2073, 2071, 1, 0, 0, 0, 2074, 2075, 1, 0, 0, 0, 2075, 2073, 1, 0, 0, 0, 2075, 2076, 1, 0, 0, 0, 2076, 2079, 1, 0, 0, 0, 2077, 2079, 1, 0, 0, 0, 2078, 2073, 1, 0, 0, 0, 2078, 2077, 1, 0, 0, 0, 2079, 303, 1, 0, 0, 0, 2080, 2081, 5, 516, 0, 0, 2081, 2082, 3, 306, 153, 0, 2082, 2083, 5, 517, 0, 0, 2083, 305, 1, 0, 0, 0, 2084, 2089, 3, 308, 154, 0, 2085, 2086, 5, 520, 0, 0, 2086, 2088, 3, 308, 154, 0, 2087, 2085, 1, 0, 0, 0, 2088, 2091, 1, 0, 0, 0, 2089, 2087, 1, 0, 0, 0, 2089, 2090, 1, 0, 0, 0, 2090, 307, 1, 0, 0, 0, 2091, 2089, 1, 0, 0, 0, 2092, 2096, 3, 310, 155, 0, 2093, 2096, 3, 312, 156, 0, 2094, 2096, 3, 382, 191, 0, 2095, 2092, 1, 0, 0, 0, 2095, 2093, 1, 0, 0, 0, 2095, 2094, 1, 0, 0, 0, 2096, 309, 1, 0, 0, 0, 2097, 2098, 7, 35, 0, 0, 2098, 311, 1, 0, 0, 0, 2099, 2100, 5, 537, 0, 0, 2100, 313, 1, 0, 0, 0, 2101, 2102, 5, 428, 0, 0, 2102, 2103, 3, 256, 128, 0, 2103, 2104, 5, 376, 0, 0, 2104, 2105, 3, 256, 128, 0, 2105, 315, 1, 0, 0, 0, 2106, 2107, 3, 308, 154, 0, 2107, 317, 1, 0, 0, 0, 2108, 2109, 3, 308, 154, 0, 2109, 319, 1, 0, 0, 0, 2110, 2113, 3, 308, 154, 0, 2111, 2112, 5, 513, 0, 0, 2112, 2114, 3, 308, 154, 0, 2113, 2111, 1, 0, 0, 0, 2113, 2114, 1, 0, 0, 0, 2114, 321, 1, 0, 0, 0, 2115, 2118, 3, 308, 154, 0, 2116, 2117, 5, 513, 0, 0, 2117, 2119, 3, 308, 154, 0, 2118, 2116, 1, 0, 0, 0, 2118, 2119, 1, 0, 0, 0, 2119, 323, 1, 0, 0, 0, 2120, 2123, 3, 308, 154, 0, 2121, 2122, 5, 513, 0, 0, 2122, 2124, 3, 308, 154, 0, 2123, 2121, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2133, 1, 0, 0, 0, 2125, 2126, 3, 308, 154, 0, 2126, 2127, 5, 513, 0, 0, 2127, 2130, 3, 308, 154, 0, 2128, 2129, 5, 513, 0, 0, 2129, 2131, 3, 308, 154, 0, 2130, 2128, 1, 0, 0, 0, 2130, 2131, 1, 0, 0, 0, 2131, 2133, 1, 0, 0, 0, 2132, 2120, 1, 0, 0, 0, 2132, 2125, 1, 0, 0, 0, 2133, 325, 1, 0, 0, 0, 2134, 2137, 3, 308, 154, 0, 2135, 2136, 5, 513, 0, 0, 2136, 2138, 3, 308, 154, 0, 2137, 2135, 1, 0, 0, 0, 2137, 2138, 1, 0, 0, 0, 2138, 2147, 1, 0, 0, 0, 2139, 2140, 3, 308, 154, 0, 2140, 2141, 5, 513, 0, 0, 2141, 2144, 3, 308, 154, 0, 2142, 2143, 5, 513, 0, 0, 2143, 2145, 3, 308, 154, 0, 2144, 2142, 1, 0, 0, 0, 2144, 2145, 1, 0, 0, 0, 2145, 2147, 1, 0, 0, 0, 2146, 2134, 1, 0, 0, 0, 2146, 2139, 1, 0, 0, 0, 2147, 327, 1, 0, 0, 0, 2148, 2151, 3, 308, 154, 0, 2149, 2150, 5, 513, 0, 0, 2150, 2152, 3, 308, 154, 0, 2151, 2149, 1, 0, 0, 0, 2151, 2152, 1, 0, 0, 0, 2152, 2161, 1, 0, 0, 0, 2153, 2154, 3, 308, 154, 0, 2154, 2155, 5, 513, 0, 0, 2155, 2158, 3, 308, 154, 0, 2156, 2157, 5, 513, 0, 0, 2157, 2159, 3, 308, 154, 0, 2158, 2156, 1, 0, 0, 0, 2158, 2159, 1, 0, 0, 0, 2159, 2161, 1, 0, 0, 0, 2160, 2148, 1, 0, 0, 0, 2160, 2153, 1, 0, 0, 0, 2161, 329, 1, 0, 0, 0, 2162, 2165, 3, 308, 154, 0, 2163, 2164, 5, 513, 0, 0, 2164, 2166, 3, 308, 154, 0, 2165, 2163, 1, 0, 0, 0, 2165, 2166, 1, 0, 0, 0, 2166, 2175, 1, 0, 0, 0, 2167, 2168, 3, 308, 154, 0, 2168, 2169, 5, 513, 0, 0, 2169, 2172, 3, 308, 154, 0, 2170, 2171, 5, 513, 0, 0, 2171, 2173, 3, 308, 154, 0, 2172, 2170, 1, 0, 0, 0, 2172, 2173, 1, 0, 0, 0, 2173, 2175, 1, 0, 0, 0, 2174, 2162, 1, 0, 0, 0, 2174, 2167, 1, 0, 0, 0, 2175, 331, 1, 0, 0, 0, 2176, 2181, 3, 308, 154, 0, 2177, 2178, 5, 513, 0, 0, 2178, 2180, 3, 308, 154, 0, 2179, 2177, 1, 0, 0, 0, 2180, 2183, 1, 0, 0, 0, 2181, 2182, 1, 0, 0, 0, 2181, 2179, 1, 0, 0, 0, 2182, 333, 1, 0, 0, 0, 2183, 2181, 1, 0, 0, 0, 2184, 2185, 5, 433, 0, 0, 2185, 2186, 3, 340, 170, 0, 2186, 335, 1, 0, 0, 0, 2187, 2188, 5, 167, 0, 0, 2188, 2189, 5, 241, 0, 0, 2189, 2190, 5, 133, 0, 0, 2190, 337, 1, 0, 0, 0, 2191, 2192, 5, 167, 0, 0, 2192, 2193, 5, 133, 0, 0, 2193, 339, 1, 0, 0, 0, 2194, 2195, 5, 516, 0, 0, 2195, 2200, 3, 342, 171, 0, 2196, 2197, 5, 520, 0, 0, 2197, 2199, 3, 342, 171, 0, 2198, 2196, 1, 0, 0, 0, 2199, 2202, 1, 0, 0, 0, 2200, 2198, 1, 0, 0, 0, 2200, 2201, 1, 0, 0, 0, 2201, 2203, 1, 0, 0, 0, 2202, 2200, 1, 0, 0, 0, 2203, 2204, 5, 517, 0, 0, 2204, 341, 1, 0, 0, 0, 2205, 2210, 3, 344, 172, 0, 2206, 2208, 5, 505, 0, 0, 2207, 2206, 1, 0, 0, 0, 2207, 2208, 1, 0, 0, 0, 2208, 2209, 1, 0, 0, 0, 2209, 2211, 3, 346, 173, 0, 2210, 2207, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 343, 1, 0, 0, 0, 2212, 2216, 3, 308, 154, 0, 2213, 2216, 3, 280, 140, 0, 2214, 2216, 5, 537, 0, 0, 2215, 2212, 1, 0, 0, 0, 2215, 2213, 1, 0, 0, 0, 2215, 2214, 1, 0, 0, 0, 2216, 345, 1, 0, 0, 0, 2217, 2222, 5, 538, 0, 0, 2218, 2222, 5, 539, 0, 0, 2219, 2222, 3, 366, 183, 0, 2220, 2222, 5, 537, 0, 0, 2221, 2217, 1, 0, 0, 0, 2221, 2218, 1, 0, 0, 0, 2221, 2219, 1, 0, 0, 0, 2221, 2220, 1, 0, 0, 0, 2222, 347, 1, 0, 0, 0, 2223, 2230, 5, 10, 0, 0, 2224, 2225, 5, 511, 0, 0, 2225, 2230, 5, 511, 0, 0, 2226, 2230, 5, 257, 0, 0, 2227, 2228, 5, 510, 0, 0, 2228, 2230, 5, 510, 0, 0, 2229, 2223, 1, 0, 0, 0, 2229, 2224, 1, 0, 0, 0, 2229, 2226, 1, 0, 0, 0, 2229, 2227, 1, 0, 0, 0, 2230, 349, 1, 0, 0, 0, 2231, 2246, 5, 505, 0, 0, 2232, 2246, 5, 506, 0, 0, 2233, 2246, 5, 507, 0, 0, 2234, 2235, 5, 507, 0, 0, 2235, 2246, 5, 505, 0, 0, 2236, 2237, 5, 506, 0, 0, 2237, 2246, 5, 505, 0, 0, 2238, 2239, 5, 507, 0, 0, 2239, 2246, 5, 506, 0, 0, 2240, 2241, 5, 508, 0, 0, 2241, 2246, 5, 505, 0, 0, 2242, 2243, 5, 507, 0, 0, 2243, 2244, 5, 505, 0, 0, 2244, 2246, 5, 506, 0, 0, 2245, 2231, 1, 0, 0, 0, 2245, 2232, 1, 0, 0, 0, 2245, 2233, 1, 0, 0, 0, 2245, 2234, 1, 0, 0, 0, 2245, 2236, 1, 0, 0, 0, 2245, 2238, 1, 0, 0, 0, 2245, 2240, 1, 0, 0, 0, 2245, 2242, 1, 0, 0, 0, 2246, 351, 1, 0, 0, 0, 2247, 2248, 5, 507, 0, 0, 2248, 2255, 5, 507, 0, 0, 2249, 2250, 5, 506, 0, 0, 2250, 2255, 5, 506, 0, 0, 2251, 2255, 5, 511, 0, 0, 2252, 2255, 5, 512, 0, 0, 2253, 2255, 5, 510, 0, 0, 2254, 2247, 1, 0, 0, 0, 2254, 2249, 1, 0, 0, 0, 2254, 2251, 1, 0, 0, 0, 2254, 2252, 1, 0, 0, 0, 2254, 2253, 1, 0, 0, 0, 2255, 353, 1, 0, 0, 0, 2256, 2257, 7, 36, 0, 0, 2257, 355, 1, 0, 0, 0, 2258, 2259, 7, 37, 0, 0, 2259, 357, 1, 0, 0, 0, 2260, 2275, 3, 286, 143, 0, 2261, 2275, 3, 360, 180, 0, 2262, 2275, 3, 362, 181, 0, 2263, 2265, 5, 529, 0, 0, 2264, 2263, 1, 0, 0, 0, 2264, 2265, 1, 0, 0, 0, 2265, 2266, 1, 0, 0, 0, 2266, 2275, 3, 364, 182, 0, 2267, 2275, 3, 366, 183, 0, 2268, 2275, 5, 539, 0, 0, 2269, 2275, 5, 540, 0, 0, 2270, 2272, 5, 241, 0, 0, 2271, 2270, 1, 0, 0, 0, 2271, 2272, 1, 0, 0, 0, 2272, 2273, 1, 0, 0, 0, 2273, 2275, 5, 244, 0, 0, 2274, 2260, 1, 0, 0, 0, 2274, 2261, 1, 0, 0, 0, 2274, 2262, 1, 0, 0, 0, 2274, 2264, 1, 0, 0, 0, 2274, 2267, 1, 0, 0, 0, 2274, 2268, 1, 0, 0, 0, 2274, 2269, 1, 0, 0, 0, 2274, 2271, 1, 0, 0, 0, 2275, 359, 1, 0, 0, 0, 2276, 2277, 3, 370, 185, 0, 2277, 2278, 3, 362, 181, 0, 2278, 361, 1, 0, 0, 0, 2279, 2280, 5, 537, 0, 0, 2280, 363, 1, 0, 0, 0, 2281, 2282, 5, 538, 0, 0, 2282, 365, 1, 0, 0, 0, 2283, 2284, 7, 38, 0, 0, 2284, 367, 1, 0, 0, 0, 2285, 2286, 7, 39, 0, 0, 2286, 369, 1, 0, 0, 0, 2287, 2288, 7, 40, 0, 0, 2288, 371, 1, 0, 0, 0, 2289, 2290, 7, 41, 0, 0, 2290, 373, 1, 0, 0, 0, 2291, 2292, 7, 42, 0, 0, 2292, 375, 1, 0, 0, 0, 2293, 2294, 7, 43, 0, 0, 2294, 377, 1, 0, 0, 0, 2295, 2296, 7, 44, 0, 0, 2296, 379, 1, 0, 0, 0, 2297, 2298, 7, 45, 0, 0, 2298, 381, 1, 0, 0, 0, 2299, 2300, 7, 46, 0, 0, 2300, 383, 1, 0, 0, 0, 272, 387, 394, 397, 411, 429, 433, 442, 447, 454, 465, 474, 486, 489, 496, 499, 507, 511, 516, 519, 526, 534, 538, 550, 558, 562, 594, 597, 602, 606, 610, 614, 623, 628, 632, 636, 641, 644, 648, 653, 659, 664, 669, 673, 677, 681, 689, 697, 701, 705, 709, 713, 717, 721, 725, 729, 731, 741, 749, 773, 787, 792, 796, 802, 805, 808, 815, 818, 827, 839, 863, 875, 880, 884, 892, 896, 902, 912, 917, 923, 927, 931, 935, 944, 948, 955, 958, 968, 976, 984, 988, 1003, 1022, 1033, 1037, 1044, 1049, 1055, 1059, 1066, 1070, 1074, 1078, 1086, 1090, 1095, 1101, 1107, 1110, 1114, 1125, 1134, 1148, 1160, 1175, 1178, 1182, 1185, 1187, 1192, 1196, 1199, 1203, 1212, 1221, 1231, 1236, 1247, 1250, 1253, 1256, 1259, 1265, 1269, 1277, 1280, 1285, 1288, 1292, 1295, 1297, 1311, 1322, 1327, 1335, 1338, 1341, 1346, 1348, 1350, 1355, 1358, 1362, 1366, 1375, 1386, 1413, 1435, 1448, 1460, 1473, 1485, 1497, 1503, 1530, 1538, 1542, 1545, 1548, 1555, 1558, 1561, 1564, 1567, 1570, 1575, 1578, 1587, 1592, 1596, 1601, 1607, 1612, 1616, 1635, 1643, 1651, 1655, 1659, 1669, 1695, 1703, 1715, 1737, 1739, 1750, 1753, 1755, 1759, 1763, 1770, 1779, 1785, 1798, 1805, 1810, 1816, 1823, 1825, 1828, 1840, 1845, 1848, 1854, 1856, 1862, 1883, 1885, 1893, 1900, 1903, 1907, 1914, 1918, 1927, 1931, 1947, 1956, 1984, 1993, 2002, 2008, 2012, 2018, 2026, 2031, 2035, 2042, 2047, 2055, 2059, 2062, 2066, 2075, 2078, 2089, 2095, 2113, 2118, 2123, 2130, 2132, 2137, 2144, 2146, 2151, 2158, 2160, 2165, 2172, 2174, 2181, 2200, 2207, 2210, 2215, 2221, 2229, 2245, 2254, 2264, 2271, 2274] \ No newline at end of file diff --git a/src/lib/flink/FlinkSqlParser.ts b/src/lib/flink/FlinkSqlParser.ts index 19bd12674..4d1601c65 100644 --- a/src/lib/flink/FlinkSqlParser.ts +++ b/src/lib/flink/FlinkSqlParser.ts @@ -594,158 +594,162 @@ export class FlinkSqlParser extends SQLParserBase { public static readonly RULE_mapTypeDimension = 33; public static readonly RULE_rowTypeDimension = 34; public static readonly RULE_columnConstraint = 35; - public static readonly RULE_commentSpec = 36; - public static readonly RULE_metadataColumnDefinition = 37; - public static readonly RULE_metadataKey = 38; - public static readonly RULE_computedColumnDefinition = 39; - public static readonly RULE_computedColumnExpression = 40; - public static readonly RULE_watermarkDefinition = 41; - public static readonly RULE_tableConstraint = 42; - public static readonly RULE_constraintName = 43; - public static readonly RULE_selfDefinitionClause = 44; - public static readonly RULE_partitionDefinition = 45; - public static readonly RULE_transformList = 46; - public static readonly RULE_transform = 47; - public static readonly RULE_transformArgument = 48; - public static readonly RULE_likeDefinition = 49; - public static readonly RULE_likeOption = 50; - public static readonly RULE_createCatalog = 51; - public static readonly RULE_createDatabase = 52; - public static readonly RULE_createView = 53; - public static readonly RULE_createFunction = 54; - public static readonly RULE_usingClause = 55; - public static readonly RULE_jarFileName = 56; - public static readonly RULE_alterTable = 57; - public static readonly RULE_renameDefinition = 58; - public static readonly RULE_setKeyValueDefinition = 59; - public static readonly RULE_addConstraint = 60; - public static readonly RULE_dropConstraint = 61; - public static readonly RULE_addUnique = 62; - public static readonly RULE_notForced = 63; - public static readonly RULE_alterView = 64; - public static readonly RULE_alterDatabase = 65; - public static readonly RULE_alterFunction = 66; - public static readonly RULE_dropCatalog = 67; - public static readonly RULE_dropTable = 68; - public static readonly RULE_dropDatabase = 69; - public static readonly RULE_dropView = 70; - public static readonly RULE_dropFunction = 71; - public static readonly RULE_insertStatement = 72; - public static readonly RULE_insertSimpleStatement = 73; - public static readonly RULE_insertPartitionDefinition = 74; - public static readonly RULE_valuesDefinition = 75; - public static readonly RULE_valuesRowDefinition = 76; - public static readonly RULE_insertMulStatementCompatibility = 77; - public static readonly RULE_insertMulStatement = 78; - public static readonly RULE_queryStatement = 79; - public static readonly RULE_valuesCaluse = 80; - public static readonly RULE_withClause = 81; - public static readonly RULE_withItem = 82; - public static readonly RULE_withItemName = 83; - public static readonly RULE_selectStatement = 84; - public static readonly RULE_selectClause = 85; - public static readonly RULE_projectItemDefinition = 86; - public static readonly RULE_overWindowItem = 87; - public static readonly RULE_fromClause = 88; - public static readonly RULE_tableExpression = 89; - public static readonly RULE_tableReference = 90; - public static readonly RULE_tablePrimary = 91; - public static readonly RULE_systemTimePeriod = 92; - public static readonly RULE_dateTimeExpression = 93; - public static readonly RULE_inlineDataValueClause = 94; - public static readonly RULE_windoTVFClause = 95; - public static readonly RULE_windowTVFExression = 96; - public static readonly RULE_windoTVFName = 97; - public static readonly RULE_windowTVFParam = 98; - public static readonly RULE_timeIntervalParamName = 99; - public static readonly RULE_columnDescriptor = 100; - public static readonly RULE_joinCondition = 101; - public static readonly RULE_whereClause = 102; - public static readonly RULE_groupByClause = 103; - public static readonly RULE_groupItemDefinition = 104; - public static readonly RULE_groupingSets = 105; - public static readonly RULE_groupingSetsNotaionName = 106; - public static readonly RULE_groupWindowFunction = 107; - public static readonly RULE_groupWindowFunctionName = 108; - public static readonly RULE_timeAttrColumn = 109; - public static readonly RULE_havingClause = 110; - public static readonly RULE_windowClause = 111; - public static readonly RULE_namedWindow = 112; - public static readonly RULE_windowSpec = 113; - public static readonly RULE_matchRecognizeClause = 114; - public static readonly RULE_orderByCaluse = 115; - public static readonly RULE_orderItemDefition = 116; - public static readonly RULE_limitClause = 117; - public static readonly RULE_partitionByClause = 118; - public static readonly RULE_quantifiers = 119; - public static readonly RULE_measuresClause = 120; - public static readonly RULE_patternDefination = 121; - public static readonly RULE_patternVariable = 122; - public static readonly RULE_outputMode = 123; - public static readonly RULE_afterMatchStrategy = 124; - public static readonly RULE_patternVariablesDefination = 125; - public static readonly RULE_windowFrame = 126; - public static readonly RULE_frameBound = 127; - public static readonly RULE_withinClause = 128; - public static readonly RULE_expression = 129; - public static readonly RULE_booleanExpression = 130; - public static readonly RULE_predicate = 131; - public static readonly RULE_likePredicate = 132; - public static readonly RULE_valueExpression = 133; + public static readonly RULE_metadataColumnDefinition = 36; + public static readonly RULE_metadataKey = 37; + public static readonly RULE_computedColumnDefinition = 38; + public static readonly RULE_computedColumnExpression = 39; + public static readonly RULE_watermarkDefinition = 40; + public static readonly RULE_tableConstraint = 41; + public static readonly RULE_constraintName = 42; + public static readonly RULE_selfDefinitionClause = 43; + public static readonly RULE_partitionDefinition = 44; + public static readonly RULE_transformList = 45; + public static readonly RULE_transform = 46; + public static readonly RULE_transformArgument = 47; + public static readonly RULE_likeDefinition = 48; + public static readonly RULE_likeOption = 49; + public static readonly RULE_createCatalog = 50; + public static readonly RULE_createDatabase = 51; + public static readonly RULE_createView = 52; + public static readonly RULE_createFunction = 53; + public static readonly RULE_usingClause = 54; + public static readonly RULE_jarFileName = 55; + public static readonly RULE_alterTable = 56; + public static readonly RULE_renameDefinition = 57; + public static readonly RULE_setKeyValueDefinition = 58; + public static readonly RULE_addConstraint = 59; + public static readonly RULE_dropConstraint = 60; + public static readonly RULE_addUnique = 61; + public static readonly RULE_notForced = 62; + public static readonly RULE_alterView = 63; + public static readonly RULE_alterDatabase = 64; + public static readonly RULE_alterFunction = 65; + public static readonly RULE_dropCatalog = 66; + public static readonly RULE_dropTable = 67; + public static readonly RULE_dropDatabase = 68; + public static readonly RULE_dropView = 69; + public static readonly RULE_dropFunction = 70; + public static readonly RULE_insertStatement = 71; + public static readonly RULE_insertSimpleStatement = 72; + public static readonly RULE_insertPartitionDefinition = 73; + public static readonly RULE_valuesDefinition = 74; + public static readonly RULE_valuesRowDefinition = 75; + public static readonly RULE_insertMulStatementCompatibility = 76; + public static readonly RULE_insertMulStatement = 77; + public static readonly RULE_queryStatement = 78; + public static readonly RULE_valuesCaluse = 79; + public static readonly RULE_withClause = 80; + public static readonly RULE_withItem = 81; + public static readonly RULE_withItemName = 82; + public static readonly RULE_selectStatement = 83; + public static readonly RULE_selectClause = 84; + public static readonly RULE_projectItemDefinition = 85; + public static readonly RULE_overWindowItem = 86; + public static readonly RULE_fromClause = 87; + public static readonly RULE_tableExpression = 88; + public static readonly RULE_tableReference = 89; + public static readonly RULE_tablePrimary = 90; + public static readonly RULE_systemTimePeriod = 91; + public static readonly RULE_dateTimeExpression = 92; + public static readonly RULE_inlineDataValueClause = 93; + public static readonly RULE_windoTVFClause = 94; + public static readonly RULE_windowTVFExression = 95; + public static readonly RULE_windoTVFName = 96; + public static readonly RULE_windowTVFParam = 97; + public static readonly RULE_timeIntervalParamName = 98; + public static readonly RULE_columnDescriptor = 99; + public static readonly RULE_joinCondition = 100; + public static readonly RULE_whereClause = 101; + public static readonly RULE_groupByClause = 102; + public static readonly RULE_groupItemDefinition = 103; + public static readonly RULE_groupingSets = 104; + public static readonly RULE_groupingSetsNotaionName = 105; + public static readonly RULE_groupWindowFunction = 106; + public static readonly RULE_groupWindowFunctionName = 107; + public static readonly RULE_timeAttrColumn = 108; + public static readonly RULE_havingClause = 109; + public static readonly RULE_windowClause = 110; + public static readonly RULE_namedWindow = 111; + public static readonly RULE_windowSpec = 112; + public static readonly RULE_matchRecognizeClause = 113; + public static readonly RULE_orderByCaluse = 114; + public static readonly RULE_orderItemDefition = 115; + public static readonly RULE_limitClause = 116; + public static readonly RULE_partitionByClause = 117; + public static readonly RULE_quantifiers = 118; + public static readonly RULE_measuresClause = 119; + public static readonly RULE_patternDefination = 120; + public static readonly RULE_patternVariable = 121; + public static readonly RULE_outputMode = 122; + public static readonly RULE_afterMatchStrategy = 123; + public static readonly RULE_patternVariablesDefination = 124; + public static readonly RULE_windowFrame = 125; + public static readonly RULE_frameBound = 126; + public static readonly RULE_withinClause = 127; + public static readonly RULE_expression = 128; + public static readonly RULE_booleanExpression = 129; + public static readonly RULE_predicate = 130; + public static readonly RULE_likePredicate = 131; + public static readonly RULE_valueExpression = 132; + public static readonly RULE_functionCallExpression = 133; public static readonly RULE_primaryExpression = 134; public static readonly RULE_functionNameCreate = 135; public static readonly RULE_functionName = 136; - public static readonly RULE_functionParam = 137; - public static readonly RULE_dereferenceDefinition = 138; - public static readonly RULE_correlationName = 139; - public static readonly RULE_qualifiedName = 140; - public static readonly RULE_timeIntervalExpression = 141; - public static readonly RULE_errorCapturingMultiUnitsInterval = 142; - public static readonly RULE_multiUnitsInterval = 143; - public static readonly RULE_errorCapturingUnitToUnitInterval = 144; - public static readonly RULE_unitToUnitInterval = 145; - public static readonly RULE_intervalValue = 146; - public static readonly RULE_tableAlias = 147; - public static readonly RULE_errorCapturingIdentifier = 148; - public static readonly RULE_errorCapturingIdentifierExtra = 149; - public static readonly RULE_identifierList = 150; - public static readonly RULE_identifierSeq = 151; - public static readonly RULE_identifier = 152; - public static readonly RULE_unquotedIdentifier = 153; - public static readonly RULE_quotedIdentifier = 154; - public static readonly RULE_whenClause = 155; - public static readonly RULE_catalogPath = 156; - public static readonly RULE_catalogPathCreate = 157; - public static readonly RULE_databasePath = 158; - public static readonly RULE_databasePathCreate = 159; - public static readonly RULE_tablePathCreate = 160; - public static readonly RULE_tablePath = 161; - public static readonly RULE_viewPath = 162; - public static readonly RULE_viewPathCreate = 163; - public static readonly RULE_uid = 164; - public static readonly RULE_withOption = 165; - public static readonly RULE_ifNotExists = 166; - public static readonly RULE_ifExists = 167; - public static readonly RULE_tablePropertyList = 168; - public static readonly RULE_tableProperty = 169; - public static readonly RULE_tablePropertyKey = 170; - public static readonly RULE_tablePropertyValue = 171; - public static readonly RULE_logicalOperator = 172; - public static readonly RULE_comparisonOperator = 173; - public static readonly RULE_bitOperator = 174; - public static readonly RULE_mathOperator = 175; - public static readonly RULE_unaryOperator = 176; - public static readonly RULE_constant = 177; - public static readonly RULE_timePointLiteral = 178; - public static readonly RULE_stringLiteral = 179; - public static readonly RULE_decimalLiteral = 180; - public static readonly RULE_booleanLiteral = 181; - public static readonly RULE_setQuantifier = 182; - public static readonly RULE_timePointUnit = 183; - public static readonly RULE_timeIntervalUnit = 184; - public static readonly RULE_reservedKeywordsUsedAsFuncParam = 185; - public static readonly RULE_reservedKeywordsUsedAsFuncName = 186; - public static readonly RULE_nonReservedKeywords = 187; + public static readonly RULE_functionNameAndParams = 137; + public static readonly RULE_functionNameWithParams = 138; + public static readonly RULE_functionParam = 139; + public static readonly RULE_dereferenceDefinition = 140; + public static readonly RULE_correlationName = 141; + public static readonly RULE_qualifiedName = 142; + public static readonly RULE_timeIntervalExpression = 143; + public static readonly RULE_errorCapturingMultiUnitsInterval = 144; + public static readonly RULE_multiUnitsInterval = 145; + public static readonly RULE_errorCapturingUnitToUnitInterval = 146; + public static readonly RULE_unitToUnitInterval = 147; + public static readonly RULE_intervalValue = 148; + public static readonly RULE_tableAlias = 149; + public static readonly RULE_errorCapturingIdentifier = 150; + public static readonly RULE_errorCapturingIdentifierExtra = 151; + public static readonly RULE_identifierList = 152; + public static readonly RULE_identifierSeq = 153; + public static readonly RULE_identifier = 154; + public static readonly RULE_unquotedIdentifier = 155; + public static readonly RULE_quotedIdentifier = 156; + public static readonly RULE_whenClause = 157; + public static readonly RULE_catalogPath = 158; + public static readonly RULE_catalogPathCreate = 159; + public static readonly RULE_databasePath = 160; + public static readonly RULE_databasePathCreate = 161; + public static readonly RULE_tablePathCreate = 162; + public static readonly RULE_tablePath = 163; + public static readonly RULE_viewPath = 164; + public static readonly RULE_viewPathCreate = 165; + public static readonly RULE_uid = 166; + public static readonly RULE_withOption = 167; + public static readonly RULE_ifNotExists = 168; + public static readonly RULE_ifExists = 169; + public static readonly RULE_tablePropertyList = 170; + public static readonly RULE_tableProperty = 171; + public static readonly RULE_tablePropertyKey = 172; + public static readonly RULE_tablePropertyValue = 173; + public static readonly RULE_logicalOperator = 174; + public static readonly RULE_comparisonOperator = 175; + public static readonly RULE_bitOperator = 176; + public static readonly RULE_mathOperator = 177; + public static readonly RULE_unaryOperator = 178; + public static readonly RULE_constant = 179; + public static readonly RULE_timePointLiteral = 180; + public static readonly RULE_stringLiteral = 181; + public static readonly RULE_decimalLiteral = 182; + public static readonly RULE_booleanLiteral = 183; + public static readonly RULE_setQuantifier = 184; + public static readonly RULE_timePointUnit = 185; + public static readonly RULE_timeIntervalUnit = 186; + public static readonly RULE_reservedKeywordsUsedAsFuncParam = 187; + public static readonly RULE_reservedKeywordsNoParamsUsedAsFuncName = 188; + public static readonly RULE_reservedKeywordsFollowParamsUsedAsFuncName = 189; + public static readonly RULE_reservedKeywordsUsedAsFuncName = 190; + public static readonly RULE_nonReservedKeywords = 191; public static readonly literalNames = [ null, null, null, null, "'ABS'", "'ALL'", "'ALLOCATE'", "'ALLOW'", @@ -968,7 +972,7 @@ export class FlinkSqlParser extends SQLParserBase { "physicalColumnDefinition", "columnNameCreate", "columnName", "columnNameList", "columnType", "lengthOneDimension", "lengthTwoOptionalDimension", "lengthTwoStringDimension", "lengthOneTypeDimension", "mapTypeDimension", - "rowTypeDimension", "columnConstraint", "commentSpec", "metadataColumnDefinition", + "rowTypeDimension", "columnConstraint", "metadataColumnDefinition", "metadataKey", "computedColumnDefinition", "computedColumnExpression", "watermarkDefinition", "tableConstraint", "constraintName", "selfDefinitionClause", "partitionDefinition", "transformList", "transform", "transformArgument", @@ -992,8 +996,9 @@ export class FlinkSqlParser extends SQLParserBase { "quantifiers", "measuresClause", "patternDefination", "patternVariable", "outputMode", "afterMatchStrategy", "patternVariablesDefination", "windowFrame", "frameBound", "withinClause", "expression", "booleanExpression", - "predicate", "likePredicate", "valueExpression", "primaryExpression", - "functionNameCreate", "functionName", "functionParam", "dereferenceDefinition", + "predicate", "likePredicate", "valueExpression", "functionCallExpression", + "primaryExpression", "functionNameCreate", "functionName", "functionNameAndParams", + "functionNameWithParams", "functionParam", "dereferenceDefinition", "correlationName", "qualifiedName", "timeIntervalExpression", "errorCapturingMultiUnitsInterval", "multiUnitsInterval", "errorCapturingUnitToUnitInterval", "unitToUnitInterval", "intervalValue", "tableAlias", "errorCapturingIdentifier", "errorCapturingIdentifierExtra", @@ -1006,6 +1011,7 @@ export class FlinkSqlParser extends SQLParserBase { "mathOperator", "unaryOperator", "constant", "timePointLiteral", "stringLiteral", "decimalLiteral", "booleanLiteral", "setQuantifier", "timePointUnit", "timeIntervalUnit", "reservedKeywordsUsedAsFuncParam", + "reservedKeywordsNoParamsUsedAsFuncName", "reservedKeywordsFollowParamsUsedAsFuncName", "reservedKeywordsUsedAsFuncName", "nonReservedKeywords", ]; @@ -1030,21 +1036,21 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 379; + this.state = 387; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 8 || _la === 24 || _la === 72 || ((((_la - 109)) & ~0x1F) === 0 && ((1 << (_la - 109)) & 75497601) !== 0) || _la === 177 || ((((_la - 312)) & ~0x1F) === 0 && ((1 << (_la - 312)) & 822083585) !== 0) || ((((_la - 410)) & ~0x1F) === 0 && ((1 << (_la - 410)) & 142606353) !== 0) || _la === 450 || _la === 468 || ((((_la - 489)) & ~0x1F) === 0 && ((1 << (_la - 489)) & 134219777) !== 0) || _la === 521) { { { - this.state = 376; + this.state = 384; this.singleStatement(); } } - this.state = 381; + this.state = 389; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 382; + this.state = 390; this.match(FlinkSqlParser.EOF); } } @@ -1066,7 +1072,7 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new SingleStatementContext(this.context, this.state); this.enterRule(localContext, 2, FlinkSqlParser.RULE_singleStatement); try { - this.state = 389; + this.state = 397; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_ALTER: @@ -1092,14 +1098,14 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.LR_BRACKET: this.enterOuterAlt(localContext, 1); { - this.state = 384; + this.state = 392; this.sqlStatement(); - this.state = 386; + this.state = 394; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 1, this.context) ) { case 1: { - this.state = 385; + this.state = 393; this.match(FlinkSqlParser.SEMICOLON); } break; @@ -1109,7 +1115,7 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.SEMICOLON: this.enterOuterAlt(localContext, 2); { - this.state = 388; + this.state = 396; this.emptyStatement(); } break; @@ -1135,90 +1141,90 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new SqlStatementContext(this.context, this.state); this.enterRule(localContext, 4, FlinkSqlParser.RULE_sqlStatement); try { - this.state = 403; + this.state = 411; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 391; + this.state = 399; this.ddlStatement(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 392; + this.state = 400; this.dmlStatement(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 393; + this.state = 401; this.describeStatement(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 394; + this.state = 402; this.explainStatement(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 395; + this.state = 403; this.useStatement(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 396; + this.state = 404; this.showStatememt(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 397; + this.state = 405; this.loadStatement(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 398; + this.state = 406; this.unloadStatememt(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 399; + this.state = 407; this.setStatememt(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 400; + this.state = 408; this.resetStatememt(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 401; + this.state = 409; this.jarStatememt(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 402; + this.state = 410; this.dtAddStatement(); } break; @@ -1244,7 +1250,7 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 405; + this.state = 413; this.match(FlinkSqlParser.SEMICOLON); } } @@ -1266,104 +1272,104 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new DdlStatementContext(this.context, this.state); this.enterRule(localContext, 8, FlinkSqlParser.RULE_ddlStatement); try { - this.state = 421; + this.state = 429; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 4, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 407; + this.state = 415; this.createTable(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 408; + this.state = 416; this.createDatabase(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 409; + this.state = 417; this.createView(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 410; + this.state = 418; this.createFunction(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 411; + this.state = 419; this.createCatalog(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 412; + this.state = 420; this.alterTable(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 413; + this.state = 421; this.alterView(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 414; + this.state = 422; this.alterDatabase(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 415; + this.state = 423; this.alterFunction(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 416; + this.state = 424; this.dropCatalog(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 417; + this.state = 425; this.dropTable(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 418; + this.state = 426; this.dropDatabase(); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 419; + this.state = 427; this.dropView(); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 420; + this.state = 428; this.dropFunction(); } break; @@ -1387,7 +1393,7 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new DmlStatementContext(this.context, this.state); this.enterRule(localContext, 10, FlinkSqlParser.RULE_dmlStatement); try { - this.state = 425; + this.state = 433; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_SELECT: @@ -1396,7 +1402,7 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.LR_BRACKET: this.enterOuterAlt(localContext, 1); { - this.state = 423; + this.state = 431; this.queryStatement(0); } break; @@ -1405,7 +1411,7 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_INSERT: this.enterOuterAlt(localContext, 2); { - this.state = 424; + this.state = 432; this.insertStatement(); } break; @@ -1434,7 +1440,7 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 427; + this.state = 435; _la = this.tokenStream.LA(1); if(!(_la === 109 || _la === 450)) { this.errorHandler.recoverInline(this); @@ -1443,7 +1449,7 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 428; + this.state = 436; this.tablePath(); } } @@ -1467,24 +1473,24 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 430; + this.state = 438; this.match(FlinkSqlParser.KW_EXPLAIN); - this.state = 434; + this.state = 442; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_CHANGELOG_MODE: case FlinkSqlParser.KW_ESTIMATED_COST: case FlinkSqlParser.KW_JSON_EXECUTION_PLAN: { - this.state = 431; + this.state = 439; this.explainDetails(); } break; case FlinkSqlParser.KW_PLAN: { - this.state = 432; + this.state = 440; this.match(FlinkSqlParser.KW_PLAN); - this.state = 433; + this.state = 441; this.match(FlinkSqlParser.KW_FOR); } break; @@ -1500,24 +1506,24 @@ export class FlinkSqlParser extends SQLParserBase { default: break; } - this.state = 439; + this.state = 447; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 7, this.context) ) { case 1: { - this.state = 436; + this.state = 444; this.dmlStatement(); } break; case 2: { - this.state = 437; + this.state = 445; this.insertSimpleStatement(); } break; case 3: { - this.state = 438; + this.state = 446; this.insertMulStatement(); } break; @@ -1545,21 +1551,21 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 441; + this.state = 449; this.explainDetail(); - this.state = 446; + this.state = 454; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 442; + this.state = 450; this.match(FlinkSqlParser.COMMA); - this.state = 443; + this.state = 451; this.explainDetail(); } } - this.state = 448; + this.state = 456; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -1586,7 +1592,7 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 449; + this.state = 457; _la = this.tokenStream.LA(1); if(!(_la === 45 || _la === 128 || _la === 188)) { this.errorHandler.recoverInline(this); @@ -1615,33 +1621,33 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new UseStatementContext(this.context, this.state); this.enterRule(localContext, 20, FlinkSqlParser.RULE_useStatement); try { - this.state = 457; + this.state = 465; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 451; + this.state = 459; this.match(FlinkSqlParser.KW_USE); - this.state = 452; + this.state = 460; this.match(FlinkSqlParser.KW_CATALOG); - this.state = 453; + this.state = 461; this.catalogPath(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 454; + this.state = 462; this.match(FlinkSqlParser.KW_USE); - this.state = 455; + this.state = 463; this.databasePath(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 456; + this.state = 464; this.useModuleStatement(); } break; @@ -1668,25 +1674,25 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 459; + this.state = 467; this.match(FlinkSqlParser.KW_USE); - this.state = 460; + this.state = 468; this.match(FlinkSqlParser.KW_MODULES); - this.state = 461; + this.state = 469; this.uid(); - this.state = 466; + this.state = 474; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 462; + this.state = 470; this.match(FlinkSqlParser.COMMA); - this.state = 463; + this.state = 471; this.uid(); } } - this.state = 468; + this.state = 476; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -1711,15 +1717,15 @@ export class FlinkSqlParser extends SQLParserBase { this.enterRule(localContext, 24, FlinkSqlParser.RULE_showStatememt); let _la: number; try { - this.state = 511; + this.state = 519; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 18, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 469; + this.state = 477; this.match(FlinkSqlParser.KW_SHOW); - this.state = 470; + this.state = 478; _la = this.tokenStream.LA(1); if(!(_la === 42 || _la === 90 || _la === 422 || _la === 464)) { this.errorHandler.recoverInline(this); @@ -1733,11 +1739,11 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 471; + this.state = 479; this.match(FlinkSqlParser.KW_SHOW); - this.state = 472; + this.state = 480; this.match(FlinkSqlParser.KW_CURRENT); - this.state = 473; + this.state = 481; _la = this.tokenStream.LA(1); if(!(_la === 441 || _la === 447)) { this.errorHandler.recoverInline(this); @@ -1751,16 +1757,16 @@ export class FlinkSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 474; + this.state = 482; this.match(FlinkSqlParser.KW_SHOW); - this.state = 475; + this.state = 483; this.match(FlinkSqlParser.KW_TABLES); - this.state = 478; + this.state = 486; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 151 || _la === 170) { { - this.state = 476; + this.state = 484; _la = this.tokenStream.LA(1); if(!(_la === 151 || _la === 170)) { this.errorHandler.recoverInline(this); @@ -1769,17 +1775,17 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 477; + this.state = 485; this.databasePath(); } } - this.state = 481; + this.state = 489; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 202 || _la === 241) { { - this.state = 480; + this.state = 488; this.likePredicate(); } } @@ -1789,11 +1795,11 @@ export class FlinkSqlParser extends SQLParserBase { case 4: this.enterOuterAlt(localContext, 4); { - this.state = 483; + this.state = 491; this.match(FlinkSqlParser.KW_SHOW); - this.state = 484; + this.state = 492; this.match(FlinkSqlParser.KW_COLUMNS); - this.state = 485; + this.state = 493; _la = this.tokenStream.LA(1); if(!(_la === 151 || _la === 170)) { this.errorHandler.recoverInline(this); @@ -1802,28 +1808,28 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 488; + this.state = 496; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 13, this.context) ) { case 1: { - this.state = 486; + this.state = 494; this.viewPath(); } break; case 2: { - this.state = 487; + this.state = 495; this.tablePath(); } break; } - this.state = 491; + this.state = 499; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 202 || _la === 241) { { - this.state = 490; + this.state = 498; this.likePredicate(); } } @@ -1833,26 +1839,26 @@ export class FlinkSqlParser extends SQLParserBase { case 5: this.enterOuterAlt(localContext, 5); { - this.state = 493; + this.state = 501; this.match(FlinkSqlParser.KW_SHOW); - this.state = 494; + this.state = 502; this.match(FlinkSqlParser.KW_CREATE); - this.state = 499; + this.state = 507; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_TABLE: { - this.state = 495; + this.state = 503; this.match(FlinkSqlParser.KW_TABLE); - this.state = 496; + this.state = 504; this.tablePath(); } break; case FlinkSqlParser.KW_VIEW: { - this.state = 497; + this.state = 505; this.match(FlinkSqlParser.KW_VIEW); - this.state = 498; + this.state = 506; this.viewPath(); } break; @@ -1864,38 +1870,38 @@ export class FlinkSqlParser extends SQLParserBase { case 6: this.enterOuterAlt(localContext, 6); { - this.state = 501; + this.state = 509; this.match(FlinkSqlParser.KW_SHOW); - this.state = 503; + this.state = 511; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 411) { { - this.state = 502; + this.state = 510; this.match(FlinkSqlParser.KW_USER); } } - this.state = 505; + this.state = 513; this.match(FlinkSqlParser.KW_FUNCTIONS); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 506; + this.state = 514; this.match(FlinkSqlParser.KW_SHOW); - this.state = 508; + this.state = 516; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 152) { { - this.state = 507; + this.state = 515; this.match(FlinkSqlParser.KW_FULL); } } - this.state = 510; + this.state = 518; this.match(FlinkSqlParser.KW_MODULES); } break; @@ -1921,20 +1927,20 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 513; + this.state = 521; this.match(FlinkSqlParser.KW_LOAD); - this.state = 514; + this.state = 522; this.match(FlinkSqlParser.KW_MODULE); - this.state = 515; + this.state = 523; this.uid(); - this.state = 518; + this.state = 526; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 19, this.context) ) { case 1: { - this.state = 516; + this.state = 524; this.match(FlinkSqlParser.KW_WITH); - this.state = 517; + this.state = 525; this.tablePropertyList(); } break; @@ -1961,11 +1967,11 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 520; + this.state = 528; this.match(FlinkSqlParser.KW_UNLOAD); - this.state = 521; + this.state = 529; this.match(FlinkSqlParser.KW_MODULE); - this.state = 522; + this.state = 530; this.uid(); } } @@ -1989,14 +1995,14 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 524; + this.state = 532; this.match(FlinkSqlParser.KW_SET); - this.state = 526; + this.state = 534; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 20, this.context) ) { case 1: { - this.state = 525; + this.state = 533; this.tableProperty(); } break; @@ -2023,14 +2029,14 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 528; + this.state = 536; this.match(FlinkSqlParser.KW_RESET); - this.state = 530; + this.state = 538; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 21, this.context) ) { case 1: { - this.state = 529; + this.state = 537; this.tablePropertyKey(); } break; @@ -2058,7 +2064,7 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 532; + this.state = 540; _la = this.tokenStream.LA(1); if(!(_la === 437 || _la === 489)) { this.errorHandler.recoverInline(this); @@ -2067,9 +2073,9 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 533; + this.state = 541; this.match(FlinkSqlParser.KW_JAR); - this.state = 534; + this.state = 542; this.jarFileName(); } } @@ -2092,28 +2098,28 @@ export class FlinkSqlParser extends SQLParserBase { this.enterRule(localContext, 36, FlinkSqlParser.RULE_dtAddStatement); let _la: number; try { - this.state = 586; + this.state = 594; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 25, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 536; + this.state = 544; this.match(FlinkSqlParser.KW_ADD); - this.state = 537; + this.state = 545; this.match(FlinkSqlParser.KW_JAR); - this.state = 538; + this.state = 546; this.match(FlinkSqlParser.KW_WITH); - this.state = 539; + this.state = 547; this.dtFilePath(); - this.state = 542; + this.state = 550; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 540; + this.state = 548; this.match(FlinkSqlParser.KW_AS); - this.state = 541; + this.state = 549; this.uid(); } } @@ -2123,34 +2129,34 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 544; + this.state = 552; this.match(FlinkSqlParser.KW_ADD); - this.state = 545; + this.state = 553; this.match(FlinkSqlParser.KW_FILE); - this.state = 546; + this.state = 554; this.match(FlinkSqlParser.KW_WITH); - this.state = 547; + this.state = 555; this.dtFilePath(); - this.state = 550; + this.state = 558; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 548; + this.state = 556; this.match(FlinkSqlParser.KW_AS); - this.state = 549; + this.state = 557; this.uid(); } } - this.state = 554; + this.state = 562; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 311) { { - this.state = 552; + this.state = 560; this.match(FlinkSqlParser.KW_RENAME); - this.state = 553; + this.state = 561; this.uid(); } } @@ -2160,9 +2166,9 @@ export class FlinkSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 556; + this.state = 564; this.match(FlinkSqlParser.KW_ADD); - this.state = 557; + this.state = 565; _la = this.tokenStream.LA(1); if(!(((((_la - 482)) & ~0x1F) === 0 && ((1 << (_la - 482)) & 47) !== 0))) { this.errorHandler.recoverInline(this); @@ -2171,70 +2177,70 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 558; + this.state = 566; this.match(FlinkSqlParser.KW_WITH); - this.state = 559; + this.state = 567; this.dtFilePath(); - this.state = 560; + this.state = 568; this.match(FlinkSqlParser.KW_RENAME); - this.state = 561; + this.state = 569; this.uid(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 563; + this.state = 571; this.match(FlinkSqlParser.KW_ADD); - this.state = 564; + this.state = 572; this.match(FlinkSqlParser.KW_PYTHON_PARAMETER); - this.state = 565; + this.state = 573; this.dtFilePath(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 566; + this.state = 574; this.match(FlinkSqlParser.KW_ADD); - this.state = 567; + this.state = 575; this.match(FlinkSqlParser.KW_ENGINE); - this.state = 568; + this.state = 576; this.match(FlinkSqlParser.KW_FILE); - this.state = 569; + this.state = 577; this.match(FlinkSqlParser.KW_WITH); - this.state = 570; + this.state = 578; this.dtFilePath(); - this.state = 571; + this.state = 579; this.match(FlinkSqlParser.KW_RENAME); - this.state = 572; + this.state = 580; this.uid(); - this.state = 573; + this.state = 581; this.match(FlinkSqlParser.KW_KEY); - this.state = 574; + this.state = 582; this.uid(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 576; + this.state = 584; this.match(FlinkSqlParser.KW_ADD); - this.state = 577; + this.state = 585; this.match(FlinkSqlParser.KW_CONFIG); - this.state = 578; + this.state = 586; this.match(FlinkSqlParser.KW_FILE); - this.state = 579; + this.state = 587; this.match(FlinkSqlParser.KW_WITH); - this.state = 580; + this.state = 588; this.dtFilePath(); - this.state = 581; + this.state = 589; this.match(FlinkSqlParser.KW_FOR); - this.state = 582; + this.state = 590; this.uid(); - this.state = 583; + this.state = 591; this.match(FlinkSqlParser.KW_AS); - this.state = 584; + this.state = 592; this.uid(); } break; @@ -2262,7 +2268,7 @@ export class FlinkSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 592; + this.state = 600; this.errorHandler.sync(this); alternative = 1; do { @@ -2270,17 +2276,17 @@ export class FlinkSqlParser extends SQLParserBase { case 1: { { - this.state = 589; + this.state = 597; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 534) { { - this.state = 588; + this.state = 596; this.match(FlinkSqlParser.SLASH_SIGN); } } - this.state = 591; + this.state = 599; this.uid(); } } @@ -2288,7 +2294,7 @@ export class FlinkSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 594; + this.state = 602; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 27, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); @@ -2314,18 +2320,18 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 598; + this.state = 606; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 28, this.context) ) { case 1: { - this.state = 596; + this.state = 604; this.simpleCreateTable(); } break; case 2: { - this.state = 597; + this.state = 605; this.createTableAsSelect(); } break; @@ -2354,120 +2360,122 @@ export class FlinkSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 600; + this.state = 608; this.match(FlinkSqlParser.KW_CREATE); - this.state = 602; + this.state = 610; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 497) { { - this.state = 601; + this.state = 609; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 604; + this.state = 612; this.match(FlinkSqlParser.KW_TABLE); - this.state = 606; + this.state = 614; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 605; + this.state = 613; this.ifNotExists(); } } - this.state = 608; + this.state = 616; this.tablePathCreate(); - this.state = 609; + this.state = 617; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 610; + this.state = 618; this.columnOptionDefinition(); - this.state = 615; + this.state = 623; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 31, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 611; + this.state = 619; this.match(FlinkSqlParser.COMMA); - this.state = 612; + this.state = 620; this.columnOptionDefinition(); } } } - this.state = 617; + this.state = 625; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 31, this.context); } - this.state = 620; + this.state = 628; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 32, this.context) ) { case 1: { - this.state = 618; + this.state = 626; this.match(FlinkSqlParser.COMMA); - this.state = 619; + this.state = 627; this.watermarkDefinition(); } break; } - this.state = 624; + this.state = 632; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 33, this.context) ) { case 1: { - this.state = 622; + this.state = 630; this.match(FlinkSqlParser.COMMA); - this.state = 623; + this.state = 631; this.tableConstraint(); } break; } - this.state = 628; + this.state = 636; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 520) { { - this.state = 626; + this.state = 634; this.match(FlinkSqlParser.COMMA); - this.state = 627; + this.state = 635; this.selfDefinitionClause(); } } - this.state = 630; + this.state = 638; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 632; + this.state = 641; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 631; - this.commentSpec(); + this.state = 639; + this.match(FlinkSqlParser.KW_COMMENT); + this.state = 640; + localContext._comment = this.match(FlinkSqlParser.STRING_LITERAL); } } - this.state = 635; + this.state = 644; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 269) { { - this.state = 634; + this.state = 643; this.partitionDefinition(); } } - this.state = 637; + this.state = 646; this.withOption(); - this.state = 639; + this.state = 648; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 202) { { - this.state = 638; + this.state = 647; this.likeDefinition(); } } @@ -2495,32 +2503,32 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 641; + this.state = 650; this.match(FlinkSqlParser.KW_CREATE); - this.state = 642; + this.state = 651; this.match(FlinkSqlParser.KW_TABLE); - this.state = 644; + this.state = 653; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 643; + this.state = 652; this.ifNotExists(); } } - this.state = 646; + this.state = 655; this.tablePathCreate(); - this.state = 647; + this.state = 656; this.withOption(); - this.state = 650; + this.state = 659; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 648; + this.state = 657; this.match(FlinkSqlParser.KW_AS); - this.state = 649; + this.state = 658; this.queryStatement(0); } } @@ -2545,27 +2553,27 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new ColumnOptionDefinitionContext(this.context, this.state); this.enterRule(localContext, 46, FlinkSqlParser.RULE_columnOptionDefinition); try { - this.state = 655; + this.state = 664; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 40, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 652; + this.state = 661; this.physicalColumnDefinition(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 653; + this.state = 662; this.metadataColumnDefinition(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 654; + this.state = 663; this.computedColumnDefinition(); } break; @@ -2592,27 +2600,29 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 657; + this.state = 666; this.columnNameCreate(); - this.state = 658; + this.state = 667; this.columnType(); - this.state = 660; + this.state = 669; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 64 || _la === 241 || _la === 244 || _la === 288) { { - this.state = 659; + this.state = 668; this.columnConstraint(); } } - this.state = 663; + this.state = 673; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 662; - this.commentSpec(); + this.state = 671; + this.match(FlinkSqlParser.KW_COMMENT); + this.state = 672; + localContext._comment = this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -2636,20 +2646,20 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new ColumnNameCreateContext(this.context, this.state); this.enterRule(localContext, 50, FlinkSqlParser.RULE_columnNameCreate); try { - this.state = 667; + this.state = 677; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 43, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 665; + this.state = 675; this.uid(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 666; + this.state = 676; this.expression(); } break; @@ -2673,20 +2683,20 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new ColumnNameContext(this.context, this.state); this.enterRule(localContext, 52, FlinkSqlParser.RULE_columnName); try { - this.state = 671; + this.state = 681; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 44, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 669; + this.state = 679; this.uid(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 670; + this.state = 680; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } @@ -2715,27 +2725,27 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 673; + this.state = 683; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 674; + this.state = 684; this.columnName(); - this.state = 679; + this.state = 689; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 675; + this.state = 685; this.match(FlinkSqlParser.COMMA); - this.state = 676; + this.state = 686; this.columnName(); } } - this.state = 681; + this.state = 691; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 682; + this.state = 692; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2758,7 +2768,7 @@ export class FlinkSqlParser extends SQLParserBase { this.enterRule(localContext, 56, FlinkSqlParser.RULE_columnType); let _la: number; try { - this.state = 721; + this.state = 731; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_BOOLEAN: @@ -2766,11 +2776,11 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_NULL: this.enterOuterAlt(localContext, 1); { - this.state = 684; - localContext._typeName = this.tokenStream.LT(1); + this.state = 694; + localContext._colType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 32 || _la === 91 || _la === 244)) { - localContext._typeName = this.errorHandler.recoverInline(this); + localContext._colType = this.errorHandler.recoverInline(this); } else { this.errorHandler.reportMatch(this); @@ -2794,22 +2804,22 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_VARCHAR: this.enterOuterAlt(localContext, 2); { - this.state = 685; - localContext._typeName = this.tokenStream.LT(1); + this.state = 695; + localContext._colType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 28)) & ~0x1F) === 0 && ((1 << (_la - 28)) & 262275) !== 0) || _la === 92 || _la === 178 || _la === 179 || _la === 344 || _la === 360 || ((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 521) !== 0) || _la === 416 || _la === 417)) { - localContext._typeName = this.errorHandler.recoverInline(this); + localContext._colType = this.errorHandler.recoverInline(this); } else { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 687; + this.state = 697; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 516) { { - this.state = 686; + this.state = 696; this.lengthOneDimension(); } } @@ -2819,24 +2829,24 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_TIMESTAMP: this.enterOuterAlt(localContext, 3); { - this.state = 689; - localContext._typeName = this.match(FlinkSqlParser.KW_TIMESTAMP); - this.state = 691; + this.state = 699; + localContext._colType = this.match(FlinkSqlParser.KW_TIMESTAMP); + this.state = 701; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 516) { { - this.state = 690; + this.state = 700; this.lengthOneDimension(); } } - this.state = 699; + this.state = 709; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 433 || _la === 435) { { - this.state = 693; + this.state = 703; _la = this.tokenStream.LA(1); if(!(_la === 433 || _la === 435)) { this.errorHandler.recoverInline(this); @@ -2845,19 +2855,19 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 695; + this.state = 705; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 206) { { - this.state = 694; + this.state = 704; this.match(FlinkSqlParser.KW_LOCAL); } } - this.state = 697; + this.state = 707; this.match(FlinkSqlParser.KW_TIME); - this.state = 698; + this.state = 708; this.match(FlinkSqlParser.KW_ZONE); } } @@ -2871,22 +2881,22 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_NUMERIC: this.enterOuterAlt(localContext, 4); { - this.state = 701; - localContext._typeName = this.tokenStream.LT(1); + this.state = 711; + localContext._colType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 16387) !== 0) || _la === 144 || _la === 246)) { - localContext._typeName = this.errorHandler.recoverInline(this); + localContext._colType = this.errorHandler.recoverInline(this); } else { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 703; + this.state = 713; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 516) { { - this.state = 702; + this.state = 712; this.lengthTwoOptionalDimension(); } } @@ -2897,22 +2907,22 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_MULTISET: this.enterOuterAlt(localContext, 5); { - this.state = 705; - localContext._type_ = this.tokenStream.LT(1); + this.state = 715; + localContext._colType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 13 || _la === 231)) { - localContext._type_ = this.errorHandler.recoverInline(this); + localContext._colType = this.errorHandler.recoverInline(this); } else { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 707; + this.state = 717; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 507) { { - this.state = 706; + this.state = 716; this.lengthOneTypeDimension(); } } @@ -2922,14 +2932,14 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_MAP: this.enterOuterAlt(localContext, 6); { - this.state = 709; - localContext._type_ = this.match(FlinkSqlParser.KW_MAP); - this.state = 711; + this.state = 719; + localContext._colType = this.match(FlinkSqlParser.KW_MAP); + this.state = 721; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 507) { { - this.state = 710; + this.state = 720; this.mapTypeDimension(); } } @@ -2939,14 +2949,14 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_ROW: this.enterOuterAlt(localContext, 7); { - this.state = 713; - localContext._type_ = this.match(FlinkSqlParser.KW_ROW); - this.state = 715; + this.state = 723; + localContext._colType = this.match(FlinkSqlParser.KW_ROW); + this.state = 725; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 507) { + if (_la === 507 || _la === 516) { { - this.state = 714; + this.state = 724; this.rowTypeDimension(); } } @@ -2956,14 +2966,14 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_RAW: this.enterOuterAlt(localContext, 8); { - this.state = 717; - localContext._type_ = this.match(FlinkSqlParser.KW_RAW); - this.state = 719; + this.state = 727; + localContext._colType = this.match(FlinkSqlParser.KW_RAW); + this.state = 729; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 516) { { - this.state = 718; + this.state = 728; this.lengthTwoStringDimension(); } } @@ -2994,11 +3004,11 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 723; + this.state = 733; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 724; + this.state = 734; this.decimalLiteral(); - this.state = 725; + this.state = 735; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3023,23 +3033,23 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 727; + this.state = 737; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 728; + this.state = 738; this.decimalLiteral(); - this.state = 731; + this.state = 741; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 520) { { - this.state = 729; + this.state = 739; this.match(FlinkSqlParser.COMMA); - this.state = 730; + this.state = 740; this.decimalLiteral(); } } - this.state = 733; + this.state = 743; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3064,23 +3074,23 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 735; + this.state = 745; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 736; + this.state = 746; this.stringLiteral(); - this.state = 739; + this.state = 749; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 520) { { - this.state = 737; + this.state = 747; this.match(FlinkSqlParser.COMMA); - this.state = 738; + this.state = 748; this.stringLiteral(); } } - this.state = 741; + this.state = 751; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3104,11 +3114,11 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 743; + this.state = 753; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 744; + this.state = 754; this.columnType(); - this.state = 745; + this.state = 755; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3132,17 +3142,17 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 747; + this.state = 757; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 748; + this.state = 758; this.columnType(); { - this.state = 749; + this.state = 759; this.match(FlinkSqlParser.COMMA); - this.state = 750; + this.state = 760; this.columnType(); } - this.state = 752; + this.state = 762; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3165,34 +3175,73 @@ export class FlinkSqlParser extends SQLParserBase { this.enterRule(localContext, 68, FlinkSqlParser.RULE_rowTypeDimension); let _la: number; try { - this.enterOuterAlt(localContext, 1); - { - this.state = 754; - this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 755; - this.columnName(); - this.state = 756; - this.columnType(); - this.state = 763; + this.state = 792; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 520) { - { + switch (this.tokenStream.LA(1)) { + case FlinkSqlParser.LESS_SYMBOL: + this.enterOuterAlt(localContext, 1); { - this.state = 757; - this.match(FlinkSqlParser.COMMA); - this.state = 758; + this.state = 764; + this.match(FlinkSqlParser.LESS_SYMBOL); + this.state = 765; this.columnName(); - this.state = 759; + this.state = 766; this.columnType(); - } - } - this.state = 765; + this.state = 773; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - } - this.state = 766; - this.match(FlinkSqlParser.GREATER_SYMBOL); + while (_la === 520) { + { + { + this.state = 767; + this.match(FlinkSqlParser.COMMA); + this.state = 768; + this.columnName(); + this.state = 769; + this.columnType(); + } + } + this.state = 775; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 776; + this.match(FlinkSqlParser.GREATER_SYMBOL); + } + break; + case FlinkSqlParser.LR_BRACKET: + this.enterOuterAlt(localContext, 2); + { + this.state = 778; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 779; + this.columnName(); + this.state = 780; + this.columnType(); + this.state = 787; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 520) { + { + { + this.state = 781; + this.match(FlinkSqlParser.COMMA); + this.state = 782; + this.columnName(); + this.state = 783; + this.columnType(); + } + } + this.state = 789; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + this.state = 790; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + default: + throw new antlr.NoViableAltException(this); } } catch (re) { @@ -3214,37 +3263,37 @@ export class FlinkSqlParser extends SQLParserBase { this.enterRule(localContext, 70, FlinkSqlParser.RULE_columnConstraint); let _la: number; try { - this.state = 782; + this.state = 808; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_CONSTRAINT: case FlinkSqlParser.KW_PRIMARY: this.enterOuterAlt(localContext, 1); { - this.state = 770; + this.state = 796; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 64) { { - this.state = 768; + this.state = 794; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 769; + this.state = 795; this.constraintName(); } } - this.state = 772; + this.state = 798; this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 773; + this.state = 799; this.match(FlinkSqlParser.KW_KEY); - this.state = 776; + this.state = 802; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 774; + this.state = 800; this.match(FlinkSqlParser.KW_NOT); - this.state = 775; + this.state = 801; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -3255,17 +3304,17 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_NULL: this.enterOuterAlt(localContext, 2); { - this.state = 779; + this.state = 805; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 778; + this.state = 804; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 781; + this.state = 807; this.match(FlinkSqlParser.KW_NULL); } break; @@ -3287,63 +3336,37 @@ export class FlinkSqlParser extends SQLParserBase { } return localContext; } - public commentSpec(): CommentSpecContext { - let localContext = new CommentSpecContext(this.context, this.state); - this.enterRule(localContext, 72, FlinkSqlParser.RULE_commentSpec); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 784; - this.match(FlinkSqlParser.KW_COMMENT); - this.state = 785; - this.match(FlinkSqlParser.STRING_LITERAL); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public metadataColumnDefinition(): MetadataColumnDefinitionContext { let localContext = new MetadataColumnDefinitionContext(this.context, this.state); - this.enterRule(localContext, 74, FlinkSqlParser.RULE_metadataColumnDefinition); + this.enterRule(localContext, 72, FlinkSqlParser.RULE_metadataColumnDefinition); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 787; + this.state = 810; this.columnNameCreate(); - this.state = 788; + this.state = 811; this.columnType(); - this.state = 789; + this.state = 812; this.match(FlinkSqlParser.KW_METADATA); - this.state = 792; + this.state = 815; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 151) { { - this.state = 790; + this.state = 813; this.match(FlinkSqlParser.KW_FROM); - this.state = 791; + this.state = 814; this.metadataKey(); } } - this.state = 795; + this.state = 818; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 423) { { - this.state = 794; + this.state = 817; this.match(FlinkSqlParser.KW_VIRTUAL); } } @@ -3366,11 +3389,11 @@ export class FlinkSqlParser extends SQLParserBase { } public metadataKey(): MetadataKeyContext { let localContext = new MetadataKeyContext(this.context, this.state); - this.enterRule(localContext, 76, FlinkSqlParser.RULE_metadataKey); + this.enterRule(localContext, 74, FlinkSqlParser.RULE_metadataKey); try { this.enterOuterAlt(localContext, 1); { - this.state = 797; + this.state = 820; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3390,24 +3413,26 @@ export class FlinkSqlParser extends SQLParserBase { } public computedColumnDefinition(): ComputedColumnDefinitionContext { let localContext = new ComputedColumnDefinitionContext(this.context, this.state); - this.enterRule(localContext, 78, FlinkSqlParser.RULE_computedColumnDefinition); + this.enterRule(localContext, 76, FlinkSqlParser.RULE_computedColumnDefinition); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 799; + this.state = 822; this.columnNameCreate(); - this.state = 800; + this.state = 823; this.match(FlinkSqlParser.KW_AS); - this.state = 801; + this.state = 824; this.computedColumnExpression(); - this.state = 803; + this.state = 827; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 802; - this.commentSpec(); + this.state = 825; + this.match(FlinkSqlParser.KW_COMMENT); + this.state = 826; + localContext._comment = this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3429,11 +3454,11 @@ export class FlinkSqlParser extends SQLParserBase { } public computedColumnExpression(): ComputedColumnExpressionContext { let localContext = new ComputedColumnExpressionContext(this.context, this.state); - this.enterRule(localContext, 80, FlinkSqlParser.RULE_computedColumnExpression); + this.enterRule(localContext, 78, FlinkSqlParser.RULE_computedColumnExpression); try { this.enterOuterAlt(localContext, 1); { - this.state = 805; + this.state = 829; this.expression(); } } @@ -3453,19 +3478,19 @@ export class FlinkSqlParser extends SQLParserBase { } public watermarkDefinition(): WatermarkDefinitionContext { let localContext = new WatermarkDefinitionContext(this.context, this.state); - this.enterRule(localContext, 82, FlinkSqlParser.RULE_watermarkDefinition); + this.enterRule(localContext, 80, FlinkSqlParser.RULE_watermarkDefinition); try { this.enterOuterAlt(localContext, 1); { - this.state = 807; + this.state = 831; this.match(FlinkSqlParser.KW_WATERMARK); - this.state = 808; + this.state = 832; this.match(FlinkSqlParser.KW_FOR); - this.state = 809; + this.state = 833; this.columnName(); - this.state = 810; + this.state = 834; this.match(FlinkSqlParser.KW_AS); - this.state = 811; + this.state = 835; this.expression(); } } @@ -3485,32 +3510,32 @@ export class FlinkSqlParser extends SQLParserBase { } public tableConstraint(): TableConstraintContext { let localContext = new TableConstraintContext(this.context, this.state); - this.enterRule(localContext, 84, FlinkSqlParser.RULE_tableConstraint); + this.enterRule(localContext, 82, FlinkSqlParser.RULE_tableConstraint); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 815; + this.state = 839; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 64) { { - this.state = 813; + this.state = 837; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 814; + this.state = 838; this.constraintName(); } } - this.state = 817; + this.state = 841; this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 818; + this.state = 842; this.match(FlinkSqlParser.KW_KEY); - this.state = 819; + this.state = 843; this.columnNameList(); - this.state = 820; + this.state = 844; this.match(FlinkSqlParser.KW_NOT); - this.state = 821; + this.state = 845; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -3530,11 +3555,11 @@ export class FlinkSqlParser extends SQLParserBase { } public constraintName(): ConstraintNameContext { let localContext = new ConstraintNameContext(this.context, this.state); - this.enterRule(localContext, 86, FlinkSqlParser.RULE_constraintName); + this.enterRule(localContext, 84, FlinkSqlParser.RULE_constraintName); try { this.enterOuterAlt(localContext, 1); { - this.state = 823; + this.state = 847; this.identifier(); } } @@ -3554,15 +3579,15 @@ export class FlinkSqlParser extends SQLParserBase { } public selfDefinitionClause(): SelfDefinitionClauseContext { let localContext = new SelfDefinitionClauseContext(this.context, this.state); - this.enterRule(localContext, 88, FlinkSqlParser.RULE_selfDefinitionClause); + this.enterRule(localContext, 86, FlinkSqlParser.RULE_selfDefinitionClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 825; + this.state = 849; this.match(FlinkSqlParser.KW_PERIOD); - this.state = 826; + this.state = 850; this.match(FlinkSqlParser.KW_FOR); - this.state = 827; + this.state = 851; this.match(FlinkSqlParser.KW_SYSTEM_TIME); } } @@ -3582,15 +3607,15 @@ export class FlinkSqlParser extends SQLParserBase { } public partitionDefinition(): PartitionDefinitionContext { let localContext = new PartitionDefinitionContext(this.context, this.state); - this.enterRule(localContext, 90, FlinkSqlParser.RULE_partitionDefinition); + this.enterRule(localContext, 88, FlinkSqlParser.RULE_partitionDefinition); try { this.enterOuterAlt(localContext, 1); { - this.state = 829; + this.state = 853; this.match(FlinkSqlParser.KW_PARTITIONED); - this.state = 830; + this.state = 854; this.match(FlinkSqlParser.KW_BY); - this.state = 831; + this.state = 855; this.transformList(); } } @@ -3610,32 +3635,32 @@ export class FlinkSqlParser extends SQLParserBase { } public transformList(): TransformListContext { let localContext = new TransformListContext(this.context, this.state); - this.enterRule(localContext, 92, FlinkSqlParser.RULE_transformList); + this.enterRule(localContext, 90, FlinkSqlParser.RULE_transformList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 833; + this.state = 857; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 834; + this.state = 858; this.transform(); - this.state = 839; + this.state = 863; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 835; + this.state = 859; this.match(FlinkSqlParser.COMMA); - this.state = 836; + this.state = 860; this.transform(); } } - this.state = 841; + this.state = 865; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 842; + this.state = 866; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3655,17 +3680,17 @@ export class FlinkSqlParser extends SQLParserBase { } public transform(): TransformContext { let localContext = new TransformContext(this.context, this.state); - this.enterRule(localContext, 94, FlinkSqlParser.RULE_transform); + this.enterRule(localContext, 92, FlinkSqlParser.RULE_transform); let _la: number; try { - this.state = 856; + this.state = 880; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 69, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 71, this.context) ) { case 1: localContext = new IdentityTransformContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 844; + this.state = 868; this.columnName(); } break; @@ -3673,27 +3698,27 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ApplyTransformContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 845; + this.state = 869; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 846; + this.state = 870; this.transformArgument(); - this.state = 851; + this.state = 875; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 847; + this.state = 871; this.match(FlinkSqlParser.COMMA); - this.state = 848; + this.state = 872; this.transformArgument(); } } - this.state = 853; + this.state = 877; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 854; + this.state = 878; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3715,22 +3740,22 @@ export class FlinkSqlParser extends SQLParserBase { } public transformArgument(): TransformArgumentContext { let localContext = new TransformArgumentContext(this.context, this.state); - this.enterRule(localContext, 96, FlinkSqlParser.RULE_transformArgument); + this.enterRule(localContext, 94, FlinkSqlParser.RULE_transformArgument); try { - this.state = 860; + this.state = 884; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 70, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 72, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 858; + this.state = 882; this.qualifiedName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 859; + this.state = 883; this.constant(); } break; @@ -3752,37 +3777,37 @@ export class FlinkSqlParser extends SQLParserBase { } public likeDefinition(): LikeDefinitionContext { let localContext = new LikeDefinitionContext(this.context, this.state); - this.enterRule(localContext, 98, FlinkSqlParser.RULE_likeDefinition); + this.enterRule(localContext, 96, FlinkSqlParser.RULE_likeDefinition); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 862; + this.state = 886; this.match(FlinkSqlParser.KW_LIKE); - this.state = 863; + this.state = 887; this.tablePath(); - this.state = 872; + this.state = 896; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 72, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 74, this.context) ) { case 1: { - this.state = 864; + this.state = 888; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 868; + this.state = 892; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 266 || _la === 455 || _la === 462) { { { - this.state = 865; + this.state = 889; this.likeOption(); } } - this.state = 870; + this.state = 894; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 871; + this.state = 895; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3805,17 +3830,17 @@ export class FlinkSqlParser extends SQLParserBase { } public likeOption(): LikeOptionContext { let localContext = new LikeOptionContext(this.context, this.state); - this.enterRule(localContext, 100, FlinkSqlParser.RULE_likeOption); + this.enterRule(localContext, 98, FlinkSqlParser.RULE_likeOption); let _la: number; try { - this.state = 878; + this.state = 902; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 73, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 75, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { { - this.state = 874; + this.state = 898; _la = this.tokenStream.LA(1); if(!(_la === 455 || _la === 462)) { this.errorHandler.recoverInline(this); @@ -3824,7 +3849,7 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 875; + this.state = 899; _la = this.tokenStream.LA(1); if(!(_la === 5 || _la === 270 || _la === 444)) { this.errorHandler.recoverInline(this); @@ -3840,7 +3865,7 @@ export class FlinkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 2); { { - this.state = 876; + this.state = 900; _la = this.tokenStream.LA(1); if(!(_la === 266 || _la === 455 || _la === 462)) { this.errorHandler.recoverInline(this); @@ -3849,7 +3874,7 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 877; + this.state = 901; _la = this.tokenStream.LA(1); if(!(_la === 425 || _la === 458 || _la === 477)) { this.errorHandler.recoverInline(this); @@ -3879,17 +3904,17 @@ export class FlinkSqlParser extends SQLParserBase { } public createCatalog(): CreateCatalogContext { let localContext = new CreateCatalogContext(this.context, this.state); - this.enterRule(localContext, 102, FlinkSqlParser.RULE_createCatalog); + this.enterRule(localContext, 100, FlinkSqlParser.RULE_createCatalog); try { this.enterOuterAlt(localContext, 1); { - this.state = 880; + this.state = 904; this.match(FlinkSqlParser.KW_CREATE); - this.state = 881; + this.state = 905; this.match(FlinkSqlParser.KW_CATALOG); - this.state = 882; + this.state = 906; this.catalogPathCreate(); - this.state = 883; + this.state = 907; this.withOption(); } } @@ -3909,38 +3934,40 @@ export class FlinkSqlParser extends SQLParserBase { } public createDatabase(): CreateDatabaseContext { let localContext = new CreateDatabaseContext(this.context, this.state); - this.enterRule(localContext, 104, FlinkSqlParser.RULE_createDatabase); + this.enterRule(localContext, 102, FlinkSqlParser.RULE_createDatabase); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 885; + this.state = 909; this.match(FlinkSqlParser.KW_CREATE); - this.state = 886; + this.state = 910; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 888; + this.state = 912; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 887; + this.state = 911; this.ifNotExists(); } } - this.state = 890; + this.state = 914; this.databasePathCreate(); - this.state = 892; + this.state = 917; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 891; - this.commentSpec(); + this.state = 915; + this.match(FlinkSqlParser.KW_COMMENT); + this.state = 916; + localContext._comment = this.match(FlinkSqlParser.STRING_LITERAL); } } - this.state = 894; + this.state = 919; this.withOption(); } } @@ -3960,60 +3987,62 @@ export class FlinkSqlParser extends SQLParserBase { } public createView(): CreateViewContext { let localContext = new CreateViewContext(this.context, this.state); - this.enterRule(localContext, 106, FlinkSqlParser.RULE_createView); + this.enterRule(localContext, 104, FlinkSqlParser.RULE_createView); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 896; + this.state = 921; this.match(FlinkSqlParser.KW_CREATE); - this.state = 898; + this.state = 923; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 497) { { - this.state = 897; + this.state = 922; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 900; + this.state = 925; this.match(FlinkSqlParser.KW_VIEW); - this.state = 902; + this.state = 927; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 901; + this.state = 926; this.ifNotExists(); } } - this.state = 904; + this.state = 929; this.viewPathCreate(); - this.state = 906; + this.state = 931; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 516) { { - this.state = 905; + this.state = 930; this.columnNameList(); } } - this.state = 909; + this.state = 935; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 908; - this.commentSpec(); + this.state = 933; + this.match(FlinkSqlParser.KW_COMMENT); + this.state = 934; + localContext._comment = this.match(FlinkSqlParser.STRING_LITERAL); } } - this.state = 911; + this.state = 937; this.match(FlinkSqlParser.KW_AS); - this.state = 912; + this.state = 938; this.queryStatement(0); } } @@ -4033,57 +4062,57 @@ export class FlinkSqlParser extends SQLParserBase { } public createFunction(): CreateFunctionContext { let localContext = new CreateFunctionContext(this.context, this.state); - this.enterRule(localContext, 108, FlinkSqlParser.RULE_createFunction); + this.enterRule(localContext, 106, FlinkSqlParser.RULE_createFunction); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 914; + this.state = 940; this.match(FlinkSqlParser.KW_CREATE); - this.state = 918; + this.state = 944; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 80, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 82, this.context) ) { case 1: { - this.state = 915; + this.state = 941; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 916; + this.state = 942; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 917; + this.state = 943; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 920; + this.state = 946; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 922; + this.state = 948; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 921; + this.state = 947; this.ifNotExists(); } } - this.state = 924; + this.state = 950; this.functionNameCreate(); - this.state = 925; + this.state = 951; this.match(FlinkSqlParser.KW_AS); - this.state = 926; + this.state = 952; this.identifier(); - this.state = 929; + this.state = 955; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 195) { { - this.state = 927; + this.state = 953; this.match(FlinkSqlParser.KW_LANGUAGE); - this.state = 928; + this.state = 954; _la = this.tokenStream.LA(1); if(!(_la === 330 || _la === 465 || _la === 481)) { this.errorHandler.recoverInline(this); @@ -4095,12 +4124,12 @@ export class FlinkSqlParser extends SQLParserBase { } } - this.state = 932; + this.state = 958; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 412) { { - this.state = 931; + this.state = 957; this.usingClause(); } } @@ -4123,32 +4152,32 @@ export class FlinkSqlParser extends SQLParserBase { } public usingClause(): UsingClauseContext { let localContext = new UsingClauseContext(this.context, this.state); - this.enterRule(localContext, 110, FlinkSqlParser.RULE_usingClause); + this.enterRule(localContext, 108, FlinkSqlParser.RULE_usingClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 934; + this.state = 960; this.match(FlinkSqlParser.KW_USING); - this.state = 935; + this.state = 961; this.match(FlinkSqlParser.KW_JAR); - this.state = 936; + this.state = 962; this.jarFileName(); - this.state = 942; + this.state = 968; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 937; + this.state = 963; this.match(FlinkSqlParser.COMMA); - this.state = 938; + this.state = 964; this.match(FlinkSqlParser.KW_JAR); - this.state = 939; + this.state = 965; this.jarFileName(); } } - this.state = 944; + this.state = 970; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -4170,11 +4199,11 @@ export class FlinkSqlParser extends SQLParserBase { } public jarFileName(): JarFileNameContext { let localContext = new JarFileNameContext(this.context, this.state); - this.enterRule(localContext, 112, FlinkSqlParser.RULE_jarFileName); + this.enterRule(localContext, 110, FlinkSqlParser.RULE_jarFileName); try { this.enterOuterAlt(localContext, 1); { - this.state = 945; + this.state = 971; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -4194,57 +4223,57 @@ export class FlinkSqlParser extends SQLParserBase { } public alterTable(): AlterTableContext { let localContext = new AlterTableContext(this.context, this.state); - this.enterRule(localContext, 114, FlinkSqlParser.RULE_alterTable); + this.enterRule(localContext, 112, FlinkSqlParser.RULE_alterTable); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 947; + this.state = 973; this.match(FlinkSqlParser.KW_ALTER); - this.state = 948; + this.state = 974; this.match(FlinkSqlParser.KW_TABLE); - this.state = 950; + this.state = 976; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 949; + this.state = 975; this.ifExists(); } } - this.state = 952; + this.state = 978; this.tablePath(); - this.state = 958; + this.state = 984; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 86, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 88, this.context) ) { case 1: { - this.state = 953; + this.state = 979; this.renameDefinition(); } break; case 2: { - this.state = 954; + this.state = 980; this.setKeyValueDefinition(); } break; case 3: { - this.state = 955; + this.state = 981; this.addConstraint(); } break; case 4: { - this.state = 956; + this.state = 982; this.dropConstraint(); } break; case 5: { - this.state = 957; + this.state = 983; this.addUnique(); } break; @@ -4267,26 +4296,26 @@ export class FlinkSqlParser extends SQLParserBase { } public renameDefinition(): RenameDefinitionContext { let localContext = new RenameDefinitionContext(this.context, this.state); - this.enterRule(localContext, 116, FlinkSqlParser.RULE_renameDefinition); + this.enterRule(localContext, 114, FlinkSqlParser.RULE_renameDefinition); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 960; + this.state = 986; this.match(FlinkSqlParser.KW_RENAME); - this.state = 962; + this.state = 988; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (((((_la - 437)) & ~0x1F) === 0 && ((1 << (_la - 437)) & 4294967295) !== 0) || ((((_la - 469)) & ~0x1F) === 0 && ((1 << (_la - 469)) & 4294967295) !== 0) || ((((_la - 501)) & ~0x1F) === 0 && ((1 << (_la - 501)) & 15) !== 0) || ((((_la - 537)) & ~0x1F) === 0 && ((1 << (_la - 537)) & 19) !== 0)) { { - this.state = 961; + this.state = 987; this.uid(); } } - this.state = 964; + this.state = 990; this.match(FlinkSqlParser.KW_TO); - this.state = 965; + this.state = 991; this.uid(); } } @@ -4306,13 +4335,13 @@ export class FlinkSqlParser extends SQLParserBase { } public setKeyValueDefinition(): SetKeyValueDefinitionContext { let localContext = new SetKeyValueDefinitionContext(this.context, this.state); - this.enterRule(localContext, 118, FlinkSqlParser.RULE_setKeyValueDefinition); + this.enterRule(localContext, 116, FlinkSqlParser.RULE_setKeyValueDefinition); try { this.enterOuterAlt(localContext, 1); { - this.state = 967; + this.state = 993; this.match(FlinkSqlParser.KW_SET); - this.state = 968; + this.state = 994; this.tablePropertyList(); } } @@ -4332,29 +4361,29 @@ export class FlinkSqlParser extends SQLParserBase { } public addConstraint(): AddConstraintContext { let localContext = new AddConstraintContext(this.context, this.state); - this.enterRule(localContext, 120, FlinkSqlParser.RULE_addConstraint); + this.enterRule(localContext, 118, FlinkSqlParser.RULE_addConstraint); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 970; + this.state = 996; this.match(FlinkSqlParser.KW_ADD); - this.state = 971; + this.state = 997; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 972; + this.state = 998; this.constraintName(); - this.state = 973; + this.state = 999; this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 974; + this.state = 1000; this.match(FlinkSqlParser.KW_KEY); - this.state = 975; + this.state = 1001; this.columnNameList(); - this.state = 977; + this.state = 1003; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 976; + this.state = 1002; this.notForced(); } } @@ -4377,15 +4406,15 @@ export class FlinkSqlParser extends SQLParserBase { } public dropConstraint(): DropConstraintContext { let localContext = new DropConstraintContext(this.context, this.state); - this.enterRule(localContext, 122, FlinkSqlParser.RULE_dropConstraint); + this.enterRule(localContext, 120, FlinkSqlParser.RULE_dropConstraint); try { this.enterOuterAlt(localContext, 1); { - this.state = 979; + this.state = 1005; this.match(FlinkSqlParser.KW_DROP); - this.state = 980; + this.state = 1006; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 981; + this.state = 1007; this.constraintName(); } } @@ -4405,15 +4434,15 @@ export class FlinkSqlParser extends SQLParserBase { } public addUnique(): AddUniqueContext { let localContext = new AddUniqueContext(this.context, this.state); - this.enterRule(localContext, 124, FlinkSqlParser.RULE_addUnique); + this.enterRule(localContext, 122, FlinkSqlParser.RULE_addUnique); try { this.enterOuterAlt(localContext, 1); { - this.state = 983; + this.state = 1009; this.match(FlinkSqlParser.KW_ADD); - this.state = 984; + this.state = 1010; this.match(FlinkSqlParser.KW_UNIQUE); - this.state = 985; + this.state = 1011; this.columnNameList(); } } @@ -4433,13 +4462,13 @@ export class FlinkSqlParser extends SQLParserBase { } public notForced(): NotForcedContext { let localContext = new NotForcedContext(this.context, this.state); - this.enterRule(localContext, 126, FlinkSqlParser.RULE_notForced); + this.enterRule(localContext, 124, FlinkSqlParser.RULE_notForced); try { this.enterOuterAlt(localContext, 1); { - this.state = 987; + this.state = 1013; this.match(FlinkSqlParser.KW_NOT); - this.state = 988; + this.state = 1014; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -4459,30 +4488,30 @@ export class FlinkSqlParser extends SQLParserBase { } public alterView(): AlterViewContext { let localContext = new AlterViewContext(this.context, this.state); - this.enterRule(localContext, 128, FlinkSqlParser.RULE_alterView); + this.enterRule(localContext, 126, FlinkSqlParser.RULE_alterView); try { this.enterOuterAlt(localContext, 1); { - this.state = 990; + this.state = 1016; this.match(FlinkSqlParser.KW_ALTER); - this.state = 991; + this.state = 1017; this.match(FlinkSqlParser.KW_VIEW); - this.state = 992; + this.state = 1018; this.viewPath(); - this.state = 996; + this.state = 1022; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_RENAME: { - this.state = 993; + this.state = 1019; this.renameDefinition(); } break; case FlinkSqlParser.KW_AS: { - this.state = 994; + this.state = 1020; this.match(FlinkSqlParser.KW_AS); - this.state = 995; + this.state = 1021; this.queryStatement(0); } break; @@ -4507,17 +4536,17 @@ export class FlinkSqlParser extends SQLParserBase { } public alterDatabase(): AlterDatabaseContext { let localContext = new AlterDatabaseContext(this.context, this.state); - this.enterRule(localContext, 130, FlinkSqlParser.RULE_alterDatabase); + this.enterRule(localContext, 128, FlinkSqlParser.RULE_alterDatabase); try { this.enterOuterAlt(localContext, 1); { - this.state = 998; + this.state = 1024; this.match(FlinkSqlParser.KW_ALTER); - this.state = 999; + this.state = 1025; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 1000; + this.state = 1026; this.databasePath(); - this.state = 1001; + this.state = 1027; this.setKeyValueDefinition(); } } @@ -4537,57 +4566,57 @@ export class FlinkSqlParser extends SQLParserBase { } public alterFunction(): AlterFunctionContext { let localContext = new AlterFunctionContext(this.context, this.state); - this.enterRule(localContext, 132, FlinkSqlParser.RULE_alterFunction); + this.enterRule(localContext, 130, FlinkSqlParser.RULE_alterFunction); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1003; + this.state = 1029; this.match(FlinkSqlParser.KW_ALTER); - this.state = 1007; + this.state = 1033; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 90, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 92, this.context) ) { case 1: { - this.state = 1004; + this.state = 1030; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 1005; + this.state = 1031; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 1006; + this.state = 1032; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 1009; + this.state = 1035; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 1011; + this.state = 1037; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 91, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 93, this.context) ) { case 1: { - this.state = 1010; + this.state = 1036; this.ifExists(); } break; } - this.state = 1013; + this.state = 1039; this.functionName(); - this.state = 1014; + this.state = 1040; this.match(FlinkSqlParser.KW_AS); - this.state = 1015; + this.state = 1041; this.identifier(); - this.state = 1018; + this.state = 1044; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 195) { { - this.state = 1016; + this.state = 1042; this.match(FlinkSqlParser.KW_LANGUAGE); - this.state = 1017; + this.state = 1043; _la = this.tokenStream.LA(1); if(!(_la === 330 || _la === 465 || _la === 481)) { this.errorHandler.recoverInline(this); @@ -4617,26 +4646,26 @@ export class FlinkSqlParser extends SQLParserBase { } public dropCatalog(): DropCatalogContext { let localContext = new DropCatalogContext(this.context, this.state); - this.enterRule(localContext, 134, FlinkSqlParser.RULE_dropCatalog); + this.enterRule(localContext, 132, FlinkSqlParser.RULE_dropCatalog); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1020; + this.state = 1046; this.match(FlinkSqlParser.KW_DROP); - this.state = 1021; + this.state = 1047; this.match(FlinkSqlParser.KW_CATALOG); - this.state = 1023; + this.state = 1049; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 1022; + this.state = 1048; this.ifExists(); } } - this.state = 1025; + this.state = 1051; this.catalogPath(); } } @@ -4656,36 +4685,36 @@ export class FlinkSqlParser extends SQLParserBase { } public dropTable(): DropTableContext { let localContext = new DropTableContext(this.context, this.state); - this.enterRule(localContext, 136, FlinkSqlParser.RULE_dropTable); + this.enterRule(localContext, 134, FlinkSqlParser.RULE_dropTable); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1027; + this.state = 1053; this.match(FlinkSqlParser.KW_DROP); - this.state = 1029; + this.state = 1055; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 497) { { - this.state = 1028; + this.state = 1054; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 1031; + this.state = 1057; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1033; + this.state = 1059; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 1032; + this.state = 1058; this.ifExists(); } } - this.state = 1035; + this.state = 1061; this.tablePath(); } } @@ -4705,33 +4734,33 @@ export class FlinkSqlParser extends SQLParserBase { } public dropDatabase(): DropDatabaseContext { let localContext = new DropDatabaseContext(this.context, this.state); - this.enterRule(localContext, 138, FlinkSqlParser.RULE_dropDatabase); + this.enterRule(localContext, 136, FlinkSqlParser.RULE_dropDatabase); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1037; + this.state = 1063; this.match(FlinkSqlParser.KW_DROP); - this.state = 1038; + this.state = 1064; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 1040; + this.state = 1066; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 1039; + this.state = 1065; this.ifExists(); } } - this.state = 1042; + this.state = 1068; this.databasePath(); - this.state = 1044; + this.state = 1070; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 440 || _la === 490) { { - this.state = 1043; + this.state = 1069; localContext._dropType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 440 || _la === 490)) { @@ -4762,36 +4791,36 @@ export class FlinkSqlParser extends SQLParserBase { } public dropView(): DropViewContext { let localContext = new DropViewContext(this.context, this.state); - this.enterRule(localContext, 140, FlinkSqlParser.RULE_dropView); + this.enterRule(localContext, 138, FlinkSqlParser.RULE_dropView); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1046; + this.state = 1072; this.match(FlinkSqlParser.KW_DROP); - this.state = 1048; + this.state = 1074; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 497) { { - this.state = 1047; + this.state = 1073; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 1050; + this.state = 1076; this.match(FlinkSqlParser.KW_VIEW); - this.state = 1052; + this.state = 1078; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 167) { { - this.state = 1051; + this.state = 1077; this.ifExists(); } } - this.state = 1054; + this.state = 1080; this.viewPath(); } } @@ -4811,43 +4840,43 @@ export class FlinkSqlParser extends SQLParserBase { } public dropFunction(): DropFunctionContext { let localContext = new DropFunctionContext(this.context, this.state); - this.enterRule(localContext, 142, FlinkSqlParser.RULE_dropFunction); + this.enterRule(localContext, 140, FlinkSqlParser.RULE_dropFunction); try { this.enterOuterAlt(localContext, 1); { - this.state = 1056; + this.state = 1082; this.match(FlinkSqlParser.KW_DROP); - this.state = 1060; + this.state = 1086; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 100, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 102, this.context) ) { case 1: { - this.state = 1057; + this.state = 1083; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 1058; + this.state = 1084; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 1059; + this.state = 1085; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 1062; + this.state = 1088; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 1064; + this.state = 1090; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 101, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 103, this.context) ) { case 1: { - this.state = 1063; + this.state = 1089; this.ifExists(); } break; } - this.state = 1066; + this.state = 1092; this.functionName(); } } @@ -4867,27 +4896,27 @@ export class FlinkSqlParser extends SQLParserBase { } public insertStatement(): InsertStatementContext { let localContext = new InsertStatementContext(this.context, this.state); - this.enterRule(localContext, 144, FlinkSqlParser.RULE_insertStatement); + this.enterRule(localContext, 142, FlinkSqlParser.RULE_insertStatement); let _la: number; try { - this.state = 1075; + this.state = 1101; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 103, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 105, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { { - this.state = 1069; + this.state = 1095; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 1068; + this.state = 1094; this.match(FlinkSqlParser.KW_EXECUTE); } } - this.state = 1071; + this.state = 1097; this.insertSimpleStatement(); } } @@ -4895,7 +4924,7 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1072; + this.state = 1098; this.insertMulStatementCompatibility(); } break; @@ -4903,9 +4932,9 @@ export class FlinkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 3); { { - this.state = 1073; + this.state = 1099; this.match(FlinkSqlParser.KW_EXECUTE); - this.state = 1074; + this.state = 1100; this.insertMulStatement(); } } @@ -4928,14 +4957,14 @@ export class FlinkSqlParser extends SQLParserBase { } public insertSimpleStatement(): InsertSimpleStatementContext { let localContext = new InsertSimpleStatementContext(this.context, this.state); - this.enterRule(localContext, 146, FlinkSqlParser.RULE_insertSimpleStatement); + this.enterRule(localContext, 144, FlinkSqlParser.RULE_insertSimpleStatement); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1077; + this.state = 1103; this.match(FlinkSqlParser.KW_INSERT); - this.state = 1078; + this.state = 1104; _la = this.tokenStream.LA(1); if(!(_la === 183 || _la === 265)) { this.errorHandler.recoverInline(this); @@ -4944,40 +4973,40 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1079; + this.state = 1105; this.tablePath(); - this.state = 1088; + this.state = 1114; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 106, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 108, this.context) ) { case 1: { - this.state = 1081; + this.state = 1107; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 268) { { - this.state = 1080; + this.state = 1106; this.insertPartitionDefinition(); } } - this.state = 1084; + this.state = 1110; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 105, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 107, this.context) ) { case 1: { - this.state = 1083; + this.state = 1109; this.columnNameList(); } break; } - this.state = 1086; + this.state = 1112; this.queryStatement(0); } break; case 2: { - this.state = 1087; + this.state = 1113; this.valuesDefinition(); } break; @@ -5000,13 +5029,13 @@ export class FlinkSqlParser extends SQLParserBase { } public insertPartitionDefinition(): InsertPartitionDefinitionContext { let localContext = new InsertPartitionDefinitionContext(this.context, this.state); - this.enterRule(localContext, 148, FlinkSqlParser.RULE_insertPartitionDefinition); + this.enterRule(localContext, 146, FlinkSqlParser.RULE_insertPartitionDefinition); try { this.enterOuterAlt(localContext, 1); { - this.state = 1090; + this.state = 1116; this.match(FlinkSqlParser.KW_PARTITION); - this.state = 1091; + this.state = 1117; this.tablePropertyList(); } } @@ -5026,28 +5055,28 @@ export class FlinkSqlParser extends SQLParserBase { } public valuesDefinition(): ValuesDefinitionContext { let localContext = new ValuesDefinitionContext(this.context, this.state); - this.enterRule(localContext, 150, FlinkSqlParser.RULE_valuesDefinition); + this.enterRule(localContext, 148, FlinkSqlParser.RULE_valuesDefinition); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1093; + this.state = 1119; this.match(FlinkSqlParser.KW_VALUES); - this.state = 1094; + this.state = 1120; this.valuesRowDefinition(); - this.state = 1099; + this.state = 1125; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1095; + this.state = 1121; this.match(FlinkSqlParser.COMMA); - this.state = 1096; + this.state = 1122; this.valuesRowDefinition(); } } - this.state = 1101; + this.state = 1127; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -5069,32 +5098,32 @@ export class FlinkSqlParser extends SQLParserBase { } public valuesRowDefinition(): ValuesRowDefinitionContext { let localContext = new ValuesRowDefinitionContext(this.context, this.state); - this.enterRule(localContext, 152, FlinkSqlParser.RULE_valuesRowDefinition); + this.enterRule(localContext, 150, FlinkSqlParser.RULE_valuesRowDefinition); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1102; + this.state = 1128; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1103; + this.state = 1129; this.constant(); - this.state = 1108; + this.state = 1134; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1104; + this.state = 1130; this.match(FlinkSqlParser.COMMA); - this.state = 1105; + this.state = 1131; this.constant(); } } - this.state = 1110; + this.state = 1136; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1111; + this.state = 1137; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5114,36 +5143,36 @@ export class FlinkSqlParser extends SQLParserBase { } public insertMulStatementCompatibility(): InsertMulStatementCompatibilityContext { let localContext = new InsertMulStatementCompatibilityContext(this.context, this.state); - this.enterRule(localContext, 154, FlinkSqlParser.RULE_insertMulStatementCompatibility); + this.enterRule(localContext, 152, FlinkSqlParser.RULE_insertMulStatementCompatibility); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1113; + this.state = 1139; this.match(FlinkSqlParser.KW_BEGIN); - this.state = 1114; + this.state = 1140; this.match(FlinkSqlParser.KW_STATEMENT); - this.state = 1115; + this.state = 1141; this.match(FlinkSqlParser.KW_SET); - this.state = 1116; + this.state = 1142; this.match(FlinkSqlParser.SEMICOLON); - this.state = 1120; + this.state = 1146; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 1117; + this.state = 1143; this.insertSimpleStatement(); - this.state = 1118; + this.state = 1144; this.match(FlinkSqlParser.SEMICOLON); } } - this.state = 1122; + this.state = 1148; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 177); - this.state = 1124; + this.state = 1150; this.match(FlinkSqlParser.KW_END); } } @@ -5163,34 +5192,34 @@ export class FlinkSqlParser extends SQLParserBase { } public insertMulStatement(): InsertMulStatementContext { let localContext = new InsertMulStatementContext(this.context, this.state); - this.enterRule(localContext, 156, FlinkSqlParser.RULE_insertMulStatement); + this.enterRule(localContext, 154, FlinkSqlParser.RULE_insertMulStatement); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1126; + this.state = 1152; this.match(FlinkSqlParser.KW_STATEMENT); - this.state = 1127; + this.state = 1153; this.match(FlinkSqlParser.KW_SET); - this.state = 1128; + this.state = 1154; this.match(FlinkSqlParser.KW_BEGIN); - this.state = 1132; + this.state = 1158; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 1129; + this.state = 1155; this.insertSimpleStatement(); - this.state = 1130; + this.state = 1156; this.match(FlinkSqlParser.SEMICOLON); } } - this.state = 1134; + this.state = 1160; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 177); - this.state = 1136; + this.state = 1162; this.match(FlinkSqlParser.KW_END); } } @@ -5220,60 +5249,60 @@ export class FlinkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new QueryStatementContext(this.context, parentState); let previousContext = localContext; - let _startState = 158; - this.enterRecursionRule(localContext, 158, FlinkSqlParser.RULE_queryStatement, _p); + let _startState = 156; + this.enterRecursionRule(localContext, 156, FlinkSqlParser.RULE_queryStatement, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1161; + this.state = 1187; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 115, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 117, this.context) ) { case 1: { - this.state = 1139; + this.state = 1165; this.valuesCaluse(); } break; case 2: { - this.state = 1140; + this.state = 1166; this.withClause(); - this.state = 1141; + this.state = 1167; this.queryStatement(5); } break; case 3: { - this.state = 1143; + this.state = 1169; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1144; + this.state = 1170; this.queryStatement(0); - this.state = 1145; + this.state = 1171; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: { - this.state = 1147; + this.state = 1173; this.selectClause(); - this.state = 1149; + this.state = 1175; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 111, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 113, this.context) ) { case 1: { - this.state = 1148; + this.state = 1174; this.orderByCaluse(); } break; } - this.state = 1152; + this.state = 1178; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 112, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 114, this.context) ) { case 1: { - this.state = 1151; + this.state = 1177; this.limitClause(); } break; @@ -5282,24 +5311,24 @@ export class FlinkSqlParser extends SQLParserBase { break; case 5: { - this.state = 1154; + this.state = 1180; this.selectStatement(); - this.state = 1156; + this.state = 1182; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 113, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 115, this.context) ) { case 1: { - this.state = 1155; + this.state = 1181; this.orderByCaluse(); } break; } - this.state = 1159; + this.state = 1185; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 114, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 116, this.context) ) { case 1: { - this.state = 1158; + this.state = 1184; this.limitClause(); } break; @@ -5308,9 +5337,9 @@ export class FlinkSqlParser extends SQLParserBase { break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 1177; + this.state = 1203; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 119, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 121, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -5322,11 +5351,11 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new QueryStatementContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_queryStatement); - this.state = 1163; + this.state = 1189; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 1164; + this.state = 1190; localContext._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 130 || _la === 180 || _la === 402)) { @@ -5336,34 +5365,34 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1166; + this.state = 1192; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 5) { { - this.state = 1165; + this.state = 1191; this.match(FlinkSqlParser.KW_ALL); } } - this.state = 1168; + this.state = 1194; localContext._right = this.queryStatement(0); - this.state = 1170; + this.state = 1196; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 117, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 119, this.context) ) { case 1: { - this.state = 1169; + this.state = 1195; this.orderByCaluse(); } break; } - this.state = 1173; + this.state = 1199; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 118, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 120, this.context) ) { case 1: { - this.state = 1172; + this.state = 1198; this.limitClause(); } break; @@ -5371,9 +5400,9 @@ export class FlinkSqlParser extends SQLParserBase { } } } - this.state = 1179; + this.state = 1205; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 119, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 121, this.context); } } } @@ -5393,32 +5422,32 @@ export class FlinkSqlParser extends SQLParserBase { } public valuesCaluse(): ValuesCaluseContext { let localContext = new ValuesCaluseContext(this.context, this.state); - this.enterRule(localContext, 160, FlinkSqlParser.RULE_valuesCaluse); + this.enterRule(localContext, 158, FlinkSqlParser.RULE_valuesCaluse); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1180; + this.state = 1206; this.match(FlinkSqlParser.KW_VALUES); - this.state = 1181; + this.state = 1207; this.expression(); - this.state = 1186; + this.state = 1212; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 120, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 122, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1182; + this.state = 1208; this.match(FlinkSqlParser.COMMA); - this.state = 1183; + this.state = 1209; this.expression(); } } } - this.state = 1188; + this.state = 1214; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 120, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 122, this.context); } } } @@ -5438,28 +5467,28 @@ export class FlinkSqlParser extends SQLParserBase { } public withClause(): WithClauseContext { let localContext = new WithClauseContext(this.context, this.state); - this.enterRule(localContext, 162, FlinkSqlParser.RULE_withClause); + this.enterRule(localContext, 160, FlinkSqlParser.RULE_withClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1189; + this.state = 1215; this.match(FlinkSqlParser.KW_WITH); - this.state = 1190; + this.state = 1216; this.withItem(); - this.state = 1195; + this.state = 1221; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1191; + this.state = 1217; this.match(FlinkSqlParser.COMMA); - this.state = 1192; + this.state = 1218; this.withItem(); } } - this.state = 1197; + this.state = 1223; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -5481,50 +5510,50 @@ export class FlinkSqlParser extends SQLParserBase { } public withItem(): WithItemContext { let localContext = new WithItemContext(this.context, this.state); - this.enterRule(localContext, 164, FlinkSqlParser.RULE_withItem); + this.enterRule(localContext, 162, FlinkSqlParser.RULE_withItem); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1198; + this.state = 1224; this.withItemName(); - this.state = 1210; + this.state = 1236; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 516) { { - this.state = 1199; + this.state = 1225; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1200; + this.state = 1226; this.columnName(); - this.state = 1205; + this.state = 1231; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1201; + this.state = 1227; this.match(FlinkSqlParser.COMMA); - this.state = 1202; + this.state = 1228; this.columnName(); } } - this.state = 1207; + this.state = 1233; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1208; + this.state = 1234; this.match(FlinkSqlParser.RR_BRACKET); } } - this.state = 1212; + this.state = 1238; this.match(FlinkSqlParser.KW_AS); - this.state = 1213; + this.state = 1239; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1214; + this.state = 1240; this.queryStatement(0); - this.state = 1215; + this.state = 1241; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5544,11 +5573,11 @@ export class FlinkSqlParser extends SQLParserBase { } public withItemName(): WithItemNameContext { let localContext = new WithItemNameContext(this.context, this.state); - this.enterRule(localContext, 166, FlinkSqlParser.RULE_withItemName); + this.enterRule(localContext, 164, FlinkSqlParser.RULE_withItemName); try { this.enterOuterAlt(localContext, 1); { - this.state = 1217; + this.state = 1243; this.identifier(); } } @@ -5568,62 +5597,62 @@ export class FlinkSqlParser extends SQLParserBase { } public selectStatement(): SelectStatementContext { let localContext = new SelectStatementContext(this.context, this.state); - this.enterRule(localContext, 168, FlinkSqlParser.RULE_selectStatement); + this.enterRule(localContext, 166, FlinkSqlParser.RULE_selectStatement); try { - this.state = 1239; + this.state = 1265; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 129, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 131, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1219; + this.state = 1245; this.selectClause(); - this.state = 1221; + this.state = 1247; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 124, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 126, this.context) ) { case 1: { - this.state = 1220; + this.state = 1246; this.fromClause(); } break; } - this.state = 1224; + this.state = 1250; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 125, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 127, this.context) ) { case 1: { - this.state = 1223; + this.state = 1249; this.whereClause(); } break; } - this.state = 1227; + this.state = 1253; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 126, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 128, this.context) ) { case 1: { - this.state = 1226; + this.state = 1252; this.groupByClause(); } break; } - this.state = 1230; + this.state = 1256; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 127, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 129, this.context) ) { case 1: { - this.state = 1229; + this.state = 1255; this.havingClause(); } break; } - this.state = 1233; + this.state = 1259; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 128, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 130, this.context) ) { case 1: { - this.state = 1232; + this.state = 1258; this.windowClause(); } break; @@ -5633,11 +5662,11 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1235; + this.state = 1261; this.selectClause(); - this.state = 1236; + this.state = 1262; this.fromClause(); - this.state = 1237; + this.state = 1263; this.matchRecognizeClause(); } break; @@ -5659,53 +5688,53 @@ export class FlinkSqlParser extends SQLParserBase { } public selectClause(): SelectClauseContext { let localContext = new SelectClauseContext(this.context, this.state); - this.enterRule(localContext, 170, FlinkSqlParser.RULE_selectClause); + this.enterRule(localContext, 168, FlinkSqlParser.RULE_selectClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1241; + this.state = 1267; this.match(FlinkSqlParser.KW_SELECT); - this.state = 1243; + this.state = 1269; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 130, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 132, this.context) ) { case 1: { - this.state = 1242; + this.state = 1268; this.setQuantifier(); } break; } - this.state = 1254; + this.state = 1280; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 132, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 134, this.context) ) { case 1: { - this.state = 1245; + this.state = 1271; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; case 2: { - this.state = 1246; + this.state = 1272; this.projectItemDefinition(); - this.state = 1251; + this.state = 1277; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 131, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 133, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1247; + this.state = 1273; this.match(FlinkSqlParser.COMMA); - this.state = 1248; + this.state = 1274; this.projectItemDefinition(); } } } - this.state = 1253; + this.state = 1279; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 131, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 133, this.context); } } break; @@ -5728,41 +5757,41 @@ export class FlinkSqlParser extends SQLParserBase { } public projectItemDefinition(): ProjectItemDefinitionContext { let localContext = new ProjectItemDefinitionContext(this.context, this.state); - this.enterRule(localContext, 172, FlinkSqlParser.RULE_projectItemDefinition); + this.enterRule(localContext, 170, FlinkSqlParser.RULE_projectItemDefinition); let _la: number; try { - this.state = 1271; + this.state = 1297; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 137, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 139, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1256; + this.state = 1282; this.overWindowItem(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1257; - this.columnName(); - this.state = 1262; + this.state = 1283; + this.expression(); + this.state = 1288; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 134, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 136, this.context) ) { case 1: { - this.state = 1259; + this.state = 1285; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 17) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 135, this.context) ) { + case 1: { - this.state = 1258; + this.state = 1284; this.match(FlinkSqlParser.KW_AS); } + break; } - - this.state = 1261; - this.expression(); + this.state = 1287; + this.columnName(); } break; } @@ -5771,25 +5800,25 @@ export class FlinkSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1264; - this.expression(); - this.state = 1269; + this.state = 1290; + this.columnName(); + this.state = 1295; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 136, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 138, this.context) ) { case 1: { - this.state = 1266; + this.state = 1292; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 135, this.context) ) { - case 1: + _la = this.tokenStream.LA(1); + if (_la === 17) { { - this.state = 1265; + this.state = 1291; this.match(FlinkSqlParser.KW_AS); } - break; } - this.state = 1268; - this.columnName(); + + this.state = 1294; + this.expression(); } break; } @@ -5813,38 +5842,38 @@ export class FlinkSqlParser extends SQLParserBase { } public overWindowItem(): OverWindowItemContext { let localContext = new OverWindowItemContext(this.context, this.state); - this.enterRule(localContext, 174, FlinkSqlParser.RULE_overWindowItem); + this.enterRule(localContext, 172, FlinkSqlParser.RULE_overWindowItem); try { - this.state = 1285; + this.state = 1311; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 138, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 140, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1273; + this.state = 1299; this.primaryExpression(0); - this.state = 1274; + this.state = 1300; this.match(FlinkSqlParser.KW_OVER); - this.state = 1275; + this.state = 1301; this.windowSpec(); - this.state = 1276; + this.state = 1302; this.match(FlinkSqlParser.KW_AS); - this.state = 1277; + this.state = 1303; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1279; + this.state = 1305; this.primaryExpression(0); - this.state = 1280; + this.state = 1306; this.match(FlinkSqlParser.KW_OVER); - this.state = 1281; + this.state = 1307; this.errorCapturingIdentifier(); - this.state = 1282; + this.state = 1308; this.match(FlinkSqlParser.KW_AS); - this.state = 1283; + this.state = 1309; this.identifier(); } break; @@ -5866,13 +5895,13 @@ export class FlinkSqlParser extends SQLParserBase { } public fromClause(): FromClauseContext { let localContext = new FromClauseContext(this.context, this.state); - this.enterRule(localContext, 176, FlinkSqlParser.RULE_fromClause); + this.enterRule(localContext, 174, FlinkSqlParser.RULE_fromClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 1287; + this.state = 1313; this.match(FlinkSqlParser.KW_FROM); - this.state = 1288; + this.state = 1314; this.tableExpression(0); } } @@ -5902,57 +5931,57 @@ export class FlinkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new TableExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 178; - this.enterRecursionRule(localContext, 178, FlinkSqlParser.RULE_tableExpression, _p); + let _startState = 176; + this.enterRecursionRule(localContext, 176, FlinkSqlParser.RULE_tableExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1301; + this.state = 1327; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 140, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 142, this.context) ) { case 1: { - this.state = 1291; + this.state = 1317; this.tableReference(); - this.state = 1296; + this.state = 1322; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 139, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 141, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1292; + this.state = 1318; this.match(FlinkSqlParser.COMMA); - this.state = 1293; + this.state = 1319; this.tableReference(); } } } - this.state = 1298; + this.state = 1324; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 139, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 141, this.context); } } break; case 2: { - this.state = 1299; + this.state = 1325; this.inlineDataValueClause(); } break; case 3: { - this.state = 1300; + this.state = 1326; this.windoTVFClause(); } break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 1324; + this.state = 1350; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 146, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 148, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -5960,22 +5989,22 @@ export class FlinkSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 1322; + this.state = 1348; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 145, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 147, this.context) ) { case 1: { localContext = new TableExpressionContext(parentContext, parentState); this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1303; + this.state = 1329; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 1304; + this.state = 1330; this.match(FlinkSqlParser.KW_CROSS); - this.state = 1305; + this.state = 1331; this.match(FlinkSqlParser.KW_JOIN); - this.state = 1306; + this.state = 1332; this.tableExpression(4); } break; @@ -5983,26 +6012,26 @@ export class FlinkSqlParser extends SQLParserBase { { localContext = new TableExpressionContext(parentContext, parentState); this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1307; + this.state = 1333; if (!(this.precpred(this.context, 4))) { throw this.createFailedPredicateException("this.precpred(this.context, 4)"); } - this.state = 1309; + this.state = 1335; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 233) { { - this.state = 1308; + this.state = 1334; this.match(FlinkSqlParser.KW_NATURAL); } } - this.state = 1312; + this.state = 1338; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 152 || _la === 174 || _la === 201 || _la === 317) { { - this.state = 1311; + this.state = 1337; _la = this.tokenStream.LA(1); if(!(_la === 152 || _la === 174 || _la === 201 || _la === 317)) { this.errorHandler.recoverInline(this); @@ -6014,26 +6043,26 @@ export class FlinkSqlParser extends SQLParserBase { } } - this.state = 1315; + this.state = 1341; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 261) { { - this.state = 1314; + this.state = 1340; this.match(FlinkSqlParser.KW_OUTER); } } - this.state = 1317; + this.state = 1343; this.match(FlinkSqlParser.KW_JOIN); - this.state = 1318; + this.state = 1344; this.tableExpression(0); - this.state = 1320; + this.state = 1346; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 144, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 146, this.context) ) { case 1: { - this.state = 1319; + this.state = 1345; this.joinCondition(); } break; @@ -6043,9 +6072,9 @@ export class FlinkSqlParser extends SQLParserBase { } } } - this.state = 1326; + this.state = 1352; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 146, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 148, this.context); } } } @@ -6065,18 +6094,18 @@ export class FlinkSqlParser extends SQLParserBase { } public tableReference(): TableReferenceContext { let localContext = new TableReferenceContext(this.context, this.state); - this.enterRule(localContext, 180, FlinkSqlParser.RULE_tableReference); + this.enterRule(localContext, 178, FlinkSqlParser.RULE_tableReference); try { this.enterOuterAlt(localContext, 1); { - this.state = 1327; + this.state = 1353; this.tablePrimary(); - this.state = 1329; + this.state = 1355; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 147, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 149, this.context) ) { case 1: { - this.state = 1328; + this.state = 1354; this.tableAlias(); } break; @@ -6099,54 +6128,34 @@ export class FlinkSqlParser extends SQLParserBase { } public tablePrimary(): TablePrimaryContext { let localContext = new TablePrimaryContext(this.context, this.state); - this.enterRule(localContext, 182, FlinkSqlParser.RULE_tablePrimary); + this.enterRule(localContext, 180, FlinkSqlParser.RULE_tablePrimary); let _la: number; try { - this.state = 1382; + this.state = 1386; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 157, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 154, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1332; + this.state = 1358; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 373) { { - this.state = 1331; + this.state = 1357; this.match(FlinkSqlParser.KW_TABLE); } } - this.state = 1334; + this.state = 1360; this.tablePath(); - this.state = 1336; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 149, this.context) ) { - case 1: - { - this.state = 1335; - this.systemTimePeriod(); - } - break; - } - this.state = 1342; + this.state = 1362; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 151, this.context) ) { case 1: { - this.state = 1339; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 17) { - { - this.state = 1338; - this.match(FlinkSqlParser.KW_AS); - } - } - - this.state = 1341; - this.correlationName(); + this.state = 1361; + this.systemTimePeriod(); } break; } @@ -6155,108 +6164,66 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1344; + this.state = 1364; this.viewPath(); - this.state = 1346; + this.state = 1366; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 152, this.context) ) { case 1: { - this.state = 1345; + this.state = 1365; this.systemTimePeriod(); } break; } - this.state = 1352; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 154, this.context) ) { - case 1: - { - this.state = 1349; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 17) { - { - this.state = 1348; - this.match(FlinkSqlParser.KW_AS); - } - } - - this.state = 1351; - this.correlationName(); - } - break; - } } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1354; + this.state = 1368; this.match(FlinkSqlParser.KW_LATERAL); - this.state = 1355; + this.state = 1369; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1356; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1357; - this.functionName(); - this.state = 1358; + this.state = 1370; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1359; - this.functionParam(); - this.state = 1364; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 520) { - { - { - this.state = 1360; - this.match(FlinkSqlParser.COMMA); - this.state = 1361; - this.functionParam(); - } - } - this.state = 1366; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - this.state = 1367; - this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1368; + this.state = 1371; + this.functionCallExpression(); + this.state = 1372; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1371; + this.state = 1375; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 198) { { - this.state = 1370; + this.state = 1374; this.match(FlinkSqlParser.KW_LATERAL); } } - this.state = 1373; + this.state = 1377; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1374; + this.state = 1378; this.queryStatement(0); - this.state = 1375; + this.state = 1379; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1377; + this.state = 1381; this.match(FlinkSqlParser.KW_UNNEST); - this.state = 1378; + this.state = 1382; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1379; + this.state = 1383; this.expression(); - this.state = 1380; + this.state = 1384; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6278,19 +6245,19 @@ export class FlinkSqlParser extends SQLParserBase { } public systemTimePeriod(): SystemTimePeriodContext { let localContext = new SystemTimePeriodContext(this.context, this.state); - this.enterRule(localContext, 184, FlinkSqlParser.RULE_systemTimePeriod); + this.enterRule(localContext, 182, FlinkSqlParser.RULE_systemTimePeriod); try { this.enterOuterAlt(localContext, 1); { - this.state = 1384; + this.state = 1388; this.match(FlinkSqlParser.KW_FOR); - this.state = 1385; + this.state = 1389; this.match(FlinkSqlParser.KW_SYSTEM_TIME); - this.state = 1386; + this.state = 1390; this.match(FlinkSqlParser.KW_AS); - this.state = 1387; + this.state = 1391; this.match(FlinkSqlParser.KW_OF); - this.state = 1388; + this.state = 1392; this.dateTimeExpression(); } } @@ -6310,11 +6277,11 @@ export class FlinkSqlParser extends SQLParserBase { } public dateTimeExpression(): DateTimeExpressionContext { let localContext = new DateTimeExpressionContext(this.context, this.state); - this.enterRule(localContext, 186, FlinkSqlParser.RULE_dateTimeExpression); + this.enterRule(localContext, 184, FlinkSqlParser.RULE_dateTimeExpression); try { this.enterOuterAlt(localContext, 1); { - this.state = 1390; + this.state = 1394; this.expression(); } } @@ -6334,17 +6301,17 @@ export class FlinkSqlParser extends SQLParserBase { } public inlineDataValueClause(): InlineDataValueClauseContext { let localContext = new InlineDataValueClauseContext(this.context, this.state); - this.enterRule(localContext, 188, FlinkSqlParser.RULE_inlineDataValueClause); + this.enterRule(localContext, 186, FlinkSqlParser.RULE_inlineDataValueClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 1392; + this.state = 1396; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1393; + this.state = 1397; this.valuesDefinition(); - this.state = 1394; + this.state = 1398; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1395; + this.state = 1399; this.tableAlias(); } } @@ -6364,17 +6331,17 @@ export class FlinkSqlParser extends SQLParserBase { } public windoTVFClause(): WindoTVFClauseContext { let localContext = new WindoTVFClauseContext(this.context, this.state); - this.enterRule(localContext, 190, FlinkSqlParser.RULE_windoTVFClause); + this.enterRule(localContext, 188, FlinkSqlParser.RULE_windoTVFClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 1397; + this.state = 1401; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1398; + this.state = 1402; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1399; + this.state = 1403; this.windowTVFExression(); - this.state = 1400; + this.state = 1404; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6394,34 +6361,34 @@ export class FlinkSqlParser extends SQLParserBase { } public windowTVFExression(): WindowTVFExressionContext { let localContext = new WindowTVFExressionContext(this.context, this.state); - this.enterRule(localContext, 192, FlinkSqlParser.RULE_windowTVFExression); + this.enterRule(localContext, 190, FlinkSqlParser.RULE_windowTVFExression); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1402; + this.state = 1406; this.windoTVFName(); - this.state = 1403; + this.state = 1407; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1404; + this.state = 1408; this.windowTVFParam(); - this.state = 1409; + this.state = 1413; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1405; + this.state = 1409; this.match(FlinkSqlParser.COMMA); - this.state = 1406; + this.state = 1410; this.windowTVFParam(); } } - this.state = 1411; + this.state = 1415; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1412; + this.state = 1416; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6441,12 +6408,12 @@ export class FlinkSqlParser extends SQLParserBase { } public windoTVFName(): WindoTVFNameContext { let localContext = new WindoTVFNameContext(this.context, this.state); - this.enterRule(localContext, 194, FlinkSqlParser.RULE_windoTVFName); + this.enterRule(localContext, 192, FlinkSqlParser.RULE_windoTVFName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1414; + this.state = 1418; _la = this.tokenStream.LA(1); if(!(_la === 445 || _la === 459 || _la === 499)) { this.errorHandler.recoverInline(this); @@ -6473,66 +6440,66 @@ export class FlinkSqlParser extends SQLParserBase { } public windowTVFParam(): WindowTVFParamContext { let localContext = new WindowTVFParamContext(this.context, this.state); - this.enterRule(localContext, 196, FlinkSqlParser.RULE_windowTVFParam); + this.enterRule(localContext, 194, FlinkSqlParser.RULE_windowTVFParam); try { - this.state = 1431; + this.state = 1435; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 159, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 156, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1416; + this.state = 1420; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1417; + this.state = 1421; this.timeAttrColumn(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1418; + this.state = 1422; this.columnDescriptor(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1419; + this.state = 1423; this.timeIntervalExpression(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1420; + this.state = 1424; this.match(FlinkSqlParser.KW_DATA); - this.state = 1421; + this.state = 1425; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1422; + this.state = 1426; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1423; + this.state = 1427; this.timeAttrColumn(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1424; + this.state = 1428; this.match(FlinkSqlParser.KW_TIMECOL); - this.state = 1425; + this.state = 1429; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1426; + this.state = 1430; this.columnDescriptor(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 1427; + this.state = 1431; this.timeIntervalParamName(); - this.state = 1428; + this.state = 1432; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1429; + this.state = 1433; this.timeIntervalExpression(); } break; @@ -6554,12 +6521,12 @@ export class FlinkSqlParser extends SQLParserBase { } public timeIntervalParamName(): TimeIntervalParamNameContext { let localContext = new TimeIntervalParamNameContext(this.context, this.state); - this.enterRule(localContext, 198, FlinkSqlParser.RULE_timeIntervalParamName); + this.enterRule(localContext, 196, FlinkSqlParser.RULE_timeIntervalParamName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1433; + this.state = 1437; _la = this.tokenStream.LA(1); if(!(_la === 250 || _la === 446 || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 23) !== 0))) { this.errorHandler.recoverInline(this); @@ -6586,17 +6553,17 @@ export class FlinkSqlParser extends SQLParserBase { } public columnDescriptor(): ColumnDescriptorContext { let localContext = new ColumnDescriptorContext(this.context, this.state); - this.enterRule(localContext, 200, FlinkSqlParser.RULE_columnDescriptor); + this.enterRule(localContext, 198, FlinkSqlParser.RULE_columnDescriptor); try { this.enterOuterAlt(localContext, 1); { - this.state = 1435; + this.state = 1439; this.match(FlinkSqlParser.KW_DESCRIPTOR); - this.state = 1436; + this.state = 1440; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1437; + this.state = 1441; this.columnName(); - this.state = 1438; + this.state = 1442; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6616,26 +6583,26 @@ export class FlinkSqlParser extends SQLParserBase { } public joinCondition(): JoinConditionContext { let localContext = new JoinConditionContext(this.context, this.state); - this.enterRule(localContext, 202, FlinkSqlParser.RULE_joinCondition); + this.enterRule(localContext, 200, FlinkSqlParser.RULE_joinCondition); try { - this.state = 1444; + this.state = 1448; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_ON: this.enterOuterAlt(localContext, 1); { - this.state = 1440; + this.state = 1444; this.match(FlinkSqlParser.KW_ON); - this.state = 1441; + this.state = 1445; this.booleanExpression(0); } break; case FlinkSqlParser.KW_USING: this.enterOuterAlt(localContext, 2); { - this.state = 1442; + this.state = 1446; this.match(FlinkSqlParser.KW_USING); - this.state = 1443; + this.state = 1447; this.columnNameList(); } break; @@ -6659,13 +6626,13 @@ export class FlinkSqlParser extends SQLParserBase { } public whereClause(): WhereClauseContext { let localContext = new WhereClauseContext(this.context, this.state); - this.enterRule(localContext, 204, FlinkSqlParser.RULE_whereClause); + this.enterRule(localContext, 202, FlinkSqlParser.RULE_whereClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 1446; + this.state = 1450; this.match(FlinkSqlParser.KW_WHERE); - this.state = 1447; + this.state = 1451; this.booleanExpression(0); } } @@ -6685,34 +6652,34 @@ export class FlinkSqlParser extends SQLParserBase { } public groupByClause(): GroupByClauseContext { let localContext = new GroupByClauseContext(this.context, this.state); - this.enterRule(localContext, 206, FlinkSqlParser.RULE_groupByClause); + this.enterRule(localContext, 204, FlinkSqlParser.RULE_groupByClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1449; + this.state = 1453; this.match(FlinkSqlParser.KW_GROUP); - this.state = 1450; + this.state = 1454; this.match(FlinkSqlParser.KW_BY); - this.state = 1451; + this.state = 1455; this.groupItemDefinition(); - this.state = 1456; + this.state = 1460; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 161, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 158, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1452; + this.state = 1456; this.match(FlinkSqlParser.COMMA); - this.state = 1453; + this.state = 1457; this.groupItemDefinition(); } } } - this.state = 1458; + this.state = 1462; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 161, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 158, this.context); } } } @@ -6732,124 +6699,124 @@ export class FlinkSqlParser extends SQLParserBase { } public groupItemDefinition(): GroupItemDefinitionContext { let localContext = new GroupItemDefinitionContext(this.context, this.state); - this.enterRule(localContext, 208, FlinkSqlParser.RULE_groupItemDefinition); + this.enterRule(localContext, 206, FlinkSqlParser.RULE_groupItemDefinition); let _la: number; try { - this.state = 1499; + this.state = 1503; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 165, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 162, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1459; + this.state = 1463; this.columnName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1460; + this.state = 1464; this.groupWindowFunction(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1461; + this.state = 1465; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1462; + this.state = 1466; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1463; + this.state = 1467; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1464; + this.state = 1468; this.expression(); - this.state = 1469; + this.state = 1473; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1465; + this.state = 1469; this.match(FlinkSqlParser.COMMA); - this.state = 1466; + this.state = 1470; this.expression(); } } - this.state = 1471; + this.state = 1475; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1472; + this.state = 1476; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1474; + this.state = 1478; this.groupingSetsNotaionName(); - this.state = 1475; + this.state = 1479; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1476; + this.state = 1480; this.expression(); - this.state = 1481; + this.state = 1485; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1477; + this.state = 1481; this.match(FlinkSqlParser.COMMA); - this.state = 1478; + this.state = 1482; this.expression(); } } - this.state = 1483; + this.state = 1487; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1484; + this.state = 1488; this.match(FlinkSqlParser.RR_BRACKET); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 1486; + this.state = 1490; this.groupingSets(); - this.state = 1487; + this.state = 1491; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1488; + this.state = 1492; this.groupItemDefinition(); - this.state = 1493; + this.state = 1497; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1489; + this.state = 1493; this.match(FlinkSqlParser.COMMA); - this.state = 1490; + this.state = 1494; this.groupItemDefinition(); } } - this.state = 1495; + this.state = 1499; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1496; + this.state = 1500; this.match(FlinkSqlParser.RR_BRACKET); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 1498; + this.state = 1502; this.expression(); } break; @@ -6871,13 +6838,13 @@ export class FlinkSqlParser extends SQLParserBase { } public groupingSets(): GroupingSetsContext { let localContext = new GroupingSetsContext(this.context, this.state); - this.enterRule(localContext, 210, FlinkSqlParser.RULE_groupingSets); + this.enterRule(localContext, 208, FlinkSqlParser.RULE_groupingSets); try { this.enterOuterAlt(localContext, 1); { - this.state = 1501; + this.state = 1505; this.match(FlinkSqlParser.KW_GROUPING); - this.state = 1502; + this.state = 1506; this.match(FlinkSqlParser.KW_SETS); } } @@ -6897,12 +6864,12 @@ export class FlinkSqlParser extends SQLParserBase { } public groupingSetsNotaionName(): GroupingSetsNotaionNameContext { let localContext = new GroupingSetsNotaionNameContext(this.context, this.state); - this.enterRule(localContext, 212, FlinkSqlParser.RULE_groupingSetsNotaionName); + this.enterRule(localContext, 210, FlinkSqlParser.RULE_groupingSetsNotaionName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1504; + this.state = 1508; _la = this.tokenStream.LA(1); if(!(_la === 74 || _la === 320)) { this.errorHandler.recoverInline(this); @@ -6929,21 +6896,21 @@ export class FlinkSqlParser extends SQLParserBase { } public groupWindowFunction(): GroupWindowFunctionContext { let localContext = new GroupWindowFunctionContext(this.context, this.state); - this.enterRule(localContext, 214, FlinkSqlParser.RULE_groupWindowFunction); + this.enterRule(localContext, 212, FlinkSqlParser.RULE_groupWindowFunction); try { this.enterOuterAlt(localContext, 1); { - this.state = 1506; + this.state = 1510; this.groupWindowFunctionName(); - this.state = 1507; + this.state = 1511; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1508; + this.state = 1512; this.timeAttrColumn(); - this.state = 1509; + this.state = 1513; this.match(FlinkSqlParser.COMMA); - this.state = 1510; + this.state = 1514; this.timeIntervalExpression(); - this.state = 1511; + this.state = 1515; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6963,12 +6930,12 @@ export class FlinkSqlParser extends SQLParserBase { } public groupWindowFunctionName(): GroupWindowFunctionNameContext { let localContext = new GroupWindowFunctionNameContext(this.context, this.state); - this.enterRule(localContext, 216, FlinkSqlParser.RULE_groupWindowFunctionName); + this.enterRule(localContext, 214, FlinkSqlParser.RULE_groupWindowFunctionName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1513; + this.state = 1517; _la = this.tokenStream.LA(1); if(!(_la === 459 || _la === 492 || _la === 499)) { this.errorHandler.recoverInline(this); @@ -6995,11 +6962,11 @@ export class FlinkSqlParser extends SQLParserBase { } public timeAttrColumn(): TimeAttrColumnContext { let localContext = new TimeAttrColumnContext(this.context, this.state); - this.enterRule(localContext, 218, FlinkSqlParser.RULE_timeAttrColumn); + this.enterRule(localContext, 216, FlinkSqlParser.RULE_timeAttrColumn); try { this.enterOuterAlt(localContext, 1); { - this.state = 1515; + this.state = 1519; this.uid(); } } @@ -7019,13 +6986,13 @@ export class FlinkSqlParser extends SQLParserBase { } public havingClause(): HavingClauseContext { let localContext = new HavingClauseContext(this.context, this.state); - this.enterRule(localContext, 220, FlinkSqlParser.RULE_havingClause); + this.enterRule(localContext, 218, FlinkSqlParser.RULE_havingClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 1517; + this.state = 1521; this.match(FlinkSqlParser.KW_HAVING); - this.state = 1518; + this.state = 1522; this.booleanExpression(0); } } @@ -7045,32 +7012,32 @@ export class FlinkSqlParser extends SQLParserBase { } public windowClause(): WindowClauseContext { let localContext = new WindowClauseContext(this.context, this.state); - this.enterRule(localContext, 222, FlinkSqlParser.RULE_windowClause); + this.enterRule(localContext, 220, FlinkSqlParser.RULE_windowClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1520; + this.state = 1524; this.match(FlinkSqlParser.KW_WINDOW); - this.state = 1521; + this.state = 1525; this.namedWindow(); - this.state = 1526; + this.state = 1530; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 166, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 163, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1522; + this.state = 1526; this.match(FlinkSqlParser.COMMA); - this.state = 1523; + this.state = 1527; this.namedWindow(); } } } - this.state = 1528; + this.state = 1532; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 166, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 163, this.context); } } } @@ -7090,15 +7057,15 @@ export class FlinkSqlParser extends SQLParserBase { } public namedWindow(): NamedWindowContext { let localContext = new NamedWindowContext(this.context, this.state); - this.enterRule(localContext, 224, FlinkSqlParser.RULE_namedWindow); + this.enterRule(localContext, 222, FlinkSqlParser.RULE_namedWindow); try { this.enterOuterAlt(localContext, 1); { - this.state = 1529; + this.state = 1533; localContext._name = this.errorCapturingIdentifier(); - this.state = 1530; + this.state = 1534; this.match(FlinkSqlParser.KW_AS); - this.state = 1531; + this.state = 1535; this.windowSpec(); } } @@ -7118,54 +7085,54 @@ export class FlinkSqlParser extends SQLParserBase { } public windowSpec(): WindowSpecContext { let localContext = new WindowSpecContext(this.context, this.state); - this.enterRule(localContext, 226, FlinkSqlParser.RULE_windowSpec); + this.enterRule(localContext, 224, FlinkSqlParser.RULE_windowSpec); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1534; + this.state = 1538; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (((((_la - 437)) & ~0x1F) === 0 && ((1 << (_la - 437)) & 4294967295) !== 0) || ((((_la - 469)) & ~0x1F) === 0 && ((1 << (_la - 469)) & 4294967295) !== 0) || ((((_la - 501)) & ~0x1F) === 0 && ((1 << (_la - 501)) & 15) !== 0) || ((((_la - 537)) & ~0x1F) === 0 && ((1 << (_la - 537)) & 19) !== 0)) { { - this.state = 1533; + this.state = 1537; localContext._name = this.errorCapturingIdentifier(); } } - this.state = 1536; + this.state = 1540; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1538; + this.state = 1542; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 268) { { - this.state = 1537; + this.state = 1541; this.partitionByClause(); } } - this.state = 1541; + this.state = 1545; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 258) { { - this.state = 1540; + this.state = 1544; this.orderByCaluse(); } } - this.state = 1544; + this.state = 1548; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 292 || _la === 322) { { - this.state = 1543; + this.state = 1547; this.windowFrame(); } } - this.state = 1546; + this.state = 1550; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -7185,95 +7152,95 @@ export class FlinkSqlParser extends SQLParserBase { } public matchRecognizeClause(): MatchRecognizeClauseContext { let localContext = new MatchRecognizeClauseContext(this.context, this.state); - this.enterRule(localContext, 228, FlinkSqlParser.RULE_matchRecognizeClause); + this.enterRule(localContext, 226, FlinkSqlParser.RULE_matchRecognizeClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1548; + this.state = 1552; this.match(FlinkSqlParser.KW_MATCH_RECOGNIZE); - this.state = 1549; + this.state = 1553; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1551; + this.state = 1555; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 268) { { - this.state = 1550; + this.state = 1554; this.partitionByClause(); } } - this.state = 1554; + this.state = 1558; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 258) { { - this.state = 1553; + this.state = 1557; this.orderByCaluse(); } } - this.state = 1557; + this.state = 1561; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 215) { { - this.state = 1556; + this.state = 1560; this.measuresClause(); } } - this.state = 1560; + this.state = 1564; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 5 || _la === 254) { { - this.state = 1559; + this.state = 1563; this.outputMode(); } } - this.state = 1563; + this.state = 1567; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 438) { { - this.state = 1562; + this.state = 1566; this.afterMatchStrategy(); } } - this.state = 1566; + this.state = 1570; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 271) { { - this.state = 1565; + this.state = 1569; this.patternDefination(); } } - this.state = 1568; + this.state = 1572; this.patternVariablesDefination(); - this.state = 1569; + this.state = 1573; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1574; + this.state = 1578; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 178, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 175, this.context) ) { case 1: { - this.state = 1571; + this.state = 1575; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 1570; + this.state = 1574; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1573; + this.state = 1577; this.identifier(); } break; @@ -7296,34 +7263,34 @@ export class FlinkSqlParser extends SQLParserBase { } public orderByCaluse(): OrderByCaluseContext { let localContext = new OrderByCaluseContext(this.context, this.state); - this.enterRule(localContext, 230, FlinkSqlParser.RULE_orderByCaluse); + this.enterRule(localContext, 228, FlinkSqlParser.RULE_orderByCaluse); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1576; + this.state = 1580; this.match(FlinkSqlParser.KW_ORDER); - this.state = 1577; + this.state = 1581; this.match(FlinkSqlParser.KW_BY); - this.state = 1578; + this.state = 1582; this.orderItemDefition(); - this.state = 1583; + this.state = 1587; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 179, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 176, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1579; + this.state = 1583; this.match(FlinkSqlParser.COMMA); - this.state = 1580; + this.state = 1584; this.orderItemDefition(); } } } - this.state = 1585; + this.state = 1589; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 179, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 176, this.context); } } } @@ -7343,19 +7310,19 @@ export class FlinkSqlParser extends SQLParserBase { } public orderItemDefition(): OrderItemDefitionContext { let localContext = new OrderItemDefitionContext(this.context, this.state); - this.enterRule(localContext, 232, FlinkSqlParser.RULE_orderItemDefition); + this.enterRule(localContext, 230, FlinkSqlParser.RULE_orderItemDefition); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1586; + this.state = 1590; this.columnName(); - this.state = 1588; + this.state = 1592; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 180, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 177, this.context) ) { case 1: { - this.state = 1587; + this.state = 1591; localContext._ordering = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 439 || _la === 450)) { @@ -7368,14 +7335,14 @@ export class FlinkSqlParser extends SQLParserBase { } break; } - this.state = 1592; + this.state = 1596; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 181, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 178, this.context) ) { case 1: { - this.state = 1590; + this.state = 1594; this.match(FlinkSqlParser.KW_NULLS); - this.state = 1591; + this.state = 1595; localContext._nullOrder = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 457 || _la === 467)) { @@ -7406,18 +7373,18 @@ export class FlinkSqlParser extends SQLParserBase { } public limitClause(): LimitClauseContext { let localContext = new LimitClauseContext(this.context, this.state); - this.enterRule(localContext, 234, FlinkSqlParser.RULE_limitClause); + this.enterRule(localContext, 232, FlinkSqlParser.RULE_limitClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 1594; + this.state = 1598; this.match(FlinkSqlParser.KW_LIMIT); - this.state = 1597; + this.state = 1601; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_ALL: { - this.state = 1595; + this.state = 1599; this.match(FlinkSqlParser.KW_ALL); } break; @@ -7573,7 +7540,7 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.BIT_STRING: case FlinkSqlParser.ID_LITERAL: { - this.state = 1596; + this.state = 1600; localContext._limit = this.expression(); } break; @@ -7598,30 +7565,58 @@ export class FlinkSqlParser extends SQLParserBase { } public partitionByClause(): PartitionByClauseContext { let localContext = new PartitionByClauseContext(this.context, this.state); - this.enterRule(localContext, 236, FlinkSqlParser.RULE_partitionByClause); + this.enterRule(localContext, 234, FlinkSqlParser.RULE_partitionByClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1599; + this.state = 1603; this.match(FlinkSqlParser.KW_PARTITION); - this.state = 1600; + this.state = 1604; this.match(FlinkSqlParser.KW_BY); - this.state = 1601; - this.columnName(); - this.state = 1606; + this.state = 1607; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 520) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 180, this.context) ) { + case 1: + { + this.state = 1605; + this.columnName(); + } + break; + case 2: + { + this.state = 1606; + this.primaryExpression(0); + } + break; + } + this.state = 1616; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 520) { { { - this.state = 1602; + this.state = 1609; this.match(FlinkSqlParser.COMMA); - this.state = 1603; - this.columnName(); + this.state = 1612; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 181, this.context) ) { + case 1: + { + this.state = 1610; + this.columnName(); + } + break; + case 2: + { + this.state = 1611; + this.primaryExpression(0); + } + break; } } - this.state = 1608; + } + this.state = 1618; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -7643,16 +7638,16 @@ export class FlinkSqlParser extends SQLParserBase { } public quantifiers(): QuantifiersContext { let localContext = new QuantifiersContext(this.context, this.state); - this.enterRule(localContext, 238, FlinkSqlParser.RULE_quantifiers); + this.enterRule(localContext, 236, FlinkSqlParser.RULE_quantifiers); try { - this.state = 1625; + this.state = 1635; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 184, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 183, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { { - this.state = 1609; + this.state = 1619; this.match(FlinkSqlParser.ASTERISK_SIGN); } } @@ -7661,7 +7656,7 @@ export class FlinkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 2); { { - this.state = 1610; + this.state = 1620; this.match(FlinkSqlParser.ADD_SIGN); } } @@ -7670,7 +7665,7 @@ export class FlinkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 3); { { - this.state = 1611; + this.state = 1621; this.match(FlinkSqlParser.QUESTION_MARK_SIGN); } } @@ -7679,15 +7674,15 @@ export class FlinkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 4); { { - this.state = 1612; + this.state = 1622; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1613; + this.state = 1623; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1614; + this.state = 1624; this.match(FlinkSqlParser.COMMA); - this.state = 1615; + this.state = 1625; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1616; + this.state = 1626; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7696,13 +7691,13 @@ export class FlinkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 5); { { - this.state = 1617; + this.state = 1627; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1618; + this.state = 1628; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1619; + this.state = 1629; this.match(FlinkSqlParser.COMMA); - this.state = 1620; + this.state = 1630; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7711,13 +7706,13 @@ export class FlinkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 6); { { - this.state = 1621; + this.state = 1631; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1622; + this.state = 1632; this.match(FlinkSqlParser.COMMA); - this.state = 1623; + this.state = 1633; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1624; + this.state = 1634; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7740,28 +7735,28 @@ export class FlinkSqlParser extends SQLParserBase { } public measuresClause(): MeasuresClauseContext { let localContext = new MeasuresClauseContext(this.context, this.state); - this.enterRule(localContext, 240, FlinkSqlParser.RULE_measuresClause); + this.enterRule(localContext, 238, FlinkSqlParser.RULE_measuresClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1627; + this.state = 1637; this.match(FlinkSqlParser.KW_MEASURES); - this.state = 1628; + this.state = 1638; this.projectItemDefinition(); - this.state = 1633; + this.state = 1643; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1629; + this.state = 1639; this.match(FlinkSqlParser.COMMA); - this.state = 1630; + this.state = 1640; this.projectItemDefinition(); } } - this.state = 1635; + this.state = 1645; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -7783,37 +7778,37 @@ export class FlinkSqlParser extends SQLParserBase { } public patternDefination(): PatternDefinationContext { let localContext = new PatternDefinationContext(this.context, this.state); - this.enterRule(localContext, 242, FlinkSqlParser.RULE_patternDefination); + this.enterRule(localContext, 240, FlinkSqlParser.RULE_patternDefination); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1636; + this.state = 1646; this.match(FlinkSqlParser.KW_PATTERN); - this.state = 1637; + this.state = 1647; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1639; + this.state = 1649; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 1638; + this.state = 1648; this.patternVariable(); } } - this.state = 1641; + this.state = 1651; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 538 || _la === 541); - this.state = 1643; + this.state = 1653; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1645; + this.state = 1655; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 434) { { - this.state = 1644; + this.state = 1654; this.withinClause(); } } @@ -7836,19 +7831,19 @@ export class FlinkSqlParser extends SQLParserBase { } public patternVariable(): PatternVariableContext { let localContext = new PatternVariableContext(this.context, this.state); - this.enterRule(localContext, 244, FlinkSqlParser.RULE_patternVariable); + this.enterRule(localContext, 242, FlinkSqlParser.RULE_patternVariable); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1647; + this.state = 1657; this.unquotedIdentifier(); - this.state = 1649; + this.state = 1659; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (((((_la - 518)) & ~0x1F) === 0 && ((1 << (_la - 518)) & 135681) !== 0)) { { - this.state = 1648; + this.state = 1658; this.quantifiers(); } } @@ -7871,34 +7866,34 @@ export class FlinkSqlParser extends SQLParserBase { } public outputMode(): OutputModeContext { let localContext = new OutputModeContext(this.context, this.state); - this.enterRule(localContext, 246, FlinkSqlParser.RULE_outputMode); + this.enterRule(localContext, 244, FlinkSqlParser.RULE_outputMode); try { - this.state = 1659; + this.state = 1669; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_ALL: this.enterOuterAlt(localContext, 1); { - this.state = 1651; + this.state = 1661; this.match(FlinkSqlParser.KW_ALL); - this.state = 1652; + this.state = 1662; this.match(FlinkSqlParser.KW_ROWS); - this.state = 1653; + this.state = 1663; this.match(FlinkSqlParser.KW_PER); - this.state = 1654; + this.state = 1664; this.match(FlinkSqlParser.KW_MATCH); } break; case FlinkSqlParser.KW_ONE: this.enterOuterAlt(localContext, 2); { - this.state = 1655; + this.state = 1665; this.match(FlinkSqlParser.KW_ONE); - this.state = 1656; + this.state = 1666; this.match(FlinkSqlParser.KW_ROW); - this.state = 1657; + this.state = 1667; this.match(FlinkSqlParser.KW_PER); - this.state = 1658; + this.state = 1668; this.match(FlinkSqlParser.KW_MATCH); } break; @@ -7922,76 +7917,76 @@ export class FlinkSqlParser extends SQLParserBase { } public afterMatchStrategy(): AfterMatchStrategyContext { let localContext = new AfterMatchStrategyContext(this.context, this.state); - this.enterRule(localContext, 248, FlinkSqlParser.RULE_afterMatchStrategy); + this.enterRule(localContext, 246, FlinkSqlParser.RULE_afterMatchStrategy); try { - this.state = 1685; + this.state = 1695; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 190, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 189, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1661; + this.state = 1671; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1662; + this.state = 1672; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1663; + this.state = 1673; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1664; + this.state = 1674; this.match(FlinkSqlParser.KW_PAST); - this.state = 1665; + this.state = 1675; this.match(FlinkSqlParser.KW_LAST); - this.state = 1666; + this.state = 1676; this.match(FlinkSqlParser.KW_ROW); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1667; + this.state = 1677; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1668; + this.state = 1678; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1669; + this.state = 1679; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1670; + this.state = 1680; this.match(FlinkSqlParser.KW_TO); - this.state = 1671; + this.state = 1681; this.match(FlinkSqlParser.KW_NEXT); - this.state = 1672; + this.state = 1682; this.match(FlinkSqlParser.KW_ROW); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1673; + this.state = 1683; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1674; + this.state = 1684; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1675; + this.state = 1685; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1676; + this.state = 1686; this.match(FlinkSqlParser.KW_TO); - this.state = 1677; + this.state = 1687; this.match(FlinkSqlParser.KW_LAST); - this.state = 1678; + this.state = 1688; this.unquotedIdentifier(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1679; + this.state = 1689; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1680; + this.state = 1690; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1681; + this.state = 1691; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1682; + this.state = 1692; this.match(FlinkSqlParser.KW_TO); - this.state = 1683; + this.state = 1693; this.match(FlinkSqlParser.KW_FIRST); - this.state = 1684; + this.state = 1694; this.unquotedIdentifier(); } break; @@ -8013,28 +8008,28 @@ export class FlinkSqlParser extends SQLParserBase { } public patternVariablesDefination(): PatternVariablesDefinationContext { let localContext = new PatternVariablesDefinationContext(this.context, this.state); - this.enterRule(localContext, 250, FlinkSqlParser.RULE_patternVariablesDefination); + this.enterRule(localContext, 248, FlinkSqlParser.RULE_patternVariablesDefination); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1687; + this.state = 1697; this.match(FlinkSqlParser.KW_DEFINE); - this.state = 1688; + this.state = 1698; this.projectItemDefinition(); - this.state = 1693; + this.state = 1703; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1689; + this.state = 1699; this.match(FlinkSqlParser.COMMA); - this.state = 1690; + this.state = 1700; this.projectItemDefinition(); } } - this.state = 1695; + this.state = 1705; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -8056,34 +8051,34 @@ export class FlinkSqlParser extends SQLParserBase { } public windowFrame(): WindowFrameContext { let localContext = new WindowFrameContext(this.context, this.state); - this.enterRule(localContext, 252, FlinkSqlParser.RULE_windowFrame); + this.enterRule(localContext, 250, FlinkSqlParser.RULE_windowFrame); try { - this.state = 1705; + this.state = 1715; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_RANGE: this.enterOuterAlt(localContext, 1); { - this.state = 1696; + this.state = 1706; this.match(FlinkSqlParser.KW_RANGE); - this.state = 1697; + this.state = 1707; this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1698; + this.state = 1708; this.timeIntervalExpression(); - this.state = 1699; + this.state = 1709; this.frameBound(); } break; case FlinkSqlParser.KW_ROWS: this.enterOuterAlt(localContext, 2); { - this.state = 1701; + this.state = 1711; this.match(FlinkSqlParser.KW_ROWS); - this.state = 1702; + this.state = 1712; this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1703; + this.state = 1713; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1704; + this.state = 1714; this.frameBound(); } break; @@ -8107,17 +8102,17 @@ export class FlinkSqlParser extends SQLParserBase { } public frameBound(): FrameBoundContext { let localContext = new FrameBoundContext(this.context, this.state); - this.enterRule(localContext, 254, FlinkSqlParser.RULE_frameBound); + this.enterRule(localContext, 252, FlinkSqlParser.RULE_frameBound); try { this.enterOuterAlt(localContext, 1); { - this.state = 1707; + this.state = 1717; this.match(FlinkSqlParser.KW_PRECEDING); - this.state = 1708; + this.state = 1718; this.match(FlinkSqlParser.KW_AND); - this.state = 1709; + this.state = 1719; this.match(FlinkSqlParser.KW_CURRENT); - this.state = 1710; + this.state = 1720; this.match(FlinkSqlParser.KW_ROW); } } @@ -8137,13 +8132,13 @@ export class FlinkSqlParser extends SQLParserBase { } public withinClause(): WithinClauseContext { let localContext = new WithinClauseContext(this.context, this.state); - this.enterRule(localContext, 256, FlinkSqlParser.RULE_withinClause); + this.enterRule(localContext, 254, FlinkSqlParser.RULE_withinClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 1712; + this.state = 1722; this.match(FlinkSqlParser.KW_WITHIN); - this.state = 1713; + this.state = 1723; this.timeIntervalExpression(); } } @@ -8163,11 +8158,11 @@ export class FlinkSqlParser extends SQLParserBase { } public expression(): ExpressionContext { let localContext = new ExpressionContext(this.context, this.state); - this.enterRule(localContext, 258, FlinkSqlParser.RULE_expression); + this.enterRule(localContext, 256, FlinkSqlParser.RULE_expression); try { this.enterOuterAlt(localContext, 1); { - this.state = 1715; + this.state = 1725; this.booleanExpression(0); } } @@ -8197,25 +8192,25 @@ export class FlinkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new BooleanExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 260; - this.enterRecursionRule(localContext, 260, FlinkSqlParser.RULE_booleanExpression, _p); + let _startState = 258; + this.enterRecursionRule(localContext, 258, FlinkSqlParser.RULE_booleanExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1729; + this.state = 1739; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 194, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 193, this.context) ) { case 1: { localContext = new LogicalNotContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1718; + this.state = 1728; this.match(FlinkSqlParser.KW_NOT); - this.state = 1719; + this.state = 1729; this.booleanExpression(6); } break; @@ -8224,13 +8219,13 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ExistsContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1720; + this.state = 1730; this.match(FlinkSqlParser.KW_EXISTS); - this.state = 1721; + this.state = 1731; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1722; + this.state = 1732; this.queryStatement(0); - this.state = 1723; + this.state = 1733; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8239,14 +8234,14 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new PredicatedContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1725; + this.state = 1735; this.valueExpression(0); - this.state = 1727; + this.state = 1737; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 193, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 192, this.context) ) { case 1: { - this.state = 1726; + this.state = 1736; this.predicate(); } break; @@ -8255,9 +8250,9 @@ export class FlinkSqlParser extends SQLParserBase { break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 1745; + this.state = 1755; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 197, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 196, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -8265,21 +8260,21 @@ export class FlinkSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 1743; + this.state = 1753; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 196, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 195, this.context) ) { case 1: { localContext = new LogicalBinaryContext(new BooleanExpressionContext(parentContext, parentState)); (localContext as LogicalBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1731; + this.state = 1741; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 1732; + this.state = 1742; (localContext as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_AND); - this.state = 1733; + this.state = 1743; (localContext as LogicalBinaryContext)._right = this.booleanExpression(4); } break; @@ -8288,13 +8283,13 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new LogicalBinaryContext(new BooleanExpressionContext(parentContext, parentState)); (localContext as LogicalBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1734; + this.state = 1744; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 1735; + this.state = 1745; (localContext as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_OR); - this.state = 1736; + this.state = 1746; (localContext as LogicalBinaryContext)._right = this.booleanExpression(3); } break; @@ -8302,23 +8297,23 @@ export class FlinkSqlParser extends SQLParserBase { { localContext = new LogicalNestedContext(new BooleanExpressionContext(parentContext, parentState)); this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1737; + this.state = 1747; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 1738; + this.state = 1748; this.match(FlinkSqlParser.KW_IS); - this.state = 1740; + this.state = 1750; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1739; + this.state = 1749; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1742; + this.state = 1752; (localContext as LogicalNestedContext)._kind = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 140 || _la === 244 || _la === 397 || _la === 404)) { @@ -8333,9 +8328,9 @@ export class FlinkSqlParser extends SQLParserBase { } } } - this.state = 1747; + this.state = 1757; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 197, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 196, this.context); } } } @@ -8355,33 +8350,33 @@ export class FlinkSqlParser extends SQLParserBase { } public predicate(): PredicateContext { let localContext = new PredicateContext(this.context, this.state); - this.enterRule(localContext, 262, FlinkSqlParser.RULE_predicate); + this.enterRule(localContext, 260, FlinkSqlParser.RULE_predicate); let _la: number; try { - this.state = 1815; + this.state = 1825; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 208, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 207, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1749; + this.state = 1759; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1748; + this.state = 1758; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1751; + this.state = 1761; localContext._kind = this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1753; + this.state = 1763; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 19 || _la === 369) { { - this.state = 1752; + this.state = 1762; _la = this.tokenStream.LA(1); if(!(_la === 19 || _la === 369)) { this.errorHandler.recoverInline(this); @@ -8393,131 +8388,131 @@ export class FlinkSqlParser extends SQLParserBase { } } - this.state = 1755; + this.state = 1765; localContext._lower = this.valueExpression(0); - this.state = 1756; + this.state = 1766; this.match(FlinkSqlParser.KW_AND); - this.state = 1757; + this.state = 1767; localContext._upper = this.valueExpression(0); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1760; + this.state = 1770; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1759; + this.state = 1769; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1762; + this.state = 1772; localContext._kind = this.match(FlinkSqlParser.KW_IN); - this.state = 1763; + this.state = 1773; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1764; + this.state = 1774; this.expression(); - this.state = 1769; + this.state = 1779; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1765; + this.state = 1775; this.match(FlinkSqlParser.COMMA); - this.state = 1766; + this.state = 1776; this.expression(); } } - this.state = 1771; + this.state = 1781; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1772; + this.state = 1782; this.match(FlinkSqlParser.RR_BRACKET); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1775; + this.state = 1785; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1774; + this.state = 1784; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1777; + this.state = 1787; localContext._kind = this.match(FlinkSqlParser.KW_IN); - this.state = 1778; + this.state = 1788; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1779; + this.state = 1789; this.queryStatement(0); - this.state = 1780; + this.state = 1790; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1782; + this.state = 1792; localContext._kind = this.match(FlinkSqlParser.KW_EXISTS); - this.state = 1783; + this.state = 1793; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1784; + this.state = 1794; this.queryStatement(0); - this.state = 1785; + this.state = 1795; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1788; + this.state = 1798; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1787; + this.state = 1797; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1790; + this.state = 1800; localContext._kind = this.match(FlinkSqlParser.KW_RLIKE); - this.state = 1791; + this.state = 1801; localContext._pattern = this.valueExpression(0); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 1792; + this.state = 1802; this.likePredicate(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 1793; + this.state = 1803; this.match(FlinkSqlParser.KW_IS); - this.state = 1795; + this.state = 1805; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1794; + this.state = 1804; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1797; + this.state = 1807; localContext._kind = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 140 || _la === 244 || _la === 397 || _la === 404)) { @@ -8532,53 +8527,53 @@ export class FlinkSqlParser extends SQLParserBase { case 8: this.enterOuterAlt(localContext, 8); { - this.state = 1798; + this.state = 1808; this.match(FlinkSqlParser.KW_IS); - this.state = 1800; + this.state = 1810; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1799; + this.state = 1809; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1802; + this.state = 1812; localContext._kind = this.match(FlinkSqlParser.KW_DISTINCT); - this.state = 1803; + this.state = 1813; this.match(FlinkSqlParser.KW_FROM); - this.state = 1804; + this.state = 1814; localContext._right = this.valueExpression(0); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 1806; + this.state = 1816; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1805; + this.state = 1815; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1808; + this.state = 1818; localContext._kind = this.match(FlinkSqlParser.KW_SIMILAR); - this.state = 1809; + this.state = 1819; this.match(FlinkSqlParser.KW_TO); - this.state = 1810; + this.state = 1820; localContext._right = this.valueExpression(0); - this.state = 1813; + this.state = 1823; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 207, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 206, this.context) ) { case 1: { - this.state = 1811; + this.state = 1821; this.match(FlinkSqlParser.KW_ESCAPE); - this.state = 1812; + this.state = 1822; this.stringLiteral(); } break; @@ -8603,28 +8598,28 @@ export class FlinkSqlParser extends SQLParserBase { } public likePredicate(): LikePredicateContext { let localContext = new LikePredicateContext(this.context, this.state); - this.enterRule(localContext, 264, FlinkSqlParser.RULE_likePredicate); + this.enterRule(localContext, 262, FlinkSqlParser.RULE_likePredicate); let _la: number; try { - this.state = 1846; + this.state = 1856; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 214, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 213, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1818; + this.state = 1828; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1817; + this.state = 1827; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1820; + this.state = 1830; localContext._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1821; + this.state = 1831; localContext._quantifier = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 5 || _la === 11)) { @@ -8634,40 +8629,40 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1835; + this.state = 1845; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 211, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 210, this.context) ) { case 1: { - this.state = 1822; + this.state = 1832; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1823; + this.state = 1833; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1824; + this.state = 1834; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1825; + this.state = 1835; this.expression(); - this.state = 1830; + this.state = 1840; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 1826; + this.state = 1836; this.match(FlinkSqlParser.COMMA); - this.state = 1827; + this.state = 1837; this.expression(); } } - this.state = 1832; + this.state = 1842; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1833; + this.state = 1843; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8677,28 +8672,28 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1838; + this.state = 1848; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 1837; + this.state = 1847; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1840; + this.state = 1850; localContext._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1841; + this.state = 1851; localContext._pattern = this.valueExpression(0); - this.state = 1844; + this.state = 1854; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 213, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 212, this.context) ) { case 1: { - this.state = 1842; + this.state = 1852; this.match(FlinkSqlParser.KW_ESCAPE); - this.state = 1843; + this.state = 1853; this.stringLiteral(); } break; @@ -8733,23 +8728,23 @@ export class FlinkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new ValueExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 266; - this.enterRecursionRule(localContext, 266, FlinkSqlParser.RULE_valueExpression, _p); + let _startState = 264; + this.enterRecursionRule(localContext, 264, FlinkSqlParser.RULE_valueExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1852; + this.state = 1862; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 215, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 214, this.context) ) { case 1: { localContext = new ValueExpressionDefaultContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1849; + this.state = 1859; this.primaryExpression(0); } break; @@ -8758,7 +8753,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ArithmeticUnaryContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1850; + this.state = 1860; (localContext as ArithmeticUnaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 509)) & ~0x1F) === 0 && ((1 << (_la - 509)) & 3145729) !== 0))) { @@ -8768,15 +8763,15 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1851; + this.state = 1861; this.valueExpression(7); } break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 1875; + this.state = 1885; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 217, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 216, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -8784,19 +8779,19 @@ export class FlinkSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 1873; + this.state = 1883; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 216, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 215, this.context) ) { case 1: { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1854; + this.state = 1864; if (!(this.precpred(this.context, 6))) { throw this.createFailedPredicateException("this.precpred(this.context, 6)"); } - this.state = 1855; + this.state = 1865; (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 452 || ((((_la - 527)) & ~0x1F) === 0 && ((1 << (_la - 527)) & 145) !== 0))) { @@ -8806,7 +8801,7 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1856; + this.state = 1866; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(7); } break; @@ -8815,11 +8810,11 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1857; + this.state = 1867; if (!(this.precpred(this.context, 5))) { throw this.createFailedPredicateException("this.precpred(this.context, 5)"); } - this.state = 1858; + this.state = 1868; (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 529)) & ~0x1F) === 0 && ((1 << (_la - 529)) & 11) !== 0))) { @@ -8829,7 +8824,7 @@ export class FlinkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1859; + this.state = 1869; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(6); } break; @@ -8838,13 +8833,13 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1860; + this.state = 1870; if (!(this.precpred(this.context, 4))) { throw this.createFailedPredicateException("this.precpred(this.context, 4)"); } - this.state = 1861; + this.state = 1871; (localContext as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 1862; + this.state = 1872; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(5); } break; @@ -8853,13 +8848,13 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1863; + this.state = 1873; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 1864; + this.state = 1874; (localContext as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_XOR_OP); - this.state = 1865; + this.state = 1875; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(4); } break; @@ -8868,13 +8863,13 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1866; + this.state = 1876; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 1867; + this.state = 1877; (localContext as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 1868; + this.state = 1878; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(3); } break; @@ -8883,22 +8878,22 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ComparisonContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ComparisonContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1869; + this.state = 1879; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 1870; + this.state = 1880; this.comparisonOperator(); - this.state = 1871; + this.state = 1881; (localContext as ComparisonContext)._right = this.valueExpression(2); } break; } } } - this.state = 1877; + this.state = 1887; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 217, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 216, this.context); } } } @@ -8916,102 +8911,323 @@ export class FlinkSqlParser extends SQLParserBase { } 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 = 268; - this.enterRecursionRule(localContext, 268, FlinkSqlParser.RULE_primaryExpression, _p); + public functionCallExpression(): FunctionCallExpressionContext { + let localContext = new FunctionCallExpressionContext(this.context, this.state); + this.enterRule(localContext, 266, FlinkSqlParser.RULE_functionCallExpression); let _la: number; try { - let alternative: number; - this.enterOuterAlt(localContext, 1); - { - this.state = 1970; + this.state = 1907; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 227, this.context) ) { - case 1: + switch (this.tokenStream.LA(1)) { + case FlinkSqlParser.KW_CURRENT_DATE: + case FlinkSqlParser.KW_CURRENT_TIME: + case FlinkSqlParser.KW_CURRENT_TIMESTAMP: + case FlinkSqlParser.KW_LOCALTIME: + case FlinkSqlParser.KW_LOCALTIMESTAMP: + this.enterOuterAlt(localContext, 1); { - localContext = new SearchedCaseContext(localContext); - this.context = localContext; - previousContext = localContext; - - this.state = 1879; - this.match(FlinkSqlParser.KW_CASE); - this.state = 1881; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - do { - { - { - this.state = 1880; - this.whenClause(); - } - } - this.state = 1883; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } while (_la === 428); - this.state = 1887; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 120) { - { - this.state = 1885; - this.match(FlinkSqlParser.KW_ELSE); - this.state = 1886; - (localContext as SearchedCaseContext)._elseExpression = this.expression(); - } + this.state = 1888; + this.reservedKeywordsNoParamsUsedAsFuncName(); } - + break; + case FlinkSqlParser.KW_DATE: + case FlinkSqlParser.KW_INTERVAL: + case FlinkSqlParser.KW_TIME: + case FlinkSqlParser.KW_TIMESTAMP: + this.enterOuterAlt(localContext, 2); + { this.state = 1889; - this.match(FlinkSqlParser.KW_END); + this.functionNameAndParams(); } break; - case 2: - { - localContext = new SimpleCaseContext(localContext); - this.context = localContext; - previousContext = localContext; + case FlinkSqlParser.KW_ABS: + case FlinkSqlParser.KW_ARRAY: + case FlinkSqlParser.KW_AVG: + case FlinkSqlParser.KW_CARDINALITY: + case FlinkSqlParser.KW_CAST: + case FlinkSqlParser.KW_CEIL: + case FlinkSqlParser.KW_CEILING: + case FlinkSqlParser.KW_COALESCE: + case FlinkSqlParser.KW_COLLECT: + case FlinkSqlParser.KW_COUNT: + case FlinkSqlParser.KW_CUME_DIST: + case FlinkSqlParser.KW_DAYOFWEEK: + case FlinkSqlParser.KW_DAYOFYEAR: + case FlinkSqlParser.KW_DENSE_RANK: + case FlinkSqlParser.KW_ELEMENT: + case FlinkSqlParser.KW_EXP: + case FlinkSqlParser.KW_EXTRACT: + case FlinkSqlParser.KW_FIRST_VALUE: + case FlinkSqlParser.KW_FLOOR: + case FlinkSqlParser.KW_GROUPING: + case FlinkSqlParser.KW_HOUR: + case FlinkSqlParser.KW_IF: + case FlinkSqlParser.KW_LAG: + case FlinkSqlParser.KW_LAST_VALUE: + case FlinkSqlParser.KW_LEAD: + case FlinkSqlParser.KW_LEFT: + case FlinkSqlParser.KW_LN: + case FlinkSqlParser.KW_LOWER: + case FlinkSqlParser.KW_MAX: + case FlinkSqlParser.KW_MIN: + case FlinkSqlParser.KW_MINUTE: + case FlinkSqlParser.KW_MOD: + case FlinkSqlParser.KW_MONTH: + case FlinkSqlParser.KW_NTILE: + case FlinkSqlParser.KW_NULLIF: + case FlinkSqlParser.KW_OVERLAY: + case FlinkSqlParser.KW_PERCENT_RANK: + case FlinkSqlParser.KW_POSITION: + case FlinkSqlParser.KW_POWER: + case FlinkSqlParser.KW_RANK: + case FlinkSqlParser.KW_RIGHT: + case FlinkSqlParser.KW_ROW: + case FlinkSqlParser.KW_ROWS: + case FlinkSqlParser.KW_ROW_NUMBER: + case FlinkSqlParser.KW_SECOND: + case FlinkSqlParser.KW_STDDEV_POP: + case FlinkSqlParser.KW_STDDEV_SAMP: + case FlinkSqlParser.KW_SUBSTRING: + case FlinkSqlParser.KW_SUM: + case FlinkSqlParser.KW_TIMESTAMP_DIFF: + case FlinkSqlParser.KW_TRIM: + case FlinkSqlParser.KW_TRUNCATE: + case FlinkSqlParser.KW_TRY_CAST: + case FlinkSqlParser.KW_UPPER: + case FlinkSqlParser.KW_VAR_POP: + case FlinkSqlParser.KW_VAR_SAMP: + case FlinkSqlParser.KW_YEAR: + case FlinkSqlParser.KW_ADD: + case FlinkSqlParser.KW_AFTER: + case FlinkSqlParser.KW_ASC: + case FlinkSqlParser.KW_CASCADE: + case FlinkSqlParser.KW_CATALOG: + case FlinkSqlParser.KW_CENTURY: + case FlinkSqlParser.KW_CONFIG: + case FlinkSqlParser.KW_CONSTRAINTS: + case FlinkSqlParser.KW_CUMULATE: + case FlinkSqlParser.KW_DATA: + case FlinkSqlParser.KW_DATABASE: + case FlinkSqlParser.KW_DAYS: + case FlinkSqlParser.KW_DECADE: + case FlinkSqlParser.KW_DESC: + case FlinkSqlParser.KW_DESCRIPTOR: + case FlinkSqlParser.KW_DIV: + case FlinkSqlParser.KW_ENGINE: + case FlinkSqlParser.KW_EPOCH: + case FlinkSqlParser.KW_EXCLUDING: + case FlinkSqlParser.KW_FILE: + case FlinkSqlParser.KW_FIRST: + case FlinkSqlParser.KW_GENERATED: + case FlinkSqlParser.KW_HOP: + case FlinkSqlParser.KW_HOURS: + case FlinkSqlParser.KW_IGNORE: + case FlinkSqlParser.KW_INCLUDING: + case FlinkSqlParser.KW_JAR: + case FlinkSqlParser.KW_JARS: + case FlinkSqlParser.KW_JAVA: + case FlinkSqlParser.KW_KEY: + case FlinkSqlParser.KW_LAST: + case FlinkSqlParser.KW_LOAD: + case FlinkSqlParser.KW_MAP: + case FlinkSqlParser.KW_MICROSECOND: + case FlinkSqlParser.KW_MILLENNIUM: + case FlinkSqlParser.KW_MILLISECOND: + case FlinkSqlParser.KW_MINUTES: + case FlinkSqlParser.KW_MONTHS: + case FlinkSqlParser.KW_NANOSECOND: + case FlinkSqlParser.KW_NULLS: + case FlinkSqlParser.KW_OPTIONS: + case FlinkSqlParser.KW_PAST: + case FlinkSqlParser.KW_PLAN: + case FlinkSqlParser.KW_PRECEDING: + case FlinkSqlParser.KW_PYTHON: + case FlinkSqlParser.KW_PYTHON_ARCHIVES: + case FlinkSqlParser.KW_PYTHON_DEPENDENCIES: + case FlinkSqlParser.KW_PYTHON_FILES: + case FlinkSqlParser.KW_PYTHON_JAR: + case FlinkSqlParser.KW_PYTHON_PARAMETER: + case FlinkSqlParser.KW_PYTHON_REQUIREMENTS: + case FlinkSqlParser.KW_QUARTER: + case FlinkSqlParser.KW_REMOVE: + case FlinkSqlParser.KW_RESTRICT: + case FlinkSqlParser.KW_SECONDS: + case FlinkSqlParser.KW_SESSION: + case FlinkSqlParser.KW_SETS: + case FlinkSqlParser.KW_SIZE: + case FlinkSqlParser.KW_SLIDE: + case FlinkSqlParser.KW_STEP: + case FlinkSqlParser.KW_TEMPORARY: + case FlinkSqlParser.KW_TIMECOL: + case FlinkSqlParser.KW_TUMBLE: + case FlinkSqlParser.KW_UNLOAD: + case FlinkSqlParser.KW_VIEW: + case FlinkSqlParser.KW_WEEK: + case FlinkSqlParser.KW_YEARS: + case FlinkSqlParser.KW_ZONE: + case FlinkSqlParser.STRING_LITERAL: + case FlinkSqlParser.DIG_LITERAL: + case FlinkSqlParser.ID_LITERAL: + this.enterOuterAlt(localContext, 3); + { + this.state = 1890; + this.functionNameWithParams(); this.state = 1891; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1903; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 8396848) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 10489249) !== 0) || ((((_la - 69)) & ~0x1F) === 0 && ((1 << (_la - 69)) & 1883341377) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 201330753) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 337641555) !== 0) || ((((_la - 182)) & ~0x1F) === 0 && ((1 << (_la - 182)) & 244224001) !== 0) || ((((_la - 214)) & ~0x1F) === 0 && ((1 << (_la - 214)) & 3892347713) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 537530369) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 131185) !== 0) || ((((_la - 357)) & ~0x1F) === 0 && ((1 << (_la - 357)) & 14681219) !== 0) || ((((_la - 389)) & ~0x1F) === 0 && ((1 << (_la - 389)) & 3238528833) !== 0) || ((((_la - 427)) & ~0x1F) === 0 && ((1 << (_la - 427)) & 4294966785) !== 0) || ((((_la - 459)) & ~0x1F) === 0 && ((1 << (_la - 459)) & 4294967295) !== 0) || ((((_la - 491)) & ~0x1F) === 0 && ((1 << (_la - 491)) & 33832959) !== 0) || ((((_la - 527)) & ~0x1F) === 0 && ((1 << (_la - 527)) & 31757) !== 0)) { + { + this.state = 1893; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 217, this.context) ) { + case 1: + { + this.state = 1892; + this.setQuantifier(); + } + break; + } + this.state = 1895; + this.functionParam(); + this.state = 1900; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 520) { + { + { + this.state = 1896; + this.match(FlinkSqlParser.COMMA); + this.state = 1897; + this.functionParam(); + } + } + this.state = 1902; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } + } + } + + this.state = 1905; + this.match(FlinkSqlParser.RR_BRACKET); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + 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 = 268; + this.enterRecursionRule(localContext, 268, FlinkSqlParser.RULE_primaryExpression, _p); + let _la: number; + try { + let alternative: number; + this.enterOuterAlt(localContext, 1); + { + this.state = 1984; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 227, this.context) ) { + case 1: + { + localContext = new SearchedCaseContext(localContext); + this.context = localContext; + previousContext = localContext; + + this.state = 1910; this.match(FlinkSqlParser.KW_CASE); - this.state = 1892; + this.state = 1912; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + do { + { + { + this.state = 1911; + this.whenClause(); + } + } + this.state = 1914; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } while (_la === 428); + this.state = 1918; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 120) { + { + this.state = 1916; + this.match(FlinkSqlParser.KW_ELSE); + this.state = 1917; + (localContext as SearchedCaseContext)._elseExpression = this.expression(); + } + } + + this.state = 1920; + this.match(FlinkSqlParser.KW_END); + } + break; + case 2: + { + localContext = new SimpleCaseContext(localContext); + this.context = localContext; + previousContext = localContext; + this.state = 1922; + this.match(FlinkSqlParser.KW_CASE); + this.state = 1923; (localContext as SimpleCaseContext)._value = this.expression(); - this.state = 1894; + this.state = 1925; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 1893; + this.state = 1924; this.whenClause(); } } - this.state = 1896; + this.state = 1927; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 428); - this.state = 1900; + this.state = 1931; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 120) { { - this.state = 1898; + this.state = 1929; this.match(FlinkSqlParser.KW_ELSE); - this.state = 1899; + this.state = 1930; (localContext as SimpleCaseContext)._elseExpression = this.expression(); } } - this.state = 1902; + this.state = 1933; this.match(FlinkSqlParser.KW_END); } break; @@ -9020,17 +9236,17 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new CastContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1904; + this.state = 1935; this.match(FlinkSqlParser.KW_CAST); - this.state = 1905; + this.state = 1936; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1906; + this.state = 1937; this.expression(); - this.state = 1907; + this.state = 1938; this.match(FlinkSqlParser.KW_AS); - this.state = 1908; + this.state = 1939; this.columnType(); - this.state = 1909; + this.state = 1940; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9039,25 +9255,25 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new FirstContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1911; + this.state = 1942; this.match(FlinkSqlParser.KW_FIRST); - this.state = 1912; + this.state = 1943; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1913; + this.state = 1944; this.expression(); - this.state = 1916; + this.state = 1947; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 461) { { - this.state = 1914; + this.state = 1945; this.match(FlinkSqlParser.KW_IGNORE); - this.state = 1915; + this.state = 1946; this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1918; + this.state = 1949; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9066,25 +9282,25 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new LastContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1920; + this.state = 1951; this.match(FlinkSqlParser.KW_LAST); - this.state = 1921; + this.state = 1952; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1922; + this.state = 1953; this.expression(); - this.state = 1925; + this.state = 1956; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 461) { { - this.state = 1923; + this.state = 1954; this.match(FlinkSqlParser.KW_IGNORE); - this.state = 1924; + this.state = 1955; this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1927; + this.state = 1958; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9093,17 +9309,17 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new PositionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1929; + this.state = 1960; this.match(FlinkSqlParser.KW_POSITION); - this.state = 1930; + this.state = 1961; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1931; + this.state = 1962; (localContext as PositionContext)._substr = this.valueExpression(0); - this.state = 1932; + this.state = 1963; this.match(FlinkSqlParser.KW_IN); - this.state = 1933; + this.state = 1964; (localContext as PositionContext)._str = this.valueExpression(0); - this.state = 1934; + this.state = 1965; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9112,7 +9328,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ConstantDefaultContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1936; + this.state = 1967; this.constant(); } break; @@ -9121,7 +9337,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new StarContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1937; + this.state = 1968; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -9130,11 +9346,11 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new StarContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1938; + this.state = 1969; this.uid(); - this.state = 1939; + this.state = 1970; this.match(FlinkSqlParser.DOT); - this.state = 1940; + this.state = 1971; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -9143,11 +9359,11 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new SubqueryExpressionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1942; + this.state = 1973; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1943; + this.state = 1974; this.queryStatement(0); - this.state = 1944; + this.state = 1975; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9156,48 +9372,8 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new FunctionCallContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1946; - this.functionName(); - this.state = 1947; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1959; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 8396848) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 10489249) !== 0) || ((((_la - 69)) & ~0x1F) === 0 && ((1 << (_la - 69)) & 1883341377) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 201330753) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 337641555) !== 0) || ((((_la - 182)) & ~0x1F) === 0 && ((1 << (_la - 182)) & 244224001) !== 0) || ((((_la - 214)) & ~0x1F) === 0 && ((1 << (_la - 214)) & 3892347713) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 537530369) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 131185) !== 0) || ((((_la - 357)) & ~0x1F) === 0 && ((1 << (_la - 357)) & 14681219) !== 0) || ((((_la - 389)) & ~0x1F) === 0 && ((1 << (_la - 389)) & 3238528833) !== 0) || ((((_la - 427)) & ~0x1F) === 0 && ((1 << (_la - 427)) & 4294966785) !== 0) || ((((_la - 459)) & ~0x1F) === 0 && ((1 << (_la - 459)) & 4294967295) !== 0) || ((((_la - 491)) & ~0x1F) === 0 && ((1 << (_la - 491)) & 33832959) !== 0) || ((((_la - 527)) & ~0x1F) === 0 && ((1 << (_la - 527)) & 31757) !== 0)) { - { - this.state = 1949; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 224, this.context) ) { - case 1: - { - this.state = 1948; - this.setQuantifier(); - } - break; - } - this.state = 1951; - this.functionParam(); - this.state = 1956; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 520) { - { - { - this.state = 1952; - this.match(FlinkSqlParser.COMMA); - this.state = 1953; - this.functionParam(); - } - } - this.state = 1958; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - - this.state = 1961; - this.match(FlinkSqlParser.RR_BRACKET); + this.state = 1977; + this.functionCallExpression(); } break; case 12: @@ -9205,7 +9381,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ColumnReferenceContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1963; + this.state = 1978; this.identifier(); } break; @@ -9214,7 +9390,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new DereferenceContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1964; + this.state = 1979; this.dereferenceDefinition(); } break; @@ -9223,26 +9399,17 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new ParenthesizedExpressionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 1965; + this.state = 1980; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1966; + this.state = 1981; this.expression(); - this.state = 1967; + this.state = 1982; this.match(FlinkSqlParser.RR_BRACKET); } break; - case 15: - { - localContext = new DateFunctionExpressionContext(localContext); - this.context = localContext; - previousContext = localContext; - this.state = 1969; - this.match(FlinkSqlParser.KW_CURRENT_TIMESTAMP); - } - break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 1979; + this.state = 1993; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 228, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -9256,20 +9423,20 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new SubscriptContext(new PrimaryExpressionContext(parentContext, parentState)); (localContext as SubscriptContext)._value = previousContext; this.pushNewRecursionContext(localContext, _startState, FlinkSqlParser.RULE_primaryExpression); - this.state = 1972; - if (!(this.precpred(this.context, 5))) { - throw this.createFailedPredicateException("this.precpred(this.context, 5)"); + this.state = 1986; + if (!(this.precpred(this.context, 4))) { + throw this.createFailedPredicateException("this.precpred(this.context, 4)"); } - this.state = 1973; + this.state = 1987; this.match(FlinkSqlParser.LS_BRACKET); - this.state = 1974; + this.state = 1988; (localContext as SubscriptContext)._index = this.valueExpression(0); - this.state = 1975; + this.state = 1989; this.match(FlinkSqlParser.RS_BRACKET); } } } - this.state = 1981; + this.state = 1995; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 228, this.context); } @@ -9295,7 +9462,7 @@ export class FlinkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1982; + this.state = 1996; this.uid(); } } @@ -9317,20 +9484,114 @@ export class FlinkSqlParser extends SQLParserBase { let localContext = new FunctionNameContext(this.context, this.state); this.enterRule(localContext, 272, FlinkSqlParser.RULE_functionName); try { - this.state = 1986; + this.state = 2002; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 229, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1984; + this.state = 1998; + this.reservedKeywordsUsedAsFuncName(); + } + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 1999; + this.reservedKeywordsNoParamsUsedAsFuncName(); + } + break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 2000; + this.reservedKeywordsFollowParamsUsedAsFuncName(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 2001; + this.uid(); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionNameAndParams(): FunctionNameAndParamsContext { + let localContext = new FunctionNameAndParamsContext(this.context, this.state); + this.enterRule(localContext, 274, FlinkSqlParser.RULE_functionNameAndParams); + try { + this.state = 2008; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case FlinkSqlParser.KW_DATE: + case FlinkSqlParser.KW_TIME: + case FlinkSqlParser.KW_TIMESTAMP: + this.enterOuterAlt(localContext, 1); + { + this.state = 2004; + this.reservedKeywordsFollowParamsUsedAsFuncName(); + this.state = 2005; + this.match(FlinkSqlParser.STRING_LITERAL); + } + break; + case FlinkSqlParser.KW_INTERVAL: + this.enterOuterAlt(localContext, 2); + { + this.state = 2007; + this.timeIntervalExpression(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public functionNameWithParams(): FunctionNameWithParamsContext { + let localContext = new FunctionNameWithParamsContext(this.context, this.state); + this.enterRule(localContext, 276, FlinkSqlParser.RULE_functionNameWithParams); + try { + this.state = 2012; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 231, this.context) ) { + case 1: + this.enterOuterAlt(localContext, 1); + { + this.state = 2010; this.reservedKeywordsUsedAsFuncName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1985; + this.state = 2011; this.uid(); } break; @@ -9352,36 +9613,36 @@ export class FlinkSqlParser extends SQLParserBase { } public functionParam(): FunctionParamContext { let localContext = new FunctionParamContext(this.context, this.state); - this.enterRule(localContext, 274, FlinkSqlParser.RULE_functionParam); + this.enterRule(localContext, 278, FlinkSqlParser.RULE_functionParam); try { - this.state = 1992; + this.state = 2018; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 230, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 232, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1988; + this.state = 2014; this.reservedKeywordsUsedAsFuncParam(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1989; + this.state = 2015; this.timeIntervalUnit(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1990; + this.state = 2016; this.timePointUnit(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1991; + this.state = 2017; this.expression(); } break; @@ -9403,11 +9664,11 @@ export class FlinkSqlParser extends SQLParserBase { } public dereferenceDefinition(): DereferenceDefinitionContext { let localContext = new DereferenceDefinitionContext(this.context, this.state); - this.enterRule(localContext, 276, FlinkSqlParser.RULE_dereferenceDefinition); + this.enterRule(localContext, 280, FlinkSqlParser.RULE_dereferenceDefinition); try { this.enterOuterAlt(localContext, 1); { - this.state = 1994; + this.state = 2020; this.uid(); } } @@ -9427,11 +9688,11 @@ export class FlinkSqlParser extends SQLParserBase { } public correlationName(): CorrelationNameContext { let localContext = new CorrelationNameContext(this.context, this.state); - this.enterRule(localContext, 278, FlinkSqlParser.RULE_correlationName); + this.enterRule(localContext, 282, FlinkSqlParser.RULE_correlationName); try { this.enterOuterAlt(localContext, 1); { - this.state = 1996; + this.state = 2022; this.identifier(); } } @@ -9451,22 +9712,22 @@ export class FlinkSqlParser extends SQLParserBase { } public qualifiedName(): QualifiedNameContext { let localContext = new QualifiedNameContext(this.context, this.state); - this.enterRule(localContext, 280, FlinkSqlParser.RULE_qualifiedName); + this.enterRule(localContext, 284, FlinkSqlParser.RULE_qualifiedName); try { - this.state = 2000; + this.state = 2026; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 231, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 233, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1998; + this.state = 2024; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1999; + this.state = 2025; this.dereferenceDefinition(); } break; @@ -9488,24 +9749,24 @@ export class FlinkSqlParser extends SQLParserBase { } public timeIntervalExpression(): TimeIntervalExpressionContext { let localContext = new TimeIntervalExpressionContext(this.context, this.state); - this.enterRule(localContext, 282, FlinkSqlParser.RULE_timeIntervalExpression); + this.enterRule(localContext, 286, FlinkSqlParser.RULE_timeIntervalExpression); try { this.enterOuterAlt(localContext, 1); { - this.state = 2002; + this.state = 2028; this.match(FlinkSqlParser.KW_INTERVAL); - this.state = 2005; + this.state = 2031; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 232, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 234, this.context) ) { case 1: { - this.state = 2003; + this.state = 2029; this.errorCapturingMultiUnitsInterval(); } break; case 2: { - this.state = 2004; + this.state = 2030; this.errorCapturingUnitToUnitInterval(); } break; @@ -9528,18 +9789,18 @@ export class FlinkSqlParser extends SQLParserBase { } public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { let localContext = new ErrorCapturingMultiUnitsIntervalContext(this.context, this.state); - this.enterRule(localContext, 284, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); + this.enterRule(localContext, 288, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); try { this.enterOuterAlt(localContext, 1); { - this.state = 2007; + this.state = 2033; this.multiUnitsInterval(); - this.state = 2009; + this.state = 2035; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 233, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 235, this.context) ) { case 1: { - this.state = 2008; + this.state = 2034; this.unitToUnitInterval(); } break; @@ -9562,12 +9823,12 @@ export class FlinkSqlParser extends SQLParserBase { } public multiUnitsInterval(): MultiUnitsIntervalContext { let localContext = new MultiUnitsIntervalContext(this.context, this.state); - this.enterRule(localContext, 286, FlinkSqlParser.RULE_multiUnitsInterval); + this.enterRule(localContext, 290, FlinkSqlParser.RULE_multiUnitsInterval); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2014; + this.state = 2040; this.errorHandler.sync(this); alternative = 1; do { @@ -9575,9 +9836,9 @@ export class FlinkSqlParser extends SQLParserBase { case 1: { { - this.state = 2011; + this.state = 2037; this.intervalValue(); - this.state = 2012; + this.state = 2038; this.timeIntervalUnit(); } } @@ -9585,9 +9846,9 @@ export class FlinkSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 2016; + this.state = 2042; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 234, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 236, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } } @@ -9607,24 +9868,24 @@ export class FlinkSqlParser extends SQLParserBase { } public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext { let localContext = new ErrorCapturingUnitToUnitIntervalContext(this.context, this.state); - this.enterRule(localContext, 288, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); + this.enterRule(localContext, 292, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); try { this.enterOuterAlt(localContext, 1); { - this.state = 2018; + this.state = 2044; localContext._body = this.unitToUnitInterval(); - this.state = 2021; + this.state = 2047; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 235, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 237, this.context) ) { case 1: { - this.state = 2019; + this.state = 2045; localContext._error1 = this.multiUnitsInterval(); } break; case 2: { - this.state = 2020; + this.state = 2046; localContext._error2 = this.unitToUnitInterval(); } break; @@ -9647,17 +9908,17 @@ export class FlinkSqlParser extends SQLParserBase { } public unitToUnitInterval(): UnitToUnitIntervalContext { let localContext = new UnitToUnitIntervalContext(this.context, this.state); - this.enterRule(localContext, 290, FlinkSqlParser.RULE_unitToUnitInterval); + this.enterRule(localContext, 294, FlinkSqlParser.RULE_unitToUnitInterval); try { this.enterOuterAlt(localContext, 1); { - this.state = 2023; + this.state = 2049; localContext._value = this.intervalValue(); - this.state = 2024; + this.state = 2050; localContext._from_ = this.timeIntervalUnit(); - this.state = 2025; + this.state = 2051; this.match(FlinkSqlParser.KW_TO); - this.state = 2026; + this.state = 2052; localContext._to = this.timeIntervalUnit(); } } @@ -9677,10 +9938,10 @@ export class FlinkSqlParser extends SQLParserBase { } public intervalValue(): IntervalValueContext { let localContext = new IntervalValueContext(this.context, this.state); - this.enterRule(localContext, 292, FlinkSqlParser.RULE_intervalValue); + this.enterRule(localContext, 296, FlinkSqlParser.RULE_intervalValue); let _la: number; try { - this.state = 2033; + this.state = 2059; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.HYPNEN_SIGN: @@ -9689,12 +9950,12 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.REAL_LITERAL: this.enterOuterAlt(localContext, 1); { - this.state = 2029; + this.state = 2055; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 529 || _la === 530) { { - this.state = 2028; + this.state = 2054; _la = this.tokenStream.LA(1); if(!(_la === 529 || _la === 530)) { this.errorHandler.recoverInline(this); @@ -9706,7 +9967,7 @@ export class FlinkSqlParser extends SQLParserBase { } } - this.state = 2031; + this.state = 2057; _la = this.tokenStream.LA(1); if(!(_la === 538 || _la === 539)) { this.errorHandler.recoverInline(this); @@ -9720,7 +9981,7 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.STRING_LITERAL: this.enterOuterAlt(localContext, 2); { - this.state = 2032; + this.state = 2058; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -9744,29 +10005,29 @@ export class FlinkSqlParser extends SQLParserBase { } public tableAlias(): TableAliasContext { let localContext = new TableAliasContext(this.context, this.state); - this.enterRule(localContext, 294, FlinkSqlParser.RULE_tableAlias); + this.enterRule(localContext, 298, FlinkSqlParser.RULE_tableAlias); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2036; + this.state = 2062; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 2035; + this.state = 2061; this.match(FlinkSqlParser.KW_AS); } } - this.state = 2038; - this.identifier(); - this.state = 2040; + this.state = 2064; + localContext._alias = this.identifier(); + this.state = 2066; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 239, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 241, this.context) ) { case 1: { - this.state = 2039; + this.state = 2065; this.identifierList(); } break; @@ -9789,13 +10050,13 @@ export class FlinkSqlParser extends SQLParserBase { } public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { let localContext = new ErrorCapturingIdentifierContext(this.context, this.state); - this.enterRule(localContext, 296, FlinkSqlParser.RULE_errorCapturingIdentifier); + this.enterRule(localContext, 300, FlinkSqlParser.RULE_errorCapturingIdentifier); try { this.enterOuterAlt(localContext, 1); { - this.state = 2042; + this.state = 2068; this.identifier(); - this.state = 2043; + this.state = 2069; this.errorCapturingIdentifierExtra(); } } @@ -9815,29 +10076,29 @@ export class FlinkSqlParser extends SQLParserBase { } public errorCapturingIdentifierExtra(): ErrorCapturingIdentifierExtraContext { let localContext = new ErrorCapturingIdentifierExtraContext(this.context, this.state); - this.enterRule(localContext, 298, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); + this.enterRule(localContext, 302, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); let _la: number; try { - this.state = 2052; + this.state = 2078; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_MINUS: localContext = new ErrorIdentContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2047; + this.state = 2073; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 2045; + this.state = 2071; this.match(FlinkSqlParser.KW_MINUS); - this.state = 2046; + this.state = 2072; this.identifier(); } } - this.state = 2049; + this.state = 2075; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 221); @@ -9871,15 +10132,15 @@ export class FlinkSqlParser extends SQLParserBase { } public identifierList(): IdentifierListContext { let localContext = new IdentifierListContext(this.context, this.state); - this.enterRule(localContext, 300, FlinkSqlParser.RULE_identifierList); + this.enterRule(localContext, 304, FlinkSqlParser.RULE_identifierList); try { this.enterOuterAlt(localContext, 1); { - this.state = 2054; + this.state = 2080; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 2055; + this.state = 2081; this.identifierSeq(); - this.state = 2056; + this.state = 2082; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -9899,26 +10160,26 @@ export class FlinkSqlParser extends SQLParserBase { } public identifierSeq(): IdentifierSeqContext { let localContext = new IdentifierSeqContext(this.context, this.state); - this.enterRule(localContext, 302, FlinkSqlParser.RULE_identifierSeq); + this.enterRule(localContext, 306, FlinkSqlParser.RULE_identifierSeq); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2058; + this.state = 2084; this.identifier(); - this.state = 2063; + this.state = 2089; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 2059; + this.state = 2085; this.match(FlinkSqlParser.COMMA); - this.state = 2060; + this.state = 2086; this.identifier(); } } - this.state = 2065; + this.state = 2091; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -9940,9 +10201,9 @@ export class FlinkSqlParser extends SQLParserBase { } public identifier(): IdentifierContext { let localContext = new IdentifierContext(this.context, this.state); - this.enterRule(localContext, 304, FlinkSqlParser.RULE_identifier); + this.enterRule(localContext, 308, FlinkSqlParser.RULE_identifier); try { - this.state = 2069; + this.state = 2095; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.DIG_LITERAL: @@ -9950,7 +10211,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new UnquotedIdentifierAlternativeContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2066; + this.state = 2092; this.unquotedIdentifier(); } break; @@ -9958,7 +10219,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new QuotedIdentifierAlternativeContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2067; + this.state = 2093; this.quotedIdentifier(); } break; @@ -10033,7 +10294,7 @@ export class FlinkSqlParser extends SQLParserBase { localContext = new NonReservedKeywordsAlternativeContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2068; + this.state = 2094; this.nonReservedKeywords(); } break; @@ -10057,12 +10318,12 @@ export class FlinkSqlParser extends SQLParserBase { } public unquotedIdentifier(): UnquotedIdentifierContext { let localContext = new UnquotedIdentifierContext(this.context, this.state); - this.enterRule(localContext, 306, FlinkSqlParser.RULE_unquotedIdentifier); + this.enterRule(localContext, 310, FlinkSqlParser.RULE_unquotedIdentifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2071; + this.state = 2097; _la = this.tokenStream.LA(1); if(!(_la === 538 || _la === 541)) { this.errorHandler.recoverInline(this); @@ -10089,11 +10350,11 @@ export class FlinkSqlParser extends SQLParserBase { } public quotedIdentifier(): QuotedIdentifierContext { let localContext = new QuotedIdentifierContext(this.context, this.state); - this.enterRule(localContext, 308, FlinkSqlParser.RULE_quotedIdentifier); + this.enterRule(localContext, 312, FlinkSqlParser.RULE_quotedIdentifier); try { this.enterOuterAlt(localContext, 1); { - this.state = 2073; + this.state = 2099; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -10113,17 +10374,17 @@ export class FlinkSqlParser extends SQLParserBase { } public whenClause(): WhenClauseContext { let localContext = new WhenClauseContext(this.context, this.state); - this.enterRule(localContext, 310, FlinkSqlParser.RULE_whenClause); + this.enterRule(localContext, 314, FlinkSqlParser.RULE_whenClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 2075; + this.state = 2101; this.match(FlinkSqlParser.KW_WHEN); - this.state = 2076; + this.state = 2102; localContext._condition = this.expression(); - this.state = 2077; + this.state = 2103; this.match(FlinkSqlParser.KW_THEN); - this.state = 2078; + this.state = 2104; localContext._result = this.expression(); } } @@ -10143,11 +10404,11 @@ export class FlinkSqlParser extends SQLParserBase { } public catalogPath(): CatalogPathContext { let localContext = new CatalogPathContext(this.context, this.state); - this.enterRule(localContext, 312, FlinkSqlParser.RULE_catalogPath); + this.enterRule(localContext, 316, FlinkSqlParser.RULE_catalogPath); try { this.enterOuterAlt(localContext, 1); { - this.state = 2080; + this.state = 2106; this.identifier(); } } @@ -10167,11 +10428,11 @@ export class FlinkSqlParser extends SQLParserBase { } public catalogPathCreate(): CatalogPathCreateContext { let localContext = new CatalogPathCreateContext(this.context, this.state); - this.enterRule(localContext, 314, FlinkSqlParser.RULE_catalogPathCreate); + this.enterRule(localContext, 318, FlinkSqlParser.RULE_catalogPathCreate); try { this.enterOuterAlt(localContext, 1); { - this.state = 2082; + this.state = 2108; this.identifier(); } } @@ -10191,21 +10452,21 @@ export class FlinkSqlParser extends SQLParserBase { } public databasePath(): DatabasePathContext { let localContext = new DatabasePathContext(this.context, this.state); - this.enterRule(localContext, 316, FlinkSqlParser.RULE_databasePath); + this.enterRule(localContext, 320, FlinkSqlParser.RULE_databasePath); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2084; + this.state = 2110; this.identifier(); - this.state = 2087; + this.state = 2113; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 513) { { - this.state = 2085; + this.state = 2111; this.match(FlinkSqlParser.DOT); - this.state = 2086; + this.state = 2112; this.identifier(); } } @@ -10228,21 +10489,21 @@ export class FlinkSqlParser extends SQLParserBase { } public databasePathCreate(): DatabasePathCreateContext { let localContext = new DatabasePathCreateContext(this.context, this.state); - this.enterRule(localContext, 318, FlinkSqlParser.RULE_databasePathCreate); + this.enterRule(localContext, 322, FlinkSqlParser.RULE_databasePathCreate); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2089; + this.state = 2115; this.identifier(); - this.state = 2092; + this.state = 2118; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 513) { { - this.state = 2090; + this.state = 2116; this.match(FlinkSqlParser.DOT); - this.state = 2091; + this.state = 2117; this.identifier(); } } @@ -10265,25 +10526,25 @@ export class FlinkSqlParser extends SQLParserBase { } public tablePathCreate(): TablePathCreateContext { let localContext = new TablePathCreateContext(this.context, this.state); - this.enterRule(localContext, 320, FlinkSqlParser.RULE_tablePathCreate); + this.enterRule(localContext, 324, FlinkSqlParser.RULE_tablePathCreate); let _la: number; try { - this.state = 2106; + this.state = 2132; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 248, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 250, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2094; + this.state = 2120; this.identifier(); - this.state = 2097; + this.state = 2123; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 513) { { - this.state = 2095; + this.state = 2121; this.match(FlinkSqlParser.DOT); - this.state = 2096; + this.state = 2122; this.identifier(); } } @@ -10293,20 +10554,20 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2099; + this.state = 2125; this.identifier(); - this.state = 2100; + this.state = 2126; this.match(FlinkSqlParser.DOT); - this.state = 2101; + this.state = 2127; this.identifier(); - this.state = 2104; + this.state = 2130; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 513) { { - this.state = 2102; + this.state = 2128; this.match(FlinkSqlParser.DOT); - this.state = 2103; + this.state = 2129; this.identifier(); } } @@ -10331,24 +10592,24 @@ export class FlinkSqlParser extends SQLParserBase { } public tablePath(): TablePathContext { let localContext = new TablePathContext(this.context, this.state); - this.enterRule(localContext, 322, FlinkSqlParser.RULE_tablePath); + this.enterRule(localContext, 326, FlinkSqlParser.RULE_tablePath); try { - this.state = 2120; + this.state = 2146; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 251, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 253, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2108; + this.state = 2134; this.identifier(); - this.state = 2111; + this.state = 2137; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 249, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 251, this.context) ) { case 1: { - this.state = 2109; + this.state = 2135; this.match(FlinkSqlParser.DOT); - this.state = 2110; + this.state = 2136; this.identifier(); } break; @@ -10358,20 +10619,20 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2113; + this.state = 2139; this.identifier(); - this.state = 2114; + this.state = 2140; this.match(FlinkSqlParser.DOT); - this.state = 2115; + this.state = 2141; this.identifier(); - this.state = 2118; + this.state = 2144; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 250, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 252, this.context) ) { case 1: { - this.state = 2116; + this.state = 2142; this.match(FlinkSqlParser.DOT); - this.state = 2117; + this.state = 2143; this.identifier(); } break; @@ -10396,24 +10657,24 @@ export class FlinkSqlParser extends SQLParserBase { } public viewPath(): ViewPathContext { let localContext = new ViewPathContext(this.context, this.state); - this.enterRule(localContext, 324, FlinkSqlParser.RULE_viewPath); + this.enterRule(localContext, 328, FlinkSqlParser.RULE_viewPath); try { - this.state = 2134; + this.state = 2160; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 254, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 256, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2122; + this.state = 2148; this.identifier(); - this.state = 2125; + this.state = 2151; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 252, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 254, this.context) ) { case 1: { - this.state = 2123; + this.state = 2149; this.match(FlinkSqlParser.DOT); - this.state = 2124; + this.state = 2150; this.identifier(); } break; @@ -10423,20 +10684,20 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2127; + this.state = 2153; this.identifier(); - this.state = 2128; + this.state = 2154; this.match(FlinkSqlParser.DOT); - this.state = 2129; + this.state = 2155; this.identifier(); - this.state = 2132; + this.state = 2158; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 253, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 255, this.context) ) { case 1: { - this.state = 2130; + this.state = 2156; this.match(FlinkSqlParser.DOT); - this.state = 2131; + this.state = 2157; this.identifier(); } break; @@ -10461,25 +10722,25 @@ export class FlinkSqlParser extends SQLParserBase { } public viewPathCreate(): ViewPathCreateContext { let localContext = new ViewPathCreateContext(this.context, this.state); - this.enterRule(localContext, 326, FlinkSqlParser.RULE_viewPathCreate); + this.enterRule(localContext, 330, FlinkSqlParser.RULE_viewPathCreate); let _la: number; try { - this.state = 2148; + this.state = 2174; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 257, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 259, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2136; + this.state = 2162; this.identifier(); - this.state = 2139; + this.state = 2165; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 513) { { - this.state = 2137; + this.state = 2163; this.match(FlinkSqlParser.DOT); - this.state = 2138; + this.state = 2164; this.identifier(); } } @@ -10489,20 +10750,20 @@ export class FlinkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2141; + this.state = 2167; this.identifier(); - this.state = 2142; + this.state = 2168; this.match(FlinkSqlParser.DOT); - this.state = 2143; + this.state = 2169; this.identifier(); - this.state = 2146; + this.state = 2172; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 513) { { - this.state = 2144; + this.state = 2170; this.match(FlinkSqlParser.DOT); - this.state = 2145; + this.state = 2171; this.identifier(); } } @@ -10527,30 +10788,30 @@ export class FlinkSqlParser extends SQLParserBase { } public uid(): UidContext { let localContext = new UidContext(this.context, this.state); - this.enterRule(localContext, 328, FlinkSqlParser.RULE_uid); + this.enterRule(localContext, 332, FlinkSqlParser.RULE_uid); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2150; + this.state = 2176; this.identifier(); - this.state = 2155; + this.state = 2181; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 258, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 260, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 2151; + this.state = 2177; this.match(FlinkSqlParser.DOT); - this.state = 2152; + this.state = 2178; this.identifier(); } } } - this.state = 2157; + this.state = 2183; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 258, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 260, this.context); } } } @@ -10570,13 +10831,13 @@ export class FlinkSqlParser extends SQLParserBase { } public withOption(): WithOptionContext { let localContext = new WithOptionContext(this.context, this.state); - this.enterRule(localContext, 330, FlinkSqlParser.RULE_withOption); + this.enterRule(localContext, 334, FlinkSqlParser.RULE_withOption); try { this.enterOuterAlt(localContext, 1); { - this.state = 2158; + this.state = 2184; this.match(FlinkSqlParser.KW_WITH); - this.state = 2159; + this.state = 2185; this.tablePropertyList(); } } @@ -10596,15 +10857,15 @@ export class FlinkSqlParser extends SQLParserBase { } public ifNotExists(): IfNotExistsContext { let localContext = new IfNotExistsContext(this.context, this.state); - this.enterRule(localContext, 332, FlinkSqlParser.RULE_ifNotExists); + this.enterRule(localContext, 336, FlinkSqlParser.RULE_ifNotExists); try { this.enterOuterAlt(localContext, 1); { - this.state = 2161; + this.state = 2187; this.match(FlinkSqlParser.KW_IF); - this.state = 2162; + this.state = 2188; this.match(FlinkSqlParser.KW_NOT); - this.state = 2163; + this.state = 2189; this.match(FlinkSqlParser.KW_EXISTS); } } @@ -10624,13 +10885,13 @@ export class FlinkSqlParser extends SQLParserBase { } public ifExists(): IfExistsContext { let localContext = new IfExistsContext(this.context, this.state); - this.enterRule(localContext, 334, FlinkSqlParser.RULE_ifExists); + this.enterRule(localContext, 338, FlinkSqlParser.RULE_ifExists); try { this.enterOuterAlt(localContext, 1); { - this.state = 2165; + this.state = 2191; this.match(FlinkSqlParser.KW_IF); - this.state = 2166; + this.state = 2192; this.match(FlinkSqlParser.KW_EXISTS); } } @@ -10650,32 +10911,32 @@ export class FlinkSqlParser extends SQLParserBase { } public tablePropertyList(): TablePropertyListContext { let localContext = new TablePropertyListContext(this.context, this.state); - this.enterRule(localContext, 336, FlinkSqlParser.RULE_tablePropertyList); + this.enterRule(localContext, 340, FlinkSqlParser.RULE_tablePropertyList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2168; + this.state = 2194; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 2169; + this.state = 2195; this.tableProperty(); - this.state = 2174; + this.state = 2200; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 520) { { { - this.state = 2170; + this.state = 2196; this.match(FlinkSqlParser.COMMA); - this.state = 2171; + this.state = 2197; this.tableProperty(); } } - this.state = 2176; + this.state = 2202; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2177; + this.state = 2203; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -10695,29 +10956,29 @@ export class FlinkSqlParser extends SQLParserBase { } public tableProperty(): TablePropertyContext { let localContext = new TablePropertyContext(this.context, this.state); - this.enterRule(localContext, 338, FlinkSqlParser.RULE_tableProperty); + this.enterRule(localContext, 342, FlinkSqlParser.RULE_tableProperty); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2179; + this.state = 2205; localContext._key = this.tablePropertyKey(); - this.state = 2184; + this.state = 2210; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 140 || _la === 397 || _la === 505 || ((((_la - 537)) & ~0x1F) === 0 && ((1 << (_la - 537)) & 7) !== 0)) { { - this.state = 2181; + this.state = 2207; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 505) { { - this.state = 2180; + this.state = 2206; this.match(FlinkSqlParser.EQUAL_SYMBOL); } } - this.state = 2183; + this.state = 2209; localContext._value = this.tablePropertyValue(); } } @@ -10740,29 +11001,29 @@ export class FlinkSqlParser extends SQLParserBase { } public tablePropertyKey(): TablePropertyKeyContext { let localContext = new TablePropertyKeyContext(this.context, this.state); - this.enterRule(localContext, 340, FlinkSqlParser.RULE_tablePropertyKey); + this.enterRule(localContext, 344, FlinkSqlParser.RULE_tablePropertyKey); try { - this.state = 2189; + this.state = 2215; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 262, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 264, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2186; + this.state = 2212; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2187; + this.state = 2213; this.dereferenceDefinition(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2188; + this.state = 2214; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10784,22 +11045,22 @@ export class FlinkSqlParser extends SQLParserBase { } public tablePropertyValue(): TablePropertyValueContext { let localContext = new TablePropertyValueContext(this.context, this.state); - this.enterRule(localContext, 342, FlinkSqlParser.RULE_tablePropertyValue); + this.enterRule(localContext, 346, FlinkSqlParser.RULE_tablePropertyValue); try { - this.state = 2195; + this.state = 2221; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.DIG_LITERAL: this.enterOuterAlt(localContext, 1); { - this.state = 2191; + this.state = 2217; this.match(FlinkSqlParser.DIG_LITERAL); } break; case FlinkSqlParser.REAL_LITERAL: this.enterOuterAlt(localContext, 2); { - this.state = 2192; + this.state = 2218; this.match(FlinkSqlParser.REAL_LITERAL); } break; @@ -10807,14 +11068,14 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_TRUE: this.enterOuterAlt(localContext, 3); { - this.state = 2193; + this.state = 2219; this.booleanLiteral(); } break; case FlinkSqlParser.STRING_LITERAL: this.enterOuterAlt(localContext, 4); { - this.state = 2194; + this.state = 2220; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10838,40 +11099,40 @@ export class FlinkSqlParser extends SQLParserBase { } public logicalOperator(): LogicalOperatorContext { let localContext = new LogicalOperatorContext(this.context, this.state); - this.enterRule(localContext, 344, FlinkSqlParser.RULE_logicalOperator); + this.enterRule(localContext, 348, FlinkSqlParser.RULE_logicalOperator); try { - this.state = 2203; + this.state = 2229; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_AND: this.enterOuterAlt(localContext, 1); { - this.state = 2197; + this.state = 2223; this.match(FlinkSqlParser.KW_AND); } break; case FlinkSqlParser.BIT_AND_OP: this.enterOuterAlt(localContext, 2); { - this.state = 2198; + this.state = 2224; this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 2199; + this.state = 2225; this.match(FlinkSqlParser.BIT_AND_OP); } break; case FlinkSqlParser.KW_OR: this.enterOuterAlt(localContext, 3); { - this.state = 2200; + this.state = 2226; this.match(FlinkSqlParser.KW_OR); } break; case FlinkSqlParser.BIT_OR_OP: this.enterOuterAlt(localContext, 4); { - this.state = 2201; + this.state = 2227; this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 2202; + this.state = 2228; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -10895,76 +11156,76 @@ export class FlinkSqlParser extends SQLParserBase { } public comparisonOperator(): ComparisonOperatorContext { let localContext = new ComparisonOperatorContext(this.context, this.state); - this.enterRule(localContext, 346, FlinkSqlParser.RULE_comparisonOperator); + this.enterRule(localContext, 350, FlinkSqlParser.RULE_comparisonOperator); try { - this.state = 2219; + this.state = 2245; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 265, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 267, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2205; + this.state = 2231; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2206; + this.state = 2232; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2207; + this.state = 2233; this.match(FlinkSqlParser.LESS_SYMBOL); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2208; + this.state = 2234; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2209; + this.state = 2235; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 2210; + this.state = 2236; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2211; + this.state = 2237; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 2212; + this.state = 2238; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2213; + this.state = 2239; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 2214; + this.state = 2240; this.match(FlinkSqlParser.EXCLAMATION_SYMBOL); - this.state = 2215; + this.state = 2241; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 2216; + this.state = 2242; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2217; + this.state = 2243; this.match(FlinkSqlParser.EQUAL_SYMBOL); - this.state = 2218; + this.state = 2244; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; @@ -10986,47 +11247,47 @@ export class FlinkSqlParser extends SQLParserBase { } public bitOperator(): BitOperatorContext { let localContext = new BitOperatorContext(this.context, this.state); - this.enterRule(localContext, 348, FlinkSqlParser.RULE_bitOperator); + this.enterRule(localContext, 352, FlinkSqlParser.RULE_bitOperator); try { - this.state = 2228; + this.state = 2254; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.LESS_SYMBOL: this.enterOuterAlt(localContext, 1); { - this.state = 2221; + this.state = 2247; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2222; + this.state = 2248; this.match(FlinkSqlParser.LESS_SYMBOL); } break; case FlinkSqlParser.GREATER_SYMBOL: this.enterOuterAlt(localContext, 2); { - this.state = 2223; + this.state = 2249; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2224; + this.state = 2250; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case FlinkSqlParser.BIT_AND_OP: this.enterOuterAlt(localContext, 3); { - this.state = 2225; + this.state = 2251; this.match(FlinkSqlParser.BIT_AND_OP); } break; case FlinkSqlParser.BIT_XOR_OP: this.enterOuterAlt(localContext, 4); { - this.state = 2226; + this.state = 2252; this.match(FlinkSqlParser.BIT_XOR_OP); } break; case FlinkSqlParser.BIT_OR_OP: this.enterOuterAlt(localContext, 5); { - this.state = 2227; + this.state = 2253; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -11050,12 +11311,12 @@ export class FlinkSqlParser extends SQLParserBase { } public mathOperator(): MathOperatorContext { let localContext = new MathOperatorContext(this.context, this.state); - this.enterRule(localContext, 350, FlinkSqlParser.RULE_mathOperator); + this.enterRule(localContext, 354, FlinkSqlParser.RULE_mathOperator); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2230; + this.state = 2256; _la = this.tokenStream.LA(1); if(!(_la === 452 || ((((_la - 527)) & ~0x1F) === 0 && ((1 << (_la - 527)) & 221) !== 0))) { this.errorHandler.recoverInline(this); @@ -11082,12 +11343,12 @@ export class FlinkSqlParser extends SQLParserBase { } public unaryOperator(): UnaryOperatorContext { let localContext = new UnaryOperatorContext(this.context, this.state); - this.enterRule(localContext, 352, FlinkSqlParser.RULE_unaryOperator); + this.enterRule(localContext, 356, FlinkSqlParser.RULE_unaryOperator); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2232; + this.state = 2258; _la = this.tokenStream.LA(1); if(!(_la === 241 || ((((_la - 508)) & ~0x1F) === 0 && ((1 << (_la - 508)) & 6291459) !== 0))) { this.errorHandler.recoverInline(this); @@ -11114,16 +11375,16 @@ export class FlinkSqlParser extends SQLParserBase { } public constant(): ConstantContext { let localContext = new ConstantContext(this.context, this.state); - this.enterRule(localContext, 354, FlinkSqlParser.RULE_constant); + this.enterRule(localContext, 358, FlinkSqlParser.RULE_constant); let _la: number; try { - this.state = 2248; + this.state = 2274; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case FlinkSqlParser.KW_INTERVAL: this.enterOuterAlt(localContext, 1); { - this.state = 2234; + this.state = 2260; this.timeIntervalExpression(); } break; @@ -11139,14 +11400,14 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_WEEK: this.enterOuterAlt(localContext, 2); { - this.state = 2235; + this.state = 2261; this.timePointLiteral(); } break; case FlinkSqlParser.STRING_LITERAL: this.enterOuterAlt(localContext, 3); { - this.state = 2236; + this.state = 2262; this.stringLiteral(); } break; @@ -11154,17 +11415,17 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.DIG_LITERAL: this.enterOuterAlt(localContext, 4); { - this.state = 2238; + this.state = 2264; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 529) { { - this.state = 2237; + this.state = 2263; this.match(FlinkSqlParser.HYPNEN_SIGN); } } - this.state = 2240; + this.state = 2266; this.decimalLiteral(); } break; @@ -11172,21 +11433,21 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_TRUE: this.enterOuterAlt(localContext, 5); { - this.state = 2241; + this.state = 2267; this.booleanLiteral(); } break; case FlinkSqlParser.REAL_LITERAL: this.enterOuterAlt(localContext, 6); { - this.state = 2242; + this.state = 2268; this.match(FlinkSqlParser.REAL_LITERAL); } break; case FlinkSqlParser.BIT_STRING: this.enterOuterAlt(localContext, 7); { - this.state = 2243; + this.state = 2269; this.match(FlinkSqlParser.BIT_STRING); } break; @@ -11194,17 +11455,17 @@ export class FlinkSqlParser extends SQLParserBase { case FlinkSqlParser.KW_NULL: this.enterOuterAlt(localContext, 8); { - this.state = 2245; + this.state = 2271; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 241) { { - this.state = 2244; + this.state = 2270; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 2247; + this.state = 2273; this.match(FlinkSqlParser.KW_NULL); } break; @@ -11228,13 +11489,13 @@ export class FlinkSqlParser extends SQLParserBase { } public timePointLiteral(): TimePointLiteralContext { let localContext = new TimePointLiteralContext(this.context, this.state); - this.enterRule(localContext, 356, FlinkSqlParser.RULE_timePointLiteral); + this.enterRule(localContext, 360, FlinkSqlParser.RULE_timePointLiteral); try { this.enterOuterAlt(localContext, 1); { - this.state = 2250; + this.state = 2276; this.timePointUnit(); - this.state = 2251; + this.state = 2277; this.stringLiteral(); } } @@ -11254,11 +11515,11 @@ export class FlinkSqlParser extends SQLParserBase { } public stringLiteral(): StringLiteralContext { let localContext = new StringLiteralContext(this.context, this.state); - this.enterRule(localContext, 358, FlinkSqlParser.RULE_stringLiteral); + this.enterRule(localContext, 362, FlinkSqlParser.RULE_stringLiteral); try { this.enterOuterAlt(localContext, 1); { - this.state = 2253; + this.state = 2279; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -11278,11 +11539,11 @@ export class FlinkSqlParser extends SQLParserBase { } public decimalLiteral(): DecimalLiteralContext { let localContext = new DecimalLiteralContext(this.context, this.state); - this.enterRule(localContext, 360, FlinkSqlParser.RULE_decimalLiteral); + this.enterRule(localContext, 364, FlinkSqlParser.RULE_decimalLiteral); try { this.enterOuterAlt(localContext, 1); { - this.state = 2255; + this.state = 2281; this.match(FlinkSqlParser.DIG_LITERAL); } } @@ -11302,12 +11563,12 @@ export class FlinkSqlParser extends SQLParserBase { } public booleanLiteral(): BooleanLiteralContext { let localContext = new BooleanLiteralContext(this.context, this.state); - this.enterRule(localContext, 362, FlinkSqlParser.RULE_booleanLiteral); + this.enterRule(localContext, 366, FlinkSqlParser.RULE_booleanLiteral); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2257; + this.state = 2283; _la = this.tokenStream.LA(1); if(!(_la === 140 || _la === 397)) { this.errorHandler.recoverInline(this); @@ -11334,12 +11595,12 @@ export class FlinkSqlParser extends SQLParserBase { } public setQuantifier(): SetQuantifierContext { let localContext = new SetQuantifierContext(this.context, this.state); - this.enterRule(localContext, 364, FlinkSqlParser.RULE_setQuantifier); + this.enterRule(localContext, 368, FlinkSqlParser.RULE_setQuantifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2259; + this.state = 2285; _la = this.tokenStream.LA(1); if(!(_la === 5 || _la === 113)) { this.errorHandler.recoverInline(this); @@ -11366,12 +11627,12 @@ export class FlinkSqlParser extends SQLParserBase { } public timePointUnit(): TimePointUnitContext { let localContext = new TimePointUnitContext(this.context, this.state); - this.enterRule(localContext, 366, FlinkSqlParser.RULE_timePointUnit); + this.enterRule(localContext, 370, FlinkSqlParser.RULE_timePointUnit); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2261; + this.state = 2287; _la = this.tokenStream.LA(1); if(!(_la === 97 || _la === 165 || _la === 222 || _la === 229 || _la === 334 || _la === 436 || ((((_la - 470)) & ~0x1F) === 0 && ((1 << (_la - 470)) & 262149) !== 0) || _la === 502)) { this.errorHandler.recoverInline(this); @@ -11398,12 +11659,12 @@ export class FlinkSqlParser extends SQLParserBase { } public timeIntervalUnit(): TimeIntervalUnitContext { let localContext = new TimeIntervalUnitContext(this.context, this.state); - this.enterRule(localContext, 368, FlinkSqlParser.RULE_timeIntervalUnit); + this.enterRule(localContext, 372, FlinkSqlParser.RULE_timeIntervalUnit); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2263; + this.state = 2289; _la = this.tokenStream.LA(1); if(!(_la === 97 || _la === 165 || _la === 222 || _la === 229 || _la === 334 || ((((_la - 427)) & ~0x1F) === 0 && ((1 << (_la - 427)) & 140542465) !== 0) || ((((_la - 460)) & ~0x1F) === 0 && ((1 << (_la - 460)) & 2415983617) !== 0) || _la === 502 || _la === 503)) { this.errorHandler.recoverInline(this); @@ -11430,12 +11691,12 @@ export class FlinkSqlParser extends SQLParserBase { } public reservedKeywordsUsedAsFuncParam(): ReservedKeywordsUsedAsFuncParamContext { let localContext = new ReservedKeywordsUsedAsFuncParamContext(this.context, this.state); - this.enterRule(localContext, 370, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncParam); + this.enterRule(localContext, 374, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncParam); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2265; + this.state = 2291; _la = this.tokenStream.LA(1); if(!(((((_la - 5)) & ~0x1F) === 0 && ((1 << (_la - 5)) & 268435713) !== 0) || ((((_la - 78)) & ~0x1F) === 0 && ((1 << (_la - 78)) & 193) !== 0) || _la === 113 || ((((_la - 200)) & ~0x1F) === 0 && ((1 << (_la - 200)) & 385) !== 0) || _la === 389 || _la === 413 || _la === 527)) { this.errorHandler.recoverInline(this); @@ -11460,16 +11721,80 @@ export class FlinkSqlParser extends SQLParserBase { } return localContext; } + public reservedKeywordsNoParamsUsedAsFuncName(): ReservedKeywordsNoParamsUsedAsFuncNameContext { + let localContext = new ReservedKeywordsNoParamsUsedAsFuncNameContext(this.context, this.state); + this.enterRule(localContext, 376, FlinkSqlParser.RULE_reservedKeywordsNoParamsUsedAsFuncName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2293; + _la = this.tokenStream.LA(1); + if(!(((((_la - 78)) & ~0x1F) === 0 && ((1 << (_la - 78)) & 193) !== 0) || _la === 207 || _la === 208)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public reservedKeywordsFollowParamsUsedAsFuncName(): ReservedKeywordsFollowParamsUsedAsFuncNameContext { + let localContext = new ReservedKeywordsFollowParamsUsedAsFuncNameContext(this.context, this.state); + this.enterRule(localContext, 378, FlinkSqlParser.RULE_reservedKeywordsFollowParamsUsedAsFuncName); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2295; + _la = this.tokenStream.LA(1); + if(!(_la === 91 || _la === 378 || _la === 379)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } public reservedKeywordsUsedAsFuncName(): ReservedKeywordsUsedAsFuncNameContext { let localContext = new ReservedKeywordsUsedAsFuncNameContext(this.context, this.state); - this.enterRule(localContext, 372, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncName); + this.enterRule(localContext, 380, FlinkSqlParser.RULE_reservedKeywordsUsedAsFuncName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2267; + this.state = 2297; _la = this.tokenStream.LA(1); - if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 8396816) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & 2147811433) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 25232905) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 134221825) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 337641553) !== 0) || ((((_la - 194)) & ~0x1F) === 0 && ((1 << (_la - 194)) & 873523369) !== 0) || ((((_la - 229)) & ~0x1F) === 0 && ((1 << (_la - 229)) & 81921) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 537530369) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 131185) !== 0) || ((((_la - 357)) & ~0x1F) === 0 && ((1 << (_la - 357)) & 14681219) !== 0) || ((((_la - 395)) & ~0x1F) === 0 && ((1 << (_la - 395)) & 50339865) !== 0) || _la === 436 || _la === 469 || _la === 488 || _la === 502)) { + if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 8396816) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & 2147811433) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 25165825) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 134221825) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 337641553) !== 0) || ((((_la - 194)) & ~0x1F) === 0 && ((1 << (_la - 194)) & 873498793) !== 0) || ((((_la - 229)) & ~0x1F) === 0 && ((1 << (_la - 229)) & 81921) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 537530369) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 131185) !== 0) || ((((_la - 357)) & ~0x1F) === 0 && ((1 << (_la - 357)) & 8389763) !== 0) || ((((_la - 395)) & ~0x1F) === 0 && ((1 << (_la - 395)) & 50339865) !== 0) || _la === 436 || _la === 469 || _la === 488 || _la === 502)) { this.errorHandler.recoverInline(this); } else { @@ -11494,12 +11819,12 @@ export class FlinkSqlParser extends SQLParserBase { } public nonReservedKeywords(): NonReservedKeywordsContext { let localContext = new NonReservedKeywordsContext(this.context, this.state); - this.enterRule(localContext, 374, FlinkSqlParser.RULE_nonReservedKeywords); + this.enterRule(localContext, 382, FlinkSqlParser.RULE_nonReservedKeywords); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2269; + this.state = 2299; _la = this.tokenStream.LA(1); if(!(((((_la - 437)) & ~0x1F) === 0 && ((1 << (_la - 437)) & 4294967295) !== 0) || ((((_la - 469)) & ~0x1F) === 0 && ((1 << (_la - 469)) & 4294967295) !== 0) || ((((_la - 501)) & ~0x1F) === 0 && ((1 << (_la - 501)) & 15) !== 0))) { this.errorHandler.recoverInline(this); @@ -11529,13 +11854,13 @@ export class FlinkSqlParser extends SQLParserBase { switch (ruleIndex) { case 26: return this.columnName_sempred(localContext as ColumnNameContext, predIndex); - case 79: + case 78: return this.queryStatement_sempred(localContext as QueryStatementContext, predIndex); - case 89: + case 88: return this.tableExpression_sempred(localContext as TableExpressionContext, predIndex); - case 130: + case 129: return this.booleanExpression_sempred(localContext as BooleanExpressionContext, predIndex); - case 133: + case 132: return this.valueExpression_sempred(localContext as ValueExpressionContext, predIndex); case 134: return this.primaryExpression_sempred(localContext as PrimaryExpressionContext, predIndex); @@ -11596,13 +11921,13 @@ export class FlinkSqlParser extends SQLParserBase { private primaryExpression_sempred(localContext: PrimaryExpressionContext | null, predIndex: number): boolean { switch (predIndex) { case 13: - return this.precpred(this.context, 5); + return this.precpred(this.context, 4); } return true; } public static readonly _serializedATN: number[] = [ - 4,1,541,2272,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, + 4,1,541,2302,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, @@ -11633,189 +11958,192 @@ export class FlinkSqlParser extends SQLParserBase { 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,1,0,5,0,378,8,0,10,0,12,0,381,9,0,1,0,1,0,1,1, - 1,1,3,1,387,8,1,1,1,3,1,390,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,3,2,404,8,2,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4, - 1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,422,8,4,1,5,1,5,3,5,426,8,5,1,6, - 1,6,1,6,1,7,1,7,1,7,1,7,3,7,435,8,7,1,7,1,7,1,7,3,7,440,8,7,1,8, - 1,8,1,8,5,8,445,8,8,10,8,12,8,448,9,8,1,9,1,9,1,10,1,10,1,10,1,10, - 1,10,1,10,3,10,458,8,10,1,11,1,11,1,11,1,11,1,11,5,11,465,8,11,10, - 11,12,11,468,9,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,3, - 12,479,8,12,1,12,3,12,482,8,12,1,12,1,12,1,12,1,12,1,12,3,12,489, - 8,12,1,12,3,12,492,8,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,500,8, - 12,1,12,1,12,3,12,504,8,12,1,12,1,12,1,12,3,12,509,8,12,1,12,3,12, - 512,8,12,1,13,1,13,1,13,1,13,1,13,3,13,519,8,13,1,14,1,14,1,14,1, - 14,1,15,1,15,3,15,527,8,15,1,16,1,16,3,16,531,8,16,1,17,1,17,1,17, - 1,17,1,18,1,18,1,18,1,18,1,18,1,18,3,18,543,8,18,1,18,1,18,1,18, - 1,18,1,18,1,18,3,18,551,8,18,1,18,1,18,3,18,555,8,18,1,18,1,18,1, + 7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191,7,191, + 1,0,5,0,386,8,0,10,0,12,0,389,9,0,1,0,1,0,1,1,1,1,3,1,395,8,1,1, + 1,3,1,398,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,3, + 2,412,8,2,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1, + 4,1,4,1,4,3,4,430,8,4,1,5,1,5,3,5,434,8,5,1,6,1,6,1,6,1,7,1,7,1, + 7,1,7,3,7,443,8,7,1,7,1,7,1,7,3,7,448,8,7,1,8,1,8,1,8,5,8,453,8, + 8,10,8,12,8,456,9,8,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,3,10,466, + 8,10,1,11,1,11,1,11,1,11,1,11,5,11,473,8,11,10,11,12,11,476,9,11, + 1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,487,8,12,1,12, + 3,12,490,8,12,1,12,1,12,1,12,1,12,1,12,3,12,497,8,12,1,12,3,12,500, + 8,12,1,12,1,12,1,12,1,12,1,12,1,12,3,12,508,8,12,1,12,1,12,3,12, + 512,8,12,1,12,1,12,1,12,3,12,517,8,12,1,12,3,12,520,8,12,1,13,1, + 13,1,13,1,13,1,13,3,13,527,8,13,1,14,1,14,1,14,1,14,1,15,1,15,3, + 15,535,8,15,1,16,1,16,3,16,539,8,16,1,17,1,17,1,17,1,17,1,18,1,18, + 1,18,1,18,1,18,1,18,3,18,551,8,18,1,18,1,18,1,18,1,18,1,18,1,18, + 3,18,559,8,18,1,18,1,18,3,18,563,8,18,1,18,1,18,1,18,1,18,1,18,1, 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, - 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, - 18,1,18,3,18,587,8,18,1,19,3,19,590,8,19,1,19,4,19,593,8,19,11,19, - 12,19,594,1,20,1,20,3,20,599,8,20,1,21,1,21,3,21,603,8,21,1,21,1, - 21,3,21,607,8,21,1,21,1,21,1,21,1,21,1,21,5,21,614,8,21,10,21,12, - 21,617,9,21,1,21,1,21,3,21,621,8,21,1,21,1,21,3,21,625,8,21,1,21, - 1,21,3,21,629,8,21,1,21,1,21,3,21,633,8,21,1,21,3,21,636,8,21,1, - 21,1,21,3,21,640,8,21,1,22,1,22,1,22,3,22,645,8,22,1,22,1,22,1,22, - 1,22,3,22,651,8,22,1,23,1,23,1,23,3,23,656,8,23,1,24,1,24,1,24,3, - 24,661,8,24,1,24,3,24,664,8,24,1,25,1,25,3,25,668,8,25,1,26,1,26, - 3,26,672,8,26,1,27,1,27,1,27,1,27,5,27,678,8,27,10,27,12,27,681, - 9,27,1,27,1,27,1,28,1,28,1,28,3,28,688,8,28,1,28,1,28,3,28,692,8, - 28,1,28,1,28,3,28,696,8,28,1,28,1,28,3,28,700,8,28,1,28,1,28,3,28, - 704,8,28,1,28,1,28,3,28,708,8,28,1,28,1,28,3,28,712,8,28,1,28,1, - 28,3,28,716,8,28,1,28,1,28,3,28,720,8,28,3,28,722,8,28,1,29,1,29, - 1,29,1,29,1,30,1,30,1,30,1,30,3,30,732,8,30,1,30,1,30,1,31,1,31, - 1,31,1,31,3,31,740,8,31,1,31,1,31,1,32,1,32,1,32,1,32,1,33,1,33, - 1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,5,34, - 762,8,34,10,34,12,34,765,9,34,1,34,1,34,1,35,1,35,3,35,771,8,35, - 1,35,1,35,1,35,1,35,3,35,777,8,35,1,35,3,35,780,8,35,1,35,3,35,783, - 8,35,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,3,37,793,8,37,1,37, - 3,37,796,8,37,1,38,1,38,1,39,1,39,1,39,1,39,3,39,804,8,39,1,40,1, - 40,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,3,42,816,8,42,1,42,1, - 42,1,42,1,42,1,42,1,42,1,43,1,43,1,44,1,44,1,44,1,44,1,45,1,45,1, - 45,1,45,1,46,1,46,1,46,1,46,5,46,838,8,46,10,46,12,46,841,9,46,1, - 46,1,46,1,47,1,47,1,47,1,47,1,47,5,47,850,8,47,10,47,12,47,853,9, - 47,1,47,1,47,3,47,857,8,47,1,48,1,48,3,48,861,8,48,1,49,1,49,1,49, - 1,49,5,49,867,8,49,10,49,12,49,870,9,49,1,49,3,49,873,8,49,1,50, - 1,50,1,50,1,50,3,50,879,8,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52, - 1,52,3,52,889,8,52,1,52,1,52,3,52,893,8,52,1,52,1,52,1,53,1,53,3, - 53,899,8,53,1,53,1,53,3,53,903,8,53,1,53,1,53,3,53,907,8,53,1,53, - 3,53,910,8,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,3,54,919,8,54,1, - 54,1,54,3,54,923,8,54,1,54,1,54,1,54,1,54,1,54,3,54,930,8,54,1,54, - 3,54,933,8,54,1,55,1,55,1,55,1,55,1,55,1,55,5,55,941,8,55,10,55, - 12,55,944,9,55,1,56,1,56,1,57,1,57,1,57,3,57,951,8,57,1,57,1,57, - 1,57,1,57,1,57,1,57,3,57,959,8,57,1,58,1,58,3,58,963,8,58,1,58,1, - 58,1,58,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,978, - 8,60,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,64, - 1,64,1,64,1,64,1,64,1,64,3,64,997,8,64,1,65,1,65,1,65,1,65,1,65, - 1,66,1,66,1,66,1,66,3,66,1008,8,66,1,66,1,66,3,66,1012,8,66,1,66, - 1,66,1,66,1,66,1,66,3,66,1019,8,66,1,67,1,67,1,67,3,67,1024,8,67, - 1,67,1,67,1,68,1,68,3,68,1030,8,68,1,68,1,68,3,68,1034,8,68,1,68, - 1,68,1,69,1,69,1,69,3,69,1041,8,69,1,69,1,69,3,69,1045,8,69,1,70, - 1,70,3,70,1049,8,70,1,70,1,70,3,70,1053,8,70,1,70,1,70,1,71,1,71, - 1,71,1,71,3,71,1061,8,71,1,71,1,71,3,71,1065,8,71,1,71,1,71,1,72, - 3,72,1070,8,72,1,72,1,72,1,72,1,72,3,72,1076,8,72,1,73,1,73,1,73, - 1,73,3,73,1082,8,73,1,73,3,73,1085,8,73,1,73,1,73,3,73,1089,8,73, - 1,74,1,74,1,74,1,75,1,75,1,75,1,75,5,75,1098,8,75,10,75,12,75,1101, - 9,75,1,76,1,76,1,76,1,76,5,76,1107,8,76,10,76,12,76,1110,9,76,1, - 76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1121,8,77,11,77, - 12,77,1122,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,4,78,1133,8,78, - 11,78,12,78,1134,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1, - 79,1,79,1,79,1,79,3,79,1150,8,79,1,79,3,79,1153,8,79,1,79,1,79,3, - 79,1157,8,79,1,79,3,79,1160,8,79,3,79,1162,8,79,1,79,1,79,1,79,3, - 79,1167,8,79,1,79,1,79,3,79,1171,8,79,1,79,3,79,1174,8,79,5,79,1176, - 8,79,10,79,12,79,1179,9,79,1,80,1,80,1,80,1,80,5,80,1185,8,80,10, - 80,12,80,1188,9,80,1,81,1,81,1,81,1,81,5,81,1194,8,81,10,81,12,81, - 1197,9,81,1,82,1,82,1,82,1,82,1,82,5,82,1204,8,82,10,82,12,82,1207, - 9,82,1,82,1,82,3,82,1211,8,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83, - 1,84,1,84,3,84,1222,8,84,1,84,3,84,1225,8,84,1,84,3,84,1228,8,84, - 1,84,3,84,1231,8,84,1,84,3,84,1234,8,84,1,84,1,84,1,84,1,84,3,84, - 1240,8,84,1,85,1,85,3,85,1244,8,85,1,85,1,85,1,85,1,85,5,85,1250, - 8,85,10,85,12,85,1253,9,85,3,85,1255,8,85,1,86,1,86,1,86,3,86,1260, - 8,86,1,86,3,86,1263,8,86,1,86,1,86,3,86,1267,8,86,1,86,3,86,1270, - 8,86,3,86,1272,8,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87, - 1,87,1,87,1,87,3,87,1286,8,87,1,88,1,88,1,88,1,89,1,89,1,89,1,89, - 5,89,1295,8,89,10,89,12,89,1298,9,89,1,89,1,89,3,89,1302,8,89,1, - 89,1,89,1,89,1,89,1,89,1,89,3,89,1310,8,89,1,89,3,89,1313,8,89,1, - 89,3,89,1316,8,89,1,89,1,89,1,89,3,89,1321,8,89,5,89,1323,8,89,10, - 89,12,89,1326,9,89,1,90,1,90,3,90,1330,8,90,1,91,3,91,1333,8,91, - 1,91,1,91,3,91,1337,8,91,1,91,3,91,1340,8,91,1,91,3,91,1343,8,91, - 1,91,1,91,3,91,1347,8,91,1,91,3,91,1350,8,91,1,91,3,91,1353,8,91, - 1,91,1,91,1,91,1,91,1,91,1,91,1,91,1,91,5,91,1363,8,91,10,91,12, - 91,1366,9,91,1,91,1,91,1,91,1,91,3,91,1372,8,91,1,91,1,91,1,91,1, - 91,1,91,1,91,1,91,1,91,1,91,3,91,1383,8,91,1,92,1,92,1,92,1,92,1, - 92,1,92,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1, - 95,1,96,1,96,1,96,1,96,1,96,5,96,1408,8,96,10,96,12,96,1411,9,96, - 1,96,1,96,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98, - 1,98,1,98,1,98,1,98,1,98,1,98,3,98,1432,8,98,1,99,1,99,1,100,1,100, - 1,100,1,100,1,100,1,101,1,101,1,101,1,101,3,101,1445,8,101,1,102, - 1,102,1,102,1,103,1,103,1,103,1,103,1,103,5,103,1455,8,103,10,103, - 12,103,1458,9,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104, - 5,104,1468,8,104,10,104,12,104,1471,9,104,1,104,1,104,1,104,1,104, - 1,104,1,104,1,104,5,104,1480,8,104,10,104,12,104,1483,9,104,1,104, - 1,104,1,104,1,104,1,104,1,104,1,104,5,104,1492,8,104,10,104,12,104, - 1495,9,104,1,104,1,104,1,104,3,104,1500,8,104,1,105,1,105,1,105, - 1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108, - 1,109,1,109,1,110,1,110,1,110,1,111,1,111,1,111,1,111,5,111,1525, - 8,111,10,111,12,111,1528,9,111,1,112,1,112,1,112,1,112,1,113,3,113, - 1535,8,113,1,113,1,113,3,113,1539,8,113,1,113,3,113,1542,8,113,1, - 113,3,113,1545,8,113,1,113,1,113,1,114,1,114,1,114,3,114,1552,8, - 114,1,114,3,114,1555,8,114,1,114,3,114,1558,8,114,1,114,3,114,1561, - 8,114,1,114,3,114,1564,8,114,1,114,3,114,1567,8,114,1,114,1,114, - 1,114,3,114,1572,8,114,1,114,3,114,1575,8,114,1,115,1,115,1,115, - 1,115,1,115,5,115,1582,8,115,10,115,12,115,1585,9,115,1,116,1,116, - 3,116,1589,8,116,1,116,1,116,3,116,1593,8,116,1,117,1,117,1,117, - 3,117,1598,8,117,1,118,1,118,1,118,1,118,1,118,5,118,1605,8,118, - 10,118,12,118,1608,9,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119, - 1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,3,119,1626, - 8,119,1,120,1,120,1,120,1,120,5,120,1632,8,120,10,120,12,120,1635, - 9,120,1,121,1,121,1,121,4,121,1640,8,121,11,121,12,121,1641,1,121, - 1,121,3,121,1646,8,121,1,122,1,122,3,122,1650,8,122,1,123,1,123, - 1,123,1,123,1,123,1,123,1,123,1,123,3,123,1660,8,123,1,124,1,124, - 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, - 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, - 3,124,1686,8,124,1,125,1,125,1,125,1,125,5,125,1692,8,125,10,125, - 12,125,1695,9,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,126,3,126,1706,8,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128, - 1,128,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130, - 1,130,1,130,3,130,1728,8,130,3,130,1730,8,130,1,130,1,130,1,130, - 1,130,1,130,1,130,1,130,1,130,1,130,3,130,1741,8,130,1,130,5,130, - 1744,8,130,10,130,12,130,1747,9,130,1,131,3,131,1750,8,131,1,131, - 1,131,3,131,1754,8,131,1,131,1,131,1,131,1,131,1,131,3,131,1761, - 8,131,1,131,1,131,1,131,1,131,1,131,5,131,1768,8,131,10,131,12,131, - 1771,9,131,1,131,1,131,1,131,3,131,1776,8,131,1,131,1,131,1,131, - 1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,3,131,1789,8,131, - 1,131,1,131,1,131,1,131,1,131,3,131,1796,8,131,1,131,1,131,1,131, - 3,131,1801,8,131,1,131,1,131,1,131,1,131,3,131,1807,8,131,1,131, - 1,131,1,131,1,131,1,131,3,131,1814,8,131,3,131,1816,8,131,1,132, - 3,132,1819,8,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132, - 5,132,1829,8,132,10,132,12,132,1832,9,132,1,132,1,132,3,132,1836, - 8,132,1,132,3,132,1839,8,132,1,132,1,132,1,132,1,132,3,132,1845, - 8,132,3,132,1847,8,132,1,133,1,133,1,133,1,133,3,133,1853,8,133, - 1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133, - 1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,5,133,1874,8,133, - 10,133,12,133,1877,9,133,1,134,1,134,1,134,4,134,1882,8,134,11,134, - 12,134,1883,1,134,1,134,3,134,1888,8,134,1,134,1,134,1,134,1,134, - 1,134,4,134,1895,8,134,11,134,12,134,1896,1,134,1,134,3,134,1901, - 8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, - 1,134,1,134,1,134,1,134,3,134,1917,8,134,1,134,1,134,1,134,1,134, - 1,134,1,134,1,134,3,134,1926,8,134,1,134,1,134,1,134,1,134,1,134, + 18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,595, + 8,18,1,19,3,19,598,8,19,1,19,4,19,601,8,19,11,19,12,19,602,1,20, + 1,20,3,20,607,8,20,1,21,1,21,3,21,611,8,21,1,21,1,21,3,21,615,8, + 21,1,21,1,21,1,21,1,21,1,21,5,21,622,8,21,10,21,12,21,625,9,21,1, + 21,1,21,3,21,629,8,21,1,21,1,21,3,21,633,8,21,1,21,1,21,3,21,637, + 8,21,1,21,1,21,1,21,3,21,642,8,21,1,21,3,21,645,8,21,1,21,1,21,3, + 21,649,8,21,1,22,1,22,1,22,3,22,654,8,22,1,22,1,22,1,22,1,22,3,22, + 660,8,22,1,23,1,23,1,23,3,23,665,8,23,1,24,1,24,1,24,3,24,670,8, + 24,1,24,1,24,3,24,674,8,24,1,25,1,25,3,25,678,8,25,1,26,1,26,3,26, + 682,8,26,1,27,1,27,1,27,1,27,5,27,688,8,27,10,27,12,27,691,9,27, + 1,27,1,27,1,28,1,28,1,28,3,28,698,8,28,1,28,1,28,3,28,702,8,28,1, + 28,1,28,3,28,706,8,28,1,28,1,28,3,28,710,8,28,1,28,1,28,3,28,714, + 8,28,1,28,1,28,3,28,718,8,28,1,28,1,28,3,28,722,8,28,1,28,1,28,3, + 28,726,8,28,1,28,1,28,3,28,730,8,28,3,28,732,8,28,1,29,1,29,1,29, + 1,29,1,30,1,30,1,30,1,30,3,30,742,8,30,1,30,1,30,1,31,1,31,1,31, + 1,31,3,31,750,8,31,1,31,1,31,1,32,1,32,1,32,1,32,1,33,1,33,1,33, + 1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,5,34,772, + 8,34,10,34,12,34,775,9,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34, + 1,34,5,34,786,8,34,10,34,12,34,789,9,34,1,34,1,34,3,34,793,8,34, + 1,35,1,35,3,35,797,8,35,1,35,1,35,1,35,1,35,3,35,803,8,35,1,35,3, + 35,806,8,35,1,35,3,35,809,8,35,1,36,1,36,1,36,1,36,1,36,3,36,816, + 8,36,1,36,3,36,819,8,36,1,37,1,37,1,38,1,38,1,38,1,38,1,38,3,38, + 828,8,38,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,3,41, + 840,8,41,1,41,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,43,1,43,1,43, + 1,43,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,5,45,862,8,45,10,45, + 12,45,865,9,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,5,46,874,8,46, + 10,46,12,46,877,9,46,1,46,1,46,3,46,881,8,46,1,47,1,47,3,47,885, + 8,47,1,48,1,48,1,48,1,48,5,48,891,8,48,10,48,12,48,894,9,48,1,48, + 3,48,897,8,48,1,49,1,49,1,49,1,49,3,49,903,8,49,1,50,1,50,1,50,1, + 50,1,50,1,51,1,51,1,51,3,51,913,8,51,1,51,1,51,1,51,3,51,918,8,51, + 1,51,1,51,1,52,1,52,3,52,924,8,52,1,52,1,52,3,52,928,8,52,1,52,1, + 52,3,52,932,8,52,1,52,1,52,3,52,936,8,52,1,52,1,52,1,52,1,53,1,53, + 1,53,1,53,3,53,945,8,53,1,53,1,53,3,53,949,8,53,1,53,1,53,1,53,1, + 53,1,53,3,53,956,8,53,1,53,3,53,959,8,53,1,54,1,54,1,54,1,54,1,54, + 1,54,5,54,967,8,54,10,54,12,54,970,9,54,1,55,1,55,1,56,1,56,1,56, + 3,56,977,8,56,1,56,1,56,1,56,1,56,1,56,1,56,3,56,985,8,56,1,57,1, + 57,3,57,989,8,57,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1,59,1,59,1, + 59,1,59,1,59,1,59,3,59,1004,8,59,1,60,1,60,1,60,1,60,1,61,1,61,1, + 61,1,61,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,63,3,63,1023,8, + 63,1,64,1,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,3,65,1034,8,65,1, + 65,1,65,3,65,1038,8,65,1,65,1,65,1,65,1,65,1,65,3,65,1045,8,65,1, + 66,1,66,1,66,3,66,1050,8,66,1,66,1,66,1,67,1,67,3,67,1056,8,67,1, + 67,1,67,3,67,1060,8,67,1,67,1,67,1,68,1,68,1,68,3,68,1067,8,68,1, + 68,1,68,3,68,1071,8,68,1,69,1,69,3,69,1075,8,69,1,69,1,69,3,69,1079, + 8,69,1,69,1,69,1,70,1,70,1,70,1,70,3,70,1087,8,70,1,70,1,70,3,70, + 1091,8,70,1,70,1,70,1,71,3,71,1096,8,71,1,71,1,71,1,71,1,71,3,71, + 1102,8,71,1,72,1,72,1,72,1,72,3,72,1108,8,72,1,72,3,72,1111,8,72, + 1,72,1,72,3,72,1115,8,72,1,73,1,73,1,73,1,74,1,74,1,74,1,74,5,74, + 1124,8,74,10,74,12,74,1127,9,74,1,75,1,75,1,75,1,75,5,75,1133,8, + 75,10,75,12,75,1136,9,75,1,75,1,75,1,76,1,76,1,76,1,76,1,76,1,76, + 1,76,4,76,1147,8,76,11,76,12,76,1148,1,76,1,76,1,77,1,77,1,77,1, + 77,1,77,1,77,4,77,1159,8,77,11,77,12,77,1160,1,77,1,77,1,78,1,78, + 1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,3,78,1176,8,78,1,78, + 3,78,1179,8,78,1,78,1,78,3,78,1183,8,78,1,78,3,78,1186,8,78,3,78, + 1188,8,78,1,78,1,78,1,78,3,78,1193,8,78,1,78,1,78,3,78,1197,8,78, + 1,78,3,78,1200,8,78,5,78,1202,8,78,10,78,12,78,1205,9,78,1,79,1, + 79,1,79,1,79,5,79,1211,8,79,10,79,12,79,1214,9,79,1,80,1,80,1,80, + 1,80,5,80,1220,8,80,10,80,12,80,1223,9,80,1,81,1,81,1,81,1,81,1, + 81,5,81,1230,8,81,10,81,12,81,1233,9,81,1,81,1,81,3,81,1237,8,81, + 1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,83,1,83,3,83,1248,8,83,1,83, + 3,83,1251,8,83,1,83,3,83,1254,8,83,1,83,3,83,1257,8,83,1,83,3,83, + 1260,8,83,1,83,1,83,1,83,1,83,3,83,1266,8,83,1,84,1,84,3,84,1270, + 8,84,1,84,1,84,1,84,1,84,5,84,1276,8,84,10,84,12,84,1279,9,84,3, + 84,1281,8,84,1,85,1,85,1,85,3,85,1286,8,85,1,85,3,85,1289,8,85,1, + 85,1,85,3,85,1293,8,85,1,85,3,85,1296,8,85,3,85,1298,8,85,1,86,1, + 86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,3,86,1312,8, + 86,1,87,1,87,1,87,1,88,1,88,1,88,1,88,5,88,1321,8,88,10,88,12,88, + 1324,9,88,1,88,1,88,3,88,1328,8,88,1,88,1,88,1,88,1,88,1,88,1,88, + 3,88,1336,8,88,1,88,3,88,1339,8,88,1,88,3,88,1342,8,88,1,88,1,88, + 1,88,3,88,1347,8,88,5,88,1349,8,88,10,88,12,88,1352,9,88,1,89,1, + 89,3,89,1356,8,89,1,90,3,90,1359,8,90,1,90,1,90,3,90,1363,8,90,1, + 90,1,90,3,90,1367,8,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,3,90,1376, + 8,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,3,90,1387,8,90, + 1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,93,1,93,1,93,1,93,1,93, + 1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,5,95,1412,8,95, + 10,95,12,95,1415,9,95,1,95,1,95,1,96,1,96,1,97,1,97,1,97,1,97,1, + 97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,3,97,1436,8, + 97,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,3, + 100,1449,8,100,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,5, + 102,1459,8,102,10,102,12,102,1462,9,102,1,103,1,103,1,103,1,103, + 1,103,1,103,1,103,1,103,5,103,1472,8,103,10,103,12,103,1475,9,103, + 1,103,1,103,1,103,1,103,1,103,1,103,1,103,5,103,1484,8,103,10,103, + 12,103,1487,9,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,5,103, + 1496,8,103,10,103,12,103,1499,9,103,1,103,1,103,1,103,3,103,1504, + 8,103,1,104,1,104,1,104,1,105,1,105,1,106,1,106,1,106,1,106,1,106, + 1,106,1,106,1,107,1,107,1,108,1,108,1,109,1,109,1,109,1,110,1,110, + 1,110,1,110,5,110,1529,8,110,10,110,12,110,1532,9,110,1,111,1,111, + 1,111,1,111,1,112,3,112,1539,8,112,1,112,1,112,3,112,1543,8,112, + 1,112,3,112,1546,8,112,1,112,3,112,1549,8,112,1,112,1,112,1,113, + 1,113,1,113,3,113,1556,8,113,1,113,3,113,1559,8,113,1,113,3,113, + 1562,8,113,1,113,3,113,1565,8,113,1,113,3,113,1568,8,113,1,113,3, + 113,1571,8,113,1,113,1,113,1,113,3,113,1576,8,113,1,113,3,113,1579, + 8,113,1,114,1,114,1,114,1,114,1,114,5,114,1586,8,114,10,114,12,114, + 1589,9,114,1,115,1,115,3,115,1593,8,115,1,115,1,115,3,115,1597,8, + 115,1,116,1,116,1,116,3,116,1602,8,116,1,117,1,117,1,117,1,117,3, + 117,1608,8,117,1,117,1,117,1,117,3,117,1613,8,117,5,117,1615,8,117, + 10,117,12,117,1618,9,117,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,3,118,1636, + 8,118,1,119,1,119,1,119,1,119,5,119,1642,8,119,10,119,12,119,1645, + 9,119,1,120,1,120,1,120,4,120,1650,8,120,11,120,12,120,1651,1,120, + 1,120,3,120,1656,8,120,1,121,1,121,3,121,1660,8,121,1,122,1,122, + 1,122,1,122,1,122,1,122,1,122,1,122,3,122,1670,8,122,1,123,1,123, + 1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123, + 1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123, + 3,123,1696,8,123,1,124,1,124,1,124,1,124,5,124,1702,8,124,10,124, + 12,124,1705,9,124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,125, + 1,125,3,125,1716,8,125,1,126,1,126,1,126,1,126,1,126,1,127,1,127, + 1,127,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129, + 1,129,1,129,3,129,1738,8,129,3,129,1740,8,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,129,1,129,1,129,3,129,1751,8,129,1,129,5,129, + 1754,8,129,10,129,12,129,1757,9,129,1,130,3,130,1760,8,130,1,130, + 1,130,3,130,1764,8,130,1,130,1,130,1,130,1,130,1,130,3,130,1771, + 8,130,1,130,1,130,1,130,1,130,1,130,5,130,1778,8,130,10,130,12,130, + 1781,9,130,1,130,1,130,1,130,3,130,1786,8,130,1,130,1,130,1,130, + 1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,3,130,1799,8,130, + 1,130,1,130,1,130,1,130,1,130,3,130,1806,8,130,1,130,1,130,1,130, + 3,130,1811,8,130,1,130,1,130,1,130,1,130,3,130,1817,8,130,1,130, + 1,130,1,130,1,130,1,130,3,130,1824,8,130,3,130,1826,8,130,1,131, + 3,131,1829,8,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131, + 5,131,1839,8,131,10,131,12,131,1842,9,131,1,131,1,131,3,131,1846, + 8,131,1,131,3,131,1849,8,131,1,131,1,131,1,131,1,131,3,131,1855, + 8,131,3,131,1857,8,131,1,132,1,132,1,132,1,132,3,132,1863,8,132, + 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132, + 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,5,132,1884,8,132, + 10,132,12,132,1887,9,132,1,133,1,133,1,133,1,133,1,133,3,133,1894, + 8,133,1,133,1,133,1,133,5,133,1899,8,133,10,133,12,133,1902,9,133, + 3,133,1904,8,133,1,133,1,133,3,133,1908,8,133,1,134,1,134,1,134, + 4,134,1913,8,134,11,134,12,134,1914,1,134,1,134,3,134,1919,8,134, + 1,134,1,134,1,134,1,134,1,134,4,134,1926,8,134,11,134,12,134,1927, + 1,134,1,134,3,134,1932,8,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1948,8,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1957,8,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, - 1,134,1,134,1,134,1,134,1,134,1,134,3,134,1950,8,134,1,134,1,134, - 1,134,5,134,1955,8,134,10,134,12,134,1958,9,134,3,134,1960,8,134, - 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1971, - 8,134,1,134,1,134,1,134,1,134,1,134,5,134,1978,8,134,10,134,12,134, - 1981,9,134,1,135,1,135,1,136,1,136,3,136,1987,8,136,1,137,1,137, - 1,137,1,137,3,137,1993,8,137,1,138,1,138,1,139,1,139,1,140,1,140, - 3,140,2001,8,140,1,141,1,141,1,141,3,141,2006,8,141,1,142,1,142, - 3,142,2010,8,142,1,143,1,143,1,143,4,143,2015,8,143,11,143,12,143, - 2016,1,144,1,144,1,144,3,144,2022,8,144,1,145,1,145,1,145,1,145, - 1,145,1,146,3,146,2030,8,146,1,146,1,146,3,146,2034,8,146,1,147, - 3,147,2037,8,147,1,147,1,147,3,147,2041,8,147,1,148,1,148,1,148, - 1,149,1,149,4,149,2048,8,149,11,149,12,149,2049,1,149,3,149,2053, - 8,149,1,150,1,150,1,150,1,150,1,151,1,151,1,151,5,151,2062,8,151, - 10,151,12,151,2065,9,151,1,152,1,152,1,152,3,152,2070,8,152,1,153, - 1,153,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,157, - 1,157,1,158,1,158,1,158,3,158,2088,8,158,1,159,1,159,1,159,3,159, - 2093,8,159,1,160,1,160,1,160,3,160,2098,8,160,1,160,1,160,1,160, - 1,160,1,160,3,160,2105,8,160,3,160,2107,8,160,1,161,1,161,1,161, - 3,161,2112,8,161,1,161,1,161,1,161,1,161,1,161,3,161,2119,8,161, - 3,161,2121,8,161,1,162,1,162,1,162,3,162,2126,8,162,1,162,1,162, - 1,162,1,162,1,162,3,162,2133,8,162,3,162,2135,8,162,1,163,1,163, - 1,163,3,163,2140,8,163,1,163,1,163,1,163,1,163,1,163,3,163,2147, - 8,163,3,163,2149,8,163,1,164,1,164,1,164,5,164,2154,8,164,10,164, - 12,164,2157,9,164,1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,167, - 1,167,1,167,1,168,1,168,1,168,1,168,5,168,2173,8,168,10,168,12,168, - 2176,9,168,1,168,1,168,1,169,1,169,3,169,2182,8,169,1,169,3,169, - 2185,8,169,1,170,1,170,1,170,3,170,2190,8,170,1,171,1,171,1,171, - 1,171,3,171,2196,8,171,1,172,1,172,1,172,1,172,1,172,1,172,3,172, - 2204,8,172,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173, - 1,173,1,173,1,173,1,173,1,173,3,173,2220,8,173,1,174,1,174,1,174, - 1,174,1,174,1,174,1,174,3,174,2229,8,174,1,175,1,175,1,176,1,176, - 1,177,1,177,1,177,1,177,3,177,2239,8,177,1,177,1,177,1,177,1,177, - 1,177,3,177,2246,8,177,1,177,3,177,2249,8,177,1,178,1,178,1,178, - 1,179,1,179,1,180,1,180,1,181,1,181,1,182,1,182,1,183,1,183,1,184, - 1,184,1,185,1,185,1,186,1,186,1,187,1,187,1,187,1,2155,5,158,178, - 260,266,268,188,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34, + 1,134,1,134,1,134,3,134,1985,8,134,1,134,1,134,1,134,1,134,1,134, + 5,134,1992,8,134,10,134,12,134,1995,9,134,1,135,1,135,1,136,1,136, + 1,136,1,136,3,136,2003,8,136,1,137,1,137,1,137,1,137,3,137,2009, + 8,137,1,138,1,138,3,138,2013,8,138,1,139,1,139,1,139,1,139,3,139, + 2019,8,139,1,140,1,140,1,141,1,141,1,142,1,142,3,142,2027,8,142, + 1,143,1,143,1,143,3,143,2032,8,143,1,144,1,144,3,144,2036,8,144, + 1,145,1,145,1,145,4,145,2041,8,145,11,145,12,145,2042,1,146,1,146, + 1,146,3,146,2048,8,146,1,147,1,147,1,147,1,147,1,147,1,148,3,148, + 2056,8,148,1,148,1,148,3,148,2060,8,148,1,149,3,149,2063,8,149,1, + 149,1,149,3,149,2067,8,149,1,150,1,150,1,150,1,151,1,151,4,151,2074, + 8,151,11,151,12,151,2075,1,151,3,151,2079,8,151,1,152,1,152,1,152, + 1,152,1,153,1,153,1,153,5,153,2088,8,153,10,153,12,153,2091,9,153, + 1,154,1,154,1,154,3,154,2096,8,154,1,155,1,155,1,156,1,156,1,157, + 1,157,1,157,1,157,1,157,1,158,1,158,1,159,1,159,1,160,1,160,1,160, + 3,160,2114,8,160,1,161,1,161,1,161,3,161,2119,8,161,1,162,1,162, + 1,162,3,162,2124,8,162,1,162,1,162,1,162,1,162,1,162,3,162,2131, + 8,162,3,162,2133,8,162,1,163,1,163,1,163,3,163,2138,8,163,1,163, + 1,163,1,163,1,163,1,163,3,163,2145,8,163,3,163,2147,8,163,1,164, + 1,164,1,164,3,164,2152,8,164,1,164,1,164,1,164,1,164,1,164,3,164, + 2159,8,164,3,164,2161,8,164,1,165,1,165,1,165,3,165,2166,8,165,1, + 165,1,165,1,165,1,165,1,165,3,165,2173,8,165,3,165,2175,8,165,1, + 166,1,166,1,166,5,166,2180,8,166,10,166,12,166,2183,9,166,1,167, + 1,167,1,167,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1,170,1,170, + 1,170,1,170,5,170,2199,8,170,10,170,12,170,2202,9,170,1,170,1,170, + 1,171,1,171,3,171,2208,8,171,1,171,3,171,2211,8,171,1,172,1,172, + 1,172,3,172,2216,8,172,1,173,1,173,1,173,1,173,3,173,2222,8,173, + 1,174,1,174,1,174,1,174,1,174,1,174,3,174,2230,8,174,1,175,1,175, + 1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175, + 1,175,3,175,2246,8,175,1,176,1,176,1,176,1,176,1,176,1,176,1,176, + 3,176,2255,8,176,1,177,1,177,1,178,1,178,1,179,1,179,1,179,1,179, + 3,179,2265,8,179,1,179,1,179,1,179,1,179,1,179,3,179,2272,8,179, + 1,179,3,179,2275,8,179,1,180,1,180,1,180,1,181,1,181,1,182,1,182, + 1,183,1,183,1,184,1,184,1,185,1,185,1,186,1,186,1,187,1,187,1,188, + 1,188,1,189,1,189,1,190,1,190,1,191,1,191,1,191,1,2181,5,156,176, + 258,264,268,192,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, @@ -11826,746 +12154,756 @@ export class FlinkSqlParser extends SQLParserBase { 278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308, 310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340, 342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372, - 374,0,45,2,0,109,109,450,450,3,0,45,45,128,128,188,188,4,0,42,42, - 90,90,422,422,464,464,2,0,441,441,447,447,2,0,151,151,170,170,2, - 0,437,437,489,489,2,0,482,485,487,487,3,0,32,32,91,91,244,244,11, - 0,28,29,35,35,46,46,92,92,178,179,344,344,360,360,378,378,381,381, - 387,387,416,417,2,0,433,433,435,435,4,0,101,102,115,115,144,144, - 246,246,2,0,13,13,231,231,2,0,455,455,462,462,3,0,5,5,270,270,444, - 444,3,0,266,266,455,455,462,462,3,0,425,425,458,458,477,477,3,0, - 330,330,465,465,481,481,2,0,440,440,490,490,2,0,183,183,265,265, - 3,0,130,130,180,180,402,402,4,0,152,152,174,174,201,201,317,317, - 3,0,445,445,459,459,499,499,4,0,250,250,446,446,494,496,498,498, - 2,0,74,74,320,320,3,0,459,459,492,492,499,499,2,0,439,439,450,450, - 2,0,457,457,467,467,4,0,140,140,244,244,397,397,404,404,2,0,19,19, - 369,369,2,0,5,5,11,11,2,0,509,509,529,530,4,0,452,452,527,527,531, - 531,534,534,2,0,529,530,532,532,1,0,529,530,1,0,538,539,2,0,538, - 538,541,541,4,0,452,452,527,527,529,531,533,534,3,0,241,241,508, - 509,529,530,2,0,140,140,397,397,2,0,5,5,113,113,10,0,97,97,165,165, - 222,222,229,229,334,334,436,436,470,470,472,472,488,488,502,502, - 15,0,97,97,165,165,222,222,229,229,334,334,427,427,436,436,442,442, - 448,449,454,454,460,460,470,475,488,488,491,491,502,503,11,0,5,5, - 13,13,33,33,78,78,84,85,113,113,200,200,207,208,389,389,413,413, - 527,527,55,0,4,4,13,13,23,23,38,38,41,41,43,44,54,54,56,56,69,69, - 75,75,78,78,84,85,91,91,98,99,107,107,119,119,134,134,139,139,143, - 143,145,145,160,160,165,165,167,167,194,194,197,197,199,199,201, - 201,205,205,207,209,214,214,220,220,222,223,229,229,243,243,245, - 245,264,264,276,276,281,281,283,283,293,293,317,317,321,323,334, - 334,357,358,364,364,367,367,378,380,395,395,398,399,408,408,419, - 420,436,436,469,469,488,488,502,502,1,0,437,504,2475,0,379,1,0,0, - 0,2,389,1,0,0,0,4,403,1,0,0,0,6,405,1,0,0,0,8,421,1,0,0,0,10,425, - 1,0,0,0,12,427,1,0,0,0,14,430,1,0,0,0,16,441,1,0,0,0,18,449,1,0, - 0,0,20,457,1,0,0,0,22,459,1,0,0,0,24,511,1,0,0,0,26,513,1,0,0,0, - 28,520,1,0,0,0,30,524,1,0,0,0,32,528,1,0,0,0,34,532,1,0,0,0,36,586, - 1,0,0,0,38,592,1,0,0,0,40,598,1,0,0,0,42,600,1,0,0,0,44,641,1,0, - 0,0,46,655,1,0,0,0,48,657,1,0,0,0,50,667,1,0,0,0,52,671,1,0,0,0, - 54,673,1,0,0,0,56,721,1,0,0,0,58,723,1,0,0,0,60,727,1,0,0,0,62,735, - 1,0,0,0,64,743,1,0,0,0,66,747,1,0,0,0,68,754,1,0,0,0,70,782,1,0, - 0,0,72,784,1,0,0,0,74,787,1,0,0,0,76,797,1,0,0,0,78,799,1,0,0,0, - 80,805,1,0,0,0,82,807,1,0,0,0,84,815,1,0,0,0,86,823,1,0,0,0,88,825, - 1,0,0,0,90,829,1,0,0,0,92,833,1,0,0,0,94,856,1,0,0,0,96,860,1,0, - 0,0,98,862,1,0,0,0,100,878,1,0,0,0,102,880,1,0,0,0,104,885,1,0,0, - 0,106,896,1,0,0,0,108,914,1,0,0,0,110,934,1,0,0,0,112,945,1,0,0, - 0,114,947,1,0,0,0,116,960,1,0,0,0,118,967,1,0,0,0,120,970,1,0,0, - 0,122,979,1,0,0,0,124,983,1,0,0,0,126,987,1,0,0,0,128,990,1,0,0, - 0,130,998,1,0,0,0,132,1003,1,0,0,0,134,1020,1,0,0,0,136,1027,1,0, - 0,0,138,1037,1,0,0,0,140,1046,1,0,0,0,142,1056,1,0,0,0,144,1075, - 1,0,0,0,146,1077,1,0,0,0,148,1090,1,0,0,0,150,1093,1,0,0,0,152,1102, - 1,0,0,0,154,1113,1,0,0,0,156,1126,1,0,0,0,158,1161,1,0,0,0,160,1180, - 1,0,0,0,162,1189,1,0,0,0,164,1198,1,0,0,0,166,1217,1,0,0,0,168,1239, - 1,0,0,0,170,1241,1,0,0,0,172,1271,1,0,0,0,174,1285,1,0,0,0,176,1287, - 1,0,0,0,178,1301,1,0,0,0,180,1327,1,0,0,0,182,1382,1,0,0,0,184,1384, - 1,0,0,0,186,1390,1,0,0,0,188,1392,1,0,0,0,190,1397,1,0,0,0,192,1402, - 1,0,0,0,194,1414,1,0,0,0,196,1431,1,0,0,0,198,1433,1,0,0,0,200,1435, - 1,0,0,0,202,1444,1,0,0,0,204,1446,1,0,0,0,206,1449,1,0,0,0,208,1499, - 1,0,0,0,210,1501,1,0,0,0,212,1504,1,0,0,0,214,1506,1,0,0,0,216,1513, - 1,0,0,0,218,1515,1,0,0,0,220,1517,1,0,0,0,222,1520,1,0,0,0,224,1529, - 1,0,0,0,226,1534,1,0,0,0,228,1548,1,0,0,0,230,1576,1,0,0,0,232,1586, - 1,0,0,0,234,1594,1,0,0,0,236,1599,1,0,0,0,238,1625,1,0,0,0,240,1627, - 1,0,0,0,242,1636,1,0,0,0,244,1647,1,0,0,0,246,1659,1,0,0,0,248,1685, - 1,0,0,0,250,1687,1,0,0,0,252,1705,1,0,0,0,254,1707,1,0,0,0,256,1712, - 1,0,0,0,258,1715,1,0,0,0,260,1729,1,0,0,0,262,1815,1,0,0,0,264,1846, - 1,0,0,0,266,1852,1,0,0,0,268,1970,1,0,0,0,270,1982,1,0,0,0,272,1986, - 1,0,0,0,274,1992,1,0,0,0,276,1994,1,0,0,0,278,1996,1,0,0,0,280,2000, - 1,0,0,0,282,2002,1,0,0,0,284,2007,1,0,0,0,286,2014,1,0,0,0,288,2018, - 1,0,0,0,290,2023,1,0,0,0,292,2033,1,0,0,0,294,2036,1,0,0,0,296,2042, - 1,0,0,0,298,2052,1,0,0,0,300,2054,1,0,0,0,302,2058,1,0,0,0,304,2069, - 1,0,0,0,306,2071,1,0,0,0,308,2073,1,0,0,0,310,2075,1,0,0,0,312,2080, - 1,0,0,0,314,2082,1,0,0,0,316,2084,1,0,0,0,318,2089,1,0,0,0,320,2106, - 1,0,0,0,322,2120,1,0,0,0,324,2134,1,0,0,0,326,2148,1,0,0,0,328,2150, - 1,0,0,0,330,2158,1,0,0,0,332,2161,1,0,0,0,334,2165,1,0,0,0,336,2168, - 1,0,0,0,338,2179,1,0,0,0,340,2189,1,0,0,0,342,2195,1,0,0,0,344,2203, - 1,0,0,0,346,2219,1,0,0,0,348,2228,1,0,0,0,350,2230,1,0,0,0,352,2232, - 1,0,0,0,354,2248,1,0,0,0,356,2250,1,0,0,0,358,2253,1,0,0,0,360,2255, - 1,0,0,0,362,2257,1,0,0,0,364,2259,1,0,0,0,366,2261,1,0,0,0,368,2263, - 1,0,0,0,370,2265,1,0,0,0,372,2267,1,0,0,0,374,2269,1,0,0,0,376,378, - 3,2,1,0,377,376,1,0,0,0,378,381,1,0,0,0,379,377,1,0,0,0,379,380, - 1,0,0,0,380,382,1,0,0,0,381,379,1,0,0,0,382,383,5,0,0,1,383,1,1, - 0,0,0,384,386,3,4,2,0,385,387,5,521,0,0,386,385,1,0,0,0,386,387, - 1,0,0,0,387,390,1,0,0,0,388,390,3,6,3,0,389,384,1,0,0,0,389,388, - 1,0,0,0,390,3,1,0,0,0,391,404,3,8,4,0,392,404,3,10,5,0,393,404,3, - 12,6,0,394,404,3,14,7,0,395,404,3,20,10,0,396,404,3,24,12,0,397, - 404,3,26,13,0,398,404,3,28,14,0,399,404,3,30,15,0,400,404,3,32,16, - 0,401,404,3,34,17,0,402,404,3,36,18,0,403,391,1,0,0,0,403,392,1, - 0,0,0,403,393,1,0,0,0,403,394,1,0,0,0,403,395,1,0,0,0,403,396,1, - 0,0,0,403,397,1,0,0,0,403,398,1,0,0,0,403,399,1,0,0,0,403,400,1, - 0,0,0,403,401,1,0,0,0,403,402,1,0,0,0,404,5,1,0,0,0,405,406,5,521, - 0,0,406,7,1,0,0,0,407,422,3,40,20,0,408,422,3,104,52,0,409,422,3, - 106,53,0,410,422,3,108,54,0,411,422,3,102,51,0,412,422,3,114,57, - 0,413,422,3,128,64,0,414,422,3,130,65,0,415,422,3,132,66,0,416,422, - 3,134,67,0,417,422,3,136,68,0,418,422,3,138,69,0,419,422,3,140,70, - 0,420,422,3,142,71,0,421,407,1,0,0,0,421,408,1,0,0,0,421,409,1,0, - 0,0,421,410,1,0,0,0,421,411,1,0,0,0,421,412,1,0,0,0,421,413,1,0, - 0,0,421,414,1,0,0,0,421,415,1,0,0,0,421,416,1,0,0,0,421,417,1,0, - 0,0,421,418,1,0,0,0,421,419,1,0,0,0,421,420,1,0,0,0,422,9,1,0,0, - 0,423,426,3,158,79,0,424,426,3,144,72,0,425,423,1,0,0,0,425,424, - 1,0,0,0,426,11,1,0,0,0,427,428,7,0,0,0,428,429,3,322,161,0,429,13, - 1,0,0,0,430,434,5,135,0,0,431,435,3,16,8,0,432,433,5,479,0,0,433, - 435,5,146,0,0,434,431,1,0,0,0,434,432,1,0,0,0,434,435,1,0,0,0,435, - 439,1,0,0,0,436,440,3,10,5,0,437,440,3,146,73,0,438,440,3,156,78, - 0,439,436,1,0,0,0,439,437,1,0,0,0,439,438,1,0,0,0,440,15,1,0,0,0, - 441,446,3,18,9,0,442,443,5,520,0,0,443,445,3,18,9,0,444,442,1,0, - 0,0,445,448,1,0,0,0,446,444,1,0,0,0,446,447,1,0,0,0,447,17,1,0,0, - 0,448,446,1,0,0,0,449,450,7,1,0,0,450,19,1,0,0,0,451,452,5,410,0, - 0,452,453,5,441,0,0,453,458,3,312,156,0,454,455,5,410,0,0,455,458, - 3,316,158,0,456,458,3,22,11,0,457,451,1,0,0,0,457,454,1,0,0,0,457, - 456,1,0,0,0,458,21,1,0,0,0,459,460,5,410,0,0,460,461,5,227,0,0,461, - 466,3,328,164,0,462,463,5,520,0,0,463,465,3,328,164,0,464,462,1, - 0,0,0,465,468,1,0,0,0,466,464,1,0,0,0,466,467,1,0,0,0,467,23,1,0, - 0,0,468,466,1,0,0,0,469,470,5,341,0,0,470,512,7,2,0,0,471,472,5, - 341,0,0,472,473,5,76,0,0,473,512,7,3,0,0,474,475,5,341,0,0,475,478, - 5,374,0,0,476,477,7,4,0,0,477,479,3,316,158,0,478,476,1,0,0,0,478, - 479,1,0,0,0,479,481,1,0,0,0,480,482,3,264,132,0,481,480,1,0,0,0, - 481,482,1,0,0,0,482,512,1,0,0,0,483,484,5,341,0,0,484,485,5,58,0, - 0,485,488,7,4,0,0,486,489,3,324,162,0,487,489,3,322,161,0,488,486, - 1,0,0,0,488,487,1,0,0,0,489,491,1,0,0,0,490,492,3,264,132,0,491, - 490,1,0,0,0,491,492,1,0,0,0,492,512,1,0,0,0,493,494,5,341,0,0,494, - 499,5,72,0,0,495,496,5,373,0,0,496,500,3,322,161,0,497,498,5,501, - 0,0,498,500,3,324,162,0,499,495,1,0,0,0,499,497,1,0,0,0,500,512, - 1,0,0,0,501,503,5,341,0,0,502,504,5,411,0,0,503,502,1,0,0,0,503, - 504,1,0,0,0,504,505,1,0,0,0,505,512,5,154,0,0,506,508,5,341,0,0, - 507,509,5,152,0,0,508,507,1,0,0,0,508,509,1,0,0,0,509,510,1,0,0, - 0,510,512,5,227,0,0,511,469,1,0,0,0,511,471,1,0,0,0,511,474,1,0, - 0,0,511,483,1,0,0,0,511,493,1,0,0,0,511,501,1,0,0,0,511,506,1,0, - 0,0,512,25,1,0,0,0,513,514,5,468,0,0,514,515,5,226,0,0,515,518,3, - 328,164,0,516,517,5,433,0,0,517,519,3,336,168,0,518,516,1,0,0,0, - 518,519,1,0,0,0,519,27,1,0,0,0,520,521,5,500,0,0,521,522,5,226,0, - 0,522,523,3,328,164,0,523,29,1,0,0,0,524,526,5,340,0,0,525,527,3, - 338,169,0,526,525,1,0,0,0,526,527,1,0,0,0,527,31,1,0,0,0,528,530, - 5,312,0,0,529,531,3,340,170,0,530,529,1,0,0,0,530,531,1,0,0,0,531, - 33,1,0,0,0,532,533,7,5,0,0,533,534,5,463,0,0,534,535,3,112,56,0, - 535,35,1,0,0,0,536,537,5,437,0,0,537,538,5,463,0,0,538,539,5,433, - 0,0,539,542,3,38,19,0,540,541,5,17,0,0,541,543,3,328,164,0,542,540, - 1,0,0,0,542,543,1,0,0,0,543,587,1,0,0,0,544,545,5,437,0,0,545,546, - 5,456,0,0,546,547,5,433,0,0,547,550,3,38,19,0,548,549,5,17,0,0,549, - 551,3,328,164,0,550,548,1,0,0,0,550,551,1,0,0,0,551,554,1,0,0,0, - 552,553,5,311,0,0,553,555,3,328,164,0,554,552,1,0,0,0,554,555,1, - 0,0,0,555,587,1,0,0,0,556,557,5,437,0,0,557,558,7,6,0,0,558,559, - 5,433,0,0,559,560,3,38,19,0,560,561,5,311,0,0,561,562,3,328,164, - 0,562,587,1,0,0,0,563,564,5,437,0,0,564,565,5,486,0,0,565,587,3, - 38,19,0,566,567,5,437,0,0,567,568,5,453,0,0,568,569,5,456,0,0,569, - 570,5,433,0,0,570,571,3,38,19,0,571,572,5,311,0,0,572,573,3,328, - 164,0,573,574,5,466,0,0,574,575,3,328,164,0,575,587,1,0,0,0,576, - 577,5,437,0,0,577,578,5,443,0,0,578,579,5,456,0,0,579,580,5,433, - 0,0,580,581,3,38,19,0,581,582,5,146,0,0,582,583,3,328,164,0,583, - 584,5,17,0,0,584,585,3,328,164,0,585,587,1,0,0,0,586,536,1,0,0,0, - 586,544,1,0,0,0,586,556,1,0,0,0,586,563,1,0,0,0,586,566,1,0,0,0, - 586,576,1,0,0,0,587,37,1,0,0,0,588,590,5,534,0,0,589,588,1,0,0,0, - 589,590,1,0,0,0,590,591,1,0,0,0,591,593,3,328,164,0,592,589,1,0, - 0,0,593,594,1,0,0,0,594,592,1,0,0,0,594,595,1,0,0,0,595,39,1,0,0, - 0,596,599,3,42,21,0,597,599,3,44,22,0,598,596,1,0,0,0,598,597,1, - 0,0,0,599,41,1,0,0,0,600,602,5,72,0,0,601,603,5,497,0,0,602,601, - 1,0,0,0,602,603,1,0,0,0,603,604,1,0,0,0,604,606,5,373,0,0,605,607, - 3,332,166,0,606,605,1,0,0,0,606,607,1,0,0,0,607,608,1,0,0,0,608, - 609,3,320,160,0,609,610,5,516,0,0,610,615,3,46,23,0,611,612,5,520, - 0,0,612,614,3,46,23,0,613,611,1,0,0,0,614,617,1,0,0,0,615,613,1, - 0,0,0,615,616,1,0,0,0,616,620,1,0,0,0,617,615,1,0,0,0,618,619,5, - 520,0,0,619,621,3,82,41,0,620,618,1,0,0,0,620,621,1,0,0,0,621,624, - 1,0,0,0,622,623,5,520,0,0,623,625,3,84,42,0,624,622,1,0,0,0,624, - 625,1,0,0,0,625,628,1,0,0,0,626,627,5,520,0,0,627,629,3,88,44,0, - 628,626,1,0,0,0,628,629,1,0,0,0,629,630,1,0,0,0,630,632,5,517,0, - 0,631,633,3,72,36,0,632,631,1,0,0,0,632,633,1,0,0,0,633,635,1,0, - 0,0,634,636,3,90,45,0,635,634,1,0,0,0,635,636,1,0,0,0,636,637,1, - 0,0,0,637,639,3,330,165,0,638,640,3,98,49,0,639,638,1,0,0,0,639, - 640,1,0,0,0,640,43,1,0,0,0,641,642,5,72,0,0,642,644,5,373,0,0,643, - 645,3,332,166,0,644,643,1,0,0,0,644,645,1,0,0,0,645,646,1,0,0,0, - 646,647,3,320,160,0,647,650,3,330,165,0,648,649,5,17,0,0,649,651, - 3,158,79,0,650,648,1,0,0,0,650,651,1,0,0,0,651,45,1,0,0,0,652,656, - 3,48,24,0,653,656,3,74,37,0,654,656,3,78,39,0,655,652,1,0,0,0,655, - 653,1,0,0,0,655,654,1,0,0,0,656,47,1,0,0,0,657,658,3,50,25,0,658, - 660,3,56,28,0,659,661,3,70,35,0,660,659,1,0,0,0,660,661,1,0,0,0, - 661,663,1,0,0,0,662,664,3,72,36,0,663,662,1,0,0,0,663,664,1,0,0, - 0,664,49,1,0,0,0,665,668,3,328,164,0,666,668,3,258,129,0,667,665, - 1,0,0,0,667,666,1,0,0,0,668,51,1,0,0,0,669,672,3,328,164,0,670,672, - 4,26,0,0,671,669,1,0,0,0,671,670,1,0,0,0,672,53,1,0,0,0,673,674, - 5,516,0,0,674,679,3,52,26,0,675,676,5,520,0,0,676,678,3,52,26,0, - 677,675,1,0,0,0,678,681,1,0,0,0,679,677,1,0,0,0,679,680,1,0,0,0, - 680,682,1,0,0,0,681,679,1,0,0,0,682,683,5,517,0,0,683,55,1,0,0,0, - 684,722,7,7,0,0,685,687,7,8,0,0,686,688,3,58,29,0,687,686,1,0,0, - 0,687,688,1,0,0,0,688,722,1,0,0,0,689,691,5,379,0,0,690,692,3,58, - 29,0,691,690,1,0,0,0,691,692,1,0,0,0,692,699,1,0,0,0,693,695,7,9, - 0,0,694,696,5,206,0,0,695,694,1,0,0,0,695,696,1,0,0,0,696,697,1, - 0,0,0,697,698,5,378,0,0,698,700,5,504,0,0,699,693,1,0,0,0,699,700, - 1,0,0,0,700,722,1,0,0,0,701,703,7,10,0,0,702,704,3,60,30,0,703,702, - 1,0,0,0,703,704,1,0,0,0,704,722,1,0,0,0,705,707,7,11,0,0,706,708, - 3,64,32,0,707,706,1,0,0,0,707,708,1,0,0,0,708,722,1,0,0,0,709,711, - 5,469,0,0,710,712,3,66,33,0,711,710,1,0,0,0,711,712,1,0,0,0,712, - 722,1,0,0,0,713,715,5,321,0,0,714,716,3,68,34,0,715,714,1,0,0,0, - 715,716,1,0,0,0,716,722,1,0,0,0,717,719,5,294,0,0,718,720,3,62,31, - 0,719,718,1,0,0,0,719,720,1,0,0,0,720,722,1,0,0,0,721,684,1,0,0, - 0,721,685,1,0,0,0,721,689,1,0,0,0,721,701,1,0,0,0,721,705,1,0,0, - 0,721,709,1,0,0,0,721,713,1,0,0,0,721,717,1,0,0,0,722,57,1,0,0,0, - 723,724,5,516,0,0,724,725,3,360,180,0,725,726,5,517,0,0,726,59,1, - 0,0,0,727,728,5,516,0,0,728,731,3,360,180,0,729,730,5,520,0,0,730, - 732,3,360,180,0,731,729,1,0,0,0,731,732,1,0,0,0,732,733,1,0,0,0, - 733,734,5,517,0,0,734,61,1,0,0,0,735,736,5,516,0,0,736,739,3,358, - 179,0,737,738,5,520,0,0,738,740,3,358,179,0,739,737,1,0,0,0,739, - 740,1,0,0,0,740,741,1,0,0,0,741,742,5,517,0,0,742,63,1,0,0,0,743, - 744,5,507,0,0,744,745,3,56,28,0,745,746,5,506,0,0,746,65,1,0,0,0, - 747,748,5,507,0,0,748,749,3,56,28,0,749,750,5,520,0,0,750,751,3, - 56,28,0,751,752,1,0,0,0,752,753,5,506,0,0,753,67,1,0,0,0,754,755, - 5,507,0,0,755,756,3,52,26,0,756,763,3,56,28,0,757,758,5,520,0,0, - 758,759,3,52,26,0,759,760,3,56,28,0,760,762,1,0,0,0,761,757,1,0, - 0,0,762,765,1,0,0,0,763,761,1,0,0,0,763,764,1,0,0,0,764,766,1,0, - 0,0,765,763,1,0,0,0,766,767,5,506,0,0,767,69,1,0,0,0,768,769,5,64, - 0,0,769,771,3,86,43,0,770,768,1,0,0,0,770,771,1,0,0,0,771,772,1, - 0,0,0,772,773,5,288,0,0,773,776,5,466,0,0,774,775,5,241,0,0,775, - 777,5,125,0,0,776,774,1,0,0,0,776,777,1,0,0,0,777,783,1,0,0,0,778, - 780,5,241,0,0,779,778,1,0,0,0,779,780,1,0,0,0,780,781,1,0,0,0,781, - 783,5,244,0,0,782,770,1,0,0,0,782,779,1,0,0,0,783,71,1,0,0,0,784, - 785,5,59,0,0,785,786,5,537,0,0,786,73,1,0,0,0,787,788,3,50,25,0, - 788,789,3,56,28,0,789,792,5,218,0,0,790,791,5,151,0,0,791,793,3, - 76,38,0,792,790,1,0,0,0,792,793,1,0,0,0,793,795,1,0,0,0,794,796, - 5,423,0,0,795,794,1,0,0,0,795,796,1,0,0,0,796,75,1,0,0,0,797,798, - 5,537,0,0,798,77,1,0,0,0,799,800,3,50,25,0,800,801,5,17,0,0,801, - 803,3,80,40,0,802,804,3,72,36,0,803,802,1,0,0,0,803,804,1,0,0,0, - 804,79,1,0,0,0,805,806,3,258,129,0,806,81,1,0,0,0,807,808,5,424, - 0,0,808,809,5,146,0,0,809,810,3,52,26,0,810,811,5,17,0,0,811,812, - 3,258,129,0,812,83,1,0,0,0,813,814,5,64,0,0,814,816,3,86,43,0,815, - 813,1,0,0,0,815,816,1,0,0,0,816,817,1,0,0,0,817,818,5,288,0,0,818, - 819,5,466,0,0,819,820,3,54,27,0,820,821,5,241,0,0,821,822,5,125, - 0,0,822,85,1,0,0,0,823,824,3,304,152,0,824,87,1,0,0,0,825,826,5, - 277,0,0,826,827,5,146,0,0,827,828,5,371,0,0,828,89,1,0,0,0,829,830, - 5,269,0,0,830,831,5,34,0,0,831,832,3,92,46,0,832,91,1,0,0,0,833, - 834,5,516,0,0,834,839,3,94,47,0,835,836,5,520,0,0,836,838,3,94,47, - 0,837,835,1,0,0,0,838,841,1,0,0,0,839,837,1,0,0,0,839,840,1,0,0, - 0,840,842,1,0,0,0,841,839,1,0,0,0,842,843,5,517,0,0,843,93,1,0,0, - 0,844,857,3,52,26,0,845,846,5,516,0,0,846,851,3,96,48,0,847,848, - 5,520,0,0,848,850,3,96,48,0,849,847,1,0,0,0,850,853,1,0,0,0,851, - 849,1,0,0,0,851,852,1,0,0,0,852,854,1,0,0,0,853,851,1,0,0,0,854, - 855,5,517,0,0,855,857,1,0,0,0,856,844,1,0,0,0,856,845,1,0,0,0,857, - 95,1,0,0,0,858,861,3,280,140,0,859,861,3,354,177,0,860,858,1,0,0, - 0,860,859,1,0,0,0,861,97,1,0,0,0,862,863,5,202,0,0,863,872,3,322, - 161,0,864,868,5,516,0,0,865,867,3,100,50,0,866,865,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,873,5,517,0,0,872,864,1,0,0,0,872,873,1,0,0,0,873,99, - 1,0,0,0,874,875,7,12,0,0,875,879,7,13,0,0,876,877,7,14,0,0,877,879, - 7,15,0,0,878,874,1,0,0,0,878,876,1,0,0,0,879,101,1,0,0,0,880,881, - 5,72,0,0,881,882,5,441,0,0,882,883,3,314,157,0,883,884,3,330,165, - 0,884,103,1,0,0,0,885,886,5,72,0,0,886,888,5,447,0,0,887,889,3,332, - 166,0,888,887,1,0,0,0,888,889,1,0,0,0,889,890,1,0,0,0,890,892,3, - 318,159,0,891,893,3,72,36,0,892,891,1,0,0,0,892,893,1,0,0,0,893, - 894,1,0,0,0,894,895,3,330,165,0,895,105,1,0,0,0,896,898,5,72,0,0, - 897,899,5,497,0,0,898,897,1,0,0,0,898,899,1,0,0,0,899,900,1,0,0, - 0,900,902,5,501,0,0,901,903,3,332,166,0,902,901,1,0,0,0,902,903, - 1,0,0,0,903,904,1,0,0,0,904,906,3,326,163,0,905,907,3,54,27,0,906, - 905,1,0,0,0,906,907,1,0,0,0,907,909,1,0,0,0,908,910,3,72,36,0,909, - 908,1,0,0,0,909,910,1,0,0,0,910,911,1,0,0,0,911,912,5,17,0,0,912, - 913,3,158,79,0,913,107,1,0,0,0,914,918,5,72,0,0,915,919,5,497,0, - 0,916,917,5,497,0,0,917,919,5,370,0,0,918,915,1,0,0,0,918,916,1, - 0,0,0,918,919,1,0,0,0,919,920,1,0,0,0,920,922,5,153,0,0,921,923, - 3,332,166,0,922,921,1,0,0,0,922,923,1,0,0,0,923,924,1,0,0,0,924, - 925,3,270,135,0,925,926,5,17,0,0,926,929,3,304,152,0,927,928,5,195, - 0,0,928,930,7,16,0,0,929,927,1,0,0,0,929,930,1,0,0,0,930,932,1,0, - 0,0,931,933,3,110,55,0,932,931,1,0,0,0,932,933,1,0,0,0,933,109,1, - 0,0,0,934,935,5,412,0,0,935,936,5,463,0,0,936,942,3,112,56,0,937, - 938,5,520,0,0,938,939,5,463,0,0,939,941,3,112,56,0,940,937,1,0,0, - 0,941,944,1,0,0,0,942,940,1,0,0,0,942,943,1,0,0,0,943,111,1,0,0, - 0,944,942,1,0,0,0,945,946,5,537,0,0,946,113,1,0,0,0,947,948,5,8, - 0,0,948,950,5,373,0,0,949,951,3,334,167,0,950,949,1,0,0,0,950,951, - 1,0,0,0,951,952,1,0,0,0,952,958,3,322,161,0,953,959,3,116,58,0,954, - 959,3,118,59,0,955,959,3,120,60,0,956,959,3,122,61,0,957,959,3,124, - 62,0,958,953,1,0,0,0,958,954,1,0,0,0,958,955,1,0,0,0,958,956,1,0, - 0,0,958,957,1,0,0,0,959,115,1,0,0,0,960,962,5,311,0,0,961,963,3, - 328,164,0,962,961,1,0,0,0,962,963,1,0,0,0,963,964,1,0,0,0,964,965, - 5,388,0,0,965,966,3,328,164,0,966,117,1,0,0,0,967,968,5,340,0,0, - 968,969,3,336,168,0,969,119,1,0,0,0,970,971,5,437,0,0,971,972,5, - 64,0,0,972,973,3,86,43,0,973,974,5,288,0,0,974,975,5,466,0,0,975, - 977,3,54,27,0,976,978,3,126,63,0,977,976,1,0,0,0,977,978,1,0,0,0, - 978,121,1,0,0,0,979,980,5,116,0,0,980,981,5,64,0,0,981,982,3,86, - 43,0,982,123,1,0,0,0,983,984,5,437,0,0,984,985,5,403,0,0,985,986, - 3,54,27,0,986,125,1,0,0,0,987,988,5,241,0,0,988,989,5,125,0,0,989, - 127,1,0,0,0,990,991,5,8,0,0,991,992,5,501,0,0,992,996,3,324,162, - 0,993,997,3,116,58,0,994,995,5,17,0,0,995,997,3,158,79,0,996,993, - 1,0,0,0,996,994,1,0,0,0,997,129,1,0,0,0,998,999,5,8,0,0,999,1000, - 5,447,0,0,1000,1001,3,316,158,0,1001,1002,3,118,59,0,1002,131,1, - 0,0,0,1003,1007,5,8,0,0,1004,1008,5,497,0,0,1005,1006,5,497,0,0, - 1006,1008,5,370,0,0,1007,1004,1,0,0,0,1007,1005,1,0,0,0,1007,1008, - 1,0,0,0,1008,1009,1,0,0,0,1009,1011,5,153,0,0,1010,1012,3,334,167, - 0,1011,1010,1,0,0,0,1011,1012,1,0,0,0,1012,1013,1,0,0,0,1013,1014, - 3,272,136,0,1014,1015,5,17,0,0,1015,1018,3,304,152,0,1016,1017,5, - 195,0,0,1017,1019,7,16,0,0,1018,1016,1,0,0,0,1018,1019,1,0,0,0,1019, - 133,1,0,0,0,1020,1021,5,116,0,0,1021,1023,5,441,0,0,1022,1024,3, - 334,167,0,1023,1022,1,0,0,0,1023,1024,1,0,0,0,1024,1025,1,0,0,0, - 1025,1026,3,312,156,0,1026,135,1,0,0,0,1027,1029,5,116,0,0,1028, - 1030,5,497,0,0,1029,1028,1,0,0,0,1029,1030,1,0,0,0,1030,1031,1,0, - 0,0,1031,1033,5,373,0,0,1032,1034,3,334,167,0,1033,1032,1,0,0,0, - 1033,1034,1,0,0,0,1034,1035,1,0,0,0,1035,1036,3,322,161,0,1036,137, - 1,0,0,0,1037,1038,5,116,0,0,1038,1040,5,447,0,0,1039,1041,3,334, - 167,0,1040,1039,1,0,0,0,1040,1041,1,0,0,0,1041,1042,1,0,0,0,1042, - 1044,3,316,158,0,1043,1045,7,17,0,0,1044,1043,1,0,0,0,1044,1045, - 1,0,0,0,1045,139,1,0,0,0,1046,1048,5,116,0,0,1047,1049,5,497,0,0, - 1048,1047,1,0,0,0,1048,1049,1,0,0,0,1049,1050,1,0,0,0,1050,1052, - 5,501,0,0,1051,1053,3,334,167,0,1052,1051,1,0,0,0,1052,1053,1,0, - 0,0,1053,1054,1,0,0,0,1054,1055,3,324,162,0,1055,141,1,0,0,0,1056, - 1060,5,116,0,0,1057,1061,5,497,0,0,1058,1059,5,497,0,0,1059,1061, - 5,370,0,0,1060,1057,1,0,0,0,1060,1058,1,0,0,0,1060,1061,1,0,0,0, - 1061,1062,1,0,0,0,1062,1064,5,153,0,0,1063,1065,3,334,167,0,1064, - 1063,1,0,0,0,1064,1065,1,0,0,0,1065,1066,1,0,0,0,1066,1067,3,272, - 136,0,1067,143,1,0,0,0,1068,1070,5,132,0,0,1069,1068,1,0,0,0,1069, - 1070,1,0,0,0,1070,1071,1,0,0,0,1071,1076,3,146,73,0,1072,1076,3, - 154,77,0,1073,1074,5,132,0,0,1074,1076,3,156,78,0,1075,1069,1,0, - 0,0,1075,1072,1,0,0,0,1075,1073,1,0,0,0,1076,145,1,0,0,0,1077,1078, - 5,177,0,0,1078,1079,7,18,0,0,1079,1088,3,322,161,0,1080,1082,3,148, - 74,0,1081,1080,1,0,0,0,1081,1082,1,0,0,0,1082,1084,1,0,0,0,1083, - 1085,3,54,27,0,1084,1083,1,0,0,0,1084,1085,1,0,0,0,1085,1086,1,0, - 0,0,1086,1089,3,158,79,0,1087,1089,3,150,75,0,1088,1081,1,0,0,0, - 1088,1087,1,0,0,0,1089,147,1,0,0,0,1090,1091,5,268,0,0,1091,1092, - 3,336,168,0,1092,149,1,0,0,0,1093,1094,5,414,0,0,1094,1099,3,152, - 76,0,1095,1096,5,520,0,0,1096,1098,3,152,76,0,1097,1095,1,0,0,0, - 1098,1101,1,0,0,0,1099,1097,1,0,0,0,1099,1100,1,0,0,0,1100,151,1, - 0,0,0,1101,1099,1,0,0,0,1102,1103,5,516,0,0,1103,1108,3,354,177, - 0,1104,1105,5,520,0,0,1105,1107,3,354,177,0,1106,1104,1,0,0,0,1107, - 1110,1,0,0,0,1108,1106,1,0,0,0,1108,1109,1,0,0,0,1109,1111,1,0,0, - 0,1110,1108,1,0,0,0,1111,1112,5,517,0,0,1112,153,1,0,0,0,1113,1114, - 5,24,0,0,1114,1115,5,354,0,0,1115,1116,5,340,0,0,1116,1120,5,521, - 0,0,1117,1118,3,146,73,0,1118,1119,5,521,0,0,1119,1121,1,0,0,0,1120, - 1117,1,0,0,0,1121,1122,1,0,0,0,1122,1120,1,0,0,0,1122,1123,1,0,0, - 0,1123,1124,1,0,0,0,1124,1125,5,122,0,0,1125,155,1,0,0,0,1126,1127, - 5,354,0,0,1127,1128,5,340,0,0,1128,1132,5,24,0,0,1129,1130,3,146, - 73,0,1130,1131,5,521,0,0,1131,1133,1,0,0,0,1132,1129,1,0,0,0,1133, - 1134,1,0,0,0,1134,1132,1,0,0,0,1134,1135,1,0,0,0,1135,1136,1,0,0, - 0,1136,1137,5,122,0,0,1137,157,1,0,0,0,1138,1139,6,79,-1,0,1139, - 1162,3,160,80,0,1140,1141,3,162,81,0,1141,1142,3,158,79,5,1142,1162, - 1,0,0,0,1143,1144,5,516,0,0,1144,1145,3,158,79,0,1145,1146,5,517, - 0,0,1146,1162,1,0,0,0,1147,1149,3,170,85,0,1148,1150,3,230,115,0, - 1149,1148,1,0,0,0,1149,1150,1,0,0,0,1150,1152,1,0,0,0,1151,1153, - 3,234,117,0,1152,1151,1,0,0,0,1152,1153,1,0,0,0,1153,1162,1,0,0, - 0,1154,1156,3,168,84,0,1155,1157,3,230,115,0,1156,1155,1,0,0,0,1156, - 1157,1,0,0,0,1157,1159,1,0,0,0,1158,1160,3,234,117,0,1159,1158,1, - 0,0,0,1159,1160,1,0,0,0,1160,1162,1,0,0,0,1161,1138,1,0,0,0,1161, - 1140,1,0,0,0,1161,1143,1,0,0,0,1161,1147,1,0,0,0,1161,1154,1,0,0, - 0,1162,1177,1,0,0,0,1163,1164,10,3,0,0,1164,1166,7,19,0,0,1165,1167, - 5,5,0,0,1166,1165,1,0,0,0,1166,1167,1,0,0,0,1167,1168,1,0,0,0,1168, - 1170,3,158,79,0,1169,1171,3,230,115,0,1170,1169,1,0,0,0,1170,1171, - 1,0,0,0,1171,1173,1,0,0,0,1172,1174,3,234,117,0,1173,1172,1,0,0, - 0,1173,1174,1,0,0,0,1174,1176,1,0,0,0,1175,1163,1,0,0,0,1176,1179, - 1,0,0,0,1177,1175,1,0,0,0,1177,1178,1,0,0,0,1178,159,1,0,0,0,1179, - 1177,1,0,0,0,1180,1181,5,414,0,0,1181,1186,3,258,129,0,1182,1183, - 5,520,0,0,1183,1185,3,258,129,0,1184,1182,1,0,0,0,1185,1188,1,0, - 0,0,1186,1184,1,0,0,0,1186,1187,1,0,0,0,1187,161,1,0,0,0,1188,1186, - 1,0,0,0,1189,1190,5,433,0,0,1190,1195,3,164,82,0,1191,1192,5,520, - 0,0,1192,1194,3,164,82,0,1193,1191,1,0,0,0,1194,1197,1,0,0,0,1195, - 1193,1,0,0,0,1195,1196,1,0,0,0,1196,163,1,0,0,0,1197,1195,1,0,0, - 0,1198,1210,3,166,83,0,1199,1200,5,516,0,0,1200,1205,3,52,26,0,1201, - 1202,5,520,0,0,1202,1204,3,52,26,0,1203,1201,1,0,0,0,1204,1207,1, - 0,0,0,1205,1203,1,0,0,0,1205,1206,1,0,0,0,1206,1208,1,0,0,0,1207, - 1205,1,0,0,0,1208,1209,5,517,0,0,1209,1211,1,0,0,0,1210,1199,1,0, - 0,0,1210,1211,1,0,0,0,1211,1212,1,0,0,0,1212,1213,5,17,0,0,1213, - 1214,5,516,0,0,1214,1215,3,158,79,0,1215,1216,5,517,0,0,1216,165, - 1,0,0,0,1217,1218,3,304,152,0,1218,167,1,0,0,0,1219,1221,3,170,85, - 0,1220,1222,3,176,88,0,1221,1220,1,0,0,0,1221,1222,1,0,0,0,1222, - 1224,1,0,0,0,1223,1225,3,204,102,0,1224,1223,1,0,0,0,1224,1225,1, - 0,0,0,1225,1227,1,0,0,0,1226,1228,3,206,103,0,1227,1226,1,0,0,0, - 1227,1228,1,0,0,0,1228,1230,1,0,0,0,1229,1231,3,220,110,0,1230,1229, - 1,0,0,0,1230,1231,1,0,0,0,1231,1233,1,0,0,0,1232,1234,3,222,111, - 0,1233,1232,1,0,0,0,1233,1234,1,0,0,0,1234,1240,1,0,0,0,1235,1236, - 3,170,85,0,1236,1237,3,176,88,0,1237,1238,3,228,114,0,1238,1240, - 1,0,0,0,1239,1219,1,0,0,0,1239,1235,1,0,0,0,1240,169,1,0,0,0,1241, - 1243,5,336,0,0,1242,1244,3,364,182,0,1243,1242,1,0,0,0,1243,1244, - 1,0,0,0,1244,1254,1,0,0,0,1245,1255,5,527,0,0,1246,1251,3,172,86, - 0,1247,1248,5,520,0,0,1248,1250,3,172,86,0,1249,1247,1,0,0,0,1250, - 1253,1,0,0,0,1251,1249,1,0,0,0,1251,1252,1,0,0,0,1252,1255,1,0,0, - 0,1253,1251,1,0,0,0,1254,1245,1,0,0,0,1254,1246,1,0,0,0,1255,171, - 1,0,0,0,1256,1272,3,174,87,0,1257,1262,3,52,26,0,1258,1260,5,17, - 0,0,1259,1258,1,0,0,0,1259,1260,1,0,0,0,1260,1261,1,0,0,0,1261,1263, - 3,258,129,0,1262,1259,1,0,0,0,1262,1263,1,0,0,0,1263,1272,1,0,0, - 0,1264,1269,3,258,129,0,1265,1267,5,17,0,0,1266,1265,1,0,0,0,1266, - 1267,1,0,0,0,1267,1268,1,0,0,0,1268,1270,3,52,26,0,1269,1266,1,0, - 0,0,1269,1270,1,0,0,0,1270,1272,1,0,0,0,1271,1256,1,0,0,0,1271,1257, - 1,0,0,0,1271,1264,1,0,0,0,1272,173,1,0,0,0,1273,1274,3,268,134,0, - 1274,1275,5,262,0,0,1275,1276,3,226,113,0,1276,1277,5,17,0,0,1277, - 1278,3,304,152,0,1278,1286,1,0,0,0,1279,1280,3,268,134,0,1280,1281, - 5,262,0,0,1281,1282,3,296,148,0,1282,1283,5,17,0,0,1283,1284,3,304, - 152,0,1284,1286,1,0,0,0,1285,1273,1,0,0,0,1285,1279,1,0,0,0,1286, - 175,1,0,0,0,1287,1288,5,151,0,0,1288,1289,3,178,89,0,1289,177,1, - 0,0,0,1290,1291,6,89,-1,0,1291,1296,3,180,90,0,1292,1293,5,520,0, - 0,1293,1295,3,180,90,0,1294,1292,1,0,0,0,1295,1298,1,0,0,0,1296, - 1294,1,0,0,0,1296,1297,1,0,0,0,1297,1302,1,0,0,0,1298,1296,1,0,0, - 0,1299,1302,3,188,94,0,1300,1302,3,190,95,0,1301,1290,1,0,0,0,1301, - 1299,1,0,0,0,1301,1300,1,0,0,0,1302,1324,1,0,0,0,1303,1304,10,3, - 0,0,1304,1305,5,73,0,0,1305,1306,5,185,0,0,1306,1323,3,178,89,4, - 1307,1309,10,4,0,0,1308,1310,5,233,0,0,1309,1308,1,0,0,0,1309,1310, - 1,0,0,0,1310,1312,1,0,0,0,1311,1313,7,20,0,0,1312,1311,1,0,0,0,1312, - 1313,1,0,0,0,1313,1315,1,0,0,0,1314,1316,5,261,0,0,1315,1314,1,0, - 0,0,1315,1316,1,0,0,0,1316,1317,1,0,0,0,1317,1318,5,185,0,0,1318, - 1320,3,178,89,0,1319,1321,3,202,101,0,1320,1319,1,0,0,0,1320,1321, - 1,0,0,0,1321,1323,1,0,0,0,1322,1303,1,0,0,0,1322,1307,1,0,0,0,1323, - 1326,1,0,0,0,1324,1322,1,0,0,0,1324,1325,1,0,0,0,1325,179,1,0,0, - 0,1326,1324,1,0,0,0,1327,1329,3,182,91,0,1328,1330,3,294,147,0,1329, - 1328,1,0,0,0,1329,1330,1,0,0,0,1330,181,1,0,0,0,1331,1333,5,373, - 0,0,1332,1331,1,0,0,0,1332,1333,1,0,0,0,1333,1334,1,0,0,0,1334,1336, - 3,322,161,0,1335,1337,3,184,92,0,1336,1335,1,0,0,0,1336,1337,1,0, - 0,0,1337,1342,1,0,0,0,1338,1340,5,17,0,0,1339,1338,1,0,0,0,1339, - 1340,1,0,0,0,1340,1341,1,0,0,0,1341,1343,3,278,139,0,1342,1339,1, - 0,0,0,1342,1343,1,0,0,0,1343,1383,1,0,0,0,1344,1346,3,324,162,0, - 1345,1347,3,184,92,0,1346,1345,1,0,0,0,1346,1347,1,0,0,0,1347,1352, - 1,0,0,0,1348,1350,5,17,0,0,1349,1348,1,0,0,0,1349,1350,1,0,0,0,1350, - 1351,1,0,0,0,1351,1353,3,278,139,0,1352,1349,1,0,0,0,1352,1353,1, - 0,0,0,1353,1383,1,0,0,0,1354,1355,5,198,0,0,1355,1356,5,373,0,0, - 1356,1357,5,516,0,0,1357,1358,3,272,136,0,1358,1359,5,516,0,0,1359, - 1364,3,274,137,0,1360,1361,5,520,0,0,1361,1363,3,274,137,0,1362, - 1360,1,0,0,0,1363,1366,1,0,0,0,1364,1362,1,0,0,0,1364,1365,1,0,0, - 0,1365,1367,1,0,0,0,1366,1364,1,0,0,0,1367,1368,5,517,0,0,1368,1369, - 5,517,0,0,1369,1383,1,0,0,0,1370,1372,5,198,0,0,1371,1370,1,0,0, - 0,1371,1372,1,0,0,0,1372,1373,1,0,0,0,1373,1374,5,516,0,0,1374,1375, - 3,158,79,0,1375,1376,5,517,0,0,1376,1383,1,0,0,0,1377,1378,5,405, - 0,0,1378,1379,5,516,0,0,1379,1380,3,258,129,0,1380,1381,5,517,0, - 0,1381,1383,1,0,0,0,1382,1332,1,0,0,0,1382,1344,1,0,0,0,1382,1354, - 1,0,0,0,1382,1371,1,0,0,0,1382,1377,1,0,0,0,1383,183,1,0,0,0,1384, - 1385,5,146,0,0,1385,1386,5,371,0,0,1386,1387,5,17,0,0,1387,1388, - 5,249,0,0,1388,1389,3,186,93,0,1389,185,1,0,0,0,1390,1391,3,258, - 129,0,1391,187,1,0,0,0,1392,1393,5,516,0,0,1393,1394,3,150,75,0, - 1394,1395,5,517,0,0,1395,1396,3,294,147,0,1396,189,1,0,0,0,1397, - 1398,5,373,0,0,1398,1399,5,516,0,0,1399,1400,3,192,96,0,1400,1401, - 5,517,0,0,1401,191,1,0,0,0,1402,1403,3,194,97,0,1403,1404,5,516, - 0,0,1404,1409,3,196,98,0,1405,1406,5,520,0,0,1406,1408,3,196,98, - 0,1407,1405,1,0,0,0,1408,1411,1,0,0,0,1409,1407,1,0,0,0,1409,1410, - 1,0,0,0,1410,1412,1,0,0,0,1411,1409,1,0,0,0,1412,1413,5,517,0,0, - 1413,193,1,0,0,0,1414,1415,7,21,0,0,1415,195,1,0,0,0,1416,1417,5, - 373,0,0,1417,1432,3,218,109,0,1418,1432,3,200,100,0,1419,1432,3, - 282,141,0,1420,1421,5,446,0,0,1421,1422,5,536,0,0,1422,1423,5,373, - 0,0,1423,1432,3,218,109,0,1424,1425,5,498,0,0,1425,1426,5,536,0, - 0,1426,1432,3,200,100,0,1427,1428,3,198,99,0,1428,1429,5,536,0,0, - 1429,1430,3,282,141,0,1430,1432,1,0,0,0,1431,1416,1,0,0,0,1431,1418, - 1,0,0,0,1431,1419,1,0,0,0,1431,1420,1,0,0,0,1431,1424,1,0,0,0,1431, - 1427,1,0,0,0,1432,197,1,0,0,0,1433,1434,7,22,0,0,1434,199,1,0,0, - 0,1435,1436,5,451,0,0,1436,1437,5,516,0,0,1437,1438,3,52,26,0,1438, - 1439,5,517,0,0,1439,201,1,0,0,0,1440,1441,5,253,0,0,1441,1445,3, - 260,130,0,1442,1443,5,412,0,0,1443,1445,3,54,27,0,1444,1440,1,0, - 0,0,1444,1442,1,0,0,0,1445,203,1,0,0,0,1446,1447,5,430,0,0,1447, - 1448,3,260,130,0,1448,205,1,0,0,0,1449,1450,5,159,0,0,1450,1451, - 5,34,0,0,1451,1456,3,208,104,0,1452,1453,5,520,0,0,1453,1455,3,208, - 104,0,1454,1452,1,0,0,0,1455,1458,1,0,0,0,1456,1454,1,0,0,0,1456, - 1457,1,0,0,0,1457,207,1,0,0,0,1458,1456,1,0,0,0,1459,1500,3,52,26, - 0,1460,1500,3,214,107,0,1461,1462,5,516,0,0,1462,1500,5,517,0,0, - 1463,1464,5,516,0,0,1464,1469,3,258,129,0,1465,1466,5,520,0,0,1466, - 1468,3,258,129,0,1467,1465,1,0,0,0,1468,1471,1,0,0,0,1469,1467,1, - 0,0,0,1469,1470,1,0,0,0,1470,1472,1,0,0,0,1471,1469,1,0,0,0,1472, - 1473,5,517,0,0,1473,1500,1,0,0,0,1474,1475,3,212,106,0,1475,1476, - 5,516,0,0,1476,1481,3,258,129,0,1477,1478,5,520,0,0,1478,1480,3, - 258,129,0,1479,1477,1,0,0,0,1480,1483,1,0,0,0,1481,1479,1,0,0,0, - 1481,1482,1,0,0,0,1482,1484,1,0,0,0,1483,1481,1,0,0,0,1484,1485, - 5,517,0,0,1485,1500,1,0,0,0,1486,1487,3,210,105,0,1487,1488,5,516, - 0,0,1488,1493,3,208,104,0,1489,1490,5,520,0,0,1490,1492,3,208,104, - 0,1491,1489,1,0,0,0,1492,1495,1,0,0,0,1493,1491,1,0,0,0,1493,1494, - 1,0,0,0,1494,1496,1,0,0,0,1495,1493,1,0,0,0,1496,1497,5,517,0,0, - 1497,1500,1,0,0,0,1498,1500,3,258,129,0,1499,1459,1,0,0,0,1499,1460, - 1,0,0,0,1499,1461,1,0,0,0,1499,1463,1,0,0,0,1499,1474,1,0,0,0,1499, - 1486,1,0,0,0,1499,1498,1,0,0,0,1500,209,1,0,0,0,1501,1502,5,160, - 0,0,1502,1503,5,493,0,0,1503,211,1,0,0,0,1504,1505,7,23,0,0,1505, - 213,1,0,0,0,1506,1507,3,216,108,0,1507,1508,5,516,0,0,1508,1509, - 3,218,109,0,1509,1510,5,520,0,0,1510,1511,3,282,141,0,1511,1512, - 5,517,0,0,1512,215,1,0,0,0,1513,1514,7,24,0,0,1514,217,1,0,0,0,1515, - 1516,3,328,164,0,1516,219,1,0,0,0,1517,1518,5,163,0,0,1518,1519, - 3,260,130,0,1519,221,1,0,0,0,1520,1521,5,432,0,0,1521,1526,3,224, - 112,0,1522,1523,5,520,0,0,1523,1525,3,224,112,0,1524,1522,1,0,0, - 0,1525,1528,1,0,0,0,1526,1524,1,0,0,0,1526,1527,1,0,0,0,1527,223, - 1,0,0,0,1528,1526,1,0,0,0,1529,1530,3,296,148,0,1530,1531,5,17,0, - 0,1531,1532,3,226,113,0,1532,225,1,0,0,0,1533,1535,3,296,148,0,1534, - 1533,1,0,0,0,1534,1535,1,0,0,0,1535,1536,1,0,0,0,1536,1538,5,516, - 0,0,1537,1539,3,236,118,0,1538,1537,1,0,0,0,1538,1539,1,0,0,0,1539, - 1541,1,0,0,0,1540,1542,3,230,115,0,1541,1540,1,0,0,0,1541,1542,1, - 0,0,0,1542,1544,1,0,0,0,1543,1545,3,252,126,0,1544,1543,1,0,0,0, - 1544,1545,1,0,0,0,1545,1546,1,0,0,0,1546,1547,5,517,0,0,1547,227, - 1,0,0,0,1548,1549,5,213,0,0,1549,1551,5,516,0,0,1550,1552,3,236, - 118,0,1551,1550,1,0,0,0,1551,1552,1,0,0,0,1552,1554,1,0,0,0,1553, - 1555,3,230,115,0,1554,1553,1,0,0,0,1554,1555,1,0,0,0,1555,1557,1, - 0,0,0,1556,1558,3,240,120,0,1557,1556,1,0,0,0,1557,1558,1,0,0,0, - 1558,1560,1,0,0,0,1559,1561,3,246,123,0,1560,1559,1,0,0,0,1560,1561, - 1,0,0,0,1561,1563,1,0,0,0,1562,1564,3,248,124,0,1563,1562,1,0,0, - 0,1563,1564,1,0,0,0,1564,1566,1,0,0,0,1565,1567,3,242,121,0,1566, - 1565,1,0,0,0,1566,1567,1,0,0,0,1567,1568,1,0,0,0,1568,1569,3,250, - 125,0,1569,1574,5,517,0,0,1570,1572,5,17,0,0,1571,1570,1,0,0,0,1571, - 1572,1,0,0,0,1572,1573,1,0,0,0,1573,1575,3,304,152,0,1574,1571,1, - 0,0,0,1574,1575,1,0,0,0,1575,229,1,0,0,0,1576,1577,5,258,0,0,1577, - 1578,5,34,0,0,1578,1583,3,232,116,0,1579,1580,5,520,0,0,1580,1582, - 3,232,116,0,1581,1579,1,0,0,0,1582,1585,1,0,0,0,1583,1581,1,0,0, - 0,1583,1584,1,0,0,0,1584,231,1,0,0,0,1585,1583,1,0,0,0,1586,1588, - 3,52,26,0,1587,1589,7,25,0,0,1588,1587,1,0,0,0,1588,1589,1,0,0,0, - 1589,1592,1,0,0,0,1590,1591,5,476,0,0,1591,1593,7,26,0,0,1592,1590, - 1,0,0,0,1592,1593,1,0,0,0,1593,233,1,0,0,0,1594,1597,5,204,0,0,1595, - 1598,5,5,0,0,1596,1598,3,258,129,0,1597,1595,1,0,0,0,1597,1596,1, - 0,0,0,1598,235,1,0,0,0,1599,1600,5,268,0,0,1600,1601,5,34,0,0,1601, - 1606,3,52,26,0,1602,1603,5,520,0,0,1603,1605,3,52,26,0,1604,1602, - 1,0,0,0,1605,1608,1,0,0,0,1606,1604,1,0,0,0,1606,1607,1,0,0,0,1607, - 237,1,0,0,0,1608,1606,1,0,0,0,1609,1626,5,527,0,0,1610,1626,5,530, - 0,0,1611,1626,5,535,0,0,1612,1613,5,518,0,0,1613,1614,5,538,0,0, - 1614,1615,5,520,0,0,1615,1616,5,538,0,0,1616,1626,5,519,0,0,1617, - 1618,5,518,0,0,1618,1619,5,538,0,0,1619,1620,5,520,0,0,1620,1626, - 5,519,0,0,1621,1622,5,518,0,0,1622,1623,5,520,0,0,1623,1624,5,538, - 0,0,1624,1626,5,519,0,0,1625,1609,1,0,0,0,1625,1610,1,0,0,0,1625, - 1611,1,0,0,0,1625,1612,1,0,0,0,1625,1617,1,0,0,0,1625,1621,1,0,0, - 0,1626,239,1,0,0,0,1627,1628,5,215,0,0,1628,1633,3,172,86,0,1629, - 1630,5,520,0,0,1630,1632,3,172,86,0,1631,1629,1,0,0,0,1632,1635, - 1,0,0,0,1633,1631,1,0,0,0,1633,1634,1,0,0,0,1634,241,1,0,0,0,1635, - 1633,1,0,0,0,1636,1637,5,271,0,0,1637,1639,5,516,0,0,1638,1640,3, - 244,122,0,1639,1638,1,0,0,0,1640,1641,1,0,0,0,1641,1639,1,0,0,0, - 1641,1642,1,0,0,0,1642,1643,1,0,0,0,1643,1645,5,517,0,0,1644,1646, - 3,256,128,0,1645,1644,1,0,0,0,1645,1646,1,0,0,0,1646,243,1,0,0,0, - 1647,1649,3,306,153,0,1648,1650,3,238,119,0,1649,1648,1,0,0,0,1649, - 1650,1,0,0,0,1650,245,1,0,0,0,1651,1652,5,5,0,0,1652,1653,5,322, - 0,0,1653,1654,5,272,0,0,1654,1660,5,210,0,0,1655,1656,5,254,0,0, - 1656,1657,5,321,0,0,1657,1658,5,272,0,0,1658,1660,5,210,0,0,1659, - 1651,1,0,0,0,1659,1655,1,0,0,0,1660,247,1,0,0,0,1661,1662,5,438, - 0,0,1662,1663,5,210,0,0,1663,1664,5,343,0,0,1664,1665,5,478,0,0, - 1665,1666,5,467,0,0,1666,1686,5,321,0,0,1667,1668,5,438,0,0,1668, - 1669,5,210,0,0,1669,1670,5,343,0,0,1670,1671,5,388,0,0,1671,1672, - 5,237,0,0,1672,1686,5,321,0,0,1673,1674,5,438,0,0,1674,1675,5,210, - 0,0,1675,1676,5,343,0,0,1676,1677,5,388,0,0,1677,1678,5,467,0,0, - 1678,1686,3,306,153,0,1679,1680,5,438,0,0,1680,1681,5,210,0,0,1681, - 1682,5,343,0,0,1682,1683,5,388,0,0,1683,1684,5,457,0,0,1684,1686, - 3,306,153,0,1685,1661,1,0,0,0,1685,1667,1,0,0,0,1685,1673,1,0,0, - 0,1685,1679,1,0,0,0,1686,249,1,0,0,0,1687,1688,5,105,0,0,1688,1693, - 3,172,86,0,1689,1690,5,520,0,0,1690,1692,3,172,86,0,1691,1689,1, - 0,0,0,1692,1695,1,0,0,0,1693,1691,1,0,0,0,1693,1694,1,0,0,0,1694, - 251,1,0,0,0,1695,1693,1,0,0,0,1696,1697,5,292,0,0,1697,1698,5,27, - 0,0,1698,1699,3,282,141,0,1699,1700,3,254,127,0,1700,1706,1,0,0, - 0,1701,1702,5,322,0,0,1702,1703,5,27,0,0,1703,1704,5,538,0,0,1704, - 1706,3,254,127,0,1705,1696,1,0,0,0,1705,1701,1,0,0,0,1706,253,1, - 0,0,0,1707,1708,5,480,0,0,1708,1709,5,10,0,0,1709,1710,5,76,0,0, - 1710,1711,5,321,0,0,1711,255,1,0,0,0,1712,1713,5,434,0,0,1713,1714, - 3,282,141,0,1714,257,1,0,0,0,1715,1716,3,260,130,0,1716,259,1,0, - 0,0,1717,1718,6,130,-1,0,1718,1719,5,241,0,0,1719,1730,3,260,130, - 6,1720,1721,5,133,0,0,1721,1722,5,516,0,0,1722,1723,3,158,79,0,1723, - 1724,5,517,0,0,1724,1730,1,0,0,0,1725,1727,3,266,133,0,1726,1728, - 3,262,131,0,1727,1726,1,0,0,0,1727,1728,1,0,0,0,1728,1730,1,0,0, - 0,1729,1717,1,0,0,0,1729,1720,1,0,0,0,1729,1725,1,0,0,0,1730,1745, - 1,0,0,0,1731,1732,10,3,0,0,1732,1733,5,10,0,0,1733,1744,3,260,130, - 4,1734,1735,10,2,0,0,1735,1736,5,257,0,0,1736,1744,3,260,130,3,1737, - 1738,10,1,0,0,1738,1740,5,184,0,0,1739,1741,5,241,0,0,1740,1739, - 1,0,0,0,1740,1741,1,0,0,0,1741,1742,1,0,0,0,1742,1744,7,27,0,0,1743, - 1731,1,0,0,0,1743,1734,1,0,0,0,1743,1737,1,0,0,0,1744,1747,1,0,0, - 0,1745,1743,1,0,0,0,1745,1746,1,0,0,0,1746,261,1,0,0,0,1747,1745, - 1,0,0,0,1748,1750,5,241,0,0,1749,1748,1,0,0,0,1749,1750,1,0,0,0, - 1750,1751,1,0,0,0,1751,1753,5,27,0,0,1752,1754,7,28,0,0,1753,1752, - 1,0,0,0,1753,1754,1,0,0,0,1754,1755,1,0,0,0,1755,1756,3,266,133, - 0,1756,1757,5,10,0,0,1757,1758,3,266,133,0,1758,1816,1,0,0,0,1759, - 1761,5,241,0,0,1760,1759,1,0,0,0,1760,1761,1,0,0,0,1761,1762,1,0, - 0,0,1762,1763,5,170,0,0,1763,1764,5,516,0,0,1764,1769,3,258,129, - 0,1765,1766,5,520,0,0,1766,1768,3,258,129,0,1767,1765,1,0,0,0,1768, - 1771,1,0,0,0,1769,1767,1,0,0,0,1769,1770,1,0,0,0,1770,1772,1,0,0, - 0,1771,1769,1,0,0,0,1772,1773,5,517,0,0,1773,1816,1,0,0,0,1774,1776, - 5,241,0,0,1775,1774,1,0,0,0,1775,1776,1,0,0,0,1776,1777,1,0,0,0, - 1777,1778,5,170,0,0,1778,1779,5,516,0,0,1779,1780,3,158,79,0,1780, - 1781,5,517,0,0,1781,1816,1,0,0,0,1782,1783,5,133,0,0,1783,1784,5, - 516,0,0,1784,1785,3,158,79,0,1785,1786,5,517,0,0,1786,1816,1,0,0, - 0,1787,1789,5,241,0,0,1788,1787,1,0,0,0,1788,1789,1,0,0,0,1789,1790, - 1,0,0,0,1790,1791,5,318,0,0,1791,1816,3,266,133,0,1792,1816,3,264, - 132,0,1793,1795,5,184,0,0,1794,1796,5,241,0,0,1795,1794,1,0,0,0, - 1795,1796,1,0,0,0,1796,1797,1,0,0,0,1797,1816,7,27,0,0,1798,1800, - 5,184,0,0,1799,1801,5,241,0,0,1800,1799,1,0,0,0,1800,1801,1,0,0, - 0,1801,1802,1,0,0,0,1802,1803,5,113,0,0,1803,1804,5,151,0,0,1804, - 1816,3,266,133,0,1805,1807,5,241,0,0,1806,1805,1,0,0,0,1806,1807, - 1,0,0,0,1807,1808,1,0,0,0,1808,1809,5,342,0,0,1809,1810,5,388,0, - 0,1810,1813,3,266,133,0,1811,1812,5,127,0,0,1812,1814,3,358,179, - 0,1813,1811,1,0,0,0,1813,1814,1,0,0,0,1814,1816,1,0,0,0,1815,1749, - 1,0,0,0,1815,1760,1,0,0,0,1815,1775,1,0,0,0,1815,1782,1,0,0,0,1815, - 1788,1,0,0,0,1815,1792,1,0,0,0,1815,1793,1,0,0,0,1815,1798,1,0,0, - 0,1815,1806,1,0,0,0,1816,263,1,0,0,0,1817,1819,5,241,0,0,1818,1817, - 1,0,0,0,1818,1819,1,0,0,0,1819,1820,1,0,0,0,1820,1821,5,202,0,0, - 1821,1835,7,29,0,0,1822,1823,5,516,0,0,1823,1836,5,517,0,0,1824, - 1825,5,516,0,0,1825,1830,3,258,129,0,1826,1827,5,520,0,0,1827,1829, - 3,258,129,0,1828,1826,1,0,0,0,1829,1832,1,0,0,0,1830,1828,1,0,0, - 0,1830,1831,1,0,0,0,1831,1833,1,0,0,0,1832,1830,1,0,0,0,1833,1834, - 5,517,0,0,1834,1836,1,0,0,0,1835,1822,1,0,0,0,1835,1824,1,0,0,0, - 1836,1847,1,0,0,0,1837,1839,5,241,0,0,1838,1837,1,0,0,0,1838,1839, - 1,0,0,0,1839,1840,1,0,0,0,1840,1841,5,202,0,0,1841,1844,3,266,133, - 0,1842,1843,5,127,0,0,1843,1845,3,358,179,0,1844,1842,1,0,0,0,1844, - 1845,1,0,0,0,1845,1847,1,0,0,0,1846,1818,1,0,0,0,1846,1838,1,0,0, - 0,1847,265,1,0,0,0,1848,1849,6,133,-1,0,1849,1853,3,268,134,0,1850, - 1851,7,30,0,0,1851,1853,3,266,133,7,1852,1848,1,0,0,0,1852,1850, - 1,0,0,0,1853,1875,1,0,0,0,1854,1855,10,6,0,0,1855,1856,7,31,0,0, - 1856,1874,3,266,133,7,1857,1858,10,5,0,0,1858,1859,7,32,0,0,1859, - 1874,3,266,133,6,1860,1861,10,4,0,0,1861,1862,5,511,0,0,1862,1874, - 3,266,133,5,1863,1864,10,3,0,0,1864,1865,5,512,0,0,1865,1874,3,266, - 133,4,1866,1867,10,2,0,0,1867,1868,5,510,0,0,1868,1874,3,266,133, - 3,1869,1870,10,1,0,0,1870,1871,3,346,173,0,1871,1872,3,266,133,2, - 1872,1874,1,0,0,0,1873,1854,1,0,0,0,1873,1857,1,0,0,0,1873,1860, - 1,0,0,0,1873,1863,1,0,0,0,1873,1866,1,0,0,0,1873,1869,1,0,0,0,1874, - 1877,1,0,0,0,1875,1873,1,0,0,0,1875,1876,1,0,0,0,1876,267,1,0,0, - 0,1877,1875,1,0,0,0,1878,1879,6,134,-1,0,1879,1881,5,40,0,0,1880, - 1882,3,310,155,0,1881,1880,1,0,0,0,1882,1883,1,0,0,0,1883,1881,1, - 0,0,0,1883,1884,1,0,0,0,1884,1887,1,0,0,0,1885,1886,5,120,0,0,1886, - 1888,3,258,129,0,1887,1885,1,0,0,0,1887,1888,1,0,0,0,1888,1889,1, - 0,0,0,1889,1890,5,122,0,0,1890,1971,1,0,0,0,1891,1892,5,40,0,0,1892, - 1894,3,258,129,0,1893,1895,3,310,155,0,1894,1893,1,0,0,0,1895,1896, - 1,0,0,0,1896,1894,1,0,0,0,1896,1897,1,0,0,0,1897,1900,1,0,0,0,1898, - 1899,5,120,0,0,1899,1901,3,258,129,0,1900,1898,1,0,0,0,1900,1901, - 1,0,0,0,1901,1902,1,0,0,0,1902,1903,5,122,0,0,1903,1971,1,0,0,0, - 1904,1905,5,41,0,0,1905,1906,5,516,0,0,1906,1907,3,258,129,0,1907, - 1908,5,17,0,0,1908,1909,3,56,28,0,1909,1910,5,517,0,0,1910,1971, - 1,0,0,0,1911,1912,5,457,0,0,1912,1913,5,516,0,0,1913,1916,3,258, - 129,0,1914,1915,5,461,0,0,1915,1917,5,476,0,0,1916,1914,1,0,0,0, - 1916,1917,1,0,0,0,1917,1918,1,0,0,0,1918,1919,5,517,0,0,1919,1971, - 1,0,0,0,1920,1921,5,467,0,0,1921,1922,5,516,0,0,1922,1925,3,258, - 129,0,1923,1924,5,461,0,0,1924,1926,5,476,0,0,1925,1923,1,0,0,0, - 1925,1926,1,0,0,0,1926,1927,1,0,0,0,1927,1928,5,517,0,0,1928,1971, - 1,0,0,0,1929,1930,5,281,0,0,1930,1931,5,516,0,0,1931,1932,3,266, - 133,0,1932,1933,5,170,0,0,1933,1934,3,266,133,0,1934,1935,5,517, - 0,0,1935,1971,1,0,0,0,1936,1971,3,354,177,0,1937,1971,5,527,0,0, - 1938,1939,3,328,164,0,1939,1940,5,513,0,0,1940,1941,5,527,0,0,1941, - 1971,1,0,0,0,1942,1943,5,516,0,0,1943,1944,3,158,79,0,1944,1945, - 5,517,0,0,1945,1971,1,0,0,0,1946,1947,3,272,136,0,1947,1959,5,516, - 0,0,1948,1950,3,364,182,0,1949,1948,1,0,0,0,1949,1950,1,0,0,0,1950, - 1951,1,0,0,0,1951,1956,3,274,137,0,1952,1953,5,520,0,0,1953,1955, - 3,274,137,0,1954,1952,1,0,0,0,1955,1958,1,0,0,0,1956,1954,1,0,0, - 0,1956,1957,1,0,0,0,1957,1960,1,0,0,0,1958,1956,1,0,0,0,1959,1949, - 1,0,0,0,1959,1960,1,0,0,0,1960,1961,1,0,0,0,1961,1962,5,517,0,0, - 1962,1971,1,0,0,0,1963,1971,3,304,152,0,1964,1971,3,276,138,0,1965, - 1966,5,516,0,0,1966,1967,3,258,129,0,1967,1968,5,517,0,0,1968,1971, - 1,0,0,0,1969,1971,5,85,0,0,1970,1878,1,0,0,0,1970,1891,1,0,0,0,1970, - 1904,1,0,0,0,1970,1911,1,0,0,0,1970,1920,1,0,0,0,1970,1929,1,0,0, - 0,1970,1936,1,0,0,0,1970,1937,1,0,0,0,1970,1938,1,0,0,0,1970,1942, - 1,0,0,0,1970,1946,1,0,0,0,1970,1963,1,0,0,0,1970,1964,1,0,0,0,1970, - 1965,1,0,0,0,1970,1969,1,0,0,0,1971,1979,1,0,0,0,1972,1973,10,5, - 0,0,1973,1974,5,514,0,0,1974,1975,3,266,133,0,1975,1976,5,515,0, - 0,1976,1978,1,0,0,0,1977,1972,1,0,0,0,1978,1981,1,0,0,0,1979,1977, - 1,0,0,0,1979,1980,1,0,0,0,1980,269,1,0,0,0,1981,1979,1,0,0,0,1982, - 1983,3,328,164,0,1983,271,1,0,0,0,1984,1987,3,372,186,0,1985,1987, - 3,328,164,0,1986,1984,1,0,0,0,1986,1985,1,0,0,0,1987,273,1,0,0,0, - 1988,1993,3,370,185,0,1989,1993,3,368,184,0,1990,1993,3,366,183, - 0,1991,1993,3,258,129,0,1992,1988,1,0,0,0,1992,1989,1,0,0,0,1992, - 1990,1,0,0,0,1992,1991,1,0,0,0,1993,275,1,0,0,0,1994,1995,3,328, - 164,0,1995,277,1,0,0,0,1996,1997,3,304,152,0,1997,279,1,0,0,0,1998, - 2001,3,304,152,0,1999,2001,3,276,138,0,2000,1998,1,0,0,0,2000,1999, - 1,0,0,0,2001,281,1,0,0,0,2002,2005,5,182,0,0,2003,2006,3,284,142, - 0,2004,2006,3,288,144,0,2005,2003,1,0,0,0,2005,2004,1,0,0,0,2005, - 2006,1,0,0,0,2006,283,1,0,0,0,2007,2009,3,286,143,0,2008,2010,3, - 290,145,0,2009,2008,1,0,0,0,2009,2010,1,0,0,0,2010,285,1,0,0,0,2011, - 2012,3,292,146,0,2012,2013,3,368,184,0,2013,2015,1,0,0,0,2014,2011, - 1,0,0,0,2015,2016,1,0,0,0,2016,2014,1,0,0,0,2016,2017,1,0,0,0,2017, - 287,1,0,0,0,2018,2021,3,290,145,0,2019,2022,3,286,143,0,2020,2022, - 3,290,145,0,2021,2019,1,0,0,0,2021,2020,1,0,0,0,2021,2022,1,0,0, - 0,2022,289,1,0,0,0,2023,2024,3,292,146,0,2024,2025,3,368,184,0,2025, - 2026,5,388,0,0,2026,2027,3,368,184,0,2027,291,1,0,0,0,2028,2030, - 7,33,0,0,2029,2028,1,0,0,0,2029,2030,1,0,0,0,2030,2031,1,0,0,0,2031, - 2034,7,34,0,0,2032,2034,5,537,0,0,2033,2029,1,0,0,0,2033,2032,1, - 0,0,0,2034,293,1,0,0,0,2035,2037,5,17,0,0,2036,2035,1,0,0,0,2036, - 2037,1,0,0,0,2037,2038,1,0,0,0,2038,2040,3,304,152,0,2039,2041,3, - 300,150,0,2040,2039,1,0,0,0,2040,2041,1,0,0,0,2041,295,1,0,0,0,2042, - 2043,3,304,152,0,2043,2044,3,298,149,0,2044,297,1,0,0,0,2045,2046, - 5,221,0,0,2046,2048,3,304,152,0,2047,2045,1,0,0,0,2048,2049,1,0, - 0,0,2049,2047,1,0,0,0,2049,2050,1,0,0,0,2050,2053,1,0,0,0,2051,2053, - 1,0,0,0,2052,2047,1,0,0,0,2052,2051,1,0,0,0,2053,299,1,0,0,0,2054, - 2055,5,516,0,0,2055,2056,3,302,151,0,2056,2057,5,517,0,0,2057,301, - 1,0,0,0,2058,2063,3,304,152,0,2059,2060,5,520,0,0,2060,2062,3,304, - 152,0,2061,2059,1,0,0,0,2062,2065,1,0,0,0,2063,2061,1,0,0,0,2063, - 2064,1,0,0,0,2064,303,1,0,0,0,2065,2063,1,0,0,0,2066,2070,3,306, - 153,0,2067,2070,3,308,154,0,2068,2070,3,374,187,0,2069,2066,1,0, - 0,0,2069,2067,1,0,0,0,2069,2068,1,0,0,0,2070,305,1,0,0,0,2071,2072, - 7,35,0,0,2072,307,1,0,0,0,2073,2074,5,537,0,0,2074,309,1,0,0,0,2075, - 2076,5,428,0,0,2076,2077,3,258,129,0,2077,2078,5,376,0,0,2078,2079, - 3,258,129,0,2079,311,1,0,0,0,2080,2081,3,304,152,0,2081,313,1,0, - 0,0,2082,2083,3,304,152,0,2083,315,1,0,0,0,2084,2087,3,304,152,0, - 2085,2086,5,513,0,0,2086,2088,3,304,152,0,2087,2085,1,0,0,0,2087, - 2088,1,0,0,0,2088,317,1,0,0,0,2089,2092,3,304,152,0,2090,2091,5, - 513,0,0,2091,2093,3,304,152,0,2092,2090,1,0,0,0,2092,2093,1,0,0, - 0,2093,319,1,0,0,0,2094,2097,3,304,152,0,2095,2096,5,513,0,0,2096, - 2098,3,304,152,0,2097,2095,1,0,0,0,2097,2098,1,0,0,0,2098,2107,1, - 0,0,0,2099,2100,3,304,152,0,2100,2101,5,513,0,0,2101,2104,3,304, - 152,0,2102,2103,5,513,0,0,2103,2105,3,304,152,0,2104,2102,1,0,0, - 0,2104,2105,1,0,0,0,2105,2107,1,0,0,0,2106,2094,1,0,0,0,2106,2099, - 1,0,0,0,2107,321,1,0,0,0,2108,2111,3,304,152,0,2109,2110,5,513,0, - 0,2110,2112,3,304,152,0,2111,2109,1,0,0,0,2111,2112,1,0,0,0,2112, - 2121,1,0,0,0,2113,2114,3,304,152,0,2114,2115,5,513,0,0,2115,2118, - 3,304,152,0,2116,2117,5,513,0,0,2117,2119,3,304,152,0,2118,2116, - 1,0,0,0,2118,2119,1,0,0,0,2119,2121,1,0,0,0,2120,2108,1,0,0,0,2120, - 2113,1,0,0,0,2121,323,1,0,0,0,2122,2125,3,304,152,0,2123,2124,5, - 513,0,0,2124,2126,3,304,152,0,2125,2123,1,0,0,0,2125,2126,1,0,0, - 0,2126,2135,1,0,0,0,2127,2128,3,304,152,0,2128,2129,5,513,0,0,2129, - 2132,3,304,152,0,2130,2131,5,513,0,0,2131,2133,3,304,152,0,2132, - 2130,1,0,0,0,2132,2133,1,0,0,0,2133,2135,1,0,0,0,2134,2122,1,0,0, - 0,2134,2127,1,0,0,0,2135,325,1,0,0,0,2136,2139,3,304,152,0,2137, - 2138,5,513,0,0,2138,2140,3,304,152,0,2139,2137,1,0,0,0,2139,2140, - 1,0,0,0,2140,2149,1,0,0,0,2141,2142,3,304,152,0,2142,2143,5,513, - 0,0,2143,2146,3,304,152,0,2144,2145,5,513,0,0,2145,2147,3,304,152, - 0,2146,2144,1,0,0,0,2146,2147,1,0,0,0,2147,2149,1,0,0,0,2148,2136, - 1,0,0,0,2148,2141,1,0,0,0,2149,327,1,0,0,0,2150,2155,3,304,152,0, - 2151,2152,5,513,0,0,2152,2154,3,304,152,0,2153,2151,1,0,0,0,2154, - 2157,1,0,0,0,2155,2156,1,0,0,0,2155,2153,1,0,0,0,2156,329,1,0,0, - 0,2157,2155,1,0,0,0,2158,2159,5,433,0,0,2159,2160,3,336,168,0,2160, - 331,1,0,0,0,2161,2162,5,167,0,0,2162,2163,5,241,0,0,2163,2164,5, - 133,0,0,2164,333,1,0,0,0,2165,2166,5,167,0,0,2166,2167,5,133,0,0, - 2167,335,1,0,0,0,2168,2169,5,516,0,0,2169,2174,3,338,169,0,2170, - 2171,5,520,0,0,2171,2173,3,338,169,0,2172,2170,1,0,0,0,2173,2176, - 1,0,0,0,2174,2172,1,0,0,0,2174,2175,1,0,0,0,2175,2177,1,0,0,0,2176, - 2174,1,0,0,0,2177,2178,5,517,0,0,2178,337,1,0,0,0,2179,2184,3,340, - 170,0,2180,2182,5,505,0,0,2181,2180,1,0,0,0,2181,2182,1,0,0,0,2182, - 2183,1,0,0,0,2183,2185,3,342,171,0,2184,2181,1,0,0,0,2184,2185,1, - 0,0,0,2185,339,1,0,0,0,2186,2190,3,304,152,0,2187,2190,3,276,138, - 0,2188,2190,5,537,0,0,2189,2186,1,0,0,0,2189,2187,1,0,0,0,2189,2188, - 1,0,0,0,2190,341,1,0,0,0,2191,2196,5,538,0,0,2192,2196,5,539,0,0, - 2193,2196,3,362,181,0,2194,2196,5,537,0,0,2195,2191,1,0,0,0,2195, - 2192,1,0,0,0,2195,2193,1,0,0,0,2195,2194,1,0,0,0,2196,343,1,0,0, - 0,2197,2204,5,10,0,0,2198,2199,5,511,0,0,2199,2204,5,511,0,0,2200, - 2204,5,257,0,0,2201,2202,5,510,0,0,2202,2204,5,510,0,0,2203,2197, - 1,0,0,0,2203,2198,1,0,0,0,2203,2200,1,0,0,0,2203,2201,1,0,0,0,2204, - 345,1,0,0,0,2205,2220,5,505,0,0,2206,2220,5,506,0,0,2207,2220,5, - 507,0,0,2208,2209,5,507,0,0,2209,2220,5,505,0,0,2210,2211,5,506, - 0,0,2211,2220,5,505,0,0,2212,2213,5,507,0,0,2213,2220,5,506,0,0, - 2214,2215,5,508,0,0,2215,2220,5,505,0,0,2216,2217,5,507,0,0,2217, - 2218,5,505,0,0,2218,2220,5,506,0,0,2219,2205,1,0,0,0,2219,2206,1, - 0,0,0,2219,2207,1,0,0,0,2219,2208,1,0,0,0,2219,2210,1,0,0,0,2219, - 2212,1,0,0,0,2219,2214,1,0,0,0,2219,2216,1,0,0,0,2220,347,1,0,0, - 0,2221,2222,5,507,0,0,2222,2229,5,507,0,0,2223,2224,5,506,0,0,2224, - 2229,5,506,0,0,2225,2229,5,511,0,0,2226,2229,5,512,0,0,2227,2229, - 5,510,0,0,2228,2221,1,0,0,0,2228,2223,1,0,0,0,2228,2225,1,0,0,0, - 2228,2226,1,0,0,0,2228,2227,1,0,0,0,2229,349,1,0,0,0,2230,2231,7, - 36,0,0,2231,351,1,0,0,0,2232,2233,7,37,0,0,2233,353,1,0,0,0,2234, - 2249,3,282,141,0,2235,2249,3,356,178,0,2236,2249,3,358,179,0,2237, - 2239,5,529,0,0,2238,2237,1,0,0,0,2238,2239,1,0,0,0,2239,2240,1,0, - 0,0,2240,2249,3,360,180,0,2241,2249,3,362,181,0,2242,2249,5,539, - 0,0,2243,2249,5,540,0,0,2244,2246,5,241,0,0,2245,2244,1,0,0,0,2245, - 2246,1,0,0,0,2246,2247,1,0,0,0,2247,2249,5,244,0,0,2248,2234,1,0, - 0,0,2248,2235,1,0,0,0,2248,2236,1,0,0,0,2248,2238,1,0,0,0,2248,2241, - 1,0,0,0,2248,2242,1,0,0,0,2248,2243,1,0,0,0,2248,2245,1,0,0,0,2249, - 355,1,0,0,0,2250,2251,3,366,183,0,2251,2252,3,358,179,0,2252,357, - 1,0,0,0,2253,2254,5,537,0,0,2254,359,1,0,0,0,2255,2256,5,538,0,0, - 2256,361,1,0,0,0,2257,2258,7,38,0,0,2258,363,1,0,0,0,2259,2260,7, - 39,0,0,2260,365,1,0,0,0,2261,2262,7,40,0,0,2262,367,1,0,0,0,2263, - 2264,7,41,0,0,2264,369,1,0,0,0,2265,2266,7,42,0,0,2266,371,1,0,0, - 0,2267,2268,7,43,0,0,2268,373,1,0,0,0,2269,2270,7,44,0,0,2270,375, - 1,0,0,0,270,379,386,389,403,421,425,434,439,446,457,466,478,481, - 488,491,499,503,508,511,518,526,530,542,550,554,586,589,594,598, - 602,606,615,620,624,628,632,635,639,644,650,655,660,663,667,671, - 679,687,691,695,699,703,707,711,715,719,721,731,739,763,770,776, - 779,782,792,795,803,815,839,851,856,860,868,872,878,888,892,898, - 902,906,909,918,922,929,932,942,950,958,962,977,996,1007,1011,1018, - 1023,1029,1033,1040,1044,1048,1052,1060,1064,1069,1075,1081,1084, - 1088,1099,1108,1122,1134,1149,1152,1156,1159,1161,1166,1170,1173, - 1177,1186,1195,1205,1210,1221,1224,1227,1230,1233,1239,1243,1251, - 1254,1259,1262,1266,1269,1271,1285,1296,1301,1309,1312,1315,1320, - 1322,1324,1329,1332,1336,1339,1342,1346,1349,1352,1364,1371,1382, - 1409,1431,1444,1456,1469,1481,1493,1499,1526,1534,1538,1541,1544, - 1551,1554,1557,1560,1563,1566,1571,1574,1583,1588,1592,1597,1606, - 1625,1633,1641,1645,1649,1659,1685,1693,1705,1727,1729,1740,1743, - 1745,1749,1753,1760,1769,1775,1788,1795,1800,1806,1813,1815,1818, - 1830,1835,1838,1844,1846,1852,1873,1875,1883,1887,1896,1900,1916, - 1925,1949,1956,1959,1970,1979,1986,1992,2000,2005,2009,2016,2021, - 2029,2033,2036,2040,2049,2052,2063,2069,2087,2092,2097,2104,2106, - 2111,2118,2120,2125,2132,2134,2139,2146,2148,2155,2174,2181,2184, - 2189,2195,2203,2219,2228,2238,2245,2248 + 374,376,378,380,382,0,47,2,0,109,109,450,450,3,0,45,45,128,128,188, + 188,4,0,42,42,90,90,422,422,464,464,2,0,441,441,447,447,2,0,151, + 151,170,170,2,0,437,437,489,489,2,0,482,485,487,487,3,0,32,32,91, + 91,244,244,11,0,28,29,35,35,46,46,92,92,178,179,344,344,360,360, + 378,378,381,381,387,387,416,417,2,0,433,433,435,435,4,0,101,102, + 115,115,144,144,246,246,2,0,13,13,231,231,2,0,455,455,462,462,3, + 0,5,5,270,270,444,444,3,0,266,266,455,455,462,462,3,0,425,425,458, + 458,477,477,3,0,330,330,465,465,481,481,2,0,440,440,490,490,2,0, + 183,183,265,265,3,0,130,130,180,180,402,402,4,0,152,152,174,174, + 201,201,317,317,3,0,445,445,459,459,499,499,4,0,250,250,446,446, + 494,496,498,498,2,0,74,74,320,320,3,0,459,459,492,492,499,499,2, + 0,439,439,450,450,2,0,457,457,467,467,4,0,140,140,244,244,397,397, + 404,404,2,0,19,19,369,369,2,0,5,5,11,11,2,0,509,509,529,530,4,0, + 452,452,527,527,531,531,534,534,2,0,529,530,532,532,1,0,529,530, + 1,0,538,539,2,0,538,538,541,541,4,0,452,452,527,527,529,531,533, + 534,3,0,241,241,508,509,529,530,2,0,140,140,397,397,2,0,5,5,113, + 113,10,0,97,97,165,165,222,222,229,229,334,334,436,436,470,470,472, + 472,488,488,502,502,15,0,97,97,165,165,222,222,229,229,334,334,427, + 427,436,436,442,442,448,449,454,454,460,460,470,475,488,488,491, + 491,502,503,11,0,5,5,13,13,33,33,78,78,84,85,113,113,200,200,207, + 208,389,389,413,413,527,527,3,0,78,78,84,85,207,208,2,0,91,91,378, + 379,52,0,4,4,13,13,23,23,38,38,41,41,43,44,54,54,56,56,69,69,75, + 75,98,99,107,107,119,119,134,134,139,139,143,143,145,145,160,160, + 165,165,167,167,194,194,197,197,199,199,201,201,205,205,209,209, + 214,214,220,220,222,223,229,229,243,243,245,245,264,264,276,276, + 281,281,283,283,293,293,317,317,321,323,334,334,357,358,364,364, + 367,367,380,380,395,395,398,399,408,408,419,420,436,436,469,469, + 488,488,502,502,1,0,437,504,2505,0,387,1,0,0,0,2,397,1,0,0,0,4,411, + 1,0,0,0,6,413,1,0,0,0,8,429,1,0,0,0,10,433,1,0,0,0,12,435,1,0,0, + 0,14,438,1,0,0,0,16,449,1,0,0,0,18,457,1,0,0,0,20,465,1,0,0,0,22, + 467,1,0,0,0,24,519,1,0,0,0,26,521,1,0,0,0,28,528,1,0,0,0,30,532, + 1,0,0,0,32,536,1,0,0,0,34,540,1,0,0,0,36,594,1,0,0,0,38,600,1,0, + 0,0,40,606,1,0,0,0,42,608,1,0,0,0,44,650,1,0,0,0,46,664,1,0,0,0, + 48,666,1,0,0,0,50,677,1,0,0,0,52,681,1,0,0,0,54,683,1,0,0,0,56,731, + 1,0,0,0,58,733,1,0,0,0,60,737,1,0,0,0,62,745,1,0,0,0,64,753,1,0, + 0,0,66,757,1,0,0,0,68,792,1,0,0,0,70,808,1,0,0,0,72,810,1,0,0,0, + 74,820,1,0,0,0,76,822,1,0,0,0,78,829,1,0,0,0,80,831,1,0,0,0,82,839, + 1,0,0,0,84,847,1,0,0,0,86,849,1,0,0,0,88,853,1,0,0,0,90,857,1,0, + 0,0,92,880,1,0,0,0,94,884,1,0,0,0,96,886,1,0,0,0,98,902,1,0,0,0, + 100,904,1,0,0,0,102,909,1,0,0,0,104,921,1,0,0,0,106,940,1,0,0,0, + 108,960,1,0,0,0,110,971,1,0,0,0,112,973,1,0,0,0,114,986,1,0,0,0, + 116,993,1,0,0,0,118,996,1,0,0,0,120,1005,1,0,0,0,122,1009,1,0,0, + 0,124,1013,1,0,0,0,126,1016,1,0,0,0,128,1024,1,0,0,0,130,1029,1, + 0,0,0,132,1046,1,0,0,0,134,1053,1,0,0,0,136,1063,1,0,0,0,138,1072, + 1,0,0,0,140,1082,1,0,0,0,142,1101,1,0,0,0,144,1103,1,0,0,0,146,1116, + 1,0,0,0,148,1119,1,0,0,0,150,1128,1,0,0,0,152,1139,1,0,0,0,154,1152, + 1,0,0,0,156,1187,1,0,0,0,158,1206,1,0,0,0,160,1215,1,0,0,0,162,1224, + 1,0,0,0,164,1243,1,0,0,0,166,1265,1,0,0,0,168,1267,1,0,0,0,170,1297, + 1,0,0,0,172,1311,1,0,0,0,174,1313,1,0,0,0,176,1327,1,0,0,0,178,1353, + 1,0,0,0,180,1386,1,0,0,0,182,1388,1,0,0,0,184,1394,1,0,0,0,186,1396, + 1,0,0,0,188,1401,1,0,0,0,190,1406,1,0,0,0,192,1418,1,0,0,0,194,1435, + 1,0,0,0,196,1437,1,0,0,0,198,1439,1,0,0,0,200,1448,1,0,0,0,202,1450, + 1,0,0,0,204,1453,1,0,0,0,206,1503,1,0,0,0,208,1505,1,0,0,0,210,1508, + 1,0,0,0,212,1510,1,0,0,0,214,1517,1,0,0,0,216,1519,1,0,0,0,218,1521, + 1,0,0,0,220,1524,1,0,0,0,222,1533,1,0,0,0,224,1538,1,0,0,0,226,1552, + 1,0,0,0,228,1580,1,0,0,0,230,1590,1,0,0,0,232,1598,1,0,0,0,234,1603, + 1,0,0,0,236,1635,1,0,0,0,238,1637,1,0,0,0,240,1646,1,0,0,0,242,1657, + 1,0,0,0,244,1669,1,0,0,0,246,1695,1,0,0,0,248,1697,1,0,0,0,250,1715, + 1,0,0,0,252,1717,1,0,0,0,254,1722,1,0,0,0,256,1725,1,0,0,0,258,1739, + 1,0,0,0,260,1825,1,0,0,0,262,1856,1,0,0,0,264,1862,1,0,0,0,266,1907, + 1,0,0,0,268,1984,1,0,0,0,270,1996,1,0,0,0,272,2002,1,0,0,0,274,2008, + 1,0,0,0,276,2012,1,0,0,0,278,2018,1,0,0,0,280,2020,1,0,0,0,282,2022, + 1,0,0,0,284,2026,1,0,0,0,286,2028,1,0,0,0,288,2033,1,0,0,0,290,2040, + 1,0,0,0,292,2044,1,0,0,0,294,2049,1,0,0,0,296,2059,1,0,0,0,298,2062, + 1,0,0,0,300,2068,1,0,0,0,302,2078,1,0,0,0,304,2080,1,0,0,0,306,2084, + 1,0,0,0,308,2095,1,0,0,0,310,2097,1,0,0,0,312,2099,1,0,0,0,314,2101, + 1,0,0,0,316,2106,1,0,0,0,318,2108,1,0,0,0,320,2110,1,0,0,0,322,2115, + 1,0,0,0,324,2132,1,0,0,0,326,2146,1,0,0,0,328,2160,1,0,0,0,330,2174, + 1,0,0,0,332,2176,1,0,0,0,334,2184,1,0,0,0,336,2187,1,0,0,0,338,2191, + 1,0,0,0,340,2194,1,0,0,0,342,2205,1,0,0,0,344,2215,1,0,0,0,346,2221, + 1,0,0,0,348,2229,1,0,0,0,350,2245,1,0,0,0,352,2254,1,0,0,0,354,2256, + 1,0,0,0,356,2258,1,0,0,0,358,2274,1,0,0,0,360,2276,1,0,0,0,362,2279, + 1,0,0,0,364,2281,1,0,0,0,366,2283,1,0,0,0,368,2285,1,0,0,0,370,2287, + 1,0,0,0,372,2289,1,0,0,0,374,2291,1,0,0,0,376,2293,1,0,0,0,378,2295, + 1,0,0,0,380,2297,1,0,0,0,382,2299,1,0,0,0,384,386,3,2,1,0,385,384, + 1,0,0,0,386,389,1,0,0,0,387,385,1,0,0,0,387,388,1,0,0,0,388,390, + 1,0,0,0,389,387,1,0,0,0,390,391,5,0,0,1,391,1,1,0,0,0,392,394,3, + 4,2,0,393,395,5,521,0,0,394,393,1,0,0,0,394,395,1,0,0,0,395,398, + 1,0,0,0,396,398,3,6,3,0,397,392,1,0,0,0,397,396,1,0,0,0,398,3,1, + 0,0,0,399,412,3,8,4,0,400,412,3,10,5,0,401,412,3,12,6,0,402,412, + 3,14,7,0,403,412,3,20,10,0,404,412,3,24,12,0,405,412,3,26,13,0,406, + 412,3,28,14,0,407,412,3,30,15,0,408,412,3,32,16,0,409,412,3,34,17, + 0,410,412,3,36,18,0,411,399,1,0,0,0,411,400,1,0,0,0,411,401,1,0, + 0,0,411,402,1,0,0,0,411,403,1,0,0,0,411,404,1,0,0,0,411,405,1,0, + 0,0,411,406,1,0,0,0,411,407,1,0,0,0,411,408,1,0,0,0,411,409,1,0, + 0,0,411,410,1,0,0,0,412,5,1,0,0,0,413,414,5,521,0,0,414,7,1,0,0, + 0,415,430,3,40,20,0,416,430,3,102,51,0,417,430,3,104,52,0,418,430, + 3,106,53,0,419,430,3,100,50,0,420,430,3,112,56,0,421,430,3,126,63, + 0,422,430,3,128,64,0,423,430,3,130,65,0,424,430,3,132,66,0,425,430, + 3,134,67,0,426,430,3,136,68,0,427,430,3,138,69,0,428,430,3,140,70, + 0,429,415,1,0,0,0,429,416,1,0,0,0,429,417,1,0,0,0,429,418,1,0,0, + 0,429,419,1,0,0,0,429,420,1,0,0,0,429,421,1,0,0,0,429,422,1,0,0, + 0,429,423,1,0,0,0,429,424,1,0,0,0,429,425,1,0,0,0,429,426,1,0,0, + 0,429,427,1,0,0,0,429,428,1,0,0,0,430,9,1,0,0,0,431,434,3,156,78, + 0,432,434,3,142,71,0,433,431,1,0,0,0,433,432,1,0,0,0,434,11,1,0, + 0,0,435,436,7,0,0,0,436,437,3,326,163,0,437,13,1,0,0,0,438,442,5, + 135,0,0,439,443,3,16,8,0,440,441,5,479,0,0,441,443,5,146,0,0,442, + 439,1,0,0,0,442,440,1,0,0,0,442,443,1,0,0,0,443,447,1,0,0,0,444, + 448,3,10,5,0,445,448,3,144,72,0,446,448,3,154,77,0,447,444,1,0,0, + 0,447,445,1,0,0,0,447,446,1,0,0,0,448,15,1,0,0,0,449,454,3,18,9, + 0,450,451,5,520,0,0,451,453,3,18,9,0,452,450,1,0,0,0,453,456,1,0, + 0,0,454,452,1,0,0,0,454,455,1,0,0,0,455,17,1,0,0,0,456,454,1,0,0, + 0,457,458,7,1,0,0,458,19,1,0,0,0,459,460,5,410,0,0,460,461,5,441, + 0,0,461,466,3,316,158,0,462,463,5,410,0,0,463,466,3,320,160,0,464, + 466,3,22,11,0,465,459,1,0,0,0,465,462,1,0,0,0,465,464,1,0,0,0,466, + 21,1,0,0,0,467,468,5,410,0,0,468,469,5,227,0,0,469,474,3,332,166, + 0,470,471,5,520,0,0,471,473,3,332,166,0,472,470,1,0,0,0,473,476, + 1,0,0,0,474,472,1,0,0,0,474,475,1,0,0,0,475,23,1,0,0,0,476,474,1, + 0,0,0,477,478,5,341,0,0,478,520,7,2,0,0,479,480,5,341,0,0,480,481, + 5,76,0,0,481,520,7,3,0,0,482,483,5,341,0,0,483,486,5,374,0,0,484, + 485,7,4,0,0,485,487,3,320,160,0,486,484,1,0,0,0,486,487,1,0,0,0, + 487,489,1,0,0,0,488,490,3,262,131,0,489,488,1,0,0,0,489,490,1,0, + 0,0,490,520,1,0,0,0,491,492,5,341,0,0,492,493,5,58,0,0,493,496,7, + 4,0,0,494,497,3,328,164,0,495,497,3,326,163,0,496,494,1,0,0,0,496, + 495,1,0,0,0,497,499,1,0,0,0,498,500,3,262,131,0,499,498,1,0,0,0, + 499,500,1,0,0,0,500,520,1,0,0,0,501,502,5,341,0,0,502,507,5,72,0, + 0,503,504,5,373,0,0,504,508,3,326,163,0,505,506,5,501,0,0,506,508, + 3,328,164,0,507,503,1,0,0,0,507,505,1,0,0,0,508,520,1,0,0,0,509, + 511,5,341,0,0,510,512,5,411,0,0,511,510,1,0,0,0,511,512,1,0,0,0, + 512,513,1,0,0,0,513,520,5,154,0,0,514,516,5,341,0,0,515,517,5,152, + 0,0,516,515,1,0,0,0,516,517,1,0,0,0,517,518,1,0,0,0,518,520,5,227, + 0,0,519,477,1,0,0,0,519,479,1,0,0,0,519,482,1,0,0,0,519,491,1,0, + 0,0,519,501,1,0,0,0,519,509,1,0,0,0,519,514,1,0,0,0,520,25,1,0,0, + 0,521,522,5,468,0,0,522,523,5,226,0,0,523,526,3,332,166,0,524,525, + 5,433,0,0,525,527,3,340,170,0,526,524,1,0,0,0,526,527,1,0,0,0,527, + 27,1,0,0,0,528,529,5,500,0,0,529,530,5,226,0,0,530,531,3,332,166, + 0,531,29,1,0,0,0,532,534,5,340,0,0,533,535,3,342,171,0,534,533,1, + 0,0,0,534,535,1,0,0,0,535,31,1,0,0,0,536,538,5,312,0,0,537,539,3, + 344,172,0,538,537,1,0,0,0,538,539,1,0,0,0,539,33,1,0,0,0,540,541, + 7,5,0,0,541,542,5,463,0,0,542,543,3,110,55,0,543,35,1,0,0,0,544, + 545,5,437,0,0,545,546,5,463,0,0,546,547,5,433,0,0,547,550,3,38,19, + 0,548,549,5,17,0,0,549,551,3,332,166,0,550,548,1,0,0,0,550,551,1, + 0,0,0,551,595,1,0,0,0,552,553,5,437,0,0,553,554,5,456,0,0,554,555, + 5,433,0,0,555,558,3,38,19,0,556,557,5,17,0,0,557,559,3,332,166,0, + 558,556,1,0,0,0,558,559,1,0,0,0,559,562,1,0,0,0,560,561,5,311,0, + 0,561,563,3,332,166,0,562,560,1,0,0,0,562,563,1,0,0,0,563,595,1, + 0,0,0,564,565,5,437,0,0,565,566,7,6,0,0,566,567,5,433,0,0,567,568, + 3,38,19,0,568,569,5,311,0,0,569,570,3,332,166,0,570,595,1,0,0,0, + 571,572,5,437,0,0,572,573,5,486,0,0,573,595,3,38,19,0,574,575,5, + 437,0,0,575,576,5,453,0,0,576,577,5,456,0,0,577,578,5,433,0,0,578, + 579,3,38,19,0,579,580,5,311,0,0,580,581,3,332,166,0,581,582,5,466, + 0,0,582,583,3,332,166,0,583,595,1,0,0,0,584,585,5,437,0,0,585,586, + 5,443,0,0,586,587,5,456,0,0,587,588,5,433,0,0,588,589,3,38,19,0, + 589,590,5,146,0,0,590,591,3,332,166,0,591,592,5,17,0,0,592,593,3, + 332,166,0,593,595,1,0,0,0,594,544,1,0,0,0,594,552,1,0,0,0,594,564, + 1,0,0,0,594,571,1,0,0,0,594,574,1,0,0,0,594,584,1,0,0,0,595,37,1, + 0,0,0,596,598,5,534,0,0,597,596,1,0,0,0,597,598,1,0,0,0,598,599, + 1,0,0,0,599,601,3,332,166,0,600,597,1,0,0,0,601,602,1,0,0,0,602, + 600,1,0,0,0,602,603,1,0,0,0,603,39,1,0,0,0,604,607,3,42,21,0,605, + 607,3,44,22,0,606,604,1,0,0,0,606,605,1,0,0,0,607,41,1,0,0,0,608, + 610,5,72,0,0,609,611,5,497,0,0,610,609,1,0,0,0,610,611,1,0,0,0,611, + 612,1,0,0,0,612,614,5,373,0,0,613,615,3,336,168,0,614,613,1,0,0, + 0,614,615,1,0,0,0,615,616,1,0,0,0,616,617,3,324,162,0,617,618,5, + 516,0,0,618,623,3,46,23,0,619,620,5,520,0,0,620,622,3,46,23,0,621, + 619,1,0,0,0,622,625,1,0,0,0,623,621,1,0,0,0,623,624,1,0,0,0,624, + 628,1,0,0,0,625,623,1,0,0,0,626,627,5,520,0,0,627,629,3,80,40,0, + 628,626,1,0,0,0,628,629,1,0,0,0,629,632,1,0,0,0,630,631,5,520,0, + 0,631,633,3,82,41,0,632,630,1,0,0,0,632,633,1,0,0,0,633,636,1,0, + 0,0,634,635,5,520,0,0,635,637,3,86,43,0,636,634,1,0,0,0,636,637, + 1,0,0,0,637,638,1,0,0,0,638,641,5,517,0,0,639,640,5,59,0,0,640,642, + 5,537,0,0,641,639,1,0,0,0,641,642,1,0,0,0,642,644,1,0,0,0,643,645, + 3,88,44,0,644,643,1,0,0,0,644,645,1,0,0,0,645,646,1,0,0,0,646,648, + 3,334,167,0,647,649,3,96,48,0,648,647,1,0,0,0,648,649,1,0,0,0,649, + 43,1,0,0,0,650,651,5,72,0,0,651,653,5,373,0,0,652,654,3,336,168, + 0,653,652,1,0,0,0,653,654,1,0,0,0,654,655,1,0,0,0,655,656,3,324, + 162,0,656,659,3,334,167,0,657,658,5,17,0,0,658,660,3,156,78,0,659, + 657,1,0,0,0,659,660,1,0,0,0,660,45,1,0,0,0,661,665,3,48,24,0,662, + 665,3,72,36,0,663,665,3,76,38,0,664,661,1,0,0,0,664,662,1,0,0,0, + 664,663,1,0,0,0,665,47,1,0,0,0,666,667,3,50,25,0,667,669,3,56,28, + 0,668,670,3,70,35,0,669,668,1,0,0,0,669,670,1,0,0,0,670,673,1,0, + 0,0,671,672,5,59,0,0,672,674,5,537,0,0,673,671,1,0,0,0,673,674,1, + 0,0,0,674,49,1,0,0,0,675,678,3,332,166,0,676,678,3,256,128,0,677, + 675,1,0,0,0,677,676,1,0,0,0,678,51,1,0,0,0,679,682,3,332,166,0,680, + 682,4,26,0,0,681,679,1,0,0,0,681,680,1,0,0,0,682,53,1,0,0,0,683, + 684,5,516,0,0,684,689,3,52,26,0,685,686,5,520,0,0,686,688,3,52,26, + 0,687,685,1,0,0,0,688,691,1,0,0,0,689,687,1,0,0,0,689,690,1,0,0, + 0,690,692,1,0,0,0,691,689,1,0,0,0,692,693,5,517,0,0,693,55,1,0,0, + 0,694,732,7,7,0,0,695,697,7,8,0,0,696,698,3,58,29,0,697,696,1,0, + 0,0,697,698,1,0,0,0,698,732,1,0,0,0,699,701,5,379,0,0,700,702,3, + 58,29,0,701,700,1,0,0,0,701,702,1,0,0,0,702,709,1,0,0,0,703,705, + 7,9,0,0,704,706,5,206,0,0,705,704,1,0,0,0,705,706,1,0,0,0,706,707, + 1,0,0,0,707,708,5,378,0,0,708,710,5,504,0,0,709,703,1,0,0,0,709, + 710,1,0,0,0,710,732,1,0,0,0,711,713,7,10,0,0,712,714,3,60,30,0,713, + 712,1,0,0,0,713,714,1,0,0,0,714,732,1,0,0,0,715,717,7,11,0,0,716, + 718,3,64,32,0,717,716,1,0,0,0,717,718,1,0,0,0,718,732,1,0,0,0,719, + 721,5,469,0,0,720,722,3,66,33,0,721,720,1,0,0,0,721,722,1,0,0,0, + 722,732,1,0,0,0,723,725,5,321,0,0,724,726,3,68,34,0,725,724,1,0, + 0,0,725,726,1,0,0,0,726,732,1,0,0,0,727,729,5,294,0,0,728,730,3, + 62,31,0,729,728,1,0,0,0,729,730,1,0,0,0,730,732,1,0,0,0,731,694, + 1,0,0,0,731,695,1,0,0,0,731,699,1,0,0,0,731,711,1,0,0,0,731,715, + 1,0,0,0,731,719,1,0,0,0,731,723,1,0,0,0,731,727,1,0,0,0,732,57,1, + 0,0,0,733,734,5,516,0,0,734,735,3,364,182,0,735,736,5,517,0,0,736, + 59,1,0,0,0,737,738,5,516,0,0,738,741,3,364,182,0,739,740,5,520,0, + 0,740,742,3,364,182,0,741,739,1,0,0,0,741,742,1,0,0,0,742,743,1, + 0,0,0,743,744,5,517,0,0,744,61,1,0,0,0,745,746,5,516,0,0,746,749, + 3,362,181,0,747,748,5,520,0,0,748,750,3,362,181,0,749,747,1,0,0, + 0,749,750,1,0,0,0,750,751,1,0,0,0,751,752,5,517,0,0,752,63,1,0,0, + 0,753,754,5,507,0,0,754,755,3,56,28,0,755,756,5,506,0,0,756,65,1, + 0,0,0,757,758,5,507,0,0,758,759,3,56,28,0,759,760,5,520,0,0,760, + 761,3,56,28,0,761,762,1,0,0,0,762,763,5,506,0,0,763,67,1,0,0,0,764, + 765,5,507,0,0,765,766,3,52,26,0,766,773,3,56,28,0,767,768,5,520, + 0,0,768,769,3,52,26,0,769,770,3,56,28,0,770,772,1,0,0,0,771,767, + 1,0,0,0,772,775,1,0,0,0,773,771,1,0,0,0,773,774,1,0,0,0,774,776, + 1,0,0,0,775,773,1,0,0,0,776,777,5,506,0,0,777,793,1,0,0,0,778,779, + 5,516,0,0,779,780,3,52,26,0,780,787,3,56,28,0,781,782,5,520,0,0, + 782,783,3,52,26,0,783,784,3,56,28,0,784,786,1,0,0,0,785,781,1,0, + 0,0,786,789,1,0,0,0,787,785,1,0,0,0,787,788,1,0,0,0,788,790,1,0, + 0,0,789,787,1,0,0,0,790,791,5,517,0,0,791,793,1,0,0,0,792,764,1, + 0,0,0,792,778,1,0,0,0,793,69,1,0,0,0,794,795,5,64,0,0,795,797,3, + 84,42,0,796,794,1,0,0,0,796,797,1,0,0,0,797,798,1,0,0,0,798,799, + 5,288,0,0,799,802,5,466,0,0,800,801,5,241,0,0,801,803,5,125,0,0, + 802,800,1,0,0,0,802,803,1,0,0,0,803,809,1,0,0,0,804,806,5,241,0, + 0,805,804,1,0,0,0,805,806,1,0,0,0,806,807,1,0,0,0,807,809,5,244, + 0,0,808,796,1,0,0,0,808,805,1,0,0,0,809,71,1,0,0,0,810,811,3,50, + 25,0,811,812,3,56,28,0,812,815,5,218,0,0,813,814,5,151,0,0,814,816, + 3,74,37,0,815,813,1,0,0,0,815,816,1,0,0,0,816,818,1,0,0,0,817,819, + 5,423,0,0,818,817,1,0,0,0,818,819,1,0,0,0,819,73,1,0,0,0,820,821, + 5,537,0,0,821,75,1,0,0,0,822,823,3,50,25,0,823,824,5,17,0,0,824, + 827,3,78,39,0,825,826,5,59,0,0,826,828,5,537,0,0,827,825,1,0,0,0, + 827,828,1,0,0,0,828,77,1,0,0,0,829,830,3,256,128,0,830,79,1,0,0, + 0,831,832,5,424,0,0,832,833,5,146,0,0,833,834,3,52,26,0,834,835, + 5,17,0,0,835,836,3,256,128,0,836,81,1,0,0,0,837,838,5,64,0,0,838, + 840,3,84,42,0,839,837,1,0,0,0,839,840,1,0,0,0,840,841,1,0,0,0,841, + 842,5,288,0,0,842,843,5,466,0,0,843,844,3,54,27,0,844,845,5,241, + 0,0,845,846,5,125,0,0,846,83,1,0,0,0,847,848,3,308,154,0,848,85, + 1,0,0,0,849,850,5,277,0,0,850,851,5,146,0,0,851,852,5,371,0,0,852, + 87,1,0,0,0,853,854,5,269,0,0,854,855,5,34,0,0,855,856,3,90,45,0, + 856,89,1,0,0,0,857,858,5,516,0,0,858,863,3,92,46,0,859,860,5,520, + 0,0,860,862,3,92,46,0,861,859,1,0,0,0,862,865,1,0,0,0,863,861,1, + 0,0,0,863,864,1,0,0,0,864,866,1,0,0,0,865,863,1,0,0,0,866,867,5, + 517,0,0,867,91,1,0,0,0,868,881,3,52,26,0,869,870,5,516,0,0,870,875, + 3,94,47,0,871,872,5,520,0,0,872,874,3,94,47,0,873,871,1,0,0,0,874, + 877,1,0,0,0,875,873,1,0,0,0,875,876,1,0,0,0,876,878,1,0,0,0,877, + 875,1,0,0,0,878,879,5,517,0,0,879,881,1,0,0,0,880,868,1,0,0,0,880, + 869,1,0,0,0,881,93,1,0,0,0,882,885,3,284,142,0,883,885,3,358,179, + 0,884,882,1,0,0,0,884,883,1,0,0,0,885,95,1,0,0,0,886,887,5,202,0, + 0,887,896,3,326,163,0,888,892,5,516,0,0,889,891,3,98,49,0,890,889, + 1,0,0,0,891,894,1,0,0,0,892,890,1,0,0,0,892,893,1,0,0,0,893,895, + 1,0,0,0,894,892,1,0,0,0,895,897,5,517,0,0,896,888,1,0,0,0,896,897, + 1,0,0,0,897,97,1,0,0,0,898,899,7,12,0,0,899,903,7,13,0,0,900,901, + 7,14,0,0,901,903,7,15,0,0,902,898,1,0,0,0,902,900,1,0,0,0,903,99, + 1,0,0,0,904,905,5,72,0,0,905,906,5,441,0,0,906,907,3,318,159,0,907, + 908,3,334,167,0,908,101,1,0,0,0,909,910,5,72,0,0,910,912,5,447,0, + 0,911,913,3,336,168,0,912,911,1,0,0,0,912,913,1,0,0,0,913,914,1, + 0,0,0,914,917,3,322,161,0,915,916,5,59,0,0,916,918,5,537,0,0,917, + 915,1,0,0,0,917,918,1,0,0,0,918,919,1,0,0,0,919,920,3,334,167,0, + 920,103,1,0,0,0,921,923,5,72,0,0,922,924,5,497,0,0,923,922,1,0,0, + 0,923,924,1,0,0,0,924,925,1,0,0,0,925,927,5,501,0,0,926,928,3,336, + 168,0,927,926,1,0,0,0,927,928,1,0,0,0,928,929,1,0,0,0,929,931,3, + 330,165,0,930,932,3,54,27,0,931,930,1,0,0,0,931,932,1,0,0,0,932, + 935,1,0,0,0,933,934,5,59,0,0,934,936,5,537,0,0,935,933,1,0,0,0,935, + 936,1,0,0,0,936,937,1,0,0,0,937,938,5,17,0,0,938,939,3,156,78,0, + 939,105,1,0,0,0,940,944,5,72,0,0,941,945,5,497,0,0,942,943,5,497, + 0,0,943,945,5,370,0,0,944,941,1,0,0,0,944,942,1,0,0,0,944,945,1, + 0,0,0,945,946,1,0,0,0,946,948,5,153,0,0,947,949,3,336,168,0,948, + 947,1,0,0,0,948,949,1,0,0,0,949,950,1,0,0,0,950,951,3,270,135,0, + 951,952,5,17,0,0,952,955,3,308,154,0,953,954,5,195,0,0,954,956,7, + 16,0,0,955,953,1,0,0,0,955,956,1,0,0,0,956,958,1,0,0,0,957,959,3, + 108,54,0,958,957,1,0,0,0,958,959,1,0,0,0,959,107,1,0,0,0,960,961, + 5,412,0,0,961,962,5,463,0,0,962,968,3,110,55,0,963,964,5,520,0,0, + 964,965,5,463,0,0,965,967,3,110,55,0,966,963,1,0,0,0,967,970,1,0, + 0,0,968,966,1,0,0,0,968,969,1,0,0,0,969,109,1,0,0,0,970,968,1,0, + 0,0,971,972,5,537,0,0,972,111,1,0,0,0,973,974,5,8,0,0,974,976,5, + 373,0,0,975,977,3,338,169,0,976,975,1,0,0,0,976,977,1,0,0,0,977, + 978,1,0,0,0,978,984,3,326,163,0,979,985,3,114,57,0,980,985,3,116, + 58,0,981,985,3,118,59,0,982,985,3,120,60,0,983,985,3,122,61,0,984, + 979,1,0,0,0,984,980,1,0,0,0,984,981,1,0,0,0,984,982,1,0,0,0,984, + 983,1,0,0,0,985,113,1,0,0,0,986,988,5,311,0,0,987,989,3,332,166, + 0,988,987,1,0,0,0,988,989,1,0,0,0,989,990,1,0,0,0,990,991,5,388, + 0,0,991,992,3,332,166,0,992,115,1,0,0,0,993,994,5,340,0,0,994,995, + 3,340,170,0,995,117,1,0,0,0,996,997,5,437,0,0,997,998,5,64,0,0,998, + 999,3,84,42,0,999,1000,5,288,0,0,1000,1001,5,466,0,0,1001,1003,3, + 54,27,0,1002,1004,3,124,62,0,1003,1002,1,0,0,0,1003,1004,1,0,0,0, + 1004,119,1,0,0,0,1005,1006,5,116,0,0,1006,1007,5,64,0,0,1007,1008, + 3,84,42,0,1008,121,1,0,0,0,1009,1010,5,437,0,0,1010,1011,5,403,0, + 0,1011,1012,3,54,27,0,1012,123,1,0,0,0,1013,1014,5,241,0,0,1014, + 1015,5,125,0,0,1015,125,1,0,0,0,1016,1017,5,8,0,0,1017,1018,5,501, + 0,0,1018,1022,3,328,164,0,1019,1023,3,114,57,0,1020,1021,5,17,0, + 0,1021,1023,3,156,78,0,1022,1019,1,0,0,0,1022,1020,1,0,0,0,1023, + 127,1,0,0,0,1024,1025,5,8,0,0,1025,1026,5,447,0,0,1026,1027,3,320, + 160,0,1027,1028,3,116,58,0,1028,129,1,0,0,0,1029,1033,5,8,0,0,1030, + 1034,5,497,0,0,1031,1032,5,497,0,0,1032,1034,5,370,0,0,1033,1030, + 1,0,0,0,1033,1031,1,0,0,0,1033,1034,1,0,0,0,1034,1035,1,0,0,0,1035, + 1037,5,153,0,0,1036,1038,3,338,169,0,1037,1036,1,0,0,0,1037,1038, + 1,0,0,0,1038,1039,1,0,0,0,1039,1040,3,272,136,0,1040,1041,5,17,0, + 0,1041,1044,3,308,154,0,1042,1043,5,195,0,0,1043,1045,7,16,0,0,1044, + 1042,1,0,0,0,1044,1045,1,0,0,0,1045,131,1,0,0,0,1046,1047,5,116, + 0,0,1047,1049,5,441,0,0,1048,1050,3,338,169,0,1049,1048,1,0,0,0, + 1049,1050,1,0,0,0,1050,1051,1,0,0,0,1051,1052,3,316,158,0,1052,133, + 1,0,0,0,1053,1055,5,116,0,0,1054,1056,5,497,0,0,1055,1054,1,0,0, + 0,1055,1056,1,0,0,0,1056,1057,1,0,0,0,1057,1059,5,373,0,0,1058,1060, + 3,338,169,0,1059,1058,1,0,0,0,1059,1060,1,0,0,0,1060,1061,1,0,0, + 0,1061,1062,3,326,163,0,1062,135,1,0,0,0,1063,1064,5,116,0,0,1064, + 1066,5,447,0,0,1065,1067,3,338,169,0,1066,1065,1,0,0,0,1066,1067, + 1,0,0,0,1067,1068,1,0,0,0,1068,1070,3,320,160,0,1069,1071,7,17,0, + 0,1070,1069,1,0,0,0,1070,1071,1,0,0,0,1071,137,1,0,0,0,1072,1074, + 5,116,0,0,1073,1075,5,497,0,0,1074,1073,1,0,0,0,1074,1075,1,0,0, + 0,1075,1076,1,0,0,0,1076,1078,5,501,0,0,1077,1079,3,338,169,0,1078, + 1077,1,0,0,0,1078,1079,1,0,0,0,1079,1080,1,0,0,0,1080,1081,3,328, + 164,0,1081,139,1,0,0,0,1082,1086,5,116,0,0,1083,1087,5,497,0,0,1084, + 1085,5,497,0,0,1085,1087,5,370,0,0,1086,1083,1,0,0,0,1086,1084,1, + 0,0,0,1086,1087,1,0,0,0,1087,1088,1,0,0,0,1088,1090,5,153,0,0,1089, + 1091,3,338,169,0,1090,1089,1,0,0,0,1090,1091,1,0,0,0,1091,1092,1, + 0,0,0,1092,1093,3,272,136,0,1093,141,1,0,0,0,1094,1096,5,132,0,0, + 1095,1094,1,0,0,0,1095,1096,1,0,0,0,1096,1097,1,0,0,0,1097,1102, + 3,144,72,0,1098,1102,3,152,76,0,1099,1100,5,132,0,0,1100,1102,3, + 154,77,0,1101,1095,1,0,0,0,1101,1098,1,0,0,0,1101,1099,1,0,0,0,1102, + 143,1,0,0,0,1103,1104,5,177,0,0,1104,1105,7,18,0,0,1105,1114,3,326, + 163,0,1106,1108,3,146,73,0,1107,1106,1,0,0,0,1107,1108,1,0,0,0,1108, + 1110,1,0,0,0,1109,1111,3,54,27,0,1110,1109,1,0,0,0,1110,1111,1,0, + 0,0,1111,1112,1,0,0,0,1112,1115,3,156,78,0,1113,1115,3,148,74,0, + 1114,1107,1,0,0,0,1114,1113,1,0,0,0,1115,145,1,0,0,0,1116,1117,5, + 268,0,0,1117,1118,3,340,170,0,1118,147,1,0,0,0,1119,1120,5,414,0, + 0,1120,1125,3,150,75,0,1121,1122,5,520,0,0,1122,1124,3,150,75,0, + 1123,1121,1,0,0,0,1124,1127,1,0,0,0,1125,1123,1,0,0,0,1125,1126, + 1,0,0,0,1126,149,1,0,0,0,1127,1125,1,0,0,0,1128,1129,5,516,0,0,1129, + 1134,3,358,179,0,1130,1131,5,520,0,0,1131,1133,3,358,179,0,1132, + 1130,1,0,0,0,1133,1136,1,0,0,0,1134,1132,1,0,0,0,1134,1135,1,0,0, + 0,1135,1137,1,0,0,0,1136,1134,1,0,0,0,1137,1138,5,517,0,0,1138,151, + 1,0,0,0,1139,1140,5,24,0,0,1140,1141,5,354,0,0,1141,1142,5,340,0, + 0,1142,1146,5,521,0,0,1143,1144,3,144,72,0,1144,1145,5,521,0,0,1145, + 1147,1,0,0,0,1146,1143,1,0,0,0,1147,1148,1,0,0,0,1148,1146,1,0,0, + 0,1148,1149,1,0,0,0,1149,1150,1,0,0,0,1150,1151,5,122,0,0,1151,153, + 1,0,0,0,1152,1153,5,354,0,0,1153,1154,5,340,0,0,1154,1158,5,24,0, + 0,1155,1156,3,144,72,0,1156,1157,5,521,0,0,1157,1159,1,0,0,0,1158, + 1155,1,0,0,0,1159,1160,1,0,0,0,1160,1158,1,0,0,0,1160,1161,1,0,0, + 0,1161,1162,1,0,0,0,1162,1163,5,122,0,0,1163,155,1,0,0,0,1164,1165, + 6,78,-1,0,1165,1188,3,158,79,0,1166,1167,3,160,80,0,1167,1168,3, + 156,78,5,1168,1188,1,0,0,0,1169,1170,5,516,0,0,1170,1171,3,156,78, + 0,1171,1172,5,517,0,0,1172,1188,1,0,0,0,1173,1175,3,168,84,0,1174, + 1176,3,228,114,0,1175,1174,1,0,0,0,1175,1176,1,0,0,0,1176,1178,1, + 0,0,0,1177,1179,3,232,116,0,1178,1177,1,0,0,0,1178,1179,1,0,0,0, + 1179,1188,1,0,0,0,1180,1182,3,166,83,0,1181,1183,3,228,114,0,1182, + 1181,1,0,0,0,1182,1183,1,0,0,0,1183,1185,1,0,0,0,1184,1186,3,232, + 116,0,1185,1184,1,0,0,0,1185,1186,1,0,0,0,1186,1188,1,0,0,0,1187, + 1164,1,0,0,0,1187,1166,1,0,0,0,1187,1169,1,0,0,0,1187,1173,1,0,0, + 0,1187,1180,1,0,0,0,1188,1203,1,0,0,0,1189,1190,10,3,0,0,1190,1192, + 7,19,0,0,1191,1193,5,5,0,0,1192,1191,1,0,0,0,1192,1193,1,0,0,0,1193, + 1194,1,0,0,0,1194,1196,3,156,78,0,1195,1197,3,228,114,0,1196,1195, + 1,0,0,0,1196,1197,1,0,0,0,1197,1199,1,0,0,0,1198,1200,3,232,116, + 0,1199,1198,1,0,0,0,1199,1200,1,0,0,0,1200,1202,1,0,0,0,1201,1189, + 1,0,0,0,1202,1205,1,0,0,0,1203,1201,1,0,0,0,1203,1204,1,0,0,0,1204, + 157,1,0,0,0,1205,1203,1,0,0,0,1206,1207,5,414,0,0,1207,1212,3,256, + 128,0,1208,1209,5,520,0,0,1209,1211,3,256,128,0,1210,1208,1,0,0, + 0,1211,1214,1,0,0,0,1212,1210,1,0,0,0,1212,1213,1,0,0,0,1213,159, + 1,0,0,0,1214,1212,1,0,0,0,1215,1216,5,433,0,0,1216,1221,3,162,81, + 0,1217,1218,5,520,0,0,1218,1220,3,162,81,0,1219,1217,1,0,0,0,1220, + 1223,1,0,0,0,1221,1219,1,0,0,0,1221,1222,1,0,0,0,1222,161,1,0,0, + 0,1223,1221,1,0,0,0,1224,1236,3,164,82,0,1225,1226,5,516,0,0,1226, + 1231,3,52,26,0,1227,1228,5,520,0,0,1228,1230,3,52,26,0,1229,1227, + 1,0,0,0,1230,1233,1,0,0,0,1231,1229,1,0,0,0,1231,1232,1,0,0,0,1232, + 1234,1,0,0,0,1233,1231,1,0,0,0,1234,1235,5,517,0,0,1235,1237,1,0, + 0,0,1236,1225,1,0,0,0,1236,1237,1,0,0,0,1237,1238,1,0,0,0,1238,1239, + 5,17,0,0,1239,1240,5,516,0,0,1240,1241,3,156,78,0,1241,1242,5,517, + 0,0,1242,163,1,0,0,0,1243,1244,3,308,154,0,1244,165,1,0,0,0,1245, + 1247,3,168,84,0,1246,1248,3,174,87,0,1247,1246,1,0,0,0,1247,1248, + 1,0,0,0,1248,1250,1,0,0,0,1249,1251,3,202,101,0,1250,1249,1,0,0, + 0,1250,1251,1,0,0,0,1251,1253,1,0,0,0,1252,1254,3,204,102,0,1253, + 1252,1,0,0,0,1253,1254,1,0,0,0,1254,1256,1,0,0,0,1255,1257,3,218, + 109,0,1256,1255,1,0,0,0,1256,1257,1,0,0,0,1257,1259,1,0,0,0,1258, + 1260,3,220,110,0,1259,1258,1,0,0,0,1259,1260,1,0,0,0,1260,1266,1, + 0,0,0,1261,1262,3,168,84,0,1262,1263,3,174,87,0,1263,1264,3,226, + 113,0,1264,1266,1,0,0,0,1265,1245,1,0,0,0,1265,1261,1,0,0,0,1266, + 167,1,0,0,0,1267,1269,5,336,0,0,1268,1270,3,368,184,0,1269,1268, + 1,0,0,0,1269,1270,1,0,0,0,1270,1280,1,0,0,0,1271,1281,5,527,0,0, + 1272,1277,3,170,85,0,1273,1274,5,520,0,0,1274,1276,3,170,85,0,1275, + 1273,1,0,0,0,1276,1279,1,0,0,0,1277,1275,1,0,0,0,1277,1278,1,0,0, + 0,1278,1281,1,0,0,0,1279,1277,1,0,0,0,1280,1271,1,0,0,0,1280,1272, + 1,0,0,0,1281,169,1,0,0,0,1282,1298,3,172,86,0,1283,1288,3,256,128, + 0,1284,1286,5,17,0,0,1285,1284,1,0,0,0,1285,1286,1,0,0,0,1286,1287, + 1,0,0,0,1287,1289,3,52,26,0,1288,1285,1,0,0,0,1288,1289,1,0,0,0, + 1289,1298,1,0,0,0,1290,1295,3,52,26,0,1291,1293,5,17,0,0,1292,1291, + 1,0,0,0,1292,1293,1,0,0,0,1293,1294,1,0,0,0,1294,1296,3,256,128, + 0,1295,1292,1,0,0,0,1295,1296,1,0,0,0,1296,1298,1,0,0,0,1297,1282, + 1,0,0,0,1297,1283,1,0,0,0,1297,1290,1,0,0,0,1298,171,1,0,0,0,1299, + 1300,3,268,134,0,1300,1301,5,262,0,0,1301,1302,3,224,112,0,1302, + 1303,5,17,0,0,1303,1304,3,308,154,0,1304,1312,1,0,0,0,1305,1306, + 3,268,134,0,1306,1307,5,262,0,0,1307,1308,3,300,150,0,1308,1309, + 5,17,0,0,1309,1310,3,308,154,0,1310,1312,1,0,0,0,1311,1299,1,0,0, + 0,1311,1305,1,0,0,0,1312,173,1,0,0,0,1313,1314,5,151,0,0,1314,1315, + 3,176,88,0,1315,175,1,0,0,0,1316,1317,6,88,-1,0,1317,1322,3,178, + 89,0,1318,1319,5,520,0,0,1319,1321,3,178,89,0,1320,1318,1,0,0,0, + 1321,1324,1,0,0,0,1322,1320,1,0,0,0,1322,1323,1,0,0,0,1323,1328, + 1,0,0,0,1324,1322,1,0,0,0,1325,1328,3,186,93,0,1326,1328,3,188,94, + 0,1327,1316,1,0,0,0,1327,1325,1,0,0,0,1327,1326,1,0,0,0,1328,1350, + 1,0,0,0,1329,1330,10,3,0,0,1330,1331,5,73,0,0,1331,1332,5,185,0, + 0,1332,1349,3,176,88,4,1333,1335,10,4,0,0,1334,1336,5,233,0,0,1335, + 1334,1,0,0,0,1335,1336,1,0,0,0,1336,1338,1,0,0,0,1337,1339,7,20, + 0,0,1338,1337,1,0,0,0,1338,1339,1,0,0,0,1339,1341,1,0,0,0,1340,1342, + 5,261,0,0,1341,1340,1,0,0,0,1341,1342,1,0,0,0,1342,1343,1,0,0,0, + 1343,1344,5,185,0,0,1344,1346,3,176,88,0,1345,1347,3,200,100,0,1346, + 1345,1,0,0,0,1346,1347,1,0,0,0,1347,1349,1,0,0,0,1348,1329,1,0,0, + 0,1348,1333,1,0,0,0,1349,1352,1,0,0,0,1350,1348,1,0,0,0,1350,1351, + 1,0,0,0,1351,177,1,0,0,0,1352,1350,1,0,0,0,1353,1355,3,180,90,0, + 1354,1356,3,298,149,0,1355,1354,1,0,0,0,1355,1356,1,0,0,0,1356,179, + 1,0,0,0,1357,1359,5,373,0,0,1358,1357,1,0,0,0,1358,1359,1,0,0,0, + 1359,1360,1,0,0,0,1360,1362,3,326,163,0,1361,1363,3,182,91,0,1362, + 1361,1,0,0,0,1362,1363,1,0,0,0,1363,1387,1,0,0,0,1364,1366,3,328, + 164,0,1365,1367,3,182,91,0,1366,1365,1,0,0,0,1366,1367,1,0,0,0,1367, + 1387,1,0,0,0,1368,1369,5,198,0,0,1369,1370,5,373,0,0,1370,1371,5, + 516,0,0,1371,1372,3,266,133,0,1372,1373,5,517,0,0,1373,1387,1,0, + 0,0,1374,1376,5,198,0,0,1375,1374,1,0,0,0,1375,1376,1,0,0,0,1376, + 1377,1,0,0,0,1377,1378,5,516,0,0,1378,1379,3,156,78,0,1379,1380, + 5,517,0,0,1380,1387,1,0,0,0,1381,1382,5,405,0,0,1382,1383,5,516, + 0,0,1383,1384,3,256,128,0,1384,1385,5,517,0,0,1385,1387,1,0,0,0, + 1386,1358,1,0,0,0,1386,1364,1,0,0,0,1386,1368,1,0,0,0,1386,1375, + 1,0,0,0,1386,1381,1,0,0,0,1387,181,1,0,0,0,1388,1389,5,146,0,0,1389, + 1390,5,371,0,0,1390,1391,5,17,0,0,1391,1392,5,249,0,0,1392,1393, + 3,184,92,0,1393,183,1,0,0,0,1394,1395,3,256,128,0,1395,185,1,0,0, + 0,1396,1397,5,516,0,0,1397,1398,3,148,74,0,1398,1399,5,517,0,0,1399, + 1400,3,298,149,0,1400,187,1,0,0,0,1401,1402,5,373,0,0,1402,1403, + 5,516,0,0,1403,1404,3,190,95,0,1404,1405,5,517,0,0,1405,189,1,0, + 0,0,1406,1407,3,192,96,0,1407,1408,5,516,0,0,1408,1413,3,194,97, + 0,1409,1410,5,520,0,0,1410,1412,3,194,97,0,1411,1409,1,0,0,0,1412, + 1415,1,0,0,0,1413,1411,1,0,0,0,1413,1414,1,0,0,0,1414,1416,1,0,0, + 0,1415,1413,1,0,0,0,1416,1417,5,517,0,0,1417,191,1,0,0,0,1418,1419, + 7,21,0,0,1419,193,1,0,0,0,1420,1421,5,373,0,0,1421,1436,3,216,108, + 0,1422,1436,3,198,99,0,1423,1436,3,286,143,0,1424,1425,5,446,0,0, + 1425,1426,5,536,0,0,1426,1427,5,373,0,0,1427,1436,3,216,108,0,1428, + 1429,5,498,0,0,1429,1430,5,536,0,0,1430,1436,3,198,99,0,1431,1432, + 3,196,98,0,1432,1433,5,536,0,0,1433,1434,3,286,143,0,1434,1436,1, + 0,0,0,1435,1420,1,0,0,0,1435,1422,1,0,0,0,1435,1423,1,0,0,0,1435, + 1424,1,0,0,0,1435,1428,1,0,0,0,1435,1431,1,0,0,0,1436,195,1,0,0, + 0,1437,1438,7,22,0,0,1438,197,1,0,0,0,1439,1440,5,451,0,0,1440,1441, + 5,516,0,0,1441,1442,3,52,26,0,1442,1443,5,517,0,0,1443,199,1,0,0, + 0,1444,1445,5,253,0,0,1445,1449,3,258,129,0,1446,1447,5,412,0,0, + 1447,1449,3,54,27,0,1448,1444,1,0,0,0,1448,1446,1,0,0,0,1449,201, + 1,0,0,0,1450,1451,5,430,0,0,1451,1452,3,258,129,0,1452,203,1,0,0, + 0,1453,1454,5,159,0,0,1454,1455,5,34,0,0,1455,1460,3,206,103,0,1456, + 1457,5,520,0,0,1457,1459,3,206,103,0,1458,1456,1,0,0,0,1459,1462, + 1,0,0,0,1460,1458,1,0,0,0,1460,1461,1,0,0,0,1461,205,1,0,0,0,1462, + 1460,1,0,0,0,1463,1504,3,52,26,0,1464,1504,3,212,106,0,1465,1466, + 5,516,0,0,1466,1504,5,517,0,0,1467,1468,5,516,0,0,1468,1473,3,256, + 128,0,1469,1470,5,520,0,0,1470,1472,3,256,128,0,1471,1469,1,0,0, + 0,1472,1475,1,0,0,0,1473,1471,1,0,0,0,1473,1474,1,0,0,0,1474,1476, + 1,0,0,0,1475,1473,1,0,0,0,1476,1477,5,517,0,0,1477,1504,1,0,0,0, + 1478,1479,3,210,105,0,1479,1480,5,516,0,0,1480,1485,3,256,128,0, + 1481,1482,5,520,0,0,1482,1484,3,256,128,0,1483,1481,1,0,0,0,1484, + 1487,1,0,0,0,1485,1483,1,0,0,0,1485,1486,1,0,0,0,1486,1488,1,0,0, + 0,1487,1485,1,0,0,0,1488,1489,5,517,0,0,1489,1504,1,0,0,0,1490,1491, + 3,208,104,0,1491,1492,5,516,0,0,1492,1497,3,206,103,0,1493,1494, + 5,520,0,0,1494,1496,3,206,103,0,1495,1493,1,0,0,0,1496,1499,1,0, + 0,0,1497,1495,1,0,0,0,1497,1498,1,0,0,0,1498,1500,1,0,0,0,1499,1497, + 1,0,0,0,1500,1501,5,517,0,0,1501,1504,1,0,0,0,1502,1504,3,256,128, + 0,1503,1463,1,0,0,0,1503,1464,1,0,0,0,1503,1465,1,0,0,0,1503,1467, + 1,0,0,0,1503,1478,1,0,0,0,1503,1490,1,0,0,0,1503,1502,1,0,0,0,1504, + 207,1,0,0,0,1505,1506,5,160,0,0,1506,1507,5,493,0,0,1507,209,1,0, + 0,0,1508,1509,7,23,0,0,1509,211,1,0,0,0,1510,1511,3,214,107,0,1511, + 1512,5,516,0,0,1512,1513,3,216,108,0,1513,1514,5,520,0,0,1514,1515, + 3,286,143,0,1515,1516,5,517,0,0,1516,213,1,0,0,0,1517,1518,7,24, + 0,0,1518,215,1,0,0,0,1519,1520,3,332,166,0,1520,217,1,0,0,0,1521, + 1522,5,163,0,0,1522,1523,3,258,129,0,1523,219,1,0,0,0,1524,1525, + 5,432,0,0,1525,1530,3,222,111,0,1526,1527,5,520,0,0,1527,1529,3, + 222,111,0,1528,1526,1,0,0,0,1529,1532,1,0,0,0,1530,1528,1,0,0,0, + 1530,1531,1,0,0,0,1531,221,1,0,0,0,1532,1530,1,0,0,0,1533,1534,3, + 300,150,0,1534,1535,5,17,0,0,1535,1536,3,224,112,0,1536,223,1,0, + 0,0,1537,1539,3,300,150,0,1538,1537,1,0,0,0,1538,1539,1,0,0,0,1539, + 1540,1,0,0,0,1540,1542,5,516,0,0,1541,1543,3,234,117,0,1542,1541, + 1,0,0,0,1542,1543,1,0,0,0,1543,1545,1,0,0,0,1544,1546,3,228,114, + 0,1545,1544,1,0,0,0,1545,1546,1,0,0,0,1546,1548,1,0,0,0,1547,1549, + 3,250,125,0,1548,1547,1,0,0,0,1548,1549,1,0,0,0,1549,1550,1,0,0, + 0,1550,1551,5,517,0,0,1551,225,1,0,0,0,1552,1553,5,213,0,0,1553, + 1555,5,516,0,0,1554,1556,3,234,117,0,1555,1554,1,0,0,0,1555,1556, + 1,0,0,0,1556,1558,1,0,0,0,1557,1559,3,228,114,0,1558,1557,1,0,0, + 0,1558,1559,1,0,0,0,1559,1561,1,0,0,0,1560,1562,3,238,119,0,1561, + 1560,1,0,0,0,1561,1562,1,0,0,0,1562,1564,1,0,0,0,1563,1565,3,244, + 122,0,1564,1563,1,0,0,0,1564,1565,1,0,0,0,1565,1567,1,0,0,0,1566, + 1568,3,246,123,0,1567,1566,1,0,0,0,1567,1568,1,0,0,0,1568,1570,1, + 0,0,0,1569,1571,3,240,120,0,1570,1569,1,0,0,0,1570,1571,1,0,0,0, + 1571,1572,1,0,0,0,1572,1573,3,248,124,0,1573,1578,5,517,0,0,1574, + 1576,5,17,0,0,1575,1574,1,0,0,0,1575,1576,1,0,0,0,1576,1577,1,0, + 0,0,1577,1579,3,308,154,0,1578,1575,1,0,0,0,1578,1579,1,0,0,0,1579, + 227,1,0,0,0,1580,1581,5,258,0,0,1581,1582,5,34,0,0,1582,1587,3,230, + 115,0,1583,1584,5,520,0,0,1584,1586,3,230,115,0,1585,1583,1,0,0, + 0,1586,1589,1,0,0,0,1587,1585,1,0,0,0,1587,1588,1,0,0,0,1588,229, + 1,0,0,0,1589,1587,1,0,0,0,1590,1592,3,52,26,0,1591,1593,7,25,0,0, + 1592,1591,1,0,0,0,1592,1593,1,0,0,0,1593,1596,1,0,0,0,1594,1595, + 5,476,0,0,1595,1597,7,26,0,0,1596,1594,1,0,0,0,1596,1597,1,0,0,0, + 1597,231,1,0,0,0,1598,1601,5,204,0,0,1599,1602,5,5,0,0,1600,1602, + 3,256,128,0,1601,1599,1,0,0,0,1601,1600,1,0,0,0,1602,233,1,0,0,0, + 1603,1604,5,268,0,0,1604,1607,5,34,0,0,1605,1608,3,52,26,0,1606, + 1608,3,268,134,0,1607,1605,1,0,0,0,1607,1606,1,0,0,0,1608,1616,1, + 0,0,0,1609,1612,5,520,0,0,1610,1613,3,52,26,0,1611,1613,3,268,134, + 0,1612,1610,1,0,0,0,1612,1611,1,0,0,0,1613,1615,1,0,0,0,1614,1609, + 1,0,0,0,1615,1618,1,0,0,0,1616,1614,1,0,0,0,1616,1617,1,0,0,0,1617, + 235,1,0,0,0,1618,1616,1,0,0,0,1619,1636,5,527,0,0,1620,1636,5,530, + 0,0,1621,1636,5,535,0,0,1622,1623,5,518,0,0,1623,1624,5,538,0,0, + 1624,1625,5,520,0,0,1625,1626,5,538,0,0,1626,1636,5,519,0,0,1627, + 1628,5,518,0,0,1628,1629,5,538,0,0,1629,1630,5,520,0,0,1630,1636, + 5,519,0,0,1631,1632,5,518,0,0,1632,1633,5,520,0,0,1633,1634,5,538, + 0,0,1634,1636,5,519,0,0,1635,1619,1,0,0,0,1635,1620,1,0,0,0,1635, + 1621,1,0,0,0,1635,1622,1,0,0,0,1635,1627,1,0,0,0,1635,1631,1,0,0, + 0,1636,237,1,0,0,0,1637,1638,5,215,0,0,1638,1643,3,170,85,0,1639, + 1640,5,520,0,0,1640,1642,3,170,85,0,1641,1639,1,0,0,0,1642,1645, + 1,0,0,0,1643,1641,1,0,0,0,1643,1644,1,0,0,0,1644,239,1,0,0,0,1645, + 1643,1,0,0,0,1646,1647,5,271,0,0,1647,1649,5,516,0,0,1648,1650,3, + 242,121,0,1649,1648,1,0,0,0,1650,1651,1,0,0,0,1651,1649,1,0,0,0, + 1651,1652,1,0,0,0,1652,1653,1,0,0,0,1653,1655,5,517,0,0,1654,1656, + 3,254,127,0,1655,1654,1,0,0,0,1655,1656,1,0,0,0,1656,241,1,0,0,0, + 1657,1659,3,310,155,0,1658,1660,3,236,118,0,1659,1658,1,0,0,0,1659, + 1660,1,0,0,0,1660,243,1,0,0,0,1661,1662,5,5,0,0,1662,1663,5,322, + 0,0,1663,1664,5,272,0,0,1664,1670,5,210,0,0,1665,1666,5,254,0,0, + 1666,1667,5,321,0,0,1667,1668,5,272,0,0,1668,1670,5,210,0,0,1669, + 1661,1,0,0,0,1669,1665,1,0,0,0,1670,245,1,0,0,0,1671,1672,5,438, + 0,0,1672,1673,5,210,0,0,1673,1674,5,343,0,0,1674,1675,5,478,0,0, + 1675,1676,5,467,0,0,1676,1696,5,321,0,0,1677,1678,5,438,0,0,1678, + 1679,5,210,0,0,1679,1680,5,343,0,0,1680,1681,5,388,0,0,1681,1682, + 5,237,0,0,1682,1696,5,321,0,0,1683,1684,5,438,0,0,1684,1685,5,210, + 0,0,1685,1686,5,343,0,0,1686,1687,5,388,0,0,1687,1688,5,467,0,0, + 1688,1696,3,310,155,0,1689,1690,5,438,0,0,1690,1691,5,210,0,0,1691, + 1692,5,343,0,0,1692,1693,5,388,0,0,1693,1694,5,457,0,0,1694,1696, + 3,310,155,0,1695,1671,1,0,0,0,1695,1677,1,0,0,0,1695,1683,1,0,0, + 0,1695,1689,1,0,0,0,1696,247,1,0,0,0,1697,1698,5,105,0,0,1698,1703, + 3,170,85,0,1699,1700,5,520,0,0,1700,1702,3,170,85,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, + 249,1,0,0,0,1705,1703,1,0,0,0,1706,1707,5,292,0,0,1707,1708,5,27, + 0,0,1708,1709,3,286,143,0,1709,1710,3,252,126,0,1710,1716,1,0,0, + 0,1711,1712,5,322,0,0,1712,1713,5,27,0,0,1713,1714,5,538,0,0,1714, + 1716,3,252,126,0,1715,1706,1,0,0,0,1715,1711,1,0,0,0,1716,251,1, + 0,0,0,1717,1718,5,480,0,0,1718,1719,5,10,0,0,1719,1720,5,76,0,0, + 1720,1721,5,321,0,0,1721,253,1,0,0,0,1722,1723,5,434,0,0,1723,1724, + 3,286,143,0,1724,255,1,0,0,0,1725,1726,3,258,129,0,1726,257,1,0, + 0,0,1727,1728,6,129,-1,0,1728,1729,5,241,0,0,1729,1740,3,258,129, + 6,1730,1731,5,133,0,0,1731,1732,5,516,0,0,1732,1733,3,156,78,0,1733, + 1734,5,517,0,0,1734,1740,1,0,0,0,1735,1737,3,264,132,0,1736,1738, + 3,260,130,0,1737,1736,1,0,0,0,1737,1738,1,0,0,0,1738,1740,1,0,0, + 0,1739,1727,1,0,0,0,1739,1730,1,0,0,0,1739,1735,1,0,0,0,1740,1755, + 1,0,0,0,1741,1742,10,3,0,0,1742,1743,5,10,0,0,1743,1754,3,258,129, + 4,1744,1745,10,2,0,0,1745,1746,5,257,0,0,1746,1754,3,258,129,3,1747, + 1748,10,1,0,0,1748,1750,5,184,0,0,1749,1751,5,241,0,0,1750,1749, + 1,0,0,0,1750,1751,1,0,0,0,1751,1752,1,0,0,0,1752,1754,7,27,0,0,1753, + 1741,1,0,0,0,1753,1744,1,0,0,0,1753,1747,1,0,0,0,1754,1757,1,0,0, + 0,1755,1753,1,0,0,0,1755,1756,1,0,0,0,1756,259,1,0,0,0,1757,1755, + 1,0,0,0,1758,1760,5,241,0,0,1759,1758,1,0,0,0,1759,1760,1,0,0,0, + 1760,1761,1,0,0,0,1761,1763,5,27,0,0,1762,1764,7,28,0,0,1763,1762, + 1,0,0,0,1763,1764,1,0,0,0,1764,1765,1,0,0,0,1765,1766,3,264,132, + 0,1766,1767,5,10,0,0,1767,1768,3,264,132,0,1768,1826,1,0,0,0,1769, + 1771,5,241,0,0,1770,1769,1,0,0,0,1770,1771,1,0,0,0,1771,1772,1,0, + 0,0,1772,1773,5,170,0,0,1773,1774,5,516,0,0,1774,1779,3,256,128, + 0,1775,1776,5,520,0,0,1776,1778,3,256,128,0,1777,1775,1,0,0,0,1778, + 1781,1,0,0,0,1779,1777,1,0,0,0,1779,1780,1,0,0,0,1780,1782,1,0,0, + 0,1781,1779,1,0,0,0,1782,1783,5,517,0,0,1783,1826,1,0,0,0,1784,1786, + 5,241,0,0,1785,1784,1,0,0,0,1785,1786,1,0,0,0,1786,1787,1,0,0,0, + 1787,1788,5,170,0,0,1788,1789,5,516,0,0,1789,1790,3,156,78,0,1790, + 1791,5,517,0,0,1791,1826,1,0,0,0,1792,1793,5,133,0,0,1793,1794,5, + 516,0,0,1794,1795,3,156,78,0,1795,1796,5,517,0,0,1796,1826,1,0,0, + 0,1797,1799,5,241,0,0,1798,1797,1,0,0,0,1798,1799,1,0,0,0,1799,1800, + 1,0,0,0,1800,1801,5,318,0,0,1801,1826,3,264,132,0,1802,1826,3,262, + 131,0,1803,1805,5,184,0,0,1804,1806,5,241,0,0,1805,1804,1,0,0,0, + 1805,1806,1,0,0,0,1806,1807,1,0,0,0,1807,1826,7,27,0,0,1808,1810, + 5,184,0,0,1809,1811,5,241,0,0,1810,1809,1,0,0,0,1810,1811,1,0,0, + 0,1811,1812,1,0,0,0,1812,1813,5,113,0,0,1813,1814,5,151,0,0,1814, + 1826,3,264,132,0,1815,1817,5,241,0,0,1816,1815,1,0,0,0,1816,1817, + 1,0,0,0,1817,1818,1,0,0,0,1818,1819,5,342,0,0,1819,1820,5,388,0, + 0,1820,1823,3,264,132,0,1821,1822,5,127,0,0,1822,1824,3,362,181, + 0,1823,1821,1,0,0,0,1823,1824,1,0,0,0,1824,1826,1,0,0,0,1825,1759, + 1,0,0,0,1825,1770,1,0,0,0,1825,1785,1,0,0,0,1825,1792,1,0,0,0,1825, + 1798,1,0,0,0,1825,1802,1,0,0,0,1825,1803,1,0,0,0,1825,1808,1,0,0, + 0,1825,1816,1,0,0,0,1826,261,1,0,0,0,1827,1829,5,241,0,0,1828,1827, + 1,0,0,0,1828,1829,1,0,0,0,1829,1830,1,0,0,0,1830,1831,5,202,0,0, + 1831,1845,7,29,0,0,1832,1833,5,516,0,0,1833,1846,5,517,0,0,1834, + 1835,5,516,0,0,1835,1840,3,256,128,0,1836,1837,5,520,0,0,1837,1839, + 3,256,128,0,1838,1836,1,0,0,0,1839,1842,1,0,0,0,1840,1838,1,0,0, + 0,1840,1841,1,0,0,0,1841,1843,1,0,0,0,1842,1840,1,0,0,0,1843,1844, + 5,517,0,0,1844,1846,1,0,0,0,1845,1832,1,0,0,0,1845,1834,1,0,0,0, + 1846,1857,1,0,0,0,1847,1849,5,241,0,0,1848,1847,1,0,0,0,1848,1849, + 1,0,0,0,1849,1850,1,0,0,0,1850,1851,5,202,0,0,1851,1854,3,264,132, + 0,1852,1853,5,127,0,0,1853,1855,3,362,181,0,1854,1852,1,0,0,0,1854, + 1855,1,0,0,0,1855,1857,1,0,0,0,1856,1828,1,0,0,0,1856,1848,1,0,0, + 0,1857,263,1,0,0,0,1858,1859,6,132,-1,0,1859,1863,3,268,134,0,1860, + 1861,7,30,0,0,1861,1863,3,264,132,7,1862,1858,1,0,0,0,1862,1860, + 1,0,0,0,1863,1885,1,0,0,0,1864,1865,10,6,0,0,1865,1866,7,31,0,0, + 1866,1884,3,264,132,7,1867,1868,10,5,0,0,1868,1869,7,32,0,0,1869, + 1884,3,264,132,6,1870,1871,10,4,0,0,1871,1872,5,511,0,0,1872,1884, + 3,264,132,5,1873,1874,10,3,0,0,1874,1875,5,512,0,0,1875,1884,3,264, + 132,4,1876,1877,10,2,0,0,1877,1878,5,510,0,0,1878,1884,3,264,132, + 3,1879,1880,10,1,0,0,1880,1881,3,350,175,0,1881,1882,3,264,132,2, + 1882,1884,1,0,0,0,1883,1864,1,0,0,0,1883,1867,1,0,0,0,1883,1870, + 1,0,0,0,1883,1873,1,0,0,0,1883,1876,1,0,0,0,1883,1879,1,0,0,0,1884, + 1887,1,0,0,0,1885,1883,1,0,0,0,1885,1886,1,0,0,0,1886,265,1,0,0, + 0,1887,1885,1,0,0,0,1888,1908,3,376,188,0,1889,1908,3,274,137,0, + 1890,1891,3,276,138,0,1891,1903,5,516,0,0,1892,1894,3,368,184,0, + 1893,1892,1,0,0,0,1893,1894,1,0,0,0,1894,1895,1,0,0,0,1895,1900, + 3,278,139,0,1896,1897,5,520,0,0,1897,1899,3,278,139,0,1898,1896, + 1,0,0,0,1899,1902,1,0,0,0,1900,1898,1,0,0,0,1900,1901,1,0,0,0,1901, + 1904,1,0,0,0,1902,1900,1,0,0,0,1903,1893,1,0,0,0,1903,1904,1,0,0, + 0,1904,1905,1,0,0,0,1905,1906,5,517,0,0,1906,1908,1,0,0,0,1907,1888, + 1,0,0,0,1907,1889,1,0,0,0,1907,1890,1,0,0,0,1908,267,1,0,0,0,1909, + 1910,6,134,-1,0,1910,1912,5,40,0,0,1911,1913,3,314,157,0,1912,1911, + 1,0,0,0,1913,1914,1,0,0,0,1914,1912,1,0,0,0,1914,1915,1,0,0,0,1915, + 1918,1,0,0,0,1916,1917,5,120,0,0,1917,1919,3,256,128,0,1918,1916, + 1,0,0,0,1918,1919,1,0,0,0,1919,1920,1,0,0,0,1920,1921,5,122,0,0, + 1921,1985,1,0,0,0,1922,1923,5,40,0,0,1923,1925,3,256,128,0,1924, + 1926,3,314,157,0,1925,1924,1,0,0,0,1926,1927,1,0,0,0,1927,1925,1, + 0,0,0,1927,1928,1,0,0,0,1928,1931,1,0,0,0,1929,1930,5,120,0,0,1930, + 1932,3,256,128,0,1931,1929,1,0,0,0,1931,1932,1,0,0,0,1932,1933,1, + 0,0,0,1933,1934,5,122,0,0,1934,1985,1,0,0,0,1935,1936,5,41,0,0,1936, + 1937,5,516,0,0,1937,1938,3,256,128,0,1938,1939,5,17,0,0,1939,1940, + 3,56,28,0,1940,1941,5,517,0,0,1941,1985,1,0,0,0,1942,1943,5,457, + 0,0,1943,1944,5,516,0,0,1944,1947,3,256,128,0,1945,1946,5,461,0, + 0,1946,1948,5,476,0,0,1947,1945,1,0,0,0,1947,1948,1,0,0,0,1948,1949, + 1,0,0,0,1949,1950,5,517,0,0,1950,1985,1,0,0,0,1951,1952,5,467,0, + 0,1952,1953,5,516,0,0,1953,1956,3,256,128,0,1954,1955,5,461,0,0, + 1955,1957,5,476,0,0,1956,1954,1,0,0,0,1956,1957,1,0,0,0,1957,1958, + 1,0,0,0,1958,1959,5,517,0,0,1959,1985,1,0,0,0,1960,1961,5,281,0, + 0,1961,1962,5,516,0,0,1962,1963,3,264,132,0,1963,1964,5,170,0,0, + 1964,1965,3,264,132,0,1965,1966,5,517,0,0,1966,1985,1,0,0,0,1967, + 1985,3,358,179,0,1968,1985,5,527,0,0,1969,1970,3,332,166,0,1970, + 1971,5,513,0,0,1971,1972,5,527,0,0,1972,1985,1,0,0,0,1973,1974,5, + 516,0,0,1974,1975,3,156,78,0,1975,1976,5,517,0,0,1976,1985,1,0,0, + 0,1977,1985,3,266,133,0,1978,1985,3,308,154,0,1979,1985,3,280,140, + 0,1980,1981,5,516,0,0,1981,1982,3,256,128,0,1982,1983,5,517,0,0, + 1983,1985,1,0,0,0,1984,1909,1,0,0,0,1984,1922,1,0,0,0,1984,1935, + 1,0,0,0,1984,1942,1,0,0,0,1984,1951,1,0,0,0,1984,1960,1,0,0,0,1984, + 1967,1,0,0,0,1984,1968,1,0,0,0,1984,1969,1,0,0,0,1984,1973,1,0,0, + 0,1984,1977,1,0,0,0,1984,1978,1,0,0,0,1984,1979,1,0,0,0,1984,1980, + 1,0,0,0,1985,1993,1,0,0,0,1986,1987,10,4,0,0,1987,1988,5,514,0,0, + 1988,1989,3,264,132,0,1989,1990,5,515,0,0,1990,1992,1,0,0,0,1991, + 1986,1,0,0,0,1992,1995,1,0,0,0,1993,1991,1,0,0,0,1993,1994,1,0,0, + 0,1994,269,1,0,0,0,1995,1993,1,0,0,0,1996,1997,3,332,166,0,1997, + 271,1,0,0,0,1998,2003,3,380,190,0,1999,2003,3,376,188,0,2000,2003, + 3,378,189,0,2001,2003,3,332,166,0,2002,1998,1,0,0,0,2002,1999,1, + 0,0,0,2002,2000,1,0,0,0,2002,2001,1,0,0,0,2003,273,1,0,0,0,2004, + 2005,3,378,189,0,2005,2006,5,537,0,0,2006,2009,1,0,0,0,2007,2009, + 3,286,143,0,2008,2004,1,0,0,0,2008,2007,1,0,0,0,2009,275,1,0,0,0, + 2010,2013,3,380,190,0,2011,2013,3,332,166,0,2012,2010,1,0,0,0,2012, + 2011,1,0,0,0,2013,277,1,0,0,0,2014,2019,3,374,187,0,2015,2019,3, + 372,186,0,2016,2019,3,370,185,0,2017,2019,3,256,128,0,2018,2014, + 1,0,0,0,2018,2015,1,0,0,0,2018,2016,1,0,0,0,2018,2017,1,0,0,0,2019, + 279,1,0,0,0,2020,2021,3,332,166,0,2021,281,1,0,0,0,2022,2023,3,308, + 154,0,2023,283,1,0,0,0,2024,2027,3,308,154,0,2025,2027,3,280,140, + 0,2026,2024,1,0,0,0,2026,2025,1,0,0,0,2027,285,1,0,0,0,2028,2031, + 5,182,0,0,2029,2032,3,288,144,0,2030,2032,3,292,146,0,2031,2029, + 1,0,0,0,2031,2030,1,0,0,0,2031,2032,1,0,0,0,2032,287,1,0,0,0,2033, + 2035,3,290,145,0,2034,2036,3,294,147,0,2035,2034,1,0,0,0,2035,2036, + 1,0,0,0,2036,289,1,0,0,0,2037,2038,3,296,148,0,2038,2039,3,372,186, + 0,2039,2041,1,0,0,0,2040,2037,1,0,0,0,2041,2042,1,0,0,0,2042,2040, + 1,0,0,0,2042,2043,1,0,0,0,2043,291,1,0,0,0,2044,2047,3,294,147,0, + 2045,2048,3,290,145,0,2046,2048,3,294,147,0,2047,2045,1,0,0,0,2047, + 2046,1,0,0,0,2047,2048,1,0,0,0,2048,293,1,0,0,0,2049,2050,3,296, + 148,0,2050,2051,3,372,186,0,2051,2052,5,388,0,0,2052,2053,3,372, + 186,0,2053,295,1,0,0,0,2054,2056,7,33,0,0,2055,2054,1,0,0,0,2055, + 2056,1,0,0,0,2056,2057,1,0,0,0,2057,2060,7,34,0,0,2058,2060,5,537, + 0,0,2059,2055,1,0,0,0,2059,2058,1,0,0,0,2060,297,1,0,0,0,2061,2063, + 5,17,0,0,2062,2061,1,0,0,0,2062,2063,1,0,0,0,2063,2064,1,0,0,0,2064, + 2066,3,308,154,0,2065,2067,3,304,152,0,2066,2065,1,0,0,0,2066,2067, + 1,0,0,0,2067,299,1,0,0,0,2068,2069,3,308,154,0,2069,2070,3,302,151, + 0,2070,301,1,0,0,0,2071,2072,5,221,0,0,2072,2074,3,308,154,0,2073, + 2071,1,0,0,0,2074,2075,1,0,0,0,2075,2073,1,0,0,0,2075,2076,1,0,0, + 0,2076,2079,1,0,0,0,2077,2079,1,0,0,0,2078,2073,1,0,0,0,2078,2077, + 1,0,0,0,2079,303,1,0,0,0,2080,2081,5,516,0,0,2081,2082,3,306,153, + 0,2082,2083,5,517,0,0,2083,305,1,0,0,0,2084,2089,3,308,154,0,2085, + 2086,5,520,0,0,2086,2088,3,308,154,0,2087,2085,1,0,0,0,2088,2091, + 1,0,0,0,2089,2087,1,0,0,0,2089,2090,1,0,0,0,2090,307,1,0,0,0,2091, + 2089,1,0,0,0,2092,2096,3,310,155,0,2093,2096,3,312,156,0,2094,2096, + 3,382,191,0,2095,2092,1,0,0,0,2095,2093,1,0,0,0,2095,2094,1,0,0, + 0,2096,309,1,0,0,0,2097,2098,7,35,0,0,2098,311,1,0,0,0,2099,2100, + 5,537,0,0,2100,313,1,0,0,0,2101,2102,5,428,0,0,2102,2103,3,256,128, + 0,2103,2104,5,376,0,0,2104,2105,3,256,128,0,2105,315,1,0,0,0,2106, + 2107,3,308,154,0,2107,317,1,0,0,0,2108,2109,3,308,154,0,2109,319, + 1,0,0,0,2110,2113,3,308,154,0,2111,2112,5,513,0,0,2112,2114,3,308, + 154,0,2113,2111,1,0,0,0,2113,2114,1,0,0,0,2114,321,1,0,0,0,2115, + 2118,3,308,154,0,2116,2117,5,513,0,0,2117,2119,3,308,154,0,2118, + 2116,1,0,0,0,2118,2119,1,0,0,0,2119,323,1,0,0,0,2120,2123,3,308, + 154,0,2121,2122,5,513,0,0,2122,2124,3,308,154,0,2123,2121,1,0,0, + 0,2123,2124,1,0,0,0,2124,2133,1,0,0,0,2125,2126,3,308,154,0,2126, + 2127,5,513,0,0,2127,2130,3,308,154,0,2128,2129,5,513,0,0,2129,2131, + 3,308,154,0,2130,2128,1,0,0,0,2130,2131,1,0,0,0,2131,2133,1,0,0, + 0,2132,2120,1,0,0,0,2132,2125,1,0,0,0,2133,325,1,0,0,0,2134,2137, + 3,308,154,0,2135,2136,5,513,0,0,2136,2138,3,308,154,0,2137,2135, + 1,0,0,0,2137,2138,1,0,0,0,2138,2147,1,0,0,0,2139,2140,3,308,154, + 0,2140,2141,5,513,0,0,2141,2144,3,308,154,0,2142,2143,5,513,0,0, + 2143,2145,3,308,154,0,2144,2142,1,0,0,0,2144,2145,1,0,0,0,2145,2147, + 1,0,0,0,2146,2134,1,0,0,0,2146,2139,1,0,0,0,2147,327,1,0,0,0,2148, + 2151,3,308,154,0,2149,2150,5,513,0,0,2150,2152,3,308,154,0,2151, + 2149,1,0,0,0,2151,2152,1,0,0,0,2152,2161,1,0,0,0,2153,2154,3,308, + 154,0,2154,2155,5,513,0,0,2155,2158,3,308,154,0,2156,2157,5,513, + 0,0,2157,2159,3,308,154,0,2158,2156,1,0,0,0,2158,2159,1,0,0,0,2159, + 2161,1,0,0,0,2160,2148,1,0,0,0,2160,2153,1,0,0,0,2161,329,1,0,0, + 0,2162,2165,3,308,154,0,2163,2164,5,513,0,0,2164,2166,3,308,154, + 0,2165,2163,1,0,0,0,2165,2166,1,0,0,0,2166,2175,1,0,0,0,2167,2168, + 3,308,154,0,2168,2169,5,513,0,0,2169,2172,3,308,154,0,2170,2171, + 5,513,0,0,2171,2173,3,308,154,0,2172,2170,1,0,0,0,2172,2173,1,0, + 0,0,2173,2175,1,0,0,0,2174,2162,1,0,0,0,2174,2167,1,0,0,0,2175,331, + 1,0,0,0,2176,2181,3,308,154,0,2177,2178,5,513,0,0,2178,2180,3,308, + 154,0,2179,2177,1,0,0,0,2180,2183,1,0,0,0,2181,2182,1,0,0,0,2181, + 2179,1,0,0,0,2182,333,1,0,0,0,2183,2181,1,0,0,0,2184,2185,5,433, + 0,0,2185,2186,3,340,170,0,2186,335,1,0,0,0,2187,2188,5,167,0,0,2188, + 2189,5,241,0,0,2189,2190,5,133,0,0,2190,337,1,0,0,0,2191,2192,5, + 167,0,0,2192,2193,5,133,0,0,2193,339,1,0,0,0,2194,2195,5,516,0,0, + 2195,2200,3,342,171,0,2196,2197,5,520,0,0,2197,2199,3,342,171,0, + 2198,2196,1,0,0,0,2199,2202,1,0,0,0,2200,2198,1,0,0,0,2200,2201, + 1,0,0,0,2201,2203,1,0,0,0,2202,2200,1,0,0,0,2203,2204,5,517,0,0, + 2204,341,1,0,0,0,2205,2210,3,344,172,0,2206,2208,5,505,0,0,2207, + 2206,1,0,0,0,2207,2208,1,0,0,0,2208,2209,1,0,0,0,2209,2211,3,346, + 173,0,2210,2207,1,0,0,0,2210,2211,1,0,0,0,2211,343,1,0,0,0,2212, + 2216,3,308,154,0,2213,2216,3,280,140,0,2214,2216,5,537,0,0,2215, + 2212,1,0,0,0,2215,2213,1,0,0,0,2215,2214,1,0,0,0,2216,345,1,0,0, + 0,2217,2222,5,538,0,0,2218,2222,5,539,0,0,2219,2222,3,366,183,0, + 2220,2222,5,537,0,0,2221,2217,1,0,0,0,2221,2218,1,0,0,0,2221,2219, + 1,0,0,0,2221,2220,1,0,0,0,2222,347,1,0,0,0,2223,2230,5,10,0,0,2224, + 2225,5,511,0,0,2225,2230,5,511,0,0,2226,2230,5,257,0,0,2227,2228, + 5,510,0,0,2228,2230,5,510,0,0,2229,2223,1,0,0,0,2229,2224,1,0,0, + 0,2229,2226,1,0,0,0,2229,2227,1,0,0,0,2230,349,1,0,0,0,2231,2246, + 5,505,0,0,2232,2246,5,506,0,0,2233,2246,5,507,0,0,2234,2235,5,507, + 0,0,2235,2246,5,505,0,0,2236,2237,5,506,0,0,2237,2246,5,505,0,0, + 2238,2239,5,507,0,0,2239,2246,5,506,0,0,2240,2241,5,508,0,0,2241, + 2246,5,505,0,0,2242,2243,5,507,0,0,2243,2244,5,505,0,0,2244,2246, + 5,506,0,0,2245,2231,1,0,0,0,2245,2232,1,0,0,0,2245,2233,1,0,0,0, + 2245,2234,1,0,0,0,2245,2236,1,0,0,0,2245,2238,1,0,0,0,2245,2240, + 1,0,0,0,2245,2242,1,0,0,0,2246,351,1,0,0,0,2247,2248,5,507,0,0,2248, + 2255,5,507,0,0,2249,2250,5,506,0,0,2250,2255,5,506,0,0,2251,2255, + 5,511,0,0,2252,2255,5,512,0,0,2253,2255,5,510,0,0,2254,2247,1,0, + 0,0,2254,2249,1,0,0,0,2254,2251,1,0,0,0,2254,2252,1,0,0,0,2254,2253, + 1,0,0,0,2255,353,1,0,0,0,2256,2257,7,36,0,0,2257,355,1,0,0,0,2258, + 2259,7,37,0,0,2259,357,1,0,0,0,2260,2275,3,286,143,0,2261,2275,3, + 360,180,0,2262,2275,3,362,181,0,2263,2265,5,529,0,0,2264,2263,1, + 0,0,0,2264,2265,1,0,0,0,2265,2266,1,0,0,0,2266,2275,3,364,182,0, + 2267,2275,3,366,183,0,2268,2275,5,539,0,0,2269,2275,5,540,0,0,2270, + 2272,5,241,0,0,2271,2270,1,0,0,0,2271,2272,1,0,0,0,2272,2273,1,0, + 0,0,2273,2275,5,244,0,0,2274,2260,1,0,0,0,2274,2261,1,0,0,0,2274, + 2262,1,0,0,0,2274,2264,1,0,0,0,2274,2267,1,0,0,0,2274,2268,1,0,0, + 0,2274,2269,1,0,0,0,2274,2271,1,0,0,0,2275,359,1,0,0,0,2276,2277, + 3,370,185,0,2277,2278,3,362,181,0,2278,361,1,0,0,0,2279,2280,5,537, + 0,0,2280,363,1,0,0,0,2281,2282,5,538,0,0,2282,365,1,0,0,0,2283,2284, + 7,38,0,0,2284,367,1,0,0,0,2285,2286,7,39,0,0,2286,369,1,0,0,0,2287, + 2288,7,40,0,0,2288,371,1,0,0,0,2289,2290,7,41,0,0,2290,373,1,0,0, + 0,2291,2292,7,42,0,0,2292,375,1,0,0,0,2293,2294,7,43,0,0,2294,377, + 1,0,0,0,2295,2296,7,44,0,0,2296,379,1,0,0,0,2297,2298,7,45,0,0,2298, + 381,1,0,0,0,2299,2300,7,46,0,0,2300,383,1,0,0,0,272,387,394,397, + 411,429,433,442,447,454,465,474,486,489,496,499,507,511,516,519, + 526,534,538,550,558,562,594,597,602,606,610,614,623,628,632,636, + 641,644,648,653,659,664,669,673,677,681,689,697,701,705,709,713, + 717,721,725,729,731,741,749,773,787,792,796,802,805,808,815,818, + 827,839,863,875,880,884,892,896,902,912,917,923,927,931,935,944, + 948,955,958,968,976,984,988,1003,1022,1033,1037,1044,1049,1055,1059, + 1066,1070,1074,1078,1086,1090,1095,1101,1107,1110,1114,1125,1134, + 1148,1160,1175,1178,1182,1185,1187,1192,1196,1199,1203,1212,1221, + 1231,1236,1247,1250,1253,1256,1259,1265,1269,1277,1280,1285,1288, + 1292,1295,1297,1311,1322,1327,1335,1338,1341,1346,1348,1350,1355, + 1358,1362,1366,1375,1386,1413,1435,1448,1460,1473,1485,1497,1503, + 1530,1538,1542,1545,1548,1555,1558,1561,1564,1567,1570,1575,1578, + 1587,1592,1596,1601,1607,1612,1616,1635,1643,1651,1655,1659,1669, + 1695,1703,1715,1737,1739,1750,1753,1755,1759,1763,1770,1779,1785, + 1798,1805,1810,1816,1823,1825,1828,1840,1845,1848,1854,1856,1862, + 1883,1885,1893,1900,1903,1907,1914,1918,1927,1931,1947,1956,1984, + 1993,2002,2008,2012,2018,2026,2031,2035,2042,2047,2055,2059,2062, + 2066,2075,2078,2089,2095,2113,2118,2123,2130,2132,2137,2144,2146, + 2151,2158,2160,2165,2172,2174,2181,2200,2207,2210,2215,2221,2229, + 2245,2254,2264,2271,2274 ]; private static __ATN: antlr.ATN; @@ -13560,6 +13898,7 @@ export class CreateTableContext extends antlr.ParserRuleContext { export class SimpleCreateTableContext extends antlr.ParserRuleContext { + public _comment?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -13614,8 +13953,8 @@ export class SimpleCreateTableContext extends antlr.ParserRuleContext { public selfDefinitionClause(): SelfDefinitionClauseContext | null { return this.getRuleContext(0, SelfDefinitionClauseContext); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_COMMENT, 0); } public partitionDefinition(): PartitionDefinitionContext | null { return this.getRuleContext(0, PartitionDefinitionContext); @@ -13623,6 +13962,9 @@ export class SimpleCreateTableContext extends antlr.ParserRuleContext { public likeDefinition(): LikeDefinitionContext | null { return this.getRuleContext(0, LikeDefinitionContext); } + public STRING_LITERAL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); + } public override get ruleIndex(): number { return FlinkSqlParser.RULE_simpleCreateTable; } @@ -13731,6 +14073,7 @@ export class ColumnOptionDefinitionContext extends antlr.ParserRuleContext { export class PhysicalColumnDefinitionContext extends antlr.ParserRuleContext { + public _comment?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -13743,8 +14086,11 @@ export class PhysicalColumnDefinitionContext extends antlr.ParserRuleContext { public columnConstraint(): ColumnConstraintContext | null { return this.getRuleContext(0, ColumnConstraintContext); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_COMMENT, 0); + } + public STRING_LITERAL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); } public override get ruleIndex(): number { return FlinkSqlParser.RULE_physicalColumnDefinition; @@ -13884,8 +14230,7 @@ export class ColumnNameListContext extends antlr.ParserRuleContext { export class ColumnTypeContext extends antlr.ParserRuleContext { - public _typeName?: Token | null; - public _type_?: Token | null; + public _colType?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -14237,8 +14582,8 @@ export class RowTypeDimensionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public LESS_SYMBOL(): antlr.TerminalNode { - return this.getToken(FlinkSqlParser.LESS_SYMBOL, 0)!; + public LESS_SYMBOL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.LESS_SYMBOL, 0); } public columnName(): ColumnNameContext[]; public columnName(i: number): ColumnNameContext | null; @@ -14258,8 +14603,8 @@ export class RowTypeDimensionContext extends antlr.ParserRuleContext { return this.getRuleContext(i, ColumnTypeContext); } - public GREATER_SYMBOL(): antlr.TerminalNode { - return this.getToken(FlinkSqlParser.GREATER_SYMBOL, 0)!; + public GREATER_SYMBOL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.GREATER_SYMBOL, 0); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -14270,6 +14615,12 @@ export class RowTypeDimensionContext extends antlr.ParserRuleContext { return this.getToken(FlinkSqlParser.COMMA, i); } } + public LR_BRACKET(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public RR_BRACKET(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } public override get ruleIndex(): number { return FlinkSqlParser.RULE_rowTypeDimension; } @@ -14341,39 +14692,6 @@ export class ColumnConstraintContext extends antlr.ParserRuleContext { } -export class CommentSpecContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_COMMENT(): antlr.TerminalNode { - return this.getToken(FlinkSqlParser.KW_COMMENT, 0)!; - } - public STRING_LITERAL(): antlr.TerminalNode { - return this.getToken(FlinkSqlParser.STRING_LITERAL, 0)!; - } - public override get ruleIndex(): number { - return FlinkSqlParser.RULE_commentSpec; - } - public override enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterCommentSpec) { - listener.enterCommentSpec(this); - } - } - public override exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitCommentSpec) { - listener.exitCommentSpec(this); - } - } - public override accept(visitor: FlinkSqlParserVisitor): Result | null { - if (visitor.visitCommentSpec) { - return visitor.visitCommentSpec(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class MetadataColumnDefinitionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -14450,6 +14768,7 @@ export class MetadataKeyContext extends antlr.ParserRuleContext { export class ComputedColumnDefinitionContext extends antlr.ParserRuleContext { + public _comment?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -14462,8 +14781,11 @@ export class ComputedColumnDefinitionContext extends antlr.ParserRuleContext { public computedColumnExpression(): ComputedColumnExpressionContext { return this.getRuleContext(0, ComputedColumnExpressionContext)!; } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_COMMENT, 0); + } + public STRING_LITERAL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); } public override get ruleIndex(): number { return FlinkSqlParser.RULE_computedColumnDefinition; @@ -15022,6 +15344,7 @@ export class CreateCatalogContext extends antlr.ParserRuleContext { export class CreateDatabaseContext extends antlr.ParserRuleContext { + public _comment?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -15040,8 +15363,11 @@ export class CreateDatabaseContext extends antlr.ParserRuleContext { public ifNotExists(): IfNotExistsContext | null { return this.getRuleContext(0, IfNotExistsContext); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_COMMENT, 0); + } + public STRING_LITERAL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); } public override get ruleIndex(): number { return FlinkSqlParser.RULE_createDatabase; @@ -15067,6 +15393,7 @@ export class CreateDatabaseContext extends antlr.ParserRuleContext { export class CreateViewContext extends antlr.ParserRuleContext { + public _comment?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -15094,8 +15421,11 @@ export class CreateViewContext extends antlr.ParserRuleContext { public columnNameList(): ColumnNameListContext | null { return this.getRuleContext(0, ColumnNameListContext); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_COMMENT, 0); + } + public STRING_LITERAL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); } public override get ruleIndex(): number { return FlinkSqlParser.RULE_createView; @@ -16634,12 +16964,12 @@ export class ProjectItemDefinitionContext extends antlr.ParserRuleContext { public overWindowItem(): OverWindowItemContext | null { return this.getRuleContext(0, OverWindowItemContext); } - public columnName(): ColumnNameContext | null { - return this.getRuleContext(0, ColumnNameContext); - } public expression(): ExpressionContext | null { return this.getRuleContext(0, ExpressionContext); } + public columnName(): ColumnNameContext | null { + return this.getRuleContext(0, ColumnNameContext); + } public KW_AS(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_AS, 0); } @@ -16877,56 +17207,20 @@ export class TablePrimaryContext extends antlr.ParserRuleContext { public systemTimePeriod(): SystemTimePeriodContext | null { return this.getRuleContext(0, SystemTimePeriodContext); } - public correlationName(): CorrelationNameContext | null { - return this.getRuleContext(0, CorrelationNameContext); - } - public KW_AS(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_AS, 0); - } public viewPath(): ViewPathContext | null { return this.getRuleContext(0, ViewPathContext); } public KW_LATERAL(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_LATERAL, 0); } - public LR_BRACKET(): antlr.TerminalNode[]; - public LR_BRACKET(i: number): antlr.TerminalNode | null; - public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(FlinkSqlParser.LR_BRACKET); - } else { - return this.getToken(FlinkSqlParser.LR_BRACKET, i); - } - } - public functionName(): FunctionNameContext | null { - return this.getRuleContext(0, FunctionNameContext); - } - public functionParam(): FunctionParamContext[]; - public functionParam(i: number): FunctionParamContext | null; - public functionParam(i?: number): FunctionParamContext[] | FunctionParamContext | null { - if (i === undefined) { - return this.getRuleContexts(FunctionParamContext); - } - - return this.getRuleContext(i, FunctionParamContext); + public LR_BRACKET(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); } - public RR_BRACKET(): antlr.TerminalNode[]; - public RR_BRACKET(i: number): antlr.TerminalNode | null; - public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(FlinkSqlParser.RR_BRACKET); - } else { - return this.getToken(FlinkSqlParser.RR_BRACKET, i); - } + public functionCallExpression(): FunctionCallExpressionContext | null { + return this.getRuleContext(0, FunctionCallExpressionContext); } - 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(FlinkSqlParser.COMMA); - } else { - return this.getToken(FlinkSqlParser.COMMA, i); - } + public RR_BRACKET(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); } public queryStatement(): QueryStatementContext | null { return this.getRuleContext(0, QueryStatementContext); @@ -18088,6 +18382,15 @@ export class PartitionByClauseContext extends antlr.ParserRuleContext { return this.getRuleContext(i, ColumnNameContext); } + public primaryExpression(): PrimaryExpressionContext[]; + public primaryExpression(i: number): PrimaryExpressionContext | null; + public primaryExpression(i?: number): PrimaryExpressionContext[] | PrimaryExpressionContext | null { + if (i === undefined) { + return this.getRuleContexts(PrimaryExpressionContext); + } + + return this.getRuleContext(i, PrimaryExpressionContext); + } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -19172,6 +19475,69 @@ export class ArithmeticUnaryContext extends ValueExpressionContext { } +export class FunctionCallExpressionContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public reservedKeywordsNoParamsUsedAsFuncName(): ReservedKeywordsNoParamsUsedAsFuncNameContext | null { + return this.getRuleContext(0, ReservedKeywordsNoParamsUsedAsFuncNameContext); + } + public functionNameAndParams(): FunctionNameAndParamsContext | null { + return this.getRuleContext(0, FunctionNameAndParamsContext); + } + public functionNameWithParams(): FunctionNameWithParamsContext | null { + return this.getRuleContext(0, FunctionNameWithParamsContext); + } + public LR_BRACKET(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.LR_BRACKET, 0); + } + public RR_BRACKET(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.RR_BRACKET, 0); + } + public functionParam(): FunctionParamContext[]; + public functionParam(i: number): FunctionParamContext | null; + public functionParam(i?: number): FunctionParamContext[] | FunctionParamContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionParamContext); + } + + return this.getRuleContext(i, FunctionParamContext); + } + 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(FlinkSqlParser.COMMA); + } else { + return this.getToken(FlinkSqlParser.COMMA, i); + } + } + public override get ruleIndex(): number { + return FlinkSqlParser.RULE_functionCallExpression; + } + public override enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterFunctionCallExpression) { + listener.enterFunctionCallExpression(this); + } + } + public override exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitFunctionCallExpression) { + listener.exitFunctionCallExpression(this); + } + } + public override accept(visitor: FlinkSqlParserVisitor): Result | null { + if (visitor.visitFunctionCallExpression) { + return visitor.visitFunctionCallExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class PrimaryExpressionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -19533,35 +19899,8 @@ export class FunctionCallContext extends PrimaryExpressionContext { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public functionName(): FunctionNameContext { - return this.getRuleContext(0, FunctionNameContext)!; - } - public LR_BRACKET(): antlr.TerminalNode { - return this.getToken(FlinkSqlParser.LR_BRACKET, 0)!; - } - public RR_BRACKET(): antlr.TerminalNode { - return this.getToken(FlinkSqlParser.RR_BRACKET, 0)!; - } - public functionParam(): FunctionParamContext[]; - public functionParam(i: number): FunctionParamContext | null; - public functionParam(i?: number): FunctionParamContext[] | FunctionParamContext | null { - if (i === undefined) { - return this.getRuleContexts(FunctionParamContext); - } - - return this.getRuleContext(i, FunctionParamContext); - } - 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(FlinkSqlParser.COMMA); - } else { - return this.getToken(FlinkSqlParser.COMMA, i); - } + public functionCallExpression(): FunctionCallExpressionContext { + return this.getRuleContext(0, FunctionCallExpressionContext)!; } public override enterRule(listener: FlinkSqlParserListener): void { if(listener.enterFunctionCall) { @@ -19672,32 +20011,6 @@ export class PositionContext extends PrimaryExpressionContext { } } } -export class DateFunctionExpressionContext extends PrimaryExpressionContext { - public constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); - } - public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode { - return this.getToken(FlinkSqlParser.KW_CURRENT_TIMESTAMP, 0)!; - } - public override enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterDateFunctionExpression) { - listener.enterDateFunctionExpression(this); - } - } - public override exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitDateFunctionExpression) { - listener.exitDateFunctionExpression(this); - } - } - public override accept(visitor: FlinkSqlParserVisitor): Result | null { - if (visitor.visitDateFunctionExpression) { - return visitor.visitDateFunctionExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} export class FirstContext extends PrimaryExpressionContext { public constructor(ctx: PrimaryExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -19778,6 +20091,12 @@ export class FunctionNameContext extends antlr.ParserRuleContext { public reservedKeywordsUsedAsFuncName(): ReservedKeywordsUsedAsFuncNameContext | null { return this.getRuleContext(0, ReservedKeywordsUsedAsFuncNameContext); } + public reservedKeywordsNoParamsUsedAsFuncName(): ReservedKeywordsNoParamsUsedAsFuncNameContext | null { + return this.getRuleContext(0, ReservedKeywordsNoParamsUsedAsFuncNameContext); + } + public reservedKeywordsFollowParamsUsedAsFuncName(): ReservedKeywordsFollowParamsUsedAsFuncNameContext | null { + return this.getRuleContext(0, ReservedKeywordsFollowParamsUsedAsFuncNameContext); + } public uid(): UidContext | null { return this.getRuleContext(0, UidContext); } @@ -19804,6 +20123,75 @@ export class FunctionNameContext extends antlr.ParserRuleContext { } +export class FunctionNameAndParamsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public reservedKeywordsFollowParamsUsedAsFuncName(): ReservedKeywordsFollowParamsUsedAsFuncNameContext | null { + return this.getRuleContext(0, ReservedKeywordsFollowParamsUsedAsFuncNameContext); + } + public STRING_LITERAL(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); + } + public timeIntervalExpression(): TimeIntervalExpressionContext | null { + return this.getRuleContext(0, TimeIntervalExpressionContext); + } + public override get ruleIndex(): number { + return FlinkSqlParser.RULE_functionNameAndParams; + } + public override enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterFunctionNameAndParams) { + listener.enterFunctionNameAndParams(this); + } + } + public override exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitFunctionNameAndParams) { + listener.exitFunctionNameAndParams(this); + } + } + public override accept(visitor: FlinkSqlParserVisitor): Result | null { + if (visitor.visitFunctionNameAndParams) { + return visitor.visitFunctionNameAndParams(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionNameWithParamsContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public reservedKeywordsUsedAsFuncName(): ReservedKeywordsUsedAsFuncNameContext | null { + return this.getRuleContext(0, ReservedKeywordsUsedAsFuncNameContext); + } + public uid(): UidContext | null { + return this.getRuleContext(0, UidContext); + } + public override get ruleIndex(): number { + return FlinkSqlParser.RULE_functionNameWithParams; + } + public override enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterFunctionNameWithParams) { + listener.enterFunctionNameWithParams(this); + } + } + public override exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitFunctionNameWithParams) { + listener.exitFunctionNameWithParams(this); + } + } + public override accept(visitor: FlinkSqlParserVisitor): Result | null { + if (visitor.visitFunctionNameWithParams) { + return visitor.visitFunctionNameWithParams(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class FunctionParamContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -20180,6 +20568,7 @@ export class IntervalValueContext extends antlr.ParserRuleContext { export class TableAliasContext extends antlr.ParserRuleContext { + public _alias?: IdentifierContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -21899,6 +22288,84 @@ export class ReservedKeywordsUsedAsFuncParamContext extends antlr.ParserRuleCont } +export class ReservedKeywordsNoParamsUsedAsFuncNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public KW_LOCALTIME(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_LOCALTIME, 0); + } + public KW_LOCALTIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_LOCALTIMESTAMP, 0); + } + public KW_CURRENT_TIME(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_CURRENT_TIME, 0); + } + public KW_CURRENT_DATE(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_CURRENT_DATE, 0); + } + public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_CURRENT_TIMESTAMP, 0); + } + public override get ruleIndex(): number { + return FlinkSqlParser.RULE_reservedKeywordsNoParamsUsedAsFuncName; + } + public override enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterReservedKeywordsNoParamsUsedAsFuncName) { + listener.enterReservedKeywordsNoParamsUsedAsFuncName(this); + } + } + public override exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitReservedKeywordsNoParamsUsedAsFuncName) { + listener.exitReservedKeywordsNoParamsUsedAsFuncName(this); + } + } + public override accept(visitor: FlinkSqlParserVisitor): Result | null { + if (visitor.visitReservedKeywordsNoParamsUsedAsFuncName) { + return visitor.visitReservedKeywordsNoParamsUsedAsFuncName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ReservedKeywordsFollowParamsUsedAsFuncNameContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public KW_DATE(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_DATE, 0); + } + public KW_TIME(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_TIME, 0); + } + public KW_TIMESTAMP(): antlr.TerminalNode | null { + return this.getToken(FlinkSqlParser.KW_TIMESTAMP, 0); + } + public override get ruleIndex(): number { + return FlinkSqlParser.RULE_reservedKeywordsFollowParamsUsedAsFuncName; + } + public override enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterReservedKeywordsFollowParamsUsedAsFuncName) { + listener.enterReservedKeywordsFollowParamsUsedAsFuncName(this); + } + } + public override exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitReservedKeywordsFollowParamsUsedAsFuncName) { + listener.exitReservedKeywordsFollowParamsUsedAsFuncName(this); + } + } + public override accept(visitor: FlinkSqlParserVisitor): Result | null { + if (visitor.visitReservedKeywordsFollowParamsUsedAsFuncName) { + return visitor.visitReservedKeywordsFollowParamsUsedAsFuncName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class ReservedKeywordsUsedAsFuncNameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -21936,18 +22403,6 @@ export class ReservedKeywordsUsedAsFuncNameContext extends antlr.ParserRuleConte public KW_CUME_DIST(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_CUME_DIST, 0); } - public KW_CURRENT_DATE(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_CURRENT_DATE, 0); - } - public KW_CURRENT_TIME(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_CURRENT_TIME, 0); - } - public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_CURRENT_TIMESTAMP, 0); - } - public KW_DATE(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_DATE, 0); - } public KW_DAYOFWEEK(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_DAYOFWEEK, 0); } @@ -21996,12 +22451,6 @@ export class ReservedKeywordsUsedAsFuncNameContext extends antlr.ParserRuleConte public KW_LN(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_LN, 0); } - public KW_LOCALTIME(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_LOCALTIME, 0); - } - public KW_LOCALTIMESTAMP(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_LOCALTIMESTAMP, 0); - } public KW_LOWER(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_LOWER, 0); } @@ -22074,12 +22523,6 @@ export class ReservedKeywordsUsedAsFuncNameContext extends antlr.ParserRuleConte public KW_SUM(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_SUM, 0); } - public KW_TIME(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_TIME, 0); - } - public KW_TIMESTAMP(): antlr.TerminalNode | null { - return this.getToken(FlinkSqlParser.KW_TIMESTAMP, 0); - } public KW_TIMESTAMP_DIFF(): antlr.TerminalNode | null { return this.getToken(FlinkSqlParser.KW_TIMESTAMP_DIFF, 0); } diff --git a/src/lib/flink/FlinkSqlParserListener.ts b/src/lib/flink/FlinkSqlParserListener.ts index bffad9eab..6a1b2ab97 100644 --- a/src/lib/flink/FlinkSqlParserListener.ts +++ b/src/lib/flink/FlinkSqlParserListener.ts @@ -44,7 +44,6 @@ import { LengthOneTypeDimensionContext } from "./FlinkSqlParser.js"; import { MapTypeDimensionContext } from "./FlinkSqlParser.js"; import { RowTypeDimensionContext } from "./FlinkSqlParser.js"; import { ColumnConstraintContext } from "./FlinkSqlParser.js"; -import { CommentSpecContext } from "./FlinkSqlParser.js"; import { MetadataColumnDefinitionContext } from "./FlinkSqlParser.js"; import { MetadataKeyContext } from "./FlinkSqlParser.js"; import { ComputedColumnDefinitionContext } from "./FlinkSqlParser.js"; @@ -150,6 +149,7 @@ import { ValueExpressionDefaultContext } from "./FlinkSqlParser.js"; import { ComparisonContext } from "./FlinkSqlParser.js"; import { ArithmeticBinaryContext } from "./FlinkSqlParser.js"; import { ArithmeticUnaryContext } from "./FlinkSqlParser.js"; +import { FunctionCallExpressionContext } from "./FlinkSqlParser.js"; import { DereferenceContext } from "./FlinkSqlParser.js"; import { SimpleCaseContext } from "./FlinkSqlParser.js"; import { ColumnReferenceContext } from "./FlinkSqlParser.js"; @@ -163,10 +163,11 @@ import { ParenthesizedExpressionContext } from "./FlinkSqlParser.js"; import { FunctionCallContext } from "./FlinkSqlParser.js"; import { SearchedCaseContext } from "./FlinkSqlParser.js"; import { PositionContext } from "./FlinkSqlParser.js"; -import { DateFunctionExpressionContext } from "./FlinkSqlParser.js"; import { FirstContext } from "./FlinkSqlParser.js"; import { FunctionNameCreateContext } from "./FlinkSqlParser.js"; import { FunctionNameContext } from "./FlinkSqlParser.js"; +import { FunctionNameAndParamsContext } from "./FlinkSqlParser.js"; +import { FunctionNameWithParamsContext } from "./FlinkSqlParser.js"; import { FunctionParamContext } from "./FlinkSqlParser.js"; import { DereferenceDefinitionContext } from "./FlinkSqlParser.js"; import { CorrelationNameContext } from "./FlinkSqlParser.js"; @@ -219,6 +220,8 @@ import { SetQuantifierContext } from "./FlinkSqlParser.js"; import { TimePointUnitContext } from "./FlinkSqlParser.js"; import { TimeIntervalUnitContext } from "./FlinkSqlParser.js"; import { ReservedKeywordsUsedAsFuncParamContext } from "./FlinkSqlParser.js"; +import { ReservedKeywordsNoParamsUsedAsFuncNameContext } from "./FlinkSqlParser.js"; +import { ReservedKeywordsFollowParamsUsedAsFuncNameContext } from "./FlinkSqlParser.js"; import { ReservedKeywordsUsedAsFuncNameContext } from "./FlinkSqlParser.js"; import { NonReservedKeywordsContext } from "./FlinkSqlParser.js"; @@ -588,16 +591,6 @@ export class FlinkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitColumnConstraint?: (ctx: ColumnConstraintContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.commentSpec`. - * @param ctx the parse tree - */ - enterCommentSpec?: (ctx: CommentSpecContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.commentSpec`. - * @param ctx the parse tree - */ - exitCommentSpec?: (ctx: CommentSpecContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.metadataColumnDefinition`. * @param ctx the parse tree @@ -1670,6 +1663,16 @@ export class FlinkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.functionCallExpression`. + * @param ctx the parse tree + */ + enterFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.functionCallExpression`. + * @param ctx the parse tree + */ + exitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; /** * Enter a parse tree produced by the `dereference` * labeled alternative in `FlinkSqlParser.primaryExpression`. @@ -1826,18 +1829,6 @@ export class FlinkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitPosition?: (ctx: PositionContext) => void; - /** - * Enter a parse tree produced by the `dateFunctionExpression` - * labeled alternative in `FlinkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterDateFunctionExpression?: (ctx: DateFunctionExpressionContext) => void; - /** - * Exit a parse tree produced by the `dateFunctionExpression` - * labeled alternative in `FlinkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitDateFunctionExpression?: (ctx: DateFunctionExpressionContext) => void; /** * Enter a parse tree produced by the `first` * labeled alternative in `FlinkSqlParser.primaryExpression`. @@ -1870,6 +1861,26 @@ export class FlinkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitFunctionName?: (ctx: FunctionNameContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.functionNameAndParams`. + * @param ctx the parse tree + */ + enterFunctionNameAndParams?: (ctx: FunctionNameAndParamsContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.functionNameAndParams`. + * @param ctx the parse tree + */ + exitFunctionNameAndParams?: (ctx: FunctionNameAndParamsContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.functionNameWithParams`. + * @param ctx the parse tree + */ + enterFunctionNameWithParams?: (ctx: FunctionNameWithParamsContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.functionNameWithParams`. + * @param ctx the parse tree + */ + exitFunctionNameWithParams?: (ctx: FunctionNameWithParamsContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.functionParam`. * @param ctx the parse tree @@ -2400,6 +2411,26 @@ export class FlinkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitReservedKeywordsUsedAsFuncParam?: (ctx: ReservedKeywordsUsedAsFuncParamContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.reservedKeywordsNoParamsUsedAsFuncName`. + * @param ctx the parse tree + */ + enterReservedKeywordsNoParamsUsedAsFuncName?: (ctx: ReservedKeywordsNoParamsUsedAsFuncNameContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.reservedKeywordsNoParamsUsedAsFuncName`. + * @param ctx the parse tree + */ + exitReservedKeywordsNoParamsUsedAsFuncName?: (ctx: ReservedKeywordsNoParamsUsedAsFuncNameContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.reservedKeywordsFollowParamsUsedAsFuncName`. + * @param ctx the parse tree + */ + enterReservedKeywordsFollowParamsUsedAsFuncName?: (ctx: ReservedKeywordsFollowParamsUsedAsFuncNameContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.reservedKeywordsFollowParamsUsedAsFuncName`. + * @param ctx the parse tree + */ + exitReservedKeywordsFollowParamsUsedAsFuncName?: (ctx: ReservedKeywordsFollowParamsUsedAsFuncNameContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.reservedKeywordsUsedAsFuncName`. * @param ctx the parse tree diff --git a/src/lib/flink/FlinkSqlParserVisitor.ts b/src/lib/flink/FlinkSqlParserVisitor.ts index d041068a4..1a02bd2fa 100644 --- a/src/lib/flink/FlinkSqlParserVisitor.ts +++ b/src/lib/flink/FlinkSqlParserVisitor.ts @@ -44,7 +44,6 @@ import { LengthOneTypeDimensionContext } from "./FlinkSqlParser.js"; import { MapTypeDimensionContext } from "./FlinkSqlParser.js"; import { RowTypeDimensionContext } from "./FlinkSqlParser.js"; import { ColumnConstraintContext } from "./FlinkSqlParser.js"; -import { CommentSpecContext } from "./FlinkSqlParser.js"; import { MetadataColumnDefinitionContext } from "./FlinkSqlParser.js"; import { MetadataKeyContext } from "./FlinkSqlParser.js"; import { ComputedColumnDefinitionContext } from "./FlinkSqlParser.js"; @@ -150,6 +149,7 @@ import { ValueExpressionDefaultContext } from "./FlinkSqlParser.js"; import { ComparisonContext } from "./FlinkSqlParser.js"; import { ArithmeticBinaryContext } from "./FlinkSqlParser.js"; import { ArithmeticUnaryContext } from "./FlinkSqlParser.js"; +import { FunctionCallExpressionContext } from "./FlinkSqlParser.js"; import { DereferenceContext } from "./FlinkSqlParser.js"; import { SimpleCaseContext } from "./FlinkSqlParser.js"; import { ColumnReferenceContext } from "./FlinkSqlParser.js"; @@ -163,10 +163,11 @@ import { ParenthesizedExpressionContext } from "./FlinkSqlParser.js"; import { FunctionCallContext } from "./FlinkSqlParser.js"; import { SearchedCaseContext } from "./FlinkSqlParser.js"; import { PositionContext } from "./FlinkSqlParser.js"; -import { DateFunctionExpressionContext } from "./FlinkSqlParser.js"; import { FirstContext } from "./FlinkSqlParser.js"; import { FunctionNameCreateContext } from "./FlinkSqlParser.js"; import { FunctionNameContext } from "./FlinkSqlParser.js"; +import { FunctionNameAndParamsContext } from "./FlinkSqlParser.js"; +import { FunctionNameWithParamsContext } from "./FlinkSqlParser.js"; import { FunctionParamContext } from "./FlinkSqlParser.js"; import { DereferenceDefinitionContext } from "./FlinkSqlParser.js"; import { CorrelationNameContext } from "./FlinkSqlParser.js"; @@ -219,6 +220,8 @@ import { SetQuantifierContext } from "./FlinkSqlParser.js"; import { TimePointUnitContext } from "./FlinkSqlParser.js"; import { TimeIntervalUnitContext } from "./FlinkSqlParser.js"; import { ReservedKeywordsUsedAsFuncParamContext } from "./FlinkSqlParser.js"; +import { ReservedKeywordsNoParamsUsedAsFuncNameContext } from "./FlinkSqlParser.js"; +import { ReservedKeywordsFollowParamsUsedAsFuncNameContext } from "./FlinkSqlParser.js"; import { ReservedKeywordsUsedAsFuncNameContext } from "./FlinkSqlParser.js"; import { NonReservedKeywordsContext } from "./FlinkSqlParser.js"; @@ -447,12 +450,6 @@ export class FlinkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.commentSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCommentSpec?: (ctx: CommentSpecContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.metadataColumnDefinition`. * @param ctx the parse tree @@ -1094,6 +1091,12 @@ export class FlinkSqlParserVisitor extends AbstractParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.functionCallExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => Result; /** * Visit a parse tree produced by the `dereference` * labeled alternative in `FlinkSqlParser.primaryExpression`. @@ -1185,13 +1188,6 @@ export class FlinkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by the `dateFunctionExpression` - * labeled alternative in `FlinkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDateFunctionExpression?: (ctx: DateFunctionExpressionContext) => Result; /** * Visit a parse tree produced by the `first` * labeled alternative in `FlinkSqlParser.primaryExpression`. @@ -1211,6 +1207,18 @@ export class FlinkSqlParserVisitor extends AbstractParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.functionNameAndParams`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionNameAndParams?: (ctx: FunctionNameAndParamsContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.functionNameWithParams`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionNameWithParams?: (ctx: FunctionNameWithParamsContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.functionParam`. * @param ctx the parse tree @@ -1528,6 +1536,18 @@ export class FlinkSqlParserVisitor extends AbstractParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.reservedKeywordsNoParamsUsedAsFuncName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReservedKeywordsNoParamsUsedAsFuncName?: (ctx: ReservedKeywordsNoParamsUsedAsFuncNameContext) => Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.reservedKeywordsFollowParamsUsedAsFuncName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReservedKeywordsFollowParamsUsedAsFuncName?: (ctx: ReservedKeywordsFollowParamsUsedAsFuncNameContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.reservedKeywordsUsedAsFuncName`. * @param ctx the parse tree diff --git a/src/lib/hive/HiveSqlParser.interp b/src/lib/hive/HiveSqlParser.interp index cc352e398..40d64452b 100644 --- a/src/lib/hive/HiveSqlParser.interp +++ b/src/lib/hive/HiveSqlParser.interp @@ -1230,4 +1230,4 @@ poolAssignList atn: -[4, 1, 438, 4801, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 1, 0, 5, 0, 694, 8, 0, 10, 0, 12, 0, 697, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 703, 8, 1, 1, 1, 3, 1, 706, 8, 1, 1, 2, 1, 2, 5, 2, 710, 8, 2, 10, 2, 12, 2, 713, 9, 2, 1, 2, 1, 2, 1, 2, 3, 2, 718, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 725, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 735, 8, 3, 1, 3, 3, 3, 738, 8, 3, 1, 3, 1, 3, 3, 3, 742, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 757, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 764, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 770, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 775, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 780, 8, 5, 1, 5, 3, 5, 783, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 805, 8, 5, 10, 5, 12, 5, 808, 9, 5, 1, 5, 1, 5, 5, 5, 812, 8, 5, 10, 5, 12, 5, 815, 9, 5, 3, 5, 817, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 822, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 827, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 833, 8, 6, 1, 7, 1, 7, 3, 7, 837, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 850, 8, 8, 1, 9, 1, 9, 3, 9, 854, 8, 9, 1, 9, 1, 9, 3, 9, 858, 8, 9, 1, 9, 1, 9, 1, 9, 3, 9, 863, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 870, 8, 10, 1, 10, 1, 10, 3, 10, 874, 8, 10, 1, 11, 1, 11, 1, 11, 3, 11, 879, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 886, 8, 12, 1, 12, 1, 12, 3, 12, 890, 8, 12, 1, 13, 1, 13, 1, 13, 3, 13, 895, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 4, 14, 941, 8, 14, 11, 14, 12, 14, 942, 1, 14, 1, 14, 1, 14, 4, 14, 948, 8, 14, 11, 14, 12, 14, 949, 1, 14, 1, 14, 1, 14, 3, 14, 955, 8, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 3, 21, 978, 8, 21, 1, 21, 1, 21, 3, 21, 982, 8, 21, 1, 21, 1, 21, 3, 21, 986, 8, 21, 1, 21, 3, 21, 989, 8, 21, 1, 21, 1, 21, 3, 21, 993, 8, 21, 1, 21, 1, 21, 1, 21, 3, 21, 998, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1004, 8, 21, 1, 21, 1, 21, 3, 21, 1008, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1014, 8, 21, 3, 21, 1016, 8, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 3, 24, 1027, 8, 24, 1, 24, 1, 24, 3, 24, 1031, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 3, 26, 1038, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 1046, 8, 26, 1, 26, 3, 26, 1049, 8, 26, 1, 27, 1, 27, 1, 27, 3, 27, 1054, 8, 27, 1, 27, 1, 27, 3, 27, 1058, 8, 27, 1, 27, 3, 27, 1061, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 3, 29, 1071, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1079, 8, 29, 5, 29, 1081, 8, 29, 10, 29, 12, 29, 1084, 9, 29, 3, 29, 1086, 8, 29, 1, 30, 1, 30, 3, 30, 1090, 8, 30, 1, 31, 1, 31, 3, 31, 1094, 8, 31, 1, 31, 3, 31, 1097, 8, 31, 1, 32, 1, 32, 1, 32, 3, 32, 1102, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1108, 8, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1113, 8, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1118, 8, 32, 1, 32, 1, 32, 3, 32, 1122, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1133, 8, 33, 3, 33, 1135, 8, 33, 1, 33, 1, 33, 3, 33, 1139, 8, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1149, 8, 36, 1, 36, 1, 36, 3, 36, 1153, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1159, 8, 36, 1, 36, 3, 36, 1162, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1169, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1174, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1182, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1187, 8, 36, 1, 36, 1, 36, 3, 36, 1191, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1199, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1204, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1210, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1216, 8, 36, 1, 36, 3, 36, 1219, 8, 36, 1, 36, 3, 36, 1222, 8, 36, 1, 36, 3, 36, 1225, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1234, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1242, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1247, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1255, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1262, 8, 36, 1, 36, 3, 36, 1265, 8, 36, 1, 36, 3, 36, 1268, 8, 36, 3, 36, 1270, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1281, 8, 36, 3, 36, 1283, 8, 36, 1, 36, 3, 36, 1286, 8, 36, 1, 36, 3, 36, 1289, 8, 36, 1, 36, 3, 36, 1292, 8, 36, 1, 36, 3, 36, 1295, 8, 36, 1, 36, 3, 36, 1298, 8, 36, 3, 36, 1300, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1312, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1318, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1326, 8, 36, 3, 36, 1328, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 1338, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 3, 45, 1371, 8, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1376, 8, 45, 1, 46, 1, 46, 3, 46, 1380, 8, 46, 1, 46, 1, 46, 3, 46, 1384, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 1391, 8, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1396, 8, 47, 10, 47, 12, 47, 1399, 9, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1404, 8, 47, 1, 48, 1, 48, 3, 48, 1408, 8, 48, 1, 48, 3, 48, 1411, 8, 48, 1, 48, 1, 48, 1, 48, 5, 48, 1416, 8, 48, 10, 48, 12, 48, 1419, 9, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1441, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 1446, 8, 53, 1, 53, 1, 53, 3, 53, 1450, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 3, 55, 1458, 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1467, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1474, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1480, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1487, 8, 58, 1, 58, 3, 58, 1490, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1496, 8, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1501, 8, 59, 10, 59, 12, 59, 1504, 9, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 1511, 8, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 5, 62, 1518, 8, 62, 10, 62, 12, 62, 1521, 9, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1529, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1536, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 3, 69, 1556, 8, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1563, 8, 69, 3, 69, 1565, 8, 69, 1, 70, 1, 70, 1, 70, 5, 70, 1570, 8, 70, 10, 70, 12, 70, 1573, 9, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 3, 73, 1582, 8, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1590, 8, 73, 1, 74, 1, 74, 3, 74, 1594, 8, 74, 1, 74, 1, 74, 3, 74, 1598, 8, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 1611, 8, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1620, 8, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1636, 8, 78, 1, 78, 1, 78, 3, 78, 1640, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1645, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1650, 8, 78, 1, 78, 3, 78, 1653, 8, 78, 1, 78, 3, 78, 1656, 8, 78, 1, 78, 3, 78, 1659, 8, 78, 1, 78, 3, 78, 1662, 8, 78, 1, 78, 3, 78, 1665, 8, 78, 1, 79, 1, 79, 1, 79, 3, 79, 1670, 8, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 3, 80, 1679, 8, 80, 1, 80, 1, 80, 3, 80, 1683, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1690, 8, 80, 1, 80, 3, 80, 1693, 8, 80, 1, 80, 3, 80, 1696, 8, 80, 1, 80, 3, 80, 1699, 8, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1711, 8, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 1717, 8, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 3, 87, 1743, 8, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1751, 8, 88, 1, 88, 1, 88, 3, 88, 1755, 8, 88, 1, 88, 3, 88, 1758, 8, 88, 1, 88, 3, 88, 1761, 8, 88, 1, 88, 3, 88, 1764, 8, 88, 1, 88, 3, 88, 1767, 8, 88, 1, 88, 3, 88, 1770, 8, 88, 1, 88, 3, 88, 1773, 8, 88, 1, 88, 3, 88, 1776, 8, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1785, 8, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1795, 8, 90, 1, 90, 3, 90, 1798, 8, 90, 1, 90, 1, 90, 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, 3, 93, 1818, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1824, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1830, 8, 94, 1, 94, 3, 94, 1833, 8, 94, 3, 94, 1835, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 3, 96, 1842, 8, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 3, 97, 1849, 8, 97, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 1862, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 1867, 8, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 5, 101, 1874, 8, 101, 10, 101, 12, 101, 1877, 9, 101, 1, 102, 1, 102, 1, 102, 5, 102, 1882, 8, 102, 10, 102, 12, 102, 1885, 9, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1892, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1905, 8, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1918, 8, 104, 1, 104, 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, 3, 105, 1934, 8, 105, 1, 106, 1, 106, 3, 106, 1938, 8, 106, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 1953, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 1959, 8, 110, 1, 110, 3, 110, 1962, 8, 110, 1, 110, 3, 110, 1965, 8, 110, 1, 110, 3, 110, 1968, 8, 110, 1, 110, 3, 110, 1971, 8, 110, 1, 111, 1, 111, 3, 111, 1975, 8, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1988, 8, 114, 10, 114, 12, 114, 1991, 9, 114, 3, 114, 1993, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 5, 116, 2002, 8, 116, 10, 116, 12, 116, 2005, 9, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 2018, 8, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2052, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2060, 8, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2065, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2073, 8, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2078, 8, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2083, 8, 123, 1, 124, 1, 124, 1, 124, 5, 124, 2088, 8, 124, 10, 124, 12, 124, 2091, 9, 124, 1, 125, 1, 125, 1, 125, 5, 125, 2096, 8, 125, 10, 125, 12, 125, 2099, 9, 125, 1, 126, 1, 126, 1, 126, 5, 126, 2104, 8, 126, 10, 126, 12, 126, 2107, 9, 126, 1, 127, 1, 127, 1, 127, 5, 127, 2112, 8, 127, 10, 127, 12, 127, 2115, 9, 127, 1, 128, 1, 128, 3, 128, 2119, 8, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 2129, 8, 130, 5, 130, 2131, 8, 130, 10, 130, 12, 130, 2134, 9, 130, 1, 131, 1, 131, 1, 131, 5, 131, 2139, 8, 131, 10, 131, 12, 131, 2142, 9, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 3, 133, 2150, 8, 133, 1, 133, 3, 133, 2153, 8, 133, 1, 134, 1, 134, 3, 134, 2157, 8, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 3, 136, 2164, 8, 136, 1, 137, 1, 137, 1, 138, 1, 138, 3, 138, 2170, 8, 138, 1, 138, 1, 138, 3, 138, 2174, 8, 138, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 2180, 8, 139, 1, 140, 1, 140, 3, 140, 2184, 8, 140, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 3, 143, 2196, 8, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 2205, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 3, 144, 2216, 8, 144, 1, 145, 1, 145, 3, 145, 2220, 8, 145, 1, 146, 1, 146, 1, 146, 5, 146, 2225, 8, 146, 10, 146, 12, 146, 2228, 9, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 5, 148, 2237, 8, 148, 10, 148, 12, 148, 2240, 9, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 3, 151, 2249, 8, 151, 1, 151, 3, 151, 2252, 8, 151, 1, 152, 1, 152, 1, 152, 5, 152, 2257, 8, 152, 10, 152, 12, 152, 2260, 9, 152, 1, 153, 1, 153, 1, 153, 3, 153, 2265, 8, 153, 1, 154, 1, 154, 3, 154, 2269, 8, 154, 1, 154, 3, 154, 2272, 8, 154, 1, 154, 3, 154, 2275, 8, 154, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 2281, 8, 155, 1, 156, 1, 156, 3, 156, 2285, 8, 156, 1, 157, 1, 157, 3, 157, 2289, 8, 157, 1, 158, 1, 158, 1, 158, 3, 158, 2294, 8, 158, 1, 158, 1, 158, 3, 158, 2298, 8, 158, 1, 159, 1, 159, 3, 159, 2302, 8, 159, 1, 160, 1, 160, 3, 160, 2306, 8, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 3, 160, 2314, 8, 160, 1, 161, 1, 161, 3, 161, 2318, 8, 161, 1, 161, 1, 161, 3, 161, 2322, 8, 161, 1, 162, 1, 162, 3, 162, 2326, 8, 162, 1, 163, 1, 163, 3, 163, 2330, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2338, 8, 163, 1, 164, 1, 164, 3, 164, 2342, 8, 164, 1, 164, 1, 164, 3, 164, 2346, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2354, 8, 165, 1, 166, 1, 166, 1, 166, 3, 166, 2359, 8, 166, 1, 167, 1, 167, 1, 167, 3, 167, 2364, 8, 167, 1, 168, 1, 168, 3, 168, 2368, 8, 168, 1, 169, 1, 169, 3, 169, 2372, 8, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2379, 8, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 5, 172, 2386, 8, 172, 10, 172, 12, 172, 2389, 9, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2396, 8, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2408, 8, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2426, 8, 174, 1, 174, 3, 174, 2429, 8, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2435, 8, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 3, 179, 2461, 8, 179, 1, 180, 3, 180, 2464, 8, 180, 1, 180, 1, 180, 1, 181, 1, 181, 3, 181, 2470, 8, 181, 1, 182, 1, 182, 1, 182, 1, 182, 5, 182, 2476, 8, 182, 10, 182, 12, 182, 2479, 9, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 3, 183, 2486, 8, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 5, 184, 2497, 8, 184, 10, 184, 12, 184, 2500, 9, 184, 1, 185, 1, 185, 1, 185, 1, 185, 3, 185, 2506, 8, 185, 1, 185, 3, 185, 2509, 8, 185, 1, 185, 3, 185, 2512, 8, 185, 1, 185, 3, 185, 2515, 8, 185, 1, 185, 3, 185, 2518, 8, 185, 1, 185, 3, 185, 2521, 8, 185, 1, 185, 3, 185, 2524, 8, 185, 1, 185, 3, 185, 2527, 8, 185, 1, 185, 3, 185, 2530, 8, 185, 1, 185, 3, 185, 2533, 8, 185, 1, 185, 3, 185, 2536, 8, 185, 1, 185, 1, 185, 1, 185, 3, 185, 2541, 8, 185, 1, 185, 3, 185, 2544, 8, 185, 1, 185, 3, 185, 2547, 8, 185, 1, 185, 3, 185, 2550, 8, 185, 1, 185, 3, 185, 2553, 8, 185, 1, 185, 3, 185, 2556, 8, 185, 1, 185, 3, 185, 2559, 8, 185, 1, 185, 3, 185, 2562, 8, 185, 1, 185, 3, 185, 2565, 8, 185, 1, 185, 3, 185, 2568, 8, 185, 1, 185, 3, 185, 2571, 8, 185, 3, 185, 2573, 8, 185, 1, 186, 1, 186, 1, 186, 1, 186, 3, 186, 2579, 8, 186, 1, 187, 1, 187, 3, 187, 2583, 8, 187, 1, 187, 3, 187, 2586, 8, 187, 1, 187, 3, 187, 2589, 8, 187, 1, 187, 3, 187, 2592, 8, 187, 1, 187, 3, 187, 2595, 8, 187, 1, 187, 3, 187, 2598, 8, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 3, 187, 2605, 8, 187, 1, 188, 1, 188, 3, 188, 2609, 8, 188, 1, 188, 3, 188, 2612, 8, 188, 1, 188, 3, 188, 2615, 8, 188, 1, 188, 3, 188, 2618, 8, 188, 1, 188, 3, 188, 2621, 8, 188, 1, 188, 3, 188, 2624, 8, 188, 1, 189, 1, 189, 1, 189, 4, 189, 2629, 8, 189, 11, 189, 12, 189, 2630, 1, 190, 3, 190, 2634, 8, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 2642, 8, 191, 1, 191, 1, 191, 3, 191, 2646, 8, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 2653, 8, 191, 3, 191, 2655, 8, 191, 1, 192, 3, 192, 2658, 8, 192, 1, 192, 1, 192, 1, 192, 3, 192, 2663, 8, 192, 1, 192, 3, 192, 2666, 8, 192, 1, 192, 1, 192, 3, 192, 2670, 8, 192, 1, 193, 1, 193, 1, 193, 3, 193, 2675, 8, 193, 1, 193, 1, 193, 1, 193, 1, 193, 3, 193, 2681, 8, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 3, 195, 2689, 8, 195, 1, 196, 1, 196, 1, 196, 1, 196, 5, 196, 2695, 8, 196, 10, 196, 12, 196, 2698, 9, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 5, 197, 2705, 8, 197, 10, 197, 12, 197, 2708, 9, 197, 3, 197, 2710, 8, 197, 1, 197, 1, 197, 3, 197, 2714, 8, 197, 1, 197, 1, 197, 3, 197, 2718, 8, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2723, 8, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 2730, 8, 198, 1, 199, 1, 199, 5, 199, 2734, 8, 199, 10, 199, 12, 199, 2737, 9, 199, 1, 199, 3, 199, 2740, 8, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2747, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2752, 8, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 3, 201, 2765, 8, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 3, 202, 2773, 8, 202, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 2792, 8, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 2802, 8, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 2815, 8, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2825, 8, 207, 1, 207, 1, 207, 3, 207, 2829, 8, 207, 4, 207, 2831, 8, 207, 11, 207, 12, 207, 2832, 1, 207, 1, 207, 5, 207, 2837, 8, 207, 10, 207, 12, 207, 2840, 9, 207, 1, 207, 1, 207, 5, 207, 2844, 8, 207, 10, 207, 12, 207, 2847, 9, 207, 1, 207, 1, 207, 5, 207, 2851, 8, 207, 10, 207, 12, 207, 2854, 9, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2862, 8, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2869, 8, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2889, 8, 207, 1, 207, 3, 207, 2892, 8, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2906, 8, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2921, 8, 208, 1, 208, 1, 208, 3, 208, 2925, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 5, 208, 2943, 8, 208, 10, 208, 12, 208, 2946, 9, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2957, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2963, 8, 208, 1, 208, 3, 208, 2966, 8, 208, 1, 208, 3, 208, 2969, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2975, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2981, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2988, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2996, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3002, 8, 208, 1, 208, 1, 208, 3, 208, 3006, 8, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3011, 8, 208, 1, 208, 3, 208, 3014, 8, 208, 1, 208, 1, 208, 3, 208, 3018, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3025, 8, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3030, 8, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3035, 8, 208, 1, 208, 3, 208, 3038, 8, 208, 3, 208, 3040, 8, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 3, 209, 3048, 8, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 3, 209, 3056, 8, 209, 1, 209, 1, 209, 3, 209, 3060, 8, 209, 4, 209, 3062, 8, 209, 11, 209, 12, 209, 3063, 1, 209, 1, 209, 3, 209, 3068, 8, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 3085, 8, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 3, 211, 3102, 8, 211, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 3, 213, 3109, 8, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 5, 213, 3116, 8, 213, 10, 213, 12, 213, 3119, 9, 213, 1, 213, 1, 213, 3, 213, 3123, 8, 213, 1, 213, 3, 213, 3126, 8, 213, 1, 213, 3, 213, 3129, 8, 213, 1, 214, 1, 214, 3, 214, 3133, 8, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 3, 215, 3148, 8, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 3162, 8, 216, 1, 216, 3, 216, 3165, 8, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 3, 217, 3176, 8, 217, 1, 218, 1, 218, 3, 218, 3180, 8, 218, 1, 218, 3, 218, 3183, 8, 218, 1, 218, 3, 218, 3186, 8, 218, 1, 218, 1, 218, 3, 218, 3190, 8, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3195, 8, 218, 1, 218, 3, 218, 3198, 8, 218, 1, 218, 3, 218, 3201, 8, 218, 1, 218, 3, 218, 3204, 8, 218, 1, 218, 3, 218, 3207, 8, 218, 1, 218, 3, 218, 3210, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3216, 8, 218, 1, 218, 3, 218, 3219, 8, 218, 1, 218, 3, 218, 3222, 8, 218, 1, 218, 3, 218, 3225, 8, 218, 1, 218, 3, 218, 3228, 8, 218, 1, 218, 3, 218, 3231, 8, 218, 1, 218, 3, 218, 3234, 8, 218, 1, 218, 3, 218, 3237, 8, 218, 1, 218, 3, 218, 3240, 8, 218, 1, 218, 3, 218, 3243, 8, 218, 1, 218, 1, 218, 3, 218, 3247, 8, 218, 3, 218, 3249, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3255, 8, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3260, 8, 218, 1, 218, 3, 218, 3263, 8, 218, 1, 218, 3, 218, 3266, 8, 218, 1, 218, 3, 218, 3269, 8, 218, 1, 218, 3, 218, 3272, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3278, 8, 218, 1, 218, 3, 218, 3281, 8, 218, 1, 218, 3, 218, 3284, 8, 218, 1, 218, 3, 218, 3287, 8, 218, 1, 218, 3, 218, 3290, 8, 218, 1, 218, 3, 218, 3293, 8, 218, 1, 218, 3, 218, 3296, 8, 218, 1, 218, 3, 218, 3299, 8, 218, 1, 218, 3, 218, 3302, 8, 218, 1, 218, 3, 218, 3305, 8, 218, 1, 218, 1, 218, 3, 218, 3309, 8, 218, 3, 218, 3311, 8, 218, 3, 218, 3313, 8, 218, 1, 219, 1, 219, 1, 219, 3, 219, 3318, 8, 219, 1, 219, 1, 219, 1, 219, 3, 219, 3323, 8, 219, 1, 219, 1, 219, 3, 219, 3327, 8, 219, 1, 219, 1, 219, 3, 219, 3331, 8, 219, 1, 219, 1, 219, 1, 219, 3, 219, 3336, 8, 219, 1, 220, 1, 220, 1, 220, 3, 220, 3341, 8, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 5, 221, 3348, 8, 221, 10, 221, 12, 221, 3351, 9, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 5, 222, 3358, 8, 222, 10, 222, 12, 222, 3361, 9, 222, 1, 223, 1, 223, 1, 223, 5, 223, 3366, 8, 223, 10, 223, 12, 223, 3369, 9, 223, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 4, 225, 3378, 8, 225, 11, 225, 12, 225, 3379, 1, 225, 3, 225, 3383, 8, 225, 1, 226, 1, 226, 5, 226, 3387, 8, 226, 10, 226, 12, 226, 3390, 9, 226, 1, 226, 1, 226, 5, 226, 3394, 8, 226, 10, 226, 12, 226, 3397, 9, 226, 1, 226, 1, 226, 5, 226, 3401, 8, 226, 10, 226, 12, 226, 3404, 9, 226, 1, 226, 1, 226, 5, 226, 3408, 8, 226, 10, 226, 12, 226, 3411, 9, 226, 1, 226, 1, 226, 1, 226, 1, 226, 3, 226, 3417, 8, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 3, 227, 3426, 8, 227, 5, 227, 3428, 8, 227, 10, 227, 12, 227, 3431, 9, 227, 1, 228, 1, 228, 1, 228, 1, 228, 3, 228, 3437, 8, 228, 1, 228, 5, 228, 3440, 8, 228, 10, 228, 12, 228, 3443, 9, 228, 1, 229, 3, 229, 3446, 8, 229, 1, 229, 1, 229, 3, 229, 3450, 8, 229, 1, 229, 3, 229, 3453, 8, 229, 1, 229, 3, 229, 3456, 8, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 3, 230, 3467, 8, 230, 1, 230, 1, 230, 3, 230, 3471, 8, 230, 3, 230, 3473, 8, 230, 1, 230, 3, 230, 3476, 8, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 3487, 8, 231, 10, 231, 12, 231, 3490, 9, 231, 3, 231, 3492, 8, 231, 1, 231, 3, 231, 3495, 8, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 3505, 8, 231, 10, 231, 12, 231, 3508, 9, 231, 3, 231, 3510, 8, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 3, 231, 3517, 8, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 3524, 8, 231, 10, 231, 12, 231, 3527, 9, 231, 1, 231, 1, 231, 3, 231, 3531, 8, 231, 3, 231, 3533, 8, 231, 3, 231, 3535, 8, 231, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 5, 233, 3550, 8, 233, 10, 233, 12, 233, 3553, 9, 233, 3, 233, 3555, 8, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 3, 233, 3563, 8, 233, 1, 233, 3, 233, 3566, 8, 233, 1, 234, 1, 234, 3, 234, 3570, 8, 234, 1, 234, 3, 234, 3573, 8, 234, 1, 234, 3, 234, 3576, 8, 234, 1, 234, 3, 234, 3579, 8, 234, 1, 234, 3, 234, 3582, 8, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 3, 235, 3594, 8, 235, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 3, 238, 3602, 8, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 3, 239, 3609, 8, 239, 1, 239, 3, 239, 3612, 8, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 3, 240, 3619, 8, 240, 1, 240, 3, 240, 3622, 8, 240, 1, 241, 1, 241, 1, 241, 3, 241, 3627, 8, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 3, 242, 3634, 8, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 3, 243, 3642, 8, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 3, 244, 3650, 8, 244, 1, 244, 1, 244, 1, 244, 3, 244, 3655, 8, 244, 1, 244, 1, 244, 3, 244, 3659, 8, 244, 1, 245, 1, 245, 1, 245, 3, 245, 3664, 8, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 3, 246, 3671, 8, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 5, 246, 3683, 8, 246, 10, 246, 12, 246, 3686, 9, 246, 3, 246, 3688, 8, 246, 1, 246, 1, 246, 3, 246, 3692, 8, 246, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 5, 248, 3701, 8, 248, 10, 248, 12, 248, 3704, 9, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 5, 248, 3711, 8, 248, 10, 248, 12, 248, 3714, 9, 248, 3, 248, 3716, 8, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 3, 249, 3723, 8, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 5, 249, 3730, 8, 249, 10, 249, 12, 249, 3733, 9, 249, 3, 249, 3735, 8, 249, 1, 249, 1, 249, 1, 250, 1, 250, 3, 250, 3741, 8, 250, 1, 250, 3, 250, 3744, 8, 250, 1, 250, 1, 250, 1, 250, 5, 250, 3749, 8, 250, 10, 250, 12, 250, 3752, 9, 250, 1, 250, 1, 250, 3, 250, 3756, 8, 250, 1, 250, 3, 250, 3759, 8, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 3, 251, 3772, 8, 251, 1, 251, 1, 251, 1, 251, 1, 251, 3, 251, 3778, 8, 251, 3, 251, 3780, 8, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 3, 252, 3788, 8, 252, 1, 252, 3, 252, 3791, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 5, 252, 3799, 8, 252, 10, 252, 12, 252, 3802, 9, 252, 1, 252, 1, 252, 3, 252, 3806, 8, 252, 3, 252, 3808, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 3, 253, 3820, 8, 253, 1, 253, 1, 253, 1, 253, 1, 253, 3, 253, 3826, 8, 253, 3, 253, 3828, 8, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 3, 254, 3835, 8, 254, 1, 255, 1, 255, 1, 255, 5, 255, 3840, 8, 255, 10, 255, 12, 255, 3843, 9, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 5, 256, 3854, 8, 256, 10, 256, 12, 256, 3857, 9, 256, 1, 257, 1, 257, 1, 257, 3, 257, 3862, 8, 257, 1, 257, 3, 257, 3865, 8, 257, 1, 257, 3, 257, 3868, 8, 257, 1, 257, 3, 257, 3871, 8, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 3, 258, 3880, 8, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 3, 258, 3887, 8, 258, 1, 259, 1, 259, 1, 259, 1, 259, 3, 259, 3893, 8, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 3, 260, 3902, 8, 260, 1, 261, 1, 261, 3, 261, 3906, 8, 261, 1, 261, 1, 261, 1, 261, 1, 261, 5, 261, 3912, 8, 261, 10, 261, 12, 261, 3915, 9, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 3, 262, 3924, 8, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 5, 262, 3932, 8, 262, 10, 262, 12, 262, 3935, 9, 262, 1, 262, 1, 262, 3, 262, 3939, 8, 262, 1, 263, 1, 263, 3, 263, 3943, 8, 263, 1, 263, 1, 263, 5, 263, 3947, 8, 263, 10, 263, 12, 263, 3950, 9, 263, 1, 263, 1, 263, 3, 263, 3954, 8, 263, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 3, 266, 3964, 8, 266, 1, 267, 1, 267, 3, 267, 3968, 8, 267, 1, 267, 3, 267, 3971, 8, 267, 1, 267, 1, 267, 1, 267, 3, 267, 3976, 8, 267, 1, 267, 3, 267, 3979, 8, 267, 5, 267, 3981, 8, 267, 10, 267, 12, 267, 3984, 9, 267, 1, 268, 1, 268, 3, 268, 3988, 8, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 4, 270, 3997, 8, 270, 11, 270, 12, 270, 3998, 3, 270, 4001, 8, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 5, 271, 4008, 8, 271, 10, 271, 12, 271, 4011, 9, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 5, 274, 4027, 8, 274, 10, 274, 12, 274, 4030, 9, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 5, 274, 4037, 8, 274, 10, 274, 12, 274, 4040, 9, 274, 3, 274, 4042, 8, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4049, 8, 275, 1, 275, 3, 275, 4052, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4062, 8, 275, 1, 275, 1, 275, 1, 275, 5, 275, 4067, 8, 275, 10, 275, 12, 275, 4070, 9, 275, 3, 275, 4072, 8, 275, 3, 275, 4074, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4085, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4095, 8, 275, 3, 275, 4097, 8, 275, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 278, 1, 278, 3, 278, 4106, 8, 278, 1, 279, 1, 279, 1, 279, 3, 279, 4111, 8, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 3, 280, 4120, 8, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 4, 281, 4131, 8, 281, 11, 281, 12, 281, 4132, 1, 281, 1, 281, 3, 281, 4137, 8, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 4, 282, 4147, 8, 282, 11, 282, 12, 282, 4148, 1, 282, 1, 282, 3, 282, 4153, 8, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 3, 283, 4162, 8, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 3, 285, 4181, 8, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 5, 286, 4197, 8, 286, 10, 286, 12, 286, 4200, 9, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 3, 286, 4211, 8, 286, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 3, 288, 4226, 8, 288, 1, 288, 1, 288, 3, 288, 4230, 8, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 3, 289, 4246, 8, 289, 1, 290, 1, 290, 1, 290, 5, 290, 4251, 8, 290, 10, 290, 12, 290, 4254, 9, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 3, 291, 4267, 8, 291, 1, 292, 5, 292, 4270, 8, 292, 10, 292, 12, 292, 4273, 9, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 5, 292, 4282, 8, 292, 10, 292, 12, 292, 4285, 9, 292, 1, 293, 1, 293, 1, 293, 5, 293, 4290, 8, 293, 10, 293, 12, 293, 4293, 9, 293, 1, 294, 1, 294, 1, 294, 5, 294, 4298, 8, 294, 10, 294, 12, 294, 4301, 9, 294, 1, 295, 1, 295, 1, 295, 5, 295, 4306, 8, 295, 10, 295, 12, 295, 4309, 9, 295, 1, 296, 1, 296, 1, 296, 5, 296, 4314, 8, 296, 10, 296, 12, 296, 4317, 9, 296, 1, 297, 1, 297, 1, 297, 5, 297, 4322, 8, 297, 10, 297, 12, 297, 4325, 9, 297, 1, 298, 1, 298, 1, 298, 5, 298, 4330, 8, 298, 10, 298, 12, 298, 4333, 9, 298, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 3, 301, 4343, 8, 301, 1, 301, 1, 301, 3, 301, 4347, 8, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 3, 302, 4355, 8, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 3, 303, 4371, 8, 303, 1, 304, 1, 304, 3, 304, 4375, 8, 304, 1, 305, 1, 305, 1, 305, 3, 305, 4380, 8, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 4393, 8, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 5, 308, 4402, 8, 308, 10, 308, 12, 308, 4405, 9, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 3, 309, 4413, 8, 309, 1, 310, 5, 310, 4416, 8, 310, 10, 310, 12, 310, 4419, 9, 310, 1, 310, 1, 310, 1, 310, 3, 310, 4424, 8, 310, 1, 311, 1, 311, 1, 311, 5, 311, 4429, 8, 311, 10, 311, 12, 311, 4432, 9, 311, 1, 312, 1, 312, 3, 312, 4436, 8, 312, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 5, 313, 4443, 8, 313, 10, 313, 12, 313, 4446, 9, 313, 1, 313, 1, 313, 1, 314, 1, 314, 1, 314, 3, 314, 4453, 8, 314, 1, 315, 1, 315, 1, 315, 1, 315, 5, 315, 4459, 8, 315, 10, 315, 12, 315, 4462, 9, 315, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 3, 316, 4469, 8, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 318, 1, 318, 1, 319, 1, 319, 3, 319, 4479, 8, 319, 1, 320, 1, 320, 1, 320, 3, 320, 4484, 8, 320, 1, 321, 1, 321, 1, 322, 1, 322, 1, 323, 1, 323, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 3, 324, 4543, 8, 324, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4549, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4558, 8, 325, 3, 325, 4560, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 5, 325, 4574, 8, 325, 10, 325, 12, 325, 4577, 9, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4584, 8, 325, 1, 325, 1, 325, 3, 325, 4588, 8, 325, 3, 325, 4590, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4596, 8, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4601, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4618, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4644, 8, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4649, 8, 325, 3, 325, 4651, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4679, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4696, 8, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4701, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4710, 8, 325, 1, 326, 1, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 3, 327, 4721, 8, 327, 1, 328, 1, 328, 1, 328, 5, 328, 4726, 8, 328, 10, 328, 12, 328, 4729, 9, 328, 1, 329, 1, 329, 1, 329, 3, 329, 4734, 8, 329, 1, 330, 1, 330, 1, 330, 3, 330, 4739, 8, 330, 1, 331, 1, 331, 1, 332, 1, 332, 1, 333, 1, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 5, 341, 4764, 8, 341, 10, 341, 12, 341, 4767, 9, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 343, 1, 343, 1, 343, 1, 343, 3, 343, 4777, 8, 343, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 3, 344, 4791, 8, 344, 1, 345, 1, 345, 1, 345, 5, 345, 4796, 8, 345, 10, 345, 12, 345, 4799, 9, 345, 1, 345, 1, 813, 0, 346, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 0, 60, 2, 0, 57, 57, 172, 172, 4, 0, 91, 91, 121, 121, 226, 226, 325, 325, 2, 0, 50, 50, 346, 346, 2, 0, 34, 34, 282, 282, 1, 0, 89, 90, 2, 0, 139, 139, 154, 154, 2, 0, 67, 67, 295, 295, 2, 0, 68, 68, 296, 296, 1, 0, 155, 156, 2, 0, 114, 114, 307, 307, 11, 0, 7, 7, 9, 9, 58, 58, 86, 86, 101, 101, 155, 155, 161, 161, 190, 190, 299, 299, 309, 309, 365, 365, 3, 0, 4, 4, 101, 101, 326, 326, 3, 0, 15, 15, 128, 128, 170, 170, 1, 0, 141, 142, 2, 0, 30, 30, 351, 351, 2, 0, 217, 217, 373, 373, 2, 0, 214, 214, 272, 272, 2, 0, 18, 18, 89, 89, 2, 0, 130, 130, 177, 177, 2, 0, 39, 39, 376, 376, 4, 0, 112, 112, 164, 164, 205, 205, 356, 356, 2, 0, 7, 7, 96, 96, 2, 0, 125, 125, 350, 350, 2, 0, 225, 225, 391, 391, 2, 0, 42, 42, 315, 315, 2, 0, 189, 189, 196, 196, 2, 0, 426, 426, 431, 431, 2, 0, 140, 140, 285, 285, 3, 0, 12, 12, 231, 231, 300, 300, 2, 0, 241, 241, 292, 292, 2, 0, 198, 198, 268, 268, 2, 0, 260, 260, 292, 292, 2, 0, 354, 354, 431, 431, 2, 0, 133, 133, 247, 247, 2, 0, 152, 152, 281, 281, 3, 0, 413, 414, 418, 418, 420, 420, 2, 0, 412, 412, 415, 417, 1, 0, 413, 414, 4, 0, 184, 184, 270, 270, 286, 286, 408, 411, 2, 0, 7, 7, 13, 13, 3, 0, 7, 7, 13, 13, 313, 313, 3, 0, 184, 184, 270, 270, 286, 286, 4, 0, 125, 125, 219, 219, 350, 350, 360, 360, 2, 0, 405, 405, 407, 411, 24, 0, 11, 11, 16, 16, 25, 28, 35, 35, 100, 100, 131, 132, 151, 151, 154, 154, 162, 163, 184, 184, 198, 198, 216, 216, 228, 228, 264, 264, 270, 270, 286, 286, 311, 311, 323, 324, 340, 340, 357, 357, 383, 383, 405, 417, 419, 421, 423, 423, 85, 0, 1, 6, 8, 8, 10, 10, 15, 15, 18, 20, 22, 24, 30, 31, 33, 34, 37, 38, 40, 44, 46, 47, 49, 50, 52, 53, 56, 57, 59, 59, 66, 66, 68, 68, 72, 77, 79, 79, 83, 85, 87, 89, 91, 95, 97, 99, 103, 104, 106, 107, 109, 111, 114, 116, 118, 121, 127, 130, 137, 138, 142, 142, 147, 150, 152, 152, 155, 156, 158, 160, 168, 170, 172, 177, 182, 183, 185, 187, 189, 193, 195, 197, 199, 202, 204, 204, 206, 209, 211, 212, 214, 215, 217, 218, 220, 220, 222, 223, 226, 227, 232, 233, 235, 236, 238, 240, 243, 246, 252, 252, 254, 255, 257, 259, 261, 262, 265, 267, 271, 282, 284, 284, 287, 288, 293, 298, 300, 303, 305, 310, 312, 312, 314, 317, 319, 325, 327, 328, 330, 330, 332, 334, 339, 340, 342, 342, 344, 346, 349, 349, 352, 353, 355, 355, 357, 357, 360, 364, 366, 368, 371, 373, 375, 375, 377, 382, 385, 385, 388, 394, 13, 0, 16, 16, 26, 28, 63, 64, 71, 71, 100, 100, 131, 131, 145, 145, 151, 151, 162, 163, 198, 198, 264, 264, 311, 311, 337, 337, 2, 0, 4, 4, 101, 101, 2, 0, 9, 9, 58, 58, 3, 0, 14, 14, 144, 144, 369, 369, 1, 0, 106, 107, 1, 0, 94, 95, 1, 0, 392, 393, 1, 0, 208, 209, 1, 0, 381, 382, 1, 0, 73, 74, 1, 0, 148, 149, 1, 0, 206, 207, 1, 0, 297, 298, 1, 0, 80, 82, 5392, 0, 695, 1, 0, 0, 0, 2, 702, 1, 0, 0, 0, 4, 707, 1, 0, 0, 0, 6, 741, 1, 0, 0, 0, 8, 743, 1, 0, 0, 0, 10, 816, 1, 0, 0, 0, 12, 818, 1, 0, 0, 0, 14, 834, 1, 0, 0, 0, 16, 843, 1, 0, 0, 0, 18, 851, 1, 0, 0, 0, 20, 864, 1, 0, 0, 0, 22, 875, 1, 0, 0, 0, 24, 880, 1, 0, 0, 0, 26, 891, 1, 0, 0, 0, 28, 954, 1, 0, 0, 0, 30, 956, 1, 0, 0, 0, 32, 959, 1, 0, 0, 0, 34, 963, 1, 0, 0, 0, 36, 965, 1, 0, 0, 0, 38, 968, 1, 0, 0, 0, 40, 971, 1, 0, 0, 0, 42, 1015, 1, 0, 0, 0, 44, 1017, 1, 0, 0, 0, 46, 1020, 1, 0, 0, 0, 48, 1023, 1, 0, 0, 0, 50, 1032, 1, 0, 0, 0, 52, 1035, 1, 0, 0, 0, 54, 1050, 1, 0, 0, 0, 56, 1062, 1, 0, 0, 0, 58, 1067, 1, 0, 0, 0, 60, 1087, 1, 0, 0, 0, 62, 1091, 1, 0, 0, 0, 64, 1098, 1, 0, 0, 0, 66, 1123, 1, 0, 0, 0, 68, 1140, 1, 0, 0, 0, 70, 1142, 1, 0, 0, 0, 72, 1327, 1, 0, 0, 0, 74, 1337, 1, 0, 0, 0, 76, 1339, 1, 0, 0, 0, 78, 1344, 1, 0, 0, 0, 80, 1349, 1, 0, 0, 0, 82, 1351, 1, 0, 0, 0, 84, 1355, 1, 0, 0, 0, 86, 1359, 1, 0, 0, 0, 88, 1363, 1, 0, 0, 0, 90, 1367, 1, 0, 0, 0, 92, 1377, 1, 0, 0, 0, 94, 1388, 1, 0, 0, 0, 96, 1405, 1, 0, 0, 0, 98, 1423, 1, 0, 0, 0, 100, 1428, 1, 0, 0, 0, 102, 1431, 1, 0, 0, 0, 104, 1435, 1, 0, 0, 0, 106, 1442, 1, 0, 0, 0, 108, 1451, 1, 0, 0, 0, 110, 1457, 1, 0, 0, 0, 112, 1459, 1, 0, 0, 0, 114, 1473, 1, 0, 0, 0, 116, 1495, 1, 0, 0, 0, 118, 1497, 1, 0, 0, 0, 120, 1505, 1, 0, 0, 0, 122, 1512, 1, 0, 0, 0, 124, 1514, 1, 0, 0, 0, 126, 1528, 1, 0, 0, 0, 128, 1535, 1, 0, 0, 0, 130, 1537, 1, 0, 0, 0, 132, 1541, 1, 0, 0, 0, 134, 1545, 1, 0, 0, 0, 136, 1549, 1, 0, 0, 0, 138, 1553, 1, 0, 0, 0, 140, 1566, 1, 0, 0, 0, 142, 1574, 1, 0, 0, 0, 144, 1577, 1, 0, 0, 0, 146, 1579, 1, 0, 0, 0, 148, 1591, 1, 0, 0, 0, 150, 1601, 1, 0, 0, 0, 152, 1604, 1, 0, 0, 0, 154, 1615, 1, 0, 0, 0, 156, 1623, 1, 0, 0, 0, 158, 1666, 1, 0, 0, 0, 160, 1675, 1, 0, 0, 0, 162, 1703, 1, 0, 0, 0, 164, 1716, 1, 0, 0, 0, 166, 1718, 1, 0, 0, 0, 168, 1724, 1, 0, 0, 0, 170, 1727, 1, 0, 0, 0, 172, 1733, 1, 0, 0, 0, 174, 1739, 1, 0, 0, 0, 176, 1746, 1, 0, 0, 0, 178, 1780, 1, 0, 0, 0, 180, 1788, 1, 0, 0, 0, 182, 1801, 1, 0, 0, 0, 184, 1806, 1, 0, 0, 0, 186, 1817, 1, 0, 0, 0, 188, 1834, 1, 0, 0, 0, 190, 1836, 1, 0, 0, 0, 192, 1841, 1, 0, 0, 0, 194, 1848, 1, 0, 0, 0, 196, 1850, 1, 0, 0, 0, 198, 1853, 1, 0, 0, 0, 200, 1856, 1, 0, 0, 0, 202, 1870, 1, 0, 0, 0, 204, 1878, 1, 0, 0, 0, 206, 1904, 1, 0, 0, 0, 208, 1906, 1, 0, 0, 0, 210, 1923, 1, 0, 0, 0, 212, 1937, 1, 0, 0, 0, 214, 1939, 1, 0, 0, 0, 216, 1942, 1, 0, 0, 0, 218, 1945, 1, 0, 0, 0, 220, 1954, 1, 0, 0, 0, 222, 1974, 1, 0, 0, 0, 224, 1976, 1, 0, 0, 0, 226, 1979, 1, 0, 0, 0, 228, 1992, 1, 0, 0, 0, 230, 1994, 1, 0, 0, 0, 232, 1998, 1, 0, 0, 0, 234, 2006, 1, 0, 0, 0, 236, 2010, 1, 0, 0, 0, 238, 2019, 1, 0, 0, 0, 240, 2025, 1, 0, 0, 0, 242, 2031, 1, 0, 0, 0, 244, 2036, 1, 0, 0, 0, 246, 2082, 1, 0, 0, 0, 248, 2084, 1, 0, 0, 0, 250, 2092, 1, 0, 0, 0, 252, 2100, 1, 0, 0, 0, 254, 2108, 1, 0, 0, 0, 256, 2118, 1, 0, 0, 0, 258, 2120, 1, 0, 0, 0, 260, 2122, 1, 0, 0, 0, 262, 2135, 1, 0, 0, 0, 264, 2143, 1, 0, 0, 0, 266, 2152, 1, 0, 0, 0, 268, 2156, 1, 0, 0, 0, 270, 2158, 1, 0, 0, 0, 272, 2163, 1, 0, 0, 0, 274, 2165, 1, 0, 0, 0, 276, 2169, 1, 0, 0, 0, 278, 2175, 1, 0, 0, 0, 280, 2183, 1, 0, 0, 0, 282, 2185, 1, 0, 0, 0, 284, 2188, 1, 0, 0, 0, 286, 2195, 1, 0, 0, 0, 288, 2206, 1, 0, 0, 0, 290, 2219, 1, 0, 0, 0, 292, 2221, 1, 0, 0, 0, 294, 2229, 1, 0, 0, 0, 296, 2233, 1, 0, 0, 0, 298, 2241, 1, 0, 0, 0, 300, 2243, 1, 0, 0, 0, 302, 2246, 1, 0, 0, 0, 304, 2253, 1, 0, 0, 0, 306, 2261, 1, 0, 0, 0, 308, 2268, 1, 0, 0, 0, 310, 2276, 1, 0, 0, 0, 312, 2284, 1, 0, 0, 0, 314, 2288, 1, 0, 0, 0, 316, 2290, 1, 0, 0, 0, 318, 2301, 1, 0, 0, 0, 320, 2305, 1, 0, 0, 0, 322, 2317, 1, 0, 0, 0, 324, 2325, 1, 0, 0, 0, 326, 2329, 1, 0, 0, 0, 328, 2341, 1, 0, 0, 0, 330, 2353, 1, 0, 0, 0, 332, 2358, 1, 0, 0, 0, 334, 2363, 1, 0, 0, 0, 336, 2365, 1, 0, 0, 0, 338, 2369, 1, 0, 0, 0, 340, 2373, 1, 0, 0, 0, 342, 2380, 1, 0, 0, 0, 344, 2382, 1, 0, 0, 0, 346, 2395, 1, 0, 0, 0, 348, 2434, 1, 0, 0, 0, 350, 2436, 1, 0, 0, 0, 352, 2441, 1, 0, 0, 0, 354, 2446, 1, 0, 0, 0, 356, 2453, 1, 0, 0, 0, 358, 2458, 1, 0, 0, 0, 360, 2463, 1, 0, 0, 0, 362, 2469, 1, 0, 0, 0, 364, 2471, 1, 0, 0, 0, 366, 2480, 1, 0, 0, 0, 368, 2492, 1, 0, 0, 0, 370, 2572, 1, 0, 0, 0, 372, 2578, 1, 0, 0, 0, 374, 2604, 1, 0, 0, 0, 376, 2606, 1, 0, 0, 0, 378, 2628, 1, 0, 0, 0, 380, 2633, 1, 0, 0, 0, 382, 2637, 1, 0, 0, 0, 384, 2669, 1, 0, 0, 0, 386, 2671, 1, 0, 0, 0, 388, 2682, 1, 0, 0, 0, 390, 2688, 1, 0, 0, 0, 392, 2690, 1, 0, 0, 0, 394, 2722, 1, 0, 0, 0, 396, 2729, 1, 0, 0, 0, 398, 2735, 1, 0, 0, 0, 400, 2741, 1, 0, 0, 0, 402, 2756, 1, 0, 0, 0, 404, 2766, 1, 0, 0, 0, 406, 2774, 1, 0, 0, 0, 408, 2777, 1, 0, 0, 0, 410, 2780, 1, 0, 0, 0, 412, 2783, 1, 0, 0, 0, 414, 2905, 1, 0, 0, 0, 416, 3039, 1, 0, 0, 0, 418, 3067, 1, 0, 0, 0, 420, 3084, 1, 0, 0, 0, 422, 3101, 1, 0, 0, 0, 424, 3103, 1, 0, 0, 0, 426, 3106, 1, 0, 0, 0, 428, 3132, 1, 0, 0, 0, 430, 3137, 1, 0, 0, 0, 432, 3164, 1, 0, 0, 0, 434, 3175, 1, 0, 0, 0, 436, 3312, 1, 0, 0, 0, 438, 3314, 1, 0, 0, 0, 440, 3337, 1, 0, 0, 0, 442, 3349, 1, 0, 0, 0, 444, 3354, 1, 0, 0, 0, 446, 3362, 1, 0, 0, 0, 448, 3370, 1, 0, 0, 0, 450, 3382, 1, 0, 0, 0, 452, 3416, 1, 0, 0, 0, 454, 3418, 1, 0, 0, 0, 456, 3436, 1, 0, 0, 0, 458, 3445, 1, 0, 0, 0, 460, 3475, 1, 0, 0, 0, 462, 3534, 1, 0, 0, 0, 464, 3536, 1, 0, 0, 0, 466, 3565, 1, 0, 0, 0, 468, 3567, 1, 0, 0, 0, 470, 3583, 1, 0, 0, 0, 472, 3595, 1, 0, 0, 0, 474, 3597, 1, 0, 0, 0, 476, 3601, 1, 0, 0, 0, 478, 3611, 1, 0, 0, 0, 480, 3621, 1, 0, 0, 0, 482, 3626, 1, 0, 0, 0, 484, 3633, 1, 0, 0, 0, 486, 3637, 1, 0, 0, 0, 488, 3658, 1, 0, 0, 0, 490, 3663, 1, 0, 0, 0, 492, 3665, 1, 0, 0, 0, 494, 3693, 1, 0, 0, 0, 496, 3696, 1, 0, 0, 0, 498, 3717, 1, 0, 0, 0, 500, 3758, 1, 0, 0, 0, 502, 3760, 1, 0, 0, 0, 504, 3807, 1, 0, 0, 0, 506, 3809, 1, 0, 0, 0, 508, 3834, 1, 0, 0, 0, 510, 3836, 1, 0, 0, 0, 512, 3844, 1, 0, 0, 0, 514, 3870, 1, 0, 0, 0, 516, 3872, 1, 0, 0, 0, 518, 3892, 1, 0, 0, 0, 520, 3894, 1, 0, 0, 0, 522, 3905, 1, 0, 0, 0, 524, 3918, 1, 0, 0, 0, 526, 3953, 1, 0, 0, 0, 528, 3955, 1, 0, 0, 0, 530, 3958, 1, 0, 0, 0, 532, 3963, 1, 0, 0, 0, 534, 3965, 1, 0, 0, 0, 536, 3987, 1, 0, 0, 0, 538, 3989, 1, 0, 0, 0, 540, 3993, 1, 0, 0, 0, 542, 4002, 1, 0, 0, 0, 544, 4012, 1, 0, 0, 0, 546, 4016, 1, 0, 0, 0, 548, 4020, 1, 0, 0, 0, 550, 4096, 1, 0, 0, 0, 552, 4098, 1, 0, 0, 0, 554, 4101, 1, 0, 0, 0, 556, 4105, 1, 0, 0, 0, 558, 4110, 1, 0, 0, 0, 560, 4112, 1, 0, 0, 0, 562, 4123, 1, 0, 0, 0, 564, 4140, 1, 0, 0, 0, 566, 4156, 1, 0, 0, 0, 568, 4165, 1, 0, 0, 0, 570, 4180, 1, 0, 0, 0, 572, 4210, 1, 0, 0, 0, 574, 4212, 1, 0, 0, 0, 576, 4229, 1, 0, 0, 0, 578, 4245, 1, 0, 0, 0, 580, 4247, 1, 0, 0, 0, 582, 4266, 1, 0, 0, 0, 584, 4271, 1, 0, 0, 0, 586, 4286, 1, 0, 0, 0, 588, 4294, 1, 0, 0, 0, 590, 4302, 1, 0, 0, 0, 592, 4310, 1, 0, 0, 0, 594, 4318, 1, 0, 0, 0, 596, 4326, 1, 0, 0, 0, 598, 4334, 1, 0, 0, 0, 600, 4336, 1, 0, 0, 0, 602, 4346, 1, 0, 0, 0, 604, 4354, 1, 0, 0, 0, 606, 4370, 1, 0, 0, 0, 608, 4374, 1, 0, 0, 0, 610, 4379, 1, 0, 0, 0, 612, 4381, 1, 0, 0, 0, 614, 4392, 1, 0, 0, 0, 616, 4394, 1, 0, 0, 0, 618, 4412, 1, 0, 0, 0, 620, 4417, 1, 0, 0, 0, 622, 4425, 1, 0, 0, 0, 624, 4433, 1, 0, 0, 0, 626, 4437, 1, 0, 0, 0, 628, 4449, 1, 0, 0, 0, 630, 4454, 1, 0, 0, 0, 632, 4465, 1, 0, 0, 0, 634, 4472, 1, 0, 0, 0, 636, 4474, 1, 0, 0, 0, 638, 4478, 1, 0, 0, 0, 640, 4480, 1, 0, 0, 0, 642, 4485, 1, 0, 0, 0, 644, 4487, 1, 0, 0, 0, 646, 4489, 1, 0, 0, 0, 648, 4542, 1, 0, 0, 0, 650, 4709, 1, 0, 0, 0, 652, 4711, 1, 0, 0, 0, 654, 4720, 1, 0, 0, 0, 656, 4722, 1, 0, 0, 0, 658, 4733, 1, 0, 0, 0, 660, 4735, 1, 0, 0, 0, 662, 4740, 1, 0, 0, 0, 664, 4742, 1, 0, 0, 0, 666, 4744, 1, 0, 0, 0, 668, 4746, 1, 0, 0, 0, 670, 4748, 1, 0, 0, 0, 672, 4750, 1, 0, 0, 0, 674, 4752, 1, 0, 0, 0, 676, 4754, 1, 0, 0, 0, 678, 4756, 1, 0, 0, 0, 680, 4758, 1, 0, 0, 0, 682, 4760, 1, 0, 0, 0, 684, 4768, 1, 0, 0, 0, 686, 4776, 1, 0, 0, 0, 688, 4790, 1, 0, 0, 0, 690, 4792, 1, 0, 0, 0, 692, 694, 3, 2, 1, 0, 693, 692, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 693, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 698, 1, 0, 0, 0, 697, 695, 1, 0, 0, 0, 698, 699, 5, 0, 0, 1, 699, 1, 1, 0, 0, 0, 700, 703, 3, 4, 2, 0, 701, 703, 3, 10, 5, 0, 702, 700, 1, 0, 0, 0, 702, 701, 1, 0, 0, 0, 703, 705, 1, 0, 0, 0, 704, 706, 5, 398, 0, 0, 705, 704, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 3, 1, 0, 0, 0, 707, 717, 5, 119, 0, 0, 708, 710, 3, 6, 3, 0, 709, 708, 1, 0, 0, 0, 710, 713, 1, 0, 0, 0, 711, 709, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 714, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 714, 718, 3, 10, 5, 0, 715, 716, 5, 284, 0, 0, 716, 718, 3, 360, 180, 0, 717, 711, 1, 0, 0, 0, 717, 715, 1, 0, 0, 0, 718, 5, 1, 0, 0, 0, 719, 742, 5, 122, 0, 0, 720, 742, 5, 138, 0, 0, 721, 742, 5, 88, 0, 0, 722, 724, 5, 37, 0, 0, 723, 725, 7, 0, 0, 0, 724, 723, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 742, 1, 0, 0, 0, 726, 742, 5, 192, 0, 0, 727, 742, 5, 21, 0, 0, 728, 742, 5, 10, 0, 0, 729, 742, 5, 275, 0, 0, 730, 742, 5, 191, 0, 0, 731, 742, 5, 19, 0, 0, 732, 734, 5, 377, 0, 0, 733, 735, 5, 225, 0, 0, 734, 733, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 737, 1, 0, 0, 0, 736, 738, 3, 8, 4, 0, 737, 736, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 742, 1, 0, 0, 0, 739, 742, 5, 79, 0, 0, 740, 742, 5, 78, 0, 0, 741, 719, 1, 0, 0, 0, 741, 720, 1, 0, 0, 0, 741, 721, 1, 0, 0, 0, 741, 722, 1, 0, 0, 0, 741, 726, 1, 0, 0, 0, 741, 727, 1, 0, 0, 0, 741, 728, 1, 0, 0, 0, 741, 729, 1, 0, 0, 0, 741, 730, 1, 0, 0, 0, 741, 731, 1, 0, 0, 0, 741, 732, 1, 0, 0, 0, 741, 739, 1, 0, 0, 0, 741, 740, 1, 0, 0, 0, 742, 7, 1, 0, 0, 0, 743, 744, 7, 1, 0, 0, 744, 9, 1, 0, 0, 0, 745, 817, 3, 360, 180, 0, 746, 817, 3, 12, 6, 0, 747, 817, 3, 16, 8, 0, 748, 817, 3, 18, 9, 0, 749, 817, 3, 20, 10, 0, 750, 817, 3, 24, 12, 0, 751, 752, 5, 277, 0, 0, 752, 753, 5, 320, 0, 0, 753, 756, 3, 472, 236, 0, 754, 755, 5, 387, 0, 0, 755, 757, 3, 230, 115, 0, 756, 754, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 817, 1, 0, 0, 0, 758, 817, 3, 28, 14, 0, 759, 760, 5, 86, 0, 0, 760, 761, 5, 139, 0, 0, 761, 763, 3, 478, 239, 0, 762, 764, 3, 494, 247, 0, 763, 762, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 817, 1, 0, 0, 0, 765, 766, 5, 365, 0, 0, 766, 767, 3, 478, 239, 0, 767, 769, 3, 392, 196, 0, 768, 770, 3, 494, 247, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 817, 1, 0, 0, 0, 771, 817, 3, 394, 197, 0, 772, 774, 5, 203, 0, 0, 773, 775, 5, 436, 0, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 777, 5, 166, 0, 0, 777, 782, 3, 478, 239, 0, 778, 780, 5, 17, 0, 0, 779, 778, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 783, 3, 638, 319, 0, 782, 779, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 5, 370, 0, 0, 785, 786, 3, 456, 228, 0, 786, 787, 5, 224, 0, 0, 787, 788, 3, 580, 290, 0, 788, 789, 3, 398, 199, 0, 789, 817, 1, 0, 0, 0, 790, 791, 5, 249, 0, 0, 791, 792, 3, 638, 319, 0, 792, 793, 5, 139, 0, 0, 793, 794, 3, 360, 180, 0, 794, 817, 1, 0, 0, 0, 795, 796, 5, 115, 0, 0, 796, 797, 3, 638, 319, 0, 797, 798, 5, 370, 0, 0, 798, 799, 3, 296, 148, 0, 799, 817, 1, 0, 0, 0, 800, 801, 5, 304, 0, 0, 801, 806, 3, 648, 324, 0, 802, 803, 5, 395, 0, 0, 803, 805, 3, 648, 324, 0, 804, 802, 1, 0, 0, 0, 805, 808, 1, 0, 0, 0, 806, 804, 1, 0, 0, 0, 806, 807, 1, 0, 0, 0, 807, 809, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 809, 813, 5, 405, 0, 0, 810, 812, 9, 0, 0, 0, 811, 810, 1, 0, 0, 0, 812, 815, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 813, 811, 1, 0, 0, 0, 814, 817, 1, 0, 0, 0, 815, 813, 1, 0, 0, 0, 816, 745, 1, 0, 0, 0, 816, 746, 1, 0, 0, 0, 816, 747, 1, 0, 0, 0, 816, 748, 1, 0, 0, 0, 816, 749, 1, 0, 0, 0, 816, 750, 1, 0, 0, 0, 816, 751, 1, 0, 0, 0, 816, 758, 1, 0, 0, 0, 816, 759, 1, 0, 0, 0, 816, 765, 1, 0, 0, 0, 816, 771, 1, 0, 0, 0, 816, 772, 1, 0, 0, 0, 816, 790, 1, 0, 0, 0, 816, 795, 1, 0, 0, 0, 816, 800, 1, 0, 0, 0, 817, 11, 1, 0, 0, 0, 818, 819, 5, 187, 0, 0, 819, 821, 5, 66, 0, 0, 820, 822, 5, 188, 0, 0, 821, 820, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 823, 1, 0, 0, 0, 823, 824, 5, 158, 0, 0, 824, 826, 5, 426, 0, 0, 825, 827, 5, 235, 0, 0, 826, 825, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 5, 166, 0, 0, 829, 830, 5, 329, 0, 0, 830, 832, 3, 624, 312, 0, 831, 833, 3, 56, 28, 0, 832, 831, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 13, 1, 0, 0, 0, 834, 836, 5, 134, 0, 0, 835, 837, 5, 204, 0, 0, 836, 835, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 1, 0, 0, 0, 838, 839, 5, 279, 0, 0, 839, 840, 5, 399, 0, 0, 840, 841, 5, 426, 0, 0, 841, 842, 5, 400, 0, 0, 842, 15, 1, 0, 0, 0, 843, 844, 5, 120, 0, 0, 844, 845, 5, 329, 0, 0, 845, 846, 3, 624, 312, 0, 846, 847, 5, 341, 0, 0, 847, 849, 5, 426, 0, 0, 848, 850, 3, 14, 7, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 17, 1, 0, 0, 0, 851, 857, 5, 153, 0, 0, 852, 854, 5, 123, 0, 0, 853, 852, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 856, 5, 329, 0, 0, 856, 858, 3, 624, 312, 0, 857, 853, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 860, 5, 139, 0, 0, 860, 862, 5, 426, 0, 0, 861, 863, 3, 424, 212, 0, 862, 861, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 19, 1, 0, 0, 0, 864, 865, 5, 277, 0, 0, 865, 866, 5, 103, 0, 0, 866, 869, 3, 22, 11, 0, 867, 868, 5, 278, 0, 0, 868, 870, 3, 22, 11, 0, 869, 867, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, 872, 5, 387, 0, 0, 872, 874, 3, 230, 115, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 21, 1, 0, 0, 0, 875, 878, 3, 472, 236, 0, 876, 877, 5, 395, 0, 0, 877, 879, 3, 26, 13, 0, 878, 876, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 23, 1, 0, 0, 0, 880, 881, 5, 277, 0, 0, 881, 882, 5, 187, 0, 0, 882, 885, 3, 22, 11, 0, 883, 884, 5, 166, 0, 0, 884, 886, 3, 472, 236, 0, 885, 883, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 889, 1, 0, 0, 0, 887, 888, 5, 387, 0, 0, 888, 890, 3, 230, 115, 0, 889, 887, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 25, 1, 0, 0, 0, 891, 894, 5, 426, 0, 0, 892, 893, 5, 395, 0, 0, 893, 895, 5, 426, 0, 0, 894, 892, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 27, 1, 0, 0, 0, 896, 955, 3, 42, 21, 0, 897, 955, 3, 46, 23, 0, 898, 955, 3, 48, 24, 0, 899, 955, 3, 436, 218, 0, 900, 955, 3, 54, 27, 0, 901, 955, 3, 52, 26, 0, 902, 955, 3, 412, 206, 0, 903, 955, 3, 64, 32, 0, 904, 955, 3, 72, 36, 0, 905, 955, 3, 138, 69, 0, 906, 955, 3, 160, 80, 0, 907, 955, 3, 176, 88, 0, 908, 955, 3, 180, 90, 0, 909, 955, 3, 184, 92, 0, 910, 955, 3, 182, 91, 0, 911, 955, 3, 174, 87, 0, 912, 955, 3, 178, 89, 0, 913, 955, 3, 146, 73, 0, 914, 955, 3, 152, 76, 0, 915, 955, 3, 148, 74, 0, 916, 955, 3, 150, 75, 0, 917, 955, 3, 154, 77, 0, 918, 955, 3, 156, 78, 0, 919, 955, 3, 158, 79, 0, 920, 955, 3, 66, 33, 0, 921, 955, 3, 76, 38, 0, 922, 955, 3, 82, 41, 0, 923, 955, 3, 78, 39, 0, 924, 955, 3, 84, 42, 0, 925, 955, 3, 86, 43, 0, 926, 955, 3, 88, 44, 0, 927, 955, 3, 90, 45, 0, 928, 955, 3, 92, 46, 0, 929, 955, 3, 106, 53, 0, 930, 955, 3, 98, 49, 0, 931, 955, 3, 108, 54, 0, 932, 955, 3, 100, 50, 0, 933, 955, 3, 94, 47, 0, 934, 955, 3, 96, 48, 0, 935, 955, 3, 104, 52, 0, 936, 955, 3, 102, 51, 0, 937, 938, 5, 1, 0, 0, 938, 940, 7, 2, 0, 0, 939, 941, 5, 431, 0, 0, 940, 939, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 955, 1, 0, 0, 0, 944, 945, 5, 176, 0, 0, 945, 947, 5, 258, 0, 0, 946, 948, 5, 426, 0, 0, 947, 946, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 955, 1, 0, 0, 0, 951, 955, 3, 650, 325, 0, 952, 955, 3, 438, 219, 0, 953, 955, 3, 440, 220, 0, 954, 896, 1, 0, 0, 0, 954, 897, 1, 0, 0, 0, 954, 898, 1, 0, 0, 0, 954, 899, 1, 0, 0, 0, 954, 900, 1, 0, 0, 0, 954, 901, 1, 0, 0, 0, 954, 902, 1, 0, 0, 0, 954, 903, 1, 0, 0, 0, 954, 904, 1, 0, 0, 0, 954, 905, 1, 0, 0, 0, 954, 906, 1, 0, 0, 0, 954, 907, 1, 0, 0, 0, 954, 908, 1, 0, 0, 0, 954, 909, 1, 0, 0, 0, 954, 910, 1, 0, 0, 0, 954, 911, 1, 0, 0, 0, 954, 912, 1, 0, 0, 0, 954, 913, 1, 0, 0, 0, 954, 914, 1, 0, 0, 0, 954, 915, 1, 0, 0, 0, 954, 916, 1, 0, 0, 0, 954, 917, 1, 0, 0, 0, 954, 918, 1, 0, 0, 0, 954, 919, 1, 0, 0, 0, 954, 920, 1, 0, 0, 0, 954, 921, 1, 0, 0, 0, 954, 922, 1, 0, 0, 0, 954, 923, 1, 0, 0, 0, 954, 924, 1, 0, 0, 0, 954, 925, 1, 0, 0, 0, 954, 926, 1, 0, 0, 0, 954, 927, 1, 0, 0, 0, 954, 928, 1, 0, 0, 0, 954, 929, 1, 0, 0, 0, 954, 930, 1, 0, 0, 0, 954, 931, 1, 0, 0, 0, 954, 932, 1, 0, 0, 0, 954, 933, 1, 0, 0, 0, 954, 934, 1, 0, 0, 0, 954, 935, 1, 0, 0, 0, 954, 936, 1, 0, 0, 0, 954, 937, 1, 0, 0, 0, 954, 944, 1, 0, 0, 0, 954, 951, 1, 0, 0, 0, 954, 952, 1, 0, 0, 0, 954, 953, 1, 0, 0, 0, 955, 29, 1, 0, 0, 0, 956, 957, 5, 151, 0, 0, 957, 958, 5, 117, 0, 0, 958, 31, 1, 0, 0, 0, 959, 960, 5, 151, 0, 0, 960, 961, 5, 216, 0, 0, 961, 962, 5, 117, 0, 0, 962, 33, 1, 0, 0, 0, 963, 964, 7, 3, 0, 0, 964, 35, 1, 0, 0, 0, 965, 966, 3, 662, 331, 0, 966, 967, 5, 284, 0, 0, 967, 37, 1, 0, 0, 0, 968, 969, 3, 664, 332, 0, 969, 970, 5, 284, 0, 0, 970, 39, 1, 0, 0, 0, 971, 972, 5, 321, 0, 0, 972, 973, 5, 17, 0, 0, 973, 974, 5, 92, 0, 0, 974, 41, 1, 0, 0, 0, 975, 977, 5, 58, 0, 0, 976, 978, 5, 273, 0, 0, 977, 976, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 981, 3, 70, 35, 0, 980, 982, 3, 32, 16, 0, 981, 980, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 983, 1, 0, 0, 0, 983, 985, 3, 474, 237, 0, 984, 986, 3, 50, 25, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 988, 1, 0, 0, 0, 987, 989, 3, 424, 212, 0, 988, 987, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 992, 1, 0, 0, 0, 990, 991, 5, 196, 0, 0, 991, 993, 5, 426, 0, 0, 992, 990, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 997, 1, 0, 0, 0, 994, 995, 5, 387, 0, 0, 995, 996, 5, 76, 0, 0, 996, 998, 3, 230, 115, 0, 997, 994, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 1016, 1, 0, 0, 0, 999, 1000, 5, 58, 0, 0, 1000, 1001, 5, 273, 0, 0, 1001, 1003, 3, 70, 35, 0, 1002, 1004, 3, 32, 16, 0, 1003, 1002, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1007, 3, 474, 237, 0, 1006, 1008, 3, 50, 25, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1013, 3, 44, 22, 0, 1010, 1011, 5, 387, 0, 0, 1011, 1012, 5, 76, 0, 0, 1012, 1014, 3, 230, 115, 0, 1013, 1010, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1016, 1, 0, 0, 0, 1015, 975, 1, 0, 0, 0, 1015, 999, 1, 0, 0, 0, 1016, 43, 1, 0, 0, 0, 1017, 1018, 5, 370, 0, 0, 1018, 1019, 3, 472, 236, 0, 1019, 45, 1, 0, 0, 0, 1020, 1021, 5, 368, 0, 0, 1021, 1022, 3, 472, 236, 0, 1022, 47, 1, 0, 0, 0, 1023, 1024, 5, 101, 0, 0, 1024, 1026, 3, 70, 35, 0, 1025, 1027, 3, 30, 15, 0, 1026, 1025, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1030, 3, 472, 236, 0, 1029, 1031, 3, 34, 17, 0, 1030, 1029, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 49, 1, 0, 0, 0, 1032, 1033, 5, 47, 0, 0, 1033, 1034, 5, 426, 0, 0, 1034, 51, 1, 0, 0, 0, 1035, 1037, 5, 351, 0, 0, 1036, 1038, 5, 329, 0, 0, 1037, 1036, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1045, 3, 624, 312, 0, 1040, 1041, 5, 46, 0, 0, 1041, 1042, 5, 399, 0, 0, 1042, 1043, 3, 254, 127, 0, 1043, 1044, 5, 400, 0, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1040, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1048, 1, 0, 0, 0, 1047, 1049, 5, 135, 0, 0, 1048, 1047, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 53, 1, 0, 0, 0, 1050, 1051, 5, 101, 0, 0, 1051, 1053, 5, 329, 0, 0, 1052, 1054, 3, 30, 15, 0, 1053, 1052, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1057, 3, 478, 239, 0, 1056, 1058, 5, 255, 0, 0, 1057, 1056, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1061, 3, 14, 7, 0, 1060, 1059, 1, 0, 0, 0, 1060, 1061, 1, 0, 0, 0, 1061, 55, 1, 0, 0, 0, 1062, 1063, 5, 160, 0, 0, 1063, 1064, 5, 426, 0, 0, 1064, 1065, 5, 301, 0, 0, 1065, 1066, 5, 426, 0, 0, 1066, 57, 1, 0, 0, 0, 1067, 1070, 3, 638, 319, 0, 1068, 1069, 5, 395, 0, 0, 1069, 1071, 3, 638, 319, 0, 1070, 1068, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1085, 1, 0, 0, 0, 1072, 1082, 3, 638, 319, 0, 1073, 1078, 5, 395, 0, 0, 1074, 1079, 5, 104, 0, 0, 1075, 1079, 5, 175, 0, 0, 1076, 1079, 5, 375, 0, 0, 1077, 1079, 3, 638, 319, 0, 1078, 1074, 1, 0, 0, 0, 1078, 1075, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1077, 1, 0, 0, 0, 1079, 1081, 1, 0, 0, 0, 1080, 1073, 1, 0, 0, 0, 1081, 1084, 1, 0, 0, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1086, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 1072, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 59, 1, 0, 0, 0, 1087, 1089, 3, 58, 29, 0, 1088, 1090, 3, 626, 313, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 61, 1, 0, 0, 0, 1091, 1093, 3, 476, 238, 0, 1092, 1094, 3, 626, 313, 0, 1093, 1092, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1096, 1, 0, 0, 0, 1095, 1097, 3, 260, 130, 0, 1096, 1095, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 63, 1, 0, 0, 0, 1098, 1121, 7, 4, 0, 0, 1099, 1101, 3, 70, 35, 0, 1100, 1102, 5, 122, 0, 0, 1101, 1100, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1104, 3, 472, 236, 0, 1104, 1122, 1, 0, 0, 0, 1105, 1107, 5, 69, 0, 0, 1106, 1108, 5, 122, 0, 0, 1107, 1106, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 1, 0, 0, 0, 1109, 1122, 3, 472, 236, 0, 1110, 1112, 5, 141, 0, 0, 1111, 1113, 5, 122, 0, 0, 1112, 1111, 1, 0, 0, 0, 1112, 1113, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1122, 3, 556, 278, 0, 1115, 1118, 5, 138, 0, 0, 1116, 1118, 5, 122, 0, 0, 1117, 1115, 1, 0, 0, 0, 1117, 1116, 1, 0, 0, 0, 1118, 1119, 1, 0, 0, 0, 1119, 1122, 3, 62, 31, 0, 1120, 1122, 3, 62, 31, 0, 1121, 1099, 1, 0, 0, 0, 1121, 1105, 1, 0, 0, 0, 1121, 1110, 1, 0, 0, 0, 1121, 1117, 1, 0, 0, 0, 1121, 1120, 1, 0, 0, 0, 1122, 65, 1, 0, 0, 0, 1123, 1124, 5, 10, 0, 0, 1124, 1125, 5, 329, 0, 0, 1125, 1138, 3, 624, 312, 0, 1126, 1127, 5, 52, 0, 0, 1127, 1134, 5, 319, 0, 0, 1128, 1135, 5, 215, 0, 0, 1129, 1130, 5, 134, 0, 0, 1130, 1132, 5, 46, 0, 0, 1131, 1133, 3, 254, 127, 0, 1132, 1131, 1, 0, 0, 0, 1132, 1133, 1, 0, 0, 0, 1133, 1135, 1, 0, 0, 0, 1134, 1128, 1, 0, 0, 0, 1134, 1129, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1139, 1, 0, 0, 0, 1136, 1137, 5, 33, 0, 0, 1137, 1139, 5, 204, 0, 0, 1138, 1126, 1, 0, 0, 0, 1138, 1136, 1, 0, 0, 0, 1139, 67, 1, 0, 0, 0, 1140, 1141, 7, 5, 0, 0, 1141, 69, 1, 0, 0, 0, 1142, 1143, 7, 6, 0, 0, 1143, 71, 1, 0, 0, 0, 1144, 1145, 5, 308, 0, 0, 1145, 1148, 7, 7, 0, 0, 1146, 1147, 5, 184, 0, 0, 1147, 1149, 3, 194, 97, 0, 1148, 1146, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1328, 1, 0, 0, 0, 1150, 1152, 5, 308, 0, 0, 1151, 1153, 5, 122, 0, 0, 1152, 1151, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1158, 5, 330, 0, 0, 1155, 1156, 3, 68, 34, 0, 1156, 1157, 3, 472, 236, 0, 1157, 1159, 1, 0, 0, 0, 1158, 1155, 1, 0, 0, 0, 1158, 1159, 1, 0, 0, 0, 1159, 1161, 1, 0, 0, 0, 1160, 1162, 3, 74, 37, 0, 1161, 1160, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1328, 1, 0, 0, 0, 1163, 1164, 5, 308, 0, 0, 1164, 1168, 5, 379, 0, 0, 1165, 1166, 3, 68, 34, 0, 1166, 1167, 3, 472, 236, 0, 1167, 1169, 1, 0, 0, 0, 1168, 1165, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1173, 1, 0, 0, 0, 1170, 1171, 5, 184, 0, 0, 1171, 1174, 3, 194, 97, 0, 1172, 1174, 3, 194, 97, 0, 1173, 1170, 1, 0, 0, 0, 1173, 1172, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1328, 1, 0, 0, 0, 1175, 1176, 5, 308, 0, 0, 1176, 1177, 5, 202, 0, 0, 1177, 1181, 5, 379, 0, 0, 1178, 1179, 3, 68, 34, 0, 1179, 1180, 3, 472, 236, 0, 1180, 1182, 1, 0, 0, 0, 1181, 1178, 1, 0, 0, 0, 1181, 1182, 1, 0, 0, 0, 1182, 1186, 1, 0, 0, 0, 1183, 1184, 5, 184, 0, 0, 1184, 1187, 3, 194, 97, 0, 1185, 1187, 3, 194, 97, 0, 1186, 1183, 1, 0, 0, 0, 1186, 1185, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1328, 1, 0, 0, 0, 1188, 1190, 5, 308, 0, 0, 1189, 1191, 5, 315, 0, 0, 1190, 1189, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 1193, 5, 46, 0, 0, 1193, 1194, 3, 68, 34, 0, 1194, 1198, 3, 476, 238, 0, 1195, 1196, 3, 68, 34, 0, 1196, 1197, 3, 472, 236, 0, 1197, 1199, 1, 0, 0, 0, 1198, 1195, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1203, 1, 0, 0, 0, 1200, 1201, 5, 184, 0, 0, 1201, 1204, 3, 194, 97, 0, 1202, 1204, 3, 194, 97, 0, 1203, 1200, 1, 0, 0, 0, 1203, 1202, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 1328, 1, 0, 0, 0, 1205, 1206, 5, 308, 0, 0, 1206, 1209, 5, 142, 0, 0, 1207, 1208, 5, 184, 0, 0, 1208, 1210, 3, 556, 278, 0, 1209, 1207, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 1328, 1, 0, 0, 0, 1211, 1212, 5, 308, 0, 0, 1212, 1213, 5, 239, 0, 0, 1213, 1215, 3, 476, 238, 0, 1214, 1216, 3, 626, 313, 0, 1215, 1214, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1218, 1, 0, 0, 0, 1217, 1219, 3, 494, 247, 0, 1218, 1217, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1221, 1, 0, 0, 0, 1220, 1222, 3, 542, 271, 0, 1221, 1220, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 1224, 1, 0, 0, 0, 1223, 1225, 3, 386, 193, 0, 1224, 1223, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 1328, 1, 0, 0, 0, 1226, 1227, 5, 308, 0, 0, 1227, 1233, 5, 58, 0, 0, 1228, 1229, 3, 70, 35, 0, 1229, 1230, 3, 472, 236, 0, 1230, 1234, 1, 0, 0, 0, 1231, 1232, 5, 329, 0, 0, 1232, 1234, 3, 478, 239, 0, 1233, 1228, 1, 0, 0, 0, 1233, 1231, 1, 0, 0, 0, 1234, 1328, 1, 0, 0, 0, 1235, 1236, 5, 308, 0, 0, 1236, 1237, 5, 329, 0, 0, 1237, 1241, 5, 122, 0, 0, 1238, 1239, 3, 68, 34, 0, 1239, 1240, 3, 472, 236, 0, 1240, 1242, 1, 0, 0, 0, 1241, 1238, 1, 0, 0, 0, 1241, 1242, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1243, 1244, 5, 184, 0, 0, 1244, 1246, 3, 194, 97, 0, 1245, 1247, 3, 626, 313, 0, 1246, 1245, 1, 0, 0, 0, 1246, 1247, 1, 0, 0, 0, 1247, 1328, 1, 0, 0, 0, 1248, 1249, 5, 308, 0, 0, 1249, 1250, 5, 332, 0, 0, 1250, 1254, 3, 478, 239, 0, 1251, 1252, 5, 399, 0, 0, 1252, 1253, 5, 426, 0, 0, 1253, 1255, 5, 400, 0, 0, 1254, 1251, 1, 0, 0, 0, 1254, 1255, 1, 0, 0, 0, 1255, 1328, 1, 0, 0, 0, 1256, 1257, 5, 308, 0, 0, 1257, 1269, 5, 191, 0, 0, 1258, 1259, 3, 70, 35, 0, 1259, 1261, 3, 472, 236, 0, 1260, 1262, 5, 122, 0, 0, 1261, 1260, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1270, 1, 0, 0, 0, 1263, 1265, 3, 60, 30, 0, 1264, 1263, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1267, 1, 0, 0, 0, 1266, 1268, 5, 122, 0, 0, 1267, 1266, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1270, 1, 0, 0, 0, 1269, 1258, 1, 0, 0, 0, 1269, 1264, 1, 0, 0, 0, 1270, 1328, 1, 0, 0, 0, 1271, 1272, 5, 308, 0, 0, 1272, 1299, 5, 50, 0, 0, 1273, 1274, 5, 51, 0, 0, 1274, 1275, 5, 405, 0, 0, 1275, 1300, 5, 431, 0, 0, 1276, 1277, 3, 70, 35, 0, 1277, 1278, 3, 472, 236, 0, 1278, 1283, 1, 0, 0, 0, 1279, 1281, 3, 60, 30, 0, 1280, 1279, 1, 0, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1283, 1, 0, 0, 0, 1282, 1276, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1286, 3, 406, 203, 0, 1285, 1284, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1288, 1, 0, 0, 0, 1287, 1289, 3, 408, 204, 0, 1288, 1287, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1291, 1, 0, 0, 0, 1290, 1292, 3, 410, 205, 0, 1291, 1290, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1294, 1, 0, 0, 0, 1293, 1295, 3, 542, 271, 0, 1294, 1293, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1298, 3, 386, 193, 0, 1297, 1296, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1300, 1, 0, 0, 0, 1299, 1273, 1, 0, 0, 0, 1299, 1282, 1, 0, 0, 0, 1300, 1328, 1, 0, 0, 0, 1301, 1302, 5, 308, 0, 0, 1302, 1328, 5, 346, 0, 0, 1303, 1304, 5, 308, 0, 0, 1304, 1305, 5, 54, 0, 0, 1305, 1328, 5, 426, 0, 0, 1306, 1307, 5, 308, 0, 0, 1307, 1311, 5, 280, 0, 0, 1308, 1309, 5, 243, 0, 0, 1309, 1312, 3, 638, 319, 0, 1310, 1312, 5, 244, 0, 0, 1311, 1308, 1, 0, 0, 0, 1311, 1310, 1, 0, 0, 0, 1312, 1328, 1, 0, 0, 0, 1313, 1314, 5, 308, 0, 0, 1314, 1328, 5, 70, 0, 0, 1315, 1317, 5, 308, 0, 0, 1316, 1318, 5, 138, 0, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 7, 8, 0, 0, 1320, 1321, 5, 224, 0, 0, 1321, 1325, 3, 478, 239, 0, 1322, 1323, 3, 68, 34, 0, 1323, 1324, 3, 472, 236, 0, 1324, 1326, 1, 0, 0, 0, 1325, 1322, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 1328, 1, 0, 0, 0, 1327, 1144, 1, 0, 0, 0, 1327, 1150, 1, 0, 0, 0, 1327, 1163, 1, 0, 0, 0, 1327, 1175, 1, 0, 0, 0, 1327, 1188, 1, 0, 0, 0, 1327, 1205, 1, 0, 0, 0, 1327, 1211, 1, 0, 0, 0, 1327, 1226, 1, 0, 0, 0, 1327, 1235, 1, 0, 0, 0, 1327, 1248, 1, 0, 0, 0, 1327, 1256, 1, 0, 0, 0, 1327, 1271, 1, 0, 0, 0, 1327, 1301, 1, 0, 0, 0, 1327, 1303, 1, 0, 0, 0, 1327, 1306, 1, 0, 0, 0, 1327, 1313, 1, 0, 0, 0, 1327, 1315, 1, 0, 0, 0, 1328, 73, 1, 0, 0, 0, 1329, 1330, 5, 384, 0, 0, 1330, 1331, 3, 638, 319, 0, 1331, 1332, 5, 405, 0, 0, 1332, 1333, 5, 426, 0, 0, 1333, 1338, 1, 0, 0, 0, 1334, 1335, 5, 184, 0, 0, 1335, 1338, 3, 194, 97, 0, 1336, 1338, 3, 194, 97, 0, 1337, 1329, 1, 0, 0, 0, 1337, 1334, 1, 0, 0, 0, 1337, 1336, 1, 0, 0, 0, 1338, 75, 1, 0, 0, 0, 1339, 1340, 5, 190, 0, 0, 1340, 1341, 5, 329, 0, 0, 1341, 1342, 3, 624, 312, 0, 1342, 1343, 3, 80, 40, 0, 1343, 77, 1, 0, 0, 0, 1344, 1345, 5, 190, 0, 0, 1345, 1346, 3, 70, 35, 0, 1346, 1347, 3, 472, 236, 0, 1347, 1348, 3, 80, 40, 0, 1348, 79, 1, 0, 0, 0, 1349, 1350, 7, 9, 0, 0, 1350, 81, 1, 0, 0, 0, 1351, 1352, 5, 361, 0, 0, 1352, 1353, 5, 329, 0, 0, 1353, 1354, 3, 624, 312, 0, 1354, 83, 1, 0, 0, 0, 1355, 1356, 5, 361, 0, 0, 1356, 1357, 3, 70, 35, 0, 1357, 1358, 3, 472, 236, 0, 1358, 85, 1, 0, 0, 0, 1359, 1360, 5, 58, 0, 0, 1360, 1361, 5, 287, 0, 0, 1361, 1362, 3, 638, 319, 0, 1362, 87, 1, 0, 0, 0, 1363, 1364, 5, 101, 0, 0, 1364, 1365, 5, 287, 0, 0, 1365, 1366, 3, 638, 319, 0, 1366, 89, 1, 0, 0, 0, 1367, 1368, 5, 143, 0, 0, 1368, 1370, 3, 118, 59, 0, 1369, 1371, 3, 112, 56, 0, 1370, 1369, 1, 0, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1372, 1, 0, 0, 0, 1372, 1373, 5, 341, 0, 0, 1373, 1375, 3, 124, 62, 0, 1374, 1376, 3, 130, 65, 0, 1375, 1374, 1, 0, 0, 0, 1375, 1376, 1, 0, 0, 0, 1376, 91, 1, 0, 0, 0, 1377, 1379, 5, 283, 0, 0, 1378, 1380, 3, 132, 66, 0, 1379, 1378, 1, 0, 0, 0, 1379, 1380, 1, 0, 0, 0, 1380, 1381, 1, 0, 0, 0, 1381, 1383, 3, 118, 59, 0, 1382, 1384, 3, 112, 56, 0, 1383, 1382, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1385, 1, 0, 0, 0, 1385, 1386, 5, 139, 0, 0, 1386, 1387, 3, 124, 62, 0, 1387, 93, 1, 0, 0, 0, 1388, 1390, 5, 143, 0, 0, 1389, 1391, 5, 287, 0, 0, 1390, 1389, 1, 0, 0, 0, 1390, 1391, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1397, 3, 638, 319, 0, 1393, 1394, 5, 397, 0, 0, 1394, 1396, 3, 638, 319, 0, 1395, 1393, 1, 0, 0, 0, 1396, 1399, 1, 0, 0, 0, 1397, 1395, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1400, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1400, 1401, 5, 341, 0, 0, 1401, 1403, 3, 124, 62, 0, 1402, 1404, 3, 136, 68, 0, 1403, 1402, 1, 0, 0, 0, 1403, 1404, 1, 0, 0, 0, 1404, 95, 1, 0, 0, 0, 1405, 1407, 5, 283, 0, 0, 1406, 1408, 3, 134, 67, 0, 1407, 1406, 1, 0, 0, 0, 1407, 1408, 1, 0, 0, 0, 1408, 1410, 1, 0, 0, 0, 1409, 1411, 5, 287, 0, 0, 1410, 1409, 1, 0, 0, 0, 1410, 1411, 1, 0, 0, 0, 1411, 1412, 1, 0, 0, 0, 1412, 1417, 3, 638, 319, 0, 1413, 1414, 5, 397, 0, 0, 1414, 1416, 3, 638, 319, 0, 1415, 1413, 1, 0, 0, 0, 1416, 1419, 1, 0, 0, 0, 1417, 1415, 1, 0, 0, 0, 1417, 1418, 1, 0, 0, 0, 1418, 1420, 1, 0, 0, 0, 1419, 1417, 1, 0, 0, 0, 1420, 1421, 5, 139, 0, 0, 1421, 1422, 3, 124, 62, 0, 1422, 97, 1, 0, 0, 0, 1423, 1424, 5, 308, 0, 0, 1424, 1425, 5, 287, 0, 0, 1425, 1426, 5, 143, 0, 0, 1426, 1427, 3, 126, 63, 0, 1427, 99, 1, 0, 0, 0, 1428, 1429, 5, 308, 0, 0, 1429, 1430, 5, 288, 0, 0, 1430, 101, 1, 0, 0, 0, 1431, 1432, 5, 308, 0, 0, 1432, 1433, 5, 62, 0, 0, 1433, 1434, 5, 288, 0, 0, 1434, 103, 1, 0, 0, 0, 1435, 1436, 5, 304, 0, 0, 1436, 1440, 5, 287, 0, 0, 1437, 1441, 5, 7, 0, 0, 1438, 1441, 5, 213, 0, 0, 1439, 1441, 3, 638, 319, 0, 1440, 1437, 1, 0, 0, 0, 1440, 1438, 1, 0, 0, 0, 1440, 1439, 1, 0, 0, 0, 1441, 105, 1, 0, 0, 0, 1442, 1443, 5, 308, 0, 0, 1443, 1445, 5, 143, 0, 0, 1444, 1446, 3, 126, 63, 0, 1445, 1444, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1449, 1, 0, 0, 0, 1447, 1448, 5, 224, 0, 0, 1448, 1450, 3, 110, 55, 0, 1449, 1447, 1, 0, 0, 0, 1449, 1450, 1, 0, 0, 0, 1450, 107, 1, 0, 0, 0, 1451, 1452, 5, 308, 0, 0, 1452, 1453, 5, 252, 0, 0, 1453, 1454, 3, 638, 319, 0, 1454, 109, 1, 0, 0, 0, 1455, 1458, 5, 7, 0, 0, 1456, 1458, 3, 116, 58, 0, 1457, 1455, 1, 0, 0, 0, 1457, 1456, 1, 0, 0, 0, 1458, 111, 1, 0, 0, 0, 1459, 1460, 5, 224, 0, 0, 1460, 1461, 3, 114, 57, 0, 1461, 113, 1, 0, 0, 0, 1462, 1463, 3, 70, 35, 0, 1463, 1464, 3, 472, 236, 0, 1464, 1474, 1, 0, 0, 0, 1465, 1467, 5, 329, 0, 0, 1466, 1465, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1474, 3, 624, 312, 0, 1469, 1470, 5, 366, 0, 0, 1470, 1474, 5, 426, 0, 0, 1471, 1472, 5, 303, 0, 0, 1472, 1474, 3, 638, 319, 0, 1473, 1462, 1, 0, 0, 0, 1473, 1466, 1, 0, 0, 0, 1473, 1469, 1, 0, 0, 0, 1473, 1471, 1, 0, 0, 0, 1474, 115, 1, 0, 0, 0, 1475, 1476, 3, 70, 35, 0, 1476, 1477, 3, 472, 236, 0, 1477, 1496, 1, 0, 0, 0, 1478, 1480, 5, 329, 0, 0, 1479, 1478, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1486, 3, 478, 239, 0, 1482, 1483, 5, 399, 0, 0, 1483, 1484, 3, 254, 127, 0, 1484, 1485, 5, 400, 0, 0, 1485, 1487, 1, 0, 0, 0, 1486, 1482, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1490, 3, 626, 313, 0, 1489, 1488, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1496, 1, 0, 0, 0, 1491, 1492, 5, 366, 0, 0, 1492, 1496, 5, 426, 0, 0, 1493, 1494, 5, 303, 0, 0, 1494, 1496, 3, 638, 319, 0, 1495, 1475, 1, 0, 0, 0, 1495, 1479, 1, 0, 0, 0, 1495, 1491, 1, 0, 0, 0, 1495, 1493, 1, 0, 0, 0, 1496, 117, 1, 0, 0, 0, 1497, 1502, 3, 120, 60, 0, 1498, 1499, 5, 397, 0, 0, 1499, 1501, 3, 120, 60, 0, 1500, 1498, 1, 0, 0, 0, 1501, 1504, 1, 0, 0, 0, 1502, 1500, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 119, 1, 0, 0, 0, 1504, 1502, 1, 0, 0, 0, 1505, 1510, 3, 122, 61, 0, 1506, 1507, 5, 399, 0, 0, 1507, 1508, 3, 254, 127, 0, 1508, 1509, 5, 400, 0, 0, 1509, 1511, 1, 0, 0, 0, 1510, 1506, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 121, 1, 0, 0, 0, 1512, 1513, 7, 10, 0, 0, 1513, 123, 1, 0, 0, 0, 1514, 1519, 3, 126, 63, 0, 1515, 1516, 5, 397, 0, 0, 1516, 1518, 3, 126, 63, 0, 1517, 1515, 1, 0, 0, 0, 1518, 1521, 1, 0, 0, 0, 1519, 1517, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 125, 1, 0, 0, 0, 1521, 1519, 1, 0, 0, 0, 1522, 1523, 5, 369, 0, 0, 1523, 1529, 3, 642, 321, 0, 1524, 1525, 5, 144, 0, 0, 1525, 1529, 3, 642, 321, 0, 1526, 1527, 5, 287, 0, 0, 1527, 1529, 3, 638, 319, 0, 1528, 1522, 1, 0, 0, 0, 1528, 1524, 1, 0, 0, 0, 1528, 1526, 1, 0, 0, 0, 1529, 127, 1, 0, 0, 0, 1530, 1531, 5, 369, 0, 0, 1531, 1536, 3, 642, 321, 0, 1532, 1533, 5, 287, 0, 0, 1533, 1536, 3, 638, 319, 0, 1534, 1536, 3, 638, 319, 0, 1535, 1530, 1, 0, 0, 0, 1535, 1532, 1, 0, 0, 0, 1535, 1534, 1, 0, 0, 0, 1536, 129, 1, 0, 0, 0, 1537, 1538, 5, 387, 0, 0, 1538, 1539, 5, 143, 0, 0, 1539, 1540, 5, 227, 0, 0, 1540, 131, 1, 0, 0, 0, 1541, 1542, 5, 143, 0, 0, 1542, 1543, 5, 227, 0, 0, 1543, 1544, 5, 134, 0, 0, 1544, 133, 1, 0, 0, 0, 1545, 1546, 5, 5, 0, 0, 1546, 1547, 5, 227, 0, 0, 1547, 1548, 5, 134, 0, 0, 1548, 135, 1, 0, 0, 0, 1549, 1550, 5, 387, 0, 0, 1550, 1551, 5, 5, 0, 0, 1551, 1552, 5, 227, 0, 0, 1552, 137, 1, 0, 0, 0, 1553, 1555, 5, 212, 0, 0, 1554, 1556, 5, 276, 0, 0, 1555, 1554, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1557, 1, 0, 0, 0, 1557, 1558, 5, 329, 0, 0, 1558, 1564, 3, 478, 239, 0, 1559, 1560, 7, 11, 0, 0, 1560, 1562, 5, 239, 0, 0, 1561, 1563, 3, 630, 315, 0, 1562, 1561, 1, 0, 0, 0, 1562, 1563, 1, 0, 0, 0, 1563, 1565, 1, 0, 0, 0, 1564, 1559, 1, 0, 0, 0, 1564, 1565, 1, 0, 0, 0, 1565, 139, 1, 0, 0, 0, 1566, 1571, 3, 142, 71, 0, 1567, 1568, 5, 397, 0, 0, 1568, 1570, 3, 142, 71, 0, 1569, 1567, 1, 0, 0, 0, 1570, 1573, 1, 0, 0, 0, 1571, 1569, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 141, 1, 0, 0, 0, 1573, 1571, 1, 0, 0, 0, 1574, 1575, 3, 144, 72, 0, 1575, 1576, 5, 426, 0, 0, 1576, 143, 1, 0, 0, 0, 1577, 1578, 7, 12, 0, 0, 1578, 145, 1, 0, 0, 0, 1579, 1581, 5, 58, 0, 0, 1580, 1582, 5, 333, 0, 0, 1581, 1580, 1, 0, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 1, 0, 0, 0, 1583, 1584, 5, 141, 0, 0, 1584, 1585, 3, 554, 277, 0, 1585, 1586, 5, 17, 0, 0, 1586, 1589, 5, 426, 0, 0, 1587, 1588, 5, 370, 0, 0, 1588, 1590, 3, 140, 70, 0, 1589, 1587, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 147, 1, 0, 0, 0, 1591, 1593, 5, 101, 0, 0, 1592, 1594, 5, 333, 0, 0, 1593, 1592, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 1595, 1, 0, 0, 0, 1595, 1597, 5, 141, 0, 0, 1596, 1598, 3, 30, 15, 0, 1597, 1596, 1, 0, 0, 0, 1597, 1598, 1, 0, 0, 0, 1598, 1599, 1, 0, 0, 0, 1599, 1600, 3, 556, 278, 0, 1600, 149, 1, 0, 0, 0, 1601, 1602, 5, 271, 0, 0, 1602, 1603, 7, 13, 0, 0, 1603, 151, 1, 0, 0, 0, 1604, 1605, 5, 58, 0, 0, 1605, 1606, 5, 333, 0, 0, 1606, 1607, 5, 194, 0, 0, 1607, 1608, 5, 432, 0, 0, 1608, 1610, 5, 399, 0, 0, 1609, 1611, 3, 248, 124, 0, 1610, 1609, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1613, 5, 400, 0, 0, 1613, 1614, 3, 580, 290, 0, 1614, 153, 1, 0, 0, 0, 1615, 1616, 5, 101, 0, 0, 1616, 1617, 5, 333, 0, 0, 1617, 1619, 5, 194, 0, 0, 1618, 1620, 3, 30, 15, 0, 1619, 1618, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1620, 1621, 1, 0, 0, 0, 1621, 1622, 5, 432, 0, 0, 1622, 155, 1, 0, 0, 0, 1623, 1624, 5, 58, 0, 0, 1624, 1625, 5, 155, 0, 0, 1625, 1626, 3, 638, 319, 0, 1626, 1627, 5, 224, 0, 0, 1627, 1628, 5, 329, 0, 0, 1628, 1629, 3, 478, 239, 0, 1629, 1630, 3, 264, 132, 0, 1630, 1631, 5, 17, 0, 0, 1631, 1635, 5, 426, 0, 0, 1632, 1633, 5, 387, 0, 0, 1633, 1634, 5, 84, 0, 0, 1634, 1636, 5, 265, 0, 0, 1635, 1632, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1639, 1, 0, 0, 0, 1637, 1638, 5, 150, 0, 0, 1638, 1640, 3, 226, 113, 0, 1639, 1637, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 1644, 1, 0, 0, 0, 1641, 1642, 5, 154, 0, 0, 1642, 1643, 5, 329, 0, 0, 1643, 1645, 3, 478, 239, 0, 1644, 1641, 1, 0, 0, 0, 1644, 1645, 1, 0, 0, 0, 1645, 1649, 1, 0, 0, 0, 1646, 1647, 5, 238, 0, 0, 1647, 1648, 5, 32, 0, 0, 1648, 1650, 3, 264, 132, 0, 1649, 1646, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1655, 1, 0, 0, 0, 1651, 1653, 3, 222, 111, 0, 1652, 1651, 1, 0, 0, 0, 1652, 1653, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 1656, 3, 246, 123, 0, 1655, 1652, 1, 0, 0, 0, 1655, 1656, 1, 0, 0, 0, 1656, 1658, 1, 0, 0, 0, 1657, 1659, 3, 424, 212, 0, 1658, 1657, 1, 0, 0, 0, 1658, 1659, 1, 0, 0, 0, 1659, 1661, 1, 0, 0, 0, 1660, 1662, 3, 224, 112, 0, 1661, 1660, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1664, 1, 0, 0, 0, 1663, 1665, 3, 196, 98, 0, 1664, 1663, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 157, 1, 0, 0, 0, 1666, 1667, 5, 101, 0, 0, 1667, 1669, 5, 155, 0, 0, 1668, 1670, 3, 30, 15, 0, 1669, 1668, 1, 0, 0, 0, 1669, 1670, 1, 0, 0, 0, 1670, 1671, 1, 0, 0, 0, 1671, 1672, 3, 638, 319, 0, 1672, 1673, 5, 224, 0, 0, 1673, 1674, 3, 478, 239, 0, 1674, 159, 1, 0, 0, 0, 1675, 1678, 5, 58, 0, 0, 1676, 1677, 5, 228, 0, 0, 1677, 1679, 5, 278, 0, 0, 1678, 1676, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1682, 5, 378, 0, 0, 1681, 1683, 3, 32, 16, 0, 1682, 1681, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1684, 1689, 3, 484, 242, 0, 1685, 1686, 5, 399, 0, 0, 1686, 1687, 3, 304, 152, 0, 1687, 1688, 5, 400, 0, 0, 1688, 1690, 1, 0, 0, 0, 1689, 1685, 1, 0, 0, 0, 1689, 1690, 1, 0, 0, 0, 1690, 1692, 1, 0, 0, 0, 1691, 1693, 3, 196, 98, 0, 1692, 1691, 1, 0, 0, 0, 1692, 1693, 1, 0, 0, 0, 1693, 1695, 1, 0, 0, 0, 1694, 1696, 3, 162, 81, 0, 1695, 1694, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 1698, 1, 0, 0, 0, 1697, 1699, 3, 224, 112, 0, 1698, 1697, 1, 0, 0, 0, 1698, 1699, 1, 0, 0, 0, 1699, 1700, 1, 0, 0, 0, 1700, 1701, 5, 17, 0, 0, 1701, 1702, 3, 380, 190, 0, 1702, 161, 1, 0, 0, 0, 1703, 1704, 5, 238, 0, 0, 1704, 1710, 5, 224, 0, 0, 1705, 1706, 5, 399, 0, 0, 1706, 1711, 3, 254, 127, 0, 1707, 1708, 5, 316, 0, 0, 1708, 1709, 5, 399, 0, 0, 1709, 1711, 3, 204, 102, 0, 1710, 1705, 1, 0, 0, 0, 1710, 1707, 1, 0, 0, 0, 1711, 1712, 1, 0, 0, 0, 1712, 1713, 5, 400, 0, 0, 1713, 163, 1, 0, 0, 0, 1714, 1717, 3, 166, 83, 0, 1715, 1717, 3, 168, 84, 0, 1716, 1714, 1, 0, 0, 0, 1716, 1715, 1, 0, 0, 0, 1717, 165, 1, 0, 0, 0, 1718, 1719, 5, 42, 0, 0, 1719, 1720, 5, 224, 0, 0, 1720, 1721, 5, 399, 0, 0, 1721, 1722, 3, 254, 127, 0, 1722, 1723, 5, 400, 0, 0, 1723, 167, 1, 0, 0, 0, 1724, 1725, 3, 170, 85, 0, 1725, 1726, 3, 172, 86, 0, 1726, 169, 1, 0, 0, 0, 1727, 1728, 5, 98, 0, 0, 1728, 1729, 5, 224, 0, 0, 1729, 1730, 5, 399, 0, 0, 1730, 1731, 3, 254, 127, 0, 1731, 1732, 5, 400, 0, 0, 1732, 171, 1, 0, 0, 0, 1733, 1734, 5, 315, 0, 0, 1734, 1735, 5, 224, 0, 0, 1735, 1736, 5, 399, 0, 0, 1736, 1737, 3, 254, 127, 0, 1737, 1738, 5, 400, 0, 0, 1738, 173, 1, 0, 0, 0, 1739, 1740, 5, 101, 0, 0, 1740, 1742, 5, 378, 0, 0, 1741, 1743, 3, 30, 15, 0, 1742, 1741, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 3, 482, 241, 0, 1745, 175, 1, 0, 0, 0, 1746, 1747, 5, 58, 0, 0, 1747, 1748, 5, 202, 0, 0, 1748, 1750, 5, 378, 0, 0, 1749, 1751, 3, 32, 16, 0, 1750, 1749, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1752, 1, 0, 0, 0, 1752, 1754, 3, 484, 242, 0, 1753, 1755, 3, 38, 19, 0, 1754, 1753, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1757, 1, 0, 0, 0, 1756, 1758, 3, 196, 98, 0, 1757, 1756, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1760, 1, 0, 0, 0, 1759, 1761, 3, 162, 81, 0, 1760, 1759, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 1763, 1, 0, 0, 0, 1762, 1764, 3, 164, 82, 0, 1763, 1762, 1, 0, 0, 0, 1763, 1764, 1, 0, 0, 0, 1764, 1766, 1, 0, 0, 0, 1765, 1767, 3, 222, 111, 0, 1766, 1765, 1, 0, 0, 0, 1766, 1767, 1, 0, 0, 0, 1767, 1769, 1, 0, 0, 0, 1768, 1770, 3, 246, 123, 0, 1769, 1768, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1770, 1772, 1, 0, 0, 0, 1771, 1773, 3, 424, 212, 0, 1772, 1771, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1775, 1, 0, 0, 0, 1774, 1776, 3, 224, 112, 0, 1775, 1774, 1, 0, 0, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1777, 1, 0, 0, 0, 1777, 1778, 5, 17, 0, 0, 1778, 1779, 3, 380, 190, 0, 1779, 177, 1, 0, 0, 0, 1780, 1781, 5, 101, 0, 0, 1781, 1782, 5, 202, 0, 0, 1782, 1784, 5, 378, 0, 0, 1783, 1785, 3, 30, 15, 0, 1784, 1783, 1, 0, 0, 0, 1784, 1785, 1, 0, 0, 0, 1785, 1786, 1, 0, 0, 0, 1786, 1787, 3, 482, 241, 0, 1787, 179, 1, 0, 0, 0, 1788, 1789, 5, 58, 0, 0, 1789, 1790, 5, 293, 0, 0, 1790, 1791, 5, 258, 0, 0, 1791, 1792, 3, 638, 319, 0, 1792, 1794, 3, 188, 94, 0, 1793, 1795, 3, 190, 95, 0, 1794, 1793, 1, 0, 0, 0, 1794, 1795, 1, 0, 0, 0, 1795, 1797, 1, 0, 0, 0, 1796, 1798, 3, 268, 134, 0, 1797, 1796, 1, 0, 0, 0, 1797, 1798, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1800, 3, 192, 96, 0, 1800, 181, 1, 0, 0, 0, 1801, 1802, 5, 101, 0, 0, 1802, 1803, 5, 293, 0, 0, 1803, 1804, 5, 258, 0, 0, 1804, 1805, 3, 638, 319, 0, 1805, 183, 1, 0, 0, 0, 1806, 1807, 5, 9, 0, 0, 1807, 1808, 5, 293, 0, 0, 1808, 1809, 5, 258, 0, 0, 1809, 1810, 3, 638, 319, 0, 1810, 1811, 3, 186, 93, 0, 1811, 185, 1, 0, 0, 0, 1812, 1818, 3, 188, 94, 0, 1813, 1818, 3, 190, 95, 0, 1814, 1818, 3, 268, 134, 0, 1815, 1818, 3, 192, 96, 0, 1816, 1818, 5, 115, 0, 0, 1817, 1812, 1, 0, 0, 0, 1817, 1813, 1, 0, 0, 0, 1817, 1814, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1816, 1, 0, 0, 0, 1818, 187, 1, 0, 0, 0, 1819, 1820, 5, 59, 0, 0, 1820, 1835, 5, 426, 0, 0, 1821, 1823, 5, 111, 0, 0, 1822, 1824, 5, 431, 0, 0, 1823, 1822, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 1832, 3, 578, 289, 0, 1826, 1830, 5, 20, 0, 0, 1827, 1828, 5, 223, 0, 0, 1828, 1830, 5, 32, 0, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1830, 1831, 1, 0, 0, 0, 1831, 1833, 5, 426, 0, 0, 1832, 1829, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1835, 1, 0, 0, 0, 1834, 1819, 1, 0, 0, 0, 1834, 1821, 1, 0, 0, 0, 1835, 189, 1, 0, 0, 0, 1836, 1837, 5, 116, 0, 0, 1837, 1838, 5, 17, 0, 0, 1838, 1839, 5, 426, 0, 0, 1839, 191, 1, 0, 0, 0, 1840, 1842, 5, 85, 0, 0, 1841, 1840, 1, 0, 0, 0, 1841, 1842, 1, 0, 0, 0, 1842, 1843, 1, 0, 0, 0, 1843, 1844, 5, 17, 0, 0, 1844, 1845, 3, 2, 1, 0, 1845, 193, 1, 0, 0, 0, 1846, 1849, 3, 638, 319, 0, 1847, 1849, 5, 426, 0, 0, 1848, 1846, 1, 0, 0, 0, 1848, 1847, 1, 0, 0, 0, 1849, 195, 1, 0, 0, 0, 1850, 1851, 5, 47, 0, 0, 1851, 1852, 5, 426, 0, 0, 1852, 197, 1, 0, 0, 0, 1853, 1854, 5, 183, 0, 0, 1854, 1855, 5, 431, 0, 0, 1855, 199, 1, 0, 0, 0, 1856, 1857, 5, 238, 0, 0, 1857, 1866, 5, 32, 0, 0, 1858, 1861, 5, 399, 0, 0, 1859, 1862, 3, 202, 101, 0, 1860, 1862, 3, 254, 127, 0, 1861, 1859, 1, 0, 0, 0, 1861, 1860, 1, 0, 0, 0, 1862, 1867, 1, 0, 0, 0, 1863, 1864, 5, 316, 0, 0, 1864, 1865, 5, 399, 0, 0, 1865, 1867, 3, 204, 102, 0, 1866, 1858, 1, 0, 0, 0, 1866, 1863, 1, 0, 0, 0, 1867, 1868, 1, 0, 0, 0, 1868, 1869, 5, 400, 0, 0, 1869, 201, 1, 0, 0, 0, 1870, 1875, 3, 316, 158, 0, 1871, 1872, 5, 397, 0, 0, 1872, 1874, 3, 316, 158, 0, 1873, 1871, 1, 0, 0, 0, 1874, 1877, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 203, 1, 0, 0, 0, 1877, 1875, 1, 0, 0, 0, 1878, 1883, 3, 206, 103, 0, 1879, 1880, 5, 397, 0, 0, 1880, 1882, 3, 206, 103, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1885, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 205, 1, 0, 0, 0, 1885, 1883, 1, 0, 0, 0, 1886, 1905, 3, 256, 128, 0, 1887, 1892, 3, 666, 333, 0, 1888, 1892, 3, 668, 334, 0, 1889, 1892, 3, 672, 336, 0, 1890, 1892, 3, 674, 337, 0, 1891, 1887, 1, 0, 0, 0, 1891, 1888, 1, 0, 0, 0, 1891, 1889, 1, 0, 0, 0, 1891, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 5, 399, 0, 0, 1894, 1895, 3, 256, 128, 0, 1895, 1896, 5, 400, 0, 0, 1896, 1905, 1, 0, 0, 0, 1897, 1898, 7, 14, 0, 0, 1898, 1899, 5, 399, 0, 0, 1899, 1900, 5, 431, 0, 0, 1900, 1901, 5, 397, 0, 0, 1901, 1902, 3, 256, 128, 0, 1902, 1903, 5, 400, 0, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1886, 1, 0, 0, 0, 1904, 1891, 1, 0, 0, 0, 1904, 1897, 1, 0, 0, 0, 1905, 207, 1, 0, 0, 0, 1906, 1907, 5, 42, 0, 0, 1907, 1908, 5, 32, 0, 0, 1908, 1909, 5, 399, 0, 0, 1909, 1910, 3, 254, 127, 0, 1910, 1917, 5, 400, 0, 0, 1911, 1912, 5, 315, 0, 0, 1912, 1913, 5, 32, 0, 0, 1913, 1914, 5, 399, 0, 0, 1914, 1915, 3, 262, 131, 0, 1915, 1916, 5, 400, 0, 0, 1916, 1918, 1, 0, 0, 0, 1917, 1911, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 5, 166, 0, 0, 1920, 1921, 5, 431, 0, 0, 1921, 1922, 5, 31, 0, 0, 1922, 209, 1, 0, 0, 0, 1923, 1924, 5, 310, 0, 0, 1924, 1925, 5, 32, 0, 0, 1925, 1926, 5, 399, 0, 0, 1926, 1927, 3, 254, 127, 0, 1927, 1928, 5, 400, 0, 0, 1928, 1929, 5, 224, 0, 0, 1929, 1930, 5, 399, 0, 0, 1930, 1931, 3, 290, 145, 0, 1931, 1933, 5, 400, 0, 0, 1932, 1934, 3, 40, 20, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 211, 1, 0, 0, 0, 1935, 1938, 3, 218, 109, 0, 1936, 1938, 3, 220, 110, 0, 1937, 1935, 1, 0, 0, 0, 1937, 1936, 1, 0, 0, 0, 1938, 213, 1, 0, 0, 0, 1939, 1940, 5, 266, 0, 0, 1940, 1941, 5, 426, 0, 0, 1941, 215, 1, 0, 0, 0, 1942, 1943, 5, 267, 0, 0, 1943, 1944, 5, 426, 0, 0, 1944, 217, 1, 0, 0, 0, 1945, 1946, 5, 291, 0, 0, 1946, 1947, 5, 137, 0, 0, 1947, 1948, 5, 301, 0, 0, 1948, 1952, 5, 426, 0, 0, 1949, 1950, 5, 387, 0, 0, 1950, 1951, 5, 302, 0, 0, 1951, 1953, 3, 226, 113, 0, 1952, 1949, 1, 0, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 219, 1, 0, 0, 0, 1954, 1955, 5, 291, 0, 0, 1955, 1956, 5, 137, 0, 0, 1956, 1958, 5, 87, 0, 0, 1957, 1959, 3, 236, 118, 0, 1958, 1957, 1, 0, 0, 0, 1958, 1959, 1, 0, 0, 0, 1959, 1961, 1, 0, 0, 0, 1960, 1962, 3, 238, 119, 0, 1961, 1960, 1, 0, 0, 0, 1961, 1962, 1, 0, 0, 0, 1962, 1964, 1, 0, 0, 0, 1963, 1965, 3, 240, 120, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1967, 1, 0, 0, 0, 1966, 1968, 3, 242, 121, 0, 1967, 1966, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 1, 0, 0, 0, 1969, 1971, 3, 244, 122, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 221, 1, 0, 0, 0, 1972, 1975, 3, 220, 110, 0, 1973, 1975, 3, 218, 109, 0, 1974, 1972, 1, 0, 0, 0, 1974, 1973, 1, 0, 0, 0, 1975, 223, 1, 0, 0, 0, 1976, 1977, 5, 332, 0, 0, 1977, 1978, 3, 226, 113, 0, 1978, 225, 1, 0, 0, 0, 1979, 1980, 5, 399, 0, 0, 1980, 1981, 3, 228, 114, 0, 1981, 1982, 5, 400, 0, 0, 1982, 227, 1, 0, 0, 0, 1983, 1993, 3, 232, 116, 0, 1984, 1989, 5, 426, 0, 0, 1985, 1986, 5, 397, 0, 0, 1986, 1988, 5, 426, 0, 0, 1987, 1985, 1, 0, 0, 0, 1988, 1991, 1, 0, 0, 0, 1989, 1987, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1993, 1, 0, 0, 0, 1991, 1989, 1, 0, 0, 0, 1992, 1983, 1, 0, 0, 0, 1992, 1984, 1, 0, 0, 0, 1993, 229, 1, 0, 0, 0, 1994, 1995, 5, 399, 0, 0, 1995, 1996, 3, 232, 116, 0, 1996, 1997, 5, 400, 0, 0, 1997, 231, 1, 0, 0, 0, 1998, 2003, 3, 234, 117, 0, 1999, 2000, 5, 397, 0, 0, 2000, 2002, 3, 234, 117, 0, 2001, 1999, 1, 0, 0, 0, 2002, 2005, 1, 0, 0, 0, 2003, 2001, 1, 0, 0, 0, 2003, 2004, 1, 0, 0, 0, 2004, 233, 1, 0, 0, 0, 2005, 2003, 1, 0, 0, 0, 2006, 2007, 5, 426, 0, 0, 2007, 2008, 5, 405, 0, 0, 2008, 2009, 5, 426, 0, 0, 2009, 235, 1, 0, 0, 0, 2010, 2011, 5, 127, 0, 0, 2011, 2012, 5, 334, 0, 0, 2012, 2013, 5, 32, 0, 0, 2013, 2017, 5, 426, 0, 0, 2014, 2015, 5, 110, 0, 0, 2015, 2016, 5, 32, 0, 0, 2016, 2018, 5, 426, 0, 0, 2017, 2014, 1, 0, 0, 0, 2017, 2018, 1, 0, 0, 0, 2018, 237, 1, 0, 0, 0, 2019, 2020, 5, 44, 0, 0, 2020, 2021, 5, 169, 0, 0, 2021, 2022, 5, 334, 0, 0, 2022, 2023, 5, 32, 0, 0, 2023, 2024, 5, 426, 0, 0, 2024, 239, 1, 0, 0, 0, 2025, 2026, 5, 198, 0, 0, 2026, 2027, 5, 174, 0, 0, 2027, 2028, 5, 334, 0, 0, 2028, 2029, 5, 32, 0, 0, 2029, 2030, 5, 426, 0, 0, 2030, 241, 1, 0, 0, 0, 2031, 2032, 5, 186, 0, 0, 2032, 2033, 5, 334, 0, 0, 2033, 2034, 5, 32, 0, 0, 2034, 2035, 5, 426, 0, 0, 2035, 243, 1, 0, 0, 0, 2036, 2037, 5, 219, 0, 0, 2037, 2038, 5, 85, 0, 0, 2038, 2039, 5, 17, 0, 0, 2039, 2040, 5, 426, 0, 0, 2040, 245, 1, 0, 0, 0, 2041, 2042, 5, 321, 0, 0, 2042, 2043, 5, 17, 0, 0, 2043, 2044, 5, 160, 0, 0, 2044, 2045, 5, 426, 0, 0, 2045, 2046, 5, 233, 0, 0, 2046, 2051, 5, 426, 0, 0, 2047, 2048, 5, 159, 0, 0, 2048, 2049, 5, 426, 0, 0, 2049, 2050, 5, 232, 0, 0, 2050, 2052, 5, 426, 0, 0, 2051, 2047, 1, 0, 0, 0, 2051, 2052, 1, 0, 0, 0, 2052, 2083, 1, 0, 0, 0, 2053, 2054, 5, 321, 0, 0, 2054, 2055, 5, 32, 0, 0, 2055, 2059, 5, 426, 0, 0, 2056, 2057, 5, 387, 0, 0, 2057, 2058, 5, 302, 0, 0, 2058, 2060, 3, 226, 113, 0, 2059, 2056, 1, 0, 0, 0, 2059, 2060, 1, 0, 0, 0, 2060, 2064, 1, 0, 0, 0, 2061, 2062, 5, 321, 0, 0, 2062, 2063, 5, 17, 0, 0, 2063, 2065, 3, 638, 319, 0, 2064, 2061, 1, 0, 0, 0, 2064, 2065, 1, 0, 0, 0, 2065, 2083, 1, 0, 0, 0, 2066, 2067, 5, 321, 0, 0, 2067, 2068, 5, 32, 0, 0, 2068, 2072, 3, 638, 319, 0, 2069, 2070, 5, 387, 0, 0, 2070, 2071, 5, 302, 0, 0, 2071, 2073, 3, 226, 113, 0, 2072, 2069, 1, 0, 0, 0, 2072, 2073, 1, 0, 0, 0, 2073, 2077, 1, 0, 0, 0, 2074, 2075, 5, 321, 0, 0, 2075, 2076, 5, 17, 0, 0, 2076, 2078, 3, 638, 319, 0, 2077, 2074, 1, 0, 0, 0, 2077, 2078, 1, 0, 0, 0, 2078, 2083, 1, 0, 0, 0, 2079, 2080, 5, 321, 0, 0, 2080, 2081, 5, 17, 0, 0, 2081, 2083, 3, 638, 319, 0, 2082, 2041, 1, 0, 0, 0, 2082, 2053, 1, 0, 0, 0, 2082, 2066, 1, 0, 0, 0, 2082, 2079, 1, 0, 0, 0, 2083, 247, 1, 0, 0, 0, 2084, 2089, 3, 310, 155, 0, 2085, 2086, 5, 397, 0, 0, 2086, 2088, 3, 310, 155, 0, 2087, 2085, 1, 0, 0, 0, 2088, 2091, 1, 0, 0, 0, 2089, 2087, 1, 0, 0, 0, 2089, 2090, 1, 0, 0, 0, 2090, 249, 1, 0, 0, 0, 2091, 2089, 1, 0, 0, 0, 2092, 2097, 3, 312, 156, 0, 2093, 2094, 5, 397, 0, 0, 2094, 2096, 3, 312, 156, 0, 2095, 2093, 1, 0, 0, 0, 2096, 2099, 1, 0, 0, 0, 2097, 2095, 1, 0, 0, 0, 2097, 2098, 1, 0, 0, 0, 2098, 251, 1, 0, 0, 0, 2099, 2097, 1, 0, 0, 0, 2100, 2105, 3, 340, 170, 0, 2101, 2102, 5, 397, 0, 0, 2102, 2104, 3, 340, 170, 0, 2103, 2101, 1, 0, 0, 0, 2104, 2107, 1, 0, 0, 0, 2105, 2103, 1, 0, 0, 0, 2105, 2106, 1, 0, 0, 0, 2106, 253, 1, 0, 0, 0, 2107, 2105, 1, 0, 0, 0, 2108, 2113, 3, 256, 128, 0, 2109, 2110, 5, 397, 0, 0, 2110, 2112, 3, 256, 128, 0, 2111, 2109, 1, 0, 0, 0, 2112, 2115, 1, 0, 0, 0, 2113, 2111, 1, 0, 0, 0, 2113, 2114, 1, 0, 0, 0, 2114, 255, 1, 0, 0, 0, 2115, 2113, 1, 0, 0, 0, 2116, 2119, 3, 682, 341, 0, 2117, 2119, 4, 128, 0, 0, 2118, 2116, 1, 0, 0, 0, 2118, 2117, 1, 0, 0, 0, 2119, 257, 1, 0, 0, 0, 2120, 2121, 3, 638, 319, 0, 2121, 259, 1, 0, 0, 0, 2122, 2132, 3, 256, 128, 0, 2123, 2128, 5, 395, 0, 0, 2124, 2129, 5, 104, 0, 0, 2125, 2129, 5, 175, 0, 0, 2126, 2129, 5, 375, 0, 0, 2127, 2129, 3, 638, 319, 0, 2128, 2124, 1, 0, 0, 0, 2128, 2125, 1, 0, 0, 0, 2128, 2126, 1, 0, 0, 0, 2128, 2127, 1, 0, 0, 0, 2129, 2131, 1, 0, 0, 0, 2130, 2123, 1, 0, 0, 0, 2131, 2134, 1, 0, 0, 0, 2132, 2130, 1, 0, 0, 0, 2132, 2133, 1, 0, 0, 0, 2133, 261, 1, 0, 0, 0, 2134, 2132, 1, 0, 0, 0, 2135, 2140, 3, 302, 151, 0, 2136, 2137, 5, 397, 0, 0, 2137, 2139, 3, 302, 151, 0, 2138, 2136, 1, 0, 0, 0, 2139, 2142, 1, 0, 0, 0, 2140, 2138, 1, 0, 0, 0, 2140, 2141, 1, 0, 0, 0, 2141, 263, 1, 0, 0, 0, 2142, 2140, 1, 0, 0, 0, 2143, 2144, 5, 399, 0, 0, 2144, 2145, 3, 254, 127, 0, 2145, 2146, 5, 400, 0, 0, 2146, 265, 1, 0, 0, 0, 2147, 2149, 3, 268, 134, 0, 2148, 2150, 3, 270, 135, 0, 2149, 2148, 1, 0, 0, 0, 2149, 2150, 1, 0, 0, 0, 2150, 2153, 1, 0, 0, 0, 2151, 2153, 3, 272, 136, 0, 2152, 2147, 1, 0, 0, 0, 2152, 2151, 1, 0, 0, 0, 2153, 267, 1, 0, 0, 0, 2154, 2157, 3, 662, 331, 0, 2155, 2157, 3, 664, 332, 0, 2156, 2154, 1, 0, 0, 0, 2156, 2155, 1, 0, 0, 0, 2157, 269, 1, 0, 0, 0, 2158, 2159, 7, 15, 0, 0, 2159, 271, 1, 0, 0, 0, 2160, 2164, 5, 109, 0, 0, 2161, 2162, 5, 216, 0, 0, 2162, 2164, 5, 109, 0, 0, 2163, 2160, 1, 0, 0, 0, 2163, 2161, 1, 0, 0, 0, 2164, 273, 1, 0, 0, 0, 2165, 2166, 7, 16, 0, 0, 2166, 275, 1, 0, 0, 0, 2167, 2168, 5, 55, 0, 0, 2168, 2170, 3, 638, 319, 0, 2169, 2167, 1, 0, 0, 0, 2169, 2170, 1, 0, 0, 0, 2170, 2171, 1, 0, 0, 0, 2171, 2173, 3, 280, 140, 0, 2172, 2174, 3, 336, 168, 0, 2173, 2172, 1, 0, 0, 0, 2173, 2174, 1, 0, 0, 0, 2174, 277, 1, 0, 0, 0, 2175, 2176, 5, 55, 0, 0, 2176, 2177, 3, 638, 319, 0, 2177, 2179, 3, 280, 140, 0, 2178, 2180, 3, 338, 169, 0, 2179, 2178, 1, 0, 0, 0, 2179, 2180, 1, 0, 0, 0, 2180, 279, 1, 0, 0, 0, 2181, 2184, 3, 282, 141, 0, 2182, 2184, 3, 284, 142, 0, 2183, 2181, 1, 0, 0, 0, 2183, 2182, 1, 0, 0, 0, 2184, 281, 1, 0, 0, 0, 2185, 2186, 3, 334, 167, 0, 2186, 2187, 3, 264, 132, 0, 2187, 283, 1, 0, 0, 0, 2188, 2189, 5, 40, 0, 0, 2189, 2190, 5, 399, 0, 0, 2190, 2191, 3, 580, 290, 0, 2191, 2192, 5, 400, 0, 0, 2192, 285, 1, 0, 0, 0, 2193, 2194, 5, 55, 0, 0, 2194, 2196, 3, 638, 319, 0, 2195, 2193, 1, 0, 0, 0, 2195, 2196, 1, 0, 0, 0, 2196, 2197, 1, 0, 0, 0, 2197, 2198, 5, 136, 0, 0, 2198, 2199, 5, 173, 0, 0, 2199, 2200, 3, 264, 132, 0, 2200, 2201, 5, 269, 0, 0, 2201, 2202, 3, 478, 239, 0, 2202, 2204, 3, 264, 132, 0, 2203, 2205, 3, 336, 168, 0, 2204, 2203, 1, 0, 0, 0, 2204, 2205, 1, 0, 0, 0, 2205, 287, 1, 0, 0, 0, 2206, 2207, 5, 55, 0, 0, 2207, 2208, 3, 638, 319, 0, 2208, 2209, 5, 136, 0, 0, 2209, 2210, 5, 173, 0, 0, 2210, 2211, 3, 264, 132, 0, 2211, 2212, 5, 269, 0, 0, 2212, 2213, 3, 478, 239, 0, 2213, 2215, 3, 264, 132, 0, 2214, 2216, 3, 338, 169, 0, 2215, 2214, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 289, 1, 0, 0, 0, 2217, 2220, 3, 296, 148, 0, 2218, 2220, 3, 292, 146, 0, 2219, 2217, 1, 0, 0, 0, 2219, 2218, 1, 0, 0, 0, 2220, 291, 1, 0, 0, 0, 2221, 2226, 3, 294, 147, 0, 2222, 2223, 5, 397, 0, 0, 2223, 2225, 3, 294, 147, 0, 2224, 2222, 1, 0, 0, 0, 2225, 2228, 1, 0, 0, 0, 2226, 2224, 1, 0, 0, 0, 2226, 2227, 1, 0, 0, 0, 2227, 293, 1, 0, 0, 0, 2228, 2226, 1, 0, 0, 0, 2229, 2230, 5, 399, 0, 0, 2230, 2231, 3, 296, 148, 0, 2231, 2232, 5, 400, 0, 0, 2232, 295, 1, 0, 0, 0, 2233, 2238, 3, 572, 286, 0, 2234, 2235, 5, 397, 0, 0, 2235, 2237, 3, 572, 286, 0, 2236, 2234, 1, 0, 0, 0, 2237, 2240, 1, 0, 0, 0, 2238, 2236, 1, 0, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 297, 1, 0, 0, 0, 2240, 2238, 1, 0, 0, 0, 2241, 2242, 7, 17, 0, 0, 2242, 299, 1, 0, 0, 0, 2243, 2244, 5, 220, 0, 0, 2244, 2245, 7, 18, 0, 0, 2245, 301, 1, 0, 0, 0, 2246, 2248, 3, 256, 128, 0, 2247, 2249, 3, 298, 149, 0, 2248, 2247, 1, 0, 0, 0, 2248, 2249, 1, 0, 0, 0, 2249, 2251, 1, 0, 0, 0, 2250, 2252, 3, 300, 150, 0, 2251, 2250, 1, 0, 0, 0, 2251, 2252, 1, 0, 0, 0, 2252, 303, 1, 0, 0, 0, 2253, 2258, 3, 306, 153, 0, 2254, 2255, 5, 397, 0, 0, 2255, 2257, 3, 306, 153, 0, 2256, 2254, 1, 0, 0, 0, 2257, 2260, 1, 0, 0, 0, 2258, 2256, 1, 0, 0, 0, 2258, 2259, 1, 0, 0, 0, 2259, 305, 1, 0, 0, 0, 2260, 2258, 1, 0, 0, 0, 2261, 2264, 3, 258, 129, 0, 2262, 2263, 5, 47, 0, 0, 2263, 2265, 5, 426, 0, 0, 2264, 2262, 1, 0, 0, 0, 2264, 2265, 1, 0, 0, 0, 2265, 307, 1, 0, 0, 0, 2266, 2269, 3, 256, 128, 0, 2267, 2269, 3, 580, 290, 0, 2268, 2266, 1, 0, 0, 0, 2268, 2267, 1, 0, 0, 0, 2269, 2271, 1, 0, 0, 0, 2270, 2272, 3, 298, 149, 0, 2271, 2270, 1, 0, 0, 0, 2271, 2272, 1, 0, 0, 0, 2272, 2274, 1, 0, 0, 0, 2273, 2275, 3, 300, 150, 0, 2274, 2273, 1, 0, 0, 0, 2274, 2275, 1, 0, 0, 0, 2275, 309, 1, 0, 0, 0, 2276, 2277, 3, 258, 129, 0, 2277, 2280, 3, 342, 171, 0, 2278, 2279, 5, 47, 0, 0, 2279, 2281, 5, 426, 0, 0, 2280, 2278, 1, 0, 0, 0, 2280, 2281, 1, 0, 0, 0, 2281, 311, 1, 0, 0, 0, 2282, 2285, 3, 314, 157, 0, 2283, 2285, 3, 316, 158, 0, 2284, 2282, 1, 0, 0, 0, 2284, 2283, 1, 0, 0, 0, 2285, 313, 1, 0, 0, 0, 2286, 2289, 3, 286, 143, 0, 2287, 2289, 3, 276, 138, 0, 2288, 2286, 1, 0, 0, 0, 2288, 2287, 1, 0, 0, 0, 2289, 315, 1, 0, 0, 0, 2290, 2291, 3, 258, 129, 0, 2291, 2293, 3, 342, 171, 0, 2292, 2294, 3, 318, 159, 0, 2293, 2292, 1, 0, 0, 0, 2293, 2294, 1, 0, 0, 0, 2294, 2297, 1, 0, 0, 0, 2295, 2296, 5, 47, 0, 0, 2296, 2298, 5, 426, 0, 0, 2297, 2295, 1, 0, 0, 0, 2297, 2298, 1, 0, 0, 0, 2298, 317, 1, 0, 0, 0, 2299, 2302, 3, 320, 160, 0, 2300, 2302, 3, 322, 161, 0, 2301, 2299, 1, 0, 0, 0, 2301, 2300, 1, 0, 0, 0, 2302, 319, 1, 0, 0, 0, 2303, 2304, 5, 55, 0, 0, 2304, 2306, 3, 638, 319, 0, 2305, 2303, 1, 0, 0, 0, 2305, 2306, 1, 0, 0, 0, 2306, 2307, 1, 0, 0, 0, 2307, 2308, 5, 269, 0, 0, 2308, 2309, 3, 478, 239, 0, 2309, 2310, 5, 399, 0, 0, 2310, 2311, 3, 256, 128, 0, 2311, 2313, 5, 400, 0, 0, 2312, 2314, 3, 336, 168, 0, 2313, 2312, 1, 0, 0, 0, 2313, 2314, 1, 0, 0, 0, 2314, 321, 1, 0, 0, 0, 2315, 2316, 5, 55, 0, 0, 2316, 2318, 3, 638, 319, 0, 2317, 2315, 1, 0, 0, 0, 2317, 2318, 1, 0, 0, 0, 2318, 2319, 1, 0, 0, 0, 2319, 2321, 3, 330, 165, 0, 2320, 2322, 3, 336, 168, 0, 2321, 2320, 1, 0, 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 323, 1, 0, 0, 0, 2323, 2326, 3, 326, 163, 0, 2324, 2326, 3, 328, 164, 0, 2325, 2323, 1, 0, 0, 0, 2325, 2324, 1, 0, 0, 0, 2326, 325, 1, 0, 0, 0, 2327, 2328, 5, 55, 0, 0, 2328, 2330, 3, 638, 319, 0, 2329, 2327, 1, 0, 0, 0, 2329, 2330, 1, 0, 0, 0, 2330, 2331, 1, 0, 0, 0, 2331, 2332, 5, 269, 0, 0, 2332, 2333, 3, 478, 239, 0, 2333, 2334, 5, 399, 0, 0, 2334, 2335, 3, 256, 128, 0, 2335, 2337, 5, 400, 0, 0, 2336, 2338, 3, 338, 169, 0, 2337, 2336, 1, 0, 0, 0, 2337, 2338, 1, 0, 0, 0, 2338, 327, 1, 0, 0, 0, 2339, 2340, 5, 55, 0, 0, 2340, 2342, 3, 638, 319, 0, 2341, 2339, 1, 0, 0, 0, 2341, 2342, 1, 0, 0, 0, 2342, 2343, 1, 0, 0, 0, 2343, 2345, 3, 330, 165, 0, 2344, 2346, 3, 338, 169, 0, 2345, 2344, 1, 0, 0, 0, 2345, 2346, 1, 0, 0, 0, 2346, 329, 1, 0, 0, 0, 2347, 2348, 5, 216, 0, 0, 2348, 2354, 5, 219, 0, 0, 2349, 2350, 5, 83, 0, 0, 2350, 2354, 3, 332, 166, 0, 2351, 2354, 3, 284, 142, 0, 2352, 2354, 3, 334, 167, 0, 2353, 2347, 1, 0, 0, 0, 2353, 2349, 1, 0, 0, 0, 2353, 2351, 1, 0, 0, 0, 2353, 2352, 1, 0, 0, 0, 2354, 331, 1, 0, 0, 0, 2355, 2359, 3, 572, 286, 0, 2356, 2359, 3, 550, 275, 0, 2357, 2359, 3, 560, 280, 0, 2358, 2355, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2358, 2357, 1, 0, 0, 0, 2359, 333, 1, 0, 0, 0, 2360, 2361, 5, 251, 0, 0, 2361, 2364, 5, 173, 0, 0, 2362, 2364, 5, 358, 0, 0, 2363, 2360, 1, 0, 0, 0, 2363, 2362, 1, 0, 0, 0, 2364, 335, 1, 0, 0, 0, 2365, 2367, 3, 266, 133, 0, 2366, 2368, 3, 274, 137, 0, 2367, 2366, 1, 0, 0, 0, 2367, 2368, 1, 0, 0, 0, 2368, 337, 1, 0, 0, 0, 2369, 2371, 3, 266, 133, 0, 2370, 2372, 3, 274, 137, 0, 2371, 2370, 1, 0, 0, 0, 2371, 2372, 1, 0, 0, 0, 2372, 339, 1, 0, 0, 0, 2373, 2374, 3, 258, 129, 0, 2374, 2375, 5, 396, 0, 0, 2375, 2378, 3, 342, 171, 0, 2376, 2377, 5, 47, 0, 0, 2377, 2379, 5, 426, 0, 0, 2378, 2376, 1, 0, 0, 0, 2378, 2379, 1, 0, 0, 0, 2379, 341, 1, 0, 0, 0, 2380, 2381, 3, 346, 173, 0, 2381, 343, 1, 0, 0, 0, 2382, 2387, 3, 342, 171, 0, 2383, 2384, 5, 397, 0, 0, 2384, 2386, 3, 342, 171, 0, 2385, 2383, 1, 0, 0, 0, 2386, 2389, 1, 0, 0, 0, 2387, 2385, 1, 0, 0, 0, 2387, 2388, 1, 0, 0, 0, 2388, 345, 1, 0, 0, 0, 2389, 2387, 1, 0, 0, 0, 2390, 2396, 3, 348, 174, 0, 2391, 2396, 3, 350, 175, 0, 2392, 2396, 3, 352, 176, 0, 2393, 2396, 3, 354, 177, 0, 2394, 2396, 3, 356, 178, 0, 2395, 2390, 1, 0, 0, 0, 2395, 2391, 1, 0, 0, 0, 2395, 2392, 1, 0, 0, 0, 2395, 2393, 1, 0, 0, 0, 2395, 2394, 1, 0, 0, 0, 2396, 347, 1, 0, 0, 0, 2397, 2435, 5, 340, 0, 0, 2398, 2435, 5, 311, 0, 0, 2399, 2435, 5, 162, 0, 0, 2400, 2435, 5, 163, 0, 0, 2401, 2435, 5, 26, 0, 0, 2402, 2435, 5, 28, 0, 0, 2403, 2435, 5, 131, 0, 0, 2404, 2435, 5, 264, 0, 0, 2405, 2407, 5, 100, 0, 0, 2406, 2408, 5, 248, 0, 0, 2407, 2406, 1, 0, 0, 0, 2407, 2408, 1, 0, 0, 0, 2408, 2435, 1, 0, 0, 0, 2409, 2435, 5, 71, 0, 0, 2410, 2435, 5, 72, 0, 0, 2411, 2435, 5, 337, 0, 0, 2412, 2435, 5, 338, 0, 0, 2413, 2414, 5, 337, 0, 0, 2414, 2415, 5, 387, 0, 0, 2415, 2416, 5, 188, 0, 0, 2416, 2417, 5, 336, 0, 0, 2417, 2435, 5, 394, 0, 0, 2418, 2435, 5, 323, 0, 0, 2419, 2435, 5, 27, 0, 0, 2420, 2428, 3, 680, 340, 0, 2421, 2422, 5, 399, 0, 0, 2422, 2425, 5, 431, 0, 0, 2423, 2424, 5, 397, 0, 0, 2424, 2426, 5, 431, 0, 0, 2425, 2423, 1, 0, 0, 0, 2425, 2426, 1, 0, 0, 0, 2426, 2427, 1, 0, 0, 0, 2427, 2429, 5, 400, 0, 0, 2428, 2421, 1, 0, 0, 0, 2428, 2429, 1, 0, 0, 0, 2429, 2435, 1, 0, 0, 0, 2430, 2431, 7, 19, 0, 0, 2431, 2432, 5, 399, 0, 0, 2432, 2433, 5, 431, 0, 0, 2433, 2435, 5, 400, 0, 0, 2434, 2397, 1, 0, 0, 0, 2434, 2398, 1, 0, 0, 0, 2434, 2399, 1, 0, 0, 0, 2434, 2400, 1, 0, 0, 0, 2434, 2401, 1, 0, 0, 0, 2434, 2402, 1, 0, 0, 0, 2434, 2403, 1, 0, 0, 0, 2434, 2404, 1, 0, 0, 0, 2434, 2405, 1, 0, 0, 0, 2434, 2409, 1, 0, 0, 0, 2434, 2410, 1, 0, 0, 0, 2434, 2411, 1, 0, 0, 0, 2434, 2412, 1, 0, 0, 0, 2434, 2413, 1, 0, 0, 0, 2434, 2418, 1, 0, 0, 0, 2434, 2419, 1, 0, 0, 0, 2434, 2420, 1, 0, 0, 0, 2434, 2430, 1, 0, 0, 0, 2435, 349, 1, 0, 0, 0, 2436, 2437, 5, 16, 0, 0, 2437, 2438, 5, 409, 0, 0, 2438, 2439, 3, 346, 173, 0, 2439, 2440, 5, 411, 0, 0, 2440, 351, 1, 0, 0, 0, 2441, 2442, 5, 324, 0, 0, 2442, 2443, 5, 409, 0, 0, 2443, 2444, 3, 252, 126, 0, 2444, 2445, 5, 411, 0, 0, 2445, 353, 1, 0, 0, 0, 2446, 2447, 5, 198, 0, 0, 2447, 2448, 5, 409, 0, 0, 2448, 2449, 3, 348, 174, 0, 2449, 2450, 5, 397, 0, 0, 2450, 2451, 3, 346, 173, 0, 2451, 2452, 5, 411, 0, 0, 2452, 355, 1, 0, 0, 0, 2453, 2454, 5, 357, 0, 0, 2454, 2455, 5, 409, 0, 0, 2455, 2456, 3, 344, 172, 0, 2456, 2457, 5, 411, 0, 0, 2457, 357, 1, 0, 0, 0, 2458, 2460, 7, 20, 0, 0, 2459, 2461, 7, 21, 0, 0, 2460, 2459, 1, 0, 0, 0, 2460, 2461, 1, 0, 0, 0, 2461, 359, 1, 0, 0, 0, 2462, 2464, 3, 364, 182, 0, 2463, 2462, 1, 0, 0, 0, 2463, 2464, 1, 0, 0, 0, 2464, 2465, 1, 0, 0, 0, 2465, 2466, 3, 362, 181, 0, 2466, 361, 1, 0, 0, 0, 2467, 2470, 3, 368, 184, 0, 2468, 2470, 3, 372, 186, 0, 2469, 2467, 1, 0, 0, 0, 2469, 2468, 1, 0, 0, 0, 2470, 363, 1, 0, 0, 0, 2471, 2472, 5, 387, 0, 0, 2472, 2477, 3, 366, 183, 0, 2473, 2474, 5, 397, 0, 0, 2474, 2476, 3, 366, 183, 0, 2475, 2473, 1, 0, 0, 0, 2476, 2479, 1, 0, 0, 0, 2477, 2475, 1, 0, 0, 0, 2477, 2478, 1, 0, 0, 0, 2478, 365, 1, 0, 0, 0, 2479, 2477, 1, 0, 0, 0, 2480, 2485, 3, 638, 319, 0, 2481, 2482, 5, 399, 0, 0, 2482, 2483, 3, 254, 127, 0, 2483, 2484, 5, 400, 0, 0, 2484, 2486, 1, 0, 0, 0, 2485, 2481, 1, 0, 0, 0, 2485, 2486, 1, 0, 0, 0, 2486, 2487, 1, 0, 0, 0, 2487, 2488, 5, 17, 0, 0, 2488, 2489, 5, 399, 0, 0, 2489, 2490, 3, 360, 180, 0, 2490, 2491, 5, 400, 0, 0, 2491, 367, 1, 0, 0, 0, 2492, 2498, 3, 370, 185, 0, 2493, 2494, 3, 358, 179, 0, 2494, 2495, 3, 370, 185, 0, 2495, 2497, 1, 0, 0, 0, 2496, 2493, 1, 0, 0, 0, 2497, 2500, 1, 0, 0, 0, 2498, 2496, 1, 0, 0, 0, 2498, 2499, 1, 0, 0, 0, 2499, 369, 1, 0, 0, 0, 2500, 2498, 1, 0, 0, 0, 2501, 2502, 3, 448, 224, 0, 2502, 2503, 3, 382, 191, 0, 2503, 2505, 3, 500, 250, 0, 2504, 2506, 3, 462, 231, 0, 2505, 2504, 1, 0, 0, 0, 2505, 2506, 1, 0, 0, 0, 2506, 2508, 1, 0, 0, 0, 2507, 2509, 3, 494, 247, 0, 2508, 2507, 1, 0, 0, 0, 2508, 2509, 1, 0, 0, 0, 2509, 2511, 1, 0, 0, 0, 2510, 2512, 3, 520, 260, 0, 2511, 2510, 1, 0, 0, 0, 2511, 2512, 1, 0, 0, 0, 2512, 2514, 1, 0, 0, 0, 2513, 2515, 3, 528, 264, 0, 2514, 2513, 1, 0, 0, 0, 2514, 2515, 1, 0, 0, 0, 2515, 2517, 1, 0, 0, 0, 2516, 2518, 3, 512, 256, 0, 2517, 2516, 1, 0, 0, 0, 2517, 2518, 1, 0, 0, 0, 2518, 2520, 1, 0, 0, 0, 2519, 2521, 3, 530, 265, 0, 2520, 2519, 1, 0, 0, 0, 2520, 2521, 1, 0, 0, 0, 2521, 2523, 1, 0, 0, 0, 2522, 2524, 3, 542, 271, 0, 2523, 2522, 1, 0, 0, 0, 2523, 2524, 1, 0, 0, 0, 2524, 2526, 1, 0, 0, 0, 2525, 2527, 3, 544, 272, 0, 2526, 2525, 1, 0, 0, 0, 2526, 2527, 1, 0, 0, 0, 2527, 2529, 1, 0, 0, 0, 2528, 2530, 3, 546, 273, 0, 2529, 2528, 1, 0, 0, 0, 2529, 2530, 1, 0, 0, 0, 2530, 2532, 1, 0, 0, 0, 2531, 2533, 3, 548, 274, 0, 2532, 2531, 1, 0, 0, 0, 2532, 2533, 1, 0, 0, 0, 2533, 2535, 1, 0, 0, 0, 2534, 2536, 3, 386, 193, 0, 2535, 2534, 1, 0, 0, 0, 2535, 2536, 1, 0, 0, 0, 2536, 2573, 1, 0, 0, 0, 2537, 2538, 3, 448, 224, 0, 2538, 2540, 3, 500, 250, 0, 2539, 2541, 3, 462, 231, 0, 2540, 2539, 1, 0, 0, 0, 2540, 2541, 1, 0, 0, 0, 2541, 2543, 1, 0, 0, 0, 2542, 2544, 3, 494, 247, 0, 2543, 2542, 1, 0, 0, 0, 2543, 2544, 1, 0, 0, 0, 2544, 2546, 1, 0, 0, 0, 2545, 2547, 3, 520, 260, 0, 2546, 2545, 1, 0, 0, 0, 2546, 2547, 1, 0, 0, 0, 2547, 2549, 1, 0, 0, 0, 2548, 2550, 3, 528, 264, 0, 2549, 2548, 1, 0, 0, 0, 2549, 2550, 1, 0, 0, 0, 2550, 2552, 1, 0, 0, 0, 2551, 2553, 3, 512, 256, 0, 2552, 2551, 1, 0, 0, 0, 2552, 2553, 1, 0, 0, 0, 2553, 2555, 1, 0, 0, 0, 2554, 2556, 3, 530, 265, 0, 2555, 2554, 1, 0, 0, 0, 2555, 2556, 1, 0, 0, 0, 2556, 2558, 1, 0, 0, 0, 2557, 2559, 3, 542, 271, 0, 2558, 2557, 1, 0, 0, 0, 2558, 2559, 1, 0, 0, 0, 2559, 2561, 1, 0, 0, 0, 2560, 2562, 3, 544, 272, 0, 2561, 2560, 1, 0, 0, 0, 2561, 2562, 1, 0, 0, 0, 2562, 2564, 1, 0, 0, 0, 2563, 2565, 3, 546, 273, 0, 2564, 2563, 1, 0, 0, 0, 2564, 2565, 1, 0, 0, 0, 2565, 2567, 1, 0, 0, 0, 2566, 2568, 3, 548, 274, 0, 2567, 2566, 1, 0, 0, 0, 2567, 2568, 1, 0, 0, 0, 2568, 2570, 1, 0, 0, 0, 2569, 2571, 3, 386, 193, 0, 2570, 2569, 1, 0, 0, 0, 2570, 2571, 1, 0, 0, 0, 2571, 2573, 1, 0, 0, 0, 2572, 2501, 1, 0, 0, 0, 2572, 2537, 1, 0, 0, 0, 2573, 371, 1, 0, 0, 0, 2574, 2575, 3, 382, 191, 0, 2575, 2576, 3, 376, 188, 0, 2576, 2579, 1, 0, 0, 0, 2577, 2579, 3, 376, 188, 0, 2578, 2574, 1, 0, 0, 0, 2578, 2577, 1, 0, 0, 0, 2579, 373, 1, 0, 0, 0, 2580, 2582, 3, 500, 250, 0, 2581, 2583, 3, 448, 224, 0, 2582, 2581, 1, 0, 0, 0, 2582, 2583, 1, 0, 0, 0, 2583, 2585, 1, 0, 0, 0, 2584, 2586, 3, 494, 247, 0, 2585, 2584, 1, 0, 0, 0, 2585, 2586, 1, 0, 0, 0, 2586, 2588, 1, 0, 0, 0, 2587, 2589, 3, 520, 260, 0, 2588, 2587, 1, 0, 0, 0, 2588, 2589, 1, 0, 0, 0, 2589, 2591, 1, 0, 0, 0, 2590, 2592, 3, 528, 264, 0, 2591, 2590, 1, 0, 0, 0, 2591, 2592, 1, 0, 0, 0, 2592, 2594, 1, 0, 0, 0, 2593, 2595, 3, 512, 256, 0, 2594, 2593, 1, 0, 0, 0, 2594, 2595, 1, 0, 0, 0, 2595, 2597, 1, 0, 0, 0, 2596, 2598, 3, 530, 265, 0, 2597, 2596, 1, 0, 0, 0, 2597, 2598, 1, 0, 0, 0, 2598, 2605, 1, 0, 0, 0, 2599, 2600, 5, 399, 0, 0, 2600, 2601, 3, 376, 188, 0, 2601, 2602, 5, 400, 0, 0, 2602, 2605, 1, 0, 0, 0, 2603, 2605, 3, 496, 248, 0, 2604, 2580, 1, 0, 0, 0, 2604, 2599, 1, 0, 0, 0, 2604, 2603, 1, 0, 0, 0, 2605, 375, 1, 0, 0, 0, 2606, 2608, 3, 374, 187, 0, 2607, 2609, 3, 378, 189, 0, 2608, 2607, 1, 0, 0, 0, 2608, 2609, 1, 0, 0, 0, 2609, 2611, 1, 0, 0, 0, 2610, 2612, 3, 542, 271, 0, 2611, 2610, 1, 0, 0, 0, 2611, 2612, 1, 0, 0, 0, 2612, 2614, 1, 0, 0, 0, 2613, 2615, 3, 544, 272, 0, 2614, 2613, 1, 0, 0, 0, 2614, 2615, 1, 0, 0, 0, 2615, 2617, 1, 0, 0, 0, 2616, 2618, 3, 546, 273, 0, 2617, 2616, 1, 0, 0, 0, 2617, 2618, 1, 0, 0, 0, 2618, 2620, 1, 0, 0, 0, 2619, 2621, 3, 548, 274, 0, 2620, 2619, 1, 0, 0, 0, 2620, 2621, 1, 0, 0, 0, 2621, 2623, 1, 0, 0, 0, 2622, 2624, 3, 386, 193, 0, 2623, 2622, 1, 0, 0, 0, 2623, 2624, 1, 0, 0, 0, 2624, 377, 1, 0, 0, 0, 2625, 2626, 3, 358, 179, 0, 2626, 2627, 3, 374, 187, 0, 2627, 2629, 1, 0, 0, 0, 2628, 2625, 1, 0, 0, 0, 2629, 2630, 1, 0, 0, 0, 2630, 2628, 1, 0, 0, 0, 2630, 2631, 1, 0, 0, 0, 2631, 379, 1, 0, 0, 0, 2632, 2634, 3, 364, 182, 0, 2633, 2632, 1, 0, 0, 0, 2633, 2634, 1, 0, 0, 0, 2634, 2635, 1, 0, 0, 0, 2635, 2636, 3, 376, 188, 0, 2636, 381, 1, 0, 0, 0, 2637, 2654, 5, 161, 0, 0, 2638, 2639, 5, 235, 0, 0, 2639, 2641, 3, 384, 192, 0, 2640, 2642, 3, 32, 16, 0, 2641, 2640, 1, 0, 0, 0, 2641, 2642, 1, 0, 0, 0, 2642, 2655, 1, 0, 0, 0, 2643, 2645, 5, 166, 0, 0, 2644, 2646, 5, 329, 0, 0, 2645, 2644, 1, 0, 0, 0, 2645, 2646, 1, 0, 0, 0, 2646, 2647, 1, 0, 0, 0, 2647, 2652, 3, 624, 312, 0, 2648, 2649, 5, 399, 0, 0, 2649, 2650, 3, 254, 127, 0, 2650, 2651, 5, 400, 0, 0, 2651, 2653, 1, 0, 0, 0, 2652, 2648, 1, 0, 0, 0, 2652, 2653, 1, 0, 0, 0, 2653, 2655, 1, 0, 0, 0, 2654, 2638, 1, 0, 0, 0, 2654, 2643, 1, 0, 0, 0, 2655, 383, 1, 0, 0, 0, 2656, 2658, 5, 188, 0, 0, 2657, 2656, 1, 0, 0, 0, 2657, 2658, 1, 0, 0, 0, 2658, 2659, 1, 0, 0, 0, 2659, 2660, 5, 93, 0, 0, 2660, 2662, 5, 426, 0, 0, 2661, 2663, 3, 222, 111, 0, 2662, 2661, 1, 0, 0, 0, 2662, 2663, 1, 0, 0, 0, 2663, 2665, 1, 0, 0, 0, 2664, 2666, 3, 246, 123, 0, 2665, 2664, 1, 0, 0, 0, 2665, 2666, 1, 0, 0, 0, 2666, 2670, 1, 0, 0, 0, 2667, 2668, 5, 329, 0, 0, 2668, 2670, 3, 624, 312, 0, 2669, 2657, 1, 0, 0, 0, 2669, 2667, 1, 0, 0, 0, 2670, 385, 1, 0, 0, 0, 2671, 2680, 5, 185, 0, 0, 2672, 2673, 5, 431, 0, 0, 2673, 2675, 5, 397, 0, 0, 2674, 2672, 1, 0, 0, 0, 2674, 2675, 1, 0, 0, 0, 2675, 2676, 1, 0, 0, 0, 2676, 2681, 5, 431, 0, 0, 2677, 2678, 5, 431, 0, 0, 2678, 2679, 5, 223, 0, 0, 2679, 2681, 5, 431, 0, 0, 2680, 2674, 1, 0, 0, 0, 2680, 2677, 1, 0, 0, 0, 2681, 387, 1, 0, 0, 0, 2682, 2683, 3, 256, 128, 0, 2683, 2684, 5, 405, 0, 0, 2684, 2685, 3, 390, 195, 0, 2685, 389, 1, 0, 0, 0, 2686, 2689, 5, 83, 0, 0, 2687, 2689, 3, 590, 295, 0, 2688, 2686, 1, 0, 0, 0, 2688, 2687, 1, 0, 0, 0, 2689, 391, 1, 0, 0, 0, 2690, 2691, 5, 304, 0, 0, 2691, 2696, 3, 388, 194, 0, 2692, 2693, 5, 397, 0, 0, 2693, 2695, 3, 388, 194, 0, 2694, 2692, 1, 0, 0, 0, 2695, 2698, 1, 0, 0, 0, 2696, 2694, 1, 0, 0, 0, 2696, 2697, 1, 0, 0, 0, 2697, 393, 1, 0, 0, 0, 2698, 2696, 1, 0, 0, 0, 2699, 2700, 5, 318, 0, 0, 2700, 2709, 5, 344, 0, 0, 2701, 2706, 3, 396, 198, 0, 2702, 2703, 5, 397, 0, 0, 2703, 2705, 3, 396, 198, 0, 2704, 2702, 1, 0, 0, 0, 2705, 2708, 1, 0, 0, 0, 2706, 2704, 1, 0, 0, 0, 2706, 2707, 1, 0, 0, 0, 2707, 2710, 1, 0, 0, 0, 2708, 2706, 1, 0, 0, 0, 2709, 2701, 1, 0, 0, 0, 2709, 2710, 1, 0, 0, 0, 2710, 2723, 1, 0, 0, 0, 2711, 2713, 5, 48, 0, 0, 2712, 2714, 5, 389, 0, 0, 2713, 2712, 1, 0, 0, 0, 2713, 2714, 1, 0, 0, 0, 2714, 2723, 1, 0, 0, 0, 2715, 2717, 5, 289, 0, 0, 2716, 2718, 5, 389, 0, 0, 2717, 2716, 1, 0, 0, 0, 2717, 2718, 1, 0, 0, 0, 2718, 2723, 1, 0, 0, 0, 2719, 2720, 5, 304, 0, 0, 2720, 2721, 5, 22, 0, 0, 2721, 2723, 7, 22, 0, 0, 2722, 2699, 1, 0, 0, 0, 2722, 2711, 1, 0, 0, 0, 2722, 2715, 1, 0, 0, 0, 2722, 2719, 1, 0, 0, 0, 2723, 395, 1, 0, 0, 0, 2724, 2725, 5, 168, 0, 0, 2725, 2726, 5, 182, 0, 0, 2726, 2730, 5, 312, 0, 0, 2727, 2728, 5, 261, 0, 0, 2728, 2730, 7, 23, 0, 0, 2729, 2724, 1, 0, 0, 0, 2729, 2727, 1, 0, 0, 0, 2730, 397, 1, 0, 0, 0, 2731, 2734, 3, 402, 201, 0, 2732, 2734, 3, 404, 202, 0, 2733, 2731, 1, 0, 0, 0, 2733, 2732, 1, 0, 0, 0, 2734, 2737, 1, 0, 0, 0, 2735, 2733, 1, 0, 0, 0, 2735, 2736, 1, 0, 0, 0, 2736, 2739, 1, 0, 0, 0, 2737, 2735, 1, 0, 0, 0, 2738, 2740, 3, 400, 200, 0, 2739, 2738, 1, 0, 0, 0, 2739, 2740, 1, 0, 0, 0, 2740, 399, 1, 0, 0, 0, 2741, 2742, 5, 383, 0, 0, 2742, 2743, 5, 216, 0, 0, 2743, 2746, 5, 201, 0, 0, 2744, 2745, 5, 11, 0, 0, 2745, 2747, 3, 580, 290, 0, 2746, 2744, 1, 0, 0, 0, 2746, 2747, 1, 0, 0, 0, 2747, 2748, 1, 0, 0, 0, 2748, 2749, 5, 335, 0, 0, 2749, 2751, 5, 161, 0, 0, 2750, 2752, 3, 264, 132, 0, 2751, 2750, 1, 0, 0, 0, 2751, 2752, 1, 0, 0, 0, 2752, 2753, 1, 0, 0, 0, 2753, 2754, 5, 374, 0, 0, 2754, 2755, 3, 538, 269, 0, 2755, 401, 1, 0, 0, 0, 2756, 2757, 5, 383, 0, 0, 2757, 2758, 5, 201, 0, 0, 2758, 2759, 5, 11, 0, 0, 2759, 2760, 3, 580, 290, 0, 2760, 2764, 5, 335, 0, 0, 2761, 2762, 5, 365, 0, 0, 2762, 2765, 3, 392, 196, 0, 2763, 2765, 5, 86, 0, 0, 2764, 2761, 1, 0, 0, 0, 2764, 2763, 1, 0, 0, 0, 2765, 403, 1, 0, 0, 0, 2766, 2767, 5, 383, 0, 0, 2767, 2768, 5, 201, 0, 0, 2768, 2772, 5, 335, 0, 0, 2769, 2770, 5, 365, 0, 0, 2770, 2773, 3, 392, 196, 0, 2771, 2773, 5, 86, 0, 0, 2772, 2769, 1, 0, 0, 0, 2772, 2771, 1, 0, 0, 0, 2773, 405, 1, 0, 0, 0, 2774, 2775, 5, 246, 0, 0, 2775, 2776, 5, 426, 0, 0, 2776, 407, 1, 0, 0, 0, 2777, 2778, 5, 352, 0, 0, 2778, 2779, 5, 426, 0, 0, 2779, 409, 1, 0, 0, 0, 2780, 2781, 5, 320, 0, 0, 2781, 2782, 5, 426, 0, 0, 2782, 411, 1, 0, 0, 0, 2783, 2814, 5, 9, 0, 0, 2784, 2785, 5, 329, 0, 0, 2785, 2786, 3, 478, 239, 0, 2786, 2787, 3, 414, 207, 0, 2787, 2815, 1, 0, 0, 0, 2788, 2789, 5, 378, 0, 0, 2789, 2791, 3, 482, 241, 0, 2790, 2792, 5, 17, 0, 0, 2791, 2790, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 2793, 1, 0, 0, 0, 2793, 2794, 3, 418, 209, 0, 2794, 2815, 1, 0, 0, 0, 2795, 2796, 5, 202, 0, 0, 2796, 2797, 5, 378, 0, 0, 2797, 2801, 3, 482, 241, 0, 2798, 2802, 3, 36, 18, 0, 2799, 2802, 3, 38, 19, 0, 2800, 2802, 5, 265, 0, 0, 2801, 2798, 1, 0, 0, 0, 2801, 2799, 1, 0, 0, 0, 2801, 2800, 1, 0, 0, 0, 2802, 2815, 1, 0, 0, 0, 2803, 2804, 3, 70, 35, 0, 2804, 2805, 3, 420, 210, 0, 2805, 2815, 1, 0, 0, 0, 2806, 2807, 5, 69, 0, 0, 2807, 2815, 3, 422, 211, 0, 2808, 2809, 5, 155, 0, 0, 2809, 2810, 3, 638, 319, 0, 2810, 2811, 5, 224, 0, 0, 2811, 2812, 3, 624, 312, 0, 2812, 2813, 5, 265, 0, 0, 2813, 2815, 1, 0, 0, 0, 2814, 2784, 1, 0, 0, 0, 2814, 2788, 1, 0, 0, 0, 2814, 2795, 1, 0, 0, 0, 2814, 2803, 1, 0, 0, 0, 2814, 2806, 1, 0, 0, 0, 2814, 2808, 1, 0, 0, 0, 2815, 413, 1, 0, 0, 0, 2816, 2817, 5, 274, 0, 0, 2817, 2818, 5, 341, 0, 0, 2818, 2906, 3, 480, 240, 0, 2819, 2820, 5, 102, 0, 0, 2820, 2906, 5, 239, 0, 0, 2821, 2906, 3, 426, 213, 0, 2822, 2824, 5, 4, 0, 0, 2823, 2825, 3, 32, 16, 0, 2824, 2823, 1, 0, 0, 0, 2824, 2825, 1, 0, 0, 0, 2825, 2830, 1, 0, 0, 0, 2826, 2828, 3, 626, 313, 0, 2827, 2829, 3, 424, 212, 0, 2828, 2827, 1, 0, 0, 0, 2828, 2829, 1, 0, 0, 0, 2829, 2831, 1, 0, 0, 0, 2830, 2826, 1, 0, 0, 0, 2831, 2832, 1, 0, 0, 0, 2832, 2830, 1, 0, 0, 0, 2832, 2833, 1, 0, 0, 0, 2833, 2906, 1, 0, 0, 0, 2834, 2838, 5, 342, 0, 0, 2835, 2837, 3, 626, 313, 0, 2836, 2835, 1, 0, 0, 0, 2837, 2840, 1, 0, 0, 0, 2838, 2836, 1, 0, 0, 0, 2838, 2839, 1, 0, 0, 0, 2839, 2906, 1, 0, 0, 0, 2840, 2838, 1, 0, 0, 0, 2841, 2845, 5, 15, 0, 0, 2842, 2844, 3, 626, 313, 0, 2843, 2842, 1, 0, 0, 0, 2844, 2847, 1, 0, 0, 0, 2845, 2843, 1, 0, 0, 0, 2845, 2846, 1, 0, 0, 0, 2846, 2906, 1, 0, 0, 0, 2847, 2845, 1, 0, 0, 0, 2848, 2852, 5, 353, 0, 0, 2849, 2851, 3, 626, 313, 0, 2850, 2849, 1, 0, 0, 0, 2851, 2854, 1, 0, 0, 0, 2852, 2850, 1, 0, 0, 0, 2852, 2853, 1, 0, 0, 0, 2853, 2906, 1, 0, 0, 0, 2854, 2852, 1, 0, 0, 0, 2855, 2856, 5, 304, 0, 0, 2856, 2857, 5, 332, 0, 0, 2857, 2906, 3, 226, 113, 0, 2858, 2859, 5, 363, 0, 0, 2859, 2861, 5, 332, 0, 0, 2860, 2862, 3, 30, 15, 0, 2861, 2860, 1, 0, 0, 0, 2861, 2862, 1, 0, 0, 0, 2862, 2863, 1, 0, 0, 0, 2863, 2906, 3, 226, 113, 0, 2864, 2906, 3, 210, 105, 0, 2865, 2868, 5, 216, 0, 0, 2866, 2869, 5, 310, 0, 0, 2867, 2869, 3, 40, 20, 0, 2868, 2866, 1, 0, 0, 0, 2868, 2867, 1, 0, 0, 0, 2869, 2906, 1, 0, 0, 0, 2870, 2871, 5, 113, 0, 0, 2871, 2872, 3, 626, 313, 0, 2872, 2873, 5, 387, 0, 0, 2873, 2874, 5, 329, 0, 0, 2874, 2875, 3, 478, 239, 0, 2875, 2906, 1, 0, 0, 0, 2876, 2877, 5, 237, 0, 0, 2877, 2878, 5, 45, 0, 0, 2878, 2879, 5, 399, 0, 0, 2879, 2880, 3, 310, 155, 0, 2880, 2881, 5, 400, 0, 0, 2881, 2906, 1, 0, 0, 0, 2882, 2883, 5, 101, 0, 0, 2883, 2884, 5, 55, 0, 0, 2884, 2906, 3, 638, 319, 0, 2885, 2888, 5, 4, 0, 0, 2886, 2889, 3, 288, 144, 0, 2887, 2889, 3, 278, 139, 0, 2888, 2886, 1, 0, 0, 0, 2888, 2887, 1, 0, 0, 0, 2889, 2906, 1, 0, 0, 0, 2890, 2892, 3, 626, 313, 0, 2891, 2890, 1, 0, 0, 0, 2891, 2892, 1, 0, 0, 0, 2892, 2893, 1, 0, 0, 0, 2893, 2906, 3, 416, 208, 0, 2894, 2895, 5, 304, 0, 0, 2895, 2896, 5, 236, 0, 0, 2896, 2906, 3, 126, 63, 0, 2897, 2898, 5, 304, 0, 0, 2898, 2899, 5, 237, 0, 0, 2899, 2900, 5, 316, 0, 0, 2900, 2901, 5, 399, 0, 0, 2901, 2902, 3, 204, 102, 0, 2902, 2903, 5, 400, 0, 0, 2903, 2906, 1, 0, 0, 0, 2904, 2906, 3, 430, 215, 0, 2905, 2816, 1, 0, 0, 0, 2905, 2819, 1, 0, 0, 0, 2905, 2821, 1, 0, 0, 0, 2905, 2822, 1, 0, 0, 0, 2905, 2834, 1, 0, 0, 0, 2905, 2841, 1, 0, 0, 0, 2905, 2848, 1, 0, 0, 0, 2905, 2855, 1, 0, 0, 0, 2905, 2858, 1, 0, 0, 0, 2905, 2864, 1, 0, 0, 0, 2905, 2865, 1, 0, 0, 0, 2905, 2870, 1, 0, 0, 0, 2905, 2876, 1, 0, 0, 0, 2905, 2882, 1, 0, 0, 0, 2905, 2885, 1, 0, 0, 0, 2905, 2891, 1, 0, 0, 0, 2905, 2894, 1, 0, 0, 0, 2905, 2897, 1, 0, 0, 0, 2905, 2904, 1, 0, 0, 0, 2906, 415, 1, 0, 0, 0, 2907, 2908, 5, 304, 0, 0, 2908, 2909, 5, 129, 0, 0, 2909, 3040, 3, 432, 216, 0, 2910, 2911, 5, 304, 0, 0, 2911, 2912, 5, 189, 0, 0, 2912, 3040, 5, 426, 0, 0, 2913, 3040, 5, 53, 0, 0, 2914, 2924, 5, 304, 0, 0, 2915, 2916, 5, 301, 0, 0, 2916, 2920, 5, 426, 0, 0, 2917, 2918, 5, 387, 0, 0, 2918, 2919, 5, 302, 0, 0, 2919, 2921, 3, 226, 113, 0, 2920, 2917, 1, 0, 0, 0, 2920, 2921, 1, 0, 0, 0, 2921, 2925, 1, 0, 0, 0, 2922, 2923, 5, 302, 0, 0, 2923, 2925, 3, 226, 113, 0, 2924, 2915, 1, 0, 0, 0, 2924, 2922, 1, 0, 0, 0, 2925, 3040, 1, 0, 0, 0, 2926, 2927, 5, 363, 0, 0, 2927, 2928, 5, 302, 0, 0, 2928, 3040, 3, 226, 113, 0, 2929, 2930, 5, 274, 0, 0, 2930, 2931, 5, 341, 0, 0, 2931, 3040, 3, 626, 313, 0, 2932, 2933, 5, 166, 0, 0, 2933, 2934, 5, 431, 0, 0, 2934, 3040, 5, 31, 0, 0, 2935, 2936, 5, 304, 0, 0, 2936, 2937, 5, 310, 0, 0, 2937, 2938, 5, 189, 0, 0, 2938, 2939, 5, 399, 0, 0, 2939, 2944, 3, 428, 214, 0, 2940, 2941, 5, 397, 0, 0, 2941, 2943, 3, 428, 214, 0, 2942, 2940, 1, 0, 0, 0, 2943, 2946, 1, 0, 0, 0, 2944, 2942, 1, 0, 0, 0, 2944, 2945, 1, 0, 0, 0, 2945, 2947, 1, 0, 0, 0, 2946, 2944, 1, 0, 0, 0, 2947, 2948, 5, 400, 0, 0, 2948, 3040, 1, 0, 0, 0, 2949, 2950, 5, 216, 0, 0, 2950, 3040, 7, 24, 0, 0, 2951, 3040, 3, 208, 104, 0, 2952, 2953, 5, 49, 0, 0, 2953, 2956, 5, 426, 0, 0, 2954, 2955, 5, 11, 0, 0, 2955, 2957, 5, 380, 0, 0, 2956, 2954, 1, 0, 0, 0, 2956, 2957, 1, 0, 0, 0, 2957, 2962, 1, 0, 0, 0, 2958, 2959, 5, 42, 0, 0, 2959, 2960, 5, 166, 0, 0, 2960, 2961, 5, 431, 0, 0, 2961, 2963, 5, 31, 0, 0, 2962, 2958, 1, 0, 0, 0, 2962, 2963, 1, 0, 0, 0, 2963, 2965, 1, 0, 0, 0, 2964, 2966, 3, 542, 271, 0, 2965, 2964, 1, 0, 0, 0, 2965, 2966, 1, 0, 0, 0, 2966, 2968, 1, 0, 0, 0, 2967, 2969, 3, 406, 203, 0, 2968, 2967, 1, 0, 0, 0, 2968, 2969, 1, 0, 0, 0, 2969, 2974, 1, 0, 0, 0, 2970, 2971, 5, 387, 0, 0, 2971, 2972, 5, 235, 0, 0, 2972, 2973, 5, 332, 0, 0, 2973, 2975, 3, 226, 113, 0, 2974, 2970, 1, 0, 0, 0, 2974, 2975, 1, 0, 0, 0, 2975, 3040, 1, 0, 0, 0, 2976, 2977, 5, 365, 0, 0, 2977, 2978, 5, 319, 0, 0, 2978, 2980, 5, 134, 0, 0, 2979, 2981, 5, 45, 0, 0, 2980, 2979, 1, 0, 0, 0, 2980, 2981, 1, 0, 0, 0, 2981, 2982, 1, 0, 0, 0, 2982, 2983, 3, 256, 128, 0, 2983, 2984, 5, 304, 0, 0, 2984, 2987, 3, 226, 113, 0, 2985, 2986, 5, 47, 0, 0, 2986, 2988, 5, 426, 0, 0, 2987, 2985, 1, 0, 0, 0, 2987, 2988, 1, 0, 0, 0, 2988, 3040, 1, 0, 0, 0, 2989, 2990, 5, 365, 0, 0, 2990, 2991, 5, 319, 0, 0, 2991, 2992, 5, 304, 0, 0, 2992, 3040, 3, 226, 113, 0, 2993, 2995, 5, 38, 0, 0, 2994, 2996, 5, 45, 0, 0, 2995, 2994, 1, 0, 0, 0, 2995, 2996, 1, 0, 0, 0, 2996, 2997, 1, 0, 0, 0, 2997, 2998, 3, 256, 128, 0, 2998, 2999, 3, 258, 129, 0, 2999, 3001, 3, 342, 171, 0, 3000, 3002, 3, 324, 162, 0, 3001, 3000, 1, 0, 0, 0, 3001, 3002, 1, 0, 0, 0, 3002, 3005, 1, 0, 0, 0, 3003, 3004, 5, 47, 0, 0, 3004, 3006, 5, 426, 0, 0, 3005, 3003, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3010, 1, 0, 0, 0, 3007, 3011, 5, 130, 0, 0, 3008, 3009, 5, 6, 0, 0, 3009, 3011, 3, 638, 319, 0, 3010, 3007, 1, 0, 0, 0, 3010, 3008, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3013, 1, 0, 0, 0, 3012, 3014, 3, 34, 17, 0, 3013, 3012, 1, 0, 0, 0, 3013, 3014, 1, 0, 0, 0, 3014, 3040, 1, 0, 0, 0, 3015, 3018, 5, 4, 0, 0, 3016, 3018, 5, 278, 0, 0, 3017, 3015, 1, 0, 0, 0, 3017, 3016, 1, 0, 0, 0, 3018, 3019, 1, 0, 0, 0, 3019, 3020, 5, 46, 0, 0, 3020, 3021, 5, 399, 0, 0, 3021, 3022, 3, 248, 124, 0, 3022, 3024, 5, 400, 0, 0, 3023, 3025, 3, 34, 17, 0, 3024, 3023, 1, 0, 0, 0, 3024, 3025, 1, 0, 0, 0, 3025, 3040, 1, 0, 0, 0, 3026, 3027, 5, 365, 0, 0, 3027, 3029, 5, 46, 0, 0, 3028, 3030, 3, 34, 17, 0, 3029, 3028, 1, 0, 0, 0, 3029, 3030, 1, 0, 0, 0, 3030, 3040, 1, 0, 0, 0, 3031, 3037, 3, 268, 134, 0, 3032, 3034, 5, 218, 0, 0, 3033, 3035, 5, 34, 0, 0, 3034, 3033, 1, 0, 0, 0, 3034, 3035, 1, 0, 0, 0, 3035, 3038, 1, 0, 0, 0, 3036, 3038, 5, 222, 0, 0, 3037, 3032, 1, 0, 0, 0, 3037, 3036, 1, 0, 0, 0, 3038, 3040, 1, 0, 0, 0, 3039, 2907, 1, 0, 0, 0, 3039, 2910, 1, 0, 0, 0, 3039, 2913, 1, 0, 0, 0, 3039, 2914, 1, 0, 0, 0, 3039, 2926, 1, 0, 0, 0, 3039, 2929, 1, 0, 0, 0, 3039, 2932, 1, 0, 0, 0, 3039, 2935, 1, 0, 0, 0, 3039, 2949, 1, 0, 0, 0, 3039, 2951, 1, 0, 0, 0, 3039, 2952, 1, 0, 0, 0, 3039, 2976, 1, 0, 0, 0, 3039, 2989, 1, 0, 0, 0, 3039, 2993, 1, 0, 0, 0, 3039, 3017, 1, 0, 0, 0, 3039, 3026, 1, 0, 0, 0, 3039, 3031, 1, 0, 0, 0, 3040, 417, 1, 0, 0, 0, 3041, 3042, 5, 304, 0, 0, 3042, 3043, 5, 332, 0, 0, 3043, 3068, 3, 226, 113, 0, 3044, 3045, 5, 363, 0, 0, 3045, 3047, 5, 332, 0, 0, 3046, 3048, 3, 30, 15, 0, 3047, 3046, 1, 0, 0, 0, 3047, 3048, 1, 0, 0, 0, 3048, 3049, 1, 0, 0, 0, 3049, 3068, 3, 226, 113, 0, 3050, 3051, 5, 274, 0, 0, 3051, 3052, 5, 341, 0, 0, 3052, 3068, 3, 480, 240, 0, 3053, 3055, 5, 4, 0, 0, 3054, 3056, 3, 32, 16, 0, 3055, 3054, 1, 0, 0, 0, 3055, 3056, 1, 0, 0, 0, 3056, 3061, 1, 0, 0, 0, 3057, 3059, 3, 626, 313, 0, 3058, 3060, 3, 424, 212, 0, 3059, 3058, 1, 0, 0, 0, 3059, 3060, 1, 0, 0, 0, 3060, 3062, 1, 0, 0, 0, 3061, 3057, 1, 0, 0, 0, 3062, 3063, 1, 0, 0, 0, 3063, 3061, 1, 0, 0, 0, 3063, 3064, 1, 0, 0, 0, 3064, 3068, 1, 0, 0, 0, 3065, 3068, 3, 426, 213, 0, 3066, 3068, 3, 380, 190, 0, 3067, 3041, 1, 0, 0, 0, 3067, 3044, 1, 0, 0, 0, 3067, 3050, 1, 0, 0, 0, 3067, 3053, 1, 0, 0, 0, 3067, 3065, 1, 0, 0, 0, 3067, 3066, 1, 0, 0, 0, 3068, 419, 1, 0, 0, 0, 3069, 3070, 3, 472, 236, 0, 3070, 3071, 5, 304, 0, 0, 3071, 3072, 5, 76, 0, 0, 3072, 3073, 3, 230, 115, 0, 3073, 3085, 1, 0, 0, 0, 3074, 3075, 3, 472, 236, 0, 3075, 3076, 5, 304, 0, 0, 3076, 3077, 5, 236, 0, 0, 3077, 3078, 3, 128, 64, 0, 3078, 3085, 1, 0, 0, 0, 3079, 3080, 3, 472, 236, 0, 3080, 3081, 5, 304, 0, 0, 3081, 3082, 7, 25, 0, 0, 3082, 3083, 5, 426, 0, 0, 3083, 3085, 1, 0, 0, 0, 3084, 3069, 1, 0, 0, 0, 3084, 3074, 1, 0, 0, 0, 3084, 3079, 1, 0, 0, 0, 3085, 421, 1, 0, 0, 0, 3086, 3087, 3, 472, 236, 0, 3087, 3088, 5, 304, 0, 0, 3088, 3089, 5, 77, 0, 0, 3089, 3090, 3, 230, 115, 0, 3090, 3102, 1, 0, 0, 0, 3091, 3092, 3, 472, 236, 0, 3092, 3093, 5, 304, 0, 0, 3093, 3094, 5, 236, 0, 0, 3094, 3095, 3, 128, 64, 0, 3095, 3102, 1, 0, 0, 0, 3096, 3097, 3, 472, 236, 0, 3097, 3098, 5, 304, 0, 0, 3098, 3099, 5, 367, 0, 0, 3099, 3100, 5, 426, 0, 0, 3100, 3102, 1, 0, 0, 0, 3101, 3086, 1, 0, 0, 0, 3101, 3091, 1, 0, 0, 0, 3101, 3096, 1, 0, 0, 0, 3102, 423, 1, 0, 0, 0, 3103, 3104, 5, 189, 0, 0, 3104, 3105, 5, 426, 0, 0, 3105, 425, 1, 0, 0, 0, 3106, 3108, 5, 101, 0, 0, 3107, 3109, 3, 30, 15, 0, 3108, 3107, 1, 0, 0, 0, 3108, 3109, 1, 0, 0, 0, 3109, 3110, 1, 0, 0, 0, 3110, 3111, 5, 237, 0, 0, 3111, 3117, 3, 630, 315, 0, 3112, 3113, 5, 397, 0, 0, 3113, 3114, 5, 237, 0, 0, 3114, 3116, 3, 630, 315, 0, 3115, 3112, 1, 0, 0, 0, 3116, 3119, 1, 0, 0, 0, 3117, 3115, 1, 0, 0, 0, 3117, 3118, 1, 0, 0, 0, 3118, 3122, 1, 0, 0, 0, 3119, 3117, 1, 0, 0, 0, 3120, 3121, 5, 152, 0, 0, 3121, 3123, 5, 254, 0, 0, 3122, 3120, 1, 0, 0, 0, 3122, 3123, 1, 0, 0, 0, 3123, 3125, 1, 0, 0, 0, 3124, 3126, 5, 255, 0, 0, 3125, 3124, 1, 0, 0, 0, 3125, 3126, 1, 0, 0, 0, 3126, 3128, 1, 0, 0, 0, 3127, 3129, 3, 14, 7, 0, 3128, 3127, 1, 0, 0, 0, 3128, 3129, 1, 0, 0, 0, 3129, 427, 1, 0, 0, 0, 3130, 3133, 3, 572, 286, 0, 3131, 3133, 3, 294, 147, 0, 3132, 3130, 1, 0, 0, 0, 3132, 3131, 1, 0, 0, 0, 3133, 3134, 1, 0, 0, 0, 3134, 3135, 5, 405, 0, 0, 3135, 3136, 5, 426, 0, 0, 3136, 429, 1, 0, 0, 0, 3137, 3147, 5, 115, 0, 0, 3138, 3139, 5, 289, 0, 0, 3139, 3140, 5, 399, 0, 0, 3140, 3148, 7, 26, 0, 0, 3141, 3142, 5, 118, 0, 0, 3142, 3143, 5, 399, 0, 0, 3143, 3148, 5, 426, 0, 0, 3144, 3145, 5, 306, 0, 0, 3145, 3146, 5, 399, 0, 0, 3146, 3148, 5, 431, 0, 0, 3147, 3138, 1, 0, 0, 0, 3147, 3141, 1, 0, 0, 0, 3147, 3144, 1, 0, 0, 0, 3148, 3149, 1, 0, 0, 0, 3149, 3150, 5, 400, 0, 0, 3150, 431, 1, 0, 0, 0, 3151, 3152, 5, 160, 0, 0, 3152, 3153, 5, 426, 0, 0, 3153, 3154, 5, 233, 0, 0, 3154, 3155, 5, 426, 0, 0, 3155, 3156, 5, 301, 0, 0, 3156, 3161, 5, 426, 0, 0, 3157, 3158, 5, 159, 0, 0, 3158, 3159, 5, 426, 0, 0, 3159, 3160, 5, 232, 0, 0, 3160, 3162, 5, 426, 0, 0, 3161, 3157, 1, 0, 0, 0, 3161, 3162, 1, 0, 0, 0, 3162, 3165, 1, 0, 0, 0, 3163, 3165, 3, 638, 319, 0, 3164, 3151, 1, 0, 0, 0, 3164, 3163, 1, 0, 0, 0, 3165, 433, 1, 0, 0, 0, 3166, 3167, 5, 184, 0, 0, 3167, 3176, 5, 128, 0, 0, 3168, 3169, 5, 184, 0, 0, 3169, 3170, 5, 128, 0, 0, 3170, 3171, 3, 638, 319, 0, 3171, 3172, 5, 426, 0, 0, 3172, 3176, 1, 0, 0, 0, 3173, 3174, 5, 184, 0, 0, 3174, 3176, 3, 478, 239, 0, 3175, 3166, 1, 0, 0, 0, 3175, 3168, 1, 0, 0, 0, 3175, 3173, 1, 0, 0, 0, 3176, 435, 1, 0, 0, 0, 3177, 3179, 5, 58, 0, 0, 3178, 3180, 5, 333, 0, 0, 3179, 3178, 1, 0, 0, 0, 3179, 3180, 1, 0, 0, 0, 3180, 3182, 1, 0, 0, 0, 3181, 3183, 5, 345, 0, 0, 3182, 3181, 1, 0, 0, 0, 3182, 3183, 1, 0, 0, 0, 3183, 3185, 1, 0, 0, 0, 3184, 3186, 5, 123, 0, 0, 3185, 3184, 1, 0, 0, 0, 3185, 3186, 1, 0, 0, 0, 3186, 3187, 1, 0, 0, 0, 3187, 3189, 5, 329, 0, 0, 3188, 3190, 3, 32, 16, 0, 3189, 3188, 1, 0, 0, 0, 3189, 3190, 1, 0, 0, 0, 3190, 3191, 1, 0, 0, 0, 3191, 3248, 3, 480, 240, 0, 3192, 3194, 3, 434, 217, 0, 3193, 3195, 3, 200, 100, 0, 3194, 3193, 1, 0, 0, 0, 3194, 3195, 1, 0, 0, 0, 3195, 3197, 1, 0, 0, 0, 3196, 3198, 3, 222, 111, 0, 3197, 3196, 1, 0, 0, 0, 3197, 3198, 1, 0, 0, 0, 3198, 3200, 1, 0, 0, 0, 3199, 3201, 3, 246, 123, 0, 3200, 3199, 1, 0, 0, 0, 3200, 3201, 1, 0, 0, 0, 3201, 3203, 1, 0, 0, 0, 3202, 3204, 3, 424, 212, 0, 3203, 3202, 1, 0, 0, 0, 3203, 3204, 1, 0, 0, 0, 3204, 3206, 1, 0, 0, 0, 3205, 3207, 3, 224, 112, 0, 3206, 3205, 1, 0, 0, 0, 3206, 3207, 1, 0, 0, 0, 3207, 3209, 1, 0, 0, 0, 3208, 3210, 3, 198, 99, 0, 3209, 3208, 1, 0, 0, 0, 3209, 3210, 1, 0, 0, 0, 3210, 3249, 1, 0, 0, 0, 3211, 3212, 5, 399, 0, 0, 3212, 3213, 3, 250, 125, 0, 3213, 3214, 5, 400, 0, 0, 3214, 3216, 1, 0, 0, 0, 3215, 3211, 1, 0, 0, 0, 3215, 3216, 1, 0, 0, 0, 3216, 3218, 1, 0, 0, 0, 3217, 3219, 3, 196, 98, 0, 3218, 3217, 1, 0, 0, 0, 3218, 3219, 1, 0, 0, 0, 3219, 3221, 1, 0, 0, 0, 3220, 3222, 3, 200, 100, 0, 3221, 3220, 1, 0, 0, 0, 3221, 3222, 1, 0, 0, 0, 3222, 3224, 1, 0, 0, 0, 3223, 3225, 3, 208, 104, 0, 3224, 3223, 1, 0, 0, 0, 3224, 3225, 1, 0, 0, 0, 3225, 3227, 1, 0, 0, 0, 3226, 3228, 3, 210, 105, 0, 3227, 3226, 1, 0, 0, 0, 3227, 3228, 1, 0, 0, 0, 3228, 3230, 1, 0, 0, 0, 3229, 3231, 3, 222, 111, 0, 3230, 3229, 1, 0, 0, 0, 3230, 3231, 1, 0, 0, 0, 3231, 3233, 1, 0, 0, 0, 3232, 3234, 3, 246, 123, 0, 3233, 3232, 1, 0, 0, 0, 3233, 3234, 1, 0, 0, 0, 3234, 3236, 1, 0, 0, 0, 3235, 3237, 3, 424, 212, 0, 3236, 3235, 1, 0, 0, 0, 3236, 3237, 1, 0, 0, 0, 3237, 3239, 1, 0, 0, 0, 3238, 3240, 3, 224, 112, 0, 3239, 3238, 1, 0, 0, 0, 3239, 3240, 1, 0, 0, 0, 3240, 3242, 1, 0, 0, 0, 3241, 3243, 3, 198, 99, 0, 3242, 3241, 1, 0, 0, 0, 3242, 3243, 1, 0, 0, 0, 3243, 3246, 1, 0, 0, 0, 3244, 3245, 5, 17, 0, 0, 3245, 3247, 3, 380, 190, 0, 3246, 3244, 1, 0, 0, 0, 3246, 3247, 1, 0, 0, 0, 3247, 3249, 1, 0, 0, 0, 3248, 3192, 1, 0, 0, 0, 3248, 3215, 1, 0, 0, 0, 3249, 3313, 1, 0, 0, 0, 3250, 3251, 5, 58, 0, 0, 3251, 3252, 5, 195, 0, 0, 3252, 3254, 5, 329, 0, 0, 3253, 3255, 3, 32, 16, 0, 3254, 3253, 1, 0, 0, 0, 3254, 3255, 1, 0, 0, 0, 3255, 3256, 1, 0, 0, 0, 3256, 3310, 3, 480, 240, 0, 3257, 3259, 3, 434, 217, 0, 3258, 3260, 3, 222, 111, 0, 3259, 3258, 1, 0, 0, 0, 3259, 3260, 1, 0, 0, 0, 3260, 3262, 1, 0, 0, 0, 3261, 3263, 3, 246, 123, 0, 3262, 3261, 1, 0, 0, 0, 3262, 3263, 1, 0, 0, 0, 3263, 3265, 1, 0, 0, 0, 3264, 3266, 3, 424, 212, 0, 3265, 3264, 1, 0, 0, 0, 3265, 3266, 1, 0, 0, 0, 3266, 3268, 1, 0, 0, 0, 3267, 3269, 3, 224, 112, 0, 3268, 3267, 1, 0, 0, 0, 3268, 3269, 1, 0, 0, 0, 3269, 3271, 1, 0, 0, 0, 3270, 3272, 3, 198, 99, 0, 3271, 3270, 1, 0, 0, 0, 3271, 3272, 1, 0, 0, 0, 3272, 3311, 1, 0, 0, 0, 3273, 3274, 5, 399, 0, 0, 3274, 3275, 3, 250, 125, 0, 3275, 3276, 5, 400, 0, 0, 3276, 3278, 1, 0, 0, 0, 3277, 3273, 1, 0, 0, 0, 3277, 3278, 1, 0, 0, 0, 3278, 3280, 1, 0, 0, 0, 3279, 3281, 3, 196, 98, 0, 3280, 3279, 1, 0, 0, 0, 3280, 3281, 1, 0, 0, 0, 3281, 3283, 1, 0, 0, 0, 3282, 3284, 3, 200, 100, 0, 3283, 3282, 1, 0, 0, 0, 3283, 3284, 1, 0, 0, 0, 3284, 3286, 1, 0, 0, 0, 3285, 3287, 3, 208, 104, 0, 3286, 3285, 1, 0, 0, 0, 3286, 3287, 1, 0, 0, 0, 3287, 3289, 1, 0, 0, 0, 3288, 3290, 3, 210, 105, 0, 3289, 3288, 1, 0, 0, 0, 3289, 3290, 1, 0, 0, 0, 3290, 3292, 1, 0, 0, 0, 3291, 3293, 3, 222, 111, 0, 3292, 3291, 1, 0, 0, 0, 3292, 3293, 1, 0, 0, 0, 3293, 3295, 1, 0, 0, 0, 3294, 3296, 3, 246, 123, 0, 3295, 3294, 1, 0, 0, 0, 3295, 3296, 1, 0, 0, 0, 3296, 3298, 1, 0, 0, 0, 3297, 3299, 3, 424, 212, 0, 3298, 3297, 1, 0, 0, 0, 3298, 3299, 1, 0, 0, 0, 3299, 3301, 1, 0, 0, 0, 3300, 3302, 3, 224, 112, 0, 3301, 3300, 1, 0, 0, 0, 3301, 3302, 1, 0, 0, 0, 3302, 3304, 1, 0, 0, 0, 3303, 3305, 3, 198, 99, 0, 3304, 3303, 1, 0, 0, 0, 3304, 3305, 1, 0, 0, 0, 3305, 3308, 1, 0, 0, 0, 3306, 3307, 5, 17, 0, 0, 3307, 3309, 3, 380, 190, 0, 3308, 3306, 1, 0, 0, 0, 3308, 3309, 1, 0, 0, 0, 3309, 3311, 1, 0, 0, 0, 3310, 3257, 1, 0, 0, 0, 3310, 3277, 1, 0, 0, 0, 3311, 3313, 1, 0, 0, 0, 3312, 3177, 1, 0, 0, 0, 3312, 3250, 1, 0, 0, 0, 3313, 437, 1, 0, 0, 0, 3314, 3315, 5, 58, 0, 0, 3315, 3317, 5, 69, 0, 0, 3316, 3318, 3, 32, 16, 0, 3317, 3316, 1, 0, 0, 0, 3317, 3318, 1, 0, 0, 0, 3318, 3319, 1, 0, 0, 0, 3319, 3322, 3, 638, 319, 0, 3320, 3321, 5, 352, 0, 0, 3321, 3323, 5, 426, 0, 0, 3322, 3320, 1, 0, 0, 0, 3322, 3323, 1, 0, 0, 0, 3323, 3326, 1, 0, 0, 0, 3324, 3325, 5, 367, 0, 0, 3325, 3327, 5, 426, 0, 0, 3326, 3324, 1, 0, 0, 0, 3326, 3327, 1, 0, 0, 0, 3327, 3330, 1, 0, 0, 0, 3328, 3329, 5, 47, 0, 0, 3329, 3331, 5, 426, 0, 0, 3330, 3328, 1, 0, 0, 0, 3330, 3331, 1, 0, 0, 0, 3331, 3335, 1, 0, 0, 0, 3332, 3333, 5, 387, 0, 0, 3333, 3334, 5, 77, 0, 0, 3334, 3336, 3, 230, 115, 0, 3335, 3332, 1, 0, 0, 0, 3335, 3336, 1, 0, 0, 0, 3336, 439, 1, 0, 0, 0, 3337, 3338, 5, 101, 0, 0, 3338, 3340, 5, 69, 0, 0, 3339, 3341, 3, 30, 15, 0, 3340, 3339, 1, 0, 0, 0, 3340, 3341, 1, 0, 0, 0, 3341, 3342, 1, 0, 0, 0, 3342, 3343, 3, 638, 319, 0, 3343, 441, 1, 0, 0, 0, 3344, 3345, 3, 638, 319, 0, 3345, 3346, 5, 395, 0, 0, 3346, 3348, 1, 0, 0, 0, 3347, 3344, 1, 0, 0, 0, 3348, 3351, 1, 0, 0, 0, 3349, 3347, 1, 0, 0, 0, 3349, 3350, 1, 0, 0, 0, 3350, 3352, 1, 0, 0, 0, 3351, 3349, 1, 0, 0, 0, 3352, 3353, 5, 415, 0, 0, 3353, 443, 1, 0, 0, 0, 3354, 3359, 3, 580, 290, 0, 3355, 3356, 5, 397, 0, 0, 3356, 3358, 3, 580, 290, 0, 3357, 3355, 1, 0, 0, 0, 3358, 3361, 1, 0, 0, 0, 3359, 3357, 1, 0, 0, 0, 3359, 3360, 1, 0, 0, 0, 3360, 445, 1, 0, 0, 0, 3361, 3359, 1, 0, 0, 0, 3362, 3367, 3, 638, 319, 0, 3363, 3364, 5, 397, 0, 0, 3364, 3366, 3, 638, 319, 0, 3365, 3363, 1, 0, 0, 0, 3366, 3369, 1, 0, 0, 0, 3367, 3365, 1, 0, 0, 0, 3367, 3368, 1, 0, 0, 0, 3368, 447, 1, 0, 0, 0, 3369, 3367, 1, 0, 0, 0, 3370, 3371, 5, 139, 0, 0, 3371, 3372, 3, 450, 225, 0, 3372, 449, 1, 0, 0, 0, 3373, 3374, 5, 359, 0, 0, 3374, 3377, 3, 458, 229, 0, 3375, 3376, 5, 397, 0, 0, 3376, 3378, 3, 458, 229, 0, 3377, 3375, 1, 0, 0, 0, 3378, 3379, 1, 0, 0, 0, 3379, 3377, 1, 0, 0, 0, 3379, 3380, 1, 0, 0, 0, 3380, 3383, 1, 0, 0, 0, 3381, 3383, 3, 454, 227, 0, 3382, 3373, 1, 0, 0, 0, 3382, 3381, 1, 0, 0, 0, 3383, 451, 1, 0, 0, 0, 3384, 3388, 3, 468, 234, 0, 3385, 3387, 3, 462, 231, 0, 3386, 3385, 1, 0, 0, 0, 3387, 3390, 1, 0, 0, 0, 3388, 3386, 1, 0, 0, 0, 3388, 3389, 1, 0, 0, 0, 3389, 3417, 1, 0, 0, 0, 3390, 3388, 1, 0, 0, 0, 3391, 3395, 3, 498, 249, 0, 3392, 3394, 3, 462, 231, 0, 3393, 3392, 1, 0, 0, 0, 3394, 3397, 1, 0, 0, 0, 3395, 3393, 1, 0, 0, 0, 3395, 3396, 1, 0, 0, 0, 3396, 3417, 1, 0, 0, 0, 3397, 3395, 1, 0, 0, 0, 3398, 3402, 3, 486, 243, 0, 3399, 3401, 3, 462, 231, 0, 3400, 3399, 1, 0, 0, 0, 3401, 3404, 1, 0, 0, 0, 3402, 3400, 1, 0, 0, 0, 3402, 3403, 1, 0, 0, 0, 3403, 3417, 1, 0, 0, 0, 3404, 3402, 1, 0, 0, 0, 3405, 3409, 3, 492, 246, 0, 3406, 3408, 3, 462, 231, 0, 3407, 3406, 1, 0, 0, 0, 3408, 3411, 1, 0, 0, 0, 3409, 3407, 1, 0, 0, 0, 3409, 3410, 1, 0, 0, 0, 3410, 3417, 1, 0, 0, 0, 3411, 3409, 1, 0, 0, 0, 3412, 3413, 5, 399, 0, 0, 3413, 3414, 3, 454, 227, 0, 3414, 3415, 5, 400, 0, 0, 3415, 3417, 1, 0, 0, 0, 3416, 3384, 1, 0, 0, 0, 3416, 3391, 1, 0, 0, 0, 3416, 3398, 1, 0, 0, 0, 3416, 3405, 1, 0, 0, 0, 3416, 3412, 1, 0, 0, 0, 3417, 453, 1, 0, 0, 0, 3418, 3429, 3, 452, 226, 0, 3419, 3420, 3, 460, 230, 0, 3420, 3425, 3, 456, 228, 0, 3421, 3422, 5, 224, 0, 0, 3422, 3426, 3, 580, 290, 0, 3423, 3424, 5, 370, 0, 0, 3424, 3426, 3, 264, 132, 0, 3425, 3421, 1, 0, 0, 0, 3425, 3423, 1, 0, 0, 0, 3425, 3426, 1, 0, 0, 0, 3426, 3428, 1, 0, 0, 0, 3427, 3419, 1, 0, 0, 0, 3428, 3431, 1, 0, 0, 0, 3429, 3427, 1, 0, 0, 0, 3429, 3430, 1, 0, 0, 0, 3430, 455, 1, 0, 0, 0, 3431, 3429, 1, 0, 0, 0, 3432, 3437, 3, 468, 234, 0, 3433, 3437, 3, 498, 249, 0, 3434, 3437, 3, 486, 243, 0, 3435, 3437, 3, 492, 246, 0, 3436, 3432, 1, 0, 0, 0, 3436, 3433, 1, 0, 0, 0, 3436, 3434, 1, 0, 0, 0, 3436, 3435, 1, 0, 0, 0, 3437, 3441, 1, 0, 0, 0, 3438, 3440, 3, 462, 231, 0, 3439, 3438, 1, 0, 0, 0, 3440, 3443, 1, 0, 0, 0, 3441, 3439, 1, 0, 0, 0, 3441, 3442, 1, 0, 0, 0, 3442, 457, 1, 0, 0, 0, 3443, 3441, 1, 0, 0, 0, 3444, 3446, 5, 250, 0, 0, 3445, 3444, 1, 0, 0, 0, 3445, 3446, 1, 0, 0, 0, 3446, 3447, 1, 0, 0, 0, 3447, 3449, 3, 476, 238, 0, 3448, 3450, 3, 466, 233, 0, 3449, 3448, 1, 0, 0, 0, 3449, 3450, 1, 0, 0, 0, 3450, 3455, 1, 0, 0, 0, 3451, 3453, 5, 17, 0, 0, 3452, 3451, 1, 0, 0, 0, 3452, 3453, 1, 0, 0, 0, 3453, 3454, 1, 0, 0, 0, 3454, 3456, 3, 638, 319, 0, 3455, 3452, 1, 0, 0, 0, 3455, 3456, 1, 0, 0, 0, 3456, 3457, 1, 0, 0, 0, 3457, 3458, 5, 399, 0, 0, 3458, 3459, 3, 444, 222, 0, 3459, 3460, 5, 400, 0, 0, 3460, 459, 1, 0, 0, 0, 3461, 3476, 5, 397, 0, 0, 3462, 3473, 5, 157, 0, 0, 3463, 3473, 5, 60, 0, 0, 3464, 3466, 7, 27, 0, 0, 3465, 3467, 5, 231, 0, 0, 3466, 3465, 1, 0, 0, 0, 3466, 3467, 1, 0, 0, 0, 3467, 3473, 1, 0, 0, 0, 3468, 3470, 5, 180, 0, 0, 3469, 3471, 7, 28, 0, 0, 3470, 3469, 1, 0, 0, 0, 3470, 3471, 1, 0, 0, 0, 3471, 3473, 1, 0, 0, 0, 3472, 3462, 1, 0, 0, 0, 3472, 3463, 1, 0, 0, 0, 3472, 3464, 1, 0, 0, 0, 3472, 3468, 1, 0, 0, 0, 3472, 3473, 1, 0, 0, 0, 3473, 3474, 1, 0, 0, 0, 3474, 3476, 5, 171, 0, 0, 3475, 3461, 1, 0, 0, 0, 3475, 3472, 1, 0, 0, 0, 3476, 461, 1, 0, 0, 0, 3477, 3478, 5, 178, 0, 0, 3478, 3479, 5, 378, 0, 0, 3479, 3480, 5, 231, 0, 0, 3480, 3481, 3, 550, 275, 0, 3481, 3491, 3, 464, 232, 0, 3482, 3483, 5, 17, 0, 0, 3483, 3488, 3, 638, 319, 0, 3484, 3485, 5, 397, 0, 0, 3485, 3487, 3, 638, 319, 0, 3486, 3484, 1, 0, 0, 0, 3487, 3490, 1, 0, 0, 0, 3488, 3486, 1, 0, 0, 0, 3488, 3489, 1, 0, 0, 0, 3489, 3492, 1, 0, 0, 0, 3490, 3488, 1, 0, 0, 0, 3491, 3482, 1, 0, 0, 0, 3491, 3492, 1, 0, 0, 0, 3492, 3535, 1, 0, 0, 0, 3493, 3495, 5, 397, 0, 0, 3494, 3493, 1, 0, 0, 0, 3494, 3495, 1, 0, 0, 0, 3495, 3496, 1, 0, 0, 0, 3496, 3532, 5, 178, 0, 0, 3497, 3498, 5, 378, 0, 0, 3498, 3499, 3, 550, 275, 0, 3499, 3509, 3, 464, 232, 0, 3500, 3501, 5, 17, 0, 0, 3501, 3506, 3, 638, 319, 0, 3502, 3503, 5, 397, 0, 0, 3503, 3505, 3, 638, 319, 0, 3504, 3502, 1, 0, 0, 0, 3505, 3508, 1, 0, 0, 0, 3506, 3504, 1, 0, 0, 0, 3506, 3507, 1, 0, 0, 0, 3507, 3510, 1, 0, 0, 0, 3508, 3506, 1, 0, 0, 0, 3509, 3500, 1, 0, 0, 0, 3509, 3510, 1, 0, 0, 0, 3510, 3533, 1, 0, 0, 0, 3511, 3512, 5, 329, 0, 0, 3512, 3513, 5, 399, 0, 0, 3513, 3514, 3, 496, 248, 0, 3514, 3516, 5, 400, 0, 0, 3515, 3517, 5, 17, 0, 0, 3516, 3515, 1, 0, 0, 0, 3516, 3517, 1, 0, 0, 0, 3517, 3518, 1, 0, 0, 0, 3518, 3530, 3, 464, 232, 0, 3519, 3520, 5, 399, 0, 0, 3520, 3525, 3, 638, 319, 0, 3521, 3522, 5, 397, 0, 0, 3522, 3524, 3, 638, 319, 0, 3523, 3521, 1, 0, 0, 0, 3524, 3527, 1, 0, 0, 0, 3525, 3523, 1, 0, 0, 0, 3525, 3526, 1, 0, 0, 0, 3526, 3528, 1, 0, 0, 0, 3527, 3525, 1, 0, 0, 0, 3528, 3529, 5, 400, 0, 0, 3529, 3531, 1, 0, 0, 0, 3530, 3519, 1, 0, 0, 0, 3530, 3531, 1, 0, 0, 0, 3531, 3533, 1, 0, 0, 0, 3532, 3497, 1, 0, 0, 0, 3532, 3511, 1, 0, 0, 0, 3533, 3535, 1, 0, 0, 0, 3534, 3477, 1, 0, 0, 0, 3534, 3494, 1, 0, 0, 0, 3535, 463, 1, 0, 0, 0, 3536, 3537, 3, 638, 319, 0, 3537, 465, 1, 0, 0, 0, 3538, 3539, 5, 331, 0, 0, 3539, 3540, 5, 399, 0, 0, 3540, 3541, 5, 30, 0, 0, 3541, 3542, 5, 431, 0, 0, 3542, 3543, 5, 230, 0, 0, 3543, 3544, 5, 221, 0, 0, 3544, 3554, 5, 431, 0, 0, 3545, 3546, 5, 224, 0, 0, 3546, 3551, 3, 580, 290, 0, 3547, 3548, 5, 397, 0, 0, 3548, 3550, 3, 580, 290, 0, 3549, 3547, 1, 0, 0, 0, 3550, 3553, 1, 0, 0, 0, 3551, 3549, 1, 0, 0, 0, 3551, 3552, 1, 0, 0, 0, 3552, 3555, 1, 0, 0, 0, 3553, 3551, 1, 0, 0, 0, 3554, 3545, 1, 0, 0, 0, 3554, 3555, 1, 0, 0, 0, 3555, 3556, 1, 0, 0, 0, 3556, 3566, 5, 400, 0, 0, 3557, 3558, 5, 331, 0, 0, 3558, 3562, 5, 399, 0, 0, 3559, 3560, 5, 431, 0, 0, 3560, 3563, 7, 29, 0, 0, 3561, 3563, 5, 430, 0, 0, 3562, 3559, 1, 0, 0, 0, 3562, 3561, 1, 0, 0, 0, 3563, 3564, 1, 0, 0, 0, 3564, 3566, 5, 400, 0, 0, 3565, 3538, 1, 0, 0, 0, 3565, 3557, 1, 0, 0, 0, 3566, 467, 1, 0, 0, 0, 3567, 3569, 3, 476, 238, 0, 3568, 3570, 3, 226, 113, 0, 3569, 3568, 1, 0, 0, 0, 3569, 3570, 1, 0, 0, 0, 3570, 3572, 1, 0, 0, 0, 3571, 3573, 3, 466, 233, 0, 3572, 3571, 1, 0, 0, 0, 3572, 3573, 1, 0, 0, 0, 3573, 3575, 1, 0, 0, 0, 3574, 3576, 3, 470, 235, 0, 3575, 3574, 1, 0, 0, 0, 3575, 3576, 1, 0, 0, 0, 3576, 3581, 1, 0, 0, 0, 3577, 3579, 5, 17, 0, 0, 3578, 3577, 1, 0, 0, 0, 3578, 3579, 1, 0, 0, 0, 3579, 3580, 1, 0, 0, 0, 3580, 3582, 3, 638, 319, 0, 3581, 3578, 1, 0, 0, 0, 3581, 3582, 1, 0, 0, 0, 3582, 469, 1, 0, 0, 0, 3583, 3593, 5, 134, 0, 0, 3584, 3585, 5, 327, 0, 0, 3585, 3586, 5, 17, 0, 0, 3586, 3587, 5, 221, 0, 0, 3587, 3594, 3, 580, 290, 0, 3588, 3589, 5, 134, 0, 0, 3589, 3590, 5, 328, 0, 0, 3590, 3591, 5, 17, 0, 0, 3591, 3592, 5, 221, 0, 0, 3592, 3594, 5, 431, 0, 0, 3593, 3584, 1, 0, 0, 0, 3593, 3588, 1, 0, 0, 0, 3594, 471, 1, 0, 0, 0, 3595, 3596, 3, 638, 319, 0, 3596, 473, 1, 0, 0, 0, 3597, 3598, 3, 638, 319, 0, 3598, 475, 1, 0, 0, 0, 3599, 3602, 3, 478, 239, 0, 3600, 3602, 3, 482, 241, 0, 3601, 3599, 1, 0, 0, 0, 3601, 3600, 1, 0, 0, 0, 3602, 477, 1, 0, 0, 0, 3603, 3604, 3, 638, 319, 0, 3604, 3605, 5, 395, 0, 0, 3605, 3608, 3, 638, 319, 0, 3606, 3607, 5, 395, 0, 0, 3607, 3609, 3, 638, 319, 0, 3608, 3606, 1, 0, 0, 0, 3608, 3609, 1, 0, 0, 0, 3609, 3612, 1, 0, 0, 0, 3610, 3612, 3, 638, 319, 0, 3611, 3603, 1, 0, 0, 0, 3611, 3610, 1, 0, 0, 0, 3612, 479, 1, 0, 0, 0, 3613, 3614, 3, 638, 319, 0, 3614, 3615, 5, 395, 0, 0, 3615, 3618, 3, 638, 319, 0, 3616, 3617, 5, 395, 0, 0, 3617, 3619, 3, 638, 319, 0, 3618, 3616, 1, 0, 0, 0, 3618, 3619, 1, 0, 0, 0, 3619, 3622, 1, 0, 0, 0, 3620, 3622, 3, 638, 319, 0, 3621, 3613, 1, 0, 0, 0, 3621, 3620, 1, 0, 0, 0, 3622, 481, 1, 0, 0, 0, 3623, 3624, 3, 638, 319, 0, 3624, 3625, 5, 395, 0, 0, 3625, 3627, 1, 0, 0, 0, 3626, 3623, 1, 0, 0, 0, 3626, 3627, 1, 0, 0, 0, 3627, 3628, 1, 0, 0, 0, 3628, 3629, 3, 638, 319, 0, 3629, 483, 1, 0, 0, 0, 3630, 3631, 3, 638, 319, 0, 3631, 3632, 5, 395, 0, 0, 3632, 3634, 1, 0, 0, 0, 3633, 3630, 1, 0, 0, 0, 3633, 3634, 1, 0, 0, 0, 3634, 3635, 1, 0, 0, 0, 3635, 3636, 3, 638, 319, 0, 3636, 485, 1, 0, 0, 0, 3637, 3638, 5, 399, 0, 0, 3638, 3639, 3, 360, 180, 0, 3639, 3641, 5, 400, 0, 0, 3640, 3642, 5, 17, 0, 0, 3641, 3640, 1, 0, 0, 0, 3641, 3642, 1, 0, 0, 0, 3642, 3643, 1, 0, 0, 0, 3643, 3644, 3, 638, 319, 0, 3644, 487, 1, 0, 0, 0, 3645, 3646, 5, 237, 0, 0, 3646, 3647, 5, 32, 0, 0, 3647, 3649, 3, 536, 268, 0, 3648, 3650, 3, 542, 271, 0, 3649, 3648, 1, 0, 0, 0, 3649, 3650, 1, 0, 0, 0, 3650, 3659, 1, 0, 0, 0, 3651, 3659, 3, 542, 271, 0, 3652, 3654, 3, 546, 273, 0, 3653, 3655, 3, 548, 274, 0, 3654, 3653, 1, 0, 0, 0, 3654, 3655, 1, 0, 0, 0, 3655, 3659, 1, 0, 0, 0, 3656, 3659, 3, 548, 274, 0, 3657, 3659, 3, 544, 272, 0, 3658, 3645, 1, 0, 0, 0, 3658, 3651, 1, 0, 0, 0, 3658, 3652, 1, 0, 0, 0, 3658, 3656, 1, 0, 0, 0, 3658, 3657, 1, 0, 0, 0, 3659, 489, 1, 0, 0, 0, 3660, 3664, 3, 486, 243, 0, 3661, 3664, 3, 468, 234, 0, 3662, 3664, 3, 492, 246, 0, 3663, 3660, 1, 0, 0, 0, 3663, 3661, 1, 0, 0, 0, 3663, 3662, 1, 0, 0, 0, 3664, 491, 1, 0, 0, 0, 3665, 3666, 3, 638, 319, 0, 3666, 3667, 5, 399, 0, 0, 3667, 3668, 5, 224, 0, 0, 3668, 3670, 3, 490, 245, 0, 3669, 3671, 3, 488, 244, 0, 3670, 3669, 1, 0, 0, 0, 3670, 3671, 1, 0, 0, 0, 3671, 3687, 1, 0, 0, 0, 3672, 3673, 5, 432, 0, 0, 3673, 3674, 5, 399, 0, 0, 3674, 3675, 3, 580, 290, 0, 3675, 3684, 5, 400, 0, 0, 3676, 3677, 5, 397, 0, 0, 3677, 3678, 5, 432, 0, 0, 3678, 3679, 5, 399, 0, 0, 3679, 3680, 3, 580, 290, 0, 3680, 3681, 5, 400, 0, 0, 3681, 3683, 1, 0, 0, 0, 3682, 3676, 1, 0, 0, 0, 3683, 3686, 1, 0, 0, 0, 3684, 3682, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 3688, 1, 0, 0, 0, 3686, 3684, 1, 0, 0, 0, 3687, 3672, 1, 0, 0, 0, 3687, 3688, 1, 0, 0, 0, 3688, 3689, 1, 0, 0, 0, 3689, 3691, 5, 400, 0, 0, 3690, 3692, 3, 638, 319, 0, 3691, 3690, 1, 0, 0, 0, 3691, 3692, 1, 0, 0, 0, 3692, 493, 1, 0, 0, 0, 3693, 3694, 5, 384, 0, 0, 3694, 3695, 3, 580, 290, 0, 3695, 495, 1, 0, 0, 0, 3696, 3715, 5, 374, 0, 0, 3697, 3702, 3, 538, 269, 0, 3698, 3699, 5, 397, 0, 0, 3699, 3701, 3, 538, 269, 0, 3700, 3698, 1, 0, 0, 0, 3701, 3704, 1, 0, 0, 0, 3702, 3700, 1, 0, 0, 0, 3702, 3703, 1, 0, 0, 0, 3703, 3716, 1, 0, 0, 0, 3704, 3702, 1, 0, 0, 0, 3705, 3706, 5, 399, 0, 0, 3706, 3707, 3, 534, 267, 0, 3707, 3712, 5, 400, 0, 0, 3708, 3709, 5, 397, 0, 0, 3709, 3711, 3, 538, 269, 0, 3710, 3708, 1, 0, 0, 0, 3711, 3714, 1, 0, 0, 0, 3712, 3710, 1, 0, 0, 0, 3712, 3713, 1, 0, 0, 0, 3713, 3716, 1, 0, 0, 0, 3714, 3712, 1, 0, 0, 0, 3715, 3697, 1, 0, 0, 0, 3715, 3705, 1, 0, 0, 0, 3716, 497, 1, 0, 0, 0, 3717, 3718, 5, 329, 0, 0, 3718, 3719, 5, 399, 0, 0, 3719, 3720, 3, 496, 248, 0, 3720, 3722, 5, 400, 0, 0, 3721, 3723, 5, 17, 0, 0, 3722, 3721, 1, 0, 0, 0, 3722, 3723, 1, 0, 0, 0, 3723, 3724, 1, 0, 0, 0, 3724, 3734, 3, 464, 232, 0, 3725, 3726, 5, 399, 0, 0, 3726, 3731, 3, 638, 319, 0, 3727, 3728, 5, 397, 0, 0, 3728, 3730, 3, 638, 319, 0, 3729, 3727, 1, 0, 0, 0, 3730, 3733, 1, 0, 0, 0, 3731, 3729, 1, 0, 0, 0, 3731, 3732, 1, 0, 0, 0, 3732, 3735, 1, 0, 0, 0, 3733, 3731, 1, 0, 0, 0, 3734, 3725, 1, 0, 0, 0, 3734, 3735, 1, 0, 0, 0, 3735, 3736, 1, 0, 0, 0, 3736, 3737, 5, 400, 0, 0, 3737, 499, 1, 0, 0, 0, 3738, 3740, 5, 299, 0, 0, 3739, 3741, 5, 436, 0, 0, 3740, 3739, 1, 0, 0, 0, 3740, 3741, 1, 0, 0, 0, 3741, 3755, 1, 0, 0, 0, 3742, 3744, 7, 21, 0, 0, 3743, 3742, 1, 0, 0, 0, 3743, 3744, 1, 0, 0, 0, 3744, 3745, 1, 0, 0, 0, 3745, 3750, 3, 504, 252, 0, 3746, 3747, 5, 397, 0, 0, 3747, 3749, 3, 504, 252, 0, 3748, 3746, 1, 0, 0, 0, 3749, 3752, 1, 0, 0, 0, 3750, 3748, 1, 0, 0, 0, 3750, 3751, 1, 0, 0, 0, 3751, 3756, 1, 0, 0, 0, 3752, 3750, 1, 0, 0, 0, 3753, 3754, 5, 347, 0, 0, 3754, 3756, 3, 502, 251, 0, 3755, 3743, 1, 0, 0, 0, 3755, 3753, 1, 0, 0, 0, 3756, 3759, 1, 0, 0, 0, 3757, 3759, 3, 506, 253, 0, 3758, 3738, 1, 0, 0, 0, 3758, 3757, 1, 0, 0, 0, 3759, 501, 1, 0, 0, 0, 3760, 3761, 5, 399, 0, 0, 3761, 3762, 3, 510, 255, 0, 3762, 3763, 5, 400, 0, 0, 3763, 3764, 3, 212, 106, 0, 3764, 3765, 3, 216, 108, 0, 3765, 3766, 5, 370, 0, 0, 3766, 3779, 5, 426, 0, 0, 3767, 3777, 5, 17, 0, 0, 3768, 3771, 5, 399, 0, 0, 3769, 3772, 3, 446, 223, 0, 3770, 3772, 3, 248, 124, 0, 3771, 3769, 1, 0, 0, 0, 3771, 3770, 1, 0, 0, 0, 3772, 3773, 1, 0, 0, 0, 3773, 3774, 5, 400, 0, 0, 3774, 3778, 1, 0, 0, 0, 3775, 3778, 3, 446, 223, 0, 3776, 3778, 3, 248, 124, 0, 3777, 3768, 1, 0, 0, 0, 3777, 3775, 1, 0, 0, 0, 3777, 3776, 1, 0, 0, 0, 3778, 3780, 1, 0, 0, 0, 3779, 3767, 1, 0, 0, 0, 3779, 3780, 1, 0, 0, 0, 3780, 3781, 1, 0, 0, 0, 3781, 3782, 3, 212, 106, 0, 3782, 3783, 3, 214, 107, 0, 3783, 503, 1, 0, 0, 0, 3784, 3808, 3, 442, 221, 0, 3785, 3788, 3, 256, 128, 0, 3786, 3788, 3, 580, 290, 0, 3787, 3785, 1, 0, 0, 0, 3787, 3786, 1, 0, 0, 0, 3788, 3805, 1, 0, 0, 0, 3789, 3791, 5, 17, 0, 0, 3790, 3789, 1, 0, 0, 0, 3790, 3791, 1, 0, 0, 0, 3791, 3792, 1, 0, 0, 0, 3792, 3806, 3, 638, 319, 0, 3793, 3794, 5, 17, 0, 0, 3794, 3795, 5, 399, 0, 0, 3795, 3800, 3, 638, 319, 0, 3796, 3797, 5, 397, 0, 0, 3797, 3799, 3, 638, 319, 0, 3798, 3796, 1, 0, 0, 0, 3799, 3802, 1, 0, 0, 0, 3800, 3798, 1, 0, 0, 0, 3800, 3801, 1, 0, 0, 0, 3801, 3803, 1, 0, 0, 0, 3802, 3800, 1, 0, 0, 0, 3803, 3804, 5, 400, 0, 0, 3804, 3806, 1, 0, 0, 0, 3805, 3790, 1, 0, 0, 0, 3805, 3793, 1, 0, 0, 0, 3805, 3806, 1, 0, 0, 0, 3806, 3808, 1, 0, 0, 0, 3807, 3784, 1, 0, 0, 0, 3807, 3787, 1, 0, 0, 0, 3808, 505, 1, 0, 0, 0, 3809, 3810, 7, 30, 0, 0, 3810, 3811, 3, 510, 255, 0, 3811, 3812, 3, 212, 106, 0, 3812, 3813, 3, 216, 108, 0, 3813, 3814, 5, 370, 0, 0, 3814, 3827, 5, 426, 0, 0, 3815, 3825, 5, 17, 0, 0, 3816, 3819, 5, 399, 0, 0, 3817, 3820, 3, 446, 223, 0, 3818, 3820, 3, 248, 124, 0, 3819, 3817, 1, 0, 0, 0, 3819, 3818, 1, 0, 0, 0, 3820, 3821, 1, 0, 0, 0, 3821, 3822, 5, 400, 0, 0, 3822, 3826, 1, 0, 0, 0, 3823, 3826, 3, 446, 223, 0, 3824, 3826, 3, 248, 124, 0, 3825, 3816, 1, 0, 0, 0, 3825, 3823, 1, 0, 0, 0, 3825, 3824, 1, 0, 0, 0, 3826, 3828, 1, 0, 0, 0, 3827, 3815, 1, 0, 0, 0, 3827, 3828, 1, 0, 0, 0, 3828, 3829, 1, 0, 0, 0, 3829, 3830, 3, 212, 106, 0, 3830, 3831, 3, 214, 107, 0, 3831, 507, 1, 0, 0, 0, 3832, 3835, 3, 442, 221, 0, 3833, 3835, 3, 580, 290, 0, 3834, 3832, 1, 0, 0, 0, 3834, 3833, 1, 0, 0, 0, 3835, 509, 1, 0, 0, 0, 3836, 3841, 3, 508, 254, 0, 3837, 3838, 5, 397, 0, 0, 3838, 3840, 3, 508, 254, 0, 3839, 3837, 1, 0, 0, 0, 3840, 3843, 1, 0, 0, 0, 3841, 3839, 1, 0, 0, 0, 3841, 3842, 1, 0, 0, 0, 3842, 511, 1, 0, 0, 0, 3843, 3841, 1, 0, 0, 0, 3844, 3845, 5, 386, 0, 0, 3845, 3846, 3, 638, 319, 0, 3846, 3847, 5, 17, 0, 0, 3847, 3855, 3, 514, 257, 0, 3848, 3849, 5, 397, 0, 0, 3849, 3850, 3, 638, 319, 0, 3850, 3851, 5, 17, 0, 0, 3851, 3852, 3, 514, 257, 0, 3852, 3854, 1, 0, 0, 0, 3853, 3848, 1, 0, 0, 0, 3854, 3857, 1, 0, 0, 0, 3855, 3853, 1, 0, 0, 0, 3855, 3856, 1, 0, 0, 0, 3856, 513, 1, 0, 0, 0, 3857, 3855, 1, 0, 0, 0, 3858, 3871, 3, 638, 319, 0, 3859, 3861, 5, 399, 0, 0, 3860, 3862, 3, 638, 319, 0, 3861, 3860, 1, 0, 0, 0, 3861, 3862, 1, 0, 0, 0, 3862, 3864, 1, 0, 0, 0, 3863, 3865, 3, 488, 244, 0, 3864, 3863, 1, 0, 0, 0, 3864, 3865, 1, 0, 0, 0, 3865, 3867, 1, 0, 0, 0, 3866, 3868, 3, 516, 258, 0, 3867, 3866, 1, 0, 0, 0, 3867, 3868, 1, 0, 0, 0, 3868, 3869, 1, 0, 0, 0, 3869, 3871, 5, 400, 0, 0, 3870, 3858, 1, 0, 0, 0, 3870, 3859, 1, 0, 0, 0, 3871, 515, 1, 0, 0, 0, 3872, 3886, 7, 31, 0, 0, 3873, 3874, 5, 354, 0, 0, 3874, 3880, 5, 247, 0, 0, 3875, 3876, 5, 62, 0, 0, 3876, 3880, 5, 291, 0, 0, 3877, 3878, 5, 431, 0, 0, 3878, 3880, 5, 247, 0, 0, 3879, 3873, 1, 0, 0, 0, 3879, 3875, 1, 0, 0, 0, 3879, 3877, 1, 0, 0, 0, 3880, 3887, 1, 0, 0, 0, 3881, 3882, 5, 25, 0, 0, 3882, 3883, 3, 518, 259, 0, 3883, 3884, 5, 11, 0, 0, 3884, 3885, 3, 518, 259, 0, 3885, 3887, 1, 0, 0, 0, 3886, 3879, 1, 0, 0, 0, 3886, 3881, 1, 0, 0, 0, 3887, 517, 1, 0, 0, 0, 3888, 3889, 7, 32, 0, 0, 3889, 3893, 7, 33, 0, 0, 3890, 3891, 5, 62, 0, 0, 3891, 3893, 5, 291, 0, 0, 3892, 3888, 1, 0, 0, 0, 3892, 3890, 1, 0, 0, 0, 3893, 519, 1, 0, 0, 0, 3894, 3895, 5, 144, 0, 0, 3895, 3901, 5, 32, 0, 0, 3896, 3902, 3, 256, 128, 0, 3897, 3902, 3, 522, 261, 0, 3898, 3902, 3, 524, 262, 0, 3899, 3900, 5, 399, 0, 0, 3900, 3902, 5, 400, 0, 0, 3901, 3896, 1, 0, 0, 0, 3901, 3897, 1, 0, 0, 0, 3901, 3898, 1, 0, 0, 0, 3901, 3899, 1, 0, 0, 0, 3902, 521, 1, 0, 0, 0, 3903, 3906, 5, 290, 0, 0, 3904, 3906, 5, 61, 0, 0, 3905, 3903, 1, 0, 0, 0, 3905, 3904, 1, 0, 0, 0, 3906, 3907, 1, 0, 0, 0, 3907, 3908, 5, 399, 0, 0, 3908, 3913, 3, 580, 290, 0, 3909, 3910, 5, 397, 0, 0, 3910, 3912, 3, 580, 290, 0, 3911, 3909, 1, 0, 0, 0, 3912, 3915, 1, 0, 0, 0, 3913, 3911, 1, 0, 0, 0, 3913, 3914, 1, 0, 0, 0, 3914, 3916, 1, 0, 0, 0, 3915, 3913, 1, 0, 0, 0, 3916, 3917, 5, 400, 0, 0, 3917, 523, 1, 0, 0, 0, 3918, 3923, 3, 540, 270, 0, 3919, 3920, 5, 387, 0, 0, 3920, 3924, 5, 290, 0, 0, 3921, 3922, 5, 387, 0, 0, 3922, 3924, 5, 61, 0, 0, 3923, 3919, 1, 0, 0, 0, 3923, 3921, 1, 0, 0, 0, 3923, 3924, 1, 0, 0, 0, 3924, 3938, 1, 0, 0, 0, 3925, 3926, 5, 145, 0, 0, 3926, 3927, 5, 305, 0, 0, 3927, 3928, 5, 399, 0, 0, 3928, 3933, 3, 526, 263, 0, 3929, 3930, 5, 397, 0, 0, 3930, 3932, 3, 526, 263, 0, 3931, 3929, 1, 0, 0, 0, 3932, 3935, 1, 0, 0, 0, 3933, 3931, 1, 0, 0, 0, 3933, 3934, 1, 0, 0, 0, 3934, 3936, 1, 0, 0, 0, 3935, 3933, 1, 0, 0, 0, 3936, 3937, 5, 400, 0, 0, 3937, 3939, 1, 0, 0, 0, 3938, 3925, 1, 0, 0, 0, 3938, 3939, 1, 0, 0, 0, 3939, 525, 1, 0, 0, 0, 3940, 3942, 5, 399, 0, 0, 3941, 3943, 3, 580, 290, 0, 3942, 3941, 1, 0, 0, 0, 3942, 3943, 1, 0, 0, 0, 3943, 3948, 1, 0, 0, 0, 3944, 3945, 5, 397, 0, 0, 3945, 3947, 3, 580, 290, 0, 3946, 3944, 1, 0, 0, 0, 3947, 3950, 1, 0, 0, 0, 3948, 3946, 1, 0, 0, 0, 3948, 3949, 1, 0, 0, 0, 3949, 3951, 1, 0, 0, 0, 3950, 3948, 1, 0, 0, 0, 3951, 3954, 5, 400, 0, 0, 3952, 3954, 3, 580, 290, 0, 3953, 3940, 1, 0, 0, 0, 3953, 3952, 1, 0, 0, 0, 3954, 527, 1, 0, 0, 0, 3955, 3956, 5, 146, 0, 0, 3956, 3957, 3, 580, 290, 0, 3957, 529, 1, 0, 0, 0, 3958, 3959, 5, 256, 0, 0, 3959, 3960, 3, 580, 290, 0, 3960, 531, 1, 0, 0, 0, 3961, 3964, 5, 83, 0, 0, 3962, 3964, 3, 580, 290, 0, 3963, 3961, 1, 0, 0, 0, 3963, 3962, 1, 0, 0, 0, 3964, 533, 1, 0, 0, 0, 3965, 3967, 3, 580, 290, 0, 3966, 3968, 5, 17, 0, 0, 3967, 3966, 1, 0, 0, 0, 3967, 3968, 1, 0, 0, 0, 3968, 3970, 1, 0, 0, 0, 3969, 3971, 3, 638, 319, 0, 3970, 3969, 1, 0, 0, 0, 3970, 3971, 1, 0, 0, 0, 3971, 3982, 1, 0, 0, 0, 3972, 3973, 5, 397, 0, 0, 3973, 3975, 3, 580, 290, 0, 3974, 3976, 5, 17, 0, 0, 3975, 3974, 1, 0, 0, 0, 3975, 3976, 1, 0, 0, 0, 3976, 3978, 1, 0, 0, 0, 3977, 3979, 3, 638, 319, 0, 3978, 3977, 1, 0, 0, 0, 3978, 3979, 1, 0, 0, 0, 3979, 3981, 1, 0, 0, 0, 3980, 3972, 1, 0, 0, 0, 3981, 3984, 1, 0, 0, 0, 3982, 3980, 1, 0, 0, 0, 3982, 3983, 1, 0, 0, 0, 3983, 535, 1, 0, 0, 0, 3984, 3982, 1, 0, 0, 0, 3985, 3988, 3, 538, 269, 0, 3986, 3988, 3, 540, 270, 0, 3987, 3985, 1, 0, 0, 0, 3987, 3986, 1, 0, 0, 0, 3988, 537, 1, 0, 0, 0, 3989, 3990, 5, 399, 0, 0, 3990, 3991, 3, 540, 270, 0, 3991, 3992, 5, 400, 0, 0, 3992, 539, 1, 0, 0, 0, 3993, 4000, 3, 532, 266, 0, 3994, 3995, 5, 397, 0, 0, 3995, 3997, 3, 532, 266, 0, 3996, 3994, 1, 0, 0, 0, 3997, 3998, 1, 0, 0, 0, 3998, 3996, 1, 0, 0, 0, 3998, 3999, 1, 0, 0, 0, 3999, 4001, 1, 0, 0, 0, 4000, 3996, 1, 0, 0, 0, 4000, 4001, 1, 0, 0, 0, 4001, 541, 1, 0, 0, 0, 4002, 4003, 5, 229, 0, 0, 4003, 4004, 5, 32, 0, 0, 4004, 4009, 3, 308, 154, 0, 4005, 4006, 5, 397, 0, 0, 4006, 4008, 3, 308, 154, 0, 4007, 4005, 1, 0, 0, 0, 4008, 4011, 1, 0, 0, 0, 4009, 4007, 1, 0, 0, 0, 4009, 4010, 1, 0, 0, 0, 4010, 543, 1, 0, 0, 0, 4011, 4009, 1, 0, 0, 0, 4012, 4013, 5, 41, 0, 0, 4013, 4014, 5, 32, 0, 0, 4014, 4015, 3, 536, 268, 0, 4015, 545, 1, 0, 0, 0, 4016, 4017, 5, 97, 0, 0, 4017, 4018, 5, 32, 0, 0, 4018, 4019, 3, 536, 268, 0, 4019, 547, 1, 0, 0, 0, 4020, 4021, 5, 314, 0, 0, 4021, 4041, 5, 32, 0, 0, 4022, 4023, 5, 399, 0, 0, 4023, 4028, 3, 308, 154, 0, 4024, 4025, 5, 397, 0, 0, 4025, 4027, 3, 308, 154, 0, 4026, 4024, 1, 0, 0, 0, 4027, 4030, 1, 0, 0, 0, 4028, 4026, 1, 0, 0, 0, 4028, 4029, 1, 0, 0, 0, 4029, 4031, 1, 0, 0, 0, 4030, 4028, 1, 0, 0, 0, 4031, 4032, 5, 400, 0, 0, 4032, 4042, 1, 0, 0, 0, 4033, 4038, 3, 308, 154, 0, 4034, 4035, 5, 397, 0, 0, 4035, 4037, 3, 308, 154, 0, 4036, 4034, 1, 0, 0, 0, 4037, 4040, 1, 0, 0, 0, 4038, 4036, 1, 0, 0, 0, 4038, 4039, 1, 0, 0, 0, 4039, 4042, 1, 0, 0, 0, 4040, 4038, 1, 0, 0, 0, 4041, 4022, 1, 0, 0, 0, 4041, 4033, 1, 0, 0, 0, 4042, 549, 1, 0, 0, 0, 4043, 4044, 5, 349, 0, 0, 4044, 4048, 5, 399, 0, 0, 4045, 4049, 5, 179, 0, 0, 4046, 4049, 5, 343, 0, 0, 4047, 4049, 5, 29, 0, 0, 4048, 4045, 1, 0, 0, 0, 4048, 4046, 1, 0, 0, 0, 4048, 4047, 1, 0, 0, 0, 4048, 4049, 1, 0, 0, 0, 4049, 4051, 1, 0, 0, 0, 4050, 4052, 3, 508, 254, 0, 4051, 4050, 1, 0, 0, 0, 4051, 4052, 1, 0, 0, 0, 4052, 4053, 1, 0, 0, 0, 4053, 4054, 5, 139, 0, 0, 4054, 4055, 3, 508, 254, 0, 4055, 4056, 5, 400, 0, 0, 4056, 4097, 1, 0, 0, 0, 4057, 4058, 3, 558, 279, 0, 4058, 4073, 5, 399, 0, 0, 4059, 4074, 5, 415, 0, 0, 4060, 4062, 7, 21, 0, 0, 4061, 4060, 1, 0, 0, 0, 4061, 4062, 1, 0, 0, 0, 4062, 4071, 1, 0, 0, 0, 4063, 4068, 3, 508, 254, 0, 4064, 4065, 5, 397, 0, 0, 4065, 4067, 3, 508, 254, 0, 4066, 4064, 1, 0, 0, 0, 4067, 4070, 1, 0, 0, 0, 4068, 4066, 1, 0, 0, 0, 4068, 4069, 1, 0, 0, 0, 4069, 4072, 1, 0, 0, 0, 4070, 4068, 1, 0, 0, 0, 4071, 4063, 1, 0, 0, 0, 4071, 4072, 1, 0, 0, 0, 4072, 4074, 1, 0, 0, 0, 4073, 4059, 1, 0, 0, 0, 4073, 4061, 1, 0, 0, 0, 4074, 4094, 1, 0, 0, 0, 4075, 4076, 5, 400, 0, 0, 4076, 4077, 5, 388, 0, 0, 4077, 4078, 5, 144, 0, 0, 4078, 4079, 5, 399, 0, 0, 4079, 4080, 3, 542, 271, 0, 4080, 4081, 5, 400, 0, 0, 4081, 4095, 1, 0, 0, 0, 4082, 4084, 5, 400, 0, 0, 4083, 4085, 3, 552, 276, 0, 4084, 4083, 1, 0, 0, 0, 4084, 4085, 1, 0, 0, 0, 4085, 4086, 1, 0, 0, 0, 4086, 4087, 5, 234, 0, 0, 4087, 4095, 3, 514, 257, 0, 4088, 4089, 3, 552, 276, 0, 4089, 4090, 5, 400, 0, 0, 4090, 4091, 5, 234, 0, 0, 4091, 4092, 3, 514, 257, 0, 4092, 4095, 1, 0, 0, 0, 4093, 4095, 5, 400, 0, 0, 4094, 4075, 1, 0, 0, 0, 4094, 4082, 1, 0, 0, 0, 4094, 4088, 1, 0, 0, 0, 4094, 4093, 1, 0, 0, 0, 4095, 4097, 1, 0, 0, 0, 4096, 4043, 1, 0, 0, 0, 4096, 4057, 1, 0, 0, 0, 4097, 551, 1, 0, 0, 0, 4098, 4099, 7, 34, 0, 0, 4099, 4100, 5, 220, 0, 0, 4100, 553, 1, 0, 0, 0, 4101, 4102, 3, 640, 320, 0, 4102, 555, 1, 0, 0, 0, 4103, 4106, 3, 640, 320, 0, 4104, 4106, 5, 426, 0, 0, 4105, 4103, 1, 0, 0, 0, 4105, 4104, 1, 0, 0, 0, 4106, 557, 1, 0, 0, 0, 4107, 4111, 3, 640, 320, 0, 4108, 4111, 3, 646, 323, 0, 4109, 4111, 3, 636, 318, 0, 4110, 4107, 1, 0, 0, 0, 4110, 4108, 1, 0, 0, 0, 4110, 4109, 1, 0, 0, 0, 4111, 559, 1, 0, 0, 0, 4112, 4113, 5, 36, 0, 0, 4113, 4114, 5, 399, 0, 0, 4114, 4115, 3, 580, 290, 0, 4115, 4116, 5, 17, 0, 0, 4116, 4119, 3, 348, 174, 0, 4117, 4118, 5, 137, 0, 0, 4118, 4120, 5, 426, 0, 0, 4119, 4117, 1, 0, 0, 0, 4119, 4120, 1, 0, 0, 0, 4120, 4121, 1, 0, 0, 0, 4121, 4122, 5, 400, 0, 0, 4122, 561, 1, 0, 0, 0, 4123, 4124, 5, 35, 0, 0, 4124, 4130, 3, 580, 290, 0, 4125, 4126, 5, 383, 0, 0, 4126, 4127, 3, 580, 290, 0, 4127, 4128, 5, 335, 0, 0, 4128, 4129, 3, 580, 290, 0, 4129, 4131, 1, 0, 0, 0, 4130, 4125, 1, 0, 0, 0, 4131, 4132, 1, 0, 0, 0, 4132, 4130, 1, 0, 0, 0, 4132, 4133, 1, 0, 0, 0, 4133, 4136, 1, 0, 0, 0, 4134, 4135, 5, 105, 0, 0, 4135, 4137, 3, 580, 290, 0, 4136, 4134, 1, 0, 0, 0, 4136, 4137, 1, 0, 0, 0, 4137, 4138, 1, 0, 0, 0, 4138, 4139, 5, 108, 0, 0, 4139, 563, 1, 0, 0, 0, 4140, 4146, 5, 35, 0, 0, 4141, 4142, 5, 383, 0, 0, 4142, 4143, 3, 580, 290, 0, 4143, 4144, 5, 335, 0, 0, 4144, 4145, 3, 580, 290, 0, 4145, 4147, 1, 0, 0, 0, 4146, 4141, 1, 0, 0, 0, 4147, 4148, 1, 0, 0, 0, 4148, 4146, 1, 0, 0, 0, 4148, 4149, 1, 0, 0, 0, 4149, 4152, 1, 0, 0, 0, 4150, 4151, 5, 105, 0, 0, 4151, 4153, 3, 580, 290, 0, 4152, 4150, 1, 0, 0, 0, 4152, 4153, 1, 0, 0, 0, 4153, 4154, 1, 0, 0, 0, 4154, 4155, 5, 108, 0, 0, 4155, 565, 1, 0, 0, 0, 4156, 4157, 5, 132, 0, 0, 4157, 4158, 5, 399, 0, 0, 4158, 4161, 3, 580, 290, 0, 4159, 4160, 5, 341, 0, 0, 4160, 4162, 3, 570, 285, 0, 4161, 4159, 1, 0, 0, 0, 4161, 4162, 1, 0, 0, 0, 4162, 4163, 1, 0, 0, 0, 4163, 4164, 5, 400, 0, 0, 4164, 567, 1, 0, 0, 0, 4165, 4166, 5, 124, 0, 0, 4166, 4167, 5, 399, 0, 0, 4167, 4168, 3, 570, 285, 0, 4168, 4169, 5, 139, 0, 0, 4169, 4170, 3, 580, 290, 0, 4170, 4171, 5, 400, 0, 0, 4171, 569, 1, 0, 0, 0, 4172, 4181, 3, 666, 333, 0, 4173, 4181, 5, 257, 0, 0, 4174, 4181, 3, 668, 334, 0, 4175, 4181, 3, 670, 335, 0, 4176, 4181, 3, 672, 336, 0, 4177, 4181, 3, 674, 337, 0, 4178, 4181, 3, 676, 338, 0, 4179, 4181, 3, 678, 339, 0, 4180, 4172, 1, 0, 0, 0, 4180, 4173, 1, 0, 0, 0, 4180, 4174, 1, 0, 0, 0, 4180, 4175, 1, 0, 0, 0, 4180, 4176, 1, 0, 0, 0, 4180, 4177, 1, 0, 0, 0, 4180, 4178, 1, 0, 0, 0, 4180, 4179, 1, 0, 0, 0, 4181, 571, 1, 0, 0, 0, 4182, 4183, 3, 574, 287, 0, 4183, 4184, 3, 578, 289, 0, 4184, 4211, 1, 0, 0, 0, 4185, 4211, 5, 431, 0, 0, 4186, 4187, 5, 71, 0, 0, 4187, 4211, 5, 426, 0, 0, 4188, 4211, 5, 63, 0, 0, 4189, 4190, 5, 337, 0, 0, 4190, 4211, 5, 426, 0, 0, 4191, 4211, 5, 64, 0, 0, 4192, 4193, 5, 338, 0, 0, 4193, 4211, 5, 426, 0, 0, 4194, 4198, 5, 426, 0, 0, 4195, 4197, 5, 426, 0, 0, 4196, 4195, 1, 0, 0, 0, 4197, 4200, 1, 0, 0, 0, 4198, 4196, 1, 0, 0, 0, 4198, 4199, 1, 0, 0, 0, 4199, 4211, 1, 0, 0, 0, 4200, 4198, 1, 0, 0, 0, 4201, 4211, 5, 428, 0, 0, 4202, 4211, 5, 429, 0, 0, 4203, 4204, 5, 433, 0, 0, 4204, 4211, 5, 427, 0, 0, 4205, 4211, 5, 350, 0, 0, 4206, 4211, 5, 125, 0, 0, 4207, 4211, 5, 219, 0, 0, 4208, 4211, 5, 424, 0, 0, 4209, 4211, 5, 432, 0, 0, 4210, 4182, 1, 0, 0, 0, 4210, 4185, 1, 0, 0, 0, 4210, 4186, 1, 0, 0, 0, 4210, 4188, 1, 0, 0, 0, 4210, 4189, 1, 0, 0, 0, 4210, 4191, 1, 0, 0, 0, 4210, 4192, 1, 0, 0, 0, 4210, 4194, 1, 0, 0, 0, 4210, 4201, 1, 0, 0, 0, 4210, 4202, 1, 0, 0, 0, 4210, 4203, 1, 0, 0, 0, 4210, 4205, 1, 0, 0, 0, 4210, 4206, 1, 0, 0, 0, 4210, 4207, 1, 0, 0, 0, 4210, 4208, 1, 0, 0, 0, 4210, 4209, 1, 0, 0, 0, 4211, 573, 1, 0, 0, 0, 4212, 4213, 7, 26, 0, 0, 4213, 575, 1, 0, 0, 0, 4214, 4215, 5, 399, 0, 0, 4215, 4216, 3, 574, 287, 0, 4216, 4217, 5, 400, 0, 0, 4217, 4218, 3, 578, 289, 0, 4218, 4230, 1, 0, 0, 0, 4219, 4225, 5, 165, 0, 0, 4220, 4226, 3, 574, 287, 0, 4221, 4222, 5, 399, 0, 0, 4222, 4223, 3, 580, 290, 0, 4223, 4224, 5, 400, 0, 0, 4224, 4226, 1, 0, 0, 0, 4225, 4220, 1, 0, 0, 0, 4225, 4221, 1, 0, 0, 0, 4226, 4227, 1, 0, 0, 0, 4227, 4228, 3, 578, 289, 0, 4228, 4230, 1, 0, 0, 0, 4229, 4214, 1, 0, 0, 0, 4229, 4219, 1, 0, 0, 0, 4230, 577, 1, 0, 0, 0, 4231, 4232, 3, 666, 333, 0, 4232, 4233, 5, 341, 0, 0, 4233, 4234, 3, 668, 334, 0, 4234, 4246, 1, 0, 0, 0, 4235, 4236, 3, 672, 336, 0, 4236, 4237, 5, 341, 0, 0, 4237, 4238, 3, 678, 339, 0, 4238, 4246, 1, 0, 0, 0, 4239, 4246, 3, 666, 333, 0, 4240, 4246, 3, 668, 334, 0, 4241, 4246, 3, 672, 336, 0, 4242, 4246, 3, 674, 337, 0, 4243, 4246, 3, 676, 338, 0, 4244, 4246, 3, 678, 339, 0, 4245, 4231, 1, 0, 0, 0, 4245, 4235, 1, 0, 0, 0, 4245, 4239, 1, 0, 0, 0, 4245, 4240, 1, 0, 0, 0, 4245, 4241, 1, 0, 0, 0, 4245, 4242, 1, 0, 0, 0, 4245, 4243, 1, 0, 0, 0, 4245, 4244, 1, 0, 0, 0, 4246, 579, 1, 0, 0, 0, 4247, 4252, 3, 622, 311, 0, 4248, 4249, 5, 228, 0, 0, 4249, 4251, 3, 622, 311, 0, 4250, 4248, 1, 0, 0, 0, 4251, 4254, 1, 0, 0, 0, 4252, 4250, 1, 0, 0, 0, 4252, 4253, 1, 0, 0, 0, 4253, 581, 1, 0, 0, 0, 4254, 4252, 1, 0, 0, 0, 4255, 4267, 3, 572, 286, 0, 4256, 4267, 3, 576, 288, 0, 4257, 4267, 3, 560, 280, 0, 4258, 4267, 3, 568, 284, 0, 4259, 4267, 3, 566, 283, 0, 4260, 4267, 3, 562, 281, 0, 4261, 4267, 3, 564, 282, 0, 4262, 4267, 3, 600, 300, 0, 4263, 4267, 3, 550, 275, 0, 4264, 4267, 3, 538, 269, 0, 4265, 4267, 3, 638, 319, 0, 4266, 4255, 1, 0, 0, 0, 4266, 4256, 1, 0, 0, 0, 4266, 4257, 1, 0, 0, 0, 4266, 4258, 1, 0, 0, 0, 4266, 4259, 1, 0, 0, 0, 4266, 4260, 1, 0, 0, 0, 4266, 4261, 1, 0, 0, 0, 4266, 4262, 1, 0, 0, 0, 4266, 4263, 1, 0, 0, 0, 4266, 4264, 1, 0, 0, 0, 4266, 4265, 1, 0, 0, 0, 4267, 583, 1, 0, 0, 0, 4268, 4270, 7, 35, 0, 0, 4269, 4268, 1, 0, 0, 0, 4270, 4273, 1, 0, 0, 0, 4271, 4269, 1, 0, 0, 0, 4271, 4272, 1, 0, 0, 0, 4272, 4274, 1, 0, 0, 0, 4273, 4271, 1, 0, 0, 0, 4274, 4283, 3, 582, 291, 0, 4275, 4276, 5, 401, 0, 0, 4276, 4277, 3, 580, 290, 0, 4277, 4278, 5, 402, 0, 0, 4278, 4282, 1, 0, 0, 0, 4279, 4280, 5, 395, 0, 0, 4280, 4282, 3, 638, 319, 0, 4281, 4275, 1, 0, 0, 0, 4281, 4279, 1, 0, 0, 0, 4282, 4285, 1, 0, 0, 0, 4283, 4281, 1, 0, 0, 0, 4283, 4284, 1, 0, 0, 0, 4284, 585, 1, 0, 0, 0, 4285, 4283, 1, 0, 0, 0, 4286, 4291, 3, 584, 292, 0, 4287, 4288, 5, 423, 0, 0, 4288, 4290, 3, 584, 292, 0, 4289, 4287, 1, 0, 0, 0, 4290, 4293, 1, 0, 0, 0, 4291, 4289, 1, 0, 0, 0, 4291, 4292, 1, 0, 0, 0, 4292, 587, 1, 0, 0, 0, 4293, 4291, 1, 0, 0, 0, 4294, 4299, 3, 586, 293, 0, 4295, 4296, 7, 36, 0, 0, 4296, 4298, 3, 586, 293, 0, 4297, 4295, 1, 0, 0, 0, 4298, 4301, 1, 0, 0, 0, 4299, 4297, 1, 0, 0, 0, 4299, 4300, 1, 0, 0, 0, 4300, 589, 1, 0, 0, 0, 4301, 4299, 1, 0, 0, 0, 4302, 4307, 3, 588, 294, 0, 4303, 4304, 7, 37, 0, 0, 4304, 4306, 3, 588, 294, 0, 4305, 4303, 1, 0, 0, 0, 4306, 4309, 1, 0, 0, 0, 4307, 4305, 1, 0, 0, 0, 4307, 4308, 1, 0, 0, 0, 4308, 591, 1, 0, 0, 0, 4309, 4307, 1, 0, 0, 0, 4310, 4315, 3, 590, 295, 0, 4311, 4312, 5, 422, 0, 0, 4312, 4314, 3, 590, 295, 0, 4313, 4311, 1, 0, 0, 0, 4314, 4317, 1, 0, 0, 0, 4315, 4313, 1, 0, 0, 0, 4315, 4316, 1, 0, 0, 0, 4316, 593, 1, 0, 0, 0, 4317, 4315, 1, 0, 0, 0, 4318, 4323, 3, 592, 296, 0, 4319, 4320, 5, 419, 0, 0, 4320, 4322, 3, 592, 296, 0, 4321, 4319, 1, 0, 0, 0, 4322, 4325, 1, 0, 0, 0, 4323, 4321, 1, 0, 0, 0, 4323, 4324, 1, 0, 0, 0, 4324, 595, 1, 0, 0, 0, 4325, 4323, 1, 0, 0, 0, 4326, 4331, 3, 594, 297, 0, 4327, 4328, 5, 421, 0, 0, 4328, 4330, 3, 594, 297, 0, 4329, 4327, 1, 0, 0, 0, 4330, 4333, 1, 0, 0, 0, 4331, 4329, 1, 0, 0, 0, 4331, 4332, 1, 0, 0, 0, 4332, 597, 1, 0, 0, 0, 4333, 4331, 1, 0, 0, 0, 4334, 4335, 7, 38, 0, 0, 4335, 599, 1, 0, 0, 0, 4336, 4337, 5, 399, 0, 0, 4337, 4338, 3, 376, 188, 0, 4338, 4339, 5, 400, 0, 0, 4339, 601, 1, 0, 0, 0, 4340, 4342, 3, 596, 298, 0, 4341, 4343, 3, 604, 302, 0, 4342, 4341, 1, 0, 0, 0, 4342, 4343, 1, 0, 0, 0, 4343, 4347, 1, 0, 0, 0, 4344, 4345, 5, 117, 0, 0, 4345, 4347, 3, 600, 300, 0, 4346, 4340, 1, 0, 0, 0, 4346, 4344, 1, 0, 0, 0, 4347, 603, 1, 0, 0, 0, 4348, 4349, 3, 598, 299, 0, 4349, 4350, 3, 596, 298, 0, 4350, 4355, 1, 0, 0, 0, 4351, 4355, 3, 606, 303, 0, 4352, 4353, 5, 216, 0, 0, 4353, 4355, 3, 610, 305, 0, 4354, 4348, 1, 0, 0, 0, 4354, 4351, 1, 0, 0, 0, 4354, 4352, 1, 0, 0, 0, 4355, 605, 1, 0, 0, 0, 4356, 4357, 5, 154, 0, 0, 4357, 4371, 3, 608, 304, 0, 4358, 4359, 5, 25, 0, 0, 4359, 4360, 3, 596, 298, 0, 4360, 4361, 5, 11, 0, 0, 4361, 4362, 3, 596, 298, 0, 4362, 4371, 1, 0, 0, 0, 4363, 4364, 5, 184, 0, 0, 4364, 4365, 7, 39, 0, 0, 4365, 4371, 3, 538, 269, 0, 4366, 4367, 3, 634, 317, 0, 4367, 4368, 7, 40, 0, 0, 4368, 4369, 3, 600, 300, 0, 4369, 4371, 1, 0, 0, 0, 4370, 4356, 1, 0, 0, 0, 4370, 4358, 1, 0, 0, 0, 4370, 4363, 1, 0, 0, 0, 4370, 4366, 1, 0, 0, 0, 4371, 607, 1, 0, 0, 0, 4372, 4375, 3, 600, 300, 0, 4373, 4375, 3, 538, 269, 0, 4374, 4372, 1, 0, 0, 0, 4374, 4373, 1, 0, 0, 0, 4375, 609, 1, 0, 0, 0, 4376, 4377, 7, 41, 0, 0, 4377, 4380, 3, 596, 298, 0, 4378, 4380, 3, 606, 303, 0, 4379, 4376, 1, 0, 0, 0, 4379, 4378, 1, 0, 0, 0, 4380, 611, 1, 0, 0, 0, 4381, 4382, 5, 167, 0, 0, 4382, 4383, 5, 96, 0, 0, 4383, 4384, 5, 139, 0, 0, 4384, 613, 1, 0, 0, 0, 4385, 4393, 5, 405, 0, 0, 4386, 4393, 5, 406, 0, 0, 4387, 4393, 5, 407, 0, 0, 4388, 4389, 5, 167, 0, 0, 4389, 4390, 5, 216, 0, 0, 4390, 4391, 5, 96, 0, 0, 4391, 4393, 5, 139, 0, 0, 4392, 4385, 1, 0, 0, 0, 4392, 4386, 1, 0, 0, 0, 4392, 4387, 1, 0, 0, 0, 4392, 4388, 1, 0, 0, 0, 4393, 615, 1, 0, 0, 0, 4394, 4403, 3, 602, 301, 0, 4395, 4396, 3, 614, 307, 0, 4396, 4397, 3, 602, 301, 0, 4397, 4402, 1, 0, 0, 0, 4398, 4399, 3, 612, 306, 0, 4399, 4400, 3, 602, 301, 0, 4400, 4402, 1, 0, 0, 0, 4401, 4395, 1, 0, 0, 0, 4401, 4398, 1, 0, 0, 0, 4402, 4405, 1, 0, 0, 0, 4403, 4401, 1, 0, 0, 0, 4403, 4404, 1, 0, 0, 0, 4404, 617, 1, 0, 0, 0, 4405, 4403, 1, 0, 0, 0, 4406, 4413, 5, 219, 0, 0, 4407, 4413, 5, 350, 0, 0, 4408, 4413, 5, 125, 0, 0, 4409, 4413, 5, 360, 0, 0, 4410, 4411, 5, 216, 0, 0, 4411, 4413, 7, 42, 0, 0, 4412, 4406, 1, 0, 0, 0, 4412, 4407, 1, 0, 0, 0, 4412, 4408, 1, 0, 0, 0, 4412, 4409, 1, 0, 0, 0, 4412, 4410, 1, 0, 0, 0, 4413, 619, 1, 0, 0, 0, 4414, 4416, 5, 216, 0, 0, 4415, 4414, 1, 0, 0, 0, 4416, 4419, 1, 0, 0, 0, 4417, 4415, 1, 0, 0, 0, 4417, 4418, 1, 0, 0, 0, 4418, 4420, 1, 0, 0, 0, 4419, 4417, 1, 0, 0, 0, 4420, 4423, 3, 616, 308, 0, 4421, 4422, 5, 167, 0, 0, 4422, 4424, 3, 618, 309, 0, 4423, 4421, 1, 0, 0, 0, 4423, 4424, 1, 0, 0, 0, 4424, 621, 1, 0, 0, 0, 4425, 4430, 3, 620, 310, 0, 4426, 4427, 5, 11, 0, 0, 4427, 4429, 3, 620, 310, 0, 4428, 4426, 1, 0, 0, 0, 4429, 4432, 1, 0, 0, 0, 4430, 4428, 1, 0, 0, 0, 4430, 4431, 1, 0, 0, 0, 4431, 623, 1, 0, 0, 0, 4432, 4430, 1, 0, 0, 0, 4433, 4435, 3, 478, 239, 0, 4434, 4436, 3, 626, 313, 0, 4435, 4434, 1, 0, 0, 0, 4435, 4436, 1, 0, 0, 0, 4436, 625, 1, 0, 0, 0, 4437, 4438, 5, 237, 0, 0, 4438, 4439, 5, 399, 0, 0, 4439, 4444, 3, 628, 314, 0, 4440, 4441, 5, 397, 0, 0, 4441, 4443, 3, 628, 314, 0, 4442, 4440, 1, 0, 0, 0, 4443, 4446, 1, 0, 0, 0, 4444, 4442, 1, 0, 0, 0, 4444, 4445, 1, 0, 0, 0, 4445, 4447, 1, 0, 0, 0, 4446, 4444, 1, 0, 0, 0, 4447, 4448, 5, 400, 0, 0, 4448, 627, 1, 0, 0, 0, 4449, 4452, 3, 638, 319, 0, 4450, 4451, 5, 405, 0, 0, 4451, 4453, 3, 572, 286, 0, 4452, 4450, 1, 0, 0, 0, 4452, 4453, 1, 0, 0, 0, 4453, 629, 1, 0, 0, 0, 4454, 4455, 5, 399, 0, 0, 4455, 4460, 3, 632, 316, 0, 4456, 4457, 5, 397, 0, 0, 4457, 4459, 3, 632, 316, 0, 4458, 4456, 1, 0, 0, 0, 4459, 4462, 1, 0, 0, 0, 4460, 4458, 1, 0, 0, 0, 4460, 4461, 1, 0, 0, 0, 4461, 4463, 1, 0, 0, 0, 4462, 4460, 1, 0, 0, 0, 4463, 4464, 5, 400, 0, 0, 4464, 631, 1, 0, 0, 0, 4465, 4468, 3, 638, 319, 0, 4466, 4469, 5, 184, 0, 0, 4467, 4469, 3, 634, 317, 0, 4468, 4466, 1, 0, 0, 0, 4468, 4467, 1, 0, 0, 0, 4469, 4470, 1, 0, 0, 0, 4470, 4471, 3, 572, 286, 0, 4471, 633, 1, 0, 0, 0, 4472, 4473, 7, 43, 0, 0, 4473, 635, 1, 0, 0, 0, 4474, 4475, 7, 44, 0, 0, 4475, 637, 1, 0, 0, 0, 4476, 4479, 5, 432, 0, 0, 4477, 4479, 3, 644, 322, 0, 4478, 4476, 1, 0, 0, 0, 4478, 4477, 1, 0, 0, 0, 4479, 639, 1, 0, 0, 0, 4480, 4483, 3, 638, 319, 0, 4481, 4482, 5, 395, 0, 0, 4482, 4484, 3, 638, 319, 0, 4483, 4481, 1, 0, 0, 0, 4483, 4484, 1, 0, 0, 0, 4484, 641, 1, 0, 0, 0, 4485, 4486, 3, 638, 319, 0, 4486, 643, 1, 0, 0, 0, 4487, 4488, 7, 45, 0, 0, 4488, 645, 1, 0, 0, 0, 4489, 4490, 7, 46, 0, 0, 4490, 647, 1, 0, 0, 0, 4491, 4543, 3, 638, 319, 0, 4492, 4543, 5, 299, 0, 0, 4493, 4543, 5, 171, 0, 0, 4494, 4543, 5, 237, 0, 0, 4495, 4543, 5, 198, 0, 0, 4496, 4543, 5, 268, 0, 0, 4497, 4543, 5, 369, 0, 0, 4498, 4543, 5, 241, 0, 0, 4499, 4543, 5, 165, 0, 0, 4500, 4543, 5, 292, 0, 0, 4501, 4543, 5, 356, 0, 0, 4502, 4543, 5, 144, 0, 0, 4503, 4543, 5, 203, 0, 0, 4504, 4543, 5, 219, 0, 0, 4505, 4543, 5, 126, 0, 0, 4506, 4543, 5, 188, 0, 0, 4507, 4543, 5, 101, 0, 0, 4508, 4543, 5, 329, 0, 0, 4509, 4543, 5, 224, 0, 0, 4510, 4543, 5, 291, 0, 0, 4511, 4543, 5, 145, 0, 0, 4512, 4543, 5, 304, 0, 0, 4513, 4543, 5, 135, 0, 0, 4514, 4543, 5, 318, 0, 0, 4515, 4543, 5, 161, 0, 0, 4516, 4543, 5, 54, 0, 0, 4517, 4543, 5, 166, 0, 0, 4518, 4543, 5, 358, 0, 0, 4519, 4543, 5, 45, 0, 0, 4520, 4543, 5, 347, 0, 0, 4521, 4543, 5, 96, 0, 0, 4522, 4543, 5, 154, 0, 0, 4523, 4543, 5, 269, 0, 0, 4524, 4543, 5, 337, 0, 0, 4525, 4543, 5, 225, 0, 0, 4526, 4543, 5, 108, 0, 0, 4527, 4543, 5, 141, 0, 0, 4528, 4543, 5, 365, 0, 0, 4529, 4543, 5, 21, 0, 0, 4530, 4543, 5, 78, 0, 0, 4531, 4543, 5, 374, 0, 0, 4532, 4543, 5, 336, 0, 0, 4533, 4543, 5, 167, 0, 0, 4534, 4543, 5, 134, 0, 0, 4535, 4543, 5, 216, 0, 0, 4536, 4543, 5, 27, 0, 0, 4537, 4543, 5, 370, 0, 0, 4538, 4543, 5, 263, 0, 0, 4539, 4543, 5, 25, 0, 0, 4540, 4543, 5, 62, 0, 0, 4541, 4543, 5, 17, 0, 0, 4542, 4491, 1, 0, 0, 0, 4542, 4492, 1, 0, 0, 0, 4542, 4493, 1, 0, 0, 0, 4542, 4494, 1, 0, 0, 0, 4542, 4495, 1, 0, 0, 0, 4542, 4496, 1, 0, 0, 0, 4542, 4497, 1, 0, 0, 0, 4542, 4498, 1, 0, 0, 0, 4542, 4499, 1, 0, 0, 0, 4542, 4500, 1, 0, 0, 0, 4542, 4501, 1, 0, 0, 0, 4542, 4502, 1, 0, 0, 0, 4542, 4503, 1, 0, 0, 0, 4542, 4504, 1, 0, 0, 0, 4542, 4505, 1, 0, 0, 0, 4542, 4506, 1, 0, 0, 0, 4542, 4507, 1, 0, 0, 0, 4542, 4508, 1, 0, 0, 0, 4542, 4509, 1, 0, 0, 0, 4542, 4510, 1, 0, 0, 0, 4542, 4511, 1, 0, 0, 0, 4542, 4512, 1, 0, 0, 0, 4542, 4513, 1, 0, 0, 0, 4542, 4514, 1, 0, 0, 0, 4542, 4515, 1, 0, 0, 0, 4542, 4516, 1, 0, 0, 0, 4542, 4517, 1, 0, 0, 0, 4542, 4518, 1, 0, 0, 0, 4542, 4519, 1, 0, 0, 0, 4542, 4520, 1, 0, 0, 0, 4542, 4521, 1, 0, 0, 0, 4542, 4522, 1, 0, 0, 0, 4542, 4523, 1, 0, 0, 0, 4542, 4524, 1, 0, 0, 0, 4542, 4525, 1, 0, 0, 0, 4542, 4526, 1, 0, 0, 0, 4542, 4527, 1, 0, 0, 0, 4542, 4528, 1, 0, 0, 0, 4542, 4529, 1, 0, 0, 0, 4542, 4530, 1, 0, 0, 0, 4542, 4531, 1, 0, 0, 0, 4542, 4532, 1, 0, 0, 0, 4542, 4533, 1, 0, 0, 0, 4542, 4534, 1, 0, 0, 0, 4542, 4535, 1, 0, 0, 0, 4542, 4536, 1, 0, 0, 0, 4542, 4537, 1, 0, 0, 0, 4542, 4538, 1, 0, 0, 0, 4542, 4539, 1, 0, 0, 0, 4542, 4540, 1, 0, 0, 0, 4542, 4541, 1, 0, 0, 0, 4543, 649, 1, 0, 0, 0, 4544, 4545, 5, 58, 0, 0, 4545, 4546, 5, 280, 0, 0, 4546, 4548, 5, 243, 0, 0, 4547, 4549, 3, 32, 16, 0, 4548, 4547, 1, 0, 0, 0, 4548, 4549, 1, 0, 0, 0, 4549, 4559, 1, 0, 0, 0, 4550, 4551, 3, 638, 319, 0, 4551, 4552, 5, 184, 0, 0, 4552, 4553, 3, 638, 319, 0, 4553, 4560, 1, 0, 0, 0, 4554, 4557, 3, 638, 319, 0, 4555, 4556, 5, 387, 0, 0, 4556, 4558, 3, 656, 328, 0, 4557, 4555, 1, 0, 0, 0, 4557, 4558, 1, 0, 0, 0, 4558, 4560, 1, 0, 0, 0, 4559, 4550, 1, 0, 0, 0, 4559, 4554, 1, 0, 0, 0, 4560, 4710, 1, 0, 0, 0, 4561, 4562, 5, 9, 0, 0, 4562, 4563, 5, 280, 0, 0, 4563, 4564, 5, 243, 0, 0, 4564, 4589, 3, 638, 319, 0, 4565, 4590, 5, 373, 0, 0, 4566, 4590, 3, 664, 332, 0, 4567, 4568, 5, 304, 0, 0, 4568, 4590, 3, 656, 328, 0, 4569, 4570, 5, 363, 0, 0, 4570, 4575, 3, 658, 329, 0, 4571, 4572, 5, 397, 0, 0, 4572, 4574, 3, 658, 329, 0, 4573, 4571, 1, 0, 0, 0, 4574, 4577, 1, 0, 0, 0, 4575, 4573, 1, 0, 0, 0, 4575, 4576, 1, 0, 0, 0, 4576, 4590, 1, 0, 0, 0, 4577, 4575, 1, 0, 0, 0, 4578, 4579, 5, 274, 0, 0, 4579, 4580, 5, 341, 0, 0, 4580, 4590, 3, 638, 319, 0, 4581, 4583, 3, 660, 330, 0, 4582, 4584, 3, 662, 331, 0, 4583, 4582, 1, 0, 0, 0, 4583, 4584, 1, 0, 0, 0, 4584, 4590, 1, 0, 0, 0, 4585, 4587, 3, 662, 331, 0, 4586, 4588, 3, 660, 330, 0, 4587, 4586, 1, 0, 0, 0, 4587, 4588, 1, 0, 0, 0, 4588, 4590, 1, 0, 0, 0, 4589, 4565, 1, 0, 0, 0, 4589, 4566, 1, 0, 0, 0, 4589, 4567, 1, 0, 0, 0, 4589, 4569, 1, 0, 0, 0, 4589, 4578, 1, 0, 0, 0, 4589, 4581, 1, 0, 0, 0, 4589, 4585, 1, 0, 0, 0, 4590, 4710, 1, 0, 0, 0, 4591, 4592, 5, 101, 0, 0, 4592, 4593, 5, 280, 0, 0, 4593, 4595, 5, 243, 0, 0, 4594, 4596, 3, 30, 15, 0, 4595, 4594, 1, 0, 0, 0, 4595, 4596, 1, 0, 0, 0, 4596, 4597, 1, 0, 0, 0, 4597, 4710, 3, 638, 319, 0, 4598, 4601, 3, 662, 331, 0, 4599, 4601, 3, 664, 332, 0, 4600, 4598, 1, 0, 0, 0, 4600, 4599, 1, 0, 0, 0, 4601, 4602, 1, 0, 0, 0, 4602, 4603, 5, 390, 0, 0, 4603, 4604, 5, 197, 0, 0, 4604, 4710, 1, 0, 0, 0, 4605, 4617, 5, 278, 0, 0, 4606, 4607, 5, 3, 0, 0, 4607, 4608, 5, 280, 0, 0, 4608, 4609, 5, 243, 0, 0, 4609, 4610, 5, 387, 0, 0, 4610, 4618, 3, 638, 319, 0, 4611, 4612, 5, 280, 0, 0, 4612, 4613, 5, 243, 0, 0, 4613, 4614, 3, 638, 319, 0, 4614, 4615, 5, 387, 0, 0, 4615, 4616, 3, 638, 319, 0, 4616, 4618, 1, 0, 0, 0, 4617, 4606, 1, 0, 0, 0, 4617, 4611, 1, 0, 0, 0, 4618, 4710, 1, 0, 0, 0, 4619, 4620, 5, 58, 0, 0, 4620, 4621, 5, 348, 0, 0, 4621, 4622, 3, 638, 319, 0, 4622, 4623, 5, 395, 0, 0, 4623, 4624, 3, 638, 319, 0, 4624, 4625, 5, 383, 0, 0, 4625, 4626, 3, 684, 342, 0, 4626, 4627, 5, 99, 0, 0, 4627, 4628, 3, 686, 343, 0, 4628, 4710, 1, 0, 0, 0, 4629, 4630, 5, 9, 0, 0, 4630, 4631, 5, 348, 0, 0, 4631, 4632, 3, 638, 319, 0, 4632, 4633, 5, 395, 0, 0, 4633, 4650, 3, 638, 319, 0, 4634, 4635, 5, 383, 0, 0, 4635, 4636, 3, 684, 342, 0, 4636, 4637, 5, 99, 0, 0, 4637, 4638, 3, 686, 343, 0, 4638, 4651, 1, 0, 0, 0, 4639, 4640, 5, 4, 0, 0, 4640, 4644, 5, 341, 0, 0, 4641, 4642, 5, 101, 0, 0, 4642, 4644, 5, 139, 0, 0, 4643, 4639, 1, 0, 0, 0, 4643, 4641, 1, 0, 0, 0, 4644, 4648, 1, 0, 0, 0, 4645, 4646, 5, 246, 0, 0, 4646, 4649, 3, 682, 341, 0, 4647, 4649, 5, 362, 0, 0, 4648, 4645, 1, 0, 0, 0, 4648, 4647, 1, 0, 0, 0, 4649, 4651, 1, 0, 0, 0, 4650, 4634, 1, 0, 0, 0, 4650, 4643, 1, 0, 0, 0, 4651, 4710, 1, 0, 0, 0, 4652, 4653, 5, 101, 0, 0, 4653, 4654, 5, 348, 0, 0, 4654, 4655, 3, 638, 319, 0, 4655, 4656, 5, 395, 0, 0, 4656, 4657, 3, 638, 319, 0, 4657, 4710, 1, 0, 0, 0, 4658, 4659, 5, 58, 0, 0, 4659, 4660, 5, 246, 0, 0, 4660, 4661, 3, 638, 319, 0, 4661, 4662, 5, 395, 0, 0, 4662, 4663, 3, 682, 341, 0, 4663, 4664, 5, 387, 0, 0, 4664, 4665, 3, 690, 345, 0, 4665, 4710, 1, 0, 0, 0, 4666, 4667, 5, 9, 0, 0, 4667, 4668, 5, 246, 0, 0, 4668, 4669, 3, 638, 319, 0, 4669, 4670, 5, 395, 0, 0, 4670, 4678, 3, 682, 341, 0, 4671, 4672, 5, 304, 0, 0, 4672, 4679, 3, 690, 345, 0, 4673, 4674, 5, 363, 0, 0, 4674, 4679, 5, 294, 0, 0, 4675, 4676, 7, 47, 0, 0, 4676, 4677, 5, 348, 0, 0, 4677, 4679, 3, 638, 319, 0, 4678, 4671, 1, 0, 0, 0, 4678, 4673, 1, 0, 0, 0, 4678, 4675, 1, 0, 0, 0, 4679, 4710, 1, 0, 0, 0, 4680, 4681, 5, 101, 0, 0, 4681, 4682, 5, 246, 0, 0, 4682, 4683, 3, 638, 319, 0, 4683, 4684, 5, 395, 0, 0, 4684, 4685, 3, 682, 341, 0, 4685, 4710, 1, 0, 0, 0, 4686, 4687, 7, 48, 0, 0, 4687, 4688, 3, 652, 326, 0, 4688, 4689, 5, 200, 0, 0, 4689, 4690, 5, 426, 0, 0, 4690, 4691, 5, 154, 0, 0, 4691, 4695, 3, 638, 319, 0, 4692, 4693, 5, 341, 0, 0, 4693, 4696, 3, 682, 341, 0, 4694, 4696, 5, 362, 0, 0, 4695, 4692, 1, 0, 0, 0, 4695, 4694, 1, 0, 0, 0, 4696, 4700, 1, 0, 0, 0, 4697, 4698, 5, 387, 0, 0, 4698, 4699, 5, 229, 0, 0, 4699, 4701, 5, 431, 0, 0, 4700, 4697, 1, 0, 0, 0, 4700, 4701, 1, 0, 0, 0, 4701, 4710, 1, 0, 0, 0, 4702, 4703, 5, 101, 0, 0, 4703, 4704, 3, 652, 326, 0, 4704, 4705, 5, 200, 0, 0, 4705, 4706, 5, 426, 0, 0, 4706, 4707, 5, 154, 0, 0, 4707, 4708, 3, 638, 319, 0, 4708, 4710, 1, 0, 0, 0, 4709, 4544, 1, 0, 0, 0, 4709, 4561, 1, 0, 0, 0, 4709, 4591, 1, 0, 0, 0, 4709, 4600, 1, 0, 0, 0, 4709, 4605, 1, 0, 0, 0, 4709, 4619, 1, 0, 0, 0, 4709, 4629, 1, 0, 0, 0, 4709, 4652, 1, 0, 0, 0, 4709, 4658, 1, 0, 0, 0, 4709, 4666, 1, 0, 0, 0, 4709, 4680, 1, 0, 0, 0, 4709, 4686, 1, 0, 0, 0, 4709, 4702, 1, 0, 0, 0, 4710, 651, 1, 0, 0, 0, 4711, 4712, 7, 49, 0, 0, 4712, 653, 1, 0, 0, 0, 4713, 4714, 5, 259, 0, 0, 4714, 4715, 5, 405, 0, 0, 4715, 4721, 5, 431, 0, 0, 4716, 4717, 5, 83, 0, 0, 4717, 4718, 5, 246, 0, 0, 4718, 4719, 5, 405, 0, 0, 4719, 4721, 3, 682, 341, 0, 4720, 4713, 1, 0, 0, 0, 4720, 4716, 1, 0, 0, 0, 4721, 655, 1, 0, 0, 0, 4722, 4727, 3, 654, 327, 0, 4723, 4724, 5, 397, 0, 0, 4724, 4726, 3, 654, 327, 0, 4725, 4723, 1, 0, 0, 0, 4726, 4729, 1, 0, 0, 0, 4727, 4725, 1, 0, 0, 0, 4727, 4728, 1, 0, 0, 0, 4728, 657, 1, 0, 0, 0, 4729, 4727, 1, 0, 0, 0, 4730, 4734, 5, 259, 0, 0, 4731, 4732, 5, 83, 0, 0, 4732, 4734, 5, 246, 0, 0, 4733, 4730, 1, 0, 0, 0, 4733, 4731, 1, 0, 0, 0, 4734, 659, 1, 0, 0, 0, 4735, 4738, 5, 2, 0, 0, 4736, 4737, 5, 387, 0, 0, 4737, 4739, 5, 278, 0, 0, 4738, 4736, 1, 0, 0, 0, 4738, 4739, 1, 0, 0, 0, 4739, 661, 1, 0, 0, 0, 4740, 4741, 7, 50, 0, 0, 4741, 663, 1, 0, 0, 0, 4742, 4743, 7, 51, 0, 0, 4743, 665, 1, 0, 0, 0, 4744, 4745, 7, 52, 0, 0, 4745, 667, 1, 0, 0, 0, 4746, 4747, 7, 53, 0, 0, 4747, 669, 1, 0, 0, 0, 4748, 4749, 7, 54, 0, 0, 4749, 671, 1, 0, 0, 0, 4750, 4751, 7, 55, 0, 0, 4751, 673, 1, 0, 0, 0, 4752, 4753, 7, 56, 0, 0, 4753, 675, 1, 0, 0, 0, 4754, 4755, 7, 57, 0, 0, 4755, 677, 1, 0, 0, 0, 4756, 4757, 7, 58, 0, 0, 4757, 679, 1, 0, 0, 0, 4758, 4759, 7, 59, 0, 0, 4759, 681, 1, 0, 0, 0, 4760, 4765, 3, 638, 319, 0, 4761, 4762, 5, 395, 0, 0, 4762, 4764, 3, 638, 319, 0, 4763, 4761, 1, 0, 0, 0, 4764, 4767, 1, 0, 0, 0, 4765, 4763, 1, 0, 0, 0, 4765, 4766, 1, 0, 0, 0, 4766, 683, 1, 0, 0, 0, 4767, 4765, 1, 0, 0, 0, 4768, 4769, 3, 638, 319, 0, 4769, 4770, 5, 411, 0, 0, 4770, 4771, 7, 26, 0, 0, 4771, 685, 1, 0, 0, 0, 4772, 4777, 5, 176, 0, 0, 4773, 4774, 5, 211, 0, 0, 4774, 4775, 5, 341, 0, 0, 4775, 4777, 3, 682, 341, 0, 4776, 4772, 1, 0, 0, 0, 4776, 4773, 1, 0, 0, 0, 4777, 687, 1, 0, 0, 0, 4778, 4779, 5, 8, 0, 0, 4779, 4780, 5, 405, 0, 0, 4780, 4791, 5, 431, 0, 0, 4781, 4782, 5, 259, 0, 0, 4782, 4783, 5, 405, 0, 0, 4783, 4791, 5, 431, 0, 0, 4784, 4785, 5, 294, 0, 0, 4785, 4786, 5, 405, 0, 0, 4786, 4791, 5, 426, 0, 0, 4787, 4788, 5, 240, 0, 0, 4788, 4789, 5, 405, 0, 0, 4789, 4791, 3, 682, 341, 0, 4790, 4778, 1, 0, 0, 0, 4790, 4781, 1, 0, 0, 0, 4790, 4784, 1, 0, 0, 0, 4790, 4787, 1, 0, 0, 0, 4791, 689, 1, 0, 0, 0, 4792, 4797, 3, 688, 344, 0, 4793, 4794, 5, 397, 0, 0, 4794, 4796, 3, 688, 344, 0, 4795, 4793, 1, 0, 0, 0, 4796, 4799, 1, 0, 0, 0, 4797, 4795, 1, 0, 0, 0, 4797, 4798, 1, 0, 0, 0, 4798, 691, 1, 0, 0, 0, 4799, 4797, 1, 0, 0, 0, 621, 695, 702, 705, 711, 717, 724, 734, 737, 741, 756, 763, 769, 774, 779, 782, 806, 813, 816, 821, 826, 832, 836, 849, 853, 857, 862, 869, 873, 878, 885, 889, 894, 942, 949, 954, 977, 981, 985, 988, 992, 997, 1003, 1007, 1013, 1015, 1026, 1030, 1037, 1045, 1048, 1053, 1057, 1060, 1070, 1078, 1082, 1085, 1089, 1093, 1096, 1101, 1107, 1112, 1117, 1121, 1132, 1134, 1138, 1148, 1152, 1158, 1161, 1168, 1173, 1181, 1186, 1190, 1198, 1203, 1209, 1215, 1218, 1221, 1224, 1233, 1241, 1246, 1254, 1261, 1264, 1267, 1269, 1280, 1282, 1285, 1288, 1291, 1294, 1297, 1299, 1311, 1317, 1325, 1327, 1337, 1370, 1375, 1379, 1383, 1390, 1397, 1403, 1407, 1410, 1417, 1440, 1445, 1449, 1457, 1466, 1473, 1479, 1486, 1489, 1495, 1502, 1510, 1519, 1528, 1535, 1555, 1562, 1564, 1571, 1581, 1589, 1593, 1597, 1610, 1619, 1635, 1639, 1644, 1649, 1652, 1655, 1658, 1661, 1664, 1669, 1678, 1682, 1689, 1692, 1695, 1698, 1710, 1716, 1742, 1750, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1784, 1794, 1797, 1817, 1823, 1829, 1832, 1834, 1841, 1848, 1861, 1866, 1875, 1883, 1891, 1904, 1917, 1933, 1937, 1952, 1958, 1961, 1964, 1967, 1970, 1974, 1989, 1992, 2003, 2017, 2051, 2059, 2064, 2072, 2077, 2082, 2089, 2097, 2105, 2113, 2118, 2128, 2132, 2140, 2149, 2152, 2156, 2163, 2169, 2173, 2179, 2183, 2195, 2204, 2215, 2219, 2226, 2238, 2248, 2251, 2258, 2264, 2268, 2271, 2274, 2280, 2284, 2288, 2293, 2297, 2301, 2305, 2313, 2317, 2321, 2325, 2329, 2337, 2341, 2345, 2353, 2358, 2363, 2367, 2371, 2378, 2387, 2395, 2407, 2425, 2428, 2434, 2460, 2463, 2469, 2477, 2485, 2498, 2505, 2508, 2511, 2514, 2517, 2520, 2523, 2526, 2529, 2532, 2535, 2540, 2543, 2546, 2549, 2552, 2555, 2558, 2561, 2564, 2567, 2570, 2572, 2578, 2582, 2585, 2588, 2591, 2594, 2597, 2604, 2608, 2611, 2614, 2617, 2620, 2623, 2630, 2633, 2641, 2645, 2652, 2654, 2657, 2662, 2665, 2669, 2674, 2680, 2688, 2696, 2706, 2709, 2713, 2717, 2722, 2729, 2733, 2735, 2739, 2746, 2751, 2764, 2772, 2791, 2801, 2814, 2824, 2828, 2832, 2838, 2845, 2852, 2861, 2868, 2888, 2891, 2905, 2920, 2924, 2944, 2956, 2962, 2965, 2968, 2974, 2980, 2987, 2995, 3001, 3005, 3010, 3013, 3017, 3024, 3029, 3034, 3037, 3039, 3047, 3055, 3059, 3063, 3067, 3084, 3101, 3108, 3117, 3122, 3125, 3128, 3132, 3147, 3161, 3164, 3175, 3179, 3182, 3185, 3189, 3194, 3197, 3200, 3203, 3206, 3209, 3215, 3218, 3221, 3224, 3227, 3230, 3233, 3236, 3239, 3242, 3246, 3248, 3254, 3259, 3262, 3265, 3268, 3271, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298, 3301, 3304, 3308, 3310, 3312, 3317, 3322, 3326, 3330, 3335, 3340, 3349, 3359, 3367, 3379, 3382, 3388, 3395, 3402, 3409, 3416, 3425, 3429, 3436, 3441, 3445, 3449, 3452, 3455, 3466, 3470, 3472, 3475, 3488, 3491, 3494, 3506, 3509, 3516, 3525, 3530, 3532, 3534, 3551, 3554, 3562, 3565, 3569, 3572, 3575, 3578, 3581, 3593, 3601, 3608, 3611, 3618, 3621, 3626, 3633, 3641, 3649, 3654, 3658, 3663, 3670, 3684, 3687, 3691, 3702, 3712, 3715, 3722, 3731, 3734, 3740, 3743, 3750, 3755, 3758, 3771, 3777, 3779, 3787, 3790, 3800, 3805, 3807, 3819, 3825, 3827, 3834, 3841, 3855, 3861, 3864, 3867, 3870, 3879, 3886, 3892, 3901, 3905, 3913, 3923, 3933, 3938, 3942, 3948, 3953, 3963, 3967, 3970, 3975, 3978, 3982, 3987, 3998, 4000, 4009, 4028, 4038, 4041, 4048, 4051, 4061, 4068, 4071, 4073, 4084, 4094, 4096, 4105, 4110, 4119, 4132, 4136, 4148, 4152, 4161, 4180, 4198, 4210, 4225, 4229, 4245, 4252, 4266, 4271, 4281, 4283, 4291, 4299, 4307, 4315, 4323, 4331, 4342, 4346, 4354, 4370, 4374, 4379, 4392, 4401, 4403, 4412, 4417, 4423, 4430, 4435, 4444, 4452, 4460, 4468, 4478, 4483, 4542, 4548, 4557, 4559, 4575, 4583, 4587, 4589, 4595, 4600, 4617, 4643, 4648, 4650, 4678, 4695, 4700, 4709, 4720, 4727, 4733, 4738, 4765, 4776, 4790, 4797] \ No newline at end of file +[4, 1, 438, 4801, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 1, 0, 5, 0, 694, 8, 0, 10, 0, 12, 0, 697, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 703, 8, 1, 1, 1, 3, 1, 706, 8, 1, 1, 2, 1, 2, 5, 2, 710, 8, 2, 10, 2, 12, 2, 713, 9, 2, 1, 2, 1, 2, 1, 2, 3, 2, 718, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 725, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 735, 8, 3, 1, 3, 3, 3, 738, 8, 3, 1, 3, 1, 3, 3, 3, 742, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 757, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 764, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 770, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 775, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 780, 8, 5, 1, 5, 3, 5, 783, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 805, 8, 5, 10, 5, 12, 5, 808, 9, 5, 1, 5, 1, 5, 5, 5, 812, 8, 5, 10, 5, 12, 5, 815, 9, 5, 3, 5, 817, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 822, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 827, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 833, 8, 6, 1, 7, 1, 7, 3, 7, 837, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 850, 8, 8, 1, 9, 1, 9, 3, 9, 854, 8, 9, 1, 9, 1, 9, 3, 9, 858, 8, 9, 1, 9, 1, 9, 1, 9, 3, 9, 863, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 870, 8, 10, 1, 10, 1, 10, 3, 10, 874, 8, 10, 1, 11, 1, 11, 1, 11, 3, 11, 879, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 886, 8, 12, 1, 12, 1, 12, 3, 12, 890, 8, 12, 1, 13, 1, 13, 1, 13, 3, 13, 895, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 4, 14, 941, 8, 14, 11, 14, 12, 14, 942, 1, 14, 1, 14, 1, 14, 4, 14, 948, 8, 14, 11, 14, 12, 14, 949, 1, 14, 1, 14, 1, 14, 3, 14, 955, 8, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 3, 21, 978, 8, 21, 1, 21, 1, 21, 3, 21, 982, 8, 21, 1, 21, 1, 21, 3, 21, 986, 8, 21, 1, 21, 3, 21, 989, 8, 21, 1, 21, 1, 21, 3, 21, 993, 8, 21, 1, 21, 1, 21, 1, 21, 3, 21, 998, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1004, 8, 21, 1, 21, 1, 21, 3, 21, 1008, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1014, 8, 21, 3, 21, 1016, 8, 21, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 3, 24, 1027, 8, 24, 1, 24, 1, 24, 3, 24, 1031, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 3, 26, 1038, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 1046, 8, 26, 1, 26, 3, 26, 1049, 8, 26, 1, 27, 1, 27, 1, 27, 3, 27, 1054, 8, 27, 1, 27, 1, 27, 3, 27, 1058, 8, 27, 1, 27, 3, 27, 1061, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 3, 29, 1071, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1079, 8, 29, 5, 29, 1081, 8, 29, 10, 29, 12, 29, 1084, 9, 29, 3, 29, 1086, 8, 29, 1, 30, 1, 30, 3, 30, 1090, 8, 30, 1, 31, 1, 31, 3, 31, 1094, 8, 31, 1, 31, 3, 31, 1097, 8, 31, 1, 32, 1, 32, 1, 32, 3, 32, 1102, 8, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1108, 8, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1113, 8, 32, 1, 32, 1, 32, 1, 32, 3, 32, 1118, 8, 32, 1, 32, 1, 32, 3, 32, 1122, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 1133, 8, 33, 3, 33, 1135, 8, 33, 1, 33, 1, 33, 3, 33, 1139, 8, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1149, 8, 36, 1, 36, 1, 36, 3, 36, 1153, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1159, 8, 36, 1, 36, 3, 36, 1162, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1169, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1174, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1182, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1187, 8, 36, 1, 36, 1, 36, 3, 36, 1191, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1199, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1204, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1210, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1216, 8, 36, 1, 36, 3, 36, 1219, 8, 36, 1, 36, 3, 36, 1222, 8, 36, 1, 36, 3, 36, 1225, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1234, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1242, 8, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1247, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1255, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1262, 8, 36, 1, 36, 3, 36, 1265, 8, 36, 1, 36, 3, 36, 1268, 8, 36, 3, 36, 1270, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1281, 8, 36, 3, 36, 1283, 8, 36, 1, 36, 3, 36, 1286, 8, 36, 1, 36, 3, 36, 1289, 8, 36, 1, 36, 3, 36, 1292, 8, 36, 1, 36, 3, 36, 1295, 8, 36, 1, 36, 3, 36, 1298, 8, 36, 3, 36, 1300, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1312, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1318, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1326, 8, 36, 3, 36, 1328, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 1338, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 3, 45, 1371, 8, 45, 1, 45, 1, 45, 1, 45, 3, 45, 1376, 8, 45, 1, 46, 1, 46, 3, 46, 1380, 8, 46, 1, 46, 1, 46, 3, 46, 1384, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 1391, 8, 47, 1, 47, 1, 47, 1, 47, 5, 47, 1396, 8, 47, 10, 47, 12, 47, 1399, 9, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1404, 8, 47, 1, 48, 1, 48, 3, 48, 1408, 8, 48, 1, 48, 3, 48, 1411, 8, 48, 1, 48, 1, 48, 1, 48, 5, 48, 1416, 8, 48, 10, 48, 12, 48, 1419, 9, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1441, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 1446, 8, 53, 1, 53, 1, 53, 3, 53, 1450, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 3, 55, 1458, 8, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1467, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1474, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1480, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1487, 8, 58, 1, 58, 3, 58, 1490, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1496, 8, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1501, 8, 59, 10, 59, 12, 59, 1504, 9, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 1511, 8, 60, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 5, 62, 1518, 8, 62, 10, 62, 12, 62, 1521, 9, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1529, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 1536, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 3, 69, 1556, 8, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1563, 8, 69, 3, 69, 1565, 8, 69, 1, 70, 1, 70, 1, 70, 5, 70, 1570, 8, 70, 10, 70, 12, 70, 1573, 9, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 3, 73, 1582, 8, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1590, 8, 73, 1, 74, 1, 74, 3, 74, 1594, 8, 74, 1, 74, 1, 74, 3, 74, 1598, 8, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 3, 76, 1611, 8, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1620, 8, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1636, 8, 78, 1, 78, 1, 78, 3, 78, 1640, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1645, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1650, 8, 78, 1, 78, 3, 78, 1653, 8, 78, 1, 78, 3, 78, 1656, 8, 78, 1, 78, 3, 78, 1659, 8, 78, 1, 78, 3, 78, 1662, 8, 78, 1, 78, 3, 78, 1665, 8, 78, 1, 79, 1, 79, 1, 79, 3, 79, 1670, 8, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 3, 80, 1679, 8, 80, 1, 80, 1, 80, 3, 80, 1683, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1690, 8, 80, 1, 80, 3, 80, 1693, 8, 80, 1, 80, 3, 80, 1696, 8, 80, 1, 80, 3, 80, 1699, 8, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1711, 8, 81, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 1717, 8, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 3, 87, 1743, 8, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1751, 8, 88, 1, 88, 1, 88, 3, 88, 1755, 8, 88, 1, 88, 3, 88, 1758, 8, 88, 1, 88, 3, 88, 1761, 8, 88, 1, 88, 3, 88, 1764, 8, 88, 1, 88, 3, 88, 1767, 8, 88, 1, 88, 3, 88, 1770, 8, 88, 1, 88, 3, 88, 1773, 8, 88, 1, 88, 3, 88, 1776, 8, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 3, 89, 1785, 8, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1795, 8, 90, 1, 90, 3, 90, 1798, 8, 90, 1, 90, 1, 90, 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, 3, 93, 1818, 8, 93, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1824, 8, 94, 1, 94, 1, 94, 1, 94, 1, 94, 3, 94, 1830, 8, 94, 1, 94, 3, 94, 1833, 8, 94, 3, 94, 1835, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 3, 96, 1842, 8, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 3, 97, 1849, 8, 97, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 1862, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 1867, 8, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 5, 101, 1874, 8, 101, 10, 101, 12, 101, 1877, 9, 101, 1, 102, 1, 102, 1, 102, 5, 102, 1882, 8, 102, 10, 102, 12, 102, 1885, 9, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1892, 8, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 1905, 8, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1918, 8, 104, 1, 104, 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, 3, 105, 1934, 8, 105, 1, 106, 1, 106, 3, 106, 1938, 8, 106, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 3, 109, 1953, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 3, 110, 1959, 8, 110, 1, 110, 3, 110, 1962, 8, 110, 1, 110, 3, 110, 1965, 8, 110, 1, 110, 3, 110, 1968, 8, 110, 1, 110, 3, 110, 1971, 8, 110, 1, 111, 1, 111, 3, 111, 1975, 8, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 1988, 8, 114, 10, 114, 12, 114, 1991, 9, 114, 3, 114, 1993, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 5, 116, 2002, 8, 116, 10, 116, 12, 116, 2005, 9, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 2018, 8, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2052, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2060, 8, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2065, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2073, 8, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2078, 8, 123, 1, 123, 1, 123, 1, 123, 3, 123, 2083, 8, 123, 1, 124, 1, 124, 1, 124, 5, 124, 2088, 8, 124, 10, 124, 12, 124, 2091, 9, 124, 1, 125, 1, 125, 1, 125, 5, 125, 2096, 8, 125, 10, 125, 12, 125, 2099, 9, 125, 1, 126, 1, 126, 1, 126, 5, 126, 2104, 8, 126, 10, 126, 12, 126, 2107, 9, 126, 1, 127, 1, 127, 1, 127, 5, 127, 2112, 8, 127, 10, 127, 12, 127, 2115, 9, 127, 1, 128, 1, 128, 3, 128, 2119, 8, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 2129, 8, 130, 5, 130, 2131, 8, 130, 10, 130, 12, 130, 2134, 9, 130, 1, 131, 1, 131, 1, 131, 5, 131, 2139, 8, 131, 10, 131, 12, 131, 2142, 9, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 3, 133, 2150, 8, 133, 1, 133, 3, 133, 2153, 8, 133, 1, 134, 1, 134, 3, 134, 2157, 8, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 3, 136, 2164, 8, 136, 1, 137, 1, 137, 1, 138, 1, 138, 3, 138, 2170, 8, 138, 1, 138, 1, 138, 3, 138, 2174, 8, 138, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 2180, 8, 139, 1, 140, 1, 140, 3, 140, 2184, 8, 140, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 3, 143, 2196, 8, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 2205, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 3, 144, 2216, 8, 144, 1, 145, 1, 145, 3, 145, 2220, 8, 145, 1, 146, 1, 146, 1, 146, 5, 146, 2225, 8, 146, 10, 146, 12, 146, 2228, 9, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 5, 148, 2237, 8, 148, 10, 148, 12, 148, 2240, 9, 148, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 3, 151, 2249, 8, 151, 1, 151, 3, 151, 2252, 8, 151, 1, 152, 1, 152, 1, 152, 5, 152, 2257, 8, 152, 10, 152, 12, 152, 2260, 9, 152, 1, 153, 1, 153, 1, 153, 3, 153, 2265, 8, 153, 1, 154, 1, 154, 3, 154, 2269, 8, 154, 1, 154, 3, 154, 2272, 8, 154, 1, 154, 3, 154, 2275, 8, 154, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 2281, 8, 155, 1, 156, 1, 156, 3, 156, 2285, 8, 156, 1, 157, 1, 157, 3, 157, 2289, 8, 157, 1, 158, 1, 158, 1, 158, 3, 158, 2294, 8, 158, 1, 158, 1, 158, 3, 158, 2298, 8, 158, 1, 159, 1, 159, 3, 159, 2302, 8, 159, 1, 160, 1, 160, 3, 160, 2306, 8, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 3, 160, 2314, 8, 160, 1, 161, 1, 161, 3, 161, 2318, 8, 161, 1, 161, 1, 161, 3, 161, 2322, 8, 161, 1, 162, 1, 162, 3, 162, 2326, 8, 162, 1, 163, 1, 163, 3, 163, 2330, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2338, 8, 163, 1, 164, 1, 164, 3, 164, 2342, 8, 164, 1, 164, 1, 164, 3, 164, 2346, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2354, 8, 165, 1, 166, 1, 166, 1, 166, 3, 166, 2359, 8, 166, 1, 167, 1, 167, 1, 167, 3, 167, 2364, 8, 167, 1, 168, 1, 168, 3, 168, 2368, 8, 168, 1, 169, 1, 169, 3, 169, 2372, 8, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 3, 170, 2379, 8, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 5, 172, 2386, 8, 172, 10, 172, 12, 172, 2389, 9, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2396, 8, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2408, 8, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2426, 8, 174, 1, 174, 3, 174, 2429, 8, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2435, 8, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 3, 179, 2461, 8, 179, 1, 180, 3, 180, 2464, 8, 180, 1, 180, 1, 180, 1, 181, 1, 181, 3, 181, 2470, 8, 181, 1, 182, 1, 182, 1, 182, 1, 182, 5, 182, 2476, 8, 182, 10, 182, 12, 182, 2479, 9, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 3, 183, 2486, 8, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 5, 184, 2497, 8, 184, 10, 184, 12, 184, 2500, 9, 184, 1, 185, 1, 185, 1, 185, 1, 185, 3, 185, 2506, 8, 185, 1, 185, 3, 185, 2509, 8, 185, 1, 185, 3, 185, 2512, 8, 185, 1, 185, 3, 185, 2515, 8, 185, 1, 185, 3, 185, 2518, 8, 185, 1, 185, 3, 185, 2521, 8, 185, 1, 185, 3, 185, 2524, 8, 185, 1, 185, 3, 185, 2527, 8, 185, 1, 185, 3, 185, 2530, 8, 185, 1, 185, 3, 185, 2533, 8, 185, 1, 185, 3, 185, 2536, 8, 185, 1, 185, 1, 185, 1, 185, 3, 185, 2541, 8, 185, 1, 185, 3, 185, 2544, 8, 185, 1, 185, 3, 185, 2547, 8, 185, 1, 185, 3, 185, 2550, 8, 185, 1, 185, 3, 185, 2553, 8, 185, 1, 185, 3, 185, 2556, 8, 185, 1, 185, 3, 185, 2559, 8, 185, 1, 185, 3, 185, 2562, 8, 185, 1, 185, 3, 185, 2565, 8, 185, 1, 185, 3, 185, 2568, 8, 185, 1, 185, 3, 185, 2571, 8, 185, 3, 185, 2573, 8, 185, 1, 186, 1, 186, 1, 186, 1, 186, 3, 186, 2579, 8, 186, 1, 187, 1, 187, 3, 187, 2583, 8, 187, 1, 187, 3, 187, 2586, 8, 187, 1, 187, 3, 187, 2589, 8, 187, 1, 187, 3, 187, 2592, 8, 187, 1, 187, 3, 187, 2595, 8, 187, 1, 187, 3, 187, 2598, 8, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 3, 187, 2605, 8, 187, 1, 188, 1, 188, 3, 188, 2609, 8, 188, 1, 188, 3, 188, 2612, 8, 188, 1, 188, 3, 188, 2615, 8, 188, 1, 188, 3, 188, 2618, 8, 188, 1, 188, 3, 188, 2621, 8, 188, 1, 188, 3, 188, 2624, 8, 188, 1, 189, 1, 189, 1, 189, 4, 189, 2629, 8, 189, 11, 189, 12, 189, 2630, 1, 190, 3, 190, 2634, 8, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 2642, 8, 191, 1, 191, 1, 191, 3, 191, 2646, 8, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 2653, 8, 191, 3, 191, 2655, 8, 191, 1, 192, 3, 192, 2658, 8, 192, 1, 192, 1, 192, 1, 192, 3, 192, 2663, 8, 192, 1, 192, 3, 192, 2666, 8, 192, 1, 192, 1, 192, 3, 192, 2670, 8, 192, 1, 193, 1, 193, 1, 193, 3, 193, 2675, 8, 193, 1, 193, 1, 193, 1, 193, 1, 193, 3, 193, 2681, 8, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 3, 195, 2689, 8, 195, 1, 196, 1, 196, 1, 196, 1, 196, 5, 196, 2695, 8, 196, 10, 196, 12, 196, 2698, 9, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 5, 197, 2705, 8, 197, 10, 197, 12, 197, 2708, 9, 197, 3, 197, 2710, 8, 197, 1, 197, 1, 197, 3, 197, 2714, 8, 197, 1, 197, 1, 197, 3, 197, 2718, 8, 197, 1, 197, 1, 197, 1, 197, 3, 197, 2723, 8, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 2730, 8, 198, 1, 199, 1, 199, 5, 199, 2734, 8, 199, 10, 199, 12, 199, 2737, 9, 199, 1, 199, 3, 199, 2740, 8, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2747, 8, 200, 1, 200, 1, 200, 1, 200, 3, 200, 2752, 8, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 3, 201, 2765, 8, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 3, 202, 2773, 8, 202, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 2792, 8, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 2802, 8, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 2815, 8, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2825, 8, 207, 1, 207, 1, 207, 3, 207, 2829, 8, 207, 4, 207, 2831, 8, 207, 11, 207, 12, 207, 2832, 1, 207, 1, 207, 5, 207, 2837, 8, 207, 10, 207, 12, 207, 2840, 9, 207, 1, 207, 1, 207, 5, 207, 2844, 8, 207, 10, 207, 12, 207, 2847, 9, 207, 1, 207, 1, 207, 5, 207, 2851, 8, 207, 10, 207, 12, 207, 2854, 9, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2862, 8, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2869, 8, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2889, 8, 207, 1, 207, 3, 207, 2892, 8, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 3, 207, 2906, 8, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2921, 8, 208, 1, 208, 1, 208, 3, 208, 2925, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 5, 208, 2943, 8, 208, 10, 208, 12, 208, 2946, 9, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2957, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2963, 8, 208, 1, 208, 3, 208, 2966, 8, 208, 1, 208, 3, 208, 2969, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2975, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2981, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2988, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 2996, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3002, 8, 208, 1, 208, 1, 208, 3, 208, 3006, 8, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3011, 8, 208, 1, 208, 3, 208, 3014, 8, 208, 1, 208, 1, 208, 3, 208, 3018, 8, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3025, 8, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3030, 8, 208, 1, 208, 1, 208, 1, 208, 3, 208, 3035, 8, 208, 1, 208, 3, 208, 3038, 8, 208, 3, 208, 3040, 8, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 3, 209, 3048, 8, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 3, 209, 3056, 8, 209, 1, 209, 1, 209, 3, 209, 3060, 8, 209, 4, 209, 3062, 8, 209, 11, 209, 12, 209, 3063, 1, 209, 1, 209, 3, 209, 3068, 8, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 3085, 8, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 3, 211, 3102, 8, 211, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 3, 213, 3109, 8, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 5, 213, 3116, 8, 213, 10, 213, 12, 213, 3119, 9, 213, 1, 213, 1, 213, 3, 213, 3123, 8, 213, 1, 213, 3, 213, 3126, 8, 213, 1, 213, 3, 213, 3129, 8, 213, 1, 214, 1, 214, 3, 214, 3133, 8, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 3, 215, 3148, 8, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 3162, 8, 216, 1, 216, 3, 216, 3165, 8, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 3, 217, 3176, 8, 217, 1, 218, 1, 218, 3, 218, 3180, 8, 218, 1, 218, 3, 218, 3183, 8, 218, 1, 218, 3, 218, 3186, 8, 218, 1, 218, 1, 218, 3, 218, 3190, 8, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3195, 8, 218, 1, 218, 3, 218, 3198, 8, 218, 1, 218, 3, 218, 3201, 8, 218, 1, 218, 3, 218, 3204, 8, 218, 1, 218, 3, 218, 3207, 8, 218, 1, 218, 3, 218, 3210, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3216, 8, 218, 1, 218, 3, 218, 3219, 8, 218, 1, 218, 3, 218, 3222, 8, 218, 1, 218, 3, 218, 3225, 8, 218, 1, 218, 3, 218, 3228, 8, 218, 1, 218, 3, 218, 3231, 8, 218, 1, 218, 3, 218, 3234, 8, 218, 1, 218, 3, 218, 3237, 8, 218, 1, 218, 3, 218, 3240, 8, 218, 1, 218, 3, 218, 3243, 8, 218, 1, 218, 1, 218, 3, 218, 3247, 8, 218, 3, 218, 3249, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3255, 8, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3260, 8, 218, 1, 218, 3, 218, 3263, 8, 218, 1, 218, 3, 218, 3266, 8, 218, 1, 218, 3, 218, 3269, 8, 218, 1, 218, 3, 218, 3272, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 3278, 8, 218, 1, 218, 3, 218, 3281, 8, 218, 1, 218, 3, 218, 3284, 8, 218, 1, 218, 3, 218, 3287, 8, 218, 1, 218, 3, 218, 3290, 8, 218, 1, 218, 3, 218, 3293, 8, 218, 1, 218, 3, 218, 3296, 8, 218, 1, 218, 3, 218, 3299, 8, 218, 1, 218, 3, 218, 3302, 8, 218, 1, 218, 3, 218, 3305, 8, 218, 1, 218, 1, 218, 3, 218, 3309, 8, 218, 3, 218, 3311, 8, 218, 3, 218, 3313, 8, 218, 1, 219, 1, 219, 1, 219, 3, 219, 3318, 8, 219, 1, 219, 1, 219, 1, 219, 3, 219, 3323, 8, 219, 1, 219, 1, 219, 3, 219, 3327, 8, 219, 1, 219, 1, 219, 3, 219, 3331, 8, 219, 1, 219, 1, 219, 1, 219, 3, 219, 3336, 8, 219, 1, 220, 1, 220, 1, 220, 3, 220, 3341, 8, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 5, 221, 3348, 8, 221, 10, 221, 12, 221, 3351, 9, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 5, 222, 3358, 8, 222, 10, 222, 12, 222, 3361, 9, 222, 1, 223, 1, 223, 1, 223, 5, 223, 3366, 8, 223, 10, 223, 12, 223, 3369, 9, 223, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 4, 225, 3378, 8, 225, 11, 225, 12, 225, 3379, 1, 225, 3, 225, 3383, 8, 225, 1, 226, 1, 226, 5, 226, 3387, 8, 226, 10, 226, 12, 226, 3390, 9, 226, 1, 226, 1, 226, 5, 226, 3394, 8, 226, 10, 226, 12, 226, 3397, 9, 226, 1, 226, 1, 226, 5, 226, 3401, 8, 226, 10, 226, 12, 226, 3404, 9, 226, 1, 226, 1, 226, 5, 226, 3408, 8, 226, 10, 226, 12, 226, 3411, 9, 226, 1, 226, 1, 226, 1, 226, 1, 226, 3, 226, 3417, 8, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 3, 227, 3426, 8, 227, 5, 227, 3428, 8, 227, 10, 227, 12, 227, 3431, 9, 227, 1, 228, 1, 228, 1, 228, 1, 228, 3, 228, 3437, 8, 228, 1, 228, 5, 228, 3440, 8, 228, 10, 228, 12, 228, 3443, 9, 228, 1, 229, 3, 229, 3446, 8, 229, 1, 229, 1, 229, 3, 229, 3450, 8, 229, 1, 229, 3, 229, 3453, 8, 229, 1, 229, 3, 229, 3456, 8, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 3, 230, 3467, 8, 230, 1, 230, 1, 230, 3, 230, 3471, 8, 230, 3, 230, 3473, 8, 230, 1, 230, 3, 230, 3476, 8, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 3487, 8, 231, 10, 231, 12, 231, 3490, 9, 231, 3, 231, 3492, 8, 231, 1, 231, 3, 231, 3495, 8, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 3505, 8, 231, 10, 231, 12, 231, 3508, 9, 231, 3, 231, 3510, 8, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 3, 231, 3517, 8, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 5, 231, 3524, 8, 231, 10, 231, 12, 231, 3527, 9, 231, 1, 231, 1, 231, 3, 231, 3531, 8, 231, 3, 231, 3533, 8, 231, 3, 231, 3535, 8, 231, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 5, 233, 3550, 8, 233, 10, 233, 12, 233, 3553, 9, 233, 3, 233, 3555, 8, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 3, 233, 3563, 8, 233, 1, 233, 3, 233, 3566, 8, 233, 1, 234, 1, 234, 3, 234, 3570, 8, 234, 1, 234, 3, 234, 3573, 8, 234, 1, 234, 3, 234, 3576, 8, 234, 1, 234, 3, 234, 3579, 8, 234, 1, 234, 3, 234, 3582, 8, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 3, 235, 3594, 8, 235, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 3, 238, 3602, 8, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 3, 239, 3609, 8, 239, 1, 239, 3, 239, 3612, 8, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 3, 240, 3619, 8, 240, 1, 240, 3, 240, 3622, 8, 240, 1, 241, 1, 241, 1, 241, 3, 241, 3627, 8, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 3, 242, 3634, 8, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 3, 243, 3642, 8, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 3, 244, 3650, 8, 244, 1, 244, 1, 244, 1, 244, 3, 244, 3655, 8, 244, 1, 244, 1, 244, 3, 244, 3659, 8, 244, 1, 245, 1, 245, 1, 245, 3, 245, 3664, 8, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 3, 246, 3671, 8, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 5, 246, 3683, 8, 246, 10, 246, 12, 246, 3686, 9, 246, 3, 246, 3688, 8, 246, 1, 246, 1, 246, 3, 246, 3692, 8, 246, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 5, 248, 3701, 8, 248, 10, 248, 12, 248, 3704, 9, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 5, 248, 3711, 8, 248, 10, 248, 12, 248, 3714, 9, 248, 3, 248, 3716, 8, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 3, 249, 3723, 8, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 5, 249, 3730, 8, 249, 10, 249, 12, 249, 3733, 9, 249, 3, 249, 3735, 8, 249, 1, 249, 1, 249, 1, 250, 1, 250, 3, 250, 3741, 8, 250, 1, 250, 3, 250, 3744, 8, 250, 1, 250, 1, 250, 1, 250, 5, 250, 3749, 8, 250, 10, 250, 12, 250, 3752, 9, 250, 1, 250, 1, 250, 3, 250, 3756, 8, 250, 1, 250, 3, 250, 3759, 8, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 3, 251, 3772, 8, 251, 1, 251, 1, 251, 1, 251, 1, 251, 3, 251, 3778, 8, 251, 3, 251, 3780, 8, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 3, 252, 3788, 8, 252, 1, 252, 3, 252, 3791, 8, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 5, 252, 3799, 8, 252, 10, 252, 12, 252, 3802, 9, 252, 1, 252, 1, 252, 3, 252, 3806, 8, 252, 3, 252, 3808, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 3, 253, 3820, 8, 253, 1, 253, 1, 253, 1, 253, 1, 253, 3, 253, 3826, 8, 253, 3, 253, 3828, 8, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 3, 254, 3835, 8, 254, 1, 255, 1, 255, 1, 255, 5, 255, 3840, 8, 255, 10, 255, 12, 255, 3843, 9, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 5, 256, 3854, 8, 256, 10, 256, 12, 256, 3857, 9, 256, 1, 257, 1, 257, 1, 257, 3, 257, 3862, 8, 257, 1, 257, 3, 257, 3865, 8, 257, 1, 257, 3, 257, 3868, 8, 257, 1, 257, 3, 257, 3871, 8, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 3, 258, 3880, 8, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 3, 258, 3887, 8, 258, 1, 259, 1, 259, 1, 259, 1, 259, 3, 259, 3893, 8, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 3, 260, 3902, 8, 260, 1, 261, 1, 261, 3, 261, 3906, 8, 261, 1, 261, 1, 261, 1, 261, 1, 261, 5, 261, 3912, 8, 261, 10, 261, 12, 261, 3915, 9, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 3, 262, 3924, 8, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 5, 262, 3932, 8, 262, 10, 262, 12, 262, 3935, 9, 262, 1, 262, 1, 262, 3, 262, 3939, 8, 262, 1, 263, 1, 263, 3, 263, 3943, 8, 263, 1, 263, 1, 263, 5, 263, 3947, 8, 263, 10, 263, 12, 263, 3950, 9, 263, 1, 263, 1, 263, 3, 263, 3954, 8, 263, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 3, 266, 3964, 8, 266, 1, 267, 1, 267, 3, 267, 3968, 8, 267, 1, 267, 3, 267, 3971, 8, 267, 1, 267, 1, 267, 1, 267, 3, 267, 3976, 8, 267, 1, 267, 3, 267, 3979, 8, 267, 5, 267, 3981, 8, 267, 10, 267, 12, 267, 3984, 9, 267, 1, 268, 1, 268, 3, 268, 3988, 8, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 4, 270, 3997, 8, 270, 11, 270, 12, 270, 3998, 3, 270, 4001, 8, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 5, 271, 4008, 8, 271, 10, 271, 12, 271, 4011, 9, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 5, 274, 4027, 8, 274, 10, 274, 12, 274, 4030, 9, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 5, 274, 4037, 8, 274, 10, 274, 12, 274, 4040, 9, 274, 3, 274, 4042, 8, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4049, 8, 275, 1, 275, 3, 275, 4052, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4062, 8, 275, 1, 275, 1, 275, 1, 275, 5, 275, 4067, 8, 275, 10, 275, 12, 275, 4070, 9, 275, 3, 275, 4072, 8, 275, 3, 275, 4074, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4085, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 4095, 8, 275, 3, 275, 4097, 8, 275, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 278, 1, 278, 3, 278, 4106, 8, 278, 1, 279, 1, 279, 1, 279, 3, 279, 4111, 8, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 3, 280, 4120, 8, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 4, 281, 4131, 8, 281, 11, 281, 12, 281, 4132, 1, 281, 1, 281, 3, 281, 4137, 8, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 4, 282, 4147, 8, 282, 11, 282, 12, 282, 4148, 1, 282, 1, 282, 3, 282, 4153, 8, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 3, 283, 4162, 8, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 3, 285, 4181, 8, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 5, 286, 4197, 8, 286, 10, 286, 12, 286, 4200, 9, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 3, 286, 4211, 8, 286, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 3, 288, 4226, 8, 288, 1, 288, 1, 288, 3, 288, 4230, 8, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 3, 289, 4246, 8, 289, 1, 290, 1, 290, 1, 290, 5, 290, 4251, 8, 290, 10, 290, 12, 290, 4254, 9, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 1, 291, 3, 291, 4267, 8, 291, 1, 292, 5, 292, 4270, 8, 292, 10, 292, 12, 292, 4273, 9, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 5, 292, 4282, 8, 292, 10, 292, 12, 292, 4285, 9, 292, 1, 293, 1, 293, 1, 293, 5, 293, 4290, 8, 293, 10, 293, 12, 293, 4293, 9, 293, 1, 294, 1, 294, 1, 294, 5, 294, 4298, 8, 294, 10, 294, 12, 294, 4301, 9, 294, 1, 295, 1, 295, 1, 295, 5, 295, 4306, 8, 295, 10, 295, 12, 295, 4309, 9, 295, 1, 296, 1, 296, 1, 296, 5, 296, 4314, 8, 296, 10, 296, 12, 296, 4317, 9, 296, 1, 297, 1, 297, 1, 297, 5, 297, 4322, 8, 297, 10, 297, 12, 297, 4325, 9, 297, 1, 298, 1, 298, 1, 298, 5, 298, 4330, 8, 298, 10, 298, 12, 298, 4333, 9, 298, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 3, 301, 4343, 8, 301, 1, 301, 1, 301, 3, 301, 4347, 8, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 3, 302, 4355, 8, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 3, 303, 4371, 8, 303, 1, 304, 1, 304, 3, 304, 4375, 8, 304, 1, 305, 1, 305, 1, 305, 3, 305, 4380, 8, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 4393, 8, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 5, 308, 4402, 8, 308, 10, 308, 12, 308, 4405, 9, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 3, 309, 4413, 8, 309, 1, 310, 5, 310, 4416, 8, 310, 10, 310, 12, 310, 4419, 9, 310, 1, 310, 1, 310, 1, 310, 3, 310, 4424, 8, 310, 1, 311, 1, 311, 1, 311, 5, 311, 4429, 8, 311, 10, 311, 12, 311, 4432, 9, 311, 1, 312, 1, 312, 3, 312, 4436, 8, 312, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 5, 313, 4443, 8, 313, 10, 313, 12, 313, 4446, 9, 313, 1, 313, 1, 313, 1, 314, 1, 314, 1, 314, 3, 314, 4453, 8, 314, 1, 315, 1, 315, 1, 315, 1, 315, 5, 315, 4459, 8, 315, 10, 315, 12, 315, 4462, 9, 315, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 3, 316, 4469, 8, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 318, 1, 318, 1, 319, 1, 319, 3, 319, 4479, 8, 319, 1, 320, 1, 320, 1, 320, 3, 320, 4484, 8, 320, 1, 321, 1, 321, 1, 322, 1, 322, 1, 323, 1, 323, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 3, 324, 4543, 8, 324, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4549, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4558, 8, 325, 3, 325, 4560, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 5, 325, 4574, 8, 325, 10, 325, 12, 325, 4577, 9, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4584, 8, 325, 1, 325, 1, 325, 3, 325, 4588, 8, 325, 3, 325, 4590, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4596, 8, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4601, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4618, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4644, 8, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4649, 8, 325, 3, 325, 4651, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4679, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4696, 8, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4701, 8, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 4710, 8, 325, 1, 326, 1, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 3, 327, 4721, 8, 327, 1, 328, 1, 328, 1, 328, 5, 328, 4726, 8, 328, 10, 328, 12, 328, 4729, 9, 328, 1, 329, 1, 329, 1, 329, 3, 329, 4734, 8, 329, 1, 330, 1, 330, 1, 330, 3, 330, 4739, 8, 330, 1, 331, 1, 331, 1, 332, 1, 332, 1, 333, 1, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 338, 1, 338, 1, 339, 1, 339, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 5, 341, 4764, 8, 341, 10, 341, 12, 341, 4767, 9, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 343, 1, 343, 1, 343, 1, 343, 3, 343, 4777, 8, 343, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 3, 344, 4791, 8, 344, 1, 345, 1, 345, 1, 345, 5, 345, 4796, 8, 345, 10, 345, 12, 345, 4799, 9, 345, 1, 345, 1, 813, 0, 346, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 0, 61, 2, 0, 57, 57, 172, 172, 4, 0, 91, 91, 121, 121, 226, 226, 325, 325, 1, 0, 395, 396, 2, 0, 50, 50, 346, 346, 2, 0, 34, 34, 282, 282, 1, 0, 89, 90, 2, 0, 139, 139, 154, 154, 2, 0, 67, 67, 295, 295, 2, 0, 68, 68, 296, 296, 1, 0, 155, 156, 2, 0, 114, 114, 307, 307, 11, 0, 7, 7, 9, 9, 58, 58, 86, 86, 101, 101, 155, 155, 161, 161, 190, 190, 299, 299, 309, 309, 365, 365, 3, 0, 4, 4, 101, 101, 326, 326, 3, 0, 15, 15, 128, 128, 170, 170, 1, 0, 141, 142, 2, 0, 30, 30, 351, 351, 2, 0, 217, 217, 373, 373, 2, 0, 214, 214, 272, 272, 2, 0, 18, 18, 89, 89, 2, 0, 130, 130, 177, 177, 2, 0, 39, 39, 376, 376, 4, 0, 112, 112, 164, 164, 205, 205, 356, 356, 2, 0, 7, 7, 96, 96, 2, 0, 125, 125, 350, 350, 2, 0, 225, 225, 391, 391, 2, 0, 42, 42, 315, 315, 2, 0, 189, 189, 196, 196, 2, 0, 426, 426, 431, 431, 2, 0, 140, 140, 285, 285, 3, 0, 12, 12, 231, 231, 300, 300, 2, 0, 241, 241, 292, 292, 2, 0, 198, 198, 268, 268, 2, 0, 260, 260, 292, 292, 2, 0, 354, 354, 431, 431, 2, 0, 133, 133, 247, 247, 2, 0, 152, 152, 281, 281, 3, 0, 413, 414, 418, 418, 420, 420, 2, 0, 412, 412, 415, 417, 1, 0, 413, 414, 4, 0, 184, 184, 270, 270, 286, 286, 408, 411, 2, 0, 7, 7, 13, 13, 3, 0, 7, 7, 13, 13, 313, 313, 3, 0, 184, 184, 270, 270, 286, 286, 4, 0, 125, 125, 219, 219, 350, 350, 360, 360, 2, 0, 405, 405, 407, 411, 24, 0, 11, 11, 16, 16, 25, 28, 35, 35, 100, 100, 131, 132, 151, 151, 154, 154, 162, 163, 184, 184, 198, 198, 216, 216, 228, 228, 264, 264, 270, 270, 286, 286, 311, 311, 323, 324, 340, 340, 357, 357, 383, 383, 405, 417, 419, 421, 423, 423, 85, 0, 1, 6, 8, 8, 10, 10, 15, 15, 18, 20, 22, 24, 30, 31, 33, 34, 37, 38, 40, 44, 46, 47, 49, 50, 52, 53, 56, 57, 59, 59, 66, 66, 68, 68, 72, 77, 79, 79, 83, 85, 87, 89, 91, 95, 97, 99, 103, 104, 106, 107, 109, 111, 114, 116, 118, 121, 127, 130, 137, 138, 142, 142, 147, 150, 152, 152, 155, 156, 158, 160, 168, 170, 172, 177, 182, 183, 185, 187, 189, 193, 195, 197, 199, 202, 204, 204, 206, 209, 211, 212, 214, 215, 217, 218, 220, 220, 222, 223, 226, 227, 232, 233, 235, 236, 238, 240, 243, 246, 252, 252, 254, 255, 257, 259, 261, 262, 265, 267, 271, 282, 284, 284, 287, 288, 293, 298, 300, 303, 305, 310, 312, 312, 314, 317, 319, 325, 327, 328, 330, 330, 332, 334, 339, 340, 342, 342, 344, 346, 349, 349, 352, 353, 355, 355, 357, 357, 360, 364, 366, 368, 371, 373, 375, 375, 377, 382, 385, 385, 388, 394, 13, 0, 16, 16, 26, 28, 63, 64, 71, 71, 100, 100, 131, 131, 145, 145, 151, 151, 162, 163, 198, 198, 264, 264, 311, 311, 337, 337, 2, 0, 4, 4, 101, 101, 2, 0, 9, 9, 58, 58, 3, 0, 14, 14, 144, 144, 369, 369, 1, 0, 106, 107, 1, 0, 94, 95, 1, 0, 392, 393, 1, 0, 208, 209, 1, 0, 381, 382, 1, 0, 73, 74, 1, 0, 148, 149, 1, 0, 206, 207, 1, 0, 297, 298, 1, 0, 80, 82, 5392, 0, 695, 1, 0, 0, 0, 2, 702, 1, 0, 0, 0, 4, 707, 1, 0, 0, 0, 6, 741, 1, 0, 0, 0, 8, 743, 1, 0, 0, 0, 10, 816, 1, 0, 0, 0, 12, 818, 1, 0, 0, 0, 14, 834, 1, 0, 0, 0, 16, 843, 1, 0, 0, 0, 18, 851, 1, 0, 0, 0, 20, 864, 1, 0, 0, 0, 22, 875, 1, 0, 0, 0, 24, 880, 1, 0, 0, 0, 26, 891, 1, 0, 0, 0, 28, 954, 1, 0, 0, 0, 30, 956, 1, 0, 0, 0, 32, 959, 1, 0, 0, 0, 34, 963, 1, 0, 0, 0, 36, 965, 1, 0, 0, 0, 38, 968, 1, 0, 0, 0, 40, 971, 1, 0, 0, 0, 42, 1015, 1, 0, 0, 0, 44, 1017, 1, 0, 0, 0, 46, 1020, 1, 0, 0, 0, 48, 1023, 1, 0, 0, 0, 50, 1032, 1, 0, 0, 0, 52, 1035, 1, 0, 0, 0, 54, 1050, 1, 0, 0, 0, 56, 1062, 1, 0, 0, 0, 58, 1067, 1, 0, 0, 0, 60, 1087, 1, 0, 0, 0, 62, 1091, 1, 0, 0, 0, 64, 1098, 1, 0, 0, 0, 66, 1123, 1, 0, 0, 0, 68, 1140, 1, 0, 0, 0, 70, 1142, 1, 0, 0, 0, 72, 1327, 1, 0, 0, 0, 74, 1337, 1, 0, 0, 0, 76, 1339, 1, 0, 0, 0, 78, 1344, 1, 0, 0, 0, 80, 1349, 1, 0, 0, 0, 82, 1351, 1, 0, 0, 0, 84, 1355, 1, 0, 0, 0, 86, 1359, 1, 0, 0, 0, 88, 1363, 1, 0, 0, 0, 90, 1367, 1, 0, 0, 0, 92, 1377, 1, 0, 0, 0, 94, 1388, 1, 0, 0, 0, 96, 1405, 1, 0, 0, 0, 98, 1423, 1, 0, 0, 0, 100, 1428, 1, 0, 0, 0, 102, 1431, 1, 0, 0, 0, 104, 1435, 1, 0, 0, 0, 106, 1442, 1, 0, 0, 0, 108, 1451, 1, 0, 0, 0, 110, 1457, 1, 0, 0, 0, 112, 1459, 1, 0, 0, 0, 114, 1473, 1, 0, 0, 0, 116, 1495, 1, 0, 0, 0, 118, 1497, 1, 0, 0, 0, 120, 1505, 1, 0, 0, 0, 122, 1512, 1, 0, 0, 0, 124, 1514, 1, 0, 0, 0, 126, 1528, 1, 0, 0, 0, 128, 1535, 1, 0, 0, 0, 130, 1537, 1, 0, 0, 0, 132, 1541, 1, 0, 0, 0, 134, 1545, 1, 0, 0, 0, 136, 1549, 1, 0, 0, 0, 138, 1553, 1, 0, 0, 0, 140, 1566, 1, 0, 0, 0, 142, 1574, 1, 0, 0, 0, 144, 1577, 1, 0, 0, 0, 146, 1579, 1, 0, 0, 0, 148, 1591, 1, 0, 0, 0, 150, 1601, 1, 0, 0, 0, 152, 1604, 1, 0, 0, 0, 154, 1615, 1, 0, 0, 0, 156, 1623, 1, 0, 0, 0, 158, 1666, 1, 0, 0, 0, 160, 1675, 1, 0, 0, 0, 162, 1703, 1, 0, 0, 0, 164, 1716, 1, 0, 0, 0, 166, 1718, 1, 0, 0, 0, 168, 1724, 1, 0, 0, 0, 170, 1727, 1, 0, 0, 0, 172, 1733, 1, 0, 0, 0, 174, 1739, 1, 0, 0, 0, 176, 1746, 1, 0, 0, 0, 178, 1780, 1, 0, 0, 0, 180, 1788, 1, 0, 0, 0, 182, 1801, 1, 0, 0, 0, 184, 1806, 1, 0, 0, 0, 186, 1817, 1, 0, 0, 0, 188, 1834, 1, 0, 0, 0, 190, 1836, 1, 0, 0, 0, 192, 1841, 1, 0, 0, 0, 194, 1848, 1, 0, 0, 0, 196, 1850, 1, 0, 0, 0, 198, 1853, 1, 0, 0, 0, 200, 1856, 1, 0, 0, 0, 202, 1870, 1, 0, 0, 0, 204, 1878, 1, 0, 0, 0, 206, 1904, 1, 0, 0, 0, 208, 1906, 1, 0, 0, 0, 210, 1923, 1, 0, 0, 0, 212, 1937, 1, 0, 0, 0, 214, 1939, 1, 0, 0, 0, 216, 1942, 1, 0, 0, 0, 218, 1945, 1, 0, 0, 0, 220, 1954, 1, 0, 0, 0, 222, 1974, 1, 0, 0, 0, 224, 1976, 1, 0, 0, 0, 226, 1979, 1, 0, 0, 0, 228, 1992, 1, 0, 0, 0, 230, 1994, 1, 0, 0, 0, 232, 1998, 1, 0, 0, 0, 234, 2006, 1, 0, 0, 0, 236, 2010, 1, 0, 0, 0, 238, 2019, 1, 0, 0, 0, 240, 2025, 1, 0, 0, 0, 242, 2031, 1, 0, 0, 0, 244, 2036, 1, 0, 0, 0, 246, 2082, 1, 0, 0, 0, 248, 2084, 1, 0, 0, 0, 250, 2092, 1, 0, 0, 0, 252, 2100, 1, 0, 0, 0, 254, 2108, 1, 0, 0, 0, 256, 2118, 1, 0, 0, 0, 258, 2120, 1, 0, 0, 0, 260, 2122, 1, 0, 0, 0, 262, 2135, 1, 0, 0, 0, 264, 2143, 1, 0, 0, 0, 266, 2152, 1, 0, 0, 0, 268, 2156, 1, 0, 0, 0, 270, 2158, 1, 0, 0, 0, 272, 2163, 1, 0, 0, 0, 274, 2165, 1, 0, 0, 0, 276, 2169, 1, 0, 0, 0, 278, 2175, 1, 0, 0, 0, 280, 2183, 1, 0, 0, 0, 282, 2185, 1, 0, 0, 0, 284, 2188, 1, 0, 0, 0, 286, 2195, 1, 0, 0, 0, 288, 2206, 1, 0, 0, 0, 290, 2219, 1, 0, 0, 0, 292, 2221, 1, 0, 0, 0, 294, 2229, 1, 0, 0, 0, 296, 2233, 1, 0, 0, 0, 298, 2241, 1, 0, 0, 0, 300, 2243, 1, 0, 0, 0, 302, 2246, 1, 0, 0, 0, 304, 2253, 1, 0, 0, 0, 306, 2261, 1, 0, 0, 0, 308, 2268, 1, 0, 0, 0, 310, 2276, 1, 0, 0, 0, 312, 2284, 1, 0, 0, 0, 314, 2288, 1, 0, 0, 0, 316, 2290, 1, 0, 0, 0, 318, 2301, 1, 0, 0, 0, 320, 2305, 1, 0, 0, 0, 322, 2317, 1, 0, 0, 0, 324, 2325, 1, 0, 0, 0, 326, 2329, 1, 0, 0, 0, 328, 2341, 1, 0, 0, 0, 330, 2353, 1, 0, 0, 0, 332, 2358, 1, 0, 0, 0, 334, 2363, 1, 0, 0, 0, 336, 2365, 1, 0, 0, 0, 338, 2369, 1, 0, 0, 0, 340, 2373, 1, 0, 0, 0, 342, 2380, 1, 0, 0, 0, 344, 2382, 1, 0, 0, 0, 346, 2395, 1, 0, 0, 0, 348, 2434, 1, 0, 0, 0, 350, 2436, 1, 0, 0, 0, 352, 2441, 1, 0, 0, 0, 354, 2446, 1, 0, 0, 0, 356, 2453, 1, 0, 0, 0, 358, 2458, 1, 0, 0, 0, 360, 2463, 1, 0, 0, 0, 362, 2469, 1, 0, 0, 0, 364, 2471, 1, 0, 0, 0, 366, 2480, 1, 0, 0, 0, 368, 2492, 1, 0, 0, 0, 370, 2572, 1, 0, 0, 0, 372, 2578, 1, 0, 0, 0, 374, 2604, 1, 0, 0, 0, 376, 2606, 1, 0, 0, 0, 378, 2628, 1, 0, 0, 0, 380, 2633, 1, 0, 0, 0, 382, 2637, 1, 0, 0, 0, 384, 2669, 1, 0, 0, 0, 386, 2671, 1, 0, 0, 0, 388, 2682, 1, 0, 0, 0, 390, 2688, 1, 0, 0, 0, 392, 2690, 1, 0, 0, 0, 394, 2722, 1, 0, 0, 0, 396, 2729, 1, 0, 0, 0, 398, 2735, 1, 0, 0, 0, 400, 2741, 1, 0, 0, 0, 402, 2756, 1, 0, 0, 0, 404, 2766, 1, 0, 0, 0, 406, 2774, 1, 0, 0, 0, 408, 2777, 1, 0, 0, 0, 410, 2780, 1, 0, 0, 0, 412, 2783, 1, 0, 0, 0, 414, 2905, 1, 0, 0, 0, 416, 3039, 1, 0, 0, 0, 418, 3067, 1, 0, 0, 0, 420, 3084, 1, 0, 0, 0, 422, 3101, 1, 0, 0, 0, 424, 3103, 1, 0, 0, 0, 426, 3106, 1, 0, 0, 0, 428, 3132, 1, 0, 0, 0, 430, 3137, 1, 0, 0, 0, 432, 3164, 1, 0, 0, 0, 434, 3175, 1, 0, 0, 0, 436, 3312, 1, 0, 0, 0, 438, 3314, 1, 0, 0, 0, 440, 3337, 1, 0, 0, 0, 442, 3349, 1, 0, 0, 0, 444, 3354, 1, 0, 0, 0, 446, 3362, 1, 0, 0, 0, 448, 3370, 1, 0, 0, 0, 450, 3382, 1, 0, 0, 0, 452, 3416, 1, 0, 0, 0, 454, 3418, 1, 0, 0, 0, 456, 3436, 1, 0, 0, 0, 458, 3445, 1, 0, 0, 0, 460, 3475, 1, 0, 0, 0, 462, 3534, 1, 0, 0, 0, 464, 3536, 1, 0, 0, 0, 466, 3565, 1, 0, 0, 0, 468, 3567, 1, 0, 0, 0, 470, 3583, 1, 0, 0, 0, 472, 3595, 1, 0, 0, 0, 474, 3597, 1, 0, 0, 0, 476, 3601, 1, 0, 0, 0, 478, 3611, 1, 0, 0, 0, 480, 3621, 1, 0, 0, 0, 482, 3626, 1, 0, 0, 0, 484, 3633, 1, 0, 0, 0, 486, 3637, 1, 0, 0, 0, 488, 3658, 1, 0, 0, 0, 490, 3663, 1, 0, 0, 0, 492, 3665, 1, 0, 0, 0, 494, 3693, 1, 0, 0, 0, 496, 3696, 1, 0, 0, 0, 498, 3717, 1, 0, 0, 0, 500, 3758, 1, 0, 0, 0, 502, 3760, 1, 0, 0, 0, 504, 3807, 1, 0, 0, 0, 506, 3809, 1, 0, 0, 0, 508, 3834, 1, 0, 0, 0, 510, 3836, 1, 0, 0, 0, 512, 3844, 1, 0, 0, 0, 514, 3870, 1, 0, 0, 0, 516, 3872, 1, 0, 0, 0, 518, 3892, 1, 0, 0, 0, 520, 3894, 1, 0, 0, 0, 522, 3905, 1, 0, 0, 0, 524, 3918, 1, 0, 0, 0, 526, 3953, 1, 0, 0, 0, 528, 3955, 1, 0, 0, 0, 530, 3958, 1, 0, 0, 0, 532, 3963, 1, 0, 0, 0, 534, 3965, 1, 0, 0, 0, 536, 3987, 1, 0, 0, 0, 538, 3989, 1, 0, 0, 0, 540, 3993, 1, 0, 0, 0, 542, 4002, 1, 0, 0, 0, 544, 4012, 1, 0, 0, 0, 546, 4016, 1, 0, 0, 0, 548, 4020, 1, 0, 0, 0, 550, 4096, 1, 0, 0, 0, 552, 4098, 1, 0, 0, 0, 554, 4101, 1, 0, 0, 0, 556, 4105, 1, 0, 0, 0, 558, 4110, 1, 0, 0, 0, 560, 4112, 1, 0, 0, 0, 562, 4123, 1, 0, 0, 0, 564, 4140, 1, 0, 0, 0, 566, 4156, 1, 0, 0, 0, 568, 4165, 1, 0, 0, 0, 570, 4180, 1, 0, 0, 0, 572, 4210, 1, 0, 0, 0, 574, 4212, 1, 0, 0, 0, 576, 4229, 1, 0, 0, 0, 578, 4245, 1, 0, 0, 0, 580, 4247, 1, 0, 0, 0, 582, 4266, 1, 0, 0, 0, 584, 4271, 1, 0, 0, 0, 586, 4286, 1, 0, 0, 0, 588, 4294, 1, 0, 0, 0, 590, 4302, 1, 0, 0, 0, 592, 4310, 1, 0, 0, 0, 594, 4318, 1, 0, 0, 0, 596, 4326, 1, 0, 0, 0, 598, 4334, 1, 0, 0, 0, 600, 4336, 1, 0, 0, 0, 602, 4346, 1, 0, 0, 0, 604, 4354, 1, 0, 0, 0, 606, 4370, 1, 0, 0, 0, 608, 4374, 1, 0, 0, 0, 610, 4379, 1, 0, 0, 0, 612, 4381, 1, 0, 0, 0, 614, 4392, 1, 0, 0, 0, 616, 4394, 1, 0, 0, 0, 618, 4412, 1, 0, 0, 0, 620, 4417, 1, 0, 0, 0, 622, 4425, 1, 0, 0, 0, 624, 4433, 1, 0, 0, 0, 626, 4437, 1, 0, 0, 0, 628, 4449, 1, 0, 0, 0, 630, 4454, 1, 0, 0, 0, 632, 4465, 1, 0, 0, 0, 634, 4472, 1, 0, 0, 0, 636, 4474, 1, 0, 0, 0, 638, 4478, 1, 0, 0, 0, 640, 4480, 1, 0, 0, 0, 642, 4485, 1, 0, 0, 0, 644, 4487, 1, 0, 0, 0, 646, 4489, 1, 0, 0, 0, 648, 4542, 1, 0, 0, 0, 650, 4709, 1, 0, 0, 0, 652, 4711, 1, 0, 0, 0, 654, 4720, 1, 0, 0, 0, 656, 4722, 1, 0, 0, 0, 658, 4733, 1, 0, 0, 0, 660, 4735, 1, 0, 0, 0, 662, 4740, 1, 0, 0, 0, 664, 4742, 1, 0, 0, 0, 666, 4744, 1, 0, 0, 0, 668, 4746, 1, 0, 0, 0, 670, 4748, 1, 0, 0, 0, 672, 4750, 1, 0, 0, 0, 674, 4752, 1, 0, 0, 0, 676, 4754, 1, 0, 0, 0, 678, 4756, 1, 0, 0, 0, 680, 4758, 1, 0, 0, 0, 682, 4760, 1, 0, 0, 0, 684, 4768, 1, 0, 0, 0, 686, 4776, 1, 0, 0, 0, 688, 4790, 1, 0, 0, 0, 690, 4792, 1, 0, 0, 0, 692, 694, 3, 2, 1, 0, 693, 692, 1, 0, 0, 0, 694, 697, 1, 0, 0, 0, 695, 693, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 698, 1, 0, 0, 0, 697, 695, 1, 0, 0, 0, 698, 699, 5, 0, 0, 1, 699, 1, 1, 0, 0, 0, 700, 703, 3, 4, 2, 0, 701, 703, 3, 10, 5, 0, 702, 700, 1, 0, 0, 0, 702, 701, 1, 0, 0, 0, 703, 705, 1, 0, 0, 0, 704, 706, 5, 398, 0, 0, 705, 704, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 3, 1, 0, 0, 0, 707, 717, 5, 119, 0, 0, 708, 710, 3, 6, 3, 0, 709, 708, 1, 0, 0, 0, 710, 713, 1, 0, 0, 0, 711, 709, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 714, 1, 0, 0, 0, 713, 711, 1, 0, 0, 0, 714, 718, 3, 10, 5, 0, 715, 716, 5, 284, 0, 0, 716, 718, 3, 360, 180, 0, 717, 711, 1, 0, 0, 0, 717, 715, 1, 0, 0, 0, 718, 5, 1, 0, 0, 0, 719, 742, 5, 122, 0, 0, 720, 742, 5, 138, 0, 0, 721, 742, 5, 88, 0, 0, 722, 724, 5, 37, 0, 0, 723, 725, 7, 0, 0, 0, 724, 723, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 742, 1, 0, 0, 0, 726, 742, 5, 192, 0, 0, 727, 742, 5, 21, 0, 0, 728, 742, 5, 10, 0, 0, 729, 742, 5, 275, 0, 0, 730, 742, 5, 191, 0, 0, 731, 742, 5, 19, 0, 0, 732, 734, 5, 377, 0, 0, 733, 735, 5, 225, 0, 0, 734, 733, 1, 0, 0, 0, 734, 735, 1, 0, 0, 0, 735, 737, 1, 0, 0, 0, 736, 738, 3, 8, 4, 0, 737, 736, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 742, 1, 0, 0, 0, 739, 742, 5, 79, 0, 0, 740, 742, 5, 78, 0, 0, 741, 719, 1, 0, 0, 0, 741, 720, 1, 0, 0, 0, 741, 721, 1, 0, 0, 0, 741, 722, 1, 0, 0, 0, 741, 726, 1, 0, 0, 0, 741, 727, 1, 0, 0, 0, 741, 728, 1, 0, 0, 0, 741, 729, 1, 0, 0, 0, 741, 730, 1, 0, 0, 0, 741, 731, 1, 0, 0, 0, 741, 732, 1, 0, 0, 0, 741, 739, 1, 0, 0, 0, 741, 740, 1, 0, 0, 0, 742, 7, 1, 0, 0, 0, 743, 744, 7, 1, 0, 0, 744, 9, 1, 0, 0, 0, 745, 817, 3, 360, 180, 0, 746, 817, 3, 12, 6, 0, 747, 817, 3, 16, 8, 0, 748, 817, 3, 18, 9, 0, 749, 817, 3, 20, 10, 0, 750, 817, 3, 24, 12, 0, 751, 752, 5, 277, 0, 0, 752, 753, 5, 320, 0, 0, 753, 756, 3, 472, 236, 0, 754, 755, 5, 387, 0, 0, 755, 757, 3, 230, 115, 0, 756, 754, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 817, 1, 0, 0, 0, 758, 817, 3, 28, 14, 0, 759, 760, 5, 86, 0, 0, 760, 761, 5, 139, 0, 0, 761, 763, 3, 478, 239, 0, 762, 764, 3, 494, 247, 0, 763, 762, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 817, 1, 0, 0, 0, 765, 766, 5, 365, 0, 0, 766, 767, 3, 478, 239, 0, 767, 769, 3, 392, 196, 0, 768, 770, 3, 494, 247, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 817, 1, 0, 0, 0, 771, 817, 3, 394, 197, 0, 772, 774, 5, 203, 0, 0, 773, 775, 5, 436, 0, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 777, 5, 166, 0, 0, 777, 782, 3, 478, 239, 0, 778, 780, 5, 17, 0, 0, 779, 778, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 783, 3, 638, 319, 0, 782, 779, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 5, 370, 0, 0, 785, 786, 3, 456, 228, 0, 786, 787, 5, 224, 0, 0, 787, 788, 3, 580, 290, 0, 788, 789, 3, 398, 199, 0, 789, 817, 1, 0, 0, 0, 790, 791, 5, 249, 0, 0, 791, 792, 3, 638, 319, 0, 792, 793, 5, 139, 0, 0, 793, 794, 3, 360, 180, 0, 794, 817, 1, 0, 0, 0, 795, 796, 5, 115, 0, 0, 796, 797, 3, 638, 319, 0, 797, 798, 5, 370, 0, 0, 798, 799, 3, 296, 148, 0, 799, 817, 1, 0, 0, 0, 800, 801, 5, 304, 0, 0, 801, 806, 3, 648, 324, 0, 802, 803, 7, 2, 0, 0, 803, 805, 3, 648, 324, 0, 804, 802, 1, 0, 0, 0, 805, 808, 1, 0, 0, 0, 806, 804, 1, 0, 0, 0, 806, 807, 1, 0, 0, 0, 807, 809, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 809, 813, 5, 405, 0, 0, 810, 812, 9, 0, 0, 0, 811, 810, 1, 0, 0, 0, 812, 815, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 813, 811, 1, 0, 0, 0, 814, 817, 1, 0, 0, 0, 815, 813, 1, 0, 0, 0, 816, 745, 1, 0, 0, 0, 816, 746, 1, 0, 0, 0, 816, 747, 1, 0, 0, 0, 816, 748, 1, 0, 0, 0, 816, 749, 1, 0, 0, 0, 816, 750, 1, 0, 0, 0, 816, 751, 1, 0, 0, 0, 816, 758, 1, 0, 0, 0, 816, 759, 1, 0, 0, 0, 816, 765, 1, 0, 0, 0, 816, 771, 1, 0, 0, 0, 816, 772, 1, 0, 0, 0, 816, 790, 1, 0, 0, 0, 816, 795, 1, 0, 0, 0, 816, 800, 1, 0, 0, 0, 817, 11, 1, 0, 0, 0, 818, 819, 5, 187, 0, 0, 819, 821, 5, 66, 0, 0, 820, 822, 5, 188, 0, 0, 821, 820, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 823, 1, 0, 0, 0, 823, 824, 5, 158, 0, 0, 824, 826, 5, 426, 0, 0, 825, 827, 5, 235, 0, 0, 826, 825, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 5, 166, 0, 0, 829, 830, 5, 329, 0, 0, 830, 832, 3, 624, 312, 0, 831, 833, 3, 56, 28, 0, 832, 831, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 13, 1, 0, 0, 0, 834, 836, 5, 134, 0, 0, 835, 837, 5, 204, 0, 0, 836, 835, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 1, 0, 0, 0, 838, 839, 5, 279, 0, 0, 839, 840, 5, 399, 0, 0, 840, 841, 5, 426, 0, 0, 841, 842, 5, 400, 0, 0, 842, 15, 1, 0, 0, 0, 843, 844, 5, 120, 0, 0, 844, 845, 5, 329, 0, 0, 845, 846, 3, 624, 312, 0, 846, 847, 5, 341, 0, 0, 847, 849, 5, 426, 0, 0, 848, 850, 3, 14, 7, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 17, 1, 0, 0, 0, 851, 857, 5, 153, 0, 0, 852, 854, 5, 123, 0, 0, 853, 852, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 856, 5, 329, 0, 0, 856, 858, 3, 624, 312, 0, 857, 853, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 860, 5, 139, 0, 0, 860, 862, 5, 426, 0, 0, 861, 863, 3, 424, 212, 0, 862, 861, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 19, 1, 0, 0, 0, 864, 865, 5, 277, 0, 0, 865, 866, 5, 103, 0, 0, 866, 869, 3, 22, 11, 0, 867, 868, 5, 278, 0, 0, 868, 870, 3, 22, 11, 0, 869, 867, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, 872, 5, 387, 0, 0, 872, 874, 3, 230, 115, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 21, 1, 0, 0, 0, 875, 878, 3, 472, 236, 0, 876, 877, 5, 395, 0, 0, 877, 879, 3, 26, 13, 0, 878, 876, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 23, 1, 0, 0, 0, 880, 881, 5, 277, 0, 0, 881, 882, 5, 187, 0, 0, 882, 885, 3, 22, 11, 0, 883, 884, 5, 166, 0, 0, 884, 886, 3, 472, 236, 0, 885, 883, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 889, 1, 0, 0, 0, 887, 888, 5, 387, 0, 0, 888, 890, 3, 230, 115, 0, 889, 887, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 25, 1, 0, 0, 0, 891, 894, 5, 426, 0, 0, 892, 893, 5, 395, 0, 0, 893, 895, 5, 426, 0, 0, 894, 892, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 27, 1, 0, 0, 0, 896, 955, 3, 42, 21, 0, 897, 955, 3, 46, 23, 0, 898, 955, 3, 48, 24, 0, 899, 955, 3, 436, 218, 0, 900, 955, 3, 54, 27, 0, 901, 955, 3, 52, 26, 0, 902, 955, 3, 412, 206, 0, 903, 955, 3, 64, 32, 0, 904, 955, 3, 72, 36, 0, 905, 955, 3, 138, 69, 0, 906, 955, 3, 160, 80, 0, 907, 955, 3, 176, 88, 0, 908, 955, 3, 180, 90, 0, 909, 955, 3, 184, 92, 0, 910, 955, 3, 182, 91, 0, 911, 955, 3, 174, 87, 0, 912, 955, 3, 178, 89, 0, 913, 955, 3, 146, 73, 0, 914, 955, 3, 152, 76, 0, 915, 955, 3, 148, 74, 0, 916, 955, 3, 150, 75, 0, 917, 955, 3, 154, 77, 0, 918, 955, 3, 156, 78, 0, 919, 955, 3, 158, 79, 0, 920, 955, 3, 66, 33, 0, 921, 955, 3, 76, 38, 0, 922, 955, 3, 82, 41, 0, 923, 955, 3, 78, 39, 0, 924, 955, 3, 84, 42, 0, 925, 955, 3, 86, 43, 0, 926, 955, 3, 88, 44, 0, 927, 955, 3, 90, 45, 0, 928, 955, 3, 92, 46, 0, 929, 955, 3, 106, 53, 0, 930, 955, 3, 98, 49, 0, 931, 955, 3, 108, 54, 0, 932, 955, 3, 100, 50, 0, 933, 955, 3, 94, 47, 0, 934, 955, 3, 96, 48, 0, 935, 955, 3, 104, 52, 0, 936, 955, 3, 102, 51, 0, 937, 938, 5, 1, 0, 0, 938, 940, 7, 3, 0, 0, 939, 941, 5, 431, 0, 0, 940, 939, 1, 0, 0, 0, 941, 942, 1, 0, 0, 0, 942, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 955, 1, 0, 0, 0, 944, 945, 5, 176, 0, 0, 945, 947, 5, 258, 0, 0, 946, 948, 5, 426, 0, 0, 947, 946, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 947, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 955, 1, 0, 0, 0, 951, 955, 3, 650, 325, 0, 952, 955, 3, 438, 219, 0, 953, 955, 3, 440, 220, 0, 954, 896, 1, 0, 0, 0, 954, 897, 1, 0, 0, 0, 954, 898, 1, 0, 0, 0, 954, 899, 1, 0, 0, 0, 954, 900, 1, 0, 0, 0, 954, 901, 1, 0, 0, 0, 954, 902, 1, 0, 0, 0, 954, 903, 1, 0, 0, 0, 954, 904, 1, 0, 0, 0, 954, 905, 1, 0, 0, 0, 954, 906, 1, 0, 0, 0, 954, 907, 1, 0, 0, 0, 954, 908, 1, 0, 0, 0, 954, 909, 1, 0, 0, 0, 954, 910, 1, 0, 0, 0, 954, 911, 1, 0, 0, 0, 954, 912, 1, 0, 0, 0, 954, 913, 1, 0, 0, 0, 954, 914, 1, 0, 0, 0, 954, 915, 1, 0, 0, 0, 954, 916, 1, 0, 0, 0, 954, 917, 1, 0, 0, 0, 954, 918, 1, 0, 0, 0, 954, 919, 1, 0, 0, 0, 954, 920, 1, 0, 0, 0, 954, 921, 1, 0, 0, 0, 954, 922, 1, 0, 0, 0, 954, 923, 1, 0, 0, 0, 954, 924, 1, 0, 0, 0, 954, 925, 1, 0, 0, 0, 954, 926, 1, 0, 0, 0, 954, 927, 1, 0, 0, 0, 954, 928, 1, 0, 0, 0, 954, 929, 1, 0, 0, 0, 954, 930, 1, 0, 0, 0, 954, 931, 1, 0, 0, 0, 954, 932, 1, 0, 0, 0, 954, 933, 1, 0, 0, 0, 954, 934, 1, 0, 0, 0, 954, 935, 1, 0, 0, 0, 954, 936, 1, 0, 0, 0, 954, 937, 1, 0, 0, 0, 954, 944, 1, 0, 0, 0, 954, 951, 1, 0, 0, 0, 954, 952, 1, 0, 0, 0, 954, 953, 1, 0, 0, 0, 955, 29, 1, 0, 0, 0, 956, 957, 5, 151, 0, 0, 957, 958, 5, 117, 0, 0, 958, 31, 1, 0, 0, 0, 959, 960, 5, 151, 0, 0, 960, 961, 5, 216, 0, 0, 961, 962, 5, 117, 0, 0, 962, 33, 1, 0, 0, 0, 963, 964, 7, 4, 0, 0, 964, 35, 1, 0, 0, 0, 965, 966, 3, 662, 331, 0, 966, 967, 5, 284, 0, 0, 967, 37, 1, 0, 0, 0, 968, 969, 3, 664, 332, 0, 969, 970, 5, 284, 0, 0, 970, 39, 1, 0, 0, 0, 971, 972, 5, 321, 0, 0, 972, 973, 5, 17, 0, 0, 973, 974, 5, 92, 0, 0, 974, 41, 1, 0, 0, 0, 975, 977, 5, 58, 0, 0, 976, 978, 5, 273, 0, 0, 977, 976, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 979, 1, 0, 0, 0, 979, 981, 3, 70, 35, 0, 980, 982, 3, 32, 16, 0, 981, 980, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 983, 1, 0, 0, 0, 983, 985, 3, 474, 237, 0, 984, 986, 3, 50, 25, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 988, 1, 0, 0, 0, 987, 989, 3, 424, 212, 0, 988, 987, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 992, 1, 0, 0, 0, 990, 991, 5, 196, 0, 0, 991, 993, 5, 426, 0, 0, 992, 990, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 997, 1, 0, 0, 0, 994, 995, 5, 387, 0, 0, 995, 996, 5, 76, 0, 0, 996, 998, 3, 230, 115, 0, 997, 994, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 1016, 1, 0, 0, 0, 999, 1000, 5, 58, 0, 0, 1000, 1001, 5, 273, 0, 0, 1001, 1003, 3, 70, 35, 0, 1002, 1004, 3, 32, 16, 0, 1003, 1002, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1007, 3, 474, 237, 0, 1006, 1008, 3, 50, 25, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1013, 3, 44, 22, 0, 1010, 1011, 5, 387, 0, 0, 1011, 1012, 5, 76, 0, 0, 1012, 1014, 3, 230, 115, 0, 1013, 1010, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1016, 1, 0, 0, 0, 1015, 975, 1, 0, 0, 0, 1015, 999, 1, 0, 0, 0, 1016, 43, 1, 0, 0, 0, 1017, 1018, 5, 370, 0, 0, 1018, 1019, 3, 472, 236, 0, 1019, 45, 1, 0, 0, 0, 1020, 1021, 5, 368, 0, 0, 1021, 1022, 3, 472, 236, 0, 1022, 47, 1, 0, 0, 0, 1023, 1024, 5, 101, 0, 0, 1024, 1026, 3, 70, 35, 0, 1025, 1027, 3, 30, 15, 0, 1026, 1025, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1030, 3, 472, 236, 0, 1029, 1031, 3, 34, 17, 0, 1030, 1029, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 49, 1, 0, 0, 0, 1032, 1033, 5, 47, 0, 0, 1033, 1034, 5, 426, 0, 0, 1034, 51, 1, 0, 0, 0, 1035, 1037, 5, 351, 0, 0, 1036, 1038, 5, 329, 0, 0, 1037, 1036, 1, 0, 0, 0, 1037, 1038, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1045, 3, 624, 312, 0, 1040, 1041, 5, 46, 0, 0, 1041, 1042, 5, 399, 0, 0, 1042, 1043, 3, 254, 127, 0, 1043, 1044, 5, 400, 0, 0, 1044, 1046, 1, 0, 0, 0, 1045, 1040, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1048, 1, 0, 0, 0, 1047, 1049, 5, 135, 0, 0, 1048, 1047, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 53, 1, 0, 0, 0, 1050, 1051, 5, 101, 0, 0, 1051, 1053, 5, 329, 0, 0, 1052, 1054, 3, 30, 15, 0, 1053, 1052, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1057, 3, 478, 239, 0, 1056, 1058, 5, 255, 0, 0, 1057, 1056, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1061, 3, 14, 7, 0, 1060, 1059, 1, 0, 0, 0, 1060, 1061, 1, 0, 0, 0, 1061, 55, 1, 0, 0, 0, 1062, 1063, 5, 160, 0, 0, 1063, 1064, 5, 426, 0, 0, 1064, 1065, 5, 301, 0, 0, 1065, 1066, 5, 426, 0, 0, 1066, 57, 1, 0, 0, 0, 1067, 1070, 3, 638, 319, 0, 1068, 1069, 5, 395, 0, 0, 1069, 1071, 3, 638, 319, 0, 1070, 1068, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1085, 1, 0, 0, 0, 1072, 1082, 3, 638, 319, 0, 1073, 1078, 5, 395, 0, 0, 1074, 1079, 5, 104, 0, 0, 1075, 1079, 5, 175, 0, 0, 1076, 1079, 5, 375, 0, 0, 1077, 1079, 3, 638, 319, 0, 1078, 1074, 1, 0, 0, 0, 1078, 1075, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1077, 1, 0, 0, 0, 1079, 1081, 1, 0, 0, 0, 1080, 1073, 1, 0, 0, 0, 1081, 1084, 1, 0, 0, 0, 1082, 1080, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1086, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 1072, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 59, 1, 0, 0, 0, 1087, 1089, 3, 58, 29, 0, 1088, 1090, 3, 626, 313, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 61, 1, 0, 0, 0, 1091, 1093, 3, 476, 238, 0, 1092, 1094, 3, 626, 313, 0, 1093, 1092, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1096, 1, 0, 0, 0, 1095, 1097, 3, 260, 130, 0, 1096, 1095, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 63, 1, 0, 0, 0, 1098, 1121, 7, 5, 0, 0, 1099, 1101, 3, 70, 35, 0, 1100, 1102, 5, 122, 0, 0, 1101, 1100, 1, 0, 0, 0, 1101, 1102, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1104, 3, 472, 236, 0, 1104, 1122, 1, 0, 0, 0, 1105, 1107, 5, 69, 0, 0, 1106, 1108, 5, 122, 0, 0, 1107, 1106, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 1, 0, 0, 0, 1109, 1122, 3, 472, 236, 0, 1110, 1112, 5, 141, 0, 0, 1111, 1113, 5, 122, 0, 0, 1112, 1111, 1, 0, 0, 0, 1112, 1113, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1122, 3, 556, 278, 0, 1115, 1118, 5, 138, 0, 0, 1116, 1118, 5, 122, 0, 0, 1117, 1115, 1, 0, 0, 0, 1117, 1116, 1, 0, 0, 0, 1118, 1119, 1, 0, 0, 0, 1119, 1122, 3, 62, 31, 0, 1120, 1122, 3, 62, 31, 0, 1121, 1099, 1, 0, 0, 0, 1121, 1105, 1, 0, 0, 0, 1121, 1110, 1, 0, 0, 0, 1121, 1117, 1, 0, 0, 0, 1121, 1120, 1, 0, 0, 0, 1122, 65, 1, 0, 0, 0, 1123, 1124, 5, 10, 0, 0, 1124, 1125, 5, 329, 0, 0, 1125, 1138, 3, 624, 312, 0, 1126, 1127, 5, 52, 0, 0, 1127, 1134, 5, 319, 0, 0, 1128, 1135, 5, 215, 0, 0, 1129, 1130, 5, 134, 0, 0, 1130, 1132, 5, 46, 0, 0, 1131, 1133, 3, 254, 127, 0, 1132, 1131, 1, 0, 0, 0, 1132, 1133, 1, 0, 0, 0, 1133, 1135, 1, 0, 0, 0, 1134, 1128, 1, 0, 0, 0, 1134, 1129, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1139, 1, 0, 0, 0, 1136, 1137, 5, 33, 0, 0, 1137, 1139, 5, 204, 0, 0, 1138, 1126, 1, 0, 0, 0, 1138, 1136, 1, 0, 0, 0, 1139, 67, 1, 0, 0, 0, 1140, 1141, 7, 6, 0, 0, 1141, 69, 1, 0, 0, 0, 1142, 1143, 7, 7, 0, 0, 1143, 71, 1, 0, 0, 0, 1144, 1145, 5, 308, 0, 0, 1145, 1148, 7, 8, 0, 0, 1146, 1147, 5, 184, 0, 0, 1147, 1149, 3, 194, 97, 0, 1148, 1146, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1328, 1, 0, 0, 0, 1150, 1152, 5, 308, 0, 0, 1151, 1153, 5, 122, 0, 0, 1152, 1151, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 1154, 1, 0, 0, 0, 1154, 1158, 5, 330, 0, 0, 1155, 1156, 3, 68, 34, 0, 1156, 1157, 3, 472, 236, 0, 1157, 1159, 1, 0, 0, 0, 1158, 1155, 1, 0, 0, 0, 1158, 1159, 1, 0, 0, 0, 1159, 1161, 1, 0, 0, 0, 1160, 1162, 3, 74, 37, 0, 1161, 1160, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1328, 1, 0, 0, 0, 1163, 1164, 5, 308, 0, 0, 1164, 1168, 5, 379, 0, 0, 1165, 1166, 3, 68, 34, 0, 1166, 1167, 3, 472, 236, 0, 1167, 1169, 1, 0, 0, 0, 1168, 1165, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1173, 1, 0, 0, 0, 1170, 1171, 5, 184, 0, 0, 1171, 1174, 3, 194, 97, 0, 1172, 1174, 3, 194, 97, 0, 1173, 1170, 1, 0, 0, 0, 1173, 1172, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1328, 1, 0, 0, 0, 1175, 1176, 5, 308, 0, 0, 1176, 1177, 5, 202, 0, 0, 1177, 1181, 5, 379, 0, 0, 1178, 1179, 3, 68, 34, 0, 1179, 1180, 3, 472, 236, 0, 1180, 1182, 1, 0, 0, 0, 1181, 1178, 1, 0, 0, 0, 1181, 1182, 1, 0, 0, 0, 1182, 1186, 1, 0, 0, 0, 1183, 1184, 5, 184, 0, 0, 1184, 1187, 3, 194, 97, 0, 1185, 1187, 3, 194, 97, 0, 1186, 1183, 1, 0, 0, 0, 1186, 1185, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1328, 1, 0, 0, 0, 1188, 1190, 5, 308, 0, 0, 1189, 1191, 5, 315, 0, 0, 1190, 1189, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 1193, 5, 46, 0, 0, 1193, 1194, 3, 68, 34, 0, 1194, 1198, 3, 476, 238, 0, 1195, 1196, 3, 68, 34, 0, 1196, 1197, 3, 472, 236, 0, 1197, 1199, 1, 0, 0, 0, 1198, 1195, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1203, 1, 0, 0, 0, 1200, 1201, 5, 184, 0, 0, 1201, 1204, 3, 194, 97, 0, 1202, 1204, 3, 194, 97, 0, 1203, 1200, 1, 0, 0, 0, 1203, 1202, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 1328, 1, 0, 0, 0, 1205, 1206, 5, 308, 0, 0, 1206, 1209, 5, 142, 0, 0, 1207, 1208, 5, 184, 0, 0, 1208, 1210, 3, 556, 278, 0, 1209, 1207, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 1328, 1, 0, 0, 0, 1211, 1212, 5, 308, 0, 0, 1212, 1213, 5, 239, 0, 0, 1213, 1215, 3, 476, 238, 0, 1214, 1216, 3, 626, 313, 0, 1215, 1214, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1218, 1, 0, 0, 0, 1217, 1219, 3, 494, 247, 0, 1218, 1217, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1221, 1, 0, 0, 0, 1220, 1222, 3, 542, 271, 0, 1221, 1220, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 1224, 1, 0, 0, 0, 1223, 1225, 3, 386, 193, 0, 1224, 1223, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 1328, 1, 0, 0, 0, 1226, 1227, 5, 308, 0, 0, 1227, 1233, 5, 58, 0, 0, 1228, 1229, 3, 70, 35, 0, 1229, 1230, 3, 472, 236, 0, 1230, 1234, 1, 0, 0, 0, 1231, 1232, 5, 329, 0, 0, 1232, 1234, 3, 478, 239, 0, 1233, 1228, 1, 0, 0, 0, 1233, 1231, 1, 0, 0, 0, 1234, 1328, 1, 0, 0, 0, 1235, 1236, 5, 308, 0, 0, 1236, 1237, 5, 329, 0, 0, 1237, 1241, 5, 122, 0, 0, 1238, 1239, 3, 68, 34, 0, 1239, 1240, 3, 472, 236, 0, 1240, 1242, 1, 0, 0, 0, 1241, 1238, 1, 0, 0, 0, 1241, 1242, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1243, 1244, 5, 184, 0, 0, 1244, 1246, 3, 194, 97, 0, 1245, 1247, 3, 626, 313, 0, 1246, 1245, 1, 0, 0, 0, 1246, 1247, 1, 0, 0, 0, 1247, 1328, 1, 0, 0, 0, 1248, 1249, 5, 308, 0, 0, 1249, 1250, 5, 332, 0, 0, 1250, 1254, 3, 478, 239, 0, 1251, 1252, 5, 399, 0, 0, 1252, 1253, 5, 426, 0, 0, 1253, 1255, 5, 400, 0, 0, 1254, 1251, 1, 0, 0, 0, 1254, 1255, 1, 0, 0, 0, 1255, 1328, 1, 0, 0, 0, 1256, 1257, 5, 308, 0, 0, 1257, 1269, 5, 191, 0, 0, 1258, 1259, 3, 70, 35, 0, 1259, 1261, 3, 472, 236, 0, 1260, 1262, 5, 122, 0, 0, 1261, 1260, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1270, 1, 0, 0, 0, 1263, 1265, 3, 60, 30, 0, 1264, 1263, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1267, 1, 0, 0, 0, 1266, 1268, 5, 122, 0, 0, 1267, 1266, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1270, 1, 0, 0, 0, 1269, 1258, 1, 0, 0, 0, 1269, 1264, 1, 0, 0, 0, 1270, 1328, 1, 0, 0, 0, 1271, 1272, 5, 308, 0, 0, 1272, 1299, 5, 50, 0, 0, 1273, 1274, 5, 51, 0, 0, 1274, 1275, 5, 405, 0, 0, 1275, 1300, 5, 431, 0, 0, 1276, 1277, 3, 70, 35, 0, 1277, 1278, 3, 472, 236, 0, 1278, 1283, 1, 0, 0, 0, 1279, 1281, 3, 60, 30, 0, 1280, 1279, 1, 0, 0, 0, 1280, 1281, 1, 0, 0, 0, 1281, 1283, 1, 0, 0, 0, 1282, 1276, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1286, 3, 406, 203, 0, 1285, 1284, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 1288, 1, 0, 0, 0, 1287, 1289, 3, 408, 204, 0, 1288, 1287, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1291, 1, 0, 0, 0, 1290, 1292, 3, 410, 205, 0, 1291, 1290, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1294, 1, 0, 0, 0, 1293, 1295, 3, 542, 271, 0, 1294, 1293, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1298, 3, 386, 193, 0, 1297, 1296, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1300, 1, 0, 0, 0, 1299, 1273, 1, 0, 0, 0, 1299, 1282, 1, 0, 0, 0, 1300, 1328, 1, 0, 0, 0, 1301, 1302, 5, 308, 0, 0, 1302, 1328, 5, 346, 0, 0, 1303, 1304, 5, 308, 0, 0, 1304, 1305, 5, 54, 0, 0, 1305, 1328, 5, 426, 0, 0, 1306, 1307, 5, 308, 0, 0, 1307, 1311, 5, 280, 0, 0, 1308, 1309, 5, 243, 0, 0, 1309, 1312, 3, 638, 319, 0, 1310, 1312, 5, 244, 0, 0, 1311, 1308, 1, 0, 0, 0, 1311, 1310, 1, 0, 0, 0, 1312, 1328, 1, 0, 0, 0, 1313, 1314, 5, 308, 0, 0, 1314, 1328, 5, 70, 0, 0, 1315, 1317, 5, 308, 0, 0, 1316, 1318, 5, 138, 0, 0, 1317, 1316, 1, 0, 0, 0, 1317, 1318, 1, 0, 0, 0, 1318, 1319, 1, 0, 0, 0, 1319, 1320, 7, 9, 0, 0, 1320, 1321, 5, 224, 0, 0, 1321, 1325, 3, 478, 239, 0, 1322, 1323, 3, 68, 34, 0, 1323, 1324, 3, 472, 236, 0, 1324, 1326, 1, 0, 0, 0, 1325, 1322, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 1328, 1, 0, 0, 0, 1327, 1144, 1, 0, 0, 0, 1327, 1150, 1, 0, 0, 0, 1327, 1163, 1, 0, 0, 0, 1327, 1175, 1, 0, 0, 0, 1327, 1188, 1, 0, 0, 0, 1327, 1205, 1, 0, 0, 0, 1327, 1211, 1, 0, 0, 0, 1327, 1226, 1, 0, 0, 0, 1327, 1235, 1, 0, 0, 0, 1327, 1248, 1, 0, 0, 0, 1327, 1256, 1, 0, 0, 0, 1327, 1271, 1, 0, 0, 0, 1327, 1301, 1, 0, 0, 0, 1327, 1303, 1, 0, 0, 0, 1327, 1306, 1, 0, 0, 0, 1327, 1313, 1, 0, 0, 0, 1327, 1315, 1, 0, 0, 0, 1328, 73, 1, 0, 0, 0, 1329, 1330, 5, 384, 0, 0, 1330, 1331, 3, 638, 319, 0, 1331, 1332, 5, 405, 0, 0, 1332, 1333, 5, 426, 0, 0, 1333, 1338, 1, 0, 0, 0, 1334, 1335, 5, 184, 0, 0, 1335, 1338, 3, 194, 97, 0, 1336, 1338, 3, 194, 97, 0, 1337, 1329, 1, 0, 0, 0, 1337, 1334, 1, 0, 0, 0, 1337, 1336, 1, 0, 0, 0, 1338, 75, 1, 0, 0, 0, 1339, 1340, 5, 190, 0, 0, 1340, 1341, 5, 329, 0, 0, 1341, 1342, 3, 624, 312, 0, 1342, 1343, 3, 80, 40, 0, 1343, 77, 1, 0, 0, 0, 1344, 1345, 5, 190, 0, 0, 1345, 1346, 3, 70, 35, 0, 1346, 1347, 3, 472, 236, 0, 1347, 1348, 3, 80, 40, 0, 1348, 79, 1, 0, 0, 0, 1349, 1350, 7, 10, 0, 0, 1350, 81, 1, 0, 0, 0, 1351, 1352, 5, 361, 0, 0, 1352, 1353, 5, 329, 0, 0, 1353, 1354, 3, 624, 312, 0, 1354, 83, 1, 0, 0, 0, 1355, 1356, 5, 361, 0, 0, 1356, 1357, 3, 70, 35, 0, 1357, 1358, 3, 472, 236, 0, 1358, 85, 1, 0, 0, 0, 1359, 1360, 5, 58, 0, 0, 1360, 1361, 5, 287, 0, 0, 1361, 1362, 3, 638, 319, 0, 1362, 87, 1, 0, 0, 0, 1363, 1364, 5, 101, 0, 0, 1364, 1365, 5, 287, 0, 0, 1365, 1366, 3, 638, 319, 0, 1366, 89, 1, 0, 0, 0, 1367, 1368, 5, 143, 0, 0, 1368, 1370, 3, 118, 59, 0, 1369, 1371, 3, 112, 56, 0, 1370, 1369, 1, 0, 0, 0, 1370, 1371, 1, 0, 0, 0, 1371, 1372, 1, 0, 0, 0, 1372, 1373, 5, 341, 0, 0, 1373, 1375, 3, 124, 62, 0, 1374, 1376, 3, 130, 65, 0, 1375, 1374, 1, 0, 0, 0, 1375, 1376, 1, 0, 0, 0, 1376, 91, 1, 0, 0, 0, 1377, 1379, 5, 283, 0, 0, 1378, 1380, 3, 132, 66, 0, 1379, 1378, 1, 0, 0, 0, 1379, 1380, 1, 0, 0, 0, 1380, 1381, 1, 0, 0, 0, 1381, 1383, 3, 118, 59, 0, 1382, 1384, 3, 112, 56, 0, 1383, 1382, 1, 0, 0, 0, 1383, 1384, 1, 0, 0, 0, 1384, 1385, 1, 0, 0, 0, 1385, 1386, 5, 139, 0, 0, 1386, 1387, 3, 124, 62, 0, 1387, 93, 1, 0, 0, 0, 1388, 1390, 5, 143, 0, 0, 1389, 1391, 5, 287, 0, 0, 1390, 1389, 1, 0, 0, 0, 1390, 1391, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1397, 3, 638, 319, 0, 1393, 1394, 5, 397, 0, 0, 1394, 1396, 3, 638, 319, 0, 1395, 1393, 1, 0, 0, 0, 1396, 1399, 1, 0, 0, 0, 1397, 1395, 1, 0, 0, 0, 1397, 1398, 1, 0, 0, 0, 1398, 1400, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1400, 1401, 5, 341, 0, 0, 1401, 1403, 3, 124, 62, 0, 1402, 1404, 3, 136, 68, 0, 1403, 1402, 1, 0, 0, 0, 1403, 1404, 1, 0, 0, 0, 1404, 95, 1, 0, 0, 0, 1405, 1407, 5, 283, 0, 0, 1406, 1408, 3, 134, 67, 0, 1407, 1406, 1, 0, 0, 0, 1407, 1408, 1, 0, 0, 0, 1408, 1410, 1, 0, 0, 0, 1409, 1411, 5, 287, 0, 0, 1410, 1409, 1, 0, 0, 0, 1410, 1411, 1, 0, 0, 0, 1411, 1412, 1, 0, 0, 0, 1412, 1417, 3, 638, 319, 0, 1413, 1414, 5, 397, 0, 0, 1414, 1416, 3, 638, 319, 0, 1415, 1413, 1, 0, 0, 0, 1416, 1419, 1, 0, 0, 0, 1417, 1415, 1, 0, 0, 0, 1417, 1418, 1, 0, 0, 0, 1418, 1420, 1, 0, 0, 0, 1419, 1417, 1, 0, 0, 0, 1420, 1421, 5, 139, 0, 0, 1421, 1422, 3, 124, 62, 0, 1422, 97, 1, 0, 0, 0, 1423, 1424, 5, 308, 0, 0, 1424, 1425, 5, 287, 0, 0, 1425, 1426, 5, 143, 0, 0, 1426, 1427, 3, 126, 63, 0, 1427, 99, 1, 0, 0, 0, 1428, 1429, 5, 308, 0, 0, 1429, 1430, 5, 288, 0, 0, 1430, 101, 1, 0, 0, 0, 1431, 1432, 5, 308, 0, 0, 1432, 1433, 5, 62, 0, 0, 1433, 1434, 5, 288, 0, 0, 1434, 103, 1, 0, 0, 0, 1435, 1436, 5, 304, 0, 0, 1436, 1440, 5, 287, 0, 0, 1437, 1441, 5, 7, 0, 0, 1438, 1441, 5, 213, 0, 0, 1439, 1441, 3, 638, 319, 0, 1440, 1437, 1, 0, 0, 0, 1440, 1438, 1, 0, 0, 0, 1440, 1439, 1, 0, 0, 0, 1441, 105, 1, 0, 0, 0, 1442, 1443, 5, 308, 0, 0, 1443, 1445, 5, 143, 0, 0, 1444, 1446, 3, 126, 63, 0, 1445, 1444, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1449, 1, 0, 0, 0, 1447, 1448, 5, 224, 0, 0, 1448, 1450, 3, 110, 55, 0, 1449, 1447, 1, 0, 0, 0, 1449, 1450, 1, 0, 0, 0, 1450, 107, 1, 0, 0, 0, 1451, 1452, 5, 308, 0, 0, 1452, 1453, 5, 252, 0, 0, 1453, 1454, 3, 638, 319, 0, 1454, 109, 1, 0, 0, 0, 1455, 1458, 5, 7, 0, 0, 1456, 1458, 3, 116, 58, 0, 1457, 1455, 1, 0, 0, 0, 1457, 1456, 1, 0, 0, 0, 1458, 111, 1, 0, 0, 0, 1459, 1460, 5, 224, 0, 0, 1460, 1461, 3, 114, 57, 0, 1461, 113, 1, 0, 0, 0, 1462, 1463, 3, 70, 35, 0, 1463, 1464, 3, 472, 236, 0, 1464, 1474, 1, 0, 0, 0, 1465, 1467, 5, 329, 0, 0, 1466, 1465, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1474, 3, 624, 312, 0, 1469, 1470, 5, 366, 0, 0, 1470, 1474, 5, 426, 0, 0, 1471, 1472, 5, 303, 0, 0, 1472, 1474, 3, 638, 319, 0, 1473, 1462, 1, 0, 0, 0, 1473, 1466, 1, 0, 0, 0, 1473, 1469, 1, 0, 0, 0, 1473, 1471, 1, 0, 0, 0, 1474, 115, 1, 0, 0, 0, 1475, 1476, 3, 70, 35, 0, 1476, 1477, 3, 472, 236, 0, 1477, 1496, 1, 0, 0, 0, 1478, 1480, 5, 329, 0, 0, 1479, 1478, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1486, 3, 478, 239, 0, 1482, 1483, 5, 399, 0, 0, 1483, 1484, 3, 254, 127, 0, 1484, 1485, 5, 400, 0, 0, 1485, 1487, 1, 0, 0, 0, 1486, 1482, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1490, 3, 626, 313, 0, 1489, 1488, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1496, 1, 0, 0, 0, 1491, 1492, 5, 366, 0, 0, 1492, 1496, 5, 426, 0, 0, 1493, 1494, 5, 303, 0, 0, 1494, 1496, 3, 638, 319, 0, 1495, 1475, 1, 0, 0, 0, 1495, 1479, 1, 0, 0, 0, 1495, 1491, 1, 0, 0, 0, 1495, 1493, 1, 0, 0, 0, 1496, 117, 1, 0, 0, 0, 1497, 1502, 3, 120, 60, 0, 1498, 1499, 5, 397, 0, 0, 1499, 1501, 3, 120, 60, 0, 1500, 1498, 1, 0, 0, 0, 1501, 1504, 1, 0, 0, 0, 1502, 1500, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 119, 1, 0, 0, 0, 1504, 1502, 1, 0, 0, 0, 1505, 1510, 3, 122, 61, 0, 1506, 1507, 5, 399, 0, 0, 1507, 1508, 3, 254, 127, 0, 1508, 1509, 5, 400, 0, 0, 1509, 1511, 1, 0, 0, 0, 1510, 1506, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 121, 1, 0, 0, 0, 1512, 1513, 7, 11, 0, 0, 1513, 123, 1, 0, 0, 0, 1514, 1519, 3, 126, 63, 0, 1515, 1516, 5, 397, 0, 0, 1516, 1518, 3, 126, 63, 0, 1517, 1515, 1, 0, 0, 0, 1518, 1521, 1, 0, 0, 0, 1519, 1517, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 125, 1, 0, 0, 0, 1521, 1519, 1, 0, 0, 0, 1522, 1523, 5, 369, 0, 0, 1523, 1529, 3, 642, 321, 0, 1524, 1525, 5, 144, 0, 0, 1525, 1529, 3, 642, 321, 0, 1526, 1527, 5, 287, 0, 0, 1527, 1529, 3, 638, 319, 0, 1528, 1522, 1, 0, 0, 0, 1528, 1524, 1, 0, 0, 0, 1528, 1526, 1, 0, 0, 0, 1529, 127, 1, 0, 0, 0, 1530, 1531, 5, 369, 0, 0, 1531, 1536, 3, 642, 321, 0, 1532, 1533, 5, 287, 0, 0, 1533, 1536, 3, 638, 319, 0, 1534, 1536, 3, 638, 319, 0, 1535, 1530, 1, 0, 0, 0, 1535, 1532, 1, 0, 0, 0, 1535, 1534, 1, 0, 0, 0, 1536, 129, 1, 0, 0, 0, 1537, 1538, 5, 387, 0, 0, 1538, 1539, 5, 143, 0, 0, 1539, 1540, 5, 227, 0, 0, 1540, 131, 1, 0, 0, 0, 1541, 1542, 5, 143, 0, 0, 1542, 1543, 5, 227, 0, 0, 1543, 1544, 5, 134, 0, 0, 1544, 133, 1, 0, 0, 0, 1545, 1546, 5, 5, 0, 0, 1546, 1547, 5, 227, 0, 0, 1547, 1548, 5, 134, 0, 0, 1548, 135, 1, 0, 0, 0, 1549, 1550, 5, 387, 0, 0, 1550, 1551, 5, 5, 0, 0, 1551, 1552, 5, 227, 0, 0, 1552, 137, 1, 0, 0, 0, 1553, 1555, 5, 212, 0, 0, 1554, 1556, 5, 276, 0, 0, 1555, 1554, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 1557, 1, 0, 0, 0, 1557, 1558, 5, 329, 0, 0, 1558, 1564, 3, 478, 239, 0, 1559, 1560, 7, 12, 0, 0, 1560, 1562, 5, 239, 0, 0, 1561, 1563, 3, 630, 315, 0, 1562, 1561, 1, 0, 0, 0, 1562, 1563, 1, 0, 0, 0, 1563, 1565, 1, 0, 0, 0, 1564, 1559, 1, 0, 0, 0, 1564, 1565, 1, 0, 0, 0, 1565, 139, 1, 0, 0, 0, 1566, 1571, 3, 142, 71, 0, 1567, 1568, 5, 397, 0, 0, 1568, 1570, 3, 142, 71, 0, 1569, 1567, 1, 0, 0, 0, 1570, 1573, 1, 0, 0, 0, 1571, 1569, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 141, 1, 0, 0, 0, 1573, 1571, 1, 0, 0, 0, 1574, 1575, 3, 144, 72, 0, 1575, 1576, 5, 426, 0, 0, 1576, 143, 1, 0, 0, 0, 1577, 1578, 7, 13, 0, 0, 1578, 145, 1, 0, 0, 0, 1579, 1581, 5, 58, 0, 0, 1580, 1582, 5, 333, 0, 0, 1581, 1580, 1, 0, 0, 0, 1581, 1582, 1, 0, 0, 0, 1582, 1583, 1, 0, 0, 0, 1583, 1584, 5, 141, 0, 0, 1584, 1585, 3, 554, 277, 0, 1585, 1586, 5, 17, 0, 0, 1586, 1589, 5, 426, 0, 0, 1587, 1588, 5, 370, 0, 0, 1588, 1590, 3, 140, 70, 0, 1589, 1587, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 147, 1, 0, 0, 0, 1591, 1593, 5, 101, 0, 0, 1592, 1594, 5, 333, 0, 0, 1593, 1592, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 1595, 1, 0, 0, 0, 1595, 1597, 5, 141, 0, 0, 1596, 1598, 3, 30, 15, 0, 1597, 1596, 1, 0, 0, 0, 1597, 1598, 1, 0, 0, 0, 1598, 1599, 1, 0, 0, 0, 1599, 1600, 3, 556, 278, 0, 1600, 149, 1, 0, 0, 0, 1601, 1602, 5, 271, 0, 0, 1602, 1603, 7, 14, 0, 0, 1603, 151, 1, 0, 0, 0, 1604, 1605, 5, 58, 0, 0, 1605, 1606, 5, 333, 0, 0, 1606, 1607, 5, 194, 0, 0, 1607, 1608, 5, 432, 0, 0, 1608, 1610, 5, 399, 0, 0, 1609, 1611, 3, 248, 124, 0, 1610, 1609, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1613, 5, 400, 0, 0, 1613, 1614, 3, 580, 290, 0, 1614, 153, 1, 0, 0, 0, 1615, 1616, 5, 101, 0, 0, 1616, 1617, 5, 333, 0, 0, 1617, 1619, 5, 194, 0, 0, 1618, 1620, 3, 30, 15, 0, 1619, 1618, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1620, 1621, 1, 0, 0, 0, 1621, 1622, 5, 432, 0, 0, 1622, 155, 1, 0, 0, 0, 1623, 1624, 5, 58, 0, 0, 1624, 1625, 5, 155, 0, 0, 1625, 1626, 3, 638, 319, 0, 1626, 1627, 5, 224, 0, 0, 1627, 1628, 5, 329, 0, 0, 1628, 1629, 3, 478, 239, 0, 1629, 1630, 3, 264, 132, 0, 1630, 1631, 5, 17, 0, 0, 1631, 1635, 5, 426, 0, 0, 1632, 1633, 5, 387, 0, 0, 1633, 1634, 5, 84, 0, 0, 1634, 1636, 5, 265, 0, 0, 1635, 1632, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1639, 1, 0, 0, 0, 1637, 1638, 5, 150, 0, 0, 1638, 1640, 3, 226, 113, 0, 1639, 1637, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 1644, 1, 0, 0, 0, 1641, 1642, 5, 154, 0, 0, 1642, 1643, 5, 329, 0, 0, 1643, 1645, 3, 478, 239, 0, 1644, 1641, 1, 0, 0, 0, 1644, 1645, 1, 0, 0, 0, 1645, 1649, 1, 0, 0, 0, 1646, 1647, 5, 238, 0, 0, 1647, 1648, 5, 32, 0, 0, 1648, 1650, 3, 264, 132, 0, 1649, 1646, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1655, 1, 0, 0, 0, 1651, 1653, 3, 222, 111, 0, 1652, 1651, 1, 0, 0, 0, 1652, 1653, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 1656, 3, 246, 123, 0, 1655, 1652, 1, 0, 0, 0, 1655, 1656, 1, 0, 0, 0, 1656, 1658, 1, 0, 0, 0, 1657, 1659, 3, 424, 212, 0, 1658, 1657, 1, 0, 0, 0, 1658, 1659, 1, 0, 0, 0, 1659, 1661, 1, 0, 0, 0, 1660, 1662, 3, 224, 112, 0, 1661, 1660, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1664, 1, 0, 0, 0, 1663, 1665, 3, 196, 98, 0, 1664, 1663, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 157, 1, 0, 0, 0, 1666, 1667, 5, 101, 0, 0, 1667, 1669, 5, 155, 0, 0, 1668, 1670, 3, 30, 15, 0, 1669, 1668, 1, 0, 0, 0, 1669, 1670, 1, 0, 0, 0, 1670, 1671, 1, 0, 0, 0, 1671, 1672, 3, 638, 319, 0, 1672, 1673, 5, 224, 0, 0, 1673, 1674, 3, 478, 239, 0, 1674, 159, 1, 0, 0, 0, 1675, 1678, 5, 58, 0, 0, 1676, 1677, 5, 228, 0, 0, 1677, 1679, 5, 278, 0, 0, 1678, 1676, 1, 0, 0, 0, 1678, 1679, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1682, 5, 378, 0, 0, 1681, 1683, 3, 32, 16, 0, 1682, 1681, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1684, 1689, 3, 484, 242, 0, 1685, 1686, 5, 399, 0, 0, 1686, 1687, 3, 304, 152, 0, 1687, 1688, 5, 400, 0, 0, 1688, 1690, 1, 0, 0, 0, 1689, 1685, 1, 0, 0, 0, 1689, 1690, 1, 0, 0, 0, 1690, 1692, 1, 0, 0, 0, 1691, 1693, 3, 196, 98, 0, 1692, 1691, 1, 0, 0, 0, 1692, 1693, 1, 0, 0, 0, 1693, 1695, 1, 0, 0, 0, 1694, 1696, 3, 162, 81, 0, 1695, 1694, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 1698, 1, 0, 0, 0, 1697, 1699, 3, 224, 112, 0, 1698, 1697, 1, 0, 0, 0, 1698, 1699, 1, 0, 0, 0, 1699, 1700, 1, 0, 0, 0, 1700, 1701, 5, 17, 0, 0, 1701, 1702, 3, 380, 190, 0, 1702, 161, 1, 0, 0, 0, 1703, 1704, 5, 238, 0, 0, 1704, 1710, 5, 224, 0, 0, 1705, 1706, 5, 399, 0, 0, 1706, 1711, 3, 254, 127, 0, 1707, 1708, 5, 316, 0, 0, 1708, 1709, 5, 399, 0, 0, 1709, 1711, 3, 204, 102, 0, 1710, 1705, 1, 0, 0, 0, 1710, 1707, 1, 0, 0, 0, 1711, 1712, 1, 0, 0, 0, 1712, 1713, 5, 400, 0, 0, 1713, 163, 1, 0, 0, 0, 1714, 1717, 3, 166, 83, 0, 1715, 1717, 3, 168, 84, 0, 1716, 1714, 1, 0, 0, 0, 1716, 1715, 1, 0, 0, 0, 1717, 165, 1, 0, 0, 0, 1718, 1719, 5, 42, 0, 0, 1719, 1720, 5, 224, 0, 0, 1720, 1721, 5, 399, 0, 0, 1721, 1722, 3, 254, 127, 0, 1722, 1723, 5, 400, 0, 0, 1723, 167, 1, 0, 0, 0, 1724, 1725, 3, 170, 85, 0, 1725, 1726, 3, 172, 86, 0, 1726, 169, 1, 0, 0, 0, 1727, 1728, 5, 98, 0, 0, 1728, 1729, 5, 224, 0, 0, 1729, 1730, 5, 399, 0, 0, 1730, 1731, 3, 254, 127, 0, 1731, 1732, 5, 400, 0, 0, 1732, 171, 1, 0, 0, 0, 1733, 1734, 5, 315, 0, 0, 1734, 1735, 5, 224, 0, 0, 1735, 1736, 5, 399, 0, 0, 1736, 1737, 3, 254, 127, 0, 1737, 1738, 5, 400, 0, 0, 1738, 173, 1, 0, 0, 0, 1739, 1740, 5, 101, 0, 0, 1740, 1742, 5, 378, 0, 0, 1741, 1743, 3, 30, 15, 0, 1742, 1741, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 3, 482, 241, 0, 1745, 175, 1, 0, 0, 0, 1746, 1747, 5, 58, 0, 0, 1747, 1748, 5, 202, 0, 0, 1748, 1750, 5, 378, 0, 0, 1749, 1751, 3, 32, 16, 0, 1750, 1749, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1752, 1, 0, 0, 0, 1752, 1754, 3, 484, 242, 0, 1753, 1755, 3, 38, 19, 0, 1754, 1753, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1757, 1, 0, 0, 0, 1756, 1758, 3, 196, 98, 0, 1757, 1756, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1760, 1, 0, 0, 0, 1759, 1761, 3, 162, 81, 0, 1760, 1759, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 1763, 1, 0, 0, 0, 1762, 1764, 3, 164, 82, 0, 1763, 1762, 1, 0, 0, 0, 1763, 1764, 1, 0, 0, 0, 1764, 1766, 1, 0, 0, 0, 1765, 1767, 3, 222, 111, 0, 1766, 1765, 1, 0, 0, 0, 1766, 1767, 1, 0, 0, 0, 1767, 1769, 1, 0, 0, 0, 1768, 1770, 3, 246, 123, 0, 1769, 1768, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1770, 1772, 1, 0, 0, 0, 1771, 1773, 3, 424, 212, 0, 1772, 1771, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1775, 1, 0, 0, 0, 1774, 1776, 3, 224, 112, 0, 1775, 1774, 1, 0, 0, 0, 1775, 1776, 1, 0, 0, 0, 1776, 1777, 1, 0, 0, 0, 1777, 1778, 5, 17, 0, 0, 1778, 1779, 3, 380, 190, 0, 1779, 177, 1, 0, 0, 0, 1780, 1781, 5, 101, 0, 0, 1781, 1782, 5, 202, 0, 0, 1782, 1784, 5, 378, 0, 0, 1783, 1785, 3, 30, 15, 0, 1784, 1783, 1, 0, 0, 0, 1784, 1785, 1, 0, 0, 0, 1785, 1786, 1, 0, 0, 0, 1786, 1787, 3, 482, 241, 0, 1787, 179, 1, 0, 0, 0, 1788, 1789, 5, 58, 0, 0, 1789, 1790, 5, 293, 0, 0, 1790, 1791, 5, 258, 0, 0, 1791, 1792, 3, 638, 319, 0, 1792, 1794, 3, 188, 94, 0, 1793, 1795, 3, 190, 95, 0, 1794, 1793, 1, 0, 0, 0, 1794, 1795, 1, 0, 0, 0, 1795, 1797, 1, 0, 0, 0, 1796, 1798, 3, 268, 134, 0, 1797, 1796, 1, 0, 0, 0, 1797, 1798, 1, 0, 0, 0, 1798, 1799, 1, 0, 0, 0, 1799, 1800, 3, 192, 96, 0, 1800, 181, 1, 0, 0, 0, 1801, 1802, 5, 101, 0, 0, 1802, 1803, 5, 293, 0, 0, 1803, 1804, 5, 258, 0, 0, 1804, 1805, 3, 638, 319, 0, 1805, 183, 1, 0, 0, 0, 1806, 1807, 5, 9, 0, 0, 1807, 1808, 5, 293, 0, 0, 1808, 1809, 5, 258, 0, 0, 1809, 1810, 3, 638, 319, 0, 1810, 1811, 3, 186, 93, 0, 1811, 185, 1, 0, 0, 0, 1812, 1818, 3, 188, 94, 0, 1813, 1818, 3, 190, 95, 0, 1814, 1818, 3, 268, 134, 0, 1815, 1818, 3, 192, 96, 0, 1816, 1818, 5, 115, 0, 0, 1817, 1812, 1, 0, 0, 0, 1817, 1813, 1, 0, 0, 0, 1817, 1814, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1816, 1, 0, 0, 0, 1818, 187, 1, 0, 0, 0, 1819, 1820, 5, 59, 0, 0, 1820, 1835, 5, 426, 0, 0, 1821, 1823, 5, 111, 0, 0, 1822, 1824, 5, 431, 0, 0, 1823, 1822, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 1832, 3, 578, 289, 0, 1826, 1830, 5, 20, 0, 0, 1827, 1828, 5, 223, 0, 0, 1828, 1830, 5, 32, 0, 0, 1829, 1826, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1830, 1831, 1, 0, 0, 0, 1831, 1833, 5, 426, 0, 0, 1832, 1829, 1, 0, 0, 0, 1832, 1833, 1, 0, 0, 0, 1833, 1835, 1, 0, 0, 0, 1834, 1819, 1, 0, 0, 0, 1834, 1821, 1, 0, 0, 0, 1835, 189, 1, 0, 0, 0, 1836, 1837, 5, 116, 0, 0, 1837, 1838, 5, 17, 0, 0, 1838, 1839, 5, 426, 0, 0, 1839, 191, 1, 0, 0, 0, 1840, 1842, 5, 85, 0, 0, 1841, 1840, 1, 0, 0, 0, 1841, 1842, 1, 0, 0, 0, 1842, 1843, 1, 0, 0, 0, 1843, 1844, 5, 17, 0, 0, 1844, 1845, 3, 2, 1, 0, 1845, 193, 1, 0, 0, 0, 1846, 1849, 3, 638, 319, 0, 1847, 1849, 5, 426, 0, 0, 1848, 1846, 1, 0, 0, 0, 1848, 1847, 1, 0, 0, 0, 1849, 195, 1, 0, 0, 0, 1850, 1851, 5, 47, 0, 0, 1851, 1852, 5, 426, 0, 0, 1852, 197, 1, 0, 0, 0, 1853, 1854, 5, 183, 0, 0, 1854, 1855, 5, 431, 0, 0, 1855, 199, 1, 0, 0, 0, 1856, 1857, 5, 238, 0, 0, 1857, 1866, 5, 32, 0, 0, 1858, 1861, 5, 399, 0, 0, 1859, 1862, 3, 202, 101, 0, 1860, 1862, 3, 254, 127, 0, 1861, 1859, 1, 0, 0, 0, 1861, 1860, 1, 0, 0, 0, 1862, 1867, 1, 0, 0, 0, 1863, 1864, 5, 316, 0, 0, 1864, 1865, 5, 399, 0, 0, 1865, 1867, 3, 204, 102, 0, 1866, 1858, 1, 0, 0, 0, 1866, 1863, 1, 0, 0, 0, 1867, 1868, 1, 0, 0, 0, 1868, 1869, 5, 400, 0, 0, 1869, 201, 1, 0, 0, 0, 1870, 1875, 3, 316, 158, 0, 1871, 1872, 5, 397, 0, 0, 1872, 1874, 3, 316, 158, 0, 1873, 1871, 1, 0, 0, 0, 1874, 1877, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 203, 1, 0, 0, 0, 1877, 1875, 1, 0, 0, 0, 1878, 1883, 3, 206, 103, 0, 1879, 1880, 5, 397, 0, 0, 1880, 1882, 3, 206, 103, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1885, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 205, 1, 0, 0, 0, 1885, 1883, 1, 0, 0, 0, 1886, 1905, 3, 256, 128, 0, 1887, 1892, 3, 666, 333, 0, 1888, 1892, 3, 668, 334, 0, 1889, 1892, 3, 672, 336, 0, 1890, 1892, 3, 674, 337, 0, 1891, 1887, 1, 0, 0, 0, 1891, 1888, 1, 0, 0, 0, 1891, 1889, 1, 0, 0, 0, 1891, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 5, 399, 0, 0, 1894, 1895, 3, 256, 128, 0, 1895, 1896, 5, 400, 0, 0, 1896, 1905, 1, 0, 0, 0, 1897, 1898, 7, 15, 0, 0, 1898, 1899, 5, 399, 0, 0, 1899, 1900, 5, 431, 0, 0, 1900, 1901, 5, 397, 0, 0, 1901, 1902, 3, 256, 128, 0, 1902, 1903, 5, 400, 0, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1886, 1, 0, 0, 0, 1904, 1891, 1, 0, 0, 0, 1904, 1897, 1, 0, 0, 0, 1905, 207, 1, 0, 0, 0, 1906, 1907, 5, 42, 0, 0, 1907, 1908, 5, 32, 0, 0, 1908, 1909, 5, 399, 0, 0, 1909, 1910, 3, 254, 127, 0, 1910, 1917, 5, 400, 0, 0, 1911, 1912, 5, 315, 0, 0, 1912, 1913, 5, 32, 0, 0, 1913, 1914, 5, 399, 0, 0, 1914, 1915, 3, 262, 131, 0, 1915, 1916, 5, 400, 0, 0, 1916, 1918, 1, 0, 0, 0, 1917, 1911, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1920, 5, 166, 0, 0, 1920, 1921, 5, 431, 0, 0, 1921, 1922, 5, 31, 0, 0, 1922, 209, 1, 0, 0, 0, 1923, 1924, 5, 310, 0, 0, 1924, 1925, 5, 32, 0, 0, 1925, 1926, 5, 399, 0, 0, 1926, 1927, 3, 254, 127, 0, 1927, 1928, 5, 400, 0, 0, 1928, 1929, 5, 224, 0, 0, 1929, 1930, 5, 399, 0, 0, 1930, 1931, 3, 290, 145, 0, 1931, 1933, 5, 400, 0, 0, 1932, 1934, 3, 40, 20, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 211, 1, 0, 0, 0, 1935, 1938, 3, 218, 109, 0, 1936, 1938, 3, 220, 110, 0, 1937, 1935, 1, 0, 0, 0, 1937, 1936, 1, 0, 0, 0, 1938, 213, 1, 0, 0, 0, 1939, 1940, 5, 266, 0, 0, 1940, 1941, 5, 426, 0, 0, 1941, 215, 1, 0, 0, 0, 1942, 1943, 5, 267, 0, 0, 1943, 1944, 5, 426, 0, 0, 1944, 217, 1, 0, 0, 0, 1945, 1946, 5, 291, 0, 0, 1946, 1947, 5, 137, 0, 0, 1947, 1948, 5, 301, 0, 0, 1948, 1952, 5, 426, 0, 0, 1949, 1950, 5, 387, 0, 0, 1950, 1951, 5, 302, 0, 0, 1951, 1953, 3, 226, 113, 0, 1952, 1949, 1, 0, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 219, 1, 0, 0, 0, 1954, 1955, 5, 291, 0, 0, 1955, 1956, 5, 137, 0, 0, 1956, 1958, 5, 87, 0, 0, 1957, 1959, 3, 236, 118, 0, 1958, 1957, 1, 0, 0, 0, 1958, 1959, 1, 0, 0, 0, 1959, 1961, 1, 0, 0, 0, 1960, 1962, 3, 238, 119, 0, 1961, 1960, 1, 0, 0, 0, 1961, 1962, 1, 0, 0, 0, 1962, 1964, 1, 0, 0, 0, 1963, 1965, 3, 240, 120, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1967, 1, 0, 0, 0, 1966, 1968, 3, 242, 121, 0, 1967, 1966, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 1, 0, 0, 0, 1969, 1971, 3, 244, 122, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 221, 1, 0, 0, 0, 1972, 1975, 3, 220, 110, 0, 1973, 1975, 3, 218, 109, 0, 1974, 1972, 1, 0, 0, 0, 1974, 1973, 1, 0, 0, 0, 1975, 223, 1, 0, 0, 0, 1976, 1977, 5, 332, 0, 0, 1977, 1978, 3, 226, 113, 0, 1978, 225, 1, 0, 0, 0, 1979, 1980, 5, 399, 0, 0, 1980, 1981, 3, 228, 114, 0, 1981, 1982, 5, 400, 0, 0, 1982, 227, 1, 0, 0, 0, 1983, 1993, 3, 232, 116, 0, 1984, 1989, 5, 426, 0, 0, 1985, 1986, 5, 397, 0, 0, 1986, 1988, 5, 426, 0, 0, 1987, 1985, 1, 0, 0, 0, 1988, 1991, 1, 0, 0, 0, 1989, 1987, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1993, 1, 0, 0, 0, 1991, 1989, 1, 0, 0, 0, 1992, 1983, 1, 0, 0, 0, 1992, 1984, 1, 0, 0, 0, 1993, 229, 1, 0, 0, 0, 1994, 1995, 5, 399, 0, 0, 1995, 1996, 3, 232, 116, 0, 1996, 1997, 5, 400, 0, 0, 1997, 231, 1, 0, 0, 0, 1998, 2003, 3, 234, 117, 0, 1999, 2000, 5, 397, 0, 0, 2000, 2002, 3, 234, 117, 0, 2001, 1999, 1, 0, 0, 0, 2002, 2005, 1, 0, 0, 0, 2003, 2001, 1, 0, 0, 0, 2003, 2004, 1, 0, 0, 0, 2004, 233, 1, 0, 0, 0, 2005, 2003, 1, 0, 0, 0, 2006, 2007, 5, 426, 0, 0, 2007, 2008, 5, 405, 0, 0, 2008, 2009, 5, 426, 0, 0, 2009, 235, 1, 0, 0, 0, 2010, 2011, 5, 127, 0, 0, 2011, 2012, 5, 334, 0, 0, 2012, 2013, 5, 32, 0, 0, 2013, 2017, 5, 426, 0, 0, 2014, 2015, 5, 110, 0, 0, 2015, 2016, 5, 32, 0, 0, 2016, 2018, 5, 426, 0, 0, 2017, 2014, 1, 0, 0, 0, 2017, 2018, 1, 0, 0, 0, 2018, 237, 1, 0, 0, 0, 2019, 2020, 5, 44, 0, 0, 2020, 2021, 5, 169, 0, 0, 2021, 2022, 5, 334, 0, 0, 2022, 2023, 5, 32, 0, 0, 2023, 2024, 5, 426, 0, 0, 2024, 239, 1, 0, 0, 0, 2025, 2026, 5, 198, 0, 0, 2026, 2027, 5, 174, 0, 0, 2027, 2028, 5, 334, 0, 0, 2028, 2029, 5, 32, 0, 0, 2029, 2030, 5, 426, 0, 0, 2030, 241, 1, 0, 0, 0, 2031, 2032, 5, 186, 0, 0, 2032, 2033, 5, 334, 0, 0, 2033, 2034, 5, 32, 0, 0, 2034, 2035, 5, 426, 0, 0, 2035, 243, 1, 0, 0, 0, 2036, 2037, 5, 219, 0, 0, 2037, 2038, 5, 85, 0, 0, 2038, 2039, 5, 17, 0, 0, 2039, 2040, 5, 426, 0, 0, 2040, 245, 1, 0, 0, 0, 2041, 2042, 5, 321, 0, 0, 2042, 2043, 5, 17, 0, 0, 2043, 2044, 5, 160, 0, 0, 2044, 2045, 5, 426, 0, 0, 2045, 2046, 5, 233, 0, 0, 2046, 2051, 5, 426, 0, 0, 2047, 2048, 5, 159, 0, 0, 2048, 2049, 5, 426, 0, 0, 2049, 2050, 5, 232, 0, 0, 2050, 2052, 5, 426, 0, 0, 2051, 2047, 1, 0, 0, 0, 2051, 2052, 1, 0, 0, 0, 2052, 2083, 1, 0, 0, 0, 2053, 2054, 5, 321, 0, 0, 2054, 2055, 5, 32, 0, 0, 2055, 2059, 5, 426, 0, 0, 2056, 2057, 5, 387, 0, 0, 2057, 2058, 5, 302, 0, 0, 2058, 2060, 3, 226, 113, 0, 2059, 2056, 1, 0, 0, 0, 2059, 2060, 1, 0, 0, 0, 2060, 2064, 1, 0, 0, 0, 2061, 2062, 5, 321, 0, 0, 2062, 2063, 5, 17, 0, 0, 2063, 2065, 3, 638, 319, 0, 2064, 2061, 1, 0, 0, 0, 2064, 2065, 1, 0, 0, 0, 2065, 2083, 1, 0, 0, 0, 2066, 2067, 5, 321, 0, 0, 2067, 2068, 5, 32, 0, 0, 2068, 2072, 3, 638, 319, 0, 2069, 2070, 5, 387, 0, 0, 2070, 2071, 5, 302, 0, 0, 2071, 2073, 3, 226, 113, 0, 2072, 2069, 1, 0, 0, 0, 2072, 2073, 1, 0, 0, 0, 2073, 2077, 1, 0, 0, 0, 2074, 2075, 5, 321, 0, 0, 2075, 2076, 5, 17, 0, 0, 2076, 2078, 3, 638, 319, 0, 2077, 2074, 1, 0, 0, 0, 2077, 2078, 1, 0, 0, 0, 2078, 2083, 1, 0, 0, 0, 2079, 2080, 5, 321, 0, 0, 2080, 2081, 5, 17, 0, 0, 2081, 2083, 3, 638, 319, 0, 2082, 2041, 1, 0, 0, 0, 2082, 2053, 1, 0, 0, 0, 2082, 2066, 1, 0, 0, 0, 2082, 2079, 1, 0, 0, 0, 2083, 247, 1, 0, 0, 0, 2084, 2089, 3, 310, 155, 0, 2085, 2086, 5, 397, 0, 0, 2086, 2088, 3, 310, 155, 0, 2087, 2085, 1, 0, 0, 0, 2088, 2091, 1, 0, 0, 0, 2089, 2087, 1, 0, 0, 0, 2089, 2090, 1, 0, 0, 0, 2090, 249, 1, 0, 0, 0, 2091, 2089, 1, 0, 0, 0, 2092, 2097, 3, 312, 156, 0, 2093, 2094, 5, 397, 0, 0, 2094, 2096, 3, 312, 156, 0, 2095, 2093, 1, 0, 0, 0, 2096, 2099, 1, 0, 0, 0, 2097, 2095, 1, 0, 0, 0, 2097, 2098, 1, 0, 0, 0, 2098, 251, 1, 0, 0, 0, 2099, 2097, 1, 0, 0, 0, 2100, 2105, 3, 340, 170, 0, 2101, 2102, 5, 397, 0, 0, 2102, 2104, 3, 340, 170, 0, 2103, 2101, 1, 0, 0, 0, 2104, 2107, 1, 0, 0, 0, 2105, 2103, 1, 0, 0, 0, 2105, 2106, 1, 0, 0, 0, 2106, 253, 1, 0, 0, 0, 2107, 2105, 1, 0, 0, 0, 2108, 2113, 3, 256, 128, 0, 2109, 2110, 5, 397, 0, 0, 2110, 2112, 3, 256, 128, 0, 2111, 2109, 1, 0, 0, 0, 2112, 2115, 1, 0, 0, 0, 2113, 2111, 1, 0, 0, 0, 2113, 2114, 1, 0, 0, 0, 2114, 255, 1, 0, 0, 0, 2115, 2113, 1, 0, 0, 0, 2116, 2119, 3, 682, 341, 0, 2117, 2119, 4, 128, 0, 0, 2118, 2116, 1, 0, 0, 0, 2118, 2117, 1, 0, 0, 0, 2119, 257, 1, 0, 0, 0, 2120, 2121, 3, 638, 319, 0, 2121, 259, 1, 0, 0, 0, 2122, 2132, 3, 256, 128, 0, 2123, 2128, 5, 395, 0, 0, 2124, 2129, 5, 104, 0, 0, 2125, 2129, 5, 175, 0, 0, 2126, 2129, 5, 375, 0, 0, 2127, 2129, 3, 638, 319, 0, 2128, 2124, 1, 0, 0, 0, 2128, 2125, 1, 0, 0, 0, 2128, 2126, 1, 0, 0, 0, 2128, 2127, 1, 0, 0, 0, 2129, 2131, 1, 0, 0, 0, 2130, 2123, 1, 0, 0, 0, 2131, 2134, 1, 0, 0, 0, 2132, 2130, 1, 0, 0, 0, 2132, 2133, 1, 0, 0, 0, 2133, 261, 1, 0, 0, 0, 2134, 2132, 1, 0, 0, 0, 2135, 2140, 3, 302, 151, 0, 2136, 2137, 5, 397, 0, 0, 2137, 2139, 3, 302, 151, 0, 2138, 2136, 1, 0, 0, 0, 2139, 2142, 1, 0, 0, 0, 2140, 2138, 1, 0, 0, 0, 2140, 2141, 1, 0, 0, 0, 2141, 263, 1, 0, 0, 0, 2142, 2140, 1, 0, 0, 0, 2143, 2144, 5, 399, 0, 0, 2144, 2145, 3, 254, 127, 0, 2145, 2146, 5, 400, 0, 0, 2146, 265, 1, 0, 0, 0, 2147, 2149, 3, 268, 134, 0, 2148, 2150, 3, 270, 135, 0, 2149, 2148, 1, 0, 0, 0, 2149, 2150, 1, 0, 0, 0, 2150, 2153, 1, 0, 0, 0, 2151, 2153, 3, 272, 136, 0, 2152, 2147, 1, 0, 0, 0, 2152, 2151, 1, 0, 0, 0, 2153, 267, 1, 0, 0, 0, 2154, 2157, 3, 662, 331, 0, 2155, 2157, 3, 664, 332, 0, 2156, 2154, 1, 0, 0, 0, 2156, 2155, 1, 0, 0, 0, 2157, 269, 1, 0, 0, 0, 2158, 2159, 7, 16, 0, 0, 2159, 271, 1, 0, 0, 0, 2160, 2164, 5, 109, 0, 0, 2161, 2162, 5, 216, 0, 0, 2162, 2164, 5, 109, 0, 0, 2163, 2160, 1, 0, 0, 0, 2163, 2161, 1, 0, 0, 0, 2164, 273, 1, 0, 0, 0, 2165, 2166, 7, 17, 0, 0, 2166, 275, 1, 0, 0, 0, 2167, 2168, 5, 55, 0, 0, 2168, 2170, 3, 638, 319, 0, 2169, 2167, 1, 0, 0, 0, 2169, 2170, 1, 0, 0, 0, 2170, 2171, 1, 0, 0, 0, 2171, 2173, 3, 280, 140, 0, 2172, 2174, 3, 336, 168, 0, 2173, 2172, 1, 0, 0, 0, 2173, 2174, 1, 0, 0, 0, 2174, 277, 1, 0, 0, 0, 2175, 2176, 5, 55, 0, 0, 2176, 2177, 3, 638, 319, 0, 2177, 2179, 3, 280, 140, 0, 2178, 2180, 3, 338, 169, 0, 2179, 2178, 1, 0, 0, 0, 2179, 2180, 1, 0, 0, 0, 2180, 279, 1, 0, 0, 0, 2181, 2184, 3, 282, 141, 0, 2182, 2184, 3, 284, 142, 0, 2183, 2181, 1, 0, 0, 0, 2183, 2182, 1, 0, 0, 0, 2184, 281, 1, 0, 0, 0, 2185, 2186, 3, 334, 167, 0, 2186, 2187, 3, 264, 132, 0, 2187, 283, 1, 0, 0, 0, 2188, 2189, 5, 40, 0, 0, 2189, 2190, 5, 399, 0, 0, 2190, 2191, 3, 580, 290, 0, 2191, 2192, 5, 400, 0, 0, 2192, 285, 1, 0, 0, 0, 2193, 2194, 5, 55, 0, 0, 2194, 2196, 3, 638, 319, 0, 2195, 2193, 1, 0, 0, 0, 2195, 2196, 1, 0, 0, 0, 2196, 2197, 1, 0, 0, 0, 2197, 2198, 5, 136, 0, 0, 2198, 2199, 5, 173, 0, 0, 2199, 2200, 3, 264, 132, 0, 2200, 2201, 5, 269, 0, 0, 2201, 2202, 3, 478, 239, 0, 2202, 2204, 3, 264, 132, 0, 2203, 2205, 3, 336, 168, 0, 2204, 2203, 1, 0, 0, 0, 2204, 2205, 1, 0, 0, 0, 2205, 287, 1, 0, 0, 0, 2206, 2207, 5, 55, 0, 0, 2207, 2208, 3, 638, 319, 0, 2208, 2209, 5, 136, 0, 0, 2209, 2210, 5, 173, 0, 0, 2210, 2211, 3, 264, 132, 0, 2211, 2212, 5, 269, 0, 0, 2212, 2213, 3, 478, 239, 0, 2213, 2215, 3, 264, 132, 0, 2214, 2216, 3, 338, 169, 0, 2215, 2214, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 289, 1, 0, 0, 0, 2217, 2220, 3, 296, 148, 0, 2218, 2220, 3, 292, 146, 0, 2219, 2217, 1, 0, 0, 0, 2219, 2218, 1, 0, 0, 0, 2220, 291, 1, 0, 0, 0, 2221, 2226, 3, 294, 147, 0, 2222, 2223, 5, 397, 0, 0, 2223, 2225, 3, 294, 147, 0, 2224, 2222, 1, 0, 0, 0, 2225, 2228, 1, 0, 0, 0, 2226, 2224, 1, 0, 0, 0, 2226, 2227, 1, 0, 0, 0, 2227, 293, 1, 0, 0, 0, 2228, 2226, 1, 0, 0, 0, 2229, 2230, 5, 399, 0, 0, 2230, 2231, 3, 296, 148, 0, 2231, 2232, 5, 400, 0, 0, 2232, 295, 1, 0, 0, 0, 2233, 2238, 3, 572, 286, 0, 2234, 2235, 5, 397, 0, 0, 2235, 2237, 3, 572, 286, 0, 2236, 2234, 1, 0, 0, 0, 2237, 2240, 1, 0, 0, 0, 2238, 2236, 1, 0, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 297, 1, 0, 0, 0, 2240, 2238, 1, 0, 0, 0, 2241, 2242, 7, 18, 0, 0, 2242, 299, 1, 0, 0, 0, 2243, 2244, 5, 220, 0, 0, 2244, 2245, 7, 19, 0, 0, 2245, 301, 1, 0, 0, 0, 2246, 2248, 3, 256, 128, 0, 2247, 2249, 3, 298, 149, 0, 2248, 2247, 1, 0, 0, 0, 2248, 2249, 1, 0, 0, 0, 2249, 2251, 1, 0, 0, 0, 2250, 2252, 3, 300, 150, 0, 2251, 2250, 1, 0, 0, 0, 2251, 2252, 1, 0, 0, 0, 2252, 303, 1, 0, 0, 0, 2253, 2258, 3, 306, 153, 0, 2254, 2255, 5, 397, 0, 0, 2255, 2257, 3, 306, 153, 0, 2256, 2254, 1, 0, 0, 0, 2257, 2260, 1, 0, 0, 0, 2258, 2256, 1, 0, 0, 0, 2258, 2259, 1, 0, 0, 0, 2259, 305, 1, 0, 0, 0, 2260, 2258, 1, 0, 0, 0, 2261, 2264, 3, 258, 129, 0, 2262, 2263, 5, 47, 0, 0, 2263, 2265, 5, 426, 0, 0, 2264, 2262, 1, 0, 0, 0, 2264, 2265, 1, 0, 0, 0, 2265, 307, 1, 0, 0, 0, 2266, 2269, 3, 256, 128, 0, 2267, 2269, 3, 580, 290, 0, 2268, 2266, 1, 0, 0, 0, 2268, 2267, 1, 0, 0, 0, 2269, 2271, 1, 0, 0, 0, 2270, 2272, 3, 298, 149, 0, 2271, 2270, 1, 0, 0, 0, 2271, 2272, 1, 0, 0, 0, 2272, 2274, 1, 0, 0, 0, 2273, 2275, 3, 300, 150, 0, 2274, 2273, 1, 0, 0, 0, 2274, 2275, 1, 0, 0, 0, 2275, 309, 1, 0, 0, 0, 2276, 2277, 3, 258, 129, 0, 2277, 2280, 3, 342, 171, 0, 2278, 2279, 5, 47, 0, 0, 2279, 2281, 5, 426, 0, 0, 2280, 2278, 1, 0, 0, 0, 2280, 2281, 1, 0, 0, 0, 2281, 311, 1, 0, 0, 0, 2282, 2285, 3, 314, 157, 0, 2283, 2285, 3, 316, 158, 0, 2284, 2282, 1, 0, 0, 0, 2284, 2283, 1, 0, 0, 0, 2285, 313, 1, 0, 0, 0, 2286, 2289, 3, 286, 143, 0, 2287, 2289, 3, 276, 138, 0, 2288, 2286, 1, 0, 0, 0, 2288, 2287, 1, 0, 0, 0, 2289, 315, 1, 0, 0, 0, 2290, 2291, 3, 258, 129, 0, 2291, 2293, 3, 342, 171, 0, 2292, 2294, 3, 318, 159, 0, 2293, 2292, 1, 0, 0, 0, 2293, 2294, 1, 0, 0, 0, 2294, 2297, 1, 0, 0, 0, 2295, 2296, 5, 47, 0, 0, 2296, 2298, 5, 426, 0, 0, 2297, 2295, 1, 0, 0, 0, 2297, 2298, 1, 0, 0, 0, 2298, 317, 1, 0, 0, 0, 2299, 2302, 3, 320, 160, 0, 2300, 2302, 3, 322, 161, 0, 2301, 2299, 1, 0, 0, 0, 2301, 2300, 1, 0, 0, 0, 2302, 319, 1, 0, 0, 0, 2303, 2304, 5, 55, 0, 0, 2304, 2306, 3, 638, 319, 0, 2305, 2303, 1, 0, 0, 0, 2305, 2306, 1, 0, 0, 0, 2306, 2307, 1, 0, 0, 0, 2307, 2308, 5, 269, 0, 0, 2308, 2309, 3, 478, 239, 0, 2309, 2310, 5, 399, 0, 0, 2310, 2311, 3, 256, 128, 0, 2311, 2313, 5, 400, 0, 0, 2312, 2314, 3, 336, 168, 0, 2313, 2312, 1, 0, 0, 0, 2313, 2314, 1, 0, 0, 0, 2314, 321, 1, 0, 0, 0, 2315, 2316, 5, 55, 0, 0, 2316, 2318, 3, 638, 319, 0, 2317, 2315, 1, 0, 0, 0, 2317, 2318, 1, 0, 0, 0, 2318, 2319, 1, 0, 0, 0, 2319, 2321, 3, 330, 165, 0, 2320, 2322, 3, 336, 168, 0, 2321, 2320, 1, 0, 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 323, 1, 0, 0, 0, 2323, 2326, 3, 326, 163, 0, 2324, 2326, 3, 328, 164, 0, 2325, 2323, 1, 0, 0, 0, 2325, 2324, 1, 0, 0, 0, 2326, 325, 1, 0, 0, 0, 2327, 2328, 5, 55, 0, 0, 2328, 2330, 3, 638, 319, 0, 2329, 2327, 1, 0, 0, 0, 2329, 2330, 1, 0, 0, 0, 2330, 2331, 1, 0, 0, 0, 2331, 2332, 5, 269, 0, 0, 2332, 2333, 3, 478, 239, 0, 2333, 2334, 5, 399, 0, 0, 2334, 2335, 3, 256, 128, 0, 2335, 2337, 5, 400, 0, 0, 2336, 2338, 3, 338, 169, 0, 2337, 2336, 1, 0, 0, 0, 2337, 2338, 1, 0, 0, 0, 2338, 327, 1, 0, 0, 0, 2339, 2340, 5, 55, 0, 0, 2340, 2342, 3, 638, 319, 0, 2341, 2339, 1, 0, 0, 0, 2341, 2342, 1, 0, 0, 0, 2342, 2343, 1, 0, 0, 0, 2343, 2345, 3, 330, 165, 0, 2344, 2346, 3, 338, 169, 0, 2345, 2344, 1, 0, 0, 0, 2345, 2346, 1, 0, 0, 0, 2346, 329, 1, 0, 0, 0, 2347, 2348, 5, 216, 0, 0, 2348, 2354, 5, 219, 0, 0, 2349, 2350, 5, 83, 0, 0, 2350, 2354, 3, 332, 166, 0, 2351, 2354, 3, 284, 142, 0, 2352, 2354, 3, 334, 167, 0, 2353, 2347, 1, 0, 0, 0, 2353, 2349, 1, 0, 0, 0, 2353, 2351, 1, 0, 0, 0, 2353, 2352, 1, 0, 0, 0, 2354, 331, 1, 0, 0, 0, 2355, 2359, 3, 572, 286, 0, 2356, 2359, 3, 550, 275, 0, 2357, 2359, 3, 560, 280, 0, 2358, 2355, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2358, 2357, 1, 0, 0, 0, 2359, 333, 1, 0, 0, 0, 2360, 2361, 5, 251, 0, 0, 2361, 2364, 5, 173, 0, 0, 2362, 2364, 5, 358, 0, 0, 2363, 2360, 1, 0, 0, 0, 2363, 2362, 1, 0, 0, 0, 2364, 335, 1, 0, 0, 0, 2365, 2367, 3, 266, 133, 0, 2366, 2368, 3, 274, 137, 0, 2367, 2366, 1, 0, 0, 0, 2367, 2368, 1, 0, 0, 0, 2368, 337, 1, 0, 0, 0, 2369, 2371, 3, 266, 133, 0, 2370, 2372, 3, 274, 137, 0, 2371, 2370, 1, 0, 0, 0, 2371, 2372, 1, 0, 0, 0, 2372, 339, 1, 0, 0, 0, 2373, 2374, 3, 258, 129, 0, 2374, 2375, 5, 396, 0, 0, 2375, 2378, 3, 342, 171, 0, 2376, 2377, 5, 47, 0, 0, 2377, 2379, 5, 426, 0, 0, 2378, 2376, 1, 0, 0, 0, 2378, 2379, 1, 0, 0, 0, 2379, 341, 1, 0, 0, 0, 2380, 2381, 3, 346, 173, 0, 2381, 343, 1, 0, 0, 0, 2382, 2387, 3, 342, 171, 0, 2383, 2384, 5, 397, 0, 0, 2384, 2386, 3, 342, 171, 0, 2385, 2383, 1, 0, 0, 0, 2386, 2389, 1, 0, 0, 0, 2387, 2385, 1, 0, 0, 0, 2387, 2388, 1, 0, 0, 0, 2388, 345, 1, 0, 0, 0, 2389, 2387, 1, 0, 0, 0, 2390, 2396, 3, 348, 174, 0, 2391, 2396, 3, 350, 175, 0, 2392, 2396, 3, 352, 176, 0, 2393, 2396, 3, 354, 177, 0, 2394, 2396, 3, 356, 178, 0, 2395, 2390, 1, 0, 0, 0, 2395, 2391, 1, 0, 0, 0, 2395, 2392, 1, 0, 0, 0, 2395, 2393, 1, 0, 0, 0, 2395, 2394, 1, 0, 0, 0, 2396, 347, 1, 0, 0, 0, 2397, 2435, 5, 340, 0, 0, 2398, 2435, 5, 311, 0, 0, 2399, 2435, 5, 162, 0, 0, 2400, 2435, 5, 163, 0, 0, 2401, 2435, 5, 26, 0, 0, 2402, 2435, 5, 28, 0, 0, 2403, 2435, 5, 131, 0, 0, 2404, 2435, 5, 264, 0, 0, 2405, 2407, 5, 100, 0, 0, 2406, 2408, 5, 248, 0, 0, 2407, 2406, 1, 0, 0, 0, 2407, 2408, 1, 0, 0, 0, 2408, 2435, 1, 0, 0, 0, 2409, 2435, 5, 71, 0, 0, 2410, 2435, 5, 72, 0, 0, 2411, 2435, 5, 337, 0, 0, 2412, 2435, 5, 338, 0, 0, 2413, 2414, 5, 337, 0, 0, 2414, 2415, 5, 387, 0, 0, 2415, 2416, 5, 188, 0, 0, 2416, 2417, 5, 336, 0, 0, 2417, 2435, 5, 394, 0, 0, 2418, 2435, 5, 323, 0, 0, 2419, 2435, 5, 27, 0, 0, 2420, 2428, 3, 680, 340, 0, 2421, 2422, 5, 399, 0, 0, 2422, 2425, 5, 431, 0, 0, 2423, 2424, 5, 397, 0, 0, 2424, 2426, 5, 431, 0, 0, 2425, 2423, 1, 0, 0, 0, 2425, 2426, 1, 0, 0, 0, 2426, 2427, 1, 0, 0, 0, 2427, 2429, 5, 400, 0, 0, 2428, 2421, 1, 0, 0, 0, 2428, 2429, 1, 0, 0, 0, 2429, 2435, 1, 0, 0, 0, 2430, 2431, 7, 20, 0, 0, 2431, 2432, 5, 399, 0, 0, 2432, 2433, 5, 431, 0, 0, 2433, 2435, 5, 400, 0, 0, 2434, 2397, 1, 0, 0, 0, 2434, 2398, 1, 0, 0, 0, 2434, 2399, 1, 0, 0, 0, 2434, 2400, 1, 0, 0, 0, 2434, 2401, 1, 0, 0, 0, 2434, 2402, 1, 0, 0, 0, 2434, 2403, 1, 0, 0, 0, 2434, 2404, 1, 0, 0, 0, 2434, 2405, 1, 0, 0, 0, 2434, 2409, 1, 0, 0, 0, 2434, 2410, 1, 0, 0, 0, 2434, 2411, 1, 0, 0, 0, 2434, 2412, 1, 0, 0, 0, 2434, 2413, 1, 0, 0, 0, 2434, 2418, 1, 0, 0, 0, 2434, 2419, 1, 0, 0, 0, 2434, 2420, 1, 0, 0, 0, 2434, 2430, 1, 0, 0, 0, 2435, 349, 1, 0, 0, 0, 2436, 2437, 5, 16, 0, 0, 2437, 2438, 5, 409, 0, 0, 2438, 2439, 3, 346, 173, 0, 2439, 2440, 5, 411, 0, 0, 2440, 351, 1, 0, 0, 0, 2441, 2442, 5, 324, 0, 0, 2442, 2443, 5, 409, 0, 0, 2443, 2444, 3, 252, 126, 0, 2444, 2445, 5, 411, 0, 0, 2445, 353, 1, 0, 0, 0, 2446, 2447, 5, 198, 0, 0, 2447, 2448, 5, 409, 0, 0, 2448, 2449, 3, 348, 174, 0, 2449, 2450, 5, 397, 0, 0, 2450, 2451, 3, 346, 173, 0, 2451, 2452, 5, 411, 0, 0, 2452, 355, 1, 0, 0, 0, 2453, 2454, 5, 357, 0, 0, 2454, 2455, 5, 409, 0, 0, 2455, 2456, 3, 344, 172, 0, 2456, 2457, 5, 411, 0, 0, 2457, 357, 1, 0, 0, 0, 2458, 2460, 7, 21, 0, 0, 2459, 2461, 7, 22, 0, 0, 2460, 2459, 1, 0, 0, 0, 2460, 2461, 1, 0, 0, 0, 2461, 359, 1, 0, 0, 0, 2462, 2464, 3, 364, 182, 0, 2463, 2462, 1, 0, 0, 0, 2463, 2464, 1, 0, 0, 0, 2464, 2465, 1, 0, 0, 0, 2465, 2466, 3, 362, 181, 0, 2466, 361, 1, 0, 0, 0, 2467, 2470, 3, 368, 184, 0, 2468, 2470, 3, 372, 186, 0, 2469, 2467, 1, 0, 0, 0, 2469, 2468, 1, 0, 0, 0, 2470, 363, 1, 0, 0, 0, 2471, 2472, 5, 387, 0, 0, 2472, 2477, 3, 366, 183, 0, 2473, 2474, 5, 397, 0, 0, 2474, 2476, 3, 366, 183, 0, 2475, 2473, 1, 0, 0, 0, 2476, 2479, 1, 0, 0, 0, 2477, 2475, 1, 0, 0, 0, 2477, 2478, 1, 0, 0, 0, 2478, 365, 1, 0, 0, 0, 2479, 2477, 1, 0, 0, 0, 2480, 2485, 3, 638, 319, 0, 2481, 2482, 5, 399, 0, 0, 2482, 2483, 3, 254, 127, 0, 2483, 2484, 5, 400, 0, 0, 2484, 2486, 1, 0, 0, 0, 2485, 2481, 1, 0, 0, 0, 2485, 2486, 1, 0, 0, 0, 2486, 2487, 1, 0, 0, 0, 2487, 2488, 5, 17, 0, 0, 2488, 2489, 5, 399, 0, 0, 2489, 2490, 3, 360, 180, 0, 2490, 2491, 5, 400, 0, 0, 2491, 367, 1, 0, 0, 0, 2492, 2498, 3, 370, 185, 0, 2493, 2494, 3, 358, 179, 0, 2494, 2495, 3, 370, 185, 0, 2495, 2497, 1, 0, 0, 0, 2496, 2493, 1, 0, 0, 0, 2497, 2500, 1, 0, 0, 0, 2498, 2496, 1, 0, 0, 0, 2498, 2499, 1, 0, 0, 0, 2499, 369, 1, 0, 0, 0, 2500, 2498, 1, 0, 0, 0, 2501, 2502, 3, 448, 224, 0, 2502, 2503, 3, 382, 191, 0, 2503, 2505, 3, 500, 250, 0, 2504, 2506, 3, 462, 231, 0, 2505, 2504, 1, 0, 0, 0, 2505, 2506, 1, 0, 0, 0, 2506, 2508, 1, 0, 0, 0, 2507, 2509, 3, 494, 247, 0, 2508, 2507, 1, 0, 0, 0, 2508, 2509, 1, 0, 0, 0, 2509, 2511, 1, 0, 0, 0, 2510, 2512, 3, 520, 260, 0, 2511, 2510, 1, 0, 0, 0, 2511, 2512, 1, 0, 0, 0, 2512, 2514, 1, 0, 0, 0, 2513, 2515, 3, 528, 264, 0, 2514, 2513, 1, 0, 0, 0, 2514, 2515, 1, 0, 0, 0, 2515, 2517, 1, 0, 0, 0, 2516, 2518, 3, 512, 256, 0, 2517, 2516, 1, 0, 0, 0, 2517, 2518, 1, 0, 0, 0, 2518, 2520, 1, 0, 0, 0, 2519, 2521, 3, 530, 265, 0, 2520, 2519, 1, 0, 0, 0, 2520, 2521, 1, 0, 0, 0, 2521, 2523, 1, 0, 0, 0, 2522, 2524, 3, 542, 271, 0, 2523, 2522, 1, 0, 0, 0, 2523, 2524, 1, 0, 0, 0, 2524, 2526, 1, 0, 0, 0, 2525, 2527, 3, 544, 272, 0, 2526, 2525, 1, 0, 0, 0, 2526, 2527, 1, 0, 0, 0, 2527, 2529, 1, 0, 0, 0, 2528, 2530, 3, 546, 273, 0, 2529, 2528, 1, 0, 0, 0, 2529, 2530, 1, 0, 0, 0, 2530, 2532, 1, 0, 0, 0, 2531, 2533, 3, 548, 274, 0, 2532, 2531, 1, 0, 0, 0, 2532, 2533, 1, 0, 0, 0, 2533, 2535, 1, 0, 0, 0, 2534, 2536, 3, 386, 193, 0, 2535, 2534, 1, 0, 0, 0, 2535, 2536, 1, 0, 0, 0, 2536, 2573, 1, 0, 0, 0, 2537, 2538, 3, 448, 224, 0, 2538, 2540, 3, 500, 250, 0, 2539, 2541, 3, 462, 231, 0, 2540, 2539, 1, 0, 0, 0, 2540, 2541, 1, 0, 0, 0, 2541, 2543, 1, 0, 0, 0, 2542, 2544, 3, 494, 247, 0, 2543, 2542, 1, 0, 0, 0, 2543, 2544, 1, 0, 0, 0, 2544, 2546, 1, 0, 0, 0, 2545, 2547, 3, 520, 260, 0, 2546, 2545, 1, 0, 0, 0, 2546, 2547, 1, 0, 0, 0, 2547, 2549, 1, 0, 0, 0, 2548, 2550, 3, 528, 264, 0, 2549, 2548, 1, 0, 0, 0, 2549, 2550, 1, 0, 0, 0, 2550, 2552, 1, 0, 0, 0, 2551, 2553, 3, 512, 256, 0, 2552, 2551, 1, 0, 0, 0, 2552, 2553, 1, 0, 0, 0, 2553, 2555, 1, 0, 0, 0, 2554, 2556, 3, 530, 265, 0, 2555, 2554, 1, 0, 0, 0, 2555, 2556, 1, 0, 0, 0, 2556, 2558, 1, 0, 0, 0, 2557, 2559, 3, 542, 271, 0, 2558, 2557, 1, 0, 0, 0, 2558, 2559, 1, 0, 0, 0, 2559, 2561, 1, 0, 0, 0, 2560, 2562, 3, 544, 272, 0, 2561, 2560, 1, 0, 0, 0, 2561, 2562, 1, 0, 0, 0, 2562, 2564, 1, 0, 0, 0, 2563, 2565, 3, 546, 273, 0, 2564, 2563, 1, 0, 0, 0, 2564, 2565, 1, 0, 0, 0, 2565, 2567, 1, 0, 0, 0, 2566, 2568, 3, 548, 274, 0, 2567, 2566, 1, 0, 0, 0, 2567, 2568, 1, 0, 0, 0, 2568, 2570, 1, 0, 0, 0, 2569, 2571, 3, 386, 193, 0, 2570, 2569, 1, 0, 0, 0, 2570, 2571, 1, 0, 0, 0, 2571, 2573, 1, 0, 0, 0, 2572, 2501, 1, 0, 0, 0, 2572, 2537, 1, 0, 0, 0, 2573, 371, 1, 0, 0, 0, 2574, 2575, 3, 382, 191, 0, 2575, 2576, 3, 376, 188, 0, 2576, 2579, 1, 0, 0, 0, 2577, 2579, 3, 376, 188, 0, 2578, 2574, 1, 0, 0, 0, 2578, 2577, 1, 0, 0, 0, 2579, 373, 1, 0, 0, 0, 2580, 2582, 3, 500, 250, 0, 2581, 2583, 3, 448, 224, 0, 2582, 2581, 1, 0, 0, 0, 2582, 2583, 1, 0, 0, 0, 2583, 2585, 1, 0, 0, 0, 2584, 2586, 3, 494, 247, 0, 2585, 2584, 1, 0, 0, 0, 2585, 2586, 1, 0, 0, 0, 2586, 2588, 1, 0, 0, 0, 2587, 2589, 3, 520, 260, 0, 2588, 2587, 1, 0, 0, 0, 2588, 2589, 1, 0, 0, 0, 2589, 2591, 1, 0, 0, 0, 2590, 2592, 3, 528, 264, 0, 2591, 2590, 1, 0, 0, 0, 2591, 2592, 1, 0, 0, 0, 2592, 2594, 1, 0, 0, 0, 2593, 2595, 3, 512, 256, 0, 2594, 2593, 1, 0, 0, 0, 2594, 2595, 1, 0, 0, 0, 2595, 2597, 1, 0, 0, 0, 2596, 2598, 3, 530, 265, 0, 2597, 2596, 1, 0, 0, 0, 2597, 2598, 1, 0, 0, 0, 2598, 2605, 1, 0, 0, 0, 2599, 2600, 5, 399, 0, 0, 2600, 2601, 3, 376, 188, 0, 2601, 2602, 5, 400, 0, 0, 2602, 2605, 1, 0, 0, 0, 2603, 2605, 3, 496, 248, 0, 2604, 2580, 1, 0, 0, 0, 2604, 2599, 1, 0, 0, 0, 2604, 2603, 1, 0, 0, 0, 2605, 375, 1, 0, 0, 0, 2606, 2608, 3, 374, 187, 0, 2607, 2609, 3, 378, 189, 0, 2608, 2607, 1, 0, 0, 0, 2608, 2609, 1, 0, 0, 0, 2609, 2611, 1, 0, 0, 0, 2610, 2612, 3, 542, 271, 0, 2611, 2610, 1, 0, 0, 0, 2611, 2612, 1, 0, 0, 0, 2612, 2614, 1, 0, 0, 0, 2613, 2615, 3, 544, 272, 0, 2614, 2613, 1, 0, 0, 0, 2614, 2615, 1, 0, 0, 0, 2615, 2617, 1, 0, 0, 0, 2616, 2618, 3, 546, 273, 0, 2617, 2616, 1, 0, 0, 0, 2617, 2618, 1, 0, 0, 0, 2618, 2620, 1, 0, 0, 0, 2619, 2621, 3, 548, 274, 0, 2620, 2619, 1, 0, 0, 0, 2620, 2621, 1, 0, 0, 0, 2621, 2623, 1, 0, 0, 0, 2622, 2624, 3, 386, 193, 0, 2623, 2622, 1, 0, 0, 0, 2623, 2624, 1, 0, 0, 0, 2624, 377, 1, 0, 0, 0, 2625, 2626, 3, 358, 179, 0, 2626, 2627, 3, 374, 187, 0, 2627, 2629, 1, 0, 0, 0, 2628, 2625, 1, 0, 0, 0, 2629, 2630, 1, 0, 0, 0, 2630, 2628, 1, 0, 0, 0, 2630, 2631, 1, 0, 0, 0, 2631, 379, 1, 0, 0, 0, 2632, 2634, 3, 364, 182, 0, 2633, 2632, 1, 0, 0, 0, 2633, 2634, 1, 0, 0, 0, 2634, 2635, 1, 0, 0, 0, 2635, 2636, 3, 376, 188, 0, 2636, 381, 1, 0, 0, 0, 2637, 2654, 5, 161, 0, 0, 2638, 2639, 5, 235, 0, 0, 2639, 2641, 3, 384, 192, 0, 2640, 2642, 3, 32, 16, 0, 2641, 2640, 1, 0, 0, 0, 2641, 2642, 1, 0, 0, 0, 2642, 2655, 1, 0, 0, 0, 2643, 2645, 5, 166, 0, 0, 2644, 2646, 5, 329, 0, 0, 2645, 2644, 1, 0, 0, 0, 2645, 2646, 1, 0, 0, 0, 2646, 2647, 1, 0, 0, 0, 2647, 2652, 3, 624, 312, 0, 2648, 2649, 5, 399, 0, 0, 2649, 2650, 3, 254, 127, 0, 2650, 2651, 5, 400, 0, 0, 2651, 2653, 1, 0, 0, 0, 2652, 2648, 1, 0, 0, 0, 2652, 2653, 1, 0, 0, 0, 2653, 2655, 1, 0, 0, 0, 2654, 2638, 1, 0, 0, 0, 2654, 2643, 1, 0, 0, 0, 2655, 383, 1, 0, 0, 0, 2656, 2658, 5, 188, 0, 0, 2657, 2656, 1, 0, 0, 0, 2657, 2658, 1, 0, 0, 0, 2658, 2659, 1, 0, 0, 0, 2659, 2660, 5, 93, 0, 0, 2660, 2662, 5, 426, 0, 0, 2661, 2663, 3, 222, 111, 0, 2662, 2661, 1, 0, 0, 0, 2662, 2663, 1, 0, 0, 0, 2663, 2665, 1, 0, 0, 0, 2664, 2666, 3, 246, 123, 0, 2665, 2664, 1, 0, 0, 0, 2665, 2666, 1, 0, 0, 0, 2666, 2670, 1, 0, 0, 0, 2667, 2668, 5, 329, 0, 0, 2668, 2670, 3, 624, 312, 0, 2669, 2657, 1, 0, 0, 0, 2669, 2667, 1, 0, 0, 0, 2670, 385, 1, 0, 0, 0, 2671, 2680, 5, 185, 0, 0, 2672, 2673, 5, 431, 0, 0, 2673, 2675, 5, 397, 0, 0, 2674, 2672, 1, 0, 0, 0, 2674, 2675, 1, 0, 0, 0, 2675, 2676, 1, 0, 0, 0, 2676, 2681, 5, 431, 0, 0, 2677, 2678, 5, 431, 0, 0, 2678, 2679, 5, 223, 0, 0, 2679, 2681, 5, 431, 0, 0, 2680, 2674, 1, 0, 0, 0, 2680, 2677, 1, 0, 0, 0, 2681, 387, 1, 0, 0, 0, 2682, 2683, 3, 256, 128, 0, 2683, 2684, 5, 405, 0, 0, 2684, 2685, 3, 390, 195, 0, 2685, 389, 1, 0, 0, 0, 2686, 2689, 5, 83, 0, 0, 2687, 2689, 3, 590, 295, 0, 2688, 2686, 1, 0, 0, 0, 2688, 2687, 1, 0, 0, 0, 2689, 391, 1, 0, 0, 0, 2690, 2691, 5, 304, 0, 0, 2691, 2696, 3, 388, 194, 0, 2692, 2693, 5, 397, 0, 0, 2693, 2695, 3, 388, 194, 0, 2694, 2692, 1, 0, 0, 0, 2695, 2698, 1, 0, 0, 0, 2696, 2694, 1, 0, 0, 0, 2696, 2697, 1, 0, 0, 0, 2697, 393, 1, 0, 0, 0, 2698, 2696, 1, 0, 0, 0, 2699, 2700, 5, 318, 0, 0, 2700, 2709, 5, 344, 0, 0, 2701, 2706, 3, 396, 198, 0, 2702, 2703, 5, 397, 0, 0, 2703, 2705, 3, 396, 198, 0, 2704, 2702, 1, 0, 0, 0, 2705, 2708, 1, 0, 0, 0, 2706, 2704, 1, 0, 0, 0, 2706, 2707, 1, 0, 0, 0, 2707, 2710, 1, 0, 0, 0, 2708, 2706, 1, 0, 0, 0, 2709, 2701, 1, 0, 0, 0, 2709, 2710, 1, 0, 0, 0, 2710, 2723, 1, 0, 0, 0, 2711, 2713, 5, 48, 0, 0, 2712, 2714, 5, 389, 0, 0, 2713, 2712, 1, 0, 0, 0, 2713, 2714, 1, 0, 0, 0, 2714, 2723, 1, 0, 0, 0, 2715, 2717, 5, 289, 0, 0, 2716, 2718, 5, 389, 0, 0, 2717, 2716, 1, 0, 0, 0, 2717, 2718, 1, 0, 0, 0, 2718, 2723, 1, 0, 0, 0, 2719, 2720, 5, 304, 0, 0, 2720, 2721, 5, 22, 0, 0, 2721, 2723, 7, 23, 0, 0, 2722, 2699, 1, 0, 0, 0, 2722, 2711, 1, 0, 0, 0, 2722, 2715, 1, 0, 0, 0, 2722, 2719, 1, 0, 0, 0, 2723, 395, 1, 0, 0, 0, 2724, 2725, 5, 168, 0, 0, 2725, 2726, 5, 182, 0, 0, 2726, 2730, 5, 312, 0, 0, 2727, 2728, 5, 261, 0, 0, 2728, 2730, 7, 24, 0, 0, 2729, 2724, 1, 0, 0, 0, 2729, 2727, 1, 0, 0, 0, 2730, 397, 1, 0, 0, 0, 2731, 2734, 3, 402, 201, 0, 2732, 2734, 3, 404, 202, 0, 2733, 2731, 1, 0, 0, 0, 2733, 2732, 1, 0, 0, 0, 2734, 2737, 1, 0, 0, 0, 2735, 2733, 1, 0, 0, 0, 2735, 2736, 1, 0, 0, 0, 2736, 2739, 1, 0, 0, 0, 2737, 2735, 1, 0, 0, 0, 2738, 2740, 3, 400, 200, 0, 2739, 2738, 1, 0, 0, 0, 2739, 2740, 1, 0, 0, 0, 2740, 399, 1, 0, 0, 0, 2741, 2742, 5, 383, 0, 0, 2742, 2743, 5, 216, 0, 0, 2743, 2746, 5, 201, 0, 0, 2744, 2745, 5, 11, 0, 0, 2745, 2747, 3, 580, 290, 0, 2746, 2744, 1, 0, 0, 0, 2746, 2747, 1, 0, 0, 0, 2747, 2748, 1, 0, 0, 0, 2748, 2749, 5, 335, 0, 0, 2749, 2751, 5, 161, 0, 0, 2750, 2752, 3, 264, 132, 0, 2751, 2750, 1, 0, 0, 0, 2751, 2752, 1, 0, 0, 0, 2752, 2753, 1, 0, 0, 0, 2753, 2754, 5, 374, 0, 0, 2754, 2755, 3, 538, 269, 0, 2755, 401, 1, 0, 0, 0, 2756, 2757, 5, 383, 0, 0, 2757, 2758, 5, 201, 0, 0, 2758, 2759, 5, 11, 0, 0, 2759, 2760, 3, 580, 290, 0, 2760, 2764, 5, 335, 0, 0, 2761, 2762, 5, 365, 0, 0, 2762, 2765, 3, 392, 196, 0, 2763, 2765, 5, 86, 0, 0, 2764, 2761, 1, 0, 0, 0, 2764, 2763, 1, 0, 0, 0, 2765, 403, 1, 0, 0, 0, 2766, 2767, 5, 383, 0, 0, 2767, 2768, 5, 201, 0, 0, 2768, 2772, 5, 335, 0, 0, 2769, 2770, 5, 365, 0, 0, 2770, 2773, 3, 392, 196, 0, 2771, 2773, 5, 86, 0, 0, 2772, 2769, 1, 0, 0, 0, 2772, 2771, 1, 0, 0, 0, 2773, 405, 1, 0, 0, 0, 2774, 2775, 5, 246, 0, 0, 2775, 2776, 5, 426, 0, 0, 2776, 407, 1, 0, 0, 0, 2777, 2778, 5, 352, 0, 0, 2778, 2779, 5, 426, 0, 0, 2779, 409, 1, 0, 0, 0, 2780, 2781, 5, 320, 0, 0, 2781, 2782, 5, 426, 0, 0, 2782, 411, 1, 0, 0, 0, 2783, 2814, 5, 9, 0, 0, 2784, 2785, 5, 329, 0, 0, 2785, 2786, 3, 478, 239, 0, 2786, 2787, 3, 414, 207, 0, 2787, 2815, 1, 0, 0, 0, 2788, 2789, 5, 378, 0, 0, 2789, 2791, 3, 482, 241, 0, 2790, 2792, 5, 17, 0, 0, 2791, 2790, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 2793, 1, 0, 0, 0, 2793, 2794, 3, 418, 209, 0, 2794, 2815, 1, 0, 0, 0, 2795, 2796, 5, 202, 0, 0, 2796, 2797, 5, 378, 0, 0, 2797, 2801, 3, 482, 241, 0, 2798, 2802, 3, 36, 18, 0, 2799, 2802, 3, 38, 19, 0, 2800, 2802, 5, 265, 0, 0, 2801, 2798, 1, 0, 0, 0, 2801, 2799, 1, 0, 0, 0, 2801, 2800, 1, 0, 0, 0, 2802, 2815, 1, 0, 0, 0, 2803, 2804, 3, 70, 35, 0, 2804, 2805, 3, 420, 210, 0, 2805, 2815, 1, 0, 0, 0, 2806, 2807, 5, 69, 0, 0, 2807, 2815, 3, 422, 211, 0, 2808, 2809, 5, 155, 0, 0, 2809, 2810, 3, 638, 319, 0, 2810, 2811, 5, 224, 0, 0, 2811, 2812, 3, 624, 312, 0, 2812, 2813, 5, 265, 0, 0, 2813, 2815, 1, 0, 0, 0, 2814, 2784, 1, 0, 0, 0, 2814, 2788, 1, 0, 0, 0, 2814, 2795, 1, 0, 0, 0, 2814, 2803, 1, 0, 0, 0, 2814, 2806, 1, 0, 0, 0, 2814, 2808, 1, 0, 0, 0, 2815, 413, 1, 0, 0, 0, 2816, 2817, 5, 274, 0, 0, 2817, 2818, 5, 341, 0, 0, 2818, 2906, 3, 480, 240, 0, 2819, 2820, 5, 102, 0, 0, 2820, 2906, 5, 239, 0, 0, 2821, 2906, 3, 426, 213, 0, 2822, 2824, 5, 4, 0, 0, 2823, 2825, 3, 32, 16, 0, 2824, 2823, 1, 0, 0, 0, 2824, 2825, 1, 0, 0, 0, 2825, 2830, 1, 0, 0, 0, 2826, 2828, 3, 626, 313, 0, 2827, 2829, 3, 424, 212, 0, 2828, 2827, 1, 0, 0, 0, 2828, 2829, 1, 0, 0, 0, 2829, 2831, 1, 0, 0, 0, 2830, 2826, 1, 0, 0, 0, 2831, 2832, 1, 0, 0, 0, 2832, 2830, 1, 0, 0, 0, 2832, 2833, 1, 0, 0, 0, 2833, 2906, 1, 0, 0, 0, 2834, 2838, 5, 342, 0, 0, 2835, 2837, 3, 626, 313, 0, 2836, 2835, 1, 0, 0, 0, 2837, 2840, 1, 0, 0, 0, 2838, 2836, 1, 0, 0, 0, 2838, 2839, 1, 0, 0, 0, 2839, 2906, 1, 0, 0, 0, 2840, 2838, 1, 0, 0, 0, 2841, 2845, 5, 15, 0, 0, 2842, 2844, 3, 626, 313, 0, 2843, 2842, 1, 0, 0, 0, 2844, 2847, 1, 0, 0, 0, 2845, 2843, 1, 0, 0, 0, 2845, 2846, 1, 0, 0, 0, 2846, 2906, 1, 0, 0, 0, 2847, 2845, 1, 0, 0, 0, 2848, 2852, 5, 353, 0, 0, 2849, 2851, 3, 626, 313, 0, 2850, 2849, 1, 0, 0, 0, 2851, 2854, 1, 0, 0, 0, 2852, 2850, 1, 0, 0, 0, 2852, 2853, 1, 0, 0, 0, 2853, 2906, 1, 0, 0, 0, 2854, 2852, 1, 0, 0, 0, 2855, 2856, 5, 304, 0, 0, 2856, 2857, 5, 332, 0, 0, 2857, 2906, 3, 226, 113, 0, 2858, 2859, 5, 363, 0, 0, 2859, 2861, 5, 332, 0, 0, 2860, 2862, 3, 30, 15, 0, 2861, 2860, 1, 0, 0, 0, 2861, 2862, 1, 0, 0, 0, 2862, 2863, 1, 0, 0, 0, 2863, 2906, 3, 226, 113, 0, 2864, 2906, 3, 210, 105, 0, 2865, 2868, 5, 216, 0, 0, 2866, 2869, 5, 310, 0, 0, 2867, 2869, 3, 40, 20, 0, 2868, 2866, 1, 0, 0, 0, 2868, 2867, 1, 0, 0, 0, 2869, 2906, 1, 0, 0, 0, 2870, 2871, 5, 113, 0, 0, 2871, 2872, 3, 626, 313, 0, 2872, 2873, 5, 387, 0, 0, 2873, 2874, 5, 329, 0, 0, 2874, 2875, 3, 478, 239, 0, 2875, 2906, 1, 0, 0, 0, 2876, 2877, 5, 237, 0, 0, 2877, 2878, 5, 45, 0, 0, 2878, 2879, 5, 399, 0, 0, 2879, 2880, 3, 310, 155, 0, 2880, 2881, 5, 400, 0, 0, 2881, 2906, 1, 0, 0, 0, 2882, 2883, 5, 101, 0, 0, 2883, 2884, 5, 55, 0, 0, 2884, 2906, 3, 638, 319, 0, 2885, 2888, 5, 4, 0, 0, 2886, 2889, 3, 288, 144, 0, 2887, 2889, 3, 278, 139, 0, 2888, 2886, 1, 0, 0, 0, 2888, 2887, 1, 0, 0, 0, 2889, 2906, 1, 0, 0, 0, 2890, 2892, 3, 626, 313, 0, 2891, 2890, 1, 0, 0, 0, 2891, 2892, 1, 0, 0, 0, 2892, 2893, 1, 0, 0, 0, 2893, 2906, 3, 416, 208, 0, 2894, 2895, 5, 304, 0, 0, 2895, 2896, 5, 236, 0, 0, 2896, 2906, 3, 126, 63, 0, 2897, 2898, 5, 304, 0, 0, 2898, 2899, 5, 237, 0, 0, 2899, 2900, 5, 316, 0, 0, 2900, 2901, 5, 399, 0, 0, 2901, 2902, 3, 204, 102, 0, 2902, 2903, 5, 400, 0, 0, 2903, 2906, 1, 0, 0, 0, 2904, 2906, 3, 430, 215, 0, 2905, 2816, 1, 0, 0, 0, 2905, 2819, 1, 0, 0, 0, 2905, 2821, 1, 0, 0, 0, 2905, 2822, 1, 0, 0, 0, 2905, 2834, 1, 0, 0, 0, 2905, 2841, 1, 0, 0, 0, 2905, 2848, 1, 0, 0, 0, 2905, 2855, 1, 0, 0, 0, 2905, 2858, 1, 0, 0, 0, 2905, 2864, 1, 0, 0, 0, 2905, 2865, 1, 0, 0, 0, 2905, 2870, 1, 0, 0, 0, 2905, 2876, 1, 0, 0, 0, 2905, 2882, 1, 0, 0, 0, 2905, 2885, 1, 0, 0, 0, 2905, 2891, 1, 0, 0, 0, 2905, 2894, 1, 0, 0, 0, 2905, 2897, 1, 0, 0, 0, 2905, 2904, 1, 0, 0, 0, 2906, 415, 1, 0, 0, 0, 2907, 2908, 5, 304, 0, 0, 2908, 2909, 5, 129, 0, 0, 2909, 3040, 3, 432, 216, 0, 2910, 2911, 5, 304, 0, 0, 2911, 2912, 5, 189, 0, 0, 2912, 3040, 5, 426, 0, 0, 2913, 3040, 5, 53, 0, 0, 2914, 2924, 5, 304, 0, 0, 2915, 2916, 5, 301, 0, 0, 2916, 2920, 5, 426, 0, 0, 2917, 2918, 5, 387, 0, 0, 2918, 2919, 5, 302, 0, 0, 2919, 2921, 3, 226, 113, 0, 2920, 2917, 1, 0, 0, 0, 2920, 2921, 1, 0, 0, 0, 2921, 2925, 1, 0, 0, 0, 2922, 2923, 5, 302, 0, 0, 2923, 2925, 3, 226, 113, 0, 2924, 2915, 1, 0, 0, 0, 2924, 2922, 1, 0, 0, 0, 2925, 3040, 1, 0, 0, 0, 2926, 2927, 5, 363, 0, 0, 2927, 2928, 5, 302, 0, 0, 2928, 3040, 3, 226, 113, 0, 2929, 2930, 5, 274, 0, 0, 2930, 2931, 5, 341, 0, 0, 2931, 3040, 3, 626, 313, 0, 2932, 2933, 5, 166, 0, 0, 2933, 2934, 5, 431, 0, 0, 2934, 3040, 5, 31, 0, 0, 2935, 2936, 5, 304, 0, 0, 2936, 2937, 5, 310, 0, 0, 2937, 2938, 5, 189, 0, 0, 2938, 2939, 5, 399, 0, 0, 2939, 2944, 3, 428, 214, 0, 2940, 2941, 5, 397, 0, 0, 2941, 2943, 3, 428, 214, 0, 2942, 2940, 1, 0, 0, 0, 2943, 2946, 1, 0, 0, 0, 2944, 2942, 1, 0, 0, 0, 2944, 2945, 1, 0, 0, 0, 2945, 2947, 1, 0, 0, 0, 2946, 2944, 1, 0, 0, 0, 2947, 2948, 5, 400, 0, 0, 2948, 3040, 1, 0, 0, 0, 2949, 2950, 5, 216, 0, 0, 2950, 3040, 7, 25, 0, 0, 2951, 3040, 3, 208, 104, 0, 2952, 2953, 5, 49, 0, 0, 2953, 2956, 5, 426, 0, 0, 2954, 2955, 5, 11, 0, 0, 2955, 2957, 5, 380, 0, 0, 2956, 2954, 1, 0, 0, 0, 2956, 2957, 1, 0, 0, 0, 2957, 2962, 1, 0, 0, 0, 2958, 2959, 5, 42, 0, 0, 2959, 2960, 5, 166, 0, 0, 2960, 2961, 5, 431, 0, 0, 2961, 2963, 5, 31, 0, 0, 2962, 2958, 1, 0, 0, 0, 2962, 2963, 1, 0, 0, 0, 2963, 2965, 1, 0, 0, 0, 2964, 2966, 3, 542, 271, 0, 2965, 2964, 1, 0, 0, 0, 2965, 2966, 1, 0, 0, 0, 2966, 2968, 1, 0, 0, 0, 2967, 2969, 3, 406, 203, 0, 2968, 2967, 1, 0, 0, 0, 2968, 2969, 1, 0, 0, 0, 2969, 2974, 1, 0, 0, 0, 2970, 2971, 5, 387, 0, 0, 2971, 2972, 5, 235, 0, 0, 2972, 2973, 5, 332, 0, 0, 2973, 2975, 3, 226, 113, 0, 2974, 2970, 1, 0, 0, 0, 2974, 2975, 1, 0, 0, 0, 2975, 3040, 1, 0, 0, 0, 2976, 2977, 5, 365, 0, 0, 2977, 2978, 5, 319, 0, 0, 2978, 2980, 5, 134, 0, 0, 2979, 2981, 5, 45, 0, 0, 2980, 2979, 1, 0, 0, 0, 2980, 2981, 1, 0, 0, 0, 2981, 2982, 1, 0, 0, 0, 2982, 2983, 3, 256, 128, 0, 2983, 2984, 5, 304, 0, 0, 2984, 2987, 3, 226, 113, 0, 2985, 2986, 5, 47, 0, 0, 2986, 2988, 5, 426, 0, 0, 2987, 2985, 1, 0, 0, 0, 2987, 2988, 1, 0, 0, 0, 2988, 3040, 1, 0, 0, 0, 2989, 2990, 5, 365, 0, 0, 2990, 2991, 5, 319, 0, 0, 2991, 2992, 5, 304, 0, 0, 2992, 3040, 3, 226, 113, 0, 2993, 2995, 5, 38, 0, 0, 2994, 2996, 5, 45, 0, 0, 2995, 2994, 1, 0, 0, 0, 2995, 2996, 1, 0, 0, 0, 2996, 2997, 1, 0, 0, 0, 2997, 2998, 3, 256, 128, 0, 2998, 2999, 3, 258, 129, 0, 2999, 3001, 3, 342, 171, 0, 3000, 3002, 3, 324, 162, 0, 3001, 3000, 1, 0, 0, 0, 3001, 3002, 1, 0, 0, 0, 3002, 3005, 1, 0, 0, 0, 3003, 3004, 5, 47, 0, 0, 3004, 3006, 5, 426, 0, 0, 3005, 3003, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3010, 1, 0, 0, 0, 3007, 3011, 5, 130, 0, 0, 3008, 3009, 5, 6, 0, 0, 3009, 3011, 3, 638, 319, 0, 3010, 3007, 1, 0, 0, 0, 3010, 3008, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3013, 1, 0, 0, 0, 3012, 3014, 3, 34, 17, 0, 3013, 3012, 1, 0, 0, 0, 3013, 3014, 1, 0, 0, 0, 3014, 3040, 1, 0, 0, 0, 3015, 3018, 5, 4, 0, 0, 3016, 3018, 5, 278, 0, 0, 3017, 3015, 1, 0, 0, 0, 3017, 3016, 1, 0, 0, 0, 3018, 3019, 1, 0, 0, 0, 3019, 3020, 5, 46, 0, 0, 3020, 3021, 5, 399, 0, 0, 3021, 3022, 3, 248, 124, 0, 3022, 3024, 5, 400, 0, 0, 3023, 3025, 3, 34, 17, 0, 3024, 3023, 1, 0, 0, 0, 3024, 3025, 1, 0, 0, 0, 3025, 3040, 1, 0, 0, 0, 3026, 3027, 5, 365, 0, 0, 3027, 3029, 5, 46, 0, 0, 3028, 3030, 3, 34, 17, 0, 3029, 3028, 1, 0, 0, 0, 3029, 3030, 1, 0, 0, 0, 3030, 3040, 1, 0, 0, 0, 3031, 3037, 3, 268, 134, 0, 3032, 3034, 5, 218, 0, 0, 3033, 3035, 5, 34, 0, 0, 3034, 3033, 1, 0, 0, 0, 3034, 3035, 1, 0, 0, 0, 3035, 3038, 1, 0, 0, 0, 3036, 3038, 5, 222, 0, 0, 3037, 3032, 1, 0, 0, 0, 3037, 3036, 1, 0, 0, 0, 3038, 3040, 1, 0, 0, 0, 3039, 2907, 1, 0, 0, 0, 3039, 2910, 1, 0, 0, 0, 3039, 2913, 1, 0, 0, 0, 3039, 2914, 1, 0, 0, 0, 3039, 2926, 1, 0, 0, 0, 3039, 2929, 1, 0, 0, 0, 3039, 2932, 1, 0, 0, 0, 3039, 2935, 1, 0, 0, 0, 3039, 2949, 1, 0, 0, 0, 3039, 2951, 1, 0, 0, 0, 3039, 2952, 1, 0, 0, 0, 3039, 2976, 1, 0, 0, 0, 3039, 2989, 1, 0, 0, 0, 3039, 2993, 1, 0, 0, 0, 3039, 3017, 1, 0, 0, 0, 3039, 3026, 1, 0, 0, 0, 3039, 3031, 1, 0, 0, 0, 3040, 417, 1, 0, 0, 0, 3041, 3042, 5, 304, 0, 0, 3042, 3043, 5, 332, 0, 0, 3043, 3068, 3, 226, 113, 0, 3044, 3045, 5, 363, 0, 0, 3045, 3047, 5, 332, 0, 0, 3046, 3048, 3, 30, 15, 0, 3047, 3046, 1, 0, 0, 0, 3047, 3048, 1, 0, 0, 0, 3048, 3049, 1, 0, 0, 0, 3049, 3068, 3, 226, 113, 0, 3050, 3051, 5, 274, 0, 0, 3051, 3052, 5, 341, 0, 0, 3052, 3068, 3, 480, 240, 0, 3053, 3055, 5, 4, 0, 0, 3054, 3056, 3, 32, 16, 0, 3055, 3054, 1, 0, 0, 0, 3055, 3056, 1, 0, 0, 0, 3056, 3061, 1, 0, 0, 0, 3057, 3059, 3, 626, 313, 0, 3058, 3060, 3, 424, 212, 0, 3059, 3058, 1, 0, 0, 0, 3059, 3060, 1, 0, 0, 0, 3060, 3062, 1, 0, 0, 0, 3061, 3057, 1, 0, 0, 0, 3062, 3063, 1, 0, 0, 0, 3063, 3061, 1, 0, 0, 0, 3063, 3064, 1, 0, 0, 0, 3064, 3068, 1, 0, 0, 0, 3065, 3068, 3, 426, 213, 0, 3066, 3068, 3, 380, 190, 0, 3067, 3041, 1, 0, 0, 0, 3067, 3044, 1, 0, 0, 0, 3067, 3050, 1, 0, 0, 0, 3067, 3053, 1, 0, 0, 0, 3067, 3065, 1, 0, 0, 0, 3067, 3066, 1, 0, 0, 0, 3068, 419, 1, 0, 0, 0, 3069, 3070, 3, 472, 236, 0, 3070, 3071, 5, 304, 0, 0, 3071, 3072, 5, 76, 0, 0, 3072, 3073, 3, 230, 115, 0, 3073, 3085, 1, 0, 0, 0, 3074, 3075, 3, 472, 236, 0, 3075, 3076, 5, 304, 0, 0, 3076, 3077, 5, 236, 0, 0, 3077, 3078, 3, 128, 64, 0, 3078, 3085, 1, 0, 0, 0, 3079, 3080, 3, 472, 236, 0, 3080, 3081, 5, 304, 0, 0, 3081, 3082, 7, 26, 0, 0, 3082, 3083, 5, 426, 0, 0, 3083, 3085, 1, 0, 0, 0, 3084, 3069, 1, 0, 0, 0, 3084, 3074, 1, 0, 0, 0, 3084, 3079, 1, 0, 0, 0, 3085, 421, 1, 0, 0, 0, 3086, 3087, 3, 472, 236, 0, 3087, 3088, 5, 304, 0, 0, 3088, 3089, 5, 77, 0, 0, 3089, 3090, 3, 230, 115, 0, 3090, 3102, 1, 0, 0, 0, 3091, 3092, 3, 472, 236, 0, 3092, 3093, 5, 304, 0, 0, 3093, 3094, 5, 236, 0, 0, 3094, 3095, 3, 128, 64, 0, 3095, 3102, 1, 0, 0, 0, 3096, 3097, 3, 472, 236, 0, 3097, 3098, 5, 304, 0, 0, 3098, 3099, 5, 367, 0, 0, 3099, 3100, 5, 426, 0, 0, 3100, 3102, 1, 0, 0, 0, 3101, 3086, 1, 0, 0, 0, 3101, 3091, 1, 0, 0, 0, 3101, 3096, 1, 0, 0, 0, 3102, 423, 1, 0, 0, 0, 3103, 3104, 5, 189, 0, 0, 3104, 3105, 5, 426, 0, 0, 3105, 425, 1, 0, 0, 0, 3106, 3108, 5, 101, 0, 0, 3107, 3109, 3, 30, 15, 0, 3108, 3107, 1, 0, 0, 0, 3108, 3109, 1, 0, 0, 0, 3109, 3110, 1, 0, 0, 0, 3110, 3111, 5, 237, 0, 0, 3111, 3117, 3, 630, 315, 0, 3112, 3113, 5, 397, 0, 0, 3113, 3114, 5, 237, 0, 0, 3114, 3116, 3, 630, 315, 0, 3115, 3112, 1, 0, 0, 0, 3116, 3119, 1, 0, 0, 0, 3117, 3115, 1, 0, 0, 0, 3117, 3118, 1, 0, 0, 0, 3118, 3122, 1, 0, 0, 0, 3119, 3117, 1, 0, 0, 0, 3120, 3121, 5, 152, 0, 0, 3121, 3123, 5, 254, 0, 0, 3122, 3120, 1, 0, 0, 0, 3122, 3123, 1, 0, 0, 0, 3123, 3125, 1, 0, 0, 0, 3124, 3126, 5, 255, 0, 0, 3125, 3124, 1, 0, 0, 0, 3125, 3126, 1, 0, 0, 0, 3126, 3128, 1, 0, 0, 0, 3127, 3129, 3, 14, 7, 0, 3128, 3127, 1, 0, 0, 0, 3128, 3129, 1, 0, 0, 0, 3129, 427, 1, 0, 0, 0, 3130, 3133, 3, 572, 286, 0, 3131, 3133, 3, 294, 147, 0, 3132, 3130, 1, 0, 0, 0, 3132, 3131, 1, 0, 0, 0, 3133, 3134, 1, 0, 0, 0, 3134, 3135, 5, 405, 0, 0, 3135, 3136, 5, 426, 0, 0, 3136, 429, 1, 0, 0, 0, 3137, 3147, 5, 115, 0, 0, 3138, 3139, 5, 289, 0, 0, 3139, 3140, 5, 399, 0, 0, 3140, 3148, 7, 27, 0, 0, 3141, 3142, 5, 118, 0, 0, 3142, 3143, 5, 399, 0, 0, 3143, 3148, 5, 426, 0, 0, 3144, 3145, 5, 306, 0, 0, 3145, 3146, 5, 399, 0, 0, 3146, 3148, 5, 431, 0, 0, 3147, 3138, 1, 0, 0, 0, 3147, 3141, 1, 0, 0, 0, 3147, 3144, 1, 0, 0, 0, 3148, 3149, 1, 0, 0, 0, 3149, 3150, 5, 400, 0, 0, 3150, 431, 1, 0, 0, 0, 3151, 3152, 5, 160, 0, 0, 3152, 3153, 5, 426, 0, 0, 3153, 3154, 5, 233, 0, 0, 3154, 3155, 5, 426, 0, 0, 3155, 3156, 5, 301, 0, 0, 3156, 3161, 5, 426, 0, 0, 3157, 3158, 5, 159, 0, 0, 3158, 3159, 5, 426, 0, 0, 3159, 3160, 5, 232, 0, 0, 3160, 3162, 5, 426, 0, 0, 3161, 3157, 1, 0, 0, 0, 3161, 3162, 1, 0, 0, 0, 3162, 3165, 1, 0, 0, 0, 3163, 3165, 3, 638, 319, 0, 3164, 3151, 1, 0, 0, 0, 3164, 3163, 1, 0, 0, 0, 3165, 433, 1, 0, 0, 0, 3166, 3167, 5, 184, 0, 0, 3167, 3176, 5, 128, 0, 0, 3168, 3169, 5, 184, 0, 0, 3169, 3170, 5, 128, 0, 0, 3170, 3171, 3, 638, 319, 0, 3171, 3172, 5, 426, 0, 0, 3172, 3176, 1, 0, 0, 0, 3173, 3174, 5, 184, 0, 0, 3174, 3176, 3, 478, 239, 0, 3175, 3166, 1, 0, 0, 0, 3175, 3168, 1, 0, 0, 0, 3175, 3173, 1, 0, 0, 0, 3176, 435, 1, 0, 0, 0, 3177, 3179, 5, 58, 0, 0, 3178, 3180, 5, 333, 0, 0, 3179, 3178, 1, 0, 0, 0, 3179, 3180, 1, 0, 0, 0, 3180, 3182, 1, 0, 0, 0, 3181, 3183, 5, 345, 0, 0, 3182, 3181, 1, 0, 0, 0, 3182, 3183, 1, 0, 0, 0, 3183, 3185, 1, 0, 0, 0, 3184, 3186, 5, 123, 0, 0, 3185, 3184, 1, 0, 0, 0, 3185, 3186, 1, 0, 0, 0, 3186, 3187, 1, 0, 0, 0, 3187, 3189, 5, 329, 0, 0, 3188, 3190, 3, 32, 16, 0, 3189, 3188, 1, 0, 0, 0, 3189, 3190, 1, 0, 0, 0, 3190, 3191, 1, 0, 0, 0, 3191, 3248, 3, 480, 240, 0, 3192, 3194, 3, 434, 217, 0, 3193, 3195, 3, 200, 100, 0, 3194, 3193, 1, 0, 0, 0, 3194, 3195, 1, 0, 0, 0, 3195, 3197, 1, 0, 0, 0, 3196, 3198, 3, 222, 111, 0, 3197, 3196, 1, 0, 0, 0, 3197, 3198, 1, 0, 0, 0, 3198, 3200, 1, 0, 0, 0, 3199, 3201, 3, 246, 123, 0, 3200, 3199, 1, 0, 0, 0, 3200, 3201, 1, 0, 0, 0, 3201, 3203, 1, 0, 0, 0, 3202, 3204, 3, 424, 212, 0, 3203, 3202, 1, 0, 0, 0, 3203, 3204, 1, 0, 0, 0, 3204, 3206, 1, 0, 0, 0, 3205, 3207, 3, 224, 112, 0, 3206, 3205, 1, 0, 0, 0, 3206, 3207, 1, 0, 0, 0, 3207, 3209, 1, 0, 0, 0, 3208, 3210, 3, 198, 99, 0, 3209, 3208, 1, 0, 0, 0, 3209, 3210, 1, 0, 0, 0, 3210, 3249, 1, 0, 0, 0, 3211, 3212, 5, 399, 0, 0, 3212, 3213, 3, 250, 125, 0, 3213, 3214, 5, 400, 0, 0, 3214, 3216, 1, 0, 0, 0, 3215, 3211, 1, 0, 0, 0, 3215, 3216, 1, 0, 0, 0, 3216, 3218, 1, 0, 0, 0, 3217, 3219, 3, 196, 98, 0, 3218, 3217, 1, 0, 0, 0, 3218, 3219, 1, 0, 0, 0, 3219, 3221, 1, 0, 0, 0, 3220, 3222, 3, 200, 100, 0, 3221, 3220, 1, 0, 0, 0, 3221, 3222, 1, 0, 0, 0, 3222, 3224, 1, 0, 0, 0, 3223, 3225, 3, 208, 104, 0, 3224, 3223, 1, 0, 0, 0, 3224, 3225, 1, 0, 0, 0, 3225, 3227, 1, 0, 0, 0, 3226, 3228, 3, 210, 105, 0, 3227, 3226, 1, 0, 0, 0, 3227, 3228, 1, 0, 0, 0, 3228, 3230, 1, 0, 0, 0, 3229, 3231, 3, 222, 111, 0, 3230, 3229, 1, 0, 0, 0, 3230, 3231, 1, 0, 0, 0, 3231, 3233, 1, 0, 0, 0, 3232, 3234, 3, 246, 123, 0, 3233, 3232, 1, 0, 0, 0, 3233, 3234, 1, 0, 0, 0, 3234, 3236, 1, 0, 0, 0, 3235, 3237, 3, 424, 212, 0, 3236, 3235, 1, 0, 0, 0, 3236, 3237, 1, 0, 0, 0, 3237, 3239, 1, 0, 0, 0, 3238, 3240, 3, 224, 112, 0, 3239, 3238, 1, 0, 0, 0, 3239, 3240, 1, 0, 0, 0, 3240, 3242, 1, 0, 0, 0, 3241, 3243, 3, 198, 99, 0, 3242, 3241, 1, 0, 0, 0, 3242, 3243, 1, 0, 0, 0, 3243, 3246, 1, 0, 0, 0, 3244, 3245, 5, 17, 0, 0, 3245, 3247, 3, 380, 190, 0, 3246, 3244, 1, 0, 0, 0, 3246, 3247, 1, 0, 0, 0, 3247, 3249, 1, 0, 0, 0, 3248, 3192, 1, 0, 0, 0, 3248, 3215, 1, 0, 0, 0, 3249, 3313, 1, 0, 0, 0, 3250, 3251, 5, 58, 0, 0, 3251, 3252, 5, 195, 0, 0, 3252, 3254, 5, 329, 0, 0, 3253, 3255, 3, 32, 16, 0, 3254, 3253, 1, 0, 0, 0, 3254, 3255, 1, 0, 0, 0, 3255, 3256, 1, 0, 0, 0, 3256, 3310, 3, 480, 240, 0, 3257, 3259, 3, 434, 217, 0, 3258, 3260, 3, 222, 111, 0, 3259, 3258, 1, 0, 0, 0, 3259, 3260, 1, 0, 0, 0, 3260, 3262, 1, 0, 0, 0, 3261, 3263, 3, 246, 123, 0, 3262, 3261, 1, 0, 0, 0, 3262, 3263, 1, 0, 0, 0, 3263, 3265, 1, 0, 0, 0, 3264, 3266, 3, 424, 212, 0, 3265, 3264, 1, 0, 0, 0, 3265, 3266, 1, 0, 0, 0, 3266, 3268, 1, 0, 0, 0, 3267, 3269, 3, 224, 112, 0, 3268, 3267, 1, 0, 0, 0, 3268, 3269, 1, 0, 0, 0, 3269, 3271, 1, 0, 0, 0, 3270, 3272, 3, 198, 99, 0, 3271, 3270, 1, 0, 0, 0, 3271, 3272, 1, 0, 0, 0, 3272, 3311, 1, 0, 0, 0, 3273, 3274, 5, 399, 0, 0, 3274, 3275, 3, 250, 125, 0, 3275, 3276, 5, 400, 0, 0, 3276, 3278, 1, 0, 0, 0, 3277, 3273, 1, 0, 0, 0, 3277, 3278, 1, 0, 0, 0, 3278, 3280, 1, 0, 0, 0, 3279, 3281, 3, 196, 98, 0, 3280, 3279, 1, 0, 0, 0, 3280, 3281, 1, 0, 0, 0, 3281, 3283, 1, 0, 0, 0, 3282, 3284, 3, 200, 100, 0, 3283, 3282, 1, 0, 0, 0, 3283, 3284, 1, 0, 0, 0, 3284, 3286, 1, 0, 0, 0, 3285, 3287, 3, 208, 104, 0, 3286, 3285, 1, 0, 0, 0, 3286, 3287, 1, 0, 0, 0, 3287, 3289, 1, 0, 0, 0, 3288, 3290, 3, 210, 105, 0, 3289, 3288, 1, 0, 0, 0, 3289, 3290, 1, 0, 0, 0, 3290, 3292, 1, 0, 0, 0, 3291, 3293, 3, 222, 111, 0, 3292, 3291, 1, 0, 0, 0, 3292, 3293, 1, 0, 0, 0, 3293, 3295, 1, 0, 0, 0, 3294, 3296, 3, 246, 123, 0, 3295, 3294, 1, 0, 0, 0, 3295, 3296, 1, 0, 0, 0, 3296, 3298, 1, 0, 0, 0, 3297, 3299, 3, 424, 212, 0, 3298, 3297, 1, 0, 0, 0, 3298, 3299, 1, 0, 0, 0, 3299, 3301, 1, 0, 0, 0, 3300, 3302, 3, 224, 112, 0, 3301, 3300, 1, 0, 0, 0, 3301, 3302, 1, 0, 0, 0, 3302, 3304, 1, 0, 0, 0, 3303, 3305, 3, 198, 99, 0, 3304, 3303, 1, 0, 0, 0, 3304, 3305, 1, 0, 0, 0, 3305, 3308, 1, 0, 0, 0, 3306, 3307, 5, 17, 0, 0, 3307, 3309, 3, 380, 190, 0, 3308, 3306, 1, 0, 0, 0, 3308, 3309, 1, 0, 0, 0, 3309, 3311, 1, 0, 0, 0, 3310, 3257, 1, 0, 0, 0, 3310, 3277, 1, 0, 0, 0, 3311, 3313, 1, 0, 0, 0, 3312, 3177, 1, 0, 0, 0, 3312, 3250, 1, 0, 0, 0, 3313, 437, 1, 0, 0, 0, 3314, 3315, 5, 58, 0, 0, 3315, 3317, 5, 69, 0, 0, 3316, 3318, 3, 32, 16, 0, 3317, 3316, 1, 0, 0, 0, 3317, 3318, 1, 0, 0, 0, 3318, 3319, 1, 0, 0, 0, 3319, 3322, 3, 638, 319, 0, 3320, 3321, 5, 352, 0, 0, 3321, 3323, 5, 426, 0, 0, 3322, 3320, 1, 0, 0, 0, 3322, 3323, 1, 0, 0, 0, 3323, 3326, 1, 0, 0, 0, 3324, 3325, 5, 367, 0, 0, 3325, 3327, 5, 426, 0, 0, 3326, 3324, 1, 0, 0, 0, 3326, 3327, 1, 0, 0, 0, 3327, 3330, 1, 0, 0, 0, 3328, 3329, 5, 47, 0, 0, 3329, 3331, 5, 426, 0, 0, 3330, 3328, 1, 0, 0, 0, 3330, 3331, 1, 0, 0, 0, 3331, 3335, 1, 0, 0, 0, 3332, 3333, 5, 387, 0, 0, 3333, 3334, 5, 77, 0, 0, 3334, 3336, 3, 230, 115, 0, 3335, 3332, 1, 0, 0, 0, 3335, 3336, 1, 0, 0, 0, 3336, 439, 1, 0, 0, 0, 3337, 3338, 5, 101, 0, 0, 3338, 3340, 5, 69, 0, 0, 3339, 3341, 3, 30, 15, 0, 3340, 3339, 1, 0, 0, 0, 3340, 3341, 1, 0, 0, 0, 3341, 3342, 1, 0, 0, 0, 3342, 3343, 3, 638, 319, 0, 3343, 441, 1, 0, 0, 0, 3344, 3345, 3, 638, 319, 0, 3345, 3346, 5, 395, 0, 0, 3346, 3348, 1, 0, 0, 0, 3347, 3344, 1, 0, 0, 0, 3348, 3351, 1, 0, 0, 0, 3349, 3347, 1, 0, 0, 0, 3349, 3350, 1, 0, 0, 0, 3350, 3352, 1, 0, 0, 0, 3351, 3349, 1, 0, 0, 0, 3352, 3353, 5, 415, 0, 0, 3353, 443, 1, 0, 0, 0, 3354, 3359, 3, 580, 290, 0, 3355, 3356, 5, 397, 0, 0, 3356, 3358, 3, 580, 290, 0, 3357, 3355, 1, 0, 0, 0, 3358, 3361, 1, 0, 0, 0, 3359, 3357, 1, 0, 0, 0, 3359, 3360, 1, 0, 0, 0, 3360, 445, 1, 0, 0, 0, 3361, 3359, 1, 0, 0, 0, 3362, 3367, 3, 638, 319, 0, 3363, 3364, 5, 397, 0, 0, 3364, 3366, 3, 638, 319, 0, 3365, 3363, 1, 0, 0, 0, 3366, 3369, 1, 0, 0, 0, 3367, 3365, 1, 0, 0, 0, 3367, 3368, 1, 0, 0, 0, 3368, 447, 1, 0, 0, 0, 3369, 3367, 1, 0, 0, 0, 3370, 3371, 5, 139, 0, 0, 3371, 3372, 3, 450, 225, 0, 3372, 449, 1, 0, 0, 0, 3373, 3374, 5, 359, 0, 0, 3374, 3377, 3, 458, 229, 0, 3375, 3376, 5, 397, 0, 0, 3376, 3378, 3, 458, 229, 0, 3377, 3375, 1, 0, 0, 0, 3378, 3379, 1, 0, 0, 0, 3379, 3377, 1, 0, 0, 0, 3379, 3380, 1, 0, 0, 0, 3380, 3383, 1, 0, 0, 0, 3381, 3383, 3, 454, 227, 0, 3382, 3373, 1, 0, 0, 0, 3382, 3381, 1, 0, 0, 0, 3383, 451, 1, 0, 0, 0, 3384, 3388, 3, 468, 234, 0, 3385, 3387, 3, 462, 231, 0, 3386, 3385, 1, 0, 0, 0, 3387, 3390, 1, 0, 0, 0, 3388, 3386, 1, 0, 0, 0, 3388, 3389, 1, 0, 0, 0, 3389, 3417, 1, 0, 0, 0, 3390, 3388, 1, 0, 0, 0, 3391, 3395, 3, 498, 249, 0, 3392, 3394, 3, 462, 231, 0, 3393, 3392, 1, 0, 0, 0, 3394, 3397, 1, 0, 0, 0, 3395, 3393, 1, 0, 0, 0, 3395, 3396, 1, 0, 0, 0, 3396, 3417, 1, 0, 0, 0, 3397, 3395, 1, 0, 0, 0, 3398, 3402, 3, 486, 243, 0, 3399, 3401, 3, 462, 231, 0, 3400, 3399, 1, 0, 0, 0, 3401, 3404, 1, 0, 0, 0, 3402, 3400, 1, 0, 0, 0, 3402, 3403, 1, 0, 0, 0, 3403, 3417, 1, 0, 0, 0, 3404, 3402, 1, 0, 0, 0, 3405, 3409, 3, 492, 246, 0, 3406, 3408, 3, 462, 231, 0, 3407, 3406, 1, 0, 0, 0, 3408, 3411, 1, 0, 0, 0, 3409, 3407, 1, 0, 0, 0, 3409, 3410, 1, 0, 0, 0, 3410, 3417, 1, 0, 0, 0, 3411, 3409, 1, 0, 0, 0, 3412, 3413, 5, 399, 0, 0, 3413, 3414, 3, 454, 227, 0, 3414, 3415, 5, 400, 0, 0, 3415, 3417, 1, 0, 0, 0, 3416, 3384, 1, 0, 0, 0, 3416, 3391, 1, 0, 0, 0, 3416, 3398, 1, 0, 0, 0, 3416, 3405, 1, 0, 0, 0, 3416, 3412, 1, 0, 0, 0, 3417, 453, 1, 0, 0, 0, 3418, 3429, 3, 452, 226, 0, 3419, 3420, 3, 460, 230, 0, 3420, 3425, 3, 456, 228, 0, 3421, 3422, 5, 224, 0, 0, 3422, 3426, 3, 580, 290, 0, 3423, 3424, 5, 370, 0, 0, 3424, 3426, 3, 264, 132, 0, 3425, 3421, 1, 0, 0, 0, 3425, 3423, 1, 0, 0, 0, 3425, 3426, 1, 0, 0, 0, 3426, 3428, 1, 0, 0, 0, 3427, 3419, 1, 0, 0, 0, 3428, 3431, 1, 0, 0, 0, 3429, 3427, 1, 0, 0, 0, 3429, 3430, 1, 0, 0, 0, 3430, 455, 1, 0, 0, 0, 3431, 3429, 1, 0, 0, 0, 3432, 3437, 3, 468, 234, 0, 3433, 3437, 3, 498, 249, 0, 3434, 3437, 3, 486, 243, 0, 3435, 3437, 3, 492, 246, 0, 3436, 3432, 1, 0, 0, 0, 3436, 3433, 1, 0, 0, 0, 3436, 3434, 1, 0, 0, 0, 3436, 3435, 1, 0, 0, 0, 3437, 3441, 1, 0, 0, 0, 3438, 3440, 3, 462, 231, 0, 3439, 3438, 1, 0, 0, 0, 3440, 3443, 1, 0, 0, 0, 3441, 3439, 1, 0, 0, 0, 3441, 3442, 1, 0, 0, 0, 3442, 457, 1, 0, 0, 0, 3443, 3441, 1, 0, 0, 0, 3444, 3446, 5, 250, 0, 0, 3445, 3444, 1, 0, 0, 0, 3445, 3446, 1, 0, 0, 0, 3446, 3447, 1, 0, 0, 0, 3447, 3449, 3, 476, 238, 0, 3448, 3450, 3, 466, 233, 0, 3449, 3448, 1, 0, 0, 0, 3449, 3450, 1, 0, 0, 0, 3450, 3455, 1, 0, 0, 0, 3451, 3453, 5, 17, 0, 0, 3452, 3451, 1, 0, 0, 0, 3452, 3453, 1, 0, 0, 0, 3453, 3454, 1, 0, 0, 0, 3454, 3456, 3, 638, 319, 0, 3455, 3452, 1, 0, 0, 0, 3455, 3456, 1, 0, 0, 0, 3456, 3457, 1, 0, 0, 0, 3457, 3458, 5, 399, 0, 0, 3458, 3459, 3, 444, 222, 0, 3459, 3460, 5, 400, 0, 0, 3460, 459, 1, 0, 0, 0, 3461, 3476, 5, 397, 0, 0, 3462, 3473, 5, 157, 0, 0, 3463, 3473, 5, 60, 0, 0, 3464, 3466, 7, 28, 0, 0, 3465, 3467, 5, 231, 0, 0, 3466, 3465, 1, 0, 0, 0, 3466, 3467, 1, 0, 0, 0, 3467, 3473, 1, 0, 0, 0, 3468, 3470, 5, 180, 0, 0, 3469, 3471, 7, 29, 0, 0, 3470, 3469, 1, 0, 0, 0, 3470, 3471, 1, 0, 0, 0, 3471, 3473, 1, 0, 0, 0, 3472, 3462, 1, 0, 0, 0, 3472, 3463, 1, 0, 0, 0, 3472, 3464, 1, 0, 0, 0, 3472, 3468, 1, 0, 0, 0, 3472, 3473, 1, 0, 0, 0, 3473, 3474, 1, 0, 0, 0, 3474, 3476, 5, 171, 0, 0, 3475, 3461, 1, 0, 0, 0, 3475, 3472, 1, 0, 0, 0, 3476, 461, 1, 0, 0, 0, 3477, 3478, 5, 178, 0, 0, 3478, 3479, 5, 378, 0, 0, 3479, 3480, 5, 231, 0, 0, 3480, 3481, 3, 550, 275, 0, 3481, 3491, 3, 464, 232, 0, 3482, 3483, 5, 17, 0, 0, 3483, 3488, 3, 638, 319, 0, 3484, 3485, 5, 397, 0, 0, 3485, 3487, 3, 638, 319, 0, 3486, 3484, 1, 0, 0, 0, 3487, 3490, 1, 0, 0, 0, 3488, 3486, 1, 0, 0, 0, 3488, 3489, 1, 0, 0, 0, 3489, 3492, 1, 0, 0, 0, 3490, 3488, 1, 0, 0, 0, 3491, 3482, 1, 0, 0, 0, 3491, 3492, 1, 0, 0, 0, 3492, 3535, 1, 0, 0, 0, 3493, 3495, 5, 397, 0, 0, 3494, 3493, 1, 0, 0, 0, 3494, 3495, 1, 0, 0, 0, 3495, 3496, 1, 0, 0, 0, 3496, 3532, 5, 178, 0, 0, 3497, 3498, 5, 378, 0, 0, 3498, 3499, 3, 550, 275, 0, 3499, 3509, 3, 464, 232, 0, 3500, 3501, 5, 17, 0, 0, 3501, 3506, 3, 638, 319, 0, 3502, 3503, 5, 397, 0, 0, 3503, 3505, 3, 638, 319, 0, 3504, 3502, 1, 0, 0, 0, 3505, 3508, 1, 0, 0, 0, 3506, 3504, 1, 0, 0, 0, 3506, 3507, 1, 0, 0, 0, 3507, 3510, 1, 0, 0, 0, 3508, 3506, 1, 0, 0, 0, 3509, 3500, 1, 0, 0, 0, 3509, 3510, 1, 0, 0, 0, 3510, 3533, 1, 0, 0, 0, 3511, 3512, 5, 329, 0, 0, 3512, 3513, 5, 399, 0, 0, 3513, 3514, 3, 496, 248, 0, 3514, 3516, 5, 400, 0, 0, 3515, 3517, 5, 17, 0, 0, 3516, 3515, 1, 0, 0, 0, 3516, 3517, 1, 0, 0, 0, 3517, 3518, 1, 0, 0, 0, 3518, 3530, 3, 464, 232, 0, 3519, 3520, 5, 399, 0, 0, 3520, 3525, 3, 638, 319, 0, 3521, 3522, 5, 397, 0, 0, 3522, 3524, 3, 638, 319, 0, 3523, 3521, 1, 0, 0, 0, 3524, 3527, 1, 0, 0, 0, 3525, 3523, 1, 0, 0, 0, 3525, 3526, 1, 0, 0, 0, 3526, 3528, 1, 0, 0, 0, 3527, 3525, 1, 0, 0, 0, 3528, 3529, 5, 400, 0, 0, 3529, 3531, 1, 0, 0, 0, 3530, 3519, 1, 0, 0, 0, 3530, 3531, 1, 0, 0, 0, 3531, 3533, 1, 0, 0, 0, 3532, 3497, 1, 0, 0, 0, 3532, 3511, 1, 0, 0, 0, 3533, 3535, 1, 0, 0, 0, 3534, 3477, 1, 0, 0, 0, 3534, 3494, 1, 0, 0, 0, 3535, 463, 1, 0, 0, 0, 3536, 3537, 3, 638, 319, 0, 3537, 465, 1, 0, 0, 0, 3538, 3539, 5, 331, 0, 0, 3539, 3540, 5, 399, 0, 0, 3540, 3541, 5, 30, 0, 0, 3541, 3542, 5, 431, 0, 0, 3542, 3543, 5, 230, 0, 0, 3543, 3544, 5, 221, 0, 0, 3544, 3554, 5, 431, 0, 0, 3545, 3546, 5, 224, 0, 0, 3546, 3551, 3, 580, 290, 0, 3547, 3548, 5, 397, 0, 0, 3548, 3550, 3, 580, 290, 0, 3549, 3547, 1, 0, 0, 0, 3550, 3553, 1, 0, 0, 0, 3551, 3549, 1, 0, 0, 0, 3551, 3552, 1, 0, 0, 0, 3552, 3555, 1, 0, 0, 0, 3553, 3551, 1, 0, 0, 0, 3554, 3545, 1, 0, 0, 0, 3554, 3555, 1, 0, 0, 0, 3555, 3556, 1, 0, 0, 0, 3556, 3566, 5, 400, 0, 0, 3557, 3558, 5, 331, 0, 0, 3558, 3562, 5, 399, 0, 0, 3559, 3560, 5, 431, 0, 0, 3560, 3563, 7, 30, 0, 0, 3561, 3563, 5, 430, 0, 0, 3562, 3559, 1, 0, 0, 0, 3562, 3561, 1, 0, 0, 0, 3563, 3564, 1, 0, 0, 0, 3564, 3566, 5, 400, 0, 0, 3565, 3538, 1, 0, 0, 0, 3565, 3557, 1, 0, 0, 0, 3566, 467, 1, 0, 0, 0, 3567, 3569, 3, 476, 238, 0, 3568, 3570, 3, 226, 113, 0, 3569, 3568, 1, 0, 0, 0, 3569, 3570, 1, 0, 0, 0, 3570, 3572, 1, 0, 0, 0, 3571, 3573, 3, 466, 233, 0, 3572, 3571, 1, 0, 0, 0, 3572, 3573, 1, 0, 0, 0, 3573, 3575, 1, 0, 0, 0, 3574, 3576, 3, 470, 235, 0, 3575, 3574, 1, 0, 0, 0, 3575, 3576, 1, 0, 0, 0, 3576, 3581, 1, 0, 0, 0, 3577, 3579, 5, 17, 0, 0, 3578, 3577, 1, 0, 0, 0, 3578, 3579, 1, 0, 0, 0, 3579, 3580, 1, 0, 0, 0, 3580, 3582, 3, 638, 319, 0, 3581, 3578, 1, 0, 0, 0, 3581, 3582, 1, 0, 0, 0, 3582, 469, 1, 0, 0, 0, 3583, 3593, 5, 134, 0, 0, 3584, 3585, 5, 327, 0, 0, 3585, 3586, 5, 17, 0, 0, 3586, 3587, 5, 221, 0, 0, 3587, 3594, 3, 580, 290, 0, 3588, 3589, 5, 134, 0, 0, 3589, 3590, 5, 328, 0, 0, 3590, 3591, 5, 17, 0, 0, 3591, 3592, 5, 221, 0, 0, 3592, 3594, 5, 431, 0, 0, 3593, 3584, 1, 0, 0, 0, 3593, 3588, 1, 0, 0, 0, 3594, 471, 1, 0, 0, 0, 3595, 3596, 3, 638, 319, 0, 3596, 473, 1, 0, 0, 0, 3597, 3598, 3, 638, 319, 0, 3598, 475, 1, 0, 0, 0, 3599, 3602, 3, 478, 239, 0, 3600, 3602, 3, 482, 241, 0, 3601, 3599, 1, 0, 0, 0, 3601, 3600, 1, 0, 0, 0, 3602, 477, 1, 0, 0, 0, 3603, 3604, 3, 638, 319, 0, 3604, 3605, 5, 395, 0, 0, 3605, 3608, 3, 638, 319, 0, 3606, 3607, 5, 395, 0, 0, 3607, 3609, 3, 638, 319, 0, 3608, 3606, 1, 0, 0, 0, 3608, 3609, 1, 0, 0, 0, 3609, 3612, 1, 0, 0, 0, 3610, 3612, 3, 638, 319, 0, 3611, 3603, 1, 0, 0, 0, 3611, 3610, 1, 0, 0, 0, 3612, 479, 1, 0, 0, 0, 3613, 3614, 3, 638, 319, 0, 3614, 3615, 5, 395, 0, 0, 3615, 3618, 3, 638, 319, 0, 3616, 3617, 5, 395, 0, 0, 3617, 3619, 3, 638, 319, 0, 3618, 3616, 1, 0, 0, 0, 3618, 3619, 1, 0, 0, 0, 3619, 3622, 1, 0, 0, 0, 3620, 3622, 3, 638, 319, 0, 3621, 3613, 1, 0, 0, 0, 3621, 3620, 1, 0, 0, 0, 3622, 481, 1, 0, 0, 0, 3623, 3624, 3, 638, 319, 0, 3624, 3625, 5, 395, 0, 0, 3625, 3627, 1, 0, 0, 0, 3626, 3623, 1, 0, 0, 0, 3626, 3627, 1, 0, 0, 0, 3627, 3628, 1, 0, 0, 0, 3628, 3629, 3, 638, 319, 0, 3629, 483, 1, 0, 0, 0, 3630, 3631, 3, 638, 319, 0, 3631, 3632, 5, 395, 0, 0, 3632, 3634, 1, 0, 0, 0, 3633, 3630, 1, 0, 0, 0, 3633, 3634, 1, 0, 0, 0, 3634, 3635, 1, 0, 0, 0, 3635, 3636, 3, 638, 319, 0, 3636, 485, 1, 0, 0, 0, 3637, 3638, 5, 399, 0, 0, 3638, 3639, 3, 360, 180, 0, 3639, 3641, 5, 400, 0, 0, 3640, 3642, 5, 17, 0, 0, 3641, 3640, 1, 0, 0, 0, 3641, 3642, 1, 0, 0, 0, 3642, 3643, 1, 0, 0, 0, 3643, 3644, 3, 638, 319, 0, 3644, 487, 1, 0, 0, 0, 3645, 3646, 5, 237, 0, 0, 3646, 3647, 5, 32, 0, 0, 3647, 3649, 3, 536, 268, 0, 3648, 3650, 3, 542, 271, 0, 3649, 3648, 1, 0, 0, 0, 3649, 3650, 1, 0, 0, 0, 3650, 3659, 1, 0, 0, 0, 3651, 3659, 3, 542, 271, 0, 3652, 3654, 3, 546, 273, 0, 3653, 3655, 3, 548, 274, 0, 3654, 3653, 1, 0, 0, 0, 3654, 3655, 1, 0, 0, 0, 3655, 3659, 1, 0, 0, 0, 3656, 3659, 3, 548, 274, 0, 3657, 3659, 3, 544, 272, 0, 3658, 3645, 1, 0, 0, 0, 3658, 3651, 1, 0, 0, 0, 3658, 3652, 1, 0, 0, 0, 3658, 3656, 1, 0, 0, 0, 3658, 3657, 1, 0, 0, 0, 3659, 489, 1, 0, 0, 0, 3660, 3664, 3, 486, 243, 0, 3661, 3664, 3, 468, 234, 0, 3662, 3664, 3, 492, 246, 0, 3663, 3660, 1, 0, 0, 0, 3663, 3661, 1, 0, 0, 0, 3663, 3662, 1, 0, 0, 0, 3664, 491, 1, 0, 0, 0, 3665, 3666, 3, 638, 319, 0, 3666, 3667, 5, 399, 0, 0, 3667, 3668, 5, 224, 0, 0, 3668, 3670, 3, 490, 245, 0, 3669, 3671, 3, 488, 244, 0, 3670, 3669, 1, 0, 0, 0, 3670, 3671, 1, 0, 0, 0, 3671, 3687, 1, 0, 0, 0, 3672, 3673, 5, 432, 0, 0, 3673, 3674, 5, 399, 0, 0, 3674, 3675, 3, 580, 290, 0, 3675, 3684, 5, 400, 0, 0, 3676, 3677, 5, 397, 0, 0, 3677, 3678, 5, 432, 0, 0, 3678, 3679, 5, 399, 0, 0, 3679, 3680, 3, 580, 290, 0, 3680, 3681, 5, 400, 0, 0, 3681, 3683, 1, 0, 0, 0, 3682, 3676, 1, 0, 0, 0, 3683, 3686, 1, 0, 0, 0, 3684, 3682, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 3688, 1, 0, 0, 0, 3686, 3684, 1, 0, 0, 0, 3687, 3672, 1, 0, 0, 0, 3687, 3688, 1, 0, 0, 0, 3688, 3689, 1, 0, 0, 0, 3689, 3691, 5, 400, 0, 0, 3690, 3692, 3, 638, 319, 0, 3691, 3690, 1, 0, 0, 0, 3691, 3692, 1, 0, 0, 0, 3692, 493, 1, 0, 0, 0, 3693, 3694, 5, 384, 0, 0, 3694, 3695, 3, 580, 290, 0, 3695, 495, 1, 0, 0, 0, 3696, 3715, 5, 374, 0, 0, 3697, 3702, 3, 538, 269, 0, 3698, 3699, 5, 397, 0, 0, 3699, 3701, 3, 538, 269, 0, 3700, 3698, 1, 0, 0, 0, 3701, 3704, 1, 0, 0, 0, 3702, 3700, 1, 0, 0, 0, 3702, 3703, 1, 0, 0, 0, 3703, 3716, 1, 0, 0, 0, 3704, 3702, 1, 0, 0, 0, 3705, 3706, 5, 399, 0, 0, 3706, 3707, 3, 534, 267, 0, 3707, 3712, 5, 400, 0, 0, 3708, 3709, 5, 397, 0, 0, 3709, 3711, 3, 538, 269, 0, 3710, 3708, 1, 0, 0, 0, 3711, 3714, 1, 0, 0, 0, 3712, 3710, 1, 0, 0, 0, 3712, 3713, 1, 0, 0, 0, 3713, 3716, 1, 0, 0, 0, 3714, 3712, 1, 0, 0, 0, 3715, 3697, 1, 0, 0, 0, 3715, 3705, 1, 0, 0, 0, 3716, 497, 1, 0, 0, 0, 3717, 3718, 5, 329, 0, 0, 3718, 3719, 5, 399, 0, 0, 3719, 3720, 3, 496, 248, 0, 3720, 3722, 5, 400, 0, 0, 3721, 3723, 5, 17, 0, 0, 3722, 3721, 1, 0, 0, 0, 3722, 3723, 1, 0, 0, 0, 3723, 3724, 1, 0, 0, 0, 3724, 3734, 3, 464, 232, 0, 3725, 3726, 5, 399, 0, 0, 3726, 3731, 3, 638, 319, 0, 3727, 3728, 5, 397, 0, 0, 3728, 3730, 3, 638, 319, 0, 3729, 3727, 1, 0, 0, 0, 3730, 3733, 1, 0, 0, 0, 3731, 3729, 1, 0, 0, 0, 3731, 3732, 1, 0, 0, 0, 3732, 3735, 1, 0, 0, 0, 3733, 3731, 1, 0, 0, 0, 3734, 3725, 1, 0, 0, 0, 3734, 3735, 1, 0, 0, 0, 3735, 3736, 1, 0, 0, 0, 3736, 3737, 5, 400, 0, 0, 3737, 499, 1, 0, 0, 0, 3738, 3740, 5, 299, 0, 0, 3739, 3741, 5, 436, 0, 0, 3740, 3739, 1, 0, 0, 0, 3740, 3741, 1, 0, 0, 0, 3741, 3755, 1, 0, 0, 0, 3742, 3744, 7, 22, 0, 0, 3743, 3742, 1, 0, 0, 0, 3743, 3744, 1, 0, 0, 0, 3744, 3745, 1, 0, 0, 0, 3745, 3750, 3, 504, 252, 0, 3746, 3747, 5, 397, 0, 0, 3747, 3749, 3, 504, 252, 0, 3748, 3746, 1, 0, 0, 0, 3749, 3752, 1, 0, 0, 0, 3750, 3748, 1, 0, 0, 0, 3750, 3751, 1, 0, 0, 0, 3751, 3756, 1, 0, 0, 0, 3752, 3750, 1, 0, 0, 0, 3753, 3754, 5, 347, 0, 0, 3754, 3756, 3, 502, 251, 0, 3755, 3743, 1, 0, 0, 0, 3755, 3753, 1, 0, 0, 0, 3756, 3759, 1, 0, 0, 0, 3757, 3759, 3, 506, 253, 0, 3758, 3738, 1, 0, 0, 0, 3758, 3757, 1, 0, 0, 0, 3759, 501, 1, 0, 0, 0, 3760, 3761, 5, 399, 0, 0, 3761, 3762, 3, 510, 255, 0, 3762, 3763, 5, 400, 0, 0, 3763, 3764, 3, 212, 106, 0, 3764, 3765, 3, 216, 108, 0, 3765, 3766, 5, 370, 0, 0, 3766, 3779, 5, 426, 0, 0, 3767, 3777, 5, 17, 0, 0, 3768, 3771, 5, 399, 0, 0, 3769, 3772, 3, 446, 223, 0, 3770, 3772, 3, 248, 124, 0, 3771, 3769, 1, 0, 0, 0, 3771, 3770, 1, 0, 0, 0, 3772, 3773, 1, 0, 0, 0, 3773, 3774, 5, 400, 0, 0, 3774, 3778, 1, 0, 0, 0, 3775, 3778, 3, 446, 223, 0, 3776, 3778, 3, 248, 124, 0, 3777, 3768, 1, 0, 0, 0, 3777, 3775, 1, 0, 0, 0, 3777, 3776, 1, 0, 0, 0, 3778, 3780, 1, 0, 0, 0, 3779, 3767, 1, 0, 0, 0, 3779, 3780, 1, 0, 0, 0, 3780, 3781, 1, 0, 0, 0, 3781, 3782, 3, 212, 106, 0, 3782, 3783, 3, 214, 107, 0, 3783, 503, 1, 0, 0, 0, 3784, 3808, 3, 442, 221, 0, 3785, 3788, 3, 256, 128, 0, 3786, 3788, 3, 580, 290, 0, 3787, 3785, 1, 0, 0, 0, 3787, 3786, 1, 0, 0, 0, 3788, 3805, 1, 0, 0, 0, 3789, 3791, 5, 17, 0, 0, 3790, 3789, 1, 0, 0, 0, 3790, 3791, 1, 0, 0, 0, 3791, 3792, 1, 0, 0, 0, 3792, 3806, 3, 638, 319, 0, 3793, 3794, 5, 17, 0, 0, 3794, 3795, 5, 399, 0, 0, 3795, 3800, 3, 638, 319, 0, 3796, 3797, 5, 397, 0, 0, 3797, 3799, 3, 638, 319, 0, 3798, 3796, 1, 0, 0, 0, 3799, 3802, 1, 0, 0, 0, 3800, 3798, 1, 0, 0, 0, 3800, 3801, 1, 0, 0, 0, 3801, 3803, 1, 0, 0, 0, 3802, 3800, 1, 0, 0, 0, 3803, 3804, 5, 400, 0, 0, 3804, 3806, 1, 0, 0, 0, 3805, 3790, 1, 0, 0, 0, 3805, 3793, 1, 0, 0, 0, 3805, 3806, 1, 0, 0, 0, 3806, 3808, 1, 0, 0, 0, 3807, 3784, 1, 0, 0, 0, 3807, 3787, 1, 0, 0, 0, 3808, 505, 1, 0, 0, 0, 3809, 3810, 7, 31, 0, 0, 3810, 3811, 3, 510, 255, 0, 3811, 3812, 3, 212, 106, 0, 3812, 3813, 3, 216, 108, 0, 3813, 3814, 5, 370, 0, 0, 3814, 3827, 5, 426, 0, 0, 3815, 3825, 5, 17, 0, 0, 3816, 3819, 5, 399, 0, 0, 3817, 3820, 3, 446, 223, 0, 3818, 3820, 3, 248, 124, 0, 3819, 3817, 1, 0, 0, 0, 3819, 3818, 1, 0, 0, 0, 3820, 3821, 1, 0, 0, 0, 3821, 3822, 5, 400, 0, 0, 3822, 3826, 1, 0, 0, 0, 3823, 3826, 3, 446, 223, 0, 3824, 3826, 3, 248, 124, 0, 3825, 3816, 1, 0, 0, 0, 3825, 3823, 1, 0, 0, 0, 3825, 3824, 1, 0, 0, 0, 3826, 3828, 1, 0, 0, 0, 3827, 3815, 1, 0, 0, 0, 3827, 3828, 1, 0, 0, 0, 3828, 3829, 1, 0, 0, 0, 3829, 3830, 3, 212, 106, 0, 3830, 3831, 3, 214, 107, 0, 3831, 507, 1, 0, 0, 0, 3832, 3835, 3, 442, 221, 0, 3833, 3835, 3, 580, 290, 0, 3834, 3832, 1, 0, 0, 0, 3834, 3833, 1, 0, 0, 0, 3835, 509, 1, 0, 0, 0, 3836, 3841, 3, 508, 254, 0, 3837, 3838, 5, 397, 0, 0, 3838, 3840, 3, 508, 254, 0, 3839, 3837, 1, 0, 0, 0, 3840, 3843, 1, 0, 0, 0, 3841, 3839, 1, 0, 0, 0, 3841, 3842, 1, 0, 0, 0, 3842, 511, 1, 0, 0, 0, 3843, 3841, 1, 0, 0, 0, 3844, 3845, 5, 386, 0, 0, 3845, 3846, 3, 638, 319, 0, 3846, 3847, 5, 17, 0, 0, 3847, 3855, 3, 514, 257, 0, 3848, 3849, 5, 397, 0, 0, 3849, 3850, 3, 638, 319, 0, 3850, 3851, 5, 17, 0, 0, 3851, 3852, 3, 514, 257, 0, 3852, 3854, 1, 0, 0, 0, 3853, 3848, 1, 0, 0, 0, 3854, 3857, 1, 0, 0, 0, 3855, 3853, 1, 0, 0, 0, 3855, 3856, 1, 0, 0, 0, 3856, 513, 1, 0, 0, 0, 3857, 3855, 1, 0, 0, 0, 3858, 3871, 3, 638, 319, 0, 3859, 3861, 5, 399, 0, 0, 3860, 3862, 3, 638, 319, 0, 3861, 3860, 1, 0, 0, 0, 3861, 3862, 1, 0, 0, 0, 3862, 3864, 1, 0, 0, 0, 3863, 3865, 3, 488, 244, 0, 3864, 3863, 1, 0, 0, 0, 3864, 3865, 1, 0, 0, 0, 3865, 3867, 1, 0, 0, 0, 3866, 3868, 3, 516, 258, 0, 3867, 3866, 1, 0, 0, 0, 3867, 3868, 1, 0, 0, 0, 3868, 3869, 1, 0, 0, 0, 3869, 3871, 5, 400, 0, 0, 3870, 3858, 1, 0, 0, 0, 3870, 3859, 1, 0, 0, 0, 3871, 515, 1, 0, 0, 0, 3872, 3886, 7, 32, 0, 0, 3873, 3874, 5, 354, 0, 0, 3874, 3880, 5, 247, 0, 0, 3875, 3876, 5, 62, 0, 0, 3876, 3880, 5, 291, 0, 0, 3877, 3878, 5, 431, 0, 0, 3878, 3880, 5, 247, 0, 0, 3879, 3873, 1, 0, 0, 0, 3879, 3875, 1, 0, 0, 0, 3879, 3877, 1, 0, 0, 0, 3880, 3887, 1, 0, 0, 0, 3881, 3882, 5, 25, 0, 0, 3882, 3883, 3, 518, 259, 0, 3883, 3884, 5, 11, 0, 0, 3884, 3885, 3, 518, 259, 0, 3885, 3887, 1, 0, 0, 0, 3886, 3879, 1, 0, 0, 0, 3886, 3881, 1, 0, 0, 0, 3887, 517, 1, 0, 0, 0, 3888, 3889, 7, 33, 0, 0, 3889, 3893, 7, 34, 0, 0, 3890, 3891, 5, 62, 0, 0, 3891, 3893, 5, 291, 0, 0, 3892, 3888, 1, 0, 0, 0, 3892, 3890, 1, 0, 0, 0, 3893, 519, 1, 0, 0, 0, 3894, 3895, 5, 144, 0, 0, 3895, 3901, 5, 32, 0, 0, 3896, 3902, 3, 256, 128, 0, 3897, 3902, 3, 522, 261, 0, 3898, 3902, 3, 524, 262, 0, 3899, 3900, 5, 399, 0, 0, 3900, 3902, 5, 400, 0, 0, 3901, 3896, 1, 0, 0, 0, 3901, 3897, 1, 0, 0, 0, 3901, 3898, 1, 0, 0, 0, 3901, 3899, 1, 0, 0, 0, 3902, 521, 1, 0, 0, 0, 3903, 3906, 5, 290, 0, 0, 3904, 3906, 5, 61, 0, 0, 3905, 3903, 1, 0, 0, 0, 3905, 3904, 1, 0, 0, 0, 3906, 3907, 1, 0, 0, 0, 3907, 3908, 5, 399, 0, 0, 3908, 3913, 3, 580, 290, 0, 3909, 3910, 5, 397, 0, 0, 3910, 3912, 3, 580, 290, 0, 3911, 3909, 1, 0, 0, 0, 3912, 3915, 1, 0, 0, 0, 3913, 3911, 1, 0, 0, 0, 3913, 3914, 1, 0, 0, 0, 3914, 3916, 1, 0, 0, 0, 3915, 3913, 1, 0, 0, 0, 3916, 3917, 5, 400, 0, 0, 3917, 523, 1, 0, 0, 0, 3918, 3923, 3, 540, 270, 0, 3919, 3920, 5, 387, 0, 0, 3920, 3924, 5, 290, 0, 0, 3921, 3922, 5, 387, 0, 0, 3922, 3924, 5, 61, 0, 0, 3923, 3919, 1, 0, 0, 0, 3923, 3921, 1, 0, 0, 0, 3923, 3924, 1, 0, 0, 0, 3924, 3938, 1, 0, 0, 0, 3925, 3926, 5, 145, 0, 0, 3926, 3927, 5, 305, 0, 0, 3927, 3928, 5, 399, 0, 0, 3928, 3933, 3, 526, 263, 0, 3929, 3930, 5, 397, 0, 0, 3930, 3932, 3, 526, 263, 0, 3931, 3929, 1, 0, 0, 0, 3932, 3935, 1, 0, 0, 0, 3933, 3931, 1, 0, 0, 0, 3933, 3934, 1, 0, 0, 0, 3934, 3936, 1, 0, 0, 0, 3935, 3933, 1, 0, 0, 0, 3936, 3937, 5, 400, 0, 0, 3937, 3939, 1, 0, 0, 0, 3938, 3925, 1, 0, 0, 0, 3938, 3939, 1, 0, 0, 0, 3939, 525, 1, 0, 0, 0, 3940, 3942, 5, 399, 0, 0, 3941, 3943, 3, 580, 290, 0, 3942, 3941, 1, 0, 0, 0, 3942, 3943, 1, 0, 0, 0, 3943, 3948, 1, 0, 0, 0, 3944, 3945, 5, 397, 0, 0, 3945, 3947, 3, 580, 290, 0, 3946, 3944, 1, 0, 0, 0, 3947, 3950, 1, 0, 0, 0, 3948, 3946, 1, 0, 0, 0, 3948, 3949, 1, 0, 0, 0, 3949, 3951, 1, 0, 0, 0, 3950, 3948, 1, 0, 0, 0, 3951, 3954, 5, 400, 0, 0, 3952, 3954, 3, 580, 290, 0, 3953, 3940, 1, 0, 0, 0, 3953, 3952, 1, 0, 0, 0, 3954, 527, 1, 0, 0, 0, 3955, 3956, 5, 146, 0, 0, 3956, 3957, 3, 580, 290, 0, 3957, 529, 1, 0, 0, 0, 3958, 3959, 5, 256, 0, 0, 3959, 3960, 3, 580, 290, 0, 3960, 531, 1, 0, 0, 0, 3961, 3964, 5, 83, 0, 0, 3962, 3964, 3, 580, 290, 0, 3963, 3961, 1, 0, 0, 0, 3963, 3962, 1, 0, 0, 0, 3964, 533, 1, 0, 0, 0, 3965, 3967, 3, 580, 290, 0, 3966, 3968, 5, 17, 0, 0, 3967, 3966, 1, 0, 0, 0, 3967, 3968, 1, 0, 0, 0, 3968, 3970, 1, 0, 0, 0, 3969, 3971, 3, 638, 319, 0, 3970, 3969, 1, 0, 0, 0, 3970, 3971, 1, 0, 0, 0, 3971, 3982, 1, 0, 0, 0, 3972, 3973, 5, 397, 0, 0, 3973, 3975, 3, 580, 290, 0, 3974, 3976, 5, 17, 0, 0, 3975, 3974, 1, 0, 0, 0, 3975, 3976, 1, 0, 0, 0, 3976, 3978, 1, 0, 0, 0, 3977, 3979, 3, 638, 319, 0, 3978, 3977, 1, 0, 0, 0, 3978, 3979, 1, 0, 0, 0, 3979, 3981, 1, 0, 0, 0, 3980, 3972, 1, 0, 0, 0, 3981, 3984, 1, 0, 0, 0, 3982, 3980, 1, 0, 0, 0, 3982, 3983, 1, 0, 0, 0, 3983, 535, 1, 0, 0, 0, 3984, 3982, 1, 0, 0, 0, 3985, 3988, 3, 538, 269, 0, 3986, 3988, 3, 540, 270, 0, 3987, 3985, 1, 0, 0, 0, 3987, 3986, 1, 0, 0, 0, 3988, 537, 1, 0, 0, 0, 3989, 3990, 5, 399, 0, 0, 3990, 3991, 3, 540, 270, 0, 3991, 3992, 5, 400, 0, 0, 3992, 539, 1, 0, 0, 0, 3993, 4000, 3, 532, 266, 0, 3994, 3995, 5, 397, 0, 0, 3995, 3997, 3, 532, 266, 0, 3996, 3994, 1, 0, 0, 0, 3997, 3998, 1, 0, 0, 0, 3998, 3996, 1, 0, 0, 0, 3998, 3999, 1, 0, 0, 0, 3999, 4001, 1, 0, 0, 0, 4000, 3996, 1, 0, 0, 0, 4000, 4001, 1, 0, 0, 0, 4001, 541, 1, 0, 0, 0, 4002, 4003, 5, 229, 0, 0, 4003, 4004, 5, 32, 0, 0, 4004, 4009, 3, 308, 154, 0, 4005, 4006, 5, 397, 0, 0, 4006, 4008, 3, 308, 154, 0, 4007, 4005, 1, 0, 0, 0, 4008, 4011, 1, 0, 0, 0, 4009, 4007, 1, 0, 0, 0, 4009, 4010, 1, 0, 0, 0, 4010, 543, 1, 0, 0, 0, 4011, 4009, 1, 0, 0, 0, 4012, 4013, 5, 41, 0, 0, 4013, 4014, 5, 32, 0, 0, 4014, 4015, 3, 536, 268, 0, 4015, 545, 1, 0, 0, 0, 4016, 4017, 5, 97, 0, 0, 4017, 4018, 5, 32, 0, 0, 4018, 4019, 3, 536, 268, 0, 4019, 547, 1, 0, 0, 0, 4020, 4021, 5, 314, 0, 0, 4021, 4041, 5, 32, 0, 0, 4022, 4023, 5, 399, 0, 0, 4023, 4028, 3, 308, 154, 0, 4024, 4025, 5, 397, 0, 0, 4025, 4027, 3, 308, 154, 0, 4026, 4024, 1, 0, 0, 0, 4027, 4030, 1, 0, 0, 0, 4028, 4026, 1, 0, 0, 0, 4028, 4029, 1, 0, 0, 0, 4029, 4031, 1, 0, 0, 0, 4030, 4028, 1, 0, 0, 0, 4031, 4032, 5, 400, 0, 0, 4032, 4042, 1, 0, 0, 0, 4033, 4038, 3, 308, 154, 0, 4034, 4035, 5, 397, 0, 0, 4035, 4037, 3, 308, 154, 0, 4036, 4034, 1, 0, 0, 0, 4037, 4040, 1, 0, 0, 0, 4038, 4036, 1, 0, 0, 0, 4038, 4039, 1, 0, 0, 0, 4039, 4042, 1, 0, 0, 0, 4040, 4038, 1, 0, 0, 0, 4041, 4022, 1, 0, 0, 0, 4041, 4033, 1, 0, 0, 0, 4042, 549, 1, 0, 0, 0, 4043, 4044, 5, 349, 0, 0, 4044, 4048, 5, 399, 0, 0, 4045, 4049, 5, 179, 0, 0, 4046, 4049, 5, 343, 0, 0, 4047, 4049, 5, 29, 0, 0, 4048, 4045, 1, 0, 0, 0, 4048, 4046, 1, 0, 0, 0, 4048, 4047, 1, 0, 0, 0, 4048, 4049, 1, 0, 0, 0, 4049, 4051, 1, 0, 0, 0, 4050, 4052, 3, 508, 254, 0, 4051, 4050, 1, 0, 0, 0, 4051, 4052, 1, 0, 0, 0, 4052, 4053, 1, 0, 0, 0, 4053, 4054, 5, 139, 0, 0, 4054, 4055, 3, 508, 254, 0, 4055, 4056, 5, 400, 0, 0, 4056, 4097, 1, 0, 0, 0, 4057, 4058, 3, 558, 279, 0, 4058, 4073, 5, 399, 0, 0, 4059, 4074, 5, 415, 0, 0, 4060, 4062, 7, 22, 0, 0, 4061, 4060, 1, 0, 0, 0, 4061, 4062, 1, 0, 0, 0, 4062, 4071, 1, 0, 0, 0, 4063, 4068, 3, 508, 254, 0, 4064, 4065, 5, 397, 0, 0, 4065, 4067, 3, 508, 254, 0, 4066, 4064, 1, 0, 0, 0, 4067, 4070, 1, 0, 0, 0, 4068, 4066, 1, 0, 0, 0, 4068, 4069, 1, 0, 0, 0, 4069, 4072, 1, 0, 0, 0, 4070, 4068, 1, 0, 0, 0, 4071, 4063, 1, 0, 0, 0, 4071, 4072, 1, 0, 0, 0, 4072, 4074, 1, 0, 0, 0, 4073, 4059, 1, 0, 0, 0, 4073, 4061, 1, 0, 0, 0, 4074, 4094, 1, 0, 0, 0, 4075, 4076, 5, 400, 0, 0, 4076, 4077, 5, 388, 0, 0, 4077, 4078, 5, 144, 0, 0, 4078, 4079, 5, 399, 0, 0, 4079, 4080, 3, 542, 271, 0, 4080, 4081, 5, 400, 0, 0, 4081, 4095, 1, 0, 0, 0, 4082, 4084, 5, 400, 0, 0, 4083, 4085, 3, 552, 276, 0, 4084, 4083, 1, 0, 0, 0, 4084, 4085, 1, 0, 0, 0, 4085, 4086, 1, 0, 0, 0, 4086, 4087, 5, 234, 0, 0, 4087, 4095, 3, 514, 257, 0, 4088, 4089, 3, 552, 276, 0, 4089, 4090, 5, 400, 0, 0, 4090, 4091, 5, 234, 0, 0, 4091, 4092, 3, 514, 257, 0, 4092, 4095, 1, 0, 0, 0, 4093, 4095, 5, 400, 0, 0, 4094, 4075, 1, 0, 0, 0, 4094, 4082, 1, 0, 0, 0, 4094, 4088, 1, 0, 0, 0, 4094, 4093, 1, 0, 0, 0, 4095, 4097, 1, 0, 0, 0, 4096, 4043, 1, 0, 0, 0, 4096, 4057, 1, 0, 0, 0, 4097, 551, 1, 0, 0, 0, 4098, 4099, 7, 35, 0, 0, 4099, 4100, 5, 220, 0, 0, 4100, 553, 1, 0, 0, 0, 4101, 4102, 3, 640, 320, 0, 4102, 555, 1, 0, 0, 0, 4103, 4106, 3, 640, 320, 0, 4104, 4106, 5, 426, 0, 0, 4105, 4103, 1, 0, 0, 0, 4105, 4104, 1, 0, 0, 0, 4106, 557, 1, 0, 0, 0, 4107, 4111, 3, 640, 320, 0, 4108, 4111, 3, 646, 323, 0, 4109, 4111, 3, 636, 318, 0, 4110, 4107, 1, 0, 0, 0, 4110, 4108, 1, 0, 0, 0, 4110, 4109, 1, 0, 0, 0, 4111, 559, 1, 0, 0, 0, 4112, 4113, 5, 36, 0, 0, 4113, 4114, 5, 399, 0, 0, 4114, 4115, 3, 580, 290, 0, 4115, 4116, 5, 17, 0, 0, 4116, 4119, 3, 348, 174, 0, 4117, 4118, 5, 137, 0, 0, 4118, 4120, 5, 426, 0, 0, 4119, 4117, 1, 0, 0, 0, 4119, 4120, 1, 0, 0, 0, 4120, 4121, 1, 0, 0, 0, 4121, 4122, 5, 400, 0, 0, 4122, 561, 1, 0, 0, 0, 4123, 4124, 5, 35, 0, 0, 4124, 4130, 3, 580, 290, 0, 4125, 4126, 5, 383, 0, 0, 4126, 4127, 3, 580, 290, 0, 4127, 4128, 5, 335, 0, 0, 4128, 4129, 3, 580, 290, 0, 4129, 4131, 1, 0, 0, 0, 4130, 4125, 1, 0, 0, 0, 4131, 4132, 1, 0, 0, 0, 4132, 4130, 1, 0, 0, 0, 4132, 4133, 1, 0, 0, 0, 4133, 4136, 1, 0, 0, 0, 4134, 4135, 5, 105, 0, 0, 4135, 4137, 3, 580, 290, 0, 4136, 4134, 1, 0, 0, 0, 4136, 4137, 1, 0, 0, 0, 4137, 4138, 1, 0, 0, 0, 4138, 4139, 5, 108, 0, 0, 4139, 563, 1, 0, 0, 0, 4140, 4146, 5, 35, 0, 0, 4141, 4142, 5, 383, 0, 0, 4142, 4143, 3, 580, 290, 0, 4143, 4144, 5, 335, 0, 0, 4144, 4145, 3, 580, 290, 0, 4145, 4147, 1, 0, 0, 0, 4146, 4141, 1, 0, 0, 0, 4147, 4148, 1, 0, 0, 0, 4148, 4146, 1, 0, 0, 0, 4148, 4149, 1, 0, 0, 0, 4149, 4152, 1, 0, 0, 0, 4150, 4151, 5, 105, 0, 0, 4151, 4153, 3, 580, 290, 0, 4152, 4150, 1, 0, 0, 0, 4152, 4153, 1, 0, 0, 0, 4153, 4154, 1, 0, 0, 0, 4154, 4155, 5, 108, 0, 0, 4155, 565, 1, 0, 0, 0, 4156, 4157, 5, 132, 0, 0, 4157, 4158, 5, 399, 0, 0, 4158, 4161, 3, 580, 290, 0, 4159, 4160, 5, 341, 0, 0, 4160, 4162, 3, 570, 285, 0, 4161, 4159, 1, 0, 0, 0, 4161, 4162, 1, 0, 0, 0, 4162, 4163, 1, 0, 0, 0, 4163, 4164, 5, 400, 0, 0, 4164, 567, 1, 0, 0, 0, 4165, 4166, 5, 124, 0, 0, 4166, 4167, 5, 399, 0, 0, 4167, 4168, 3, 570, 285, 0, 4168, 4169, 5, 139, 0, 0, 4169, 4170, 3, 580, 290, 0, 4170, 4171, 5, 400, 0, 0, 4171, 569, 1, 0, 0, 0, 4172, 4181, 3, 666, 333, 0, 4173, 4181, 5, 257, 0, 0, 4174, 4181, 3, 668, 334, 0, 4175, 4181, 3, 670, 335, 0, 4176, 4181, 3, 672, 336, 0, 4177, 4181, 3, 674, 337, 0, 4178, 4181, 3, 676, 338, 0, 4179, 4181, 3, 678, 339, 0, 4180, 4172, 1, 0, 0, 0, 4180, 4173, 1, 0, 0, 0, 4180, 4174, 1, 0, 0, 0, 4180, 4175, 1, 0, 0, 0, 4180, 4176, 1, 0, 0, 0, 4180, 4177, 1, 0, 0, 0, 4180, 4178, 1, 0, 0, 0, 4180, 4179, 1, 0, 0, 0, 4181, 571, 1, 0, 0, 0, 4182, 4183, 3, 574, 287, 0, 4183, 4184, 3, 578, 289, 0, 4184, 4211, 1, 0, 0, 0, 4185, 4211, 5, 431, 0, 0, 4186, 4187, 5, 71, 0, 0, 4187, 4211, 5, 426, 0, 0, 4188, 4211, 5, 63, 0, 0, 4189, 4190, 5, 337, 0, 0, 4190, 4211, 5, 426, 0, 0, 4191, 4211, 5, 64, 0, 0, 4192, 4193, 5, 338, 0, 0, 4193, 4211, 5, 426, 0, 0, 4194, 4198, 5, 426, 0, 0, 4195, 4197, 5, 426, 0, 0, 4196, 4195, 1, 0, 0, 0, 4197, 4200, 1, 0, 0, 0, 4198, 4196, 1, 0, 0, 0, 4198, 4199, 1, 0, 0, 0, 4199, 4211, 1, 0, 0, 0, 4200, 4198, 1, 0, 0, 0, 4201, 4211, 5, 428, 0, 0, 4202, 4211, 5, 429, 0, 0, 4203, 4204, 5, 433, 0, 0, 4204, 4211, 5, 427, 0, 0, 4205, 4211, 5, 350, 0, 0, 4206, 4211, 5, 125, 0, 0, 4207, 4211, 5, 219, 0, 0, 4208, 4211, 5, 424, 0, 0, 4209, 4211, 5, 432, 0, 0, 4210, 4182, 1, 0, 0, 0, 4210, 4185, 1, 0, 0, 0, 4210, 4186, 1, 0, 0, 0, 4210, 4188, 1, 0, 0, 0, 4210, 4189, 1, 0, 0, 0, 4210, 4191, 1, 0, 0, 0, 4210, 4192, 1, 0, 0, 0, 4210, 4194, 1, 0, 0, 0, 4210, 4201, 1, 0, 0, 0, 4210, 4202, 1, 0, 0, 0, 4210, 4203, 1, 0, 0, 0, 4210, 4205, 1, 0, 0, 0, 4210, 4206, 1, 0, 0, 0, 4210, 4207, 1, 0, 0, 0, 4210, 4208, 1, 0, 0, 0, 4210, 4209, 1, 0, 0, 0, 4211, 573, 1, 0, 0, 0, 4212, 4213, 7, 27, 0, 0, 4213, 575, 1, 0, 0, 0, 4214, 4215, 5, 399, 0, 0, 4215, 4216, 3, 574, 287, 0, 4216, 4217, 5, 400, 0, 0, 4217, 4218, 3, 578, 289, 0, 4218, 4230, 1, 0, 0, 0, 4219, 4225, 5, 165, 0, 0, 4220, 4226, 3, 574, 287, 0, 4221, 4222, 5, 399, 0, 0, 4222, 4223, 3, 580, 290, 0, 4223, 4224, 5, 400, 0, 0, 4224, 4226, 1, 0, 0, 0, 4225, 4220, 1, 0, 0, 0, 4225, 4221, 1, 0, 0, 0, 4226, 4227, 1, 0, 0, 0, 4227, 4228, 3, 578, 289, 0, 4228, 4230, 1, 0, 0, 0, 4229, 4214, 1, 0, 0, 0, 4229, 4219, 1, 0, 0, 0, 4230, 577, 1, 0, 0, 0, 4231, 4232, 3, 666, 333, 0, 4232, 4233, 5, 341, 0, 0, 4233, 4234, 3, 668, 334, 0, 4234, 4246, 1, 0, 0, 0, 4235, 4236, 3, 672, 336, 0, 4236, 4237, 5, 341, 0, 0, 4237, 4238, 3, 678, 339, 0, 4238, 4246, 1, 0, 0, 0, 4239, 4246, 3, 666, 333, 0, 4240, 4246, 3, 668, 334, 0, 4241, 4246, 3, 672, 336, 0, 4242, 4246, 3, 674, 337, 0, 4243, 4246, 3, 676, 338, 0, 4244, 4246, 3, 678, 339, 0, 4245, 4231, 1, 0, 0, 0, 4245, 4235, 1, 0, 0, 0, 4245, 4239, 1, 0, 0, 0, 4245, 4240, 1, 0, 0, 0, 4245, 4241, 1, 0, 0, 0, 4245, 4242, 1, 0, 0, 0, 4245, 4243, 1, 0, 0, 0, 4245, 4244, 1, 0, 0, 0, 4246, 579, 1, 0, 0, 0, 4247, 4252, 3, 622, 311, 0, 4248, 4249, 5, 228, 0, 0, 4249, 4251, 3, 622, 311, 0, 4250, 4248, 1, 0, 0, 0, 4251, 4254, 1, 0, 0, 0, 4252, 4250, 1, 0, 0, 0, 4252, 4253, 1, 0, 0, 0, 4253, 581, 1, 0, 0, 0, 4254, 4252, 1, 0, 0, 0, 4255, 4267, 3, 572, 286, 0, 4256, 4267, 3, 576, 288, 0, 4257, 4267, 3, 560, 280, 0, 4258, 4267, 3, 568, 284, 0, 4259, 4267, 3, 566, 283, 0, 4260, 4267, 3, 562, 281, 0, 4261, 4267, 3, 564, 282, 0, 4262, 4267, 3, 600, 300, 0, 4263, 4267, 3, 550, 275, 0, 4264, 4267, 3, 538, 269, 0, 4265, 4267, 3, 638, 319, 0, 4266, 4255, 1, 0, 0, 0, 4266, 4256, 1, 0, 0, 0, 4266, 4257, 1, 0, 0, 0, 4266, 4258, 1, 0, 0, 0, 4266, 4259, 1, 0, 0, 0, 4266, 4260, 1, 0, 0, 0, 4266, 4261, 1, 0, 0, 0, 4266, 4262, 1, 0, 0, 0, 4266, 4263, 1, 0, 0, 0, 4266, 4264, 1, 0, 0, 0, 4266, 4265, 1, 0, 0, 0, 4267, 583, 1, 0, 0, 0, 4268, 4270, 7, 36, 0, 0, 4269, 4268, 1, 0, 0, 0, 4270, 4273, 1, 0, 0, 0, 4271, 4269, 1, 0, 0, 0, 4271, 4272, 1, 0, 0, 0, 4272, 4274, 1, 0, 0, 0, 4273, 4271, 1, 0, 0, 0, 4274, 4283, 3, 582, 291, 0, 4275, 4276, 5, 401, 0, 0, 4276, 4277, 3, 580, 290, 0, 4277, 4278, 5, 402, 0, 0, 4278, 4282, 1, 0, 0, 0, 4279, 4280, 5, 395, 0, 0, 4280, 4282, 3, 638, 319, 0, 4281, 4275, 1, 0, 0, 0, 4281, 4279, 1, 0, 0, 0, 4282, 4285, 1, 0, 0, 0, 4283, 4281, 1, 0, 0, 0, 4283, 4284, 1, 0, 0, 0, 4284, 585, 1, 0, 0, 0, 4285, 4283, 1, 0, 0, 0, 4286, 4291, 3, 584, 292, 0, 4287, 4288, 5, 423, 0, 0, 4288, 4290, 3, 584, 292, 0, 4289, 4287, 1, 0, 0, 0, 4290, 4293, 1, 0, 0, 0, 4291, 4289, 1, 0, 0, 0, 4291, 4292, 1, 0, 0, 0, 4292, 587, 1, 0, 0, 0, 4293, 4291, 1, 0, 0, 0, 4294, 4299, 3, 586, 293, 0, 4295, 4296, 7, 37, 0, 0, 4296, 4298, 3, 586, 293, 0, 4297, 4295, 1, 0, 0, 0, 4298, 4301, 1, 0, 0, 0, 4299, 4297, 1, 0, 0, 0, 4299, 4300, 1, 0, 0, 0, 4300, 589, 1, 0, 0, 0, 4301, 4299, 1, 0, 0, 0, 4302, 4307, 3, 588, 294, 0, 4303, 4304, 7, 38, 0, 0, 4304, 4306, 3, 588, 294, 0, 4305, 4303, 1, 0, 0, 0, 4306, 4309, 1, 0, 0, 0, 4307, 4305, 1, 0, 0, 0, 4307, 4308, 1, 0, 0, 0, 4308, 591, 1, 0, 0, 0, 4309, 4307, 1, 0, 0, 0, 4310, 4315, 3, 590, 295, 0, 4311, 4312, 5, 422, 0, 0, 4312, 4314, 3, 590, 295, 0, 4313, 4311, 1, 0, 0, 0, 4314, 4317, 1, 0, 0, 0, 4315, 4313, 1, 0, 0, 0, 4315, 4316, 1, 0, 0, 0, 4316, 593, 1, 0, 0, 0, 4317, 4315, 1, 0, 0, 0, 4318, 4323, 3, 592, 296, 0, 4319, 4320, 5, 419, 0, 0, 4320, 4322, 3, 592, 296, 0, 4321, 4319, 1, 0, 0, 0, 4322, 4325, 1, 0, 0, 0, 4323, 4321, 1, 0, 0, 0, 4323, 4324, 1, 0, 0, 0, 4324, 595, 1, 0, 0, 0, 4325, 4323, 1, 0, 0, 0, 4326, 4331, 3, 594, 297, 0, 4327, 4328, 5, 421, 0, 0, 4328, 4330, 3, 594, 297, 0, 4329, 4327, 1, 0, 0, 0, 4330, 4333, 1, 0, 0, 0, 4331, 4329, 1, 0, 0, 0, 4331, 4332, 1, 0, 0, 0, 4332, 597, 1, 0, 0, 0, 4333, 4331, 1, 0, 0, 0, 4334, 4335, 7, 39, 0, 0, 4335, 599, 1, 0, 0, 0, 4336, 4337, 5, 399, 0, 0, 4337, 4338, 3, 376, 188, 0, 4338, 4339, 5, 400, 0, 0, 4339, 601, 1, 0, 0, 0, 4340, 4342, 3, 596, 298, 0, 4341, 4343, 3, 604, 302, 0, 4342, 4341, 1, 0, 0, 0, 4342, 4343, 1, 0, 0, 0, 4343, 4347, 1, 0, 0, 0, 4344, 4345, 5, 117, 0, 0, 4345, 4347, 3, 600, 300, 0, 4346, 4340, 1, 0, 0, 0, 4346, 4344, 1, 0, 0, 0, 4347, 603, 1, 0, 0, 0, 4348, 4349, 3, 598, 299, 0, 4349, 4350, 3, 596, 298, 0, 4350, 4355, 1, 0, 0, 0, 4351, 4355, 3, 606, 303, 0, 4352, 4353, 5, 216, 0, 0, 4353, 4355, 3, 610, 305, 0, 4354, 4348, 1, 0, 0, 0, 4354, 4351, 1, 0, 0, 0, 4354, 4352, 1, 0, 0, 0, 4355, 605, 1, 0, 0, 0, 4356, 4357, 5, 154, 0, 0, 4357, 4371, 3, 608, 304, 0, 4358, 4359, 5, 25, 0, 0, 4359, 4360, 3, 596, 298, 0, 4360, 4361, 5, 11, 0, 0, 4361, 4362, 3, 596, 298, 0, 4362, 4371, 1, 0, 0, 0, 4363, 4364, 5, 184, 0, 0, 4364, 4365, 7, 40, 0, 0, 4365, 4371, 3, 538, 269, 0, 4366, 4367, 3, 634, 317, 0, 4367, 4368, 7, 41, 0, 0, 4368, 4369, 3, 600, 300, 0, 4369, 4371, 1, 0, 0, 0, 4370, 4356, 1, 0, 0, 0, 4370, 4358, 1, 0, 0, 0, 4370, 4363, 1, 0, 0, 0, 4370, 4366, 1, 0, 0, 0, 4371, 607, 1, 0, 0, 0, 4372, 4375, 3, 600, 300, 0, 4373, 4375, 3, 538, 269, 0, 4374, 4372, 1, 0, 0, 0, 4374, 4373, 1, 0, 0, 0, 4375, 609, 1, 0, 0, 0, 4376, 4377, 7, 42, 0, 0, 4377, 4380, 3, 596, 298, 0, 4378, 4380, 3, 606, 303, 0, 4379, 4376, 1, 0, 0, 0, 4379, 4378, 1, 0, 0, 0, 4380, 611, 1, 0, 0, 0, 4381, 4382, 5, 167, 0, 0, 4382, 4383, 5, 96, 0, 0, 4383, 4384, 5, 139, 0, 0, 4384, 613, 1, 0, 0, 0, 4385, 4393, 5, 405, 0, 0, 4386, 4393, 5, 406, 0, 0, 4387, 4393, 5, 407, 0, 0, 4388, 4389, 5, 167, 0, 0, 4389, 4390, 5, 216, 0, 0, 4390, 4391, 5, 96, 0, 0, 4391, 4393, 5, 139, 0, 0, 4392, 4385, 1, 0, 0, 0, 4392, 4386, 1, 0, 0, 0, 4392, 4387, 1, 0, 0, 0, 4392, 4388, 1, 0, 0, 0, 4393, 615, 1, 0, 0, 0, 4394, 4403, 3, 602, 301, 0, 4395, 4396, 3, 614, 307, 0, 4396, 4397, 3, 602, 301, 0, 4397, 4402, 1, 0, 0, 0, 4398, 4399, 3, 612, 306, 0, 4399, 4400, 3, 602, 301, 0, 4400, 4402, 1, 0, 0, 0, 4401, 4395, 1, 0, 0, 0, 4401, 4398, 1, 0, 0, 0, 4402, 4405, 1, 0, 0, 0, 4403, 4401, 1, 0, 0, 0, 4403, 4404, 1, 0, 0, 0, 4404, 617, 1, 0, 0, 0, 4405, 4403, 1, 0, 0, 0, 4406, 4413, 5, 219, 0, 0, 4407, 4413, 5, 350, 0, 0, 4408, 4413, 5, 125, 0, 0, 4409, 4413, 5, 360, 0, 0, 4410, 4411, 5, 216, 0, 0, 4411, 4413, 7, 43, 0, 0, 4412, 4406, 1, 0, 0, 0, 4412, 4407, 1, 0, 0, 0, 4412, 4408, 1, 0, 0, 0, 4412, 4409, 1, 0, 0, 0, 4412, 4410, 1, 0, 0, 0, 4413, 619, 1, 0, 0, 0, 4414, 4416, 5, 216, 0, 0, 4415, 4414, 1, 0, 0, 0, 4416, 4419, 1, 0, 0, 0, 4417, 4415, 1, 0, 0, 0, 4417, 4418, 1, 0, 0, 0, 4418, 4420, 1, 0, 0, 0, 4419, 4417, 1, 0, 0, 0, 4420, 4423, 3, 616, 308, 0, 4421, 4422, 5, 167, 0, 0, 4422, 4424, 3, 618, 309, 0, 4423, 4421, 1, 0, 0, 0, 4423, 4424, 1, 0, 0, 0, 4424, 621, 1, 0, 0, 0, 4425, 4430, 3, 620, 310, 0, 4426, 4427, 5, 11, 0, 0, 4427, 4429, 3, 620, 310, 0, 4428, 4426, 1, 0, 0, 0, 4429, 4432, 1, 0, 0, 0, 4430, 4428, 1, 0, 0, 0, 4430, 4431, 1, 0, 0, 0, 4431, 623, 1, 0, 0, 0, 4432, 4430, 1, 0, 0, 0, 4433, 4435, 3, 478, 239, 0, 4434, 4436, 3, 626, 313, 0, 4435, 4434, 1, 0, 0, 0, 4435, 4436, 1, 0, 0, 0, 4436, 625, 1, 0, 0, 0, 4437, 4438, 5, 237, 0, 0, 4438, 4439, 5, 399, 0, 0, 4439, 4444, 3, 628, 314, 0, 4440, 4441, 5, 397, 0, 0, 4441, 4443, 3, 628, 314, 0, 4442, 4440, 1, 0, 0, 0, 4443, 4446, 1, 0, 0, 0, 4444, 4442, 1, 0, 0, 0, 4444, 4445, 1, 0, 0, 0, 4445, 4447, 1, 0, 0, 0, 4446, 4444, 1, 0, 0, 0, 4447, 4448, 5, 400, 0, 0, 4448, 627, 1, 0, 0, 0, 4449, 4452, 3, 638, 319, 0, 4450, 4451, 5, 405, 0, 0, 4451, 4453, 3, 572, 286, 0, 4452, 4450, 1, 0, 0, 0, 4452, 4453, 1, 0, 0, 0, 4453, 629, 1, 0, 0, 0, 4454, 4455, 5, 399, 0, 0, 4455, 4460, 3, 632, 316, 0, 4456, 4457, 5, 397, 0, 0, 4457, 4459, 3, 632, 316, 0, 4458, 4456, 1, 0, 0, 0, 4459, 4462, 1, 0, 0, 0, 4460, 4458, 1, 0, 0, 0, 4460, 4461, 1, 0, 0, 0, 4461, 4463, 1, 0, 0, 0, 4462, 4460, 1, 0, 0, 0, 4463, 4464, 5, 400, 0, 0, 4464, 631, 1, 0, 0, 0, 4465, 4468, 3, 638, 319, 0, 4466, 4469, 5, 184, 0, 0, 4467, 4469, 3, 634, 317, 0, 4468, 4466, 1, 0, 0, 0, 4468, 4467, 1, 0, 0, 0, 4469, 4470, 1, 0, 0, 0, 4470, 4471, 3, 572, 286, 0, 4471, 633, 1, 0, 0, 0, 4472, 4473, 7, 44, 0, 0, 4473, 635, 1, 0, 0, 0, 4474, 4475, 7, 45, 0, 0, 4475, 637, 1, 0, 0, 0, 4476, 4479, 5, 432, 0, 0, 4477, 4479, 3, 644, 322, 0, 4478, 4476, 1, 0, 0, 0, 4478, 4477, 1, 0, 0, 0, 4479, 639, 1, 0, 0, 0, 4480, 4483, 3, 638, 319, 0, 4481, 4482, 5, 395, 0, 0, 4482, 4484, 3, 638, 319, 0, 4483, 4481, 1, 0, 0, 0, 4483, 4484, 1, 0, 0, 0, 4484, 641, 1, 0, 0, 0, 4485, 4486, 3, 638, 319, 0, 4486, 643, 1, 0, 0, 0, 4487, 4488, 7, 46, 0, 0, 4488, 645, 1, 0, 0, 0, 4489, 4490, 7, 47, 0, 0, 4490, 647, 1, 0, 0, 0, 4491, 4543, 3, 638, 319, 0, 4492, 4543, 5, 299, 0, 0, 4493, 4543, 5, 171, 0, 0, 4494, 4543, 5, 237, 0, 0, 4495, 4543, 5, 198, 0, 0, 4496, 4543, 5, 268, 0, 0, 4497, 4543, 5, 369, 0, 0, 4498, 4543, 5, 241, 0, 0, 4499, 4543, 5, 165, 0, 0, 4500, 4543, 5, 292, 0, 0, 4501, 4543, 5, 356, 0, 0, 4502, 4543, 5, 144, 0, 0, 4503, 4543, 5, 203, 0, 0, 4504, 4543, 5, 219, 0, 0, 4505, 4543, 5, 126, 0, 0, 4506, 4543, 5, 188, 0, 0, 4507, 4543, 5, 101, 0, 0, 4508, 4543, 5, 329, 0, 0, 4509, 4543, 5, 224, 0, 0, 4510, 4543, 5, 291, 0, 0, 4511, 4543, 5, 145, 0, 0, 4512, 4543, 5, 304, 0, 0, 4513, 4543, 5, 135, 0, 0, 4514, 4543, 5, 318, 0, 0, 4515, 4543, 5, 161, 0, 0, 4516, 4543, 5, 54, 0, 0, 4517, 4543, 5, 166, 0, 0, 4518, 4543, 5, 358, 0, 0, 4519, 4543, 5, 45, 0, 0, 4520, 4543, 5, 347, 0, 0, 4521, 4543, 5, 96, 0, 0, 4522, 4543, 5, 154, 0, 0, 4523, 4543, 5, 269, 0, 0, 4524, 4543, 5, 337, 0, 0, 4525, 4543, 5, 225, 0, 0, 4526, 4543, 5, 108, 0, 0, 4527, 4543, 5, 141, 0, 0, 4528, 4543, 5, 365, 0, 0, 4529, 4543, 5, 21, 0, 0, 4530, 4543, 5, 78, 0, 0, 4531, 4543, 5, 374, 0, 0, 4532, 4543, 5, 336, 0, 0, 4533, 4543, 5, 167, 0, 0, 4534, 4543, 5, 134, 0, 0, 4535, 4543, 5, 216, 0, 0, 4536, 4543, 5, 27, 0, 0, 4537, 4543, 5, 370, 0, 0, 4538, 4543, 5, 263, 0, 0, 4539, 4543, 5, 25, 0, 0, 4540, 4543, 5, 62, 0, 0, 4541, 4543, 5, 17, 0, 0, 4542, 4491, 1, 0, 0, 0, 4542, 4492, 1, 0, 0, 0, 4542, 4493, 1, 0, 0, 0, 4542, 4494, 1, 0, 0, 0, 4542, 4495, 1, 0, 0, 0, 4542, 4496, 1, 0, 0, 0, 4542, 4497, 1, 0, 0, 0, 4542, 4498, 1, 0, 0, 0, 4542, 4499, 1, 0, 0, 0, 4542, 4500, 1, 0, 0, 0, 4542, 4501, 1, 0, 0, 0, 4542, 4502, 1, 0, 0, 0, 4542, 4503, 1, 0, 0, 0, 4542, 4504, 1, 0, 0, 0, 4542, 4505, 1, 0, 0, 0, 4542, 4506, 1, 0, 0, 0, 4542, 4507, 1, 0, 0, 0, 4542, 4508, 1, 0, 0, 0, 4542, 4509, 1, 0, 0, 0, 4542, 4510, 1, 0, 0, 0, 4542, 4511, 1, 0, 0, 0, 4542, 4512, 1, 0, 0, 0, 4542, 4513, 1, 0, 0, 0, 4542, 4514, 1, 0, 0, 0, 4542, 4515, 1, 0, 0, 0, 4542, 4516, 1, 0, 0, 0, 4542, 4517, 1, 0, 0, 0, 4542, 4518, 1, 0, 0, 0, 4542, 4519, 1, 0, 0, 0, 4542, 4520, 1, 0, 0, 0, 4542, 4521, 1, 0, 0, 0, 4542, 4522, 1, 0, 0, 0, 4542, 4523, 1, 0, 0, 0, 4542, 4524, 1, 0, 0, 0, 4542, 4525, 1, 0, 0, 0, 4542, 4526, 1, 0, 0, 0, 4542, 4527, 1, 0, 0, 0, 4542, 4528, 1, 0, 0, 0, 4542, 4529, 1, 0, 0, 0, 4542, 4530, 1, 0, 0, 0, 4542, 4531, 1, 0, 0, 0, 4542, 4532, 1, 0, 0, 0, 4542, 4533, 1, 0, 0, 0, 4542, 4534, 1, 0, 0, 0, 4542, 4535, 1, 0, 0, 0, 4542, 4536, 1, 0, 0, 0, 4542, 4537, 1, 0, 0, 0, 4542, 4538, 1, 0, 0, 0, 4542, 4539, 1, 0, 0, 0, 4542, 4540, 1, 0, 0, 0, 4542, 4541, 1, 0, 0, 0, 4543, 649, 1, 0, 0, 0, 4544, 4545, 5, 58, 0, 0, 4545, 4546, 5, 280, 0, 0, 4546, 4548, 5, 243, 0, 0, 4547, 4549, 3, 32, 16, 0, 4548, 4547, 1, 0, 0, 0, 4548, 4549, 1, 0, 0, 0, 4549, 4559, 1, 0, 0, 0, 4550, 4551, 3, 638, 319, 0, 4551, 4552, 5, 184, 0, 0, 4552, 4553, 3, 638, 319, 0, 4553, 4560, 1, 0, 0, 0, 4554, 4557, 3, 638, 319, 0, 4555, 4556, 5, 387, 0, 0, 4556, 4558, 3, 656, 328, 0, 4557, 4555, 1, 0, 0, 0, 4557, 4558, 1, 0, 0, 0, 4558, 4560, 1, 0, 0, 0, 4559, 4550, 1, 0, 0, 0, 4559, 4554, 1, 0, 0, 0, 4560, 4710, 1, 0, 0, 0, 4561, 4562, 5, 9, 0, 0, 4562, 4563, 5, 280, 0, 0, 4563, 4564, 5, 243, 0, 0, 4564, 4589, 3, 638, 319, 0, 4565, 4590, 5, 373, 0, 0, 4566, 4590, 3, 664, 332, 0, 4567, 4568, 5, 304, 0, 0, 4568, 4590, 3, 656, 328, 0, 4569, 4570, 5, 363, 0, 0, 4570, 4575, 3, 658, 329, 0, 4571, 4572, 5, 397, 0, 0, 4572, 4574, 3, 658, 329, 0, 4573, 4571, 1, 0, 0, 0, 4574, 4577, 1, 0, 0, 0, 4575, 4573, 1, 0, 0, 0, 4575, 4576, 1, 0, 0, 0, 4576, 4590, 1, 0, 0, 0, 4577, 4575, 1, 0, 0, 0, 4578, 4579, 5, 274, 0, 0, 4579, 4580, 5, 341, 0, 0, 4580, 4590, 3, 638, 319, 0, 4581, 4583, 3, 660, 330, 0, 4582, 4584, 3, 662, 331, 0, 4583, 4582, 1, 0, 0, 0, 4583, 4584, 1, 0, 0, 0, 4584, 4590, 1, 0, 0, 0, 4585, 4587, 3, 662, 331, 0, 4586, 4588, 3, 660, 330, 0, 4587, 4586, 1, 0, 0, 0, 4587, 4588, 1, 0, 0, 0, 4588, 4590, 1, 0, 0, 0, 4589, 4565, 1, 0, 0, 0, 4589, 4566, 1, 0, 0, 0, 4589, 4567, 1, 0, 0, 0, 4589, 4569, 1, 0, 0, 0, 4589, 4578, 1, 0, 0, 0, 4589, 4581, 1, 0, 0, 0, 4589, 4585, 1, 0, 0, 0, 4590, 4710, 1, 0, 0, 0, 4591, 4592, 5, 101, 0, 0, 4592, 4593, 5, 280, 0, 0, 4593, 4595, 5, 243, 0, 0, 4594, 4596, 3, 30, 15, 0, 4595, 4594, 1, 0, 0, 0, 4595, 4596, 1, 0, 0, 0, 4596, 4597, 1, 0, 0, 0, 4597, 4710, 3, 638, 319, 0, 4598, 4601, 3, 662, 331, 0, 4599, 4601, 3, 664, 332, 0, 4600, 4598, 1, 0, 0, 0, 4600, 4599, 1, 0, 0, 0, 4601, 4602, 1, 0, 0, 0, 4602, 4603, 5, 390, 0, 0, 4603, 4604, 5, 197, 0, 0, 4604, 4710, 1, 0, 0, 0, 4605, 4617, 5, 278, 0, 0, 4606, 4607, 5, 3, 0, 0, 4607, 4608, 5, 280, 0, 0, 4608, 4609, 5, 243, 0, 0, 4609, 4610, 5, 387, 0, 0, 4610, 4618, 3, 638, 319, 0, 4611, 4612, 5, 280, 0, 0, 4612, 4613, 5, 243, 0, 0, 4613, 4614, 3, 638, 319, 0, 4614, 4615, 5, 387, 0, 0, 4615, 4616, 3, 638, 319, 0, 4616, 4618, 1, 0, 0, 0, 4617, 4606, 1, 0, 0, 0, 4617, 4611, 1, 0, 0, 0, 4618, 4710, 1, 0, 0, 0, 4619, 4620, 5, 58, 0, 0, 4620, 4621, 5, 348, 0, 0, 4621, 4622, 3, 638, 319, 0, 4622, 4623, 5, 395, 0, 0, 4623, 4624, 3, 638, 319, 0, 4624, 4625, 5, 383, 0, 0, 4625, 4626, 3, 684, 342, 0, 4626, 4627, 5, 99, 0, 0, 4627, 4628, 3, 686, 343, 0, 4628, 4710, 1, 0, 0, 0, 4629, 4630, 5, 9, 0, 0, 4630, 4631, 5, 348, 0, 0, 4631, 4632, 3, 638, 319, 0, 4632, 4633, 5, 395, 0, 0, 4633, 4650, 3, 638, 319, 0, 4634, 4635, 5, 383, 0, 0, 4635, 4636, 3, 684, 342, 0, 4636, 4637, 5, 99, 0, 0, 4637, 4638, 3, 686, 343, 0, 4638, 4651, 1, 0, 0, 0, 4639, 4640, 5, 4, 0, 0, 4640, 4644, 5, 341, 0, 0, 4641, 4642, 5, 101, 0, 0, 4642, 4644, 5, 139, 0, 0, 4643, 4639, 1, 0, 0, 0, 4643, 4641, 1, 0, 0, 0, 4644, 4648, 1, 0, 0, 0, 4645, 4646, 5, 246, 0, 0, 4646, 4649, 3, 682, 341, 0, 4647, 4649, 5, 362, 0, 0, 4648, 4645, 1, 0, 0, 0, 4648, 4647, 1, 0, 0, 0, 4649, 4651, 1, 0, 0, 0, 4650, 4634, 1, 0, 0, 0, 4650, 4643, 1, 0, 0, 0, 4651, 4710, 1, 0, 0, 0, 4652, 4653, 5, 101, 0, 0, 4653, 4654, 5, 348, 0, 0, 4654, 4655, 3, 638, 319, 0, 4655, 4656, 5, 395, 0, 0, 4656, 4657, 3, 638, 319, 0, 4657, 4710, 1, 0, 0, 0, 4658, 4659, 5, 58, 0, 0, 4659, 4660, 5, 246, 0, 0, 4660, 4661, 3, 638, 319, 0, 4661, 4662, 5, 395, 0, 0, 4662, 4663, 3, 682, 341, 0, 4663, 4664, 5, 387, 0, 0, 4664, 4665, 3, 690, 345, 0, 4665, 4710, 1, 0, 0, 0, 4666, 4667, 5, 9, 0, 0, 4667, 4668, 5, 246, 0, 0, 4668, 4669, 3, 638, 319, 0, 4669, 4670, 5, 395, 0, 0, 4670, 4678, 3, 682, 341, 0, 4671, 4672, 5, 304, 0, 0, 4672, 4679, 3, 690, 345, 0, 4673, 4674, 5, 363, 0, 0, 4674, 4679, 5, 294, 0, 0, 4675, 4676, 7, 48, 0, 0, 4676, 4677, 5, 348, 0, 0, 4677, 4679, 3, 638, 319, 0, 4678, 4671, 1, 0, 0, 0, 4678, 4673, 1, 0, 0, 0, 4678, 4675, 1, 0, 0, 0, 4679, 4710, 1, 0, 0, 0, 4680, 4681, 5, 101, 0, 0, 4681, 4682, 5, 246, 0, 0, 4682, 4683, 3, 638, 319, 0, 4683, 4684, 5, 395, 0, 0, 4684, 4685, 3, 682, 341, 0, 4685, 4710, 1, 0, 0, 0, 4686, 4687, 7, 49, 0, 0, 4687, 4688, 3, 652, 326, 0, 4688, 4689, 5, 200, 0, 0, 4689, 4690, 5, 426, 0, 0, 4690, 4691, 5, 154, 0, 0, 4691, 4695, 3, 638, 319, 0, 4692, 4693, 5, 341, 0, 0, 4693, 4696, 3, 682, 341, 0, 4694, 4696, 5, 362, 0, 0, 4695, 4692, 1, 0, 0, 0, 4695, 4694, 1, 0, 0, 0, 4696, 4700, 1, 0, 0, 0, 4697, 4698, 5, 387, 0, 0, 4698, 4699, 5, 229, 0, 0, 4699, 4701, 5, 431, 0, 0, 4700, 4697, 1, 0, 0, 0, 4700, 4701, 1, 0, 0, 0, 4701, 4710, 1, 0, 0, 0, 4702, 4703, 5, 101, 0, 0, 4703, 4704, 3, 652, 326, 0, 4704, 4705, 5, 200, 0, 0, 4705, 4706, 5, 426, 0, 0, 4706, 4707, 5, 154, 0, 0, 4707, 4708, 3, 638, 319, 0, 4708, 4710, 1, 0, 0, 0, 4709, 4544, 1, 0, 0, 0, 4709, 4561, 1, 0, 0, 0, 4709, 4591, 1, 0, 0, 0, 4709, 4600, 1, 0, 0, 0, 4709, 4605, 1, 0, 0, 0, 4709, 4619, 1, 0, 0, 0, 4709, 4629, 1, 0, 0, 0, 4709, 4652, 1, 0, 0, 0, 4709, 4658, 1, 0, 0, 0, 4709, 4666, 1, 0, 0, 0, 4709, 4680, 1, 0, 0, 0, 4709, 4686, 1, 0, 0, 0, 4709, 4702, 1, 0, 0, 0, 4710, 651, 1, 0, 0, 0, 4711, 4712, 7, 50, 0, 0, 4712, 653, 1, 0, 0, 0, 4713, 4714, 5, 259, 0, 0, 4714, 4715, 5, 405, 0, 0, 4715, 4721, 5, 431, 0, 0, 4716, 4717, 5, 83, 0, 0, 4717, 4718, 5, 246, 0, 0, 4718, 4719, 5, 405, 0, 0, 4719, 4721, 3, 682, 341, 0, 4720, 4713, 1, 0, 0, 0, 4720, 4716, 1, 0, 0, 0, 4721, 655, 1, 0, 0, 0, 4722, 4727, 3, 654, 327, 0, 4723, 4724, 5, 397, 0, 0, 4724, 4726, 3, 654, 327, 0, 4725, 4723, 1, 0, 0, 0, 4726, 4729, 1, 0, 0, 0, 4727, 4725, 1, 0, 0, 0, 4727, 4728, 1, 0, 0, 0, 4728, 657, 1, 0, 0, 0, 4729, 4727, 1, 0, 0, 0, 4730, 4734, 5, 259, 0, 0, 4731, 4732, 5, 83, 0, 0, 4732, 4734, 5, 246, 0, 0, 4733, 4730, 1, 0, 0, 0, 4733, 4731, 1, 0, 0, 0, 4734, 659, 1, 0, 0, 0, 4735, 4738, 5, 2, 0, 0, 4736, 4737, 5, 387, 0, 0, 4737, 4739, 5, 278, 0, 0, 4738, 4736, 1, 0, 0, 0, 4738, 4739, 1, 0, 0, 0, 4739, 661, 1, 0, 0, 0, 4740, 4741, 7, 51, 0, 0, 4741, 663, 1, 0, 0, 0, 4742, 4743, 7, 52, 0, 0, 4743, 665, 1, 0, 0, 0, 4744, 4745, 7, 53, 0, 0, 4745, 667, 1, 0, 0, 0, 4746, 4747, 7, 54, 0, 0, 4747, 669, 1, 0, 0, 0, 4748, 4749, 7, 55, 0, 0, 4749, 671, 1, 0, 0, 0, 4750, 4751, 7, 56, 0, 0, 4751, 673, 1, 0, 0, 0, 4752, 4753, 7, 57, 0, 0, 4753, 675, 1, 0, 0, 0, 4754, 4755, 7, 58, 0, 0, 4755, 677, 1, 0, 0, 0, 4756, 4757, 7, 59, 0, 0, 4757, 679, 1, 0, 0, 0, 4758, 4759, 7, 60, 0, 0, 4759, 681, 1, 0, 0, 0, 4760, 4765, 3, 638, 319, 0, 4761, 4762, 5, 395, 0, 0, 4762, 4764, 3, 638, 319, 0, 4763, 4761, 1, 0, 0, 0, 4764, 4767, 1, 0, 0, 0, 4765, 4763, 1, 0, 0, 0, 4765, 4766, 1, 0, 0, 0, 4766, 683, 1, 0, 0, 0, 4767, 4765, 1, 0, 0, 0, 4768, 4769, 3, 638, 319, 0, 4769, 4770, 5, 411, 0, 0, 4770, 4771, 7, 27, 0, 0, 4771, 685, 1, 0, 0, 0, 4772, 4777, 5, 176, 0, 0, 4773, 4774, 5, 211, 0, 0, 4774, 4775, 5, 341, 0, 0, 4775, 4777, 3, 682, 341, 0, 4776, 4772, 1, 0, 0, 0, 4776, 4773, 1, 0, 0, 0, 4777, 687, 1, 0, 0, 0, 4778, 4779, 5, 8, 0, 0, 4779, 4780, 5, 405, 0, 0, 4780, 4791, 5, 431, 0, 0, 4781, 4782, 5, 259, 0, 0, 4782, 4783, 5, 405, 0, 0, 4783, 4791, 5, 431, 0, 0, 4784, 4785, 5, 294, 0, 0, 4785, 4786, 5, 405, 0, 0, 4786, 4791, 5, 426, 0, 0, 4787, 4788, 5, 240, 0, 0, 4788, 4789, 5, 405, 0, 0, 4789, 4791, 3, 682, 341, 0, 4790, 4778, 1, 0, 0, 0, 4790, 4781, 1, 0, 0, 0, 4790, 4784, 1, 0, 0, 0, 4790, 4787, 1, 0, 0, 0, 4791, 689, 1, 0, 0, 0, 4792, 4797, 3, 688, 344, 0, 4793, 4794, 5, 397, 0, 0, 4794, 4796, 3, 688, 344, 0, 4795, 4793, 1, 0, 0, 0, 4796, 4799, 1, 0, 0, 0, 4797, 4795, 1, 0, 0, 0, 4797, 4798, 1, 0, 0, 0, 4798, 691, 1, 0, 0, 0, 4799, 4797, 1, 0, 0, 0, 621, 695, 702, 705, 711, 717, 724, 734, 737, 741, 756, 763, 769, 774, 779, 782, 806, 813, 816, 821, 826, 832, 836, 849, 853, 857, 862, 869, 873, 878, 885, 889, 894, 942, 949, 954, 977, 981, 985, 988, 992, 997, 1003, 1007, 1013, 1015, 1026, 1030, 1037, 1045, 1048, 1053, 1057, 1060, 1070, 1078, 1082, 1085, 1089, 1093, 1096, 1101, 1107, 1112, 1117, 1121, 1132, 1134, 1138, 1148, 1152, 1158, 1161, 1168, 1173, 1181, 1186, 1190, 1198, 1203, 1209, 1215, 1218, 1221, 1224, 1233, 1241, 1246, 1254, 1261, 1264, 1267, 1269, 1280, 1282, 1285, 1288, 1291, 1294, 1297, 1299, 1311, 1317, 1325, 1327, 1337, 1370, 1375, 1379, 1383, 1390, 1397, 1403, 1407, 1410, 1417, 1440, 1445, 1449, 1457, 1466, 1473, 1479, 1486, 1489, 1495, 1502, 1510, 1519, 1528, 1535, 1555, 1562, 1564, 1571, 1581, 1589, 1593, 1597, 1610, 1619, 1635, 1639, 1644, 1649, 1652, 1655, 1658, 1661, 1664, 1669, 1678, 1682, 1689, 1692, 1695, 1698, 1710, 1716, 1742, 1750, 1754, 1757, 1760, 1763, 1766, 1769, 1772, 1775, 1784, 1794, 1797, 1817, 1823, 1829, 1832, 1834, 1841, 1848, 1861, 1866, 1875, 1883, 1891, 1904, 1917, 1933, 1937, 1952, 1958, 1961, 1964, 1967, 1970, 1974, 1989, 1992, 2003, 2017, 2051, 2059, 2064, 2072, 2077, 2082, 2089, 2097, 2105, 2113, 2118, 2128, 2132, 2140, 2149, 2152, 2156, 2163, 2169, 2173, 2179, 2183, 2195, 2204, 2215, 2219, 2226, 2238, 2248, 2251, 2258, 2264, 2268, 2271, 2274, 2280, 2284, 2288, 2293, 2297, 2301, 2305, 2313, 2317, 2321, 2325, 2329, 2337, 2341, 2345, 2353, 2358, 2363, 2367, 2371, 2378, 2387, 2395, 2407, 2425, 2428, 2434, 2460, 2463, 2469, 2477, 2485, 2498, 2505, 2508, 2511, 2514, 2517, 2520, 2523, 2526, 2529, 2532, 2535, 2540, 2543, 2546, 2549, 2552, 2555, 2558, 2561, 2564, 2567, 2570, 2572, 2578, 2582, 2585, 2588, 2591, 2594, 2597, 2604, 2608, 2611, 2614, 2617, 2620, 2623, 2630, 2633, 2641, 2645, 2652, 2654, 2657, 2662, 2665, 2669, 2674, 2680, 2688, 2696, 2706, 2709, 2713, 2717, 2722, 2729, 2733, 2735, 2739, 2746, 2751, 2764, 2772, 2791, 2801, 2814, 2824, 2828, 2832, 2838, 2845, 2852, 2861, 2868, 2888, 2891, 2905, 2920, 2924, 2944, 2956, 2962, 2965, 2968, 2974, 2980, 2987, 2995, 3001, 3005, 3010, 3013, 3017, 3024, 3029, 3034, 3037, 3039, 3047, 3055, 3059, 3063, 3067, 3084, 3101, 3108, 3117, 3122, 3125, 3128, 3132, 3147, 3161, 3164, 3175, 3179, 3182, 3185, 3189, 3194, 3197, 3200, 3203, 3206, 3209, 3215, 3218, 3221, 3224, 3227, 3230, 3233, 3236, 3239, 3242, 3246, 3248, 3254, 3259, 3262, 3265, 3268, 3271, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298, 3301, 3304, 3308, 3310, 3312, 3317, 3322, 3326, 3330, 3335, 3340, 3349, 3359, 3367, 3379, 3382, 3388, 3395, 3402, 3409, 3416, 3425, 3429, 3436, 3441, 3445, 3449, 3452, 3455, 3466, 3470, 3472, 3475, 3488, 3491, 3494, 3506, 3509, 3516, 3525, 3530, 3532, 3534, 3551, 3554, 3562, 3565, 3569, 3572, 3575, 3578, 3581, 3593, 3601, 3608, 3611, 3618, 3621, 3626, 3633, 3641, 3649, 3654, 3658, 3663, 3670, 3684, 3687, 3691, 3702, 3712, 3715, 3722, 3731, 3734, 3740, 3743, 3750, 3755, 3758, 3771, 3777, 3779, 3787, 3790, 3800, 3805, 3807, 3819, 3825, 3827, 3834, 3841, 3855, 3861, 3864, 3867, 3870, 3879, 3886, 3892, 3901, 3905, 3913, 3923, 3933, 3938, 3942, 3948, 3953, 3963, 3967, 3970, 3975, 3978, 3982, 3987, 3998, 4000, 4009, 4028, 4038, 4041, 4048, 4051, 4061, 4068, 4071, 4073, 4084, 4094, 4096, 4105, 4110, 4119, 4132, 4136, 4148, 4152, 4161, 4180, 4198, 4210, 4225, 4229, 4245, 4252, 4266, 4271, 4281, 4283, 4291, 4299, 4307, 4315, 4323, 4331, 4342, 4346, 4354, 4370, 4374, 4379, 4392, 4401, 4403, 4412, 4417, 4423, 4430, 4435, 4444, 4452, 4460, 4468, 4478, 4483, 4542, 4548, 4557, 4559, 4575, 4583, 4587, 4589, 4595, 4600, 4617, 4643, 4648, 4650, 4678, 4695, 4700, 4709, 4720, 4727, 4733, 4738, 4765, 4776, 4790, 4797] \ No newline at end of file diff --git a/src/lib/hive/HiveSqlParser.ts b/src/lib/hive/HiveSqlParser.ts index f3bb016c5..f5180526b 100644 --- a/src/lib/hive/HiveSqlParser.ts +++ b/src/lib/hive/HiveSqlParser.ts @@ -1730,11 +1730,18 @@ export class HiveSqlParser extends SQLParserBase { this.state = 806; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - while (_la === 395) { + while (_la === 395 || _la === 396) { { { this.state = 802; - this.match(HiveSqlParser.DOT); + _la = this.tokenStream.LA(1); + if(!(_la === 395 || _la === 396)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } this.state = 803; this.configPropertiesItem(); } @@ -10836,7 +10843,7 @@ export class HiveSqlParser extends SQLParserBase { this.state = 2290; localContext._colName = this.columnNameCreate(); this.state = 2291; - this.columnType(); + localContext._colType = this.columnType(); this.state = 2293; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); @@ -16816,7 +16823,7 @@ export class HiveSqlParser extends SQLParserBase { this.state = 3480; this.function_(); this.state = 3481; - this.tableAlias(); + localContext._alias = this.tableAlias(); this.state = 3491; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); @@ -16874,7 +16881,7 @@ export class HiveSqlParser extends SQLParserBase { this.state = 3498; this.function_(); this.state = 3499; - this.tableAlias(); + localContext._alias = this.tableAlias(); this.state = 3509; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); @@ -16928,7 +16935,7 @@ export class HiveSqlParser extends SQLParserBase { } this.state = 3518; - this.tableAlias(); + localContext._alias = this.tableAlias(); this.state = 3530; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 458, this.context) ) { @@ -25782,53 +25789,53 @@ export class HiveSqlParser extends SQLParserBase { 594,596,598,600,602,604,606,608,610,612,614,616,618,620,622,624, 626,628,630,632,634,636,638,640,642,644,646,648,650,652,654,656, 658,660,662,664,666,668,670,672,674,676,678,680,682,684,686,688, - 690,0,60,2,0,57,57,172,172,4,0,91,91,121,121,226,226,325,325,2,0, - 50,50,346,346,2,0,34,34,282,282,1,0,89,90,2,0,139,139,154,154,2, - 0,67,67,295,295,2,0,68,68,296,296,1,0,155,156,2,0,114,114,307,307, - 11,0,7,7,9,9,58,58,86,86,101,101,155,155,161,161,190,190,299,299, - 309,309,365,365,3,0,4,4,101,101,326,326,3,0,15,15,128,128,170,170, - 1,0,141,142,2,0,30,30,351,351,2,0,217,217,373,373,2,0,214,214,272, - 272,2,0,18,18,89,89,2,0,130,130,177,177,2,0,39,39,376,376,4,0,112, - 112,164,164,205,205,356,356,2,0,7,7,96,96,2,0,125,125,350,350,2, - 0,225,225,391,391,2,0,42,42,315,315,2,0,189,189,196,196,2,0,426, - 426,431,431,2,0,140,140,285,285,3,0,12,12,231,231,300,300,2,0,241, - 241,292,292,2,0,198,198,268,268,2,0,260,260,292,292,2,0,354,354, - 431,431,2,0,133,133,247,247,2,0,152,152,281,281,3,0,413,414,418, - 418,420,420,2,0,412,412,415,417,1,0,413,414,4,0,184,184,270,270, - 286,286,408,411,2,0,7,7,13,13,3,0,7,7,13,13,313,313,3,0,184,184, - 270,270,286,286,4,0,125,125,219,219,350,350,360,360,2,0,405,405, - 407,411,24,0,11,11,16,16,25,28,35,35,100,100,131,132,151,151,154, - 154,162,163,184,184,198,198,216,216,228,228,264,264,270,270,286, - 286,311,311,323,324,340,340,357,357,383,383,405,417,419,421,423, - 423,85,0,1,6,8,8,10,10,15,15,18,20,22,24,30,31,33,34,37,38,40,44, - 46,47,49,50,52,53,56,57,59,59,66,66,68,68,72,77,79,79,83,85,87,89, - 91,95,97,99,103,104,106,107,109,111,114,116,118,121,127,130,137, - 138,142,142,147,150,152,152,155,156,158,160,168,170,172,177,182, - 183,185,187,189,193,195,197,199,202,204,204,206,209,211,212,214, - 215,217,218,220,220,222,223,226,227,232,233,235,236,238,240,243, - 246,252,252,254,255,257,259,261,262,265,267,271,282,284,284,287, - 288,293,298,300,303,305,310,312,312,314,317,319,325,327,328,330, - 330,332,334,339,340,342,342,344,346,349,349,352,353,355,355,357, - 357,360,364,366,368,371,373,375,375,377,382,385,385,388,394,13,0, - 16,16,26,28,63,64,71,71,100,100,131,131,145,145,151,151,162,163, - 198,198,264,264,311,311,337,337,2,0,4,4,101,101,2,0,9,9,58,58,3, - 0,14,14,144,144,369,369,1,0,106,107,1,0,94,95,1,0,392,393,1,0,208, - 209,1,0,381,382,1,0,73,74,1,0,148,149,1,0,206,207,1,0,297,298,1, - 0,80,82,5392,0,695,1,0,0,0,2,702,1,0,0,0,4,707,1,0,0,0,6,741,1,0, - 0,0,8,743,1,0,0,0,10,816,1,0,0,0,12,818,1,0,0,0,14,834,1,0,0,0,16, - 843,1,0,0,0,18,851,1,0,0,0,20,864,1,0,0,0,22,875,1,0,0,0,24,880, - 1,0,0,0,26,891,1,0,0,0,28,954,1,0,0,0,30,956,1,0,0,0,32,959,1,0, - 0,0,34,963,1,0,0,0,36,965,1,0,0,0,38,968,1,0,0,0,40,971,1,0,0,0, - 42,1015,1,0,0,0,44,1017,1,0,0,0,46,1020,1,0,0,0,48,1023,1,0,0,0, - 50,1032,1,0,0,0,52,1035,1,0,0,0,54,1050,1,0,0,0,56,1062,1,0,0,0, - 58,1067,1,0,0,0,60,1087,1,0,0,0,62,1091,1,0,0,0,64,1098,1,0,0,0, - 66,1123,1,0,0,0,68,1140,1,0,0,0,70,1142,1,0,0,0,72,1327,1,0,0,0, - 74,1337,1,0,0,0,76,1339,1,0,0,0,78,1344,1,0,0,0,80,1349,1,0,0,0, - 82,1351,1,0,0,0,84,1355,1,0,0,0,86,1359,1,0,0,0,88,1363,1,0,0,0, - 90,1367,1,0,0,0,92,1377,1,0,0,0,94,1388,1,0,0,0,96,1405,1,0,0,0, - 98,1423,1,0,0,0,100,1428,1,0,0,0,102,1431,1,0,0,0,104,1435,1,0,0, - 0,106,1442,1,0,0,0,108,1451,1,0,0,0,110,1457,1,0,0,0,112,1459,1, - 0,0,0,114,1473,1,0,0,0,116,1495,1,0,0,0,118,1497,1,0,0,0,120,1505, + 690,0,61,2,0,57,57,172,172,4,0,91,91,121,121,226,226,325,325,1,0, + 395,396,2,0,50,50,346,346,2,0,34,34,282,282,1,0,89,90,2,0,139,139, + 154,154,2,0,67,67,295,295,2,0,68,68,296,296,1,0,155,156,2,0,114, + 114,307,307,11,0,7,7,9,9,58,58,86,86,101,101,155,155,161,161,190, + 190,299,299,309,309,365,365,3,0,4,4,101,101,326,326,3,0,15,15,128, + 128,170,170,1,0,141,142,2,0,30,30,351,351,2,0,217,217,373,373,2, + 0,214,214,272,272,2,0,18,18,89,89,2,0,130,130,177,177,2,0,39,39, + 376,376,4,0,112,112,164,164,205,205,356,356,2,0,7,7,96,96,2,0,125, + 125,350,350,2,0,225,225,391,391,2,0,42,42,315,315,2,0,189,189,196, + 196,2,0,426,426,431,431,2,0,140,140,285,285,3,0,12,12,231,231,300, + 300,2,0,241,241,292,292,2,0,198,198,268,268,2,0,260,260,292,292, + 2,0,354,354,431,431,2,0,133,133,247,247,2,0,152,152,281,281,3,0, + 413,414,418,418,420,420,2,0,412,412,415,417,1,0,413,414,4,0,184, + 184,270,270,286,286,408,411,2,0,7,7,13,13,3,0,7,7,13,13,313,313, + 3,0,184,184,270,270,286,286,4,0,125,125,219,219,350,350,360,360, + 2,0,405,405,407,411,24,0,11,11,16,16,25,28,35,35,100,100,131,132, + 151,151,154,154,162,163,184,184,198,198,216,216,228,228,264,264, + 270,270,286,286,311,311,323,324,340,340,357,357,383,383,405,417, + 419,421,423,423,85,0,1,6,8,8,10,10,15,15,18,20,22,24,30,31,33,34, + 37,38,40,44,46,47,49,50,52,53,56,57,59,59,66,66,68,68,72,77,79,79, + 83,85,87,89,91,95,97,99,103,104,106,107,109,111,114,116,118,121, + 127,130,137,138,142,142,147,150,152,152,155,156,158,160,168,170, + 172,177,182,183,185,187,189,193,195,197,199,202,204,204,206,209, + 211,212,214,215,217,218,220,220,222,223,226,227,232,233,235,236, + 238,240,243,246,252,252,254,255,257,259,261,262,265,267,271,282, + 284,284,287,288,293,298,300,303,305,310,312,312,314,317,319,325, + 327,328,330,330,332,334,339,340,342,342,344,346,349,349,352,353, + 355,355,357,357,360,364,366,368,371,373,375,375,377,382,385,385, + 388,394,13,0,16,16,26,28,63,64,71,71,100,100,131,131,145,145,151, + 151,162,163,198,198,264,264,311,311,337,337,2,0,4,4,101,101,2,0, + 9,9,58,58,3,0,14,14,144,144,369,369,1,0,106,107,1,0,94,95,1,0,392, + 393,1,0,208,209,1,0,381,382,1,0,73,74,1,0,148,149,1,0,206,207,1, + 0,297,298,1,0,80,82,5392,0,695,1,0,0,0,2,702,1,0,0,0,4,707,1,0,0, + 0,6,741,1,0,0,0,8,743,1,0,0,0,10,816,1,0,0,0,12,818,1,0,0,0,14,834, + 1,0,0,0,16,843,1,0,0,0,18,851,1,0,0,0,20,864,1,0,0,0,22,875,1,0, + 0,0,24,880,1,0,0,0,26,891,1,0,0,0,28,954,1,0,0,0,30,956,1,0,0,0, + 32,959,1,0,0,0,34,963,1,0,0,0,36,965,1,0,0,0,38,968,1,0,0,0,40,971, + 1,0,0,0,42,1015,1,0,0,0,44,1017,1,0,0,0,46,1020,1,0,0,0,48,1023, + 1,0,0,0,50,1032,1,0,0,0,52,1035,1,0,0,0,54,1050,1,0,0,0,56,1062, + 1,0,0,0,58,1067,1,0,0,0,60,1087,1,0,0,0,62,1091,1,0,0,0,64,1098, + 1,0,0,0,66,1123,1,0,0,0,68,1140,1,0,0,0,70,1142,1,0,0,0,72,1327, + 1,0,0,0,74,1337,1,0,0,0,76,1339,1,0,0,0,78,1344,1,0,0,0,80,1349, + 1,0,0,0,82,1351,1,0,0,0,84,1355,1,0,0,0,86,1359,1,0,0,0,88,1363, + 1,0,0,0,90,1367,1,0,0,0,92,1377,1,0,0,0,94,1388,1,0,0,0,96,1405, + 1,0,0,0,98,1423,1,0,0,0,100,1428,1,0,0,0,102,1431,1,0,0,0,104,1435, + 1,0,0,0,106,1442,1,0,0,0,108,1451,1,0,0,0,110,1457,1,0,0,0,112,1459, + 1,0,0,0,114,1473,1,0,0,0,116,1495,1,0,0,0,118,1497,1,0,0,0,120,1505, 1,0,0,0,122,1512,1,0,0,0,124,1514,1,0,0,0,126,1528,1,0,0,0,128,1535, 1,0,0,0,130,1537,1,0,0,0,132,1541,1,0,0,0,134,1545,1,0,0,0,136,1549, 1,0,0,0,138,1553,1,0,0,0,140,1566,1,0,0,0,142,1574,1,0,0,0,144,1577, @@ -25936,26 +25943,26 @@ export class HiveSqlParser extends SQLParserBase { 0,791,792,3,638,319,0,792,793,5,139,0,0,793,794,3,360,180,0,794, 817,1,0,0,0,795,796,5,115,0,0,796,797,3,638,319,0,797,798,5,370, 0,0,798,799,3,296,148,0,799,817,1,0,0,0,800,801,5,304,0,0,801,806, - 3,648,324,0,802,803,5,395,0,0,803,805,3,648,324,0,804,802,1,0,0, - 0,805,808,1,0,0,0,806,804,1,0,0,0,806,807,1,0,0,0,807,809,1,0,0, - 0,808,806,1,0,0,0,809,813,5,405,0,0,810,812,9,0,0,0,811,810,1,0, - 0,0,812,815,1,0,0,0,813,814,1,0,0,0,813,811,1,0,0,0,814,817,1,0, - 0,0,815,813,1,0,0,0,816,745,1,0,0,0,816,746,1,0,0,0,816,747,1,0, - 0,0,816,748,1,0,0,0,816,749,1,0,0,0,816,750,1,0,0,0,816,751,1,0, - 0,0,816,758,1,0,0,0,816,759,1,0,0,0,816,765,1,0,0,0,816,771,1,0, - 0,0,816,772,1,0,0,0,816,790,1,0,0,0,816,795,1,0,0,0,816,800,1,0, - 0,0,817,11,1,0,0,0,818,819,5,187,0,0,819,821,5,66,0,0,820,822,5, - 188,0,0,821,820,1,0,0,0,821,822,1,0,0,0,822,823,1,0,0,0,823,824, - 5,158,0,0,824,826,5,426,0,0,825,827,5,235,0,0,826,825,1,0,0,0,826, - 827,1,0,0,0,827,828,1,0,0,0,828,829,5,166,0,0,829,830,5,329,0,0, - 830,832,3,624,312,0,831,833,3,56,28,0,832,831,1,0,0,0,832,833,1, - 0,0,0,833,13,1,0,0,0,834,836,5,134,0,0,835,837,5,204,0,0,836,835, - 1,0,0,0,836,837,1,0,0,0,837,838,1,0,0,0,838,839,5,279,0,0,839,840, - 5,399,0,0,840,841,5,426,0,0,841,842,5,400,0,0,842,15,1,0,0,0,843, - 844,5,120,0,0,844,845,5,329,0,0,845,846,3,624,312,0,846,847,5,341, - 0,0,847,849,5,426,0,0,848,850,3,14,7,0,849,848,1,0,0,0,849,850,1, - 0,0,0,850,17,1,0,0,0,851,857,5,153,0,0,852,854,5,123,0,0,853,852, - 1,0,0,0,853,854,1,0,0,0,854,855,1,0,0,0,855,856,5,329,0,0,856,858, + 3,648,324,0,802,803,7,2,0,0,803,805,3,648,324,0,804,802,1,0,0,0, + 805,808,1,0,0,0,806,804,1,0,0,0,806,807,1,0,0,0,807,809,1,0,0,0, + 808,806,1,0,0,0,809,813,5,405,0,0,810,812,9,0,0,0,811,810,1,0,0, + 0,812,815,1,0,0,0,813,814,1,0,0,0,813,811,1,0,0,0,814,817,1,0,0, + 0,815,813,1,0,0,0,816,745,1,0,0,0,816,746,1,0,0,0,816,747,1,0,0, + 0,816,748,1,0,0,0,816,749,1,0,0,0,816,750,1,0,0,0,816,751,1,0,0, + 0,816,758,1,0,0,0,816,759,1,0,0,0,816,765,1,0,0,0,816,771,1,0,0, + 0,816,772,1,0,0,0,816,790,1,0,0,0,816,795,1,0,0,0,816,800,1,0,0, + 0,817,11,1,0,0,0,818,819,5,187,0,0,819,821,5,66,0,0,820,822,5,188, + 0,0,821,820,1,0,0,0,821,822,1,0,0,0,822,823,1,0,0,0,823,824,5,158, + 0,0,824,826,5,426,0,0,825,827,5,235,0,0,826,825,1,0,0,0,826,827, + 1,0,0,0,827,828,1,0,0,0,828,829,5,166,0,0,829,830,5,329,0,0,830, + 832,3,624,312,0,831,833,3,56,28,0,832,831,1,0,0,0,832,833,1,0,0, + 0,833,13,1,0,0,0,834,836,5,134,0,0,835,837,5,204,0,0,836,835,1,0, + 0,0,836,837,1,0,0,0,837,838,1,0,0,0,838,839,5,279,0,0,839,840,5, + 399,0,0,840,841,5,426,0,0,841,842,5,400,0,0,842,15,1,0,0,0,843,844, + 5,120,0,0,844,845,5,329,0,0,845,846,3,624,312,0,846,847,5,341,0, + 0,847,849,5,426,0,0,848,850,3,14,7,0,849,848,1,0,0,0,849,850,1,0, + 0,0,850,17,1,0,0,0,851,857,5,153,0,0,852,854,5,123,0,0,853,852,1, + 0,0,0,853,854,1,0,0,0,854,855,1,0,0,0,855,856,5,329,0,0,856,858, 3,624,312,0,857,853,1,0,0,0,857,858,1,0,0,0,858,859,1,0,0,0,859, 860,5,139,0,0,860,862,5,426,0,0,861,863,3,424,212,0,862,861,1,0, 0,0,862,863,1,0,0,0,863,19,1,0,0,0,864,865,5,277,0,0,865,866,5,103, @@ -25980,7 +25987,7 @@ export class HiveSqlParser extends SQLParserBase { 3,88,44,0,927,955,3,90,45,0,928,955,3,92,46,0,929,955,3,106,53,0, 930,955,3,98,49,0,931,955,3,108,54,0,932,955,3,100,50,0,933,955, 3,94,47,0,934,955,3,96,48,0,935,955,3,104,52,0,936,955,3,102,51, - 0,937,938,5,1,0,0,938,940,7,2,0,0,939,941,5,431,0,0,940,939,1,0, + 0,937,938,5,1,0,0,938,940,7,3,0,0,939,941,5,431,0,0,940,939,1,0, 0,0,941,942,1,0,0,0,942,940,1,0,0,0,942,943,1,0,0,0,943,955,1,0, 0,0,944,945,5,176,0,0,945,947,5,258,0,0,946,948,5,426,0,0,947,946, 1,0,0,0,948,949,1,0,0,0,949,947,1,0,0,0,949,950,1,0,0,0,950,955, @@ -25998,7 +26005,7 @@ export class HiveSqlParser extends SQLParserBase { 0,954,936,1,0,0,0,954,937,1,0,0,0,954,944,1,0,0,0,954,951,1,0,0, 0,954,952,1,0,0,0,954,953,1,0,0,0,955,29,1,0,0,0,956,957,5,151,0, 0,957,958,5,117,0,0,958,31,1,0,0,0,959,960,5,151,0,0,960,961,5,216, - 0,0,961,962,5,117,0,0,962,33,1,0,0,0,963,964,7,3,0,0,964,35,1,0, + 0,0,961,962,5,117,0,0,962,33,1,0,0,0,963,964,7,4,0,0,964,35,1,0, 0,0,965,966,3,662,331,0,966,967,5,284,0,0,967,37,1,0,0,0,968,969, 3,664,332,0,969,970,5,284,0,0,970,39,1,0,0,0,971,972,5,321,0,0,972, 973,5,17,0,0,973,974,5,92,0,0,974,41,1,0,0,0,975,977,5,58,0,0,976, @@ -26044,7 +26051,7 @@ export class HiveSqlParser extends SQLParserBase { 0,0,1089,1090,1,0,0,0,1090,61,1,0,0,0,1091,1093,3,476,238,0,1092, 1094,3,626,313,0,1093,1092,1,0,0,0,1093,1094,1,0,0,0,1094,1096,1, 0,0,0,1095,1097,3,260,130,0,1096,1095,1,0,0,0,1096,1097,1,0,0,0, - 1097,63,1,0,0,0,1098,1121,7,4,0,0,1099,1101,3,70,35,0,1100,1102, + 1097,63,1,0,0,0,1098,1121,7,5,0,0,1099,1101,3,70,35,0,1100,1102, 5,122,0,0,1101,1100,1,0,0,0,1101,1102,1,0,0,0,1102,1103,1,0,0,0, 1103,1104,3,472,236,0,1104,1122,1,0,0,0,1105,1107,5,69,0,0,1106, 1108,5,122,0,0,1107,1106,1,0,0,0,1107,1108,1,0,0,0,1108,1109,1,0, @@ -26060,8 +26067,8 @@ export class HiveSqlParser extends SQLParserBase { 1133,1,0,0,0,1133,1135,1,0,0,0,1134,1128,1,0,0,0,1134,1129,1,0,0, 0,1134,1135,1,0,0,0,1135,1139,1,0,0,0,1136,1137,5,33,0,0,1137,1139, 5,204,0,0,1138,1126,1,0,0,0,1138,1136,1,0,0,0,1139,67,1,0,0,0,1140, - 1141,7,5,0,0,1141,69,1,0,0,0,1142,1143,7,6,0,0,1143,71,1,0,0,0,1144, - 1145,5,308,0,0,1145,1148,7,7,0,0,1146,1147,5,184,0,0,1147,1149,3, + 1141,7,6,0,0,1141,69,1,0,0,0,1142,1143,7,7,0,0,1143,71,1,0,0,0,1144, + 1145,5,308,0,0,1145,1148,7,8,0,0,1146,1147,5,184,0,0,1147,1149,3, 194,97,0,1148,1146,1,0,0,0,1148,1149,1,0,0,0,1149,1328,1,0,0,0,1150, 1152,5,308,0,0,1151,1153,5,122,0,0,1152,1151,1,0,0,0,1152,1153,1, 0,0,0,1153,1154,1,0,0,0,1154,1158,5,330,0,0,1155,1156,3,68,34,0, @@ -26123,7 +26130,7 @@ export class HiveSqlParser extends SQLParserBase { 1310,1312,5,244,0,0,1311,1308,1,0,0,0,1311,1310,1,0,0,0,1312,1328, 1,0,0,0,1313,1314,5,308,0,0,1314,1328,5,70,0,0,1315,1317,5,308,0, 0,1316,1318,5,138,0,0,1317,1316,1,0,0,0,1317,1318,1,0,0,0,1318,1319, - 1,0,0,0,1319,1320,7,8,0,0,1320,1321,5,224,0,0,1321,1325,3,478,239, + 1,0,0,0,1319,1320,7,9,0,0,1320,1321,5,224,0,0,1321,1325,3,478,239, 0,1322,1323,3,68,34,0,1323,1324,3,472,236,0,1324,1326,1,0,0,0,1325, 1322,1,0,0,0,1325,1326,1,0,0,0,1326,1328,1,0,0,0,1327,1144,1,0,0, 0,1327,1150,1,0,0,0,1327,1163,1,0,0,0,1327,1175,1,0,0,0,1327,1188, @@ -26137,7 +26144,7 @@ export class HiveSqlParser extends SQLParserBase { 75,1,0,0,0,1339,1340,5,190,0,0,1340,1341,5,329,0,0,1341,1342,3,624, 312,0,1342,1343,3,80,40,0,1343,77,1,0,0,0,1344,1345,5,190,0,0,1345, 1346,3,70,35,0,1346,1347,3,472,236,0,1347,1348,3,80,40,0,1348,79, - 1,0,0,0,1349,1350,7,9,0,0,1350,81,1,0,0,0,1351,1352,5,361,0,0,1352, + 1,0,0,0,1349,1350,7,10,0,0,1350,81,1,0,0,0,1351,1352,5,361,0,0,1352, 1353,5,329,0,0,1353,1354,3,624,312,0,1354,83,1,0,0,0,1355,1356,5, 361,0,0,1356,1357,3,70,35,0,1357,1358,3,472,236,0,1358,85,1,0,0, 0,1359,1360,5,58,0,0,1360,1361,5,287,0,0,1361,1362,3,638,319,0,1362, @@ -26192,7 +26199,7 @@ export class HiveSqlParser extends SQLParserBase { 1,0,0,0,1502,1500,1,0,0,0,1502,1503,1,0,0,0,1503,119,1,0,0,0,1504, 1502,1,0,0,0,1505,1510,3,122,61,0,1506,1507,5,399,0,0,1507,1508, 3,254,127,0,1508,1509,5,400,0,0,1509,1511,1,0,0,0,1510,1506,1,0, - 0,0,1510,1511,1,0,0,0,1511,121,1,0,0,0,1512,1513,7,10,0,0,1513,123, + 0,0,1510,1511,1,0,0,0,1511,121,1,0,0,0,1512,1513,7,11,0,0,1513,123, 1,0,0,0,1514,1519,3,126,63,0,1515,1516,5,397,0,0,1516,1518,3,126, 63,0,1517,1515,1,0,0,0,1518,1521,1,0,0,0,1519,1517,1,0,0,0,1519, 1520,1,0,0,0,1520,125,1,0,0,0,1521,1519,1,0,0,0,1522,1523,5,369, @@ -26208,13 +26215,13 @@ export class HiveSqlParser extends SQLParserBase { 1550,5,387,0,0,1550,1551,5,5,0,0,1551,1552,5,227,0,0,1552,137,1, 0,0,0,1553,1555,5,212,0,0,1554,1556,5,276,0,0,1555,1554,1,0,0,0, 1555,1556,1,0,0,0,1556,1557,1,0,0,0,1557,1558,5,329,0,0,1558,1564, - 3,478,239,0,1559,1560,7,11,0,0,1560,1562,5,239,0,0,1561,1563,3,630, + 3,478,239,0,1559,1560,7,12,0,0,1560,1562,5,239,0,0,1561,1563,3,630, 315,0,1562,1561,1,0,0,0,1562,1563,1,0,0,0,1563,1565,1,0,0,0,1564, 1559,1,0,0,0,1564,1565,1,0,0,0,1565,139,1,0,0,0,1566,1571,3,142, 71,0,1567,1568,5,397,0,0,1568,1570,3,142,71,0,1569,1567,1,0,0,0, 1570,1573,1,0,0,0,1571,1569,1,0,0,0,1571,1572,1,0,0,0,1572,141,1, 0,0,0,1573,1571,1,0,0,0,1574,1575,3,144,72,0,1575,1576,5,426,0,0, - 1576,143,1,0,0,0,1577,1578,7,12,0,0,1578,145,1,0,0,0,1579,1581,5, + 1576,143,1,0,0,0,1577,1578,7,13,0,0,1578,145,1,0,0,0,1579,1581,5, 58,0,0,1580,1582,5,333,0,0,1581,1580,1,0,0,0,1581,1582,1,0,0,0,1582, 1583,1,0,0,0,1583,1584,5,141,0,0,1584,1585,3,554,277,0,1585,1586, 5,17,0,0,1586,1589,5,426,0,0,1587,1588,5,370,0,0,1588,1590,3,140, @@ -26222,7 +26229,7 @@ export class HiveSqlParser extends SQLParserBase { 5,101,0,0,1592,1594,5,333,0,0,1593,1592,1,0,0,0,1593,1594,1,0,0, 0,1594,1595,1,0,0,0,1595,1597,5,141,0,0,1596,1598,3,30,15,0,1597, 1596,1,0,0,0,1597,1598,1,0,0,0,1598,1599,1,0,0,0,1599,1600,3,556, - 278,0,1600,149,1,0,0,0,1601,1602,5,271,0,0,1602,1603,7,13,0,0,1603, + 278,0,1600,149,1,0,0,0,1601,1602,5,271,0,0,1602,1603,7,14,0,0,1603, 151,1,0,0,0,1604,1605,5,58,0,0,1605,1606,5,333,0,0,1606,1607,5,194, 0,0,1607,1608,5,432,0,0,1608,1610,5,399,0,0,1609,1611,3,248,124, 0,1610,1609,1,0,0,0,1610,1611,1,0,0,0,1611,1612,1,0,0,0,1612,1613, @@ -26324,7 +26331,7 @@ export class HiveSqlParser extends SQLParserBase { 3,668,334,0,1889,1892,3,672,336,0,1890,1892,3,674,337,0,1891,1887, 1,0,0,0,1891,1888,1,0,0,0,1891,1889,1,0,0,0,1891,1890,1,0,0,0,1892, 1893,1,0,0,0,1893,1894,5,399,0,0,1894,1895,3,256,128,0,1895,1896, - 5,400,0,0,1896,1905,1,0,0,0,1897,1898,7,14,0,0,1898,1899,5,399,0, + 5,400,0,0,1896,1905,1,0,0,0,1897,1898,7,15,0,0,1898,1899,5,399,0, 0,1899,1900,5,431,0,0,1900,1901,5,397,0,0,1901,1902,3,256,128,0, 1902,1903,5,400,0,0,1903,1905,1,0,0,0,1904,1886,1,0,0,0,1904,1891, 1,0,0,0,1904,1897,1,0,0,0,1905,207,1,0,0,0,1906,1907,5,42,0,0,1907, @@ -26412,9 +26419,9 @@ export class HiveSqlParser extends SQLParserBase { 1,0,0,0,2150,2153,1,0,0,0,2151,2153,3,272,136,0,2152,2147,1,0,0, 0,2152,2151,1,0,0,0,2153,267,1,0,0,0,2154,2157,3,662,331,0,2155, 2157,3,664,332,0,2156,2154,1,0,0,0,2156,2155,1,0,0,0,2157,269,1, - 0,0,0,2158,2159,7,15,0,0,2159,271,1,0,0,0,2160,2164,5,109,0,0,2161, + 0,0,0,2158,2159,7,16,0,0,2159,271,1,0,0,0,2160,2164,5,109,0,0,2161, 2162,5,216,0,0,2162,2164,5,109,0,0,2163,2160,1,0,0,0,2163,2161,1, - 0,0,0,2164,273,1,0,0,0,2165,2166,7,16,0,0,2166,275,1,0,0,0,2167, + 0,0,0,2164,273,1,0,0,0,2165,2166,7,17,0,0,2166,275,1,0,0,0,2167, 2168,5,55,0,0,2168,2170,3,638,319,0,2169,2167,1,0,0,0,2169,2170, 1,0,0,0,2170,2171,1,0,0,0,2171,2173,3,280,140,0,2172,2174,3,336, 168,0,2173,2172,1,0,0,0,2173,2174,1,0,0,0,2174,277,1,0,0,0,2175, @@ -26440,8 +26447,8 @@ export class HiveSqlParser extends SQLParserBase { 148,0,2231,2232,5,400,0,0,2232,295,1,0,0,0,2233,2238,3,572,286,0, 2234,2235,5,397,0,0,2235,2237,3,572,286,0,2236,2234,1,0,0,0,2237, 2240,1,0,0,0,2238,2236,1,0,0,0,2238,2239,1,0,0,0,2239,297,1,0,0, - 0,2240,2238,1,0,0,0,2241,2242,7,17,0,0,2242,299,1,0,0,0,2243,2244, - 5,220,0,0,2244,2245,7,18,0,0,2245,301,1,0,0,0,2246,2248,3,256,128, + 0,2240,2238,1,0,0,0,2241,2242,7,18,0,0,2242,299,1,0,0,0,2243,2244, + 5,220,0,0,2244,2245,7,19,0,0,2245,301,1,0,0,0,2246,2248,3,256,128, 0,2247,2249,3,298,149,0,2248,2247,1,0,0,0,2248,2249,1,0,0,0,2249, 2251,1,0,0,0,2250,2252,3,300,150,0,2251,2250,1,0,0,0,2251,2252,1, 0,0,0,2252,303,1,0,0,0,2253,2258,3,306,153,0,2254,2255,5,397,0,0, @@ -26507,7 +26514,7 @@ export class HiveSqlParser extends SQLParserBase { 2435,5,27,0,0,2420,2428,3,680,340,0,2421,2422,5,399,0,0,2422,2425, 5,431,0,0,2423,2424,5,397,0,0,2424,2426,5,431,0,0,2425,2423,1,0, 0,0,2425,2426,1,0,0,0,2426,2427,1,0,0,0,2427,2429,5,400,0,0,2428, - 2421,1,0,0,0,2428,2429,1,0,0,0,2429,2435,1,0,0,0,2430,2431,7,19, + 2421,1,0,0,0,2428,2429,1,0,0,0,2429,2435,1,0,0,0,2430,2431,7,20, 0,0,2431,2432,5,399,0,0,2432,2433,5,431,0,0,2433,2435,5,400,0,0, 2434,2397,1,0,0,0,2434,2398,1,0,0,0,2434,2399,1,0,0,0,2434,2400, 1,0,0,0,2434,2401,1,0,0,0,2434,2402,1,0,0,0,2434,2403,1,0,0,0,2434, @@ -26521,7 +26528,7 @@ export class HiveSqlParser extends SQLParserBase { 174,0,2449,2450,5,397,0,0,2450,2451,3,346,173,0,2451,2452,5,411, 0,0,2452,355,1,0,0,0,2453,2454,5,357,0,0,2454,2455,5,409,0,0,2455, 2456,3,344,172,0,2456,2457,5,411,0,0,2457,357,1,0,0,0,2458,2460, - 7,20,0,0,2459,2461,7,21,0,0,2460,2459,1,0,0,0,2460,2461,1,0,0,0, + 7,21,0,0,2459,2461,7,22,0,0,2460,2459,1,0,0,0,2460,2461,1,0,0,0, 2461,359,1,0,0,0,2462,2464,3,364,182,0,2463,2462,1,0,0,0,2463,2464, 1,0,0,0,2464,2465,1,0,0,0,2465,2466,3,362,181,0,2466,361,1,0,0,0, 2467,2470,3,368,184,0,2468,2470,3,372,186,0,2469,2467,1,0,0,0,2469, @@ -26616,10 +26623,10 @@ export class HiveSqlParser extends SQLParserBase { 0,0,2713,2712,1,0,0,0,2713,2714,1,0,0,0,2714,2723,1,0,0,0,2715,2717, 5,289,0,0,2716,2718,5,389,0,0,2717,2716,1,0,0,0,2717,2718,1,0,0, 0,2718,2723,1,0,0,0,2719,2720,5,304,0,0,2720,2721,5,22,0,0,2721, - 2723,7,22,0,0,2722,2699,1,0,0,0,2722,2711,1,0,0,0,2722,2715,1,0, + 2723,7,23,0,0,2722,2699,1,0,0,0,2722,2711,1,0,0,0,2722,2715,1,0, 0,0,2722,2719,1,0,0,0,2723,395,1,0,0,0,2724,2725,5,168,0,0,2725, 2726,5,182,0,0,2726,2730,5,312,0,0,2727,2728,5,261,0,0,2728,2730, - 7,23,0,0,2729,2724,1,0,0,0,2729,2727,1,0,0,0,2730,397,1,0,0,0,2731, + 7,24,0,0,2729,2724,1,0,0,0,2729,2727,1,0,0,0,2730,397,1,0,0,0,2731, 2734,3,402,201,0,2732,2734,3,404,202,0,2733,2731,1,0,0,0,2733,2732, 1,0,0,0,2734,2737,1,0,0,0,2735,2733,1,0,0,0,2735,2736,1,0,0,0,2736, 2739,1,0,0,0,2737,2735,1,0,0,0,2738,2740,3,400,200,0,2739,2738,1, @@ -26698,7 +26705,7 @@ export class HiveSqlParser extends SQLParserBase { 2940,2941,5,397,0,0,2941,2943,3,428,214,0,2942,2940,1,0,0,0,2943, 2946,1,0,0,0,2944,2942,1,0,0,0,2944,2945,1,0,0,0,2945,2947,1,0,0, 0,2946,2944,1,0,0,0,2947,2948,5,400,0,0,2948,3040,1,0,0,0,2949,2950, - 5,216,0,0,2950,3040,7,24,0,0,2951,3040,3,208,104,0,2952,2953,5,49, + 5,216,0,0,2950,3040,7,25,0,0,2951,3040,3,208,104,0,2952,2953,5,49, 0,0,2953,2956,5,426,0,0,2954,2955,5,11,0,0,2955,2957,5,380,0,0,2956, 2954,1,0,0,0,2956,2957,1,0,0,0,2957,2962,1,0,0,0,2958,2959,5,42, 0,0,2959,2960,5,166,0,0,2960,2961,5,431,0,0,2961,2963,5,31,0,0,2962, @@ -26749,7 +26756,7 @@ export class HiveSqlParser extends SQLParserBase { 0,3072,3073,3,230,115,0,3073,3085,1,0,0,0,3074,3075,3,472,236,0, 3075,3076,5,304,0,0,3076,3077,5,236,0,0,3077,3078,3,128,64,0,3078, 3085,1,0,0,0,3079,3080,3,472,236,0,3080,3081,5,304,0,0,3081,3082, - 7,25,0,0,3082,3083,5,426,0,0,3083,3085,1,0,0,0,3084,3069,1,0,0,0, + 7,26,0,0,3082,3083,5,426,0,0,3083,3085,1,0,0,0,3084,3069,1,0,0,0, 3084,3074,1,0,0,0,3084,3079,1,0,0,0,3085,421,1,0,0,0,3086,3087,3, 472,236,0,3087,3088,5,304,0,0,3088,3089,5,77,0,0,3089,3090,3,230, 115,0,3090,3102,1,0,0,0,3091,3092,3,472,236,0,3092,3093,5,304,0, @@ -26769,7 +26776,7 @@ export class HiveSqlParser extends SQLParserBase { 286,0,3131,3133,3,294,147,0,3132,3130,1,0,0,0,3132,3131,1,0,0,0, 3133,3134,1,0,0,0,3134,3135,5,405,0,0,3135,3136,5,426,0,0,3136,429, 1,0,0,0,3137,3147,5,115,0,0,3138,3139,5,289,0,0,3139,3140,5,399, - 0,0,3140,3148,7,26,0,0,3141,3142,5,118,0,0,3142,3143,5,399,0,0,3143, + 0,0,3140,3148,7,27,0,0,3141,3142,5,118,0,0,3142,3143,5,399,0,0,3143, 3148,5,426,0,0,3144,3145,5,306,0,0,3145,3146,5,399,0,0,3146,3148, 5,431,0,0,3147,3138,1,0,0,0,3147,3141,1,0,0,0,3147,3144,1,0,0,0, 3148,3149,1,0,0,0,3149,3150,5,400,0,0,3150,431,1,0,0,0,3151,3152, @@ -26886,8 +26893,8 @@ export class HiveSqlParser extends SQLParserBase { 0,3455,3452,1,0,0,0,3455,3456,1,0,0,0,3456,3457,1,0,0,0,3457,3458, 5,399,0,0,3458,3459,3,444,222,0,3459,3460,5,400,0,0,3460,459,1,0, 0,0,3461,3476,5,397,0,0,3462,3473,5,157,0,0,3463,3473,5,60,0,0,3464, - 3466,7,27,0,0,3465,3467,5,231,0,0,3466,3465,1,0,0,0,3466,3467,1, - 0,0,0,3467,3473,1,0,0,0,3468,3470,5,180,0,0,3469,3471,7,28,0,0,3470, + 3466,7,28,0,0,3465,3467,5,231,0,0,3466,3465,1,0,0,0,3466,3467,1, + 0,0,0,3467,3473,1,0,0,0,3468,3470,5,180,0,0,3469,3471,7,29,0,0,3470, 3469,1,0,0,0,3470,3471,1,0,0,0,3471,3473,1,0,0,0,3472,3462,1,0,0, 0,3472,3463,1,0,0,0,3472,3464,1,0,0,0,3472,3468,1,0,0,0,3472,3473, 1,0,0,0,3473,3474,1,0,0,0,3474,3476,5,171,0,0,3475,3461,1,0,0,0, @@ -26919,7 +26926,7 @@ export class HiveSqlParser extends SQLParserBase { 3553,1,0,0,0,3551,3549,1,0,0,0,3551,3552,1,0,0,0,3552,3555,1,0,0, 0,3553,3551,1,0,0,0,3554,3545,1,0,0,0,3554,3555,1,0,0,0,3555,3556, 1,0,0,0,3556,3566,5,400,0,0,3557,3558,5,331,0,0,3558,3562,5,399, - 0,0,3559,3560,5,431,0,0,3560,3563,7,29,0,0,3561,3563,5,430,0,0,3562, + 0,0,3559,3560,5,431,0,0,3560,3563,7,30,0,0,3561,3563,5,430,0,0,3562, 3559,1,0,0,0,3562,3561,1,0,0,0,3563,3564,1,0,0,0,3564,3566,5,400, 0,0,3565,3538,1,0,0,0,3565,3557,1,0,0,0,3566,467,1,0,0,0,3567,3569, 3,476,238,0,3568,3570,3,226,113,0,3569,3568,1,0,0,0,3569,3570,1, @@ -26983,7 +26990,7 @@ export class HiveSqlParser extends SQLParserBase { 0,3732,3735,1,0,0,0,3733,3731,1,0,0,0,3734,3725,1,0,0,0,3734,3735, 1,0,0,0,3735,3736,1,0,0,0,3736,3737,5,400,0,0,3737,499,1,0,0,0,3738, 3740,5,299,0,0,3739,3741,5,436,0,0,3740,3739,1,0,0,0,3740,3741,1, - 0,0,0,3741,3755,1,0,0,0,3742,3744,7,21,0,0,3743,3742,1,0,0,0,3743, + 0,0,0,3741,3755,1,0,0,0,3742,3744,7,22,0,0,3743,3742,1,0,0,0,3743, 3744,1,0,0,0,3744,3745,1,0,0,0,3745,3750,3,504,252,0,3746,3747,5, 397,0,0,3747,3749,3,504,252,0,3748,3746,1,0,0,0,3749,3752,1,0,0, 0,3750,3748,1,0,0,0,3750,3751,1,0,0,0,3751,3756,1,0,0,0,3752,3750, @@ -27007,7 +27014,7 @@ export class HiveSqlParser extends SQLParserBase { 3800,3801,1,0,0,0,3801,3803,1,0,0,0,3802,3800,1,0,0,0,3803,3804, 5,400,0,0,3804,3806,1,0,0,0,3805,3790,1,0,0,0,3805,3793,1,0,0,0, 3805,3806,1,0,0,0,3806,3808,1,0,0,0,3807,3784,1,0,0,0,3807,3787, - 1,0,0,0,3808,505,1,0,0,0,3809,3810,7,30,0,0,3810,3811,3,510,255, + 1,0,0,0,3808,505,1,0,0,0,3809,3810,7,31,0,0,3810,3811,3,510,255, 0,3811,3812,3,212,106,0,3812,3813,3,216,108,0,3813,3814,5,370,0, 0,3814,3827,5,426,0,0,3815,3825,5,17,0,0,3816,3819,5,399,0,0,3817, 3820,3,446,223,0,3818,3820,3,248,124,0,3819,3817,1,0,0,0,3819,3818, @@ -27029,13 +27036,13 @@ export class HiveSqlParser extends SQLParserBase { 3,488,244,0,3864,3863,1,0,0,0,3864,3865,1,0,0,0,3865,3867,1,0,0, 0,3866,3868,3,516,258,0,3867,3866,1,0,0,0,3867,3868,1,0,0,0,3868, 3869,1,0,0,0,3869,3871,5,400,0,0,3870,3858,1,0,0,0,3870,3859,1,0, - 0,0,3871,515,1,0,0,0,3872,3886,7,31,0,0,3873,3874,5,354,0,0,3874, + 0,0,3871,515,1,0,0,0,3872,3886,7,32,0,0,3873,3874,5,354,0,0,3874, 3880,5,247,0,0,3875,3876,5,62,0,0,3876,3880,5,291,0,0,3877,3878, 5,431,0,0,3878,3880,5,247,0,0,3879,3873,1,0,0,0,3879,3875,1,0,0, 0,3879,3877,1,0,0,0,3880,3887,1,0,0,0,3881,3882,5,25,0,0,3882,3883, 3,518,259,0,3883,3884,5,11,0,0,3884,3885,3,518,259,0,3885,3887,1, 0,0,0,3886,3879,1,0,0,0,3886,3881,1,0,0,0,3887,517,1,0,0,0,3888, - 3889,7,32,0,0,3889,3893,7,33,0,0,3890,3891,5,62,0,0,3891,3893,5, + 3889,7,33,0,0,3889,3893,7,34,0,0,3890,3891,5,62,0,0,3891,3893,5, 291,0,0,3892,3888,1,0,0,0,3892,3890,1,0,0,0,3893,519,1,0,0,0,3894, 3895,5,144,0,0,3895,3901,5,32,0,0,3896,3902,3,256,128,0,3897,3902, 3,522,261,0,3898,3902,3,524,262,0,3899,3900,5,399,0,0,3900,3902, @@ -27093,7 +27100,7 @@ export class HiveSqlParser extends SQLParserBase { 1,0,0,0,4049,4051,1,0,0,0,4050,4052,3,508,254,0,4051,4050,1,0,0, 0,4051,4052,1,0,0,0,4052,4053,1,0,0,0,4053,4054,5,139,0,0,4054,4055, 3,508,254,0,4055,4056,5,400,0,0,4056,4097,1,0,0,0,4057,4058,3,558, - 279,0,4058,4073,5,399,0,0,4059,4074,5,415,0,0,4060,4062,7,21,0,0, + 279,0,4058,4073,5,399,0,0,4059,4074,5,415,0,0,4060,4062,7,22,0,0, 4061,4060,1,0,0,0,4061,4062,1,0,0,0,4062,4071,1,0,0,0,4063,4068, 3,508,254,0,4064,4065,5,397,0,0,4065,4067,3,508,254,0,4066,4064, 1,0,0,0,4067,4070,1,0,0,0,4068,4066,1,0,0,0,4068,4069,1,0,0,0,4069, @@ -27107,7 +27114,7 @@ export class HiveSqlParser extends SQLParserBase { 0,0,4090,4091,5,234,0,0,4091,4092,3,514,257,0,4092,4095,1,0,0,0, 4093,4095,5,400,0,0,4094,4075,1,0,0,0,4094,4082,1,0,0,0,4094,4088, 1,0,0,0,4094,4093,1,0,0,0,4095,4097,1,0,0,0,4096,4043,1,0,0,0,4096, - 4057,1,0,0,0,4097,551,1,0,0,0,4098,4099,7,34,0,0,4099,4100,5,220, + 4057,1,0,0,0,4097,551,1,0,0,0,4098,4099,7,35,0,0,4099,4100,5,220, 0,0,4100,553,1,0,0,0,4101,4102,3,640,320,0,4102,555,1,0,0,0,4103, 4106,3,640,320,0,4104,4106,5,426,0,0,4105,4103,1,0,0,0,4105,4104, 1,0,0,0,4106,557,1,0,0,0,4107,4111,3,640,320,0,4108,4111,3,646,323, @@ -27150,7 +27157,7 @@ export class HiveSqlParser extends SQLParserBase { 0,4210,4189,1,0,0,0,4210,4191,1,0,0,0,4210,4192,1,0,0,0,4210,4194, 1,0,0,0,4210,4201,1,0,0,0,4210,4202,1,0,0,0,4210,4203,1,0,0,0,4210, 4205,1,0,0,0,4210,4206,1,0,0,0,4210,4207,1,0,0,0,4210,4208,1,0,0, - 0,4210,4209,1,0,0,0,4211,573,1,0,0,0,4212,4213,7,26,0,0,4213,575, + 0,4210,4209,1,0,0,0,4211,573,1,0,0,0,4212,4213,7,27,0,0,4213,575, 1,0,0,0,4214,4215,5,399,0,0,4215,4216,3,574,287,0,4216,4217,5,400, 0,0,4217,4218,3,578,289,0,4218,4230,1,0,0,0,4219,4225,5,165,0,0, 4220,4226,3,574,287,0,4221,4222,5,399,0,0,4222,4223,3,580,290,0, @@ -27173,7 +27180,7 @@ export class HiveSqlParser extends SQLParserBase { 3,638,319,0,4266,4255,1,0,0,0,4266,4256,1,0,0,0,4266,4257,1,0,0, 0,4266,4258,1,0,0,0,4266,4259,1,0,0,0,4266,4260,1,0,0,0,4266,4261, 1,0,0,0,4266,4262,1,0,0,0,4266,4263,1,0,0,0,4266,4264,1,0,0,0,4266, - 4265,1,0,0,0,4267,583,1,0,0,0,4268,4270,7,35,0,0,4269,4268,1,0,0, + 4265,1,0,0,0,4267,583,1,0,0,0,4268,4270,7,36,0,0,4269,4268,1,0,0, 0,4270,4273,1,0,0,0,4271,4269,1,0,0,0,4271,4272,1,0,0,0,4272,4274, 1,0,0,0,4273,4271,1,0,0,0,4274,4283,3,582,291,0,4275,4276,5,401, 0,0,4276,4277,3,580,290,0,4277,4278,5,402,0,0,4278,4282,1,0,0,0, @@ -27182,10 +27189,10 @@ export class HiveSqlParser extends SQLParserBase { 0,4284,585,1,0,0,0,4285,4283,1,0,0,0,4286,4291,3,584,292,0,4287, 4288,5,423,0,0,4288,4290,3,584,292,0,4289,4287,1,0,0,0,4290,4293, 1,0,0,0,4291,4289,1,0,0,0,4291,4292,1,0,0,0,4292,587,1,0,0,0,4293, - 4291,1,0,0,0,4294,4299,3,586,293,0,4295,4296,7,36,0,0,4296,4298, + 4291,1,0,0,0,4294,4299,3,586,293,0,4295,4296,7,37,0,0,4296,4298, 3,586,293,0,4297,4295,1,0,0,0,4298,4301,1,0,0,0,4299,4297,1,0,0, 0,4299,4300,1,0,0,0,4300,589,1,0,0,0,4301,4299,1,0,0,0,4302,4307, - 3,588,294,0,4303,4304,7,37,0,0,4304,4306,3,588,294,0,4305,4303,1, + 3,588,294,0,4303,4304,7,38,0,0,4304,4306,3,588,294,0,4305,4303,1, 0,0,0,4306,4309,1,0,0,0,4307,4305,1,0,0,0,4307,4308,1,0,0,0,4308, 591,1,0,0,0,4309,4307,1,0,0,0,4310,4315,3,590,295,0,4311,4312,5, 422,0,0,4312,4314,3,590,295,0,4313,4311,1,0,0,0,4314,4317,1,0,0, @@ -27195,7 +27202,7 @@ export class HiveSqlParser extends SQLParserBase { 4324,1,0,0,0,4324,595,1,0,0,0,4325,4323,1,0,0,0,4326,4331,3,594, 297,0,4327,4328,5,421,0,0,4328,4330,3,594,297,0,4329,4327,1,0,0, 0,4330,4333,1,0,0,0,4331,4329,1,0,0,0,4331,4332,1,0,0,0,4332,597, - 1,0,0,0,4333,4331,1,0,0,0,4334,4335,7,38,0,0,4335,599,1,0,0,0,4336, + 1,0,0,0,4333,4331,1,0,0,0,4334,4335,7,39,0,0,4335,599,1,0,0,0,4336, 4337,5,399,0,0,4337,4338,3,376,188,0,4338,4339,5,400,0,0,4339,601, 1,0,0,0,4340,4342,3,596,298,0,4341,4343,3,604,302,0,4342,4341,1, 0,0,0,4342,4343,1,0,0,0,4343,4347,1,0,0,0,4344,4345,5,117,0,0,4345, @@ -27205,12 +27212,12 @@ export class HiveSqlParser extends SQLParserBase { 0,4354,4348,1,0,0,0,4354,4351,1,0,0,0,4354,4352,1,0,0,0,4355,605, 1,0,0,0,4356,4357,5,154,0,0,4357,4371,3,608,304,0,4358,4359,5,25, 0,0,4359,4360,3,596,298,0,4360,4361,5,11,0,0,4361,4362,3,596,298, - 0,4362,4371,1,0,0,0,4363,4364,5,184,0,0,4364,4365,7,39,0,0,4365, - 4371,3,538,269,0,4366,4367,3,634,317,0,4367,4368,7,40,0,0,4368,4369, + 0,4362,4371,1,0,0,0,4363,4364,5,184,0,0,4364,4365,7,40,0,0,4365, + 4371,3,538,269,0,4366,4367,3,634,317,0,4367,4368,7,41,0,0,4368,4369, 3,600,300,0,4369,4371,1,0,0,0,4370,4356,1,0,0,0,4370,4358,1,0,0, 0,4370,4363,1,0,0,0,4370,4366,1,0,0,0,4371,607,1,0,0,0,4372,4375, 3,600,300,0,4373,4375,3,538,269,0,4374,4372,1,0,0,0,4374,4373,1, - 0,0,0,4375,609,1,0,0,0,4376,4377,7,41,0,0,4377,4380,3,596,298,0, + 0,0,0,4375,609,1,0,0,0,4376,4377,7,42,0,0,4377,4380,3,596,298,0, 4378,4380,3,606,303,0,4379,4376,1,0,0,0,4379,4378,1,0,0,0,4380,611, 1,0,0,0,4381,4382,5,167,0,0,4382,4383,5,96,0,0,4383,4384,5,139,0, 0,4384,613,1,0,0,0,4385,4393,5,405,0,0,4386,4393,5,406,0,0,4387, @@ -27222,7 +27229,7 @@ export class HiveSqlParser extends SQLParserBase { 0,0,0,4401,4395,1,0,0,0,4401,4398,1,0,0,0,4402,4405,1,0,0,0,4403, 4401,1,0,0,0,4403,4404,1,0,0,0,4404,617,1,0,0,0,4405,4403,1,0,0, 0,4406,4413,5,219,0,0,4407,4413,5,350,0,0,4408,4413,5,125,0,0,4409, - 4413,5,360,0,0,4410,4411,5,216,0,0,4411,4413,7,42,0,0,4412,4406, + 4413,5,360,0,0,4410,4411,5,216,0,0,4411,4413,7,43,0,0,4412,4406, 1,0,0,0,4412,4407,1,0,0,0,4412,4408,1,0,0,0,4412,4409,1,0,0,0,4412, 4410,1,0,0,0,4413,619,1,0,0,0,4414,4416,5,216,0,0,4415,4414,1,0, 0,0,4416,4419,1,0,0,0,4417,4415,1,0,0,0,4417,4418,1,0,0,0,4418,4420, @@ -27244,12 +27251,12 @@ export class HiveSqlParser extends SQLParserBase { 5,400,0,0,4464,631,1,0,0,0,4465,4468,3,638,319,0,4466,4469,5,184, 0,0,4467,4469,3,634,317,0,4468,4466,1,0,0,0,4468,4467,1,0,0,0,4469, 4470,1,0,0,0,4470,4471,3,572,286,0,4471,633,1,0,0,0,4472,4473,7, - 43,0,0,4473,635,1,0,0,0,4474,4475,7,44,0,0,4475,637,1,0,0,0,4476, + 44,0,0,4473,635,1,0,0,0,4474,4475,7,45,0,0,4475,637,1,0,0,0,4476, 4479,5,432,0,0,4477,4479,3,644,322,0,4478,4476,1,0,0,0,4478,4477, 1,0,0,0,4479,639,1,0,0,0,4480,4483,3,638,319,0,4481,4482,5,395,0, 0,4482,4484,3,638,319,0,4483,4481,1,0,0,0,4483,4484,1,0,0,0,4484, - 641,1,0,0,0,4485,4486,3,638,319,0,4486,643,1,0,0,0,4487,4488,7,45, - 0,0,4488,645,1,0,0,0,4489,4490,7,46,0,0,4490,647,1,0,0,0,4491,4543, + 641,1,0,0,0,4485,4486,3,638,319,0,4486,643,1,0,0,0,4487,4488,7,46, + 0,0,4488,645,1,0,0,0,4489,4490,7,47,0,0,4490,647,1,0,0,0,4491,4543, 3,638,319,0,4492,4543,5,299,0,0,4493,4543,5,171,0,0,4494,4543,5, 237,0,0,4495,4543,5,198,0,0,4496,4543,5,268,0,0,4497,4543,5,369, 0,0,4498,4543,5,241,0,0,4499,4543,5,165,0,0,4500,4543,5,292,0,0, @@ -27324,11 +27331,11 @@ export class HiveSqlParser extends SQLParserBase { 387,0,0,4664,4665,3,690,345,0,4665,4710,1,0,0,0,4666,4667,5,9,0, 0,4667,4668,5,246,0,0,4668,4669,3,638,319,0,4669,4670,5,395,0,0, 4670,4678,3,682,341,0,4671,4672,5,304,0,0,4672,4679,3,690,345,0, - 4673,4674,5,363,0,0,4674,4679,5,294,0,0,4675,4676,7,47,0,0,4676, + 4673,4674,5,363,0,0,4674,4679,5,294,0,0,4675,4676,7,48,0,0,4676, 4677,5,348,0,0,4677,4679,3,638,319,0,4678,4671,1,0,0,0,4678,4673, 1,0,0,0,4678,4675,1,0,0,0,4679,4710,1,0,0,0,4680,4681,5,101,0,0, 4681,4682,5,246,0,0,4682,4683,3,638,319,0,4683,4684,5,395,0,0,4684, - 4685,3,682,341,0,4685,4710,1,0,0,0,4686,4687,7,48,0,0,4687,4688, + 4685,3,682,341,0,4685,4710,1,0,0,0,4686,4687,7,49,0,0,4687,4688, 3,652,326,0,4688,4689,5,200,0,0,4689,4690,5,426,0,0,4690,4691,5, 154,0,0,4691,4695,3,638,319,0,4692,4693,5,341,0,0,4693,4696,3,682, 341,0,4694,4696,5,362,0,0,4695,4692,1,0,0,0,4695,4694,1,0,0,0,4696, @@ -27340,7 +27347,7 @@ export class HiveSqlParser extends SQLParserBase { 4600,1,0,0,0,4709,4605,1,0,0,0,4709,4619,1,0,0,0,4709,4629,1,0,0, 0,4709,4652,1,0,0,0,4709,4658,1,0,0,0,4709,4666,1,0,0,0,4709,4680, 1,0,0,0,4709,4686,1,0,0,0,4709,4702,1,0,0,0,4710,651,1,0,0,0,4711, - 4712,7,49,0,0,4712,653,1,0,0,0,4713,4714,5,259,0,0,4714,4715,5,405, + 4712,7,50,0,0,4712,653,1,0,0,0,4713,4714,5,259,0,0,4714,4715,5,405, 0,0,4715,4721,5,431,0,0,4716,4717,5,83,0,0,4717,4718,5,246,0,0,4718, 4719,5,405,0,0,4719,4721,3,682,341,0,4720,4713,1,0,0,0,4720,4716, 1,0,0,0,4721,655,1,0,0,0,4722,4727,3,654,327,0,4723,4724,5,397,0, @@ -27349,16 +27356,16 @@ export class HiveSqlParser extends SQLParserBase { 0,4730,4734,5,259,0,0,4731,4732,5,83,0,0,4732,4734,5,246,0,0,4733, 4730,1,0,0,0,4733,4731,1,0,0,0,4734,659,1,0,0,0,4735,4738,5,2,0, 0,4736,4737,5,387,0,0,4737,4739,5,278,0,0,4738,4736,1,0,0,0,4738, - 4739,1,0,0,0,4739,661,1,0,0,0,4740,4741,7,50,0,0,4741,663,1,0,0, - 0,4742,4743,7,51,0,0,4743,665,1,0,0,0,4744,4745,7,52,0,0,4745,667, - 1,0,0,0,4746,4747,7,53,0,0,4747,669,1,0,0,0,4748,4749,7,54,0,0,4749, - 671,1,0,0,0,4750,4751,7,55,0,0,4751,673,1,0,0,0,4752,4753,7,56,0, - 0,4753,675,1,0,0,0,4754,4755,7,57,0,0,4755,677,1,0,0,0,4756,4757, - 7,58,0,0,4757,679,1,0,0,0,4758,4759,7,59,0,0,4759,681,1,0,0,0,4760, + 4739,1,0,0,0,4739,661,1,0,0,0,4740,4741,7,51,0,0,4741,663,1,0,0, + 0,4742,4743,7,52,0,0,4743,665,1,0,0,0,4744,4745,7,53,0,0,4745,667, + 1,0,0,0,4746,4747,7,54,0,0,4747,669,1,0,0,0,4748,4749,7,55,0,0,4749, + 671,1,0,0,0,4750,4751,7,56,0,0,4751,673,1,0,0,0,4752,4753,7,57,0, + 0,4753,675,1,0,0,0,4754,4755,7,58,0,0,4755,677,1,0,0,0,4756,4757, + 7,59,0,0,4757,679,1,0,0,0,4758,4759,7,60,0,0,4759,681,1,0,0,0,4760, 4765,3,638,319,0,4761,4762,5,395,0,0,4762,4764,3,638,319,0,4763, 4761,1,0,0,0,4764,4767,1,0,0,0,4765,4763,1,0,0,0,4765,4766,1,0,0, 0,4766,683,1,0,0,0,4767,4765,1,0,0,0,4768,4769,3,638,319,0,4769, - 4770,5,411,0,0,4770,4771,7,26,0,0,4771,685,1,0,0,0,4772,4777,5,176, + 4770,5,411,0,0,4770,4771,7,27,0,0,4771,685,1,0,0,0,4772,4777,5,176, 0,0,4773,4774,5,211,0,0,4774,4775,5,341,0,0,4775,4777,3,682,341, 0,4776,4772,1,0,0,0,4776,4773,1,0,0,0,4777,687,1,0,0,0,4778,4779, 5,8,0,0,4779,4780,5,405,0,0,4780,4791,5,431,0,0,4781,4782,5,259, @@ -27803,6 +27810,15 @@ export class ExecStatementContext extends antlr.ParserRuleContext { return this.getToken(HiveSqlParser.DOT, i); } } + public COLON(): antlr.TerminalNode[]; + public COLON(i: number): antlr.TerminalNode | null; + public COLON(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(HiveSqlParser.COLON); + } else { + return this.getToken(HiveSqlParser.COLON, i); + } + } public override get ruleIndex(): number { return HiveSqlParser.RULE_execStatement; } @@ -34755,16 +34771,17 @@ export class TableConstraintContext extends antlr.ParserRuleContext { export class ColumnNameTypeConstraintContext extends antlr.ParserRuleContext { public _colName?: ColumnNameCreateContext; + public _colType?: ColumnTypeContext; public _comment?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public columnType(): ColumnTypeContext { - return this.getRuleContext(0, ColumnTypeContext)!; - } public columnNameCreate(): ColumnNameCreateContext { return this.getRuleContext(0, ColumnNameCreateContext)!; } + public columnType(): ColumnTypeContext { + return this.getRuleContext(0, ColumnTypeContext)!; + } public columnConstraint(): ColumnConstraintContext | null { return this.getRuleContext(0, ColumnConstraintContext); } @@ -38752,6 +38769,7 @@ export class JoinTokenContext extends antlr.ParserRuleContext { export class LateralViewContext extends antlr.ParserRuleContext { + public _alias?: TableAliasContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } diff --git a/src/lib/impala/ImpalaSqlParser.interp b/src/lib/impala/ImpalaSqlParser.interp index fe75d1a69..6c98fc59e 100644 --- a/src/lib/impala/ImpalaSqlParser.interp +++ b/src/lib/impala/ImpalaSqlParser.interp @@ -685,6 +685,7 @@ createCommonItem assignmentList assignmentItem viewColumns +viewColumnItem queryStatement with constraintSpecification @@ -693,6 +694,7 @@ columnSpec columnDefinition kuduTableElement kuduColumnDefinition +commentClause columnSpecWithKudu createColumnSpecWithKudu kuduAttributes @@ -769,4 +771,4 @@ nonReserved atn: -[4, 1, 289, 2771, 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, 1, 0, 5, 0, 368, 8, 0, 10, 0, 12, 0, 371, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 377, 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, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 401, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 414, 8, 4, 1, 5, 1, 5, 3, 5, 418, 8, 5, 1, 5, 1, 5, 3, 5, 422, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 429, 8, 5, 10, 5, 12, 5, 432, 9, 5, 1, 5, 1, 5, 3, 5, 436, 8, 5, 1, 5, 1, 5, 3, 5, 440, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 446, 8, 5, 3, 5, 448, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 453, 8, 5, 1, 6, 1, 6, 3, 6, 457, 8, 6, 1, 6, 1, 6, 3, 6, 461, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 468, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 473, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 3, 7, 479, 8, 7, 1, 7, 1, 7, 3, 7, 483, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 490, 8, 7, 10, 7, 12, 7, 493, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 499, 8, 7, 1, 7, 1, 7, 3, 7, 503, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 508, 8, 7, 3, 7, 510, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 515, 8, 7, 1, 7, 1, 7, 3, 7, 519, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 526, 8, 7, 1, 7, 1, 7, 3, 7, 530, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 535, 8, 8, 1, 8, 1, 8, 3, 8, 539, 8, 8, 1, 8, 1, 8, 3, 8, 543, 8, 8, 1, 8, 1, 8, 3, 8, 547, 8, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 555, 8, 9, 1, 9, 1, 9, 1, 9, 3, 9, 560, 8, 9, 1, 9, 1, 9, 3, 9, 564, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 572, 8, 11, 1, 11, 1, 11, 3, 11, 576, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 583, 8, 11, 10, 11, 12, 11, 586, 9, 11, 3, 11, 588, 8, 11, 1, 11, 3, 11, 591, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 597, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 604, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 615, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 620, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 625, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 630, 8, 11, 1, 12, 1, 12, 1, 12, 3, 12, 635, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 642, 8, 12, 10, 12, 12, 12, 645, 9, 12, 3, 12, 647, 8, 12, 1, 12, 3, 12, 650, 8, 12, 1, 12, 1, 12, 3, 12, 654, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 680, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 706, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 715, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 725, 8, 16, 1, 16, 3, 16, 728, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 742, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 760, 8, 20, 3, 20, 762, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 769, 8, 20, 10, 20, 12, 20, 772, 9, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 782, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 791, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 798, 8, 22, 1, 22, 1, 22, 3, 22, 802, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 809, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 815, 8, 23, 1, 23, 3, 23, 818, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 823, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 830, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 844, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 857, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 862, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 867, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 873, 8, 27, 1, 27, 1, 27, 1, 27, 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, 29, 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, 32, 1, 32, 3, 32, 909, 8, 32, 1, 32, 3, 32, 912, 8, 32, 1, 32, 1, 32, 1, 33, 1, 33, 3, 33, 918, 8, 33, 1, 33, 3, 33, 921, 8, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 927, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 933, 8, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 945, 8, 35, 3, 35, 947, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 958, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 966, 8, 37, 1, 38, 1, 38, 1, 38, 3, 38, 971, 8, 38, 1, 38, 1, 38, 3, 38, 975, 8, 38, 1, 39, 1, 39, 1, 39, 3, 39, 980, 8, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 987, 8, 40, 1, 40, 1, 40, 3, 40, 991, 8, 40, 1, 41, 1, 41, 3, 41, 995, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1001, 8, 41, 1, 42, 1, 42, 3, 42, 1005, 8, 42, 1, 42, 1, 42, 3, 42, 1009, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 1016, 8, 42, 10, 42, 12, 42, 1019, 9, 42, 3, 42, 1021, 8, 42, 1, 42, 3, 42, 1024, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 1032, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1046, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 1053, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1066, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1072, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1077, 8, 49, 1, 49, 3, 49, 1080, 8, 49, 1, 50, 3, 50, 1083, 8, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1088, 8, 50, 1, 50, 1, 50, 3, 50, 1092, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1099, 8, 50, 10, 50, 12, 50, 1102, 9, 50, 1, 50, 1, 50, 3, 50, 1106, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 3, 51, 1112, 8, 51, 1, 52, 1, 52, 3, 52, 1116, 8, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1121, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 1126, 8, 53, 1, 53, 3, 53, 1129, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 1135, 8, 53, 10, 53, 12, 53, 1138, 9, 53, 3, 53, 1140, 8, 53, 1, 53, 1, 53, 3, 53, 1144, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 1154, 8, 54, 10, 54, 12, 54, 1157, 9, 54, 3, 54, 1159, 8, 54, 1, 54, 1, 54, 3, 54, 1163, 8, 54, 1, 55, 1, 55, 1, 55, 3, 55, 1168, 8, 55, 1, 55, 1, 55, 3, 55, 1172, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1188, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 1193, 8, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1198, 8, 57, 10, 57, 12, 57, 1201, 9, 57, 3, 57, 1203, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1209, 8, 58, 1, 58, 3, 58, 1212, 8, 58, 1, 58, 1, 58, 1, 58, 5, 58, 1217, 8, 58, 10, 58, 12, 58, 1220, 9, 58, 3, 58, 1222, 8, 58, 1, 59, 1, 59, 3, 59, 1226, 8, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1231, 8, 59, 1, 59, 3, 59, 1234, 8, 59, 1, 59, 1, 59, 1, 59, 5, 59, 1239, 8, 59, 10, 59, 12, 59, 1242, 9, 59, 3, 59, 1244, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 3, 64, 1268, 8, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1282, 8, 65, 1, 65, 1, 65, 3, 65, 1286, 8, 65, 1, 66, 1, 66, 3, 66, 1290, 8, 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, 68, 1, 68, 1, 68, 3, 68, 1310, 8, 68, 3, 68, 1312, 8, 68, 3, 68, 1314, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1323, 8, 69, 3, 69, 1325, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1334, 8, 70, 3, 70, 1336, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1345, 8, 71, 3, 71, 1347, 8, 71, 1, 72, 1, 72, 1, 72, 3, 72, 1352, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1361, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1370, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1379, 8, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1390, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1396, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1401, 8, 78, 1, 78, 3, 78, 1404, 8, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1417, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1427, 8, 80, 1, 80, 1, 80, 3, 80, 1431, 8, 80, 1, 81, 1, 81, 1, 81, 3, 81, 1436, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, 1445, 8, 82, 10, 82, 12, 82, 1448, 9, 82, 1, 82, 1, 82, 3, 82, 1452, 8, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 5, 93, 1483, 8, 93, 10, 93, 12, 93, 1486, 9, 93, 1, 94, 1, 94, 1, 94, 5, 94, 1491, 8, 94, 10, 94, 12, 94, 1494, 9, 94, 1, 95, 1, 95, 3, 95, 1498, 8, 95, 1, 96, 1, 96, 3, 96, 1502, 8, 96, 1, 97, 1, 97, 3, 97, 1506, 8, 97, 1, 98, 1, 98, 1, 98, 3, 98, 1511, 8, 98, 1, 98, 1, 98, 3, 98, 1515, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1520, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1525, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1530, 8, 98, 1, 98, 1, 98, 3, 98, 1534, 8, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1543, 8, 98, 1, 98, 3, 98, 1546, 8, 98, 1, 98, 1, 98, 3, 98, 1550, 8, 98, 1, 99, 1, 99, 1, 99, 5, 99, 1555, 8, 99, 10, 99, 12, 99, 1558, 9, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1568, 8, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 1574, 8, 101, 5, 101, 1576, 8, 101, 10, 101, 12, 101, 1579, 9, 101, 1, 101, 1, 101, 1, 102, 3, 102, 1584, 8, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1592, 8, 103, 10, 103, 12, 103, 1595, 9, 103, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1601, 8, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1606, 8, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1611, 8, 104, 1, 104, 1, 104, 1, 104, 3, 104, 1616, 8, 104, 1, 104, 1, 104, 5, 104, 1620, 8, 104, 10, 104, 12, 104, 1623, 9, 104, 3, 104, 1625, 8, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1634, 8, 105, 1, 105, 3, 105, 1637, 8, 105, 1, 105, 3, 105, 1640, 8, 105, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1646, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1652, 8, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 5, 109, 1660, 8, 109, 10, 109, 12, 109, 1663, 9, 109, 3, 109, 1665, 8, 109, 1, 109, 1, 109, 3, 109, 1669, 8, 109, 1, 109, 1, 109, 3, 109, 1673, 8, 109, 1, 110, 1, 110, 1, 110, 5, 110, 1678, 8, 110, 10, 110, 12, 110, 1681, 9, 110, 3, 110, 1683, 8, 110, 1, 111, 1, 111, 1, 111, 1, 111, 3, 111, 1689, 8, 111, 1, 111, 1, 111, 5, 111, 1693, 8, 111, 10, 111, 12, 111, 1696, 9, 111, 3, 111, 1698, 8, 111, 1, 112, 3, 112, 1701, 8, 112, 1, 112, 1, 112, 3, 112, 1705, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1715, 8, 113, 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 5, 116, 1724, 8, 116, 10, 116, 12, 116, 1727, 9, 116, 1, 116, 1, 116, 3, 116, 1731, 8, 116, 1, 116, 3, 116, 1734, 8, 116, 1, 117, 1, 117, 3, 117, 1738, 8, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 3, 118, 1745, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1753, 8, 118, 10, 118, 12, 118, 1756, 9, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1767, 8, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1773, 8, 119, 3, 119, 1775, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 1784, 8, 120, 1, 120, 3, 120, 1787, 8, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 1794, 8, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1804, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1810, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 5, 124, 1816, 8, 124, 10, 124, 12, 124, 1819, 9, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 5, 125, 1827, 8, 125, 10, 125, 12, 125, 1830, 9, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 5, 126, 1837, 8, 126, 10, 126, 12, 126, 1840, 9, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1850, 8, 127, 3, 127, 1852, 8, 127, 1, 127, 1, 127, 1, 127, 1, 127, 3, 127, 1858, 8, 127, 1, 128, 1, 128, 1, 128, 3, 128, 1863, 8, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 5, 129, 1871, 8, 129, 10, 129, 12, 129, 1874, 9, 129, 3, 129, 1876, 8, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1882, 8, 129, 3, 129, 1884, 8, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1892, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1898, 8, 130, 1, 130, 5, 130, 1901, 8, 130, 10, 130, 12, 130, 1904, 9, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1913, 8, 131, 10, 131, 12, 131, 1916, 9, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1922, 8, 131, 1, 132, 1, 132, 3, 132, 1926, 8, 132, 1, 132, 1, 132, 3, 132, 1930, 8, 132, 1, 133, 1, 133, 3, 133, 1934, 8, 133, 1, 133, 3, 133, 1937, 8, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1942, 8, 133, 10, 133, 12, 133, 1945, 9, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1951, 8, 133, 10, 133, 12, 133, 1954, 9, 133, 3, 133, 1956, 8, 133, 1, 133, 1, 133, 3, 133, 1960, 8, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1965, 8, 133, 1, 133, 1, 133, 3, 133, 1969, 8, 133, 1, 134, 3, 134, 1972, 8, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1977, 8, 134, 10, 134, 12, 134, 1980, 9, 134, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 5, 136, 1988, 8, 136, 10, 136, 12, 136, 1991, 9, 136, 3, 136, 1993, 8, 136, 1, 136, 1, 136, 3, 136, 1997, 8, 136, 1, 137, 1, 137, 3, 137, 2001, 8, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 3, 139, 2010, 8, 139, 1, 139, 3, 139, 2013, 8, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 2020, 8, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 3, 140, 2034, 8, 140, 5, 140, 2036, 8, 140, 10, 140, 12, 140, 2039, 9, 140, 1, 141, 3, 141, 2042, 8, 141, 1, 141, 1, 141, 3, 141, 2046, 8, 141, 1, 141, 1, 141, 3, 141, 2050, 8, 141, 1, 141, 1, 141, 3, 141, 2054, 8, 141, 1, 141, 1, 141, 3, 141, 2058, 8, 141, 1, 141, 1, 141, 3, 141, 2062, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 2072, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 5, 142, 2081, 8, 142, 10, 142, 12, 142, 2084, 9, 142, 1, 142, 1, 142, 3, 142, 2088, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 2101, 8, 143, 3, 143, 2103, 8, 143, 1, 144, 1, 144, 1, 145, 1, 145, 3, 145, 2109, 8, 145, 1, 145, 1, 145, 3, 145, 2113, 8, 145, 3, 145, 2115, 8, 145, 1, 146, 1, 146, 1, 146, 1, 146, 5, 146, 2121, 8, 146, 10, 146, 12, 146, 2124, 9, 146, 1, 146, 1, 146, 1, 147, 1, 147, 3, 147, 2130, 8, 147, 1, 147, 1, 147, 1, 147, 3, 147, 2135, 8, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 5, 149, 2146, 8, 149, 10, 149, 12, 149, 2149, 9, 149, 1, 149, 1, 149, 1, 149, 3, 149, 2154, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 3, 151, 2162, 8, 151, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 3, 153, 2169, 8, 153, 1, 153, 1, 153, 3, 153, 2173, 8, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 5, 153, 2181, 8, 153, 10, 153, 12, 153, 2184, 9, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2194, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2202, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 5, 154, 2209, 8, 154, 10, 154, 12, 154, 2212, 9, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2217, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2222, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2228, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2234, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2239, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 2244, 8, 154, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 2250, 8, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 5, 155, 2261, 8, 155, 10, 155, 12, 155, 2264, 9, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2290, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2296, 8, 156, 5, 156, 2298, 8, 156, 10, 156, 12, 156, 2301, 9, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2310, 8, 156, 10, 156, 12, 156, 2313, 9, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2322, 8, 156, 1, 156, 3, 156, 2325, 8, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2330, 8, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2335, 8, 156, 10, 156, 12, 156, 2338, 9, 156, 3, 156, 2340, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2347, 8, 156, 10, 156, 12, 156, 2350, 9, 156, 3, 156, 2352, 8, 156, 1, 156, 1, 156, 3, 156, 2356, 8, 156, 1, 156, 3, 156, 2359, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2369, 8, 156, 10, 156, 12, 156, 2372, 9, 156, 3, 156, 2374, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 4, 156, 2391, 8, 156, 11, 156, 12, 156, 2392, 1, 156, 1, 156, 3, 156, 2397, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 4, 156, 2403, 8, 156, 11, 156, 12, 156, 2404, 1, 156, 1, 156, 3, 156, 2409, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2432, 8, 156, 10, 156, 12, 156, 2435, 9, 156, 3, 156, 2437, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2446, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2452, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2458, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2464, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2475, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2484, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2504, 8, 156, 10, 156, 12, 156, 2507, 9, 156, 3, 156, 2509, 8, 156, 1, 156, 3, 156, 2512, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2522, 8, 156, 10, 156, 12, 156, 2525, 9, 156, 1, 157, 1, 157, 1, 157, 1, 157, 3, 157, 2531, 8, 157, 3, 157, 2533, 8, 157, 1, 158, 1, 158, 1, 159, 1, 159, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 3, 161, 2555, 8, 161, 1, 162, 1, 162, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 5, 164, 2582, 8, 164, 10, 164, 12, 164, 2585, 9, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 2591, 8, 164, 1, 164, 1, 164, 1, 164, 1, 164, 5, 164, 2597, 8, 164, 10, 164, 12, 164, 2600, 9, 164, 1, 164, 1, 164, 3, 164, 2604, 8, 164, 3, 164, 2606, 8, 164, 1, 164, 1, 164, 5, 164, 2610, 8, 164, 10, 164, 12, 164, 2613, 9, 164, 1, 165, 1, 165, 1, 166, 1, 166, 3, 166, 2619, 8, 166, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2625, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2645, 8, 170, 10, 170, 12, 170, 2648, 9, 170, 3, 170, 2650, 8, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 5, 170, 2657, 8, 170, 10, 170, 12, 170, 2660, 9, 170, 3, 170, 2662, 8, 170, 1, 170, 3, 170, 2665, 8, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 2685, 8, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 2696, 8, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2703, 8, 173, 1, 174, 1, 174, 1, 174, 5, 174, 2708, 8, 174, 10, 174, 12, 174, 2711, 9, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 2724, 8, 175, 3, 175, 2726, 8, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 5, 177, 2733, 8, 177, 10, 177, 12, 177, 2736, 9, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 3, 178, 2744, 8, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 3, 179, 2751, 8, 179, 1, 180, 3, 180, 2754, 8, 180, 1, 180, 1, 180, 3, 180, 2758, 8, 180, 1, 180, 1, 180, 3, 180, 2762, 8, 180, 1, 180, 3, 180, 2765, 8, 180, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 10, 770, 1446, 1621, 1661, 1679, 1694, 1725, 1754, 1828, 2299, 6, 260, 280, 306, 310, 312, 328, 183, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 0, 33, 2, 0, 46, 46, 170, 170, 2, 0, 166, 166, 204, 204, 2, 0, 176, 176, 202, 202, 2, 0, 69, 69, 80, 80, 2, 0, 27, 27, 159, 159, 2, 0, 103, 103, 144, 144, 2, 0, 47, 47, 171, 171, 2, 0, 3, 3, 12, 12, 3, 0, 87, 87, 166, 166, 204, 204, 2, 0, 178, 178, 209, 209, 1, 0, 245, 248, 2, 0, 147, 147, 219, 223, 2, 0, 65, 65, 95, 95, 2, 0, 64, 64, 200, 200, 2, 0, 10, 10, 55, 55, 2, 0, 75, 75, 112, 112, 2, 0, 2, 2, 57, 57, 2, 0, 14, 14, 185, 185, 3, 0, 106, 106, 115, 115, 164, 164, 2, 0, 105, 105, 163, 163, 4, 0, 70, 70, 133, 133, 194, 194, 208, 208, 1, 0, 255, 256, 1, 0, 257, 259, 1, 0, 249, 254, 3, 0, 2, 2, 6, 6, 181, 181, 2, 0, 70, 70, 194, 194, 5, 0, 48, 49, 91, 92, 122, 125, 172, 173, 217, 218, 1, 0, 127, 130, 2, 0, 8, 8, 227, 244, 2, 0, 77, 77, 149, 149, 4, 0, 46, 46, 178, 178, 188, 188, 209, 209, 16, 0, 28, 29, 40, 40, 43, 43, 48, 48, 68, 68, 91, 91, 114, 114, 122, 122, 124, 124, 158, 158, 165, 165, 172, 172, 184, 184, 196, 196, 204, 204, 217, 217, 23, 0, 14, 14, 43, 44, 48, 49, 65, 65, 68, 68, 91, 91, 95, 95, 110, 110, 119, 119, 122, 125, 127, 130, 137, 137, 140, 140, 152, 153, 172, 173, 180, 180, 184, 185, 195, 195, 204, 204, 213, 213, 217, 217, 220, 220, 231, 231, 3093, 0, 369, 1, 0, 0, 0, 2, 374, 1, 0, 0, 0, 4, 400, 1, 0, 0, 0, 6, 402, 1, 0, 0, 0, 8, 413, 1, 0, 0, 0, 10, 415, 1, 0, 0, 0, 12, 454, 1, 0, 0, 0, 14, 476, 1, 0, 0, 0, 16, 531, 1, 0, 0, 0, 18, 551, 1, 0, 0, 0, 20, 565, 1, 0, 0, 0, 22, 569, 1, 0, 0, 0, 24, 631, 1, 0, 0, 0, 26, 679, 1, 0, 0, 0, 28, 681, 1, 0, 0, 0, 30, 689, 1, 0, 0, 0, 32, 709, 1, 0, 0, 0, 34, 729, 1, 0, 0, 0, 36, 736, 1, 0, 0, 0, 38, 745, 1, 0, 0, 0, 40, 753, 1, 0, 0, 0, 42, 775, 1, 0, 0, 0, 44, 785, 1, 0, 0, 0, 46, 803, 1, 0, 0, 0, 48, 824, 1, 0, 0, 0, 50, 845, 1, 0, 0, 0, 52, 851, 1, 0, 0, 0, 54, 868, 1, 0, 0, 0, 56, 877, 1, 0, 0, 0, 58, 884, 1, 0, 0, 0, 60, 892, 1, 0, 0, 0, 62, 899, 1, 0, 0, 0, 64, 906, 1, 0, 0, 0, 66, 915, 1, 0, 0, 0, 68, 926, 1, 0, 0, 0, 70, 928, 1, 0, 0, 0, 72, 948, 1, 0, 0, 0, 74, 965, 1, 0, 0, 0, 76, 967, 1, 0, 0, 0, 78, 976, 1, 0, 0, 0, 80, 983, 1, 0, 0, 0, 82, 992, 1, 0, 0, 0, 84, 1002, 1, 0, 0, 0, 86, 1025, 1, 0, 0, 0, 88, 1031, 1, 0, 0, 0, 90, 1033, 1, 0, 0, 0, 92, 1040, 1, 0, 0, 0, 94, 1052, 1, 0, 0, 0, 96, 1054, 1, 0, 0, 0, 98, 1061, 1, 0, 0, 0, 100, 1082, 1, 0, 0, 0, 102, 1111, 1, 0, 0, 0, 104, 1113, 1, 0, 0, 0, 106, 1122, 1, 0, 0, 0, 108, 1145, 1, 0, 0, 0, 110, 1164, 1, 0, 0, 0, 112, 1187, 1, 0, 0, 0, 114, 1189, 1, 0, 0, 0, 116, 1204, 1, 0, 0, 0, 118, 1223, 1, 0, 0, 0, 120, 1245, 1, 0, 0, 0, 122, 1250, 1, 0, 0, 0, 124, 1255, 1, 0, 0, 0, 126, 1260, 1, 0, 0, 0, 128, 1265, 1, 0, 0, 0, 130, 1272, 1, 0, 0, 0, 132, 1287, 1, 0, 0, 0, 134, 1293, 1, 0, 0, 0, 136, 1313, 1, 0, 0, 0, 138, 1315, 1, 0, 0, 0, 140, 1326, 1, 0, 0, 0, 142, 1337, 1, 0, 0, 0, 144, 1351, 1, 0, 0, 0, 146, 1353, 1, 0, 0, 0, 148, 1362, 1, 0, 0, 0, 150, 1371, 1, 0, 0, 0, 152, 1380, 1, 0, 0, 0, 154, 1383, 1, 0, 0, 0, 156, 1391, 1, 0, 0, 0, 158, 1407, 1, 0, 0, 0, 160, 1411, 1, 0, 0, 0, 162, 1435, 1, 0, 0, 0, 164, 1437, 1, 0, 0, 0, 166, 1453, 1, 0, 0, 0, 168, 1456, 1, 0, 0, 0, 170, 1460, 1, 0, 0, 0, 172, 1463, 1, 0, 0, 0, 174, 1467, 1, 0, 0, 0, 176, 1469, 1, 0, 0, 0, 178, 1471, 1, 0, 0, 0, 180, 1473, 1, 0, 0, 0, 182, 1475, 1, 0, 0, 0, 184, 1477, 1, 0, 0, 0, 186, 1479, 1, 0, 0, 0, 188, 1487, 1, 0, 0, 0, 190, 1497, 1, 0, 0, 0, 192, 1501, 1, 0, 0, 0, 194, 1505, 1, 0, 0, 0, 196, 1510, 1, 0, 0, 0, 198, 1551, 1, 0, 0, 0, 200, 1559, 1, 0, 0, 0, 202, 1563, 1, 0, 0, 0, 204, 1583, 1, 0, 0, 0, 206, 1587, 1, 0, 0, 0, 208, 1596, 1, 0, 0, 0, 210, 1626, 1, 0, 0, 0, 212, 1641, 1, 0, 0, 0, 214, 1647, 1, 0, 0, 0, 216, 1653, 1, 0, 0, 0, 218, 1655, 1, 0, 0, 0, 220, 1674, 1, 0, 0, 0, 222, 1684, 1, 0, 0, 0, 224, 1704, 1, 0, 0, 0, 226, 1714, 1, 0, 0, 0, 228, 1716, 1, 0, 0, 0, 230, 1718, 1, 0, 0, 0, 232, 1733, 1, 0, 0, 0, 234, 1735, 1, 0, 0, 0, 236, 1742, 1, 0, 0, 0, 238, 1774, 1, 0, 0, 0, 240, 1786, 1, 0, 0, 0, 242, 1793, 1, 0, 0, 0, 244, 1803, 1, 0, 0, 0, 246, 1805, 1, 0, 0, 0, 248, 1811, 1, 0, 0, 0, 250, 1822, 1, 0, 0, 0, 252, 1833, 1, 0, 0, 0, 254, 1841, 1, 0, 0, 0, 256, 1859, 1, 0, 0, 0, 258, 1864, 1, 0, 0, 0, 260, 1885, 1, 0, 0, 0, 262, 1921, 1, 0, 0, 0, 264, 1923, 1, 0, 0, 0, 266, 1931, 1, 0, 0, 0, 268, 1971, 1, 0, 0, 0, 270, 1981, 1, 0, 0, 0, 272, 1996, 1, 0, 0, 0, 274, 1998, 1, 0, 0, 0, 276, 2005, 1, 0, 0, 0, 278, 2019, 1, 0, 0, 0, 280, 2021, 1, 0, 0, 0, 282, 2071, 1, 0, 0, 0, 284, 2087, 1, 0, 0, 0, 286, 2089, 1, 0, 0, 0, 288, 2104, 1, 0, 0, 0, 290, 2106, 1, 0, 0, 0, 292, 2116, 1, 0, 0, 0, 294, 2134, 1, 0, 0, 0, 296, 2136, 1, 0, 0, 0, 298, 2140, 1, 0, 0, 0, 300, 2155, 1, 0, 0, 0, 302, 2161, 1, 0, 0, 0, 304, 2163, 1, 0, 0, 0, 306, 2172, 1, 0, 0, 0, 308, 2243, 1, 0, 0, 0, 310, 2249, 1, 0, 0, 0, 312, 2511, 1, 0, 0, 0, 314, 2532, 1, 0, 0, 0, 316, 2534, 1, 0, 0, 0, 318, 2536, 1, 0, 0, 0, 320, 2538, 1, 0, 0, 0, 322, 2554, 1, 0, 0, 0, 324, 2556, 1, 0, 0, 0, 326, 2558, 1, 0, 0, 0, 328, 2605, 1, 0, 0, 0, 330, 2614, 1, 0, 0, 0, 332, 2618, 1, 0, 0, 0, 334, 2624, 1, 0, 0, 0, 336, 2626, 1, 0, 0, 0, 338, 2631, 1, 0, 0, 0, 340, 2637, 1, 0, 0, 0, 342, 2684, 1, 0, 0, 0, 344, 2695, 1, 0, 0, 0, 346, 2702, 1, 0, 0, 0, 348, 2704, 1, 0, 0, 0, 350, 2725, 1, 0, 0, 0, 352, 2727, 1, 0, 0, 0, 354, 2729, 1, 0, 0, 0, 356, 2743, 1, 0, 0, 0, 358, 2750, 1, 0, 0, 0, 360, 2764, 1, 0, 0, 0, 362, 2766, 1, 0, 0, 0, 364, 2768, 1, 0, 0, 0, 366, 368, 3, 2, 1, 0, 367, 366, 1, 0, 0, 0, 368, 371, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 372, 373, 5, 0, 0, 1, 373, 1, 1, 0, 0, 0, 374, 376, 3, 4, 2, 0, 375, 377, 5, 262, 0, 0, 376, 375, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 3, 1, 0, 0, 0, 378, 401, 3, 204, 102, 0, 379, 401, 3, 6, 3, 0, 380, 401, 3, 8, 4, 0, 381, 401, 3, 26, 13, 0, 382, 401, 3, 64, 32, 0, 383, 401, 3, 66, 33, 0, 384, 401, 3, 68, 34, 0, 385, 401, 3, 74, 37, 0, 386, 401, 3, 88, 44, 0, 387, 401, 3, 94, 47, 0, 388, 401, 3, 100, 50, 0, 389, 401, 3, 102, 51, 0, 390, 401, 3, 108, 54, 0, 391, 401, 3, 110, 55, 0, 392, 401, 3, 112, 56, 0, 393, 401, 3, 144, 72, 0, 394, 401, 3, 152, 76, 0, 395, 401, 3, 154, 77, 0, 396, 401, 3, 156, 78, 0, 397, 401, 3, 158, 79, 0, 398, 401, 3, 160, 80, 0, 399, 401, 3, 162, 81, 0, 400, 378, 1, 0, 0, 0, 400, 379, 1, 0, 0, 0, 400, 380, 1, 0, 0, 0, 400, 381, 1, 0, 0, 0, 400, 382, 1, 0, 0, 0, 400, 383, 1, 0, 0, 0, 400, 384, 1, 0, 0, 0, 400, 385, 1, 0, 0, 0, 400, 386, 1, 0, 0, 0, 400, 387, 1, 0, 0, 0, 400, 388, 1, 0, 0, 0, 400, 389, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 391, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 393, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 395, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 397, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 399, 1, 0, 0, 0, 401, 5, 1, 0, 0, 0, 402, 403, 5, 203, 0, 0, 403, 404, 3, 184, 92, 0, 404, 7, 1, 0, 0, 0, 405, 414, 3, 18, 9, 0, 406, 414, 3, 20, 10, 0, 407, 414, 3, 22, 11, 0, 408, 414, 3, 24, 12, 0, 409, 414, 3, 16, 8, 0, 410, 414, 3, 14, 7, 0, 411, 414, 3, 12, 6, 0, 412, 414, 3, 10, 5, 0, 413, 405, 1, 0, 0, 0, 413, 406, 1, 0, 0, 0, 413, 407, 1, 0, 0, 0, 413, 408, 1, 0, 0, 0, 413, 409, 1, 0, 0, 0, 413, 410, 1, 0, 0, 0, 413, 411, 1, 0, 0, 0, 413, 412, 1, 0, 0, 0, 414, 9, 1, 0, 0, 0, 415, 417, 5, 37, 0, 0, 416, 418, 5, 19, 0, 0, 417, 416, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 5, 188, 0, 0, 420, 422, 3, 172, 86, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 439, 3, 174, 87, 0, 424, 425, 5, 265, 0, 0, 425, 430, 3, 214, 107, 0, 426, 427, 5, 263, 0, 0, 427, 429, 3, 214, 107, 0, 428, 426, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 435, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 434, 5, 263, 0, 0, 434, 436, 3, 208, 104, 0, 435, 433, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 5, 266, 0, 0, 438, 440, 1, 0, 0, 0, 439, 424, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 447, 1, 0, 0, 0, 441, 442, 5, 17, 0, 0, 442, 445, 5, 26, 0, 0, 443, 446, 3, 292, 146, 0, 444, 446, 3, 250, 125, 0, 445, 443, 1, 0, 0, 0, 445, 444, 1, 0, 0, 0, 446, 448, 1, 0, 0, 0, 447, 441, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 452, 3, 196, 98, 0, 450, 451, 5, 9, 0, 0, 451, 453, 3, 204, 102, 0, 452, 450, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 11, 1, 0, 0, 0, 454, 456, 5, 37, 0, 0, 455, 457, 5, 19, 0, 0, 456, 455, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 460, 5, 188, 0, 0, 459, 461, 3, 172, 86, 0, 460, 459, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 463, 3, 174, 87, 0, 463, 467, 5, 115, 0, 0, 464, 468, 3, 186, 93, 0, 465, 466, 5, 147, 0, 0, 466, 468, 3, 314, 157, 0, 467, 464, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 468, 472, 1, 0, 0, 0, 469, 470, 5, 17, 0, 0, 470, 471, 5, 26, 0, 0, 471, 473, 3, 250, 125, 0, 472, 469, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 475, 3, 196, 98, 0, 475, 13, 1, 0, 0, 0, 476, 478, 5, 37, 0, 0, 477, 479, 5, 19, 0, 0, 478, 477, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 482, 5, 188, 0, 0, 481, 483, 3, 172, 86, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 502, 3, 174, 87, 0, 485, 486, 5, 265, 0, 0, 486, 491, 3, 216, 108, 0, 487, 488, 5, 263, 0, 0, 488, 490, 3, 216, 108, 0, 489, 487, 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, 492, 498, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 494, 495, 5, 263, 0, 0, 495, 496, 5, 150, 0, 0, 496, 497, 5, 110, 0, 0, 497, 499, 3, 292, 146, 0, 498, 494, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 5, 266, 0, 0, 501, 503, 1, 0, 0, 0, 502, 485, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 509, 1, 0, 0, 0, 504, 505, 5, 150, 0, 0, 505, 507, 5, 110, 0, 0, 506, 508, 3, 292, 146, 0, 507, 506, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 510, 1, 0, 0, 0, 509, 504, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 514, 1, 0, 0, 0, 511, 512, 5, 145, 0, 0, 512, 513, 5, 26, 0, 0, 513, 515, 3, 232, 116, 0, 514, 511, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 518, 1, 0, 0, 0, 516, 517, 5, 34, 0, 0, 517, 519, 3, 314, 157, 0, 518, 516, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 5, 23, 0, 0, 521, 522, 5, 9, 0, 0, 522, 525, 5, 111, 0, 0, 523, 524, 5, 25, 0, 0, 524, 526, 3, 248, 124, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 529, 1, 0, 0, 0, 527, 528, 5, 9, 0, 0, 528, 530, 3, 204, 102, 0, 529, 527, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 15, 1, 0, 0, 0, 531, 532, 5, 37, 0, 0, 532, 534, 5, 212, 0, 0, 533, 535, 3, 172, 86, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 538, 3, 178, 89, 0, 537, 539, 3, 202, 101, 0, 538, 537, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 541, 5, 34, 0, 0, 541, 543, 3, 314, 157, 0, 542, 540, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 546, 1, 0, 0, 0, 544, 545, 5, 25, 0, 0, 545, 547, 3, 248, 124, 0, 546, 544, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 5, 9, 0, 0, 549, 550, 3, 204, 102, 0, 550, 17, 1, 0, 0, 0, 551, 552, 5, 37, 0, 0, 552, 554, 7, 0, 0, 0, 553, 555, 3, 172, 86, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 559, 3, 176, 88, 0, 557, 558, 5, 34, 0, 0, 558, 560, 3, 314, 157, 0, 559, 557, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 563, 1, 0, 0, 0, 561, 562, 5, 24, 0, 0, 562, 564, 3, 314, 157, 0, 563, 561, 1, 0, 0, 0, 563, 564, 1, 0, 0, 0, 564, 19, 1, 0, 0, 0, 565, 566, 5, 37, 0, 0, 566, 567, 5, 166, 0, 0, 567, 568, 3, 358, 179, 0, 568, 21, 1, 0, 0, 0, 569, 571, 5, 37, 0, 0, 570, 572, 5, 12, 0, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 575, 5, 84, 0, 0, 574, 576, 3, 172, 86, 0, 575, 574, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 590, 3, 180, 90, 0, 578, 587, 5, 265, 0, 0, 579, 584, 3, 328, 164, 0, 580, 581, 5, 263, 0, 0, 581, 583, 3, 328, 164, 0, 582, 580, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 579, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 5, 266, 0, 0, 590, 578, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 5, 160, 0, 0, 593, 596, 3, 328, 164, 0, 594, 595, 5, 102, 0, 0, 595, 597, 3, 328, 164, 0, 596, 594, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 5, 24, 0, 0, 599, 603, 5, 274, 0, 0, 600, 601, 5, 104, 0, 0, 601, 602, 5, 249, 0, 0, 602, 604, 5, 274, 0, 0, 603, 600, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 5, 206, 0, 0, 606, 607, 5, 249, 0, 0, 607, 608, 5, 274, 0, 0, 608, 609, 5, 126, 0, 0, 609, 610, 5, 249, 0, 0, 610, 614, 5, 274, 0, 0, 611, 612, 5, 18, 0, 0, 612, 613, 5, 249, 0, 0, 613, 615, 5, 274, 0, 0, 614, 611, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 619, 1, 0, 0, 0, 616, 617, 5, 20, 0, 0, 617, 618, 5, 249, 0, 0, 618, 620, 5, 274, 0, 0, 619, 616, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 624, 1, 0, 0, 0, 621, 622, 5, 187, 0, 0, 622, 623, 5, 249, 0, 0, 623, 625, 5, 274, 0, 0, 624, 621, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 629, 1, 0, 0, 0, 626, 627, 5, 76, 0, 0, 627, 628, 5, 249, 0, 0, 628, 630, 5, 274, 0, 0, 629, 626, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 23, 1, 0, 0, 0, 631, 632, 5, 37, 0, 0, 632, 634, 5, 84, 0, 0, 633, 635, 3, 172, 86, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 649, 3, 180, 90, 0, 637, 646, 5, 265, 0, 0, 638, 643, 3, 328, 164, 0, 639, 640, 5, 263, 0, 0, 640, 642, 3, 328, 164, 0, 641, 639, 1, 0, 0, 0, 642, 645, 1, 0, 0, 0, 643, 641, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 647, 1, 0, 0, 0, 645, 643, 1, 0, 0, 0, 646, 638, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 650, 5, 266, 0, 0, 649, 637, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 653, 1, 0, 0, 0, 651, 652, 5, 160, 0, 0, 652, 654, 3, 328, 164, 0, 653, 651, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 656, 5, 24, 0, 0, 656, 657, 5, 274, 0, 0, 657, 658, 5, 186, 0, 0, 658, 659, 5, 249, 0, 0, 659, 660, 3, 314, 157, 0, 660, 25, 1, 0, 0, 0, 661, 680, 3, 28, 14, 0, 662, 680, 3, 62, 31, 0, 663, 680, 3, 60, 30, 0, 664, 680, 3, 58, 29, 0, 665, 680, 3, 54, 27, 0, 666, 680, 3, 56, 28, 0, 667, 680, 3, 52, 26, 0, 668, 680, 3, 48, 24, 0, 669, 680, 3, 50, 25, 0, 670, 680, 3, 46, 23, 0, 671, 680, 3, 44, 22, 0, 672, 680, 3, 42, 21, 0, 673, 680, 3, 40, 20, 0, 674, 680, 3, 34, 17, 0, 675, 680, 3, 30, 15, 0, 676, 680, 3, 32, 16, 0, 677, 680, 3, 36, 18, 0, 678, 680, 3, 38, 19, 0, 679, 661, 1, 0, 0, 0, 679, 662, 1, 0, 0, 0, 679, 663, 1, 0, 0, 0, 679, 664, 1, 0, 0, 0, 679, 665, 1, 0, 0, 0, 679, 666, 1, 0, 0, 0, 679, 667, 1, 0, 0, 0, 679, 668, 1, 0, 0, 0, 679, 669, 1, 0, 0, 0, 679, 670, 1, 0, 0, 0, 679, 671, 1, 0, 0, 0, 679, 672, 1, 0, 0, 0, 679, 673, 1, 0, 0, 0, 679, 674, 1, 0, 0, 0, 679, 675, 1, 0, 0, 0, 679, 676, 1, 0, 0, 0, 679, 677, 1, 0, 0, 0, 679, 678, 1, 0, 0, 0, 680, 27, 1, 0, 0, 0, 681, 682, 5, 4, 0, 0, 682, 683, 5, 46, 0, 0, 683, 684, 3, 184, 92, 0, 684, 685, 5, 176, 0, 0, 685, 686, 5, 142, 0, 0, 686, 687, 7, 1, 0, 0, 687, 688, 3, 358, 179, 0, 688, 29, 1, 0, 0, 0, 689, 690, 5, 4, 0, 0, 690, 691, 5, 188, 0, 0, 691, 692, 3, 186, 93, 0, 692, 693, 5, 176, 0, 0, 693, 694, 5, 32, 0, 0, 694, 695, 5, 182, 0, 0, 695, 696, 3, 192, 96, 0, 696, 697, 5, 265, 0, 0, 697, 698, 3, 228, 114, 0, 698, 699, 5, 249, 0, 0, 699, 705, 3, 314, 157, 0, 700, 701, 5, 263, 0, 0, 701, 702, 3, 228, 114, 0, 702, 703, 5, 249, 0, 0, 703, 704, 3, 314, 157, 0, 704, 706, 1, 0, 0, 0, 705, 700, 1, 0, 0, 0, 705, 706, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 5, 266, 0, 0, 708, 31, 1, 0, 0, 0, 709, 710, 5, 4, 0, 0, 710, 711, 5, 188, 0, 0, 711, 714, 3, 186, 93, 0, 712, 713, 5, 145, 0, 0, 713, 715, 3, 304, 152, 0, 714, 712, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 727, 5, 176, 0, 0, 717, 718, 5, 30, 0, 0, 718, 719, 5, 94, 0, 0, 719, 724, 3, 314, 157, 0, 720, 721, 5, 216, 0, 0, 721, 722, 5, 151, 0, 0, 722, 723, 5, 249, 0, 0, 723, 725, 3, 360, 180, 0, 724, 720, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 728, 1, 0, 0, 0, 726, 728, 5, 197, 0, 0, 727, 717, 1, 0, 0, 0, 727, 726, 1, 0, 0, 0, 728, 33, 1, 0, 0, 0, 729, 730, 5, 4, 0, 0, 730, 731, 5, 188, 0, 0, 731, 732, 3, 186, 93, 0, 732, 733, 5, 31, 0, 0, 733, 734, 3, 192, 96, 0, 734, 735, 3, 220, 110, 0, 735, 35, 1, 0, 0, 0, 736, 737, 5, 4, 0, 0, 737, 738, 5, 188, 0, 0, 738, 739, 3, 186, 93, 0, 739, 741, 5, 58, 0, 0, 740, 742, 5, 32, 0, 0, 741, 740, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 3, 192, 96, 0, 744, 37, 1, 0, 0, 0, 745, 746, 5, 4, 0, 0, 746, 747, 5, 188, 0, 0, 747, 748, 3, 186, 93, 0, 748, 749, 5, 176, 0, 0, 749, 750, 5, 142, 0, 0, 750, 751, 7, 1, 0, 0, 751, 752, 3, 358, 179, 0, 752, 39, 1, 0, 0, 0, 753, 754, 5, 4, 0, 0, 754, 755, 5, 188, 0, 0, 755, 761, 3, 186, 93, 0, 756, 762, 5, 158, 0, 0, 757, 759, 5, 1, 0, 0, 758, 760, 3, 172, 86, 0, 759, 758, 1, 0, 0, 0, 759, 760, 1, 0, 0, 0, 760, 762, 1, 0, 0, 0, 761, 756, 1, 0, 0, 0, 761, 757, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 5, 33, 0, 0, 764, 765, 5, 265, 0, 0, 765, 770, 3, 220, 110, 0, 766, 767, 5, 263, 0, 0, 767, 769, 3, 220, 110, 0, 768, 766, 1, 0, 0, 0, 769, 772, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 770, 768, 1, 0, 0, 0, 771, 773, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 773, 774, 5, 266, 0, 0, 774, 41, 1, 0, 0, 0, 775, 776, 5, 4, 0, 0, 776, 777, 5, 188, 0, 0, 777, 778, 3, 186, 93, 0, 778, 779, 5, 1, 0, 0, 779, 781, 5, 32, 0, 0, 780, 782, 3, 172, 86, 0, 781, 780, 1, 0, 0, 0, 781, 782, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 784, 3, 222, 111, 0, 784, 43, 1, 0, 0, 0, 785, 786, 5, 4, 0, 0, 786, 787, 5, 188, 0, 0, 787, 788, 3, 186, 93, 0, 788, 790, 5, 4, 0, 0, 789, 791, 5, 32, 0, 0, 790, 789, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 801, 3, 192, 96, 0, 793, 797, 5, 176, 0, 0, 794, 798, 3, 226, 113, 0, 795, 796, 5, 34, 0, 0, 796, 798, 3, 314, 157, 0, 797, 794, 1, 0, 0, 0, 797, 795, 1, 0, 0, 0, 798, 802, 1, 0, 0, 0, 799, 800, 5, 58, 0, 0, 800, 802, 5, 51, 0, 0, 801, 793, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 45, 1, 0, 0, 0, 803, 804, 5, 4, 0, 0, 804, 805, 5, 188, 0, 0, 805, 806, 3, 186, 93, 0, 806, 808, 5, 1, 0, 0, 807, 809, 3, 172, 86, 0, 808, 807, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 822, 1, 0, 0, 0, 810, 811, 5, 145, 0, 0, 811, 814, 3, 304, 152, 0, 812, 813, 5, 24, 0, 0, 813, 815, 3, 314, 157, 0, 814, 812, 1, 0, 0, 0, 814, 815, 1, 0, 0, 0, 815, 817, 1, 0, 0, 0, 816, 818, 3, 240, 120, 0, 817, 816, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 823, 1, 0, 0, 0, 819, 820, 5, 154, 0, 0, 820, 821, 5, 145, 0, 0, 821, 823, 3, 238, 119, 0, 822, 810, 1, 0, 0, 0, 822, 819, 1, 0, 0, 0, 823, 47, 1, 0, 0, 0, 824, 825, 5, 4, 0, 0, 825, 826, 5, 188, 0, 0, 826, 829, 3, 186, 93, 0, 827, 828, 5, 145, 0, 0, 828, 830, 3, 304, 152, 0, 829, 827, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 843, 5, 176, 0, 0, 832, 833, 5, 72, 0, 0, 833, 844, 3, 230, 115, 0, 834, 835, 5, 168, 0, 0, 835, 836, 5, 79, 0, 0, 836, 844, 3, 254, 127, 0, 837, 838, 5, 24, 0, 0, 838, 844, 3, 314, 157, 0, 839, 840, 5, 25, 0, 0, 840, 844, 3, 248, 124, 0, 841, 842, 5, 175, 0, 0, 842, 844, 3, 248, 124, 0, 843, 832, 1, 0, 0, 0, 843, 834, 1, 0, 0, 0, 843, 837, 1, 0, 0, 0, 843, 839, 1, 0, 0, 0, 843, 841, 1, 0, 0, 0, 844, 49, 1, 0, 0, 0, 845, 846, 5, 4, 0, 0, 846, 847, 5, 188, 0, 0, 847, 848, 3, 186, 93, 0, 848, 849, 5, 155, 0, 0, 849, 850, 5, 146, 0, 0, 850, 51, 1, 0, 0, 0, 851, 852, 5, 4, 0, 0, 852, 853, 5, 188, 0, 0, 853, 854, 3, 186, 93, 0, 854, 856, 5, 58, 0, 0, 855, 857, 3, 170, 85, 0, 856, 855, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 866, 1, 0, 0, 0, 858, 859, 5, 145, 0, 0, 859, 861, 3, 304, 152, 0, 860, 862, 5, 22, 0, 0, 861, 860, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 867, 1, 0, 0, 0, 863, 864, 5, 154, 0, 0, 864, 865, 5, 145, 0, 0, 865, 867, 3, 238, 119, 0, 866, 858, 1, 0, 0, 0, 866, 863, 1, 0, 0, 0, 867, 53, 1, 0, 0, 0, 868, 869, 5, 4, 0, 0, 869, 870, 5, 212, 0, 0, 870, 872, 3, 188, 94, 0, 871, 873, 3, 202, 101, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 875, 5, 9, 0, 0, 875, 876, 3, 204, 102, 0, 876, 55, 1, 0, 0, 0, 877, 878, 5, 4, 0, 0, 878, 879, 5, 212, 0, 0, 879, 880, 3, 188, 94, 0, 880, 881, 5, 156, 0, 0, 881, 882, 5, 193, 0, 0, 882, 883, 3, 188, 94, 0, 883, 57, 1, 0, 0, 0, 884, 885, 5, 4, 0, 0, 885, 886, 5, 212, 0, 0, 886, 887, 3, 188, 94, 0, 887, 888, 5, 176, 0, 0, 888, 889, 5, 142, 0, 0, 889, 890, 7, 1, 0, 0, 890, 891, 3, 354, 177, 0, 891, 59, 1, 0, 0, 0, 892, 893, 5, 4, 0, 0, 893, 894, 5, 188, 0, 0, 894, 895, 3, 186, 93, 0, 895, 896, 5, 156, 0, 0, 896, 897, 5, 193, 0, 0, 897, 898, 3, 186, 93, 0, 898, 61, 1, 0, 0, 0, 899, 900, 5, 4, 0, 0, 900, 901, 5, 212, 0, 0, 901, 902, 3, 188, 94, 0, 902, 903, 7, 2, 0, 0, 903, 904, 5, 25, 0, 0, 904, 905, 3, 248, 124, 0, 905, 63, 1, 0, 0, 0, 906, 908, 5, 196, 0, 0, 907, 909, 5, 188, 0, 0, 908, 907, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 911, 1, 0, 0, 0, 910, 912, 3, 170, 85, 0, 911, 910, 1, 0, 0, 0, 911, 912, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 914, 3, 186, 93, 0, 914, 65, 1, 0, 0, 0, 915, 917, 5, 56, 0, 0, 916, 918, 5, 46, 0, 0, 917, 916, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 920, 1, 0, 0, 0, 919, 921, 7, 3, 0, 0, 920, 919, 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 922, 1, 0, 0, 0, 922, 923, 3, 354, 177, 0, 923, 67, 1, 0, 0, 0, 924, 927, 3, 70, 35, 0, 925, 927, 3, 72, 36, 0, 926, 924, 1, 0, 0, 0, 926, 925, 1, 0, 0, 0, 927, 69, 1, 0, 0, 0, 928, 929, 5, 36, 0, 0, 929, 930, 5, 182, 0, 0, 930, 932, 3, 186, 93, 0, 931, 933, 3, 292, 146, 0, 932, 931, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 946, 1, 0, 0, 0, 934, 935, 5, 190, 0, 0, 935, 936, 5, 185, 0, 0, 936, 937, 5, 265, 0, 0, 937, 938, 3, 360, 180, 0, 938, 944, 5, 266, 0, 0, 939, 940, 5, 157, 0, 0, 940, 941, 5, 265, 0, 0, 941, 942, 3, 360, 180, 0, 942, 943, 5, 266, 0, 0, 943, 945, 1, 0, 0, 0, 944, 939, 1, 0, 0, 0, 944, 945, 1, 0, 0, 0, 945, 947, 1, 0, 0, 0, 946, 934, 1, 0, 0, 0, 946, 947, 1, 0, 0, 0, 947, 71, 1, 0, 0, 0, 948, 949, 5, 36, 0, 0, 949, 950, 5, 96, 0, 0, 950, 951, 5, 182, 0, 0, 951, 957, 3, 186, 93, 0, 952, 953, 5, 145, 0, 0, 953, 954, 5, 265, 0, 0, 954, 955, 3, 304, 152, 0, 955, 956, 5, 266, 0, 0, 956, 958, 1, 0, 0, 0, 957, 952, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 73, 1, 0, 0, 0, 959, 966, 3, 86, 43, 0, 960, 966, 3, 84, 42, 0, 961, 966, 3, 82, 41, 0, 962, 966, 3, 78, 39, 0, 963, 966, 3, 80, 40, 0, 964, 966, 3, 76, 38, 0, 965, 959, 1, 0, 0, 0, 965, 960, 1, 0, 0, 0, 965, 961, 1, 0, 0, 0, 965, 962, 1, 0, 0, 0, 965, 963, 1, 0, 0, 0, 965, 964, 1, 0, 0, 0, 966, 75, 1, 0, 0, 0, 967, 968, 5, 58, 0, 0, 968, 970, 7, 0, 0, 0, 969, 971, 3, 170, 85, 0, 970, 969, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 3, 184, 92, 0, 973, 975, 7, 4, 0, 0, 974, 973, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 77, 1, 0, 0, 0, 976, 977, 5, 58, 0, 0, 977, 979, 5, 212, 0, 0, 978, 980, 3, 170, 85, 0, 979, 978, 1, 0, 0, 0, 979, 980, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 982, 3, 188, 94, 0, 982, 79, 1, 0, 0, 0, 983, 984, 5, 58, 0, 0, 984, 986, 5, 188, 0, 0, 985, 987, 3, 170, 85, 0, 986, 985, 1, 0, 0, 0, 986, 987, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 990, 3, 186, 93, 0, 989, 991, 5, 22, 0, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 81, 1, 0, 0, 0, 992, 994, 5, 58, 0, 0, 993, 995, 5, 96, 0, 0, 994, 993, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 997, 5, 182, 0, 0, 997, 1000, 3, 186, 93, 0, 998, 999, 5, 145, 0, 0, 999, 1001, 3, 304, 152, 0, 1000, 998, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 83, 1, 0, 0, 0, 1002, 1004, 5, 58, 0, 0, 1003, 1005, 5, 12, 0, 0, 1004, 1003, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1008, 5, 84, 0, 0, 1007, 1009, 3, 170, 85, 0, 1008, 1007, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1010, 1, 0, 0, 0, 1010, 1023, 3, 190, 95, 0, 1011, 1020, 5, 265, 0, 0, 1012, 1017, 3, 328, 164, 0, 1013, 1014, 5, 263, 0, 0, 1014, 1016, 3, 328, 164, 0, 1015, 1013, 1, 0, 0, 0, 1016, 1019, 1, 0, 0, 0, 1017, 1015, 1, 0, 0, 0, 1017, 1018, 1, 0, 0, 0, 1018, 1021, 1, 0, 0, 0, 1019, 1017, 1, 0, 0, 0, 1020, 1012, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1024, 5, 266, 0, 0, 1023, 1011, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 85, 1, 0, 0, 0, 1025, 1026, 5, 58, 0, 0, 1026, 1027, 5, 166, 0, 0, 1027, 1028, 3, 358, 179, 0, 1028, 87, 1, 0, 0, 0, 1029, 1032, 3, 90, 45, 0, 1030, 1032, 3, 92, 46, 0, 1031, 1029, 1, 0, 0, 0, 1031, 1030, 1, 0, 0, 0, 1032, 89, 1, 0, 0, 0, 1033, 1034, 5, 86, 0, 0, 1034, 1035, 5, 166, 0, 0, 1035, 1036, 3, 358, 179, 0, 1036, 1037, 5, 193, 0, 0, 1037, 1038, 5, 87, 0, 0, 1038, 1039, 3, 358, 179, 0, 1039, 91, 1, 0, 0, 0, 1040, 1041, 5, 86, 0, 0, 1041, 1042, 3, 350, 175, 0, 1042, 1043, 5, 136, 0, 0, 1043, 1045, 3, 352, 176, 0, 1044, 1046, 3, 354, 177, 0, 1045, 1044, 1, 0, 0, 0, 1045, 1046, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1048, 5, 193, 0, 0, 1048, 1049, 3, 356, 178, 0, 1049, 93, 1, 0, 0, 0, 1050, 1053, 3, 96, 48, 0, 1051, 1053, 3, 98, 49, 0, 1052, 1050, 1, 0, 0, 0, 1052, 1051, 1, 0, 0, 0, 1053, 95, 1, 0, 0, 0, 1054, 1055, 5, 161, 0, 0, 1055, 1056, 5, 166, 0, 0, 1056, 1057, 3, 358, 179, 0, 1057, 1058, 5, 82, 0, 0, 1058, 1059, 5, 87, 0, 0, 1059, 1060, 3, 358, 179, 0, 1060, 97, 1, 0, 0, 0, 1061, 1065, 5, 161, 0, 0, 1062, 1063, 5, 86, 0, 0, 1063, 1064, 5, 137, 0, 0, 1064, 1066, 5, 78, 0, 0, 1065, 1062, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1068, 3, 350, 175, 0, 1068, 1069, 5, 136, 0, 0, 1069, 1071, 3, 352, 176, 0, 1070, 1072, 3, 354, 177, 0, 1071, 1070, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1079, 5, 82, 0, 0, 1074, 1080, 3, 356, 178, 0, 1075, 1077, 5, 166, 0, 0, 1076, 1075, 1, 0, 0, 0, 1076, 1077, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1080, 3, 358, 179, 0, 1079, 1074, 1, 0, 0, 0, 1079, 1076, 1, 0, 0, 0, 1080, 99, 1, 0, 0, 0, 1081, 1083, 3, 206, 103, 0, 1082, 1081, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1084, 1, 0, 0, 0, 1084, 1085, 5, 99, 0, 0, 1085, 1087, 7, 5, 0, 0, 1086, 1088, 5, 188, 0, 0, 1087, 1086, 1, 0, 0, 0, 1087, 1088, 1, 0, 0, 0, 1088, 1089, 1, 0, 0, 0, 1089, 1091, 3, 186, 93, 0, 1090, 1092, 3, 292, 146, 0, 1091, 1090, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1105, 1, 0, 0, 0, 1093, 1094, 5, 145, 0, 0, 1094, 1095, 5, 265, 0, 0, 1095, 1100, 3, 304, 152, 0, 1096, 1097, 5, 263, 0, 0, 1097, 1099, 3, 304, 152, 0, 1098, 1096, 1, 0, 0, 0, 1099, 1102, 1, 0, 0, 0, 1100, 1098, 1, 0, 0, 0, 1100, 1101, 1, 0, 0, 0, 1101, 1103, 1, 0, 0, 0, 1102, 1100, 1, 0, 0, 0, 1103, 1104, 5, 266, 0, 0, 1104, 1106, 1, 0, 0, 0, 1105, 1093, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1108, 3, 204, 102, 0, 1108, 101, 1, 0, 0, 0, 1109, 1112, 3, 104, 52, 0, 1110, 1112, 3, 106, 53, 0, 1111, 1109, 1, 0, 0, 0, 1111, 1110, 1, 0, 0, 0, 1112, 103, 1, 0, 0, 0, 1113, 1115, 5, 50, 0, 0, 1114, 1116, 5, 82, 0, 0, 1115, 1114, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1117, 1120, 3, 186, 93, 0, 1118, 1119, 5, 215, 0, 0, 1119, 1121, 3, 306, 153, 0, 1120, 1118, 1, 0, 0, 0, 1120, 1121, 1, 0, 0, 0, 1121, 105, 1, 0, 0, 0, 1122, 1123, 5, 50, 0, 0, 1123, 1128, 3, 186, 93, 0, 1124, 1126, 5, 9, 0, 0, 1125, 1124, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1126, 1127, 1, 0, 0, 0, 1127, 1129, 3, 358, 179, 0, 1128, 1125, 1, 0, 0, 0, 1128, 1129, 1, 0, 0, 0, 1129, 1130, 1, 0, 0, 0, 1130, 1139, 5, 82, 0, 0, 1131, 1136, 3, 280, 140, 0, 1132, 1133, 5, 263, 0, 0, 1133, 1135, 3, 280, 140, 0, 1134, 1132, 1, 0, 0, 0, 1135, 1138, 1, 0, 0, 0, 1136, 1134, 1, 0, 0, 0, 1136, 1137, 1, 0, 0, 0, 1137, 1140, 1, 0, 0, 0, 1138, 1136, 1, 0, 0, 0, 1139, 1131, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1143, 1, 0, 0, 0, 1141, 1142, 5, 215, 0, 0, 1142, 1144, 3, 306, 153, 0, 1143, 1141, 1, 0, 0, 0, 1143, 1144, 1, 0, 0, 0, 1144, 107, 1, 0, 0, 0, 1145, 1146, 5, 54, 0, 0, 1146, 1147, 3, 186, 93, 0, 1147, 1148, 5, 176, 0, 0, 1148, 1158, 3, 198, 99, 0, 1149, 1150, 5, 82, 0, 0, 1150, 1155, 3, 280, 140, 0, 1151, 1152, 5, 263, 0, 0, 1152, 1154, 3, 280, 140, 0, 1153, 1151, 1, 0, 0, 0, 1154, 1157, 1, 0, 0, 0, 1155, 1153, 1, 0, 0, 0, 1155, 1156, 1, 0, 0, 0, 1156, 1159, 1, 0, 0, 0, 1157, 1155, 1, 0, 0, 0, 1158, 1149, 1, 0, 0, 0, 1158, 1159, 1, 0, 0, 0, 1159, 1162, 1, 0, 0, 0, 1160, 1161, 5, 215, 0, 0, 1161, 1163, 3, 306, 153, 0, 1162, 1160, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, 109, 1, 0, 0, 0, 1164, 1165, 5, 207, 0, 0, 1165, 1167, 5, 103, 0, 0, 1166, 1168, 5, 188, 0, 0, 1167, 1166, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1171, 3, 186, 93, 0, 1170, 1172, 3, 292, 146, 0, 1171, 1170, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1173, 1174, 3, 204, 102, 0, 1174, 111, 1, 0, 0, 0, 1175, 1188, 3, 132, 66, 0, 1176, 1188, 3, 134, 67, 0, 1177, 1188, 3, 136, 68, 0, 1178, 1188, 3, 130, 65, 0, 1179, 1188, 3, 128, 64, 0, 1180, 1188, 3, 126, 63, 0, 1181, 1188, 3, 124, 62, 0, 1182, 1188, 3, 122, 61, 0, 1183, 1188, 3, 120, 60, 0, 1184, 1188, 3, 118, 59, 0, 1185, 1188, 3, 116, 58, 0, 1186, 1188, 3, 114, 57, 0, 1187, 1175, 1, 0, 0, 0, 1187, 1176, 1, 0, 0, 0, 1187, 1177, 1, 0, 0, 0, 1187, 1178, 1, 0, 0, 0, 1187, 1179, 1, 0, 0, 0, 1187, 1180, 1, 0, 0, 0, 1187, 1181, 1, 0, 0, 0, 1187, 1182, 1, 0, 0, 0, 1187, 1183, 1, 0, 0, 0, 1187, 1184, 1, 0, 0, 0, 1187, 1185, 1, 0, 0, 0, 1187, 1186, 1, 0, 0, 0, 1188, 113, 1, 0, 0, 0, 1189, 1190, 5, 179, 0, 0, 1190, 1202, 7, 6, 0, 0, 1191, 1193, 5, 115, 0, 0, 1192, 1191, 1, 0, 0, 0, 1192, 1193, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1199, 3, 314, 157, 0, 1195, 1196, 5, 271, 0, 0, 1196, 1198, 3, 314, 157, 0, 1197, 1195, 1, 0, 0, 0, 1198, 1201, 1, 0, 0, 0, 1199, 1197, 1, 0, 0, 0, 1199, 1200, 1, 0, 0, 0, 1200, 1203, 1, 0, 0, 0, 1201, 1199, 1, 0, 0, 0, 1202, 1192, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, 0, 1203, 115, 1, 0, 0, 0, 1204, 1205, 5, 179, 0, 0, 1205, 1208, 5, 189, 0, 0, 1206, 1207, 5, 94, 0, 0, 1207, 1209, 3, 186, 93, 0, 1208, 1206, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 1221, 1, 0, 0, 0, 1210, 1212, 5, 115, 0, 0, 1211, 1210, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 1, 0, 0, 0, 1213, 1218, 3, 314, 157, 0, 1214, 1215, 5, 271, 0, 0, 1215, 1217, 3, 314, 157, 0, 1216, 1214, 1, 0, 0, 0, 1217, 1220, 1, 0, 0, 0, 1218, 1216, 1, 0, 0, 0, 1218, 1219, 1, 0, 0, 0, 1219, 1222, 1, 0, 0, 0, 1220, 1218, 1, 0, 0, 0, 1221, 1211, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 117, 1, 0, 0, 0, 1223, 1225, 5, 179, 0, 0, 1224, 1226, 7, 7, 0, 0, 1225, 1224, 1, 0, 0, 0, 1225, 1226, 1, 0, 0, 0, 1226, 1227, 1, 0, 0, 0, 1227, 1230, 5, 85, 0, 0, 1228, 1229, 5, 94, 0, 0, 1229, 1231, 3, 184, 92, 0, 1230, 1228, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1243, 1, 0, 0, 0, 1232, 1234, 5, 115, 0, 0, 1233, 1232, 1, 0, 0, 0, 1233, 1234, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1240, 3, 314, 157, 0, 1236, 1237, 5, 271, 0, 0, 1237, 1239, 3, 314, 157, 0, 1238, 1236, 1, 0, 0, 0, 1239, 1242, 1, 0, 0, 0, 1240, 1238, 1, 0, 0, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1244, 1, 0, 0, 0, 1242, 1240, 1, 0, 0, 0, 1243, 1233, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 119, 1, 0, 0, 0, 1245, 1246, 5, 179, 0, 0, 1246, 1247, 5, 37, 0, 0, 1247, 1248, 5, 188, 0, 0, 1248, 1249, 3, 186, 93, 0, 1249, 121, 1, 0, 0, 0, 1250, 1251, 5, 179, 0, 0, 1251, 1252, 5, 37, 0, 0, 1252, 1253, 5, 212, 0, 0, 1253, 1254, 3, 188, 94, 0, 1254, 123, 1, 0, 0, 0, 1255, 1256, 5, 179, 0, 0, 1256, 1257, 5, 188, 0, 0, 1257, 1258, 5, 182, 0, 0, 1258, 1259, 3, 186, 93, 0, 1259, 125, 1, 0, 0, 0, 1260, 1261, 5, 179, 0, 0, 1261, 1262, 5, 32, 0, 0, 1262, 1263, 5, 182, 0, 0, 1263, 1264, 3, 186, 93, 0, 1264, 127, 1, 0, 0, 0, 1265, 1267, 5, 179, 0, 0, 1266, 1268, 5, 154, 0, 0, 1267, 1266, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1270, 5, 146, 0, 0, 1270, 1271, 3, 186, 93, 0, 1271, 129, 1, 0, 0, 0, 1272, 1273, 5, 179, 0, 0, 1273, 1274, 5, 73, 0, 0, 1274, 1275, 5, 94, 0, 0, 1275, 1285, 3, 186, 93, 0, 1276, 1277, 5, 145, 0, 0, 1277, 1278, 5, 265, 0, 0, 1278, 1281, 3, 304, 152, 0, 1279, 1280, 5, 263, 0, 0, 1280, 1282, 3, 304, 152, 0, 1281, 1279, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 5, 266, 0, 0, 1284, 1286, 1, 0, 0, 0, 1285, 1276, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, 1286, 131, 1, 0, 0, 0, 1287, 1289, 5, 179, 0, 0, 1288, 1290, 5, 39, 0, 0, 1289, 1288, 1, 0, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1292, 5, 167, 0, 0, 1292, 133, 1, 0, 0, 0, 1293, 1294, 5, 179, 0, 0, 1294, 1295, 5, 166, 0, 0, 1295, 1296, 5, 86, 0, 0, 1296, 1297, 5, 87, 0, 0, 1297, 1298, 3, 358, 179, 0, 1298, 135, 1, 0, 0, 0, 1299, 1314, 3, 138, 69, 0, 1300, 1314, 3, 140, 70, 0, 1301, 1314, 3, 142, 71, 0, 1302, 1303, 5, 179, 0, 0, 1303, 1304, 5, 86, 0, 0, 1304, 1305, 7, 8, 0, 0, 1305, 1311, 3, 358, 179, 0, 1306, 1307, 5, 136, 0, 0, 1307, 1309, 7, 9, 0, 0, 1308, 1310, 3, 354, 177, 0, 1309, 1308, 1, 0, 0, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1312, 1, 0, 0, 0, 1311, 1306, 1, 0, 0, 0, 1311, 1312, 1, 0, 0, 0, 1312, 1314, 1, 0, 0, 0, 1313, 1299, 1, 0, 0, 0, 1313, 1300, 1, 0, 0, 0, 1313, 1301, 1, 0, 0, 0, 1313, 1302, 1, 0, 0, 0, 1314, 137, 1, 0, 0, 0, 1315, 1316, 5, 179, 0, 0, 1316, 1317, 5, 86, 0, 0, 1317, 1318, 7, 8, 0, 0, 1318, 1324, 3, 358, 179, 0, 1319, 1320, 5, 136, 0, 0, 1320, 1322, 5, 46, 0, 0, 1321, 1323, 3, 184, 92, 0, 1322, 1321, 1, 0, 0, 0, 1322, 1323, 1, 0, 0, 0, 1323, 1325, 1, 0, 0, 0, 1324, 1319, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 139, 1, 0, 0, 0, 1326, 1327, 5, 179, 0, 0, 1327, 1328, 5, 86, 0, 0, 1328, 1329, 7, 8, 0, 0, 1329, 1335, 3, 358, 179, 0, 1330, 1331, 5, 136, 0, 0, 1331, 1333, 5, 188, 0, 0, 1332, 1334, 3, 186, 93, 0, 1333, 1332, 1, 0, 0, 0, 1333, 1334, 1, 0, 0, 0, 1334, 1336, 1, 0, 0, 0, 1335, 1330, 1, 0, 0, 0, 1335, 1336, 1, 0, 0, 0, 1336, 141, 1, 0, 0, 0, 1337, 1338, 5, 179, 0, 0, 1338, 1339, 5, 86, 0, 0, 1339, 1340, 7, 8, 0, 0, 1340, 1346, 3, 358, 179, 0, 1341, 1342, 5, 136, 0, 0, 1342, 1344, 5, 32, 0, 0, 1343, 1345, 3, 192, 96, 0, 1344, 1343, 1, 0, 0, 0, 1344, 1345, 1, 0, 0, 0, 1345, 1347, 1, 0, 0, 0, 1346, 1341, 1, 0, 0, 0, 1346, 1347, 1, 0, 0, 0, 1347, 143, 1, 0, 0, 0, 1348, 1352, 3, 146, 73, 0, 1349, 1352, 3, 148, 74, 0, 1350, 1352, 3, 150, 75, 0, 1351, 1348, 1, 0, 0, 0, 1351, 1349, 1, 0, 0, 0, 1351, 1350, 1, 0, 0, 0, 1352, 145, 1, 0, 0, 0, 1353, 1354, 5, 34, 0, 0, 1354, 1355, 5, 136, 0, 0, 1355, 1356, 5, 46, 0, 0, 1356, 1357, 3, 184, 92, 0, 1357, 1360, 5, 108, 0, 0, 1358, 1361, 3, 314, 157, 0, 1359, 1361, 5, 133, 0, 0, 1360, 1358, 1, 0, 0, 0, 1360, 1359, 1, 0, 0, 0, 1361, 147, 1, 0, 0, 0, 1362, 1363, 5, 34, 0, 0, 1363, 1364, 5, 136, 0, 0, 1364, 1365, 5, 188, 0, 0, 1365, 1366, 3, 186, 93, 0, 1366, 1369, 5, 108, 0, 0, 1367, 1370, 3, 314, 157, 0, 1368, 1370, 5, 133, 0, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1368, 1, 0, 0, 0, 1370, 149, 1, 0, 0, 0, 1371, 1372, 5, 34, 0, 0, 1372, 1373, 5, 136, 0, 0, 1373, 1374, 5, 32, 0, 0, 1374, 1375, 3, 192, 96, 0, 1375, 1378, 5, 108, 0, 0, 1376, 1379, 3, 314, 157, 0, 1377, 1379, 5, 133, 0, 0, 1378, 1376, 1, 0, 0, 0, 1378, 1377, 1, 0, 0, 0, 1379, 151, 1, 0, 0, 0, 1380, 1381, 5, 67, 0, 0, 1381, 1382, 3, 4, 2, 0, 1382, 153, 1, 0, 0, 0, 1383, 1389, 5, 176, 0, 0, 1384, 1390, 5, 2, 0, 0, 1385, 1386, 3, 358, 179, 0, 1386, 1387, 5, 249, 0, 0, 1387, 1388, 3, 304, 152, 0, 1388, 1390, 1, 0, 0, 0, 1389, 1384, 1, 0, 0, 0, 1389, 1385, 1, 0, 0, 0, 1389, 1390, 1, 0, 0, 0, 1390, 155, 1, 0, 0, 0, 1391, 1392, 5, 264, 0, 0, 1392, 1393, 5, 180, 0, 0, 1393, 1403, 5, 265, 0, 0, 1394, 1396, 3, 314, 157, 0, 1395, 1394, 1, 0, 0, 0, 1395, 1396, 1, 0, 0, 0, 1396, 1404, 1, 0, 0, 0, 1397, 1400, 3, 314, 157, 0, 1398, 1399, 5, 263, 0, 0, 1399, 1401, 3, 304, 152, 0, 1400, 1398, 1, 0, 0, 0, 1400, 1401, 1, 0, 0, 0, 1401, 1404, 1, 0, 0, 0, 1402, 1404, 3, 304, 152, 0, 1403, 1395, 1, 0, 0, 0, 1403, 1397, 1, 0, 0, 0, 1403, 1402, 1, 0, 0, 0, 1404, 1405, 1, 0, 0, 0, 1405, 1406, 5, 266, 0, 0, 1406, 157, 1, 0, 0, 0, 1407, 1408, 5, 107, 0, 0, 1408, 1409, 5, 121, 0, 0, 1409, 1410, 3, 186, 93, 0, 1410, 159, 1, 0, 0, 0, 1411, 1412, 5, 118, 0, 0, 1412, 1413, 5, 45, 0, 0, 1413, 1414, 5, 98, 0, 0, 1414, 1416, 5, 274, 0, 0, 1415, 1417, 5, 144, 0, 0, 1416, 1415, 1, 0, 0, 0, 1416, 1417, 1, 0, 0, 0, 1417, 1418, 1, 0, 0, 0, 1418, 1419, 5, 103, 0, 0, 1419, 1420, 5, 188, 0, 0, 1420, 1430, 3, 186, 93, 0, 1421, 1422, 5, 145, 0, 0, 1422, 1423, 5, 265, 0, 0, 1423, 1426, 3, 304, 152, 0, 1424, 1425, 5, 263, 0, 0, 1425, 1427, 3, 304, 152, 0, 1426, 1424, 1, 0, 0, 0, 1426, 1427, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1429, 5, 266, 0, 0, 1429, 1431, 1, 0, 0, 0, 1430, 1421, 1, 0, 0, 0, 1430, 1431, 1, 0, 0, 0, 1431, 161, 1, 0, 0, 0, 1432, 1436, 3, 164, 82, 0, 1433, 1436, 3, 166, 83, 0, 1434, 1436, 3, 168, 84, 0, 1435, 1432, 1, 0, 0, 0, 1435, 1433, 1, 0, 0, 0, 1435, 1434, 1, 0, 0, 0, 1436, 163, 1, 0, 0, 0, 1437, 1438, 5, 162, 0, 0, 1438, 1451, 3, 186, 93, 0, 1439, 1440, 5, 145, 0, 0, 1440, 1441, 5, 265, 0, 0, 1441, 1446, 3, 304, 152, 0, 1442, 1443, 5, 263, 0, 0, 1443, 1445, 3, 304, 152, 0, 1444, 1442, 1, 0, 0, 0, 1445, 1448, 1, 0, 0, 0, 1446, 1447, 1, 0, 0, 0, 1446, 1444, 1, 0, 0, 0, 1447, 1449, 1, 0, 0, 0, 1448, 1446, 1, 0, 0, 0, 1449, 1450, 5, 266, 0, 0, 1450, 1452, 1, 0, 0, 0, 1451, 1439, 1, 0, 0, 0, 1451, 1452, 1, 0, 0, 0, 1452, 165, 1, 0, 0, 0, 1453, 1454, 5, 162, 0, 0, 1454, 1455, 5, 13, 0, 0, 1455, 167, 1, 0, 0, 0, 1456, 1457, 5, 162, 0, 0, 1457, 1458, 5, 85, 0, 0, 1458, 1459, 3, 190, 95, 0, 1459, 169, 1, 0, 0, 0, 1460, 1461, 5, 93, 0, 0, 1461, 1462, 5, 66, 0, 0, 1462, 171, 1, 0, 0, 0, 1463, 1464, 5, 93, 0, 0, 1464, 1465, 5, 132, 0, 0, 1465, 1466, 5, 66, 0, 0, 1466, 173, 1, 0, 0, 0, 1467, 1468, 3, 354, 177, 0, 1468, 175, 1, 0, 0, 0, 1469, 1470, 3, 354, 177, 0, 1470, 177, 1, 0, 0, 0, 1471, 1472, 3, 354, 177, 0, 1472, 179, 1, 0, 0, 0, 1473, 1474, 3, 354, 177, 0, 1474, 181, 1, 0, 0, 0, 1475, 1476, 3, 354, 177, 0, 1476, 183, 1, 0, 0, 0, 1477, 1478, 3, 354, 177, 0, 1478, 185, 1, 0, 0, 0, 1479, 1484, 3, 358, 179, 0, 1480, 1481, 5, 261, 0, 0, 1481, 1483, 3, 358, 179, 0, 1482, 1480, 1, 0, 0, 0, 1483, 1486, 1, 0, 0, 0, 1484, 1482, 1, 0, 0, 0, 1484, 1485, 1, 0, 0, 0, 1485, 187, 1, 0, 0, 0, 1486, 1484, 1, 0, 0, 0, 1487, 1492, 3, 358, 179, 0, 1488, 1489, 5, 261, 0, 0, 1489, 1491, 3, 358, 179, 0, 1490, 1488, 1, 0, 0, 0, 1491, 1494, 1, 0, 0, 0, 1492, 1490, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 189, 1, 0, 0, 0, 1494, 1492, 1, 0, 0, 0, 1495, 1498, 3, 362, 181, 0, 1496, 1498, 3, 354, 177, 0, 1497, 1495, 1, 0, 0, 0, 1497, 1496, 1, 0, 0, 0, 1498, 191, 1, 0, 0, 0, 1499, 1502, 3, 354, 177, 0, 1500, 1502, 4, 96, 0, 0, 1501, 1499, 1, 0, 0, 0, 1501, 1500, 1, 0, 0, 0, 1502, 193, 1, 0, 0, 0, 1503, 1506, 3, 186, 93, 0, 1504, 1506, 3, 188, 94, 0, 1505, 1503, 1, 0, 0, 0, 1505, 1504, 1, 0, 0, 0, 1506, 195, 1, 0, 0, 0, 1507, 1508, 5, 21, 0, 0, 1508, 1509, 5, 26, 0, 0, 1509, 1511, 3, 292, 146, 0, 1510, 1507, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 1514, 1, 0, 0, 0, 1512, 1513, 5, 34, 0, 0, 1513, 1515, 3, 314, 157, 0, 1514, 1512, 1, 0, 0, 0, 1514, 1515, 1, 0, 0, 0, 1515, 1519, 1, 0, 0, 0, 1516, 1517, 5, 168, 0, 0, 1517, 1518, 5, 79, 0, 0, 1518, 1520, 3, 254, 127, 0, 1519, 1516, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 1524, 1, 0, 0, 0, 1521, 1522, 5, 216, 0, 0, 1522, 1523, 5, 175, 0, 0, 1523, 1525, 3, 248, 124, 0, 1524, 1521, 1, 0, 0, 0, 1524, 1525, 1, 0, 0, 0, 1525, 1529, 1, 0, 0, 0, 1526, 1527, 5, 23, 0, 0, 1527, 1528, 5, 9, 0, 0, 1528, 1530, 3, 230, 115, 0, 1529, 1526, 1, 0, 0, 0, 1529, 1530, 1, 0, 0, 0, 1530, 1533, 1, 0, 0, 0, 1531, 1532, 5, 24, 0, 0, 1532, 1534, 3, 314, 157, 0, 1533, 1531, 1, 0, 0, 0, 1533, 1534, 1, 0, 0, 0, 1534, 1545, 1, 0, 0, 0, 1535, 1536, 5, 30, 0, 0, 1536, 1537, 5, 94, 0, 0, 1537, 1542, 3, 354, 177, 0, 1538, 1539, 5, 216, 0, 0, 1539, 1540, 5, 151, 0, 0, 1540, 1541, 5, 249, 0, 0, 1541, 1543, 5, 277, 0, 0, 1542, 1538, 1, 0, 0, 0, 1542, 1543, 1, 0, 0, 0, 1543, 1546, 1, 0, 0, 0, 1544, 1546, 5, 197, 0, 0, 1545, 1535, 1, 0, 0, 0, 1545, 1544, 1, 0, 0, 0, 1545, 1546, 1, 0, 0, 0, 1546, 1549, 1, 0, 0, 0, 1547, 1548, 5, 25, 0, 0, 1548, 1550, 3, 248, 124, 0, 1549, 1547, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 197, 1, 0, 0, 0, 1551, 1556, 3, 200, 100, 0, 1552, 1553, 5, 263, 0, 0, 1553, 1555, 3, 200, 100, 0, 1554, 1552, 1, 0, 0, 0, 1555, 1558, 1, 0, 0, 0, 1556, 1554, 1, 0, 0, 0, 1556, 1557, 1, 0, 0, 0, 1557, 199, 1, 0, 0, 0, 1558, 1556, 1, 0, 0, 0, 1559, 1560, 3, 354, 177, 0, 1560, 1561, 5, 249, 0, 0, 1561, 1562, 3, 304, 152, 0, 1562, 201, 1, 0, 0, 0, 1563, 1564, 5, 265, 0, 0, 1564, 1567, 3, 182, 91, 0, 1565, 1566, 5, 34, 0, 0, 1566, 1568, 3, 314, 157, 0, 1567, 1565, 1, 0, 0, 0, 1567, 1568, 1, 0, 0, 0, 1568, 1577, 1, 0, 0, 0, 1569, 1570, 5, 263, 0, 0, 1570, 1573, 3, 182, 91, 0, 1571, 1572, 5, 34, 0, 0, 1572, 1574, 3, 314, 157, 0, 1573, 1571, 1, 0, 0, 0, 1573, 1574, 1, 0, 0, 0, 1574, 1576, 1, 0, 0, 0, 1575, 1569, 1, 0, 0, 0, 1576, 1579, 1, 0, 0, 0, 1577, 1575, 1, 0, 0, 0, 1577, 1578, 1, 0, 0, 0, 1578, 1580, 1, 0, 0, 0, 1579, 1577, 1, 0, 0, 0, 1580, 1581, 5, 266, 0, 0, 1581, 203, 1, 0, 0, 0, 1582, 1584, 3, 206, 103, 0, 1583, 1582, 1, 0, 0, 0, 1583, 1584, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 1586, 3, 258, 129, 0, 1586, 205, 1, 0, 0, 0, 1587, 1588, 5, 216, 0, 0, 1588, 1593, 3, 274, 137, 0, 1589, 1590, 5, 263, 0, 0, 1590, 1592, 3, 274, 137, 0, 1591, 1589, 1, 0, 0, 0, 1592, 1595, 1, 0, 0, 0, 1593, 1591, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 207, 1, 0, 0, 0, 1595, 1593, 1, 0, 0, 0, 1596, 1597, 5, 150, 0, 0, 1597, 1598, 5, 110, 0, 0, 1598, 1600, 3, 292, 146, 0, 1599, 1601, 5, 53, 0, 0, 1600, 1599, 1, 0, 0, 0, 1600, 1601, 1, 0, 0, 0, 1601, 1605, 1, 0, 0, 0, 1602, 1606, 5, 225, 0, 0, 1603, 1604, 5, 263, 0, 0, 1604, 1606, 5, 225, 0, 0, 1605, 1602, 1, 0, 0, 0, 1605, 1603, 1, 0, 0, 0, 1605, 1606, 1, 0, 0, 0, 1606, 1610, 1, 0, 0, 0, 1607, 1611, 5, 226, 0, 0, 1608, 1609, 5, 263, 0, 0, 1609, 1611, 5, 226, 0, 0, 1610, 1607, 1, 0, 0, 0, 1610, 1608, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1624, 1, 0, 0, 0, 1612, 1613, 5, 263, 0, 0, 1613, 1616, 3, 210, 105, 0, 1614, 1616, 3, 210, 105, 0, 1615, 1612, 1, 0, 0, 0, 1615, 1614, 1, 0, 0, 0, 1616, 1621, 1, 0, 0, 0, 1617, 1618, 5, 263, 0, 0, 1618, 1620, 3, 210, 105, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1623, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1621, 1619, 1, 0, 0, 0, 1622, 1625, 1, 0, 0, 0, 1623, 1621, 1, 0, 0, 0, 1624, 1615, 1, 0, 0, 0, 1624, 1625, 1, 0, 0, 0, 1625, 209, 1, 0, 0, 0, 1626, 1627, 5, 81, 0, 0, 1627, 1628, 5, 110, 0, 0, 1628, 1629, 3, 292, 146, 0, 1629, 1630, 5, 224, 0, 0, 1630, 1631, 3, 186, 93, 0, 1631, 1633, 3, 292, 146, 0, 1632, 1634, 5, 53, 0, 0, 1633, 1632, 1, 0, 0, 0, 1633, 1634, 1, 0, 0, 0, 1634, 1636, 1, 0, 0, 0, 1635, 1637, 5, 225, 0, 0, 1636, 1635, 1, 0, 0, 0, 1636, 1637, 1, 0, 0, 0, 1637, 1639, 1, 0, 0, 0, 1638, 1640, 5, 226, 0, 0, 1639, 1638, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 211, 1, 0, 0, 0, 1641, 1642, 3, 192, 96, 0, 1642, 1645, 3, 328, 164, 0, 1643, 1644, 5, 34, 0, 0, 1644, 1646, 3, 314, 157, 0, 1645, 1643, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 213, 1, 0, 0, 0, 1647, 1648, 3, 182, 91, 0, 1648, 1651, 3, 328, 164, 0, 1649, 1650, 5, 34, 0, 0, 1650, 1652, 3, 314, 157, 0, 1651, 1649, 1, 0, 0, 0, 1651, 1652, 1, 0, 0, 0, 1652, 215, 1, 0, 0, 0, 1653, 1654, 3, 218, 109, 0, 1654, 217, 1, 0, 0, 0, 1655, 1656, 3, 182, 91, 0, 1656, 1664, 3, 328, 164, 0, 1657, 1661, 3, 224, 112, 0, 1658, 1660, 3, 224, 112, 0, 1659, 1658, 1, 0, 0, 0, 1660, 1663, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1661, 1659, 1, 0, 0, 0, 1662, 1665, 1, 0, 0, 0, 1663, 1661, 1, 0, 0, 0, 1664, 1657, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1668, 1, 0, 0, 0, 1666, 1667, 5, 34, 0, 0, 1667, 1669, 3, 314, 157, 0, 1668, 1666, 1, 0, 0, 0, 1668, 1669, 1, 0, 0, 0, 1669, 1672, 1, 0, 0, 0, 1670, 1671, 5, 150, 0, 0, 1671, 1673, 5, 110, 0, 0, 1672, 1670, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 219, 1, 0, 0, 0, 1674, 1682, 3, 212, 106, 0, 1675, 1679, 3, 224, 112, 0, 1676, 1678, 3, 224, 112, 0, 1677, 1676, 1, 0, 0, 0, 1678, 1681, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1679, 1677, 1, 0, 0, 0, 1680, 1683, 1, 0, 0, 0, 1681, 1679, 1, 0, 0, 0, 1682, 1675, 1, 0, 0, 0, 1682, 1683, 1, 0, 0, 0, 1683, 221, 1, 0, 0, 0, 1684, 1685, 3, 182, 91, 0, 1685, 1688, 3, 328, 164, 0, 1686, 1687, 5, 34, 0, 0, 1687, 1689, 3, 314, 157, 0, 1688, 1686, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1697, 1, 0, 0, 0, 1690, 1694, 3, 224, 112, 0, 1691, 1693, 3, 224, 112, 0, 1692, 1691, 1, 0, 0, 0, 1693, 1696, 1, 0, 0, 0, 1694, 1695, 1, 0, 0, 0, 1694, 1692, 1, 0, 0, 0, 1695, 1698, 1, 0, 0, 0, 1696, 1694, 1, 0, 0, 0, 1697, 1690, 1, 0, 0, 0, 1697, 1698, 1, 0, 0, 0, 1698, 223, 1, 0, 0, 0, 1699, 1701, 5, 132, 0, 0, 1700, 1699, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1705, 5, 133, 0, 0, 1703, 1705, 3, 226, 113, 0, 1704, 1700, 1, 0, 0, 0, 1704, 1703, 1, 0, 0, 0, 1705, 225, 1, 0, 0, 0, 1706, 1707, 5, 60, 0, 0, 1707, 1715, 3, 304, 152, 0, 1708, 1709, 5, 35, 0, 0, 1709, 1715, 3, 304, 152, 0, 1710, 1711, 5, 51, 0, 0, 1711, 1715, 3, 304, 152, 0, 1712, 1713, 5, 16, 0, 0, 1713, 1715, 3, 360, 180, 0, 1714, 1706, 1, 0, 0, 0, 1714, 1708, 1, 0, 0, 0, 1714, 1710, 1, 0, 0, 0, 1714, 1712, 1, 0, 0, 0, 1715, 227, 1, 0, 0, 0, 1716, 1717, 7, 10, 0, 0, 1717, 229, 1, 0, 0, 0, 1718, 1719, 7, 11, 0, 0, 1719, 231, 1, 0, 0, 0, 1720, 1725, 3, 234, 117, 0, 1721, 1722, 5, 263, 0, 0, 1722, 1724, 3, 234, 117, 0, 1723, 1721, 1, 0, 0, 0, 1724, 1727, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1725, 1723, 1, 0, 0, 0, 1726, 1730, 1, 0, 0, 0, 1727, 1725, 1, 0, 0, 0, 1728, 1729, 5, 263, 0, 0, 1729, 1731, 3, 236, 118, 0, 1730, 1728, 1, 0, 0, 0, 1730, 1731, 1, 0, 0, 0, 1731, 1734, 1, 0, 0, 0, 1732, 1734, 3, 236, 118, 0, 1733, 1720, 1, 0, 0, 0, 1733, 1732, 1, 0, 0, 0, 1734, 233, 1, 0, 0, 0, 1735, 1737, 5, 89, 0, 0, 1736, 1738, 3, 292, 146, 0, 1737, 1736, 1, 0, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 1740, 5, 146, 0, 0, 1740, 1741, 3, 360, 180, 0, 1741, 235, 1, 0, 0, 0, 1742, 1744, 5, 154, 0, 0, 1743, 1745, 3, 292, 146, 0, 1744, 1743, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1746, 1, 0, 0, 0, 1746, 1747, 5, 265, 0, 0, 1747, 1748, 5, 145, 0, 0, 1748, 1754, 3, 238, 119, 0, 1749, 1750, 5, 263, 0, 0, 1750, 1751, 5, 145, 0, 0, 1751, 1753, 3, 238, 119, 0, 1752, 1749, 1, 0, 0, 0, 1753, 1756, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1754, 1752, 1, 0, 0, 0, 1755, 1757, 1, 0, 0, 0, 1756, 1754, 1, 0, 0, 0, 1757, 1758, 5, 266, 0, 0, 1758, 237, 1, 0, 0, 0, 1759, 1760, 5, 210, 0, 0, 1760, 1761, 3, 244, 122, 0, 1761, 1762, 3, 304, 152, 0, 1762, 1775, 1, 0, 0, 0, 1763, 1764, 3, 304, 152, 0, 1764, 1765, 3, 242, 121, 0, 1765, 1767, 1, 0, 0, 0, 1766, 1763, 1, 0, 0, 0, 1766, 1767, 1, 0, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1772, 5, 211, 0, 0, 1769, 1770, 3, 242, 121, 0, 1770, 1771, 3, 304, 152, 0, 1771, 1773, 1, 0, 0, 0, 1772, 1769, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1775, 1, 0, 0, 0, 1774, 1759, 1, 0, 0, 0, 1774, 1766, 1, 0, 0, 0, 1775, 239, 1, 0, 0, 0, 1776, 1777, 5, 30, 0, 0, 1777, 1778, 5, 94, 0, 0, 1778, 1783, 3, 358, 179, 0, 1779, 1780, 5, 216, 0, 0, 1780, 1781, 5, 151, 0, 0, 1781, 1782, 5, 249, 0, 0, 1782, 1784, 3, 360, 180, 0, 1783, 1779, 1, 0, 0, 0, 1783, 1784, 1, 0, 0, 0, 1784, 1787, 1, 0, 0, 0, 1785, 1787, 5, 197, 0, 0, 1786, 1776, 1, 0, 0, 0, 1786, 1785, 1, 0, 0, 0, 1787, 241, 1, 0, 0, 0, 1788, 1794, 1, 0, 0, 0, 1789, 1794, 5, 251, 0, 0, 1790, 1794, 5, 252, 0, 0, 1791, 1794, 5, 253, 0, 0, 1792, 1794, 5, 254, 0, 0, 1793, 1788, 1, 0, 0, 0, 1793, 1789, 1, 0, 0, 0, 1793, 1790, 1, 0, 0, 0, 1793, 1791, 1, 0, 0, 0, 1793, 1792, 1, 0, 0, 0, 1794, 243, 1, 0, 0, 0, 1795, 1804, 5, 249, 0, 0, 1796, 1804, 5, 250, 0, 0, 1797, 1804, 5, 115, 0, 0, 1798, 1804, 5, 164, 0, 0, 1799, 1804, 5, 163, 0, 0, 1800, 1804, 5, 15, 0, 0, 1801, 1804, 5, 94, 0, 0, 1802, 1804, 3, 242, 121, 0, 1803, 1795, 1, 0, 0, 0, 1803, 1796, 1, 0, 0, 0, 1803, 1797, 1, 0, 0, 0, 1803, 1798, 1, 0, 0, 0, 1803, 1799, 1, 0, 0, 0, 1803, 1800, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1803, 1802, 1, 0, 0, 0, 1804, 245, 1, 0, 0, 0, 1805, 1806, 5, 115, 0, 0, 1806, 1809, 3, 354, 177, 0, 1807, 1808, 7, 12, 0, 0, 1808, 1810, 5, 153, 0, 0, 1809, 1807, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 247, 1, 0, 0, 0, 1811, 1812, 5, 265, 0, 0, 1812, 1817, 3, 256, 128, 0, 1813, 1814, 5, 263, 0, 0, 1814, 1816, 3, 256, 128, 0, 1815, 1813, 1, 0, 0, 0, 1816, 1819, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1817, 1, 0, 0, 0, 1820, 1821, 5, 266, 0, 0, 1821, 249, 1, 0, 0, 0, 1822, 1823, 5, 265, 0, 0, 1823, 1828, 3, 212, 106, 0, 1824, 1825, 5, 263, 0, 0, 1825, 1827, 3, 212, 106, 0, 1826, 1824, 1, 0, 0, 0, 1827, 1830, 1, 0, 0, 0, 1828, 1829, 1, 0, 0, 0, 1828, 1826, 1, 0, 0, 0, 1829, 1831, 1, 0, 0, 0, 1830, 1828, 1, 0, 0, 0, 1831, 1832, 5, 266, 0, 0, 1832, 251, 1, 0, 0, 0, 1833, 1838, 3, 304, 152, 0, 1834, 1835, 5, 263, 0, 0, 1835, 1837, 3, 304, 152, 0, 1836, 1834, 1, 0, 0, 0, 1837, 1840, 1, 0, 0, 0, 1838, 1836, 1, 0, 0, 0, 1838, 1839, 1, 0, 0, 0, 1839, 253, 1, 0, 0, 0, 1840, 1838, 1, 0, 0, 0, 1841, 1851, 5, 52, 0, 0, 1842, 1843, 5, 71, 0, 0, 1843, 1844, 5, 191, 0, 0, 1844, 1845, 5, 26, 0, 0, 1845, 1849, 3, 314, 157, 0, 1846, 1847, 5, 63, 0, 0, 1847, 1848, 5, 26, 0, 0, 1848, 1850, 3, 314, 157, 0, 1849, 1846, 1, 0, 0, 0, 1849, 1850, 1, 0, 0, 0, 1850, 1852, 1, 0, 0, 0, 1851, 1842, 1, 0, 0, 0, 1851, 1852, 1, 0, 0, 0, 1852, 1857, 1, 0, 0, 0, 1853, 1854, 5, 117, 0, 0, 1854, 1855, 5, 191, 0, 0, 1855, 1856, 5, 26, 0, 0, 1856, 1858, 3, 314, 157, 0, 1857, 1853, 1, 0, 0, 0, 1857, 1858, 1, 0, 0, 0, 1858, 255, 1, 0, 0, 0, 1859, 1862, 3, 358, 179, 0, 1860, 1861, 5, 249, 0, 0, 1861, 1863, 3, 304, 152, 0, 1862, 1860, 1, 0, 0, 0, 1862, 1863, 1, 0, 0, 0, 1863, 257, 1, 0, 0, 0, 1864, 1875, 3, 260, 130, 0, 1865, 1866, 5, 139, 0, 0, 1866, 1867, 5, 26, 0, 0, 1867, 1872, 3, 264, 132, 0, 1868, 1869, 5, 263, 0, 0, 1869, 1871, 3, 264, 132, 0, 1870, 1868, 1, 0, 0, 0, 1871, 1874, 1, 0, 0, 0, 1872, 1870, 1, 0, 0, 0, 1872, 1873, 1, 0, 0, 0, 1873, 1876, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1875, 1865, 1, 0, 0, 0, 1875, 1876, 1, 0, 0, 0, 1876, 1883, 1, 0, 0, 0, 1877, 1878, 5, 116, 0, 0, 1878, 1881, 3, 304, 152, 0, 1879, 1880, 5, 135, 0, 0, 1880, 1882, 5, 277, 0, 0, 1881, 1879, 1, 0, 0, 0, 1881, 1882, 1, 0, 0, 0, 1882, 1884, 1, 0, 0, 0, 1883, 1877, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 259, 1, 0, 0, 0, 1885, 1886, 6, 130, -1, 0, 1886, 1887, 3, 262, 131, 0, 1887, 1902, 1, 0, 0, 0, 1888, 1889, 10, 2, 0, 0, 1889, 1891, 5, 100, 0, 0, 1890, 1892, 3, 276, 138, 0, 1891, 1890, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1901, 3, 260, 130, 3, 1894, 1895, 10, 1, 0, 0, 1895, 1897, 7, 13, 0, 0, 1896, 1898, 3, 276, 138, 0, 1897, 1896, 1, 0, 0, 0, 1897, 1898, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 1901, 3, 260, 130, 2, 1900, 1888, 1, 0, 0, 0, 1900, 1894, 1, 0, 0, 0, 1901, 1904, 1, 0, 0, 0, 1902, 1900, 1, 0, 0, 0, 1902, 1903, 1, 0, 0, 0, 1903, 261, 1, 0, 0, 0, 1904, 1902, 1, 0, 0, 0, 1905, 1922, 3, 266, 133, 0, 1906, 1907, 5, 188, 0, 0, 1907, 1922, 3, 186, 93, 0, 1908, 1909, 5, 211, 0, 0, 1909, 1914, 3, 304, 152, 0, 1910, 1911, 5, 263, 0, 0, 1911, 1913, 3, 304, 152, 0, 1912, 1910, 1, 0, 0, 0, 1913, 1916, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1914, 1915, 1, 0, 0, 0, 1915, 1922, 1, 0, 0, 0, 1916, 1914, 1, 0, 0, 0, 1917, 1918, 5, 265, 0, 0, 1918, 1919, 3, 258, 129, 0, 1919, 1920, 5, 266, 0, 0, 1920, 1922, 1, 0, 0, 0, 1921, 1905, 1, 0, 0, 0, 1921, 1906, 1, 0, 0, 0, 1921, 1908, 1, 0, 0, 0, 1921, 1917, 1, 0, 0, 0, 1922, 263, 1, 0, 0, 0, 1923, 1925, 3, 302, 151, 0, 1924, 1926, 7, 14, 0, 0, 1925, 1924, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1929, 1, 0, 0, 0, 1927, 1928, 5, 134, 0, 0, 1928, 1930, 7, 15, 0, 0, 1929, 1927, 1, 0, 0, 0, 1929, 1930, 1, 0, 0, 0, 1930, 265, 1, 0, 0, 0, 1931, 1933, 5, 174, 0, 0, 1932, 1934, 3, 276, 138, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 1936, 1, 0, 0, 0, 1935, 1937, 5, 183, 0, 0, 1936, 1935, 1, 0, 0, 0, 1936, 1937, 1, 0, 0, 0, 1937, 1938, 1, 0, 0, 0, 1938, 1943, 3, 278, 139, 0, 1939, 1940, 5, 263, 0, 0, 1940, 1942, 3, 278, 139, 0, 1941, 1939, 1, 0, 0, 0, 1942, 1945, 1, 0, 0, 0, 1943, 1941, 1, 0, 0, 0, 1943, 1944, 1, 0, 0, 0, 1944, 1955, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1946, 1947, 5, 82, 0, 0, 1947, 1952, 3, 280, 140, 0, 1948, 1949, 5, 263, 0, 0, 1949, 1951, 3, 280, 140, 0, 1950, 1948, 1, 0, 0, 0, 1951, 1954, 1, 0, 0, 0, 1952, 1950, 1, 0, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 1956, 1, 0, 0, 0, 1954, 1952, 1, 0, 0, 0, 1955, 1946, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1959, 1, 0, 0, 0, 1957, 1958, 5, 215, 0, 0, 1958, 1960, 3, 306, 153, 0, 1959, 1957, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1964, 1, 0, 0, 0, 1961, 1962, 5, 87, 0, 0, 1962, 1963, 5, 26, 0, 0, 1963, 1965, 3, 268, 134, 0, 1964, 1961, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1968, 1, 0, 0, 0, 1966, 1967, 5, 90, 0, 0, 1967, 1969, 3, 306, 153, 0, 1968, 1966, 1, 0, 0, 0, 1968, 1969, 1, 0, 0, 0, 1969, 267, 1, 0, 0, 0, 1970, 1972, 3, 276, 138, 0, 1971, 1970, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1978, 3, 270, 135, 0, 1974, 1975, 5, 263, 0, 0, 1975, 1977, 3, 270, 135, 0, 1976, 1974, 1, 0, 0, 0, 1977, 1980, 1, 0, 0, 0, 1978, 1976, 1, 0, 0, 0, 1978, 1979, 1, 0, 0, 0, 1979, 269, 1, 0, 0, 0, 1980, 1978, 1, 0, 0, 0, 1981, 1982, 3, 272, 136, 0, 1982, 271, 1, 0, 0, 0, 1983, 1992, 5, 265, 0, 0, 1984, 1989, 3, 302, 151, 0, 1985, 1986, 5, 263, 0, 0, 1986, 1988, 3, 302, 151, 0, 1987, 1985, 1, 0, 0, 0, 1988, 1991, 1, 0, 0, 0, 1989, 1987, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1993, 1, 0, 0, 0, 1991, 1989, 1, 0, 0, 0, 1992, 1984, 1, 0, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1994, 1, 0, 0, 0, 1994, 1997, 5, 266, 0, 0, 1995, 1997, 3, 302, 151, 0, 1996, 1983, 1, 0, 0, 0, 1996, 1995, 1, 0, 0, 0, 1997, 273, 1, 0, 0, 0, 1998, 2000, 3, 358, 179, 0, 1999, 2001, 3, 292, 146, 0, 2000, 1999, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 2002, 1, 0, 0, 0, 2002, 2003, 5, 9, 0, 0, 2003, 2004, 3, 296, 148, 0, 2004, 275, 1, 0, 0, 0, 2005, 2006, 7, 16, 0, 0, 2006, 277, 1, 0, 0, 0, 2007, 2012, 3, 302, 151, 0, 2008, 2010, 5, 9, 0, 0, 2009, 2008, 1, 0, 0, 0, 2009, 2010, 1, 0, 0, 0, 2010, 2011, 1, 0, 0, 0, 2011, 2013, 3, 358, 179, 0, 2012, 2009, 1, 0, 0, 0, 2012, 2013, 1, 0, 0, 0, 2013, 2020, 1, 0, 0, 0, 2014, 2015, 3, 354, 177, 0, 2015, 2016, 5, 261, 0, 0, 2016, 2017, 5, 257, 0, 0, 2017, 2020, 1, 0, 0, 0, 2018, 2020, 5, 257, 0, 0, 2019, 2007, 1, 0, 0, 0, 2019, 2014, 1, 0, 0, 0, 2019, 2018, 1, 0, 0, 0, 2020, 279, 1, 0, 0, 0, 2021, 2022, 6, 140, -1, 0, 2022, 2023, 3, 286, 143, 0, 2023, 2037, 1, 0, 0, 0, 2024, 2033, 10, 2, 0, 0, 2025, 2026, 5, 38, 0, 0, 2026, 2027, 5, 109, 0, 0, 2027, 2034, 3, 286, 143, 0, 2028, 2029, 3, 282, 141, 0, 2029, 2030, 5, 109, 0, 0, 2030, 2031, 3, 280, 140, 0, 2031, 2032, 3, 284, 142, 0, 2032, 2034, 1, 0, 0, 0, 2033, 2025, 1, 0, 0, 0, 2033, 2028, 1, 0, 0, 0, 2034, 2036, 1, 0, 0, 0, 2035, 2024, 1, 0, 0, 0, 2036, 2039, 1, 0, 0, 0, 2037, 2035, 1, 0, 0, 0, 2037, 2038, 1, 0, 0, 0, 2038, 281, 1, 0, 0, 0, 2039, 2037, 1, 0, 0, 0, 2040, 2042, 5, 97, 0, 0, 2041, 2040, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2072, 1, 0, 0, 0, 2043, 2045, 5, 114, 0, 0, 2044, 2046, 5, 97, 0, 0, 2045, 2044, 1, 0, 0, 0, 2045, 2046, 1, 0, 0, 0, 2046, 2072, 1, 0, 0, 0, 2047, 2049, 5, 165, 0, 0, 2048, 2050, 5, 97, 0, 0, 2049, 2048, 1, 0, 0, 0, 2049, 2050, 1, 0, 0, 0, 2050, 2072, 1, 0, 0, 0, 2051, 2053, 5, 114, 0, 0, 2052, 2054, 5, 141, 0, 0, 2053, 2052, 1, 0, 0, 0, 2053, 2054, 1, 0, 0, 0, 2054, 2072, 1, 0, 0, 0, 2055, 2057, 5, 165, 0, 0, 2056, 2058, 5, 141, 0, 0, 2057, 2056, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2072, 1, 0, 0, 0, 2059, 2061, 5, 83, 0, 0, 2060, 2062, 5, 141, 0, 0, 2061, 2060, 1, 0, 0, 0, 2061, 2062, 1, 0, 0, 0, 2062, 2072, 1, 0, 0, 0, 2063, 2064, 5, 114, 0, 0, 2064, 2072, 5, 177, 0, 0, 2065, 2066, 5, 165, 0, 0, 2066, 2072, 5, 177, 0, 0, 2067, 2068, 5, 114, 0, 0, 2068, 2072, 5, 7, 0, 0, 2069, 2070, 5, 165, 0, 0, 2070, 2072, 5, 7, 0, 0, 2071, 2041, 1, 0, 0, 0, 2071, 2043, 1, 0, 0, 0, 2071, 2047, 1, 0, 0, 0, 2071, 2051, 1, 0, 0, 0, 2071, 2055, 1, 0, 0, 0, 2071, 2059, 1, 0, 0, 0, 2071, 2063, 1, 0, 0, 0, 2071, 2065, 1, 0, 0, 0, 2071, 2067, 1, 0, 0, 0, 2071, 2069, 1, 0, 0, 0, 2072, 283, 1, 0, 0, 0, 2073, 2074, 5, 136, 0, 0, 2074, 2088, 3, 306, 153, 0, 2075, 2076, 5, 205, 0, 0, 2076, 2077, 5, 265, 0, 0, 2077, 2082, 3, 358, 179, 0, 2078, 2079, 5, 263, 0, 0, 2079, 2081, 3, 358, 179, 0, 2080, 2078, 1, 0, 0, 0, 2081, 2084, 1, 0, 0, 0, 2082, 2080, 1, 0, 0, 0, 2082, 2083, 1, 0, 0, 0, 2083, 2085, 1, 0, 0, 0, 2084, 2082, 1, 0, 0, 0, 2085, 2086, 5, 266, 0, 0, 2086, 2088, 1, 0, 0, 0, 2087, 2073, 1, 0, 0, 0, 2087, 2075, 1, 0, 0, 0, 2088, 285, 1, 0, 0, 0, 2089, 2102, 3, 290, 145, 0, 2090, 2091, 5, 190, 0, 0, 2091, 2092, 3, 288, 144, 0, 2092, 2093, 5, 265, 0, 0, 2093, 2094, 3, 304, 152, 0, 2094, 2100, 5, 266, 0, 0, 2095, 2096, 5, 157, 0, 0, 2096, 2097, 5, 265, 0, 0, 2097, 2098, 3, 304, 152, 0, 2098, 2099, 5, 266, 0, 0, 2099, 2101, 1, 0, 0, 0, 2100, 2095, 1, 0, 0, 0, 2100, 2101, 1, 0, 0, 0, 2101, 2103, 1, 0, 0, 0, 2102, 2090, 1, 0, 0, 0, 2102, 2103, 1, 0, 0, 0, 2103, 287, 1, 0, 0, 0, 2104, 2105, 7, 17, 0, 0, 2105, 289, 1, 0, 0, 0, 2106, 2114, 3, 294, 147, 0, 2107, 2109, 5, 9, 0, 0, 2108, 2107, 1, 0, 0, 0, 2108, 2109, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2112, 3, 358, 179, 0, 2111, 2113, 3, 292, 146, 0, 2112, 2111, 1, 0, 0, 0, 2112, 2113, 1, 0, 0, 0, 2113, 2115, 1, 0, 0, 0, 2114, 2108, 1, 0, 0, 0, 2114, 2115, 1, 0, 0, 0, 2115, 291, 1, 0, 0, 0, 2116, 2117, 5, 265, 0, 0, 2117, 2122, 3, 192, 96, 0, 2118, 2119, 5, 263, 0, 0, 2119, 2121, 3, 192, 96, 0, 2120, 2118, 1, 0, 0, 0, 2121, 2124, 1, 0, 0, 0, 2122, 2120, 1, 0, 0, 0, 2122, 2123, 1, 0, 0, 0, 2123, 2125, 1, 0, 0, 0, 2124, 2122, 1, 0, 0, 0, 2125, 2126, 5, 266, 0, 0, 2126, 293, 1, 0, 0, 0, 2127, 2135, 3, 194, 97, 0, 2128, 2130, 5, 113, 0, 0, 2129, 2128, 1, 0, 0, 0, 2129, 2130, 1, 0, 0, 0, 2130, 2131, 1, 0, 0, 0, 2131, 2135, 3, 296, 148, 0, 2132, 2135, 3, 298, 149, 0, 2133, 2135, 3, 300, 150, 0, 2134, 2127, 1, 0, 0, 0, 2134, 2129, 1, 0, 0, 0, 2134, 2132, 1, 0, 0, 0, 2134, 2133, 1, 0, 0, 0, 2135, 295, 1, 0, 0, 0, 2136, 2137, 5, 265, 0, 0, 2137, 2138, 3, 204, 102, 0, 2138, 2139, 5, 266, 0, 0, 2139, 297, 1, 0, 0, 0, 2140, 2141, 5, 201, 0, 0, 2141, 2142, 5, 265, 0, 0, 2142, 2147, 3, 304, 152, 0, 2143, 2144, 5, 263, 0, 0, 2144, 2146, 3, 304, 152, 0, 2145, 2143, 1, 0, 0, 0, 2146, 2149, 1, 0, 0, 0, 2147, 2145, 1, 0, 0, 0, 2147, 2148, 1, 0, 0, 0, 2148, 2150, 1, 0, 0, 0, 2149, 2147, 1, 0, 0, 0, 2150, 2153, 5, 266, 0, 0, 2151, 2152, 5, 216, 0, 0, 2152, 2154, 5, 140, 0, 0, 2153, 2151, 1, 0, 0, 0, 2153, 2154, 1, 0, 0, 0, 2154, 299, 1, 0, 0, 0, 2155, 2156, 5, 265, 0, 0, 2156, 2157, 3, 280, 140, 0, 2157, 2158, 5, 266, 0, 0, 2158, 301, 1, 0, 0, 0, 2159, 2162, 3, 192, 96, 0, 2160, 2162, 3, 304, 152, 0, 2161, 2159, 1, 0, 0, 0, 2161, 2160, 1, 0, 0, 0, 2162, 303, 1, 0, 0, 0, 2163, 2164, 3, 306, 153, 0, 2164, 305, 1, 0, 0, 0, 2165, 2166, 6, 153, -1, 0, 2166, 2168, 3, 310, 155, 0, 2167, 2169, 3, 308, 154, 0, 2168, 2167, 1, 0, 0, 0, 2168, 2169, 1, 0, 0, 0, 2169, 2173, 1, 0, 0, 0, 2170, 2171, 5, 132, 0, 0, 2171, 2173, 3, 306, 153, 3, 2172, 2165, 1, 0, 0, 0, 2172, 2170, 1, 0, 0, 0, 2173, 2182, 1, 0, 0, 0, 2174, 2175, 10, 2, 0, 0, 2175, 2176, 5, 5, 0, 0, 2176, 2181, 3, 306, 153, 3, 2177, 2178, 10, 1, 0, 0, 2178, 2179, 5, 138, 0, 0, 2179, 2181, 3, 306, 153, 2, 2180, 2174, 1, 0, 0, 0, 2180, 2177, 1, 0, 0, 0, 2181, 2184, 1, 0, 0, 0, 2182, 2180, 1, 0, 0, 0, 2182, 2183, 1, 0, 0, 0, 2183, 307, 1, 0, 0, 0, 2184, 2182, 1, 0, 0, 0, 2185, 2186, 3, 316, 158, 0, 2186, 2187, 3, 310, 155, 0, 2187, 2244, 1, 0, 0, 0, 2188, 2189, 3, 316, 158, 0, 2189, 2190, 3, 318, 159, 0, 2190, 2191, 3, 296, 148, 0, 2191, 2244, 1, 0, 0, 0, 2192, 2194, 5, 132, 0, 0, 2193, 2192, 1, 0, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 2195, 1, 0, 0, 0, 2195, 2196, 5, 15, 0, 0, 2196, 2197, 3, 310, 155, 0, 2197, 2198, 5, 5, 0, 0, 2198, 2199, 3, 310, 155, 0, 2199, 2244, 1, 0, 0, 0, 2200, 2202, 5, 132, 0, 0, 2201, 2200, 1, 0, 0, 0, 2201, 2202, 1, 0, 0, 0, 2202, 2203, 1, 0, 0, 0, 2203, 2204, 5, 94, 0, 0, 2204, 2205, 5, 265, 0, 0, 2205, 2210, 3, 304, 152, 0, 2206, 2207, 5, 263, 0, 0, 2207, 2209, 3, 304, 152, 0, 2208, 2206, 1, 0, 0, 0, 2209, 2212, 1, 0, 0, 0, 2210, 2208, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2213, 1, 0, 0, 0, 2212, 2210, 1, 0, 0, 0, 2213, 2214, 5, 266, 0, 0, 2214, 2244, 1, 0, 0, 0, 2215, 2217, 5, 132, 0, 0, 2216, 2215, 1, 0, 0, 0, 2216, 2217, 1, 0, 0, 0, 2217, 2218, 1, 0, 0, 0, 2218, 2219, 5, 94, 0, 0, 2219, 2244, 3, 296, 148, 0, 2220, 2222, 5, 132, 0, 0, 2221, 2220, 1, 0, 0, 0, 2221, 2222, 1, 0, 0, 0, 2222, 2223, 1, 0, 0, 0, 2223, 2224, 7, 18, 0, 0, 2224, 2227, 3, 310, 155, 0, 2225, 2226, 5, 62, 0, 0, 2226, 2228, 3, 310, 155, 0, 2227, 2225, 1, 0, 0, 0, 2227, 2228, 1, 0, 0, 0, 2228, 2244, 1, 0, 0, 0, 2229, 2230, 7, 19, 0, 0, 2230, 2244, 3, 310, 155, 0, 2231, 2233, 5, 108, 0, 0, 2232, 2234, 5, 132, 0, 0, 2233, 2232, 1, 0, 0, 0, 2233, 2234, 1, 0, 0, 0, 2234, 2235, 1, 0, 0, 0, 2235, 2244, 7, 20, 0, 0, 2236, 2238, 5, 108, 0, 0, 2237, 2239, 5, 132, 0, 0, 2238, 2237, 1, 0, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 2240, 1, 0, 0, 0, 2240, 2241, 5, 57, 0, 0, 2241, 2242, 5, 82, 0, 0, 2242, 2244, 3, 310, 155, 0, 2243, 2185, 1, 0, 0, 0, 2243, 2188, 1, 0, 0, 0, 2243, 2193, 1, 0, 0, 0, 2243, 2201, 1, 0, 0, 0, 2243, 2216, 1, 0, 0, 0, 2243, 2221, 1, 0, 0, 0, 2243, 2229, 1, 0, 0, 0, 2243, 2231, 1, 0, 0, 0, 2243, 2236, 1, 0, 0, 0, 2244, 309, 1, 0, 0, 0, 2245, 2246, 6, 155, -1, 0, 2246, 2250, 3, 312, 156, 0, 2247, 2248, 7, 21, 0, 0, 2248, 2250, 3, 310, 155, 4, 2249, 2245, 1, 0, 0, 0, 2249, 2247, 1, 0, 0, 0, 2250, 2262, 1, 0, 0, 0, 2251, 2252, 10, 3, 0, 0, 2252, 2253, 7, 22, 0, 0, 2253, 2261, 3, 310, 155, 4, 2254, 2255, 10, 2, 0, 0, 2255, 2256, 7, 21, 0, 0, 2256, 2261, 3, 310, 155, 3, 2257, 2258, 10, 1, 0, 0, 2258, 2259, 5, 260, 0, 0, 2259, 2261, 3, 310, 155, 2, 2260, 2251, 1, 0, 0, 0, 2260, 2254, 1, 0, 0, 0, 2260, 2257, 1, 0, 0, 0, 2261, 2264, 1, 0, 0, 0, 2262, 2260, 1, 0, 0, 0, 2262, 2263, 1, 0, 0, 0, 2263, 311, 1, 0, 0, 0, 2264, 2262, 1, 0, 0, 0, 2265, 2266, 6, 156, -1, 0, 2266, 2512, 5, 133, 0, 0, 2267, 2512, 3, 322, 161, 0, 2268, 2269, 3, 358, 179, 0, 2269, 2270, 3, 314, 157, 0, 2270, 2512, 1, 0, 0, 0, 2271, 2272, 5, 286, 0, 0, 2272, 2512, 3, 314, 157, 0, 2273, 2512, 3, 360, 180, 0, 2274, 2512, 3, 320, 160, 0, 2275, 2512, 3, 314, 157, 0, 2276, 2512, 5, 276, 0, 0, 2277, 2512, 5, 272, 0, 0, 2278, 2279, 5, 148, 0, 0, 2279, 2280, 5, 265, 0, 0, 2280, 2281, 3, 310, 155, 0, 2281, 2282, 5, 94, 0, 0, 2282, 2283, 3, 310, 155, 0, 2283, 2284, 5, 266, 0, 0, 2284, 2512, 1, 0, 0, 0, 2285, 2286, 5, 265, 0, 0, 2286, 2289, 3, 304, 152, 0, 2287, 2288, 5, 9, 0, 0, 2288, 2290, 3, 328, 164, 0, 2289, 2287, 1, 0, 0, 0, 2289, 2290, 1, 0, 0, 0, 2290, 2299, 1, 0, 0, 0, 2291, 2292, 5, 263, 0, 0, 2292, 2295, 3, 304, 152, 0, 2293, 2294, 5, 9, 0, 0, 2294, 2296, 3, 328, 164, 0, 2295, 2293, 1, 0, 0, 0, 2295, 2296, 1, 0, 0, 0, 2296, 2298, 1, 0, 0, 0, 2297, 2291, 1, 0, 0, 0, 2298, 2301, 1, 0, 0, 0, 2299, 2300, 1, 0, 0, 0, 2299, 2297, 1, 0, 0, 0, 2300, 2302, 1, 0, 0, 0, 2301, 2299, 1, 0, 0, 0, 2302, 2303, 5, 266, 0, 0, 2303, 2512, 1, 0, 0, 0, 2304, 2305, 5, 168, 0, 0, 2305, 2306, 5, 265, 0, 0, 2306, 2311, 3, 304, 152, 0, 2307, 2308, 5, 263, 0, 0, 2308, 2310, 3, 304, 152, 0, 2309, 2307, 1, 0, 0, 0, 2310, 2313, 1, 0, 0, 0, 2311, 2309, 1, 0, 0, 0, 2311, 2312, 1, 0, 0, 0, 2312, 2314, 1, 0, 0, 0, 2313, 2311, 1, 0, 0, 0, 2314, 2315, 5, 266, 0, 0, 2315, 2512, 1, 0, 0, 0, 2316, 2317, 3, 190, 95, 0, 2317, 2318, 5, 265, 0, 0, 2318, 2319, 5, 257, 0, 0, 2319, 2321, 5, 266, 0, 0, 2320, 2322, 3, 338, 169, 0, 2321, 2320, 1, 0, 0, 0, 2321, 2322, 1, 0, 0, 0, 2322, 2324, 1, 0, 0, 0, 2323, 2325, 3, 340, 170, 0, 2324, 2323, 1, 0, 0, 0, 2324, 2325, 1, 0, 0, 0, 2325, 2512, 1, 0, 0, 0, 2326, 2327, 3, 190, 95, 0, 2327, 2339, 5, 265, 0, 0, 2328, 2330, 3, 276, 138, 0, 2329, 2328, 1, 0, 0, 0, 2329, 2330, 1, 0, 0, 0, 2330, 2331, 1, 0, 0, 0, 2331, 2336, 3, 304, 152, 0, 2332, 2333, 5, 263, 0, 0, 2333, 2335, 3, 304, 152, 0, 2334, 2332, 1, 0, 0, 0, 2335, 2338, 1, 0, 0, 0, 2336, 2334, 1, 0, 0, 0, 2336, 2337, 1, 0, 0, 0, 2337, 2340, 1, 0, 0, 0, 2338, 2336, 1, 0, 0, 0, 2339, 2329, 1, 0, 0, 0, 2339, 2340, 1, 0, 0, 0, 2340, 2351, 1, 0, 0, 0, 2341, 2342, 5, 139, 0, 0, 2342, 2343, 5, 26, 0, 0, 2343, 2348, 3, 264, 132, 0, 2344, 2345, 5, 263, 0, 0, 2345, 2347, 3, 264, 132, 0, 2346, 2344, 1, 0, 0, 0, 2347, 2350, 1, 0, 0, 0, 2348, 2346, 1, 0, 0, 0, 2348, 2349, 1, 0, 0, 0, 2349, 2352, 1, 0, 0, 0, 2350, 2348, 1, 0, 0, 0, 2351, 2341, 1, 0, 0, 0, 2351, 2352, 1, 0, 0, 0, 2352, 2353, 1, 0, 0, 0, 2353, 2355, 5, 266, 0, 0, 2354, 2356, 3, 338, 169, 0, 2355, 2354, 1, 0, 0, 0, 2355, 2356, 1, 0, 0, 0, 2356, 2358, 1, 0, 0, 0, 2357, 2359, 3, 340, 170, 0, 2358, 2357, 1, 0, 0, 0, 2358, 2359, 1, 0, 0, 0, 2359, 2512, 1, 0, 0, 0, 2360, 2361, 3, 358, 179, 0, 2361, 2362, 5, 273, 0, 0, 2362, 2363, 3, 304, 152, 0, 2363, 2512, 1, 0, 0, 0, 2364, 2373, 5, 265, 0, 0, 2365, 2370, 3, 358, 179, 0, 2366, 2367, 5, 263, 0, 0, 2367, 2369, 3, 358, 179, 0, 2368, 2366, 1, 0, 0, 0, 2369, 2372, 1, 0, 0, 0, 2370, 2368, 1, 0, 0, 0, 2370, 2371, 1, 0, 0, 0, 2371, 2374, 1, 0, 0, 0, 2372, 2370, 1, 0, 0, 0, 2373, 2365, 1, 0, 0, 0, 2373, 2374, 1, 0, 0, 0, 2374, 2375, 1, 0, 0, 0, 2375, 2376, 5, 266, 0, 0, 2376, 2377, 5, 273, 0, 0, 2377, 2512, 3, 304, 152, 0, 2378, 2379, 5, 265, 0, 0, 2379, 2380, 3, 204, 102, 0, 2380, 2381, 5, 266, 0, 0, 2381, 2512, 1, 0, 0, 0, 2382, 2383, 5, 66, 0, 0, 2383, 2384, 5, 265, 0, 0, 2384, 2385, 3, 204, 102, 0, 2385, 2386, 5, 266, 0, 0, 2386, 2512, 1, 0, 0, 0, 2387, 2388, 5, 28, 0, 0, 2388, 2390, 3, 310, 155, 0, 2389, 2391, 3, 336, 168, 0, 2390, 2389, 1, 0, 0, 0, 2391, 2392, 1, 0, 0, 0, 2392, 2390, 1, 0, 0, 0, 2392, 2393, 1, 0, 0, 0, 2393, 2396, 1, 0, 0, 0, 2394, 2395, 5, 59, 0, 0, 2395, 2397, 3, 304, 152, 0, 2396, 2394, 1, 0, 0, 0, 2396, 2397, 1, 0, 0, 0, 2397, 2398, 1, 0, 0, 0, 2398, 2399, 5, 61, 0, 0, 2399, 2512, 1, 0, 0, 0, 2400, 2402, 5, 28, 0, 0, 2401, 2403, 3, 336, 168, 0, 2402, 2401, 1, 0, 0, 0, 2403, 2404, 1, 0, 0, 0, 2404, 2402, 1, 0, 0, 0, 2404, 2405, 1, 0, 0, 0, 2405, 2408, 1, 0, 0, 0, 2406, 2407, 5, 59, 0, 0, 2407, 2409, 3, 304, 152, 0, 2408, 2406, 1, 0, 0, 0, 2408, 2409, 1, 0, 0, 0, 2409, 2410, 1, 0, 0, 0, 2410, 2411, 5, 61, 0, 0, 2411, 2512, 1, 0, 0, 0, 2412, 2413, 5, 29, 0, 0, 2413, 2414, 5, 265, 0, 0, 2414, 2415, 3, 304, 152, 0, 2415, 2416, 5, 9, 0, 0, 2416, 2417, 3, 328, 164, 0, 2417, 2418, 5, 266, 0, 0, 2418, 2512, 1, 0, 0, 0, 2419, 2420, 5, 195, 0, 0, 2420, 2421, 5, 265, 0, 0, 2421, 2422, 3, 304, 152, 0, 2422, 2423, 5, 9, 0, 0, 2423, 2424, 3, 328, 164, 0, 2424, 2425, 5, 266, 0, 0, 2425, 2512, 1, 0, 0, 0, 2426, 2427, 5, 8, 0, 0, 2427, 2436, 5, 267, 0, 0, 2428, 2433, 3, 304, 152, 0, 2429, 2430, 5, 263, 0, 0, 2430, 2432, 3, 304, 152, 0, 2431, 2429, 1, 0, 0, 0, 2432, 2435, 1, 0, 0, 0, 2433, 2431, 1, 0, 0, 0, 2433, 2434, 1, 0, 0, 0, 2434, 2437, 1, 0, 0, 0, 2435, 2433, 1, 0, 0, 0, 2436, 2428, 1, 0, 0, 0, 2436, 2437, 1, 0, 0, 0, 2437, 2438, 1, 0, 0, 0, 2438, 2512, 5, 268, 0, 0, 2439, 2512, 3, 358, 179, 0, 2440, 2512, 5, 40, 0, 0, 2441, 2445, 5, 42, 0, 0, 2442, 2443, 5, 265, 0, 0, 2443, 2444, 5, 277, 0, 0, 2444, 2446, 5, 266, 0, 0, 2445, 2442, 1, 0, 0, 0, 2445, 2446, 1, 0, 0, 0, 2446, 2512, 1, 0, 0, 0, 2447, 2451, 5, 43, 0, 0, 2448, 2449, 5, 265, 0, 0, 2449, 2450, 5, 277, 0, 0, 2450, 2452, 5, 266, 0, 0, 2451, 2448, 1, 0, 0, 0, 2451, 2452, 1, 0, 0, 0, 2452, 2512, 1, 0, 0, 0, 2453, 2457, 5, 119, 0, 0, 2454, 2455, 5, 265, 0, 0, 2455, 2456, 5, 277, 0, 0, 2456, 2458, 5, 266, 0, 0, 2457, 2454, 1, 0, 0, 0, 2457, 2458, 1, 0, 0, 0, 2458, 2512, 1, 0, 0, 0, 2459, 2463, 5, 120, 0, 0, 2460, 2461, 5, 265, 0, 0, 2461, 2462, 5, 277, 0, 0, 2462, 2464, 5, 266, 0, 0, 2463, 2460, 1, 0, 0, 0, 2463, 2464, 1, 0, 0, 0, 2464, 2512, 1, 0, 0, 0, 2465, 2512, 5, 44, 0, 0, 2466, 2512, 5, 41, 0, 0, 2467, 2468, 5, 184, 0, 0, 2468, 2469, 5, 265, 0, 0, 2469, 2470, 3, 310, 155, 0, 2470, 2471, 5, 82, 0, 0, 2471, 2474, 3, 310, 155, 0, 2472, 2473, 5, 78, 0, 0, 2473, 2475, 3, 310, 155, 0, 2474, 2472, 1, 0, 0, 0, 2474, 2475, 1, 0, 0, 0, 2475, 2476, 1, 0, 0, 0, 2476, 2477, 5, 266, 0, 0, 2477, 2512, 1, 0, 0, 0, 2478, 2479, 5, 131, 0, 0, 2479, 2480, 5, 265, 0, 0, 2480, 2483, 3, 310, 155, 0, 2481, 2482, 5, 263, 0, 0, 2482, 2484, 3, 326, 163, 0, 2483, 2481, 1, 0, 0, 0, 2483, 2484, 1, 0, 0, 0, 2484, 2485, 1, 0, 0, 0, 2485, 2486, 5, 266, 0, 0, 2486, 2512, 1, 0, 0, 0, 2487, 2488, 5, 68, 0, 0, 2488, 2489, 5, 265, 0, 0, 2489, 2490, 3, 358, 179, 0, 2490, 2491, 5, 82, 0, 0, 2491, 2492, 3, 310, 155, 0, 2492, 2493, 5, 266, 0, 0, 2493, 2512, 1, 0, 0, 0, 2494, 2495, 5, 265, 0, 0, 2495, 2496, 3, 304, 152, 0, 2496, 2497, 5, 266, 0, 0, 2497, 2512, 1, 0, 0, 0, 2498, 2499, 5, 88, 0, 0, 2499, 2508, 5, 265, 0, 0, 2500, 2505, 3, 354, 177, 0, 2501, 2502, 5, 263, 0, 0, 2502, 2504, 3, 354, 177, 0, 2503, 2501, 1, 0, 0, 0, 2504, 2507, 1, 0, 0, 0, 2505, 2503, 1, 0, 0, 0, 2505, 2506, 1, 0, 0, 0, 2506, 2509, 1, 0, 0, 0, 2507, 2505, 1, 0, 0, 0, 2508, 2500, 1, 0, 0, 0, 2508, 2509, 1, 0, 0, 0, 2509, 2510, 1, 0, 0, 0, 2510, 2512, 5, 266, 0, 0, 2511, 2265, 1, 0, 0, 0, 2511, 2267, 1, 0, 0, 0, 2511, 2268, 1, 0, 0, 0, 2511, 2271, 1, 0, 0, 0, 2511, 2273, 1, 0, 0, 0, 2511, 2274, 1, 0, 0, 0, 2511, 2275, 1, 0, 0, 0, 2511, 2276, 1, 0, 0, 0, 2511, 2277, 1, 0, 0, 0, 2511, 2278, 1, 0, 0, 0, 2511, 2285, 1, 0, 0, 0, 2511, 2304, 1, 0, 0, 0, 2511, 2316, 1, 0, 0, 0, 2511, 2326, 1, 0, 0, 0, 2511, 2360, 1, 0, 0, 0, 2511, 2364, 1, 0, 0, 0, 2511, 2378, 1, 0, 0, 0, 2511, 2382, 1, 0, 0, 0, 2511, 2387, 1, 0, 0, 0, 2511, 2400, 1, 0, 0, 0, 2511, 2412, 1, 0, 0, 0, 2511, 2419, 1, 0, 0, 0, 2511, 2426, 1, 0, 0, 0, 2511, 2439, 1, 0, 0, 0, 2511, 2440, 1, 0, 0, 0, 2511, 2441, 1, 0, 0, 0, 2511, 2447, 1, 0, 0, 0, 2511, 2453, 1, 0, 0, 0, 2511, 2459, 1, 0, 0, 0, 2511, 2465, 1, 0, 0, 0, 2511, 2466, 1, 0, 0, 0, 2511, 2467, 1, 0, 0, 0, 2511, 2478, 1, 0, 0, 0, 2511, 2487, 1, 0, 0, 0, 2511, 2494, 1, 0, 0, 0, 2511, 2498, 1, 0, 0, 0, 2512, 2523, 1, 0, 0, 0, 2513, 2514, 10, 15, 0, 0, 2514, 2515, 5, 267, 0, 0, 2515, 2516, 3, 310, 155, 0, 2516, 2517, 5, 268, 0, 0, 2517, 2522, 1, 0, 0, 0, 2518, 2519, 10, 13, 0, 0, 2519, 2520, 5, 261, 0, 0, 2520, 2522, 3, 358, 179, 0, 2521, 2513, 1, 0, 0, 0, 2521, 2518, 1, 0, 0, 0, 2522, 2525, 1, 0, 0, 0, 2523, 2521, 1, 0, 0, 0, 2523, 2524, 1, 0, 0, 0, 2524, 313, 1, 0, 0, 0, 2525, 2523, 1, 0, 0, 0, 2526, 2533, 5, 274, 0, 0, 2527, 2530, 5, 275, 0, 0, 2528, 2529, 5, 198, 0, 0, 2529, 2531, 5, 274, 0, 0, 2530, 2528, 1, 0, 0, 0, 2530, 2531, 1, 0, 0, 0, 2531, 2533, 1, 0, 0, 0, 2532, 2526, 1, 0, 0, 0, 2532, 2527, 1, 0, 0, 0, 2533, 315, 1, 0, 0, 0, 2534, 2535, 7, 23, 0, 0, 2535, 317, 1, 0, 0, 0, 2536, 2537, 7, 24, 0, 0, 2537, 319, 1, 0, 0, 0, 2538, 2539, 7, 25, 0, 0, 2539, 321, 1, 0, 0, 0, 2540, 2541, 5, 277, 0, 0, 2541, 2555, 3, 324, 162, 0, 2542, 2543, 5, 265, 0, 0, 2543, 2544, 5, 277, 0, 0, 2544, 2545, 5, 266, 0, 0, 2545, 2555, 3, 324, 162, 0, 2546, 2547, 5, 101, 0, 0, 2547, 2548, 5, 277, 0, 0, 2548, 2555, 3, 324, 162, 0, 2549, 2550, 5, 101, 0, 0, 2550, 2551, 5, 265, 0, 0, 2551, 2552, 5, 277, 0, 0, 2552, 2553, 5, 266, 0, 0, 2553, 2555, 3, 324, 162, 0, 2554, 2540, 1, 0, 0, 0, 2554, 2542, 1, 0, 0, 0, 2554, 2546, 1, 0, 0, 0, 2554, 2549, 1, 0, 0, 0, 2555, 323, 1, 0, 0, 0, 2556, 2557, 7, 26, 0, 0, 2557, 325, 1, 0, 0, 0, 2558, 2559, 7, 27, 0, 0, 2559, 327, 1, 0, 0, 0, 2560, 2561, 6, 164, -1, 0, 2561, 2562, 5, 8, 0, 0, 2562, 2563, 5, 251, 0, 0, 2563, 2564, 3, 328, 164, 0, 2564, 2565, 5, 253, 0, 0, 2565, 2606, 1, 0, 0, 0, 2566, 2567, 5, 235, 0, 0, 2567, 2568, 5, 251, 0, 0, 2568, 2569, 3, 328, 164, 0, 2569, 2570, 5, 263, 0, 0, 2570, 2571, 3, 328, 164, 0, 2571, 2572, 5, 253, 0, 0, 2572, 2606, 1, 0, 0, 0, 2573, 2574, 5, 240, 0, 0, 2574, 2575, 5, 251, 0, 0, 2575, 2576, 3, 358, 179, 0, 2576, 2583, 3, 328, 164, 0, 2577, 2578, 5, 263, 0, 0, 2578, 2579, 3, 358, 179, 0, 2579, 2580, 3, 328, 164, 0, 2580, 2582, 1, 0, 0, 0, 2581, 2577, 1, 0, 0, 0, 2582, 2585, 1, 0, 0, 0, 2583, 2581, 1, 0, 0, 0, 2583, 2584, 1, 0, 0, 0, 2584, 2586, 1, 0, 0, 0, 2585, 2583, 1, 0, 0, 0, 2586, 2587, 5, 253, 0, 0, 2587, 2606, 1, 0, 0, 0, 2588, 2591, 3, 334, 167, 0, 2589, 2591, 3, 330, 165, 0, 2590, 2588, 1, 0, 0, 0, 2590, 2589, 1, 0, 0, 0, 2591, 2603, 1, 0, 0, 0, 2592, 2593, 5, 265, 0, 0, 2593, 2598, 3, 332, 166, 0, 2594, 2595, 5, 263, 0, 0, 2595, 2597, 3, 332, 166, 0, 2596, 2594, 1, 0, 0, 0, 2597, 2600, 1, 0, 0, 0, 2598, 2596, 1, 0, 0, 0, 2598, 2599, 1, 0, 0, 0, 2599, 2601, 1, 0, 0, 0, 2600, 2598, 1, 0, 0, 0, 2601, 2602, 5, 266, 0, 0, 2602, 2604, 1, 0, 0, 0, 2603, 2592, 1, 0, 0, 0, 2603, 2604, 1, 0, 0, 0, 2604, 2606, 1, 0, 0, 0, 2605, 2560, 1, 0, 0, 0, 2605, 2566, 1, 0, 0, 0, 2605, 2573, 1, 0, 0, 0, 2605, 2590, 1, 0, 0, 0, 2606, 2611, 1, 0, 0, 0, 2607, 2608, 10, 5, 0, 0, 2608, 2610, 5, 8, 0, 0, 2609, 2607, 1, 0, 0, 0, 2610, 2613, 1, 0, 0, 0, 2611, 2609, 1, 0, 0, 0, 2611, 2612, 1, 0, 0, 0, 2612, 329, 1, 0, 0, 0, 2613, 2611, 1, 0, 0, 0, 2614, 2615, 7, 28, 0, 0, 2615, 331, 1, 0, 0, 0, 2616, 2619, 5, 277, 0, 0, 2617, 2619, 3, 328, 164, 0, 2618, 2616, 1, 0, 0, 0, 2618, 2617, 1, 0, 0, 0, 2619, 333, 1, 0, 0, 0, 2620, 2625, 5, 284, 0, 0, 2621, 2625, 5, 285, 0, 0, 2622, 2625, 5, 286, 0, 0, 2623, 2625, 3, 358, 179, 0, 2624, 2620, 1, 0, 0, 0, 2624, 2621, 1, 0, 0, 0, 2624, 2622, 1, 0, 0, 0, 2624, 2623, 1, 0, 0, 0, 2625, 335, 1, 0, 0, 0, 2626, 2627, 5, 214, 0, 0, 2627, 2628, 3, 304, 152, 0, 2628, 2629, 5, 192, 0, 0, 2629, 2630, 3, 304, 152, 0, 2630, 337, 1, 0, 0, 0, 2631, 2632, 5, 74, 0, 0, 2632, 2633, 5, 265, 0, 0, 2633, 2634, 5, 215, 0, 0, 2634, 2635, 3, 306, 153, 0, 2635, 2636, 5, 266, 0, 0, 2636, 339, 1, 0, 0, 0, 2637, 2638, 5, 143, 0, 0, 2638, 2649, 5, 265, 0, 0, 2639, 2640, 5, 145, 0, 0, 2640, 2641, 5, 26, 0, 0, 2641, 2646, 3, 304, 152, 0, 2642, 2643, 5, 263, 0, 0, 2643, 2645, 3, 304, 152, 0, 2644, 2642, 1, 0, 0, 0, 2645, 2648, 1, 0, 0, 0, 2646, 2644, 1, 0, 0, 0, 2646, 2647, 1, 0, 0, 0, 2647, 2650, 1, 0, 0, 0, 2648, 2646, 1, 0, 0, 0, 2649, 2639, 1, 0, 0, 0, 2649, 2650, 1, 0, 0, 0, 2650, 2661, 1, 0, 0, 0, 2651, 2652, 5, 139, 0, 0, 2652, 2653, 5, 26, 0, 0, 2653, 2658, 3, 264, 132, 0, 2654, 2655, 5, 263, 0, 0, 2655, 2657, 3, 264, 132, 0, 2656, 2654, 1, 0, 0, 0, 2657, 2660, 1, 0, 0, 0, 2658, 2656, 1, 0, 0, 0, 2658, 2659, 1, 0, 0, 0, 2659, 2662, 1, 0, 0, 0, 2660, 2658, 1, 0, 0, 0, 2661, 2651, 1, 0, 0, 0, 2661, 2662, 1, 0, 0, 0, 2662, 2664, 1, 0, 0, 0, 2663, 2665, 3, 342, 171, 0, 2664, 2663, 1, 0, 0, 0, 2664, 2665, 1, 0, 0, 0, 2665, 2666, 1, 0, 0, 0, 2666, 2667, 5, 266, 0, 0, 2667, 341, 1, 0, 0, 0, 2668, 2669, 5, 154, 0, 0, 2669, 2685, 3, 344, 172, 0, 2670, 2671, 5, 169, 0, 0, 2671, 2685, 3, 344, 172, 0, 2672, 2673, 5, 154, 0, 0, 2673, 2674, 5, 15, 0, 0, 2674, 2675, 3, 344, 172, 0, 2675, 2676, 5, 5, 0, 0, 2676, 2677, 3, 344, 172, 0, 2677, 2685, 1, 0, 0, 0, 2678, 2679, 5, 169, 0, 0, 2679, 2680, 5, 15, 0, 0, 2680, 2681, 3, 344, 172, 0, 2681, 2682, 5, 5, 0, 0, 2682, 2683, 3, 344, 172, 0, 2683, 2685, 1, 0, 0, 0, 2684, 2668, 1, 0, 0, 0, 2684, 2670, 1, 0, 0, 0, 2684, 2672, 1, 0, 0, 0, 2684, 2678, 1, 0, 0, 0, 2685, 343, 1, 0, 0, 0, 2686, 2687, 5, 199, 0, 0, 2687, 2696, 5, 149, 0, 0, 2688, 2689, 5, 199, 0, 0, 2689, 2696, 5, 77, 0, 0, 2690, 2691, 5, 39, 0, 0, 2691, 2696, 5, 168, 0, 0, 2692, 2693, 3, 304, 152, 0, 2693, 2694, 7, 29, 0, 0, 2694, 2696, 1, 0, 0, 0, 2695, 2686, 1, 0, 0, 0, 2695, 2688, 1, 0, 0, 0, 2695, 2690, 1, 0, 0, 0, 2695, 2692, 1, 0, 0, 0, 2696, 345, 1, 0, 0, 0, 2697, 2698, 3, 358, 179, 0, 2698, 2699, 5, 261, 0, 0, 2699, 2700, 3, 358, 179, 0, 2700, 2703, 1, 0, 0, 0, 2701, 2703, 3, 358, 179, 0, 2702, 2697, 1, 0, 0, 0, 2702, 2701, 1, 0, 0, 0, 2703, 347, 1, 0, 0, 0, 2704, 2709, 3, 346, 173, 0, 2705, 2706, 5, 263, 0, 0, 2706, 2708, 3, 346, 173, 0, 2707, 2705, 1, 0, 0, 0, 2708, 2711, 1, 0, 0, 0, 2709, 2707, 1, 0, 0, 0, 2709, 2710, 1, 0, 0, 0, 2710, 349, 1, 0, 0, 0, 2711, 2709, 1, 0, 0, 0, 2712, 2726, 5, 2, 0, 0, 2713, 2726, 5, 4, 0, 0, 2714, 2726, 5, 58, 0, 0, 2715, 2726, 5, 37, 0, 0, 2716, 2726, 5, 99, 0, 0, 2717, 2726, 5, 162, 0, 0, 2718, 2723, 5, 174, 0, 0, 2719, 2720, 5, 265, 0, 0, 2720, 2721, 3, 358, 179, 0, 2721, 2722, 5, 266, 0, 0, 2722, 2724, 1, 0, 0, 0, 2723, 2719, 1, 0, 0, 0, 2723, 2724, 1, 0, 0, 0, 2724, 2726, 1, 0, 0, 0, 2725, 2712, 1, 0, 0, 0, 2725, 2713, 1, 0, 0, 0, 2725, 2714, 1, 0, 0, 0, 2725, 2715, 1, 0, 0, 0, 2725, 2716, 1, 0, 0, 0, 2725, 2717, 1, 0, 0, 0, 2725, 2718, 1, 0, 0, 0, 2726, 351, 1, 0, 0, 0, 2727, 2728, 7, 30, 0, 0, 2728, 353, 1, 0, 0, 0, 2729, 2734, 3, 358, 179, 0, 2730, 2731, 5, 261, 0, 0, 2731, 2733, 3, 358, 179, 0, 2732, 2730, 1, 0, 0, 0, 2733, 2736, 1, 0, 0, 0, 2734, 2732, 1, 0, 0, 0, 2734, 2735, 1, 0, 0, 0, 2735, 355, 1, 0, 0, 0, 2736, 2734, 1, 0, 0, 0, 2737, 2738, 5, 166, 0, 0, 2738, 2744, 3, 358, 179, 0, 2739, 2740, 5, 204, 0, 0, 2740, 2744, 3, 358, 179, 0, 2741, 2742, 5, 87, 0, 0, 2742, 2744, 3, 358, 179, 0, 2743, 2737, 1, 0, 0, 0, 2743, 2739, 1, 0, 0, 0, 2743, 2741, 1, 0, 0, 0, 2744, 357, 1, 0, 0, 0, 2745, 2751, 5, 280, 0, 0, 2746, 2751, 5, 274, 0, 0, 2747, 2751, 3, 364, 182, 0, 2748, 2751, 5, 283, 0, 0, 2749, 2751, 5, 281, 0, 0, 2750, 2745, 1, 0, 0, 0, 2750, 2746, 1, 0, 0, 0, 2750, 2747, 1, 0, 0, 0, 2750, 2748, 1, 0, 0, 0, 2750, 2749, 1, 0, 0, 0, 2751, 359, 1, 0, 0, 0, 2752, 2754, 5, 256, 0, 0, 2753, 2752, 1, 0, 0, 0, 2753, 2754, 1, 0, 0, 0, 2754, 2755, 1, 0, 0, 0, 2755, 2765, 5, 278, 0, 0, 2756, 2758, 5, 256, 0, 0, 2757, 2756, 1, 0, 0, 0, 2757, 2758, 1, 0, 0, 0, 2758, 2759, 1, 0, 0, 0, 2759, 2765, 5, 279, 0, 0, 2760, 2762, 5, 256, 0, 0, 2761, 2760, 1, 0, 0, 0, 2761, 2762, 1, 0, 0, 0, 2762, 2763, 1, 0, 0, 0, 2763, 2765, 5, 277, 0, 0, 2764, 2753, 1, 0, 0, 0, 2764, 2757, 1, 0, 0, 0, 2764, 2761, 1, 0, 0, 0, 2765, 361, 1, 0, 0, 0, 2766, 2767, 7, 31, 0, 0, 2767, 363, 1, 0, 0, 0, 2768, 2769, 7, 32, 0, 0, 2769, 365, 1, 0, 0, 0, 352, 369, 376, 400, 413, 417, 421, 430, 435, 439, 445, 447, 452, 456, 460, 467, 472, 478, 482, 491, 498, 502, 507, 509, 514, 518, 525, 529, 534, 538, 542, 546, 554, 559, 563, 571, 575, 584, 587, 590, 596, 603, 614, 619, 624, 629, 634, 643, 646, 649, 653, 679, 705, 714, 724, 727, 741, 759, 761, 770, 781, 790, 797, 801, 808, 814, 817, 822, 829, 843, 856, 861, 866, 872, 908, 911, 917, 920, 926, 932, 944, 946, 957, 965, 970, 974, 979, 986, 990, 994, 1000, 1004, 1008, 1017, 1020, 1023, 1031, 1045, 1052, 1065, 1071, 1076, 1079, 1082, 1087, 1091, 1100, 1105, 1111, 1115, 1120, 1125, 1128, 1136, 1139, 1143, 1155, 1158, 1162, 1167, 1171, 1187, 1192, 1199, 1202, 1208, 1211, 1218, 1221, 1225, 1230, 1233, 1240, 1243, 1267, 1281, 1285, 1289, 1309, 1311, 1313, 1322, 1324, 1333, 1335, 1344, 1346, 1351, 1360, 1369, 1378, 1389, 1395, 1400, 1403, 1416, 1426, 1430, 1435, 1446, 1451, 1484, 1492, 1497, 1501, 1505, 1510, 1514, 1519, 1524, 1529, 1533, 1542, 1545, 1549, 1556, 1567, 1573, 1577, 1583, 1593, 1600, 1605, 1610, 1615, 1621, 1624, 1633, 1636, 1639, 1645, 1651, 1661, 1664, 1668, 1672, 1679, 1682, 1688, 1694, 1697, 1700, 1704, 1714, 1725, 1730, 1733, 1737, 1744, 1754, 1766, 1772, 1774, 1783, 1786, 1793, 1803, 1809, 1817, 1828, 1838, 1849, 1851, 1857, 1862, 1872, 1875, 1881, 1883, 1891, 1897, 1900, 1902, 1914, 1921, 1925, 1929, 1933, 1936, 1943, 1952, 1955, 1959, 1964, 1968, 1971, 1978, 1989, 1992, 1996, 2000, 2009, 2012, 2019, 2033, 2037, 2041, 2045, 2049, 2053, 2057, 2061, 2071, 2082, 2087, 2100, 2102, 2108, 2112, 2114, 2122, 2129, 2134, 2147, 2153, 2161, 2168, 2172, 2180, 2182, 2193, 2201, 2210, 2216, 2221, 2227, 2233, 2238, 2243, 2249, 2260, 2262, 2289, 2295, 2299, 2311, 2321, 2324, 2329, 2336, 2339, 2348, 2351, 2355, 2358, 2370, 2373, 2392, 2396, 2404, 2408, 2433, 2436, 2445, 2451, 2457, 2463, 2474, 2483, 2505, 2508, 2511, 2521, 2523, 2530, 2532, 2554, 2583, 2590, 2598, 2603, 2605, 2611, 2618, 2624, 2646, 2649, 2658, 2661, 2664, 2684, 2695, 2702, 2709, 2723, 2725, 2734, 2743, 2750, 2753, 2757, 2761, 2764] \ No newline at end of file +[4, 1, 289, 2772, 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, 1, 0, 5, 0, 372, 8, 0, 10, 0, 12, 0, 375, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 381, 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, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 405, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 418, 8, 4, 1, 5, 1, 5, 3, 5, 422, 8, 5, 1, 5, 1, 5, 3, 5, 426, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 433, 8, 5, 10, 5, 12, 5, 436, 9, 5, 1, 5, 1, 5, 3, 5, 440, 8, 5, 1, 5, 1, 5, 3, 5, 444, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 450, 8, 5, 3, 5, 452, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 457, 8, 5, 1, 6, 1, 6, 3, 6, 461, 8, 6, 1, 6, 1, 6, 3, 6, 465, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 472, 8, 6, 1, 6, 1, 6, 1, 6, 3, 6, 477, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 3, 7, 483, 8, 7, 1, 7, 1, 7, 3, 7, 487, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 494, 8, 7, 10, 7, 12, 7, 497, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 503, 8, 7, 1, 7, 1, 7, 3, 7, 507, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 512, 8, 7, 3, 7, 514, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 519, 8, 7, 1, 7, 3, 7, 522, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 529, 8, 7, 1, 7, 1, 7, 3, 7, 533, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 538, 8, 8, 1, 8, 1, 8, 3, 8, 542, 8, 8, 1, 8, 3, 8, 545, 8, 8, 1, 8, 1, 8, 3, 8, 549, 8, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 3, 9, 557, 8, 9, 1, 9, 1, 9, 3, 9, 561, 8, 9, 1, 9, 1, 9, 3, 9, 565, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 573, 8, 11, 1, 11, 1, 11, 3, 11, 577, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 584, 8, 11, 10, 11, 12, 11, 587, 9, 11, 3, 11, 589, 8, 11, 1, 11, 3, 11, 592, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 598, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 605, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 616, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 621, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 626, 8, 11, 1, 11, 1, 11, 1, 11, 3, 11, 631, 8, 11, 1, 12, 1, 12, 1, 12, 3, 12, 636, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 643, 8, 12, 10, 12, 12, 12, 646, 9, 12, 3, 12, 648, 8, 12, 1, 12, 3, 12, 651, 8, 12, 1, 12, 1, 12, 3, 12, 655, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 681, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 707, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 716, 8, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 726, 8, 16, 1, 16, 3, 16, 729, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 743, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 761, 8, 20, 3, 20, 763, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 770, 8, 20, 10, 20, 12, 20, 773, 9, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 783, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 792, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 799, 8, 22, 1, 22, 1, 22, 3, 22, 803, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 810, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 816, 8, 23, 1, 23, 3, 23, 819, 8, 23, 1, 23, 1, 23, 1, 23, 3, 23, 824, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 831, 8, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 845, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 858, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 863, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 868, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 874, 8, 27, 1, 27, 1, 27, 1, 27, 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, 29, 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, 32, 1, 32, 3, 32, 910, 8, 32, 1, 32, 3, 32, 913, 8, 32, 1, 32, 1, 32, 1, 33, 1, 33, 3, 33, 919, 8, 33, 1, 33, 3, 33, 922, 8, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 928, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 934, 8, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 946, 8, 35, 3, 35, 948, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 959, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 967, 8, 37, 1, 38, 1, 38, 1, 38, 3, 38, 972, 8, 38, 1, 38, 1, 38, 3, 38, 976, 8, 38, 1, 39, 1, 39, 1, 39, 3, 39, 981, 8, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 988, 8, 40, 1, 40, 1, 40, 3, 40, 992, 8, 40, 1, 41, 1, 41, 3, 41, 996, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1002, 8, 41, 1, 42, 1, 42, 3, 42, 1006, 8, 42, 1, 42, 1, 42, 3, 42, 1010, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 5, 42, 1017, 8, 42, 10, 42, 12, 42, 1020, 9, 42, 3, 42, 1022, 8, 42, 1, 42, 3, 42, 1025, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 1033, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1047, 8, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 3, 47, 1054, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1067, 8, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1073, 8, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1078, 8, 49, 1, 49, 3, 49, 1081, 8, 49, 1, 50, 3, 50, 1084, 8, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1089, 8, 50, 1, 50, 1, 50, 3, 50, 1093, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1100, 8, 50, 10, 50, 12, 50, 1103, 9, 50, 1, 50, 1, 50, 3, 50, 1107, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 3, 51, 1113, 8, 51, 1, 52, 1, 52, 3, 52, 1117, 8, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1122, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 1127, 8, 53, 1, 53, 3, 53, 1130, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 1136, 8, 53, 10, 53, 12, 53, 1139, 9, 53, 3, 53, 1141, 8, 53, 1, 53, 1, 53, 3, 53, 1145, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 1155, 8, 54, 10, 54, 12, 54, 1158, 9, 54, 3, 54, 1160, 8, 54, 1, 54, 1, 54, 3, 54, 1164, 8, 54, 1, 55, 1, 55, 1, 55, 3, 55, 1169, 8, 55, 1, 55, 1, 55, 3, 55, 1173, 8, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 1189, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 1194, 8, 57, 1, 57, 1, 57, 1, 57, 5, 57, 1199, 8, 57, 10, 57, 12, 57, 1202, 9, 57, 3, 57, 1204, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1210, 8, 58, 1, 58, 3, 58, 1213, 8, 58, 1, 58, 1, 58, 1, 58, 5, 58, 1218, 8, 58, 10, 58, 12, 58, 1221, 9, 58, 3, 58, 1223, 8, 58, 1, 59, 1, 59, 3, 59, 1227, 8, 59, 1, 59, 1, 59, 1, 59, 3, 59, 1232, 8, 59, 1, 59, 3, 59, 1235, 8, 59, 1, 59, 1, 59, 1, 59, 5, 59, 1240, 8, 59, 10, 59, 12, 59, 1243, 9, 59, 3, 59, 1245, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 3, 64, 1269, 8, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1283, 8, 65, 1, 65, 1, 65, 3, 65, 1287, 8, 65, 1, 66, 1, 66, 3, 66, 1291, 8, 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, 68, 1, 68, 1, 68, 3, 68, 1311, 8, 68, 3, 68, 1313, 8, 68, 3, 68, 1315, 8, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 1324, 8, 69, 3, 69, 1326, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 3, 70, 1335, 8, 70, 3, 70, 1337, 8, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1346, 8, 71, 3, 71, 1348, 8, 71, 1, 72, 1, 72, 1, 72, 3, 72, 1353, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1362, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1371, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1380, 8, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 1391, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1397, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1402, 8, 78, 1, 78, 3, 78, 1405, 8, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1418, 8, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 1428, 8, 80, 1, 80, 1, 80, 3, 80, 1432, 8, 80, 1, 81, 1, 81, 1, 81, 3, 81, 1437, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, 1446, 8, 82, 10, 82, 12, 82, 1449, 9, 82, 1, 82, 1, 82, 3, 82, 1453, 8, 82, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 88, 1, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 5, 93, 1484, 8, 93, 10, 93, 12, 93, 1487, 9, 93, 1, 94, 1, 94, 1, 94, 5, 94, 1492, 8, 94, 10, 94, 12, 94, 1495, 9, 94, 1, 95, 1, 95, 3, 95, 1499, 8, 95, 1, 96, 1, 96, 3, 96, 1503, 8, 96, 1, 97, 1, 97, 3, 97, 1507, 8, 97, 1, 98, 1, 98, 1, 98, 3, 98, 1512, 8, 98, 1, 98, 3, 98, 1515, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1520, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1525, 8, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1530, 8, 98, 1, 98, 1, 98, 3, 98, 1534, 8, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1543, 8, 98, 1, 98, 3, 98, 1546, 8, 98, 1, 98, 1, 98, 3, 98, 1550, 8, 98, 1, 99, 1, 99, 1, 99, 5, 99, 1555, 8, 99, 10, 99, 12, 99, 1558, 9, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 3, 101, 1566, 8, 101, 1, 101, 1, 101, 3, 101, 1570, 8, 101, 5, 101, 1572, 8, 101, 10, 101, 12, 101, 1575, 9, 101, 1, 101, 1, 101, 1, 102, 1, 102, 3, 102, 1581, 8, 102, 1, 103, 3, 103, 1584, 8, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1592, 8, 104, 10, 104, 12, 104, 1595, 9, 104, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1601, 8, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1606, 8, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1611, 8, 105, 1, 105, 1, 105, 1, 105, 3, 105, 1616, 8, 105, 1, 105, 1, 105, 5, 105, 1620, 8, 105, 10, 105, 12, 105, 1623, 9, 105, 3, 105, 1625, 8, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 1634, 8, 106, 1, 106, 3, 106, 1637, 8, 106, 1, 106, 3, 106, 1640, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 3, 107, 1646, 8, 107, 1, 108, 1, 108, 1, 108, 3, 108, 1651, 8, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 1659, 8, 110, 10, 110, 12, 110, 1662, 9, 110, 3, 110, 1664, 8, 110, 1, 110, 3, 110, 1667, 8, 110, 1, 110, 1, 110, 3, 110, 1671, 8, 110, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 5, 112, 1679, 8, 112, 10, 112, 12, 112, 1682, 9, 112, 3, 112, 1684, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 3, 113, 1690, 8, 113, 1, 113, 1, 113, 5, 113, 1694, 8, 113, 10, 113, 12, 113, 1697, 9, 113, 3, 113, 1699, 8, 113, 1, 114, 3, 114, 1702, 8, 114, 1, 114, 1, 114, 3, 114, 1706, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 1716, 8, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 5, 118, 1725, 8, 118, 10, 118, 12, 118, 1728, 9, 118, 1, 118, 1, 118, 3, 118, 1732, 8, 118, 1, 118, 3, 118, 1735, 8, 118, 1, 119, 1, 119, 3, 119, 1739, 8, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 3, 120, 1746, 8, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1754, 8, 120, 10, 120, 12, 120, 1757, 9, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 1768, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 1774, 8, 121, 3, 121, 1776, 8, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 1785, 8, 122, 1, 122, 3, 122, 1788, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1795, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1805, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 3, 125, 1811, 8, 125, 1, 126, 1, 126, 1, 126, 1, 126, 5, 126, 1817, 8, 126, 10, 126, 12, 126, 1820, 9, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1828, 8, 127, 10, 127, 12, 127, 1831, 9, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 5, 128, 1838, 8, 128, 10, 128, 12, 128, 1841, 9, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1851, 8, 129, 3, 129, 1853, 8, 129, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 1859, 8, 129, 1, 130, 1, 130, 1, 130, 3, 130, 1864, 8, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1872, 8, 131, 10, 131, 12, 131, 1875, 9, 131, 3, 131, 1877, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1883, 8, 131, 3, 131, 1885, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1893, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1899, 8, 132, 1, 132, 5, 132, 1902, 8, 132, 10, 132, 12, 132, 1905, 9, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1914, 8, 133, 10, 133, 12, 133, 1917, 9, 133, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1923, 8, 133, 1, 134, 1, 134, 3, 134, 1927, 8, 134, 1, 134, 1, 134, 3, 134, 1931, 8, 134, 1, 135, 1, 135, 3, 135, 1935, 8, 135, 1, 135, 3, 135, 1938, 8, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1943, 8, 135, 10, 135, 12, 135, 1946, 9, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1952, 8, 135, 10, 135, 12, 135, 1955, 9, 135, 3, 135, 1957, 8, 135, 1, 135, 1, 135, 3, 135, 1961, 8, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1966, 8, 135, 1, 135, 1, 135, 3, 135, 1970, 8, 135, 1, 136, 3, 136, 1973, 8, 136, 1, 136, 1, 136, 1, 136, 5, 136, 1978, 8, 136, 10, 136, 12, 136, 1981, 9, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 5, 138, 1989, 8, 138, 10, 138, 12, 138, 1992, 9, 138, 3, 138, 1994, 8, 138, 1, 138, 1, 138, 3, 138, 1998, 8, 138, 1, 139, 1, 139, 3, 139, 2002, 8, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 3, 141, 2011, 8, 141, 1, 141, 3, 141, 2014, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 2021, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 2035, 8, 142, 5, 142, 2037, 8, 142, 10, 142, 12, 142, 2040, 9, 142, 1, 143, 3, 143, 2043, 8, 143, 1, 143, 1, 143, 3, 143, 2047, 8, 143, 1, 143, 1, 143, 3, 143, 2051, 8, 143, 1, 143, 1, 143, 3, 143, 2055, 8, 143, 1, 143, 1, 143, 3, 143, 2059, 8, 143, 1, 143, 1, 143, 3, 143, 2063, 8, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 2073, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 5, 144, 2082, 8, 144, 10, 144, 12, 144, 2085, 9, 144, 1, 144, 1, 144, 3, 144, 2089, 8, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 3, 145, 2102, 8, 145, 3, 145, 2104, 8, 145, 1, 146, 1, 146, 1, 147, 1, 147, 3, 147, 2110, 8, 147, 1, 147, 1, 147, 3, 147, 2114, 8, 147, 3, 147, 2116, 8, 147, 1, 148, 1, 148, 1, 148, 1, 148, 5, 148, 2122, 8, 148, 10, 148, 12, 148, 2125, 9, 148, 1, 148, 1, 148, 1, 149, 1, 149, 3, 149, 2131, 8, 149, 1, 149, 1, 149, 1, 149, 3, 149, 2136, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 5, 151, 2147, 8, 151, 10, 151, 12, 151, 2150, 9, 151, 1, 151, 1, 151, 1, 151, 3, 151, 2155, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 3, 153, 2163, 8, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 3, 155, 2170, 8, 155, 1, 155, 1, 155, 3, 155, 2174, 8, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 5, 155, 2182, 8, 155, 10, 155, 12, 155, 2185, 9, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2195, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2203, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 5, 156, 2210, 8, 156, 10, 156, 12, 156, 2213, 9, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2218, 8, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2223, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2229, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2235, 8, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2240, 8, 156, 1, 156, 1, 156, 1, 156, 3, 156, 2245, 8, 156, 1, 157, 1, 157, 1, 157, 1, 157, 3, 157, 2251, 8, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 5, 157, 2262, 8, 157, 10, 157, 12, 157, 2265, 9, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2291, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2297, 8, 158, 5, 158, 2299, 8, 158, 10, 158, 12, 158, 2302, 9, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2311, 8, 158, 10, 158, 12, 158, 2314, 9, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2323, 8, 158, 1, 158, 3, 158, 2326, 8, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2331, 8, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2336, 8, 158, 10, 158, 12, 158, 2339, 9, 158, 3, 158, 2341, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2348, 8, 158, 10, 158, 12, 158, 2351, 9, 158, 3, 158, 2353, 8, 158, 1, 158, 1, 158, 3, 158, 2357, 8, 158, 1, 158, 3, 158, 2360, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2370, 8, 158, 10, 158, 12, 158, 2373, 9, 158, 3, 158, 2375, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 4, 158, 2392, 8, 158, 11, 158, 12, 158, 2393, 1, 158, 1, 158, 3, 158, 2398, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 4, 158, 2404, 8, 158, 11, 158, 12, 158, 2405, 1, 158, 1, 158, 3, 158, 2410, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2433, 8, 158, 10, 158, 12, 158, 2436, 9, 158, 3, 158, 2438, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2447, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2453, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2459, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2465, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2476, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 2485, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2505, 8, 158, 10, 158, 12, 158, 2508, 9, 158, 3, 158, 2510, 8, 158, 1, 158, 3, 158, 2513, 8, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 5, 158, 2523, 8, 158, 10, 158, 12, 158, 2526, 9, 158, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 2532, 8, 159, 3, 159, 2534, 8, 159, 1, 160, 1, 160, 1, 161, 1, 161, 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, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2556, 8, 163, 1, 164, 1, 164, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 5, 166, 2583, 8, 166, 10, 166, 12, 166, 2586, 9, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2592, 8, 166, 1, 166, 1, 166, 1, 166, 1, 166, 5, 166, 2598, 8, 166, 10, 166, 12, 166, 2601, 9, 166, 1, 166, 1, 166, 3, 166, 2605, 8, 166, 3, 166, 2607, 8, 166, 1, 166, 1, 166, 5, 166, 2611, 8, 166, 10, 166, 12, 166, 2614, 9, 166, 1, 167, 1, 167, 1, 168, 1, 168, 3, 168, 2620, 8, 168, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 2626, 8, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 5, 172, 2646, 8, 172, 10, 172, 12, 172, 2649, 9, 172, 3, 172, 2651, 8, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 5, 172, 2658, 8, 172, 10, 172, 12, 172, 2661, 9, 172, 3, 172, 2663, 8, 172, 1, 172, 3, 172, 2666, 8, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 2686, 8, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 2697, 8, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 2704, 8, 175, 1, 176, 1, 176, 1, 176, 5, 176, 2709, 8, 176, 10, 176, 12, 176, 2712, 9, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 2725, 8, 177, 3, 177, 2727, 8, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 5, 179, 2734, 8, 179, 10, 179, 12, 179, 2737, 9, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 2745, 8, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 2752, 8, 181, 1, 182, 3, 182, 2755, 8, 182, 1, 182, 1, 182, 3, 182, 2759, 8, 182, 1, 182, 1, 182, 3, 182, 2763, 8, 182, 1, 182, 3, 182, 2766, 8, 182, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 10, 771, 1447, 1621, 1660, 1680, 1695, 1726, 1755, 1829, 2300, 6, 264, 284, 310, 314, 316, 332, 185, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 0, 33, 2, 0, 46, 46, 170, 170, 2, 0, 166, 166, 204, 204, 2, 0, 176, 176, 202, 202, 2, 0, 69, 69, 80, 80, 2, 0, 27, 27, 159, 159, 2, 0, 103, 103, 144, 144, 2, 0, 47, 47, 171, 171, 2, 0, 3, 3, 12, 12, 3, 0, 87, 87, 166, 166, 204, 204, 2, 0, 178, 178, 209, 209, 1, 0, 245, 248, 2, 0, 147, 147, 219, 223, 2, 0, 65, 65, 95, 95, 2, 0, 64, 64, 200, 200, 2, 0, 10, 10, 55, 55, 2, 0, 75, 75, 112, 112, 2, 0, 2, 2, 57, 57, 2, 0, 14, 14, 185, 185, 3, 0, 106, 106, 115, 115, 164, 164, 2, 0, 105, 105, 163, 163, 4, 0, 70, 70, 133, 133, 194, 194, 208, 208, 1, 0, 255, 256, 1, 0, 257, 259, 1, 0, 249, 254, 3, 0, 2, 2, 6, 6, 181, 181, 2, 0, 70, 70, 194, 194, 5, 0, 48, 49, 91, 92, 122, 125, 172, 173, 217, 218, 1, 0, 127, 130, 2, 0, 8, 8, 227, 244, 2, 0, 77, 77, 149, 149, 4, 0, 46, 46, 178, 178, 188, 188, 209, 209, 16, 0, 28, 29, 40, 40, 43, 43, 48, 48, 68, 68, 91, 91, 114, 114, 122, 122, 124, 124, 158, 158, 165, 165, 172, 172, 184, 184, 196, 196, 204, 204, 217, 217, 23, 0, 14, 14, 43, 44, 48, 49, 65, 65, 68, 68, 91, 91, 95, 95, 110, 110, 119, 119, 122, 125, 127, 130, 137, 137, 140, 140, 152, 153, 172, 173, 180, 180, 184, 185, 195, 195, 204, 204, 213, 213, 217, 217, 220, 220, 231, 231, 3093, 0, 373, 1, 0, 0, 0, 2, 378, 1, 0, 0, 0, 4, 404, 1, 0, 0, 0, 6, 406, 1, 0, 0, 0, 8, 417, 1, 0, 0, 0, 10, 419, 1, 0, 0, 0, 12, 458, 1, 0, 0, 0, 14, 480, 1, 0, 0, 0, 16, 534, 1, 0, 0, 0, 18, 553, 1, 0, 0, 0, 20, 566, 1, 0, 0, 0, 22, 570, 1, 0, 0, 0, 24, 632, 1, 0, 0, 0, 26, 680, 1, 0, 0, 0, 28, 682, 1, 0, 0, 0, 30, 690, 1, 0, 0, 0, 32, 710, 1, 0, 0, 0, 34, 730, 1, 0, 0, 0, 36, 737, 1, 0, 0, 0, 38, 746, 1, 0, 0, 0, 40, 754, 1, 0, 0, 0, 42, 776, 1, 0, 0, 0, 44, 786, 1, 0, 0, 0, 46, 804, 1, 0, 0, 0, 48, 825, 1, 0, 0, 0, 50, 846, 1, 0, 0, 0, 52, 852, 1, 0, 0, 0, 54, 869, 1, 0, 0, 0, 56, 878, 1, 0, 0, 0, 58, 885, 1, 0, 0, 0, 60, 893, 1, 0, 0, 0, 62, 900, 1, 0, 0, 0, 64, 907, 1, 0, 0, 0, 66, 916, 1, 0, 0, 0, 68, 927, 1, 0, 0, 0, 70, 929, 1, 0, 0, 0, 72, 949, 1, 0, 0, 0, 74, 966, 1, 0, 0, 0, 76, 968, 1, 0, 0, 0, 78, 977, 1, 0, 0, 0, 80, 984, 1, 0, 0, 0, 82, 993, 1, 0, 0, 0, 84, 1003, 1, 0, 0, 0, 86, 1026, 1, 0, 0, 0, 88, 1032, 1, 0, 0, 0, 90, 1034, 1, 0, 0, 0, 92, 1041, 1, 0, 0, 0, 94, 1053, 1, 0, 0, 0, 96, 1055, 1, 0, 0, 0, 98, 1062, 1, 0, 0, 0, 100, 1083, 1, 0, 0, 0, 102, 1112, 1, 0, 0, 0, 104, 1114, 1, 0, 0, 0, 106, 1123, 1, 0, 0, 0, 108, 1146, 1, 0, 0, 0, 110, 1165, 1, 0, 0, 0, 112, 1188, 1, 0, 0, 0, 114, 1190, 1, 0, 0, 0, 116, 1205, 1, 0, 0, 0, 118, 1224, 1, 0, 0, 0, 120, 1246, 1, 0, 0, 0, 122, 1251, 1, 0, 0, 0, 124, 1256, 1, 0, 0, 0, 126, 1261, 1, 0, 0, 0, 128, 1266, 1, 0, 0, 0, 130, 1273, 1, 0, 0, 0, 132, 1288, 1, 0, 0, 0, 134, 1294, 1, 0, 0, 0, 136, 1314, 1, 0, 0, 0, 138, 1316, 1, 0, 0, 0, 140, 1327, 1, 0, 0, 0, 142, 1338, 1, 0, 0, 0, 144, 1352, 1, 0, 0, 0, 146, 1354, 1, 0, 0, 0, 148, 1363, 1, 0, 0, 0, 150, 1372, 1, 0, 0, 0, 152, 1381, 1, 0, 0, 0, 154, 1384, 1, 0, 0, 0, 156, 1392, 1, 0, 0, 0, 158, 1408, 1, 0, 0, 0, 160, 1412, 1, 0, 0, 0, 162, 1436, 1, 0, 0, 0, 164, 1438, 1, 0, 0, 0, 166, 1454, 1, 0, 0, 0, 168, 1457, 1, 0, 0, 0, 170, 1461, 1, 0, 0, 0, 172, 1464, 1, 0, 0, 0, 174, 1468, 1, 0, 0, 0, 176, 1470, 1, 0, 0, 0, 178, 1472, 1, 0, 0, 0, 180, 1474, 1, 0, 0, 0, 182, 1476, 1, 0, 0, 0, 184, 1478, 1, 0, 0, 0, 186, 1480, 1, 0, 0, 0, 188, 1488, 1, 0, 0, 0, 190, 1498, 1, 0, 0, 0, 192, 1502, 1, 0, 0, 0, 194, 1506, 1, 0, 0, 0, 196, 1511, 1, 0, 0, 0, 198, 1551, 1, 0, 0, 0, 200, 1559, 1, 0, 0, 0, 202, 1563, 1, 0, 0, 0, 204, 1578, 1, 0, 0, 0, 206, 1583, 1, 0, 0, 0, 208, 1587, 1, 0, 0, 0, 210, 1596, 1, 0, 0, 0, 212, 1626, 1, 0, 0, 0, 214, 1641, 1, 0, 0, 0, 216, 1647, 1, 0, 0, 0, 218, 1652, 1, 0, 0, 0, 220, 1654, 1, 0, 0, 0, 222, 1672, 1, 0, 0, 0, 224, 1675, 1, 0, 0, 0, 226, 1685, 1, 0, 0, 0, 228, 1705, 1, 0, 0, 0, 230, 1715, 1, 0, 0, 0, 232, 1717, 1, 0, 0, 0, 234, 1719, 1, 0, 0, 0, 236, 1734, 1, 0, 0, 0, 238, 1736, 1, 0, 0, 0, 240, 1743, 1, 0, 0, 0, 242, 1775, 1, 0, 0, 0, 244, 1787, 1, 0, 0, 0, 246, 1794, 1, 0, 0, 0, 248, 1804, 1, 0, 0, 0, 250, 1806, 1, 0, 0, 0, 252, 1812, 1, 0, 0, 0, 254, 1823, 1, 0, 0, 0, 256, 1834, 1, 0, 0, 0, 258, 1842, 1, 0, 0, 0, 260, 1860, 1, 0, 0, 0, 262, 1865, 1, 0, 0, 0, 264, 1886, 1, 0, 0, 0, 266, 1922, 1, 0, 0, 0, 268, 1924, 1, 0, 0, 0, 270, 1932, 1, 0, 0, 0, 272, 1972, 1, 0, 0, 0, 274, 1982, 1, 0, 0, 0, 276, 1997, 1, 0, 0, 0, 278, 1999, 1, 0, 0, 0, 280, 2006, 1, 0, 0, 0, 282, 2020, 1, 0, 0, 0, 284, 2022, 1, 0, 0, 0, 286, 2072, 1, 0, 0, 0, 288, 2088, 1, 0, 0, 0, 290, 2090, 1, 0, 0, 0, 292, 2105, 1, 0, 0, 0, 294, 2107, 1, 0, 0, 0, 296, 2117, 1, 0, 0, 0, 298, 2135, 1, 0, 0, 0, 300, 2137, 1, 0, 0, 0, 302, 2141, 1, 0, 0, 0, 304, 2156, 1, 0, 0, 0, 306, 2162, 1, 0, 0, 0, 308, 2164, 1, 0, 0, 0, 310, 2173, 1, 0, 0, 0, 312, 2244, 1, 0, 0, 0, 314, 2250, 1, 0, 0, 0, 316, 2512, 1, 0, 0, 0, 318, 2533, 1, 0, 0, 0, 320, 2535, 1, 0, 0, 0, 322, 2537, 1, 0, 0, 0, 324, 2539, 1, 0, 0, 0, 326, 2555, 1, 0, 0, 0, 328, 2557, 1, 0, 0, 0, 330, 2559, 1, 0, 0, 0, 332, 2606, 1, 0, 0, 0, 334, 2615, 1, 0, 0, 0, 336, 2619, 1, 0, 0, 0, 338, 2625, 1, 0, 0, 0, 340, 2627, 1, 0, 0, 0, 342, 2632, 1, 0, 0, 0, 344, 2638, 1, 0, 0, 0, 346, 2685, 1, 0, 0, 0, 348, 2696, 1, 0, 0, 0, 350, 2703, 1, 0, 0, 0, 352, 2705, 1, 0, 0, 0, 354, 2726, 1, 0, 0, 0, 356, 2728, 1, 0, 0, 0, 358, 2730, 1, 0, 0, 0, 360, 2744, 1, 0, 0, 0, 362, 2751, 1, 0, 0, 0, 364, 2765, 1, 0, 0, 0, 366, 2767, 1, 0, 0, 0, 368, 2769, 1, 0, 0, 0, 370, 372, 3, 2, 1, 0, 371, 370, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 376, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 376, 377, 5, 0, 0, 1, 377, 1, 1, 0, 0, 0, 378, 380, 3, 4, 2, 0, 379, 381, 5, 262, 0, 0, 380, 379, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 3, 1, 0, 0, 0, 382, 405, 3, 206, 103, 0, 383, 405, 3, 6, 3, 0, 384, 405, 3, 8, 4, 0, 385, 405, 3, 26, 13, 0, 386, 405, 3, 64, 32, 0, 387, 405, 3, 66, 33, 0, 388, 405, 3, 68, 34, 0, 389, 405, 3, 74, 37, 0, 390, 405, 3, 88, 44, 0, 391, 405, 3, 94, 47, 0, 392, 405, 3, 100, 50, 0, 393, 405, 3, 102, 51, 0, 394, 405, 3, 108, 54, 0, 395, 405, 3, 110, 55, 0, 396, 405, 3, 112, 56, 0, 397, 405, 3, 144, 72, 0, 398, 405, 3, 152, 76, 0, 399, 405, 3, 154, 77, 0, 400, 405, 3, 156, 78, 0, 401, 405, 3, 158, 79, 0, 402, 405, 3, 160, 80, 0, 403, 405, 3, 162, 81, 0, 404, 382, 1, 0, 0, 0, 404, 383, 1, 0, 0, 0, 404, 384, 1, 0, 0, 0, 404, 385, 1, 0, 0, 0, 404, 386, 1, 0, 0, 0, 404, 387, 1, 0, 0, 0, 404, 388, 1, 0, 0, 0, 404, 389, 1, 0, 0, 0, 404, 390, 1, 0, 0, 0, 404, 391, 1, 0, 0, 0, 404, 392, 1, 0, 0, 0, 404, 393, 1, 0, 0, 0, 404, 394, 1, 0, 0, 0, 404, 395, 1, 0, 0, 0, 404, 396, 1, 0, 0, 0, 404, 397, 1, 0, 0, 0, 404, 398, 1, 0, 0, 0, 404, 399, 1, 0, 0, 0, 404, 400, 1, 0, 0, 0, 404, 401, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 404, 403, 1, 0, 0, 0, 405, 5, 1, 0, 0, 0, 406, 407, 5, 203, 0, 0, 407, 408, 3, 184, 92, 0, 408, 7, 1, 0, 0, 0, 409, 418, 3, 18, 9, 0, 410, 418, 3, 20, 10, 0, 411, 418, 3, 22, 11, 0, 412, 418, 3, 24, 12, 0, 413, 418, 3, 16, 8, 0, 414, 418, 3, 14, 7, 0, 415, 418, 3, 12, 6, 0, 416, 418, 3, 10, 5, 0, 417, 409, 1, 0, 0, 0, 417, 410, 1, 0, 0, 0, 417, 411, 1, 0, 0, 0, 417, 412, 1, 0, 0, 0, 417, 413, 1, 0, 0, 0, 417, 414, 1, 0, 0, 0, 417, 415, 1, 0, 0, 0, 417, 416, 1, 0, 0, 0, 418, 9, 1, 0, 0, 0, 419, 421, 5, 37, 0, 0, 420, 422, 5, 19, 0, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 425, 5, 188, 0, 0, 424, 426, 3, 172, 86, 0, 425, 424, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 443, 3, 174, 87, 0, 428, 429, 5, 265, 0, 0, 429, 434, 3, 216, 108, 0, 430, 431, 5, 263, 0, 0, 431, 433, 3, 216, 108, 0, 432, 430, 1, 0, 0, 0, 433, 436, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 439, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 437, 438, 5, 263, 0, 0, 438, 440, 3, 210, 105, 0, 439, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 442, 5, 266, 0, 0, 442, 444, 1, 0, 0, 0, 443, 428, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 451, 1, 0, 0, 0, 445, 446, 5, 17, 0, 0, 446, 449, 5, 26, 0, 0, 447, 450, 3, 296, 148, 0, 448, 450, 3, 254, 127, 0, 449, 447, 1, 0, 0, 0, 449, 448, 1, 0, 0, 0, 450, 452, 1, 0, 0, 0, 451, 445, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 456, 3, 196, 98, 0, 454, 455, 5, 9, 0, 0, 455, 457, 3, 206, 103, 0, 456, 454, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 11, 1, 0, 0, 0, 458, 460, 5, 37, 0, 0, 459, 461, 5, 19, 0, 0, 460, 459, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 464, 5, 188, 0, 0, 463, 465, 3, 172, 86, 0, 464, 463, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 467, 3, 174, 87, 0, 467, 471, 5, 115, 0, 0, 468, 472, 3, 186, 93, 0, 469, 470, 5, 147, 0, 0, 470, 472, 3, 318, 159, 0, 471, 468, 1, 0, 0, 0, 471, 469, 1, 0, 0, 0, 472, 476, 1, 0, 0, 0, 473, 474, 5, 17, 0, 0, 474, 475, 5, 26, 0, 0, 475, 477, 3, 254, 127, 0, 476, 473, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 3, 196, 98, 0, 479, 13, 1, 0, 0, 0, 480, 482, 5, 37, 0, 0, 481, 483, 5, 19, 0, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 486, 5, 188, 0, 0, 485, 487, 3, 172, 86, 0, 486, 485, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 506, 3, 174, 87, 0, 489, 490, 5, 265, 0, 0, 490, 495, 3, 218, 109, 0, 491, 492, 5, 263, 0, 0, 492, 494, 3, 218, 109, 0, 493, 491, 1, 0, 0, 0, 494, 497, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 502, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 498, 499, 5, 263, 0, 0, 499, 500, 5, 150, 0, 0, 500, 501, 5, 110, 0, 0, 501, 503, 3, 296, 148, 0, 502, 498, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 5, 266, 0, 0, 505, 507, 1, 0, 0, 0, 506, 489, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 513, 1, 0, 0, 0, 508, 509, 5, 150, 0, 0, 509, 511, 5, 110, 0, 0, 510, 512, 3, 296, 148, 0, 511, 510, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 514, 1, 0, 0, 0, 513, 508, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 518, 1, 0, 0, 0, 515, 516, 5, 145, 0, 0, 516, 517, 5, 26, 0, 0, 517, 519, 3, 236, 118, 0, 518, 515, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 521, 1, 0, 0, 0, 520, 522, 3, 222, 111, 0, 521, 520, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 5, 23, 0, 0, 524, 525, 5, 9, 0, 0, 525, 528, 5, 111, 0, 0, 526, 527, 5, 25, 0, 0, 527, 529, 3, 252, 126, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 532, 1, 0, 0, 0, 530, 531, 5, 9, 0, 0, 531, 533, 3, 206, 103, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 15, 1, 0, 0, 0, 534, 535, 5, 37, 0, 0, 535, 537, 5, 212, 0, 0, 536, 538, 3, 172, 86, 0, 537, 536, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 541, 3, 178, 89, 0, 540, 542, 3, 202, 101, 0, 541, 540, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 544, 1, 0, 0, 0, 543, 545, 3, 222, 111, 0, 544, 543, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 548, 1, 0, 0, 0, 546, 547, 5, 25, 0, 0, 547, 549, 3, 252, 126, 0, 548, 546, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 5, 9, 0, 0, 551, 552, 3, 206, 103, 0, 552, 17, 1, 0, 0, 0, 553, 554, 5, 37, 0, 0, 554, 556, 7, 0, 0, 0, 555, 557, 3, 172, 86, 0, 556, 555, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 560, 3, 176, 88, 0, 559, 561, 3, 222, 111, 0, 560, 559, 1, 0, 0, 0, 560, 561, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 563, 5, 24, 0, 0, 563, 565, 3, 318, 159, 0, 564, 562, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 19, 1, 0, 0, 0, 566, 567, 5, 37, 0, 0, 567, 568, 5, 166, 0, 0, 568, 569, 3, 362, 181, 0, 569, 21, 1, 0, 0, 0, 570, 572, 5, 37, 0, 0, 571, 573, 5, 12, 0, 0, 572, 571, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 576, 5, 84, 0, 0, 575, 577, 3, 172, 86, 0, 576, 575, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 591, 3, 180, 90, 0, 579, 588, 5, 265, 0, 0, 580, 585, 3, 332, 166, 0, 581, 582, 5, 263, 0, 0, 582, 584, 3, 332, 166, 0, 583, 581, 1, 0, 0, 0, 584, 587, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 589, 1, 0, 0, 0, 587, 585, 1, 0, 0, 0, 588, 580, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 592, 5, 266, 0, 0, 591, 579, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 594, 5, 160, 0, 0, 594, 597, 3, 332, 166, 0, 595, 596, 5, 102, 0, 0, 596, 598, 3, 332, 166, 0, 597, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 24, 0, 0, 600, 604, 5, 274, 0, 0, 601, 602, 5, 104, 0, 0, 602, 603, 5, 249, 0, 0, 603, 605, 5, 274, 0, 0, 604, 601, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 206, 0, 0, 607, 608, 5, 249, 0, 0, 608, 609, 5, 274, 0, 0, 609, 610, 5, 126, 0, 0, 610, 611, 5, 249, 0, 0, 611, 615, 5, 274, 0, 0, 612, 613, 5, 18, 0, 0, 613, 614, 5, 249, 0, 0, 614, 616, 5, 274, 0, 0, 615, 612, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 620, 1, 0, 0, 0, 617, 618, 5, 20, 0, 0, 618, 619, 5, 249, 0, 0, 619, 621, 5, 274, 0, 0, 620, 617, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 625, 1, 0, 0, 0, 622, 623, 5, 187, 0, 0, 623, 624, 5, 249, 0, 0, 624, 626, 5, 274, 0, 0, 625, 622, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 630, 1, 0, 0, 0, 627, 628, 5, 76, 0, 0, 628, 629, 5, 249, 0, 0, 629, 631, 5, 274, 0, 0, 630, 627, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 23, 1, 0, 0, 0, 632, 633, 5, 37, 0, 0, 633, 635, 5, 84, 0, 0, 634, 636, 3, 172, 86, 0, 635, 634, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 650, 3, 180, 90, 0, 638, 647, 5, 265, 0, 0, 639, 644, 3, 332, 166, 0, 640, 641, 5, 263, 0, 0, 641, 643, 3, 332, 166, 0, 642, 640, 1, 0, 0, 0, 643, 646, 1, 0, 0, 0, 644, 642, 1, 0, 0, 0, 644, 645, 1, 0, 0, 0, 645, 648, 1, 0, 0, 0, 646, 644, 1, 0, 0, 0, 647, 639, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 651, 5, 266, 0, 0, 650, 638, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 654, 1, 0, 0, 0, 652, 653, 5, 160, 0, 0, 653, 655, 3, 332, 166, 0, 654, 652, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 657, 5, 24, 0, 0, 657, 658, 5, 274, 0, 0, 658, 659, 5, 186, 0, 0, 659, 660, 5, 249, 0, 0, 660, 661, 3, 318, 159, 0, 661, 25, 1, 0, 0, 0, 662, 681, 3, 28, 14, 0, 663, 681, 3, 62, 31, 0, 664, 681, 3, 60, 30, 0, 665, 681, 3, 58, 29, 0, 666, 681, 3, 54, 27, 0, 667, 681, 3, 56, 28, 0, 668, 681, 3, 52, 26, 0, 669, 681, 3, 48, 24, 0, 670, 681, 3, 50, 25, 0, 671, 681, 3, 46, 23, 0, 672, 681, 3, 44, 22, 0, 673, 681, 3, 42, 21, 0, 674, 681, 3, 40, 20, 0, 675, 681, 3, 34, 17, 0, 676, 681, 3, 30, 15, 0, 677, 681, 3, 32, 16, 0, 678, 681, 3, 36, 18, 0, 679, 681, 3, 38, 19, 0, 680, 662, 1, 0, 0, 0, 680, 663, 1, 0, 0, 0, 680, 664, 1, 0, 0, 0, 680, 665, 1, 0, 0, 0, 680, 666, 1, 0, 0, 0, 680, 667, 1, 0, 0, 0, 680, 668, 1, 0, 0, 0, 680, 669, 1, 0, 0, 0, 680, 670, 1, 0, 0, 0, 680, 671, 1, 0, 0, 0, 680, 672, 1, 0, 0, 0, 680, 673, 1, 0, 0, 0, 680, 674, 1, 0, 0, 0, 680, 675, 1, 0, 0, 0, 680, 676, 1, 0, 0, 0, 680, 677, 1, 0, 0, 0, 680, 678, 1, 0, 0, 0, 680, 679, 1, 0, 0, 0, 681, 27, 1, 0, 0, 0, 682, 683, 5, 4, 0, 0, 683, 684, 5, 46, 0, 0, 684, 685, 3, 184, 92, 0, 685, 686, 5, 176, 0, 0, 686, 687, 5, 142, 0, 0, 687, 688, 7, 1, 0, 0, 688, 689, 3, 362, 181, 0, 689, 29, 1, 0, 0, 0, 690, 691, 5, 4, 0, 0, 691, 692, 5, 188, 0, 0, 692, 693, 3, 186, 93, 0, 693, 694, 5, 176, 0, 0, 694, 695, 5, 32, 0, 0, 695, 696, 5, 182, 0, 0, 696, 697, 3, 192, 96, 0, 697, 698, 5, 265, 0, 0, 698, 699, 3, 232, 116, 0, 699, 700, 5, 249, 0, 0, 700, 706, 3, 318, 159, 0, 701, 702, 5, 263, 0, 0, 702, 703, 3, 232, 116, 0, 703, 704, 5, 249, 0, 0, 704, 705, 3, 318, 159, 0, 705, 707, 1, 0, 0, 0, 706, 701, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 708, 1, 0, 0, 0, 708, 709, 5, 266, 0, 0, 709, 31, 1, 0, 0, 0, 710, 711, 5, 4, 0, 0, 711, 712, 5, 188, 0, 0, 712, 715, 3, 186, 93, 0, 713, 714, 5, 145, 0, 0, 714, 716, 3, 308, 154, 0, 715, 713, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 728, 5, 176, 0, 0, 718, 719, 5, 30, 0, 0, 719, 720, 5, 94, 0, 0, 720, 725, 3, 318, 159, 0, 721, 722, 5, 216, 0, 0, 722, 723, 5, 151, 0, 0, 723, 724, 5, 249, 0, 0, 724, 726, 3, 364, 182, 0, 725, 721, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 729, 1, 0, 0, 0, 727, 729, 5, 197, 0, 0, 728, 718, 1, 0, 0, 0, 728, 727, 1, 0, 0, 0, 729, 33, 1, 0, 0, 0, 730, 731, 5, 4, 0, 0, 731, 732, 5, 188, 0, 0, 732, 733, 3, 186, 93, 0, 733, 734, 5, 31, 0, 0, 734, 735, 3, 192, 96, 0, 735, 736, 3, 224, 112, 0, 736, 35, 1, 0, 0, 0, 737, 738, 5, 4, 0, 0, 738, 739, 5, 188, 0, 0, 739, 740, 3, 186, 93, 0, 740, 742, 5, 58, 0, 0, 741, 743, 5, 32, 0, 0, 742, 741, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 745, 3, 192, 96, 0, 745, 37, 1, 0, 0, 0, 746, 747, 5, 4, 0, 0, 747, 748, 5, 188, 0, 0, 748, 749, 3, 186, 93, 0, 749, 750, 5, 176, 0, 0, 750, 751, 5, 142, 0, 0, 751, 752, 7, 1, 0, 0, 752, 753, 3, 362, 181, 0, 753, 39, 1, 0, 0, 0, 754, 755, 5, 4, 0, 0, 755, 756, 5, 188, 0, 0, 756, 762, 3, 186, 93, 0, 757, 763, 5, 158, 0, 0, 758, 760, 5, 1, 0, 0, 759, 761, 3, 172, 86, 0, 760, 759, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 763, 1, 0, 0, 0, 762, 757, 1, 0, 0, 0, 762, 758, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 5, 33, 0, 0, 765, 766, 5, 265, 0, 0, 766, 771, 3, 224, 112, 0, 767, 768, 5, 263, 0, 0, 768, 770, 3, 224, 112, 0, 769, 767, 1, 0, 0, 0, 770, 773, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 771, 769, 1, 0, 0, 0, 772, 774, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 774, 775, 5, 266, 0, 0, 775, 41, 1, 0, 0, 0, 776, 777, 5, 4, 0, 0, 777, 778, 5, 188, 0, 0, 778, 779, 3, 186, 93, 0, 779, 780, 5, 1, 0, 0, 780, 782, 5, 32, 0, 0, 781, 783, 3, 172, 86, 0, 782, 781, 1, 0, 0, 0, 782, 783, 1, 0, 0, 0, 783, 784, 1, 0, 0, 0, 784, 785, 3, 226, 113, 0, 785, 43, 1, 0, 0, 0, 786, 787, 5, 4, 0, 0, 787, 788, 5, 188, 0, 0, 788, 789, 3, 186, 93, 0, 789, 791, 5, 4, 0, 0, 790, 792, 5, 32, 0, 0, 791, 790, 1, 0, 0, 0, 791, 792, 1, 0, 0, 0, 792, 793, 1, 0, 0, 0, 793, 802, 3, 192, 96, 0, 794, 798, 5, 176, 0, 0, 795, 799, 3, 230, 115, 0, 796, 797, 5, 34, 0, 0, 797, 799, 3, 318, 159, 0, 798, 795, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 799, 803, 1, 0, 0, 0, 800, 801, 5, 58, 0, 0, 801, 803, 5, 51, 0, 0, 802, 794, 1, 0, 0, 0, 802, 800, 1, 0, 0, 0, 803, 45, 1, 0, 0, 0, 804, 805, 5, 4, 0, 0, 805, 806, 5, 188, 0, 0, 806, 807, 3, 186, 93, 0, 807, 809, 5, 1, 0, 0, 808, 810, 3, 172, 86, 0, 809, 808, 1, 0, 0, 0, 809, 810, 1, 0, 0, 0, 810, 823, 1, 0, 0, 0, 811, 812, 5, 145, 0, 0, 812, 815, 3, 308, 154, 0, 813, 814, 5, 24, 0, 0, 814, 816, 3, 318, 159, 0, 815, 813, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 818, 1, 0, 0, 0, 817, 819, 3, 244, 122, 0, 818, 817, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 824, 1, 0, 0, 0, 820, 821, 5, 154, 0, 0, 821, 822, 5, 145, 0, 0, 822, 824, 3, 242, 121, 0, 823, 811, 1, 0, 0, 0, 823, 820, 1, 0, 0, 0, 824, 47, 1, 0, 0, 0, 825, 826, 5, 4, 0, 0, 826, 827, 5, 188, 0, 0, 827, 830, 3, 186, 93, 0, 828, 829, 5, 145, 0, 0, 829, 831, 3, 308, 154, 0, 830, 828, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 832, 1, 0, 0, 0, 832, 844, 5, 176, 0, 0, 833, 834, 5, 72, 0, 0, 834, 845, 3, 234, 117, 0, 835, 836, 5, 168, 0, 0, 836, 837, 5, 79, 0, 0, 837, 845, 3, 258, 129, 0, 838, 839, 5, 24, 0, 0, 839, 845, 3, 318, 159, 0, 840, 841, 5, 25, 0, 0, 841, 845, 3, 252, 126, 0, 842, 843, 5, 175, 0, 0, 843, 845, 3, 252, 126, 0, 844, 833, 1, 0, 0, 0, 844, 835, 1, 0, 0, 0, 844, 838, 1, 0, 0, 0, 844, 840, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 845, 49, 1, 0, 0, 0, 846, 847, 5, 4, 0, 0, 847, 848, 5, 188, 0, 0, 848, 849, 3, 186, 93, 0, 849, 850, 5, 155, 0, 0, 850, 851, 5, 146, 0, 0, 851, 51, 1, 0, 0, 0, 852, 853, 5, 4, 0, 0, 853, 854, 5, 188, 0, 0, 854, 855, 3, 186, 93, 0, 855, 857, 5, 58, 0, 0, 856, 858, 3, 170, 85, 0, 857, 856, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 867, 1, 0, 0, 0, 859, 860, 5, 145, 0, 0, 860, 862, 3, 308, 154, 0, 861, 863, 5, 22, 0, 0, 862, 861, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 868, 1, 0, 0, 0, 864, 865, 5, 154, 0, 0, 865, 866, 5, 145, 0, 0, 866, 868, 3, 242, 121, 0, 867, 859, 1, 0, 0, 0, 867, 864, 1, 0, 0, 0, 868, 53, 1, 0, 0, 0, 869, 870, 5, 4, 0, 0, 870, 871, 5, 212, 0, 0, 871, 873, 3, 188, 94, 0, 872, 874, 3, 202, 101, 0, 873, 872, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 876, 5, 9, 0, 0, 876, 877, 3, 206, 103, 0, 877, 55, 1, 0, 0, 0, 878, 879, 5, 4, 0, 0, 879, 880, 5, 212, 0, 0, 880, 881, 3, 188, 94, 0, 881, 882, 5, 156, 0, 0, 882, 883, 5, 193, 0, 0, 883, 884, 3, 188, 94, 0, 884, 57, 1, 0, 0, 0, 885, 886, 5, 4, 0, 0, 886, 887, 5, 212, 0, 0, 887, 888, 3, 188, 94, 0, 888, 889, 5, 176, 0, 0, 889, 890, 5, 142, 0, 0, 890, 891, 7, 1, 0, 0, 891, 892, 3, 358, 179, 0, 892, 59, 1, 0, 0, 0, 893, 894, 5, 4, 0, 0, 894, 895, 5, 188, 0, 0, 895, 896, 3, 186, 93, 0, 896, 897, 5, 156, 0, 0, 897, 898, 5, 193, 0, 0, 898, 899, 3, 186, 93, 0, 899, 61, 1, 0, 0, 0, 900, 901, 5, 4, 0, 0, 901, 902, 5, 212, 0, 0, 902, 903, 3, 188, 94, 0, 903, 904, 7, 2, 0, 0, 904, 905, 5, 25, 0, 0, 905, 906, 3, 252, 126, 0, 906, 63, 1, 0, 0, 0, 907, 909, 5, 196, 0, 0, 908, 910, 5, 188, 0, 0, 909, 908, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 912, 1, 0, 0, 0, 911, 913, 3, 170, 85, 0, 912, 911, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 915, 3, 186, 93, 0, 915, 65, 1, 0, 0, 0, 916, 918, 5, 56, 0, 0, 917, 919, 5, 46, 0, 0, 918, 917, 1, 0, 0, 0, 918, 919, 1, 0, 0, 0, 919, 921, 1, 0, 0, 0, 920, 922, 7, 3, 0, 0, 921, 920, 1, 0, 0, 0, 921, 922, 1, 0, 0, 0, 922, 923, 1, 0, 0, 0, 923, 924, 3, 358, 179, 0, 924, 67, 1, 0, 0, 0, 925, 928, 3, 70, 35, 0, 926, 928, 3, 72, 36, 0, 927, 925, 1, 0, 0, 0, 927, 926, 1, 0, 0, 0, 928, 69, 1, 0, 0, 0, 929, 930, 5, 36, 0, 0, 930, 931, 5, 182, 0, 0, 931, 933, 3, 186, 93, 0, 932, 934, 3, 296, 148, 0, 933, 932, 1, 0, 0, 0, 933, 934, 1, 0, 0, 0, 934, 947, 1, 0, 0, 0, 935, 936, 5, 190, 0, 0, 936, 937, 5, 185, 0, 0, 937, 938, 5, 265, 0, 0, 938, 939, 3, 364, 182, 0, 939, 945, 5, 266, 0, 0, 940, 941, 5, 157, 0, 0, 941, 942, 5, 265, 0, 0, 942, 943, 3, 364, 182, 0, 943, 944, 5, 266, 0, 0, 944, 946, 1, 0, 0, 0, 945, 940, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 948, 1, 0, 0, 0, 947, 935, 1, 0, 0, 0, 947, 948, 1, 0, 0, 0, 948, 71, 1, 0, 0, 0, 949, 950, 5, 36, 0, 0, 950, 951, 5, 96, 0, 0, 951, 952, 5, 182, 0, 0, 952, 958, 3, 186, 93, 0, 953, 954, 5, 145, 0, 0, 954, 955, 5, 265, 0, 0, 955, 956, 3, 308, 154, 0, 956, 957, 5, 266, 0, 0, 957, 959, 1, 0, 0, 0, 958, 953, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 73, 1, 0, 0, 0, 960, 967, 3, 86, 43, 0, 961, 967, 3, 84, 42, 0, 962, 967, 3, 82, 41, 0, 963, 967, 3, 78, 39, 0, 964, 967, 3, 80, 40, 0, 965, 967, 3, 76, 38, 0, 966, 960, 1, 0, 0, 0, 966, 961, 1, 0, 0, 0, 966, 962, 1, 0, 0, 0, 966, 963, 1, 0, 0, 0, 966, 964, 1, 0, 0, 0, 966, 965, 1, 0, 0, 0, 967, 75, 1, 0, 0, 0, 968, 969, 5, 58, 0, 0, 969, 971, 7, 0, 0, 0, 970, 972, 3, 170, 85, 0, 971, 970, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 975, 3, 184, 92, 0, 974, 976, 7, 4, 0, 0, 975, 974, 1, 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 77, 1, 0, 0, 0, 977, 978, 5, 58, 0, 0, 978, 980, 5, 212, 0, 0, 979, 981, 3, 170, 85, 0, 980, 979, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 983, 3, 188, 94, 0, 983, 79, 1, 0, 0, 0, 984, 985, 5, 58, 0, 0, 985, 987, 5, 188, 0, 0, 986, 988, 3, 170, 85, 0, 987, 986, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 989, 1, 0, 0, 0, 989, 991, 3, 186, 93, 0, 990, 992, 5, 22, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 81, 1, 0, 0, 0, 993, 995, 5, 58, 0, 0, 994, 996, 5, 96, 0, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 998, 5, 182, 0, 0, 998, 1001, 3, 186, 93, 0, 999, 1000, 5, 145, 0, 0, 1000, 1002, 3, 308, 154, 0, 1001, 999, 1, 0, 0, 0, 1001, 1002, 1, 0, 0, 0, 1002, 83, 1, 0, 0, 0, 1003, 1005, 5, 58, 0, 0, 1004, 1006, 5, 12, 0, 0, 1005, 1004, 1, 0, 0, 0, 1005, 1006, 1, 0, 0, 0, 1006, 1007, 1, 0, 0, 0, 1007, 1009, 5, 84, 0, 0, 1008, 1010, 3, 170, 85, 0, 1009, 1008, 1, 0, 0, 0, 1009, 1010, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1024, 3, 190, 95, 0, 1012, 1021, 5, 265, 0, 0, 1013, 1018, 3, 332, 166, 0, 1014, 1015, 5, 263, 0, 0, 1015, 1017, 3, 332, 166, 0, 1016, 1014, 1, 0, 0, 0, 1017, 1020, 1, 0, 0, 0, 1018, 1016, 1, 0, 0, 0, 1018, 1019, 1, 0, 0, 0, 1019, 1022, 1, 0, 0, 0, 1020, 1018, 1, 0, 0, 0, 1021, 1013, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1023, 1, 0, 0, 0, 1023, 1025, 5, 266, 0, 0, 1024, 1012, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 85, 1, 0, 0, 0, 1026, 1027, 5, 58, 0, 0, 1027, 1028, 5, 166, 0, 0, 1028, 1029, 3, 362, 181, 0, 1029, 87, 1, 0, 0, 0, 1030, 1033, 3, 90, 45, 0, 1031, 1033, 3, 92, 46, 0, 1032, 1030, 1, 0, 0, 0, 1032, 1031, 1, 0, 0, 0, 1033, 89, 1, 0, 0, 0, 1034, 1035, 5, 86, 0, 0, 1035, 1036, 5, 166, 0, 0, 1036, 1037, 3, 362, 181, 0, 1037, 1038, 5, 193, 0, 0, 1038, 1039, 5, 87, 0, 0, 1039, 1040, 3, 362, 181, 0, 1040, 91, 1, 0, 0, 0, 1041, 1042, 5, 86, 0, 0, 1042, 1043, 3, 354, 177, 0, 1043, 1044, 5, 136, 0, 0, 1044, 1046, 3, 356, 178, 0, 1045, 1047, 3, 358, 179, 0, 1046, 1045, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1048, 1, 0, 0, 0, 1048, 1049, 5, 193, 0, 0, 1049, 1050, 3, 360, 180, 0, 1050, 93, 1, 0, 0, 0, 1051, 1054, 3, 96, 48, 0, 1052, 1054, 3, 98, 49, 0, 1053, 1051, 1, 0, 0, 0, 1053, 1052, 1, 0, 0, 0, 1054, 95, 1, 0, 0, 0, 1055, 1056, 5, 161, 0, 0, 1056, 1057, 5, 166, 0, 0, 1057, 1058, 3, 362, 181, 0, 1058, 1059, 5, 82, 0, 0, 1059, 1060, 5, 87, 0, 0, 1060, 1061, 3, 362, 181, 0, 1061, 97, 1, 0, 0, 0, 1062, 1066, 5, 161, 0, 0, 1063, 1064, 5, 86, 0, 0, 1064, 1065, 5, 137, 0, 0, 1065, 1067, 5, 78, 0, 0, 1066, 1063, 1, 0, 0, 0, 1066, 1067, 1, 0, 0, 0, 1067, 1068, 1, 0, 0, 0, 1068, 1069, 3, 354, 177, 0, 1069, 1070, 5, 136, 0, 0, 1070, 1072, 3, 356, 178, 0, 1071, 1073, 3, 358, 179, 0, 1072, 1071, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1080, 5, 82, 0, 0, 1075, 1081, 3, 360, 180, 0, 1076, 1078, 5, 166, 0, 0, 1077, 1076, 1, 0, 0, 0, 1077, 1078, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1081, 3, 362, 181, 0, 1080, 1075, 1, 0, 0, 0, 1080, 1077, 1, 0, 0, 0, 1081, 99, 1, 0, 0, 0, 1082, 1084, 3, 208, 104, 0, 1083, 1082, 1, 0, 0, 0, 1083, 1084, 1, 0, 0, 0, 1084, 1085, 1, 0, 0, 0, 1085, 1086, 5, 99, 0, 0, 1086, 1088, 7, 5, 0, 0, 1087, 1089, 5, 188, 0, 0, 1088, 1087, 1, 0, 0, 0, 1088, 1089, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1092, 3, 186, 93, 0, 1091, 1093, 3, 296, 148, 0, 1092, 1091, 1, 0, 0, 0, 1092, 1093, 1, 0, 0, 0, 1093, 1106, 1, 0, 0, 0, 1094, 1095, 5, 145, 0, 0, 1095, 1096, 5, 265, 0, 0, 1096, 1101, 3, 308, 154, 0, 1097, 1098, 5, 263, 0, 0, 1098, 1100, 3, 308, 154, 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, 1104, 1, 0, 0, 0, 1103, 1101, 1, 0, 0, 0, 1104, 1105, 5, 266, 0, 0, 1105, 1107, 1, 0, 0, 0, 1106, 1094, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 3, 206, 103, 0, 1109, 101, 1, 0, 0, 0, 1110, 1113, 3, 104, 52, 0, 1111, 1113, 3, 106, 53, 0, 1112, 1110, 1, 0, 0, 0, 1112, 1111, 1, 0, 0, 0, 1113, 103, 1, 0, 0, 0, 1114, 1116, 5, 50, 0, 0, 1115, 1117, 5, 82, 0, 0, 1116, 1115, 1, 0, 0, 0, 1116, 1117, 1, 0, 0, 0, 1117, 1118, 1, 0, 0, 0, 1118, 1121, 3, 186, 93, 0, 1119, 1120, 5, 215, 0, 0, 1120, 1122, 3, 310, 155, 0, 1121, 1119, 1, 0, 0, 0, 1121, 1122, 1, 0, 0, 0, 1122, 105, 1, 0, 0, 0, 1123, 1124, 5, 50, 0, 0, 1124, 1129, 3, 186, 93, 0, 1125, 1127, 5, 9, 0, 0, 1126, 1125, 1, 0, 0, 0, 1126, 1127, 1, 0, 0, 0, 1127, 1128, 1, 0, 0, 0, 1128, 1130, 3, 362, 181, 0, 1129, 1126, 1, 0, 0, 0, 1129, 1130, 1, 0, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1140, 5, 82, 0, 0, 1132, 1137, 3, 284, 142, 0, 1133, 1134, 5, 263, 0, 0, 1134, 1136, 3, 284, 142, 0, 1135, 1133, 1, 0, 0, 0, 1136, 1139, 1, 0, 0, 0, 1137, 1135, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1141, 1, 0, 0, 0, 1139, 1137, 1, 0, 0, 0, 1140, 1132, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1144, 1, 0, 0, 0, 1142, 1143, 5, 215, 0, 0, 1143, 1145, 3, 310, 155, 0, 1144, 1142, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 107, 1, 0, 0, 0, 1146, 1147, 5, 54, 0, 0, 1147, 1148, 3, 186, 93, 0, 1148, 1149, 5, 176, 0, 0, 1149, 1159, 3, 198, 99, 0, 1150, 1151, 5, 82, 0, 0, 1151, 1156, 3, 284, 142, 0, 1152, 1153, 5, 263, 0, 0, 1153, 1155, 3, 284, 142, 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, 1160, 1, 0, 0, 0, 1158, 1156, 1, 0, 0, 0, 1159, 1150, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1163, 1, 0, 0, 0, 1161, 1162, 5, 215, 0, 0, 1162, 1164, 3, 310, 155, 0, 1163, 1161, 1, 0, 0, 0, 1163, 1164, 1, 0, 0, 0, 1164, 109, 1, 0, 0, 0, 1165, 1166, 5, 207, 0, 0, 1166, 1168, 5, 103, 0, 0, 1167, 1169, 5, 188, 0, 0, 1168, 1167, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 1172, 3, 186, 93, 0, 1171, 1173, 3, 296, 148, 0, 1172, 1171, 1, 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1175, 3, 206, 103, 0, 1175, 111, 1, 0, 0, 0, 1176, 1189, 3, 132, 66, 0, 1177, 1189, 3, 134, 67, 0, 1178, 1189, 3, 136, 68, 0, 1179, 1189, 3, 130, 65, 0, 1180, 1189, 3, 128, 64, 0, 1181, 1189, 3, 126, 63, 0, 1182, 1189, 3, 124, 62, 0, 1183, 1189, 3, 122, 61, 0, 1184, 1189, 3, 120, 60, 0, 1185, 1189, 3, 118, 59, 0, 1186, 1189, 3, 116, 58, 0, 1187, 1189, 3, 114, 57, 0, 1188, 1176, 1, 0, 0, 0, 1188, 1177, 1, 0, 0, 0, 1188, 1178, 1, 0, 0, 0, 1188, 1179, 1, 0, 0, 0, 1188, 1180, 1, 0, 0, 0, 1188, 1181, 1, 0, 0, 0, 1188, 1182, 1, 0, 0, 0, 1188, 1183, 1, 0, 0, 0, 1188, 1184, 1, 0, 0, 0, 1188, 1185, 1, 0, 0, 0, 1188, 1186, 1, 0, 0, 0, 1188, 1187, 1, 0, 0, 0, 1189, 113, 1, 0, 0, 0, 1190, 1191, 5, 179, 0, 0, 1191, 1203, 7, 6, 0, 0, 1192, 1194, 5, 115, 0, 0, 1193, 1192, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1200, 3, 318, 159, 0, 1196, 1197, 5, 271, 0, 0, 1197, 1199, 3, 318, 159, 0, 1198, 1196, 1, 0, 0, 0, 1199, 1202, 1, 0, 0, 0, 1200, 1198, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 1204, 1, 0, 0, 0, 1202, 1200, 1, 0, 0, 0, 1203, 1193, 1, 0, 0, 0, 1203, 1204, 1, 0, 0, 0, 1204, 115, 1, 0, 0, 0, 1205, 1206, 5, 179, 0, 0, 1206, 1209, 5, 189, 0, 0, 1207, 1208, 5, 94, 0, 0, 1208, 1210, 3, 186, 93, 0, 1209, 1207, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 1222, 1, 0, 0, 0, 1211, 1213, 5, 115, 0, 0, 1212, 1211, 1, 0, 0, 0, 1212, 1213, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1219, 3, 318, 159, 0, 1215, 1216, 5, 271, 0, 0, 1216, 1218, 3, 318, 159, 0, 1217, 1215, 1, 0, 0, 0, 1218, 1221, 1, 0, 0, 0, 1219, 1217, 1, 0, 0, 0, 1219, 1220, 1, 0, 0, 0, 1220, 1223, 1, 0, 0, 0, 1221, 1219, 1, 0, 0, 0, 1222, 1212, 1, 0, 0, 0, 1222, 1223, 1, 0, 0, 0, 1223, 117, 1, 0, 0, 0, 1224, 1226, 5, 179, 0, 0, 1225, 1227, 7, 7, 0, 0, 1226, 1225, 1, 0, 0, 0, 1226, 1227, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1231, 5, 85, 0, 0, 1229, 1230, 5, 94, 0, 0, 1230, 1232, 3, 184, 92, 0, 1231, 1229, 1, 0, 0, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1244, 1, 0, 0, 0, 1233, 1235, 5, 115, 0, 0, 1234, 1233, 1, 0, 0, 0, 1234, 1235, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1241, 3, 318, 159, 0, 1237, 1238, 5, 271, 0, 0, 1238, 1240, 3, 318, 159, 0, 1239, 1237, 1, 0, 0, 0, 1240, 1243, 1, 0, 0, 0, 1241, 1239, 1, 0, 0, 0, 1241, 1242, 1, 0, 0, 0, 1242, 1245, 1, 0, 0, 0, 1243, 1241, 1, 0, 0, 0, 1244, 1234, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 119, 1, 0, 0, 0, 1246, 1247, 5, 179, 0, 0, 1247, 1248, 5, 37, 0, 0, 1248, 1249, 5, 188, 0, 0, 1249, 1250, 3, 186, 93, 0, 1250, 121, 1, 0, 0, 0, 1251, 1252, 5, 179, 0, 0, 1252, 1253, 5, 37, 0, 0, 1253, 1254, 5, 212, 0, 0, 1254, 1255, 3, 188, 94, 0, 1255, 123, 1, 0, 0, 0, 1256, 1257, 5, 179, 0, 0, 1257, 1258, 5, 188, 0, 0, 1258, 1259, 5, 182, 0, 0, 1259, 1260, 3, 186, 93, 0, 1260, 125, 1, 0, 0, 0, 1261, 1262, 5, 179, 0, 0, 1262, 1263, 5, 32, 0, 0, 1263, 1264, 5, 182, 0, 0, 1264, 1265, 3, 186, 93, 0, 1265, 127, 1, 0, 0, 0, 1266, 1268, 5, 179, 0, 0, 1267, 1269, 5, 154, 0, 0, 1268, 1267, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 1271, 5, 146, 0, 0, 1271, 1272, 3, 186, 93, 0, 1272, 129, 1, 0, 0, 0, 1273, 1274, 5, 179, 0, 0, 1274, 1275, 5, 73, 0, 0, 1275, 1276, 5, 94, 0, 0, 1276, 1286, 3, 186, 93, 0, 1277, 1278, 5, 145, 0, 0, 1278, 1279, 5, 265, 0, 0, 1279, 1282, 3, 308, 154, 0, 1280, 1281, 5, 263, 0, 0, 1281, 1283, 3, 308, 154, 0, 1282, 1280, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 1, 0, 0, 0, 1284, 1285, 5, 266, 0, 0, 1285, 1287, 1, 0, 0, 0, 1286, 1277, 1, 0, 0, 0, 1286, 1287, 1, 0, 0, 0, 1287, 131, 1, 0, 0, 0, 1288, 1290, 5, 179, 0, 0, 1289, 1291, 5, 39, 0, 0, 1290, 1289, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1292, 1, 0, 0, 0, 1292, 1293, 5, 167, 0, 0, 1293, 133, 1, 0, 0, 0, 1294, 1295, 5, 179, 0, 0, 1295, 1296, 5, 166, 0, 0, 1296, 1297, 5, 86, 0, 0, 1297, 1298, 5, 87, 0, 0, 1298, 1299, 3, 362, 181, 0, 1299, 135, 1, 0, 0, 0, 1300, 1315, 3, 138, 69, 0, 1301, 1315, 3, 140, 70, 0, 1302, 1315, 3, 142, 71, 0, 1303, 1304, 5, 179, 0, 0, 1304, 1305, 5, 86, 0, 0, 1305, 1306, 7, 8, 0, 0, 1306, 1312, 3, 362, 181, 0, 1307, 1308, 5, 136, 0, 0, 1308, 1310, 7, 9, 0, 0, 1309, 1311, 3, 358, 179, 0, 1310, 1309, 1, 0, 0, 0, 1310, 1311, 1, 0, 0, 0, 1311, 1313, 1, 0, 0, 0, 1312, 1307, 1, 0, 0, 0, 1312, 1313, 1, 0, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, 1300, 1, 0, 0, 0, 1314, 1301, 1, 0, 0, 0, 1314, 1302, 1, 0, 0, 0, 1314, 1303, 1, 0, 0, 0, 1315, 137, 1, 0, 0, 0, 1316, 1317, 5, 179, 0, 0, 1317, 1318, 5, 86, 0, 0, 1318, 1319, 7, 8, 0, 0, 1319, 1325, 3, 362, 181, 0, 1320, 1321, 5, 136, 0, 0, 1321, 1323, 5, 46, 0, 0, 1322, 1324, 3, 184, 92, 0, 1323, 1322, 1, 0, 0, 0, 1323, 1324, 1, 0, 0, 0, 1324, 1326, 1, 0, 0, 0, 1325, 1320, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 139, 1, 0, 0, 0, 1327, 1328, 5, 179, 0, 0, 1328, 1329, 5, 86, 0, 0, 1329, 1330, 7, 8, 0, 0, 1330, 1336, 3, 362, 181, 0, 1331, 1332, 5, 136, 0, 0, 1332, 1334, 5, 188, 0, 0, 1333, 1335, 3, 186, 93, 0, 1334, 1333, 1, 0, 0, 0, 1334, 1335, 1, 0, 0, 0, 1335, 1337, 1, 0, 0, 0, 1336, 1331, 1, 0, 0, 0, 1336, 1337, 1, 0, 0, 0, 1337, 141, 1, 0, 0, 0, 1338, 1339, 5, 179, 0, 0, 1339, 1340, 5, 86, 0, 0, 1340, 1341, 7, 8, 0, 0, 1341, 1347, 3, 362, 181, 0, 1342, 1343, 5, 136, 0, 0, 1343, 1345, 5, 32, 0, 0, 1344, 1346, 3, 192, 96, 0, 1345, 1344, 1, 0, 0, 0, 1345, 1346, 1, 0, 0, 0, 1346, 1348, 1, 0, 0, 0, 1347, 1342, 1, 0, 0, 0, 1347, 1348, 1, 0, 0, 0, 1348, 143, 1, 0, 0, 0, 1349, 1353, 3, 146, 73, 0, 1350, 1353, 3, 148, 74, 0, 1351, 1353, 3, 150, 75, 0, 1352, 1349, 1, 0, 0, 0, 1352, 1350, 1, 0, 0, 0, 1352, 1351, 1, 0, 0, 0, 1353, 145, 1, 0, 0, 0, 1354, 1355, 5, 34, 0, 0, 1355, 1356, 5, 136, 0, 0, 1356, 1357, 5, 46, 0, 0, 1357, 1358, 3, 184, 92, 0, 1358, 1361, 5, 108, 0, 0, 1359, 1362, 3, 318, 159, 0, 1360, 1362, 5, 133, 0, 0, 1361, 1359, 1, 0, 0, 0, 1361, 1360, 1, 0, 0, 0, 1362, 147, 1, 0, 0, 0, 1363, 1364, 5, 34, 0, 0, 1364, 1365, 5, 136, 0, 0, 1365, 1366, 5, 188, 0, 0, 1366, 1367, 3, 186, 93, 0, 1367, 1370, 5, 108, 0, 0, 1368, 1371, 3, 318, 159, 0, 1369, 1371, 5, 133, 0, 0, 1370, 1368, 1, 0, 0, 0, 1370, 1369, 1, 0, 0, 0, 1371, 149, 1, 0, 0, 0, 1372, 1373, 5, 34, 0, 0, 1373, 1374, 5, 136, 0, 0, 1374, 1375, 5, 32, 0, 0, 1375, 1376, 3, 192, 96, 0, 1376, 1379, 5, 108, 0, 0, 1377, 1380, 3, 318, 159, 0, 1378, 1380, 5, 133, 0, 0, 1379, 1377, 1, 0, 0, 0, 1379, 1378, 1, 0, 0, 0, 1380, 151, 1, 0, 0, 0, 1381, 1382, 5, 67, 0, 0, 1382, 1383, 3, 4, 2, 0, 1383, 153, 1, 0, 0, 0, 1384, 1390, 5, 176, 0, 0, 1385, 1391, 5, 2, 0, 0, 1386, 1387, 3, 362, 181, 0, 1387, 1388, 5, 249, 0, 0, 1388, 1389, 3, 308, 154, 0, 1389, 1391, 1, 0, 0, 0, 1390, 1385, 1, 0, 0, 0, 1390, 1386, 1, 0, 0, 0, 1390, 1391, 1, 0, 0, 0, 1391, 155, 1, 0, 0, 0, 1392, 1393, 5, 264, 0, 0, 1393, 1394, 5, 180, 0, 0, 1394, 1404, 5, 265, 0, 0, 1395, 1397, 3, 318, 159, 0, 1396, 1395, 1, 0, 0, 0, 1396, 1397, 1, 0, 0, 0, 1397, 1405, 1, 0, 0, 0, 1398, 1401, 3, 318, 159, 0, 1399, 1400, 5, 263, 0, 0, 1400, 1402, 3, 308, 154, 0, 1401, 1399, 1, 0, 0, 0, 1401, 1402, 1, 0, 0, 0, 1402, 1405, 1, 0, 0, 0, 1403, 1405, 3, 308, 154, 0, 1404, 1396, 1, 0, 0, 0, 1404, 1398, 1, 0, 0, 0, 1404, 1403, 1, 0, 0, 0, 1405, 1406, 1, 0, 0, 0, 1406, 1407, 5, 266, 0, 0, 1407, 157, 1, 0, 0, 0, 1408, 1409, 5, 107, 0, 0, 1409, 1410, 5, 121, 0, 0, 1410, 1411, 3, 186, 93, 0, 1411, 159, 1, 0, 0, 0, 1412, 1413, 5, 118, 0, 0, 1413, 1414, 5, 45, 0, 0, 1414, 1415, 5, 98, 0, 0, 1415, 1417, 5, 274, 0, 0, 1416, 1418, 5, 144, 0, 0, 1417, 1416, 1, 0, 0, 0, 1417, 1418, 1, 0, 0, 0, 1418, 1419, 1, 0, 0, 0, 1419, 1420, 5, 103, 0, 0, 1420, 1421, 5, 188, 0, 0, 1421, 1431, 3, 186, 93, 0, 1422, 1423, 5, 145, 0, 0, 1423, 1424, 5, 265, 0, 0, 1424, 1427, 3, 308, 154, 0, 1425, 1426, 5, 263, 0, 0, 1426, 1428, 3, 308, 154, 0, 1427, 1425, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 1429, 1, 0, 0, 0, 1429, 1430, 5, 266, 0, 0, 1430, 1432, 1, 0, 0, 0, 1431, 1422, 1, 0, 0, 0, 1431, 1432, 1, 0, 0, 0, 1432, 161, 1, 0, 0, 0, 1433, 1437, 3, 164, 82, 0, 1434, 1437, 3, 166, 83, 0, 1435, 1437, 3, 168, 84, 0, 1436, 1433, 1, 0, 0, 0, 1436, 1434, 1, 0, 0, 0, 1436, 1435, 1, 0, 0, 0, 1437, 163, 1, 0, 0, 0, 1438, 1439, 5, 162, 0, 0, 1439, 1452, 3, 186, 93, 0, 1440, 1441, 5, 145, 0, 0, 1441, 1442, 5, 265, 0, 0, 1442, 1447, 3, 308, 154, 0, 1443, 1444, 5, 263, 0, 0, 1444, 1446, 3, 308, 154, 0, 1445, 1443, 1, 0, 0, 0, 1446, 1449, 1, 0, 0, 0, 1447, 1448, 1, 0, 0, 0, 1447, 1445, 1, 0, 0, 0, 1448, 1450, 1, 0, 0, 0, 1449, 1447, 1, 0, 0, 0, 1450, 1451, 5, 266, 0, 0, 1451, 1453, 1, 0, 0, 0, 1452, 1440, 1, 0, 0, 0, 1452, 1453, 1, 0, 0, 0, 1453, 165, 1, 0, 0, 0, 1454, 1455, 5, 162, 0, 0, 1455, 1456, 5, 13, 0, 0, 1456, 167, 1, 0, 0, 0, 1457, 1458, 5, 162, 0, 0, 1458, 1459, 5, 85, 0, 0, 1459, 1460, 3, 190, 95, 0, 1460, 169, 1, 0, 0, 0, 1461, 1462, 5, 93, 0, 0, 1462, 1463, 5, 66, 0, 0, 1463, 171, 1, 0, 0, 0, 1464, 1465, 5, 93, 0, 0, 1465, 1466, 5, 132, 0, 0, 1466, 1467, 5, 66, 0, 0, 1467, 173, 1, 0, 0, 0, 1468, 1469, 3, 358, 179, 0, 1469, 175, 1, 0, 0, 0, 1470, 1471, 3, 358, 179, 0, 1471, 177, 1, 0, 0, 0, 1472, 1473, 3, 358, 179, 0, 1473, 179, 1, 0, 0, 0, 1474, 1475, 3, 358, 179, 0, 1475, 181, 1, 0, 0, 0, 1476, 1477, 3, 358, 179, 0, 1477, 183, 1, 0, 0, 0, 1478, 1479, 3, 358, 179, 0, 1479, 185, 1, 0, 0, 0, 1480, 1485, 3, 362, 181, 0, 1481, 1482, 5, 261, 0, 0, 1482, 1484, 3, 362, 181, 0, 1483, 1481, 1, 0, 0, 0, 1484, 1487, 1, 0, 0, 0, 1485, 1483, 1, 0, 0, 0, 1485, 1486, 1, 0, 0, 0, 1486, 187, 1, 0, 0, 0, 1487, 1485, 1, 0, 0, 0, 1488, 1493, 3, 362, 181, 0, 1489, 1490, 5, 261, 0, 0, 1490, 1492, 3, 362, 181, 0, 1491, 1489, 1, 0, 0, 0, 1492, 1495, 1, 0, 0, 0, 1493, 1491, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 189, 1, 0, 0, 0, 1495, 1493, 1, 0, 0, 0, 1496, 1499, 3, 366, 183, 0, 1497, 1499, 3, 358, 179, 0, 1498, 1496, 1, 0, 0, 0, 1498, 1497, 1, 0, 0, 0, 1499, 191, 1, 0, 0, 0, 1500, 1503, 3, 358, 179, 0, 1501, 1503, 4, 96, 0, 0, 1502, 1500, 1, 0, 0, 0, 1502, 1501, 1, 0, 0, 0, 1503, 193, 1, 0, 0, 0, 1504, 1507, 3, 186, 93, 0, 1505, 1507, 3, 188, 94, 0, 1506, 1504, 1, 0, 0, 0, 1506, 1505, 1, 0, 0, 0, 1507, 195, 1, 0, 0, 0, 1508, 1509, 5, 21, 0, 0, 1509, 1510, 5, 26, 0, 0, 1510, 1512, 3, 296, 148, 0, 1511, 1508, 1, 0, 0, 0, 1511, 1512, 1, 0, 0, 0, 1512, 1514, 1, 0, 0, 0, 1513, 1515, 3, 222, 111, 0, 1514, 1513, 1, 0, 0, 0, 1514, 1515, 1, 0, 0, 0, 1515, 1519, 1, 0, 0, 0, 1516, 1517, 5, 168, 0, 0, 1517, 1518, 5, 79, 0, 0, 1518, 1520, 3, 258, 129, 0, 1519, 1516, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 1524, 1, 0, 0, 0, 1521, 1522, 5, 216, 0, 0, 1522, 1523, 5, 175, 0, 0, 1523, 1525, 3, 252, 126, 0, 1524, 1521, 1, 0, 0, 0, 1524, 1525, 1, 0, 0, 0, 1525, 1529, 1, 0, 0, 0, 1526, 1527, 5, 23, 0, 0, 1527, 1528, 5, 9, 0, 0, 1528, 1530, 3, 234, 117, 0, 1529, 1526, 1, 0, 0, 0, 1529, 1530, 1, 0, 0, 0, 1530, 1533, 1, 0, 0, 0, 1531, 1532, 5, 24, 0, 0, 1532, 1534, 3, 318, 159, 0, 1533, 1531, 1, 0, 0, 0, 1533, 1534, 1, 0, 0, 0, 1534, 1545, 1, 0, 0, 0, 1535, 1536, 5, 30, 0, 0, 1536, 1537, 5, 94, 0, 0, 1537, 1542, 3, 358, 179, 0, 1538, 1539, 5, 216, 0, 0, 1539, 1540, 5, 151, 0, 0, 1540, 1541, 5, 249, 0, 0, 1541, 1543, 5, 277, 0, 0, 1542, 1538, 1, 0, 0, 0, 1542, 1543, 1, 0, 0, 0, 1543, 1546, 1, 0, 0, 0, 1544, 1546, 5, 197, 0, 0, 1545, 1535, 1, 0, 0, 0, 1545, 1544, 1, 0, 0, 0, 1545, 1546, 1, 0, 0, 0, 1546, 1549, 1, 0, 0, 0, 1547, 1548, 5, 25, 0, 0, 1548, 1550, 3, 252, 126, 0, 1549, 1547, 1, 0, 0, 0, 1549, 1550, 1, 0, 0, 0, 1550, 197, 1, 0, 0, 0, 1551, 1556, 3, 200, 100, 0, 1552, 1553, 5, 263, 0, 0, 1553, 1555, 3, 200, 100, 0, 1554, 1552, 1, 0, 0, 0, 1555, 1558, 1, 0, 0, 0, 1556, 1554, 1, 0, 0, 0, 1556, 1557, 1, 0, 0, 0, 1557, 199, 1, 0, 0, 0, 1558, 1556, 1, 0, 0, 0, 1559, 1560, 3, 358, 179, 0, 1560, 1561, 5, 249, 0, 0, 1561, 1562, 3, 308, 154, 0, 1562, 201, 1, 0, 0, 0, 1563, 1565, 5, 265, 0, 0, 1564, 1566, 3, 204, 102, 0, 1565, 1564, 1, 0, 0, 0, 1565, 1566, 1, 0, 0, 0, 1566, 1573, 1, 0, 0, 0, 1567, 1569, 5, 263, 0, 0, 1568, 1570, 3, 204, 102, 0, 1569, 1568, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1572, 1, 0, 0, 0, 1571, 1567, 1, 0, 0, 0, 1572, 1575, 1, 0, 0, 0, 1573, 1571, 1, 0, 0, 0, 1573, 1574, 1, 0, 0, 0, 1574, 1576, 1, 0, 0, 0, 1575, 1573, 1, 0, 0, 0, 1576, 1577, 5, 266, 0, 0, 1577, 203, 1, 0, 0, 0, 1578, 1580, 3, 182, 91, 0, 1579, 1581, 3, 222, 111, 0, 1580, 1579, 1, 0, 0, 0, 1580, 1581, 1, 0, 0, 0, 1581, 205, 1, 0, 0, 0, 1582, 1584, 3, 208, 104, 0, 1583, 1582, 1, 0, 0, 0, 1583, 1584, 1, 0, 0, 0, 1584, 1585, 1, 0, 0, 0, 1585, 1586, 3, 262, 131, 0, 1586, 207, 1, 0, 0, 0, 1587, 1588, 5, 216, 0, 0, 1588, 1593, 3, 278, 139, 0, 1589, 1590, 5, 263, 0, 0, 1590, 1592, 3, 278, 139, 0, 1591, 1589, 1, 0, 0, 0, 1592, 1595, 1, 0, 0, 0, 1593, 1591, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 209, 1, 0, 0, 0, 1595, 1593, 1, 0, 0, 0, 1596, 1597, 5, 150, 0, 0, 1597, 1598, 5, 110, 0, 0, 1598, 1600, 3, 296, 148, 0, 1599, 1601, 5, 53, 0, 0, 1600, 1599, 1, 0, 0, 0, 1600, 1601, 1, 0, 0, 0, 1601, 1605, 1, 0, 0, 0, 1602, 1606, 5, 225, 0, 0, 1603, 1604, 5, 263, 0, 0, 1604, 1606, 5, 225, 0, 0, 1605, 1602, 1, 0, 0, 0, 1605, 1603, 1, 0, 0, 0, 1605, 1606, 1, 0, 0, 0, 1606, 1610, 1, 0, 0, 0, 1607, 1611, 5, 226, 0, 0, 1608, 1609, 5, 263, 0, 0, 1609, 1611, 5, 226, 0, 0, 1610, 1607, 1, 0, 0, 0, 1610, 1608, 1, 0, 0, 0, 1610, 1611, 1, 0, 0, 0, 1611, 1624, 1, 0, 0, 0, 1612, 1613, 5, 263, 0, 0, 1613, 1616, 3, 212, 106, 0, 1614, 1616, 3, 212, 106, 0, 1615, 1612, 1, 0, 0, 0, 1615, 1614, 1, 0, 0, 0, 1616, 1621, 1, 0, 0, 0, 1617, 1618, 5, 263, 0, 0, 1618, 1620, 3, 212, 106, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1623, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1621, 1619, 1, 0, 0, 0, 1622, 1625, 1, 0, 0, 0, 1623, 1621, 1, 0, 0, 0, 1624, 1615, 1, 0, 0, 0, 1624, 1625, 1, 0, 0, 0, 1625, 211, 1, 0, 0, 0, 1626, 1627, 5, 81, 0, 0, 1627, 1628, 5, 110, 0, 0, 1628, 1629, 3, 296, 148, 0, 1629, 1630, 5, 224, 0, 0, 1630, 1631, 3, 186, 93, 0, 1631, 1633, 3, 296, 148, 0, 1632, 1634, 5, 53, 0, 0, 1633, 1632, 1, 0, 0, 0, 1633, 1634, 1, 0, 0, 0, 1634, 1636, 1, 0, 0, 0, 1635, 1637, 5, 225, 0, 0, 1636, 1635, 1, 0, 0, 0, 1636, 1637, 1, 0, 0, 0, 1637, 1639, 1, 0, 0, 0, 1638, 1640, 5, 226, 0, 0, 1639, 1638, 1, 0, 0, 0, 1639, 1640, 1, 0, 0, 0, 1640, 213, 1, 0, 0, 0, 1641, 1642, 3, 192, 96, 0, 1642, 1645, 3, 332, 166, 0, 1643, 1644, 5, 34, 0, 0, 1644, 1646, 3, 318, 159, 0, 1645, 1643, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 215, 1, 0, 0, 0, 1647, 1648, 3, 182, 91, 0, 1648, 1650, 3, 332, 166, 0, 1649, 1651, 3, 222, 111, 0, 1650, 1649, 1, 0, 0, 0, 1650, 1651, 1, 0, 0, 0, 1651, 217, 1, 0, 0, 0, 1652, 1653, 3, 220, 110, 0, 1653, 219, 1, 0, 0, 0, 1654, 1655, 3, 182, 91, 0, 1655, 1663, 3, 332, 166, 0, 1656, 1660, 3, 228, 114, 0, 1657, 1659, 3, 228, 114, 0, 1658, 1657, 1, 0, 0, 0, 1659, 1662, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1660, 1658, 1, 0, 0, 0, 1661, 1664, 1, 0, 0, 0, 1662, 1660, 1, 0, 0, 0, 1663, 1656, 1, 0, 0, 0, 1663, 1664, 1, 0, 0, 0, 1664, 1666, 1, 0, 0, 0, 1665, 1667, 3, 222, 111, 0, 1666, 1665, 1, 0, 0, 0, 1666, 1667, 1, 0, 0, 0, 1667, 1670, 1, 0, 0, 0, 1668, 1669, 5, 150, 0, 0, 1669, 1671, 5, 110, 0, 0, 1670, 1668, 1, 0, 0, 0, 1670, 1671, 1, 0, 0, 0, 1671, 221, 1, 0, 0, 0, 1672, 1673, 5, 34, 0, 0, 1673, 1674, 3, 318, 159, 0, 1674, 223, 1, 0, 0, 0, 1675, 1683, 3, 214, 107, 0, 1676, 1680, 3, 228, 114, 0, 1677, 1679, 3, 228, 114, 0, 1678, 1677, 1, 0, 0, 0, 1679, 1682, 1, 0, 0, 0, 1680, 1681, 1, 0, 0, 0, 1680, 1678, 1, 0, 0, 0, 1681, 1684, 1, 0, 0, 0, 1682, 1680, 1, 0, 0, 0, 1683, 1676, 1, 0, 0, 0, 1683, 1684, 1, 0, 0, 0, 1684, 225, 1, 0, 0, 0, 1685, 1686, 3, 182, 91, 0, 1686, 1689, 3, 332, 166, 0, 1687, 1688, 5, 34, 0, 0, 1688, 1690, 3, 318, 159, 0, 1689, 1687, 1, 0, 0, 0, 1689, 1690, 1, 0, 0, 0, 1690, 1698, 1, 0, 0, 0, 1691, 1695, 3, 228, 114, 0, 1692, 1694, 3, 228, 114, 0, 1693, 1692, 1, 0, 0, 0, 1694, 1697, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1696, 1699, 1, 0, 0, 0, 1697, 1695, 1, 0, 0, 0, 1698, 1691, 1, 0, 0, 0, 1698, 1699, 1, 0, 0, 0, 1699, 227, 1, 0, 0, 0, 1700, 1702, 5, 132, 0, 0, 1701, 1700, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1703, 1, 0, 0, 0, 1703, 1706, 5, 133, 0, 0, 1704, 1706, 3, 230, 115, 0, 1705, 1701, 1, 0, 0, 0, 1705, 1704, 1, 0, 0, 0, 1706, 229, 1, 0, 0, 0, 1707, 1708, 5, 60, 0, 0, 1708, 1716, 3, 308, 154, 0, 1709, 1710, 5, 35, 0, 0, 1710, 1716, 3, 308, 154, 0, 1711, 1712, 5, 51, 0, 0, 1712, 1716, 3, 308, 154, 0, 1713, 1714, 5, 16, 0, 0, 1714, 1716, 3, 364, 182, 0, 1715, 1707, 1, 0, 0, 0, 1715, 1709, 1, 0, 0, 0, 1715, 1711, 1, 0, 0, 0, 1715, 1713, 1, 0, 0, 0, 1716, 231, 1, 0, 0, 0, 1717, 1718, 7, 10, 0, 0, 1718, 233, 1, 0, 0, 0, 1719, 1720, 7, 11, 0, 0, 1720, 235, 1, 0, 0, 0, 1721, 1726, 3, 238, 119, 0, 1722, 1723, 5, 263, 0, 0, 1723, 1725, 3, 238, 119, 0, 1724, 1722, 1, 0, 0, 0, 1725, 1728, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1726, 1724, 1, 0, 0, 0, 1727, 1731, 1, 0, 0, 0, 1728, 1726, 1, 0, 0, 0, 1729, 1730, 5, 263, 0, 0, 1730, 1732, 3, 240, 120, 0, 1731, 1729, 1, 0, 0, 0, 1731, 1732, 1, 0, 0, 0, 1732, 1735, 1, 0, 0, 0, 1733, 1735, 3, 240, 120, 0, 1734, 1721, 1, 0, 0, 0, 1734, 1733, 1, 0, 0, 0, 1735, 237, 1, 0, 0, 0, 1736, 1738, 5, 89, 0, 0, 1737, 1739, 3, 296, 148, 0, 1738, 1737, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 1740, 1, 0, 0, 0, 1740, 1741, 5, 146, 0, 0, 1741, 1742, 3, 364, 182, 0, 1742, 239, 1, 0, 0, 0, 1743, 1745, 5, 154, 0, 0, 1744, 1746, 3, 296, 148, 0, 1745, 1744, 1, 0, 0, 0, 1745, 1746, 1, 0, 0, 0, 1746, 1747, 1, 0, 0, 0, 1747, 1748, 5, 265, 0, 0, 1748, 1749, 5, 145, 0, 0, 1749, 1755, 3, 242, 121, 0, 1750, 1751, 5, 263, 0, 0, 1751, 1752, 5, 145, 0, 0, 1752, 1754, 3, 242, 121, 0, 1753, 1750, 1, 0, 0, 0, 1754, 1757, 1, 0, 0, 0, 1755, 1756, 1, 0, 0, 0, 1755, 1753, 1, 0, 0, 0, 1756, 1758, 1, 0, 0, 0, 1757, 1755, 1, 0, 0, 0, 1758, 1759, 5, 266, 0, 0, 1759, 241, 1, 0, 0, 0, 1760, 1761, 5, 210, 0, 0, 1761, 1762, 3, 248, 124, 0, 1762, 1763, 3, 308, 154, 0, 1763, 1776, 1, 0, 0, 0, 1764, 1765, 3, 308, 154, 0, 1765, 1766, 3, 246, 123, 0, 1766, 1768, 1, 0, 0, 0, 1767, 1764, 1, 0, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1769, 1, 0, 0, 0, 1769, 1773, 5, 211, 0, 0, 1770, 1771, 3, 246, 123, 0, 1771, 1772, 3, 308, 154, 0, 1772, 1774, 1, 0, 0, 0, 1773, 1770, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 1776, 1, 0, 0, 0, 1775, 1760, 1, 0, 0, 0, 1775, 1767, 1, 0, 0, 0, 1776, 243, 1, 0, 0, 0, 1777, 1778, 5, 30, 0, 0, 1778, 1779, 5, 94, 0, 0, 1779, 1784, 3, 362, 181, 0, 1780, 1781, 5, 216, 0, 0, 1781, 1782, 5, 151, 0, 0, 1782, 1783, 5, 249, 0, 0, 1783, 1785, 3, 364, 182, 0, 1784, 1780, 1, 0, 0, 0, 1784, 1785, 1, 0, 0, 0, 1785, 1788, 1, 0, 0, 0, 1786, 1788, 5, 197, 0, 0, 1787, 1777, 1, 0, 0, 0, 1787, 1786, 1, 0, 0, 0, 1788, 245, 1, 0, 0, 0, 1789, 1795, 1, 0, 0, 0, 1790, 1795, 5, 251, 0, 0, 1791, 1795, 5, 252, 0, 0, 1792, 1795, 5, 253, 0, 0, 1793, 1795, 5, 254, 0, 0, 1794, 1789, 1, 0, 0, 0, 1794, 1790, 1, 0, 0, 0, 1794, 1791, 1, 0, 0, 0, 1794, 1792, 1, 0, 0, 0, 1794, 1793, 1, 0, 0, 0, 1795, 247, 1, 0, 0, 0, 1796, 1805, 5, 249, 0, 0, 1797, 1805, 5, 250, 0, 0, 1798, 1805, 5, 115, 0, 0, 1799, 1805, 5, 164, 0, 0, 1800, 1805, 5, 163, 0, 0, 1801, 1805, 5, 15, 0, 0, 1802, 1805, 5, 94, 0, 0, 1803, 1805, 3, 246, 123, 0, 1804, 1796, 1, 0, 0, 0, 1804, 1797, 1, 0, 0, 0, 1804, 1798, 1, 0, 0, 0, 1804, 1799, 1, 0, 0, 0, 1804, 1800, 1, 0, 0, 0, 1804, 1801, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1804, 1803, 1, 0, 0, 0, 1805, 249, 1, 0, 0, 0, 1806, 1807, 5, 115, 0, 0, 1807, 1810, 3, 358, 179, 0, 1808, 1809, 7, 12, 0, 0, 1809, 1811, 5, 153, 0, 0, 1810, 1808, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 251, 1, 0, 0, 0, 1812, 1813, 5, 265, 0, 0, 1813, 1818, 3, 260, 130, 0, 1814, 1815, 5, 263, 0, 0, 1815, 1817, 3, 260, 130, 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, 266, 0, 0, 1822, 253, 1, 0, 0, 0, 1823, 1824, 5, 265, 0, 0, 1824, 1829, 3, 214, 107, 0, 1825, 1826, 5, 263, 0, 0, 1826, 1828, 3, 214, 107, 0, 1827, 1825, 1, 0, 0, 0, 1828, 1831, 1, 0, 0, 0, 1829, 1830, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1830, 1832, 1, 0, 0, 0, 1831, 1829, 1, 0, 0, 0, 1832, 1833, 5, 266, 0, 0, 1833, 255, 1, 0, 0, 0, 1834, 1839, 3, 308, 154, 0, 1835, 1836, 5, 263, 0, 0, 1836, 1838, 3, 308, 154, 0, 1837, 1835, 1, 0, 0, 0, 1838, 1841, 1, 0, 0, 0, 1839, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 257, 1, 0, 0, 0, 1841, 1839, 1, 0, 0, 0, 1842, 1852, 5, 52, 0, 0, 1843, 1844, 5, 71, 0, 0, 1844, 1845, 5, 191, 0, 0, 1845, 1846, 5, 26, 0, 0, 1846, 1850, 3, 318, 159, 0, 1847, 1848, 5, 63, 0, 0, 1848, 1849, 5, 26, 0, 0, 1849, 1851, 3, 318, 159, 0, 1850, 1847, 1, 0, 0, 0, 1850, 1851, 1, 0, 0, 0, 1851, 1853, 1, 0, 0, 0, 1852, 1843, 1, 0, 0, 0, 1852, 1853, 1, 0, 0, 0, 1853, 1858, 1, 0, 0, 0, 1854, 1855, 5, 117, 0, 0, 1855, 1856, 5, 191, 0, 0, 1856, 1857, 5, 26, 0, 0, 1857, 1859, 3, 318, 159, 0, 1858, 1854, 1, 0, 0, 0, 1858, 1859, 1, 0, 0, 0, 1859, 259, 1, 0, 0, 0, 1860, 1863, 3, 362, 181, 0, 1861, 1862, 5, 249, 0, 0, 1862, 1864, 3, 308, 154, 0, 1863, 1861, 1, 0, 0, 0, 1863, 1864, 1, 0, 0, 0, 1864, 261, 1, 0, 0, 0, 1865, 1876, 3, 264, 132, 0, 1866, 1867, 5, 139, 0, 0, 1867, 1868, 5, 26, 0, 0, 1868, 1873, 3, 268, 134, 0, 1869, 1870, 5, 263, 0, 0, 1870, 1872, 3, 268, 134, 0, 1871, 1869, 1, 0, 0, 0, 1872, 1875, 1, 0, 0, 0, 1873, 1871, 1, 0, 0, 0, 1873, 1874, 1, 0, 0, 0, 1874, 1877, 1, 0, 0, 0, 1875, 1873, 1, 0, 0, 0, 1876, 1866, 1, 0, 0, 0, 1876, 1877, 1, 0, 0, 0, 1877, 1884, 1, 0, 0, 0, 1878, 1879, 5, 116, 0, 0, 1879, 1882, 3, 308, 154, 0, 1880, 1881, 5, 135, 0, 0, 1881, 1883, 5, 277, 0, 0, 1882, 1880, 1, 0, 0, 0, 1882, 1883, 1, 0, 0, 0, 1883, 1885, 1, 0, 0, 0, 1884, 1878, 1, 0, 0, 0, 1884, 1885, 1, 0, 0, 0, 1885, 263, 1, 0, 0, 0, 1886, 1887, 6, 132, -1, 0, 1887, 1888, 3, 266, 133, 0, 1888, 1903, 1, 0, 0, 0, 1889, 1890, 10, 2, 0, 0, 1890, 1892, 5, 100, 0, 0, 1891, 1893, 3, 280, 140, 0, 1892, 1891, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1902, 3, 264, 132, 3, 1895, 1896, 10, 1, 0, 0, 1896, 1898, 7, 13, 0, 0, 1897, 1899, 3, 280, 140, 0, 1898, 1897, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 1900, 1, 0, 0, 0, 1900, 1902, 3, 264, 132, 2, 1901, 1889, 1, 0, 0, 0, 1901, 1895, 1, 0, 0, 0, 1902, 1905, 1, 0, 0, 0, 1903, 1901, 1, 0, 0, 0, 1903, 1904, 1, 0, 0, 0, 1904, 265, 1, 0, 0, 0, 1905, 1903, 1, 0, 0, 0, 1906, 1923, 3, 270, 135, 0, 1907, 1908, 5, 188, 0, 0, 1908, 1923, 3, 186, 93, 0, 1909, 1910, 5, 211, 0, 0, 1910, 1915, 3, 308, 154, 0, 1911, 1912, 5, 263, 0, 0, 1912, 1914, 3, 308, 154, 0, 1913, 1911, 1, 0, 0, 0, 1914, 1917, 1, 0, 0, 0, 1915, 1913, 1, 0, 0, 0, 1915, 1916, 1, 0, 0, 0, 1916, 1923, 1, 0, 0, 0, 1917, 1915, 1, 0, 0, 0, 1918, 1919, 5, 265, 0, 0, 1919, 1920, 3, 262, 131, 0, 1920, 1921, 5, 266, 0, 0, 1921, 1923, 1, 0, 0, 0, 1922, 1906, 1, 0, 0, 0, 1922, 1907, 1, 0, 0, 0, 1922, 1909, 1, 0, 0, 0, 1922, 1918, 1, 0, 0, 0, 1923, 267, 1, 0, 0, 0, 1924, 1926, 3, 306, 153, 0, 1925, 1927, 7, 14, 0, 0, 1926, 1925, 1, 0, 0, 0, 1926, 1927, 1, 0, 0, 0, 1927, 1930, 1, 0, 0, 0, 1928, 1929, 5, 134, 0, 0, 1929, 1931, 7, 15, 0, 0, 1930, 1928, 1, 0, 0, 0, 1930, 1931, 1, 0, 0, 0, 1931, 269, 1, 0, 0, 0, 1932, 1934, 5, 174, 0, 0, 1933, 1935, 3, 280, 140, 0, 1934, 1933, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1937, 1, 0, 0, 0, 1936, 1938, 5, 183, 0, 0, 1937, 1936, 1, 0, 0, 0, 1937, 1938, 1, 0, 0, 0, 1938, 1939, 1, 0, 0, 0, 1939, 1944, 3, 282, 141, 0, 1940, 1941, 5, 263, 0, 0, 1941, 1943, 3, 282, 141, 0, 1942, 1940, 1, 0, 0, 0, 1943, 1946, 1, 0, 0, 0, 1944, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1956, 1, 0, 0, 0, 1946, 1944, 1, 0, 0, 0, 1947, 1948, 5, 82, 0, 0, 1948, 1953, 3, 284, 142, 0, 1949, 1950, 5, 263, 0, 0, 1950, 1952, 3, 284, 142, 0, 1951, 1949, 1, 0, 0, 0, 1952, 1955, 1, 0, 0, 0, 1953, 1951, 1, 0, 0, 0, 1953, 1954, 1, 0, 0, 0, 1954, 1957, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1956, 1947, 1, 0, 0, 0, 1956, 1957, 1, 0, 0, 0, 1957, 1960, 1, 0, 0, 0, 1958, 1959, 5, 215, 0, 0, 1959, 1961, 3, 310, 155, 0, 1960, 1958, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1965, 1, 0, 0, 0, 1962, 1963, 5, 87, 0, 0, 1963, 1964, 5, 26, 0, 0, 1964, 1966, 3, 272, 136, 0, 1965, 1962, 1, 0, 0, 0, 1965, 1966, 1, 0, 0, 0, 1966, 1969, 1, 0, 0, 0, 1967, 1968, 5, 90, 0, 0, 1968, 1970, 3, 310, 155, 0, 1969, 1967, 1, 0, 0, 0, 1969, 1970, 1, 0, 0, 0, 1970, 271, 1, 0, 0, 0, 1971, 1973, 3, 280, 140, 0, 1972, 1971, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1974, 1, 0, 0, 0, 1974, 1979, 3, 274, 137, 0, 1975, 1976, 5, 263, 0, 0, 1976, 1978, 3, 274, 137, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1981, 1, 0, 0, 0, 1979, 1977, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 273, 1, 0, 0, 0, 1981, 1979, 1, 0, 0, 0, 1982, 1983, 3, 276, 138, 0, 1983, 275, 1, 0, 0, 0, 1984, 1993, 5, 265, 0, 0, 1985, 1990, 3, 306, 153, 0, 1986, 1987, 5, 263, 0, 0, 1987, 1989, 3, 306, 153, 0, 1988, 1986, 1, 0, 0, 0, 1989, 1992, 1, 0, 0, 0, 1990, 1988, 1, 0, 0, 0, 1990, 1991, 1, 0, 0, 0, 1991, 1994, 1, 0, 0, 0, 1992, 1990, 1, 0, 0, 0, 1993, 1985, 1, 0, 0, 0, 1993, 1994, 1, 0, 0, 0, 1994, 1995, 1, 0, 0, 0, 1995, 1998, 5, 266, 0, 0, 1996, 1998, 3, 306, 153, 0, 1997, 1984, 1, 0, 0, 0, 1997, 1996, 1, 0, 0, 0, 1998, 277, 1, 0, 0, 0, 1999, 2001, 3, 362, 181, 0, 2000, 2002, 3, 296, 148, 0, 2001, 2000, 1, 0, 0, 0, 2001, 2002, 1, 0, 0, 0, 2002, 2003, 1, 0, 0, 0, 2003, 2004, 5, 9, 0, 0, 2004, 2005, 3, 300, 150, 0, 2005, 279, 1, 0, 0, 0, 2006, 2007, 7, 16, 0, 0, 2007, 281, 1, 0, 0, 0, 2008, 2013, 3, 306, 153, 0, 2009, 2011, 5, 9, 0, 0, 2010, 2009, 1, 0, 0, 0, 2010, 2011, 1, 0, 0, 0, 2011, 2012, 1, 0, 0, 0, 2012, 2014, 3, 362, 181, 0, 2013, 2010, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2021, 1, 0, 0, 0, 2015, 2016, 3, 358, 179, 0, 2016, 2017, 5, 261, 0, 0, 2017, 2018, 5, 257, 0, 0, 2018, 2021, 1, 0, 0, 0, 2019, 2021, 5, 257, 0, 0, 2020, 2008, 1, 0, 0, 0, 2020, 2015, 1, 0, 0, 0, 2020, 2019, 1, 0, 0, 0, 2021, 283, 1, 0, 0, 0, 2022, 2023, 6, 142, -1, 0, 2023, 2024, 3, 290, 145, 0, 2024, 2038, 1, 0, 0, 0, 2025, 2034, 10, 2, 0, 0, 2026, 2027, 5, 38, 0, 0, 2027, 2028, 5, 109, 0, 0, 2028, 2035, 3, 290, 145, 0, 2029, 2030, 3, 286, 143, 0, 2030, 2031, 5, 109, 0, 0, 2031, 2032, 3, 284, 142, 0, 2032, 2033, 3, 288, 144, 0, 2033, 2035, 1, 0, 0, 0, 2034, 2026, 1, 0, 0, 0, 2034, 2029, 1, 0, 0, 0, 2035, 2037, 1, 0, 0, 0, 2036, 2025, 1, 0, 0, 0, 2037, 2040, 1, 0, 0, 0, 2038, 2036, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 285, 1, 0, 0, 0, 2040, 2038, 1, 0, 0, 0, 2041, 2043, 5, 97, 0, 0, 2042, 2041, 1, 0, 0, 0, 2042, 2043, 1, 0, 0, 0, 2043, 2073, 1, 0, 0, 0, 2044, 2046, 5, 114, 0, 0, 2045, 2047, 5, 97, 0, 0, 2046, 2045, 1, 0, 0, 0, 2046, 2047, 1, 0, 0, 0, 2047, 2073, 1, 0, 0, 0, 2048, 2050, 5, 165, 0, 0, 2049, 2051, 5, 97, 0, 0, 2050, 2049, 1, 0, 0, 0, 2050, 2051, 1, 0, 0, 0, 2051, 2073, 1, 0, 0, 0, 2052, 2054, 5, 114, 0, 0, 2053, 2055, 5, 141, 0, 0, 2054, 2053, 1, 0, 0, 0, 2054, 2055, 1, 0, 0, 0, 2055, 2073, 1, 0, 0, 0, 2056, 2058, 5, 165, 0, 0, 2057, 2059, 5, 141, 0, 0, 2058, 2057, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2073, 1, 0, 0, 0, 2060, 2062, 5, 83, 0, 0, 2061, 2063, 5, 141, 0, 0, 2062, 2061, 1, 0, 0, 0, 2062, 2063, 1, 0, 0, 0, 2063, 2073, 1, 0, 0, 0, 2064, 2065, 5, 114, 0, 0, 2065, 2073, 5, 177, 0, 0, 2066, 2067, 5, 165, 0, 0, 2067, 2073, 5, 177, 0, 0, 2068, 2069, 5, 114, 0, 0, 2069, 2073, 5, 7, 0, 0, 2070, 2071, 5, 165, 0, 0, 2071, 2073, 5, 7, 0, 0, 2072, 2042, 1, 0, 0, 0, 2072, 2044, 1, 0, 0, 0, 2072, 2048, 1, 0, 0, 0, 2072, 2052, 1, 0, 0, 0, 2072, 2056, 1, 0, 0, 0, 2072, 2060, 1, 0, 0, 0, 2072, 2064, 1, 0, 0, 0, 2072, 2066, 1, 0, 0, 0, 2072, 2068, 1, 0, 0, 0, 2072, 2070, 1, 0, 0, 0, 2073, 287, 1, 0, 0, 0, 2074, 2075, 5, 136, 0, 0, 2075, 2089, 3, 310, 155, 0, 2076, 2077, 5, 205, 0, 0, 2077, 2078, 5, 265, 0, 0, 2078, 2083, 3, 362, 181, 0, 2079, 2080, 5, 263, 0, 0, 2080, 2082, 3, 362, 181, 0, 2081, 2079, 1, 0, 0, 0, 2082, 2085, 1, 0, 0, 0, 2083, 2081, 1, 0, 0, 0, 2083, 2084, 1, 0, 0, 0, 2084, 2086, 1, 0, 0, 0, 2085, 2083, 1, 0, 0, 0, 2086, 2087, 5, 266, 0, 0, 2087, 2089, 1, 0, 0, 0, 2088, 2074, 1, 0, 0, 0, 2088, 2076, 1, 0, 0, 0, 2089, 289, 1, 0, 0, 0, 2090, 2103, 3, 294, 147, 0, 2091, 2092, 5, 190, 0, 0, 2092, 2093, 3, 292, 146, 0, 2093, 2094, 5, 265, 0, 0, 2094, 2095, 3, 308, 154, 0, 2095, 2101, 5, 266, 0, 0, 2096, 2097, 5, 157, 0, 0, 2097, 2098, 5, 265, 0, 0, 2098, 2099, 3, 308, 154, 0, 2099, 2100, 5, 266, 0, 0, 2100, 2102, 1, 0, 0, 0, 2101, 2096, 1, 0, 0, 0, 2101, 2102, 1, 0, 0, 0, 2102, 2104, 1, 0, 0, 0, 2103, 2091, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 291, 1, 0, 0, 0, 2105, 2106, 7, 17, 0, 0, 2106, 293, 1, 0, 0, 0, 2107, 2115, 3, 298, 149, 0, 2108, 2110, 5, 9, 0, 0, 2109, 2108, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2111, 1, 0, 0, 0, 2111, 2113, 3, 362, 181, 0, 2112, 2114, 3, 296, 148, 0, 2113, 2112, 1, 0, 0, 0, 2113, 2114, 1, 0, 0, 0, 2114, 2116, 1, 0, 0, 0, 2115, 2109, 1, 0, 0, 0, 2115, 2116, 1, 0, 0, 0, 2116, 295, 1, 0, 0, 0, 2117, 2118, 5, 265, 0, 0, 2118, 2123, 3, 192, 96, 0, 2119, 2120, 5, 263, 0, 0, 2120, 2122, 3, 192, 96, 0, 2121, 2119, 1, 0, 0, 0, 2122, 2125, 1, 0, 0, 0, 2123, 2121, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2126, 1, 0, 0, 0, 2125, 2123, 1, 0, 0, 0, 2126, 2127, 5, 266, 0, 0, 2127, 297, 1, 0, 0, 0, 2128, 2136, 3, 194, 97, 0, 2129, 2131, 5, 113, 0, 0, 2130, 2129, 1, 0, 0, 0, 2130, 2131, 1, 0, 0, 0, 2131, 2132, 1, 0, 0, 0, 2132, 2136, 3, 300, 150, 0, 2133, 2136, 3, 302, 151, 0, 2134, 2136, 3, 304, 152, 0, 2135, 2128, 1, 0, 0, 0, 2135, 2130, 1, 0, 0, 0, 2135, 2133, 1, 0, 0, 0, 2135, 2134, 1, 0, 0, 0, 2136, 299, 1, 0, 0, 0, 2137, 2138, 5, 265, 0, 0, 2138, 2139, 3, 206, 103, 0, 2139, 2140, 5, 266, 0, 0, 2140, 301, 1, 0, 0, 0, 2141, 2142, 5, 201, 0, 0, 2142, 2143, 5, 265, 0, 0, 2143, 2148, 3, 308, 154, 0, 2144, 2145, 5, 263, 0, 0, 2145, 2147, 3, 308, 154, 0, 2146, 2144, 1, 0, 0, 0, 2147, 2150, 1, 0, 0, 0, 2148, 2146, 1, 0, 0, 0, 2148, 2149, 1, 0, 0, 0, 2149, 2151, 1, 0, 0, 0, 2150, 2148, 1, 0, 0, 0, 2151, 2154, 5, 266, 0, 0, 2152, 2153, 5, 216, 0, 0, 2153, 2155, 5, 140, 0, 0, 2154, 2152, 1, 0, 0, 0, 2154, 2155, 1, 0, 0, 0, 2155, 303, 1, 0, 0, 0, 2156, 2157, 5, 265, 0, 0, 2157, 2158, 3, 284, 142, 0, 2158, 2159, 5, 266, 0, 0, 2159, 305, 1, 0, 0, 0, 2160, 2163, 3, 192, 96, 0, 2161, 2163, 3, 308, 154, 0, 2162, 2160, 1, 0, 0, 0, 2162, 2161, 1, 0, 0, 0, 2163, 307, 1, 0, 0, 0, 2164, 2165, 3, 310, 155, 0, 2165, 309, 1, 0, 0, 0, 2166, 2167, 6, 155, -1, 0, 2167, 2169, 3, 314, 157, 0, 2168, 2170, 3, 312, 156, 0, 2169, 2168, 1, 0, 0, 0, 2169, 2170, 1, 0, 0, 0, 2170, 2174, 1, 0, 0, 0, 2171, 2172, 5, 132, 0, 0, 2172, 2174, 3, 310, 155, 3, 2173, 2166, 1, 0, 0, 0, 2173, 2171, 1, 0, 0, 0, 2174, 2183, 1, 0, 0, 0, 2175, 2176, 10, 2, 0, 0, 2176, 2177, 5, 5, 0, 0, 2177, 2182, 3, 310, 155, 3, 2178, 2179, 10, 1, 0, 0, 2179, 2180, 5, 138, 0, 0, 2180, 2182, 3, 310, 155, 2, 2181, 2175, 1, 0, 0, 0, 2181, 2178, 1, 0, 0, 0, 2182, 2185, 1, 0, 0, 0, 2183, 2181, 1, 0, 0, 0, 2183, 2184, 1, 0, 0, 0, 2184, 311, 1, 0, 0, 0, 2185, 2183, 1, 0, 0, 0, 2186, 2187, 3, 320, 160, 0, 2187, 2188, 3, 314, 157, 0, 2188, 2245, 1, 0, 0, 0, 2189, 2190, 3, 320, 160, 0, 2190, 2191, 3, 322, 161, 0, 2191, 2192, 3, 300, 150, 0, 2192, 2245, 1, 0, 0, 0, 2193, 2195, 5, 132, 0, 0, 2194, 2193, 1, 0, 0, 0, 2194, 2195, 1, 0, 0, 0, 2195, 2196, 1, 0, 0, 0, 2196, 2197, 5, 15, 0, 0, 2197, 2198, 3, 314, 157, 0, 2198, 2199, 5, 5, 0, 0, 2199, 2200, 3, 314, 157, 0, 2200, 2245, 1, 0, 0, 0, 2201, 2203, 5, 132, 0, 0, 2202, 2201, 1, 0, 0, 0, 2202, 2203, 1, 0, 0, 0, 2203, 2204, 1, 0, 0, 0, 2204, 2205, 5, 94, 0, 0, 2205, 2206, 5, 265, 0, 0, 2206, 2211, 3, 308, 154, 0, 2207, 2208, 5, 263, 0, 0, 2208, 2210, 3, 308, 154, 0, 2209, 2207, 1, 0, 0, 0, 2210, 2213, 1, 0, 0, 0, 2211, 2209, 1, 0, 0, 0, 2211, 2212, 1, 0, 0, 0, 2212, 2214, 1, 0, 0, 0, 2213, 2211, 1, 0, 0, 0, 2214, 2215, 5, 266, 0, 0, 2215, 2245, 1, 0, 0, 0, 2216, 2218, 5, 132, 0, 0, 2217, 2216, 1, 0, 0, 0, 2217, 2218, 1, 0, 0, 0, 2218, 2219, 1, 0, 0, 0, 2219, 2220, 5, 94, 0, 0, 2220, 2245, 3, 300, 150, 0, 2221, 2223, 5, 132, 0, 0, 2222, 2221, 1, 0, 0, 0, 2222, 2223, 1, 0, 0, 0, 2223, 2224, 1, 0, 0, 0, 2224, 2225, 7, 18, 0, 0, 2225, 2228, 3, 314, 157, 0, 2226, 2227, 5, 62, 0, 0, 2227, 2229, 3, 314, 157, 0, 2228, 2226, 1, 0, 0, 0, 2228, 2229, 1, 0, 0, 0, 2229, 2245, 1, 0, 0, 0, 2230, 2231, 7, 19, 0, 0, 2231, 2245, 3, 314, 157, 0, 2232, 2234, 5, 108, 0, 0, 2233, 2235, 5, 132, 0, 0, 2234, 2233, 1, 0, 0, 0, 2234, 2235, 1, 0, 0, 0, 2235, 2236, 1, 0, 0, 0, 2236, 2245, 7, 20, 0, 0, 2237, 2239, 5, 108, 0, 0, 2238, 2240, 5, 132, 0, 0, 2239, 2238, 1, 0, 0, 0, 2239, 2240, 1, 0, 0, 0, 2240, 2241, 1, 0, 0, 0, 2241, 2242, 5, 57, 0, 0, 2242, 2243, 5, 82, 0, 0, 2243, 2245, 3, 314, 157, 0, 2244, 2186, 1, 0, 0, 0, 2244, 2189, 1, 0, 0, 0, 2244, 2194, 1, 0, 0, 0, 2244, 2202, 1, 0, 0, 0, 2244, 2217, 1, 0, 0, 0, 2244, 2222, 1, 0, 0, 0, 2244, 2230, 1, 0, 0, 0, 2244, 2232, 1, 0, 0, 0, 2244, 2237, 1, 0, 0, 0, 2245, 313, 1, 0, 0, 0, 2246, 2247, 6, 157, -1, 0, 2247, 2251, 3, 316, 158, 0, 2248, 2249, 7, 21, 0, 0, 2249, 2251, 3, 314, 157, 4, 2250, 2246, 1, 0, 0, 0, 2250, 2248, 1, 0, 0, 0, 2251, 2263, 1, 0, 0, 0, 2252, 2253, 10, 3, 0, 0, 2253, 2254, 7, 22, 0, 0, 2254, 2262, 3, 314, 157, 4, 2255, 2256, 10, 2, 0, 0, 2256, 2257, 7, 21, 0, 0, 2257, 2262, 3, 314, 157, 3, 2258, 2259, 10, 1, 0, 0, 2259, 2260, 5, 260, 0, 0, 2260, 2262, 3, 314, 157, 2, 2261, 2252, 1, 0, 0, 0, 2261, 2255, 1, 0, 0, 0, 2261, 2258, 1, 0, 0, 0, 2262, 2265, 1, 0, 0, 0, 2263, 2261, 1, 0, 0, 0, 2263, 2264, 1, 0, 0, 0, 2264, 315, 1, 0, 0, 0, 2265, 2263, 1, 0, 0, 0, 2266, 2267, 6, 158, -1, 0, 2267, 2513, 5, 133, 0, 0, 2268, 2513, 3, 326, 163, 0, 2269, 2270, 3, 362, 181, 0, 2270, 2271, 3, 318, 159, 0, 2271, 2513, 1, 0, 0, 0, 2272, 2273, 5, 286, 0, 0, 2273, 2513, 3, 318, 159, 0, 2274, 2513, 3, 364, 182, 0, 2275, 2513, 3, 324, 162, 0, 2276, 2513, 3, 318, 159, 0, 2277, 2513, 5, 276, 0, 0, 2278, 2513, 5, 272, 0, 0, 2279, 2280, 5, 148, 0, 0, 2280, 2281, 5, 265, 0, 0, 2281, 2282, 3, 314, 157, 0, 2282, 2283, 5, 94, 0, 0, 2283, 2284, 3, 314, 157, 0, 2284, 2285, 5, 266, 0, 0, 2285, 2513, 1, 0, 0, 0, 2286, 2287, 5, 265, 0, 0, 2287, 2290, 3, 308, 154, 0, 2288, 2289, 5, 9, 0, 0, 2289, 2291, 3, 332, 166, 0, 2290, 2288, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 2300, 1, 0, 0, 0, 2292, 2293, 5, 263, 0, 0, 2293, 2296, 3, 308, 154, 0, 2294, 2295, 5, 9, 0, 0, 2295, 2297, 3, 332, 166, 0, 2296, 2294, 1, 0, 0, 0, 2296, 2297, 1, 0, 0, 0, 2297, 2299, 1, 0, 0, 0, 2298, 2292, 1, 0, 0, 0, 2299, 2302, 1, 0, 0, 0, 2300, 2301, 1, 0, 0, 0, 2300, 2298, 1, 0, 0, 0, 2301, 2303, 1, 0, 0, 0, 2302, 2300, 1, 0, 0, 0, 2303, 2304, 5, 266, 0, 0, 2304, 2513, 1, 0, 0, 0, 2305, 2306, 5, 168, 0, 0, 2306, 2307, 5, 265, 0, 0, 2307, 2312, 3, 308, 154, 0, 2308, 2309, 5, 263, 0, 0, 2309, 2311, 3, 308, 154, 0, 2310, 2308, 1, 0, 0, 0, 2311, 2314, 1, 0, 0, 0, 2312, 2310, 1, 0, 0, 0, 2312, 2313, 1, 0, 0, 0, 2313, 2315, 1, 0, 0, 0, 2314, 2312, 1, 0, 0, 0, 2315, 2316, 5, 266, 0, 0, 2316, 2513, 1, 0, 0, 0, 2317, 2318, 3, 190, 95, 0, 2318, 2319, 5, 265, 0, 0, 2319, 2320, 5, 257, 0, 0, 2320, 2322, 5, 266, 0, 0, 2321, 2323, 3, 342, 171, 0, 2322, 2321, 1, 0, 0, 0, 2322, 2323, 1, 0, 0, 0, 2323, 2325, 1, 0, 0, 0, 2324, 2326, 3, 344, 172, 0, 2325, 2324, 1, 0, 0, 0, 2325, 2326, 1, 0, 0, 0, 2326, 2513, 1, 0, 0, 0, 2327, 2328, 3, 190, 95, 0, 2328, 2340, 5, 265, 0, 0, 2329, 2331, 3, 280, 140, 0, 2330, 2329, 1, 0, 0, 0, 2330, 2331, 1, 0, 0, 0, 2331, 2332, 1, 0, 0, 0, 2332, 2337, 3, 308, 154, 0, 2333, 2334, 5, 263, 0, 0, 2334, 2336, 3, 308, 154, 0, 2335, 2333, 1, 0, 0, 0, 2336, 2339, 1, 0, 0, 0, 2337, 2335, 1, 0, 0, 0, 2337, 2338, 1, 0, 0, 0, 2338, 2341, 1, 0, 0, 0, 2339, 2337, 1, 0, 0, 0, 2340, 2330, 1, 0, 0, 0, 2340, 2341, 1, 0, 0, 0, 2341, 2352, 1, 0, 0, 0, 2342, 2343, 5, 139, 0, 0, 2343, 2344, 5, 26, 0, 0, 2344, 2349, 3, 268, 134, 0, 2345, 2346, 5, 263, 0, 0, 2346, 2348, 3, 268, 134, 0, 2347, 2345, 1, 0, 0, 0, 2348, 2351, 1, 0, 0, 0, 2349, 2347, 1, 0, 0, 0, 2349, 2350, 1, 0, 0, 0, 2350, 2353, 1, 0, 0, 0, 2351, 2349, 1, 0, 0, 0, 2352, 2342, 1, 0, 0, 0, 2352, 2353, 1, 0, 0, 0, 2353, 2354, 1, 0, 0, 0, 2354, 2356, 5, 266, 0, 0, 2355, 2357, 3, 342, 171, 0, 2356, 2355, 1, 0, 0, 0, 2356, 2357, 1, 0, 0, 0, 2357, 2359, 1, 0, 0, 0, 2358, 2360, 3, 344, 172, 0, 2359, 2358, 1, 0, 0, 0, 2359, 2360, 1, 0, 0, 0, 2360, 2513, 1, 0, 0, 0, 2361, 2362, 3, 362, 181, 0, 2362, 2363, 5, 273, 0, 0, 2363, 2364, 3, 308, 154, 0, 2364, 2513, 1, 0, 0, 0, 2365, 2374, 5, 265, 0, 0, 2366, 2371, 3, 362, 181, 0, 2367, 2368, 5, 263, 0, 0, 2368, 2370, 3, 362, 181, 0, 2369, 2367, 1, 0, 0, 0, 2370, 2373, 1, 0, 0, 0, 2371, 2369, 1, 0, 0, 0, 2371, 2372, 1, 0, 0, 0, 2372, 2375, 1, 0, 0, 0, 2373, 2371, 1, 0, 0, 0, 2374, 2366, 1, 0, 0, 0, 2374, 2375, 1, 0, 0, 0, 2375, 2376, 1, 0, 0, 0, 2376, 2377, 5, 266, 0, 0, 2377, 2378, 5, 273, 0, 0, 2378, 2513, 3, 308, 154, 0, 2379, 2380, 5, 265, 0, 0, 2380, 2381, 3, 206, 103, 0, 2381, 2382, 5, 266, 0, 0, 2382, 2513, 1, 0, 0, 0, 2383, 2384, 5, 66, 0, 0, 2384, 2385, 5, 265, 0, 0, 2385, 2386, 3, 206, 103, 0, 2386, 2387, 5, 266, 0, 0, 2387, 2513, 1, 0, 0, 0, 2388, 2389, 5, 28, 0, 0, 2389, 2391, 3, 314, 157, 0, 2390, 2392, 3, 340, 170, 0, 2391, 2390, 1, 0, 0, 0, 2392, 2393, 1, 0, 0, 0, 2393, 2391, 1, 0, 0, 0, 2393, 2394, 1, 0, 0, 0, 2394, 2397, 1, 0, 0, 0, 2395, 2396, 5, 59, 0, 0, 2396, 2398, 3, 308, 154, 0, 2397, 2395, 1, 0, 0, 0, 2397, 2398, 1, 0, 0, 0, 2398, 2399, 1, 0, 0, 0, 2399, 2400, 5, 61, 0, 0, 2400, 2513, 1, 0, 0, 0, 2401, 2403, 5, 28, 0, 0, 2402, 2404, 3, 340, 170, 0, 2403, 2402, 1, 0, 0, 0, 2404, 2405, 1, 0, 0, 0, 2405, 2403, 1, 0, 0, 0, 2405, 2406, 1, 0, 0, 0, 2406, 2409, 1, 0, 0, 0, 2407, 2408, 5, 59, 0, 0, 2408, 2410, 3, 308, 154, 0, 2409, 2407, 1, 0, 0, 0, 2409, 2410, 1, 0, 0, 0, 2410, 2411, 1, 0, 0, 0, 2411, 2412, 5, 61, 0, 0, 2412, 2513, 1, 0, 0, 0, 2413, 2414, 5, 29, 0, 0, 2414, 2415, 5, 265, 0, 0, 2415, 2416, 3, 308, 154, 0, 2416, 2417, 5, 9, 0, 0, 2417, 2418, 3, 332, 166, 0, 2418, 2419, 5, 266, 0, 0, 2419, 2513, 1, 0, 0, 0, 2420, 2421, 5, 195, 0, 0, 2421, 2422, 5, 265, 0, 0, 2422, 2423, 3, 308, 154, 0, 2423, 2424, 5, 9, 0, 0, 2424, 2425, 3, 332, 166, 0, 2425, 2426, 5, 266, 0, 0, 2426, 2513, 1, 0, 0, 0, 2427, 2428, 5, 8, 0, 0, 2428, 2437, 5, 267, 0, 0, 2429, 2434, 3, 308, 154, 0, 2430, 2431, 5, 263, 0, 0, 2431, 2433, 3, 308, 154, 0, 2432, 2430, 1, 0, 0, 0, 2433, 2436, 1, 0, 0, 0, 2434, 2432, 1, 0, 0, 0, 2434, 2435, 1, 0, 0, 0, 2435, 2438, 1, 0, 0, 0, 2436, 2434, 1, 0, 0, 0, 2437, 2429, 1, 0, 0, 0, 2437, 2438, 1, 0, 0, 0, 2438, 2439, 1, 0, 0, 0, 2439, 2513, 5, 268, 0, 0, 2440, 2513, 3, 362, 181, 0, 2441, 2513, 5, 40, 0, 0, 2442, 2446, 5, 42, 0, 0, 2443, 2444, 5, 265, 0, 0, 2444, 2445, 5, 277, 0, 0, 2445, 2447, 5, 266, 0, 0, 2446, 2443, 1, 0, 0, 0, 2446, 2447, 1, 0, 0, 0, 2447, 2513, 1, 0, 0, 0, 2448, 2452, 5, 43, 0, 0, 2449, 2450, 5, 265, 0, 0, 2450, 2451, 5, 277, 0, 0, 2451, 2453, 5, 266, 0, 0, 2452, 2449, 1, 0, 0, 0, 2452, 2453, 1, 0, 0, 0, 2453, 2513, 1, 0, 0, 0, 2454, 2458, 5, 119, 0, 0, 2455, 2456, 5, 265, 0, 0, 2456, 2457, 5, 277, 0, 0, 2457, 2459, 5, 266, 0, 0, 2458, 2455, 1, 0, 0, 0, 2458, 2459, 1, 0, 0, 0, 2459, 2513, 1, 0, 0, 0, 2460, 2464, 5, 120, 0, 0, 2461, 2462, 5, 265, 0, 0, 2462, 2463, 5, 277, 0, 0, 2463, 2465, 5, 266, 0, 0, 2464, 2461, 1, 0, 0, 0, 2464, 2465, 1, 0, 0, 0, 2465, 2513, 1, 0, 0, 0, 2466, 2513, 5, 44, 0, 0, 2467, 2513, 5, 41, 0, 0, 2468, 2469, 5, 184, 0, 0, 2469, 2470, 5, 265, 0, 0, 2470, 2471, 3, 314, 157, 0, 2471, 2472, 5, 82, 0, 0, 2472, 2475, 3, 314, 157, 0, 2473, 2474, 5, 78, 0, 0, 2474, 2476, 3, 314, 157, 0, 2475, 2473, 1, 0, 0, 0, 2475, 2476, 1, 0, 0, 0, 2476, 2477, 1, 0, 0, 0, 2477, 2478, 5, 266, 0, 0, 2478, 2513, 1, 0, 0, 0, 2479, 2480, 5, 131, 0, 0, 2480, 2481, 5, 265, 0, 0, 2481, 2484, 3, 314, 157, 0, 2482, 2483, 5, 263, 0, 0, 2483, 2485, 3, 330, 165, 0, 2484, 2482, 1, 0, 0, 0, 2484, 2485, 1, 0, 0, 0, 2485, 2486, 1, 0, 0, 0, 2486, 2487, 5, 266, 0, 0, 2487, 2513, 1, 0, 0, 0, 2488, 2489, 5, 68, 0, 0, 2489, 2490, 5, 265, 0, 0, 2490, 2491, 3, 362, 181, 0, 2491, 2492, 5, 82, 0, 0, 2492, 2493, 3, 314, 157, 0, 2493, 2494, 5, 266, 0, 0, 2494, 2513, 1, 0, 0, 0, 2495, 2496, 5, 265, 0, 0, 2496, 2497, 3, 308, 154, 0, 2497, 2498, 5, 266, 0, 0, 2498, 2513, 1, 0, 0, 0, 2499, 2500, 5, 88, 0, 0, 2500, 2509, 5, 265, 0, 0, 2501, 2506, 3, 358, 179, 0, 2502, 2503, 5, 263, 0, 0, 2503, 2505, 3, 358, 179, 0, 2504, 2502, 1, 0, 0, 0, 2505, 2508, 1, 0, 0, 0, 2506, 2504, 1, 0, 0, 0, 2506, 2507, 1, 0, 0, 0, 2507, 2510, 1, 0, 0, 0, 2508, 2506, 1, 0, 0, 0, 2509, 2501, 1, 0, 0, 0, 2509, 2510, 1, 0, 0, 0, 2510, 2511, 1, 0, 0, 0, 2511, 2513, 5, 266, 0, 0, 2512, 2266, 1, 0, 0, 0, 2512, 2268, 1, 0, 0, 0, 2512, 2269, 1, 0, 0, 0, 2512, 2272, 1, 0, 0, 0, 2512, 2274, 1, 0, 0, 0, 2512, 2275, 1, 0, 0, 0, 2512, 2276, 1, 0, 0, 0, 2512, 2277, 1, 0, 0, 0, 2512, 2278, 1, 0, 0, 0, 2512, 2279, 1, 0, 0, 0, 2512, 2286, 1, 0, 0, 0, 2512, 2305, 1, 0, 0, 0, 2512, 2317, 1, 0, 0, 0, 2512, 2327, 1, 0, 0, 0, 2512, 2361, 1, 0, 0, 0, 2512, 2365, 1, 0, 0, 0, 2512, 2379, 1, 0, 0, 0, 2512, 2383, 1, 0, 0, 0, 2512, 2388, 1, 0, 0, 0, 2512, 2401, 1, 0, 0, 0, 2512, 2413, 1, 0, 0, 0, 2512, 2420, 1, 0, 0, 0, 2512, 2427, 1, 0, 0, 0, 2512, 2440, 1, 0, 0, 0, 2512, 2441, 1, 0, 0, 0, 2512, 2442, 1, 0, 0, 0, 2512, 2448, 1, 0, 0, 0, 2512, 2454, 1, 0, 0, 0, 2512, 2460, 1, 0, 0, 0, 2512, 2466, 1, 0, 0, 0, 2512, 2467, 1, 0, 0, 0, 2512, 2468, 1, 0, 0, 0, 2512, 2479, 1, 0, 0, 0, 2512, 2488, 1, 0, 0, 0, 2512, 2495, 1, 0, 0, 0, 2512, 2499, 1, 0, 0, 0, 2513, 2524, 1, 0, 0, 0, 2514, 2515, 10, 15, 0, 0, 2515, 2516, 5, 267, 0, 0, 2516, 2517, 3, 314, 157, 0, 2517, 2518, 5, 268, 0, 0, 2518, 2523, 1, 0, 0, 0, 2519, 2520, 10, 13, 0, 0, 2520, 2521, 5, 261, 0, 0, 2521, 2523, 3, 362, 181, 0, 2522, 2514, 1, 0, 0, 0, 2522, 2519, 1, 0, 0, 0, 2523, 2526, 1, 0, 0, 0, 2524, 2522, 1, 0, 0, 0, 2524, 2525, 1, 0, 0, 0, 2525, 317, 1, 0, 0, 0, 2526, 2524, 1, 0, 0, 0, 2527, 2534, 5, 274, 0, 0, 2528, 2531, 5, 275, 0, 0, 2529, 2530, 5, 198, 0, 0, 2530, 2532, 5, 274, 0, 0, 2531, 2529, 1, 0, 0, 0, 2531, 2532, 1, 0, 0, 0, 2532, 2534, 1, 0, 0, 0, 2533, 2527, 1, 0, 0, 0, 2533, 2528, 1, 0, 0, 0, 2534, 319, 1, 0, 0, 0, 2535, 2536, 7, 23, 0, 0, 2536, 321, 1, 0, 0, 0, 2537, 2538, 7, 24, 0, 0, 2538, 323, 1, 0, 0, 0, 2539, 2540, 7, 25, 0, 0, 2540, 325, 1, 0, 0, 0, 2541, 2542, 5, 277, 0, 0, 2542, 2556, 3, 328, 164, 0, 2543, 2544, 5, 265, 0, 0, 2544, 2545, 5, 277, 0, 0, 2545, 2546, 5, 266, 0, 0, 2546, 2556, 3, 328, 164, 0, 2547, 2548, 5, 101, 0, 0, 2548, 2549, 5, 277, 0, 0, 2549, 2556, 3, 328, 164, 0, 2550, 2551, 5, 101, 0, 0, 2551, 2552, 5, 265, 0, 0, 2552, 2553, 5, 277, 0, 0, 2553, 2554, 5, 266, 0, 0, 2554, 2556, 3, 328, 164, 0, 2555, 2541, 1, 0, 0, 0, 2555, 2543, 1, 0, 0, 0, 2555, 2547, 1, 0, 0, 0, 2555, 2550, 1, 0, 0, 0, 2556, 327, 1, 0, 0, 0, 2557, 2558, 7, 26, 0, 0, 2558, 329, 1, 0, 0, 0, 2559, 2560, 7, 27, 0, 0, 2560, 331, 1, 0, 0, 0, 2561, 2562, 6, 166, -1, 0, 2562, 2563, 5, 8, 0, 0, 2563, 2564, 5, 251, 0, 0, 2564, 2565, 3, 332, 166, 0, 2565, 2566, 5, 253, 0, 0, 2566, 2607, 1, 0, 0, 0, 2567, 2568, 5, 235, 0, 0, 2568, 2569, 5, 251, 0, 0, 2569, 2570, 3, 332, 166, 0, 2570, 2571, 5, 263, 0, 0, 2571, 2572, 3, 332, 166, 0, 2572, 2573, 5, 253, 0, 0, 2573, 2607, 1, 0, 0, 0, 2574, 2575, 5, 240, 0, 0, 2575, 2576, 5, 251, 0, 0, 2576, 2577, 3, 362, 181, 0, 2577, 2584, 3, 332, 166, 0, 2578, 2579, 5, 263, 0, 0, 2579, 2580, 3, 362, 181, 0, 2580, 2581, 3, 332, 166, 0, 2581, 2583, 1, 0, 0, 0, 2582, 2578, 1, 0, 0, 0, 2583, 2586, 1, 0, 0, 0, 2584, 2582, 1, 0, 0, 0, 2584, 2585, 1, 0, 0, 0, 2585, 2587, 1, 0, 0, 0, 2586, 2584, 1, 0, 0, 0, 2587, 2588, 5, 253, 0, 0, 2588, 2607, 1, 0, 0, 0, 2589, 2592, 3, 338, 169, 0, 2590, 2592, 3, 334, 167, 0, 2591, 2589, 1, 0, 0, 0, 2591, 2590, 1, 0, 0, 0, 2592, 2604, 1, 0, 0, 0, 2593, 2594, 5, 265, 0, 0, 2594, 2599, 3, 336, 168, 0, 2595, 2596, 5, 263, 0, 0, 2596, 2598, 3, 336, 168, 0, 2597, 2595, 1, 0, 0, 0, 2598, 2601, 1, 0, 0, 0, 2599, 2597, 1, 0, 0, 0, 2599, 2600, 1, 0, 0, 0, 2600, 2602, 1, 0, 0, 0, 2601, 2599, 1, 0, 0, 0, 2602, 2603, 5, 266, 0, 0, 2603, 2605, 1, 0, 0, 0, 2604, 2593, 1, 0, 0, 0, 2604, 2605, 1, 0, 0, 0, 2605, 2607, 1, 0, 0, 0, 2606, 2561, 1, 0, 0, 0, 2606, 2567, 1, 0, 0, 0, 2606, 2574, 1, 0, 0, 0, 2606, 2591, 1, 0, 0, 0, 2607, 2612, 1, 0, 0, 0, 2608, 2609, 10, 5, 0, 0, 2609, 2611, 5, 8, 0, 0, 2610, 2608, 1, 0, 0, 0, 2611, 2614, 1, 0, 0, 0, 2612, 2610, 1, 0, 0, 0, 2612, 2613, 1, 0, 0, 0, 2613, 333, 1, 0, 0, 0, 2614, 2612, 1, 0, 0, 0, 2615, 2616, 7, 28, 0, 0, 2616, 335, 1, 0, 0, 0, 2617, 2620, 5, 277, 0, 0, 2618, 2620, 3, 332, 166, 0, 2619, 2617, 1, 0, 0, 0, 2619, 2618, 1, 0, 0, 0, 2620, 337, 1, 0, 0, 0, 2621, 2626, 5, 284, 0, 0, 2622, 2626, 5, 285, 0, 0, 2623, 2626, 5, 286, 0, 0, 2624, 2626, 3, 362, 181, 0, 2625, 2621, 1, 0, 0, 0, 2625, 2622, 1, 0, 0, 0, 2625, 2623, 1, 0, 0, 0, 2625, 2624, 1, 0, 0, 0, 2626, 339, 1, 0, 0, 0, 2627, 2628, 5, 214, 0, 0, 2628, 2629, 3, 308, 154, 0, 2629, 2630, 5, 192, 0, 0, 2630, 2631, 3, 308, 154, 0, 2631, 341, 1, 0, 0, 0, 2632, 2633, 5, 74, 0, 0, 2633, 2634, 5, 265, 0, 0, 2634, 2635, 5, 215, 0, 0, 2635, 2636, 3, 310, 155, 0, 2636, 2637, 5, 266, 0, 0, 2637, 343, 1, 0, 0, 0, 2638, 2639, 5, 143, 0, 0, 2639, 2650, 5, 265, 0, 0, 2640, 2641, 5, 145, 0, 0, 2641, 2642, 5, 26, 0, 0, 2642, 2647, 3, 308, 154, 0, 2643, 2644, 5, 263, 0, 0, 2644, 2646, 3, 308, 154, 0, 2645, 2643, 1, 0, 0, 0, 2646, 2649, 1, 0, 0, 0, 2647, 2645, 1, 0, 0, 0, 2647, 2648, 1, 0, 0, 0, 2648, 2651, 1, 0, 0, 0, 2649, 2647, 1, 0, 0, 0, 2650, 2640, 1, 0, 0, 0, 2650, 2651, 1, 0, 0, 0, 2651, 2662, 1, 0, 0, 0, 2652, 2653, 5, 139, 0, 0, 2653, 2654, 5, 26, 0, 0, 2654, 2659, 3, 268, 134, 0, 2655, 2656, 5, 263, 0, 0, 2656, 2658, 3, 268, 134, 0, 2657, 2655, 1, 0, 0, 0, 2658, 2661, 1, 0, 0, 0, 2659, 2657, 1, 0, 0, 0, 2659, 2660, 1, 0, 0, 0, 2660, 2663, 1, 0, 0, 0, 2661, 2659, 1, 0, 0, 0, 2662, 2652, 1, 0, 0, 0, 2662, 2663, 1, 0, 0, 0, 2663, 2665, 1, 0, 0, 0, 2664, 2666, 3, 346, 173, 0, 2665, 2664, 1, 0, 0, 0, 2665, 2666, 1, 0, 0, 0, 2666, 2667, 1, 0, 0, 0, 2667, 2668, 5, 266, 0, 0, 2668, 345, 1, 0, 0, 0, 2669, 2670, 5, 154, 0, 0, 2670, 2686, 3, 348, 174, 0, 2671, 2672, 5, 169, 0, 0, 2672, 2686, 3, 348, 174, 0, 2673, 2674, 5, 154, 0, 0, 2674, 2675, 5, 15, 0, 0, 2675, 2676, 3, 348, 174, 0, 2676, 2677, 5, 5, 0, 0, 2677, 2678, 3, 348, 174, 0, 2678, 2686, 1, 0, 0, 0, 2679, 2680, 5, 169, 0, 0, 2680, 2681, 5, 15, 0, 0, 2681, 2682, 3, 348, 174, 0, 2682, 2683, 5, 5, 0, 0, 2683, 2684, 3, 348, 174, 0, 2684, 2686, 1, 0, 0, 0, 2685, 2669, 1, 0, 0, 0, 2685, 2671, 1, 0, 0, 0, 2685, 2673, 1, 0, 0, 0, 2685, 2679, 1, 0, 0, 0, 2686, 347, 1, 0, 0, 0, 2687, 2688, 5, 199, 0, 0, 2688, 2697, 5, 149, 0, 0, 2689, 2690, 5, 199, 0, 0, 2690, 2697, 5, 77, 0, 0, 2691, 2692, 5, 39, 0, 0, 2692, 2697, 5, 168, 0, 0, 2693, 2694, 3, 308, 154, 0, 2694, 2695, 7, 29, 0, 0, 2695, 2697, 1, 0, 0, 0, 2696, 2687, 1, 0, 0, 0, 2696, 2689, 1, 0, 0, 0, 2696, 2691, 1, 0, 0, 0, 2696, 2693, 1, 0, 0, 0, 2697, 349, 1, 0, 0, 0, 2698, 2699, 3, 362, 181, 0, 2699, 2700, 5, 261, 0, 0, 2700, 2701, 3, 362, 181, 0, 2701, 2704, 1, 0, 0, 0, 2702, 2704, 3, 362, 181, 0, 2703, 2698, 1, 0, 0, 0, 2703, 2702, 1, 0, 0, 0, 2704, 351, 1, 0, 0, 0, 2705, 2710, 3, 350, 175, 0, 2706, 2707, 5, 263, 0, 0, 2707, 2709, 3, 350, 175, 0, 2708, 2706, 1, 0, 0, 0, 2709, 2712, 1, 0, 0, 0, 2710, 2708, 1, 0, 0, 0, 2710, 2711, 1, 0, 0, 0, 2711, 353, 1, 0, 0, 0, 2712, 2710, 1, 0, 0, 0, 2713, 2727, 5, 2, 0, 0, 2714, 2727, 5, 4, 0, 0, 2715, 2727, 5, 58, 0, 0, 2716, 2727, 5, 37, 0, 0, 2717, 2727, 5, 99, 0, 0, 2718, 2727, 5, 162, 0, 0, 2719, 2724, 5, 174, 0, 0, 2720, 2721, 5, 265, 0, 0, 2721, 2722, 3, 362, 181, 0, 2722, 2723, 5, 266, 0, 0, 2723, 2725, 1, 0, 0, 0, 2724, 2720, 1, 0, 0, 0, 2724, 2725, 1, 0, 0, 0, 2725, 2727, 1, 0, 0, 0, 2726, 2713, 1, 0, 0, 0, 2726, 2714, 1, 0, 0, 0, 2726, 2715, 1, 0, 0, 0, 2726, 2716, 1, 0, 0, 0, 2726, 2717, 1, 0, 0, 0, 2726, 2718, 1, 0, 0, 0, 2726, 2719, 1, 0, 0, 0, 2727, 355, 1, 0, 0, 0, 2728, 2729, 7, 30, 0, 0, 2729, 357, 1, 0, 0, 0, 2730, 2735, 3, 362, 181, 0, 2731, 2732, 5, 261, 0, 0, 2732, 2734, 3, 362, 181, 0, 2733, 2731, 1, 0, 0, 0, 2734, 2737, 1, 0, 0, 0, 2735, 2733, 1, 0, 0, 0, 2735, 2736, 1, 0, 0, 0, 2736, 359, 1, 0, 0, 0, 2737, 2735, 1, 0, 0, 0, 2738, 2739, 5, 166, 0, 0, 2739, 2745, 3, 362, 181, 0, 2740, 2741, 5, 204, 0, 0, 2741, 2745, 3, 362, 181, 0, 2742, 2743, 5, 87, 0, 0, 2743, 2745, 3, 362, 181, 0, 2744, 2738, 1, 0, 0, 0, 2744, 2740, 1, 0, 0, 0, 2744, 2742, 1, 0, 0, 0, 2745, 361, 1, 0, 0, 0, 2746, 2752, 5, 280, 0, 0, 2747, 2752, 5, 274, 0, 0, 2748, 2752, 3, 368, 184, 0, 2749, 2752, 5, 283, 0, 0, 2750, 2752, 5, 281, 0, 0, 2751, 2746, 1, 0, 0, 0, 2751, 2747, 1, 0, 0, 0, 2751, 2748, 1, 0, 0, 0, 2751, 2749, 1, 0, 0, 0, 2751, 2750, 1, 0, 0, 0, 2752, 363, 1, 0, 0, 0, 2753, 2755, 5, 256, 0, 0, 2754, 2753, 1, 0, 0, 0, 2754, 2755, 1, 0, 0, 0, 2755, 2756, 1, 0, 0, 0, 2756, 2766, 5, 278, 0, 0, 2757, 2759, 5, 256, 0, 0, 2758, 2757, 1, 0, 0, 0, 2758, 2759, 1, 0, 0, 0, 2759, 2760, 1, 0, 0, 0, 2760, 2766, 5, 279, 0, 0, 2761, 2763, 5, 256, 0, 0, 2762, 2761, 1, 0, 0, 0, 2762, 2763, 1, 0, 0, 0, 2763, 2764, 1, 0, 0, 0, 2764, 2766, 5, 277, 0, 0, 2765, 2754, 1, 0, 0, 0, 2765, 2758, 1, 0, 0, 0, 2765, 2762, 1, 0, 0, 0, 2766, 365, 1, 0, 0, 0, 2767, 2768, 7, 31, 0, 0, 2768, 367, 1, 0, 0, 0, 2769, 2770, 7, 32, 0, 0, 2770, 369, 1, 0, 0, 0, 353, 373, 380, 404, 417, 421, 425, 434, 439, 443, 449, 451, 456, 460, 464, 471, 476, 482, 486, 495, 502, 506, 511, 513, 518, 521, 528, 532, 537, 541, 544, 548, 556, 560, 564, 572, 576, 585, 588, 591, 597, 604, 615, 620, 625, 630, 635, 644, 647, 650, 654, 680, 706, 715, 725, 728, 742, 760, 762, 771, 782, 791, 798, 802, 809, 815, 818, 823, 830, 844, 857, 862, 867, 873, 909, 912, 918, 921, 927, 933, 945, 947, 958, 966, 971, 975, 980, 987, 991, 995, 1001, 1005, 1009, 1018, 1021, 1024, 1032, 1046, 1053, 1066, 1072, 1077, 1080, 1083, 1088, 1092, 1101, 1106, 1112, 1116, 1121, 1126, 1129, 1137, 1140, 1144, 1156, 1159, 1163, 1168, 1172, 1188, 1193, 1200, 1203, 1209, 1212, 1219, 1222, 1226, 1231, 1234, 1241, 1244, 1268, 1282, 1286, 1290, 1310, 1312, 1314, 1323, 1325, 1334, 1336, 1345, 1347, 1352, 1361, 1370, 1379, 1390, 1396, 1401, 1404, 1417, 1427, 1431, 1436, 1447, 1452, 1485, 1493, 1498, 1502, 1506, 1511, 1514, 1519, 1524, 1529, 1533, 1542, 1545, 1549, 1556, 1565, 1569, 1573, 1580, 1583, 1593, 1600, 1605, 1610, 1615, 1621, 1624, 1633, 1636, 1639, 1645, 1650, 1660, 1663, 1666, 1670, 1680, 1683, 1689, 1695, 1698, 1701, 1705, 1715, 1726, 1731, 1734, 1738, 1745, 1755, 1767, 1773, 1775, 1784, 1787, 1794, 1804, 1810, 1818, 1829, 1839, 1850, 1852, 1858, 1863, 1873, 1876, 1882, 1884, 1892, 1898, 1901, 1903, 1915, 1922, 1926, 1930, 1934, 1937, 1944, 1953, 1956, 1960, 1965, 1969, 1972, 1979, 1990, 1993, 1997, 2001, 2010, 2013, 2020, 2034, 2038, 2042, 2046, 2050, 2054, 2058, 2062, 2072, 2083, 2088, 2101, 2103, 2109, 2113, 2115, 2123, 2130, 2135, 2148, 2154, 2162, 2169, 2173, 2181, 2183, 2194, 2202, 2211, 2217, 2222, 2228, 2234, 2239, 2244, 2250, 2261, 2263, 2290, 2296, 2300, 2312, 2322, 2325, 2330, 2337, 2340, 2349, 2352, 2356, 2359, 2371, 2374, 2393, 2397, 2405, 2409, 2434, 2437, 2446, 2452, 2458, 2464, 2475, 2484, 2506, 2509, 2512, 2522, 2524, 2531, 2533, 2555, 2584, 2591, 2599, 2604, 2606, 2612, 2619, 2625, 2647, 2650, 2659, 2662, 2665, 2685, 2696, 2703, 2710, 2724, 2726, 2735, 2744, 2751, 2754, 2758, 2762, 2765] \ No newline at end of file diff --git a/src/lib/impala/ImpalaSqlParser.ts b/src/lib/impala/ImpalaSqlParser.ts index b9a88388b..06c61db8f 100644 --- a/src/lib/impala/ImpalaSqlParser.ts +++ b/src/lib/impala/ImpalaSqlParser.ts @@ -408,87 +408,89 @@ export class ImpalaSqlParser extends SQLParserBase { public static readonly RULE_assignmentList = 99; public static readonly RULE_assignmentItem = 100; public static readonly RULE_viewColumns = 101; - public static readonly RULE_queryStatement = 102; - public static readonly RULE_with = 103; - public static readonly RULE_constraintSpecification = 104; - public static readonly RULE_foreignKeySpecification = 105; - public static readonly RULE_columnSpec = 106; - public static readonly RULE_columnDefinition = 107; - public static readonly RULE_kuduTableElement = 108; - public static readonly RULE_kuduColumnDefinition = 109; - public static readonly RULE_columnSpecWithKudu = 110; - public static readonly RULE_createColumnSpecWithKudu = 111; - public static readonly RULE_kuduAttributes = 112; - public static readonly RULE_kuduStorageAttr = 113; - public static readonly RULE_statsKey = 114; - public static readonly RULE_fileFormat = 115; - public static readonly RULE_kuduPartitionClause = 116; - public static readonly RULE_hashClause = 117; - public static readonly RULE_rangeClause = 118; - public static readonly RULE_kuduPartitionSpec = 119; - public static readonly RULE_cacheSpec = 120; - public static readonly RULE_rangeOperator = 121; - public static readonly RULE_partitionCol = 122; - public static readonly RULE_likeClause = 123; - public static readonly RULE_properties = 124; - public static readonly RULE_partitionedBy = 125; - public static readonly RULE_sortedBy = 126; - public static readonly RULE_rowFormat = 127; - public static readonly RULE_property = 128; - public static readonly RULE_queryNoWith = 129; - public static readonly RULE_queryTerm = 130; - public static readonly RULE_queryPrimary = 131; - public static readonly RULE_sortItem = 132; - public static readonly RULE_querySpecification = 133; - public static readonly RULE_groupBy = 134; - public static readonly RULE_groupingElement = 135; - public static readonly RULE_groupingSet = 136; - public static readonly RULE_namedQuery = 137; - public static readonly RULE_setQuantifier = 138; - public static readonly RULE_selectItem = 139; - public static readonly RULE_relation = 140; - public static readonly RULE_joinType = 141; - public static readonly RULE_joinCriteria = 142; - public static readonly RULE_sampledRelation = 143; - public static readonly RULE_sampleType = 144; - public static readonly RULE_aliasedRelation = 145; - public static readonly RULE_columnAliases = 146; - public static readonly RULE_relationPrimary = 147; - public static readonly RULE_subQueryRelation = 148; - public static readonly RULE_unnest = 149; - public static readonly RULE_parenthesizedRelation = 150; - public static readonly RULE_columnItem = 151; - public static readonly RULE_expression = 152; - public static readonly RULE_booleanExpression = 153; - public static readonly RULE_predicate = 154; - public static readonly RULE_valueExpression = 155; - public static readonly RULE_primaryExpression = 156; - public static readonly RULE_stringLiteral = 157; - public static readonly RULE_comparisonOperator = 158; - public static readonly RULE_comparisonQuantifier = 159; - public static readonly RULE_booleanValue = 160; - public static readonly RULE_interval = 161; - public static readonly RULE_intervalField = 162; - public static readonly RULE_normalForm = 163; - public static readonly RULE_type = 164; - public static readonly RULE_dataType = 165; - public static readonly RULE_typeParameter = 166; - public static readonly RULE_baseType = 167; - public static readonly RULE_whenClause = 168; - public static readonly RULE_filter = 169; - public static readonly RULE_over = 170; - public static readonly RULE_windowFrame = 171; - public static readonly RULE_frameBound = 172; - public static readonly RULE_pathElement = 173; - public static readonly RULE_pathSpecification = 174; - public static readonly RULE_privilege = 175; - public static readonly RULE_objectType = 176; - public static readonly RULE_qualifiedName = 177; - public static readonly RULE_principal = 178; - public static readonly RULE_identifier = 179; - public static readonly RULE_number = 180; - public static readonly RULE_reservedKeywordsUsedAsFuncName = 181; - public static readonly RULE_nonReserved = 182; + public static readonly RULE_viewColumnItem = 102; + public static readonly RULE_queryStatement = 103; + public static readonly RULE_with = 104; + public static readonly RULE_constraintSpecification = 105; + public static readonly RULE_foreignKeySpecification = 106; + public static readonly RULE_columnSpec = 107; + public static readonly RULE_columnDefinition = 108; + public static readonly RULE_kuduTableElement = 109; + public static readonly RULE_kuduColumnDefinition = 110; + public static readonly RULE_commentClause = 111; + public static readonly RULE_columnSpecWithKudu = 112; + public static readonly RULE_createColumnSpecWithKudu = 113; + public static readonly RULE_kuduAttributes = 114; + public static readonly RULE_kuduStorageAttr = 115; + public static readonly RULE_statsKey = 116; + public static readonly RULE_fileFormat = 117; + public static readonly RULE_kuduPartitionClause = 118; + public static readonly RULE_hashClause = 119; + public static readonly RULE_rangeClause = 120; + public static readonly RULE_kuduPartitionSpec = 121; + public static readonly RULE_cacheSpec = 122; + public static readonly RULE_rangeOperator = 123; + public static readonly RULE_partitionCol = 124; + public static readonly RULE_likeClause = 125; + public static readonly RULE_properties = 126; + public static readonly RULE_partitionedBy = 127; + public static readonly RULE_sortedBy = 128; + public static readonly RULE_rowFormat = 129; + public static readonly RULE_property = 130; + public static readonly RULE_queryNoWith = 131; + public static readonly RULE_queryTerm = 132; + public static readonly RULE_queryPrimary = 133; + public static readonly RULE_sortItem = 134; + public static readonly RULE_querySpecification = 135; + public static readonly RULE_groupBy = 136; + public static readonly RULE_groupingElement = 137; + public static readonly RULE_groupingSet = 138; + public static readonly RULE_namedQuery = 139; + public static readonly RULE_setQuantifier = 140; + public static readonly RULE_selectItem = 141; + public static readonly RULE_relation = 142; + public static readonly RULE_joinType = 143; + public static readonly RULE_joinCriteria = 144; + public static readonly RULE_sampledRelation = 145; + public static readonly RULE_sampleType = 146; + public static readonly RULE_aliasedRelation = 147; + public static readonly RULE_columnAliases = 148; + public static readonly RULE_relationPrimary = 149; + public static readonly RULE_subQueryRelation = 150; + public static readonly RULE_unnest = 151; + public static readonly RULE_parenthesizedRelation = 152; + public static readonly RULE_columnItem = 153; + public static readonly RULE_expression = 154; + public static readonly RULE_booleanExpression = 155; + public static readonly RULE_predicate = 156; + public static readonly RULE_valueExpression = 157; + public static readonly RULE_primaryExpression = 158; + public static readonly RULE_stringLiteral = 159; + public static readonly RULE_comparisonOperator = 160; + public static readonly RULE_comparisonQuantifier = 161; + public static readonly RULE_booleanValue = 162; + public static readonly RULE_interval = 163; + public static readonly RULE_intervalField = 164; + public static readonly RULE_normalForm = 165; + public static readonly RULE_type = 166; + public static readonly RULE_dataType = 167; + public static readonly RULE_typeParameter = 168; + public static readonly RULE_baseType = 169; + public static readonly RULE_whenClause = 170; + public static readonly RULE_filter = 171; + public static readonly RULE_over = 172; + public static readonly RULE_windowFrame = 173; + public static readonly RULE_frameBound = 174; + public static readonly RULE_pathElement = 175; + public static readonly RULE_pathSpecification = 176; + public static readonly RULE_privilege = 177; + public static readonly RULE_objectType = 178; + public static readonly RULE_qualifiedName = 179; + public static readonly RULE_principal = 180; + public static readonly RULE_identifier = 181; + public static readonly RULE_number = 182; + public static readonly RULE_reservedKeywordsUsedAsFuncName = 183; + public static readonly RULE_nonReserved = 184; public static readonly literalNames = [ null, "'ADD'", "'ALL'", "'ANALYTIC'", "'ALTER'", "'AND'", "'ANY'", @@ -625,9 +627,10 @@ export class ImpalaSqlParser extends SQLParserBase { "viewNameCreate", "functionNameCreate", "columnNamePathCreate", "databaseNamePath", "tableNamePath", "viewNamePath", "functionNamePath", "columnNamePath", "tableOrViewPath", "createCommonItem", "assignmentList", - "assignmentItem", "viewColumns", "queryStatement", "with", "constraintSpecification", - "foreignKeySpecification", "columnSpec", "columnDefinition", "kuduTableElement", - "kuduColumnDefinition", "columnSpecWithKudu", "createColumnSpecWithKudu", + "assignmentItem", "viewColumns", "viewColumnItem", "queryStatement", + "with", "constraintSpecification", "foreignKeySpecification", "columnSpec", + "columnDefinition", "kuduTableElement", "kuduColumnDefinition", + "commentClause", "columnSpecWithKudu", "createColumnSpecWithKudu", "kuduAttributes", "kuduStorageAttr", "statsKey", "fileFormat", "kuduPartitionClause", "hashClause", "rangeClause", "kuduPartitionSpec", "cacheSpec", "rangeOperator", "partitionCol", "likeClause", "properties", "partitionedBy", "sortedBy", @@ -667,21 +670,21 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 369; + this.state = 373; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4 || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 22085645) !== 0) || _la === 67 || _la === 86 || ((((_la - 99)) & ~0x1F) === 0 && ((1 << (_la - 99)) & 524545) !== 0) || ((((_la - 161)) & ~0x1F) === 0 && ((1 << (_la - 161)) & 134520835) !== 0) || ((((_la - 196)) & ~0x1F) === 0 && ((1 << (_la - 196)) & 1083521) !== 0) || _la === 264 || _la === 265) { { { - this.state = 366; + this.state = 370; this.singleStatement(); } } - this.state = 371; + this.state = 375; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 372; + this.state = 376; this.match(ImpalaSqlParser.EOF); } } @@ -706,14 +709,14 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 374; + this.state = 378; this.sqlStatement(); - this.state = 376; + this.state = 380; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 262) { { - this.state = 375; + this.state = 379; this.match(ImpalaSqlParser.SEMICOLON); } } @@ -738,160 +741,160 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new SqlStatementContext(this.context, this.state); this.enterRule(localContext, 4, ImpalaSqlParser.RULE_sqlStatement); try { - this.state = 400; + this.state = 404; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 2, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 378; + this.state = 382; this.queryStatement(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 379; + this.state = 383; this.useStatement(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 380; + this.state = 384; this.createStatement(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 381; + this.state = 385; this.alterStatement(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 382; + this.state = 386; this.truncateTableStatement(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 383; + this.state = 387; this.describeStatement(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 384; + this.state = 388; this.computeStatement(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 385; + this.state = 389; this.dropStatement(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 386; + this.state = 390; this.grantStatement(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 387; + this.state = 391; this.revokeStatement(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 388; + this.state = 392; this.insertStatement(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 389; + this.state = 393; this.deleteStatement(); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 390; + this.state = 394; this.updateStatement(); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 391; + this.state = 395; this.upsertStatement(); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 392; + this.state = 396; this.showStatement(); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 393; + this.state = 397; this.addCommentStatement(); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 394; + this.state = 398; this.explainStatement(); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 395; + this.state = 399; this.setStatement(); } break; case 19: this.enterOuterAlt(localContext, 19); { - this.state = 396; + this.state = 400; this.shutdownStatement(); } break; case 20: this.enterOuterAlt(localContext, 20); { - this.state = 397; + this.state = 401; this.invalidateMetaStatement(); } break; case 21: this.enterOuterAlt(localContext, 21); { - this.state = 398; + this.state = 402; this.loadDataStatement(); } break; case 22: this.enterOuterAlt(localContext, 22); { - this.state = 399; + this.state = 403; this.refreshStatement(); } break; @@ -917,9 +920,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 402; + this.state = 406; this.match(ImpalaSqlParser.KW_USE); - this.state = 403; + this.state = 407; this.databaseNamePath(); } } @@ -941,62 +944,62 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new CreateStatementContext(this.context, this.state); this.enterRule(localContext, 8, ImpalaSqlParser.RULE_createStatement); try { - this.state = 413; + this.state = 417; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 405; + this.state = 409; this.createSchema(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 406; + this.state = 410; this.createRole(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 407; + this.state = 411; this.createAggregateFunction(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 408; + this.state = 412; this.createFunction(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 409; + this.state = 413; this.createView(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 410; + this.state = 414; this.createKuduTableAsSelect(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 411; + this.state = 415; this.createTableLike(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 412; + this.state = 416; this.createTableSelect(); } break; @@ -1024,97 +1027,97 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 415; + this.state = 419; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 417; + this.state = 421; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 19) { { - this.state = 416; + this.state = 420; this.match(ImpalaSqlParser.KW_EXTERNAL); } } - this.state = 419; + this.state = 423; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 421; + this.state = 425; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 420; + this.state = 424; this.ifNotExists(); } } - this.state = 423; + this.state = 427; this.tableNameCreate(); - this.state = 439; + this.state = 443; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 8, this.context) ) { case 1: { - this.state = 424; + this.state = 428; this.match(ImpalaSqlParser.LPAREN); - this.state = 425; + this.state = 429; this.columnDefinition(); - this.state = 430; + this.state = 434; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 6, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 426; + this.state = 430; this.match(ImpalaSqlParser.COMMA); - this.state = 427; + this.state = 431; this.columnDefinition(); } } } - this.state = 432; + this.state = 436; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 6, this.context); } - this.state = 435; + this.state = 439; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 433; + this.state = 437; this.match(ImpalaSqlParser.COMMA); - this.state = 434; + this.state = 438; this.constraintSpecification(); } } - this.state = 437; + this.state = 441; this.match(ImpalaSqlParser.RPAREN); } break; } - this.state = 447; + this.state = 451; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 441; + this.state = 445; this.match(ImpalaSqlParser.KW_PARTITIONED); - this.state = 442; + this.state = 446; this.match(ImpalaSqlParser.KW_BY); - this.state = 445; + this.state = 449; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) { case 1: { - this.state = 443; + this.state = 447; this.columnAliases(); } break; case 2: { - this.state = 444; + this.state = 448; this.partitionedBy(); } break; @@ -1122,16 +1125,16 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 449; + this.state = 453; this.createCommonItem(); - this.state = 452; + this.state = 456; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 450; + this.state = 454; this.match(ImpalaSqlParser.KW_AS); - this.state = 451; + this.state = 455; this.queryStatement(); } } @@ -1159,35 +1162,35 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 454; + this.state = 458; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 456; + this.state = 460; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 19) { { - this.state = 455; + this.state = 459; this.match(ImpalaSqlParser.KW_EXTERNAL); } } - this.state = 458; + this.state = 462; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 460; + this.state = 464; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 459; + this.state = 463; this.ifNotExists(); } } - this.state = 462; + this.state = 466; this.tableNameCreate(); - this.state = 463; - this.match(ImpalaSqlParser.KW_LIKE); this.state = 467; + this.match(ImpalaSqlParser.KW_LIKE); + this.state = 471; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_BERNOULLI: @@ -1229,36 +1232,36 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DIGIT_IDENTIFIER: case ImpalaSqlParser.BACKQUOTED_IDENTIFIER: { - this.state = 464; + this.state = 468; this.tableNamePath(); } break; case ImpalaSqlParser.KW_PARQUET: { - this.state = 465; + this.state = 469; this.match(ImpalaSqlParser.KW_PARQUET); - this.state = 466; + this.state = 470; localContext._parquet = this.stringLiteral(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 472; + this.state = 476; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 17) { { - this.state = 469; + this.state = 473; this.match(ImpalaSqlParser.KW_PARTITIONED); - this.state = 470; + this.state = 474; this.match(ImpalaSqlParser.KW_BY); - this.state = 471; + this.state = 475; this.partitionedBy(); } } - this.state = 474; + this.state = 478; this.createCommonItem(); } } @@ -1284,95 +1287,95 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 476; + this.state = 480; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 478; + this.state = 482; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 19) { { - this.state = 477; + this.state = 481; this.match(ImpalaSqlParser.KW_EXTERNAL); } } - this.state = 480; + this.state = 484; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 482; + this.state = 486; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 481; + this.state = 485; this.ifNotExists(); } } - this.state = 484; + this.state = 488; this.tableNameCreate(); - this.state = 502; + this.state = 506; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 485; + this.state = 489; this.match(ImpalaSqlParser.LPAREN); - this.state = 486; + this.state = 490; this.kuduTableElement(); - this.state = 491; + this.state = 495; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 18, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 487; + this.state = 491; this.match(ImpalaSqlParser.COMMA); - this.state = 488; + this.state = 492; this.kuduTableElement(); } } } - this.state = 493; + this.state = 497; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 18, this.context); } - this.state = 498; + this.state = 502; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 494; + this.state = 498; this.match(ImpalaSqlParser.COMMA); - this.state = 495; + this.state = 499; this.match(ImpalaSqlParser.KW_PRIMARY); - this.state = 496; + this.state = 500; this.match(ImpalaSqlParser.KW_KEY); - this.state = 497; + this.state = 501; this.columnAliases(); } } - this.state = 500; + this.state = 504; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 509; + this.state = 513; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 150) { { - this.state = 504; + this.state = 508; this.match(ImpalaSqlParser.KW_PRIMARY); - this.state = 505; + this.state = 509; this.match(ImpalaSqlParser.KW_KEY); - this.state = 507; + this.state = 511; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 506; + this.state = 510; this.columnAliases(); } } @@ -1380,58 +1383,56 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 514; + this.state = 518; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 511; + this.state = 515; this.match(ImpalaSqlParser.KW_PARTITION); - this.state = 512; + this.state = 516; this.match(ImpalaSqlParser.KW_BY); - this.state = 513; + this.state = 517; this.kuduPartitionClause(); } } - this.state = 518; + this.state = 521; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 516; - this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 517; - this.stringLiteral(); + this.state = 520; + this.commentClause(); } } - this.state = 520; + this.state = 523; this.match(ImpalaSqlParser.KW_STORED); - this.state = 521; + this.state = 524; this.match(ImpalaSqlParser.KW_AS); - this.state = 522; - this.match(ImpalaSqlParser.KW_KUDU); this.state = 525; + this.match(ImpalaSqlParser.KW_KUDU); + this.state = 528; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 25) { { - this.state = 523; + this.state = 526; this.match(ImpalaSqlParser.KW_TBLPROPERTIES); - this.state = 524; + this.state = 527; localContext._tblProp = this.properties(); } } - this.state = 529; + this.state = 532; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 527; + this.state = 530; this.match(ImpalaSqlParser.KW_AS); - this.state = 528; + this.state = 531; this.queryStatement(); } } @@ -1459,59 +1460,57 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 531; + this.state = 534; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 532; + this.state = 535; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 534; + this.state = 537; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 533; + this.state = 536; this.ifNotExists(); } } - this.state = 536; + this.state = 539; this.viewNameCreate(); - this.state = 538; + this.state = 541; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 537; + this.state = 540; this.viewColumns(); } } - this.state = 542; + this.state = 544; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 540; - this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 541; - this.stringLiteral(); + this.state = 543; + this.commentClause(); } } - this.state = 546; + this.state = 548; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 25) { { - this.state = 544; + this.state = 546; this.match(ImpalaSqlParser.KW_TBLPROPERTIES); - this.state = 545; + this.state = 547; localContext._tblProp = this.properties(); } } - this.state = 548; + this.state = 550; this.match(ImpalaSqlParser.KW_AS); - this.state = 549; + this.state = 551; this.queryStatement(); } } @@ -1536,9 +1535,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 551; + this.state = 553; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 552; + this.state = 554; _la = this.tokenStream.LA(1); if(!(_la === 46 || _la === 170)) { this.errorHandler.recoverInline(this); @@ -1547,38 +1546,36 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 554; + this.state = 556; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 553; + this.state = 555; this.ifNotExists(); } } - this.state = 556; + this.state = 558; this.databaseNameCreate(); - this.state = 559; + this.state = 560; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 32, this.context) ) { case 1: { - this.state = 557; - this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 558; - localContext._comment = this.stringLiteral(); + this.state = 559; + this.commentClause(); } break; } - this.state = 563; + this.state = 564; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 24) { { - this.state = 561; - this.match(ImpalaSqlParser.KW_LOCATION); this.state = 562; + this.match(ImpalaSqlParser.KW_LOCATION); + this.state = 563; localContext._location = this.stringLiteral(); } } @@ -1605,11 +1602,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 565; - this.match(ImpalaSqlParser.KW_CREATE); this.state = 566; - this.match(ImpalaSqlParser.KW_ROLE); + this.match(ImpalaSqlParser.KW_CREATE); this.state = 567; + this.match(ImpalaSqlParser.KW_ROLE); + this.state = 568; localContext._name = this.identifier(); } } @@ -1634,168 +1631,168 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 569; + this.state = 570; this.match(ImpalaSqlParser.KW_CREATE); - this.state = 571; + this.state = 572; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 12) { { - this.state = 570; + this.state = 571; this.match(ImpalaSqlParser.KW_AGGREGATE); } } - this.state = 573; + this.state = 574; this.match(ImpalaSqlParser.KW_FUNCTION); - this.state = 575; + this.state = 576; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 574; + this.state = 575; this.ifNotExists(); } } - this.state = 577; + this.state = 578; this.functionNameCreate(); - this.state = 590; + this.state = 591; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 578; + this.state = 579; this.match(ImpalaSqlParser.LPAREN); - this.state = 587; + this.state = 588; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 8 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 4286652929) !== 0) || ((((_la - 236)) & ~0x1F) === 0 && ((1 << (_la - 236)) & 511) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 7873) !== 0)) { { - this.state = 579; + this.state = 580; this.type_(0); - this.state = 584; + this.state = 585; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 580; - this.match(ImpalaSqlParser.COMMA); this.state = 581; + this.match(ImpalaSqlParser.COMMA); + this.state = 582; this.type_(0); } } - this.state = 586; + this.state = 587; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 589; + this.state = 590; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 592; - this.match(ImpalaSqlParser.KW_RETURNS); this.state = 593; - this.type_(0); - this.state = 596; + this.match(ImpalaSqlParser.KW_RETURNS); + this.state = 594; + localContext._returnType = this.type_(0); + this.state = 597; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 102) { { - this.state = 594; - this.match(ImpalaSqlParser.KW_INTERMEDIATE); this.state = 595; + this.match(ImpalaSqlParser.KW_INTERMEDIATE); + this.state = 596; this.type_(0); } } - this.state = 598; - this.match(ImpalaSqlParser.KW_LOCATION); this.state = 599; + this.match(ImpalaSqlParser.KW_LOCATION); + this.state = 600; this.match(ImpalaSqlParser.STRING); - this.state = 603; + this.state = 604; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 104) { { - this.state = 600; - this.match(ImpalaSqlParser.KW_INIT_FN); this.state = 601; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_INIT_FN); this.state = 602; + this.match(ImpalaSqlParser.EQ); + this.state = 603; this.match(ImpalaSqlParser.STRING); } } - this.state = 605; - this.match(ImpalaSqlParser.KW_UPDATE_FN); this.state = 606; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_UPDATE_FN); this.state = 607; - this.match(ImpalaSqlParser.STRING); + this.match(ImpalaSqlParser.EQ); this.state = 608; - this.match(ImpalaSqlParser.KW_MERGE_FN); + this.match(ImpalaSqlParser.STRING); this.state = 609; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_MERGE_FN); this.state = 610; + this.match(ImpalaSqlParser.EQ); + this.state = 611; this.match(ImpalaSqlParser.STRING); - this.state = 614; + this.state = 615; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 18) { { - this.state = 611; - this.match(ImpalaSqlParser.KW_PREPARE_FN); this.state = 612; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_PREPARE_FN); this.state = 613; + this.match(ImpalaSqlParser.EQ); + this.state = 614; this.match(ImpalaSqlParser.STRING); } } - this.state = 619; + this.state = 620; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 616; - this.match(ImpalaSqlParser.KW_CLOSEFN); this.state = 617; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_CLOSEFN); this.state = 618; + this.match(ImpalaSqlParser.EQ); + this.state = 619; this.match(ImpalaSqlParser.STRING); } } - this.state = 624; + this.state = 625; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 187) { { - this.state = 621; - this.match(ImpalaSqlParser.KW_SERIALIZE_FN); this.state = 622; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_SERIALIZE_FN); this.state = 623; + this.match(ImpalaSqlParser.EQ); + this.state = 624; this.match(ImpalaSqlParser.STRING); } } - this.state = 629; + this.state = 630; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 76) { { - this.state = 626; - this.match(ImpalaSqlParser.KW_FINALIZE_FN); this.state = 627; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_FINALIZE_FN); this.state = 628; + this.match(ImpalaSqlParser.EQ); + this.state = 629; this.match(ImpalaSqlParser.STRING); } } @@ -1823,81 +1820,81 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 631; - this.match(ImpalaSqlParser.KW_CREATE); this.state = 632; + this.match(ImpalaSqlParser.KW_CREATE); + this.state = 633; this.match(ImpalaSqlParser.KW_FUNCTION); - this.state = 634; + this.state = 635; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 633; + this.state = 634; this.ifNotExists(); } } - this.state = 636; + this.state = 637; this.functionNameCreate(); - this.state = 649; + this.state = 650; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 637; + this.state = 638; this.match(ImpalaSqlParser.LPAREN); - this.state = 646; + this.state = 647; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 8 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 4286652929) !== 0) || ((((_la - 236)) & ~0x1F) === 0 && ((1 << (_la - 236)) & 511) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 7873) !== 0)) { { - this.state = 638; + this.state = 639; this.type_(0); - this.state = 643; + this.state = 644; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 639; - this.match(ImpalaSqlParser.COMMA); this.state = 640; + this.match(ImpalaSqlParser.COMMA); + this.state = 641; this.type_(0); } } - this.state = 645; + this.state = 646; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 648; + this.state = 649; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 653; + this.state = 654; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 160) { { - this.state = 651; - this.match(ImpalaSqlParser.KW_RETURNS); this.state = 652; - this.type_(0); + this.match(ImpalaSqlParser.KW_RETURNS); + this.state = 653; + localContext._returnType = this.type_(0); } } - this.state = 655; - this.match(ImpalaSqlParser.KW_LOCATION); this.state = 656; - this.match(ImpalaSqlParser.STRING); + this.match(ImpalaSqlParser.KW_LOCATION); this.state = 657; - this.match(ImpalaSqlParser.KW_SYMBOL); + this.match(ImpalaSqlParser.STRING); this.state = 658; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_SYMBOL); this.state = 659; + this.match(ImpalaSqlParser.EQ); + this.state = 660; localContext._symbol_ = this.stringLiteral(); } } @@ -1919,132 +1916,132 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new AlterStatementContext(this.context, this.state); this.enterRule(localContext, 26, ImpalaSqlParser.RULE_alterStatement); try { - this.state = 679; + this.state = 680; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 50, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 661; + this.state = 662; this.alterDatabase(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 662; + this.state = 663; this.alterUnSetOrSetViewTblproperties(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 663; + this.state = 664; this.renameTable(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 664; + this.state = 665; this.alterViewOwner(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 665; + this.state = 666; this.alterView(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 666; + this.state = 667; this.renameView(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 667; + this.state = 668; this.dropPartitionByRangeOrValue(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 668; + this.state = 669; this.alterFormat(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 669; + this.state = 670; this.recoverPartitions(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 670; + this.state = 671; this.addPartitionByRangeOrValue(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 671; + this.state = 672; this.alterTableNonKuduOrKuduOnly(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 672; + this.state = 673; this.addSingleColumn(); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 673; + this.state = 674; this.replaceOrAddColumns(); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 674; + this.state = 675; this.changeColumnDefine(); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 675; + this.state = 676; this.alterStatsKey(); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 676; + this.state = 677; this.alterPartitionCache(); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 677; + this.state = 678; this.alterDropSingleColumn(); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 678; + this.state = 679; this.alterTableOwner(); } break; @@ -2071,17 +2068,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 681; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 682; - this.match(ImpalaSqlParser.KW_DATABASE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 683; - this.databaseNamePath(); + this.match(ImpalaSqlParser.KW_DATABASE); this.state = 684; - this.match(ImpalaSqlParser.KW_SET); + this.databaseNamePath(); this.state = 685; - this.match(ImpalaSqlParser.KW_OWNER); + this.match(ImpalaSqlParser.KW_SET); this.state = 686; + this.match(ImpalaSqlParser.KW_OWNER); + this.state = 687; _la = this.tokenStream.LA(1); if(!(_la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -2090,7 +2087,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 687; + this.state = 688; this.identifier(); } } @@ -2115,45 +2112,45 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 689; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 690; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 691; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 692; - this.match(ImpalaSqlParser.KW_SET); + this.tableNamePath(); this.state = 693; - this.match(ImpalaSqlParser.KW_COLUMN); + this.match(ImpalaSqlParser.KW_SET); this.state = 694; - this.match(ImpalaSqlParser.KW_STATS); + this.match(ImpalaSqlParser.KW_COLUMN); this.state = 695; - this.columnNamePath(); + this.match(ImpalaSqlParser.KW_STATS); this.state = 696; - this.match(ImpalaSqlParser.LPAREN); + this.columnNamePath(); this.state = 697; - this.statsKey(); + this.match(ImpalaSqlParser.LPAREN); this.state = 698; - this.match(ImpalaSqlParser.EQ); + this.statsKey(); this.state = 699; + this.match(ImpalaSqlParser.EQ); + this.state = 700; this.stringLiteral(); - this.state = 705; + this.state = 706; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 700; - this.match(ImpalaSqlParser.COMMA); this.state = 701; - this.statsKey(); + this.match(ImpalaSqlParser.COMMA); this.state = 702; - this.match(ImpalaSqlParser.EQ); + this.statsKey(); this.state = 703; + this.match(ImpalaSqlParser.EQ); + this.state = 704; this.stringLiteral(); } } - this.state = 707; + this.state = 708; this.match(ImpalaSqlParser.RPAREN); } } @@ -2178,50 +2175,50 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 709; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 710; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 711; + this.match(ImpalaSqlParser.KW_TABLE); + this.state = 712; this.tableNamePath(); - this.state = 714; + this.state = 715; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 712; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 713; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 714; this.expression(); } } - this.state = 716; + this.state = 717; this.match(ImpalaSqlParser.KW_SET); - this.state = 727; + this.state = 728; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_CACHED: { { - this.state = 717; - this.match(ImpalaSqlParser.KW_CACHED); this.state = 718; - this.match(ImpalaSqlParser.KW_IN); + this.match(ImpalaSqlParser.KW_CACHED); this.state = 719; + this.match(ImpalaSqlParser.KW_IN); + this.state = 720; this.stringLiteral(); - this.state = 724; + this.state = 725; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 53, this.context) ) { case 1: { - this.state = 720; - this.match(ImpalaSqlParser.KW_WITH); this.state = 721; - this.match(ImpalaSqlParser.KW_REPLICATION); + this.match(ImpalaSqlParser.KW_WITH); this.state = 722; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_REPLICATION); this.state = 723; + this.match(ImpalaSqlParser.EQ); + this.state = 724; this.number_(); } break; @@ -2231,7 +2228,7 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_UNCACHED: { - this.state = 726; + this.state = 727; this.match(ImpalaSqlParser.KW_UNCACHED); } break; @@ -2260,17 +2257,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 729; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 730; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 731; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 732; - this.match(ImpalaSqlParser.KW_CHANGE); + this.tableNamePath(); this.state = 733; - this.columnNamePath(); + this.match(ImpalaSqlParser.KW_CHANGE); this.state = 734; + this.columnNamePath(); + this.state = 735; this.columnSpecWithKudu(); } } @@ -2294,25 +2291,25 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 736; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 737; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 738; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 739; + this.tableNamePath(); + this.state = 740; this.match(ImpalaSqlParser.KW_DROP); - this.state = 741; + this.state = 742; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 55, this.context) ) { case 1: { - this.state = 740; + this.state = 741; this.match(ImpalaSqlParser.KW_COLUMN); } break; } - this.state = 743; + this.state = 744; this.columnNamePath(); } } @@ -2337,17 +2334,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 745; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 746; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 747; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 748; - this.match(ImpalaSqlParser.KW_SET); + this.tableNamePath(); this.state = 749; - this.match(ImpalaSqlParser.KW_OWNER); + this.match(ImpalaSqlParser.KW_SET); this.state = 750; + this.match(ImpalaSqlParser.KW_OWNER); + this.state = 751; _la = this.tokenStream.LA(1); if(!(_la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -2356,7 +2353,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 751; + this.state = 752; this.identifier(); } } @@ -2382,31 +2379,31 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 753; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 754; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 755; + this.match(ImpalaSqlParser.KW_TABLE); + this.state = 756; this.tableNamePath(); - this.state = 761; + this.state = 762; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_REPLACE: { - this.state = 756; + this.state = 757; this.match(ImpalaSqlParser.KW_REPLACE); } break; case ImpalaSqlParser.KW_ADD: { - this.state = 757; + this.state = 758; this.match(ImpalaSqlParser.KW_ADD); - this.state = 759; + this.state = 760; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 758; + this.state = 759; this.ifNotExists(); } } @@ -2416,31 +2413,31 @@ export class ImpalaSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 763; - this.match(ImpalaSqlParser.KW_COLUMNS); this.state = 764; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_COLUMNS); this.state = 765; + this.match(ImpalaSqlParser.LPAREN); + this.state = 766; this.columnSpecWithKudu(); - this.state = 770; + this.state = 771; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 58, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 766; - this.match(ImpalaSqlParser.COMMA); this.state = 767; + this.match(ImpalaSqlParser.COMMA); + this.state = 768; this.columnSpecWithKudu(); } } } - this.state = 772; + this.state = 773; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 58, this.context); } - this.state = 773; + this.state = 774; this.match(ImpalaSqlParser.RPAREN); } } @@ -2465,27 +2462,27 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 775; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 776; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 777; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 778; - this.match(ImpalaSqlParser.KW_ADD); + this.tableNamePath(); this.state = 779; + this.match(ImpalaSqlParser.KW_ADD); + this.state = 780; this.match(ImpalaSqlParser.KW_COLUMN); - this.state = 781; + this.state = 782; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 780; + this.state = 781; this.ifNotExists(); } } - this.state = 783; + this.state = 784; this.createColumnSpecWithKudu(); } } @@ -2509,34 +2506,34 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 785; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 786; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 787; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 788; + this.tableNamePath(); + this.state = 789; this.match(ImpalaSqlParser.KW_ALTER); - this.state = 790; + this.state = 791; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 60, this.context) ) { case 1: { - this.state = 789; + this.state = 790; this.match(ImpalaSqlParser.KW_COLUMN); } break; } - this.state = 792; + this.state = 793; this.columnNamePath(); - this.state = 801; + this.state = 802; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_SET: { - this.state = 793; + this.state = 794; this.match(ImpalaSqlParser.KW_SET); - this.state = 797; + this.state = 798; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_BLOCK_SIZE: @@ -2544,15 +2541,15 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_DEFAULT: case ImpalaSqlParser.KW_ENCODING: { - this.state = 794; + this.state = 795; this.kuduStorageAttr(); } break; case ImpalaSqlParser.KW_COMMENT: { - this.state = 795; - this.match(ImpalaSqlParser.KW_COMMENT); this.state = 796; + this.match(ImpalaSqlParser.KW_COMMENT); + this.state = 797; this.stringLiteral(); } break; @@ -2563,9 +2560,9 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_DROP: { - this.state = 799; - this.match(ImpalaSqlParser.KW_DROP); this.state = 800; + this.match(ImpalaSqlParser.KW_DROP); + this.state = 801; this.match(ImpalaSqlParser.KW_DEFAULT); } break; @@ -2595,51 +2592,51 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 803; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 804; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 805; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 806; + this.tableNamePath(); + this.state = 807; this.match(ImpalaSqlParser.KW_ADD); - this.state = 808; + this.state = 809; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 807; + this.state = 808; this.ifNotExists(); } } - this.state = 822; + this.state = 823; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_PARTITION: { - this.state = 810; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 811; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 812; this.expression(); - this.state = 814; + this.state = 815; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 24) { { - this.state = 812; - this.match(ImpalaSqlParser.KW_LOCATION); this.state = 813; + this.match(ImpalaSqlParser.KW_LOCATION); + this.state = 814; this.stringLiteral(); } } - this.state = 817; + this.state = 818; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 30 || _la === 197) { { - this.state = 816; + this.state = 817; this.cacheSpec(); } } @@ -2648,11 +2645,11 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_RANGE: { - this.state = 819; - this.match(ImpalaSqlParser.KW_RANGE); this.state = 820; - this.match(ImpalaSqlParser.KW_PARTITION); + this.match(ImpalaSqlParser.KW_RANGE); this.state = 821; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 822; this.kuduPartitionSpec(); } break; @@ -2682,35 +2679,35 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 824; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 825; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 826; + this.match(ImpalaSqlParser.KW_TABLE); + this.state = 827; this.tableNamePath(); - this.state = 829; + this.state = 830; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 827; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 828; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 829; this.expression(); } } - this.state = 831; + this.state = 832; this.match(ImpalaSqlParser.KW_SET); - this.state = 843; + this.state = 844; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_FILEFORMAT: { { - this.state = 832; - this.match(ImpalaSqlParser.KW_FILEFORMAT); this.state = 833; + this.match(ImpalaSqlParser.KW_FILEFORMAT); + this.state = 834; this.fileFormat(); } } @@ -2718,11 +2715,11 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_ROW: { { - this.state = 834; - this.match(ImpalaSqlParser.KW_ROW); this.state = 835; - this.match(ImpalaSqlParser.KW_FORMAT); + this.match(ImpalaSqlParser.KW_ROW); this.state = 836; + this.match(ImpalaSqlParser.KW_FORMAT); + this.state = 837; this.rowFormat(); } } @@ -2730,9 +2727,9 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_LOCATION: { { - this.state = 837; - this.match(ImpalaSqlParser.KW_LOCATION); this.state = 838; + this.match(ImpalaSqlParser.KW_LOCATION); + this.state = 839; this.stringLiteral(); } } @@ -2740,9 +2737,9 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_TBLPROPERTIES: { { - this.state = 839; - this.match(ImpalaSqlParser.KW_TBLPROPERTIES); this.state = 840; + this.match(ImpalaSqlParser.KW_TBLPROPERTIES); + this.state = 841; localContext._tblProp = this.properties(); } } @@ -2750,9 +2747,9 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_SERDEPROPERTIES: { { - this.state = 841; - this.match(ImpalaSqlParser.KW_SERDEPROPERTIES); this.state = 842; + this.match(ImpalaSqlParser.KW_SERDEPROPERTIES); + this.state = 843; localContext._tblProp = this.properties(); } } @@ -2782,15 +2779,15 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 845; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 846; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 847; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 848; - this.match(ImpalaSqlParser.KW_RECOVER); + this.tableNamePath(); this.state = 849; + this.match(ImpalaSqlParser.KW_RECOVER); + this.state = 850; this.match(ImpalaSqlParser.KW_PARTITIONS); } } @@ -2815,39 +2812,39 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 851; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 852; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 853; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 854; + this.tableNamePath(); + this.state = 855; this.match(ImpalaSqlParser.KW_DROP); - this.state = 856; + this.state = 857; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 855; + this.state = 856; this.ifExists(); } } - this.state = 866; + this.state = 867; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_PARTITION: { - this.state = 858; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 859; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 860; this.expression(); - this.state = 861; + this.state = 862; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 22) { { - this.state = 860; + this.state = 861; this.match(ImpalaSqlParser.KW_PURGE); } } @@ -2856,11 +2853,11 @@ export class ImpalaSqlParser extends SQLParserBase { break; case ImpalaSqlParser.KW_RANGE: { - this.state = 863; - this.match(ImpalaSqlParser.KW_RANGE); this.state = 864; - this.match(ImpalaSqlParser.KW_PARTITION); + this.match(ImpalaSqlParser.KW_RANGE); this.state = 865; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 866; this.kuduPartitionSpec(); } break; @@ -2890,25 +2887,25 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 868; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 869; - this.match(ImpalaSqlParser.KW_VIEW); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 870; + this.match(ImpalaSqlParser.KW_VIEW); + this.state = 871; this.viewNamePath(); - this.state = 872; + this.state = 873; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 871; + this.state = 872; this.viewColumns(); } } - this.state = 874; - this.match(ImpalaSqlParser.KW_AS); this.state = 875; + this.match(ImpalaSqlParser.KW_AS); + this.state = 876; this.queryStatement(); } } @@ -2932,17 +2929,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 877; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 878; - this.match(ImpalaSqlParser.KW_VIEW); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 879; - this.viewNamePath(); + this.match(ImpalaSqlParser.KW_VIEW); this.state = 880; - this.match(ImpalaSqlParser.KW_RENAME); + this.viewNamePath(); this.state = 881; - this.match(ImpalaSqlParser.KW_TO); + this.match(ImpalaSqlParser.KW_RENAME); this.state = 882; + this.match(ImpalaSqlParser.KW_TO); + this.state = 883; this.viewNamePath(); } } @@ -2967,17 +2964,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 884; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 885; - this.match(ImpalaSqlParser.KW_VIEW); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 886; - this.viewNamePath(); + this.match(ImpalaSqlParser.KW_VIEW); this.state = 887; - this.match(ImpalaSqlParser.KW_SET); + this.viewNamePath(); this.state = 888; - this.match(ImpalaSqlParser.KW_OWNER); + this.match(ImpalaSqlParser.KW_SET); this.state = 889; + this.match(ImpalaSqlParser.KW_OWNER); + this.state = 890; _la = this.tokenStream.LA(1); if(!(_la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -2986,7 +2983,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 890; + this.state = 891; this.qualifiedName(); } } @@ -3010,17 +3007,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 892; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 893; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 894; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 895; - this.match(ImpalaSqlParser.KW_RENAME); + this.tableNamePath(); this.state = 896; - this.match(ImpalaSqlParser.KW_TO); + this.match(ImpalaSqlParser.KW_RENAME); this.state = 897; + this.match(ImpalaSqlParser.KW_TO); + this.state = 898; this.tableNamePath(); } } @@ -3045,13 +3042,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 899; - this.match(ImpalaSqlParser.KW_ALTER); this.state = 900; - this.match(ImpalaSqlParser.KW_VIEW); + this.match(ImpalaSqlParser.KW_ALTER); this.state = 901; - this.viewNamePath(); + this.match(ImpalaSqlParser.KW_VIEW); this.state = 902; + this.viewNamePath(); + this.state = 903; _la = this.tokenStream.LA(1); if(!(_la === 176 || _la === 202)) { this.errorHandler.recoverInline(this); @@ -3060,9 +3057,9 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 903; - this.match(ImpalaSqlParser.KW_TBLPROPERTIES); this.state = 904; + this.match(ImpalaSqlParser.KW_TBLPROPERTIES); + this.state = 905; localContext._tblProp = this.properties(); } } @@ -3087,29 +3084,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 906; + this.state = 907; this.match(ImpalaSqlParser.KW_TRUNCATE); - this.state = 908; + this.state = 909; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 188) { { - this.state = 907; + this.state = 908; this.match(ImpalaSqlParser.KW_TABLE); } } - this.state = 911; + this.state = 912; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 910; + this.state = 911; this.ifExists(); } } - this.state = 913; + this.state = 914; this.tableNamePath(); } } @@ -3134,24 +3131,24 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 915; + this.state = 916; this.match(ImpalaSqlParser.KW_DESCRIBE); - this.state = 917; + this.state = 918; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 46) { { - this.state = 916; + this.state = 917; this.match(ImpalaSqlParser.KW_DATABASE); } } - this.state = 920; + this.state = 921; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 69 || _la === 80) { { - this.state = 919; + this.state = 920; _la = this.tokenStream.LA(1); if(!(_la === 69 || _la === 80)) { this.errorHandler.recoverInline(this); @@ -3163,7 +3160,7 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 922; + this.state = 923; this.qualifiedName(); } } @@ -3185,20 +3182,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new ComputeStatementContext(this.context, this.state); this.enterRule(localContext, 68, ImpalaSqlParser.RULE_computeStatement); try { - this.state = 926; + this.state = 927; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 77, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 924; + this.state = 925; this.computeStats(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 925; + this.state = 926; this.computeIncrementalStats(); } break; @@ -3225,49 +3222,49 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 928; - this.match(ImpalaSqlParser.KW_COMPUTE); this.state = 929; - this.match(ImpalaSqlParser.KW_STATS); + this.match(ImpalaSqlParser.KW_COMPUTE); this.state = 930; + this.match(ImpalaSqlParser.KW_STATS); + this.state = 931; this.tableNamePath(); - this.state = 932; + this.state = 933; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 78, this.context) ) { case 1: { - this.state = 931; + this.state = 932; this.columnAliases(); } break; } - this.state = 946; + this.state = 947; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 190) { { - this.state = 934; - this.match(ImpalaSqlParser.KW_TABLESAMPLE); this.state = 935; - this.match(ImpalaSqlParser.KW_SYSTEM); + this.match(ImpalaSqlParser.KW_TABLESAMPLE); this.state = 936; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_SYSTEM); this.state = 937; - this.number_(); + this.match(ImpalaSqlParser.LPAREN); this.state = 938; + this.number_(); + this.state = 939; this.match(ImpalaSqlParser.RPAREN); - this.state = 944; + this.state = 945; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 157) { { - this.state = 939; - this.match(ImpalaSqlParser.KW_REPEATABLE); this.state = 940; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_REPEATABLE); this.state = 941; - this.number_(); + this.match(ImpalaSqlParser.LPAREN); this.state = 942; + this.number_(); + this.state = 943; this.match(ImpalaSqlParser.RPAREN); } } @@ -3298,26 +3295,26 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 948; - this.match(ImpalaSqlParser.KW_COMPUTE); this.state = 949; - this.match(ImpalaSqlParser.KW_INCREMENTAL); + this.match(ImpalaSqlParser.KW_COMPUTE); this.state = 950; - this.match(ImpalaSqlParser.KW_STATS); + this.match(ImpalaSqlParser.KW_INCREMENTAL); this.state = 951; + this.match(ImpalaSqlParser.KW_STATS); + this.state = 952; this.tableNamePath(); - this.state = 957; + this.state = 958; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 952; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 953; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_PARTITION); this.state = 954; - this.expression(); + this.match(ImpalaSqlParser.LPAREN); this.state = 955; + this.expression(); + this.state = 956; this.match(ImpalaSqlParser.RPAREN); } } @@ -3342,48 +3339,48 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new DropStatementContext(this.context, this.state); this.enterRule(localContext, 74, ImpalaSqlParser.RULE_dropStatement); try { - this.state = 965; + this.state = 966; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 82, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 959; + this.state = 960; this.dropRole(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 960; + this.state = 961; this.dropFunction(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 961; + this.state = 962; this.dropIncrementalStats(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 962; + this.state = 963; this.dropView(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 963; + this.state = 964; this.dropTable(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 964; + this.state = 965; this.dropSchema(); } break; @@ -3410,9 +3407,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 967; - this.match(ImpalaSqlParser.KW_DROP); this.state = 968; + this.match(ImpalaSqlParser.KW_DROP); + this.state = 969; _la = this.tokenStream.LA(1); if(!(_la === 46 || _la === 170)) { this.errorHandler.recoverInline(this); @@ -3421,24 +3418,24 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 970; + this.state = 971; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 969; + this.state = 970; this.ifExists(); } } - this.state = 972; + this.state = 973; this.databaseNamePath(); - this.state = 974; + this.state = 975; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 27 || _la === 159) { { - this.state = 973; + this.state = 974; _la = this.tokenStream.LA(1); if(!(_la === 27 || _la === 159)) { this.errorHandler.recoverInline(this); @@ -3473,21 +3470,21 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 976; - this.match(ImpalaSqlParser.KW_DROP); this.state = 977; + this.match(ImpalaSqlParser.KW_DROP); + this.state = 978; this.match(ImpalaSqlParser.KW_VIEW); - this.state = 979; + this.state = 980; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 978; + this.state = 979; this.ifExists(); } } - this.state = 981; + this.state = 982; this.viewNamePath(); } } @@ -3512,28 +3509,28 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 983; - this.match(ImpalaSqlParser.KW_DROP); this.state = 984; + this.match(ImpalaSqlParser.KW_DROP); + this.state = 985; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 986; + this.state = 987; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 985; + this.state = 986; this.ifExists(); } } - this.state = 988; + this.state = 989; this.tableNamePath(); - this.state = 990; + this.state = 991; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 22) { { - this.state = 989; + this.state = 990; this.match(ImpalaSqlParser.KW_PURGE); } } @@ -3561,30 +3558,30 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 992; + this.state = 993; this.match(ImpalaSqlParser.KW_DROP); - this.state = 994; + this.state = 995; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 96) { { - this.state = 993; + this.state = 994; this.match(ImpalaSqlParser.KW_INCREMENTAL); } } - this.state = 996; - this.match(ImpalaSqlParser.KW_STATS); this.state = 997; + this.match(ImpalaSqlParser.KW_STATS); + this.state = 998; this.tableNamePath(); - this.state = 1000; + this.state = 1001; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 998; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 999; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 1000; this.expression(); } } @@ -3612,66 +3609,66 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1002; + this.state = 1003; this.match(ImpalaSqlParser.KW_DROP); - this.state = 1004; + this.state = 1005; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 12) { { - this.state = 1003; + this.state = 1004; this.match(ImpalaSqlParser.KW_AGGREGATE); } } - this.state = 1006; + this.state = 1007; this.match(ImpalaSqlParser.KW_FUNCTION); - this.state = 1008; + this.state = 1009; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93) { { - this.state = 1007; + this.state = 1008; this.ifExists(); } } - this.state = 1010; + this.state = 1011; this.functionNamePath(); - this.state = 1023; + this.state = 1024; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 94, this.context) ) { case 1: { - this.state = 1011; + this.state = 1012; this.match(ImpalaSqlParser.LPAREN); - this.state = 1020; + this.state = 1021; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 8 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 4286652929) !== 0) || ((((_la - 236)) & ~0x1F) === 0 && ((1 << (_la - 236)) & 511) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 7873) !== 0)) { { - this.state = 1012; + this.state = 1013; this.type_(0); - this.state = 1017; + this.state = 1018; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1013; - this.match(ImpalaSqlParser.COMMA); this.state = 1014; + this.match(ImpalaSqlParser.COMMA); + this.state = 1015; this.type_(0); } } - this.state = 1019; + this.state = 1020; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 1022; + this.state = 1023; this.match(ImpalaSqlParser.RPAREN); } break; @@ -3698,11 +3695,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1025; - this.match(ImpalaSqlParser.KW_DROP); this.state = 1026; - this.match(ImpalaSqlParser.KW_ROLE); + this.match(ImpalaSqlParser.KW_DROP); this.state = 1027; + this.match(ImpalaSqlParser.KW_ROLE); + this.state = 1028; localContext._name = this.identifier(); } } @@ -3724,20 +3721,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new GrantStatementContext(this.context, this.state); this.enterRule(localContext, 88, ImpalaSqlParser.RULE_grantStatement); try { - this.state = 1031; + this.state = 1032; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 95, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1029; + this.state = 1030; this.grantRole(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1030; + this.state = 1031; this.grant(); } break; @@ -3763,17 +3760,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1033; - this.match(ImpalaSqlParser.KW_GRANT); this.state = 1034; - this.match(ImpalaSqlParser.KW_ROLE); + this.match(ImpalaSqlParser.KW_GRANT); this.state = 1035; - this.identifier(); + this.match(ImpalaSqlParser.KW_ROLE); this.state = 1036; - this.match(ImpalaSqlParser.KW_TO); + this.identifier(); this.state = 1037; - this.match(ImpalaSqlParser.KW_GROUP); + this.match(ImpalaSqlParser.KW_TO); this.state = 1038; + this.match(ImpalaSqlParser.KW_GROUP); + this.state = 1039; this.identifier(); } } @@ -3798,27 +3795,27 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1040; - this.match(ImpalaSqlParser.KW_GRANT); this.state = 1041; - this.privilege(); + this.match(ImpalaSqlParser.KW_GRANT); this.state = 1042; - this.match(ImpalaSqlParser.KW_ON); + this.privilege(); this.state = 1043; + this.match(ImpalaSqlParser.KW_ON); + this.state = 1044; this.objectType(); - this.state = 1045; + this.state = 1046; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1044; + this.state = 1045; this.qualifiedName(); } } - this.state = 1047; - this.match(ImpalaSqlParser.KW_TO); this.state = 1048; + this.match(ImpalaSqlParser.KW_TO); + this.state = 1049; localContext._grantee = this.principal(); } } @@ -3840,20 +3837,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new RevokeStatementContext(this.context, this.state); this.enterRule(localContext, 94, ImpalaSqlParser.RULE_revokeStatement); try { - this.state = 1052; + this.state = 1053; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 97, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1050; + this.state = 1051; this.revokeRole(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1051; + this.state = 1052; this.revoke(); } break; @@ -3879,17 +3876,17 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1054; - this.match(ImpalaSqlParser.KW_REVOKE); this.state = 1055; - this.match(ImpalaSqlParser.KW_ROLE); + this.match(ImpalaSqlParser.KW_REVOKE); this.state = 1056; - this.identifier(); + this.match(ImpalaSqlParser.KW_ROLE); this.state = 1057; - this.match(ImpalaSqlParser.KW_FROM); + this.identifier(); this.state = 1058; - this.match(ImpalaSqlParser.KW_GROUP); + this.match(ImpalaSqlParser.KW_FROM); this.state = 1059; + this.match(ImpalaSqlParser.KW_GROUP); + this.state = 1060; this.identifier(); } } @@ -3914,62 +3911,62 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1061; + this.state = 1062; this.match(ImpalaSqlParser.KW_REVOKE); - this.state = 1065; + this.state = 1066; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 86) { { - this.state = 1062; - this.match(ImpalaSqlParser.KW_GRANT); this.state = 1063; - this.match(ImpalaSqlParser.KW_OPTION); + this.match(ImpalaSqlParser.KW_GRANT); this.state = 1064; + this.match(ImpalaSqlParser.KW_OPTION); + this.state = 1065; this.match(ImpalaSqlParser.KW_FOR); } } - this.state = 1067; - this.privilege(); this.state = 1068; - this.match(ImpalaSqlParser.KW_ON); + this.privilege(); this.state = 1069; + this.match(ImpalaSqlParser.KW_ON); + this.state = 1070; this.objectType(); - this.state = 1071; + this.state = 1072; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1070; + this.state = 1071; this.qualifiedName(); } } - this.state = 1073; + this.state = 1074; this.match(ImpalaSqlParser.KW_FROM); - this.state = 1079; + this.state = 1080; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 101, this.context) ) { case 1: { - this.state = 1074; + this.state = 1075; localContext._grantee = this.principal(); } break; case 2: { - this.state = 1076; + this.state = 1077; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 166) { { - this.state = 1075; + this.state = 1076; this.match(ImpalaSqlParser.KW_ROLE); } } - this.state = 1078; + this.state = 1079; this.identifier(); } break; @@ -3997,19 +3994,19 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1082; + this.state = 1083; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 216) { { - this.state = 1081; + this.state = 1082; this.with_(); } } - this.state = 1084; - this.match(ImpalaSqlParser.KW_INSERT); this.state = 1085; + this.match(ImpalaSqlParser.KW_INSERT); + this.state = 1086; _la = this.tokenStream.LA(1); if(!(_la === 103 || _la === 144)) { this.errorHandler.recoverInline(this); @@ -4018,61 +4015,61 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1087; + this.state = 1088; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 188) { { - this.state = 1086; + this.state = 1087; this.match(ImpalaSqlParser.KW_TABLE); } } - this.state = 1089; + this.state = 1090; this.tableNamePath(); - this.state = 1091; + this.state = 1092; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 104, this.context) ) { case 1: { - this.state = 1090; + this.state = 1091; this.columnAliases(); } break; } - this.state = 1105; + this.state = 1106; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1093; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1094; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1095; + this.match(ImpalaSqlParser.LPAREN); + this.state = 1096; this.expression(); - this.state = 1100; + this.state = 1101; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1096; - this.match(ImpalaSqlParser.COMMA); this.state = 1097; + this.match(ImpalaSqlParser.COMMA); + this.state = 1098; this.expression(); } } - this.state = 1102; + this.state = 1103; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1103; + this.state = 1104; this.match(ImpalaSqlParser.RPAREN); } } - this.state = 1107; + this.state = 1108; this.queryStatement(); } } @@ -4094,20 +4091,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new DeleteStatementContext(this.context, this.state); this.enterRule(localContext, 102, ImpalaSqlParser.RULE_deleteStatement); try { - this.state = 1111; + this.state = 1112; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 107, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1109; + this.state = 1110; this.delete_(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1110; + this.state = 1111; this.deleteTableRef(); } break; @@ -4134,28 +4131,28 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1113; + this.state = 1114; this.match(ImpalaSqlParser.KW_DELETE); - this.state = 1115; + this.state = 1116; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 82) { { - this.state = 1114; + this.state = 1115; this.match(ImpalaSqlParser.KW_FROM); } } - this.state = 1117; + this.state = 1118; this.tableNamePath(); - this.state = 1120; + this.state = 1121; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 215) { { - this.state = 1118; - this.match(ImpalaSqlParser.KW_WHERE); this.state = 1119; + this.match(ImpalaSqlParser.KW_WHERE); + this.state = 1120; this.booleanExpression(0); } } @@ -4183,66 +4180,66 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1122; - this.match(ImpalaSqlParser.KW_DELETE); this.state = 1123; + this.match(ImpalaSqlParser.KW_DELETE); + this.state = 1124; this.tableNamePath(); - this.state = 1128; + this.state = 1129; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9 || _la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1125; + this.state = 1126; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 1124; + this.state = 1125; this.match(ImpalaSqlParser.KW_AS); } } - this.state = 1127; + this.state = 1128; this.identifier(); } } - this.state = 1130; + this.state = 1131; this.match(ImpalaSqlParser.KW_FROM); - this.state = 1139; + this.state = 1140; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 113, this.context) ) { case 1: { - this.state = 1131; + this.state = 1132; this.relation(0); - this.state = 1136; + this.state = 1137; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1132; - this.match(ImpalaSqlParser.COMMA); this.state = 1133; + this.match(ImpalaSqlParser.COMMA); + this.state = 1134; this.relation(0); } } - this.state = 1138; + this.state = 1139; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } break; } - this.state = 1143; + this.state = 1144; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 215) { { - this.state = 1141; - this.match(ImpalaSqlParser.KW_WHERE); this.state = 1142; + this.match(ImpalaSqlParser.KW_WHERE); + this.state = 1143; this.booleanExpression(0); } } @@ -4270,50 +4267,50 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1145; - this.match(ImpalaSqlParser.KW_UPDATE); this.state = 1146; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_UPDATE); this.state = 1147; - this.match(ImpalaSqlParser.KW_SET); + this.tableNamePath(); this.state = 1148; + this.match(ImpalaSqlParser.KW_SET); + this.state = 1149; this.assignmentList(); - this.state = 1158; + this.state = 1159; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 82) { { - this.state = 1149; - this.match(ImpalaSqlParser.KW_FROM); this.state = 1150; + this.match(ImpalaSqlParser.KW_FROM); + this.state = 1151; this.relation(0); - this.state = 1155; + this.state = 1156; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1151; - this.match(ImpalaSqlParser.COMMA); this.state = 1152; + this.match(ImpalaSqlParser.COMMA); + this.state = 1153; this.relation(0); } } - this.state = 1157; + this.state = 1158; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 1162; + this.state = 1163; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 215) { { - this.state = 1160; - this.match(ImpalaSqlParser.KW_WHERE); this.state = 1161; + this.match(ImpalaSqlParser.KW_WHERE); + this.state = 1162; this.booleanExpression(0); } } @@ -4341,33 +4338,33 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1164; - this.match(ImpalaSqlParser.KW_UPSERT); this.state = 1165; + this.match(ImpalaSqlParser.KW_UPSERT); + this.state = 1166; this.match(ImpalaSqlParser.KW_INTO); - this.state = 1167; + this.state = 1168; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 188) { { - this.state = 1166; + this.state = 1167; this.match(ImpalaSqlParser.KW_TABLE); } } - this.state = 1169; + this.state = 1170; this.tableNamePath(); - this.state = 1171; + this.state = 1172; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 119, this.context) ) { case 1: { - this.state = 1170; + this.state = 1171; this.columnAliases(); } break; } - this.state = 1173; + this.state = 1174; this.queryStatement(); } } @@ -4389,90 +4386,90 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new ShowStatementContext(this.context, this.state); this.enterRule(localContext, 112, ImpalaSqlParser.RULE_showStatement); try { - this.state = 1187; + this.state = 1188; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 120, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1175; + this.state = 1176; this.showRoles(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1176; + this.state = 1177; this.showRoleGrant(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1177; + this.state = 1178; this.showGrants(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1178; + this.state = 1179; this.showFiles(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1179; + this.state = 1180; this.showPartitions(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 1180; + this.state = 1181; this.showColumnStats(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 1181; + this.state = 1182; this.showTableStats(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 1182; + this.state = 1183; this.showCreateView(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 1183; + this.state = 1184; this.showCreateTable(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 1184; + this.state = 1185; this.showFunctions(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 1185; + this.state = 1186; this.showTables(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 1186; + this.state = 1187; this.showSchemas(); } break; @@ -4499,9 +4496,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1189; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1190; + this.match(ImpalaSqlParser.KW_SHOW); + this.state = 1191; _la = this.tokenStream.LA(1); if(!(_la === 47 || _la === 171)) { this.errorHandler.recoverInline(this); @@ -4510,36 +4507,36 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1202; + this.state = 1203; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115 || _la === 274 || _la === 275) { { - this.state = 1192; + this.state = 1193; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115) { { - this.state = 1191; + this.state = 1192; this.match(ImpalaSqlParser.KW_LIKE); } } - this.state = 1194; + this.state = 1195; localContext._pattern = this.stringLiteral(); - this.state = 1199; + this.state = 1200; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 271) { { { - this.state = 1195; - this.match(ImpalaSqlParser.BITWISEOR); this.state = 1196; + this.match(ImpalaSqlParser.BITWISEOR); + this.state = 1197; this.stringLiteral(); } } - this.state = 1201; + this.state = 1202; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -4569,52 +4566,52 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1204; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1205; + this.match(ImpalaSqlParser.KW_SHOW); + this.state = 1206; this.match(ImpalaSqlParser.KW_TABLES); - this.state = 1208; + this.state = 1209; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 94) { { - this.state = 1206; - this.match(ImpalaSqlParser.KW_IN); this.state = 1207; + this.match(ImpalaSqlParser.KW_IN); + this.state = 1208; this.tableNamePath(); } } - this.state = 1221; + this.state = 1222; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115 || _la === 274 || _la === 275) { { - this.state = 1211; + this.state = 1212; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115) { { - this.state = 1210; + this.state = 1211; this.match(ImpalaSqlParser.KW_LIKE); } } - this.state = 1213; + this.state = 1214; localContext._pattern = this.stringLiteral(); - this.state = 1218; + this.state = 1219; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 271) { { { - this.state = 1214; - this.match(ImpalaSqlParser.BITWISEOR); this.state = 1215; + this.match(ImpalaSqlParser.BITWISEOR); + this.state = 1216; this.stringLiteral(); } } - this.state = 1220; + this.state = 1221; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -4644,14 +4641,14 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1223; + this.state = 1224; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1225; + this.state = 1226; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 3 || _la === 12) { { - this.state = 1224; + this.state = 1225; _la = this.tokenStream.LA(1); if(!(_la === 3 || _la === 12)) { this.errorHandler.recoverInline(this); @@ -4663,50 +4660,50 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 1227; + this.state = 1228; this.match(ImpalaSqlParser.KW_FUNCTIONS); - this.state = 1230; + this.state = 1231; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 94) { { - this.state = 1228; - this.match(ImpalaSqlParser.KW_IN); this.state = 1229; + this.match(ImpalaSqlParser.KW_IN); + this.state = 1230; this.databaseNamePath(); } } - this.state = 1243; + this.state = 1244; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115 || _la === 274 || _la === 275) { { - this.state = 1233; + this.state = 1234; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 115) { { - this.state = 1232; + this.state = 1233; this.match(ImpalaSqlParser.KW_LIKE); } } - this.state = 1235; + this.state = 1236; localContext._pattern = this.stringLiteral(); - this.state = 1240; + this.state = 1241; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 271) { { { - this.state = 1236; - this.match(ImpalaSqlParser.BITWISEOR); this.state = 1237; + this.match(ImpalaSqlParser.BITWISEOR); + this.state = 1238; this.stringLiteral(); } } - this.state = 1242; + this.state = 1243; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -4735,13 +4732,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1245; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1246; - this.match(ImpalaSqlParser.KW_CREATE); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1247; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_CREATE); this.state = 1248; + this.match(ImpalaSqlParser.KW_TABLE); + this.state = 1249; this.tableNamePath(); } } @@ -4765,13 +4762,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1250; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1251; - this.match(ImpalaSqlParser.KW_CREATE); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1252; - this.match(ImpalaSqlParser.KW_VIEW); + this.match(ImpalaSqlParser.KW_CREATE); this.state = 1253; + this.match(ImpalaSqlParser.KW_VIEW); + this.state = 1254; this.viewNamePath(); } } @@ -4795,13 +4792,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1255; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1256; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1257; - this.match(ImpalaSqlParser.KW_STATS); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 1258; + this.match(ImpalaSqlParser.KW_STATS); + this.state = 1259; this.tableNamePath(); } } @@ -4825,13 +4822,13 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1260; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1261; - this.match(ImpalaSqlParser.KW_COLUMN); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1262; - this.match(ImpalaSqlParser.KW_STATS); + this.match(ImpalaSqlParser.KW_COLUMN); this.state = 1263; + this.match(ImpalaSqlParser.KW_STATS); + this.state = 1264; this.tableNamePath(); } } @@ -4856,21 +4853,21 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1265; + this.state = 1266; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1267; + this.state = 1268; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 154) { { - this.state = 1266; + this.state = 1267; this.match(ImpalaSqlParser.KW_RANGE); } } - this.state = 1269; - this.match(ImpalaSqlParser.KW_PARTITIONS); this.state = 1270; + this.match(ImpalaSqlParser.KW_PARTITIONS); + this.state = 1271; this.tableNamePath(); } } @@ -4895,38 +4892,38 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1272; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1273; - this.match(ImpalaSqlParser.KW_FILES); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1274; - this.match(ImpalaSqlParser.KW_IN); + this.match(ImpalaSqlParser.KW_FILES); this.state = 1275; + this.match(ImpalaSqlParser.KW_IN); + this.state = 1276; this.tableNamePath(); - this.state = 1285; + this.state = 1286; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1276; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1277; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1278; + this.match(ImpalaSqlParser.LPAREN); + this.state = 1279; this.expression(); - this.state = 1281; + this.state = 1282; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1279; - this.match(ImpalaSqlParser.COMMA); this.state = 1280; + this.match(ImpalaSqlParser.COMMA); + this.state = 1281; this.expression(); } } - this.state = 1283; + this.state = 1284; this.match(ImpalaSqlParser.RPAREN); } } @@ -4954,19 +4951,19 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1287; + this.state = 1288; this.match(ImpalaSqlParser.KW_SHOW); - this.state = 1289; + this.state = 1290; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 39) { { - this.state = 1288; + this.state = 1289; this.match(ImpalaSqlParser.KW_CURRENT); } } - this.state = 1291; + this.state = 1292; this.match(ImpalaSqlParser.KW_ROLES); } } @@ -4990,15 +4987,15 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1293; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1294; - this.match(ImpalaSqlParser.KW_ROLE); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1295; - this.match(ImpalaSqlParser.KW_GRANT); + this.match(ImpalaSqlParser.KW_ROLE); this.state = 1296; - this.match(ImpalaSqlParser.KW_GROUP); + this.match(ImpalaSqlParser.KW_GRANT); this.state = 1297; + this.match(ImpalaSqlParser.KW_GROUP); + this.state = 1298; this.identifier(); } } @@ -5021,38 +5018,38 @@ export class ImpalaSqlParser extends SQLParserBase { this.enterRule(localContext, 136, ImpalaSqlParser.RULE_showGrants); let _la: number; try { - this.state = 1313; + this.state = 1314; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 139, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1299; + this.state = 1300; this.showDatabaseGrant(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1300; + this.state = 1301; this.showTableGrant(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1301; + this.state = 1302; this.showColumnGrant(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1302; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1303; - this.match(ImpalaSqlParser.KW_GRANT); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1304; + this.match(ImpalaSqlParser.KW_GRANT); + this.state = 1305; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5061,16 +5058,16 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1305; + this.state = 1306; this.identifier(); - this.state = 1311; + this.state = 1312; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1306; - this.match(ImpalaSqlParser.KW_ON); this.state = 1307; + this.match(ImpalaSqlParser.KW_ON); + this.state = 1308; _la = this.tokenStream.LA(1); if(!(_la === 178 || _la === 209)) { this.errorHandler.recoverInline(this); @@ -5079,12 +5076,12 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1309; + this.state = 1310; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1308; + this.state = 1309; this.qualifiedName(); } } @@ -5117,11 +5114,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1315; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1316; - this.match(ImpalaSqlParser.KW_GRANT); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1317; + this.match(ImpalaSqlParser.KW_GRANT); + this.state = 1318; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5130,23 +5127,23 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1318; + this.state = 1319; this.identifier(); - this.state = 1324; + this.state = 1325; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1319; - this.match(ImpalaSqlParser.KW_ON); this.state = 1320; + this.match(ImpalaSqlParser.KW_ON); + this.state = 1321; this.match(ImpalaSqlParser.KW_DATABASE); - this.state = 1322; + this.state = 1323; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1321; + this.state = 1322; this.databaseNamePath(); } } @@ -5177,11 +5174,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1326; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1327; - this.match(ImpalaSqlParser.KW_GRANT); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1328; + this.match(ImpalaSqlParser.KW_GRANT); + this.state = 1329; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5190,23 +5187,23 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1329; + this.state = 1330; this.identifier(); - this.state = 1335; + this.state = 1336; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1330; - this.match(ImpalaSqlParser.KW_ON); this.state = 1331; + this.match(ImpalaSqlParser.KW_ON); + this.state = 1332; this.match(ImpalaSqlParser.KW_TABLE); - this.state = 1333; + this.state = 1334; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1332; + this.state = 1333; this.tableNamePath(); } } @@ -5237,11 +5234,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1337; - this.match(ImpalaSqlParser.KW_SHOW); this.state = 1338; - this.match(ImpalaSqlParser.KW_GRANT); + this.match(ImpalaSqlParser.KW_SHOW); this.state = 1339; + this.match(ImpalaSqlParser.KW_GRANT); + this.state = 1340; _la = this.tokenStream.LA(1); if(!(_la === 87 || _la === 166 || _la === 204)) { this.errorHandler.recoverInline(this); @@ -5250,23 +5247,23 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1340; + this.state = 1341; this.identifier(); - this.state = 1346; + this.state = 1347; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 136) { { - this.state = 1341; - this.match(ImpalaSqlParser.KW_ON); this.state = 1342; + this.match(ImpalaSqlParser.KW_ON); + this.state = 1343; this.match(ImpalaSqlParser.KW_COLUMN); - this.state = 1344; + this.state = 1345; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 144, this.context) ) { case 1: { - this.state = 1343; + this.state = 1344; this.columnNamePath(); } break; @@ -5294,27 +5291,27 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new AddCommentStatementContext(this.context, this.state); this.enterRule(localContext, 144, ImpalaSqlParser.RULE_addCommentStatement); try { - this.state = 1351; + this.state = 1352; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 146, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1348; + this.state = 1349; this.addDatabaseComments(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1349; + this.state = 1350; this.addTableComments(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1350; + this.state = 1351; this.addColumnComments(); } break; @@ -5340,29 +5337,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1353; - this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1354; - this.match(ImpalaSqlParser.KW_ON); + this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1355; - this.match(ImpalaSqlParser.KW_DATABASE); + this.match(ImpalaSqlParser.KW_ON); this.state = 1356; - this.databaseNamePath(); + this.match(ImpalaSqlParser.KW_DATABASE); this.state = 1357; + this.databaseNamePath(); + this.state = 1358; this.match(ImpalaSqlParser.KW_IS); - this.state = 1360; + this.state = 1361; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: case ImpalaSqlParser.UNICODE_STRING: { - this.state = 1358; + this.state = 1359; this.stringLiteral(); } break; case ImpalaSqlParser.KW_NULL: { - this.state = 1359; + this.state = 1360; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -5391,29 +5388,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1362; - this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1363; - this.match(ImpalaSqlParser.KW_ON); + this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1364; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_ON); this.state = 1365; - this.tableNamePath(); + this.match(ImpalaSqlParser.KW_TABLE); this.state = 1366; + this.tableNamePath(); + this.state = 1367; this.match(ImpalaSqlParser.KW_IS); - this.state = 1369; + this.state = 1370; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: case ImpalaSqlParser.UNICODE_STRING: { - this.state = 1367; + this.state = 1368; this.stringLiteral(); } break; case ImpalaSqlParser.KW_NULL: { - this.state = 1368; + this.state = 1369; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -5442,29 +5439,29 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1371; - this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1372; - this.match(ImpalaSqlParser.KW_ON); + this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1373; - this.match(ImpalaSqlParser.KW_COLUMN); + this.match(ImpalaSqlParser.KW_ON); this.state = 1374; - this.columnNamePath(); + this.match(ImpalaSqlParser.KW_COLUMN); this.state = 1375; + this.columnNamePath(); + this.state = 1376; this.match(ImpalaSqlParser.KW_IS); - this.state = 1378; + this.state = 1379; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: case ImpalaSqlParser.UNICODE_STRING: { - this.state = 1376; + this.state = 1377; this.stringLiteral(); } break; case ImpalaSqlParser.KW_NULL: { - this.state = 1377; + this.state = 1378; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -5493,9 +5490,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1380; - this.match(ImpalaSqlParser.KW_EXPLAIN); this.state = 1381; + this.match(ImpalaSqlParser.KW_EXPLAIN); + this.state = 1382; this.sqlStatement(); } } @@ -5519,14 +5516,14 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1383; + this.state = 1384; this.match(ImpalaSqlParser.KW_SET); - this.state = 1389; + this.state = 1390; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ALL: { - this.state = 1384; + this.state = 1385; this.match(ImpalaSqlParser.KW_ALL); } break; @@ -5569,11 +5566,11 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DIGIT_IDENTIFIER: case ImpalaSqlParser.BACKQUOTED_IDENTIFIER: { - this.state = 1385; - this.identifier(); this.state = 1386; - this.match(ImpalaSqlParser.EQ); + this.identifier(); this.state = 1387; + this.match(ImpalaSqlParser.EQ); + this.state = 1388; this.expression(); } break; @@ -5632,23 +5629,23 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1391; - this.match(ImpalaSqlParser.COLON); this.state = 1392; - this.match(ImpalaSqlParser.KW_SHUTDOWN); + this.match(ImpalaSqlParser.COLON); this.state = 1393; + this.match(ImpalaSqlParser.KW_SHUTDOWN); + this.state = 1394; this.match(ImpalaSqlParser.LPAREN); - this.state = 1403; + this.state = 1404; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 153, this.context) ) { case 1: { - this.state = 1395; + this.state = 1396; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 274 || _la === 275) { { - this.state = 1394; + this.state = 1395; this.stringLiteral(); } } @@ -5657,16 +5654,16 @@ export class ImpalaSqlParser extends SQLParserBase { break; case 2: { - this.state = 1397; + this.state = 1398; this.stringLiteral(); - this.state = 1400; + this.state = 1401; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1398; - this.match(ImpalaSqlParser.COMMA); this.state = 1399; + this.match(ImpalaSqlParser.COMMA); + this.state = 1400; this.expression(); } } @@ -5675,12 +5672,12 @@ export class ImpalaSqlParser extends SQLParserBase { break; case 3: { - this.state = 1402; + this.state = 1403; this.expression(); } break; } - this.state = 1405; + this.state = 1406; this.match(ImpalaSqlParser.RPAREN); } } @@ -5704,11 +5701,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1407; - this.match(ImpalaSqlParser.KW_INVALIDATE); this.state = 1408; - this.match(ImpalaSqlParser.KW_METADATA); + this.match(ImpalaSqlParser.KW_INVALIDATE); this.state = 1409; + this.match(ImpalaSqlParser.KW_METADATA); + this.state = 1410; this.tableNamePath(); } } @@ -5733,54 +5730,54 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1411; - this.match(ImpalaSqlParser.KW_LOAD); this.state = 1412; - this.match(ImpalaSqlParser.KW_DATA); + this.match(ImpalaSqlParser.KW_LOAD); this.state = 1413; - this.match(ImpalaSqlParser.KW_INPATH); + this.match(ImpalaSqlParser.KW_DATA); this.state = 1414; + this.match(ImpalaSqlParser.KW_INPATH); + this.state = 1415; this.match(ImpalaSqlParser.STRING); - this.state = 1416; + this.state = 1417; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 144) { { - this.state = 1415; + this.state = 1416; this.match(ImpalaSqlParser.KW_OVERWRITE); } } - this.state = 1418; - this.match(ImpalaSqlParser.KW_INTO); this.state = 1419; - this.match(ImpalaSqlParser.KW_TABLE); + this.match(ImpalaSqlParser.KW_INTO); this.state = 1420; + this.match(ImpalaSqlParser.KW_TABLE); + this.state = 1421; this.tableNamePath(); - this.state = 1430; + this.state = 1431; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1421; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1422; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1423; + this.match(ImpalaSqlParser.LPAREN); + this.state = 1424; this.expression(); - this.state = 1426; + this.state = 1427; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1424; - this.match(ImpalaSqlParser.COMMA); this.state = 1425; + this.match(ImpalaSqlParser.COMMA); + this.state = 1426; this.expression(); } } - this.state = 1428; + this.state = 1429; this.match(ImpalaSqlParser.RPAREN); } } @@ -5805,27 +5802,27 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new RefreshStatementContext(this.context, this.state); this.enterRule(localContext, 162, ImpalaSqlParser.RULE_refreshStatement); try { - this.state = 1435; + this.state = 1436; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 157, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1432; + this.state = 1433; this.refreshMeta(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1433; + this.state = 1434; this.refreshAuth(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1434; + this.state = 1435; this.refreshFunction(); } break; @@ -5853,40 +5850,40 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1437; - this.match(ImpalaSqlParser.KW_REFRESH); this.state = 1438; + this.match(ImpalaSqlParser.KW_REFRESH); + this.state = 1439; this.tableNamePath(); - this.state = 1451; + this.state = 1452; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 1439; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1440; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1441; + this.match(ImpalaSqlParser.LPAREN); + this.state = 1442; this.expression(); - this.state = 1446; + this.state = 1447; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 158, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1442; - this.match(ImpalaSqlParser.COMMA); this.state = 1443; + this.match(ImpalaSqlParser.COMMA); + this.state = 1444; this.expression(); } } } - this.state = 1448; + this.state = 1449; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 158, this.context); } - this.state = 1449; + this.state = 1450; this.match(ImpalaSqlParser.RPAREN); } } @@ -5913,9 +5910,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1453; - this.match(ImpalaSqlParser.KW_REFRESH); this.state = 1454; + this.match(ImpalaSqlParser.KW_REFRESH); + this.state = 1455; this.match(ImpalaSqlParser.KW_AUTHORIZATION); } } @@ -5939,11 +5936,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1456; - this.match(ImpalaSqlParser.KW_REFRESH); this.state = 1457; - this.match(ImpalaSqlParser.KW_FUNCTIONS); + this.match(ImpalaSqlParser.KW_REFRESH); this.state = 1458; + this.match(ImpalaSqlParser.KW_FUNCTIONS); + this.state = 1459; this.functionNamePath(); } } @@ -5967,9 +5964,9 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1460; - this.match(ImpalaSqlParser.KW_IF); this.state = 1461; + this.match(ImpalaSqlParser.KW_IF); + this.state = 1462; this.match(ImpalaSqlParser.KW_EXISTS); } } @@ -5993,11 +5990,11 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1463; - this.match(ImpalaSqlParser.KW_IF); this.state = 1464; - this.match(ImpalaSqlParser.KW_NOT); + this.match(ImpalaSqlParser.KW_IF); this.state = 1465; + this.match(ImpalaSqlParser.KW_NOT); + this.state = 1466; this.match(ImpalaSqlParser.KW_EXISTS); } } @@ -6021,7 +6018,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1467; + this.state = 1468; this.qualifiedName(); } } @@ -6045,7 +6042,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1469; + this.state = 1470; this.qualifiedName(); } } @@ -6069,7 +6066,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1471; + this.state = 1472; this.qualifiedName(); } } @@ -6093,7 +6090,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1473; + this.state = 1474; this.qualifiedName(); } } @@ -6117,7 +6114,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1475; + this.state = 1476; this.qualifiedName(); } } @@ -6141,7 +6138,7 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1477; + this.state = 1478; this.qualifiedName(); } } @@ -6166,23 +6163,23 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1479; + this.state = 1480; this.identifier(); - this.state = 1484; + this.state = 1485; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 160, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1480; - this.match(ImpalaSqlParser.DOT); this.state = 1481; + this.match(ImpalaSqlParser.DOT); + this.state = 1482; this.identifier(); } } } - this.state = 1486; + this.state = 1487; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 160, this.context); } @@ -6209,23 +6206,23 @@ export class ImpalaSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1487; + this.state = 1488; this.identifier(); - this.state = 1492; + this.state = 1493; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 161, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1488; - this.match(ImpalaSqlParser.DOT); this.state = 1489; + this.match(ImpalaSqlParser.DOT); + this.state = 1490; this.identifier(); } } } - this.state = 1494; + this.state = 1495; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 161, this.context); } @@ -6249,20 +6246,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new FunctionNamePathContext(this.context, this.state); this.enterRule(localContext, 190, ImpalaSqlParser.RULE_functionNamePath); try { - this.state = 1497; + this.state = 1498; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 162, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1495; + this.state = 1496; this.reservedKeywordsUsedAsFuncName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1496; + this.state = 1497; this.qualifiedName(); } break; @@ -6286,20 +6283,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new ColumnNamePathContext(this.context, this.state); this.enterRule(localContext, 192, ImpalaSqlParser.RULE_columnNamePath); try { - this.state = 1501; + this.state = 1502; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 163, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1499; + this.state = 1500; this.qualifiedName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1500; + this.state = 1501; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } @@ -6325,20 +6322,20 @@ export class ImpalaSqlParser extends SQLParserBase { let localContext = new TableOrViewPathContext(this.context, this.state); this.enterRule(localContext, 194, ImpalaSqlParser.RULE_tableOrViewPath); try { - this.state = 1505; + this.state = 1506; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 164, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1503; + this.state = 1504; this.tableNamePath(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1504; + this.state = 1505; this.viewNamePath(); } break; @@ -6365,16 +6362,16 @@ export class ImpalaSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 1510; + this.state = 1511; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 21) { { - this.state = 1507; - this.match(ImpalaSqlParser.KW_SORT); this.state = 1508; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_SORT); this.state = 1509; + this.match(ImpalaSqlParser.KW_BY); + this.state = 1510; this.columnAliases(); } } @@ -6384,10 +6381,8 @@ export class ImpalaSqlParser extends SQLParserBase { switch (this.interpreter.adaptivePredict(this.tokenStream, 166, this.context) ) { case 1: { - this.state = 1512; - this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1513; - localContext._comment = this.stringLiteral(); + this.commentClause(); } break; } @@ -6620,49 +6615,41 @@ export class ImpalaSqlParser extends SQLParserBase { { this.state = 1563; this.match(ImpalaSqlParser.LPAREN); - this.state = 1564; - this.columnNamePathCreate(); - this.state = 1567; + this.state = 1565; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 34) { + if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1565; - this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1566; - this.stringLiteral(); + this.state = 1564; + this.viewColumnItem(); } } - this.state = 1577; + this.state = 1573; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1569; + this.state = 1567; this.match(ImpalaSqlParser.COMMA); - this.state = 1570; - this.columnNamePathCreate(); - this.state = 1573; + this.state = 1569; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if (_la === 34) { + if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 1571; - this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1572; - this.stringLiteral(); + this.state = 1568; + this.viewColumnItem(); } } } } - this.state = 1579; + this.state = 1575; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1580; + this.state = 1576; this.match(ImpalaSqlParser.RPAREN); } } @@ -6680,9 +6667,44 @@ export class ImpalaSqlParser extends SQLParserBase { } return localContext; } + public viewColumnItem(): ViewColumnItemContext { + let localContext = new ViewColumnItemContext(this.context, this.state); + this.enterRule(localContext, 204, ImpalaSqlParser.RULE_viewColumnItem); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1578; + this.columnNamePathCreate(); + this.state = 1580; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 34) { + { + this.state = 1579; + this.commentClause(); + } + } + + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } public queryStatement(): QueryStatementContext { let localContext = new QueryStatementContext(this.context, this.state); - this.enterRule(localContext, 204, ImpalaSqlParser.RULE_queryStatement); + this.enterRule(localContext, 206, ImpalaSqlParser.RULE_queryStatement); let _la: number; try { this.enterOuterAlt(localContext, 1); @@ -6717,7 +6739,7 @@ export class ImpalaSqlParser extends SQLParserBase { } public with_(): WithContext { let localContext = new WithContext(this.context, this.state); - this.enterRule(localContext, 206, ImpalaSqlParser.RULE_with); + this.enterRule(localContext, 208, ImpalaSqlParser.RULE_with); let _la: number; try { this.enterOuterAlt(localContext, 1); @@ -6760,7 +6782,7 @@ export class ImpalaSqlParser extends SQLParserBase { } public constraintSpecification(): ConstraintSpecificationContext { let localContext = new ConstraintSpecificationContext(this.context, this.state); - this.enterRule(localContext, 208, ImpalaSqlParser.RULE_constraintSpecification); + this.enterRule(localContext, 210, ImpalaSqlParser.RULE_constraintSpecification); let _la: number; try { let alternative: number; @@ -6784,7 +6806,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.state = 1605; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 181, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 182, this.context) ) { case 1: { this.state = 1602; @@ -6802,7 +6824,7 @@ export class ImpalaSqlParser extends SQLParserBase { } this.state = 1610; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 182, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 183, this.context) ) { case 1: { this.state = 1607; @@ -6845,7 +6867,7 @@ export class ImpalaSqlParser extends SQLParserBase { } this.state = 1621; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 184, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 185, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { @@ -6859,7 +6881,7 @@ export class ImpalaSqlParser extends SQLParserBase { } this.state = 1623; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 184, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 185, this.context); } } } @@ -6882,7 +6904,7 @@ export class ImpalaSqlParser extends SQLParserBase { } public foreignKeySpecification(): ForeignKeySpecificationContext { let localContext = new ForeignKeySpecificationContext(this.context, this.state); - this.enterRule(localContext, 210, ImpalaSqlParser.RULE_foreignKeySpecification); + this.enterRule(localContext, 212, ImpalaSqlParser.RULE_foreignKeySpecification); let _la: number; try { this.enterOuterAlt(localContext, 1); @@ -6947,7 +6969,7 @@ export class ImpalaSqlParser extends SQLParserBase { } public columnSpec(): ColumnSpecContext { let localContext = new ColumnSpecContext(this.context, this.state); - this.enterRule(localContext, 212, ImpalaSqlParser.RULE_columnSpec); + this.enterRule(localContext, 214, ImpalaSqlParser.RULE_columnSpec); try { this.enterOuterAlt(localContext, 1); { @@ -6957,7 +6979,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.type_(0); this.state = 1645; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 189, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 190, this.context) ) { case 1: { this.state = 1643; @@ -6985,7 +7007,7 @@ export class ImpalaSqlParser extends SQLParserBase { } public columnDefinition(): ColumnDefinitionContext { let localContext = new ColumnDefinitionContext(this.context, this.state); - this.enterRule(localContext, 214, ImpalaSqlParser.RULE_columnDefinition); + this.enterRule(localContext, 216, ImpalaSqlParser.RULE_columnDefinition); let _la: number; try { this.enterOuterAlt(localContext, 1); @@ -6993,16 +7015,14 @@ export class ImpalaSqlParser extends SQLParserBase { this.state = 1647; this.columnNamePathCreate(); this.state = 1648; - this.type_(0); - this.state = 1651; + localContext._colType = this.type_(0); + this.state = 1650; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { this.state = 1649; - this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1650; - this.stringLiteral(); + this.commentClause(); } } @@ -7024,11 +7044,11 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduTableElement(): KuduTableElementContext { let localContext = new KuduTableElementContext(this.context, this.state); - this.enterRule(localContext, 216, ImpalaSqlParser.RULE_kuduTableElement); + this.enterRule(localContext, 218, ImpalaSqlParser.RULE_kuduTableElement); try { this.enterOuterAlt(localContext, 1); { - this.state = 1653; + this.state = 1652; this.kuduColumnDefinition(); } } @@ -7048,62 +7068,60 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduColumnDefinition(): KuduColumnDefinitionContext { let localContext = new KuduColumnDefinitionContext(this.context, this.state); - this.enterRule(localContext, 218, ImpalaSqlParser.RULE_kuduColumnDefinition); + this.enterRule(localContext, 220, ImpalaSqlParser.RULE_kuduColumnDefinition); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1655; + this.state = 1654; this.columnNamePathCreate(); - this.state = 1656; - this.type_(0); - this.state = 1664; + this.state = 1655; + localContext._colType = this.type_(0); + this.state = 1663; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 16 || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 33619969) !== 0) || _la === 132 || _la === 133) { { - this.state = 1657; + this.state = 1656; this.kuduAttributes(); - this.state = 1661; + this.state = 1660; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 191, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 192, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1658; + this.state = 1657; this.kuduAttributes(); } } } - this.state = 1663; + this.state = 1662; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 191, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 192, this.context); } } } - this.state = 1668; + this.state = 1666; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34) { { - this.state = 1666; - this.match(ImpalaSqlParser.KW_COMMENT); - this.state = 1667; - this.stringLiteral(); + this.state = 1665; + this.commentClause(); } } - this.state = 1672; + this.state = 1670; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 150) { { - this.state = 1670; + this.state = 1668; this.match(ImpalaSqlParser.KW_PRIMARY); - this.state = 1671; + this.state = 1669; this.match(ImpalaSqlParser.KW_KEY); } } @@ -7124,38 +7142,64 @@ export class ImpalaSqlParser extends SQLParserBase { } return localContext; } + public commentClause(): CommentClauseContext { + let localContext = new CommentClauseContext(this.context, this.state); + this.enterRule(localContext, 222, ImpalaSqlParser.RULE_commentClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 1672; + this.match(ImpalaSqlParser.KW_COMMENT); + this.state = 1673; + localContext._comment = this.stringLiteral(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } public columnSpecWithKudu(): ColumnSpecWithKuduContext { let localContext = new ColumnSpecWithKuduContext(this.context, this.state); - this.enterRule(localContext, 220, ImpalaSqlParser.RULE_columnSpecWithKudu); + this.enterRule(localContext, 224, ImpalaSqlParser.RULE_columnSpecWithKudu); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1674; + this.state = 1675; this.columnSpec(); - this.state = 1682; + this.state = 1683; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 16 || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 33619969) !== 0) || _la === 132 || _la === 133) { { - this.state = 1675; + this.state = 1676; this.kuduAttributes(); - this.state = 1679; + this.state = 1680; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 195, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 196, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1676; + this.state = 1677; this.kuduAttributes(); } } } - this.state = 1681; + this.state = 1682; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 195, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 196, this.context); } } } @@ -7178,50 +7222,50 @@ export class ImpalaSqlParser extends SQLParserBase { } public createColumnSpecWithKudu(): CreateColumnSpecWithKuduContext { let localContext = new CreateColumnSpecWithKuduContext(this.context, this.state); - this.enterRule(localContext, 222, ImpalaSqlParser.RULE_createColumnSpecWithKudu); + this.enterRule(localContext, 226, ImpalaSqlParser.RULE_createColumnSpecWithKudu); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1684; - this.columnNamePathCreate(); this.state = 1685; + this.columnNamePathCreate(); + this.state = 1686; this.type_(0); - this.state = 1688; + this.state = 1689; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 197, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 198, this.context) ) { case 1: { - this.state = 1686; - this.match(ImpalaSqlParser.KW_COMMENT); this.state = 1687; + this.match(ImpalaSqlParser.KW_COMMENT); + this.state = 1688; this.stringLiteral(); } break; } - this.state = 1697; + this.state = 1698; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 16 || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 33619969) !== 0) || _la === 132 || _la === 133) { { - this.state = 1690; + this.state = 1691; this.kuduAttributes(); - this.state = 1694; + this.state = 1695; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 198, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 199, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1691; + this.state = 1692; this.kuduAttributes(); } } } - this.state = 1696; + this.state = 1697; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 198, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 199, this.context); } } } @@ -7244,28 +7288,28 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduAttributes(): KuduAttributesContext { let localContext = new KuduAttributesContext(this.context, this.state); - this.enterRule(localContext, 224, ImpalaSqlParser.RULE_kuduAttributes); + this.enterRule(localContext, 228, ImpalaSqlParser.RULE_kuduAttributes); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1704; + this.state = 1705; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_NOT: case ImpalaSqlParser.KW_NULL: { - this.state = 1700; + this.state = 1701; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 1699; + this.state = 1700; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 1702; + this.state = 1703; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -7274,7 +7318,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_DEFAULT: case ImpalaSqlParser.KW_ENCODING: { - this.state = 1703; + this.state = 1704; this.kuduStorageAttr(); } break; @@ -7299,44 +7343,44 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduStorageAttr(): KuduStorageAttrContext { let localContext = new KuduStorageAttrContext(this.context, this.state); - this.enterRule(localContext, 226, ImpalaSqlParser.RULE_kuduStorageAttr); + this.enterRule(localContext, 230, ImpalaSqlParser.RULE_kuduStorageAttr); try { - this.state = 1714; + this.state = 1715; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ENCODING: this.enterOuterAlt(localContext, 1); { - this.state = 1706; - this.match(ImpalaSqlParser.KW_ENCODING); this.state = 1707; + this.match(ImpalaSqlParser.KW_ENCODING); + this.state = 1708; this.expression(); } break; case ImpalaSqlParser.KW_COMPRESSION: this.enterOuterAlt(localContext, 2); { - this.state = 1708; - this.match(ImpalaSqlParser.KW_COMPRESSION); this.state = 1709; + this.match(ImpalaSqlParser.KW_COMPRESSION); + this.state = 1710; this.expression(); } break; case ImpalaSqlParser.KW_DEFAULT: this.enterOuterAlt(localContext, 3); { - this.state = 1710; - this.match(ImpalaSqlParser.KW_DEFAULT); this.state = 1711; + this.match(ImpalaSqlParser.KW_DEFAULT); + this.state = 1712; this.expression(); } break; case ImpalaSqlParser.KW_BLOCK_SIZE: this.enterOuterAlt(localContext, 4); { - this.state = 1712; - this.match(ImpalaSqlParser.KW_BLOCK_SIZE); this.state = 1713; + this.match(ImpalaSqlParser.KW_BLOCK_SIZE); + this.state = 1714; this.number_(); } break; @@ -7360,12 +7404,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public statsKey(): StatsKeyContext { let localContext = new StatsKeyContext(this.context, this.state); - this.enterRule(localContext, 228, ImpalaSqlParser.RULE_statsKey); + this.enterRule(localContext, 232, ImpalaSqlParser.RULE_statsKey); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1716; + this.state = 1717; _la = this.tokenStream.LA(1); if(!(((((_la - 245)) & ~0x1F) === 0 && ((1 << (_la - 245)) & 15) !== 0))) { this.errorHandler.recoverInline(this); @@ -7392,12 +7436,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public fileFormat(): FileFormatContext { let localContext = new FileFormatContext(this.context, this.state); - this.enterRule(localContext, 230, ImpalaSqlParser.RULE_fileFormat); + this.enterRule(localContext, 234, ImpalaSqlParser.RULE_fileFormat); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1718; + this.state = 1719; _la = this.tokenStream.LA(1); if(!(_la === 147 || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 31) !== 0))) { this.errorHandler.recoverInline(this); @@ -7424,45 +7468,45 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduPartitionClause(): KuduPartitionClauseContext { let localContext = new KuduPartitionClauseContext(this.context, this.state); - this.enterRule(localContext, 232, ImpalaSqlParser.RULE_kuduPartitionClause); + this.enterRule(localContext, 236, ImpalaSqlParser.RULE_kuduPartitionClause); let _la: number; try { let alternative: number; - this.state = 1733; + this.state = 1734; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_HASH: this.enterOuterAlt(localContext, 1); { { - this.state = 1720; + this.state = 1721; this.hashClause(); - this.state = 1725; + this.state = 1726; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 203, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 204, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1721; - this.match(ImpalaSqlParser.COMMA); this.state = 1722; + this.match(ImpalaSqlParser.COMMA); + this.state = 1723; this.hashClause(); } } } - this.state = 1727; + this.state = 1728; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 203, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 204, this.context); } - this.state = 1730; + this.state = 1731; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 1728; - this.match(ImpalaSqlParser.COMMA); this.state = 1729; + this.match(ImpalaSqlParser.COMMA); + this.state = 1730; this.rangeClause(); } } @@ -7473,7 +7517,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_RANGE: this.enterOuterAlt(localContext, 2); { - this.state = 1732; + this.state = 1733; this.rangeClause(); } break; @@ -7497,26 +7541,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public hashClause(): HashClauseContext { let localContext = new HashClauseContext(this.context, this.state); - this.enterRule(localContext, 234, ImpalaSqlParser.RULE_hashClause); + this.enterRule(localContext, 238, ImpalaSqlParser.RULE_hashClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1735; + this.state = 1736; this.match(ImpalaSqlParser.KW_HASH); - this.state = 1737; + this.state = 1738; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 1736; + this.state = 1737; this.columnAliases(); } } - this.state = 1739; - this.match(ImpalaSqlParser.KW_PARTITIONS); this.state = 1740; + this.match(ImpalaSqlParser.KW_PARTITIONS); + this.state = 1741; this.number_(); } } @@ -7536,52 +7580,52 @@ export class ImpalaSqlParser extends SQLParserBase { } public rangeClause(): RangeClauseContext { let localContext = new RangeClauseContext(this.context, this.state); - this.enterRule(localContext, 236, ImpalaSqlParser.RULE_rangeClause); + this.enterRule(localContext, 240, ImpalaSqlParser.RULE_rangeClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1742; + this.state = 1743; this.match(ImpalaSqlParser.KW_RANGE); - this.state = 1744; + this.state = 1745; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 207, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 208, this.context) ) { case 1: { - this.state = 1743; + this.state = 1744; this.columnAliases(); } break; } - this.state = 1746; + this.state = 1747; this.match(ImpalaSqlParser.LPAREN); { - this.state = 1747; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 1748; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 1749; this.kuduPartitionSpec(); - this.state = 1754; + this.state = 1755; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 208, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 209, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1749; - this.match(ImpalaSqlParser.COMMA); this.state = 1750; - this.match(ImpalaSqlParser.KW_PARTITION); + this.match(ImpalaSqlParser.COMMA); this.state = 1751; + this.match(ImpalaSqlParser.KW_PARTITION); + this.state = 1752; this.kuduPartitionSpec(); } } } - this.state = 1756; + this.state = 1757; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 208, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 209, this.context); } } - this.state = 1757; + this.state = 1758; this.match(ImpalaSqlParser.RPAREN); } } @@ -7601,20 +7645,20 @@ export class ImpalaSqlParser extends SQLParserBase { } public kuduPartitionSpec(): KuduPartitionSpecContext { let localContext = new KuduPartitionSpecContext(this.context, this.state); - this.enterRule(localContext, 238, ImpalaSqlParser.RULE_kuduPartitionSpec); + this.enterRule(localContext, 242, ImpalaSqlParser.RULE_kuduPartitionSpec); let _la: number; try { - this.state = 1774; + this.state = 1775; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_VALUE: this.enterOuterAlt(localContext, 1); { - this.state = 1759; - this.match(ImpalaSqlParser.KW_VALUE); this.state = 1760; - this.partitionCol(); + this.match(ImpalaSqlParser.KW_VALUE); this.state = 1761; + this.partitionCol(); + this.state = 1762; this.expression(); } break; @@ -7690,28 +7734,28 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 2); { - this.state = 1766; + this.state = 1767; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805323008) !== 0) || ((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & 1442841375) !== 0) || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 2218795145) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 269631421) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 271654979) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 537926659) !== 0) || ((((_la - 217)) & ~0x1F) === 0 && ((1 << (_la - 217)) & 16393) !== 0) || ((((_la - 255)) & ~0x1F) === 0 && ((1 << (_la - 255)) & 2549744643) !== 0)) { { - this.state = 1763; - this.expression(); this.state = 1764; + this.expression(); + this.state = 1765; this.rangeOperator(); } } - this.state = 1768; + this.state = 1769; this.match(ImpalaSqlParser.KW_VALUES); - this.state = 1772; + this.state = 1773; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 210, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 211, this.context) ) { case 1: { - this.state = 1769; - this.rangeOperator(); this.state = 1770; + this.rangeOperator(); + this.state = 1771; this.expression(); } break; @@ -7738,32 +7782,32 @@ export class ImpalaSqlParser extends SQLParserBase { } public cacheSpec(): CacheSpecContext { let localContext = new CacheSpecContext(this.context, this.state); - this.enterRule(localContext, 240, ImpalaSqlParser.RULE_cacheSpec); + this.enterRule(localContext, 244, ImpalaSqlParser.RULE_cacheSpec); try { - this.state = 1786; + this.state = 1787; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_CACHED: this.enterOuterAlt(localContext, 1); { - this.state = 1776; - this.match(ImpalaSqlParser.KW_CACHED); this.state = 1777; - this.match(ImpalaSqlParser.KW_IN); + this.match(ImpalaSqlParser.KW_CACHED); this.state = 1778; + this.match(ImpalaSqlParser.KW_IN); + this.state = 1779; this.identifier(); - this.state = 1783; + this.state = 1784; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 212, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 213, this.context) ) { case 1: { - this.state = 1779; - this.match(ImpalaSqlParser.KW_WITH); this.state = 1780; - this.match(ImpalaSqlParser.KW_REPLICATION); + this.match(ImpalaSqlParser.KW_WITH); this.state = 1781; - this.match(ImpalaSqlParser.EQ); + this.match(ImpalaSqlParser.KW_REPLICATION); this.state = 1782; + this.match(ImpalaSqlParser.EQ); + this.state = 1783; this.number_(); } break; @@ -7773,7 +7817,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_UNCACHED: this.enterOuterAlt(localContext, 2); { - this.state = 1785; + this.state = 1786; this.match(ImpalaSqlParser.KW_UNCACHED); } break; @@ -7797,9 +7841,9 @@ export class ImpalaSqlParser extends SQLParserBase { } public rangeOperator(): RangeOperatorContext { let localContext = new RangeOperatorContext(this.context, this.state); - this.enterRule(localContext, 242, ImpalaSqlParser.RULE_rangeOperator); + this.enterRule(localContext, 246, ImpalaSqlParser.RULE_rangeOperator); try { - this.state = 1793; + this.state = 1794; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ARRAY: @@ -7880,28 +7924,28 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.LT: this.enterOuterAlt(localContext, 2); { - this.state = 1789; + this.state = 1790; this.match(ImpalaSqlParser.LT); } break; case ImpalaSqlParser.LTE: this.enterOuterAlt(localContext, 3); { - this.state = 1790; + this.state = 1791; this.match(ImpalaSqlParser.LTE); } break; case ImpalaSqlParser.GT: this.enterOuterAlt(localContext, 4); { - this.state = 1791; + this.state = 1792; this.match(ImpalaSqlParser.GT); } break; case ImpalaSqlParser.GTE: this.enterOuterAlt(localContext, 5); { - this.state = 1792; + this.state = 1793; this.match(ImpalaSqlParser.GTE); } break; @@ -7925,57 +7969,57 @@ export class ImpalaSqlParser extends SQLParserBase { } public partitionCol(): PartitionColContext { let localContext = new PartitionColContext(this.context, this.state); - this.enterRule(localContext, 244, ImpalaSqlParser.RULE_partitionCol); + this.enterRule(localContext, 248, ImpalaSqlParser.RULE_partitionCol); try { - this.state = 1803; + this.state = 1804; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.EQ: this.enterOuterAlt(localContext, 1); { - this.state = 1795; + this.state = 1796; this.match(ImpalaSqlParser.EQ); } break; case ImpalaSqlParser.NEQ: this.enterOuterAlt(localContext, 2); { - this.state = 1796; + this.state = 1797; this.match(ImpalaSqlParser.NEQ); } break; case ImpalaSqlParser.KW_LIKE: this.enterOuterAlt(localContext, 3); { - this.state = 1797; + this.state = 1798; this.match(ImpalaSqlParser.KW_LIKE); } break; case ImpalaSqlParser.KW_RLIKE: this.enterOuterAlt(localContext, 4); { - this.state = 1798; + this.state = 1799; this.match(ImpalaSqlParser.KW_RLIKE); } break; case ImpalaSqlParser.KW_REGEXP: this.enterOuterAlt(localContext, 5); { - this.state = 1799; + this.state = 1800; this.match(ImpalaSqlParser.KW_REGEXP); } break; case ImpalaSqlParser.KW_BETWEEN: this.enterOuterAlt(localContext, 6); { - this.state = 1800; + this.state = 1801; this.match(ImpalaSqlParser.KW_BETWEEN); } break; case ImpalaSqlParser.KW_IN: this.enterOuterAlt(localContext, 7); { - this.state = 1801; + this.state = 1802; this.match(ImpalaSqlParser.KW_IN); } break; @@ -8054,7 +8098,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 8); { - this.state = 1802; + this.state = 1803; this.rangeOperator(); } break; @@ -8078,21 +8122,21 @@ export class ImpalaSqlParser extends SQLParserBase { } public likeClause(): LikeClauseContext { let localContext = new LikeClauseContext(this.context, this.state); - this.enterRule(localContext, 246, ImpalaSqlParser.RULE_likeClause); + this.enterRule(localContext, 250, ImpalaSqlParser.RULE_likeClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1805; - this.match(ImpalaSqlParser.KW_LIKE); this.state = 1806; + this.match(ImpalaSqlParser.KW_LIKE); + this.state = 1807; this.qualifiedName(); - this.state = 1809; + this.state = 1810; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 65 || _la === 95) { { - this.state = 1807; + this.state = 1808; localContext._optionType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 65 || _la === 95)) { @@ -8102,7 +8146,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1808; + this.state = 1809; this.match(ImpalaSqlParser.KW_PROPERTIES); } } @@ -8125,32 +8169,32 @@ export class ImpalaSqlParser extends SQLParserBase { } public properties(): PropertiesContext { let localContext = new PropertiesContext(this.context, this.state); - this.enterRule(localContext, 248, ImpalaSqlParser.RULE_properties); + this.enterRule(localContext, 252, ImpalaSqlParser.RULE_properties); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1811; - this.match(ImpalaSqlParser.LPAREN); this.state = 1812; + this.match(ImpalaSqlParser.LPAREN); + this.state = 1813; this.property(); - this.state = 1817; + this.state = 1818; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1813; - this.match(ImpalaSqlParser.COMMA); this.state = 1814; + this.match(ImpalaSqlParser.COMMA); + this.state = 1815; this.property(); } } - this.state = 1819; + this.state = 1820; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1820; + this.state = 1821; this.match(ImpalaSqlParser.RPAREN); } } @@ -8170,34 +8214,34 @@ export class ImpalaSqlParser extends SQLParserBase { } public partitionedBy(): PartitionedByContext { let localContext = new PartitionedByContext(this.context, this.state); - this.enterRule(localContext, 250, ImpalaSqlParser.RULE_partitionedBy); + this.enterRule(localContext, 254, ImpalaSqlParser.RULE_partitionedBy); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1822; - this.match(ImpalaSqlParser.LPAREN); this.state = 1823; + this.match(ImpalaSqlParser.LPAREN); + this.state = 1824; this.columnSpec(); - this.state = 1828; + this.state = 1829; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 218, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 219, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1824; - this.match(ImpalaSqlParser.COMMA); this.state = 1825; + this.match(ImpalaSqlParser.COMMA); + this.state = 1826; this.columnSpec(); } } } - this.state = 1830; + this.state = 1831; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 218, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 219, this.context); } - this.state = 1831; + this.state = 1832; this.match(ImpalaSqlParser.RPAREN); } } @@ -8217,26 +8261,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public sortedBy(): SortedByContext { let localContext = new SortedByContext(this.context, this.state); - this.enterRule(localContext, 252, ImpalaSqlParser.RULE_sortedBy); + this.enterRule(localContext, 256, ImpalaSqlParser.RULE_sortedBy); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1833; + this.state = 1834; this.expression(); - this.state = 1838; + this.state = 1839; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1834; - this.match(ImpalaSqlParser.COMMA); this.state = 1835; + this.match(ImpalaSqlParser.COMMA); + this.state = 1836; this.expression(); } } - this.state = 1840; + this.state = 1841; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -8258,36 +8302,36 @@ export class ImpalaSqlParser extends SQLParserBase { } public rowFormat(): RowFormatContext { let localContext = new RowFormatContext(this.context, this.state); - this.enterRule(localContext, 254, ImpalaSqlParser.RULE_rowFormat); + this.enterRule(localContext, 258, ImpalaSqlParser.RULE_rowFormat); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1841; + this.state = 1842; this.match(ImpalaSqlParser.KW_DELIMITED); - this.state = 1851; + this.state = 1852; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 71) { { - this.state = 1842; - this.match(ImpalaSqlParser.KW_FIELDS); this.state = 1843; - this.match(ImpalaSqlParser.KW_TERMINATED); + this.match(ImpalaSqlParser.KW_FIELDS); this.state = 1844; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_TERMINATED); this.state = 1845; + this.match(ImpalaSqlParser.KW_BY); + this.state = 1846; this.stringLiteral(); - this.state = 1849; + this.state = 1850; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 63) { { - this.state = 1846; - this.match(ImpalaSqlParser.KW_ESCAPED); this.state = 1847; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_ESCAPED); this.state = 1848; + this.match(ImpalaSqlParser.KW_BY); + this.state = 1849; this.stringLiteral(); } } @@ -8295,18 +8339,18 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 1857; + this.state = 1858; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 117) { { - this.state = 1853; - this.match(ImpalaSqlParser.KW_LINES); this.state = 1854; - this.match(ImpalaSqlParser.KW_TERMINATED); + this.match(ImpalaSqlParser.KW_LINES); this.state = 1855; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_TERMINATED); this.state = 1856; + this.match(ImpalaSqlParser.KW_BY); + this.state = 1857; this.stringLiteral(); } } @@ -8329,21 +8373,21 @@ export class ImpalaSqlParser extends SQLParserBase { } public property(): PropertyContext { let localContext = new PropertyContext(this.context, this.state); - this.enterRule(localContext, 256, ImpalaSqlParser.RULE_property); + this.enterRule(localContext, 260, ImpalaSqlParser.RULE_property); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1859; + this.state = 1860; this.identifier(); - this.state = 1862; + this.state = 1863; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 249) { { - this.state = 1860; - this.match(ImpalaSqlParser.EQ); this.state = 1861; + this.match(ImpalaSqlParser.EQ); + this.state = 1862; this.expression(); } } @@ -8366,60 +8410,60 @@ export class ImpalaSqlParser extends SQLParserBase { } public queryNoWith(): QueryNoWithContext { let localContext = new QueryNoWithContext(this.context, this.state); - this.enterRule(localContext, 258, ImpalaSqlParser.RULE_queryNoWith); + this.enterRule(localContext, 262, ImpalaSqlParser.RULE_queryNoWith); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1864; + this.state = 1865; this.queryTerm(0); - this.state = 1875; + this.state = 1876; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 139) { { - this.state = 1865; - this.match(ImpalaSqlParser.KW_ORDER); this.state = 1866; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_ORDER); this.state = 1867; + this.match(ImpalaSqlParser.KW_BY); + this.state = 1868; this.sortItem(); - this.state = 1872; + this.state = 1873; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1868; - this.match(ImpalaSqlParser.COMMA); this.state = 1869; + this.match(ImpalaSqlParser.COMMA); + this.state = 1870; this.sortItem(); } } - this.state = 1874; + this.state = 1875; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 1883; + this.state = 1884; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 116) { { - this.state = 1877; - this.match(ImpalaSqlParser.KW_LIMIT); this.state = 1878; + this.match(ImpalaSqlParser.KW_LIMIT); + this.state = 1879; localContext._rows = this.expression(); - this.state = 1881; + this.state = 1882; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 135) { { - this.state = 1879; - this.match(ImpalaSqlParser.KW_OFFSET); this.state = 1880; + this.match(ImpalaSqlParser.KW_OFFSET); + this.state = 1881; localContext._offset = this.match(ImpalaSqlParser.INTEGER_VALUE); } } @@ -8455,8 +8499,8 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new QueryTermContext(this.context, parentState); let previousContext = localContext; - let _startState = 260; - this.enterRecursionRule(localContext, 260, ImpalaSqlParser.RULE_queryTerm, _p); + let _startState = 264; + this.enterRecursionRule(localContext, 264, ImpalaSqlParser.RULE_queryTerm, _p); let _la: number; try { let alternative: number; @@ -8467,13 +8511,13 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 1886; + this.state = 1887; this.queryPrimary(); } this.context!.stop = this.tokenStream.LT(-1); - this.state = 1902; + this.state = 1903; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 231, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 232, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -8481,31 +8525,31 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 1900; + this.state = 1901; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 230, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 231, this.context) ) { case 1: { localContext = new SetOperationContext(new QueryTermContext(parentContext, parentState)); (localContext as SetOperationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_queryTerm); - this.state = 1888; + this.state = 1889; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 1889; + this.state = 1890; (localContext as SetOperationContext)._operator = this.match(ImpalaSqlParser.KW_INTERSECT); - this.state = 1891; + this.state = 1892; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2 || _la === 57) { { - this.state = 1890; + this.state = 1891; this.setQuantifier(); } } - this.state = 1893; + this.state = 1894; (localContext as SetOperationContext)._right = this.queryTerm(3); } break; @@ -8514,11 +8558,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SetOperationContext(new QueryTermContext(parentContext, parentState)); (localContext as SetOperationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_queryTerm); - this.state = 1894; + this.state = 1895; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 1895; + this.state = 1896; (localContext as SetOperationContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 64 || _la === 200)) { @@ -8528,26 +8572,26 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1897; + this.state = 1898; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2 || _la === 57) { { - this.state = 1896; + this.state = 1897; this.setQuantifier(); } } - this.state = 1899; + this.state = 1900; (localContext as SetOperationContext)._right = this.queryTerm(2); } break; } } } - this.state = 1904; + this.state = 1905; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 231, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 232, this.context); } } } @@ -8567,17 +8611,17 @@ export class ImpalaSqlParser extends SQLParserBase { } public queryPrimary(): QueryPrimaryContext { let localContext = new QueryPrimaryContext(this.context, this.state); - this.enterRule(localContext, 262, ImpalaSqlParser.RULE_queryPrimary); + this.enterRule(localContext, 266, ImpalaSqlParser.RULE_queryPrimary); try { let alternative: number; - this.state = 1921; + this.state = 1922; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_SELECT: localContext = new QueryPrimaryDefaultContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 1905; + this.state = 1906; this.querySpecification(); } break; @@ -8585,9 +8629,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new TableContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 1906; - this.match(ImpalaSqlParser.KW_TABLE); this.state = 1907; + this.match(ImpalaSqlParser.KW_TABLE); + this.state = 1908; this.tableNamePath(); } break; @@ -8595,27 +8639,27 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new InlineTableContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 1908; - this.match(ImpalaSqlParser.KW_VALUES); this.state = 1909; + this.match(ImpalaSqlParser.KW_VALUES); + this.state = 1910; this.expression(); - this.state = 1914; + this.state = 1915; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 232, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 233, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1910; - this.match(ImpalaSqlParser.COMMA); this.state = 1911; + this.match(ImpalaSqlParser.COMMA); + this.state = 1912; this.expression(); } } } - this.state = 1916; + this.state = 1917; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 232, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 233, this.context); } } break; @@ -8623,11 +8667,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SubqueryContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 1917; - this.match(ImpalaSqlParser.LPAREN); this.state = 1918; - this.queryNoWith(); + this.match(ImpalaSqlParser.LPAREN); this.state = 1919; + this.queryNoWith(); + this.state = 1920; this.match(ImpalaSqlParser.RPAREN); } break; @@ -8651,19 +8695,19 @@ export class ImpalaSqlParser extends SQLParserBase { } public sortItem(): SortItemContext { let localContext = new SortItemContext(this.context, this.state); - this.enterRule(localContext, 264, ImpalaSqlParser.RULE_sortItem); + this.enterRule(localContext, 268, ImpalaSqlParser.RULE_sortItem); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1923; + this.state = 1924; this.columnItem(); - this.state = 1925; + this.state = 1926; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 10 || _la === 55) { { - this.state = 1924; + this.state = 1925; localContext._ordering = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 10 || _la === 55)) { @@ -8676,14 +8720,14 @@ export class ImpalaSqlParser extends SQLParserBase { } } - this.state = 1929; + this.state = 1930; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 134) { { - this.state = 1927; - this.match(ImpalaSqlParser.KW_NULLS); this.state = 1928; + this.match(ImpalaSqlParser.KW_NULLS); + this.state = 1929; localContext._nullOrdering = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 75 || _la === 112)) { @@ -8714,117 +8758,117 @@ export class ImpalaSqlParser extends SQLParserBase { } public querySpecification(): QuerySpecificationContext { let localContext = new QuerySpecificationContext(this.context, this.state); - this.enterRule(localContext, 266, ImpalaSqlParser.RULE_querySpecification); + this.enterRule(localContext, 270, ImpalaSqlParser.RULE_querySpecification); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1931; + this.state = 1932; this.match(ImpalaSqlParser.KW_SELECT); - this.state = 1933; + this.state = 1934; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 236, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 237, this.context) ) { case 1: { - this.state = 1932; + this.state = 1933; this.setQuantifier(); } break; } - this.state = 1936; + this.state = 1937; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 237, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 238, this.context) ) { case 1: { - this.state = 1935; + this.state = 1936; this.match(ImpalaSqlParser.KW_STRAIGHT_JOIN); } break; } - this.state = 1938; + this.state = 1939; this.selectItem(); - this.state = 1943; + this.state = 1944; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 238, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 239, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1939; - this.match(ImpalaSqlParser.COMMA); this.state = 1940; + this.match(ImpalaSqlParser.COMMA); + this.state = 1941; this.selectItem(); } } } - this.state = 1945; + this.state = 1946; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 238, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 239, this.context); } - this.state = 1955; + this.state = 1956; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 240, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 241, this.context) ) { case 1: { - this.state = 1946; - this.match(ImpalaSqlParser.KW_FROM); this.state = 1947; + this.match(ImpalaSqlParser.KW_FROM); + this.state = 1948; this.relation(0); - this.state = 1952; + this.state = 1953; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 239, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 240, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1948; - this.match(ImpalaSqlParser.COMMA); this.state = 1949; + this.match(ImpalaSqlParser.COMMA); + this.state = 1950; this.relation(0); } } } - this.state = 1954; + this.state = 1955; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 239, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 240, this.context); } } break; } - this.state = 1959; + this.state = 1960; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 241, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 242, this.context) ) { case 1: { - this.state = 1957; - this.match(ImpalaSqlParser.KW_WHERE); this.state = 1958; + this.match(ImpalaSqlParser.KW_WHERE); + this.state = 1959; localContext._where = this.booleanExpression(0); } break; } - this.state = 1964; + this.state = 1965; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 242, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 243, this.context) ) { case 1: { - this.state = 1961; - this.match(ImpalaSqlParser.KW_GROUP); this.state = 1962; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_GROUP); this.state = 1963; + this.match(ImpalaSqlParser.KW_BY); + this.state = 1964; this.groupBy(); } break; } - this.state = 1968; + this.state = 1969; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 243, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 244, this.context) ) { case 1: { - this.state = 1966; - this.match(ImpalaSqlParser.KW_HAVING); this.state = 1967; + this.match(ImpalaSqlParser.KW_HAVING); + this.state = 1968; localContext._having = this.booleanExpression(0); } break; @@ -8847,40 +8891,40 @@ export class ImpalaSqlParser extends SQLParserBase { } public groupBy(): GroupByContext { let localContext = new GroupByContext(this.context, this.state); - this.enterRule(localContext, 268, ImpalaSqlParser.RULE_groupBy); + this.enterRule(localContext, 272, ImpalaSqlParser.RULE_groupBy); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1971; + this.state = 1972; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 244, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 245, this.context) ) { case 1: { - this.state = 1970; + this.state = 1971; this.setQuantifier(); } break; } - this.state = 1973; + this.state = 1974; this.groupingElement(); - this.state = 1978; + this.state = 1979; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 245, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 246, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1974; - this.match(ImpalaSqlParser.COMMA); this.state = 1975; + this.match(ImpalaSqlParser.COMMA); + this.state = 1976; this.groupingElement(); } } } - this.state = 1980; + this.state = 1981; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 245, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 246, this.context); } } } @@ -8900,12 +8944,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public groupingElement(): GroupingElementContext { let localContext = new GroupingElementContext(this.context, this.state); - this.enterRule(localContext, 270, ImpalaSqlParser.RULE_groupingElement); + this.enterRule(localContext, 274, ImpalaSqlParser.RULE_groupingElement); try { localContext = new SingleGroupingSetContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 1981; + this.state = 1982; this.groupingSet(); } } @@ -8925,51 +8969,51 @@ export class ImpalaSqlParser extends SQLParserBase { } public groupingSet(): GroupingSetContext { let localContext = new GroupingSetContext(this.context, this.state); - this.enterRule(localContext, 272, ImpalaSqlParser.RULE_groupingSet); + this.enterRule(localContext, 276, ImpalaSqlParser.RULE_groupingSet); let _la: number; try { - this.state = 1996; + this.state = 1997; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 248, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 249, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1983; + this.state = 1984; this.match(ImpalaSqlParser.LPAREN); - this.state = 1992; + this.state = 1993; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 247, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 248, this.context) ) { case 1: { - this.state = 1984; + this.state = 1985; this.columnItem(); - this.state = 1989; + this.state = 1990; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 1985; - this.match(ImpalaSqlParser.COMMA); this.state = 1986; + this.match(ImpalaSqlParser.COMMA); + this.state = 1987; this.columnItem(); } } - this.state = 1991; + this.state = 1992; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } break; } - this.state = 1994; + this.state = 1995; this.match(ImpalaSqlParser.RPAREN); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1995; + this.state = 1996; this.columnItem(); } break; @@ -8991,26 +9035,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public namedQuery(): NamedQueryContext { let localContext = new NamedQueryContext(this.context, this.state); - this.enterRule(localContext, 274, ImpalaSqlParser.RULE_namedQuery); + this.enterRule(localContext, 278, ImpalaSqlParser.RULE_namedQuery); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1998; + this.state = 1999; localContext._name = this.identifier(); - this.state = 2000; + this.state = 2001; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 1999; + this.state = 2000; this.columnAliases(); } } - this.state = 2002; - this.match(ImpalaSqlParser.KW_AS); this.state = 2003; + this.match(ImpalaSqlParser.KW_AS); + this.state = 2004; this.subQueryRelation(); } } @@ -9030,12 +9074,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public setQuantifier(): SetQuantifierContext { let localContext = new SetQuantifierContext(this.context, this.state); - this.enterRule(localContext, 276, ImpalaSqlParser.RULE_setQuantifier); + this.enterRule(localContext, 280, ImpalaSqlParser.RULE_setQuantifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2005; + this.state = 2006; _la = this.tokenStream.LA(1); if(!(_la === 2 || _la === 57)) { this.errorHandler.recoverInline(this); @@ -9062,34 +9106,34 @@ export class ImpalaSqlParser extends SQLParserBase { } public selectItem(): SelectItemContext { let localContext = new SelectItemContext(this.context, this.state); - this.enterRule(localContext, 278, ImpalaSqlParser.RULE_selectItem); + this.enterRule(localContext, 282, ImpalaSqlParser.RULE_selectItem); let _la: number; try { - this.state = 2019; + this.state = 2020; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 252, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 253, this.context) ) { case 1: localContext = new SelectSingleContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2007; + this.state = 2008; this.columnItem(); - this.state = 2012; + this.state = 2013; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 251, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 252, this.context) ) { case 1: { - this.state = 2009; + this.state = 2010; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2008; + this.state = 2009; this.match(ImpalaSqlParser.KW_AS); } } - this.state = 2011; + this.state = 2012; this.identifier(); } break; @@ -9100,11 +9144,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SelectAllContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2014; - this.qualifiedName(); this.state = 2015; - this.match(ImpalaSqlParser.DOT); + this.qualifiedName(); this.state = 2016; + this.match(ImpalaSqlParser.DOT); + this.state = 2017; this.match(ImpalaSqlParser.ASTERISK); } break; @@ -9112,7 +9156,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SelectAllContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2018; + this.state = 2019; this.match(ImpalaSqlParser.ASTERISK); } break; @@ -9144,8 +9188,8 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new RelationContext(this.context, parentState); let previousContext = localContext; - let _startState = 280; - this.enterRecursionRule(localContext, 280, ImpalaSqlParser.RULE_relation, _p); + let _startState = 284; + this.enterRecursionRule(localContext, 284, ImpalaSqlParser.RULE_relation, _p); try { let alternative: number; this.enterOuterAlt(localContext, 1); @@ -9155,13 +9199,13 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 2022; + this.state = 2023; this.sampledRelation(); } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2037; + this.state = 2038; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 254, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 255, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -9173,20 +9217,20 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new JoinRelationContext(new RelationContext(parentContext, parentState)); (localContext as JoinRelationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_relation); - this.state = 2024; + this.state = 2025; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 2033; + this.state = 2034; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_CROSS: { - this.state = 2025; - this.match(ImpalaSqlParser.KW_CROSS); this.state = 2026; - this.match(ImpalaSqlParser.KW_JOIN); + this.match(ImpalaSqlParser.KW_CROSS); this.state = 2027; + this.match(ImpalaSqlParser.KW_JOIN); + this.state = 2028; (localContext as JoinRelationContext)._right = this.sampledRelation(); } break; @@ -9196,13 +9240,13 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.KW_LEFT: case ImpalaSqlParser.KW_RIGHT: { - this.state = 2028; - this.joinType(); this.state = 2029; - this.match(ImpalaSqlParser.KW_JOIN); + this.joinType(); this.state = 2030; - (localContext as JoinRelationContext)._rightRelation = this.relation(0); + this.match(ImpalaSqlParser.KW_JOIN); this.state = 2031; + (localContext as JoinRelationContext)._rightRelation = this.relation(0); + this.state = 2032; this.joinCriteria(); } break; @@ -9212,9 +9256,9 @@ export class ImpalaSqlParser extends SQLParserBase { } } } - this.state = 2039; + this.state = 2040; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 254, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 255, this.context); } } } @@ -9234,21 +9278,21 @@ export class ImpalaSqlParser extends SQLParserBase { } public joinType(): JoinTypeContext { let localContext = new JoinTypeContext(this.context, this.state); - this.enterRule(localContext, 282, ImpalaSqlParser.RULE_joinType); + this.enterRule(localContext, 286, ImpalaSqlParser.RULE_joinType); let _la: number; try { - this.state = 2071; + this.state = 2072; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 261, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 262, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2041; + this.state = 2042; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 2040; + this.state = 2041; this.match(ImpalaSqlParser.KW_INNER); } } @@ -9258,14 +9302,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2043; + this.state = 2044; this.match(ImpalaSqlParser.KW_LEFT); - this.state = 2045; + this.state = 2046; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 2044; + this.state = 2045; this.match(ImpalaSqlParser.KW_INNER); } } @@ -9275,14 +9319,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2047; + this.state = 2048; this.match(ImpalaSqlParser.KW_RIGHT); - this.state = 2049; + this.state = 2050; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 2048; + this.state = 2049; this.match(ImpalaSqlParser.KW_INNER); } } @@ -9292,14 +9336,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2051; + this.state = 2052; this.match(ImpalaSqlParser.KW_LEFT); - this.state = 2053; + this.state = 2054; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 141) { { - this.state = 2052; + this.state = 2053; this.match(ImpalaSqlParser.KW_OUTER); } } @@ -9309,14 +9353,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 5: this.enterOuterAlt(localContext, 5); { - this.state = 2055; + this.state = 2056; this.match(ImpalaSqlParser.KW_RIGHT); - this.state = 2057; + this.state = 2058; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 141) { { - this.state = 2056; + this.state = 2057; this.match(ImpalaSqlParser.KW_OUTER); } } @@ -9326,14 +9370,14 @@ export class ImpalaSqlParser extends SQLParserBase { case 6: this.enterOuterAlt(localContext, 6); { - this.state = 2059; + this.state = 2060; this.match(ImpalaSqlParser.KW_FULL); - this.state = 2061; + this.state = 2062; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 141) { { - this.state = 2060; + this.state = 2061; this.match(ImpalaSqlParser.KW_OUTER); } } @@ -9343,36 +9387,36 @@ export class ImpalaSqlParser extends SQLParserBase { case 7: this.enterOuterAlt(localContext, 7); { - this.state = 2063; - this.match(ImpalaSqlParser.KW_LEFT); this.state = 2064; + this.match(ImpalaSqlParser.KW_LEFT); + this.state = 2065; this.match(ImpalaSqlParser.KW_SEMI); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 2065; - this.match(ImpalaSqlParser.KW_RIGHT); this.state = 2066; + this.match(ImpalaSqlParser.KW_RIGHT); + this.state = 2067; this.match(ImpalaSqlParser.KW_SEMI); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 2067; - this.match(ImpalaSqlParser.KW_LEFT); this.state = 2068; + this.match(ImpalaSqlParser.KW_LEFT); + this.state = 2069; this.match(ImpalaSqlParser.KW_ANTI); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 2069; - this.match(ImpalaSqlParser.KW_RIGHT); this.state = 2070; + this.match(ImpalaSqlParser.KW_RIGHT); + this.state = 2071; this.match(ImpalaSqlParser.KW_ANTI); } break; @@ -9394,47 +9438,47 @@ export class ImpalaSqlParser extends SQLParserBase { } public joinCriteria(): JoinCriteriaContext { let localContext = new JoinCriteriaContext(this.context, this.state); - this.enterRule(localContext, 284, ImpalaSqlParser.RULE_joinCriteria); + this.enterRule(localContext, 288, ImpalaSqlParser.RULE_joinCriteria); let _la: number; try { - this.state = 2087; + this.state = 2088; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ON: this.enterOuterAlt(localContext, 1); { - this.state = 2073; - this.match(ImpalaSqlParser.KW_ON); this.state = 2074; + this.match(ImpalaSqlParser.KW_ON); + this.state = 2075; this.booleanExpression(0); } break; case ImpalaSqlParser.KW_USING: this.enterOuterAlt(localContext, 2); { - this.state = 2075; - this.match(ImpalaSqlParser.KW_USING); this.state = 2076; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_USING); this.state = 2077; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2078; this.identifier(); - this.state = 2082; + this.state = 2083; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2078; - this.match(ImpalaSqlParser.COMMA); this.state = 2079; + this.match(ImpalaSqlParser.COMMA); + this.state = 2080; this.identifier(); } } - this.state = 2084; + this.state = 2085; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2085; + this.state = 2086; this.match(ImpalaSqlParser.RPAREN); } break; @@ -9458,39 +9502,39 @@ export class ImpalaSqlParser extends SQLParserBase { } public sampledRelation(): SampledRelationContext { let localContext = new SampledRelationContext(this.context, this.state); - this.enterRule(localContext, 286, ImpalaSqlParser.RULE_sampledRelation); + this.enterRule(localContext, 290, ImpalaSqlParser.RULE_sampledRelation); try { this.enterOuterAlt(localContext, 1); { - this.state = 2089; + this.state = 2090; this.aliasedRelation(); - this.state = 2102; + this.state = 2103; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 265, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 266, this.context) ) { case 1: { - this.state = 2090; - this.match(ImpalaSqlParser.KW_TABLESAMPLE); this.state = 2091; - this.sampleType(); + this.match(ImpalaSqlParser.KW_TABLESAMPLE); this.state = 2092; - this.match(ImpalaSqlParser.LPAREN); + this.sampleType(); this.state = 2093; - localContext._percentage = this.expression(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2094; + localContext._percentage = this.expression(); + this.state = 2095; this.match(ImpalaSqlParser.RPAREN); - this.state = 2100; + this.state = 2101; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 264, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 265, this.context) ) { case 1: { - this.state = 2095; - this.match(ImpalaSqlParser.KW_REPEATABLE); this.state = 2096; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_REPEATABLE); this.state = 2097; - localContext._seed = this.expression(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2098; + localContext._seed = this.expression(); + this.state = 2099; this.match(ImpalaSqlParser.RPAREN); } break; @@ -9516,12 +9560,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public sampleType(): SampleTypeContext { let localContext = new SampleTypeContext(this.context, this.state); - this.enterRule(localContext, 288, ImpalaSqlParser.RULE_sampleType); + this.enterRule(localContext, 292, ImpalaSqlParser.RULE_sampleType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2104; + this.state = 2105; _la = this.tokenStream.LA(1); if(!(_la === 14 || _la === 185)) { this.errorHandler.recoverInline(this); @@ -9548,36 +9592,36 @@ export class ImpalaSqlParser extends SQLParserBase { } public aliasedRelation(): AliasedRelationContext { let localContext = new AliasedRelationContext(this.context, this.state); - this.enterRule(localContext, 290, ImpalaSqlParser.RULE_aliasedRelation); + this.enterRule(localContext, 294, ImpalaSqlParser.RULE_aliasedRelation); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2106; + this.state = 2107; this.relationPrimary(); - this.state = 2114; + this.state = 2115; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 268, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 269, this.context) ) { case 1: { - this.state = 2108; + this.state = 2109; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2107; + this.state = 2108; this.match(ImpalaSqlParser.KW_AS); } } - this.state = 2110; - this.identifier(); - this.state = 2112; + this.state = 2111; + localContext._alias = this.identifier(); + this.state = 2113; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 267, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 268, this.context) ) { case 1: { - this.state = 2111; + this.state = 2112; this.columnAliases(); } break; @@ -9603,32 +9647,32 @@ export class ImpalaSqlParser extends SQLParserBase { } public columnAliases(): ColumnAliasesContext { let localContext = new ColumnAliasesContext(this.context, this.state); - this.enterRule(localContext, 292, ImpalaSqlParser.RULE_columnAliases); + this.enterRule(localContext, 296, ImpalaSqlParser.RULE_columnAliases); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2116; - this.match(ImpalaSqlParser.LPAREN); this.state = 2117; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2118; this.columnNamePath(); - this.state = 2122; + this.state = 2123; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2118; - this.match(ImpalaSqlParser.COMMA); this.state = 2119; + this.match(ImpalaSqlParser.COMMA); + this.state = 2120; this.columnNamePath(); } } - this.state = 2124; + this.state = 2125; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2125; + this.state = 2126; this.match(ImpalaSqlParser.RPAREN); } } @@ -9648,47 +9692,47 @@ export class ImpalaSqlParser extends SQLParserBase { } public relationPrimary(): RelationPrimaryContext { let localContext = new RelationPrimaryContext(this.context, this.state); - this.enterRule(localContext, 294, ImpalaSqlParser.RULE_relationPrimary); + this.enterRule(localContext, 298, ImpalaSqlParser.RULE_relationPrimary); let _la: number; try { - this.state = 2134; + this.state = 2135; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 271, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 272, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2127; + this.state = 2128; this.tableOrViewPath(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2129; + this.state = 2130; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 113) { { - this.state = 2128; + this.state = 2129; this.match(ImpalaSqlParser.KW_LATERAL); } } - this.state = 2131; + this.state = 2132; this.subQueryRelation(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2132; + this.state = 2133; this.unnest(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2133; + this.state = 2134; this.parenthesizedRelation(); } break; @@ -9710,15 +9754,15 @@ export class ImpalaSqlParser extends SQLParserBase { } public subQueryRelation(): SubQueryRelationContext { let localContext = new SubQueryRelationContext(this.context, this.state); - this.enterRule(localContext, 296, ImpalaSqlParser.RULE_subQueryRelation); + this.enterRule(localContext, 300, ImpalaSqlParser.RULE_subQueryRelation); try { this.enterOuterAlt(localContext, 1); { - this.state = 2136; - this.match(ImpalaSqlParser.LPAREN); this.state = 2137; - this.queryStatement(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2138; + this.queryStatement(); + this.state = 2139; this.match(ImpalaSqlParser.RPAREN); } } @@ -9738,43 +9782,43 @@ export class ImpalaSqlParser extends SQLParserBase { } public unnest(): UnnestContext { let localContext = new UnnestContext(this.context, this.state); - this.enterRule(localContext, 298, ImpalaSqlParser.RULE_unnest); + this.enterRule(localContext, 302, ImpalaSqlParser.RULE_unnest); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2140; - this.match(ImpalaSqlParser.KW_UNNEST); this.state = 2141; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_UNNEST); this.state = 2142; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2143; this.expression(); - this.state = 2147; + this.state = 2148; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2143; - this.match(ImpalaSqlParser.COMMA); this.state = 2144; + this.match(ImpalaSqlParser.COMMA); + this.state = 2145; this.expression(); } } - this.state = 2149; + this.state = 2150; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2150; + this.state = 2151; this.match(ImpalaSqlParser.RPAREN); - this.state = 2153; + this.state = 2154; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 273, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 274, this.context) ) { case 1: { - this.state = 2151; - this.match(ImpalaSqlParser.KW_WITH); this.state = 2152; + this.match(ImpalaSqlParser.KW_WITH); + this.state = 2153; this.match(ImpalaSqlParser.KW_ORDINALITY); } break; @@ -9797,15 +9841,15 @@ export class ImpalaSqlParser extends SQLParserBase { } public parenthesizedRelation(): ParenthesizedRelationContext { let localContext = new ParenthesizedRelationContext(this.context, this.state); - this.enterRule(localContext, 300, ImpalaSqlParser.RULE_parenthesizedRelation); + this.enterRule(localContext, 304, ImpalaSqlParser.RULE_parenthesizedRelation); try { this.enterOuterAlt(localContext, 1); { - this.state = 2155; - this.match(ImpalaSqlParser.LPAREN); this.state = 2156; - this.relation(0); + this.match(ImpalaSqlParser.LPAREN); this.state = 2157; + this.relation(0); + this.state = 2158; this.match(ImpalaSqlParser.RPAREN); } } @@ -9825,22 +9869,22 @@ export class ImpalaSqlParser extends SQLParserBase { } public columnItem(): ColumnItemContext { let localContext = new ColumnItemContext(this.context, this.state); - this.enterRule(localContext, 302, ImpalaSqlParser.RULE_columnItem); + this.enterRule(localContext, 306, ImpalaSqlParser.RULE_columnItem); try { - this.state = 2161; + this.state = 2162; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 274, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 275, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2159; + this.state = 2160; this.columnNamePath(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2160; + this.state = 2161; this.expression(); } break; @@ -9862,11 +9906,11 @@ export class ImpalaSqlParser extends SQLParserBase { } public expression(): ExpressionContext { let localContext = new ExpressionContext(this.context, this.state); - this.enterRule(localContext, 304, ImpalaSqlParser.RULE_expression); + this.enterRule(localContext, 308, ImpalaSqlParser.RULE_expression); try { this.enterOuterAlt(localContext, 1); { - this.state = 2163; + this.state = 2164; this.booleanExpression(0); } } @@ -9896,13 +9940,13 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new BooleanExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 306; - this.enterRecursionRule(localContext, 306, ImpalaSqlParser.RULE_booleanExpression, _p); + let _startState = 310; + this.enterRecursionRule(localContext, 310, ImpalaSqlParser.RULE_booleanExpression, _p); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2172; + this.state = 2173; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ARRAY: @@ -9978,14 +10022,14 @@ export class ImpalaSqlParser extends SQLParserBase { this.context = localContext; previousContext = localContext; - this.state = 2166; + this.state = 2167; (localContext as PredicatedContext)._valueExpression = this.valueExpression(0); - this.state = 2168; + this.state = 2169; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 275, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 276, this.context) ) { case 1: { - this.state = 2167; + this.state = 2168; this.predicate((localContext as PredicatedContext)._valueExpression); } break; @@ -9997,9 +10041,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LogicalNotContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2170; - this.match(ImpalaSqlParser.KW_NOT); this.state = 2171; + this.match(ImpalaSqlParser.KW_NOT); + this.state = 2172; this.booleanExpression(3); } break; @@ -10007,9 +10051,9 @@ export class ImpalaSqlParser extends SQLParserBase { throw new antlr.NoViableAltException(this); } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2182; + this.state = 2183; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 278, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 279, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -10017,21 +10061,21 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 2180; + this.state = 2181; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 277, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 278, this.context) ) { case 1: { localContext = new LogicalBinaryContext(new BooleanExpressionContext(parentContext, parentState)); (localContext as LogicalBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_booleanExpression); - this.state = 2174; + this.state = 2175; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 2175; - (localContext as LogicalBinaryContext)._operator = this.match(ImpalaSqlParser.KW_AND); this.state = 2176; + (localContext as LogicalBinaryContext)._operator = this.match(ImpalaSqlParser.KW_AND); + this.state = 2177; (localContext as LogicalBinaryContext)._right = this.booleanExpression(3); } break; @@ -10040,22 +10084,22 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LogicalBinaryContext(new BooleanExpressionContext(parentContext, parentState)); (localContext as LogicalBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_booleanExpression); - this.state = 2177; + this.state = 2178; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 2178; - (localContext as LogicalBinaryContext)._operator = this.match(ImpalaSqlParser.KW_OR); this.state = 2179; + (localContext as LogicalBinaryContext)._operator = this.match(ImpalaSqlParser.KW_OR); + this.state = 2180; (localContext as LogicalBinaryContext)._right = this.booleanExpression(2); } break; } } } - this.state = 2184; + this.state = 2185; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 278, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 279, this.context); } } } @@ -10075,19 +10119,19 @@ export class ImpalaSqlParser extends SQLParserBase { } public predicate(value: antlr.ParserRuleContext): PredicateContext { let localContext = new PredicateContext(this.context, this.state, value); - this.enterRule(localContext, 308, ImpalaSqlParser.RULE_predicate); + this.enterRule(localContext, 312, ImpalaSqlParser.RULE_predicate); let _la: number; try { - this.state = 2243; + this.state = 2244; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 287, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 288, this.context) ) { case 1: localContext = new ComparisonContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2185; - this.comparisonOperator(); this.state = 2186; + this.comparisonOperator(); + this.state = 2187; (localContext as ComparisonContext)._right = this.valueExpression(0); } break; @@ -10095,11 +10139,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new QuantifiedComparisonContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2188; - this.comparisonOperator(); this.state = 2189; - this.comparisonQuantifier(); + this.comparisonOperator(); this.state = 2190; + this.comparisonQuantifier(); + this.state = 2191; this.subQueryRelation(); } break; @@ -10107,23 +10151,23 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BetweenContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2193; + this.state = 2194; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2192; + this.state = 2193; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2195; - this.match(ImpalaSqlParser.KW_BETWEEN); this.state = 2196; - (localContext as BetweenContext)._lower = this.valueExpression(0); + this.match(ImpalaSqlParser.KW_BETWEEN); this.state = 2197; - this.match(ImpalaSqlParser.KW_AND); + (localContext as BetweenContext)._lower = this.valueExpression(0); this.state = 2198; + this.match(ImpalaSqlParser.KW_AND); + this.state = 2199; (localContext as BetweenContext)._upper = this.valueExpression(0); } break; @@ -10131,39 +10175,39 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new InListContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 2201; + this.state = 2202; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2200; + this.state = 2201; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2203; - this.match(ImpalaSqlParser.KW_IN); this.state = 2204; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_IN); this.state = 2205; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2206; this.expression(); - this.state = 2210; + this.state = 2211; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2206; - this.match(ImpalaSqlParser.COMMA); this.state = 2207; + this.match(ImpalaSqlParser.COMMA); + this.state = 2208; this.expression(); } } - this.state = 2212; + this.state = 2213; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2213; + this.state = 2214; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10171,19 +10215,19 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new InSubqueryContext(localContext); this.enterOuterAlt(localContext, 5); { - this.state = 2216; + this.state = 2217; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2215; + this.state = 2216; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2218; - this.match(ImpalaSqlParser.KW_IN); this.state = 2219; + this.match(ImpalaSqlParser.KW_IN); + this.state = 2220; this.subQueryRelation(); } break; @@ -10191,17 +10235,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LikeContext(localContext); this.enterOuterAlt(localContext, 6); { - this.state = 2221; + this.state = 2222; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2220; + this.state = 2221; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2223; + this.state = 2224; _la = this.tokenStream.LA(1); if(!(_la === 106 || _la === 115 || _la === 164)) { this.errorHandler.recoverInline(this); @@ -10210,16 +10254,16 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2224; + this.state = 2225; (localContext as LikeContext)._pattern = this.valueExpression(0); - this.state = 2227; + this.state = 2228; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 284, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 285, this.context) ) { case 1: { - this.state = 2225; - this.match(ImpalaSqlParser.KW_ESCAPE); this.state = 2226; + this.match(ImpalaSqlParser.KW_ESCAPE); + this.state = 2227; (localContext as LikeContext)._escape = this.valueExpression(0); } break; @@ -10230,7 +10274,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new REGEXPContext(localContext); this.enterOuterAlt(localContext, 7); { - this.state = 2229; + this.state = 2230; _la = this.tokenStream.LA(1); if(!(_la === 105 || _la === 163)) { this.errorHandler.recoverInline(this); @@ -10239,7 +10283,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2230; + this.state = 2231; (localContext as REGEXPContext)._pattern = this.valueExpression(0); } break; @@ -10247,19 +10291,19 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new NullOrUnKnownOrBooleanPredicateContext(localContext); this.enterOuterAlt(localContext, 8); { - this.state = 2231; + this.state = 2232; this.match(ImpalaSqlParser.KW_IS); - this.state = 2233; + this.state = 2234; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2232; + this.state = 2233; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2235; + this.state = 2236; _la = this.tokenStream.LA(1); if(!(_la === 70 || _la === 133 || _la === 194 || _la === 208)) { this.errorHandler.recoverInline(this); @@ -10274,23 +10318,23 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DistinctFromContext(localContext); this.enterOuterAlt(localContext, 9); { - this.state = 2236; + this.state = 2237; this.match(ImpalaSqlParser.KW_IS); - this.state = 2238; + this.state = 2239; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 132) { { - this.state = 2237; + this.state = 2238; this.match(ImpalaSqlParser.KW_NOT); } } - this.state = 2240; - this.match(ImpalaSqlParser.KW_DISTINCT); this.state = 2241; - this.match(ImpalaSqlParser.KW_FROM); + this.match(ImpalaSqlParser.KW_DISTINCT); this.state = 2242; + this.match(ImpalaSqlParser.KW_FROM); + this.state = 2243; (localContext as DistinctFromContext)._right = this.valueExpression(0); } break; @@ -10322,23 +10366,23 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new ValueExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 310; - this.enterRecursionRule(localContext, 310, ImpalaSqlParser.RULE_valueExpression, _p); + let _startState = 314; + this.enterRecursionRule(localContext, 314, ImpalaSqlParser.RULE_valueExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2249; + this.state = 2250; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 288, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 289, this.context) ) { case 1: { localContext = new ValueExpressionDefaultContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2246; + this.state = 2247; this.primaryExpression(0); } break; @@ -10347,7 +10391,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ArithmeticUnaryContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2247; + this.state = 2248; (localContext as ArithmeticUnaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 255 || _la === 256)) { @@ -10357,15 +10401,15 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2248; + this.state = 2249; this.valueExpression(4); } break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2262; + this.state = 2263; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 290, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 291, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -10373,19 +10417,19 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 2260; + this.state = 2261; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 289, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 290, this.context) ) { case 1: { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_valueExpression); - this.state = 2251; + this.state = 2252; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 2252; + this.state = 2253; (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 257)) & ~0x1F) === 0 && ((1 << (_la - 257)) & 7) !== 0))) { @@ -10395,7 +10439,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2253; + this.state = 2254; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(4); } break; @@ -10404,11 +10448,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ArithmeticBinaryContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ArithmeticBinaryContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_valueExpression); - this.state = 2254; + this.state = 2255; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 2255; + this.state = 2256; (localContext as ArithmeticBinaryContext)._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 255 || _la === 256)) { @@ -10418,7 +10462,7 @@ export class ImpalaSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2256; + this.state = 2257; (localContext as ArithmeticBinaryContext)._right = this.valueExpression(3); } break; @@ -10427,22 +10471,22 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ConcatenationContext(new ValueExpressionContext(parentContext, parentState)); (localContext as ConcatenationContext)._left = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_valueExpression); - this.state = 2257; + this.state = 2258; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 2258; - this.match(ImpalaSqlParser.CONCAT); this.state = 2259; + this.match(ImpalaSqlParser.CONCAT); + this.state = 2260; (localContext as ConcatenationContext)._right = this.valueExpression(2); } break; } } } - this.state = 2264; + this.state = 2265; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 290, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 291, this.context); } } } @@ -10472,23 +10516,23 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new PrimaryExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 312; - this.enterRecursionRule(localContext, 312, ImpalaSqlParser.RULE_primaryExpression, _p); + let _startState = 316; + this.enterRecursionRule(localContext, 316, ImpalaSqlParser.RULE_primaryExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2511; + this.state = 2512; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 320, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 321, this.context) ) { case 1: { localContext = new NullLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2266; + this.state = 2267; this.match(ImpalaSqlParser.KW_NULL); } break; @@ -10497,7 +10541,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new IntervalLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2267; + this.state = 2268; this.interval(); } break; @@ -10506,9 +10550,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new TypeConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2268; - this.identifier(); this.state = 2269; + this.identifier(); + this.state = 2270; this.stringLiteral(); } break; @@ -10517,9 +10561,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new TypeConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2271; - this.match(ImpalaSqlParser.DOUBLE_PRECISION); this.state = 2272; + this.match(ImpalaSqlParser.DOUBLE_PRECISION); + this.state = 2273; this.stringLiteral(); } break; @@ -10528,7 +10572,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new NumericLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2273; + this.state = 2274; this.number_(); } break; @@ -10537,7 +10581,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BooleanLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2274; + this.state = 2275; this.booleanValue(); } break; @@ -10546,7 +10590,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new StringLiteralValuesContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2275; + this.state = 2276; this.stringLiteral(); } break; @@ -10555,7 +10599,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BinaryLiteralContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2276; + this.state = 2277; this.match(ImpalaSqlParser.BINARY_LITERAL); } break; @@ -10564,7 +10608,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ParameterContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2277; + this.state = 2278; this.match(ImpalaSqlParser.QUESTION); } break; @@ -10573,17 +10617,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new PositionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2278; - this.match(ImpalaSqlParser.KW_POSITION); this.state = 2279; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_POSITION); this.state = 2280; - this.valueExpression(0); + this.match(ImpalaSqlParser.LPAREN); this.state = 2281; - this.match(ImpalaSqlParser.KW_IN); - this.state = 2282; this.valueExpression(0); + this.state = 2282; + this.match(ImpalaSqlParser.KW_IN); this.state = 2283; + this.valueExpression(0); + this.state = 2284; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10592,41 +10636,41 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new RowConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2285; - this.match(ImpalaSqlParser.LPAREN); this.state = 2286; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2287; this.expression(); - this.state = 2289; + this.state = 2290; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2287; - this.match(ImpalaSqlParser.KW_AS); this.state = 2288; + this.match(ImpalaSqlParser.KW_AS); + this.state = 2289; this.type_(0); } } - this.state = 2299; + this.state = 2300; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 293, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 294, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 2291; - this.match(ImpalaSqlParser.COMMA); this.state = 2292; + this.match(ImpalaSqlParser.COMMA); + this.state = 2293; this.expression(); - this.state = 2295; + this.state = 2296; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 2293; - this.match(ImpalaSqlParser.KW_AS); this.state = 2294; + this.match(ImpalaSqlParser.KW_AS); + this.state = 2295; this.type_(0); } } @@ -10634,11 +10678,11 @@ export class ImpalaSqlParser extends SQLParserBase { } } } - this.state = 2301; + this.state = 2302; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 293, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 294, this.context); } - this.state = 2302; + this.state = 2303; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10647,29 +10691,29 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new RowConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2304; - this.match(ImpalaSqlParser.KW_ROW); this.state = 2305; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_ROW); this.state = 2306; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2307; this.expression(); - this.state = 2311; + this.state = 2312; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2307; - this.match(ImpalaSqlParser.COMMA); this.state = 2308; + this.match(ImpalaSqlParser.COMMA); + this.state = 2309; this.expression(); } } - this.state = 2313; + this.state = 2314; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2314; + this.state = 2315; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10678,30 +10722,30 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new FunctionCallContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2316; - this.functionNamePath(); this.state = 2317; - this.match(ImpalaSqlParser.LPAREN); + this.functionNamePath(); this.state = 2318; - this.match(ImpalaSqlParser.ASTERISK); + this.match(ImpalaSqlParser.LPAREN); this.state = 2319; + this.match(ImpalaSqlParser.ASTERISK); + this.state = 2320; this.match(ImpalaSqlParser.RPAREN); - this.state = 2321; + this.state = 2322; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 295, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 296, this.context) ) { case 1: { - this.state = 2320; + this.state = 2321; this.filter(); } break; } - this.state = 2324; + this.state = 2325; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 296, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 297, this.context) ) { case 1: { - this.state = 2323; + this.state = 2324; this.over(); } break; @@ -10713,94 +10757,94 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new FunctionCallContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2326; - this.functionNamePath(); this.state = 2327; + this.functionNamePath(); + this.state = 2328; this.match(ImpalaSqlParser.LPAREN); - this.state = 2339; + this.state = 2340; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805323012) !== 0) || ((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & 1442972447) !== 0) || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 2218795145) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 269631421) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 271654979) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 537926659) !== 0) || ((((_la - 217)) & ~0x1F) === 0 && ((1 << (_la - 217)) & 16393) !== 0) || ((((_la - 255)) & ~0x1F) === 0 && ((1 << (_la - 255)) & 2549744643) !== 0)) { { - this.state = 2329; + this.state = 2330; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2 || _la === 57) { { - this.state = 2328; + this.state = 2329; this.setQuantifier(); } } - this.state = 2331; + this.state = 2332; this.expression(); - this.state = 2336; + this.state = 2337; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2332; - this.match(ImpalaSqlParser.COMMA); this.state = 2333; + this.match(ImpalaSqlParser.COMMA); + this.state = 2334; this.expression(); } } - this.state = 2338; + this.state = 2339; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2351; + this.state = 2352; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 139) { { - this.state = 2341; - this.match(ImpalaSqlParser.KW_ORDER); this.state = 2342; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_ORDER); this.state = 2343; + this.match(ImpalaSqlParser.KW_BY); + this.state = 2344; this.sortItem(); - this.state = 2348; + this.state = 2349; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2344; - this.match(ImpalaSqlParser.COMMA); this.state = 2345; + this.match(ImpalaSqlParser.COMMA); + this.state = 2346; this.sortItem(); } } - this.state = 2350; + this.state = 2351; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2353; + this.state = 2354; this.match(ImpalaSqlParser.RPAREN); - this.state = 2355; + this.state = 2356; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 302, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 303, this.context) ) { case 1: { - this.state = 2354; + this.state = 2355; this.filter(); } break; } - this.state = 2358; + this.state = 2359; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 303, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 304, this.context) ) { case 1: { - this.state = 2357; + this.state = 2358; this.over(); } break; @@ -10812,11 +10856,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LambdaContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2360; - this.identifier(); this.state = 2361; - this.match(ImpalaSqlParser.RIGHT_ARROW); + this.identifier(); this.state = 2362; + this.match(ImpalaSqlParser.RIGHT_ARROW); + this.state = 2363; this.expression(); } break; @@ -10825,39 +10869,39 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new LambdaContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2364; + this.state = 2365; this.match(ImpalaSqlParser.LPAREN); - this.state = 2373; + this.state = 2374; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 2365; + this.state = 2366; this.identifier(); - this.state = 2370; + this.state = 2371; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2366; - this.match(ImpalaSqlParser.COMMA); this.state = 2367; + this.match(ImpalaSqlParser.COMMA); + this.state = 2368; this.identifier(); } } - this.state = 2372; + this.state = 2373; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2375; - this.match(ImpalaSqlParser.RPAREN); this.state = 2376; - this.match(ImpalaSqlParser.RIGHT_ARROW); + this.match(ImpalaSqlParser.RPAREN); this.state = 2377; + this.match(ImpalaSqlParser.RIGHT_ARROW); + this.state = 2378; this.expression(); } break; @@ -10866,11 +10910,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SubqueryExpressionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2378; - this.match(ImpalaSqlParser.LPAREN); this.state = 2379; - this.queryStatement(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2380; + this.queryStatement(); + this.state = 2381; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10879,13 +10923,13 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ExistsContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2382; - this.match(ImpalaSqlParser.KW_EXISTS); this.state = 2383; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_EXISTS); this.state = 2384; - this.queryStatement(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2385; + this.queryStatement(); + this.state = 2386; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10894,37 +10938,37 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SimpleCaseContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2387; - this.match(ImpalaSqlParser.KW_CASE); this.state = 2388; + this.match(ImpalaSqlParser.KW_CASE); + this.state = 2389; this.valueExpression(0); - this.state = 2390; + this.state = 2391; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 2389; + this.state = 2390; this.whenClause(); } } - this.state = 2392; + this.state = 2393; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 214); - this.state = 2396; + this.state = 2397; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 2394; - this.match(ImpalaSqlParser.KW_ELSE); this.state = 2395; + this.match(ImpalaSqlParser.KW_ELSE); + this.state = 2396; (localContext as SimpleCaseContext)._elseExpression = this.expression(); } } - this.state = 2398; + this.state = 2399; this.match(ImpalaSqlParser.KW_END); } break; @@ -10933,35 +10977,35 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SearchedCaseContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2400; + this.state = 2401; this.match(ImpalaSqlParser.KW_CASE); - this.state = 2402; + this.state = 2403; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 2401; + this.state = 2402; this.whenClause(); } } - this.state = 2404; + this.state = 2405; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 214); - this.state = 2408; + this.state = 2409; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 59) { { - this.state = 2406; - this.match(ImpalaSqlParser.KW_ELSE); this.state = 2407; + this.match(ImpalaSqlParser.KW_ELSE); + this.state = 2408; (localContext as SearchedCaseContext)._elseExpression = this.expression(); } } - this.state = 2410; + this.state = 2411; this.match(ImpalaSqlParser.KW_END); } break; @@ -10970,17 +11014,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CastContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2412; - this.match(ImpalaSqlParser.KW_CAST); this.state = 2413; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_CAST); this.state = 2414; - this.expression(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2415; - this.match(ImpalaSqlParser.KW_AS); + this.expression(); this.state = 2416; - this.type_(0); + this.match(ImpalaSqlParser.KW_AS); this.state = 2417; + this.type_(0); + this.state = 2418; this.match(ImpalaSqlParser.RPAREN); } break; @@ -10989,17 +11033,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CastContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2419; - this.match(ImpalaSqlParser.KW_TRY_CAST); this.state = 2420; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_TRY_CAST); this.state = 2421; - this.expression(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2422; - this.match(ImpalaSqlParser.KW_AS); + this.expression(); this.state = 2423; - this.type_(0); + this.match(ImpalaSqlParser.KW_AS); this.state = 2424; + this.type_(0); + this.state = 2425; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11008,37 +11052,37 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ArrayConstructorContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2426; - this.match(ImpalaSqlParser.KW_ARRAY); this.state = 2427; + this.match(ImpalaSqlParser.KW_ARRAY); + this.state = 2428; this.match(ImpalaSqlParser.LSQUARE); - this.state = 2436; + this.state = 2437; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805323008) !== 0) || ((((_la - 40)) & ~0x1F) === 0 && ((1 << (_la - 40)) & 1442841375) !== 0) || ((((_la - 88)) & ~0x1F) === 0 && ((1 << (_la - 88)) & 2218795145) !== 0) || ((((_la - 120)) & ~0x1F) === 0 && ((1 << (_la - 120)) & 269631421) !== 0) || ((((_la - 152)) & ~0x1F) === 0 && ((1 << (_la - 152)) & 271654979) !== 0) || ((((_la - 184)) & ~0x1F) === 0 && ((1 << (_la - 184)) & 537926659) !== 0) || ((((_la - 217)) & ~0x1F) === 0 && ((1 << (_la - 217)) & 16393) !== 0) || ((((_la - 255)) & ~0x1F) === 0 && ((1 << (_la - 255)) & 2549744643) !== 0)) { { - this.state = 2428; + this.state = 2429; this.expression(); - this.state = 2433; + this.state = 2434; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2429; - this.match(ImpalaSqlParser.COMMA); this.state = 2430; + this.match(ImpalaSqlParser.COMMA); + this.state = 2431; this.expression(); } } - this.state = 2435; + this.state = 2436; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2438; + this.state = 2439; this.match(ImpalaSqlParser.RSQUARE); } break; @@ -11047,7 +11091,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ColumnReferenceContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2439; + this.state = 2440; this.identifier(); } break; @@ -11056,7 +11100,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2440; + this.state = 2441; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_DATE); } break; @@ -11065,18 +11109,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2441; + this.state = 2442; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_TIME); - this.state = 2445; + this.state = 2446; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 312, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 313, this.context) ) { case 1: { - this.state = 2442; - this.match(ImpalaSqlParser.LPAREN); this.state = 2443; - (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.match(ImpalaSqlParser.LPAREN); this.state = 2444; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.state = 2445; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11088,18 +11132,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2447; + this.state = 2448; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_TIMESTAMP); - this.state = 2451; + this.state = 2452; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 313, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 314, this.context) ) { case 1: { - this.state = 2448; - this.match(ImpalaSqlParser.LPAREN); this.state = 2449; - (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.match(ImpalaSqlParser.LPAREN); this.state = 2450; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.state = 2451; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11111,18 +11155,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2453; + this.state = 2454; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_LOCALTIME); - this.state = 2457; + this.state = 2458; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 314, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 315, this.context) ) { case 1: { - this.state = 2454; - this.match(ImpalaSqlParser.LPAREN); this.state = 2455; - (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.match(ImpalaSqlParser.LPAREN); this.state = 2456; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.state = 2457; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11134,18 +11178,18 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SpecialDateTimeFunctionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2459; + this.state = 2460; (localContext as SpecialDateTimeFunctionContext)._name = this.match(ImpalaSqlParser.KW_LOCALTIMESTAMP); - this.state = 2463; + this.state = 2464; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 315, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 316, this.context) ) { case 1: { - this.state = 2460; - this.match(ImpalaSqlParser.LPAREN); this.state = 2461; - (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.match(ImpalaSqlParser.LPAREN); this.state = 2462; + (localContext as SpecialDateTimeFunctionContext)._precision = this.match(ImpalaSqlParser.INTEGER_VALUE); + this.state = 2463; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11157,7 +11201,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CurrentUserContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2465; + this.state = 2466; (localContext as CurrentUserContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_USER); } break; @@ -11166,7 +11210,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CurrentPathContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2466; + this.state = 2467; (localContext as CurrentPathContext)._name = this.match(ImpalaSqlParser.KW_CURRENT_PATH); } break; @@ -11175,29 +11219,29 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new SubstringContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2467; - this.match(ImpalaSqlParser.KW_SUBSTRING); this.state = 2468; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_SUBSTRING); this.state = 2469; - this.valueExpression(0); + this.match(ImpalaSqlParser.LPAREN); this.state = 2470; - this.match(ImpalaSqlParser.KW_FROM); + this.valueExpression(0); this.state = 2471; + this.match(ImpalaSqlParser.KW_FROM); + this.state = 2472; this.valueExpression(0); - this.state = 2474; + this.state = 2475; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 78) { { - this.state = 2472; - this.match(ImpalaSqlParser.KW_FOR); this.state = 2473; + this.match(ImpalaSqlParser.KW_FOR); + this.state = 2474; this.valueExpression(0); } } - this.state = 2476; + this.state = 2477; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11206,25 +11250,25 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new NormalizeContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2478; - this.match(ImpalaSqlParser.KW_NORMALIZE); this.state = 2479; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_NORMALIZE); this.state = 2480; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2481; this.valueExpression(0); - this.state = 2483; + this.state = 2484; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 263) { { - this.state = 2481; - this.match(ImpalaSqlParser.COMMA); this.state = 2482; + this.match(ImpalaSqlParser.COMMA); + this.state = 2483; this.normalForm(); } } - this.state = 2485; + this.state = 2486; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11233,17 +11277,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ExtractContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2487; - this.match(ImpalaSqlParser.KW_EXTRACT); this.state = 2488; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_EXTRACT); this.state = 2489; - this.identifier(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2490; - this.match(ImpalaSqlParser.KW_FROM); + this.identifier(); this.state = 2491; - this.valueExpression(0); + this.match(ImpalaSqlParser.KW_FROM); this.state = 2492; + this.valueExpression(0); + this.state = 2493; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11252,11 +11296,11 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new ParenthesizedExpressionContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2494; - this.match(ImpalaSqlParser.LPAREN); this.state = 2495; - this.expression(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2496; + this.expression(); + this.state = 2497; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11265,45 +11309,45 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new GroupingOperationContext(localContext); this.context = localContext; previousContext = localContext; - this.state = 2498; - this.match(ImpalaSqlParser.KW_GROUPING); this.state = 2499; + this.match(ImpalaSqlParser.KW_GROUPING); + this.state = 2500; this.match(ImpalaSqlParser.LPAREN); - this.state = 2508; + this.state = 2509; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0) || ((((_la - 274)) & ~0x1F) === 0 && ((1 << (_la - 274)) & 705) !== 0)) { { - this.state = 2500; + this.state = 2501; this.qualifiedName(); - this.state = 2505; + this.state = 2506; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2501; - this.match(ImpalaSqlParser.COMMA); this.state = 2502; + this.match(ImpalaSqlParser.COMMA); + this.state = 2503; this.qualifiedName(); } } - this.state = 2507; + this.state = 2508; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2510; + this.state = 2511; this.match(ImpalaSqlParser.RPAREN); } break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2523; + this.state = 2524; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 322, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 323, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -11311,23 +11355,23 @@ export class ImpalaSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 2521; + this.state = 2522; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 321, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 322, this.context) ) { case 1: { localContext = new SubscriptContext(new PrimaryExpressionContext(parentContext, parentState)); (localContext as SubscriptContext)._value = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_primaryExpression); - this.state = 2513; + this.state = 2514; if (!(this.precpred(this.context, 15))) { throw this.createFailedPredicateException("this.precpred(this.context, 15)"); } - this.state = 2514; - this.match(ImpalaSqlParser.LSQUARE); this.state = 2515; - (localContext as SubscriptContext)._index = this.valueExpression(0); + this.match(ImpalaSqlParser.LSQUARE); this.state = 2516; + (localContext as SubscriptContext)._index = this.valueExpression(0); + this.state = 2517; this.match(ImpalaSqlParser.RSQUARE); } break; @@ -11336,22 +11380,22 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DereferenceContext(new PrimaryExpressionContext(parentContext, parentState)); (localContext as DereferenceContext)._base = previousContext; this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_primaryExpression); - this.state = 2518; + this.state = 2519; if (!(this.precpred(this.context, 13))) { throw this.createFailedPredicateException("this.precpred(this.context, 13)"); } - this.state = 2519; - this.match(ImpalaSqlParser.DOT); this.state = 2520; + this.match(ImpalaSqlParser.DOT); + this.state = 2521; (localContext as DereferenceContext)._fieldName = this.identifier(); } break; } } } - this.state = 2525; + this.state = 2526; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 322, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 323, this.context); } } } @@ -11371,16 +11415,16 @@ export class ImpalaSqlParser extends SQLParserBase { } public stringLiteral(): StringLiteralContext { let localContext = new StringLiteralContext(this.context, this.state); - this.enterRule(localContext, 314, ImpalaSqlParser.RULE_stringLiteral); + this.enterRule(localContext, 318, ImpalaSqlParser.RULE_stringLiteral); try { - this.state = 2532; + this.state = 2533; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.STRING: localContext = new BasicStringLiteralContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2526; + this.state = 2527; this.match(ImpalaSqlParser.STRING); } break; @@ -11388,16 +11432,16 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnicodeStringLiteralContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2527; + this.state = 2528; this.match(ImpalaSqlParser.UNICODE_STRING); - this.state = 2530; + this.state = 2531; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 323, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 324, this.context) ) { case 1: { - this.state = 2528; - this.match(ImpalaSqlParser.KW_UESCAPE); this.state = 2529; + this.match(ImpalaSqlParser.KW_UESCAPE); + this.state = 2530; this.match(ImpalaSqlParser.STRING); } break; @@ -11424,12 +11468,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public comparisonOperator(): ComparisonOperatorContext { let localContext = new ComparisonOperatorContext(this.context, this.state); - this.enterRule(localContext, 316, ImpalaSqlParser.RULE_comparisonOperator); + this.enterRule(localContext, 320, ImpalaSqlParser.RULE_comparisonOperator); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2534; + this.state = 2535; _la = this.tokenStream.LA(1); if(!(((((_la - 249)) & ~0x1F) === 0 && ((1 << (_la - 249)) & 63) !== 0))) { this.errorHandler.recoverInline(this); @@ -11456,12 +11500,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public comparisonQuantifier(): ComparisonQuantifierContext { let localContext = new ComparisonQuantifierContext(this.context, this.state); - this.enterRule(localContext, 318, ImpalaSqlParser.RULE_comparisonQuantifier); + this.enterRule(localContext, 322, ImpalaSqlParser.RULE_comparisonQuantifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2536; + this.state = 2537; _la = this.tokenStream.LA(1); if(!(_la === 2 || _la === 6 || _la === 181)) { this.errorHandler.recoverInline(this); @@ -11488,12 +11532,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public booleanValue(): BooleanValueContext { let localContext = new BooleanValueContext(this.context, this.state); - this.enterRule(localContext, 320, ImpalaSqlParser.RULE_booleanValue); + this.enterRule(localContext, 324, ImpalaSqlParser.RULE_booleanValue); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2538; + this.state = 2539; _la = this.tokenStream.LA(1); if(!(_la === 70 || _la === 194)) { this.errorHandler.recoverInline(this); @@ -11520,56 +11564,56 @@ export class ImpalaSqlParser extends SQLParserBase { } public interval(): IntervalContext { let localContext = new IntervalContext(this.context, this.state); - this.enterRule(localContext, 322, ImpalaSqlParser.RULE_interval); + this.enterRule(localContext, 326, ImpalaSqlParser.RULE_interval); try { - this.state = 2554; + this.state = 2555; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 325, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 326, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2540; - this.match(ImpalaSqlParser.INTEGER_VALUE); this.state = 2541; + this.match(ImpalaSqlParser.INTEGER_VALUE); + this.state = 2542; this.intervalField(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2542; - this.match(ImpalaSqlParser.LPAREN); this.state = 2543; - this.match(ImpalaSqlParser.INTEGER_VALUE); + this.match(ImpalaSqlParser.LPAREN); this.state = 2544; - this.match(ImpalaSqlParser.RPAREN); + this.match(ImpalaSqlParser.INTEGER_VALUE); this.state = 2545; + this.match(ImpalaSqlParser.RPAREN); + this.state = 2546; this.intervalField(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2546; - this.match(ImpalaSqlParser.KW_INTERVAL); this.state = 2547; - this.match(ImpalaSqlParser.INTEGER_VALUE); + this.match(ImpalaSqlParser.KW_INTERVAL); this.state = 2548; + this.match(ImpalaSqlParser.INTEGER_VALUE); + this.state = 2549; this.intervalField(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2549; - this.match(ImpalaSqlParser.KW_INTERVAL); this.state = 2550; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_INTERVAL); this.state = 2551; - this.match(ImpalaSqlParser.INTEGER_VALUE); + this.match(ImpalaSqlParser.LPAREN); this.state = 2552; - this.match(ImpalaSqlParser.RPAREN); + this.match(ImpalaSqlParser.INTEGER_VALUE); this.state = 2553; + this.match(ImpalaSqlParser.RPAREN); + this.state = 2554; this.intervalField(); } break; @@ -11591,12 +11635,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public intervalField(): IntervalFieldContext { let localContext = new IntervalFieldContext(this.context, this.state); - this.enterRule(localContext, 324, ImpalaSqlParser.RULE_intervalField); + this.enterRule(localContext, 328, ImpalaSqlParser.RULE_intervalField); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2556; + this.state = 2557; _la = this.tokenStream.LA(1); if(!(_la === 48 || _la === 49 || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2147483651) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 7) !== 0) || _la === 172 || _la === 173 || _la === 217 || _la === 218)) { this.errorHandler.recoverInline(this); @@ -11623,12 +11667,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public normalForm(): NormalFormContext { let localContext = new NormalFormContext(this.context, this.state); - this.enterRule(localContext, 326, ImpalaSqlParser.RULE_normalForm); + this.enterRule(localContext, 330, ImpalaSqlParser.RULE_normalForm); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2558; + this.state = 2559; _la = this.tokenStream.LA(1); if(!(((((_la - 127)) & ~0x1F) === 0 && ((1 << (_la - 127)) & 15) !== 0))) { this.errorHandler.recoverInline(this); @@ -11665,120 +11709,120 @@ export class ImpalaSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new TypeContext(this.context, parentState); let previousContext = localContext; - let _startState = 328; - this.enterRecursionRule(localContext, 328, ImpalaSqlParser.RULE_type, _p); + let _startState = 332; + this.enterRecursionRule(localContext, 332, ImpalaSqlParser.RULE_type, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2605; + this.state = 2606; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 330, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 331, this.context) ) { case 1: { - this.state = 2561; - this.match(ImpalaSqlParser.KW_ARRAY); this.state = 2562; - this.match(ImpalaSqlParser.LT); + this.match(ImpalaSqlParser.KW_ARRAY); this.state = 2563; - this.type_(0); + this.match(ImpalaSqlParser.LT); this.state = 2564; + this.type_(0); + this.state = 2565; this.match(ImpalaSqlParser.GT); } break; case 2: { - this.state = 2566; - this.match(ImpalaSqlParser.KW_MAP); this.state = 2567; - this.match(ImpalaSqlParser.LT); + this.match(ImpalaSqlParser.KW_MAP); this.state = 2568; - this.type_(0); + this.match(ImpalaSqlParser.LT); this.state = 2569; - this.match(ImpalaSqlParser.COMMA); - this.state = 2570; this.type_(0); + this.state = 2570; + this.match(ImpalaSqlParser.COMMA); this.state = 2571; + this.type_(0); + this.state = 2572; this.match(ImpalaSqlParser.GT); } break; case 3: { - this.state = 2573; - this.match(ImpalaSqlParser.KW_STRUCT); this.state = 2574; - this.match(ImpalaSqlParser.LT); + this.match(ImpalaSqlParser.KW_STRUCT); this.state = 2575; - this.identifier(); + this.match(ImpalaSqlParser.LT); this.state = 2576; + this.identifier(); + this.state = 2577; this.type_(0); - this.state = 2583; + this.state = 2584; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2577; - this.match(ImpalaSqlParser.COMMA); this.state = 2578; - this.identifier(); + this.match(ImpalaSqlParser.COMMA); this.state = 2579; + this.identifier(); + this.state = 2580; this.type_(0); } } - this.state = 2585; + this.state = 2586; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2586; + this.state = 2587; this.match(ImpalaSqlParser.GT); } break; case 4: { - this.state = 2590; + this.state = 2591; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 327, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 328, this.context) ) { case 1: { - this.state = 2588; + this.state = 2589; this.baseType(); } break; case 2: { - this.state = 2589; + this.state = 2590; this.dataType(); } break; } - this.state = 2603; + this.state = 2604; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 329, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 330, this.context) ) { case 1: { - this.state = 2592; - this.match(ImpalaSqlParser.LPAREN); this.state = 2593; + this.match(ImpalaSqlParser.LPAREN); + this.state = 2594; this.typeParameter(); - this.state = 2598; + this.state = 2599; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2594; - this.match(ImpalaSqlParser.COMMA); this.state = 2595; + this.match(ImpalaSqlParser.COMMA); + this.state = 2596; this.typeParameter(); } } - this.state = 2600; + this.state = 2601; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2601; + this.state = 2602; this.match(ImpalaSqlParser.RPAREN); } break; @@ -11787,9 +11831,9 @@ export class ImpalaSqlParser extends SQLParserBase { break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2611; + this.state = 2612; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 331, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 332, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -11800,18 +11844,18 @@ export class ImpalaSqlParser extends SQLParserBase { { localContext = new TypeContext(parentContext, parentState); this.pushNewRecursionContext(localContext, _startState, ImpalaSqlParser.RULE_type); - this.state = 2607; + this.state = 2608; if (!(this.precpred(this.context, 5))) { throw this.createFailedPredicateException("this.precpred(this.context, 5)"); } - this.state = 2608; + this.state = 2609; this.match(ImpalaSqlParser.KW_ARRAY); } } } - this.state = 2613; + this.state = 2614; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 331, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 332, this.context); } } } @@ -11831,12 +11875,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public dataType(): DataTypeContext { let localContext = new DataTypeContext(this.context, this.state); - this.enterRule(localContext, 330, ImpalaSqlParser.RULE_dataType); + this.enterRule(localContext, 334, ImpalaSqlParser.RULE_dataType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2614; + this.state = 2615; _la = this.tokenStream.LA(1); if(!(_la === 8 || ((((_la - 227)) & ~0x1F) === 0 && ((1 << (_la - 227)) & 262143) !== 0))) { this.errorHandler.recoverInline(this); @@ -11863,15 +11907,15 @@ export class ImpalaSqlParser extends SQLParserBase { } public typeParameter(): TypeParameterContext { let localContext = new TypeParameterContext(this.context, this.state); - this.enterRule(localContext, 332, ImpalaSqlParser.RULE_typeParameter); + this.enterRule(localContext, 336, ImpalaSqlParser.RULE_typeParameter); try { - this.state = 2618; + this.state = 2619; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.INTEGER_VALUE: this.enterOuterAlt(localContext, 1); { - this.state = 2616; + this.state = 2617; this.match(ImpalaSqlParser.INTEGER_VALUE); } break; @@ -11936,7 +11980,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 2); { - this.state = 2617; + this.state = 2618; this.type_(0); } break; @@ -11960,29 +12004,29 @@ export class ImpalaSqlParser extends SQLParserBase { } public baseType(): BaseTypeContext { let localContext = new BaseTypeContext(this.context, this.state); - this.enterRule(localContext, 334, ImpalaSqlParser.RULE_baseType); + this.enterRule(localContext, 338, ImpalaSqlParser.RULE_baseType); try { - this.state = 2624; + this.state = 2625; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.TIME_WITH_TIME_ZONE: this.enterOuterAlt(localContext, 1); { - this.state = 2620; + this.state = 2621; this.match(ImpalaSqlParser.TIME_WITH_TIME_ZONE); } break; case ImpalaSqlParser.TIMESTAMP_WITH_TIME_ZONE: this.enterOuterAlt(localContext, 2); { - this.state = 2621; + this.state = 2622; this.match(ImpalaSqlParser.TIMESTAMP_WITH_TIME_ZONE); } break; case ImpalaSqlParser.DOUBLE_PRECISION: this.enterOuterAlt(localContext, 3); { - this.state = 2622; + this.state = 2623; this.match(ImpalaSqlParser.DOUBLE_PRECISION); } break; @@ -12026,7 +12070,7 @@ export class ImpalaSqlParser extends SQLParserBase { case ImpalaSqlParser.BACKQUOTED_IDENTIFIER: this.enterOuterAlt(localContext, 4); { - this.state = 2623; + this.state = 2624; this.identifier(); } break; @@ -12050,17 +12094,17 @@ export class ImpalaSqlParser extends SQLParserBase { } public whenClause(): WhenClauseContext { let localContext = new WhenClauseContext(this.context, this.state); - this.enterRule(localContext, 336, ImpalaSqlParser.RULE_whenClause); + this.enterRule(localContext, 340, ImpalaSqlParser.RULE_whenClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 2626; - this.match(ImpalaSqlParser.KW_WHEN); this.state = 2627; - localContext._condition = this.expression(); + this.match(ImpalaSqlParser.KW_WHEN); this.state = 2628; - this.match(ImpalaSqlParser.KW_THEN); + localContext._condition = this.expression(); this.state = 2629; + this.match(ImpalaSqlParser.KW_THEN); + this.state = 2630; localContext._result = this.expression(); } } @@ -12080,19 +12124,19 @@ export class ImpalaSqlParser extends SQLParserBase { } public filter(): FilterContext { let localContext = new FilterContext(this.context, this.state); - this.enterRule(localContext, 338, ImpalaSqlParser.RULE_filter); + this.enterRule(localContext, 342, ImpalaSqlParser.RULE_filter); try { this.enterOuterAlt(localContext, 1); { - this.state = 2631; - this.match(ImpalaSqlParser.KW_FILTER); this.state = 2632; - this.match(ImpalaSqlParser.LPAREN); + this.match(ImpalaSqlParser.KW_FILTER); this.state = 2633; - this.match(ImpalaSqlParser.KW_WHERE); + this.match(ImpalaSqlParser.LPAREN); this.state = 2634; - this.booleanExpression(0); + this.match(ImpalaSqlParser.KW_WHERE); this.state = 2635; + this.booleanExpression(0); + this.state = 2636; this.match(ImpalaSqlParser.RPAREN); } } @@ -12112,88 +12156,88 @@ export class ImpalaSqlParser extends SQLParserBase { } public over(): OverContext { let localContext = new OverContext(this.context, this.state); - this.enterRule(localContext, 340, ImpalaSqlParser.RULE_over); + this.enterRule(localContext, 344, ImpalaSqlParser.RULE_over); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2637; - this.match(ImpalaSqlParser.KW_OVER); this.state = 2638; + this.match(ImpalaSqlParser.KW_OVER); + this.state = 2639; this.match(ImpalaSqlParser.LPAREN); - this.state = 2649; + this.state = 2650; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 145) { { - this.state = 2639; - this.match(ImpalaSqlParser.KW_PARTITION); this.state = 2640; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_PARTITION); this.state = 2641; + this.match(ImpalaSqlParser.KW_BY); + this.state = 2642; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); - this.state = 2646; + this.state = 2647; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2642; - this.match(ImpalaSqlParser.COMMA); this.state = 2643; + this.match(ImpalaSqlParser.COMMA); + this.state = 2644; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); } } - this.state = 2648; + this.state = 2649; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2661; + this.state = 2662; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 139) { { - this.state = 2651; - this.match(ImpalaSqlParser.KW_ORDER); this.state = 2652; - this.match(ImpalaSqlParser.KW_BY); + this.match(ImpalaSqlParser.KW_ORDER); this.state = 2653; + this.match(ImpalaSqlParser.KW_BY); + this.state = 2654; this.sortItem(); - this.state = 2658; + this.state = 2659; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2654; - this.match(ImpalaSqlParser.COMMA); this.state = 2655; + this.match(ImpalaSqlParser.COMMA); + this.state = 2656; this.sortItem(); } } - this.state = 2660; + this.state = 2661; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2664; + this.state = 2665; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 154 || _la === 169) { { - this.state = 2663; + this.state = 2664; this.windowFrame(); } } - this.state = 2666; + this.state = 2667; this.match(ImpalaSqlParser.RPAREN); } } @@ -12213,56 +12257,56 @@ export class ImpalaSqlParser extends SQLParserBase { } public windowFrame(): WindowFrameContext { let localContext = new WindowFrameContext(this.context, this.state); - this.enterRule(localContext, 342, ImpalaSqlParser.RULE_windowFrame); + this.enterRule(localContext, 346, ImpalaSqlParser.RULE_windowFrame); try { - this.state = 2684; + this.state = 2685; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 339, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 340, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2668; - localContext._frameType = this.match(ImpalaSqlParser.KW_RANGE); this.state = 2669; + localContext._frameType = this.match(ImpalaSqlParser.KW_RANGE); + this.state = 2670; localContext._start_ = this.frameBound(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2670; - localContext._frameType = this.match(ImpalaSqlParser.KW_ROWS); this.state = 2671; + localContext._frameType = this.match(ImpalaSqlParser.KW_ROWS); + this.state = 2672; localContext._start_ = this.frameBound(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2672; - localContext._frameType = this.match(ImpalaSqlParser.KW_RANGE); this.state = 2673; - this.match(ImpalaSqlParser.KW_BETWEEN); + localContext._frameType = this.match(ImpalaSqlParser.KW_RANGE); this.state = 2674; - localContext._start_ = this.frameBound(); + this.match(ImpalaSqlParser.KW_BETWEEN); this.state = 2675; - this.match(ImpalaSqlParser.KW_AND); + localContext._start_ = this.frameBound(); this.state = 2676; + this.match(ImpalaSqlParser.KW_AND); + this.state = 2677; localContext._end = this.frameBound(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2678; - localContext._frameType = this.match(ImpalaSqlParser.KW_ROWS); this.state = 2679; - this.match(ImpalaSqlParser.KW_BETWEEN); + localContext._frameType = this.match(ImpalaSqlParser.KW_ROWS); this.state = 2680; - localContext._start_ = this.frameBound(); + this.match(ImpalaSqlParser.KW_BETWEEN); this.state = 2681; - this.match(ImpalaSqlParser.KW_AND); + localContext._start_ = this.frameBound(); this.state = 2682; + this.match(ImpalaSqlParser.KW_AND); + this.state = 2683; localContext._end = this.frameBound(); } break; @@ -12284,19 +12328,19 @@ export class ImpalaSqlParser extends SQLParserBase { } public frameBound(): FrameBoundContext { let localContext = new FrameBoundContext(this.context, this.state); - this.enterRule(localContext, 344, ImpalaSqlParser.RULE_frameBound); + this.enterRule(localContext, 348, ImpalaSqlParser.RULE_frameBound); let _la: number; try { - this.state = 2695; + this.state = 2696; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 340, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 341, this.context) ) { case 1: localContext = new UnboundedFrameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2686; - this.match(ImpalaSqlParser.KW_UNBOUNDED); this.state = 2687; + this.match(ImpalaSqlParser.KW_UNBOUNDED); + this.state = 2688; (localContext as UnboundedFrameContext)._boundType = this.match(ImpalaSqlParser.KW_PRECEDING); } break; @@ -12304,9 +12348,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnboundedFrameContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2688; - this.match(ImpalaSqlParser.KW_UNBOUNDED); this.state = 2689; + this.match(ImpalaSqlParser.KW_UNBOUNDED); + this.state = 2690; (localContext as UnboundedFrameContext)._boundType = this.match(ImpalaSqlParser.KW_FOLLOWING); } break; @@ -12314,9 +12358,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new CurrentRowBoundContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2690; - this.match(ImpalaSqlParser.KW_CURRENT); this.state = 2691; + this.match(ImpalaSqlParser.KW_CURRENT); + this.state = 2692; this.match(ImpalaSqlParser.KW_ROW); } break; @@ -12324,9 +12368,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BoundedFrameContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 2692; - this.expression(); this.state = 2693; + this.expression(); + this.state = 2694; (localContext as BoundedFrameContext)._boundType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 77 || _la === 149)) { @@ -12356,20 +12400,20 @@ export class ImpalaSqlParser extends SQLParserBase { } public pathElement(): PathElementContext { let localContext = new PathElementContext(this.context, this.state); - this.enterRule(localContext, 346, ImpalaSqlParser.RULE_pathElement); + this.enterRule(localContext, 350, ImpalaSqlParser.RULE_pathElement); try { - this.state = 2702; + this.state = 2703; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 341, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 342, this.context) ) { case 1: localContext = new QualifiedArgumentContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2697; - this.identifier(); this.state = 2698; - this.match(ImpalaSqlParser.DOT); + this.identifier(); this.state = 2699; + this.match(ImpalaSqlParser.DOT); + this.state = 2700; this.identifier(); } break; @@ -12377,7 +12421,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnqualifiedArgumentContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2701; + this.state = 2702; this.identifier(); } break; @@ -12399,26 +12443,26 @@ export class ImpalaSqlParser extends SQLParserBase { } public pathSpecification(): PathSpecificationContext { let localContext = new PathSpecificationContext(this.context, this.state); - this.enterRule(localContext, 348, ImpalaSqlParser.RULE_pathSpecification); + this.enterRule(localContext, 352, ImpalaSqlParser.RULE_pathSpecification); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2704; + this.state = 2705; this.pathElement(); - this.state = 2709; + this.state = 2710; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 263) { { { - this.state = 2705; - this.match(ImpalaSqlParser.COMMA); this.state = 2706; + this.match(ImpalaSqlParser.COMMA); + this.state = 2707; this.pathElement(); } } - this.state = 2711; + this.state = 2712; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -12440,69 +12484,69 @@ export class ImpalaSqlParser extends SQLParserBase { } public privilege(): PrivilegeContext { let localContext = new PrivilegeContext(this.context, this.state); - this.enterRule(localContext, 350, ImpalaSqlParser.RULE_privilege); + this.enterRule(localContext, 354, ImpalaSqlParser.RULE_privilege); let _la: number; try { - this.state = 2725; + this.state = 2726; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ALL: this.enterOuterAlt(localContext, 1); { - this.state = 2712; + this.state = 2713; this.match(ImpalaSqlParser.KW_ALL); } break; case ImpalaSqlParser.KW_ALTER: this.enterOuterAlt(localContext, 2); { - this.state = 2713; + this.state = 2714; this.match(ImpalaSqlParser.KW_ALTER); } break; case ImpalaSqlParser.KW_DROP: this.enterOuterAlt(localContext, 3); { - this.state = 2714; + this.state = 2715; this.match(ImpalaSqlParser.KW_DROP); } break; case ImpalaSqlParser.KW_CREATE: this.enterOuterAlt(localContext, 4); { - this.state = 2715; + this.state = 2716; this.match(ImpalaSqlParser.KW_CREATE); } break; case ImpalaSqlParser.KW_INSERT: this.enterOuterAlt(localContext, 5); { - this.state = 2716; + this.state = 2717; this.match(ImpalaSqlParser.KW_INSERT); } break; case ImpalaSqlParser.KW_REFRESH: this.enterOuterAlt(localContext, 6); { - this.state = 2717; + this.state = 2718; this.match(ImpalaSqlParser.KW_REFRESH); } break; case ImpalaSqlParser.KW_SELECT: this.enterOuterAlt(localContext, 7); { - this.state = 2718; + this.state = 2719; this.match(ImpalaSqlParser.KW_SELECT); - this.state = 2723; + this.state = 2724; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 265) { { - this.state = 2719; - this.match(ImpalaSqlParser.LPAREN); this.state = 2720; - localContext._columnName = this.identifier(); + this.match(ImpalaSqlParser.LPAREN); this.state = 2721; + localContext._columnName = this.identifier(); + this.state = 2722; this.match(ImpalaSqlParser.RPAREN); } } @@ -12529,12 +12573,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public objectType(): ObjectTypeContext { let localContext = new ObjectTypeContext(this.context, this.state); - this.enterRule(localContext, 352, ImpalaSqlParser.RULE_objectType); + this.enterRule(localContext, 356, ImpalaSqlParser.RULE_objectType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2727; + this.state = 2728; _la = this.tokenStream.LA(1); if(!(_la === 46 || ((((_la - 178)) & ~0x1F) === 0 && ((1 << (_la - 178)) & 2147484673) !== 0))) { this.errorHandler.recoverInline(this); @@ -12561,30 +12605,30 @@ export class ImpalaSqlParser extends SQLParserBase { } public qualifiedName(): QualifiedNameContext { let localContext = new QualifiedNameContext(this.context, this.state); - this.enterRule(localContext, 354, ImpalaSqlParser.RULE_qualifiedName); + this.enterRule(localContext, 358, ImpalaSqlParser.RULE_qualifiedName); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2729; + this.state = 2730; this.identifier(); - this.state = 2734; + this.state = 2735; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 345, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 346, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2730; - this.match(ImpalaSqlParser.DOT); this.state = 2731; + this.match(ImpalaSqlParser.DOT); + this.state = 2732; this.identifier(); } } } - this.state = 2736; + this.state = 2737; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 345, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 346, this.context); } } } @@ -12604,18 +12648,18 @@ export class ImpalaSqlParser extends SQLParserBase { } public principal(): PrincipalContext { let localContext = new PrincipalContext(this.context, this.state); - this.enterRule(localContext, 356, ImpalaSqlParser.RULE_principal); + this.enterRule(localContext, 360, ImpalaSqlParser.RULE_principal); try { - this.state = 2743; + this.state = 2744; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.KW_ROLE: localContext = new RolePrincipalContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2737; - this.match(ImpalaSqlParser.KW_ROLE); this.state = 2738; + this.match(ImpalaSqlParser.KW_ROLE); + this.state = 2739; this.identifier(); } break; @@ -12623,9 +12667,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UserPrincipalContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2739; - this.match(ImpalaSqlParser.KW_USER); this.state = 2740; + this.match(ImpalaSqlParser.KW_USER); + this.state = 2741; this.identifier(); } break; @@ -12633,9 +12677,9 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new GroupPrincipalContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2741; - this.match(ImpalaSqlParser.KW_GROUP); this.state = 2742; + this.match(ImpalaSqlParser.KW_GROUP); + this.state = 2743; this.identifier(); } break; @@ -12659,16 +12703,16 @@ export class ImpalaSqlParser extends SQLParserBase { } public identifier(): IdentifierContext { let localContext = new IdentifierContext(this.context, this.state); - this.enterRule(localContext, 358, ImpalaSqlParser.RULE_identifier); + this.enterRule(localContext, 362, ImpalaSqlParser.RULE_identifier); try { - this.state = 2750; + this.state = 2751; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case ImpalaSqlParser.IDENTIFIER: localContext = new UnquotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2745; + this.state = 2746; this.match(ImpalaSqlParser.IDENTIFIER); } break; @@ -12676,7 +12720,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new QuotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2746; + this.state = 2747; this.match(ImpalaSqlParser.STRING); } break; @@ -12717,7 +12761,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new UnquotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2747; + this.state = 2748; this.nonReserved(); } break; @@ -12725,7 +12769,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new BackQuotedIdentifierContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 2748; + this.state = 2749; this.match(ImpalaSqlParser.BACKQUOTED_IDENTIFIER); } break; @@ -12733,7 +12777,7 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DigitIdentifierContext(localContext); this.enterOuterAlt(localContext, 5); { - this.state = 2749; + this.state = 2750; this.match(ImpalaSqlParser.DIGIT_IDENTIFIER); } break; @@ -12757,27 +12801,27 @@ export class ImpalaSqlParser extends SQLParserBase { } public number_(): NumberContext { let localContext = new NumberContext(this.context, this.state); - this.enterRule(localContext, 360, ImpalaSqlParser.RULE_number); + this.enterRule(localContext, 364, ImpalaSqlParser.RULE_number); let _la: number; try { - this.state = 2764; + this.state = 2765; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 351, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 352, this.context) ) { case 1: localContext = new DecimalLiteralContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 2753; + this.state = 2754; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 256) { { - this.state = 2752; + this.state = 2753; this.match(ImpalaSqlParser.MINUS); } } - this.state = 2755; + this.state = 2756; this.match(ImpalaSqlParser.DECIMAL_VALUE); } break; @@ -12785,17 +12829,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new DoubleLiteralContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 2757; + this.state = 2758; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 256) { { - this.state = 2756; + this.state = 2757; this.match(ImpalaSqlParser.MINUS); } } - this.state = 2759; + this.state = 2760; this.match(ImpalaSqlParser.DOUBLE_VALUE); } break; @@ -12803,17 +12847,17 @@ export class ImpalaSqlParser extends SQLParserBase { localContext = new IntegerLiteralContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 2761; + this.state = 2762; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 256) { { - this.state = 2760; + this.state = 2761; this.match(ImpalaSqlParser.MINUS); } } - this.state = 2763; + this.state = 2764; this.match(ImpalaSqlParser.INTEGER_VALUE); } break; @@ -12835,12 +12879,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public reservedKeywordsUsedAsFuncName(): ReservedKeywordsUsedAsFuncNameContext { let localContext = new ReservedKeywordsUsedAsFuncNameContext(this.context, this.state); - this.enterRule(localContext, 362, ImpalaSqlParser.RULE_reservedKeywordsUsedAsFuncName); + this.enterRule(localContext, 366, ImpalaSqlParser.RULE_reservedKeywordsUsedAsFuncName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2766; + this.state = 2767; _la = this.tokenStream.LA(1); if(!(((((_la - 28)) & ~0x1F) === 0 && ((1 << (_la - 28)) & 1085443) !== 0) || _la === 68 || _la === 91 || ((((_la - 114)) & ~0x1F) === 0 && ((1 << (_la - 114)) & 1281) !== 0) || ((((_la - 158)) & ~0x1F) === 0 && ((1 << (_la - 158)) & 67125377) !== 0) || ((((_la - 196)) & ~0x1F) === 0 && ((1 << (_la - 196)) & 2097409) !== 0))) { this.errorHandler.recoverInline(this); @@ -12867,12 +12911,12 @@ export class ImpalaSqlParser extends SQLParserBase { } public nonReserved(): NonReservedContext { let localContext = new NonReservedContext(this.context, this.state); - this.enterRule(localContext, 364, ImpalaSqlParser.RULE_nonReserved); + this.enterRule(localContext, 368, ImpalaSqlParser.RULE_nonReserved); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2768; + this.state = 2769; _la = this.tokenStream.LA(1); if(!(_la === 14 || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & 37748835) !== 0) || ((((_la - 91)) & ~0x1F) === 0 && ((1 << (_la - 91)) & 2416443409) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 1610760439) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & 8401155) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & 134291969) !== 0))) { this.errorHandler.recoverInline(this); @@ -12902,17 +12946,17 @@ export class ImpalaSqlParser extends SQLParserBase { switch (ruleIndex) { case 96: return this.columnNamePath_sempred(localContext as ColumnNamePathContext, predIndex); - case 130: + case 132: return this.queryTerm_sempred(localContext as QueryTermContext, predIndex); - case 140: + case 142: return this.relation_sempred(localContext as RelationContext, predIndex); - case 153: - return this.booleanExpression_sempred(localContext as BooleanExpressionContext, predIndex); case 155: + return this.booleanExpression_sempred(localContext as BooleanExpressionContext, predIndex); + case 157: return this.valueExpression_sempred(localContext as ValueExpressionContext, predIndex); - case 156: + case 158: return this.primaryExpression_sempred(localContext as PrimaryExpressionContext, predIndex); - case 164: + case 166: return this.type_sempred(localContext as TypeContext, predIndex); } return true; @@ -12978,7 +13022,7 @@ export class ImpalaSqlParser extends SQLParserBase { } public static readonly _serializedATN: number[] = [ - 4,1,289,2771,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, + 4,1,289,2772,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, @@ -13008,1162 +13052,1163 @@ export class ImpalaSqlParser extends SQLParserBase { 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,1,0,5,0,368,8,0,10,0,12,0,371,9,0,1,0,1, - 0,1,1,1,1,3,1,377,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,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,401,8,2,1,3,1, - 3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,414,8,4,1,5,1,5,3,5,418, - 8,5,1,5,1,5,3,5,422,8,5,1,5,1,5,1,5,1,5,1,5,5,5,429,8,5,10,5,12, - 5,432,9,5,1,5,1,5,3,5,436,8,5,1,5,1,5,3,5,440,8,5,1,5,1,5,1,5,1, - 5,3,5,446,8,5,3,5,448,8,5,1,5,1,5,1,5,3,5,453,8,5,1,6,1,6,3,6,457, - 8,6,1,6,1,6,3,6,461,8,6,1,6,1,6,1,6,1,6,1,6,3,6,468,8,6,1,6,1,6, - 1,6,3,6,473,8,6,1,6,1,6,1,7,1,7,3,7,479,8,7,1,7,1,7,3,7,483,8,7, - 1,7,1,7,1,7,1,7,1,7,5,7,490,8,7,10,7,12,7,493,9,7,1,7,1,7,1,7,1, - 7,3,7,499,8,7,1,7,1,7,3,7,503,8,7,1,7,1,7,1,7,3,7,508,8,7,3,7,510, - 8,7,1,7,1,7,1,7,3,7,515,8,7,1,7,1,7,3,7,519,8,7,1,7,1,7,1,7,1,7, - 1,7,3,7,526,8,7,1,7,1,7,3,7,530,8,7,1,8,1,8,1,8,3,8,535,8,8,1,8, - 1,8,3,8,539,8,8,1,8,1,8,3,8,543,8,8,1,8,1,8,3,8,547,8,8,1,8,1,8, - 1,8,1,9,1,9,1,9,3,9,555,8,9,1,9,1,9,1,9,3,9,560,8,9,1,9,1,9,3,9, - 564,8,9,1,10,1,10,1,10,1,10,1,11,1,11,3,11,572,8,11,1,11,1,11,3, - 11,576,8,11,1,11,1,11,1,11,1,11,1,11,5,11,583,8,11,10,11,12,11,586, - 9,11,3,11,588,8,11,1,11,3,11,591,8,11,1,11,1,11,1,11,1,11,3,11,597, - 8,11,1,11,1,11,1,11,1,11,1,11,3,11,604,8,11,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,1,11,1,11,3,11,615,8,11,1,11,1,11,1,11,3,11,620,8, - 11,1,11,1,11,1,11,3,11,625,8,11,1,11,1,11,1,11,3,11,630,8,11,1,12, - 1,12,1,12,3,12,635,8,12,1,12,1,12,1,12,1,12,1,12,5,12,642,8,12,10, - 12,12,12,645,9,12,3,12,647,8,12,1,12,3,12,650,8,12,1,12,1,12,3,12, - 654,8,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13, + 2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,1,0,5,0,372,8,0, + 10,0,12,0,375,9,0,1,0,1,0,1,1,1,1,3,1,381,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,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1, + 2,1,2,3,2,405,8,2,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3, + 4,418,8,4,1,5,1,5,3,5,422,8,5,1,5,1,5,3,5,426,8,5,1,5,1,5,1,5,1, + 5,1,5,5,5,433,8,5,10,5,12,5,436,9,5,1,5,1,5,3,5,440,8,5,1,5,1,5, + 3,5,444,8,5,1,5,1,5,1,5,1,5,3,5,450,8,5,3,5,452,8,5,1,5,1,5,1,5, + 3,5,457,8,5,1,6,1,6,3,6,461,8,6,1,6,1,6,3,6,465,8,6,1,6,1,6,1,6, + 1,6,1,6,3,6,472,8,6,1,6,1,6,1,6,3,6,477,8,6,1,6,1,6,1,7,1,7,3,7, + 483,8,7,1,7,1,7,3,7,487,8,7,1,7,1,7,1,7,1,7,1,7,5,7,494,8,7,10,7, + 12,7,497,9,7,1,7,1,7,1,7,1,7,3,7,503,8,7,1,7,1,7,3,7,507,8,7,1,7, + 1,7,1,7,3,7,512,8,7,3,7,514,8,7,1,7,1,7,1,7,3,7,519,8,7,1,7,3,7, + 522,8,7,1,7,1,7,1,7,1,7,1,7,3,7,529,8,7,1,7,1,7,3,7,533,8,7,1,8, + 1,8,1,8,3,8,538,8,8,1,8,1,8,3,8,542,8,8,1,8,3,8,545,8,8,1,8,1,8, + 3,8,549,8,8,1,8,1,8,1,8,1,9,1,9,1,9,3,9,557,8,9,1,9,1,9,3,9,561, + 8,9,1,9,1,9,3,9,565,8,9,1,10,1,10,1,10,1,10,1,11,1,11,3,11,573,8, + 11,1,11,1,11,3,11,577,8,11,1,11,1,11,1,11,1,11,1,11,5,11,584,8,11, + 10,11,12,11,587,9,11,3,11,589,8,11,1,11,3,11,592,8,11,1,11,1,11, + 1,11,1,11,3,11,598,8,11,1,11,1,11,1,11,1,11,1,11,3,11,605,8,11,1, + 11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,616,8,11,1,11,1, + 11,1,11,3,11,621,8,11,1,11,1,11,1,11,3,11,626,8,11,1,11,1,11,1,11, + 3,11,631,8,11,1,12,1,12,1,12,3,12,636,8,12,1,12,1,12,1,12,1,12,1, + 12,5,12,643,8,12,10,12,12,12,646,9,12,3,12,648,8,12,1,12,3,12,651, + 8,12,1,12,1,12,3,12,655,8,12,1,12,1,12,1,12,1,12,1,12,1,12,1,13, 1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, - 3,13,680,8,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15, - 1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, - 1,15,3,15,706,8,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,3,16,715,8, - 16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,3,16,725,8,16,1,16,3, - 16,728,8,16,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1, - 18,1,18,3,18,742,8,18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,19,1, - 19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,3,20,760,8,20,3,20,762,8,20, - 1,20,1,20,1,20,1,20,1,20,5,20,769,8,20,10,20,12,20,772,9,20,1,20, - 1,20,1,21,1,21,1,21,1,21,1,21,1,21,3,21,782,8,21,1,21,1,21,1,22, - 1,22,1,22,1,22,1,22,3,22,791,8,22,1,22,1,22,1,22,1,22,1,22,3,22, - 798,8,22,1,22,1,22,3,22,802,8,22,1,23,1,23,1,23,1,23,1,23,3,23,809, - 8,23,1,23,1,23,1,23,1,23,3,23,815,8,23,1,23,3,23,818,8,23,1,23,1, - 23,1,23,3,23,823,8,23,1,24,1,24,1,24,1,24,1,24,3,24,830,8,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,844, - 8,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,3,26, - 857,8,26,1,26,1,26,1,26,3,26,862,8,26,1,26,1,26,1,26,3,26,867,8, - 26,1,27,1,27,1,27,1,27,3,27,873,8,27,1,27,1,27,1,27,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,29,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,32,1,32,3,32,909,8,32,1,32,3,32,912,8,32,1,32,1,32,1,33,1,33, - 3,33,918,8,33,1,33,3,33,921,8,33,1,33,1,33,1,34,1,34,3,34,927,8, - 34,1,35,1,35,1,35,1,35,3,35,933,8,35,1,35,1,35,1,35,1,35,1,35,1, - 35,1,35,1,35,1,35,1,35,3,35,945,8,35,3,35,947,8,35,1,36,1,36,1,36, - 1,36,1,36,1,36,1,36,1,36,1,36,3,36,958,8,36,1,37,1,37,1,37,1,37, - 1,37,1,37,3,37,966,8,37,1,38,1,38,1,38,3,38,971,8,38,1,38,1,38,3, - 38,975,8,38,1,39,1,39,1,39,3,39,980,8,39,1,39,1,39,1,40,1,40,1,40, - 3,40,987,8,40,1,40,1,40,3,40,991,8,40,1,41,1,41,3,41,995,8,41,1, - 41,1,41,1,41,1,41,3,41,1001,8,41,1,42,1,42,3,42,1005,8,42,1,42,1, - 42,3,42,1009,8,42,1,42,1,42,1,42,1,42,1,42,5,42,1016,8,42,10,42, - 12,42,1019,9,42,3,42,1021,8,42,1,42,3,42,1024,8,42,1,43,1,43,1,43, - 1,43,1,44,1,44,3,44,1032,8,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45, - 1,46,1,46,1,46,1,46,1,46,3,46,1046,8,46,1,46,1,46,1,46,1,47,1,47, - 3,47,1053,8,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49, - 1,49,3,49,1066,8,49,1,49,1,49,1,49,1,49,3,49,1072,8,49,1,49,1,49, - 1,49,3,49,1077,8,49,1,49,3,49,1080,8,49,1,50,3,50,1083,8,50,1,50, - 1,50,1,50,3,50,1088,8,50,1,50,1,50,3,50,1092,8,50,1,50,1,50,1,50, - 1,50,1,50,5,50,1099,8,50,10,50,12,50,1102,9,50,1,50,1,50,3,50,1106, - 8,50,1,50,1,50,1,51,1,51,3,51,1112,8,51,1,52,1,52,3,52,1116,8,52, - 1,52,1,52,1,52,3,52,1121,8,52,1,53,1,53,1,53,3,53,1126,8,53,1,53, - 3,53,1129,8,53,1,53,1,53,1,53,1,53,5,53,1135,8,53,10,53,12,53,1138, - 9,53,3,53,1140,8,53,1,53,1,53,3,53,1144,8,53,1,54,1,54,1,54,1,54, - 1,54,1,54,1,54,1,54,5,54,1154,8,54,10,54,12,54,1157,9,54,3,54,1159, - 8,54,1,54,1,54,3,54,1163,8,54,1,55,1,55,1,55,3,55,1168,8,55,1,55, - 1,55,3,55,1172,8,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56, - 1,56,1,56,1,56,1,56,1,56,3,56,1188,8,56,1,57,1,57,1,57,3,57,1193, - 8,57,1,57,1,57,1,57,5,57,1198,8,57,10,57,12,57,1201,9,57,3,57,1203, - 8,57,1,58,1,58,1,58,1,58,3,58,1209,8,58,1,58,3,58,1212,8,58,1,58, - 1,58,1,58,5,58,1217,8,58,10,58,12,58,1220,9,58,3,58,1222,8,58,1, - 59,1,59,3,59,1226,8,59,1,59,1,59,1,59,3,59,1231,8,59,1,59,3,59,1234, - 8,59,1,59,1,59,1,59,5,59,1239,8,59,10,59,12,59,1242,9,59,3,59,1244, - 8,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,1,62,1,62, - 1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,64,3,64,1268,8,64, - 1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65, - 1282,8,65,1,65,1,65,3,65,1286,8,65,1,66,1,66,3,66,1290,8,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,68,1,68,1,68,3,68,1310,8,68,3,68,1312,8,68,3,68,1314,8,68, - 1,69,1,69,1,69,1,69,1,69,1,69,1,69,3,69,1323,8,69,3,69,1325,8,69, - 1,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,1334,8,70,3,70,1336,8,70, - 1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,1345,8,71,3,71,1347,8,71, - 1,72,1,72,1,72,3,72,1352,8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73, - 3,73,1361,8,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74,1370,8,74, - 1,75,1,75,1,75,1,75,1,75,1,75,1,75,3,75,1379,8,75,1,76,1,76,1,76, - 1,77,1,77,1,77,1,77,1,77,1,77,3,77,1390,8,77,1,78,1,78,1,78,1,78, - 3,78,1396,8,78,1,78,1,78,1,78,3,78,1401,8,78,1,78,3,78,1404,8,78, - 1,78,1,78,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,3,80,1417, - 8,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80,3,80,1427,8,80,1,80, - 1,80,3,80,1431,8,80,1,81,1,81,1,81,3,81,1436,8,81,1,82,1,82,1,82, - 1,82,1,82,1,82,1,82,5,82,1445,8,82,10,82,12,82,1448,9,82,1,82,1, - 82,3,82,1452,8,82,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,85,1,85,1, - 85,1,86,1,86,1,86,1,86,1,87,1,87,1,88,1,88,1,89,1,89,1,90,1,90,1, - 91,1,91,1,92,1,92,1,93,1,93,1,93,5,93,1483,8,93,10,93,12,93,1486, - 9,93,1,94,1,94,1,94,5,94,1491,8,94,10,94,12,94,1494,9,94,1,95,1, - 95,3,95,1498,8,95,1,96,1,96,3,96,1502,8,96,1,97,1,97,3,97,1506,8, - 97,1,98,1,98,1,98,3,98,1511,8,98,1,98,1,98,3,98,1515,8,98,1,98,1, - 98,1,98,3,98,1520,8,98,1,98,1,98,1,98,3,98,1525,8,98,1,98,1,98,1, - 98,3,98,1530,8,98,1,98,1,98,3,98,1534,8,98,1,98,1,98,1,98,1,98,1, - 98,1,98,1,98,3,98,1543,8,98,1,98,3,98,1546,8,98,1,98,1,98,3,98,1550, - 8,98,1,99,1,99,1,99,5,99,1555,8,99,10,99,12,99,1558,9,99,1,100,1, - 100,1,100,1,100,1,101,1,101,1,101,1,101,3,101,1568,8,101,1,101,1, - 101,1,101,1,101,3,101,1574,8,101,5,101,1576,8,101,10,101,12,101, - 1579,9,101,1,101,1,101,1,102,3,102,1584,8,102,1,102,1,102,1,103, - 1,103,1,103,1,103,5,103,1592,8,103,10,103,12,103,1595,9,103,1,104, - 1,104,1,104,1,104,3,104,1601,8,104,1,104,1,104,1,104,3,104,1606, - 8,104,1,104,1,104,1,104,3,104,1611,8,104,1,104,1,104,1,104,3,104, - 1616,8,104,1,104,1,104,5,104,1620,8,104,10,104,12,104,1623,9,104, - 3,104,1625,8,104,1,105,1,105,1,105,1,105,1,105,1,105,1,105,3,105, - 1634,8,105,1,105,3,105,1637,8,105,1,105,3,105,1640,8,105,1,106,1, - 106,1,106,1,106,3,106,1646,8,106,1,107,1,107,1,107,1,107,3,107,1652, - 8,107,1,108,1,108,1,109,1,109,1,109,1,109,5,109,1660,8,109,10,109, - 12,109,1663,9,109,3,109,1665,8,109,1,109,1,109,3,109,1669,8,109, - 1,109,1,109,3,109,1673,8,109,1,110,1,110,1,110,5,110,1678,8,110, - 10,110,12,110,1681,9,110,3,110,1683,8,110,1,111,1,111,1,111,1,111, - 3,111,1689,8,111,1,111,1,111,5,111,1693,8,111,10,111,12,111,1696, - 9,111,3,111,1698,8,111,1,112,3,112,1701,8,112,1,112,1,112,3,112, - 1705,8,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,113,3,113, - 1715,8,113,1,114,1,114,1,115,1,115,1,116,1,116,1,116,5,116,1724, - 8,116,10,116,12,116,1727,9,116,1,116,1,116,3,116,1731,8,116,1,116, - 3,116,1734,8,116,1,117,1,117,3,117,1738,8,117,1,117,1,117,1,117, - 1,118,1,118,3,118,1745,8,118,1,118,1,118,1,118,1,118,1,118,1,118, - 5,118,1753,8,118,10,118,12,118,1756,9,118,1,118,1,118,1,119,1,119, - 1,119,1,119,1,119,1,119,1,119,3,119,1767,8,119,1,119,1,119,1,119, - 1,119,3,119,1773,8,119,3,119,1775,8,119,1,120,1,120,1,120,1,120, - 1,120,1,120,1,120,3,120,1784,8,120,1,120,3,120,1787,8,120,1,121, - 1,121,1,121,1,121,1,121,3,121,1794,8,121,1,122,1,122,1,122,1,122, - 1,122,1,122,1,122,1,122,3,122,1804,8,122,1,123,1,123,1,123,1,123, - 3,123,1810,8,123,1,124,1,124,1,124,1,124,5,124,1816,8,124,10,124, - 12,124,1819,9,124,1,124,1,124,1,125,1,125,1,125,1,125,5,125,1827, - 8,125,10,125,12,125,1830,9,125,1,125,1,125,1,126,1,126,1,126,5,126, - 1837,8,126,10,126,12,126,1840,9,126,1,127,1,127,1,127,1,127,1,127, - 1,127,1,127,1,127,3,127,1850,8,127,3,127,1852,8,127,1,127,1,127, - 1,127,1,127,3,127,1858,8,127,1,128,1,128,1,128,3,128,1863,8,128, - 1,129,1,129,1,129,1,129,1,129,1,129,5,129,1871,8,129,10,129,12,129, - 1874,9,129,3,129,1876,8,129,1,129,1,129,1,129,1,129,3,129,1882,8, - 129,3,129,1884,8,129,1,130,1,130,1,130,1,130,1,130,1,130,3,130,1892, - 8,130,1,130,1,130,1,130,1,130,3,130,1898,8,130,1,130,5,130,1901, - 8,130,10,130,12,130,1904,9,130,1,131,1,131,1,131,1,131,1,131,1,131, - 1,131,5,131,1913,8,131,10,131,12,131,1916,9,131,1,131,1,131,1,131, - 1,131,3,131,1922,8,131,1,132,1,132,3,132,1926,8,132,1,132,1,132, - 3,132,1930,8,132,1,133,1,133,3,133,1934,8,133,1,133,3,133,1937,8, - 133,1,133,1,133,1,133,5,133,1942,8,133,10,133,12,133,1945,9,133, - 1,133,1,133,1,133,1,133,5,133,1951,8,133,10,133,12,133,1954,9,133, - 3,133,1956,8,133,1,133,1,133,3,133,1960,8,133,1,133,1,133,1,133, - 3,133,1965,8,133,1,133,1,133,3,133,1969,8,133,1,134,3,134,1972,8, - 134,1,134,1,134,1,134,5,134,1977,8,134,10,134,12,134,1980,9,134, - 1,135,1,135,1,136,1,136,1,136,1,136,5,136,1988,8,136,10,136,12,136, - 1991,9,136,3,136,1993,8,136,1,136,1,136,3,136,1997,8,136,1,137,1, - 137,3,137,2001,8,137,1,137,1,137,1,137,1,138,1,138,1,139,1,139,3, - 139,2010,8,139,1,139,3,139,2013,8,139,1,139,1,139,1,139,1,139,1, - 139,3,139,2020,8,139,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1, - 140,1,140,1,140,1,140,1,140,3,140,2034,8,140,5,140,2036,8,140,10, - 140,12,140,2039,9,140,1,141,3,141,2042,8,141,1,141,1,141,3,141,2046, - 8,141,1,141,1,141,3,141,2050,8,141,1,141,1,141,3,141,2054,8,141, - 1,141,1,141,3,141,2058,8,141,1,141,1,141,3,141,2062,8,141,1,141, - 1,141,1,141,1,141,1,141,1,141,1,141,1,141,3,141,2072,8,141,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,5,142,2081,8,142,10,142,12,142, - 2084,9,142,1,142,1,142,3,142,2088,8,142,1,143,1,143,1,143,1,143, - 1,143,1,143,1,143,1,143,1,143,1,143,1,143,3,143,2101,8,143,3,143, - 2103,8,143,1,144,1,144,1,145,1,145,3,145,2109,8,145,1,145,1,145, - 3,145,2113,8,145,3,145,2115,8,145,1,146,1,146,1,146,1,146,5,146, - 2121,8,146,10,146,12,146,2124,9,146,1,146,1,146,1,147,1,147,3,147, - 2130,8,147,1,147,1,147,1,147,3,147,2135,8,147,1,148,1,148,1,148, - 1,148,1,149,1,149,1,149,1,149,1,149,5,149,2146,8,149,10,149,12,149, - 2149,9,149,1,149,1,149,1,149,3,149,2154,8,149,1,150,1,150,1,150, - 1,150,1,151,1,151,3,151,2162,8,151,1,152,1,152,1,153,1,153,1,153, - 3,153,2169,8,153,1,153,1,153,3,153,2173,8,153,1,153,1,153,1,153, - 1,153,1,153,1,153,5,153,2181,8,153,10,153,12,153,2184,9,153,1,154, - 1,154,1,154,1,154,1,154,1,154,1,154,1,154,3,154,2194,8,154,1,154, - 1,154,1,154,1,154,1,154,1,154,3,154,2202,8,154,1,154,1,154,1,154, - 1,154,1,154,5,154,2209,8,154,10,154,12,154,2212,9,154,1,154,1,154, - 1,154,3,154,2217,8,154,1,154,1,154,1,154,3,154,2222,8,154,1,154, - 1,154,1,154,1,154,3,154,2228,8,154,1,154,1,154,1,154,1,154,3,154, - 2234,8,154,1,154,1,154,1,154,3,154,2239,8,154,1,154,1,154,1,154, - 3,154,2244,8,154,1,155,1,155,1,155,1,155,3,155,2250,8,155,1,155, - 1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,5,155,2261,8,155, - 10,155,12,155,2264,9,155,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,3,156,2290,8,156,1,156,1,156, - 1,156,1,156,3,156,2296,8,156,5,156,2298,8,156,10,156,12,156,2301, - 9,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,5,156,2310,8,156, - 10,156,12,156,2313,9,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 3,156,2322,8,156,1,156,3,156,2325,8,156,1,156,1,156,1,156,3,156, - 2330,8,156,1,156,1,156,1,156,5,156,2335,8,156,10,156,12,156,2338, - 9,156,3,156,2340,8,156,1,156,1,156,1,156,1,156,1,156,5,156,2347, - 8,156,10,156,12,156,2350,9,156,3,156,2352,8,156,1,156,1,156,3,156, - 2356,8,156,1,156,3,156,2359,8,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,5,156,2369,8,156,10,156,12,156,2372,9,156,3,156, - 2374,8,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,4,156,2391,8,156,11,156,12,156, - 2392,1,156,1,156,3,156,2397,8,156,1,156,1,156,1,156,1,156,4,156, - 2403,8,156,11,156,12,156,2404,1,156,1,156,3,156,2409,8,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,5,156,2432, - 8,156,10,156,12,156,2435,9,156,3,156,2437,8,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,3,156,2446,8,156,1,156,1,156,1,156,1,156, - 3,156,2452,8,156,1,156,1,156,1,156,1,156,3,156,2458,8,156,1,156, - 1,156,1,156,1,156,3,156,2464,8,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,3,156,2475,8,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,3,156,2484,8,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,5,156,2504,8,156,10,156,12,156,2507,9,156,3,156,2509, - 8,156,1,156,3,156,2512,8,156,1,156,1,156,1,156,1,156,1,156,1,156, - 1,156,1,156,5,156,2522,8,156,10,156,12,156,2525,9,156,1,157,1,157, - 1,157,1,157,3,157,2531,8,157,3,157,2533,8,157,1,158,1,158,1,159, - 1,159,1,160,1,160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161, - 1,161,1,161,1,161,1,161,1,161,1,161,3,161,2555,8,161,1,162,1,162, - 1,163,1,163,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164, - 1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164, - 1,164,5,164,2582,8,164,10,164,12,164,2585,9,164,1,164,1,164,1,164, - 1,164,3,164,2591,8,164,1,164,1,164,1,164,1,164,5,164,2597,8,164, - 10,164,12,164,2600,9,164,1,164,1,164,3,164,2604,8,164,3,164,2606, - 8,164,1,164,1,164,5,164,2610,8,164,10,164,12,164,2613,9,164,1,165, - 1,165,1,166,1,166,3,166,2619,8,166,1,167,1,167,1,167,1,167,3,167, - 2625,8,167,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1,169, - 1,169,1,169,1,170,1,170,1,170,1,170,1,170,1,170,1,170,5,170,2645, - 8,170,10,170,12,170,2648,9,170,3,170,2650,8,170,1,170,1,170,1,170, - 1,170,1,170,5,170,2657,8,170,10,170,12,170,2660,9,170,3,170,2662, - 8,170,1,170,3,170,2665,8,170,1,170,1,170,1,171,1,171,1,171,1,171, - 1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171,1,171, - 1,171,3,171,2685,8,171,1,172,1,172,1,172,1,172,1,172,1,172,1,172, - 1,172,1,172,3,172,2696,8,172,1,173,1,173,1,173,1,173,1,173,3,173, - 2703,8,173,1,174,1,174,1,174,5,174,2708,8,174,10,174,12,174,2711, - 9,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1,175, - 1,175,3,175,2724,8,175,3,175,2726,8,175,1,176,1,176,1,177,1,177, - 1,177,5,177,2733,8,177,10,177,12,177,2736,9,177,1,178,1,178,1,178, - 1,178,1,178,1,178,3,178,2744,8,178,1,179,1,179,1,179,1,179,1,179, - 3,179,2751,8,179,1,180,3,180,2754,8,180,1,180,1,180,3,180,2758,8, - 180,1,180,1,180,3,180,2762,8,180,1,180,3,180,2765,8,180,1,181,1, - 181,1,182,1,182,1,182,10,770,1446,1621,1661,1679,1694,1725,1754, - 1828,2299,6,260,280,306,310,312,328,183,0,2,4,6,8,10,12,14,16,18, - 20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62, - 64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104, - 106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136, - 138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168, - 170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200, - 202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232, - 234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264, - 266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296, - 298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328, - 330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360, - 362,364,0,33,2,0,46,46,170,170,2,0,166,166,204,204,2,0,176,176,202, - 202,2,0,69,69,80,80,2,0,27,27,159,159,2,0,103,103,144,144,2,0,47, - 47,171,171,2,0,3,3,12,12,3,0,87,87,166,166,204,204,2,0,178,178,209, - 209,1,0,245,248,2,0,147,147,219,223,2,0,65,65,95,95,2,0,64,64,200, - 200,2,0,10,10,55,55,2,0,75,75,112,112,2,0,2,2,57,57,2,0,14,14,185, - 185,3,0,106,106,115,115,164,164,2,0,105,105,163,163,4,0,70,70,133, - 133,194,194,208,208,1,0,255,256,1,0,257,259,1,0,249,254,3,0,2,2, - 6,6,181,181,2,0,70,70,194,194,5,0,48,49,91,92,122,125,172,173,217, - 218,1,0,127,130,2,0,8,8,227,244,2,0,77,77,149,149,4,0,46,46,178, - 178,188,188,209,209,16,0,28,29,40,40,43,43,48,48,68,68,91,91,114, - 114,122,122,124,124,158,158,165,165,172,172,184,184,196,196,204, - 204,217,217,23,0,14,14,43,44,48,49,65,65,68,68,91,91,95,95,110,110, - 119,119,122,125,127,130,137,137,140,140,152,153,172,173,180,180, - 184,185,195,195,204,204,213,213,217,217,220,220,231,231,3093,0,369, - 1,0,0,0,2,374,1,0,0,0,4,400,1,0,0,0,6,402,1,0,0,0,8,413,1,0,0,0, - 10,415,1,0,0,0,12,454,1,0,0,0,14,476,1,0,0,0,16,531,1,0,0,0,18,551, - 1,0,0,0,20,565,1,0,0,0,22,569,1,0,0,0,24,631,1,0,0,0,26,679,1,0, - 0,0,28,681,1,0,0,0,30,689,1,0,0,0,32,709,1,0,0,0,34,729,1,0,0,0, - 36,736,1,0,0,0,38,745,1,0,0,0,40,753,1,0,0,0,42,775,1,0,0,0,44,785, - 1,0,0,0,46,803,1,0,0,0,48,824,1,0,0,0,50,845,1,0,0,0,52,851,1,0, - 0,0,54,868,1,0,0,0,56,877,1,0,0,0,58,884,1,0,0,0,60,892,1,0,0,0, - 62,899,1,0,0,0,64,906,1,0,0,0,66,915,1,0,0,0,68,926,1,0,0,0,70,928, - 1,0,0,0,72,948,1,0,0,0,74,965,1,0,0,0,76,967,1,0,0,0,78,976,1,0, - 0,0,80,983,1,0,0,0,82,992,1,0,0,0,84,1002,1,0,0,0,86,1025,1,0,0, - 0,88,1031,1,0,0,0,90,1033,1,0,0,0,92,1040,1,0,0,0,94,1052,1,0,0, - 0,96,1054,1,0,0,0,98,1061,1,0,0,0,100,1082,1,0,0,0,102,1111,1,0, - 0,0,104,1113,1,0,0,0,106,1122,1,0,0,0,108,1145,1,0,0,0,110,1164, - 1,0,0,0,112,1187,1,0,0,0,114,1189,1,0,0,0,116,1204,1,0,0,0,118,1223, - 1,0,0,0,120,1245,1,0,0,0,122,1250,1,0,0,0,124,1255,1,0,0,0,126,1260, - 1,0,0,0,128,1265,1,0,0,0,130,1272,1,0,0,0,132,1287,1,0,0,0,134,1293, - 1,0,0,0,136,1313,1,0,0,0,138,1315,1,0,0,0,140,1326,1,0,0,0,142,1337, - 1,0,0,0,144,1351,1,0,0,0,146,1353,1,0,0,0,148,1362,1,0,0,0,150,1371, - 1,0,0,0,152,1380,1,0,0,0,154,1383,1,0,0,0,156,1391,1,0,0,0,158,1407, - 1,0,0,0,160,1411,1,0,0,0,162,1435,1,0,0,0,164,1437,1,0,0,0,166,1453, - 1,0,0,0,168,1456,1,0,0,0,170,1460,1,0,0,0,172,1463,1,0,0,0,174,1467, - 1,0,0,0,176,1469,1,0,0,0,178,1471,1,0,0,0,180,1473,1,0,0,0,182,1475, - 1,0,0,0,184,1477,1,0,0,0,186,1479,1,0,0,0,188,1487,1,0,0,0,190,1497, - 1,0,0,0,192,1501,1,0,0,0,194,1505,1,0,0,0,196,1510,1,0,0,0,198,1551, - 1,0,0,0,200,1559,1,0,0,0,202,1563,1,0,0,0,204,1583,1,0,0,0,206,1587, - 1,0,0,0,208,1596,1,0,0,0,210,1626,1,0,0,0,212,1641,1,0,0,0,214,1647, - 1,0,0,0,216,1653,1,0,0,0,218,1655,1,0,0,0,220,1674,1,0,0,0,222,1684, - 1,0,0,0,224,1704,1,0,0,0,226,1714,1,0,0,0,228,1716,1,0,0,0,230,1718, - 1,0,0,0,232,1733,1,0,0,0,234,1735,1,0,0,0,236,1742,1,0,0,0,238,1774, - 1,0,0,0,240,1786,1,0,0,0,242,1793,1,0,0,0,244,1803,1,0,0,0,246,1805, - 1,0,0,0,248,1811,1,0,0,0,250,1822,1,0,0,0,252,1833,1,0,0,0,254,1841, - 1,0,0,0,256,1859,1,0,0,0,258,1864,1,0,0,0,260,1885,1,0,0,0,262,1921, - 1,0,0,0,264,1923,1,0,0,0,266,1931,1,0,0,0,268,1971,1,0,0,0,270,1981, - 1,0,0,0,272,1996,1,0,0,0,274,1998,1,0,0,0,276,2005,1,0,0,0,278,2019, - 1,0,0,0,280,2021,1,0,0,0,282,2071,1,0,0,0,284,2087,1,0,0,0,286,2089, - 1,0,0,0,288,2104,1,0,0,0,290,2106,1,0,0,0,292,2116,1,0,0,0,294,2134, - 1,0,0,0,296,2136,1,0,0,0,298,2140,1,0,0,0,300,2155,1,0,0,0,302,2161, - 1,0,0,0,304,2163,1,0,0,0,306,2172,1,0,0,0,308,2243,1,0,0,0,310,2249, - 1,0,0,0,312,2511,1,0,0,0,314,2532,1,0,0,0,316,2534,1,0,0,0,318,2536, - 1,0,0,0,320,2538,1,0,0,0,322,2554,1,0,0,0,324,2556,1,0,0,0,326,2558, - 1,0,0,0,328,2605,1,0,0,0,330,2614,1,0,0,0,332,2618,1,0,0,0,334,2624, - 1,0,0,0,336,2626,1,0,0,0,338,2631,1,0,0,0,340,2637,1,0,0,0,342,2684, - 1,0,0,0,344,2695,1,0,0,0,346,2702,1,0,0,0,348,2704,1,0,0,0,350,2725, - 1,0,0,0,352,2727,1,0,0,0,354,2729,1,0,0,0,356,2743,1,0,0,0,358,2750, - 1,0,0,0,360,2764,1,0,0,0,362,2766,1,0,0,0,364,2768,1,0,0,0,366,368, - 3,2,1,0,367,366,1,0,0,0,368,371,1,0,0,0,369,367,1,0,0,0,369,370, - 1,0,0,0,370,372,1,0,0,0,371,369,1,0,0,0,372,373,5,0,0,1,373,1,1, - 0,0,0,374,376,3,4,2,0,375,377,5,262,0,0,376,375,1,0,0,0,376,377, - 1,0,0,0,377,3,1,0,0,0,378,401,3,204,102,0,379,401,3,6,3,0,380,401, - 3,8,4,0,381,401,3,26,13,0,382,401,3,64,32,0,383,401,3,66,33,0,384, - 401,3,68,34,0,385,401,3,74,37,0,386,401,3,88,44,0,387,401,3,94,47, - 0,388,401,3,100,50,0,389,401,3,102,51,0,390,401,3,108,54,0,391,401, - 3,110,55,0,392,401,3,112,56,0,393,401,3,144,72,0,394,401,3,152,76, - 0,395,401,3,154,77,0,396,401,3,156,78,0,397,401,3,158,79,0,398,401, - 3,160,80,0,399,401,3,162,81,0,400,378,1,0,0,0,400,379,1,0,0,0,400, - 380,1,0,0,0,400,381,1,0,0,0,400,382,1,0,0,0,400,383,1,0,0,0,400, - 384,1,0,0,0,400,385,1,0,0,0,400,386,1,0,0,0,400,387,1,0,0,0,400, - 388,1,0,0,0,400,389,1,0,0,0,400,390,1,0,0,0,400,391,1,0,0,0,400, - 392,1,0,0,0,400,393,1,0,0,0,400,394,1,0,0,0,400,395,1,0,0,0,400, - 396,1,0,0,0,400,397,1,0,0,0,400,398,1,0,0,0,400,399,1,0,0,0,401, - 5,1,0,0,0,402,403,5,203,0,0,403,404,3,184,92,0,404,7,1,0,0,0,405, - 414,3,18,9,0,406,414,3,20,10,0,407,414,3,22,11,0,408,414,3,24,12, - 0,409,414,3,16,8,0,410,414,3,14,7,0,411,414,3,12,6,0,412,414,3,10, - 5,0,413,405,1,0,0,0,413,406,1,0,0,0,413,407,1,0,0,0,413,408,1,0, - 0,0,413,409,1,0,0,0,413,410,1,0,0,0,413,411,1,0,0,0,413,412,1,0, - 0,0,414,9,1,0,0,0,415,417,5,37,0,0,416,418,5,19,0,0,417,416,1,0, - 0,0,417,418,1,0,0,0,418,419,1,0,0,0,419,421,5,188,0,0,420,422,3, - 172,86,0,421,420,1,0,0,0,421,422,1,0,0,0,422,423,1,0,0,0,423,439, - 3,174,87,0,424,425,5,265,0,0,425,430,3,214,107,0,426,427,5,263,0, - 0,427,429,3,214,107,0,428,426,1,0,0,0,429,432,1,0,0,0,430,428,1, - 0,0,0,430,431,1,0,0,0,431,435,1,0,0,0,432,430,1,0,0,0,433,434,5, - 263,0,0,434,436,3,208,104,0,435,433,1,0,0,0,435,436,1,0,0,0,436, - 437,1,0,0,0,437,438,5,266,0,0,438,440,1,0,0,0,439,424,1,0,0,0,439, - 440,1,0,0,0,440,447,1,0,0,0,441,442,5,17,0,0,442,445,5,26,0,0,443, - 446,3,292,146,0,444,446,3,250,125,0,445,443,1,0,0,0,445,444,1,0, - 0,0,446,448,1,0,0,0,447,441,1,0,0,0,447,448,1,0,0,0,448,449,1,0, - 0,0,449,452,3,196,98,0,450,451,5,9,0,0,451,453,3,204,102,0,452,450, - 1,0,0,0,452,453,1,0,0,0,453,11,1,0,0,0,454,456,5,37,0,0,455,457, - 5,19,0,0,456,455,1,0,0,0,456,457,1,0,0,0,457,458,1,0,0,0,458,460, - 5,188,0,0,459,461,3,172,86,0,460,459,1,0,0,0,460,461,1,0,0,0,461, - 462,1,0,0,0,462,463,3,174,87,0,463,467,5,115,0,0,464,468,3,186,93, - 0,465,466,5,147,0,0,466,468,3,314,157,0,467,464,1,0,0,0,467,465, - 1,0,0,0,468,472,1,0,0,0,469,470,5,17,0,0,470,471,5,26,0,0,471,473, - 3,250,125,0,472,469,1,0,0,0,472,473,1,0,0,0,473,474,1,0,0,0,474, - 475,3,196,98,0,475,13,1,0,0,0,476,478,5,37,0,0,477,479,5,19,0,0, - 478,477,1,0,0,0,478,479,1,0,0,0,479,480,1,0,0,0,480,482,5,188,0, - 0,481,483,3,172,86,0,482,481,1,0,0,0,482,483,1,0,0,0,483,484,1,0, - 0,0,484,502,3,174,87,0,485,486,5,265,0,0,486,491,3,216,108,0,487, - 488,5,263,0,0,488,490,3,216,108,0,489,487,1,0,0,0,490,493,1,0,0, - 0,491,489,1,0,0,0,491,492,1,0,0,0,492,498,1,0,0,0,493,491,1,0,0, - 0,494,495,5,263,0,0,495,496,5,150,0,0,496,497,5,110,0,0,497,499, - 3,292,146,0,498,494,1,0,0,0,498,499,1,0,0,0,499,500,1,0,0,0,500, - 501,5,266,0,0,501,503,1,0,0,0,502,485,1,0,0,0,502,503,1,0,0,0,503, - 509,1,0,0,0,504,505,5,150,0,0,505,507,5,110,0,0,506,508,3,292,146, - 0,507,506,1,0,0,0,507,508,1,0,0,0,508,510,1,0,0,0,509,504,1,0,0, - 0,509,510,1,0,0,0,510,514,1,0,0,0,511,512,5,145,0,0,512,513,5,26, - 0,0,513,515,3,232,116,0,514,511,1,0,0,0,514,515,1,0,0,0,515,518, - 1,0,0,0,516,517,5,34,0,0,517,519,3,314,157,0,518,516,1,0,0,0,518, - 519,1,0,0,0,519,520,1,0,0,0,520,521,5,23,0,0,521,522,5,9,0,0,522, - 525,5,111,0,0,523,524,5,25,0,0,524,526,3,248,124,0,525,523,1,0,0, - 0,525,526,1,0,0,0,526,529,1,0,0,0,527,528,5,9,0,0,528,530,3,204, - 102,0,529,527,1,0,0,0,529,530,1,0,0,0,530,15,1,0,0,0,531,532,5,37, - 0,0,532,534,5,212,0,0,533,535,3,172,86,0,534,533,1,0,0,0,534,535, - 1,0,0,0,535,536,1,0,0,0,536,538,3,178,89,0,537,539,3,202,101,0,538, - 537,1,0,0,0,538,539,1,0,0,0,539,542,1,0,0,0,540,541,5,34,0,0,541, - 543,3,314,157,0,542,540,1,0,0,0,542,543,1,0,0,0,543,546,1,0,0,0, - 544,545,5,25,0,0,545,547,3,248,124,0,546,544,1,0,0,0,546,547,1,0, - 0,0,547,548,1,0,0,0,548,549,5,9,0,0,549,550,3,204,102,0,550,17,1, - 0,0,0,551,552,5,37,0,0,552,554,7,0,0,0,553,555,3,172,86,0,554,553, - 1,0,0,0,554,555,1,0,0,0,555,556,1,0,0,0,556,559,3,176,88,0,557,558, - 5,34,0,0,558,560,3,314,157,0,559,557,1,0,0,0,559,560,1,0,0,0,560, - 563,1,0,0,0,561,562,5,24,0,0,562,564,3,314,157,0,563,561,1,0,0,0, - 563,564,1,0,0,0,564,19,1,0,0,0,565,566,5,37,0,0,566,567,5,166,0, - 0,567,568,3,358,179,0,568,21,1,0,0,0,569,571,5,37,0,0,570,572,5, - 12,0,0,571,570,1,0,0,0,571,572,1,0,0,0,572,573,1,0,0,0,573,575,5, - 84,0,0,574,576,3,172,86,0,575,574,1,0,0,0,575,576,1,0,0,0,576,577, - 1,0,0,0,577,590,3,180,90,0,578,587,5,265,0,0,579,584,3,328,164,0, - 580,581,5,263,0,0,581,583,3,328,164,0,582,580,1,0,0,0,583,586,1, - 0,0,0,584,582,1,0,0,0,584,585,1,0,0,0,585,588,1,0,0,0,586,584,1, - 0,0,0,587,579,1,0,0,0,587,588,1,0,0,0,588,589,1,0,0,0,589,591,5, - 266,0,0,590,578,1,0,0,0,590,591,1,0,0,0,591,592,1,0,0,0,592,593, - 5,160,0,0,593,596,3,328,164,0,594,595,5,102,0,0,595,597,3,328,164, - 0,596,594,1,0,0,0,596,597,1,0,0,0,597,598,1,0,0,0,598,599,5,24,0, - 0,599,603,5,274,0,0,600,601,5,104,0,0,601,602,5,249,0,0,602,604, - 5,274,0,0,603,600,1,0,0,0,603,604,1,0,0,0,604,605,1,0,0,0,605,606, - 5,206,0,0,606,607,5,249,0,0,607,608,5,274,0,0,608,609,5,126,0,0, - 609,610,5,249,0,0,610,614,5,274,0,0,611,612,5,18,0,0,612,613,5,249, - 0,0,613,615,5,274,0,0,614,611,1,0,0,0,614,615,1,0,0,0,615,619,1, - 0,0,0,616,617,5,20,0,0,617,618,5,249,0,0,618,620,5,274,0,0,619,616, - 1,0,0,0,619,620,1,0,0,0,620,624,1,0,0,0,621,622,5,187,0,0,622,623, - 5,249,0,0,623,625,5,274,0,0,624,621,1,0,0,0,624,625,1,0,0,0,625, - 629,1,0,0,0,626,627,5,76,0,0,627,628,5,249,0,0,628,630,5,274,0,0, - 629,626,1,0,0,0,629,630,1,0,0,0,630,23,1,0,0,0,631,632,5,37,0,0, - 632,634,5,84,0,0,633,635,3,172,86,0,634,633,1,0,0,0,634,635,1,0, - 0,0,635,636,1,0,0,0,636,649,3,180,90,0,637,646,5,265,0,0,638,643, - 3,328,164,0,639,640,5,263,0,0,640,642,3,328,164,0,641,639,1,0,0, - 0,642,645,1,0,0,0,643,641,1,0,0,0,643,644,1,0,0,0,644,647,1,0,0, - 0,645,643,1,0,0,0,646,638,1,0,0,0,646,647,1,0,0,0,647,648,1,0,0, - 0,648,650,5,266,0,0,649,637,1,0,0,0,649,650,1,0,0,0,650,653,1,0, - 0,0,651,652,5,160,0,0,652,654,3,328,164,0,653,651,1,0,0,0,653,654, - 1,0,0,0,654,655,1,0,0,0,655,656,5,24,0,0,656,657,5,274,0,0,657,658, - 5,186,0,0,658,659,5,249,0,0,659,660,3,314,157,0,660,25,1,0,0,0,661, - 680,3,28,14,0,662,680,3,62,31,0,663,680,3,60,30,0,664,680,3,58,29, - 0,665,680,3,54,27,0,666,680,3,56,28,0,667,680,3,52,26,0,668,680, - 3,48,24,0,669,680,3,50,25,0,670,680,3,46,23,0,671,680,3,44,22,0, - 672,680,3,42,21,0,673,680,3,40,20,0,674,680,3,34,17,0,675,680,3, - 30,15,0,676,680,3,32,16,0,677,680,3,36,18,0,678,680,3,38,19,0,679, - 661,1,0,0,0,679,662,1,0,0,0,679,663,1,0,0,0,679,664,1,0,0,0,679, - 665,1,0,0,0,679,666,1,0,0,0,679,667,1,0,0,0,679,668,1,0,0,0,679, - 669,1,0,0,0,679,670,1,0,0,0,679,671,1,0,0,0,679,672,1,0,0,0,679, - 673,1,0,0,0,679,674,1,0,0,0,679,675,1,0,0,0,679,676,1,0,0,0,679, - 677,1,0,0,0,679,678,1,0,0,0,680,27,1,0,0,0,681,682,5,4,0,0,682,683, - 5,46,0,0,683,684,3,184,92,0,684,685,5,176,0,0,685,686,5,142,0,0, - 686,687,7,1,0,0,687,688,3,358,179,0,688,29,1,0,0,0,689,690,5,4,0, - 0,690,691,5,188,0,0,691,692,3,186,93,0,692,693,5,176,0,0,693,694, - 5,32,0,0,694,695,5,182,0,0,695,696,3,192,96,0,696,697,5,265,0,0, - 697,698,3,228,114,0,698,699,5,249,0,0,699,705,3,314,157,0,700,701, - 5,263,0,0,701,702,3,228,114,0,702,703,5,249,0,0,703,704,3,314,157, - 0,704,706,1,0,0,0,705,700,1,0,0,0,705,706,1,0,0,0,706,707,1,0,0, - 0,707,708,5,266,0,0,708,31,1,0,0,0,709,710,5,4,0,0,710,711,5,188, - 0,0,711,714,3,186,93,0,712,713,5,145,0,0,713,715,3,304,152,0,714, - 712,1,0,0,0,714,715,1,0,0,0,715,716,1,0,0,0,716,727,5,176,0,0,717, - 718,5,30,0,0,718,719,5,94,0,0,719,724,3,314,157,0,720,721,5,216, - 0,0,721,722,5,151,0,0,722,723,5,249,0,0,723,725,3,360,180,0,724, - 720,1,0,0,0,724,725,1,0,0,0,725,728,1,0,0,0,726,728,5,197,0,0,727, - 717,1,0,0,0,727,726,1,0,0,0,728,33,1,0,0,0,729,730,5,4,0,0,730,731, - 5,188,0,0,731,732,3,186,93,0,732,733,5,31,0,0,733,734,3,192,96,0, - 734,735,3,220,110,0,735,35,1,0,0,0,736,737,5,4,0,0,737,738,5,188, - 0,0,738,739,3,186,93,0,739,741,5,58,0,0,740,742,5,32,0,0,741,740, - 1,0,0,0,741,742,1,0,0,0,742,743,1,0,0,0,743,744,3,192,96,0,744,37, - 1,0,0,0,745,746,5,4,0,0,746,747,5,188,0,0,747,748,3,186,93,0,748, - 749,5,176,0,0,749,750,5,142,0,0,750,751,7,1,0,0,751,752,3,358,179, - 0,752,39,1,0,0,0,753,754,5,4,0,0,754,755,5,188,0,0,755,761,3,186, - 93,0,756,762,5,158,0,0,757,759,5,1,0,0,758,760,3,172,86,0,759,758, - 1,0,0,0,759,760,1,0,0,0,760,762,1,0,0,0,761,756,1,0,0,0,761,757, - 1,0,0,0,762,763,1,0,0,0,763,764,5,33,0,0,764,765,5,265,0,0,765,770, - 3,220,110,0,766,767,5,263,0,0,767,769,3,220,110,0,768,766,1,0,0, - 0,769,772,1,0,0,0,770,771,1,0,0,0,770,768,1,0,0,0,771,773,1,0,0, - 0,772,770,1,0,0,0,773,774,5,266,0,0,774,41,1,0,0,0,775,776,5,4,0, - 0,776,777,5,188,0,0,777,778,3,186,93,0,778,779,5,1,0,0,779,781,5, - 32,0,0,780,782,3,172,86,0,781,780,1,0,0,0,781,782,1,0,0,0,782,783, - 1,0,0,0,783,784,3,222,111,0,784,43,1,0,0,0,785,786,5,4,0,0,786,787, - 5,188,0,0,787,788,3,186,93,0,788,790,5,4,0,0,789,791,5,32,0,0,790, - 789,1,0,0,0,790,791,1,0,0,0,791,792,1,0,0,0,792,801,3,192,96,0,793, - 797,5,176,0,0,794,798,3,226,113,0,795,796,5,34,0,0,796,798,3,314, - 157,0,797,794,1,0,0,0,797,795,1,0,0,0,798,802,1,0,0,0,799,800,5, - 58,0,0,800,802,5,51,0,0,801,793,1,0,0,0,801,799,1,0,0,0,802,45,1, - 0,0,0,803,804,5,4,0,0,804,805,5,188,0,0,805,806,3,186,93,0,806,808, - 5,1,0,0,807,809,3,172,86,0,808,807,1,0,0,0,808,809,1,0,0,0,809,822, - 1,0,0,0,810,811,5,145,0,0,811,814,3,304,152,0,812,813,5,24,0,0,813, - 815,3,314,157,0,814,812,1,0,0,0,814,815,1,0,0,0,815,817,1,0,0,0, - 816,818,3,240,120,0,817,816,1,0,0,0,817,818,1,0,0,0,818,823,1,0, - 0,0,819,820,5,154,0,0,820,821,5,145,0,0,821,823,3,238,119,0,822, - 810,1,0,0,0,822,819,1,0,0,0,823,47,1,0,0,0,824,825,5,4,0,0,825,826, - 5,188,0,0,826,829,3,186,93,0,827,828,5,145,0,0,828,830,3,304,152, - 0,829,827,1,0,0,0,829,830,1,0,0,0,830,831,1,0,0,0,831,843,5,176, - 0,0,832,833,5,72,0,0,833,844,3,230,115,0,834,835,5,168,0,0,835,836, - 5,79,0,0,836,844,3,254,127,0,837,838,5,24,0,0,838,844,3,314,157, - 0,839,840,5,25,0,0,840,844,3,248,124,0,841,842,5,175,0,0,842,844, - 3,248,124,0,843,832,1,0,0,0,843,834,1,0,0,0,843,837,1,0,0,0,843, - 839,1,0,0,0,843,841,1,0,0,0,844,49,1,0,0,0,845,846,5,4,0,0,846,847, - 5,188,0,0,847,848,3,186,93,0,848,849,5,155,0,0,849,850,5,146,0,0, - 850,51,1,0,0,0,851,852,5,4,0,0,852,853,5,188,0,0,853,854,3,186,93, - 0,854,856,5,58,0,0,855,857,3,170,85,0,856,855,1,0,0,0,856,857,1, - 0,0,0,857,866,1,0,0,0,858,859,5,145,0,0,859,861,3,304,152,0,860, - 862,5,22,0,0,861,860,1,0,0,0,861,862,1,0,0,0,862,867,1,0,0,0,863, - 864,5,154,0,0,864,865,5,145,0,0,865,867,3,238,119,0,866,858,1,0, - 0,0,866,863,1,0,0,0,867,53,1,0,0,0,868,869,5,4,0,0,869,870,5,212, - 0,0,870,872,3,188,94,0,871,873,3,202,101,0,872,871,1,0,0,0,872,873, - 1,0,0,0,873,874,1,0,0,0,874,875,5,9,0,0,875,876,3,204,102,0,876, - 55,1,0,0,0,877,878,5,4,0,0,878,879,5,212,0,0,879,880,3,188,94,0, - 880,881,5,156,0,0,881,882,5,193,0,0,882,883,3,188,94,0,883,57,1, - 0,0,0,884,885,5,4,0,0,885,886,5,212,0,0,886,887,3,188,94,0,887,888, - 5,176,0,0,888,889,5,142,0,0,889,890,7,1,0,0,890,891,3,354,177,0, - 891,59,1,0,0,0,892,893,5,4,0,0,893,894,5,188,0,0,894,895,3,186,93, - 0,895,896,5,156,0,0,896,897,5,193,0,0,897,898,3,186,93,0,898,61, - 1,0,0,0,899,900,5,4,0,0,900,901,5,212,0,0,901,902,3,188,94,0,902, - 903,7,2,0,0,903,904,5,25,0,0,904,905,3,248,124,0,905,63,1,0,0,0, - 906,908,5,196,0,0,907,909,5,188,0,0,908,907,1,0,0,0,908,909,1,0, - 0,0,909,911,1,0,0,0,910,912,3,170,85,0,911,910,1,0,0,0,911,912,1, - 0,0,0,912,913,1,0,0,0,913,914,3,186,93,0,914,65,1,0,0,0,915,917, - 5,56,0,0,916,918,5,46,0,0,917,916,1,0,0,0,917,918,1,0,0,0,918,920, - 1,0,0,0,919,921,7,3,0,0,920,919,1,0,0,0,920,921,1,0,0,0,921,922, - 1,0,0,0,922,923,3,354,177,0,923,67,1,0,0,0,924,927,3,70,35,0,925, - 927,3,72,36,0,926,924,1,0,0,0,926,925,1,0,0,0,927,69,1,0,0,0,928, - 929,5,36,0,0,929,930,5,182,0,0,930,932,3,186,93,0,931,933,3,292, - 146,0,932,931,1,0,0,0,932,933,1,0,0,0,933,946,1,0,0,0,934,935,5, - 190,0,0,935,936,5,185,0,0,936,937,5,265,0,0,937,938,3,360,180,0, - 938,944,5,266,0,0,939,940,5,157,0,0,940,941,5,265,0,0,941,942,3, - 360,180,0,942,943,5,266,0,0,943,945,1,0,0,0,944,939,1,0,0,0,944, - 945,1,0,0,0,945,947,1,0,0,0,946,934,1,0,0,0,946,947,1,0,0,0,947, - 71,1,0,0,0,948,949,5,36,0,0,949,950,5,96,0,0,950,951,5,182,0,0,951, - 957,3,186,93,0,952,953,5,145,0,0,953,954,5,265,0,0,954,955,3,304, - 152,0,955,956,5,266,0,0,956,958,1,0,0,0,957,952,1,0,0,0,957,958, - 1,0,0,0,958,73,1,0,0,0,959,966,3,86,43,0,960,966,3,84,42,0,961,966, - 3,82,41,0,962,966,3,78,39,0,963,966,3,80,40,0,964,966,3,76,38,0, - 965,959,1,0,0,0,965,960,1,0,0,0,965,961,1,0,0,0,965,962,1,0,0,0, - 965,963,1,0,0,0,965,964,1,0,0,0,966,75,1,0,0,0,967,968,5,58,0,0, - 968,970,7,0,0,0,969,971,3,170,85,0,970,969,1,0,0,0,970,971,1,0,0, - 0,971,972,1,0,0,0,972,974,3,184,92,0,973,975,7,4,0,0,974,973,1,0, - 0,0,974,975,1,0,0,0,975,77,1,0,0,0,976,977,5,58,0,0,977,979,5,212, - 0,0,978,980,3,170,85,0,979,978,1,0,0,0,979,980,1,0,0,0,980,981,1, - 0,0,0,981,982,3,188,94,0,982,79,1,0,0,0,983,984,5,58,0,0,984,986, - 5,188,0,0,985,987,3,170,85,0,986,985,1,0,0,0,986,987,1,0,0,0,987, - 988,1,0,0,0,988,990,3,186,93,0,989,991,5,22,0,0,990,989,1,0,0,0, - 990,991,1,0,0,0,991,81,1,0,0,0,992,994,5,58,0,0,993,995,5,96,0,0, - 994,993,1,0,0,0,994,995,1,0,0,0,995,996,1,0,0,0,996,997,5,182,0, - 0,997,1000,3,186,93,0,998,999,5,145,0,0,999,1001,3,304,152,0,1000, - 998,1,0,0,0,1000,1001,1,0,0,0,1001,83,1,0,0,0,1002,1004,5,58,0,0, - 1003,1005,5,12,0,0,1004,1003,1,0,0,0,1004,1005,1,0,0,0,1005,1006, - 1,0,0,0,1006,1008,5,84,0,0,1007,1009,3,170,85,0,1008,1007,1,0,0, - 0,1008,1009,1,0,0,0,1009,1010,1,0,0,0,1010,1023,3,190,95,0,1011, - 1020,5,265,0,0,1012,1017,3,328,164,0,1013,1014,5,263,0,0,1014,1016, - 3,328,164,0,1015,1013,1,0,0,0,1016,1019,1,0,0,0,1017,1015,1,0,0, - 0,1017,1018,1,0,0,0,1018,1021,1,0,0,0,1019,1017,1,0,0,0,1020,1012, - 1,0,0,0,1020,1021,1,0,0,0,1021,1022,1,0,0,0,1022,1024,5,266,0,0, - 1023,1011,1,0,0,0,1023,1024,1,0,0,0,1024,85,1,0,0,0,1025,1026,5, - 58,0,0,1026,1027,5,166,0,0,1027,1028,3,358,179,0,1028,87,1,0,0,0, - 1029,1032,3,90,45,0,1030,1032,3,92,46,0,1031,1029,1,0,0,0,1031,1030, - 1,0,0,0,1032,89,1,0,0,0,1033,1034,5,86,0,0,1034,1035,5,166,0,0,1035, - 1036,3,358,179,0,1036,1037,5,193,0,0,1037,1038,5,87,0,0,1038,1039, - 3,358,179,0,1039,91,1,0,0,0,1040,1041,5,86,0,0,1041,1042,3,350,175, - 0,1042,1043,5,136,0,0,1043,1045,3,352,176,0,1044,1046,3,354,177, - 0,1045,1044,1,0,0,0,1045,1046,1,0,0,0,1046,1047,1,0,0,0,1047,1048, - 5,193,0,0,1048,1049,3,356,178,0,1049,93,1,0,0,0,1050,1053,3,96,48, - 0,1051,1053,3,98,49,0,1052,1050,1,0,0,0,1052,1051,1,0,0,0,1053,95, - 1,0,0,0,1054,1055,5,161,0,0,1055,1056,5,166,0,0,1056,1057,3,358, - 179,0,1057,1058,5,82,0,0,1058,1059,5,87,0,0,1059,1060,3,358,179, - 0,1060,97,1,0,0,0,1061,1065,5,161,0,0,1062,1063,5,86,0,0,1063,1064, - 5,137,0,0,1064,1066,5,78,0,0,1065,1062,1,0,0,0,1065,1066,1,0,0,0, - 1066,1067,1,0,0,0,1067,1068,3,350,175,0,1068,1069,5,136,0,0,1069, - 1071,3,352,176,0,1070,1072,3,354,177,0,1071,1070,1,0,0,0,1071,1072, - 1,0,0,0,1072,1073,1,0,0,0,1073,1079,5,82,0,0,1074,1080,3,356,178, - 0,1075,1077,5,166,0,0,1076,1075,1,0,0,0,1076,1077,1,0,0,0,1077,1078, - 1,0,0,0,1078,1080,3,358,179,0,1079,1074,1,0,0,0,1079,1076,1,0,0, - 0,1080,99,1,0,0,0,1081,1083,3,206,103,0,1082,1081,1,0,0,0,1082,1083, - 1,0,0,0,1083,1084,1,0,0,0,1084,1085,5,99,0,0,1085,1087,7,5,0,0,1086, - 1088,5,188,0,0,1087,1086,1,0,0,0,1087,1088,1,0,0,0,1088,1089,1,0, - 0,0,1089,1091,3,186,93,0,1090,1092,3,292,146,0,1091,1090,1,0,0,0, - 1091,1092,1,0,0,0,1092,1105,1,0,0,0,1093,1094,5,145,0,0,1094,1095, - 5,265,0,0,1095,1100,3,304,152,0,1096,1097,5,263,0,0,1097,1099,3, - 304,152,0,1098,1096,1,0,0,0,1099,1102,1,0,0,0,1100,1098,1,0,0,0, - 1100,1101,1,0,0,0,1101,1103,1,0,0,0,1102,1100,1,0,0,0,1103,1104, - 5,266,0,0,1104,1106,1,0,0,0,1105,1093,1,0,0,0,1105,1106,1,0,0,0, - 1106,1107,1,0,0,0,1107,1108,3,204,102,0,1108,101,1,0,0,0,1109,1112, - 3,104,52,0,1110,1112,3,106,53,0,1111,1109,1,0,0,0,1111,1110,1,0, - 0,0,1112,103,1,0,0,0,1113,1115,5,50,0,0,1114,1116,5,82,0,0,1115, - 1114,1,0,0,0,1115,1116,1,0,0,0,1116,1117,1,0,0,0,1117,1120,3,186, - 93,0,1118,1119,5,215,0,0,1119,1121,3,306,153,0,1120,1118,1,0,0,0, - 1120,1121,1,0,0,0,1121,105,1,0,0,0,1122,1123,5,50,0,0,1123,1128, - 3,186,93,0,1124,1126,5,9,0,0,1125,1124,1,0,0,0,1125,1126,1,0,0,0, - 1126,1127,1,0,0,0,1127,1129,3,358,179,0,1128,1125,1,0,0,0,1128,1129, - 1,0,0,0,1129,1130,1,0,0,0,1130,1139,5,82,0,0,1131,1136,3,280,140, - 0,1132,1133,5,263,0,0,1133,1135,3,280,140,0,1134,1132,1,0,0,0,1135, - 1138,1,0,0,0,1136,1134,1,0,0,0,1136,1137,1,0,0,0,1137,1140,1,0,0, - 0,1138,1136,1,0,0,0,1139,1131,1,0,0,0,1139,1140,1,0,0,0,1140,1143, - 1,0,0,0,1141,1142,5,215,0,0,1142,1144,3,306,153,0,1143,1141,1,0, - 0,0,1143,1144,1,0,0,0,1144,107,1,0,0,0,1145,1146,5,54,0,0,1146,1147, - 3,186,93,0,1147,1148,5,176,0,0,1148,1158,3,198,99,0,1149,1150,5, - 82,0,0,1150,1155,3,280,140,0,1151,1152,5,263,0,0,1152,1154,3,280, - 140,0,1153,1151,1,0,0,0,1154,1157,1,0,0,0,1155,1153,1,0,0,0,1155, - 1156,1,0,0,0,1156,1159,1,0,0,0,1157,1155,1,0,0,0,1158,1149,1,0,0, - 0,1158,1159,1,0,0,0,1159,1162,1,0,0,0,1160,1161,5,215,0,0,1161,1163, - 3,306,153,0,1162,1160,1,0,0,0,1162,1163,1,0,0,0,1163,109,1,0,0,0, - 1164,1165,5,207,0,0,1165,1167,5,103,0,0,1166,1168,5,188,0,0,1167, - 1166,1,0,0,0,1167,1168,1,0,0,0,1168,1169,1,0,0,0,1169,1171,3,186, - 93,0,1170,1172,3,292,146,0,1171,1170,1,0,0,0,1171,1172,1,0,0,0,1172, - 1173,1,0,0,0,1173,1174,3,204,102,0,1174,111,1,0,0,0,1175,1188,3, - 132,66,0,1176,1188,3,134,67,0,1177,1188,3,136,68,0,1178,1188,3,130, - 65,0,1179,1188,3,128,64,0,1180,1188,3,126,63,0,1181,1188,3,124,62, - 0,1182,1188,3,122,61,0,1183,1188,3,120,60,0,1184,1188,3,118,59,0, - 1185,1188,3,116,58,0,1186,1188,3,114,57,0,1187,1175,1,0,0,0,1187, - 1176,1,0,0,0,1187,1177,1,0,0,0,1187,1178,1,0,0,0,1187,1179,1,0,0, - 0,1187,1180,1,0,0,0,1187,1181,1,0,0,0,1187,1182,1,0,0,0,1187,1183, - 1,0,0,0,1187,1184,1,0,0,0,1187,1185,1,0,0,0,1187,1186,1,0,0,0,1188, - 113,1,0,0,0,1189,1190,5,179,0,0,1190,1202,7,6,0,0,1191,1193,5,115, - 0,0,1192,1191,1,0,0,0,1192,1193,1,0,0,0,1193,1194,1,0,0,0,1194,1199, - 3,314,157,0,1195,1196,5,271,0,0,1196,1198,3,314,157,0,1197,1195, - 1,0,0,0,1198,1201,1,0,0,0,1199,1197,1,0,0,0,1199,1200,1,0,0,0,1200, - 1203,1,0,0,0,1201,1199,1,0,0,0,1202,1192,1,0,0,0,1202,1203,1,0,0, - 0,1203,115,1,0,0,0,1204,1205,5,179,0,0,1205,1208,5,189,0,0,1206, - 1207,5,94,0,0,1207,1209,3,186,93,0,1208,1206,1,0,0,0,1208,1209,1, - 0,0,0,1209,1221,1,0,0,0,1210,1212,5,115,0,0,1211,1210,1,0,0,0,1211, - 1212,1,0,0,0,1212,1213,1,0,0,0,1213,1218,3,314,157,0,1214,1215,5, - 271,0,0,1215,1217,3,314,157,0,1216,1214,1,0,0,0,1217,1220,1,0,0, - 0,1218,1216,1,0,0,0,1218,1219,1,0,0,0,1219,1222,1,0,0,0,1220,1218, - 1,0,0,0,1221,1211,1,0,0,0,1221,1222,1,0,0,0,1222,117,1,0,0,0,1223, - 1225,5,179,0,0,1224,1226,7,7,0,0,1225,1224,1,0,0,0,1225,1226,1,0, - 0,0,1226,1227,1,0,0,0,1227,1230,5,85,0,0,1228,1229,5,94,0,0,1229, - 1231,3,184,92,0,1230,1228,1,0,0,0,1230,1231,1,0,0,0,1231,1243,1, - 0,0,0,1232,1234,5,115,0,0,1233,1232,1,0,0,0,1233,1234,1,0,0,0,1234, - 1235,1,0,0,0,1235,1240,3,314,157,0,1236,1237,5,271,0,0,1237,1239, - 3,314,157,0,1238,1236,1,0,0,0,1239,1242,1,0,0,0,1240,1238,1,0,0, - 0,1240,1241,1,0,0,0,1241,1244,1,0,0,0,1242,1240,1,0,0,0,1243,1233, - 1,0,0,0,1243,1244,1,0,0,0,1244,119,1,0,0,0,1245,1246,5,179,0,0,1246, - 1247,5,37,0,0,1247,1248,5,188,0,0,1248,1249,3,186,93,0,1249,121, - 1,0,0,0,1250,1251,5,179,0,0,1251,1252,5,37,0,0,1252,1253,5,212,0, - 0,1253,1254,3,188,94,0,1254,123,1,0,0,0,1255,1256,5,179,0,0,1256, - 1257,5,188,0,0,1257,1258,5,182,0,0,1258,1259,3,186,93,0,1259,125, - 1,0,0,0,1260,1261,5,179,0,0,1261,1262,5,32,0,0,1262,1263,5,182,0, - 0,1263,1264,3,186,93,0,1264,127,1,0,0,0,1265,1267,5,179,0,0,1266, - 1268,5,154,0,0,1267,1266,1,0,0,0,1267,1268,1,0,0,0,1268,1269,1,0, - 0,0,1269,1270,5,146,0,0,1270,1271,3,186,93,0,1271,129,1,0,0,0,1272, - 1273,5,179,0,0,1273,1274,5,73,0,0,1274,1275,5,94,0,0,1275,1285,3, - 186,93,0,1276,1277,5,145,0,0,1277,1278,5,265,0,0,1278,1281,3,304, - 152,0,1279,1280,5,263,0,0,1280,1282,3,304,152,0,1281,1279,1,0,0, - 0,1281,1282,1,0,0,0,1282,1283,1,0,0,0,1283,1284,5,266,0,0,1284,1286, - 1,0,0,0,1285,1276,1,0,0,0,1285,1286,1,0,0,0,1286,131,1,0,0,0,1287, - 1289,5,179,0,0,1288,1290,5,39,0,0,1289,1288,1,0,0,0,1289,1290,1, - 0,0,0,1290,1291,1,0,0,0,1291,1292,5,167,0,0,1292,133,1,0,0,0,1293, - 1294,5,179,0,0,1294,1295,5,166,0,0,1295,1296,5,86,0,0,1296,1297, - 5,87,0,0,1297,1298,3,358,179,0,1298,135,1,0,0,0,1299,1314,3,138, - 69,0,1300,1314,3,140,70,0,1301,1314,3,142,71,0,1302,1303,5,179,0, - 0,1303,1304,5,86,0,0,1304,1305,7,8,0,0,1305,1311,3,358,179,0,1306, - 1307,5,136,0,0,1307,1309,7,9,0,0,1308,1310,3,354,177,0,1309,1308, - 1,0,0,0,1309,1310,1,0,0,0,1310,1312,1,0,0,0,1311,1306,1,0,0,0,1311, - 1312,1,0,0,0,1312,1314,1,0,0,0,1313,1299,1,0,0,0,1313,1300,1,0,0, - 0,1313,1301,1,0,0,0,1313,1302,1,0,0,0,1314,137,1,0,0,0,1315,1316, - 5,179,0,0,1316,1317,5,86,0,0,1317,1318,7,8,0,0,1318,1324,3,358,179, - 0,1319,1320,5,136,0,0,1320,1322,5,46,0,0,1321,1323,3,184,92,0,1322, - 1321,1,0,0,0,1322,1323,1,0,0,0,1323,1325,1,0,0,0,1324,1319,1,0,0, - 0,1324,1325,1,0,0,0,1325,139,1,0,0,0,1326,1327,5,179,0,0,1327,1328, - 5,86,0,0,1328,1329,7,8,0,0,1329,1335,3,358,179,0,1330,1331,5,136, - 0,0,1331,1333,5,188,0,0,1332,1334,3,186,93,0,1333,1332,1,0,0,0,1333, - 1334,1,0,0,0,1334,1336,1,0,0,0,1335,1330,1,0,0,0,1335,1336,1,0,0, - 0,1336,141,1,0,0,0,1337,1338,5,179,0,0,1338,1339,5,86,0,0,1339,1340, - 7,8,0,0,1340,1346,3,358,179,0,1341,1342,5,136,0,0,1342,1344,5,32, - 0,0,1343,1345,3,192,96,0,1344,1343,1,0,0,0,1344,1345,1,0,0,0,1345, - 1347,1,0,0,0,1346,1341,1,0,0,0,1346,1347,1,0,0,0,1347,143,1,0,0, - 0,1348,1352,3,146,73,0,1349,1352,3,148,74,0,1350,1352,3,150,75,0, - 1351,1348,1,0,0,0,1351,1349,1,0,0,0,1351,1350,1,0,0,0,1352,145,1, - 0,0,0,1353,1354,5,34,0,0,1354,1355,5,136,0,0,1355,1356,5,46,0,0, - 1356,1357,3,184,92,0,1357,1360,5,108,0,0,1358,1361,3,314,157,0,1359, - 1361,5,133,0,0,1360,1358,1,0,0,0,1360,1359,1,0,0,0,1361,147,1,0, - 0,0,1362,1363,5,34,0,0,1363,1364,5,136,0,0,1364,1365,5,188,0,0,1365, - 1366,3,186,93,0,1366,1369,5,108,0,0,1367,1370,3,314,157,0,1368,1370, - 5,133,0,0,1369,1367,1,0,0,0,1369,1368,1,0,0,0,1370,149,1,0,0,0,1371, - 1372,5,34,0,0,1372,1373,5,136,0,0,1373,1374,5,32,0,0,1374,1375,3, - 192,96,0,1375,1378,5,108,0,0,1376,1379,3,314,157,0,1377,1379,5,133, - 0,0,1378,1376,1,0,0,0,1378,1377,1,0,0,0,1379,151,1,0,0,0,1380,1381, - 5,67,0,0,1381,1382,3,4,2,0,1382,153,1,0,0,0,1383,1389,5,176,0,0, - 1384,1390,5,2,0,0,1385,1386,3,358,179,0,1386,1387,5,249,0,0,1387, - 1388,3,304,152,0,1388,1390,1,0,0,0,1389,1384,1,0,0,0,1389,1385,1, - 0,0,0,1389,1390,1,0,0,0,1390,155,1,0,0,0,1391,1392,5,264,0,0,1392, - 1393,5,180,0,0,1393,1403,5,265,0,0,1394,1396,3,314,157,0,1395,1394, - 1,0,0,0,1395,1396,1,0,0,0,1396,1404,1,0,0,0,1397,1400,3,314,157, - 0,1398,1399,5,263,0,0,1399,1401,3,304,152,0,1400,1398,1,0,0,0,1400, - 1401,1,0,0,0,1401,1404,1,0,0,0,1402,1404,3,304,152,0,1403,1395,1, - 0,0,0,1403,1397,1,0,0,0,1403,1402,1,0,0,0,1404,1405,1,0,0,0,1405, - 1406,5,266,0,0,1406,157,1,0,0,0,1407,1408,5,107,0,0,1408,1409,5, - 121,0,0,1409,1410,3,186,93,0,1410,159,1,0,0,0,1411,1412,5,118,0, - 0,1412,1413,5,45,0,0,1413,1414,5,98,0,0,1414,1416,5,274,0,0,1415, - 1417,5,144,0,0,1416,1415,1,0,0,0,1416,1417,1,0,0,0,1417,1418,1,0, - 0,0,1418,1419,5,103,0,0,1419,1420,5,188,0,0,1420,1430,3,186,93,0, - 1421,1422,5,145,0,0,1422,1423,5,265,0,0,1423,1426,3,304,152,0,1424, - 1425,5,263,0,0,1425,1427,3,304,152,0,1426,1424,1,0,0,0,1426,1427, - 1,0,0,0,1427,1428,1,0,0,0,1428,1429,5,266,0,0,1429,1431,1,0,0,0, - 1430,1421,1,0,0,0,1430,1431,1,0,0,0,1431,161,1,0,0,0,1432,1436,3, - 164,82,0,1433,1436,3,166,83,0,1434,1436,3,168,84,0,1435,1432,1,0, - 0,0,1435,1433,1,0,0,0,1435,1434,1,0,0,0,1436,163,1,0,0,0,1437,1438, - 5,162,0,0,1438,1451,3,186,93,0,1439,1440,5,145,0,0,1440,1441,5,265, - 0,0,1441,1446,3,304,152,0,1442,1443,5,263,0,0,1443,1445,3,304,152, - 0,1444,1442,1,0,0,0,1445,1448,1,0,0,0,1446,1447,1,0,0,0,1446,1444, - 1,0,0,0,1447,1449,1,0,0,0,1448,1446,1,0,0,0,1449,1450,5,266,0,0, - 1450,1452,1,0,0,0,1451,1439,1,0,0,0,1451,1452,1,0,0,0,1452,165,1, - 0,0,0,1453,1454,5,162,0,0,1454,1455,5,13,0,0,1455,167,1,0,0,0,1456, - 1457,5,162,0,0,1457,1458,5,85,0,0,1458,1459,3,190,95,0,1459,169, - 1,0,0,0,1460,1461,5,93,0,0,1461,1462,5,66,0,0,1462,171,1,0,0,0,1463, - 1464,5,93,0,0,1464,1465,5,132,0,0,1465,1466,5,66,0,0,1466,173,1, - 0,0,0,1467,1468,3,354,177,0,1468,175,1,0,0,0,1469,1470,3,354,177, - 0,1470,177,1,0,0,0,1471,1472,3,354,177,0,1472,179,1,0,0,0,1473,1474, - 3,354,177,0,1474,181,1,0,0,0,1475,1476,3,354,177,0,1476,183,1,0, - 0,0,1477,1478,3,354,177,0,1478,185,1,0,0,0,1479,1484,3,358,179,0, - 1480,1481,5,261,0,0,1481,1483,3,358,179,0,1482,1480,1,0,0,0,1483, - 1486,1,0,0,0,1484,1482,1,0,0,0,1484,1485,1,0,0,0,1485,187,1,0,0, - 0,1486,1484,1,0,0,0,1487,1492,3,358,179,0,1488,1489,5,261,0,0,1489, - 1491,3,358,179,0,1490,1488,1,0,0,0,1491,1494,1,0,0,0,1492,1490,1, - 0,0,0,1492,1493,1,0,0,0,1493,189,1,0,0,0,1494,1492,1,0,0,0,1495, - 1498,3,362,181,0,1496,1498,3,354,177,0,1497,1495,1,0,0,0,1497,1496, - 1,0,0,0,1498,191,1,0,0,0,1499,1502,3,354,177,0,1500,1502,4,96,0, - 0,1501,1499,1,0,0,0,1501,1500,1,0,0,0,1502,193,1,0,0,0,1503,1506, - 3,186,93,0,1504,1506,3,188,94,0,1505,1503,1,0,0,0,1505,1504,1,0, - 0,0,1506,195,1,0,0,0,1507,1508,5,21,0,0,1508,1509,5,26,0,0,1509, - 1511,3,292,146,0,1510,1507,1,0,0,0,1510,1511,1,0,0,0,1511,1514,1, - 0,0,0,1512,1513,5,34,0,0,1513,1515,3,314,157,0,1514,1512,1,0,0,0, - 1514,1515,1,0,0,0,1515,1519,1,0,0,0,1516,1517,5,168,0,0,1517,1518, - 5,79,0,0,1518,1520,3,254,127,0,1519,1516,1,0,0,0,1519,1520,1,0,0, - 0,1520,1524,1,0,0,0,1521,1522,5,216,0,0,1522,1523,5,175,0,0,1523, - 1525,3,248,124,0,1524,1521,1,0,0,0,1524,1525,1,0,0,0,1525,1529,1, - 0,0,0,1526,1527,5,23,0,0,1527,1528,5,9,0,0,1528,1530,3,230,115,0, - 1529,1526,1,0,0,0,1529,1530,1,0,0,0,1530,1533,1,0,0,0,1531,1532, - 5,24,0,0,1532,1534,3,314,157,0,1533,1531,1,0,0,0,1533,1534,1,0,0, - 0,1534,1545,1,0,0,0,1535,1536,5,30,0,0,1536,1537,5,94,0,0,1537,1542, - 3,354,177,0,1538,1539,5,216,0,0,1539,1540,5,151,0,0,1540,1541,5, - 249,0,0,1541,1543,5,277,0,0,1542,1538,1,0,0,0,1542,1543,1,0,0,0, - 1543,1546,1,0,0,0,1544,1546,5,197,0,0,1545,1535,1,0,0,0,1545,1544, - 1,0,0,0,1545,1546,1,0,0,0,1546,1549,1,0,0,0,1547,1548,5,25,0,0,1548, - 1550,3,248,124,0,1549,1547,1,0,0,0,1549,1550,1,0,0,0,1550,197,1, - 0,0,0,1551,1556,3,200,100,0,1552,1553,5,263,0,0,1553,1555,3,200, - 100,0,1554,1552,1,0,0,0,1555,1558,1,0,0,0,1556,1554,1,0,0,0,1556, - 1557,1,0,0,0,1557,199,1,0,0,0,1558,1556,1,0,0,0,1559,1560,3,354, - 177,0,1560,1561,5,249,0,0,1561,1562,3,304,152,0,1562,201,1,0,0,0, - 1563,1564,5,265,0,0,1564,1567,3,182,91,0,1565,1566,5,34,0,0,1566, - 1568,3,314,157,0,1567,1565,1,0,0,0,1567,1568,1,0,0,0,1568,1577,1, - 0,0,0,1569,1570,5,263,0,0,1570,1573,3,182,91,0,1571,1572,5,34,0, - 0,1572,1574,3,314,157,0,1573,1571,1,0,0,0,1573,1574,1,0,0,0,1574, - 1576,1,0,0,0,1575,1569,1,0,0,0,1576,1579,1,0,0,0,1577,1575,1,0,0, - 0,1577,1578,1,0,0,0,1578,1580,1,0,0,0,1579,1577,1,0,0,0,1580,1581, - 5,266,0,0,1581,203,1,0,0,0,1582,1584,3,206,103,0,1583,1582,1,0,0, - 0,1583,1584,1,0,0,0,1584,1585,1,0,0,0,1585,1586,3,258,129,0,1586, - 205,1,0,0,0,1587,1588,5,216,0,0,1588,1593,3,274,137,0,1589,1590, - 5,263,0,0,1590,1592,3,274,137,0,1591,1589,1,0,0,0,1592,1595,1,0, - 0,0,1593,1591,1,0,0,0,1593,1594,1,0,0,0,1594,207,1,0,0,0,1595,1593, - 1,0,0,0,1596,1597,5,150,0,0,1597,1598,5,110,0,0,1598,1600,3,292, - 146,0,1599,1601,5,53,0,0,1600,1599,1,0,0,0,1600,1601,1,0,0,0,1601, - 1605,1,0,0,0,1602,1606,5,225,0,0,1603,1604,5,263,0,0,1604,1606,5, - 225,0,0,1605,1602,1,0,0,0,1605,1603,1,0,0,0,1605,1606,1,0,0,0,1606, - 1610,1,0,0,0,1607,1611,5,226,0,0,1608,1609,5,263,0,0,1609,1611,5, - 226,0,0,1610,1607,1,0,0,0,1610,1608,1,0,0,0,1610,1611,1,0,0,0,1611, - 1624,1,0,0,0,1612,1613,5,263,0,0,1613,1616,3,210,105,0,1614,1616, - 3,210,105,0,1615,1612,1,0,0,0,1615,1614,1,0,0,0,1616,1621,1,0,0, - 0,1617,1618,5,263,0,0,1618,1620,3,210,105,0,1619,1617,1,0,0,0,1620, - 1623,1,0,0,0,1621,1622,1,0,0,0,1621,1619,1,0,0,0,1622,1625,1,0,0, - 0,1623,1621,1,0,0,0,1624,1615,1,0,0,0,1624,1625,1,0,0,0,1625,209, - 1,0,0,0,1626,1627,5,81,0,0,1627,1628,5,110,0,0,1628,1629,3,292,146, - 0,1629,1630,5,224,0,0,1630,1631,3,186,93,0,1631,1633,3,292,146,0, - 1632,1634,5,53,0,0,1633,1632,1,0,0,0,1633,1634,1,0,0,0,1634,1636, - 1,0,0,0,1635,1637,5,225,0,0,1636,1635,1,0,0,0,1636,1637,1,0,0,0, - 1637,1639,1,0,0,0,1638,1640,5,226,0,0,1639,1638,1,0,0,0,1639,1640, - 1,0,0,0,1640,211,1,0,0,0,1641,1642,3,192,96,0,1642,1645,3,328,164, - 0,1643,1644,5,34,0,0,1644,1646,3,314,157,0,1645,1643,1,0,0,0,1645, - 1646,1,0,0,0,1646,213,1,0,0,0,1647,1648,3,182,91,0,1648,1651,3,328, - 164,0,1649,1650,5,34,0,0,1650,1652,3,314,157,0,1651,1649,1,0,0,0, - 1651,1652,1,0,0,0,1652,215,1,0,0,0,1653,1654,3,218,109,0,1654,217, - 1,0,0,0,1655,1656,3,182,91,0,1656,1664,3,328,164,0,1657,1661,3,224, - 112,0,1658,1660,3,224,112,0,1659,1658,1,0,0,0,1660,1663,1,0,0,0, - 1661,1662,1,0,0,0,1661,1659,1,0,0,0,1662,1665,1,0,0,0,1663,1661, - 1,0,0,0,1664,1657,1,0,0,0,1664,1665,1,0,0,0,1665,1668,1,0,0,0,1666, - 1667,5,34,0,0,1667,1669,3,314,157,0,1668,1666,1,0,0,0,1668,1669, - 1,0,0,0,1669,1672,1,0,0,0,1670,1671,5,150,0,0,1671,1673,5,110,0, - 0,1672,1670,1,0,0,0,1672,1673,1,0,0,0,1673,219,1,0,0,0,1674,1682, - 3,212,106,0,1675,1679,3,224,112,0,1676,1678,3,224,112,0,1677,1676, - 1,0,0,0,1678,1681,1,0,0,0,1679,1680,1,0,0,0,1679,1677,1,0,0,0,1680, - 1683,1,0,0,0,1681,1679,1,0,0,0,1682,1675,1,0,0,0,1682,1683,1,0,0, - 0,1683,221,1,0,0,0,1684,1685,3,182,91,0,1685,1688,3,328,164,0,1686, - 1687,5,34,0,0,1687,1689,3,314,157,0,1688,1686,1,0,0,0,1688,1689, - 1,0,0,0,1689,1697,1,0,0,0,1690,1694,3,224,112,0,1691,1693,3,224, - 112,0,1692,1691,1,0,0,0,1693,1696,1,0,0,0,1694,1695,1,0,0,0,1694, - 1692,1,0,0,0,1695,1698,1,0,0,0,1696,1694,1,0,0,0,1697,1690,1,0,0, - 0,1697,1698,1,0,0,0,1698,223,1,0,0,0,1699,1701,5,132,0,0,1700,1699, - 1,0,0,0,1700,1701,1,0,0,0,1701,1702,1,0,0,0,1702,1705,5,133,0,0, - 1703,1705,3,226,113,0,1704,1700,1,0,0,0,1704,1703,1,0,0,0,1705,225, - 1,0,0,0,1706,1707,5,60,0,0,1707,1715,3,304,152,0,1708,1709,5,35, - 0,0,1709,1715,3,304,152,0,1710,1711,5,51,0,0,1711,1715,3,304,152, - 0,1712,1713,5,16,0,0,1713,1715,3,360,180,0,1714,1706,1,0,0,0,1714, - 1708,1,0,0,0,1714,1710,1,0,0,0,1714,1712,1,0,0,0,1715,227,1,0,0, - 0,1716,1717,7,10,0,0,1717,229,1,0,0,0,1718,1719,7,11,0,0,1719,231, - 1,0,0,0,1720,1725,3,234,117,0,1721,1722,5,263,0,0,1722,1724,3,234, - 117,0,1723,1721,1,0,0,0,1724,1727,1,0,0,0,1725,1726,1,0,0,0,1725, - 1723,1,0,0,0,1726,1730,1,0,0,0,1727,1725,1,0,0,0,1728,1729,5,263, - 0,0,1729,1731,3,236,118,0,1730,1728,1,0,0,0,1730,1731,1,0,0,0,1731, - 1734,1,0,0,0,1732,1734,3,236,118,0,1733,1720,1,0,0,0,1733,1732,1, - 0,0,0,1734,233,1,0,0,0,1735,1737,5,89,0,0,1736,1738,3,292,146,0, - 1737,1736,1,0,0,0,1737,1738,1,0,0,0,1738,1739,1,0,0,0,1739,1740, - 5,146,0,0,1740,1741,3,360,180,0,1741,235,1,0,0,0,1742,1744,5,154, - 0,0,1743,1745,3,292,146,0,1744,1743,1,0,0,0,1744,1745,1,0,0,0,1745, - 1746,1,0,0,0,1746,1747,5,265,0,0,1747,1748,5,145,0,0,1748,1754,3, - 238,119,0,1749,1750,5,263,0,0,1750,1751,5,145,0,0,1751,1753,3,238, - 119,0,1752,1749,1,0,0,0,1753,1756,1,0,0,0,1754,1755,1,0,0,0,1754, - 1752,1,0,0,0,1755,1757,1,0,0,0,1756,1754,1,0,0,0,1757,1758,5,266, - 0,0,1758,237,1,0,0,0,1759,1760,5,210,0,0,1760,1761,3,244,122,0,1761, - 1762,3,304,152,0,1762,1775,1,0,0,0,1763,1764,3,304,152,0,1764,1765, - 3,242,121,0,1765,1767,1,0,0,0,1766,1763,1,0,0,0,1766,1767,1,0,0, - 0,1767,1768,1,0,0,0,1768,1772,5,211,0,0,1769,1770,3,242,121,0,1770, - 1771,3,304,152,0,1771,1773,1,0,0,0,1772,1769,1,0,0,0,1772,1773,1, - 0,0,0,1773,1775,1,0,0,0,1774,1759,1,0,0,0,1774,1766,1,0,0,0,1775, - 239,1,0,0,0,1776,1777,5,30,0,0,1777,1778,5,94,0,0,1778,1783,3,358, - 179,0,1779,1780,5,216,0,0,1780,1781,5,151,0,0,1781,1782,5,249,0, - 0,1782,1784,3,360,180,0,1783,1779,1,0,0,0,1783,1784,1,0,0,0,1784, - 1787,1,0,0,0,1785,1787,5,197,0,0,1786,1776,1,0,0,0,1786,1785,1,0, - 0,0,1787,241,1,0,0,0,1788,1794,1,0,0,0,1789,1794,5,251,0,0,1790, - 1794,5,252,0,0,1791,1794,5,253,0,0,1792,1794,5,254,0,0,1793,1788, - 1,0,0,0,1793,1789,1,0,0,0,1793,1790,1,0,0,0,1793,1791,1,0,0,0,1793, - 1792,1,0,0,0,1794,243,1,0,0,0,1795,1804,5,249,0,0,1796,1804,5,250, - 0,0,1797,1804,5,115,0,0,1798,1804,5,164,0,0,1799,1804,5,163,0,0, - 1800,1804,5,15,0,0,1801,1804,5,94,0,0,1802,1804,3,242,121,0,1803, - 1795,1,0,0,0,1803,1796,1,0,0,0,1803,1797,1,0,0,0,1803,1798,1,0,0, - 0,1803,1799,1,0,0,0,1803,1800,1,0,0,0,1803,1801,1,0,0,0,1803,1802, - 1,0,0,0,1804,245,1,0,0,0,1805,1806,5,115,0,0,1806,1809,3,354,177, - 0,1807,1808,7,12,0,0,1808,1810,5,153,0,0,1809,1807,1,0,0,0,1809, - 1810,1,0,0,0,1810,247,1,0,0,0,1811,1812,5,265,0,0,1812,1817,3,256, - 128,0,1813,1814,5,263,0,0,1814,1816,3,256,128,0,1815,1813,1,0,0, - 0,1816,1819,1,0,0,0,1817,1815,1,0,0,0,1817,1818,1,0,0,0,1818,1820, - 1,0,0,0,1819,1817,1,0,0,0,1820,1821,5,266,0,0,1821,249,1,0,0,0,1822, - 1823,5,265,0,0,1823,1828,3,212,106,0,1824,1825,5,263,0,0,1825,1827, - 3,212,106,0,1826,1824,1,0,0,0,1827,1830,1,0,0,0,1828,1829,1,0,0, - 0,1828,1826,1,0,0,0,1829,1831,1,0,0,0,1830,1828,1,0,0,0,1831,1832, - 5,266,0,0,1832,251,1,0,0,0,1833,1838,3,304,152,0,1834,1835,5,263, - 0,0,1835,1837,3,304,152,0,1836,1834,1,0,0,0,1837,1840,1,0,0,0,1838, - 1836,1,0,0,0,1838,1839,1,0,0,0,1839,253,1,0,0,0,1840,1838,1,0,0, - 0,1841,1851,5,52,0,0,1842,1843,5,71,0,0,1843,1844,5,191,0,0,1844, - 1845,5,26,0,0,1845,1849,3,314,157,0,1846,1847,5,63,0,0,1847,1848, - 5,26,0,0,1848,1850,3,314,157,0,1849,1846,1,0,0,0,1849,1850,1,0,0, - 0,1850,1852,1,0,0,0,1851,1842,1,0,0,0,1851,1852,1,0,0,0,1852,1857, - 1,0,0,0,1853,1854,5,117,0,0,1854,1855,5,191,0,0,1855,1856,5,26,0, - 0,1856,1858,3,314,157,0,1857,1853,1,0,0,0,1857,1858,1,0,0,0,1858, - 255,1,0,0,0,1859,1862,3,358,179,0,1860,1861,5,249,0,0,1861,1863, - 3,304,152,0,1862,1860,1,0,0,0,1862,1863,1,0,0,0,1863,257,1,0,0,0, - 1864,1875,3,260,130,0,1865,1866,5,139,0,0,1866,1867,5,26,0,0,1867, - 1872,3,264,132,0,1868,1869,5,263,0,0,1869,1871,3,264,132,0,1870, - 1868,1,0,0,0,1871,1874,1,0,0,0,1872,1870,1,0,0,0,1872,1873,1,0,0, - 0,1873,1876,1,0,0,0,1874,1872,1,0,0,0,1875,1865,1,0,0,0,1875,1876, - 1,0,0,0,1876,1883,1,0,0,0,1877,1878,5,116,0,0,1878,1881,3,304,152, - 0,1879,1880,5,135,0,0,1880,1882,5,277,0,0,1881,1879,1,0,0,0,1881, - 1882,1,0,0,0,1882,1884,1,0,0,0,1883,1877,1,0,0,0,1883,1884,1,0,0, - 0,1884,259,1,0,0,0,1885,1886,6,130,-1,0,1886,1887,3,262,131,0,1887, - 1902,1,0,0,0,1888,1889,10,2,0,0,1889,1891,5,100,0,0,1890,1892,3, - 276,138,0,1891,1890,1,0,0,0,1891,1892,1,0,0,0,1892,1893,1,0,0,0, - 1893,1901,3,260,130,3,1894,1895,10,1,0,0,1895,1897,7,13,0,0,1896, - 1898,3,276,138,0,1897,1896,1,0,0,0,1897,1898,1,0,0,0,1898,1899,1, - 0,0,0,1899,1901,3,260,130,2,1900,1888,1,0,0,0,1900,1894,1,0,0,0, - 1901,1904,1,0,0,0,1902,1900,1,0,0,0,1902,1903,1,0,0,0,1903,261,1, - 0,0,0,1904,1902,1,0,0,0,1905,1922,3,266,133,0,1906,1907,5,188,0, - 0,1907,1922,3,186,93,0,1908,1909,5,211,0,0,1909,1914,3,304,152,0, - 1910,1911,5,263,0,0,1911,1913,3,304,152,0,1912,1910,1,0,0,0,1913, - 1916,1,0,0,0,1914,1912,1,0,0,0,1914,1915,1,0,0,0,1915,1922,1,0,0, - 0,1916,1914,1,0,0,0,1917,1918,5,265,0,0,1918,1919,3,258,129,0,1919, - 1920,5,266,0,0,1920,1922,1,0,0,0,1921,1905,1,0,0,0,1921,1906,1,0, - 0,0,1921,1908,1,0,0,0,1921,1917,1,0,0,0,1922,263,1,0,0,0,1923,1925, - 3,302,151,0,1924,1926,7,14,0,0,1925,1924,1,0,0,0,1925,1926,1,0,0, - 0,1926,1929,1,0,0,0,1927,1928,5,134,0,0,1928,1930,7,15,0,0,1929, - 1927,1,0,0,0,1929,1930,1,0,0,0,1930,265,1,0,0,0,1931,1933,5,174, - 0,0,1932,1934,3,276,138,0,1933,1932,1,0,0,0,1933,1934,1,0,0,0,1934, - 1936,1,0,0,0,1935,1937,5,183,0,0,1936,1935,1,0,0,0,1936,1937,1,0, - 0,0,1937,1938,1,0,0,0,1938,1943,3,278,139,0,1939,1940,5,263,0,0, - 1940,1942,3,278,139,0,1941,1939,1,0,0,0,1942,1945,1,0,0,0,1943,1941, - 1,0,0,0,1943,1944,1,0,0,0,1944,1955,1,0,0,0,1945,1943,1,0,0,0,1946, - 1947,5,82,0,0,1947,1952,3,280,140,0,1948,1949,5,263,0,0,1949,1951, - 3,280,140,0,1950,1948,1,0,0,0,1951,1954,1,0,0,0,1952,1950,1,0,0, - 0,1952,1953,1,0,0,0,1953,1956,1,0,0,0,1954,1952,1,0,0,0,1955,1946, - 1,0,0,0,1955,1956,1,0,0,0,1956,1959,1,0,0,0,1957,1958,5,215,0,0, - 1958,1960,3,306,153,0,1959,1957,1,0,0,0,1959,1960,1,0,0,0,1960,1964, - 1,0,0,0,1961,1962,5,87,0,0,1962,1963,5,26,0,0,1963,1965,3,268,134, - 0,1964,1961,1,0,0,0,1964,1965,1,0,0,0,1965,1968,1,0,0,0,1966,1967, - 5,90,0,0,1967,1969,3,306,153,0,1968,1966,1,0,0,0,1968,1969,1,0,0, - 0,1969,267,1,0,0,0,1970,1972,3,276,138,0,1971,1970,1,0,0,0,1971, - 1972,1,0,0,0,1972,1973,1,0,0,0,1973,1978,3,270,135,0,1974,1975,5, - 263,0,0,1975,1977,3,270,135,0,1976,1974,1,0,0,0,1977,1980,1,0,0, - 0,1978,1976,1,0,0,0,1978,1979,1,0,0,0,1979,269,1,0,0,0,1980,1978, - 1,0,0,0,1981,1982,3,272,136,0,1982,271,1,0,0,0,1983,1992,5,265,0, - 0,1984,1989,3,302,151,0,1985,1986,5,263,0,0,1986,1988,3,302,151, - 0,1987,1985,1,0,0,0,1988,1991,1,0,0,0,1989,1987,1,0,0,0,1989,1990, - 1,0,0,0,1990,1993,1,0,0,0,1991,1989,1,0,0,0,1992,1984,1,0,0,0,1992, - 1993,1,0,0,0,1993,1994,1,0,0,0,1994,1997,5,266,0,0,1995,1997,3,302, - 151,0,1996,1983,1,0,0,0,1996,1995,1,0,0,0,1997,273,1,0,0,0,1998, - 2000,3,358,179,0,1999,2001,3,292,146,0,2000,1999,1,0,0,0,2000,2001, - 1,0,0,0,2001,2002,1,0,0,0,2002,2003,5,9,0,0,2003,2004,3,296,148, - 0,2004,275,1,0,0,0,2005,2006,7,16,0,0,2006,277,1,0,0,0,2007,2012, - 3,302,151,0,2008,2010,5,9,0,0,2009,2008,1,0,0,0,2009,2010,1,0,0, - 0,2010,2011,1,0,0,0,2011,2013,3,358,179,0,2012,2009,1,0,0,0,2012, - 2013,1,0,0,0,2013,2020,1,0,0,0,2014,2015,3,354,177,0,2015,2016,5, - 261,0,0,2016,2017,5,257,0,0,2017,2020,1,0,0,0,2018,2020,5,257,0, - 0,2019,2007,1,0,0,0,2019,2014,1,0,0,0,2019,2018,1,0,0,0,2020,279, - 1,0,0,0,2021,2022,6,140,-1,0,2022,2023,3,286,143,0,2023,2037,1,0, - 0,0,2024,2033,10,2,0,0,2025,2026,5,38,0,0,2026,2027,5,109,0,0,2027, - 2034,3,286,143,0,2028,2029,3,282,141,0,2029,2030,5,109,0,0,2030, - 2031,3,280,140,0,2031,2032,3,284,142,0,2032,2034,1,0,0,0,2033,2025, - 1,0,0,0,2033,2028,1,0,0,0,2034,2036,1,0,0,0,2035,2024,1,0,0,0,2036, - 2039,1,0,0,0,2037,2035,1,0,0,0,2037,2038,1,0,0,0,2038,281,1,0,0, - 0,2039,2037,1,0,0,0,2040,2042,5,97,0,0,2041,2040,1,0,0,0,2041,2042, - 1,0,0,0,2042,2072,1,0,0,0,2043,2045,5,114,0,0,2044,2046,5,97,0,0, - 2045,2044,1,0,0,0,2045,2046,1,0,0,0,2046,2072,1,0,0,0,2047,2049, - 5,165,0,0,2048,2050,5,97,0,0,2049,2048,1,0,0,0,2049,2050,1,0,0,0, - 2050,2072,1,0,0,0,2051,2053,5,114,0,0,2052,2054,5,141,0,0,2053,2052, - 1,0,0,0,2053,2054,1,0,0,0,2054,2072,1,0,0,0,2055,2057,5,165,0,0, - 2056,2058,5,141,0,0,2057,2056,1,0,0,0,2057,2058,1,0,0,0,2058,2072, - 1,0,0,0,2059,2061,5,83,0,0,2060,2062,5,141,0,0,2061,2060,1,0,0,0, - 2061,2062,1,0,0,0,2062,2072,1,0,0,0,2063,2064,5,114,0,0,2064,2072, - 5,177,0,0,2065,2066,5,165,0,0,2066,2072,5,177,0,0,2067,2068,5,114, - 0,0,2068,2072,5,7,0,0,2069,2070,5,165,0,0,2070,2072,5,7,0,0,2071, - 2041,1,0,0,0,2071,2043,1,0,0,0,2071,2047,1,0,0,0,2071,2051,1,0,0, - 0,2071,2055,1,0,0,0,2071,2059,1,0,0,0,2071,2063,1,0,0,0,2071,2065, - 1,0,0,0,2071,2067,1,0,0,0,2071,2069,1,0,0,0,2072,283,1,0,0,0,2073, - 2074,5,136,0,0,2074,2088,3,306,153,0,2075,2076,5,205,0,0,2076,2077, - 5,265,0,0,2077,2082,3,358,179,0,2078,2079,5,263,0,0,2079,2081,3, - 358,179,0,2080,2078,1,0,0,0,2081,2084,1,0,0,0,2082,2080,1,0,0,0, - 2082,2083,1,0,0,0,2083,2085,1,0,0,0,2084,2082,1,0,0,0,2085,2086, - 5,266,0,0,2086,2088,1,0,0,0,2087,2073,1,0,0,0,2087,2075,1,0,0,0, - 2088,285,1,0,0,0,2089,2102,3,290,145,0,2090,2091,5,190,0,0,2091, - 2092,3,288,144,0,2092,2093,5,265,0,0,2093,2094,3,304,152,0,2094, - 2100,5,266,0,0,2095,2096,5,157,0,0,2096,2097,5,265,0,0,2097,2098, - 3,304,152,0,2098,2099,5,266,0,0,2099,2101,1,0,0,0,2100,2095,1,0, - 0,0,2100,2101,1,0,0,0,2101,2103,1,0,0,0,2102,2090,1,0,0,0,2102,2103, - 1,0,0,0,2103,287,1,0,0,0,2104,2105,7,17,0,0,2105,289,1,0,0,0,2106, - 2114,3,294,147,0,2107,2109,5,9,0,0,2108,2107,1,0,0,0,2108,2109,1, - 0,0,0,2109,2110,1,0,0,0,2110,2112,3,358,179,0,2111,2113,3,292,146, - 0,2112,2111,1,0,0,0,2112,2113,1,0,0,0,2113,2115,1,0,0,0,2114,2108, - 1,0,0,0,2114,2115,1,0,0,0,2115,291,1,0,0,0,2116,2117,5,265,0,0,2117, - 2122,3,192,96,0,2118,2119,5,263,0,0,2119,2121,3,192,96,0,2120,2118, - 1,0,0,0,2121,2124,1,0,0,0,2122,2120,1,0,0,0,2122,2123,1,0,0,0,2123, - 2125,1,0,0,0,2124,2122,1,0,0,0,2125,2126,5,266,0,0,2126,293,1,0, - 0,0,2127,2135,3,194,97,0,2128,2130,5,113,0,0,2129,2128,1,0,0,0,2129, - 2130,1,0,0,0,2130,2131,1,0,0,0,2131,2135,3,296,148,0,2132,2135,3, - 298,149,0,2133,2135,3,300,150,0,2134,2127,1,0,0,0,2134,2129,1,0, - 0,0,2134,2132,1,0,0,0,2134,2133,1,0,0,0,2135,295,1,0,0,0,2136,2137, - 5,265,0,0,2137,2138,3,204,102,0,2138,2139,5,266,0,0,2139,297,1,0, - 0,0,2140,2141,5,201,0,0,2141,2142,5,265,0,0,2142,2147,3,304,152, - 0,2143,2144,5,263,0,0,2144,2146,3,304,152,0,2145,2143,1,0,0,0,2146, - 2149,1,0,0,0,2147,2145,1,0,0,0,2147,2148,1,0,0,0,2148,2150,1,0,0, - 0,2149,2147,1,0,0,0,2150,2153,5,266,0,0,2151,2152,5,216,0,0,2152, - 2154,5,140,0,0,2153,2151,1,0,0,0,2153,2154,1,0,0,0,2154,299,1,0, - 0,0,2155,2156,5,265,0,0,2156,2157,3,280,140,0,2157,2158,5,266,0, - 0,2158,301,1,0,0,0,2159,2162,3,192,96,0,2160,2162,3,304,152,0,2161, - 2159,1,0,0,0,2161,2160,1,0,0,0,2162,303,1,0,0,0,2163,2164,3,306, - 153,0,2164,305,1,0,0,0,2165,2166,6,153,-1,0,2166,2168,3,310,155, - 0,2167,2169,3,308,154,0,2168,2167,1,0,0,0,2168,2169,1,0,0,0,2169, - 2173,1,0,0,0,2170,2171,5,132,0,0,2171,2173,3,306,153,3,2172,2165, - 1,0,0,0,2172,2170,1,0,0,0,2173,2182,1,0,0,0,2174,2175,10,2,0,0,2175, - 2176,5,5,0,0,2176,2181,3,306,153,3,2177,2178,10,1,0,0,2178,2179, - 5,138,0,0,2179,2181,3,306,153,2,2180,2174,1,0,0,0,2180,2177,1,0, - 0,0,2181,2184,1,0,0,0,2182,2180,1,0,0,0,2182,2183,1,0,0,0,2183,307, - 1,0,0,0,2184,2182,1,0,0,0,2185,2186,3,316,158,0,2186,2187,3,310, - 155,0,2187,2244,1,0,0,0,2188,2189,3,316,158,0,2189,2190,3,318,159, - 0,2190,2191,3,296,148,0,2191,2244,1,0,0,0,2192,2194,5,132,0,0,2193, - 2192,1,0,0,0,2193,2194,1,0,0,0,2194,2195,1,0,0,0,2195,2196,5,15, - 0,0,2196,2197,3,310,155,0,2197,2198,5,5,0,0,2198,2199,3,310,155, - 0,2199,2244,1,0,0,0,2200,2202,5,132,0,0,2201,2200,1,0,0,0,2201,2202, - 1,0,0,0,2202,2203,1,0,0,0,2203,2204,5,94,0,0,2204,2205,5,265,0,0, - 2205,2210,3,304,152,0,2206,2207,5,263,0,0,2207,2209,3,304,152,0, - 2208,2206,1,0,0,0,2209,2212,1,0,0,0,2210,2208,1,0,0,0,2210,2211, - 1,0,0,0,2211,2213,1,0,0,0,2212,2210,1,0,0,0,2213,2214,5,266,0,0, - 2214,2244,1,0,0,0,2215,2217,5,132,0,0,2216,2215,1,0,0,0,2216,2217, - 1,0,0,0,2217,2218,1,0,0,0,2218,2219,5,94,0,0,2219,2244,3,296,148, - 0,2220,2222,5,132,0,0,2221,2220,1,0,0,0,2221,2222,1,0,0,0,2222,2223, - 1,0,0,0,2223,2224,7,18,0,0,2224,2227,3,310,155,0,2225,2226,5,62, - 0,0,2226,2228,3,310,155,0,2227,2225,1,0,0,0,2227,2228,1,0,0,0,2228, - 2244,1,0,0,0,2229,2230,7,19,0,0,2230,2244,3,310,155,0,2231,2233, - 5,108,0,0,2232,2234,5,132,0,0,2233,2232,1,0,0,0,2233,2234,1,0,0, - 0,2234,2235,1,0,0,0,2235,2244,7,20,0,0,2236,2238,5,108,0,0,2237, - 2239,5,132,0,0,2238,2237,1,0,0,0,2238,2239,1,0,0,0,2239,2240,1,0, - 0,0,2240,2241,5,57,0,0,2241,2242,5,82,0,0,2242,2244,3,310,155,0, - 2243,2185,1,0,0,0,2243,2188,1,0,0,0,2243,2193,1,0,0,0,2243,2201, - 1,0,0,0,2243,2216,1,0,0,0,2243,2221,1,0,0,0,2243,2229,1,0,0,0,2243, - 2231,1,0,0,0,2243,2236,1,0,0,0,2244,309,1,0,0,0,2245,2246,6,155, - -1,0,2246,2250,3,312,156,0,2247,2248,7,21,0,0,2248,2250,3,310,155, - 4,2249,2245,1,0,0,0,2249,2247,1,0,0,0,2250,2262,1,0,0,0,2251,2252, - 10,3,0,0,2252,2253,7,22,0,0,2253,2261,3,310,155,4,2254,2255,10,2, - 0,0,2255,2256,7,21,0,0,2256,2261,3,310,155,3,2257,2258,10,1,0,0, - 2258,2259,5,260,0,0,2259,2261,3,310,155,2,2260,2251,1,0,0,0,2260, - 2254,1,0,0,0,2260,2257,1,0,0,0,2261,2264,1,0,0,0,2262,2260,1,0,0, - 0,2262,2263,1,0,0,0,2263,311,1,0,0,0,2264,2262,1,0,0,0,2265,2266, - 6,156,-1,0,2266,2512,5,133,0,0,2267,2512,3,322,161,0,2268,2269,3, - 358,179,0,2269,2270,3,314,157,0,2270,2512,1,0,0,0,2271,2272,5,286, - 0,0,2272,2512,3,314,157,0,2273,2512,3,360,180,0,2274,2512,3,320, - 160,0,2275,2512,3,314,157,0,2276,2512,5,276,0,0,2277,2512,5,272, - 0,0,2278,2279,5,148,0,0,2279,2280,5,265,0,0,2280,2281,3,310,155, - 0,2281,2282,5,94,0,0,2282,2283,3,310,155,0,2283,2284,5,266,0,0,2284, - 2512,1,0,0,0,2285,2286,5,265,0,0,2286,2289,3,304,152,0,2287,2288, - 5,9,0,0,2288,2290,3,328,164,0,2289,2287,1,0,0,0,2289,2290,1,0,0, - 0,2290,2299,1,0,0,0,2291,2292,5,263,0,0,2292,2295,3,304,152,0,2293, - 2294,5,9,0,0,2294,2296,3,328,164,0,2295,2293,1,0,0,0,2295,2296,1, - 0,0,0,2296,2298,1,0,0,0,2297,2291,1,0,0,0,2298,2301,1,0,0,0,2299, - 2300,1,0,0,0,2299,2297,1,0,0,0,2300,2302,1,0,0,0,2301,2299,1,0,0, - 0,2302,2303,5,266,0,0,2303,2512,1,0,0,0,2304,2305,5,168,0,0,2305, - 2306,5,265,0,0,2306,2311,3,304,152,0,2307,2308,5,263,0,0,2308,2310, - 3,304,152,0,2309,2307,1,0,0,0,2310,2313,1,0,0,0,2311,2309,1,0,0, - 0,2311,2312,1,0,0,0,2312,2314,1,0,0,0,2313,2311,1,0,0,0,2314,2315, - 5,266,0,0,2315,2512,1,0,0,0,2316,2317,3,190,95,0,2317,2318,5,265, - 0,0,2318,2319,5,257,0,0,2319,2321,5,266,0,0,2320,2322,3,338,169, - 0,2321,2320,1,0,0,0,2321,2322,1,0,0,0,2322,2324,1,0,0,0,2323,2325, - 3,340,170,0,2324,2323,1,0,0,0,2324,2325,1,0,0,0,2325,2512,1,0,0, - 0,2326,2327,3,190,95,0,2327,2339,5,265,0,0,2328,2330,3,276,138,0, - 2329,2328,1,0,0,0,2329,2330,1,0,0,0,2330,2331,1,0,0,0,2331,2336, - 3,304,152,0,2332,2333,5,263,0,0,2333,2335,3,304,152,0,2334,2332, - 1,0,0,0,2335,2338,1,0,0,0,2336,2334,1,0,0,0,2336,2337,1,0,0,0,2337, - 2340,1,0,0,0,2338,2336,1,0,0,0,2339,2329,1,0,0,0,2339,2340,1,0,0, - 0,2340,2351,1,0,0,0,2341,2342,5,139,0,0,2342,2343,5,26,0,0,2343, - 2348,3,264,132,0,2344,2345,5,263,0,0,2345,2347,3,264,132,0,2346, - 2344,1,0,0,0,2347,2350,1,0,0,0,2348,2346,1,0,0,0,2348,2349,1,0,0, - 0,2349,2352,1,0,0,0,2350,2348,1,0,0,0,2351,2341,1,0,0,0,2351,2352, - 1,0,0,0,2352,2353,1,0,0,0,2353,2355,5,266,0,0,2354,2356,3,338,169, - 0,2355,2354,1,0,0,0,2355,2356,1,0,0,0,2356,2358,1,0,0,0,2357,2359, - 3,340,170,0,2358,2357,1,0,0,0,2358,2359,1,0,0,0,2359,2512,1,0,0, - 0,2360,2361,3,358,179,0,2361,2362,5,273,0,0,2362,2363,3,304,152, - 0,2363,2512,1,0,0,0,2364,2373,5,265,0,0,2365,2370,3,358,179,0,2366, - 2367,5,263,0,0,2367,2369,3,358,179,0,2368,2366,1,0,0,0,2369,2372, - 1,0,0,0,2370,2368,1,0,0,0,2370,2371,1,0,0,0,2371,2374,1,0,0,0,2372, - 2370,1,0,0,0,2373,2365,1,0,0,0,2373,2374,1,0,0,0,2374,2375,1,0,0, - 0,2375,2376,5,266,0,0,2376,2377,5,273,0,0,2377,2512,3,304,152,0, - 2378,2379,5,265,0,0,2379,2380,3,204,102,0,2380,2381,5,266,0,0,2381, - 2512,1,0,0,0,2382,2383,5,66,0,0,2383,2384,5,265,0,0,2384,2385,3, - 204,102,0,2385,2386,5,266,0,0,2386,2512,1,0,0,0,2387,2388,5,28,0, - 0,2388,2390,3,310,155,0,2389,2391,3,336,168,0,2390,2389,1,0,0,0, - 2391,2392,1,0,0,0,2392,2390,1,0,0,0,2392,2393,1,0,0,0,2393,2396, - 1,0,0,0,2394,2395,5,59,0,0,2395,2397,3,304,152,0,2396,2394,1,0,0, - 0,2396,2397,1,0,0,0,2397,2398,1,0,0,0,2398,2399,5,61,0,0,2399,2512, - 1,0,0,0,2400,2402,5,28,0,0,2401,2403,3,336,168,0,2402,2401,1,0,0, - 0,2403,2404,1,0,0,0,2404,2402,1,0,0,0,2404,2405,1,0,0,0,2405,2408, - 1,0,0,0,2406,2407,5,59,0,0,2407,2409,3,304,152,0,2408,2406,1,0,0, - 0,2408,2409,1,0,0,0,2409,2410,1,0,0,0,2410,2411,5,61,0,0,2411,2512, - 1,0,0,0,2412,2413,5,29,0,0,2413,2414,5,265,0,0,2414,2415,3,304,152, - 0,2415,2416,5,9,0,0,2416,2417,3,328,164,0,2417,2418,5,266,0,0,2418, - 2512,1,0,0,0,2419,2420,5,195,0,0,2420,2421,5,265,0,0,2421,2422,3, - 304,152,0,2422,2423,5,9,0,0,2423,2424,3,328,164,0,2424,2425,5,266, - 0,0,2425,2512,1,0,0,0,2426,2427,5,8,0,0,2427,2436,5,267,0,0,2428, - 2433,3,304,152,0,2429,2430,5,263,0,0,2430,2432,3,304,152,0,2431, - 2429,1,0,0,0,2432,2435,1,0,0,0,2433,2431,1,0,0,0,2433,2434,1,0,0, - 0,2434,2437,1,0,0,0,2435,2433,1,0,0,0,2436,2428,1,0,0,0,2436,2437, - 1,0,0,0,2437,2438,1,0,0,0,2438,2512,5,268,0,0,2439,2512,3,358,179, - 0,2440,2512,5,40,0,0,2441,2445,5,42,0,0,2442,2443,5,265,0,0,2443, - 2444,5,277,0,0,2444,2446,5,266,0,0,2445,2442,1,0,0,0,2445,2446,1, - 0,0,0,2446,2512,1,0,0,0,2447,2451,5,43,0,0,2448,2449,5,265,0,0,2449, - 2450,5,277,0,0,2450,2452,5,266,0,0,2451,2448,1,0,0,0,2451,2452,1, - 0,0,0,2452,2512,1,0,0,0,2453,2457,5,119,0,0,2454,2455,5,265,0,0, - 2455,2456,5,277,0,0,2456,2458,5,266,0,0,2457,2454,1,0,0,0,2457,2458, - 1,0,0,0,2458,2512,1,0,0,0,2459,2463,5,120,0,0,2460,2461,5,265,0, - 0,2461,2462,5,277,0,0,2462,2464,5,266,0,0,2463,2460,1,0,0,0,2463, - 2464,1,0,0,0,2464,2512,1,0,0,0,2465,2512,5,44,0,0,2466,2512,5,41, - 0,0,2467,2468,5,184,0,0,2468,2469,5,265,0,0,2469,2470,3,310,155, - 0,2470,2471,5,82,0,0,2471,2474,3,310,155,0,2472,2473,5,78,0,0,2473, - 2475,3,310,155,0,2474,2472,1,0,0,0,2474,2475,1,0,0,0,2475,2476,1, - 0,0,0,2476,2477,5,266,0,0,2477,2512,1,0,0,0,2478,2479,5,131,0,0, - 2479,2480,5,265,0,0,2480,2483,3,310,155,0,2481,2482,5,263,0,0,2482, - 2484,3,326,163,0,2483,2481,1,0,0,0,2483,2484,1,0,0,0,2484,2485,1, - 0,0,0,2485,2486,5,266,0,0,2486,2512,1,0,0,0,2487,2488,5,68,0,0,2488, - 2489,5,265,0,0,2489,2490,3,358,179,0,2490,2491,5,82,0,0,2491,2492, - 3,310,155,0,2492,2493,5,266,0,0,2493,2512,1,0,0,0,2494,2495,5,265, - 0,0,2495,2496,3,304,152,0,2496,2497,5,266,0,0,2497,2512,1,0,0,0, - 2498,2499,5,88,0,0,2499,2508,5,265,0,0,2500,2505,3,354,177,0,2501, - 2502,5,263,0,0,2502,2504,3,354,177,0,2503,2501,1,0,0,0,2504,2507, - 1,0,0,0,2505,2503,1,0,0,0,2505,2506,1,0,0,0,2506,2509,1,0,0,0,2507, - 2505,1,0,0,0,2508,2500,1,0,0,0,2508,2509,1,0,0,0,2509,2510,1,0,0, - 0,2510,2512,5,266,0,0,2511,2265,1,0,0,0,2511,2267,1,0,0,0,2511,2268, - 1,0,0,0,2511,2271,1,0,0,0,2511,2273,1,0,0,0,2511,2274,1,0,0,0,2511, - 2275,1,0,0,0,2511,2276,1,0,0,0,2511,2277,1,0,0,0,2511,2278,1,0,0, - 0,2511,2285,1,0,0,0,2511,2304,1,0,0,0,2511,2316,1,0,0,0,2511,2326, - 1,0,0,0,2511,2360,1,0,0,0,2511,2364,1,0,0,0,2511,2378,1,0,0,0,2511, - 2382,1,0,0,0,2511,2387,1,0,0,0,2511,2400,1,0,0,0,2511,2412,1,0,0, - 0,2511,2419,1,0,0,0,2511,2426,1,0,0,0,2511,2439,1,0,0,0,2511,2440, - 1,0,0,0,2511,2441,1,0,0,0,2511,2447,1,0,0,0,2511,2453,1,0,0,0,2511, - 2459,1,0,0,0,2511,2465,1,0,0,0,2511,2466,1,0,0,0,2511,2467,1,0,0, - 0,2511,2478,1,0,0,0,2511,2487,1,0,0,0,2511,2494,1,0,0,0,2511,2498, - 1,0,0,0,2512,2523,1,0,0,0,2513,2514,10,15,0,0,2514,2515,5,267,0, - 0,2515,2516,3,310,155,0,2516,2517,5,268,0,0,2517,2522,1,0,0,0,2518, - 2519,10,13,0,0,2519,2520,5,261,0,0,2520,2522,3,358,179,0,2521,2513, - 1,0,0,0,2521,2518,1,0,0,0,2522,2525,1,0,0,0,2523,2521,1,0,0,0,2523, - 2524,1,0,0,0,2524,313,1,0,0,0,2525,2523,1,0,0,0,2526,2533,5,274, - 0,0,2527,2530,5,275,0,0,2528,2529,5,198,0,0,2529,2531,5,274,0,0, - 2530,2528,1,0,0,0,2530,2531,1,0,0,0,2531,2533,1,0,0,0,2532,2526, - 1,0,0,0,2532,2527,1,0,0,0,2533,315,1,0,0,0,2534,2535,7,23,0,0,2535, - 317,1,0,0,0,2536,2537,7,24,0,0,2537,319,1,0,0,0,2538,2539,7,25,0, - 0,2539,321,1,0,0,0,2540,2541,5,277,0,0,2541,2555,3,324,162,0,2542, - 2543,5,265,0,0,2543,2544,5,277,0,0,2544,2545,5,266,0,0,2545,2555, - 3,324,162,0,2546,2547,5,101,0,0,2547,2548,5,277,0,0,2548,2555,3, - 324,162,0,2549,2550,5,101,0,0,2550,2551,5,265,0,0,2551,2552,5,277, - 0,0,2552,2553,5,266,0,0,2553,2555,3,324,162,0,2554,2540,1,0,0,0, - 2554,2542,1,0,0,0,2554,2546,1,0,0,0,2554,2549,1,0,0,0,2555,323,1, - 0,0,0,2556,2557,7,26,0,0,2557,325,1,0,0,0,2558,2559,7,27,0,0,2559, - 327,1,0,0,0,2560,2561,6,164,-1,0,2561,2562,5,8,0,0,2562,2563,5,251, - 0,0,2563,2564,3,328,164,0,2564,2565,5,253,0,0,2565,2606,1,0,0,0, - 2566,2567,5,235,0,0,2567,2568,5,251,0,0,2568,2569,3,328,164,0,2569, - 2570,5,263,0,0,2570,2571,3,328,164,0,2571,2572,5,253,0,0,2572,2606, - 1,0,0,0,2573,2574,5,240,0,0,2574,2575,5,251,0,0,2575,2576,3,358, - 179,0,2576,2583,3,328,164,0,2577,2578,5,263,0,0,2578,2579,3,358, - 179,0,2579,2580,3,328,164,0,2580,2582,1,0,0,0,2581,2577,1,0,0,0, - 2582,2585,1,0,0,0,2583,2581,1,0,0,0,2583,2584,1,0,0,0,2584,2586, - 1,0,0,0,2585,2583,1,0,0,0,2586,2587,5,253,0,0,2587,2606,1,0,0,0, - 2588,2591,3,334,167,0,2589,2591,3,330,165,0,2590,2588,1,0,0,0,2590, - 2589,1,0,0,0,2591,2603,1,0,0,0,2592,2593,5,265,0,0,2593,2598,3,332, - 166,0,2594,2595,5,263,0,0,2595,2597,3,332,166,0,2596,2594,1,0,0, - 0,2597,2600,1,0,0,0,2598,2596,1,0,0,0,2598,2599,1,0,0,0,2599,2601, - 1,0,0,0,2600,2598,1,0,0,0,2601,2602,5,266,0,0,2602,2604,1,0,0,0, - 2603,2592,1,0,0,0,2603,2604,1,0,0,0,2604,2606,1,0,0,0,2605,2560, - 1,0,0,0,2605,2566,1,0,0,0,2605,2573,1,0,0,0,2605,2590,1,0,0,0,2606, - 2611,1,0,0,0,2607,2608,10,5,0,0,2608,2610,5,8,0,0,2609,2607,1,0, - 0,0,2610,2613,1,0,0,0,2611,2609,1,0,0,0,2611,2612,1,0,0,0,2612,329, - 1,0,0,0,2613,2611,1,0,0,0,2614,2615,7,28,0,0,2615,331,1,0,0,0,2616, - 2619,5,277,0,0,2617,2619,3,328,164,0,2618,2616,1,0,0,0,2618,2617, - 1,0,0,0,2619,333,1,0,0,0,2620,2625,5,284,0,0,2621,2625,5,285,0,0, - 2622,2625,5,286,0,0,2623,2625,3,358,179,0,2624,2620,1,0,0,0,2624, - 2621,1,0,0,0,2624,2622,1,0,0,0,2624,2623,1,0,0,0,2625,335,1,0,0, - 0,2626,2627,5,214,0,0,2627,2628,3,304,152,0,2628,2629,5,192,0,0, - 2629,2630,3,304,152,0,2630,337,1,0,0,0,2631,2632,5,74,0,0,2632,2633, - 5,265,0,0,2633,2634,5,215,0,0,2634,2635,3,306,153,0,2635,2636,5, - 266,0,0,2636,339,1,0,0,0,2637,2638,5,143,0,0,2638,2649,5,265,0,0, - 2639,2640,5,145,0,0,2640,2641,5,26,0,0,2641,2646,3,304,152,0,2642, - 2643,5,263,0,0,2643,2645,3,304,152,0,2644,2642,1,0,0,0,2645,2648, - 1,0,0,0,2646,2644,1,0,0,0,2646,2647,1,0,0,0,2647,2650,1,0,0,0,2648, - 2646,1,0,0,0,2649,2639,1,0,0,0,2649,2650,1,0,0,0,2650,2661,1,0,0, - 0,2651,2652,5,139,0,0,2652,2653,5,26,0,0,2653,2658,3,264,132,0,2654, - 2655,5,263,0,0,2655,2657,3,264,132,0,2656,2654,1,0,0,0,2657,2660, - 1,0,0,0,2658,2656,1,0,0,0,2658,2659,1,0,0,0,2659,2662,1,0,0,0,2660, - 2658,1,0,0,0,2661,2651,1,0,0,0,2661,2662,1,0,0,0,2662,2664,1,0,0, - 0,2663,2665,3,342,171,0,2664,2663,1,0,0,0,2664,2665,1,0,0,0,2665, - 2666,1,0,0,0,2666,2667,5,266,0,0,2667,341,1,0,0,0,2668,2669,5,154, - 0,0,2669,2685,3,344,172,0,2670,2671,5,169,0,0,2671,2685,3,344,172, - 0,2672,2673,5,154,0,0,2673,2674,5,15,0,0,2674,2675,3,344,172,0,2675, - 2676,5,5,0,0,2676,2677,3,344,172,0,2677,2685,1,0,0,0,2678,2679,5, - 169,0,0,2679,2680,5,15,0,0,2680,2681,3,344,172,0,2681,2682,5,5,0, - 0,2682,2683,3,344,172,0,2683,2685,1,0,0,0,2684,2668,1,0,0,0,2684, - 2670,1,0,0,0,2684,2672,1,0,0,0,2684,2678,1,0,0,0,2685,343,1,0,0, - 0,2686,2687,5,199,0,0,2687,2696,5,149,0,0,2688,2689,5,199,0,0,2689, - 2696,5,77,0,0,2690,2691,5,39,0,0,2691,2696,5,168,0,0,2692,2693,3, - 304,152,0,2693,2694,7,29,0,0,2694,2696,1,0,0,0,2695,2686,1,0,0,0, - 2695,2688,1,0,0,0,2695,2690,1,0,0,0,2695,2692,1,0,0,0,2696,345,1, - 0,0,0,2697,2698,3,358,179,0,2698,2699,5,261,0,0,2699,2700,3,358, - 179,0,2700,2703,1,0,0,0,2701,2703,3,358,179,0,2702,2697,1,0,0,0, - 2702,2701,1,0,0,0,2703,347,1,0,0,0,2704,2709,3,346,173,0,2705,2706, - 5,263,0,0,2706,2708,3,346,173,0,2707,2705,1,0,0,0,2708,2711,1,0, - 0,0,2709,2707,1,0,0,0,2709,2710,1,0,0,0,2710,349,1,0,0,0,2711,2709, - 1,0,0,0,2712,2726,5,2,0,0,2713,2726,5,4,0,0,2714,2726,5,58,0,0,2715, - 2726,5,37,0,0,2716,2726,5,99,0,0,2717,2726,5,162,0,0,2718,2723,5, - 174,0,0,2719,2720,5,265,0,0,2720,2721,3,358,179,0,2721,2722,5,266, - 0,0,2722,2724,1,0,0,0,2723,2719,1,0,0,0,2723,2724,1,0,0,0,2724,2726, - 1,0,0,0,2725,2712,1,0,0,0,2725,2713,1,0,0,0,2725,2714,1,0,0,0,2725, - 2715,1,0,0,0,2725,2716,1,0,0,0,2725,2717,1,0,0,0,2725,2718,1,0,0, - 0,2726,351,1,0,0,0,2727,2728,7,30,0,0,2728,353,1,0,0,0,2729,2734, - 3,358,179,0,2730,2731,5,261,0,0,2731,2733,3,358,179,0,2732,2730, - 1,0,0,0,2733,2736,1,0,0,0,2734,2732,1,0,0,0,2734,2735,1,0,0,0,2735, - 355,1,0,0,0,2736,2734,1,0,0,0,2737,2738,5,166,0,0,2738,2744,3,358, - 179,0,2739,2740,5,204,0,0,2740,2744,3,358,179,0,2741,2742,5,87,0, - 0,2742,2744,3,358,179,0,2743,2737,1,0,0,0,2743,2739,1,0,0,0,2743, - 2741,1,0,0,0,2744,357,1,0,0,0,2745,2751,5,280,0,0,2746,2751,5,274, - 0,0,2747,2751,3,364,182,0,2748,2751,5,283,0,0,2749,2751,5,281,0, - 0,2750,2745,1,0,0,0,2750,2746,1,0,0,0,2750,2747,1,0,0,0,2750,2748, - 1,0,0,0,2750,2749,1,0,0,0,2751,359,1,0,0,0,2752,2754,5,256,0,0,2753, - 2752,1,0,0,0,2753,2754,1,0,0,0,2754,2755,1,0,0,0,2755,2765,5,278, - 0,0,2756,2758,5,256,0,0,2757,2756,1,0,0,0,2757,2758,1,0,0,0,2758, - 2759,1,0,0,0,2759,2765,5,279,0,0,2760,2762,5,256,0,0,2761,2760,1, - 0,0,0,2761,2762,1,0,0,0,2762,2763,1,0,0,0,2763,2765,5,277,0,0,2764, - 2753,1,0,0,0,2764,2757,1,0,0,0,2764,2761,1,0,0,0,2765,361,1,0,0, - 0,2766,2767,7,31,0,0,2767,363,1,0,0,0,2768,2769,7,32,0,0,2769,365, - 1,0,0,0,352,369,376,400,413,417,421,430,435,439,445,447,452,456, - 460,467,472,478,482,491,498,502,507,509,514,518,525,529,534,538, - 542,546,554,559,563,571,575,584,587,590,596,603,614,619,624,629, - 634,643,646,649,653,679,705,714,724,727,741,759,761,770,781,790, - 797,801,808,814,817,822,829,843,856,861,866,872,908,911,917,920, - 926,932,944,946,957,965,970,974,979,986,990,994,1000,1004,1008,1017, - 1020,1023,1031,1045,1052,1065,1071,1076,1079,1082,1087,1091,1100, - 1105,1111,1115,1120,1125,1128,1136,1139,1143,1155,1158,1162,1167, - 1171,1187,1192,1199,1202,1208,1211,1218,1221,1225,1230,1233,1240, - 1243,1267,1281,1285,1289,1309,1311,1313,1322,1324,1333,1335,1344, - 1346,1351,1360,1369,1378,1389,1395,1400,1403,1416,1426,1430,1435, - 1446,1451,1484,1492,1497,1501,1505,1510,1514,1519,1524,1529,1533, - 1542,1545,1549,1556,1567,1573,1577,1583,1593,1600,1605,1610,1615, - 1621,1624,1633,1636,1639,1645,1651,1661,1664,1668,1672,1679,1682, - 1688,1694,1697,1700,1704,1714,1725,1730,1733,1737,1744,1754,1766, - 1772,1774,1783,1786,1793,1803,1809,1817,1828,1838,1849,1851,1857, - 1862,1872,1875,1881,1883,1891,1897,1900,1902,1914,1921,1925,1929, - 1933,1936,1943,1952,1955,1959,1964,1968,1971,1978,1989,1992,1996, - 2000,2009,2012,2019,2033,2037,2041,2045,2049,2053,2057,2061,2071, - 2082,2087,2100,2102,2108,2112,2114,2122,2129,2134,2147,2153,2161, - 2168,2172,2180,2182,2193,2201,2210,2216,2221,2227,2233,2238,2243, - 2249,2260,2262,2289,2295,2299,2311,2321,2324,2329,2336,2339,2348, - 2351,2355,2358,2370,2373,2392,2396,2404,2408,2433,2436,2445,2451, - 2457,2463,2474,2483,2505,2508,2511,2521,2523,2530,2532,2554,2583, - 2590,2598,2603,2605,2611,2618,2624,2646,2649,2658,2661,2664,2684, - 2695,2702,2709,2723,2725,2734,2743,2750,2753,2757,2761,2764 + 1,13,1,13,1,13,1,13,3,13,681,8,13,1,14,1,14,1,14,1,14,1,14,1,14, + 1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15, + 1,15,1,15,1,15,1,15,1,15,3,15,707,8,15,1,15,1,15,1,16,1,16,1,16, + 1,16,1,16,3,16,716,8,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, + 3,16,726,8,16,1,16,3,16,729,8,16,1,17,1,17,1,17,1,17,1,17,1,17,1, + 17,1,18,1,18,1,18,1,18,1,18,3,18,743,8,18,1,18,1,18,1,19,1,19,1, + 19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20,3,20,761, + 8,20,3,20,763,8,20,1,20,1,20,1,20,1,20,1,20,5,20,770,8,20,10,20, + 12,20,773,9,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,3,21,783, + 8,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,3,22,792,8,22,1,22,1,22, + 1,22,1,22,1,22,3,22,799,8,22,1,22,1,22,3,22,803,8,22,1,23,1,23,1, + 23,1,23,1,23,3,23,810,8,23,1,23,1,23,1,23,1,23,3,23,816,8,23,1,23, + 3,23,819,8,23,1,23,1,23,1,23,3,23,824,8,23,1,24,1,24,1,24,1,24,1, + 24,3,24,831,8,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,3,24,845,8,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1, + 26,1,26,1,26,1,26,3,26,858,8,26,1,26,1,26,1,26,3,26,863,8,26,1,26, + 1,26,1,26,3,26,868,8,26,1,27,1,27,1,27,1,27,3,27,874,8,27,1,27,1, + 27,1,27,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,29,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,32,1,32,3,32,910,8,32,1,32,3,32,913,8,32, + 1,32,1,32,1,33,1,33,3,33,919,8,33,1,33,3,33,922,8,33,1,33,1,33,1, + 34,1,34,3,34,928,8,34,1,35,1,35,1,35,1,35,3,35,934,8,35,1,35,1,35, + 1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,946,8,35,3,35,948,8, + 35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,959,8,36,1, + 37,1,37,1,37,1,37,1,37,1,37,3,37,967,8,37,1,38,1,38,1,38,3,38,972, + 8,38,1,38,1,38,3,38,976,8,38,1,39,1,39,1,39,3,39,981,8,39,1,39,1, + 39,1,40,1,40,1,40,3,40,988,8,40,1,40,1,40,3,40,992,8,40,1,41,1,41, + 3,41,996,8,41,1,41,1,41,1,41,1,41,3,41,1002,8,41,1,42,1,42,3,42, + 1006,8,42,1,42,1,42,3,42,1010,8,42,1,42,1,42,1,42,1,42,1,42,5,42, + 1017,8,42,10,42,12,42,1020,9,42,3,42,1022,8,42,1,42,3,42,1025,8, + 42,1,43,1,43,1,43,1,43,1,44,1,44,3,44,1033,8,44,1,45,1,45,1,45,1, + 45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,3,46,1047,8,46,1,46,1, + 46,1,46,1,47,1,47,3,47,1054,8,47,1,48,1,48,1,48,1,48,1,48,1,48,1, + 48,1,49,1,49,1,49,1,49,3,49,1067,8,49,1,49,1,49,1,49,1,49,3,49,1073, + 8,49,1,49,1,49,1,49,3,49,1078,8,49,1,49,3,49,1081,8,49,1,50,3,50, + 1084,8,50,1,50,1,50,1,50,3,50,1089,8,50,1,50,1,50,3,50,1093,8,50, + 1,50,1,50,1,50,1,50,1,50,5,50,1100,8,50,10,50,12,50,1103,9,50,1, + 50,1,50,3,50,1107,8,50,1,50,1,50,1,51,1,51,3,51,1113,8,51,1,52,1, + 52,3,52,1117,8,52,1,52,1,52,1,52,3,52,1122,8,52,1,53,1,53,1,53,3, + 53,1127,8,53,1,53,3,53,1130,8,53,1,53,1,53,1,53,1,53,5,53,1136,8, + 53,10,53,12,53,1139,9,53,3,53,1141,8,53,1,53,1,53,3,53,1145,8,53, + 1,54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,5,54,1155,8,54,10,54,12, + 54,1158,9,54,3,54,1160,8,54,1,54,1,54,3,54,1164,8,54,1,55,1,55,1, + 55,3,55,1169,8,55,1,55,1,55,3,55,1173,8,55,1,55,1,55,1,56,1,56,1, + 56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,3,56,1189,8,56,1, + 57,1,57,1,57,3,57,1194,8,57,1,57,1,57,1,57,5,57,1199,8,57,10,57, + 12,57,1202,9,57,3,57,1204,8,57,1,58,1,58,1,58,1,58,3,58,1210,8,58, + 1,58,3,58,1213,8,58,1,58,1,58,1,58,5,58,1218,8,58,10,58,12,58,1221, + 9,58,3,58,1223,8,58,1,59,1,59,3,59,1227,8,59,1,59,1,59,1,59,3,59, + 1232,8,59,1,59,3,59,1235,8,59,1,59,1,59,1,59,5,59,1240,8,59,10,59, + 12,59,1243,9,59,3,59,1245,8,59,1,60,1,60,1,60,1,60,1,60,1,61,1,61, + 1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63, + 1,64,1,64,3,64,1269,8,64,1,64,1,64,1,64,1,65,1,65,1,65,1,65,1,65, + 1,65,1,65,1,65,1,65,3,65,1283,8,65,1,65,1,65,3,65,1287,8,65,1,66, + 1,66,3,66,1291,8,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,68,1,68,1,68,3,68,1311,8,68,3,68, + 1313,8,68,3,68,1315,8,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,3,69, + 1324,8,69,3,69,1326,8,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70, + 1335,8,70,3,70,1337,8,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71, + 1346,8,71,3,71,1348,8,71,1,72,1,72,1,72,3,72,1353,8,72,1,73,1,73, + 1,73,1,73,1,73,1,73,1,73,3,73,1362,8,73,1,74,1,74,1,74,1,74,1,74, + 1,74,1,74,3,74,1371,8,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,3,75, + 1380,8,75,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,3,77,1391, + 8,77,1,78,1,78,1,78,1,78,3,78,1397,8,78,1,78,1,78,1,78,3,78,1402, + 8,78,1,78,3,78,1405,8,78,1,78,1,78,1,79,1,79,1,79,1,79,1,80,1,80, + 1,80,1,80,1,80,3,80,1418,8,80,1,80,1,80,1,80,1,80,1,80,1,80,1,80, + 1,80,3,80,1428,8,80,1,80,1,80,3,80,1432,8,80,1,81,1,81,1,81,3,81, + 1437,8,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,5,82,1446,8,82,10,82, + 12,82,1449,9,82,1,82,1,82,3,82,1453,8,82,1,83,1,83,1,83,1,84,1,84, + 1,84,1,84,1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,87,1,87,1,88,1,88, + 1,89,1,89,1,90,1,90,1,91,1,91,1,92,1,92,1,93,1,93,1,93,5,93,1484, + 8,93,10,93,12,93,1487,9,93,1,94,1,94,1,94,5,94,1492,8,94,10,94,12, + 94,1495,9,94,1,95,1,95,3,95,1499,8,95,1,96,1,96,3,96,1503,8,96,1, + 97,1,97,3,97,1507,8,97,1,98,1,98,1,98,3,98,1512,8,98,1,98,3,98,1515, + 8,98,1,98,1,98,1,98,3,98,1520,8,98,1,98,1,98,1,98,3,98,1525,8,98, + 1,98,1,98,1,98,3,98,1530,8,98,1,98,1,98,3,98,1534,8,98,1,98,1,98, + 1,98,1,98,1,98,1,98,1,98,3,98,1543,8,98,1,98,3,98,1546,8,98,1,98, + 1,98,3,98,1550,8,98,1,99,1,99,1,99,5,99,1555,8,99,10,99,12,99,1558, + 9,99,1,100,1,100,1,100,1,100,1,101,1,101,3,101,1566,8,101,1,101, + 1,101,3,101,1570,8,101,5,101,1572,8,101,10,101,12,101,1575,9,101, + 1,101,1,101,1,102,1,102,3,102,1581,8,102,1,103,3,103,1584,8,103, + 1,103,1,103,1,104,1,104,1,104,1,104,5,104,1592,8,104,10,104,12,104, + 1595,9,104,1,105,1,105,1,105,1,105,3,105,1601,8,105,1,105,1,105, + 1,105,3,105,1606,8,105,1,105,1,105,1,105,3,105,1611,8,105,1,105, + 1,105,1,105,3,105,1616,8,105,1,105,1,105,5,105,1620,8,105,10,105, + 12,105,1623,9,105,3,105,1625,8,105,1,106,1,106,1,106,1,106,1,106, + 1,106,1,106,3,106,1634,8,106,1,106,3,106,1637,8,106,1,106,3,106, + 1640,8,106,1,107,1,107,1,107,1,107,3,107,1646,8,107,1,108,1,108, + 1,108,3,108,1651,8,108,1,109,1,109,1,110,1,110,1,110,1,110,5,110, + 1659,8,110,10,110,12,110,1662,9,110,3,110,1664,8,110,1,110,3,110, + 1667,8,110,1,110,1,110,3,110,1671,8,110,1,111,1,111,1,111,1,112, + 1,112,1,112,5,112,1679,8,112,10,112,12,112,1682,9,112,3,112,1684, + 8,112,1,113,1,113,1,113,1,113,3,113,1690,8,113,1,113,1,113,5,113, + 1694,8,113,10,113,12,113,1697,9,113,3,113,1699,8,113,1,114,3,114, + 1702,8,114,1,114,1,114,3,114,1706,8,114,1,115,1,115,1,115,1,115, + 1,115,1,115,1,115,1,115,3,115,1716,8,115,1,116,1,116,1,117,1,117, + 1,118,1,118,1,118,5,118,1725,8,118,10,118,12,118,1728,9,118,1,118, + 1,118,3,118,1732,8,118,1,118,3,118,1735,8,118,1,119,1,119,3,119, + 1739,8,119,1,119,1,119,1,119,1,120,1,120,3,120,1746,8,120,1,120, + 1,120,1,120,1,120,1,120,1,120,5,120,1754,8,120,10,120,12,120,1757, + 9,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,3,121, + 1768,8,121,1,121,1,121,1,121,1,121,3,121,1774,8,121,3,121,1776,8, + 121,1,122,1,122,1,122,1,122,1,122,1,122,1,122,3,122,1785,8,122,1, + 122,3,122,1788,8,122,1,123,1,123,1,123,1,123,1,123,3,123,1795,8, + 123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,3,124,1805,8, + 124,1,125,1,125,1,125,1,125,3,125,1811,8,125,1,126,1,126,1,126,1, + 126,5,126,1817,8,126,10,126,12,126,1820,9,126,1,126,1,126,1,127, + 1,127,1,127,1,127,5,127,1828,8,127,10,127,12,127,1831,9,127,1,127, + 1,127,1,128,1,128,1,128,5,128,1838,8,128,10,128,12,128,1841,9,128, + 1,129,1,129,1,129,1,129,1,129,1,129,1,129,1,129,3,129,1851,8,129, + 3,129,1853,8,129,1,129,1,129,1,129,1,129,3,129,1859,8,129,1,130, + 1,130,1,130,3,130,1864,8,130,1,131,1,131,1,131,1,131,1,131,1,131, + 5,131,1872,8,131,10,131,12,131,1875,9,131,3,131,1877,8,131,1,131, + 1,131,1,131,1,131,3,131,1883,8,131,3,131,1885,8,131,1,132,1,132, + 1,132,1,132,1,132,1,132,3,132,1893,8,132,1,132,1,132,1,132,1,132, + 3,132,1899,8,132,1,132,5,132,1902,8,132,10,132,12,132,1905,9,132, + 1,133,1,133,1,133,1,133,1,133,1,133,1,133,5,133,1914,8,133,10,133, + 12,133,1917,9,133,1,133,1,133,1,133,1,133,3,133,1923,8,133,1,134, + 1,134,3,134,1927,8,134,1,134,1,134,3,134,1931,8,134,1,135,1,135, + 3,135,1935,8,135,1,135,3,135,1938,8,135,1,135,1,135,1,135,5,135, + 1943,8,135,10,135,12,135,1946,9,135,1,135,1,135,1,135,1,135,5,135, + 1952,8,135,10,135,12,135,1955,9,135,3,135,1957,8,135,1,135,1,135, + 3,135,1961,8,135,1,135,1,135,1,135,3,135,1966,8,135,1,135,1,135, + 3,135,1970,8,135,1,136,3,136,1973,8,136,1,136,1,136,1,136,5,136, + 1978,8,136,10,136,12,136,1981,9,136,1,137,1,137,1,138,1,138,1,138, + 1,138,5,138,1989,8,138,10,138,12,138,1992,9,138,3,138,1994,8,138, + 1,138,1,138,3,138,1998,8,138,1,139,1,139,3,139,2002,8,139,1,139, + 1,139,1,139,1,140,1,140,1,141,1,141,3,141,2011,8,141,1,141,3,141, + 2014,8,141,1,141,1,141,1,141,1,141,1,141,3,141,2021,8,141,1,142, + 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, + 3,142,2035,8,142,5,142,2037,8,142,10,142,12,142,2040,9,142,1,143, + 3,143,2043,8,143,1,143,1,143,3,143,2047,8,143,1,143,1,143,3,143, + 2051,8,143,1,143,1,143,3,143,2055,8,143,1,143,1,143,3,143,2059,8, + 143,1,143,1,143,3,143,2063,8,143,1,143,1,143,1,143,1,143,1,143,1, + 143,1,143,1,143,3,143,2073,8,143,1,144,1,144,1,144,1,144,1,144,1, + 144,1,144,5,144,2082,8,144,10,144,12,144,2085,9,144,1,144,1,144, + 3,144,2089,8,144,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,145, + 1,145,1,145,1,145,3,145,2102,8,145,3,145,2104,8,145,1,146,1,146, + 1,147,1,147,3,147,2110,8,147,1,147,1,147,3,147,2114,8,147,3,147, + 2116,8,147,1,148,1,148,1,148,1,148,5,148,2122,8,148,10,148,12,148, + 2125,9,148,1,148,1,148,1,149,1,149,3,149,2131,8,149,1,149,1,149, + 1,149,3,149,2136,8,149,1,150,1,150,1,150,1,150,1,151,1,151,1,151, + 1,151,1,151,5,151,2147,8,151,10,151,12,151,2150,9,151,1,151,1,151, + 1,151,3,151,2155,8,151,1,152,1,152,1,152,1,152,1,153,1,153,3,153, + 2163,8,153,1,154,1,154,1,155,1,155,1,155,3,155,2170,8,155,1,155, + 1,155,3,155,2174,8,155,1,155,1,155,1,155,1,155,1,155,1,155,5,155, + 2182,8,155,10,155,12,155,2185,9,155,1,156,1,156,1,156,1,156,1,156, + 1,156,1,156,1,156,3,156,2195,8,156,1,156,1,156,1,156,1,156,1,156, + 1,156,3,156,2203,8,156,1,156,1,156,1,156,1,156,1,156,5,156,2210, + 8,156,10,156,12,156,2213,9,156,1,156,1,156,1,156,3,156,2218,8,156, + 1,156,1,156,1,156,3,156,2223,8,156,1,156,1,156,1,156,1,156,3,156, + 2229,8,156,1,156,1,156,1,156,1,156,3,156,2235,8,156,1,156,1,156, + 1,156,3,156,2240,8,156,1,156,1,156,1,156,3,156,2245,8,156,1,157, + 1,157,1,157,1,157,3,157,2251,8,157,1,157,1,157,1,157,1,157,1,157, + 1,157,1,157,1,157,1,157,5,157,2262,8,157,10,157,12,157,2265,9,157, + 1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,3,158,2291,8,158,1,158,1,158,1,158,1,158,3,158,2297, + 8,158,5,158,2299,8,158,10,158,12,158,2302,9,158,1,158,1,158,1,158, + 1,158,1,158,1,158,1,158,5,158,2311,8,158,10,158,12,158,2314,9,158, + 1,158,1,158,1,158,1,158,1,158,1,158,1,158,3,158,2323,8,158,1,158, + 3,158,2326,8,158,1,158,1,158,1,158,3,158,2331,8,158,1,158,1,158, + 1,158,5,158,2336,8,158,10,158,12,158,2339,9,158,3,158,2341,8,158, + 1,158,1,158,1,158,1,158,1,158,5,158,2348,8,158,10,158,12,158,2351, + 9,158,3,158,2353,8,158,1,158,1,158,3,158,2357,8,158,1,158,3,158, + 2360,8,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,5,158, + 2370,8,158,10,158,12,158,2373,9,158,3,158,2375,8,158,1,158,1,158, + 1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,4,158,2392,8,158,11,158,12,158,2393,1,158,1,158,3,158, + 2398,8,158,1,158,1,158,1,158,1,158,4,158,2404,8,158,11,158,12,158, + 2405,1,158,1,158,3,158,2410,8,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,1,158,1,158,1,158,5,158,2433,8,158,10,158,12,158,2436, + 9,158,3,158,2438,8,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 3,158,2447,8,158,1,158,1,158,1,158,1,158,3,158,2453,8,158,1,158, + 1,158,1,158,1,158,3,158,2459,8,158,1,158,1,158,1,158,1,158,3,158, + 2465,8,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 3,158,2476,8,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,3,158, + 2485,8,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, + 1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,5,158,2505, + 8,158,10,158,12,158,2508,9,158,3,158,2510,8,158,1,158,3,158,2513, + 8,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,5,158,2523, + 8,158,10,158,12,158,2526,9,158,1,159,1,159,1,159,1,159,3,159,2532, + 8,159,3,159,2534,8,159,1,160,1,160,1,161,1,161,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,163,1,163, + 1,163,1,163,3,163,2556,8,163,1,164,1,164,1,165,1,165,1,166,1,166, + 1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166, + 1,166,1,166,1,166,1,166,1,166,1,166,1,166,1,166,5,166,2583,8,166, + 10,166,12,166,2586,9,166,1,166,1,166,1,166,1,166,3,166,2592,8,166, + 1,166,1,166,1,166,1,166,5,166,2598,8,166,10,166,12,166,2601,9,166, + 1,166,1,166,3,166,2605,8,166,3,166,2607,8,166,1,166,1,166,5,166, + 2611,8,166,10,166,12,166,2614,9,166,1,167,1,167,1,168,1,168,3,168, + 2620,8,168,1,169,1,169,1,169,1,169,3,169,2626,8,169,1,170,1,170, + 1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,171,1,171,1,172,1,172, + 1,172,1,172,1,172,1,172,1,172,5,172,2646,8,172,10,172,12,172,2649, + 9,172,3,172,2651,8,172,1,172,1,172,1,172,1,172,1,172,5,172,2658, + 8,172,10,172,12,172,2661,9,172,3,172,2663,8,172,1,172,3,172,2666, + 8,172,1,172,1,172,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173, + 1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,3,173,2686,8,173, + 1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,1,174,3,174,2697, + 8,174,1,175,1,175,1,175,1,175,1,175,3,175,2704,8,175,1,176,1,176, + 1,176,5,176,2709,8,176,10,176,12,176,2712,9,176,1,177,1,177,1,177, + 1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,3,177,2725,8,177, + 3,177,2727,8,177,1,178,1,178,1,179,1,179,1,179,5,179,2734,8,179, + 10,179,12,179,2737,9,179,1,180,1,180,1,180,1,180,1,180,1,180,3,180, + 2745,8,180,1,181,1,181,1,181,1,181,1,181,3,181,2752,8,181,1,182, + 3,182,2755,8,182,1,182,1,182,3,182,2759,8,182,1,182,1,182,3,182, + 2763,8,182,1,182,3,182,2766,8,182,1,183,1,183,1,184,1,184,1,184, + 10,771,1447,1621,1660,1680,1695,1726,1755,1829,2300,6,264,284,310, + 314,316,332,185,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34, + 36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78, + 80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116, + 118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148, + 150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180, + 182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212, + 214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244, + 246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276, + 278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308, + 310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340, + 342,344,346,348,350,352,354,356,358,360,362,364,366,368,0,33,2,0, + 46,46,170,170,2,0,166,166,204,204,2,0,176,176,202,202,2,0,69,69, + 80,80,2,0,27,27,159,159,2,0,103,103,144,144,2,0,47,47,171,171,2, + 0,3,3,12,12,3,0,87,87,166,166,204,204,2,0,178,178,209,209,1,0,245, + 248,2,0,147,147,219,223,2,0,65,65,95,95,2,0,64,64,200,200,2,0,10, + 10,55,55,2,0,75,75,112,112,2,0,2,2,57,57,2,0,14,14,185,185,3,0,106, + 106,115,115,164,164,2,0,105,105,163,163,4,0,70,70,133,133,194,194, + 208,208,1,0,255,256,1,0,257,259,1,0,249,254,3,0,2,2,6,6,181,181, + 2,0,70,70,194,194,5,0,48,49,91,92,122,125,172,173,217,218,1,0,127, + 130,2,0,8,8,227,244,2,0,77,77,149,149,4,0,46,46,178,178,188,188, + 209,209,16,0,28,29,40,40,43,43,48,48,68,68,91,91,114,114,122,122, + 124,124,158,158,165,165,172,172,184,184,196,196,204,204,217,217, + 23,0,14,14,43,44,48,49,65,65,68,68,91,91,95,95,110,110,119,119,122, + 125,127,130,137,137,140,140,152,153,172,173,180,180,184,185,195, + 195,204,204,213,213,217,217,220,220,231,231,3093,0,373,1,0,0,0,2, + 378,1,0,0,0,4,404,1,0,0,0,6,406,1,0,0,0,8,417,1,0,0,0,10,419,1,0, + 0,0,12,458,1,0,0,0,14,480,1,0,0,0,16,534,1,0,0,0,18,553,1,0,0,0, + 20,566,1,0,0,0,22,570,1,0,0,0,24,632,1,0,0,0,26,680,1,0,0,0,28,682, + 1,0,0,0,30,690,1,0,0,0,32,710,1,0,0,0,34,730,1,0,0,0,36,737,1,0, + 0,0,38,746,1,0,0,0,40,754,1,0,0,0,42,776,1,0,0,0,44,786,1,0,0,0, + 46,804,1,0,0,0,48,825,1,0,0,0,50,846,1,0,0,0,52,852,1,0,0,0,54,869, + 1,0,0,0,56,878,1,0,0,0,58,885,1,0,0,0,60,893,1,0,0,0,62,900,1,0, + 0,0,64,907,1,0,0,0,66,916,1,0,0,0,68,927,1,0,0,0,70,929,1,0,0,0, + 72,949,1,0,0,0,74,966,1,0,0,0,76,968,1,0,0,0,78,977,1,0,0,0,80,984, + 1,0,0,0,82,993,1,0,0,0,84,1003,1,0,0,0,86,1026,1,0,0,0,88,1032,1, + 0,0,0,90,1034,1,0,0,0,92,1041,1,0,0,0,94,1053,1,0,0,0,96,1055,1, + 0,0,0,98,1062,1,0,0,0,100,1083,1,0,0,0,102,1112,1,0,0,0,104,1114, + 1,0,0,0,106,1123,1,0,0,0,108,1146,1,0,0,0,110,1165,1,0,0,0,112,1188, + 1,0,0,0,114,1190,1,0,0,0,116,1205,1,0,0,0,118,1224,1,0,0,0,120,1246, + 1,0,0,0,122,1251,1,0,0,0,124,1256,1,0,0,0,126,1261,1,0,0,0,128,1266, + 1,0,0,0,130,1273,1,0,0,0,132,1288,1,0,0,0,134,1294,1,0,0,0,136,1314, + 1,0,0,0,138,1316,1,0,0,0,140,1327,1,0,0,0,142,1338,1,0,0,0,144,1352, + 1,0,0,0,146,1354,1,0,0,0,148,1363,1,0,0,0,150,1372,1,0,0,0,152,1381, + 1,0,0,0,154,1384,1,0,0,0,156,1392,1,0,0,0,158,1408,1,0,0,0,160,1412, + 1,0,0,0,162,1436,1,0,0,0,164,1438,1,0,0,0,166,1454,1,0,0,0,168,1457, + 1,0,0,0,170,1461,1,0,0,0,172,1464,1,0,0,0,174,1468,1,0,0,0,176,1470, + 1,0,0,0,178,1472,1,0,0,0,180,1474,1,0,0,0,182,1476,1,0,0,0,184,1478, + 1,0,0,0,186,1480,1,0,0,0,188,1488,1,0,0,0,190,1498,1,0,0,0,192,1502, + 1,0,0,0,194,1506,1,0,0,0,196,1511,1,0,0,0,198,1551,1,0,0,0,200,1559, + 1,0,0,0,202,1563,1,0,0,0,204,1578,1,0,0,0,206,1583,1,0,0,0,208,1587, + 1,0,0,0,210,1596,1,0,0,0,212,1626,1,0,0,0,214,1641,1,0,0,0,216,1647, + 1,0,0,0,218,1652,1,0,0,0,220,1654,1,0,0,0,222,1672,1,0,0,0,224,1675, + 1,0,0,0,226,1685,1,0,0,0,228,1705,1,0,0,0,230,1715,1,0,0,0,232,1717, + 1,0,0,0,234,1719,1,0,0,0,236,1734,1,0,0,0,238,1736,1,0,0,0,240,1743, + 1,0,0,0,242,1775,1,0,0,0,244,1787,1,0,0,0,246,1794,1,0,0,0,248,1804, + 1,0,0,0,250,1806,1,0,0,0,252,1812,1,0,0,0,254,1823,1,0,0,0,256,1834, + 1,0,0,0,258,1842,1,0,0,0,260,1860,1,0,0,0,262,1865,1,0,0,0,264,1886, + 1,0,0,0,266,1922,1,0,0,0,268,1924,1,0,0,0,270,1932,1,0,0,0,272,1972, + 1,0,0,0,274,1982,1,0,0,0,276,1997,1,0,0,0,278,1999,1,0,0,0,280,2006, + 1,0,0,0,282,2020,1,0,0,0,284,2022,1,0,0,0,286,2072,1,0,0,0,288,2088, + 1,0,0,0,290,2090,1,0,0,0,292,2105,1,0,0,0,294,2107,1,0,0,0,296,2117, + 1,0,0,0,298,2135,1,0,0,0,300,2137,1,0,0,0,302,2141,1,0,0,0,304,2156, + 1,0,0,0,306,2162,1,0,0,0,308,2164,1,0,0,0,310,2173,1,0,0,0,312,2244, + 1,0,0,0,314,2250,1,0,0,0,316,2512,1,0,0,0,318,2533,1,0,0,0,320,2535, + 1,0,0,0,322,2537,1,0,0,0,324,2539,1,0,0,0,326,2555,1,0,0,0,328,2557, + 1,0,0,0,330,2559,1,0,0,0,332,2606,1,0,0,0,334,2615,1,0,0,0,336,2619, + 1,0,0,0,338,2625,1,0,0,0,340,2627,1,0,0,0,342,2632,1,0,0,0,344,2638, + 1,0,0,0,346,2685,1,0,0,0,348,2696,1,0,0,0,350,2703,1,0,0,0,352,2705, + 1,0,0,0,354,2726,1,0,0,0,356,2728,1,0,0,0,358,2730,1,0,0,0,360,2744, + 1,0,0,0,362,2751,1,0,0,0,364,2765,1,0,0,0,366,2767,1,0,0,0,368,2769, + 1,0,0,0,370,372,3,2,1,0,371,370,1,0,0,0,372,375,1,0,0,0,373,371, + 1,0,0,0,373,374,1,0,0,0,374,376,1,0,0,0,375,373,1,0,0,0,376,377, + 5,0,0,1,377,1,1,0,0,0,378,380,3,4,2,0,379,381,5,262,0,0,380,379, + 1,0,0,0,380,381,1,0,0,0,381,3,1,0,0,0,382,405,3,206,103,0,383,405, + 3,6,3,0,384,405,3,8,4,0,385,405,3,26,13,0,386,405,3,64,32,0,387, + 405,3,66,33,0,388,405,3,68,34,0,389,405,3,74,37,0,390,405,3,88,44, + 0,391,405,3,94,47,0,392,405,3,100,50,0,393,405,3,102,51,0,394,405, + 3,108,54,0,395,405,3,110,55,0,396,405,3,112,56,0,397,405,3,144,72, + 0,398,405,3,152,76,0,399,405,3,154,77,0,400,405,3,156,78,0,401,405, + 3,158,79,0,402,405,3,160,80,0,403,405,3,162,81,0,404,382,1,0,0,0, + 404,383,1,0,0,0,404,384,1,0,0,0,404,385,1,0,0,0,404,386,1,0,0,0, + 404,387,1,0,0,0,404,388,1,0,0,0,404,389,1,0,0,0,404,390,1,0,0,0, + 404,391,1,0,0,0,404,392,1,0,0,0,404,393,1,0,0,0,404,394,1,0,0,0, + 404,395,1,0,0,0,404,396,1,0,0,0,404,397,1,0,0,0,404,398,1,0,0,0, + 404,399,1,0,0,0,404,400,1,0,0,0,404,401,1,0,0,0,404,402,1,0,0,0, + 404,403,1,0,0,0,405,5,1,0,0,0,406,407,5,203,0,0,407,408,3,184,92, + 0,408,7,1,0,0,0,409,418,3,18,9,0,410,418,3,20,10,0,411,418,3,22, + 11,0,412,418,3,24,12,0,413,418,3,16,8,0,414,418,3,14,7,0,415,418, + 3,12,6,0,416,418,3,10,5,0,417,409,1,0,0,0,417,410,1,0,0,0,417,411, + 1,0,0,0,417,412,1,0,0,0,417,413,1,0,0,0,417,414,1,0,0,0,417,415, + 1,0,0,0,417,416,1,0,0,0,418,9,1,0,0,0,419,421,5,37,0,0,420,422,5, + 19,0,0,421,420,1,0,0,0,421,422,1,0,0,0,422,423,1,0,0,0,423,425,5, + 188,0,0,424,426,3,172,86,0,425,424,1,0,0,0,425,426,1,0,0,0,426,427, + 1,0,0,0,427,443,3,174,87,0,428,429,5,265,0,0,429,434,3,216,108,0, + 430,431,5,263,0,0,431,433,3,216,108,0,432,430,1,0,0,0,433,436,1, + 0,0,0,434,432,1,0,0,0,434,435,1,0,0,0,435,439,1,0,0,0,436,434,1, + 0,0,0,437,438,5,263,0,0,438,440,3,210,105,0,439,437,1,0,0,0,439, + 440,1,0,0,0,440,441,1,0,0,0,441,442,5,266,0,0,442,444,1,0,0,0,443, + 428,1,0,0,0,443,444,1,0,0,0,444,451,1,0,0,0,445,446,5,17,0,0,446, + 449,5,26,0,0,447,450,3,296,148,0,448,450,3,254,127,0,449,447,1,0, + 0,0,449,448,1,0,0,0,450,452,1,0,0,0,451,445,1,0,0,0,451,452,1,0, + 0,0,452,453,1,0,0,0,453,456,3,196,98,0,454,455,5,9,0,0,455,457,3, + 206,103,0,456,454,1,0,0,0,456,457,1,0,0,0,457,11,1,0,0,0,458,460, + 5,37,0,0,459,461,5,19,0,0,460,459,1,0,0,0,460,461,1,0,0,0,461,462, + 1,0,0,0,462,464,5,188,0,0,463,465,3,172,86,0,464,463,1,0,0,0,464, + 465,1,0,0,0,465,466,1,0,0,0,466,467,3,174,87,0,467,471,5,115,0,0, + 468,472,3,186,93,0,469,470,5,147,0,0,470,472,3,318,159,0,471,468, + 1,0,0,0,471,469,1,0,0,0,472,476,1,0,0,0,473,474,5,17,0,0,474,475, + 5,26,0,0,475,477,3,254,127,0,476,473,1,0,0,0,476,477,1,0,0,0,477, + 478,1,0,0,0,478,479,3,196,98,0,479,13,1,0,0,0,480,482,5,37,0,0,481, + 483,5,19,0,0,482,481,1,0,0,0,482,483,1,0,0,0,483,484,1,0,0,0,484, + 486,5,188,0,0,485,487,3,172,86,0,486,485,1,0,0,0,486,487,1,0,0,0, + 487,488,1,0,0,0,488,506,3,174,87,0,489,490,5,265,0,0,490,495,3,218, + 109,0,491,492,5,263,0,0,492,494,3,218,109,0,493,491,1,0,0,0,494, + 497,1,0,0,0,495,493,1,0,0,0,495,496,1,0,0,0,496,502,1,0,0,0,497, + 495,1,0,0,0,498,499,5,263,0,0,499,500,5,150,0,0,500,501,5,110,0, + 0,501,503,3,296,148,0,502,498,1,0,0,0,502,503,1,0,0,0,503,504,1, + 0,0,0,504,505,5,266,0,0,505,507,1,0,0,0,506,489,1,0,0,0,506,507, + 1,0,0,0,507,513,1,0,0,0,508,509,5,150,0,0,509,511,5,110,0,0,510, + 512,3,296,148,0,511,510,1,0,0,0,511,512,1,0,0,0,512,514,1,0,0,0, + 513,508,1,0,0,0,513,514,1,0,0,0,514,518,1,0,0,0,515,516,5,145,0, + 0,516,517,5,26,0,0,517,519,3,236,118,0,518,515,1,0,0,0,518,519,1, + 0,0,0,519,521,1,0,0,0,520,522,3,222,111,0,521,520,1,0,0,0,521,522, + 1,0,0,0,522,523,1,0,0,0,523,524,5,23,0,0,524,525,5,9,0,0,525,528, + 5,111,0,0,526,527,5,25,0,0,527,529,3,252,126,0,528,526,1,0,0,0,528, + 529,1,0,0,0,529,532,1,0,0,0,530,531,5,9,0,0,531,533,3,206,103,0, + 532,530,1,0,0,0,532,533,1,0,0,0,533,15,1,0,0,0,534,535,5,37,0,0, + 535,537,5,212,0,0,536,538,3,172,86,0,537,536,1,0,0,0,537,538,1,0, + 0,0,538,539,1,0,0,0,539,541,3,178,89,0,540,542,3,202,101,0,541,540, + 1,0,0,0,541,542,1,0,0,0,542,544,1,0,0,0,543,545,3,222,111,0,544, + 543,1,0,0,0,544,545,1,0,0,0,545,548,1,0,0,0,546,547,5,25,0,0,547, + 549,3,252,126,0,548,546,1,0,0,0,548,549,1,0,0,0,549,550,1,0,0,0, + 550,551,5,9,0,0,551,552,3,206,103,0,552,17,1,0,0,0,553,554,5,37, + 0,0,554,556,7,0,0,0,555,557,3,172,86,0,556,555,1,0,0,0,556,557,1, + 0,0,0,557,558,1,0,0,0,558,560,3,176,88,0,559,561,3,222,111,0,560, + 559,1,0,0,0,560,561,1,0,0,0,561,564,1,0,0,0,562,563,5,24,0,0,563, + 565,3,318,159,0,564,562,1,0,0,0,564,565,1,0,0,0,565,19,1,0,0,0,566, + 567,5,37,0,0,567,568,5,166,0,0,568,569,3,362,181,0,569,21,1,0,0, + 0,570,572,5,37,0,0,571,573,5,12,0,0,572,571,1,0,0,0,572,573,1,0, + 0,0,573,574,1,0,0,0,574,576,5,84,0,0,575,577,3,172,86,0,576,575, + 1,0,0,0,576,577,1,0,0,0,577,578,1,0,0,0,578,591,3,180,90,0,579,588, + 5,265,0,0,580,585,3,332,166,0,581,582,5,263,0,0,582,584,3,332,166, + 0,583,581,1,0,0,0,584,587,1,0,0,0,585,583,1,0,0,0,585,586,1,0,0, + 0,586,589,1,0,0,0,587,585,1,0,0,0,588,580,1,0,0,0,588,589,1,0,0, + 0,589,590,1,0,0,0,590,592,5,266,0,0,591,579,1,0,0,0,591,592,1,0, + 0,0,592,593,1,0,0,0,593,594,5,160,0,0,594,597,3,332,166,0,595,596, + 5,102,0,0,596,598,3,332,166,0,597,595,1,0,0,0,597,598,1,0,0,0,598, + 599,1,0,0,0,599,600,5,24,0,0,600,604,5,274,0,0,601,602,5,104,0,0, + 602,603,5,249,0,0,603,605,5,274,0,0,604,601,1,0,0,0,604,605,1,0, + 0,0,605,606,1,0,0,0,606,607,5,206,0,0,607,608,5,249,0,0,608,609, + 5,274,0,0,609,610,5,126,0,0,610,611,5,249,0,0,611,615,5,274,0,0, + 612,613,5,18,0,0,613,614,5,249,0,0,614,616,5,274,0,0,615,612,1,0, + 0,0,615,616,1,0,0,0,616,620,1,0,0,0,617,618,5,20,0,0,618,619,5,249, + 0,0,619,621,5,274,0,0,620,617,1,0,0,0,620,621,1,0,0,0,621,625,1, + 0,0,0,622,623,5,187,0,0,623,624,5,249,0,0,624,626,5,274,0,0,625, + 622,1,0,0,0,625,626,1,0,0,0,626,630,1,0,0,0,627,628,5,76,0,0,628, + 629,5,249,0,0,629,631,5,274,0,0,630,627,1,0,0,0,630,631,1,0,0,0, + 631,23,1,0,0,0,632,633,5,37,0,0,633,635,5,84,0,0,634,636,3,172,86, + 0,635,634,1,0,0,0,635,636,1,0,0,0,636,637,1,0,0,0,637,650,3,180, + 90,0,638,647,5,265,0,0,639,644,3,332,166,0,640,641,5,263,0,0,641, + 643,3,332,166,0,642,640,1,0,0,0,643,646,1,0,0,0,644,642,1,0,0,0, + 644,645,1,0,0,0,645,648,1,0,0,0,646,644,1,0,0,0,647,639,1,0,0,0, + 647,648,1,0,0,0,648,649,1,0,0,0,649,651,5,266,0,0,650,638,1,0,0, + 0,650,651,1,0,0,0,651,654,1,0,0,0,652,653,5,160,0,0,653,655,3,332, + 166,0,654,652,1,0,0,0,654,655,1,0,0,0,655,656,1,0,0,0,656,657,5, + 24,0,0,657,658,5,274,0,0,658,659,5,186,0,0,659,660,5,249,0,0,660, + 661,3,318,159,0,661,25,1,0,0,0,662,681,3,28,14,0,663,681,3,62,31, + 0,664,681,3,60,30,0,665,681,3,58,29,0,666,681,3,54,27,0,667,681, + 3,56,28,0,668,681,3,52,26,0,669,681,3,48,24,0,670,681,3,50,25,0, + 671,681,3,46,23,0,672,681,3,44,22,0,673,681,3,42,21,0,674,681,3, + 40,20,0,675,681,3,34,17,0,676,681,3,30,15,0,677,681,3,32,16,0,678, + 681,3,36,18,0,679,681,3,38,19,0,680,662,1,0,0,0,680,663,1,0,0,0, + 680,664,1,0,0,0,680,665,1,0,0,0,680,666,1,0,0,0,680,667,1,0,0,0, + 680,668,1,0,0,0,680,669,1,0,0,0,680,670,1,0,0,0,680,671,1,0,0,0, + 680,672,1,0,0,0,680,673,1,0,0,0,680,674,1,0,0,0,680,675,1,0,0,0, + 680,676,1,0,0,0,680,677,1,0,0,0,680,678,1,0,0,0,680,679,1,0,0,0, + 681,27,1,0,0,0,682,683,5,4,0,0,683,684,5,46,0,0,684,685,3,184,92, + 0,685,686,5,176,0,0,686,687,5,142,0,0,687,688,7,1,0,0,688,689,3, + 362,181,0,689,29,1,0,0,0,690,691,5,4,0,0,691,692,5,188,0,0,692,693, + 3,186,93,0,693,694,5,176,0,0,694,695,5,32,0,0,695,696,5,182,0,0, + 696,697,3,192,96,0,697,698,5,265,0,0,698,699,3,232,116,0,699,700, + 5,249,0,0,700,706,3,318,159,0,701,702,5,263,0,0,702,703,3,232,116, + 0,703,704,5,249,0,0,704,705,3,318,159,0,705,707,1,0,0,0,706,701, + 1,0,0,0,706,707,1,0,0,0,707,708,1,0,0,0,708,709,5,266,0,0,709,31, + 1,0,0,0,710,711,5,4,0,0,711,712,5,188,0,0,712,715,3,186,93,0,713, + 714,5,145,0,0,714,716,3,308,154,0,715,713,1,0,0,0,715,716,1,0,0, + 0,716,717,1,0,0,0,717,728,5,176,0,0,718,719,5,30,0,0,719,720,5,94, + 0,0,720,725,3,318,159,0,721,722,5,216,0,0,722,723,5,151,0,0,723, + 724,5,249,0,0,724,726,3,364,182,0,725,721,1,0,0,0,725,726,1,0,0, + 0,726,729,1,0,0,0,727,729,5,197,0,0,728,718,1,0,0,0,728,727,1,0, + 0,0,729,33,1,0,0,0,730,731,5,4,0,0,731,732,5,188,0,0,732,733,3,186, + 93,0,733,734,5,31,0,0,734,735,3,192,96,0,735,736,3,224,112,0,736, + 35,1,0,0,0,737,738,5,4,0,0,738,739,5,188,0,0,739,740,3,186,93,0, + 740,742,5,58,0,0,741,743,5,32,0,0,742,741,1,0,0,0,742,743,1,0,0, + 0,743,744,1,0,0,0,744,745,3,192,96,0,745,37,1,0,0,0,746,747,5,4, + 0,0,747,748,5,188,0,0,748,749,3,186,93,0,749,750,5,176,0,0,750,751, + 5,142,0,0,751,752,7,1,0,0,752,753,3,362,181,0,753,39,1,0,0,0,754, + 755,5,4,0,0,755,756,5,188,0,0,756,762,3,186,93,0,757,763,5,158,0, + 0,758,760,5,1,0,0,759,761,3,172,86,0,760,759,1,0,0,0,760,761,1,0, + 0,0,761,763,1,0,0,0,762,757,1,0,0,0,762,758,1,0,0,0,763,764,1,0, + 0,0,764,765,5,33,0,0,765,766,5,265,0,0,766,771,3,224,112,0,767,768, + 5,263,0,0,768,770,3,224,112,0,769,767,1,0,0,0,770,773,1,0,0,0,771, + 772,1,0,0,0,771,769,1,0,0,0,772,774,1,0,0,0,773,771,1,0,0,0,774, + 775,5,266,0,0,775,41,1,0,0,0,776,777,5,4,0,0,777,778,5,188,0,0,778, + 779,3,186,93,0,779,780,5,1,0,0,780,782,5,32,0,0,781,783,3,172,86, + 0,782,781,1,0,0,0,782,783,1,0,0,0,783,784,1,0,0,0,784,785,3,226, + 113,0,785,43,1,0,0,0,786,787,5,4,0,0,787,788,5,188,0,0,788,789,3, + 186,93,0,789,791,5,4,0,0,790,792,5,32,0,0,791,790,1,0,0,0,791,792, + 1,0,0,0,792,793,1,0,0,0,793,802,3,192,96,0,794,798,5,176,0,0,795, + 799,3,230,115,0,796,797,5,34,0,0,797,799,3,318,159,0,798,795,1,0, + 0,0,798,796,1,0,0,0,799,803,1,0,0,0,800,801,5,58,0,0,801,803,5,51, + 0,0,802,794,1,0,0,0,802,800,1,0,0,0,803,45,1,0,0,0,804,805,5,4,0, + 0,805,806,5,188,0,0,806,807,3,186,93,0,807,809,5,1,0,0,808,810,3, + 172,86,0,809,808,1,0,0,0,809,810,1,0,0,0,810,823,1,0,0,0,811,812, + 5,145,0,0,812,815,3,308,154,0,813,814,5,24,0,0,814,816,3,318,159, + 0,815,813,1,0,0,0,815,816,1,0,0,0,816,818,1,0,0,0,817,819,3,244, + 122,0,818,817,1,0,0,0,818,819,1,0,0,0,819,824,1,0,0,0,820,821,5, + 154,0,0,821,822,5,145,0,0,822,824,3,242,121,0,823,811,1,0,0,0,823, + 820,1,0,0,0,824,47,1,0,0,0,825,826,5,4,0,0,826,827,5,188,0,0,827, + 830,3,186,93,0,828,829,5,145,0,0,829,831,3,308,154,0,830,828,1,0, + 0,0,830,831,1,0,0,0,831,832,1,0,0,0,832,844,5,176,0,0,833,834,5, + 72,0,0,834,845,3,234,117,0,835,836,5,168,0,0,836,837,5,79,0,0,837, + 845,3,258,129,0,838,839,5,24,0,0,839,845,3,318,159,0,840,841,5,25, + 0,0,841,845,3,252,126,0,842,843,5,175,0,0,843,845,3,252,126,0,844, + 833,1,0,0,0,844,835,1,0,0,0,844,838,1,0,0,0,844,840,1,0,0,0,844, + 842,1,0,0,0,845,49,1,0,0,0,846,847,5,4,0,0,847,848,5,188,0,0,848, + 849,3,186,93,0,849,850,5,155,0,0,850,851,5,146,0,0,851,51,1,0,0, + 0,852,853,5,4,0,0,853,854,5,188,0,0,854,855,3,186,93,0,855,857,5, + 58,0,0,856,858,3,170,85,0,857,856,1,0,0,0,857,858,1,0,0,0,858,867, + 1,0,0,0,859,860,5,145,0,0,860,862,3,308,154,0,861,863,5,22,0,0,862, + 861,1,0,0,0,862,863,1,0,0,0,863,868,1,0,0,0,864,865,5,154,0,0,865, + 866,5,145,0,0,866,868,3,242,121,0,867,859,1,0,0,0,867,864,1,0,0, + 0,868,53,1,0,0,0,869,870,5,4,0,0,870,871,5,212,0,0,871,873,3,188, + 94,0,872,874,3,202,101,0,873,872,1,0,0,0,873,874,1,0,0,0,874,875, + 1,0,0,0,875,876,5,9,0,0,876,877,3,206,103,0,877,55,1,0,0,0,878,879, + 5,4,0,0,879,880,5,212,0,0,880,881,3,188,94,0,881,882,5,156,0,0,882, + 883,5,193,0,0,883,884,3,188,94,0,884,57,1,0,0,0,885,886,5,4,0,0, + 886,887,5,212,0,0,887,888,3,188,94,0,888,889,5,176,0,0,889,890,5, + 142,0,0,890,891,7,1,0,0,891,892,3,358,179,0,892,59,1,0,0,0,893,894, + 5,4,0,0,894,895,5,188,0,0,895,896,3,186,93,0,896,897,5,156,0,0,897, + 898,5,193,0,0,898,899,3,186,93,0,899,61,1,0,0,0,900,901,5,4,0,0, + 901,902,5,212,0,0,902,903,3,188,94,0,903,904,7,2,0,0,904,905,5,25, + 0,0,905,906,3,252,126,0,906,63,1,0,0,0,907,909,5,196,0,0,908,910, + 5,188,0,0,909,908,1,0,0,0,909,910,1,0,0,0,910,912,1,0,0,0,911,913, + 3,170,85,0,912,911,1,0,0,0,912,913,1,0,0,0,913,914,1,0,0,0,914,915, + 3,186,93,0,915,65,1,0,0,0,916,918,5,56,0,0,917,919,5,46,0,0,918, + 917,1,0,0,0,918,919,1,0,0,0,919,921,1,0,0,0,920,922,7,3,0,0,921, + 920,1,0,0,0,921,922,1,0,0,0,922,923,1,0,0,0,923,924,3,358,179,0, + 924,67,1,0,0,0,925,928,3,70,35,0,926,928,3,72,36,0,927,925,1,0,0, + 0,927,926,1,0,0,0,928,69,1,0,0,0,929,930,5,36,0,0,930,931,5,182, + 0,0,931,933,3,186,93,0,932,934,3,296,148,0,933,932,1,0,0,0,933,934, + 1,0,0,0,934,947,1,0,0,0,935,936,5,190,0,0,936,937,5,185,0,0,937, + 938,5,265,0,0,938,939,3,364,182,0,939,945,5,266,0,0,940,941,5,157, + 0,0,941,942,5,265,0,0,942,943,3,364,182,0,943,944,5,266,0,0,944, + 946,1,0,0,0,945,940,1,0,0,0,945,946,1,0,0,0,946,948,1,0,0,0,947, + 935,1,0,0,0,947,948,1,0,0,0,948,71,1,0,0,0,949,950,5,36,0,0,950, + 951,5,96,0,0,951,952,5,182,0,0,952,958,3,186,93,0,953,954,5,145, + 0,0,954,955,5,265,0,0,955,956,3,308,154,0,956,957,5,266,0,0,957, + 959,1,0,0,0,958,953,1,0,0,0,958,959,1,0,0,0,959,73,1,0,0,0,960,967, + 3,86,43,0,961,967,3,84,42,0,962,967,3,82,41,0,963,967,3,78,39,0, + 964,967,3,80,40,0,965,967,3,76,38,0,966,960,1,0,0,0,966,961,1,0, + 0,0,966,962,1,0,0,0,966,963,1,0,0,0,966,964,1,0,0,0,966,965,1,0, + 0,0,967,75,1,0,0,0,968,969,5,58,0,0,969,971,7,0,0,0,970,972,3,170, + 85,0,971,970,1,0,0,0,971,972,1,0,0,0,972,973,1,0,0,0,973,975,3,184, + 92,0,974,976,7,4,0,0,975,974,1,0,0,0,975,976,1,0,0,0,976,77,1,0, + 0,0,977,978,5,58,0,0,978,980,5,212,0,0,979,981,3,170,85,0,980,979, + 1,0,0,0,980,981,1,0,0,0,981,982,1,0,0,0,982,983,3,188,94,0,983,79, + 1,0,0,0,984,985,5,58,0,0,985,987,5,188,0,0,986,988,3,170,85,0,987, + 986,1,0,0,0,987,988,1,0,0,0,988,989,1,0,0,0,989,991,3,186,93,0,990, + 992,5,22,0,0,991,990,1,0,0,0,991,992,1,0,0,0,992,81,1,0,0,0,993, + 995,5,58,0,0,994,996,5,96,0,0,995,994,1,0,0,0,995,996,1,0,0,0,996, + 997,1,0,0,0,997,998,5,182,0,0,998,1001,3,186,93,0,999,1000,5,145, + 0,0,1000,1002,3,308,154,0,1001,999,1,0,0,0,1001,1002,1,0,0,0,1002, + 83,1,0,0,0,1003,1005,5,58,0,0,1004,1006,5,12,0,0,1005,1004,1,0,0, + 0,1005,1006,1,0,0,0,1006,1007,1,0,0,0,1007,1009,5,84,0,0,1008,1010, + 3,170,85,0,1009,1008,1,0,0,0,1009,1010,1,0,0,0,1010,1011,1,0,0,0, + 1011,1024,3,190,95,0,1012,1021,5,265,0,0,1013,1018,3,332,166,0,1014, + 1015,5,263,0,0,1015,1017,3,332,166,0,1016,1014,1,0,0,0,1017,1020, + 1,0,0,0,1018,1016,1,0,0,0,1018,1019,1,0,0,0,1019,1022,1,0,0,0,1020, + 1018,1,0,0,0,1021,1013,1,0,0,0,1021,1022,1,0,0,0,1022,1023,1,0,0, + 0,1023,1025,5,266,0,0,1024,1012,1,0,0,0,1024,1025,1,0,0,0,1025,85, + 1,0,0,0,1026,1027,5,58,0,0,1027,1028,5,166,0,0,1028,1029,3,362,181, + 0,1029,87,1,0,0,0,1030,1033,3,90,45,0,1031,1033,3,92,46,0,1032,1030, + 1,0,0,0,1032,1031,1,0,0,0,1033,89,1,0,0,0,1034,1035,5,86,0,0,1035, + 1036,5,166,0,0,1036,1037,3,362,181,0,1037,1038,5,193,0,0,1038,1039, + 5,87,0,0,1039,1040,3,362,181,0,1040,91,1,0,0,0,1041,1042,5,86,0, + 0,1042,1043,3,354,177,0,1043,1044,5,136,0,0,1044,1046,3,356,178, + 0,1045,1047,3,358,179,0,1046,1045,1,0,0,0,1046,1047,1,0,0,0,1047, + 1048,1,0,0,0,1048,1049,5,193,0,0,1049,1050,3,360,180,0,1050,93,1, + 0,0,0,1051,1054,3,96,48,0,1052,1054,3,98,49,0,1053,1051,1,0,0,0, + 1053,1052,1,0,0,0,1054,95,1,0,0,0,1055,1056,5,161,0,0,1056,1057, + 5,166,0,0,1057,1058,3,362,181,0,1058,1059,5,82,0,0,1059,1060,5,87, + 0,0,1060,1061,3,362,181,0,1061,97,1,0,0,0,1062,1066,5,161,0,0,1063, + 1064,5,86,0,0,1064,1065,5,137,0,0,1065,1067,5,78,0,0,1066,1063,1, + 0,0,0,1066,1067,1,0,0,0,1067,1068,1,0,0,0,1068,1069,3,354,177,0, + 1069,1070,5,136,0,0,1070,1072,3,356,178,0,1071,1073,3,358,179,0, + 1072,1071,1,0,0,0,1072,1073,1,0,0,0,1073,1074,1,0,0,0,1074,1080, + 5,82,0,0,1075,1081,3,360,180,0,1076,1078,5,166,0,0,1077,1076,1,0, + 0,0,1077,1078,1,0,0,0,1078,1079,1,0,0,0,1079,1081,3,362,181,0,1080, + 1075,1,0,0,0,1080,1077,1,0,0,0,1081,99,1,0,0,0,1082,1084,3,208,104, + 0,1083,1082,1,0,0,0,1083,1084,1,0,0,0,1084,1085,1,0,0,0,1085,1086, + 5,99,0,0,1086,1088,7,5,0,0,1087,1089,5,188,0,0,1088,1087,1,0,0,0, + 1088,1089,1,0,0,0,1089,1090,1,0,0,0,1090,1092,3,186,93,0,1091,1093, + 3,296,148,0,1092,1091,1,0,0,0,1092,1093,1,0,0,0,1093,1106,1,0,0, + 0,1094,1095,5,145,0,0,1095,1096,5,265,0,0,1096,1101,3,308,154,0, + 1097,1098,5,263,0,0,1098,1100,3,308,154,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,1104,1,0,0, + 0,1103,1101,1,0,0,0,1104,1105,5,266,0,0,1105,1107,1,0,0,0,1106,1094, + 1,0,0,0,1106,1107,1,0,0,0,1107,1108,1,0,0,0,1108,1109,3,206,103, + 0,1109,101,1,0,0,0,1110,1113,3,104,52,0,1111,1113,3,106,53,0,1112, + 1110,1,0,0,0,1112,1111,1,0,0,0,1113,103,1,0,0,0,1114,1116,5,50,0, + 0,1115,1117,5,82,0,0,1116,1115,1,0,0,0,1116,1117,1,0,0,0,1117,1118, + 1,0,0,0,1118,1121,3,186,93,0,1119,1120,5,215,0,0,1120,1122,3,310, + 155,0,1121,1119,1,0,0,0,1121,1122,1,0,0,0,1122,105,1,0,0,0,1123, + 1124,5,50,0,0,1124,1129,3,186,93,0,1125,1127,5,9,0,0,1126,1125,1, + 0,0,0,1126,1127,1,0,0,0,1127,1128,1,0,0,0,1128,1130,3,362,181,0, + 1129,1126,1,0,0,0,1129,1130,1,0,0,0,1130,1131,1,0,0,0,1131,1140, + 5,82,0,0,1132,1137,3,284,142,0,1133,1134,5,263,0,0,1134,1136,3,284, + 142,0,1135,1133,1,0,0,0,1136,1139,1,0,0,0,1137,1135,1,0,0,0,1137, + 1138,1,0,0,0,1138,1141,1,0,0,0,1139,1137,1,0,0,0,1140,1132,1,0,0, + 0,1140,1141,1,0,0,0,1141,1144,1,0,0,0,1142,1143,5,215,0,0,1143,1145, + 3,310,155,0,1144,1142,1,0,0,0,1144,1145,1,0,0,0,1145,107,1,0,0,0, + 1146,1147,5,54,0,0,1147,1148,3,186,93,0,1148,1149,5,176,0,0,1149, + 1159,3,198,99,0,1150,1151,5,82,0,0,1151,1156,3,284,142,0,1152,1153, + 5,263,0,0,1153,1155,3,284,142,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,1160,1,0,0,0,1158,1156, + 1,0,0,0,1159,1150,1,0,0,0,1159,1160,1,0,0,0,1160,1163,1,0,0,0,1161, + 1162,5,215,0,0,1162,1164,3,310,155,0,1163,1161,1,0,0,0,1163,1164, + 1,0,0,0,1164,109,1,0,0,0,1165,1166,5,207,0,0,1166,1168,5,103,0,0, + 1167,1169,5,188,0,0,1168,1167,1,0,0,0,1168,1169,1,0,0,0,1169,1170, + 1,0,0,0,1170,1172,3,186,93,0,1171,1173,3,296,148,0,1172,1171,1,0, + 0,0,1172,1173,1,0,0,0,1173,1174,1,0,0,0,1174,1175,3,206,103,0,1175, + 111,1,0,0,0,1176,1189,3,132,66,0,1177,1189,3,134,67,0,1178,1189, + 3,136,68,0,1179,1189,3,130,65,0,1180,1189,3,128,64,0,1181,1189,3, + 126,63,0,1182,1189,3,124,62,0,1183,1189,3,122,61,0,1184,1189,3,120, + 60,0,1185,1189,3,118,59,0,1186,1189,3,116,58,0,1187,1189,3,114,57, + 0,1188,1176,1,0,0,0,1188,1177,1,0,0,0,1188,1178,1,0,0,0,1188,1179, + 1,0,0,0,1188,1180,1,0,0,0,1188,1181,1,0,0,0,1188,1182,1,0,0,0,1188, + 1183,1,0,0,0,1188,1184,1,0,0,0,1188,1185,1,0,0,0,1188,1186,1,0,0, + 0,1188,1187,1,0,0,0,1189,113,1,0,0,0,1190,1191,5,179,0,0,1191,1203, + 7,6,0,0,1192,1194,5,115,0,0,1193,1192,1,0,0,0,1193,1194,1,0,0,0, + 1194,1195,1,0,0,0,1195,1200,3,318,159,0,1196,1197,5,271,0,0,1197, + 1199,3,318,159,0,1198,1196,1,0,0,0,1199,1202,1,0,0,0,1200,1198,1, + 0,0,0,1200,1201,1,0,0,0,1201,1204,1,0,0,0,1202,1200,1,0,0,0,1203, + 1193,1,0,0,0,1203,1204,1,0,0,0,1204,115,1,0,0,0,1205,1206,5,179, + 0,0,1206,1209,5,189,0,0,1207,1208,5,94,0,0,1208,1210,3,186,93,0, + 1209,1207,1,0,0,0,1209,1210,1,0,0,0,1210,1222,1,0,0,0,1211,1213, + 5,115,0,0,1212,1211,1,0,0,0,1212,1213,1,0,0,0,1213,1214,1,0,0,0, + 1214,1219,3,318,159,0,1215,1216,5,271,0,0,1216,1218,3,318,159,0, + 1217,1215,1,0,0,0,1218,1221,1,0,0,0,1219,1217,1,0,0,0,1219,1220, + 1,0,0,0,1220,1223,1,0,0,0,1221,1219,1,0,0,0,1222,1212,1,0,0,0,1222, + 1223,1,0,0,0,1223,117,1,0,0,0,1224,1226,5,179,0,0,1225,1227,7,7, + 0,0,1226,1225,1,0,0,0,1226,1227,1,0,0,0,1227,1228,1,0,0,0,1228,1231, + 5,85,0,0,1229,1230,5,94,0,0,1230,1232,3,184,92,0,1231,1229,1,0,0, + 0,1231,1232,1,0,0,0,1232,1244,1,0,0,0,1233,1235,5,115,0,0,1234,1233, + 1,0,0,0,1234,1235,1,0,0,0,1235,1236,1,0,0,0,1236,1241,3,318,159, + 0,1237,1238,5,271,0,0,1238,1240,3,318,159,0,1239,1237,1,0,0,0,1240, + 1243,1,0,0,0,1241,1239,1,0,0,0,1241,1242,1,0,0,0,1242,1245,1,0,0, + 0,1243,1241,1,0,0,0,1244,1234,1,0,0,0,1244,1245,1,0,0,0,1245,119, + 1,0,0,0,1246,1247,5,179,0,0,1247,1248,5,37,0,0,1248,1249,5,188,0, + 0,1249,1250,3,186,93,0,1250,121,1,0,0,0,1251,1252,5,179,0,0,1252, + 1253,5,37,0,0,1253,1254,5,212,0,0,1254,1255,3,188,94,0,1255,123, + 1,0,0,0,1256,1257,5,179,0,0,1257,1258,5,188,0,0,1258,1259,5,182, + 0,0,1259,1260,3,186,93,0,1260,125,1,0,0,0,1261,1262,5,179,0,0,1262, + 1263,5,32,0,0,1263,1264,5,182,0,0,1264,1265,3,186,93,0,1265,127, + 1,0,0,0,1266,1268,5,179,0,0,1267,1269,5,154,0,0,1268,1267,1,0,0, + 0,1268,1269,1,0,0,0,1269,1270,1,0,0,0,1270,1271,5,146,0,0,1271,1272, + 3,186,93,0,1272,129,1,0,0,0,1273,1274,5,179,0,0,1274,1275,5,73,0, + 0,1275,1276,5,94,0,0,1276,1286,3,186,93,0,1277,1278,5,145,0,0,1278, + 1279,5,265,0,0,1279,1282,3,308,154,0,1280,1281,5,263,0,0,1281,1283, + 3,308,154,0,1282,1280,1,0,0,0,1282,1283,1,0,0,0,1283,1284,1,0,0, + 0,1284,1285,5,266,0,0,1285,1287,1,0,0,0,1286,1277,1,0,0,0,1286,1287, + 1,0,0,0,1287,131,1,0,0,0,1288,1290,5,179,0,0,1289,1291,5,39,0,0, + 1290,1289,1,0,0,0,1290,1291,1,0,0,0,1291,1292,1,0,0,0,1292,1293, + 5,167,0,0,1293,133,1,0,0,0,1294,1295,5,179,0,0,1295,1296,5,166,0, + 0,1296,1297,5,86,0,0,1297,1298,5,87,0,0,1298,1299,3,362,181,0,1299, + 135,1,0,0,0,1300,1315,3,138,69,0,1301,1315,3,140,70,0,1302,1315, + 3,142,71,0,1303,1304,5,179,0,0,1304,1305,5,86,0,0,1305,1306,7,8, + 0,0,1306,1312,3,362,181,0,1307,1308,5,136,0,0,1308,1310,7,9,0,0, + 1309,1311,3,358,179,0,1310,1309,1,0,0,0,1310,1311,1,0,0,0,1311,1313, + 1,0,0,0,1312,1307,1,0,0,0,1312,1313,1,0,0,0,1313,1315,1,0,0,0,1314, + 1300,1,0,0,0,1314,1301,1,0,0,0,1314,1302,1,0,0,0,1314,1303,1,0,0, + 0,1315,137,1,0,0,0,1316,1317,5,179,0,0,1317,1318,5,86,0,0,1318,1319, + 7,8,0,0,1319,1325,3,362,181,0,1320,1321,5,136,0,0,1321,1323,5,46, + 0,0,1322,1324,3,184,92,0,1323,1322,1,0,0,0,1323,1324,1,0,0,0,1324, + 1326,1,0,0,0,1325,1320,1,0,0,0,1325,1326,1,0,0,0,1326,139,1,0,0, + 0,1327,1328,5,179,0,0,1328,1329,5,86,0,0,1329,1330,7,8,0,0,1330, + 1336,3,362,181,0,1331,1332,5,136,0,0,1332,1334,5,188,0,0,1333,1335, + 3,186,93,0,1334,1333,1,0,0,0,1334,1335,1,0,0,0,1335,1337,1,0,0,0, + 1336,1331,1,0,0,0,1336,1337,1,0,0,0,1337,141,1,0,0,0,1338,1339,5, + 179,0,0,1339,1340,5,86,0,0,1340,1341,7,8,0,0,1341,1347,3,362,181, + 0,1342,1343,5,136,0,0,1343,1345,5,32,0,0,1344,1346,3,192,96,0,1345, + 1344,1,0,0,0,1345,1346,1,0,0,0,1346,1348,1,0,0,0,1347,1342,1,0,0, + 0,1347,1348,1,0,0,0,1348,143,1,0,0,0,1349,1353,3,146,73,0,1350,1353, + 3,148,74,0,1351,1353,3,150,75,0,1352,1349,1,0,0,0,1352,1350,1,0, + 0,0,1352,1351,1,0,0,0,1353,145,1,0,0,0,1354,1355,5,34,0,0,1355,1356, + 5,136,0,0,1356,1357,5,46,0,0,1357,1358,3,184,92,0,1358,1361,5,108, + 0,0,1359,1362,3,318,159,0,1360,1362,5,133,0,0,1361,1359,1,0,0,0, + 1361,1360,1,0,0,0,1362,147,1,0,0,0,1363,1364,5,34,0,0,1364,1365, + 5,136,0,0,1365,1366,5,188,0,0,1366,1367,3,186,93,0,1367,1370,5,108, + 0,0,1368,1371,3,318,159,0,1369,1371,5,133,0,0,1370,1368,1,0,0,0, + 1370,1369,1,0,0,0,1371,149,1,0,0,0,1372,1373,5,34,0,0,1373,1374, + 5,136,0,0,1374,1375,5,32,0,0,1375,1376,3,192,96,0,1376,1379,5,108, + 0,0,1377,1380,3,318,159,0,1378,1380,5,133,0,0,1379,1377,1,0,0,0, + 1379,1378,1,0,0,0,1380,151,1,0,0,0,1381,1382,5,67,0,0,1382,1383, + 3,4,2,0,1383,153,1,0,0,0,1384,1390,5,176,0,0,1385,1391,5,2,0,0,1386, + 1387,3,362,181,0,1387,1388,5,249,0,0,1388,1389,3,308,154,0,1389, + 1391,1,0,0,0,1390,1385,1,0,0,0,1390,1386,1,0,0,0,1390,1391,1,0,0, + 0,1391,155,1,0,0,0,1392,1393,5,264,0,0,1393,1394,5,180,0,0,1394, + 1404,5,265,0,0,1395,1397,3,318,159,0,1396,1395,1,0,0,0,1396,1397, + 1,0,0,0,1397,1405,1,0,0,0,1398,1401,3,318,159,0,1399,1400,5,263, + 0,0,1400,1402,3,308,154,0,1401,1399,1,0,0,0,1401,1402,1,0,0,0,1402, + 1405,1,0,0,0,1403,1405,3,308,154,0,1404,1396,1,0,0,0,1404,1398,1, + 0,0,0,1404,1403,1,0,0,0,1405,1406,1,0,0,0,1406,1407,5,266,0,0,1407, + 157,1,0,0,0,1408,1409,5,107,0,0,1409,1410,5,121,0,0,1410,1411,3, + 186,93,0,1411,159,1,0,0,0,1412,1413,5,118,0,0,1413,1414,5,45,0,0, + 1414,1415,5,98,0,0,1415,1417,5,274,0,0,1416,1418,5,144,0,0,1417, + 1416,1,0,0,0,1417,1418,1,0,0,0,1418,1419,1,0,0,0,1419,1420,5,103, + 0,0,1420,1421,5,188,0,0,1421,1431,3,186,93,0,1422,1423,5,145,0,0, + 1423,1424,5,265,0,0,1424,1427,3,308,154,0,1425,1426,5,263,0,0,1426, + 1428,3,308,154,0,1427,1425,1,0,0,0,1427,1428,1,0,0,0,1428,1429,1, + 0,0,0,1429,1430,5,266,0,0,1430,1432,1,0,0,0,1431,1422,1,0,0,0,1431, + 1432,1,0,0,0,1432,161,1,0,0,0,1433,1437,3,164,82,0,1434,1437,3,166, + 83,0,1435,1437,3,168,84,0,1436,1433,1,0,0,0,1436,1434,1,0,0,0,1436, + 1435,1,0,0,0,1437,163,1,0,0,0,1438,1439,5,162,0,0,1439,1452,3,186, + 93,0,1440,1441,5,145,0,0,1441,1442,5,265,0,0,1442,1447,3,308,154, + 0,1443,1444,5,263,0,0,1444,1446,3,308,154,0,1445,1443,1,0,0,0,1446, + 1449,1,0,0,0,1447,1448,1,0,0,0,1447,1445,1,0,0,0,1448,1450,1,0,0, + 0,1449,1447,1,0,0,0,1450,1451,5,266,0,0,1451,1453,1,0,0,0,1452,1440, + 1,0,0,0,1452,1453,1,0,0,0,1453,165,1,0,0,0,1454,1455,5,162,0,0,1455, + 1456,5,13,0,0,1456,167,1,0,0,0,1457,1458,5,162,0,0,1458,1459,5,85, + 0,0,1459,1460,3,190,95,0,1460,169,1,0,0,0,1461,1462,5,93,0,0,1462, + 1463,5,66,0,0,1463,171,1,0,0,0,1464,1465,5,93,0,0,1465,1466,5,132, + 0,0,1466,1467,5,66,0,0,1467,173,1,0,0,0,1468,1469,3,358,179,0,1469, + 175,1,0,0,0,1470,1471,3,358,179,0,1471,177,1,0,0,0,1472,1473,3,358, + 179,0,1473,179,1,0,0,0,1474,1475,3,358,179,0,1475,181,1,0,0,0,1476, + 1477,3,358,179,0,1477,183,1,0,0,0,1478,1479,3,358,179,0,1479,185, + 1,0,0,0,1480,1485,3,362,181,0,1481,1482,5,261,0,0,1482,1484,3,362, + 181,0,1483,1481,1,0,0,0,1484,1487,1,0,0,0,1485,1483,1,0,0,0,1485, + 1486,1,0,0,0,1486,187,1,0,0,0,1487,1485,1,0,0,0,1488,1493,3,362, + 181,0,1489,1490,5,261,0,0,1490,1492,3,362,181,0,1491,1489,1,0,0, + 0,1492,1495,1,0,0,0,1493,1491,1,0,0,0,1493,1494,1,0,0,0,1494,189, + 1,0,0,0,1495,1493,1,0,0,0,1496,1499,3,366,183,0,1497,1499,3,358, + 179,0,1498,1496,1,0,0,0,1498,1497,1,0,0,0,1499,191,1,0,0,0,1500, + 1503,3,358,179,0,1501,1503,4,96,0,0,1502,1500,1,0,0,0,1502,1501, + 1,0,0,0,1503,193,1,0,0,0,1504,1507,3,186,93,0,1505,1507,3,188,94, + 0,1506,1504,1,0,0,0,1506,1505,1,0,0,0,1507,195,1,0,0,0,1508,1509, + 5,21,0,0,1509,1510,5,26,0,0,1510,1512,3,296,148,0,1511,1508,1,0, + 0,0,1511,1512,1,0,0,0,1512,1514,1,0,0,0,1513,1515,3,222,111,0,1514, + 1513,1,0,0,0,1514,1515,1,0,0,0,1515,1519,1,0,0,0,1516,1517,5,168, + 0,0,1517,1518,5,79,0,0,1518,1520,3,258,129,0,1519,1516,1,0,0,0,1519, + 1520,1,0,0,0,1520,1524,1,0,0,0,1521,1522,5,216,0,0,1522,1523,5,175, + 0,0,1523,1525,3,252,126,0,1524,1521,1,0,0,0,1524,1525,1,0,0,0,1525, + 1529,1,0,0,0,1526,1527,5,23,0,0,1527,1528,5,9,0,0,1528,1530,3,234, + 117,0,1529,1526,1,0,0,0,1529,1530,1,0,0,0,1530,1533,1,0,0,0,1531, + 1532,5,24,0,0,1532,1534,3,318,159,0,1533,1531,1,0,0,0,1533,1534, + 1,0,0,0,1534,1545,1,0,0,0,1535,1536,5,30,0,0,1536,1537,5,94,0,0, + 1537,1542,3,358,179,0,1538,1539,5,216,0,0,1539,1540,5,151,0,0,1540, + 1541,5,249,0,0,1541,1543,5,277,0,0,1542,1538,1,0,0,0,1542,1543,1, + 0,0,0,1543,1546,1,0,0,0,1544,1546,5,197,0,0,1545,1535,1,0,0,0,1545, + 1544,1,0,0,0,1545,1546,1,0,0,0,1546,1549,1,0,0,0,1547,1548,5,25, + 0,0,1548,1550,3,252,126,0,1549,1547,1,0,0,0,1549,1550,1,0,0,0,1550, + 197,1,0,0,0,1551,1556,3,200,100,0,1552,1553,5,263,0,0,1553,1555, + 3,200,100,0,1554,1552,1,0,0,0,1555,1558,1,0,0,0,1556,1554,1,0,0, + 0,1556,1557,1,0,0,0,1557,199,1,0,0,0,1558,1556,1,0,0,0,1559,1560, + 3,358,179,0,1560,1561,5,249,0,0,1561,1562,3,308,154,0,1562,201,1, + 0,0,0,1563,1565,5,265,0,0,1564,1566,3,204,102,0,1565,1564,1,0,0, + 0,1565,1566,1,0,0,0,1566,1573,1,0,0,0,1567,1569,5,263,0,0,1568,1570, + 3,204,102,0,1569,1568,1,0,0,0,1569,1570,1,0,0,0,1570,1572,1,0,0, + 0,1571,1567,1,0,0,0,1572,1575,1,0,0,0,1573,1571,1,0,0,0,1573,1574, + 1,0,0,0,1574,1576,1,0,0,0,1575,1573,1,0,0,0,1576,1577,5,266,0,0, + 1577,203,1,0,0,0,1578,1580,3,182,91,0,1579,1581,3,222,111,0,1580, + 1579,1,0,0,0,1580,1581,1,0,0,0,1581,205,1,0,0,0,1582,1584,3,208, + 104,0,1583,1582,1,0,0,0,1583,1584,1,0,0,0,1584,1585,1,0,0,0,1585, + 1586,3,262,131,0,1586,207,1,0,0,0,1587,1588,5,216,0,0,1588,1593, + 3,278,139,0,1589,1590,5,263,0,0,1590,1592,3,278,139,0,1591,1589, + 1,0,0,0,1592,1595,1,0,0,0,1593,1591,1,0,0,0,1593,1594,1,0,0,0,1594, + 209,1,0,0,0,1595,1593,1,0,0,0,1596,1597,5,150,0,0,1597,1598,5,110, + 0,0,1598,1600,3,296,148,0,1599,1601,5,53,0,0,1600,1599,1,0,0,0,1600, + 1601,1,0,0,0,1601,1605,1,0,0,0,1602,1606,5,225,0,0,1603,1604,5,263, + 0,0,1604,1606,5,225,0,0,1605,1602,1,0,0,0,1605,1603,1,0,0,0,1605, + 1606,1,0,0,0,1606,1610,1,0,0,0,1607,1611,5,226,0,0,1608,1609,5,263, + 0,0,1609,1611,5,226,0,0,1610,1607,1,0,0,0,1610,1608,1,0,0,0,1610, + 1611,1,0,0,0,1611,1624,1,0,0,0,1612,1613,5,263,0,0,1613,1616,3,212, + 106,0,1614,1616,3,212,106,0,1615,1612,1,0,0,0,1615,1614,1,0,0,0, + 1616,1621,1,0,0,0,1617,1618,5,263,0,0,1618,1620,3,212,106,0,1619, + 1617,1,0,0,0,1620,1623,1,0,0,0,1621,1622,1,0,0,0,1621,1619,1,0,0, + 0,1622,1625,1,0,0,0,1623,1621,1,0,0,0,1624,1615,1,0,0,0,1624,1625, + 1,0,0,0,1625,211,1,0,0,0,1626,1627,5,81,0,0,1627,1628,5,110,0,0, + 1628,1629,3,296,148,0,1629,1630,5,224,0,0,1630,1631,3,186,93,0,1631, + 1633,3,296,148,0,1632,1634,5,53,0,0,1633,1632,1,0,0,0,1633,1634, + 1,0,0,0,1634,1636,1,0,0,0,1635,1637,5,225,0,0,1636,1635,1,0,0,0, + 1636,1637,1,0,0,0,1637,1639,1,0,0,0,1638,1640,5,226,0,0,1639,1638, + 1,0,0,0,1639,1640,1,0,0,0,1640,213,1,0,0,0,1641,1642,3,192,96,0, + 1642,1645,3,332,166,0,1643,1644,5,34,0,0,1644,1646,3,318,159,0,1645, + 1643,1,0,0,0,1645,1646,1,0,0,0,1646,215,1,0,0,0,1647,1648,3,182, + 91,0,1648,1650,3,332,166,0,1649,1651,3,222,111,0,1650,1649,1,0,0, + 0,1650,1651,1,0,0,0,1651,217,1,0,0,0,1652,1653,3,220,110,0,1653, + 219,1,0,0,0,1654,1655,3,182,91,0,1655,1663,3,332,166,0,1656,1660, + 3,228,114,0,1657,1659,3,228,114,0,1658,1657,1,0,0,0,1659,1662,1, + 0,0,0,1660,1661,1,0,0,0,1660,1658,1,0,0,0,1661,1664,1,0,0,0,1662, + 1660,1,0,0,0,1663,1656,1,0,0,0,1663,1664,1,0,0,0,1664,1666,1,0,0, + 0,1665,1667,3,222,111,0,1666,1665,1,0,0,0,1666,1667,1,0,0,0,1667, + 1670,1,0,0,0,1668,1669,5,150,0,0,1669,1671,5,110,0,0,1670,1668,1, + 0,0,0,1670,1671,1,0,0,0,1671,221,1,0,0,0,1672,1673,5,34,0,0,1673, + 1674,3,318,159,0,1674,223,1,0,0,0,1675,1683,3,214,107,0,1676,1680, + 3,228,114,0,1677,1679,3,228,114,0,1678,1677,1,0,0,0,1679,1682,1, + 0,0,0,1680,1681,1,0,0,0,1680,1678,1,0,0,0,1681,1684,1,0,0,0,1682, + 1680,1,0,0,0,1683,1676,1,0,0,0,1683,1684,1,0,0,0,1684,225,1,0,0, + 0,1685,1686,3,182,91,0,1686,1689,3,332,166,0,1687,1688,5,34,0,0, + 1688,1690,3,318,159,0,1689,1687,1,0,0,0,1689,1690,1,0,0,0,1690,1698, + 1,0,0,0,1691,1695,3,228,114,0,1692,1694,3,228,114,0,1693,1692,1, + 0,0,0,1694,1697,1,0,0,0,1695,1696,1,0,0,0,1695,1693,1,0,0,0,1696, + 1699,1,0,0,0,1697,1695,1,0,0,0,1698,1691,1,0,0,0,1698,1699,1,0,0, + 0,1699,227,1,0,0,0,1700,1702,5,132,0,0,1701,1700,1,0,0,0,1701,1702, + 1,0,0,0,1702,1703,1,0,0,0,1703,1706,5,133,0,0,1704,1706,3,230,115, + 0,1705,1701,1,0,0,0,1705,1704,1,0,0,0,1706,229,1,0,0,0,1707,1708, + 5,60,0,0,1708,1716,3,308,154,0,1709,1710,5,35,0,0,1710,1716,3,308, + 154,0,1711,1712,5,51,0,0,1712,1716,3,308,154,0,1713,1714,5,16,0, + 0,1714,1716,3,364,182,0,1715,1707,1,0,0,0,1715,1709,1,0,0,0,1715, + 1711,1,0,0,0,1715,1713,1,0,0,0,1716,231,1,0,0,0,1717,1718,7,10,0, + 0,1718,233,1,0,0,0,1719,1720,7,11,0,0,1720,235,1,0,0,0,1721,1726, + 3,238,119,0,1722,1723,5,263,0,0,1723,1725,3,238,119,0,1724,1722, + 1,0,0,0,1725,1728,1,0,0,0,1726,1727,1,0,0,0,1726,1724,1,0,0,0,1727, + 1731,1,0,0,0,1728,1726,1,0,0,0,1729,1730,5,263,0,0,1730,1732,3,240, + 120,0,1731,1729,1,0,0,0,1731,1732,1,0,0,0,1732,1735,1,0,0,0,1733, + 1735,3,240,120,0,1734,1721,1,0,0,0,1734,1733,1,0,0,0,1735,237,1, + 0,0,0,1736,1738,5,89,0,0,1737,1739,3,296,148,0,1738,1737,1,0,0,0, + 1738,1739,1,0,0,0,1739,1740,1,0,0,0,1740,1741,5,146,0,0,1741,1742, + 3,364,182,0,1742,239,1,0,0,0,1743,1745,5,154,0,0,1744,1746,3,296, + 148,0,1745,1744,1,0,0,0,1745,1746,1,0,0,0,1746,1747,1,0,0,0,1747, + 1748,5,265,0,0,1748,1749,5,145,0,0,1749,1755,3,242,121,0,1750,1751, + 5,263,0,0,1751,1752,5,145,0,0,1752,1754,3,242,121,0,1753,1750,1, + 0,0,0,1754,1757,1,0,0,0,1755,1756,1,0,0,0,1755,1753,1,0,0,0,1756, + 1758,1,0,0,0,1757,1755,1,0,0,0,1758,1759,5,266,0,0,1759,241,1,0, + 0,0,1760,1761,5,210,0,0,1761,1762,3,248,124,0,1762,1763,3,308,154, + 0,1763,1776,1,0,0,0,1764,1765,3,308,154,0,1765,1766,3,246,123,0, + 1766,1768,1,0,0,0,1767,1764,1,0,0,0,1767,1768,1,0,0,0,1768,1769, + 1,0,0,0,1769,1773,5,211,0,0,1770,1771,3,246,123,0,1771,1772,3,308, + 154,0,1772,1774,1,0,0,0,1773,1770,1,0,0,0,1773,1774,1,0,0,0,1774, + 1776,1,0,0,0,1775,1760,1,0,0,0,1775,1767,1,0,0,0,1776,243,1,0,0, + 0,1777,1778,5,30,0,0,1778,1779,5,94,0,0,1779,1784,3,362,181,0,1780, + 1781,5,216,0,0,1781,1782,5,151,0,0,1782,1783,5,249,0,0,1783,1785, + 3,364,182,0,1784,1780,1,0,0,0,1784,1785,1,0,0,0,1785,1788,1,0,0, + 0,1786,1788,5,197,0,0,1787,1777,1,0,0,0,1787,1786,1,0,0,0,1788,245, + 1,0,0,0,1789,1795,1,0,0,0,1790,1795,5,251,0,0,1791,1795,5,252,0, + 0,1792,1795,5,253,0,0,1793,1795,5,254,0,0,1794,1789,1,0,0,0,1794, + 1790,1,0,0,0,1794,1791,1,0,0,0,1794,1792,1,0,0,0,1794,1793,1,0,0, + 0,1795,247,1,0,0,0,1796,1805,5,249,0,0,1797,1805,5,250,0,0,1798, + 1805,5,115,0,0,1799,1805,5,164,0,0,1800,1805,5,163,0,0,1801,1805, + 5,15,0,0,1802,1805,5,94,0,0,1803,1805,3,246,123,0,1804,1796,1,0, + 0,0,1804,1797,1,0,0,0,1804,1798,1,0,0,0,1804,1799,1,0,0,0,1804,1800, + 1,0,0,0,1804,1801,1,0,0,0,1804,1802,1,0,0,0,1804,1803,1,0,0,0,1805, + 249,1,0,0,0,1806,1807,5,115,0,0,1807,1810,3,358,179,0,1808,1809, + 7,12,0,0,1809,1811,5,153,0,0,1810,1808,1,0,0,0,1810,1811,1,0,0,0, + 1811,251,1,0,0,0,1812,1813,5,265,0,0,1813,1818,3,260,130,0,1814, + 1815,5,263,0,0,1815,1817,3,260,130,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,266,0,0,1822,253,1,0,0,0,1823,1824,5,265, + 0,0,1824,1829,3,214,107,0,1825,1826,5,263,0,0,1826,1828,3,214,107, + 0,1827,1825,1,0,0,0,1828,1831,1,0,0,0,1829,1830,1,0,0,0,1829,1827, + 1,0,0,0,1830,1832,1,0,0,0,1831,1829,1,0,0,0,1832,1833,5,266,0,0, + 1833,255,1,0,0,0,1834,1839,3,308,154,0,1835,1836,5,263,0,0,1836, + 1838,3,308,154,0,1837,1835,1,0,0,0,1838,1841,1,0,0,0,1839,1837,1, + 0,0,0,1839,1840,1,0,0,0,1840,257,1,0,0,0,1841,1839,1,0,0,0,1842, + 1852,5,52,0,0,1843,1844,5,71,0,0,1844,1845,5,191,0,0,1845,1846,5, + 26,0,0,1846,1850,3,318,159,0,1847,1848,5,63,0,0,1848,1849,5,26,0, + 0,1849,1851,3,318,159,0,1850,1847,1,0,0,0,1850,1851,1,0,0,0,1851, + 1853,1,0,0,0,1852,1843,1,0,0,0,1852,1853,1,0,0,0,1853,1858,1,0,0, + 0,1854,1855,5,117,0,0,1855,1856,5,191,0,0,1856,1857,5,26,0,0,1857, + 1859,3,318,159,0,1858,1854,1,0,0,0,1858,1859,1,0,0,0,1859,259,1, + 0,0,0,1860,1863,3,362,181,0,1861,1862,5,249,0,0,1862,1864,3,308, + 154,0,1863,1861,1,0,0,0,1863,1864,1,0,0,0,1864,261,1,0,0,0,1865, + 1876,3,264,132,0,1866,1867,5,139,0,0,1867,1868,5,26,0,0,1868,1873, + 3,268,134,0,1869,1870,5,263,0,0,1870,1872,3,268,134,0,1871,1869, + 1,0,0,0,1872,1875,1,0,0,0,1873,1871,1,0,0,0,1873,1874,1,0,0,0,1874, + 1877,1,0,0,0,1875,1873,1,0,0,0,1876,1866,1,0,0,0,1876,1877,1,0,0, + 0,1877,1884,1,0,0,0,1878,1879,5,116,0,0,1879,1882,3,308,154,0,1880, + 1881,5,135,0,0,1881,1883,5,277,0,0,1882,1880,1,0,0,0,1882,1883,1, + 0,0,0,1883,1885,1,0,0,0,1884,1878,1,0,0,0,1884,1885,1,0,0,0,1885, + 263,1,0,0,0,1886,1887,6,132,-1,0,1887,1888,3,266,133,0,1888,1903, + 1,0,0,0,1889,1890,10,2,0,0,1890,1892,5,100,0,0,1891,1893,3,280,140, + 0,1892,1891,1,0,0,0,1892,1893,1,0,0,0,1893,1894,1,0,0,0,1894,1902, + 3,264,132,3,1895,1896,10,1,0,0,1896,1898,7,13,0,0,1897,1899,3,280, + 140,0,1898,1897,1,0,0,0,1898,1899,1,0,0,0,1899,1900,1,0,0,0,1900, + 1902,3,264,132,2,1901,1889,1,0,0,0,1901,1895,1,0,0,0,1902,1905,1, + 0,0,0,1903,1901,1,0,0,0,1903,1904,1,0,0,0,1904,265,1,0,0,0,1905, + 1903,1,0,0,0,1906,1923,3,270,135,0,1907,1908,5,188,0,0,1908,1923, + 3,186,93,0,1909,1910,5,211,0,0,1910,1915,3,308,154,0,1911,1912,5, + 263,0,0,1912,1914,3,308,154,0,1913,1911,1,0,0,0,1914,1917,1,0,0, + 0,1915,1913,1,0,0,0,1915,1916,1,0,0,0,1916,1923,1,0,0,0,1917,1915, + 1,0,0,0,1918,1919,5,265,0,0,1919,1920,3,262,131,0,1920,1921,5,266, + 0,0,1921,1923,1,0,0,0,1922,1906,1,0,0,0,1922,1907,1,0,0,0,1922,1909, + 1,0,0,0,1922,1918,1,0,0,0,1923,267,1,0,0,0,1924,1926,3,306,153,0, + 1925,1927,7,14,0,0,1926,1925,1,0,0,0,1926,1927,1,0,0,0,1927,1930, + 1,0,0,0,1928,1929,5,134,0,0,1929,1931,7,15,0,0,1930,1928,1,0,0,0, + 1930,1931,1,0,0,0,1931,269,1,0,0,0,1932,1934,5,174,0,0,1933,1935, + 3,280,140,0,1934,1933,1,0,0,0,1934,1935,1,0,0,0,1935,1937,1,0,0, + 0,1936,1938,5,183,0,0,1937,1936,1,0,0,0,1937,1938,1,0,0,0,1938,1939, + 1,0,0,0,1939,1944,3,282,141,0,1940,1941,5,263,0,0,1941,1943,3,282, + 141,0,1942,1940,1,0,0,0,1943,1946,1,0,0,0,1944,1942,1,0,0,0,1944, + 1945,1,0,0,0,1945,1956,1,0,0,0,1946,1944,1,0,0,0,1947,1948,5,82, + 0,0,1948,1953,3,284,142,0,1949,1950,5,263,0,0,1950,1952,3,284,142, + 0,1951,1949,1,0,0,0,1952,1955,1,0,0,0,1953,1951,1,0,0,0,1953,1954, + 1,0,0,0,1954,1957,1,0,0,0,1955,1953,1,0,0,0,1956,1947,1,0,0,0,1956, + 1957,1,0,0,0,1957,1960,1,0,0,0,1958,1959,5,215,0,0,1959,1961,3,310, + 155,0,1960,1958,1,0,0,0,1960,1961,1,0,0,0,1961,1965,1,0,0,0,1962, + 1963,5,87,0,0,1963,1964,5,26,0,0,1964,1966,3,272,136,0,1965,1962, + 1,0,0,0,1965,1966,1,0,0,0,1966,1969,1,0,0,0,1967,1968,5,90,0,0,1968, + 1970,3,310,155,0,1969,1967,1,0,0,0,1969,1970,1,0,0,0,1970,271,1, + 0,0,0,1971,1973,3,280,140,0,1972,1971,1,0,0,0,1972,1973,1,0,0,0, + 1973,1974,1,0,0,0,1974,1979,3,274,137,0,1975,1976,5,263,0,0,1976, + 1978,3,274,137,0,1977,1975,1,0,0,0,1978,1981,1,0,0,0,1979,1977,1, + 0,0,0,1979,1980,1,0,0,0,1980,273,1,0,0,0,1981,1979,1,0,0,0,1982, + 1983,3,276,138,0,1983,275,1,0,0,0,1984,1993,5,265,0,0,1985,1990, + 3,306,153,0,1986,1987,5,263,0,0,1987,1989,3,306,153,0,1988,1986, + 1,0,0,0,1989,1992,1,0,0,0,1990,1988,1,0,0,0,1990,1991,1,0,0,0,1991, + 1994,1,0,0,0,1992,1990,1,0,0,0,1993,1985,1,0,0,0,1993,1994,1,0,0, + 0,1994,1995,1,0,0,0,1995,1998,5,266,0,0,1996,1998,3,306,153,0,1997, + 1984,1,0,0,0,1997,1996,1,0,0,0,1998,277,1,0,0,0,1999,2001,3,362, + 181,0,2000,2002,3,296,148,0,2001,2000,1,0,0,0,2001,2002,1,0,0,0, + 2002,2003,1,0,0,0,2003,2004,5,9,0,0,2004,2005,3,300,150,0,2005,279, + 1,0,0,0,2006,2007,7,16,0,0,2007,281,1,0,0,0,2008,2013,3,306,153, + 0,2009,2011,5,9,0,0,2010,2009,1,0,0,0,2010,2011,1,0,0,0,2011,2012, + 1,0,0,0,2012,2014,3,362,181,0,2013,2010,1,0,0,0,2013,2014,1,0,0, + 0,2014,2021,1,0,0,0,2015,2016,3,358,179,0,2016,2017,5,261,0,0,2017, + 2018,5,257,0,0,2018,2021,1,0,0,0,2019,2021,5,257,0,0,2020,2008,1, + 0,0,0,2020,2015,1,0,0,0,2020,2019,1,0,0,0,2021,283,1,0,0,0,2022, + 2023,6,142,-1,0,2023,2024,3,290,145,0,2024,2038,1,0,0,0,2025,2034, + 10,2,0,0,2026,2027,5,38,0,0,2027,2028,5,109,0,0,2028,2035,3,290, + 145,0,2029,2030,3,286,143,0,2030,2031,5,109,0,0,2031,2032,3,284, + 142,0,2032,2033,3,288,144,0,2033,2035,1,0,0,0,2034,2026,1,0,0,0, + 2034,2029,1,0,0,0,2035,2037,1,0,0,0,2036,2025,1,0,0,0,2037,2040, + 1,0,0,0,2038,2036,1,0,0,0,2038,2039,1,0,0,0,2039,285,1,0,0,0,2040, + 2038,1,0,0,0,2041,2043,5,97,0,0,2042,2041,1,0,0,0,2042,2043,1,0, + 0,0,2043,2073,1,0,0,0,2044,2046,5,114,0,0,2045,2047,5,97,0,0,2046, + 2045,1,0,0,0,2046,2047,1,0,0,0,2047,2073,1,0,0,0,2048,2050,5,165, + 0,0,2049,2051,5,97,0,0,2050,2049,1,0,0,0,2050,2051,1,0,0,0,2051, + 2073,1,0,0,0,2052,2054,5,114,0,0,2053,2055,5,141,0,0,2054,2053,1, + 0,0,0,2054,2055,1,0,0,0,2055,2073,1,0,0,0,2056,2058,5,165,0,0,2057, + 2059,5,141,0,0,2058,2057,1,0,0,0,2058,2059,1,0,0,0,2059,2073,1,0, + 0,0,2060,2062,5,83,0,0,2061,2063,5,141,0,0,2062,2061,1,0,0,0,2062, + 2063,1,0,0,0,2063,2073,1,0,0,0,2064,2065,5,114,0,0,2065,2073,5,177, + 0,0,2066,2067,5,165,0,0,2067,2073,5,177,0,0,2068,2069,5,114,0,0, + 2069,2073,5,7,0,0,2070,2071,5,165,0,0,2071,2073,5,7,0,0,2072,2042, + 1,0,0,0,2072,2044,1,0,0,0,2072,2048,1,0,0,0,2072,2052,1,0,0,0,2072, + 2056,1,0,0,0,2072,2060,1,0,0,0,2072,2064,1,0,0,0,2072,2066,1,0,0, + 0,2072,2068,1,0,0,0,2072,2070,1,0,0,0,2073,287,1,0,0,0,2074,2075, + 5,136,0,0,2075,2089,3,310,155,0,2076,2077,5,205,0,0,2077,2078,5, + 265,0,0,2078,2083,3,362,181,0,2079,2080,5,263,0,0,2080,2082,3,362, + 181,0,2081,2079,1,0,0,0,2082,2085,1,0,0,0,2083,2081,1,0,0,0,2083, + 2084,1,0,0,0,2084,2086,1,0,0,0,2085,2083,1,0,0,0,2086,2087,5,266, + 0,0,2087,2089,1,0,0,0,2088,2074,1,0,0,0,2088,2076,1,0,0,0,2089,289, + 1,0,0,0,2090,2103,3,294,147,0,2091,2092,5,190,0,0,2092,2093,3,292, + 146,0,2093,2094,5,265,0,0,2094,2095,3,308,154,0,2095,2101,5,266, + 0,0,2096,2097,5,157,0,0,2097,2098,5,265,0,0,2098,2099,3,308,154, + 0,2099,2100,5,266,0,0,2100,2102,1,0,0,0,2101,2096,1,0,0,0,2101,2102, + 1,0,0,0,2102,2104,1,0,0,0,2103,2091,1,0,0,0,2103,2104,1,0,0,0,2104, + 291,1,0,0,0,2105,2106,7,17,0,0,2106,293,1,0,0,0,2107,2115,3,298, + 149,0,2108,2110,5,9,0,0,2109,2108,1,0,0,0,2109,2110,1,0,0,0,2110, + 2111,1,0,0,0,2111,2113,3,362,181,0,2112,2114,3,296,148,0,2113,2112, + 1,0,0,0,2113,2114,1,0,0,0,2114,2116,1,0,0,0,2115,2109,1,0,0,0,2115, + 2116,1,0,0,0,2116,295,1,0,0,0,2117,2118,5,265,0,0,2118,2123,3,192, + 96,0,2119,2120,5,263,0,0,2120,2122,3,192,96,0,2121,2119,1,0,0,0, + 2122,2125,1,0,0,0,2123,2121,1,0,0,0,2123,2124,1,0,0,0,2124,2126, + 1,0,0,0,2125,2123,1,0,0,0,2126,2127,5,266,0,0,2127,297,1,0,0,0,2128, + 2136,3,194,97,0,2129,2131,5,113,0,0,2130,2129,1,0,0,0,2130,2131, + 1,0,0,0,2131,2132,1,0,0,0,2132,2136,3,300,150,0,2133,2136,3,302, + 151,0,2134,2136,3,304,152,0,2135,2128,1,0,0,0,2135,2130,1,0,0,0, + 2135,2133,1,0,0,0,2135,2134,1,0,0,0,2136,299,1,0,0,0,2137,2138,5, + 265,0,0,2138,2139,3,206,103,0,2139,2140,5,266,0,0,2140,301,1,0,0, + 0,2141,2142,5,201,0,0,2142,2143,5,265,0,0,2143,2148,3,308,154,0, + 2144,2145,5,263,0,0,2145,2147,3,308,154,0,2146,2144,1,0,0,0,2147, + 2150,1,0,0,0,2148,2146,1,0,0,0,2148,2149,1,0,0,0,2149,2151,1,0,0, + 0,2150,2148,1,0,0,0,2151,2154,5,266,0,0,2152,2153,5,216,0,0,2153, + 2155,5,140,0,0,2154,2152,1,0,0,0,2154,2155,1,0,0,0,2155,303,1,0, + 0,0,2156,2157,5,265,0,0,2157,2158,3,284,142,0,2158,2159,5,266,0, + 0,2159,305,1,0,0,0,2160,2163,3,192,96,0,2161,2163,3,308,154,0,2162, + 2160,1,0,0,0,2162,2161,1,0,0,0,2163,307,1,0,0,0,2164,2165,3,310, + 155,0,2165,309,1,0,0,0,2166,2167,6,155,-1,0,2167,2169,3,314,157, + 0,2168,2170,3,312,156,0,2169,2168,1,0,0,0,2169,2170,1,0,0,0,2170, + 2174,1,0,0,0,2171,2172,5,132,0,0,2172,2174,3,310,155,3,2173,2166, + 1,0,0,0,2173,2171,1,0,0,0,2174,2183,1,0,0,0,2175,2176,10,2,0,0,2176, + 2177,5,5,0,0,2177,2182,3,310,155,3,2178,2179,10,1,0,0,2179,2180, + 5,138,0,0,2180,2182,3,310,155,2,2181,2175,1,0,0,0,2181,2178,1,0, + 0,0,2182,2185,1,0,0,0,2183,2181,1,0,0,0,2183,2184,1,0,0,0,2184,311, + 1,0,0,0,2185,2183,1,0,0,0,2186,2187,3,320,160,0,2187,2188,3,314, + 157,0,2188,2245,1,0,0,0,2189,2190,3,320,160,0,2190,2191,3,322,161, + 0,2191,2192,3,300,150,0,2192,2245,1,0,0,0,2193,2195,5,132,0,0,2194, + 2193,1,0,0,0,2194,2195,1,0,0,0,2195,2196,1,0,0,0,2196,2197,5,15, + 0,0,2197,2198,3,314,157,0,2198,2199,5,5,0,0,2199,2200,3,314,157, + 0,2200,2245,1,0,0,0,2201,2203,5,132,0,0,2202,2201,1,0,0,0,2202,2203, + 1,0,0,0,2203,2204,1,0,0,0,2204,2205,5,94,0,0,2205,2206,5,265,0,0, + 2206,2211,3,308,154,0,2207,2208,5,263,0,0,2208,2210,3,308,154,0, + 2209,2207,1,0,0,0,2210,2213,1,0,0,0,2211,2209,1,0,0,0,2211,2212, + 1,0,0,0,2212,2214,1,0,0,0,2213,2211,1,0,0,0,2214,2215,5,266,0,0, + 2215,2245,1,0,0,0,2216,2218,5,132,0,0,2217,2216,1,0,0,0,2217,2218, + 1,0,0,0,2218,2219,1,0,0,0,2219,2220,5,94,0,0,2220,2245,3,300,150, + 0,2221,2223,5,132,0,0,2222,2221,1,0,0,0,2222,2223,1,0,0,0,2223,2224, + 1,0,0,0,2224,2225,7,18,0,0,2225,2228,3,314,157,0,2226,2227,5,62, + 0,0,2227,2229,3,314,157,0,2228,2226,1,0,0,0,2228,2229,1,0,0,0,2229, + 2245,1,0,0,0,2230,2231,7,19,0,0,2231,2245,3,314,157,0,2232,2234, + 5,108,0,0,2233,2235,5,132,0,0,2234,2233,1,0,0,0,2234,2235,1,0,0, + 0,2235,2236,1,0,0,0,2236,2245,7,20,0,0,2237,2239,5,108,0,0,2238, + 2240,5,132,0,0,2239,2238,1,0,0,0,2239,2240,1,0,0,0,2240,2241,1,0, + 0,0,2241,2242,5,57,0,0,2242,2243,5,82,0,0,2243,2245,3,314,157,0, + 2244,2186,1,0,0,0,2244,2189,1,0,0,0,2244,2194,1,0,0,0,2244,2202, + 1,0,0,0,2244,2217,1,0,0,0,2244,2222,1,0,0,0,2244,2230,1,0,0,0,2244, + 2232,1,0,0,0,2244,2237,1,0,0,0,2245,313,1,0,0,0,2246,2247,6,157, + -1,0,2247,2251,3,316,158,0,2248,2249,7,21,0,0,2249,2251,3,314,157, + 4,2250,2246,1,0,0,0,2250,2248,1,0,0,0,2251,2263,1,0,0,0,2252,2253, + 10,3,0,0,2253,2254,7,22,0,0,2254,2262,3,314,157,4,2255,2256,10,2, + 0,0,2256,2257,7,21,0,0,2257,2262,3,314,157,3,2258,2259,10,1,0,0, + 2259,2260,5,260,0,0,2260,2262,3,314,157,2,2261,2252,1,0,0,0,2261, + 2255,1,0,0,0,2261,2258,1,0,0,0,2262,2265,1,0,0,0,2263,2261,1,0,0, + 0,2263,2264,1,0,0,0,2264,315,1,0,0,0,2265,2263,1,0,0,0,2266,2267, + 6,158,-1,0,2267,2513,5,133,0,0,2268,2513,3,326,163,0,2269,2270,3, + 362,181,0,2270,2271,3,318,159,0,2271,2513,1,0,0,0,2272,2273,5,286, + 0,0,2273,2513,3,318,159,0,2274,2513,3,364,182,0,2275,2513,3,324, + 162,0,2276,2513,3,318,159,0,2277,2513,5,276,0,0,2278,2513,5,272, + 0,0,2279,2280,5,148,0,0,2280,2281,5,265,0,0,2281,2282,3,314,157, + 0,2282,2283,5,94,0,0,2283,2284,3,314,157,0,2284,2285,5,266,0,0,2285, + 2513,1,0,0,0,2286,2287,5,265,0,0,2287,2290,3,308,154,0,2288,2289, + 5,9,0,0,2289,2291,3,332,166,0,2290,2288,1,0,0,0,2290,2291,1,0,0, + 0,2291,2300,1,0,0,0,2292,2293,5,263,0,0,2293,2296,3,308,154,0,2294, + 2295,5,9,0,0,2295,2297,3,332,166,0,2296,2294,1,0,0,0,2296,2297,1, + 0,0,0,2297,2299,1,0,0,0,2298,2292,1,0,0,0,2299,2302,1,0,0,0,2300, + 2301,1,0,0,0,2300,2298,1,0,0,0,2301,2303,1,0,0,0,2302,2300,1,0,0, + 0,2303,2304,5,266,0,0,2304,2513,1,0,0,0,2305,2306,5,168,0,0,2306, + 2307,5,265,0,0,2307,2312,3,308,154,0,2308,2309,5,263,0,0,2309,2311, + 3,308,154,0,2310,2308,1,0,0,0,2311,2314,1,0,0,0,2312,2310,1,0,0, + 0,2312,2313,1,0,0,0,2313,2315,1,0,0,0,2314,2312,1,0,0,0,2315,2316, + 5,266,0,0,2316,2513,1,0,0,0,2317,2318,3,190,95,0,2318,2319,5,265, + 0,0,2319,2320,5,257,0,0,2320,2322,5,266,0,0,2321,2323,3,342,171, + 0,2322,2321,1,0,0,0,2322,2323,1,0,0,0,2323,2325,1,0,0,0,2324,2326, + 3,344,172,0,2325,2324,1,0,0,0,2325,2326,1,0,0,0,2326,2513,1,0,0, + 0,2327,2328,3,190,95,0,2328,2340,5,265,0,0,2329,2331,3,280,140,0, + 2330,2329,1,0,0,0,2330,2331,1,0,0,0,2331,2332,1,0,0,0,2332,2337, + 3,308,154,0,2333,2334,5,263,0,0,2334,2336,3,308,154,0,2335,2333, + 1,0,0,0,2336,2339,1,0,0,0,2337,2335,1,0,0,0,2337,2338,1,0,0,0,2338, + 2341,1,0,0,0,2339,2337,1,0,0,0,2340,2330,1,0,0,0,2340,2341,1,0,0, + 0,2341,2352,1,0,0,0,2342,2343,5,139,0,0,2343,2344,5,26,0,0,2344, + 2349,3,268,134,0,2345,2346,5,263,0,0,2346,2348,3,268,134,0,2347, + 2345,1,0,0,0,2348,2351,1,0,0,0,2349,2347,1,0,0,0,2349,2350,1,0,0, + 0,2350,2353,1,0,0,0,2351,2349,1,0,0,0,2352,2342,1,0,0,0,2352,2353, + 1,0,0,0,2353,2354,1,0,0,0,2354,2356,5,266,0,0,2355,2357,3,342,171, + 0,2356,2355,1,0,0,0,2356,2357,1,0,0,0,2357,2359,1,0,0,0,2358,2360, + 3,344,172,0,2359,2358,1,0,0,0,2359,2360,1,0,0,0,2360,2513,1,0,0, + 0,2361,2362,3,362,181,0,2362,2363,5,273,0,0,2363,2364,3,308,154, + 0,2364,2513,1,0,0,0,2365,2374,5,265,0,0,2366,2371,3,362,181,0,2367, + 2368,5,263,0,0,2368,2370,3,362,181,0,2369,2367,1,0,0,0,2370,2373, + 1,0,0,0,2371,2369,1,0,0,0,2371,2372,1,0,0,0,2372,2375,1,0,0,0,2373, + 2371,1,0,0,0,2374,2366,1,0,0,0,2374,2375,1,0,0,0,2375,2376,1,0,0, + 0,2376,2377,5,266,0,0,2377,2378,5,273,0,0,2378,2513,3,308,154,0, + 2379,2380,5,265,0,0,2380,2381,3,206,103,0,2381,2382,5,266,0,0,2382, + 2513,1,0,0,0,2383,2384,5,66,0,0,2384,2385,5,265,0,0,2385,2386,3, + 206,103,0,2386,2387,5,266,0,0,2387,2513,1,0,0,0,2388,2389,5,28,0, + 0,2389,2391,3,314,157,0,2390,2392,3,340,170,0,2391,2390,1,0,0,0, + 2392,2393,1,0,0,0,2393,2391,1,0,0,0,2393,2394,1,0,0,0,2394,2397, + 1,0,0,0,2395,2396,5,59,0,0,2396,2398,3,308,154,0,2397,2395,1,0,0, + 0,2397,2398,1,0,0,0,2398,2399,1,0,0,0,2399,2400,5,61,0,0,2400,2513, + 1,0,0,0,2401,2403,5,28,0,0,2402,2404,3,340,170,0,2403,2402,1,0,0, + 0,2404,2405,1,0,0,0,2405,2403,1,0,0,0,2405,2406,1,0,0,0,2406,2409, + 1,0,0,0,2407,2408,5,59,0,0,2408,2410,3,308,154,0,2409,2407,1,0,0, + 0,2409,2410,1,0,0,0,2410,2411,1,0,0,0,2411,2412,5,61,0,0,2412,2513, + 1,0,0,0,2413,2414,5,29,0,0,2414,2415,5,265,0,0,2415,2416,3,308,154, + 0,2416,2417,5,9,0,0,2417,2418,3,332,166,0,2418,2419,5,266,0,0,2419, + 2513,1,0,0,0,2420,2421,5,195,0,0,2421,2422,5,265,0,0,2422,2423,3, + 308,154,0,2423,2424,5,9,0,0,2424,2425,3,332,166,0,2425,2426,5,266, + 0,0,2426,2513,1,0,0,0,2427,2428,5,8,0,0,2428,2437,5,267,0,0,2429, + 2434,3,308,154,0,2430,2431,5,263,0,0,2431,2433,3,308,154,0,2432, + 2430,1,0,0,0,2433,2436,1,0,0,0,2434,2432,1,0,0,0,2434,2435,1,0,0, + 0,2435,2438,1,0,0,0,2436,2434,1,0,0,0,2437,2429,1,0,0,0,2437,2438, + 1,0,0,0,2438,2439,1,0,0,0,2439,2513,5,268,0,0,2440,2513,3,362,181, + 0,2441,2513,5,40,0,0,2442,2446,5,42,0,0,2443,2444,5,265,0,0,2444, + 2445,5,277,0,0,2445,2447,5,266,0,0,2446,2443,1,0,0,0,2446,2447,1, + 0,0,0,2447,2513,1,0,0,0,2448,2452,5,43,0,0,2449,2450,5,265,0,0,2450, + 2451,5,277,0,0,2451,2453,5,266,0,0,2452,2449,1,0,0,0,2452,2453,1, + 0,0,0,2453,2513,1,0,0,0,2454,2458,5,119,0,0,2455,2456,5,265,0,0, + 2456,2457,5,277,0,0,2457,2459,5,266,0,0,2458,2455,1,0,0,0,2458,2459, + 1,0,0,0,2459,2513,1,0,0,0,2460,2464,5,120,0,0,2461,2462,5,265,0, + 0,2462,2463,5,277,0,0,2463,2465,5,266,0,0,2464,2461,1,0,0,0,2464, + 2465,1,0,0,0,2465,2513,1,0,0,0,2466,2513,5,44,0,0,2467,2513,5,41, + 0,0,2468,2469,5,184,0,0,2469,2470,5,265,0,0,2470,2471,3,314,157, + 0,2471,2472,5,82,0,0,2472,2475,3,314,157,0,2473,2474,5,78,0,0,2474, + 2476,3,314,157,0,2475,2473,1,0,0,0,2475,2476,1,0,0,0,2476,2477,1, + 0,0,0,2477,2478,5,266,0,0,2478,2513,1,0,0,0,2479,2480,5,131,0,0, + 2480,2481,5,265,0,0,2481,2484,3,314,157,0,2482,2483,5,263,0,0,2483, + 2485,3,330,165,0,2484,2482,1,0,0,0,2484,2485,1,0,0,0,2485,2486,1, + 0,0,0,2486,2487,5,266,0,0,2487,2513,1,0,0,0,2488,2489,5,68,0,0,2489, + 2490,5,265,0,0,2490,2491,3,362,181,0,2491,2492,5,82,0,0,2492,2493, + 3,314,157,0,2493,2494,5,266,0,0,2494,2513,1,0,0,0,2495,2496,5,265, + 0,0,2496,2497,3,308,154,0,2497,2498,5,266,0,0,2498,2513,1,0,0,0, + 2499,2500,5,88,0,0,2500,2509,5,265,0,0,2501,2506,3,358,179,0,2502, + 2503,5,263,0,0,2503,2505,3,358,179,0,2504,2502,1,0,0,0,2505,2508, + 1,0,0,0,2506,2504,1,0,0,0,2506,2507,1,0,0,0,2507,2510,1,0,0,0,2508, + 2506,1,0,0,0,2509,2501,1,0,0,0,2509,2510,1,0,0,0,2510,2511,1,0,0, + 0,2511,2513,5,266,0,0,2512,2266,1,0,0,0,2512,2268,1,0,0,0,2512,2269, + 1,0,0,0,2512,2272,1,0,0,0,2512,2274,1,0,0,0,2512,2275,1,0,0,0,2512, + 2276,1,0,0,0,2512,2277,1,0,0,0,2512,2278,1,0,0,0,2512,2279,1,0,0, + 0,2512,2286,1,0,0,0,2512,2305,1,0,0,0,2512,2317,1,0,0,0,2512,2327, + 1,0,0,0,2512,2361,1,0,0,0,2512,2365,1,0,0,0,2512,2379,1,0,0,0,2512, + 2383,1,0,0,0,2512,2388,1,0,0,0,2512,2401,1,0,0,0,2512,2413,1,0,0, + 0,2512,2420,1,0,0,0,2512,2427,1,0,0,0,2512,2440,1,0,0,0,2512,2441, + 1,0,0,0,2512,2442,1,0,0,0,2512,2448,1,0,0,0,2512,2454,1,0,0,0,2512, + 2460,1,0,0,0,2512,2466,1,0,0,0,2512,2467,1,0,0,0,2512,2468,1,0,0, + 0,2512,2479,1,0,0,0,2512,2488,1,0,0,0,2512,2495,1,0,0,0,2512,2499, + 1,0,0,0,2513,2524,1,0,0,0,2514,2515,10,15,0,0,2515,2516,5,267,0, + 0,2516,2517,3,314,157,0,2517,2518,5,268,0,0,2518,2523,1,0,0,0,2519, + 2520,10,13,0,0,2520,2521,5,261,0,0,2521,2523,3,362,181,0,2522,2514, + 1,0,0,0,2522,2519,1,0,0,0,2523,2526,1,0,0,0,2524,2522,1,0,0,0,2524, + 2525,1,0,0,0,2525,317,1,0,0,0,2526,2524,1,0,0,0,2527,2534,5,274, + 0,0,2528,2531,5,275,0,0,2529,2530,5,198,0,0,2530,2532,5,274,0,0, + 2531,2529,1,0,0,0,2531,2532,1,0,0,0,2532,2534,1,0,0,0,2533,2527, + 1,0,0,0,2533,2528,1,0,0,0,2534,319,1,0,0,0,2535,2536,7,23,0,0,2536, + 321,1,0,0,0,2537,2538,7,24,0,0,2538,323,1,0,0,0,2539,2540,7,25,0, + 0,2540,325,1,0,0,0,2541,2542,5,277,0,0,2542,2556,3,328,164,0,2543, + 2544,5,265,0,0,2544,2545,5,277,0,0,2545,2546,5,266,0,0,2546,2556, + 3,328,164,0,2547,2548,5,101,0,0,2548,2549,5,277,0,0,2549,2556,3, + 328,164,0,2550,2551,5,101,0,0,2551,2552,5,265,0,0,2552,2553,5,277, + 0,0,2553,2554,5,266,0,0,2554,2556,3,328,164,0,2555,2541,1,0,0,0, + 2555,2543,1,0,0,0,2555,2547,1,0,0,0,2555,2550,1,0,0,0,2556,327,1, + 0,0,0,2557,2558,7,26,0,0,2558,329,1,0,0,0,2559,2560,7,27,0,0,2560, + 331,1,0,0,0,2561,2562,6,166,-1,0,2562,2563,5,8,0,0,2563,2564,5,251, + 0,0,2564,2565,3,332,166,0,2565,2566,5,253,0,0,2566,2607,1,0,0,0, + 2567,2568,5,235,0,0,2568,2569,5,251,0,0,2569,2570,3,332,166,0,2570, + 2571,5,263,0,0,2571,2572,3,332,166,0,2572,2573,5,253,0,0,2573,2607, + 1,0,0,0,2574,2575,5,240,0,0,2575,2576,5,251,0,0,2576,2577,3,362, + 181,0,2577,2584,3,332,166,0,2578,2579,5,263,0,0,2579,2580,3,362, + 181,0,2580,2581,3,332,166,0,2581,2583,1,0,0,0,2582,2578,1,0,0,0, + 2583,2586,1,0,0,0,2584,2582,1,0,0,0,2584,2585,1,0,0,0,2585,2587, + 1,0,0,0,2586,2584,1,0,0,0,2587,2588,5,253,0,0,2588,2607,1,0,0,0, + 2589,2592,3,338,169,0,2590,2592,3,334,167,0,2591,2589,1,0,0,0,2591, + 2590,1,0,0,0,2592,2604,1,0,0,0,2593,2594,5,265,0,0,2594,2599,3,336, + 168,0,2595,2596,5,263,0,0,2596,2598,3,336,168,0,2597,2595,1,0,0, + 0,2598,2601,1,0,0,0,2599,2597,1,0,0,0,2599,2600,1,0,0,0,2600,2602, + 1,0,0,0,2601,2599,1,0,0,0,2602,2603,5,266,0,0,2603,2605,1,0,0,0, + 2604,2593,1,0,0,0,2604,2605,1,0,0,0,2605,2607,1,0,0,0,2606,2561, + 1,0,0,0,2606,2567,1,0,0,0,2606,2574,1,0,0,0,2606,2591,1,0,0,0,2607, + 2612,1,0,0,0,2608,2609,10,5,0,0,2609,2611,5,8,0,0,2610,2608,1,0, + 0,0,2611,2614,1,0,0,0,2612,2610,1,0,0,0,2612,2613,1,0,0,0,2613,333, + 1,0,0,0,2614,2612,1,0,0,0,2615,2616,7,28,0,0,2616,335,1,0,0,0,2617, + 2620,5,277,0,0,2618,2620,3,332,166,0,2619,2617,1,0,0,0,2619,2618, + 1,0,0,0,2620,337,1,0,0,0,2621,2626,5,284,0,0,2622,2626,5,285,0,0, + 2623,2626,5,286,0,0,2624,2626,3,362,181,0,2625,2621,1,0,0,0,2625, + 2622,1,0,0,0,2625,2623,1,0,0,0,2625,2624,1,0,0,0,2626,339,1,0,0, + 0,2627,2628,5,214,0,0,2628,2629,3,308,154,0,2629,2630,5,192,0,0, + 2630,2631,3,308,154,0,2631,341,1,0,0,0,2632,2633,5,74,0,0,2633,2634, + 5,265,0,0,2634,2635,5,215,0,0,2635,2636,3,310,155,0,2636,2637,5, + 266,0,0,2637,343,1,0,0,0,2638,2639,5,143,0,0,2639,2650,5,265,0,0, + 2640,2641,5,145,0,0,2641,2642,5,26,0,0,2642,2647,3,308,154,0,2643, + 2644,5,263,0,0,2644,2646,3,308,154,0,2645,2643,1,0,0,0,2646,2649, + 1,0,0,0,2647,2645,1,0,0,0,2647,2648,1,0,0,0,2648,2651,1,0,0,0,2649, + 2647,1,0,0,0,2650,2640,1,0,0,0,2650,2651,1,0,0,0,2651,2662,1,0,0, + 0,2652,2653,5,139,0,0,2653,2654,5,26,0,0,2654,2659,3,268,134,0,2655, + 2656,5,263,0,0,2656,2658,3,268,134,0,2657,2655,1,0,0,0,2658,2661, + 1,0,0,0,2659,2657,1,0,0,0,2659,2660,1,0,0,0,2660,2663,1,0,0,0,2661, + 2659,1,0,0,0,2662,2652,1,0,0,0,2662,2663,1,0,0,0,2663,2665,1,0,0, + 0,2664,2666,3,346,173,0,2665,2664,1,0,0,0,2665,2666,1,0,0,0,2666, + 2667,1,0,0,0,2667,2668,5,266,0,0,2668,345,1,0,0,0,2669,2670,5,154, + 0,0,2670,2686,3,348,174,0,2671,2672,5,169,0,0,2672,2686,3,348,174, + 0,2673,2674,5,154,0,0,2674,2675,5,15,0,0,2675,2676,3,348,174,0,2676, + 2677,5,5,0,0,2677,2678,3,348,174,0,2678,2686,1,0,0,0,2679,2680,5, + 169,0,0,2680,2681,5,15,0,0,2681,2682,3,348,174,0,2682,2683,5,5,0, + 0,2683,2684,3,348,174,0,2684,2686,1,0,0,0,2685,2669,1,0,0,0,2685, + 2671,1,0,0,0,2685,2673,1,0,0,0,2685,2679,1,0,0,0,2686,347,1,0,0, + 0,2687,2688,5,199,0,0,2688,2697,5,149,0,0,2689,2690,5,199,0,0,2690, + 2697,5,77,0,0,2691,2692,5,39,0,0,2692,2697,5,168,0,0,2693,2694,3, + 308,154,0,2694,2695,7,29,0,0,2695,2697,1,0,0,0,2696,2687,1,0,0,0, + 2696,2689,1,0,0,0,2696,2691,1,0,0,0,2696,2693,1,0,0,0,2697,349,1, + 0,0,0,2698,2699,3,362,181,0,2699,2700,5,261,0,0,2700,2701,3,362, + 181,0,2701,2704,1,0,0,0,2702,2704,3,362,181,0,2703,2698,1,0,0,0, + 2703,2702,1,0,0,0,2704,351,1,0,0,0,2705,2710,3,350,175,0,2706,2707, + 5,263,0,0,2707,2709,3,350,175,0,2708,2706,1,0,0,0,2709,2712,1,0, + 0,0,2710,2708,1,0,0,0,2710,2711,1,0,0,0,2711,353,1,0,0,0,2712,2710, + 1,0,0,0,2713,2727,5,2,0,0,2714,2727,5,4,0,0,2715,2727,5,58,0,0,2716, + 2727,5,37,0,0,2717,2727,5,99,0,0,2718,2727,5,162,0,0,2719,2724,5, + 174,0,0,2720,2721,5,265,0,0,2721,2722,3,362,181,0,2722,2723,5,266, + 0,0,2723,2725,1,0,0,0,2724,2720,1,0,0,0,2724,2725,1,0,0,0,2725,2727, + 1,0,0,0,2726,2713,1,0,0,0,2726,2714,1,0,0,0,2726,2715,1,0,0,0,2726, + 2716,1,0,0,0,2726,2717,1,0,0,0,2726,2718,1,0,0,0,2726,2719,1,0,0, + 0,2727,355,1,0,0,0,2728,2729,7,30,0,0,2729,357,1,0,0,0,2730,2735, + 3,362,181,0,2731,2732,5,261,0,0,2732,2734,3,362,181,0,2733,2731, + 1,0,0,0,2734,2737,1,0,0,0,2735,2733,1,0,0,0,2735,2736,1,0,0,0,2736, + 359,1,0,0,0,2737,2735,1,0,0,0,2738,2739,5,166,0,0,2739,2745,3,362, + 181,0,2740,2741,5,204,0,0,2741,2745,3,362,181,0,2742,2743,5,87,0, + 0,2743,2745,3,362,181,0,2744,2738,1,0,0,0,2744,2740,1,0,0,0,2744, + 2742,1,0,0,0,2745,361,1,0,0,0,2746,2752,5,280,0,0,2747,2752,5,274, + 0,0,2748,2752,3,368,184,0,2749,2752,5,283,0,0,2750,2752,5,281,0, + 0,2751,2746,1,0,0,0,2751,2747,1,0,0,0,2751,2748,1,0,0,0,2751,2749, + 1,0,0,0,2751,2750,1,0,0,0,2752,363,1,0,0,0,2753,2755,5,256,0,0,2754, + 2753,1,0,0,0,2754,2755,1,0,0,0,2755,2756,1,0,0,0,2756,2766,5,278, + 0,0,2757,2759,5,256,0,0,2758,2757,1,0,0,0,2758,2759,1,0,0,0,2759, + 2760,1,0,0,0,2760,2766,5,279,0,0,2761,2763,5,256,0,0,2762,2761,1, + 0,0,0,2762,2763,1,0,0,0,2763,2764,1,0,0,0,2764,2766,5,277,0,0,2765, + 2754,1,0,0,0,2765,2758,1,0,0,0,2765,2762,1,0,0,0,2766,365,1,0,0, + 0,2767,2768,7,31,0,0,2768,367,1,0,0,0,2769,2770,7,32,0,0,2770,369, + 1,0,0,0,353,373,380,404,417,421,425,434,439,443,449,451,456,460, + 464,471,476,482,486,495,502,506,511,513,518,521,528,532,537,541, + 544,548,556,560,564,572,576,585,588,591,597,604,615,620,625,630, + 635,644,647,650,654,680,706,715,725,728,742,760,762,771,782,791, + 798,802,809,815,818,823,830,844,857,862,867,873,909,912,918,921, + 927,933,945,947,958,966,971,975,980,987,991,995,1001,1005,1009,1018, + 1021,1024,1032,1046,1053,1066,1072,1077,1080,1083,1088,1092,1101, + 1106,1112,1116,1121,1126,1129,1137,1140,1144,1156,1159,1163,1168, + 1172,1188,1193,1200,1203,1209,1212,1219,1222,1226,1231,1234,1241, + 1244,1268,1282,1286,1290,1310,1312,1314,1323,1325,1334,1336,1345, + 1347,1352,1361,1370,1379,1390,1396,1401,1404,1417,1427,1431,1436, + 1447,1452,1485,1493,1498,1502,1506,1511,1514,1519,1524,1529,1533, + 1542,1545,1549,1556,1565,1569,1573,1580,1583,1593,1600,1605,1610, + 1615,1621,1624,1633,1636,1639,1645,1650,1660,1663,1666,1670,1680, + 1683,1689,1695,1698,1701,1705,1715,1726,1731,1734,1738,1745,1755, + 1767,1773,1775,1784,1787,1794,1804,1810,1818,1829,1839,1850,1852, + 1858,1863,1873,1876,1882,1884,1892,1898,1901,1903,1915,1922,1926, + 1930,1934,1937,1944,1953,1956,1960,1965,1969,1972,1979,1990,1993, + 1997,2001,2010,2013,2020,2034,2038,2042,2046,2050,2054,2058,2062, + 2072,2083,2088,2101,2103,2109,2113,2115,2123,2130,2135,2148,2154, + 2162,2169,2173,2181,2183,2194,2202,2211,2217,2222,2228,2234,2239, + 2244,2250,2261,2263,2290,2296,2300,2312,2322,2325,2330,2337,2340, + 2349,2352,2356,2359,2371,2374,2393,2397,2405,2409,2434,2437,2446, + 2452,2458,2464,2475,2484,2506,2509,2512,2522,2524,2531,2533,2555, + 2584,2591,2599,2604,2606,2612,2619,2625,2647,2650,2659,2662,2665, + 2685,2696,2703,2710,2724,2726,2735,2744,2751,2754,2758,2762,2765 ]; private static __ATN: antlr.ATN; @@ -14668,11 +14713,8 @@ export class CreateKuduTableAsSelectContext extends antlr.ParserRuleContext { public kuduPartitionClause(): KuduPartitionClauseContext | null { return this.getRuleContext(0, KuduPartitionClauseContext); } - public KW_COMMENT(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_COMMENT, 0); - } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public commentClause(): CommentClauseContext | null { + return this.getRuleContext(0, CommentClauseContext); } public KW_TBLPROPERTIES(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_TBLPROPERTIES, 0); @@ -14750,11 +14792,8 @@ export class CreateViewContext extends antlr.ParserRuleContext { public viewColumns(): ViewColumnsContext | null { return this.getRuleContext(0, ViewColumnsContext); } - public KW_COMMENT(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_COMMENT, 0); - } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public commentClause(): CommentClauseContext | null { + return this.getRuleContext(0, CommentClauseContext); } public KW_TBLPROPERTIES(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_TBLPROPERTIES, 0); @@ -14786,7 +14825,6 @@ export class CreateViewContext extends antlr.ParserRuleContext { export class CreateSchemaContext extends antlr.ParserRuleContext { - public _comment?: StringLiteralContext; public _location?: StringLiteralContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -14806,20 +14844,14 @@ export class CreateSchemaContext extends antlr.ParserRuleContext { public ifNotExists(): IfNotExistsContext | null { return this.getRuleContext(0, IfNotExistsContext); } - public KW_COMMENT(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_COMMENT, 0); + public commentClause(): CommentClauseContext | null { + return this.getRuleContext(0, CommentClauseContext); } public KW_LOCATION(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_LOCATION, 0); } - public stringLiteral(): StringLiteralContext[]; - public stringLiteral(i: number): StringLiteralContext | null; - public stringLiteral(i?: number): StringLiteralContext[] | StringLiteralContext | null { - if (i === undefined) { - return this.getRuleContexts(StringLiteralContext); - } - - return this.getRuleContext(i, StringLiteralContext); + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); } public override get ruleIndex(): number { return ImpalaSqlParser.RULE_createSchema; @@ -14882,6 +14914,7 @@ export class CreateRoleContext extends antlr.ParserRuleContext { export class CreateAggregateFunctionContext extends antlr.ParserRuleContext { + public _returnType?: TypeContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -14897,15 +14930,6 @@ export class CreateAggregateFunctionContext extends antlr.ParserRuleContext { public KW_RETURNS(): antlr.TerminalNode { return this.getToken(ImpalaSqlParser.KW_RETURNS, 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 KW_LOCATION(): antlr.TerminalNode { return this.getToken(ImpalaSqlParser.KW_LOCATION, 0)!; } @@ -14933,6 +14957,15 @@ export class CreateAggregateFunctionContext extends antlr.ParserRuleContext { public KW_MERGE_FN(): antlr.TerminalNode { return this.getToken(ImpalaSqlParser.KW_MERGE_FN, 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 KW_AGGREGATE(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_AGGREGATE, 0); } @@ -14996,6 +15029,7 @@ export class CreateAggregateFunctionContext extends antlr.ParserRuleContext { export class CreateFunctionContext extends antlr.ParserRuleContext { + public _returnType?: TypeContext; public _symbol_?: StringLiteralContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -19157,7 +19191,6 @@ export class TableOrViewPathContext extends antlr.ParserRuleContext { export class CreateCommonItemContext extends antlr.ParserRuleContext { - public _comment?: StringLiteralContext; public _serdProp?: PropertiesContext; public _location?: StringLiteralContext; public _cacheName?: QualifiedNameContext; @@ -19174,8 +19207,8 @@ export class CreateCommonItemContext extends antlr.ParserRuleContext { public columnAliases(): ColumnAliasesContext | null { return this.getRuleContext(0, ColumnAliasesContext); } - public KW_COMMENT(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_COMMENT, 0); + public commentClause(): CommentClauseContext | null { + return this.getRuleContext(0, CommentClauseContext); } public KW_ROW(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_ROW, 0); @@ -19222,15 +19255,6 @@ export class CreateCommonItemContext extends antlr.ParserRuleContext { public KW_TBLPROPERTIES(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_TBLPROPERTIES, 0); } - public stringLiteral(): StringLiteralContext[]; - public stringLiteral(i: number): StringLiteralContext | null; - public stringLiteral(i?: number): StringLiteralContext[] | StringLiteralContext | null { - if (i === undefined) { - return this.getRuleContexts(StringLiteralContext); - } - - return this.getRuleContext(i, StringLiteralContext); - } public properties(): PropertiesContext[]; public properties(i: number): PropertiesContext | null; public properties(i?: number): PropertiesContext[] | PropertiesContext | null { @@ -19240,6 +19264,9 @@ export class CreateCommonItemContext extends antlr.ParserRuleContext { return this.getRuleContext(i, PropertiesContext); } + public stringLiteral(): StringLiteralContext | null { + return this.getRuleContext(0, StringLiteralContext); + } public qualifiedName(): QualifiedNameContext | null { return this.getRuleContext(0, QualifiedNameContext); } @@ -19363,35 +19390,17 @@ export class ViewColumnsContext extends antlr.ParserRuleContext { public LPAREN(): antlr.TerminalNode { return this.getToken(ImpalaSqlParser.LPAREN, 0)!; } - public columnNamePathCreate(): ColumnNamePathCreateContext[]; - public columnNamePathCreate(i: number): ColumnNamePathCreateContext | null; - public columnNamePathCreate(i?: number): ColumnNamePathCreateContext[] | ColumnNamePathCreateContext | null { - if (i === undefined) { - return this.getRuleContexts(ColumnNamePathCreateContext); - } - - return this.getRuleContext(i, ColumnNamePathCreateContext); - } public RPAREN(): antlr.TerminalNode { return this.getToken(ImpalaSqlParser.RPAREN, 0)!; } - public KW_COMMENT(): antlr.TerminalNode[]; - public KW_COMMENT(i: number): antlr.TerminalNode | null; - public KW_COMMENT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { - if (i === undefined) { - return this.getTokens(ImpalaSqlParser.KW_COMMENT); - } else { - return this.getToken(ImpalaSqlParser.KW_COMMENT, i); - } - } - public stringLiteral(): StringLiteralContext[]; - public stringLiteral(i: number): StringLiteralContext | null; - public stringLiteral(i?: number): StringLiteralContext[] | StringLiteralContext | null { + public viewColumnItem(): ViewColumnItemContext[]; + public viewColumnItem(i: number): ViewColumnItemContext | null; + public viewColumnItem(i?: number): ViewColumnItemContext[] | ViewColumnItemContext | null { if (i === undefined) { - return this.getRuleContexts(StringLiteralContext); + return this.getRuleContexts(ViewColumnItemContext); } - return this.getRuleContext(i, StringLiteralContext); + return this.getRuleContext(i, ViewColumnItemContext); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -19425,6 +19434,39 @@ export class ViewColumnsContext extends antlr.ParserRuleContext { } +export class ViewColumnItemContext extends antlr.ParserRuleContext { + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public columnNamePathCreate(): ColumnNamePathCreateContext { + return this.getRuleContext(0, ColumnNamePathCreateContext)!; + } + public commentClause(): CommentClauseContext | null { + return this.getRuleContext(0, CommentClauseContext); + } + public override get ruleIndex(): number { + return ImpalaSqlParser.RULE_viewColumnItem; + } + public override enterRule(listener: ImpalaSqlParserListener): void { + if(listener.enterViewColumnItem) { + listener.enterViewColumnItem(this); + } + } + public override exitRule(listener: ImpalaSqlParserListener): void { + if(listener.exitViewColumnItem) { + listener.exitViewColumnItem(this); + } + } + public override accept(visitor: ImpalaSqlParserVisitor): Result | null { + if (visitor.visitViewColumnItem) { + return visitor.visitViewColumnItem(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class QueryStatementContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -19666,6 +19708,7 @@ export class ColumnSpecContext extends antlr.ParserRuleContext { export class ColumnDefinitionContext extends antlr.ParserRuleContext { + public _colType?: TypeContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -19675,11 +19718,8 @@ export class ColumnDefinitionContext extends antlr.ParserRuleContext { public type(): TypeContext { return this.getRuleContext(0, TypeContext)!; } - public KW_COMMENT(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_COMMENT, 0); - } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public commentClause(): CommentClauseContext | null { + return this.getRuleContext(0, CommentClauseContext); } public override get ruleIndex(): number { return ImpalaSqlParser.RULE_columnDefinition; @@ -19735,6 +19775,7 @@ export class KuduTableElementContext extends antlr.ParserRuleContext { export class KuduColumnDefinitionContext extends antlr.ParserRuleContext { + public _colType?: TypeContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -19753,11 +19794,8 @@ export class KuduColumnDefinitionContext extends antlr.ParserRuleContext { return this.getRuleContext(i, KuduAttributesContext); } - public KW_COMMENT(): antlr.TerminalNode | null { - return this.getToken(ImpalaSqlParser.KW_COMMENT, 0); - } - public stringLiteral(): StringLiteralContext | null { - return this.getRuleContext(0, StringLiteralContext); + public commentClause(): CommentClauseContext | null { + return this.getRuleContext(0, CommentClauseContext); } public KW_PRIMARY(): antlr.TerminalNode | null { return this.getToken(ImpalaSqlParser.KW_PRIMARY, 0); @@ -19788,6 +19826,40 @@ export class KuduColumnDefinitionContext extends antlr.ParserRuleContext { } +export class CommentClauseContext extends antlr.ParserRuleContext { + public _comment?: StringLiteralContext; + public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { + super(parent, invokingState); + } + public KW_COMMENT(): antlr.TerminalNode { + return this.getToken(ImpalaSqlParser.KW_COMMENT, 0)!; + } + public stringLiteral(): StringLiteralContext { + return this.getRuleContext(0, StringLiteralContext)!; + } + public override get ruleIndex(): number { + return ImpalaSqlParser.RULE_commentClause; + } + public override enterRule(listener: ImpalaSqlParserListener): void { + if(listener.enterCommentClause) { + listener.enterCommentClause(this); + } + } + public override exitRule(listener: ImpalaSqlParserListener): void { + if(listener.exitCommentClause) { + listener.exitCommentClause(this); + } + } + public override accept(visitor: ImpalaSqlParserVisitor): Result | null { + if (visitor.visitCommentClause) { + return visitor.visitCommentClause(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class ColumnSpecWithKuduContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -21704,6 +21776,7 @@ export class SampleTypeContext extends antlr.ParserRuleContext { export class AliasedRelationContext extends antlr.ParserRuleContext { + public _alias?: IdentifierContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } diff --git a/src/lib/impala/ImpalaSqlParserListener.ts b/src/lib/impala/ImpalaSqlParserListener.ts index 1856fd2c5..bb825fcfc 100644 --- a/src/lib/impala/ImpalaSqlParserListener.ts +++ b/src/lib/impala/ImpalaSqlParserListener.ts @@ -110,6 +110,7 @@ import { CreateCommonItemContext } from "./ImpalaSqlParser.js"; import { AssignmentListContext } from "./ImpalaSqlParser.js"; import { AssignmentItemContext } from "./ImpalaSqlParser.js"; import { ViewColumnsContext } from "./ImpalaSqlParser.js"; +import { ViewColumnItemContext } from "./ImpalaSqlParser.js"; import { QueryStatementContext } from "./ImpalaSqlParser.js"; import { WithContext } from "./ImpalaSqlParser.js"; import { ConstraintSpecificationContext } from "./ImpalaSqlParser.js"; @@ -118,6 +119,7 @@ import { ColumnSpecContext } from "./ImpalaSqlParser.js"; import { ColumnDefinitionContext } from "./ImpalaSqlParser.js"; import { KuduTableElementContext } from "./ImpalaSqlParser.js"; import { KuduColumnDefinitionContext } from "./ImpalaSqlParser.js"; +import { CommentClauseContext } from "./ImpalaSqlParser.js"; import { ColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { CreateColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { KuduAttributesContext } from "./ImpalaSqlParser.js"; @@ -1276,6 +1278,16 @@ export class ImpalaSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitViewColumns?: (ctx: ViewColumnsContext) => void; + /** + * Enter a parse tree produced by `ImpalaSqlParser.viewColumnItem`. + * @param ctx the parse tree + */ + enterViewColumnItem?: (ctx: ViewColumnItemContext) => void; + /** + * Exit a parse tree produced by `ImpalaSqlParser.viewColumnItem`. + * @param ctx the parse tree + */ + exitViewColumnItem?: (ctx: ViewColumnItemContext) => void; /** * Enter a parse tree produced by `ImpalaSqlParser.queryStatement`. * @param ctx the parse tree @@ -1356,6 +1368,16 @@ export class ImpalaSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitKuduColumnDefinition?: (ctx: KuduColumnDefinitionContext) => void; + /** + * Enter a parse tree produced by `ImpalaSqlParser.commentClause`. + * @param ctx the parse tree + */ + enterCommentClause?: (ctx: CommentClauseContext) => void; + /** + * Exit a parse tree produced by `ImpalaSqlParser.commentClause`. + * @param ctx the parse tree + */ + exitCommentClause?: (ctx: CommentClauseContext) => void; /** * Enter a parse tree produced by `ImpalaSqlParser.columnSpecWithKudu`. * @param ctx the parse tree diff --git a/src/lib/impala/ImpalaSqlParserVisitor.ts b/src/lib/impala/ImpalaSqlParserVisitor.ts index bf441a957..b97a37641 100644 --- a/src/lib/impala/ImpalaSqlParserVisitor.ts +++ b/src/lib/impala/ImpalaSqlParserVisitor.ts @@ -110,6 +110,7 @@ import { CreateCommonItemContext } from "./ImpalaSqlParser.js"; import { AssignmentListContext } from "./ImpalaSqlParser.js"; import { AssignmentItemContext } from "./ImpalaSqlParser.js"; import { ViewColumnsContext } from "./ImpalaSqlParser.js"; +import { ViewColumnItemContext } from "./ImpalaSqlParser.js"; import { QueryStatementContext } from "./ImpalaSqlParser.js"; import { WithContext } from "./ImpalaSqlParser.js"; import { ConstraintSpecificationContext } from "./ImpalaSqlParser.js"; @@ -118,6 +119,7 @@ import { ColumnSpecContext } from "./ImpalaSqlParser.js"; import { ColumnDefinitionContext } from "./ImpalaSqlParser.js"; import { KuduTableElementContext } from "./ImpalaSqlParser.js"; import { KuduColumnDefinitionContext } from "./ImpalaSqlParser.js"; +import { CommentClauseContext } from "./ImpalaSqlParser.js"; import { ColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { CreateColumnSpecWithKuduContext } from "./ImpalaSqlParser.js"; import { KuduAttributesContext } from "./ImpalaSqlParser.js"; @@ -871,6 +873,12 @@ export class ImpalaSqlParserVisitor extends AbstractParseTreeVisitor Result; + /** + * Visit a parse tree produced by `ImpalaSqlParser.viewColumnItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitViewColumnItem?: (ctx: ViewColumnItemContext) => Result; /** * Visit a parse tree produced by `ImpalaSqlParser.queryStatement`. * @param ctx the parse tree @@ -919,6 +927,12 @@ export class ImpalaSqlParserVisitor extends AbstractParseTreeVisitor Result; + /** + * Visit a parse tree produced by `ImpalaSqlParser.commentClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentClause?: (ctx: CommentClauseContext) => Result; /** * Visit a parse tree produced by `ImpalaSqlParser.columnSpecWithKudu`. * @param ctx the parse tree diff --git a/src/lib/mysql/MySqlParser.ts b/src/lib/mysql/MySqlParser.ts index 91a3913e3..e298265c3 100644 --- a/src/lib/mysql/MySqlParser.ts +++ b/src/lib/mysql/MySqlParser.ts @@ -6703,7 +6703,7 @@ export class MySqlParser extends SQLParserBase { this.state = 1697; this.match(MySqlParser.KW_COMMENT); this.state = 1698; - this.match(MySqlParser.STRING_LITERAL); + (localContext as RoutineCommentContext)._comment = this.match(MySqlParser.STRING_LITERAL); } break; case MySqlParser.KW_LANGUAGE: @@ -7368,7 +7368,7 @@ export class MySqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 1); { this.state = 1851; - this.dataType(); + localContext._colType = this.dataType(); this.state = 1855; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 172, this.context); @@ -7518,7 +7518,7 @@ export class MySqlParser extends SQLParserBase { this.state = 1877; this.match(MySqlParser.KW_COMMENT); this.state = 1878; - this.match(MySqlParser.STRING_LITERAL); + (localContext as CommentColumnConstraintContext)._comment = this.match(MySqlParser.STRING_LITERAL); } break; case MySqlParser.KW_COLUMN_FORMAT: @@ -8149,7 +8149,7 @@ export class MySqlParser extends SQLParserBase { } this.state = 1998; - this.match(MySqlParser.STRING_LITERAL); + (localContext as TableOptionCommentContext)._comment = this.match(MySqlParser.STRING_LITERAL); } break; case 10: @@ -55075,6 +55075,7 @@ export class RoutineLanguageContext extends RoutineOptionContext { } } export class RoutineCommentContext extends RoutineOptionContext { + public _comment?: Token | null; public constructor(ctx: RoutineOptionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -55463,6 +55464,7 @@ export class ConstraintSymbolContext extends antlr.ParserRuleContext { export class ColumnDefinitionContext extends antlr.ParserRuleContext { + public _colType?: DataTypeContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -55610,6 +55612,7 @@ export class AutoIncrementColumnConstraintContext extends ColumnConstraintContex } } export class CommentColumnConstraintContext extends ColumnConstraintContext { + public _comment?: Token | null; public constructor(ctx: ColumnConstraintContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -57075,6 +57078,7 @@ export class TableOptionSecondaryEngineAttributeContext extends TableOptionConte } } export class TableOptionCommentContext extends TableOptionContext { + public _comment?: Token | null; public constructor(ctx: TableOptionContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); diff --git a/src/lib/postgresql/PostgreSqlParser.interp b/src/lib/postgresql/PostgreSqlParser.interp index 05e46e30f..eebffe450 100644 --- a/src/lib/postgresql/PostgreSqlParser.interp +++ b/src/lib/postgresql/PostgreSqlParser.interp @@ -1654,4 +1654,4 @@ sql_expression atn: -[4, 1, 590, 8488, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, 409, 2, 410, 7, 410, 2, 411, 7, 411, 2, 412, 7, 412, 2, 413, 7, 413, 2, 414, 7, 414, 2, 415, 7, 415, 2, 416, 7, 416, 2, 417, 7, 417, 2, 418, 7, 418, 2, 419, 7, 419, 2, 420, 7, 420, 2, 421, 7, 421, 2, 422, 7, 422, 2, 423, 7, 423, 2, 424, 7, 424, 2, 425, 7, 425, 2, 426, 7, 426, 2, 427, 7, 427, 2, 428, 7, 428, 2, 429, 7, 429, 2, 430, 7, 430, 2, 431, 7, 431, 2, 432, 7, 432, 2, 433, 7, 433, 2, 434, 7, 434, 2, 435, 7, 435, 2, 436, 7, 436, 2, 437, 7, 437, 2, 438, 7, 438, 2, 439, 7, 439, 2, 440, 7, 440, 2, 441, 7, 441, 2, 442, 7, 442, 2, 443, 7, 443, 2, 444, 7, 444, 2, 445, 7, 445, 2, 446, 7, 446, 2, 447, 7, 447, 2, 448, 7, 448, 2, 449, 7, 449, 2, 450, 7, 450, 2, 451, 7, 451, 2, 452, 7, 452, 2, 453, 7, 453, 2, 454, 7, 454, 2, 455, 7, 455, 2, 456, 7, 456, 2, 457, 7, 457, 2, 458, 7, 458, 2, 459, 7, 459, 2, 460, 7, 460, 2, 461, 7, 461, 2, 462, 7, 462, 2, 463, 7, 463, 2, 464, 7, 464, 2, 465, 7, 465, 1, 0, 5, 0, 934, 8, 0, 10, 0, 12, 0, 937, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 943, 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, 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, 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, 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, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1063, 8, 2, 3, 2, 1065, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 1074, 8, 4, 1, 4, 5, 4, 1077, 8, 4, 10, 4, 12, 4, 1080, 9, 4, 1, 5, 1, 5, 1, 5, 3, 5, 1085, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 1120, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1130, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1136, 8, 7, 1, 7, 5, 7, 1139, 8, 7, 10, 7, 12, 7, 1142, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 1148, 8, 8, 1, 8, 5, 8, 1151, 8, 8, 10, 8, 12, 8, 1154, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 1160, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 1171, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 1177, 8, 11, 10, 11, 12, 11, 1180, 9, 11, 1, 11, 3, 11, 1183, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 1195, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 1201, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1207, 8, 12, 1, 12, 1, 12, 3, 12, 1211, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1216, 8, 12, 1, 12, 1, 12, 3, 12, 1220, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1233, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1243, 8, 12, 3, 12, 1245, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 1251, 8, 13, 1, 13, 5, 13, 1254, 8, 13, 10, 13, 12, 13, 1257, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 3, 15, 1269, 8, 15, 1, 15, 3, 15, 1272, 8, 15, 1, 15, 1, 15, 1, 15, 3, 15, 1277, 8, 15, 1, 15, 5, 15, 1280, 8, 15, 10, 15, 12, 15, 1283, 9, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1293, 8, 17, 1, 18, 1, 18, 3, 18, 1297, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 1309, 8, 19, 1, 20, 1, 20, 3, 20, 1313, 8, 20, 1, 20, 3, 20, 1316, 8, 20, 1, 20, 1, 20, 3, 20, 1320, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1332, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1350, 8, 21, 1, 22, 1, 22, 1, 22, 5, 22, 1355, 8, 22, 10, 22, 12, 22, 1358, 9, 22, 1, 23, 1, 23, 1, 23, 5, 23, 1363, 8, 23, 10, 23, 12, 23, 1366, 9, 23, 1, 24, 1, 24, 3, 24, 1370, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1377, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 1385, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 1391, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 1399, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 1407, 8, 28, 1, 29, 1, 29, 3, 29, 1411, 8, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 1425, 8, 31, 1, 32, 1, 32, 1, 32, 3, 32, 1430, 8, 32, 1, 33, 1, 33, 1, 33, 3, 33, 1435, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1447, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 1453, 8, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 3, 38, 1465, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1470, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1480, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1486, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1491, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1499, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1504, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1511, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1516, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1521, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1531, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1536, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1541, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1548, 8, 38, 1, 38, 1, 38, 3, 38, 1552, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1566, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1572, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1578, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1583, 8, 38, 1, 39, 1, 39, 1, 39, 5, 39, 1588, 8, 39, 10, 39, 12, 39, 1591, 9, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 1602, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1608, 8, 41, 10, 41, 12, 41, 1611, 9, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 1618, 8, 42, 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, 3, 44, 1634, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 3, 46, 1643, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1650, 8, 46, 10, 46, 12, 46, 1653, 9, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1661, 8, 46, 1, 46, 1, 46, 3, 46, 1665, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1677, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1685, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1695, 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, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1715, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1720, 8, 46, 1, 46, 3, 46, 1723, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1730, 8, 46, 1, 46, 3, 46, 1733, 8, 46, 1, 46, 1, 46, 3, 46, 1737, 8, 46, 1, 46, 1, 46, 3, 46, 1741, 8, 46, 1, 46, 3, 46, 1744, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1749, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1754, 8, 46, 1, 46, 1, 46, 3, 46, 1758, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1767, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1773, 8, 46, 1, 46, 1, 46, 3, 46, 1777, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1786, 8, 46, 1, 46, 3, 46, 1789, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1795, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1804, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 4, 46, 1814, 8, 46, 11, 46, 12, 46, 1815, 1, 46, 1, 46, 3, 46, 1820, 8, 46, 1, 46, 1, 46, 3, 46, 1824, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1829, 8, 46, 1, 46, 3, 46, 1832, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1838, 8, 46, 4, 46, 1840, 8, 46, 11, 46, 12, 46, 1841, 1, 46, 1, 46, 3, 46, 1846, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1852, 8, 46, 1, 46, 1, 46, 3, 46, 1856, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1861, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1866, 8, 46, 1, 46, 1, 46, 3, 46, 1870, 8, 46, 1, 46, 3, 46, 1873, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1880, 8, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1891, 8, 50, 10, 50, 12, 50, 1894, 9, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1906, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 1930, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 1938, 8, 54, 10, 54, 12, 54, 1941, 9, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1947, 8, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1952, 8, 55, 1, 55, 1, 55, 3, 55, 1956, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1963, 8, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1968, 8, 55, 1, 55, 3, 55, 1971, 8, 55, 3, 55, 1973, 8, 55, 1, 56, 1, 56, 1, 56, 3, 56, 1978, 8, 56, 1, 57, 1, 57, 3, 57, 1982, 8, 57, 1, 57, 1, 57, 3, 57, 1986, 8, 57, 1, 57, 1, 57, 3, 57, 1990, 8, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1995, 8, 57, 1, 57, 3, 57, 1998, 8, 57, 1, 57, 1, 57, 3, 57, 2002, 8, 57, 1, 57, 3, 57, 2005, 8, 57, 1, 57, 1, 57, 3, 57, 2009, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 2017, 8, 57, 1, 57, 1, 57, 1, 57, 3, 57, 2022, 8, 57, 1, 57, 3, 57, 2025, 8, 57, 1, 57, 1, 57, 3, 57, 2029, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2035, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2044, 8, 58, 1, 58, 1, 58, 3, 58, 2048, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2054, 8, 58, 10, 58, 12, 58, 2057, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2063, 8, 58, 10, 58, 12, 58, 2066, 9, 58, 1, 58, 1, 58, 3, 58, 2070, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 2080, 8, 59, 10, 59, 12, 59, 2083, 9, 59, 1, 59, 1, 59, 3, 59, 2087, 8, 59, 1, 60, 1, 60, 3, 60, 2091, 8, 60, 1, 60, 1, 60, 3, 60, 2095, 8, 60, 1, 60, 1, 60, 1, 60, 3, 60, 2100, 8, 60, 1, 60, 1, 60, 3, 60, 2104, 8, 60, 1, 60, 3, 60, 2107, 8, 60, 1, 60, 3, 60, 2110, 8, 60, 1, 60, 3, 60, 2113, 8, 60, 1, 60, 3, 60, 2116, 8, 60, 1, 60, 3, 60, 2119, 8, 60, 1, 60, 1, 60, 1, 60, 3, 60, 2124, 8, 60, 1, 60, 3, 60, 2127, 8, 60, 1, 60, 3, 60, 2130, 8, 60, 1, 60, 3, 60, 2133, 8, 60, 1, 60, 3, 60, 2136, 8, 60, 1, 60, 3, 60, 2139, 8, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 2145, 8, 60, 1, 60, 1, 60, 3, 60, 2149, 8, 60, 1, 60, 3, 60, 2152, 8, 60, 1, 60, 3, 60, 2155, 8, 60, 1, 60, 3, 60, 2158, 8, 60, 1, 60, 3, 60, 2161, 8, 60, 3, 60, 2163, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 2170, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 2176, 8, 62, 10, 62, 12, 62, 2179, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 5, 63, 2186, 8, 63, 10, 63, 12, 63, 2189, 9, 63, 1, 64, 1, 64, 3, 64, 2193, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 5, 64, 2201, 8, 64, 10, 64, 12, 64, 2204, 9, 64, 3, 64, 2206, 8, 64, 1, 65, 1, 65, 1, 65, 3, 65, 2211, 8, 65, 1, 65, 5, 65, 2214, 8, 65, 10, 65, 12, 65, 2217, 9, 65, 1, 65, 1, 65, 3, 65, 2221, 8, 65, 1, 65, 3, 65, 2224, 8, 65, 1, 66, 1, 66, 1, 66, 3, 66, 2229, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 2238, 8, 66, 3, 66, 2240, 8, 66, 1, 66, 1, 66, 3, 66, 2244, 8, 66, 1, 66, 3, 66, 2247, 8, 66, 1, 66, 1, 66, 3, 66, 2251, 8, 66, 1, 66, 5, 66, 2254, 8, 66, 10, 66, 12, 66, 2257, 9, 66, 1, 67, 1, 67, 3, 67, 2261, 8, 67, 1, 67, 1, 67, 3, 67, 2265, 8, 67, 1, 67, 3, 67, 2268, 8, 67, 1, 67, 1, 67, 3, 67, 2272, 8, 67, 1, 68, 3, 68, 2275, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2280, 8, 68, 1, 68, 3, 68, 2283, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2288, 8, 68, 1, 68, 3, 68, 2291, 8, 68, 1, 68, 1, 68, 3, 68, 2295, 8, 68, 1, 68, 3, 68, 2298, 8, 68, 1, 68, 3, 68, 2301, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2306, 8, 68, 1, 68, 3, 68, 2309, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2317, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 4, 68, 2327, 8, 68, 11, 68, 12, 68, 2328, 1, 68, 1, 68, 3, 68, 2333, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2340, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2345, 8, 68, 1, 68, 3, 68, 2348, 8, 68, 1, 68, 3, 68, 2351, 8, 68, 1, 68, 3, 68, 2354, 8, 68, 1, 69, 1, 69, 1, 69, 3, 69, 2359, 8, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2368, 8, 71, 10, 71, 12, 71, 2371, 9, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2376, 8, 71, 1, 71, 1, 71, 3, 71, 2380, 8, 71, 1, 71, 3, 71, 2383, 8, 71, 1, 71, 3, 71, 2386, 8, 71, 1, 71, 5, 71, 2389, 8, 71, 10, 71, 12, 71, 2392, 9, 71, 1, 71, 1, 71, 5, 71, 2396, 8, 71, 10, 71, 12, 71, 2399, 9, 71, 3, 71, 2401, 8, 71, 1, 71, 1, 71, 3, 71, 2405, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2411, 8, 71, 10, 71, 12, 71, 2414, 9, 71, 1, 71, 1, 71, 3, 71, 2418, 8, 71, 1, 71, 3, 71, 2421, 8, 71, 1, 71, 3, 71, 2424, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2431, 8, 71, 1, 71, 5, 71, 2434, 8, 71, 10, 71, 12, 71, 2437, 9, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2445, 8, 71, 1, 71, 3, 71, 2448, 8, 71, 1, 71, 3, 71, 2451, 8, 71, 1, 71, 5, 71, 2454, 8, 71, 10, 71, 12, 71, 2457, 9, 71, 3, 71, 2459, 8, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 5, 73, 2469, 8, 73, 10, 73, 12, 73, 2472, 9, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 5, 74, 2479, 8, 74, 10, 74, 12, 74, 2482, 9, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2498, 8, 77, 1, 78, 1, 78, 3, 78, 2502, 8, 78, 1, 78, 1, 78, 3, 78, 2506, 8, 78, 3, 78, 2508, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 2525, 8, 81, 3, 81, 2527, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 2541, 8, 83, 10, 83, 12, 83, 2544, 9, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 2554, 8, 84, 1, 84, 3, 84, 2557, 8, 84, 1, 84, 3, 84, 2560, 8, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 2569, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 2578, 8, 87, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 3, 91, 2594, 8, 91, 1, 91, 3, 91, 2597, 8, 91, 1, 91, 3, 91, 2600, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 5, 91, 2606, 8, 91, 10, 91, 12, 91, 2609, 9, 91, 1, 91, 3, 91, 2612, 8, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 2619, 8, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 3, 93, 2628, 8, 93, 1, 93, 1, 93, 3, 93, 2632, 8, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 2638, 8, 93, 1, 94, 1, 94, 3, 94, 2642, 8, 94, 1, 94, 3, 94, 2645, 8, 94, 1, 94, 3, 94, 2648, 8, 94, 1, 94, 3, 94, 2651, 8, 94, 1, 94, 3, 94, 2654, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 2660, 8, 95, 1, 96, 1, 96, 3, 96, 2664, 8, 96, 1, 96, 1, 96, 1, 96, 3, 96, 2669, 8, 96, 1, 96, 1, 96, 3, 96, 2673, 8, 96, 1, 96, 3, 96, 2676, 8, 96, 1, 96, 3, 96, 2679, 8, 96, 1, 96, 3, 96, 2682, 8, 96, 1, 96, 1, 96, 1, 96, 3, 96, 2687, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2693, 8, 97, 1, 97, 1, 97, 3, 97, 2697, 8, 97, 1, 98, 1, 98, 3, 98, 2701, 8, 98, 1, 98, 1, 98, 3, 98, 2705, 8, 98, 1, 98, 1, 98, 4, 98, 2709, 8, 98, 11, 98, 12, 98, 2710, 3, 98, 2713, 8, 98, 1, 99, 1, 99, 1, 99, 3, 99, 2718, 8, 99, 1, 99, 1, 99, 4, 99, 2722, 8, 99, 11, 99, 12, 99, 2723, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 2730, 8, 100, 1, 100, 1, 100, 3, 100, 2734, 8, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 2749, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 2754, 8, 100, 1, 100, 3, 100, 2757, 8, 100, 3, 100, 2759, 8, 100, 1, 101, 3, 101, 2762, 8, 101, 1, 101, 1, 101, 3, 101, 2766, 8, 101, 1, 102, 1, 102, 3, 102, 2770, 8, 102, 1, 102, 3, 102, 2773, 8, 102, 1, 102, 3, 102, 2776, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2784, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2790, 8, 102, 3, 102, 2792, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 2798, 8, 103, 1, 103, 1, 103, 1, 103, 3, 103, 2803, 8, 103, 1, 104, 1, 104, 1, 104, 3, 104, 2808, 8, 104, 1, 104, 1, 104, 3, 104, 2812, 8, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 2819, 8, 104, 10, 104, 12, 104, 2822, 9, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 5, 105, 2830, 8, 105, 10, 105, 12, 105, 2833, 9, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 2871, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 4, 107, 2879, 8, 107, 11, 107, 12, 107, 2880, 3, 107, 2883, 8, 107, 1, 107, 3, 107, 2886, 8, 107, 1, 108, 1, 108, 3, 108, 2890, 8, 108, 1, 108, 1, 108, 3, 108, 2894, 8, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 4, 109, 2902, 8, 109, 11, 109, 12, 109, 2903, 3, 109, 2906, 8, 109, 1, 109, 1, 109, 4, 109, 2910, 8, 109, 11, 109, 12, 109, 2911, 3, 109, 2914, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 2921, 8, 110, 10, 110, 12, 110, 2924, 9, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 2933, 8, 111, 10, 111, 12, 111, 2936, 9, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 2949, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 2954, 8, 114, 1, 114, 3, 114, 2957, 8, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 2964, 8, 114, 1, 115, 1, 115, 1, 115, 3, 115, 2969, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 2977, 8, 116, 3, 116, 2979, 8, 116, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 2985, 8, 117, 1, 117, 1, 117, 1, 117, 3, 117, 2990, 8, 117, 1, 117, 1, 117, 3, 117, 2994, 8, 117, 1, 117, 1, 117, 1, 117, 3, 117, 2999, 8, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 3005, 8, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 3012, 8, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 3018, 8, 117, 3, 117, 3020, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3029, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3035, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3043, 8, 118, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 3049, 8, 119, 1, 119, 1, 119, 1, 119, 3, 119, 3054, 8, 119, 1, 119, 1, 119, 1, 119, 3, 119, 3059, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 3067, 8, 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, 3, 121, 3082, 8, 121, 3, 121, 3084, 8, 121, 1, 121, 1, 121, 3, 121, 3088, 8, 121, 1, 121, 1, 121, 3, 121, 3092, 8, 121, 1, 121, 3, 121, 3095, 8, 121, 1, 121, 3, 121, 3098, 8, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 3107, 8, 122, 1, 122, 3, 122, 3110, 8, 122, 1, 122, 3, 122, 3113, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 3119, 8, 123, 1, 123, 1, 123, 5, 123, 3123, 8, 123, 10, 123, 12, 123, 3126, 9, 123, 1, 123, 3, 123, 3129, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 3141, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 3147, 8, 123, 1, 124, 3, 124, 3150, 8, 124, 1, 124, 1, 124, 1, 124, 3, 124, 3155, 8, 124, 1, 124, 1, 124, 3, 124, 3159, 8, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 3166, 8, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 3176, 8, 124, 3, 124, 3178, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 3, 128, 3202, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3214, 8, 128, 1, 128, 4, 128, 3217, 8, 128, 11, 128, 12, 128, 3218, 3, 128, 3221, 8, 128, 1, 128, 1, 128, 3, 128, 3225, 8, 128, 1, 128, 3, 128, 3228, 8, 128, 1, 128, 3, 128, 3231, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3241, 8, 128, 1, 128, 3, 128, 3244, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3254, 8, 128, 1, 128, 5, 128, 3257, 8, 128, 10, 128, 12, 128, 3260, 9, 128, 1, 128, 1, 128, 3, 128, 3264, 8, 128, 1, 128, 3, 128, 3267, 8, 128, 1, 128, 3, 128, 3270, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3278, 8, 128, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 3284, 8, 129, 1, 130, 1, 130, 1, 130, 5, 130, 3289, 8, 130, 10, 130, 12, 130, 3292, 9, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 3299, 8, 131, 1, 131, 3, 131, 3302, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 3313, 8, 133, 1, 134, 1, 134, 3, 134, 3317, 8, 134, 1, 134, 1, 134, 5, 134, 3321, 8, 134, 10, 134, 12, 134, 3324, 9, 134, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 3330, 8, 135, 1, 136, 3, 136, 3333, 8, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 3, 136, 3342, 8, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 5, 137, 3354, 8, 137, 10, 137, 12, 137, 3357, 9, 137, 3, 137, 3359, 8, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 5, 138, 3371, 8, 138, 10, 138, 12, 138, 3374, 9, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3384, 8, 139, 1, 139, 3, 139, 3387, 8, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 5, 140, 3397, 8, 140, 10, 140, 12, 140, 3400, 9, 140, 1, 141, 1, 141, 3, 141, 3404, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 5, 141, 3415, 8, 141, 10, 141, 12, 141, 3418, 9, 141, 1, 141, 1, 141, 3, 141, 3422, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3435, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 5, 141, 3442, 8, 141, 10, 141, 12, 141, 3445, 9, 141, 3, 141, 3447, 8, 141, 1, 141, 3, 141, 3450, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3457, 8, 141, 1, 141, 3, 141, 3460, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3472, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3478, 8, 141, 3, 141, 3480, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 5, 142, 3486, 8, 142, 10, 142, 12, 142, 3489, 9, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 3, 143, 3496, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 3, 144, 3504, 8, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3516, 8, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3521, 8, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3532, 8, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 3543, 8, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 3551, 8, 148, 1, 148, 1, 148, 1, 148, 1, 148, 5, 148, 3557, 8, 148, 10, 148, 12, 148, 3560, 9, 148, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3566, 8, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3573, 8, 149, 3, 149, 3575, 8, 149, 1, 149, 3, 149, 3578, 8, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3583, 8, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3588, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 5, 151, 3605, 8, 151, 10, 151, 12, 151, 3608, 9, 151, 1, 151, 1, 151, 1, 151, 1, 151, 5, 151, 3614, 8, 151, 10, 151, 12, 151, 3617, 9, 151, 3, 151, 3619, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3646, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3655, 8, 154, 1, 154, 3, 154, 3658, 8, 154, 1, 154, 1, 154, 3, 154, 3662, 8, 154, 1, 154, 1, 154, 3, 154, 3666, 8, 154, 1, 154, 1, 154, 3, 154, 3670, 8, 154, 1, 154, 1, 154, 1, 154, 5, 154, 3675, 8, 154, 10, 154, 12, 154, 3678, 9, 154, 1, 154, 3, 154, 3681, 8, 154, 1, 154, 1, 154, 3, 154, 3685, 8, 154, 1, 154, 1, 154, 3, 154, 3689, 8, 154, 1, 154, 1, 154, 3, 154, 3693, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3698, 8, 154, 1, 154, 1, 154, 3, 154, 3702, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3707, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3713, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3718, 8, 154, 1, 154, 1, 154, 1, 154, 5, 154, 3723, 8, 154, 10, 154, 12, 154, 3726, 9, 154, 1, 154, 3, 154, 3729, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3735, 8, 154, 1, 154, 1, 154, 3, 154, 3739, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3744, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3752, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3758, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3763, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3770, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3775, 8, 154, 1, 154, 1, 154, 3, 154, 3779, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3784, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3790, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3797, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3802, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3809, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3814, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3821, 8, 154, 1, 154, 1, 154, 3, 154, 3825, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 5, 154, 3831, 8, 154, 10, 154, 12, 154, 3834, 9, 154, 1, 154, 3, 154, 3837, 8, 154, 3, 154, 3839, 8, 154, 1, 155, 3, 155, 3842, 8, 155, 1, 155, 1, 155, 1, 155, 3, 155, 3847, 8, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 3857, 8, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 3872, 8, 156, 1, 156, 3, 156, 3875, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 3883, 8, 156, 1, 157, 1, 157, 1, 157, 5, 157, 3888, 8, 157, 10, 157, 12, 157, 3891, 9, 157, 1, 158, 1, 158, 3, 158, 3895, 8, 158, 1, 159, 1, 159, 4, 159, 3899, 8, 159, 11, 159, 12, 159, 3900, 1, 160, 1, 160, 3, 160, 3905, 8, 160, 1, 160, 1, 160, 1, 160, 5, 160, 3910, 8, 160, 10, 160, 12, 160, 3913, 9, 160, 1, 160, 1, 160, 3, 160, 3917, 8, 160, 1, 160, 3, 160, 3920, 8, 160, 1, 161, 3, 161, 3923, 8, 161, 1, 161, 1, 161, 3, 161, 3927, 8, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3936, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3954, 8, 162, 1, 162, 3, 162, 3957, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3989, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3994, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 4000, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 4020, 8, 163, 1, 163, 1, 163, 1, 163, 3, 163, 4025, 8, 163, 1, 164, 1, 164, 1, 164, 1, 165, 3, 165, 4031, 8, 165, 1, 165, 3, 165, 4034, 8, 165, 1, 165, 1, 165, 3, 165, 4038, 8, 165, 1, 165, 1, 165, 3, 165, 4042, 8, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 4048, 8, 165, 1, 165, 3, 165, 4051, 8, 165, 1, 165, 1, 165, 3, 165, 4055, 8, 165, 1, 165, 1, 165, 3, 165, 4059, 8, 165, 1, 165, 1, 165, 1, 165, 3, 165, 4064, 8, 165, 1, 165, 3, 165, 4067, 8, 165, 1, 165, 3, 165, 4070, 8, 165, 1, 165, 3, 165, 4073, 8, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 4086, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 4092, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 4100, 8, 168, 1, 169, 1, 169, 1, 169, 5, 169, 4105, 8, 169, 10, 169, 12, 169, 4108, 9, 169, 1, 169, 1, 169, 3, 169, 4112, 8, 169, 1, 169, 3, 169, 4115, 8, 169, 1, 169, 1, 169, 1, 169, 5, 169, 4120, 8, 169, 10, 169, 12, 169, 4123, 9, 169, 3, 169, 4125, 8, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 4133, 8, 171, 1, 171, 3, 171, 4136, 8, 171, 1, 172, 1, 172, 1, 172, 3, 172, 4141, 8, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 4148, 8, 172, 1, 172, 3, 172, 4151, 8, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 5, 172, 4169, 8, 172, 10, 172, 12, 172, 4172, 9, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 4183, 8, 172, 1, 173, 3, 173, 4186, 8, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 4192, 8, 173, 1, 173, 5, 173, 4195, 8, 173, 10, 173, 12, 173, 4198, 9, 173, 1, 174, 1, 174, 1, 174, 1, 174, 5, 174, 4204, 8, 174, 10, 174, 12, 174, 4207, 9, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 4214, 8, 174, 1, 174, 1, 174, 1, 174, 3, 174, 4219, 8, 174, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 4225, 8, 175, 1, 175, 1, 175, 1, 175, 5, 175, 4230, 8, 175, 10, 175, 12, 175, 4233, 9, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 4240, 8, 175, 1, 175, 3, 175, 4243, 8, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 5, 176, 4254, 8, 176, 10, 176, 12, 176, 4257, 9, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 4270, 8, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 4276, 8, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 4284, 8, 177, 3, 177, 4286, 8, 177, 1, 178, 1, 178, 1, 179, 1, 179, 3, 179, 4292, 8, 179, 1, 179, 1, 179, 3, 179, 4296, 8, 179, 1, 179, 3, 179, 4299, 8, 179, 1, 179, 3, 179, 4302, 8, 179, 1, 179, 1, 179, 1, 179, 3, 179, 4307, 8, 179, 1, 179, 1, 179, 1, 179, 3, 179, 4312, 8, 179, 1, 179, 1, 179, 3, 179, 4316, 8, 179, 1, 179, 3, 179, 4319, 8, 179, 1, 179, 3, 179, 4322, 8, 179, 1, 179, 3, 179, 4325, 8, 179, 1, 179, 3, 179, 4328, 8, 179, 1, 180, 1, 180, 1, 180, 1, 180, 5, 180, 4334, 8, 180, 10, 180, 12, 180, 4337, 9, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 4347, 8, 181, 1, 181, 3, 181, 4350, 8, 181, 1, 181, 3, 181, 4353, 8, 181, 1, 181, 1, 181, 1, 181, 3, 181, 4358, 8, 181, 1, 181, 3, 181, 4361, 8, 181, 1, 181, 1, 181, 3, 181, 4365, 8, 181, 1, 182, 1, 182, 3, 182, 4369, 8, 182, 1, 182, 1, 182, 1, 182, 1, 182, 3, 182, 4375, 8, 182, 1, 182, 1, 182, 1, 182, 1, 182, 5, 182, 4381, 8, 182, 10, 182, 12, 182, 4384, 9, 182, 3, 182, 4386, 8, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 5, 182, 4397, 8, 182, 10, 182, 12, 182, 4400, 9, 182, 1, 182, 1, 182, 3, 182, 4404, 8, 182, 3, 182, 4406, 8, 182, 1, 182, 4, 182, 4409, 8, 182, 11, 182, 12, 182, 4410, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 3, 182, 4418, 8, 182, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 3, 184, 4425, 8, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 5, 185, 4432, 8, 185, 10, 185, 12, 185, 4435, 9, 185, 1, 186, 1, 186, 1, 186, 5, 186, 4440, 8, 186, 10, 186, 12, 186, 4443, 9, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 3, 187, 4450, 8, 187, 1, 188, 1, 188, 1, 188, 5, 188, 4455, 8, 188, 10, 188, 12, 188, 4458, 9, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 4465, 8, 189, 1, 190, 1, 190, 1, 190, 5, 190, 4470, 8, 190, 10, 190, 12, 190, 4473, 9, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 4480, 8, 191, 1, 192, 1, 192, 3, 192, 4484, 8, 192, 1, 192, 1, 192, 3, 192, 4488, 8, 192, 3, 192, 4490, 8, 192, 1, 192, 1, 192, 1, 193, 1, 193, 3, 193, 4496, 8, 193, 1, 193, 1, 193, 1, 193, 3, 193, 4501, 8, 193, 1, 194, 1, 194, 3, 194, 4505, 8, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 4512, 8, 194, 1, 195, 1, 195, 1, 195, 3, 195, 4517, 8, 195, 1, 196, 1, 196, 1, 196, 3, 196, 4522, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 4527, 8, 196, 3, 196, 4529, 8, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 3, 198, 4539, 8, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 4549, 8, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 4565, 8, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 4581, 8, 199, 10, 199, 12, 199, 4584, 9, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 3, 199, 4595, 8, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 3, 199, 4602, 8, 199, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 3, 202, 4617, 8, 202, 1, 202, 4, 202, 4620, 8, 202, 11, 202, 12, 202, 4621, 1, 202, 3, 202, 4625, 8, 202, 1, 203, 1, 203, 1, 203, 3, 203, 4630, 8, 203, 1, 203, 1, 203, 1, 203, 3, 203, 4635, 8, 203, 1, 203, 1, 203, 1, 203, 3, 203, 4640, 8, 203, 1, 203, 3, 203, 4643, 8, 203, 1, 203, 3, 203, 4646, 8, 203, 1, 204, 1, 204, 1, 204, 3, 204, 4651, 8, 204, 1, 204, 1, 204, 1, 204, 5, 204, 4656, 8, 204, 10, 204, 12, 204, 4659, 9, 204, 1, 204, 3, 204, 4662, 8, 204, 1, 205, 1, 205, 1, 205, 3, 205, 4667, 8, 205, 1, 205, 1, 205, 1, 205, 5, 205, 4672, 8, 205, 10, 205, 12, 205, 4675, 9, 205, 1, 205, 3, 205, 4678, 8, 205, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 4684, 8, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 4693, 8, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 5, 207, 4700, 8, 207, 10, 207, 12, 207, 4703, 9, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 4, 209, 4714, 8, 209, 11, 209, 12, 209, 4715, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 4729, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 4735, 8, 210, 1, 210, 1, 210, 3, 210, 4739, 8, 210, 3, 210, 4741, 8, 210, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 3, 212, 4748, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 4761, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 4768, 8, 212, 3, 212, 4770, 8, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 5, 214, 4784, 8, 214, 10, 214, 12, 214, 4787, 9, 214, 1, 214, 3, 214, 4790, 8, 214, 1, 214, 1, 214, 3, 214, 4794, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4799, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4804, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4809, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4814, 8, 214, 1, 214, 3, 214, 4817, 8, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4829, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4882, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4891, 8, 216, 1, 216, 1, 216, 3, 216, 4895, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4904, 8, 216, 1, 216, 1, 216, 3, 216, 4908, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4917, 8, 216, 1, 216, 1, 216, 3, 216, 4921, 8, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4926, 8, 216, 1, 216, 3, 216, 4929, 8, 216, 1, 216, 1, 216, 3, 216, 4933, 8, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4938, 8, 216, 3, 216, 4940, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4949, 8, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4954, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4965, 8, 216, 1, 216, 1, 216, 3, 216, 4969, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4983, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4991, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 5029, 8, 216, 3, 216, 5031, 8, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 3, 217, 5050, 8, 217, 1, 217, 3, 217, 5053, 8, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 5080, 8, 218, 1, 218, 1, 218, 3, 218, 5084, 8, 218, 1, 218, 1, 218, 3, 218, 5088, 8, 218, 1, 218, 1, 218, 3, 218, 5092, 8, 218, 1, 218, 1, 218, 3, 218, 5096, 8, 218, 1, 218, 3, 218, 5099, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 5114, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 5121, 8, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 5, 220, 5133, 8, 220, 10, 220, 12, 220, 5136, 9, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 3, 221, 5148, 8, 221, 1, 222, 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, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5173, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5192, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5207, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5223, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5230, 8, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 3, 224, 5241, 8, 224, 1, 224, 3, 224, 5244, 8, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 5, 225, 5261, 8, 225, 10, 225, 12, 225, 5264, 9, 225, 3, 225, 5266, 8, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 5, 226, 5277, 8, 226, 10, 226, 12, 226, 5280, 9, 226, 1, 226, 3, 226, 5283, 8, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 3, 227, 5303, 8, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 5, 227, 5313, 8, 227, 10, 227, 12, 227, 5316, 9, 227, 1, 227, 3, 227, 5319, 8, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 3, 227, 5341, 8, 227, 1, 228, 1, 228, 3, 228, 5345, 8, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 3, 228, 5355, 8, 228, 1, 228, 1, 228, 3, 228, 5359, 8, 228, 1, 228, 1, 228, 1, 228, 1, 228, 3, 228, 5365, 8, 228, 1, 228, 1, 228, 3, 228, 5369, 8, 228, 5, 228, 5371, 8, 228, 10, 228, 12, 228, 5374, 9, 228, 1, 228, 3, 228, 5377, 8, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 3, 229, 5384, 8, 229, 1, 230, 1, 230, 1, 230, 3, 230, 5389, 8, 230, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 3, 233, 5400, 8, 233, 1, 234, 1, 234, 3, 234, 5404, 8, 234, 1, 234, 3, 234, 5407, 8, 234, 1, 234, 1, 234, 1, 234, 3, 234, 5412, 8, 234, 1, 234, 1, 234, 1, 234, 1, 234, 3, 234, 5418, 8, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 3, 234, 5429, 8, 234, 1, 234, 1, 234, 3, 234, 5433, 8, 234, 1, 234, 3, 234, 5436, 8, 234, 1, 234, 1, 234, 3, 234, 5440, 8, 234, 1, 234, 1, 234, 3, 234, 5444, 8, 234, 1, 234, 3, 234, 5447, 8, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 3, 236, 5457, 8, 236, 1, 236, 3, 236, 5460, 8, 236, 1, 237, 1, 237, 3, 237, 5464, 8, 237, 1, 237, 5, 237, 5467, 8, 237, 10, 237, 12, 237, 5470, 9, 237, 1, 238, 1, 238, 1, 238, 3, 238, 5475, 8, 238, 1, 238, 3, 238, 5478, 8, 238, 1, 238, 1, 238, 1, 238, 3, 238, 5483, 8, 238, 1, 238, 3, 238, 5486, 8, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 3, 238, 5493, 8, 238, 3, 238, 5495, 8, 238, 1, 238, 1, 238, 1, 238, 1, 238, 3, 238, 5501, 8, 238, 1, 238, 1, 238, 3, 238, 5505, 8, 238, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 3, 240, 5514, 8, 240, 1, 240, 4, 240, 5517, 8, 240, 11, 240, 12, 240, 5518, 3, 240, 5521, 8, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 3, 241, 5531, 8, 241, 1, 241, 3, 241, 5534, 8, 241, 1, 241, 1, 241, 1, 241, 3, 241, 5539, 8, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 3, 242, 5547, 8, 242, 1, 242, 3, 242, 5550, 8, 242, 1, 242, 4, 242, 5553, 8, 242, 11, 242, 12, 242, 5554, 3, 242, 5557, 8, 242, 3, 242, 5559, 8, 242, 1, 243, 1, 243, 1, 243, 1, 243, 3, 243, 5565, 8, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 3, 246, 5582, 8, 246, 1, 246, 1, 246, 5, 246, 5586, 8, 246, 10, 246, 12, 246, 5589, 9, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 3, 247, 5601, 8, 247, 1, 247, 1, 247, 1, 247, 1, 247, 3, 247, 5607, 8, 247, 1, 247, 1, 247, 3, 247, 5611, 8, 247, 1, 247, 1, 247, 1, 247, 3, 247, 5616, 8, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 3, 249, 5646, 8, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 3, 249, 5661, 8, 249, 1, 249, 1, 249, 1, 249, 3, 249, 5666, 8, 249, 1, 250, 1, 250, 3, 250, 5670, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 3, 251, 5683, 8, 251, 1, 251, 1, 251, 3, 251, 5687, 8, 251, 3, 251, 5689, 8, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 5, 251, 5696, 8, 251, 10, 251, 12, 251, 5699, 9, 251, 1, 251, 1, 251, 1, 251, 3, 251, 5704, 8, 251, 3, 251, 5706, 8, 251, 1, 252, 1, 252, 3, 252, 5710, 8, 252, 1, 252, 3, 252, 5713, 8, 252, 1, 252, 3, 252, 5716, 8, 252, 1, 252, 3, 252, 5719, 8, 252, 1, 252, 3, 252, 5722, 8, 252, 3, 252, 5724, 8, 252, 1, 252, 3, 252, 5727, 8, 252, 1, 253, 1, 253, 3, 253, 5731, 8, 253, 1, 253, 1, 253, 1, 253, 1, 253, 5, 253, 5737, 8, 253, 10, 253, 12, 253, 5740, 9, 253, 1, 253, 1, 253, 3, 253, 5744, 8, 253, 1, 253, 3, 253, 5747, 8, 253, 1, 254, 1, 254, 1, 255, 1, 255, 3, 255, 5753, 8, 255, 1, 255, 1, 255, 3, 255, 5757, 8, 255, 1, 256, 1, 256, 3, 256, 5761, 8, 256, 1, 256, 1, 256, 1, 256, 3, 256, 5766, 8, 256, 3, 256, 5768, 8, 256, 1, 257, 1, 257, 3, 257, 5772, 8, 257, 1, 258, 1, 258, 3, 258, 5776, 8, 258, 1, 259, 1, 259, 1, 259, 5, 259, 5781, 8, 259, 10, 259, 12, 259, 5784, 9, 259, 1, 260, 1, 260, 1, 260, 3, 260, 5789, 8, 260, 1, 260, 1, 260, 3, 260, 5793, 8, 260, 3, 260, 5795, 8, 260, 3, 260, 5797, 8, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 3, 261, 5810, 8, 261, 1, 262, 1, 262, 1, 262, 1, 262, 5, 262, 5816, 8, 262, 10, 262, 12, 262, 5819, 9, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 3, 263, 5826, 8, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 5, 264, 5835, 8, 264, 10, 264, 12, 264, 5838, 9, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 3, 265, 5846, 8, 265, 1, 266, 1, 266, 1, 266, 3, 266, 5851, 8, 266, 1, 266, 1, 266, 3, 266, 5855, 8, 266, 1, 266, 1, 266, 3, 266, 5859, 8, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 3, 266, 5866, 8, 266, 1, 266, 3, 266, 5869, 8, 266, 3, 266, 5871, 8, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 3, 268, 5879, 8, 268, 1, 268, 1, 268, 3, 268, 5883, 8, 268, 1, 269, 3, 269, 5886, 8, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5893, 8, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5900, 8, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5905, 8, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5912, 8, 269, 1, 269, 3, 269, 5915, 8, 269, 3, 269, 5917, 8, 269, 1, 269, 3, 269, 5920, 8, 269, 1, 270, 1, 270, 1, 270, 1, 270, 3, 270, 5926, 8, 270, 1, 270, 1, 270, 1, 270, 3, 270, 5931, 8, 270, 1, 270, 1, 270, 3, 270, 5935, 8, 270, 1, 271, 1, 271, 1, 271, 5, 271, 5940, 8, 271, 10, 271, 12, 271, 5943, 9, 271, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 274, 3, 274, 5952, 8, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 3, 274, 5959, 8, 274, 1, 274, 3, 274, 5962, 8, 274, 1, 274, 3, 274, 5965, 8, 274, 1, 275, 1, 275, 3, 275, 5969, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 5980, 8, 275, 1, 275, 3, 275, 5983, 8, 275, 1, 275, 3, 275, 5986, 8, 275, 1, 275, 3, 275, 5989, 8, 275, 1, 276, 3, 276, 5992, 8, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 3, 276, 5999, 8, 276, 1, 276, 3, 276, 6002, 8, 276, 1, 276, 3, 276, 6005, 8, 276, 1, 277, 1, 277, 1, 277, 5, 277, 6010, 8, 277, 10, 277, 12, 277, 6013, 9, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 3, 278, 6024, 8, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 3, 278, 6031, 8, 278, 3, 278, 6033, 8, 278, 1, 279, 1, 279, 1, 279, 3, 279, 6038, 8, 279, 1, 279, 1, 279, 1, 279, 5, 279, 6043, 8, 279, 10, 279, 12, 279, 6046, 9, 279, 1, 279, 1, 279, 1, 279, 3, 279, 6051, 8, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 3, 280, 6058, 8, 280, 1, 281, 1, 281, 1, 281, 3, 281, 6063, 8, 281, 1, 281, 1, 281, 1, 282, 3, 282, 6068, 8, 282, 1, 282, 1, 282, 3, 282, 6072, 8, 282, 1, 282, 1, 282, 3, 282, 6076, 8, 282, 1, 282, 1, 282, 3, 282, 6080, 8, 282, 3, 282, 6082, 8, 282, 1, 283, 1, 283, 3, 283, 6086, 8, 283, 1, 284, 1, 284, 3, 284, 6090, 8, 284, 1, 284, 3, 284, 6093, 8, 284, 1, 284, 3, 284, 6096, 8, 284, 3, 284, 6098, 8, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 3, 284, 6108, 8, 284, 3, 284, 6110, 8, 284, 1, 284, 1, 284, 1, 284, 3, 284, 6115, 8, 284, 5, 284, 6117, 8, 284, 10, 284, 12, 284, 6120, 9, 284, 1, 285, 1, 285, 3, 285, 6124, 8, 285, 1, 286, 1, 286, 3, 286, 6128, 8, 286, 1, 286, 1, 286, 1, 286, 5, 286, 6133, 8, 286, 10, 286, 12, 286, 6136, 9, 286, 1, 287, 1, 287, 3, 287, 6140, 8, 287, 1, 287, 1, 287, 3, 287, 6144, 8, 287, 1, 287, 3, 287, 6147, 8, 287, 1, 287, 1, 287, 1, 287, 1, 287, 3, 287, 6153, 8, 287, 1, 287, 3, 287, 6156, 8, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 3, 289, 6175, 8, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 3, 290, 6182, 8, 290, 1, 290, 1, 290, 3, 290, 6186, 8, 290, 1, 291, 3, 291, 6189, 8, 291, 1, 291, 1, 291, 3, 291, 6193, 8, 291, 1, 291, 1, 291, 3, 291, 6197, 8, 291, 1, 291, 3, 291, 6200, 8, 291, 1, 291, 3, 291, 6203, 8, 291, 1, 292, 1, 292, 1, 292, 3, 292, 6208, 8, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 5, 293, 6215, 8, 293, 10, 293, 12, 293, 6218, 9, 293, 1, 294, 1, 294, 1, 294, 1, 294, 3, 294, 6224, 8, 294, 1, 294, 1, 294, 3, 294, 6228, 8, 294, 1, 295, 1, 295, 3, 295, 6232, 8, 295, 1, 295, 1, 295, 3, 295, 6236, 8, 295, 1, 295, 3, 295, 6239, 8, 295, 3, 295, 6241, 8, 295, 1, 296, 1, 296, 1, 296, 3, 296, 6246, 8, 296, 1, 296, 1, 296, 3, 296, 6250, 8, 296, 1, 297, 1, 297, 1, 297, 3, 297, 6255, 8, 297, 1, 297, 1, 297, 1, 297, 1, 297, 3, 297, 6261, 8, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 3, 298, 6268, 8, 298, 1, 299, 1, 299, 1, 299, 3, 299, 6273, 8, 299, 1, 300, 1, 300, 1, 300, 3, 300, 6278, 8, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 5, 301, 6285, 8, 301, 10, 301, 12, 301, 6288, 9, 301, 1, 302, 1, 302, 1, 302, 1, 302, 3, 302, 6294, 8, 302, 1, 302, 1, 302, 1, 302, 1, 302, 5, 302, 6300, 8, 302, 10, 302, 12, 302, 6303, 9, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 3, 302, 6313, 8, 302, 1, 303, 1, 303, 1, 303, 3, 303, 6318, 8, 303, 1, 303, 1, 303, 3, 303, 6322, 8, 303, 1, 303, 3, 303, 6325, 8, 303, 1, 303, 1, 303, 3, 303, 6329, 8, 303, 1, 303, 1, 303, 1, 303, 3, 303, 6334, 8, 303, 4, 303, 6336, 8, 303, 11, 303, 12, 303, 6337, 1, 303, 1, 303, 1, 303, 3, 303, 6343, 8, 303, 1, 304, 1, 304, 1, 304, 1, 304, 5, 304, 6349, 8, 304, 10, 304, 12, 304, 6352, 9, 304, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 5, 306, 6360, 8, 306, 10, 306, 12, 306, 6363, 9, 306, 1, 307, 1, 307, 3, 307, 6367, 8, 307, 1, 307, 1, 307, 3, 307, 6371, 8, 307, 1, 307, 3, 307, 6374, 8, 307, 1, 307, 3, 307, 6377, 8, 307, 3, 307, 6379, 8, 307, 1, 307, 3, 307, 6382, 8, 307, 1, 307, 3, 307, 6385, 8, 307, 1, 307, 3, 307, 6388, 8, 307, 1, 307, 1, 307, 3, 307, 6392, 8, 307, 1, 307, 1, 307, 3, 307, 6396, 8, 307, 1, 307, 1, 307, 3, 307, 6400, 8, 307, 3, 307, 6402, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6411, 8, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6416, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6422, 8, 307, 1, 307, 1, 307, 3, 307, 6426, 8, 307, 3, 307, 6428, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6435, 8, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6440, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 5, 307, 6446, 8, 307, 10, 307, 12, 307, 6449, 9, 307, 1, 308, 3, 308, 6452, 8, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 3, 308, 6459, 8, 308, 1, 309, 1, 309, 1, 309, 3, 309, 6464, 8, 309, 1, 309, 3, 309, 6467, 8, 309, 1, 309, 1, 309, 1, 309, 1, 309, 3, 309, 6473, 8, 309, 1, 310, 1, 310, 3, 310, 6477, 8, 310, 1, 311, 1, 311, 1, 311, 1, 311, 3, 311, 6483, 8, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 6492, 8, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 6498, 8, 312, 3, 312, 6500, 8, 312, 1, 313, 1, 313, 1, 313, 3, 313, 6505, 8, 313, 1, 313, 3, 313, 6508, 8, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 3, 313, 6517, 8, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 3, 313, 6524, 8, 313, 3, 313, 6526, 8, 313, 1, 314, 1, 314, 1, 314, 5, 314, 6531, 8, 314, 10, 314, 12, 314, 6534, 9, 314, 1, 315, 1, 315, 3, 315, 6538, 8, 315, 1, 315, 3, 315, 6541, 8, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 6551, 8, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 5, 317, 6560, 8, 317, 10, 317, 12, 317, 6563, 9, 317, 1, 317, 1, 317, 3, 317, 6567, 8, 317, 1, 317, 1, 317, 3, 317, 6571, 8, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 3, 318, 6579, 8, 318, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 3, 320, 6589, 8, 320, 1, 321, 1, 321, 1, 321, 5, 321, 6594, 8, 321, 10, 321, 12, 321, 6597, 9, 321, 1, 322, 1, 322, 1, 322, 3, 322, 6602, 8, 322, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 5, 323, 6611, 8, 323, 10, 323, 12, 323, 6614, 9, 323, 1, 323, 1, 323, 1, 323, 3, 323, 6619, 8, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 5, 323, 6627, 8, 323, 10, 323, 12, 323, 6630, 9, 323, 1, 323, 1, 323, 1, 324, 1, 324, 1, 324, 1, 324, 3, 324, 6638, 8, 324, 1, 324, 1, 324, 3, 324, 6642, 8, 324, 1, 324, 4, 324, 6645, 8, 324, 11, 324, 12, 324, 6646, 3, 324, 6649, 8, 324, 1, 324, 1, 324, 3, 324, 6653, 8, 324, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 6661, 8, 325, 1, 326, 3, 326, 6664, 8, 326, 1, 326, 1, 326, 1, 326, 3, 326, 6669, 8, 326, 1, 326, 5, 326, 6672, 8, 326, 10, 326, 12, 326, 6675, 9, 326, 1, 326, 1, 326, 1, 326, 1, 326, 3, 326, 6681, 8, 326, 3, 326, 6683, 8, 326, 1, 326, 1, 326, 1, 326, 1, 326, 3, 326, 6689, 8, 326, 1, 327, 1, 327, 3, 327, 6693, 8, 327, 1, 327, 3, 327, 6696, 8, 327, 1, 327, 1, 327, 1, 327, 3, 327, 6701, 8, 327, 1, 327, 3, 327, 6704, 8, 327, 3, 327, 6706, 8, 327, 1, 328, 1, 328, 1, 328, 1, 328, 3, 328, 6712, 8, 328, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 3, 329, 6721, 8, 329, 1, 329, 1, 329, 1, 329, 1, 329, 3, 329, 6727, 8, 329, 1, 329, 3, 329, 6730, 8, 329, 1, 330, 1, 330, 1, 330, 1, 330, 1, 331, 1, 331, 3, 331, 6738, 8, 331, 1, 331, 3, 331, 6741, 8, 331, 1, 332, 1, 332, 3, 332, 6745, 8, 332, 1, 332, 1, 332, 1, 332, 1, 332, 3, 332, 6751, 8, 332, 3, 332, 6753, 8, 332, 1, 332, 3, 332, 6756, 8, 332, 1, 333, 1, 333, 3, 333, 6760, 8, 333, 1, 333, 1, 333, 1, 333, 3, 333, 6765, 8, 333, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6772, 8, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6779, 8, 334, 3, 334, 6781, 8, 334, 1, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6787, 8, 334, 3, 334, 6789, 8, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6794, 8, 334, 3, 334, 6796, 8, 334, 1, 335, 1, 335, 3, 335, 6800, 8, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 3, 338, 6809, 8, 338, 1, 338, 1, 338, 3, 338, 6813, 8, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 5, 338, 6821, 8, 338, 10, 338, 12, 338, 6824, 9, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6837, 8, 339, 1, 339, 3, 339, 6840, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6848, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 5, 339, 6855, 8, 339, 10, 339, 12, 339, 6858, 9, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6863, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6868, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6876, 8, 339, 3, 339, 6878, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6883, 8, 339, 1, 339, 1, 339, 3, 339, 6887, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6892, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6897, 8, 339, 1, 340, 1, 340, 1, 340, 1, 340, 3, 340, 6903, 8, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 5, 340, 6919, 8, 340, 10, 340, 12, 340, 6922, 9, 340, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6930, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6945, 8, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6950, 8, 341, 1, 341, 3, 341, 6953, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6959, 8, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6964, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6977, 8, 341, 1, 341, 4, 341, 6980, 8, 341, 11, 341, 12, 341, 6981, 1, 341, 1, 341, 3, 341, 6986, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6993, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7012, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7024, 8, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7029, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7037, 8, 341, 5, 341, 7039, 8, 341, 10, 341, 12, 341, 7042, 9, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 3, 342, 7050, 8, 342, 1, 342, 3, 342, 7053, 8, 342, 1, 342, 1, 342, 1, 342, 3, 342, 7058, 8, 342, 1, 342, 1, 342, 1, 342, 3, 342, 7063, 8, 342, 1, 342, 3, 342, 7066, 8, 342, 1, 342, 1, 342, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 3, 343, 7077, 8, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 3, 343, 7085, 8, 343, 1, 343, 1, 343, 1, 343, 3, 343, 7090, 8, 343, 3, 343, 7092, 8, 343, 1, 343, 3, 343, 7095, 8, 343, 1, 344, 1, 344, 3, 344, 7099, 8, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7110, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7131, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7139, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7152, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7162, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7168, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7174, 8, 345, 1, 345, 3, 345, 7177, 8, 345, 1, 345, 3, 345, 7180, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7206, 8, 345, 3, 345, 7208, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7229, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7239, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7252, 8, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7257, 8, 345, 1, 345, 1, 345, 3, 345, 7261, 8, 345, 3, 345, 7263, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7275, 8, 345, 1, 346, 1, 346, 1, 346, 5, 346, 7280, 8, 346, 10, 346, 12, 346, 7283, 9, 346, 1, 347, 1, 347, 1, 347, 3, 347, 7288, 8, 347, 1, 348, 1, 348, 1, 349, 1, 349, 3, 349, 7294, 8, 349, 1, 349, 1, 349, 3, 349, 7298, 8, 349, 1, 350, 1, 350, 1, 350, 1, 351, 1, 351, 1, 351, 1, 351, 5, 351, 7307, 8, 351, 10, 351, 12, 351, 7310, 9, 351, 1, 352, 1, 352, 1, 352, 1, 352, 1, 353, 1, 353, 1, 353, 3, 353, 7319, 8, 353, 1, 354, 1, 354, 3, 354, 7323, 8, 354, 1, 354, 1, 354, 1, 354, 3, 354, 7328, 8, 354, 1, 354, 3, 354, 7331, 8, 354, 1, 354, 3, 354, 7334, 8, 354, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 3, 355, 7343, 8, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 3, 355, 7354, 8, 355, 3, 355, 7356, 8, 355, 1, 356, 1, 356, 3, 356, 7360, 8, 356, 1, 356, 1, 356, 1, 356, 3, 356, 7365, 8, 356, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 3, 357, 7374, 8, 357, 1, 358, 1, 358, 1, 358, 3, 358, 7379, 8, 358, 1, 358, 1, 358, 1, 359, 1, 359, 1, 360, 1, 360, 3, 360, 7387, 8, 360, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 3, 362, 7397, 8, 362, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 3, 363, 7405, 8, 363, 1, 364, 1, 364, 3, 364, 7409, 8, 364, 1, 364, 3, 364, 7412, 8, 364, 1, 365, 1, 365, 1, 365, 5, 365, 7417, 8, 365, 10, 365, 12, 365, 7420, 9, 365, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 3, 366, 7427, 8, 366, 1, 367, 1, 367, 3, 367, 7431, 8, 367, 1, 368, 1, 368, 1, 368, 5, 368, 7436, 8, 368, 10, 368, 12, 368, 7439, 9, 368, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 3, 369, 7447, 8, 369, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 5, 370, 7454, 8, 370, 10, 370, 12, 370, 7457, 9, 370, 3, 370, 7459, 8, 370, 1, 370, 1, 370, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 3, 371, 7471, 8, 371, 1, 372, 1, 372, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 3, 373, 7480, 8, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 3, 373, 7487, 8, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 3, 373, 7496, 8, 373, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 375, 1, 375, 1, 375, 3, 375, 7506, 8, 375, 1, 375, 1, 375, 1, 375, 3, 375, 7511, 8, 375, 1, 375, 1, 375, 3, 375, 7515, 8, 375, 3, 375, 7517, 8, 375, 1, 375, 3, 375, 7520, 8, 375, 1, 376, 4, 376, 7523, 8, 376, 11, 376, 12, 376, 7524, 1, 377, 5, 377, 7528, 8, 377, 10, 377, 12, 377, 7531, 9, 377, 1, 378, 1, 378, 1, 378, 5, 378, 7536, 8, 378, 10, 378, 12, 378, 7539, 9, 378, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 3, 379, 7546, 8, 379, 1, 379, 3, 379, 7549, 8, 379, 1, 380, 1, 380, 1, 380, 5, 380, 7554, 8, 380, 10, 380, 12, 380, 7557, 9, 380, 1, 381, 1, 381, 1, 381, 5, 381, 7562, 8, 381, 10, 381, 12, 381, 7565, 9, 381, 1, 382, 1, 382, 1, 382, 5, 382, 7570, 8, 382, 10, 382, 12, 382, 7573, 9, 382, 1, 383, 1, 383, 1, 383, 5, 383, 7578, 8, 383, 10, 383, 12, 383, 7581, 9, 383, 1, 384, 1, 384, 1, 385, 1, 385, 1, 386, 1, 386, 1, 387, 1, 387, 1, 388, 1, 388, 1, 389, 1, 389, 1, 390, 1, 390, 3, 390, 7597, 8, 390, 1, 391, 1, 391, 1, 391, 5, 391, 7602, 8, 391, 10, 391, 12, 391, 7605, 9, 391, 1, 392, 1, 392, 1, 392, 5, 392, 7610, 8, 392, 10, 392, 12, 392, 7613, 9, 392, 1, 393, 1, 393, 1, 394, 1, 394, 1, 395, 1, 395, 1, 396, 1, 396, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 1, 398, 3, 398, 7629, 8, 398, 1, 399, 1, 399, 1, 399, 1, 399, 3, 399, 7635, 8, 399, 1, 400, 1, 400, 1, 400, 1, 400, 3, 400, 7641, 8, 400, 1, 401, 1, 401, 1, 402, 1, 402, 1, 402, 1, 402, 3, 402, 7649, 8, 402, 1, 403, 1, 403, 1, 403, 1, 403, 3, 403, 7655, 8, 403, 1, 404, 1, 404, 1, 404, 3, 404, 7660, 8, 404, 1, 405, 1, 405, 1, 405, 1, 405, 5, 405, 7666, 8, 405, 10, 405, 12, 405, 7669, 9, 405, 1, 405, 1, 405, 3, 405, 7673, 8, 405, 1, 406, 3, 406, 7676, 8, 406, 1, 406, 1, 406, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 3, 407, 7685, 8, 407, 1, 408, 1, 408, 1, 408, 5, 408, 7690, 8, 408, 10, 408, 12, 408, 7693, 9, 408, 1, 409, 1, 409, 3, 409, 7697, 8, 409, 1, 410, 1, 410, 3, 410, 7701, 8, 410, 1, 411, 1, 411, 1, 411, 3, 411, 7706, 8, 411, 1, 412, 1, 412, 1, 412, 1, 412, 3, 412, 7712, 8, 412, 1, 413, 1, 413, 1, 413, 3, 413, 7717, 8, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 3, 413, 7725, 8, 413, 1, 414, 1, 414, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 3, 415, 7780, 8, 415, 1, 416, 1, 416, 1, 417, 1, 417, 1, 418, 3, 418, 7787, 8, 418, 1, 418, 1, 418, 1, 418, 1, 418, 4, 418, 7793, 8, 418, 11, 418, 12, 418, 7794, 3, 418, 7797, 8, 418, 3, 418, 7799, 8, 418, 1, 418, 1, 418, 5, 418, 7803, 8, 418, 10, 418, 12, 418, 7806, 9, 418, 1, 418, 3, 418, 7809, 8, 418, 1, 418, 1, 418, 3, 418, 7813, 8, 418, 1, 419, 1, 419, 1, 419, 1, 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 3, 420, 7824, 8, 420, 1, 420, 3, 420, 7827, 8, 420, 1, 420, 1, 420, 3, 420, 7831, 8, 420, 1, 420, 1, 420, 3, 420, 7835, 8, 420, 1, 420, 1, 420, 3, 420, 7839, 8, 420, 1, 420, 3, 420, 7842, 8, 420, 1, 420, 3, 420, 7845, 8, 420, 1, 420, 3, 420, 7848, 8, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 5, 420, 7855, 8, 420, 10, 420, 12, 420, 7858, 9, 420, 1, 420, 1, 420, 3, 420, 7862, 8, 420, 1, 420, 1, 420, 3, 420, 7866, 8, 420, 1, 420, 1, 420, 1, 421, 1, 421, 1, 421, 1, 422, 1, 422, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 3, 423, 7899, 8, 423, 1, 424, 1, 424, 1, 424, 1, 424, 1, 425, 1, 425, 1, 425, 1, 425, 3, 425, 7909, 8, 425, 1, 425, 1, 425, 3, 425, 7913, 8, 425, 1, 425, 1, 425, 1, 425, 1, 425, 3, 425, 7919, 8, 425, 1, 425, 1, 425, 1, 425, 3, 425, 7924, 8, 425, 1, 426, 1, 426, 1, 426, 1, 426, 1, 426, 1, 427, 1, 427, 3, 427, 7933, 8, 427, 1, 427, 1, 427, 1, 427, 1, 427, 5, 427, 7939, 8, 427, 10, 427, 12, 427, 7942, 9, 427, 1, 427, 1, 427, 1, 428, 1, 428, 1, 428, 1, 428, 1, 429, 1, 429, 3, 429, 7952, 8, 429, 1, 429, 1, 429, 1, 429, 1, 429, 5, 429, 7958, 8, 429, 10, 429, 12, 429, 7961, 9, 429, 1, 430, 1, 430, 1, 430, 1, 430, 5, 430, 7967, 8, 430, 10, 430, 12, 430, 7970, 9, 430, 1, 430, 1, 430, 1, 430, 1, 430, 5, 430, 7976, 8, 430, 10, 430, 12, 430, 7979, 9, 430, 5, 430, 7981, 8, 430, 10, 430, 12, 430, 7984, 9, 430, 1, 430, 3, 430, 7987, 8, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 431, 1, 431, 5, 431, 7995, 8, 431, 10, 431, 12, 431, 7998, 9, 431, 1, 432, 1, 432, 3, 432, 8002, 8, 432, 1, 432, 1, 432, 1, 432, 1, 432, 5, 432, 8008, 8, 432, 10, 432, 12, 432, 8011, 9, 432, 4, 432, 8013, 8, 432, 11, 432, 12, 432, 8014, 1, 432, 3, 432, 8018, 8, 432, 1, 432, 1, 432, 1, 432, 1, 432, 1, 433, 3, 433, 8025, 8, 433, 1, 433, 1, 433, 1, 433, 1, 433, 3, 433, 8031, 8, 433, 1, 433, 1, 433, 1, 434, 1, 434, 1, 434, 1, 434, 3, 434, 8039, 8, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 3, 434, 8047, 8, 434, 1, 434, 3, 434, 8050, 8, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 3, 434, 8057, 8, 434, 3, 434, 8059, 8, 434, 1, 435, 3, 435, 8062, 8, 435, 1, 435, 1, 435, 1, 435, 1, 435, 3, 435, 8068, 8, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 436, 1, 436, 3, 436, 8077, 8, 436, 1, 436, 1, 436, 3, 436, 8081, 8, 436, 1, 436, 1, 436, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 3, 437, 8095, 8, 437, 1, 437, 3, 437, 8098, 8, 437, 3, 437, 8100, 8, 437, 1, 437, 1, 437, 1, 438, 1, 438, 3, 438, 8106, 8, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 4, 438, 8114, 8, 438, 11, 438, 12, 438, 8115, 3, 438, 8118, 8, 438, 3, 438, 8120, 8, 438, 1, 438, 1, 438, 1, 438, 1, 438, 5, 438, 8126, 8, 438, 10, 438, 12, 438, 8129, 9, 438, 3, 438, 8131, 8, 438, 1, 438, 3, 438, 8134, 8, 438, 1, 439, 1, 439, 1, 439, 1, 439, 1, 440, 1, 440, 1, 440, 1, 440, 3, 440, 8144, 8, 440, 1, 440, 1, 440, 1, 441, 1, 441, 5, 441, 8150, 8, 441, 10, 441, 12, 441, 8153, 9, 441, 1, 441, 1, 441, 1, 441, 3, 441, 8158, 8, 441, 1, 441, 1, 441, 1, 442, 1, 442, 3, 442, 8164, 8, 442, 1, 442, 1, 442, 1, 443, 1, 443, 1, 443, 3, 443, 8171, 8, 443, 1, 443, 1, 443, 3, 443, 8175, 8, 443, 1, 443, 1, 443, 3, 443, 8179, 8, 443, 1, 443, 3, 443, 8182, 8, 443, 1, 443, 3, 443, 8185, 8, 443, 1, 443, 1, 443, 1, 444, 1, 444, 3, 444, 8191, 8, 444, 1, 444, 1, 444, 1, 445, 1, 445, 1, 445, 3, 445, 8198, 8, 445, 1, 445, 3, 445, 8201, 8, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 3, 445, 8209, 8, 445, 3, 445, 8211, 8, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 5, 445, 8218, 8, 445, 10, 445, 12, 445, 8221, 9, 445, 1, 445, 1, 445, 3, 445, 8225, 8, 445, 3, 445, 8227, 8, 445, 1, 445, 1, 445, 1, 446, 1, 446, 1, 446, 3, 446, 8234, 8, 446, 1, 446, 1, 446, 1, 447, 1, 447, 3, 447, 8240, 8, 447, 1, 447, 3, 447, 8243, 8, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 3, 448, 8255, 8, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 3, 448, 8262, 8, 448, 3, 448, 8264, 8, 448, 1, 449, 1, 449, 3, 449, 8268, 8, 449, 1, 449, 1, 449, 1, 449, 1, 450, 3, 450, 8274, 8, 450, 1, 450, 1, 450, 1, 450, 3, 450, 8279, 8, 450, 1, 450, 1, 450, 3, 450, 8283, 8, 450, 1, 450, 3, 450, 8286, 8, 450, 1, 450, 3, 450, 8289, 8, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 4, 450, 8296, 8, 450, 11, 450, 12, 450, 8297, 1, 451, 3, 451, 8301, 8, 451, 1, 451, 1, 451, 3, 451, 8305, 8, 451, 1, 451, 1, 451, 3, 451, 8309, 8, 451, 3, 451, 8311, 8, 451, 1, 451, 3, 451, 8314, 8, 451, 1, 451, 3, 451, 8317, 8, 451, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8323, 8, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8330, 8, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8337, 8, 452, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8343, 8, 452, 3, 452, 8345, 8, 452, 1, 453, 1, 453, 3, 453, 8349, 8, 453, 1, 453, 1, 453, 1, 453, 3, 453, 8354, 8, 453, 1, 453, 1, 453, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 5, 454, 8370, 8, 454, 10, 454, 12, 454, 8373, 9, 454, 1, 454, 1, 454, 4, 454, 8377, 8, 454, 11, 454, 12, 454, 8378, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 5, 455, 8386, 8, 455, 10, 455, 12, 455, 8389, 9, 455, 1, 455, 1, 455, 1, 455, 1, 455, 3, 455, 8395, 8, 455, 1, 456, 1, 456, 3, 456, 8399, 8, 456, 1, 457, 1, 457, 1, 457, 1, 457, 1, 458, 1, 458, 1, 458, 1, 459, 1, 459, 1, 459, 3, 459, 8411, 8, 459, 1, 459, 3, 459, 8414, 8, 459, 1, 459, 1, 459, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 3, 460, 8427, 8, 460, 1, 460, 3, 460, 8430, 8, 460, 1, 461, 1, 461, 3, 461, 8434, 8, 461, 1, 462, 1, 462, 1, 462, 1, 462, 1, 462, 5, 462, 8441, 8, 462, 10, 462, 12, 462, 8444, 9, 462, 1, 462, 1, 462, 5, 462, 8448, 8, 462, 10, 462, 12, 462, 8451, 9, 462, 4, 462, 8453, 8, 462, 11, 462, 12, 462, 8454, 1, 463, 1, 463, 1, 463, 3, 463, 8460, 8, 463, 1, 464, 1, 464, 3, 464, 8464, 8, 464, 1, 465, 3, 465, 8467, 8, 465, 1, 465, 3, 465, 8470, 8, 465, 1, 465, 3, 465, 8473, 8, 465, 1, 465, 3, 465, 8476, 8, 465, 1, 465, 3, 465, 8479, 8, 465, 1, 465, 1, 465, 3, 465, 8483, 8, 465, 1, 465, 3, 465, 8486, 8, 465, 1, 465, 0, 3, 676, 680, 682, 466, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 0, 118, 2, 0, 195, 195, 364, 364, 2, 0, 66, 66, 318, 318, 2, 0, 99, 99, 318, 318, 2, 0, 134, 134, 318, 318, 1, 0, 529, 531, 2, 0, 10, 10, 94, 94, 2, 0, 133, 133, 191, 191, 2, 0, 254, 254, 332, 332, 2, 0, 162, 162, 363, 363, 2, 0, 180, 180, 221, 221, 5, 0, 30, 30, 288, 288, 329, 329, 352, 352, 354, 354, 2, 0, 109, 109, 532, 532, 2, 0, 158, 158, 277, 277, 2, 0, 367, 367, 439, 439, 2, 0, 139, 139, 312, 312, 2, 0, 191, 191, 333, 333, 2, 0, 313, 313, 333, 333, 2, 0, 150, 150, 315, 315, 2, 0, 64, 64, 94, 94, 4, 0, 78, 78, 183, 183, 197, 197, 298, 298, 2, 0, 213, 213, 254, 254, 2, 0, 352, 352, 354, 354, 2, 0, 200, 200, 224, 224, 9, 0, 30, 30, 160, 160, 165, 165, 179, 179, 219, 219, 227, 227, 342, 342, 345, 345, 438, 438, 3, 0, 113, 113, 284, 284, 336, 336, 2, 0, 53, 53, 78, 78, 2, 0, 105, 105, 379, 379, 2, 0, 260, 260, 262, 262, 3, 0, 173, 173, 260, 260, 262, 262, 1, 0, 12, 13, 2, 0, 64, 64, 375, 375, 2, 0, 156, 156, 206, 206, 2, 0, 189, 189, 360, 360, 2, 0, 215, 215, 373, 373, 3, 0, 133, 133, 191, 191, 333, 333, 5, 0, 30, 30, 88, 88, 182, 182, 241, 241, 369, 369, 2, 0, 9, 9, 94, 94, 2, 0, 92, 92, 226, 226, 1, 0, 448, 449, 2, 0, 92, 92, 414, 414, 2, 0, 341, 341, 414, 414, 4, 0, 163, 163, 185, 185, 283, 283, 353, 353, 2, 0, 135, 135, 145, 145, 2, 0, 211, 211, 278, 278, 3, 0, 321, 321, 357, 357, 445, 445, 3, 0, 66, 66, 99, 99, 318, 318, 5, 0, 108, 108, 168, 168, 226, 226, 328, 328, 342, 342, 2, 0, 167, 167, 314, 314, 2, 0, 61, 61, 265, 265, 4, 0, 207, 207, 249, 249, 268, 268, 293, 293, 2, 0, 130, 130, 307, 307, 2, 0, 64, 64, 68, 68, 10, 0, 46, 46, 88, 88, 182, 182, 202, 202, 241, 241, 352, 352, 354, 354, 357, 358, 369, 369, 521, 523, 5, 0, 212, 212, 329, 329, 350, 350, 455, 455, 457, 457, 5, 0, 212, 212, 329, 329, 350, 350, 361, 361, 455, 456, 2, 0, 37, 37, 55, 55, 2, 0, 207, 207, 249, 249, 2, 0, 10, 10, 53, 53, 2, 0, 181, 181, 243, 243, 2, 0, 170, 170, 320, 320, 2, 0, 141, 141, 223, 223, 5, 0, 108, 108, 168, 168, 189, 189, 342, 342, 360, 360, 2, 0, 226, 226, 328, 328, 2, 0, 163, 163, 185, 185, 2, 0, 186, 186, 193, 193, 4, 0, 88, 88, 182, 182, 241, 241, 369, 369, 2, 0, 137, 137, 242, 242, 2, 0, 161, 161, 319, 319, 4, 0, 129, 129, 161, 161, 319, 319, 454, 454, 2, 0, 356, 356, 380, 380, 2, 0, 81, 81, 382, 382, 2, 0, 151, 151, 254, 254, 2, 0, 133, 133, 138, 138, 1, 0, 31, 32, 2, 0, 128, 128, 547, 547, 2, 0, 60, 60, 96, 96, 2, 0, 99, 99, 349, 349, 2, 0, 131, 131, 414, 414, 2, 0, 201, 201, 334, 334, 3, 0, 59, 59, 70, 70, 97, 97, 2, 0, 30, 30, 56, 56, 1, 0, 527, 528, 2, 0, 207, 207, 268, 268, 2, 0, 320, 320, 414, 414, 2, 0, 571, 571, 573, 573, 1, 0, 468, 469, 4, 0, 113, 113, 115, 115, 119, 119, 126, 126, 2, 0, 360, 360, 477, 477, 2, 0, 394, 395, 409, 409, 2, 0, 391, 392, 406, 406, 1, 0, 391, 392, 1, 0, 418, 419, 5, 0, 10, 10, 16, 17, 21, 21, 23, 23, 25, 25, 3, 0, 9, 9, 14, 14, 27, 27, 2, 0, 98, 98, 396, 396, 2, 0, 50, 51, 75, 76, 2, 0, 41, 41, 420, 420, 3, 0, 39, 39, 73, 73, 95, 95, 4, 0, 393, 393, 399, 399, 404, 404, 425, 425, 2, 0, 292, 292, 347, 347, 2, 0, 166, 166, 188, 188, 2, 0, 304, 304, 450, 450, 3, 0, 299, 299, 320, 320, 481, 481, 2, 0, 208, 208, 289, 289, 3, 0, 30, 30, 34, 34, 90, 90, 6, 0, 9, 10, 12, 17, 21, 21, 23, 23, 25, 25, 27, 27, 2, 0, 114, 114, 120, 120, 2, 0, 20, 20, 22, 22, 1, 0, 483, 486, 17, 0, 53, 53, 116, 116, 123, 124, 129, 228, 238, 386, 433, 452, 455, 469, 471, 471, 473, 473, 475, 475, 477, 488, 490, 502, 504, 504, 506, 518, 520, 520, 524, 524, 547, 548, 3, 0, 106, 123, 125, 128, 472, 472, 4, 0, 30, 52, 54, 70, 72, 105, 454, 454, 2, 0, 62, 62, 116, 116, 2, 0, 10, 10, 20, 20, 2, 0, 434, 434, 501, 501, 2, 0, 167, 167, 507, 507, 1, 0, 512, 517, 2, 0, 144, 144, 210, 210, 9921, 0, 935, 1, 0, 0, 0, 2, 940, 1, 0, 0, 0, 4, 1064, 1, 0, 0, 0, 6, 1066, 1, 0, 0, 0, 8, 1069, 1, 0, 0, 0, 10, 1119, 1, 0, 0, 0, 12, 1129, 1, 0, 0, 0, 14, 1131, 1, 0, 0, 0, 16, 1143, 1, 0, 0, 0, 18, 1155, 1, 0, 0, 0, 20, 1166, 1, 0, 0, 0, 22, 1200, 1, 0, 0, 0, 24, 1244, 1, 0, 0, 0, 26, 1246, 1, 0, 0, 0, 28, 1258, 1, 0, 0, 0, 30, 1265, 1, 0, 0, 0, 32, 1284, 1, 0, 0, 0, 34, 1292, 1, 0, 0, 0, 36, 1294, 1, 0, 0, 0, 38, 1308, 1, 0, 0, 0, 40, 1312, 1, 0, 0, 0, 42, 1349, 1, 0, 0, 0, 44, 1351, 1, 0, 0, 0, 46, 1359, 1, 0, 0, 0, 48, 1369, 1, 0, 0, 0, 50, 1376, 1, 0, 0, 0, 52, 1384, 1, 0, 0, 0, 54, 1390, 1, 0, 0, 0, 56, 1406, 1, 0, 0, 0, 58, 1410, 1, 0, 0, 0, 60, 1412, 1, 0, 0, 0, 62, 1424, 1, 0, 0, 0, 64, 1429, 1, 0, 0, 0, 66, 1434, 1, 0, 0, 0, 68, 1436, 1, 0, 0, 0, 70, 1448, 1, 0, 0, 0, 72, 1456, 1, 0, 0, 0, 74, 1458, 1, 0, 0, 0, 76, 1582, 1, 0, 0, 0, 78, 1584, 1, 0, 0, 0, 80, 1601, 1, 0, 0, 0, 82, 1603, 1, 0, 0, 0, 84, 1617, 1, 0, 0, 0, 86, 1619, 1, 0, 0, 0, 88, 1633, 1, 0, 0, 0, 90, 1635, 1, 0, 0, 0, 92, 1872, 1, 0, 0, 0, 94, 1879, 1, 0, 0, 0, 96, 1881, 1, 0, 0, 0, 98, 1883, 1, 0, 0, 0, 100, 1886, 1, 0, 0, 0, 102, 1897, 1, 0, 0, 0, 104, 1900, 1, 0, 0, 0, 106, 1929, 1, 0, 0, 0, 108, 1931, 1, 0, 0, 0, 110, 1972, 1, 0, 0, 0, 112, 1974, 1, 0, 0, 0, 114, 2028, 1, 0, 0, 0, 116, 2069, 1, 0, 0, 0, 118, 2071, 1, 0, 0, 0, 120, 2088, 1, 0, 0, 0, 122, 2169, 1, 0, 0, 0, 124, 2171, 1, 0, 0, 0, 126, 2182, 1, 0, 0, 0, 128, 2205, 1, 0, 0, 0, 130, 2223, 1, 0, 0, 0, 132, 2225, 1, 0, 0, 0, 134, 2260, 1, 0, 0, 0, 136, 2353, 1, 0, 0, 0, 138, 2358, 1, 0, 0, 0, 140, 2360, 1, 0, 0, 0, 142, 2458, 1, 0, 0, 0, 144, 2460, 1, 0, 0, 0, 146, 2464, 1, 0, 0, 0, 148, 2475, 1, 0, 0, 0, 150, 2483, 1, 0, 0, 0, 152, 2486, 1, 0, 0, 0, 154, 2489, 1, 0, 0, 0, 156, 2507, 1, 0, 0, 0, 158, 2509, 1, 0, 0, 0, 160, 2513, 1, 0, 0, 0, 162, 2526, 1, 0, 0, 0, 164, 2528, 1, 0, 0, 0, 166, 2533, 1, 0, 0, 0, 168, 2553, 1, 0, 0, 0, 170, 2561, 1, 0, 0, 0, 172, 2568, 1, 0, 0, 0, 174, 2570, 1, 0, 0, 0, 176, 2579, 1, 0, 0, 0, 178, 2582, 1, 0, 0, 0, 180, 2586, 1, 0, 0, 0, 182, 2590, 1, 0, 0, 0, 184, 2615, 1, 0, 0, 0, 186, 2625, 1, 0, 0, 0, 188, 2639, 1, 0, 0, 0, 190, 2655, 1, 0, 0, 0, 192, 2661, 1, 0, 0, 0, 194, 2688, 1, 0, 0, 0, 196, 2698, 1, 0, 0, 0, 198, 2714, 1, 0, 0, 0, 200, 2758, 1, 0, 0, 0, 202, 2765, 1, 0, 0, 0, 204, 2767, 1, 0, 0, 0, 206, 2793, 1, 0, 0, 0, 208, 2804, 1, 0, 0, 0, 210, 2823, 1, 0, 0, 0, 212, 2834, 1, 0, 0, 0, 214, 2872, 1, 0, 0, 0, 216, 2893, 1, 0, 0, 0, 218, 2895, 1, 0, 0, 0, 220, 2915, 1, 0, 0, 0, 222, 2927, 1, 0, 0, 0, 224, 2939, 1, 0, 0, 0, 226, 2942, 1, 0, 0, 0, 228, 2945, 1, 0, 0, 0, 230, 2965, 1, 0, 0, 0, 232, 2970, 1, 0, 0, 0, 234, 3019, 1, 0, 0, 0, 236, 3021, 1, 0, 0, 0, 238, 3044, 1, 0, 0, 0, 240, 3060, 1, 0, 0, 0, 242, 3072, 1, 0, 0, 0, 244, 3099, 1, 0, 0, 0, 246, 3114, 1, 0, 0, 0, 248, 3177, 1, 0, 0, 0, 250, 3179, 1, 0, 0, 0, 252, 3184, 1, 0, 0, 0, 254, 3190, 1, 0, 0, 0, 256, 3277, 1, 0, 0, 0, 258, 3283, 1, 0, 0, 0, 260, 3285, 1, 0, 0, 0, 262, 3301, 1, 0, 0, 0, 264, 3303, 1, 0, 0, 0, 266, 3312, 1, 0, 0, 0, 268, 3316, 1, 0, 0, 0, 270, 3329, 1, 0, 0, 0, 272, 3341, 1, 0, 0, 0, 274, 3343, 1, 0, 0, 0, 276, 3365, 1, 0, 0, 0, 278, 3377, 1, 0, 0, 0, 280, 3388, 1, 0, 0, 0, 282, 3479, 1, 0, 0, 0, 284, 3481, 1, 0, 0, 0, 286, 3492, 1, 0, 0, 0, 288, 3503, 1, 0, 0, 0, 290, 3505, 1, 0, 0, 0, 292, 3531, 1, 0, 0, 0, 294, 3533, 1, 0, 0, 0, 296, 3537, 1, 0, 0, 0, 298, 3587, 1, 0, 0, 0, 300, 3589, 1, 0, 0, 0, 302, 3595, 1, 0, 0, 0, 304, 3620, 1, 0, 0, 0, 306, 3624, 1, 0, 0, 0, 308, 3838, 1, 0, 0, 0, 310, 3856, 1, 0, 0, 0, 312, 3882, 1, 0, 0, 0, 314, 3884, 1, 0, 0, 0, 316, 3892, 1, 0, 0, 0, 318, 3898, 1, 0, 0, 0, 320, 3902, 1, 0, 0, 0, 322, 3922, 1, 0, 0, 0, 324, 3928, 1, 0, 0, 0, 326, 3995, 1, 0, 0, 0, 328, 4026, 1, 0, 0, 0, 330, 4072, 1, 0, 0, 0, 332, 4074, 1, 0, 0, 0, 334, 4076, 1, 0, 0, 0, 336, 4087, 1, 0, 0, 0, 338, 4124, 1, 0, 0, 0, 340, 4126, 1, 0, 0, 0, 342, 4132, 1, 0, 0, 0, 344, 4182, 1, 0, 0, 0, 346, 4185, 1, 0, 0, 0, 348, 4199, 1, 0, 0, 0, 350, 4220, 1, 0, 0, 0, 352, 4244, 1, 0, 0, 0, 354, 4285, 1, 0, 0, 0, 356, 4287, 1, 0, 0, 0, 358, 4289, 1, 0, 0, 0, 360, 4329, 1, 0, 0, 0, 362, 4346, 1, 0, 0, 0, 364, 4366, 1, 0, 0, 0, 366, 4419, 1, 0, 0, 0, 368, 4422, 1, 0, 0, 0, 370, 4428, 1, 0, 0, 0, 372, 4436, 1, 0, 0, 0, 374, 4449, 1, 0, 0, 0, 376, 4451, 1, 0, 0, 0, 378, 4464, 1, 0, 0, 0, 380, 4466, 1, 0, 0, 0, 382, 4479, 1, 0, 0, 0, 384, 4489, 1, 0, 0, 0, 386, 4500, 1, 0, 0, 0, 388, 4511, 1, 0, 0, 0, 390, 4513, 1, 0, 0, 0, 392, 4518, 1, 0, 0, 0, 394, 4532, 1, 0, 0, 0, 396, 4564, 1, 0, 0, 0, 398, 4601, 1, 0, 0, 0, 400, 4603, 1, 0, 0, 0, 402, 4606, 1, 0, 0, 0, 404, 4609, 1, 0, 0, 0, 406, 4626, 1, 0, 0, 0, 408, 4647, 1, 0, 0, 0, 410, 4663, 1, 0, 0, 0, 412, 4679, 1, 0, 0, 0, 414, 4701, 1, 0, 0, 0, 416, 4706, 1, 0, 0, 0, 418, 4709, 1, 0, 0, 0, 420, 4717, 1, 0, 0, 0, 422, 4742, 1, 0, 0, 0, 424, 4745, 1, 0, 0, 0, 426, 4773, 1, 0, 0, 0, 428, 4778, 1, 0, 0, 0, 430, 4818, 1, 0, 0, 0, 432, 5030, 1, 0, 0, 0, 434, 5032, 1, 0, 0, 0, 436, 5120, 1, 0, 0, 0, 438, 5122, 1, 0, 0, 0, 440, 5128, 1, 0, 0, 0, 442, 5139, 1, 0, 0, 0, 444, 5149, 1, 0, 0, 0, 446, 5229, 1, 0, 0, 0, 448, 5231, 1, 0, 0, 0, 450, 5245, 1, 0, 0, 0, 452, 5267, 1, 0, 0, 0, 454, 5340, 1, 0, 0, 0, 456, 5342, 1, 0, 0, 0, 458, 5383, 1, 0, 0, 0, 460, 5385, 1, 0, 0, 0, 462, 5390, 1, 0, 0, 0, 464, 5393, 1, 0, 0, 0, 466, 5396, 1, 0, 0, 0, 468, 5446, 1, 0, 0, 0, 470, 5448, 1, 0, 0, 0, 472, 5459, 1, 0, 0, 0, 474, 5461, 1, 0, 0, 0, 476, 5471, 1, 0, 0, 0, 478, 5506, 1, 0, 0, 0, 480, 5509, 1, 0, 0, 0, 482, 5530, 1, 0, 0, 0, 484, 5540, 1, 0, 0, 0, 486, 5560, 1, 0, 0, 0, 488, 5566, 1, 0, 0, 0, 490, 5572, 1, 0, 0, 0, 492, 5577, 1, 0, 0, 0, 494, 5590, 1, 0, 0, 0, 496, 5617, 1, 0, 0, 0, 498, 5665, 1, 0, 0, 0, 500, 5667, 1, 0, 0, 0, 502, 5705, 1, 0, 0, 0, 504, 5707, 1, 0, 0, 0, 506, 5728, 1, 0, 0, 0, 508, 5748, 1, 0, 0, 0, 510, 5752, 1, 0, 0, 0, 512, 5767, 1, 0, 0, 0, 514, 5769, 1, 0, 0, 0, 516, 5773, 1, 0, 0, 0, 518, 5777, 1, 0, 0, 0, 520, 5785, 1, 0, 0, 0, 522, 5809, 1, 0, 0, 0, 524, 5811, 1, 0, 0, 0, 526, 5822, 1, 0, 0, 0, 528, 5830, 1, 0, 0, 0, 530, 5845, 1, 0, 0, 0, 532, 5870, 1, 0, 0, 0, 534, 5872, 1, 0, 0, 0, 536, 5876, 1, 0, 0, 0, 538, 5885, 1, 0, 0, 0, 540, 5925, 1, 0, 0, 0, 542, 5936, 1, 0, 0, 0, 544, 5944, 1, 0, 0, 0, 546, 5947, 1, 0, 0, 0, 548, 5951, 1, 0, 0, 0, 550, 5966, 1, 0, 0, 0, 552, 5991, 1, 0, 0, 0, 554, 6006, 1, 0, 0, 0, 556, 6032, 1, 0, 0, 0, 558, 6034, 1, 0, 0, 0, 560, 6057, 1, 0, 0, 0, 562, 6059, 1, 0, 0, 0, 564, 6067, 1, 0, 0, 0, 566, 6085, 1, 0, 0, 0, 568, 6109, 1, 0, 0, 0, 570, 6121, 1, 0, 0, 0, 572, 6125, 1, 0, 0, 0, 574, 6137, 1, 0, 0, 0, 576, 6157, 1, 0, 0, 0, 578, 6165, 1, 0, 0, 0, 580, 6179, 1, 0, 0, 0, 582, 6202, 1, 0, 0, 0, 584, 6204, 1, 0, 0, 0, 586, 6209, 1, 0, 0, 0, 588, 6219, 1, 0, 0, 0, 590, 6240, 1, 0, 0, 0, 592, 6242, 1, 0, 0, 0, 594, 6251, 1, 0, 0, 0, 596, 6262, 1, 0, 0, 0, 598, 6272, 1, 0, 0, 0, 600, 6274, 1, 0, 0, 0, 602, 6281, 1, 0, 0, 0, 604, 6312, 1, 0, 0, 0, 606, 6342, 1, 0, 0, 0, 608, 6344, 1, 0, 0, 0, 610, 6353, 1, 0, 0, 0, 612, 6356, 1, 0, 0, 0, 614, 6427, 1, 0, 0, 0, 616, 6451, 1, 0, 0, 0, 618, 6472, 1, 0, 0, 0, 620, 6474, 1, 0, 0, 0, 622, 6482, 1, 0, 0, 0, 624, 6499, 1, 0, 0, 0, 626, 6525, 1, 0, 0, 0, 628, 6527, 1, 0, 0, 0, 630, 6535, 1, 0, 0, 0, 632, 6542, 1, 0, 0, 0, 634, 6566, 1, 0, 0, 0, 636, 6572, 1, 0, 0, 0, 638, 6580, 1, 0, 0, 0, 640, 6583, 1, 0, 0, 0, 642, 6590, 1, 0, 0, 0, 644, 6598, 1, 0, 0, 0, 646, 6603, 1, 0, 0, 0, 648, 6633, 1, 0, 0, 0, 650, 6660, 1, 0, 0, 0, 652, 6688, 1, 0, 0, 0, 654, 6705, 1, 0, 0, 0, 656, 6711, 1, 0, 0, 0, 658, 6729, 1, 0, 0, 0, 660, 6731, 1, 0, 0, 0, 662, 6735, 1, 0, 0, 0, 664, 6752, 1, 0, 0, 0, 666, 6757, 1, 0, 0, 0, 668, 6795, 1, 0, 0, 0, 670, 6797, 1, 0, 0, 0, 672, 6801, 1, 0, 0, 0, 674, 6803, 1, 0, 0, 0, 676, 6812, 1, 0, 0, 0, 678, 6896, 1, 0, 0, 0, 680, 6902, 1, 0, 0, 0, 682, 7011, 1, 0, 0, 0, 684, 7043, 1, 0, 0, 0, 686, 7094, 1, 0, 0, 0, 688, 7098, 1, 0, 0, 0, 690, 7274, 1, 0, 0, 0, 692, 7276, 1, 0, 0, 0, 694, 7284, 1, 0, 0, 0, 696, 7289, 1, 0, 0, 0, 698, 7291, 1, 0, 0, 0, 700, 7299, 1, 0, 0, 0, 702, 7302, 1, 0, 0, 0, 704, 7311, 1, 0, 0, 0, 706, 7315, 1, 0, 0, 0, 708, 7320, 1, 0, 0, 0, 710, 7337, 1, 0, 0, 0, 712, 7364, 1, 0, 0, 0, 714, 7373, 1, 0, 0, 0, 716, 7375, 1, 0, 0, 0, 718, 7382, 1, 0, 0, 0, 720, 7386, 1, 0, 0, 0, 722, 7388, 1, 0, 0, 0, 724, 7396, 1, 0, 0, 0, 726, 7404, 1, 0, 0, 0, 728, 7411, 1, 0, 0, 0, 730, 7413, 1, 0, 0, 0, 732, 7426, 1, 0, 0, 0, 734, 7430, 1, 0, 0, 0, 736, 7432, 1, 0, 0, 0, 738, 7446, 1, 0, 0, 0, 740, 7448, 1, 0, 0, 0, 742, 7470, 1, 0, 0, 0, 744, 7472, 1, 0, 0, 0, 746, 7495, 1, 0, 0, 0, 748, 7497, 1, 0, 0, 0, 750, 7519, 1, 0, 0, 0, 752, 7522, 1, 0, 0, 0, 754, 7529, 1, 0, 0, 0, 756, 7532, 1, 0, 0, 0, 758, 7548, 1, 0, 0, 0, 760, 7550, 1, 0, 0, 0, 762, 7558, 1, 0, 0, 0, 764, 7566, 1, 0, 0, 0, 766, 7574, 1, 0, 0, 0, 768, 7582, 1, 0, 0, 0, 770, 7584, 1, 0, 0, 0, 772, 7586, 1, 0, 0, 0, 774, 7588, 1, 0, 0, 0, 776, 7590, 1, 0, 0, 0, 778, 7592, 1, 0, 0, 0, 780, 7594, 1, 0, 0, 0, 782, 7598, 1, 0, 0, 0, 784, 7606, 1, 0, 0, 0, 786, 7614, 1, 0, 0, 0, 788, 7616, 1, 0, 0, 0, 790, 7618, 1, 0, 0, 0, 792, 7620, 1, 0, 0, 0, 794, 7622, 1, 0, 0, 0, 796, 7628, 1, 0, 0, 0, 798, 7634, 1, 0, 0, 0, 800, 7640, 1, 0, 0, 0, 802, 7642, 1, 0, 0, 0, 804, 7648, 1, 0, 0, 0, 806, 7654, 1, 0, 0, 0, 808, 7656, 1, 0, 0, 0, 810, 7672, 1, 0, 0, 0, 812, 7675, 1, 0, 0, 0, 814, 7684, 1, 0, 0, 0, 816, 7686, 1, 0, 0, 0, 818, 7696, 1, 0, 0, 0, 820, 7700, 1, 0, 0, 0, 822, 7705, 1, 0, 0, 0, 824, 7711, 1, 0, 0, 0, 826, 7724, 1, 0, 0, 0, 828, 7726, 1, 0, 0, 0, 830, 7779, 1, 0, 0, 0, 832, 7781, 1, 0, 0, 0, 834, 7783, 1, 0, 0, 0, 836, 7786, 1, 0, 0, 0, 838, 7814, 1, 0, 0, 0, 840, 7818, 1, 0, 0, 0, 842, 7869, 1, 0, 0, 0, 844, 7872, 1, 0, 0, 0, 846, 7898, 1, 0, 0, 0, 848, 7900, 1, 0, 0, 0, 850, 7923, 1, 0, 0, 0, 852, 7925, 1, 0, 0, 0, 854, 7930, 1, 0, 0, 0, 856, 7945, 1, 0, 0, 0, 858, 7951, 1, 0, 0, 0, 860, 7962, 1, 0, 0, 0, 862, 7992, 1, 0, 0, 0, 864, 7999, 1, 0, 0, 0, 866, 8024, 1, 0, 0, 0, 868, 8034, 1, 0, 0, 0, 870, 8061, 1, 0, 0, 0, 872, 8074, 1, 0, 0, 0, 874, 8084, 1, 0, 0, 0, 876, 8103, 1, 0, 0, 0, 878, 8135, 1, 0, 0, 0, 880, 8139, 1, 0, 0, 0, 882, 8147, 1, 0, 0, 0, 884, 8161, 1, 0, 0, 0, 886, 8167, 1, 0, 0, 0, 888, 8188, 1, 0, 0, 0, 890, 8194, 1, 0, 0, 0, 892, 8233, 1, 0, 0, 0, 894, 8237, 1, 0, 0, 0, 896, 8263, 1, 0, 0, 0, 898, 8265, 1, 0, 0, 0, 900, 8273, 1, 0, 0, 0, 902, 8310, 1, 0, 0, 0, 904, 8344, 1, 0, 0, 0, 906, 8346, 1, 0, 0, 0, 908, 8357, 1, 0, 0, 0, 910, 8394, 1, 0, 0, 0, 912, 8398, 1, 0, 0, 0, 914, 8400, 1, 0, 0, 0, 916, 8404, 1, 0, 0, 0, 918, 8407, 1, 0, 0, 0, 920, 8429, 1, 0, 0, 0, 922, 8433, 1, 0, 0, 0, 924, 8435, 1, 0, 0, 0, 926, 8459, 1, 0, 0, 0, 928, 8463, 1, 0, 0, 0, 930, 8466, 1, 0, 0, 0, 932, 934, 3, 2, 1, 0, 933, 932, 1, 0, 0, 0, 934, 937, 1, 0, 0, 0, 935, 933, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 1, 0, 0, 0, 937, 935, 1, 0, 0, 0, 938, 939, 5, 0, 0, 1, 939, 1, 1, 0, 0, 0, 940, 942, 3, 4, 2, 0, 941, 943, 5, 7, 0, 0, 942, 941, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 3, 1, 0, 0, 0, 944, 1065, 3, 278, 139, 0, 945, 1065, 3, 488, 244, 0, 946, 1065, 3, 484, 242, 0, 947, 1065, 3, 486, 243, 0, 948, 1065, 3, 352, 176, 0, 949, 1065, 3, 494, 247, 0, 950, 1065, 3, 292, 146, 0, 951, 1065, 3, 210, 105, 0, 952, 1065, 3, 212, 106, 0, 953, 1065, 3, 218, 109, 0, 954, 1065, 3, 232, 116, 0, 955, 1065, 3, 404, 202, 0, 956, 1065, 3, 28, 14, 0, 957, 1065, 3, 434, 217, 0, 958, 1065, 3, 436, 218, 0, 959, 1065, 3, 446, 223, 0, 960, 1065, 3, 438, 219, 0, 961, 1065, 3, 444, 222, 0, 962, 1065, 3, 244, 122, 0, 963, 1065, 3, 246, 123, 0, 964, 1065, 3, 198, 99, 0, 965, 1065, 3, 490, 245, 0, 966, 1065, 3, 76, 38, 0, 967, 1065, 3, 430, 215, 0, 968, 1065, 3, 108, 54, 0, 969, 1065, 3, 450, 225, 0, 970, 1065, 3, 18, 9, 0, 971, 1065, 3, 20, 10, 0, 972, 1065, 3, 16, 8, 0, 973, 1065, 3, 454, 227, 0, 974, 1065, 3, 184, 92, 0, 975, 1065, 3, 498, 249, 0, 976, 1065, 3, 496, 248, 0, 977, 1065, 3, 240, 120, 0, 978, 1065, 3, 506, 253, 0, 979, 1065, 3, 6, 3, 0, 980, 1065, 3, 72, 36, 0, 981, 1065, 3, 112, 56, 0, 982, 1065, 3, 502, 251, 0, 983, 1065, 3, 324, 162, 0, 984, 1065, 3, 70, 35, 0, 985, 1065, 3, 114, 57, 0, 986, 1065, 3, 254, 127, 0, 987, 1065, 3, 186, 93, 0, 988, 1065, 3, 280, 140, 0, 989, 1065, 3, 420, 210, 0, 990, 1065, 3, 500, 250, 0, 991, 1065, 3, 492, 246, 0, 992, 1065, 3, 208, 104, 0, 993, 1065, 3, 214, 107, 0, 994, 1065, 3, 228, 114, 0, 995, 1065, 3, 234, 117, 0, 996, 1065, 3, 364, 182, 0, 997, 1065, 3, 26, 13, 0, 998, 1065, 3, 192, 96, 0, 999, 1065, 3, 296, 148, 0, 1000, 1065, 3, 300, 150, 0, 1001, 1065, 3, 448, 224, 0, 1002, 1065, 3, 302, 151, 0, 1003, 1065, 3, 242, 121, 0, 1004, 1065, 3, 204, 102, 0, 1005, 1065, 3, 30, 15, 0, 1006, 1065, 3, 196, 98, 0, 1007, 1065, 3, 120, 60, 0, 1008, 1065, 3, 452, 226, 0, 1009, 1065, 3, 182, 91, 0, 1010, 1065, 3, 206, 103, 0, 1011, 1065, 3, 424, 212, 0, 1012, 1065, 3, 256, 128, 0, 1013, 1065, 3, 274, 137, 0, 1014, 1065, 3, 8, 4, 0, 1015, 1065, 3, 14, 7, 0, 1016, 1065, 3, 238, 119, 0, 1017, 1065, 3, 480, 240, 0, 1018, 1065, 3, 536, 268, 0, 1019, 1065, 3, 558, 279, 0, 1020, 1065, 3, 282, 141, 0, 1021, 1065, 3, 548, 274, 0, 1022, 1065, 3, 74, 37, 0, 1023, 1065, 3, 418, 209, 0, 1024, 1065, 3, 308, 154, 0, 1025, 1065, 3, 532, 266, 0, 1026, 1065, 3, 520, 260, 0, 1027, 1065, 3, 328, 164, 0, 1028, 1065, 3, 334, 167, 0, 1029, 1065, 3, 348, 174, 0, 1030, 1065, 3, 900, 450, 0, 1031, 1065, 3, 236, 118, 0, 1032, 1065, 3, 358, 179, 0, 1033, 1065, 3, 538, 269, 0, 1034, 1065, 3, 464, 232, 0, 1035, 1065, 3, 194, 97, 0, 1036, 1065, 3, 478, 239, 0, 1037, 1065, 3, 550, 275, 0, 1038, 1065, 3, 460, 230, 0, 1039, 1065, 3, 526, 263, 0, 1040, 1065, 3, 306, 153, 0, 1041, 1065, 3, 428, 214, 0, 1042, 1065, 3, 408, 204, 0, 1043, 1065, 3, 406, 203, 0, 1044, 1065, 3, 410, 205, 0, 1045, 1065, 3, 432, 216, 0, 1046, 1065, 3, 336, 168, 0, 1047, 1065, 3, 350, 175, 0, 1048, 1065, 3, 456, 228, 0, 1049, 1065, 3, 326, 163, 0, 1050, 1065, 3, 560, 280, 0, 1051, 1065, 3, 468, 234, 0, 1052, 1065, 3, 320, 160, 0, 1053, 1065, 3, 466, 233, 0, 1054, 1065, 3, 552, 276, 0, 1055, 1065, 3, 504, 252, 0, 1056, 1065, 3, 60, 30, 0, 1057, 1065, 3, 36, 18, 0, 1058, 1065, 3, 68, 34, 0, 1059, 1065, 3, 476, 238, 0, 1060, 1062, 5, 581, 0, 0, 1061, 1063, 5, 582, 0, 0, 1062, 1061, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1065, 1, 0, 0, 0, 1064, 944, 1, 0, 0, 0, 1064, 945, 1, 0, 0, 0, 1064, 946, 1, 0, 0, 0, 1064, 947, 1, 0, 0, 0, 1064, 948, 1, 0, 0, 0, 1064, 949, 1, 0, 0, 0, 1064, 950, 1, 0, 0, 0, 1064, 951, 1, 0, 0, 0, 1064, 952, 1, 0, 0, 0, 1064, 953, 1, 0, 0, 0, 1064, 954, 1, 0, 0, 0, 1064, 955, 1, 0, 0, 0, 1064, 956, 1, 0, 0, 0, 1064, 957, 1, 0, 0, 0, 1064, 958, 1, 0, 0, 0, 1064, 959, 1, 0, 0, 0, 1064, 960, 1, 0, 0, 0, 1064, 961, 1, 0, 0, 0, 1064, 962, 1, 0, 0, 0, 1064, 963, 1, 0, 0, 0, 1064, 964, 1, 0, 0, 0, 1064, 965, 1, 0, 0, 0, 1064, 966, 1, 0, 0, 0, 1064, 967, 1, 0, 0, 0, 1064, 968, 1, 0, 0, 0, 1064, 969, 1, 0, 0, 0, 1064, 970, 1, 0, 0, 0, 1064, 971, 1, 0, 0, 0, 1064, 972, 1, 0, 0, 0, 1064, 973, 1, 0, 0, 0, 1064, 974, 1, 0, 0, 0, 1064, 975, 1, 0, 0, 0, 1064, 976, 1, 0, 0, 0, 1064, 977, 1, 0, 0, 0, 1064, 978, 1, 0, 0, 0, 1064, 979, 1, 0, 0, 0, 1064, 980, 1, 0, 0, 0, 1064, 981, 1, 0, 0, 0, 1064, 982, 1, 0, 0, 0, 1064, 983, 1, 0, 0, 0, 1064, 984, 1, 0, 0, 0, 1064, 985, 1, 0, 0, 0, 1064, 986, 1, 0, 0, 0, 1064, 987, 1, 0, 0, 0, 1064, 988, 1, 0, 0, 0, 1064, 989, 1, 0, 0, 0, 1064, 990, 1, 0, 0, 0, 1064, 991, 1, 0, 0, 0, 1064, 992, 1, 0, 0, 0, 1064, 993, 1, 0, 0, 0, 1064, 994, 1, 0, 0, 0, 1064, 995, 1, 0, 0, 0, 1064, 996, 1, 0, 0, 0, 1064, 997, 1, 0, 0, 0, 1064, 998, 1, 0, 0, 0, 1064, 999, 1, 0, 0, 0, 1064, 1000, 1, 0, 0, 0, 1064, 1001, 1, 0, 0, 0, 1064, 1002, 1, 0, 0, 0, 1064, 1003, 1, 0, 0, 0, 1064, 1004, 1, 0, 0, 0, 1064, 1005, 1, 0, 0, 0, 1064, 1006, 1, 0, 0, 0, 1064, 1007, 1, 0, 0, 0, 1064, 1008, 1, 0, 0, 0, 1064, 1009, 1, 0, 0, 0, 1064, 1010, 1, 0, 0, 0, 1064, 1011, 1, 0, 0, 0, 1064, 1012, 1, 0, 0, 0, 1064, 1013, 1, 0, 0, 0, 1064, 1014, 1, 0, 0, 0, 1064, 1015, 1, 0, 0, 0, 1064, 1016, 1, 0, 0, 0, 1064, 1017, 1, 0, 0, 0, 1064, 1018, 1, 0, 0, 0, 1064, 1019, 1, 0, 0, 0, 1064, 1020, 1, 0, 0, 0, 1064, 1021, 1, 0, 0, 0, 1064, 1022, 1, 0, 0, 0, 1064, 1023, 1, 0, 0, 0, 1064, 1024, 1, 0, 0, 0, 1064, 1025, 1, 0, 0, 0, 1064, 1026, 1, 0, 0, 0, 1064, 1027, 1, 0, 0, 0, 1064, 1028, 1, 0, 0, 0, 1064, 1029, 1, 0, 0, 0, 1064, 1030, 1, 0, 0, 0, 1064, 1031, 1, 0, 0, 0, 1064, 1032, 1, 0, 0, 0, 1064, 1033, 1, 0, 0, 0, 1064, 1034, 1, 0, 0, 0, 1064, 1035, 1, 0, 0, 0, 1064, 1036, 1, 0, 0, 0, 1064, 1037, 1, 0, 0, 0, 1064, 1038, 1, 0, 0, 0, 1064, 1039, 1, 0, 0, 0, 1064, 1040, 1, 0, 0, 0, 1064, 1041, 1, 0, 0, 0, 1064, 1042, 1, 0, 0, 0, 1064, 1043, 1, 0, 0, 0, 1064, 1044, 1, 0, 0, 0, 1064, 1045, 1, 0, 0, 0, 1064, 1046, 1, 0, 0, 0, 1064, 1047, 1, 0, 0, 0, 1064, 1048, 1, 0, 0, 0, 1064, 1049, 1, 0, 0, 0, 1064, 1050, 1, 0, 0, 0, 1064, 1051, 1, 0, 0, 0, 1064, 1052, 1, 0, 0, 0, 1064, 1053, 1, 0, 0, 0, 1064, 1054, 1, 0, 0, 0, 1064, 1055, 1, 0, 0, 0, 1064, 1056, 1, 0, 0, 0, 1064, 1057, 1, 0, 0, 0, 1064, 1058, 1, 0, 0, 0, 1064, 1059, 1, 0, 0, 0, 1064, 1060, 1, 0, 0, 0, 1065, 5, 1, 0, 0, 0, 1066, 1067, 5, 433, 0, 0, 1067, 1068, 3, 684, 342, 0, 1068, 7, 1, 0, 0, 0, 1069, 1070, 5, 46, 0, 0, 1070, 1071, 5, 318, 0, 0, 1071, 1073, 3, 814, 407, 0, 1072, 1074, 5, 105, 0, 0, 1073, 1072, 1, 0, 0, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1078, 1, 0, 0, 0, 1075, 1077, 3, 12, 6, 0, 1076, 1075, 1, 0, 0, 0, 1077, 1080, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 9, 1, 0, 0, 0, 1080, 1078, 1, 0, 0, 0, 1081, 1084, 5, 287, 0, 0, 1082, 1085, 3, 808, 404, 0, 1083, 1085, 5, 78, 0, 0, 1084, 1082, 1, 0, 0, 0, 1084, 1083, 1, 0, 0, 0, 1085, 1120, 1, 0, 0, 0, 1086, 1087, 7, 0, 0, 0, 1087, 1088, 5, 287, 0, 0, 1088, 1120, 3, 808, 404, 0, 1089, 1120, 5, 228, 0, 0, 1090, 1120, 5, 229, 0, 0, 1091, 1120, 5, 236, 0, 0, 1092, 1120, 5, 237, 0, 0, 1093, 1120, 5, 234, 0, 0, 1094, 1120, 5, 235, 0, 0, 1095, 1120, 5, 232, 0, 0, 1096, 1120, 5, 233, 0, 0, 1097, 1120, 5, 230, 0, 0, 1098, 1120, 5, 231, 0, 0, 1099, 1120, 5, 535, 0, 0, 1100, 1120, 5, 536, 0, 0, 1101, 1120, 5, 537, 0, 0, 1102, 1120, 5, 538, 0, 0, 1103, 1120, 5, 539, 0, 0, 1104, 1120, 5, 540, 0, 0, 1105, 1106, 5, 164, 0, 0, 1106, 1107, 5, 74, 0, 0, 1107, 1120, 3, 812, 406, 0, 1108, 1109, 5, 371, 0, 0, 1109, 1110, 5, 368, 0, 0, 1110, 1120, 3, 808, 404, 0, 1111, 1112, 5, 68, 0, 0, 1112, 1113, 7, 1, 0, 0, 1113, 1120, 3, 784, 392, 0, 1114, 1115, 7, 2, 0, 0, 1115, 1120, 3, 816, 408, 0, 1116, 1117, 5, 134, 0, 0, 1117, 1120, 3, 784, 392, 0, 1118, 1120, 3, 826, 413, 0, 1119, 1081, 1, 0, 0, 0, 1119, 1086, 1, 0, 0, 0, 1119, 1089, 1, 0, 0, 0, 1119, 1090, 1, 0, 0, 0, 1119, 1091, 1, 0, 0, 0, 1119, 1092, 1, 0, 0, 0, 1119, 1093, 1, 0, 0, 0, 1119, 1094, 1, 0, 0, 0, 1119, 1095, 1, 0, 0, 0, 1119, 1096, 1, 0, 0, 0, 1119, 1097, 1, 0, 0, 0, 1119, 1098, 1, 0, 0, 0, 1119, 1099, 1, 0, 0, 0, 1119, 1100, 1, 0, 0, 0, 1119, 1101, 1, 0, 0, 0, 1119, 1102, 1, 0, 0, 0, 1119, 1103, 1, 0, 0, 0, 1119, 1104, 1, 0, 0, 0, 1119, 1105, 1, 0, 0, 0, 1119, 1108, 1, 0, 0, 0, 1119, 1111, 1, 0, 0, 0, 1119, 1114, 1, 0, 0, 0, 1119, 1116, 1, 0, 0, 0, 1119, 1118, 1, 0, 0, 0, 1120, 11, 1, 0, 0, 0, 1121, 1130, 3, 10, 5, 0, 1122, 1123, 5, 348, 0, 0, 1123, 1130, 5, 571, 0, 0, 1124, 1125, 7, 3, 0, 0, 1125, 1130, 3, 816, 408, 0, 1126, 1127, 5, 68, 0, 0, 1127, 1128, 7, 1, 0, 0, 1128, 1130, 3, 816, 408, 0, 1129, 1121, 1, 0, 0, 0, 1129, 1122, 1, 0, 0, 0, 1129, 1124, 1, 0, 0, 0, 1129, 1126, 1, 0, 0, 0, 1130, 13, 1, 0, 0, 0, 1131, 1132, 5, 46, 0, 0, 1132, 1133, 5, 99, 0, 0, 1133, 1135, 3, 814, 407, 0, 1134, 1136, 5, 105, 0, 0, 1135, 1134, 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1140, 1, 0, 0, 0, 1137, 1139, 3, 12, 6, 0, 1138, 1137, 1, 0, 0, 0, 1139, 1142, 1, 0, 0, 0, 1140, 1138, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 15, 1, 0, 0, 0, 1142, 1140, 1, 0, 0, 0, 1143, 1144, 5, 138, 0, 0, 1144, 1145, 7, 2, 0, 0, 1145, 1147, 3, 814, 407, 0, 1146, 1148, 5, 105, 0, 0, 1147, 1146, 1, 0, 0, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1152, 1, 0, 0, 0, 1149, 1151, 3, 10, 5, 0, 1150, 1149, 1, 0, 0, 0, 1151, 1154, 1, 0, 0, 0, 1152, 1150, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 17, 1, 0, 0, 0, 1154, 1152, 1, 0, 0, 0, 1155, 1156, 5, 138, 0, 0, 1156, 1159, 7, 2, 0, 0, 1157, 1160, 5, 30, 0, 0, 1158, 1160, 3, 814, 407, 0, 1159, 1157, 1, 0, 0, 0, 1159, 1158, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1162, 5, 68, 0, 0, 1162, 1163, 5, 175, 0, 0, 1163, 1164, 3, 788, 394, 0, 1164, 1165, 3, 64, 32, 0, 1165, 19, 1, 0, 0, 0, 1166, 1167, 5, 138, 0, 0, 1167, 1168, 5, 442, 0, 0, 1168, 1170, 3, 794, 397, 0, 1169, 1171, 3, 368, 184, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1173, 3, 22, 11, 0, 1173, 21, 1, 0, 0, 0, 1174, 1178, 3, 24, 12, 0, 1175, 1177, 3, 24, 12, 0, 1176, 1175, 1, 0, 0, 0, 1177, 1180, 1, 0, 0, 0, 1178, 1176, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1182, 1, 0, 0, 0, 1180, 1178, 1, 0, 0, 0, 1181, 1183, 5, 315, 0, 0, 1182, 1181, 1, 0, 0, 0, 1182, 1183, 1, 0, 0, 0, 1183, 1201, 1, 0, 0, 0, 1184, 1185, 5, 309, 0, 0, 1185, 1186, 5, 94, 0, 0, 1186, 1201, 3, 792, 396, 0, 1187, 1188, 5, 282, 0, 0, 1188, 1189, 5, 94, 0, 0, 1189, 1201, 3, 814, 407, 0, 1190, 1191, 5, 333, 0, 0, 1191, 1192, 5, 323, 0, 0, 1192, 1201, 3, 32, 16, 0, 1193, 1195, 5, 269, 0, 0, 1194, 1193, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1197, 5, 462, 0, 0, 1197, 1198, 5, 80, 0, 0, 1198, 1199, 5, 204, 0, 0, 1199, 1201, 3, 818, 409, 0, 1200, 1174, 1, 0, 0, 0, 1200, 1184, 1, 0, 0, 0, 1200, 1187, 1, 0, 0, 0, 1200, 1190, 1, 0, 0, 0, 1200, 1194, 1, 0, 0, 0, 1201, 23, 1, 0, 0, 0, 1202, 1245, 5, 222, 0, 0, 1203, 1245, 5, 338, 0, 0, 1204, 1245, 5, 377, 0, 0, 1205, 1207, 5, 77, 0, 0, 1206, 1205, 1, 0, 0, 0, 1206, 1207, 1, 0, 0, 0, 1207, 1208, 1, 0, 0, 0, 1208, 1245, 5, 250, 0, 0, 1209, 1211, 5, 205, 0, 0, 1210, 1209, 1, 0, 0, 0, 1210, 1211, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 5, 327, 0, 0, 1213, 1220, 5, 243, 0, 0, 1214, 1216, 5, 205, 0, 0, 1215, 1214, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1218, 5, 327, 0, 0, 1218, 1220, 5, 181, 0, 0, 1219, 1210, 1, 0, 0, 0, 1219, 1215, 1, 0, 0, 0, 1220, 1245, 1, 0, 0, 0, 1221, 1222, 5, 460, 0, 0, 1222, 1245, 7, 4, 0, 0, 1223, 1224, 5, 170, 0, 0, 1224, 1245, 3, 824, 412, 0, 1225, 1226, 5, 320, 0, 0, 1226, 1245, 3, 818, 409, 0, 1227, 1228, 5, 333, 0, 0, 1228, 1229, 3, 818, 409, 0, 1229, 1232, 7, 5, 0, 0, 1230, 1233, 3, 818, 409, 0, 1231, 1233, 5, 53, 0, 0, 1232, 1230, 1, 0, 0, 0, 1232, 1231, 1, 0, 0, 0, 1233, 1245, 1, 0, 0, 0, 1234, 1235, 5, 333, 0, 0, 1235, 1236, 3, 818, 409, 0, 1236, 1237, 5, 64, 0, 0, 1237, 1238, 5, 434, 0, 0, 1238, 1245, 1, 0, 0, 0, 1239, 1242, 5, 313, 0, 0, 1240, 1243, 3, 818, 409, 0, 1241, 1243, 5, 30, 0, 0, 1242, 1240, 1, 0, 0, 0, 1242, 1241, 1, 0, 0, 0, 1243, 1245, 1, 0, 0, 0, 1244, 1202, 1, 0, 0, 0, 1244, 1203, 1, 0, 0, 0, 1244, 1204, 1, 0, 0, 0, 1244, 1206, 1, 0, 0, 0, 1244, 1219, 1, 0, 0, 0, 1244, 1221, 1, 0, 0, 0, 1244, 1223, 1, 0, 0, 0, 1244, 1225, 1, 0, 0, 0, 1244, 1227, 1, 0, 0, 0, 1244, 1234, 1, 0, 0, 0, 1244, 1239, 1, 0, 0, 0, 1245, 25, 1, 0, 0, 0, 1246, 1247, 5, 46, 0, 0, 1247, 1248, 5, 66, 0, 0, 1248, 1250, 3, 814, 407, 0, 1249, 1251, 5, 105, 0, 0, 1250, 1249, 1, 0, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1255, 1, 0, 0, 0, 1252, 1254, 3, 12, 6, 0, 1253, 1252, 1, 0, 0, 0, 1254, 1257, 1, 0, 0, 0, 1255, 1253, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 27, 1, 0, 0, 0, 1257, 1255, 1, 0, 0, 0, 1258, 1259, 5, 138, 0, 0, 1259, 1260, 5, 66, 0, 0, 1260, 1261, 3, 814, 407, 0, 1261, 1262, 7, 6, 0, 0, 1262, 1263, 5, 99, 0, 0, 1263, 1264, 3, 816, 408, 0, 1264, 29, 1, 0, 0, 0, 1265, 1266, 5, 46, 0, 0, 1266, 1268, 5, 323, 0, 0, 1267, 1269, 3, 294, 147, 0, 1268, 1267, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1276, 1, 0, 0, 0, 1270, 1272, 3, 32, 16, 0, 1271, 1270, 1, 0, 0, 0, 1271, 1272, 1, 0, 0, 0, 1272, 1273, 1, 0, 0, 0, 1273, 1274, 5, 106, 0, 0, 1274, 1277, 3, 814, 407, 0, 1275, 1277, 3, 32, 16, 0, 1276, 1271, 1, 0, 0, 0, 1276, 1275, 1, 0, 0, 0, 1277, 1281, 1, 0, 0, 0, 1278, 1280, 3, 34, 17, 0, 1279, 1278, 1, 0, 0, 0, 1280, 1283, 1, 0, 0, 0, 1281, 1279, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 31, 1, 0, 0, 0, 1283, 1281, 1, 0, 0, 0, 1284, 1285, 3, 316, 158, 0, 1285, 33, 1, 0, 0, 0, 1286, 1293, 3, 120, 60, 0, 1287, 1293, 3, 358, 179, 0, 1288, 1293, 3, 196, 98, 0, 1289, 1293, 3, 256, 128, 0, 1290, 1293, 3, 334, 167, 0, 1291, 1293, 3, 476, 238, 0, 1292, 1286, 1, 0, 0, 0, 1292, 1287, 1, 0, 0, 0, 1292, 1288, 1, 0, 0, 0, 1292, 1289, 1, 0, 0, 0, 1292, 1290, 1, 0, 0, 0, 1292, 1291, 1, 0, 0, 0, 1293, 35, 1, 0, 0, 0, 1294, 1296, 5, 333, 0, 0, 1295, 1297, 7, 7, 0, 0, 1296, 1295, 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1299, 3, 38, 19, 0, 1299, 37, 1, 0, 0, 0, 1300, 1301, 5, 356, 0, 0, 1301, 1309, 3, 474, 237, 0, 1302, 1303, 5, 332, 0, 0, 1303, 1304, 5, 154, 0, 0, 1304, 1305, 5, 36, 0, 0, 1305, 1306, 5, 356, 0, 0, 1306, 1309, 3, 474, 237, 0, 1307, 1309, 3, 42, 21, 0, 1308, 1300, 1, 0, 0, 0, 1308, 1302, 1, 0, 0, 0, 1308, 1307, 1, 0, 0, 0, 1309, 39, 1, 0, 0, 0, 1310, 1313, 5, 30, 0, 0, 1311, 1313, 3, 44, 22, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1311, 1, 0, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, 1316, 7, 5, 0, 0, 1315, 1314, 1, 0, 0, 0, 1315, 1316, 1, 0, 0, 0, 1316, 1319, 1, 0, 0, 0, 1317, 1320, 5, 53, 0, 0, 1318, 1320, 3, 46, 23, 0, 1319, 1317, 1, 0, 0, 0, 1319, 1318, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 41, 1, 0, 0, 0, 1321, 1322, 5, 418, 0, 0, 1322, 1323, 5, 386, 0, 0, 1323, 1350, 3, 56, 28, 0, 1324, 1325, 5, 152, 0, 0, 1325, 1350, 3, 808, 404, 0, 1326, 1327, 5, 323, 0, 0, 1327, 1350, 3, 790, 395, 0, 1328, 1331, 5, 267, 0, 0, 1329, 1332, 3, 808, 404, 0, 1330, 1332, 5, 53, 0, 0, 1331, 1329, 1, 0, 0, 0, 1331, 1330, 1, 0, 0, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1350, 1, 0, 0, 0, 1333, 1334, 5, 318, 0, 0, 1334, 1350, 3, 58, 29, 0, 1335, 1336, 5, 332, 0, 0, 1336, 1337, 5, 106, 0, 0, 1337, 1350, 3, 58, 29, 0, 1338, 1339, 5, 383, 0, 0, 1339, 1340, 5, 279, 0, 0, 1340, 1350, 3, 696, 348, 0, 1341, 1342, 5, 356, 0, 0, 1342, 1343, 5, 337, 0, 0, 1343, 1350, 3, 808, 404, 0, 1344, 1345, 3, 44, 22, 0, 1345, 1346, 5, 64, 0, 0, 1346, 1347, 5, 434, 0, 0, 1347, 1350, 1, 0, 0, 0, 1348, 1350, 3, 40, 20, 0, 1349, 1321, 1, 0, 0, 0, 1349, 1324, 1, 0, 0, 0, 1349, 1326, 1, 0, 0, 0, 1349, 1328, 1, 0, 0, 0, 1349, 1333, 1, 0, 0, 0, 1349, 1335, 1, 0, 0, 0, 1349, 1338, 1, 0, 0, 0, 1349, 1341, 1, 0, 0, 0, 1349, 1344, 1, 0, 0, 0, 1349, 1348, 1, 0, 0, 0, 1350, 43, 1, 0, 0, 0, 1351, 1356, 3, 818, 409, 0, 1352, 1353, 5, 11, 0, 0, 1353, 1355, 3, 818, 409, 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, 45, 1, 0, 0, 0, 1358, 1356, 1, 0, 0, 0, 1359, 1364, 3, 48, 24, 0, 1360, 1361, 5, 6, 0, 0, 1361, 1363, 3, 48, 24, 0, 1362, 1360, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 47, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1370, 3, 54, 27, 0, 1368, 1370, 3, 202, 101, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1368, 1, 0, 0, 0, 1370, 49, 1, 0, 0, 0, 1371, 1372, 5, 300, 0, 0, 1372, 1377, 7, 8, 0, 0, 1373, 1374, 5, 310, 0, 0, 1374, 1377, 5, 300, 0, 0, 1375, 1377, 5, 330, 0, 0, 1376, 1371, 1, 0, 0, 0, 1376, 1373, 1, 0, 0, 0, 1376, 1375, 1, 0, 0, 0, 1377, 51, 1, 0, 0, 0, 1378, 1385, 5, 96, 0, 0, 1379, 1385, 5, 60, 0, 0, 1380, 1385, 5, 80, 0, 0, 1381, 1385, 3, 800, 400, 0, 1382, 1385, 3, 832, 416, 0, 1383, 1385, 3, 808, 404, 0, 1384, 1378, 1, 0, 0, 0, 1384, 1379, 1, 0, 0, 0, 1384, 1380, 1, 0, 0, 0, 1384, 1381, 1, 0, 0, 0, 1384, 1382, 1, 0, 0, 0, 1384, 1383, 1, 0, 0, 0, 1385, 53, 1, 0, 0, 0, 1386, 1391, 5, 96, 0, 0, 1387, 1391, 5, 60, 0, 0, 1388, 1391, 5, 80, 0, 0, 1389, 1391, 3, 58, 29, 0, 1390, 1386, 1, 0, 0, 0, 1390, 1387, 1, 0, 0, 0, 1390, 1388, 1, 0, 0, 0, 1390, 1389, 1, 0, 0, 0, 1391, 55, 1, 0, 0, 0, 1392, 1407, 3, 808, 404, 0, 1393, 1407, 5, 53, 0, 0, 1394, 1407, 3, 826, 413, 0, 1395, 1396, 5, 403, 0, 0, 1396, 1398, 3, 808, 404, 0, 1397, 1399, 3, 668, 334, 0, 1398, 1397, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1407, 1, 0, 0, 0, 1400, 1401, 5, 403, 0, 0, 1401, 1402, 3, 660, 330, 0, 1402, 1403, 3, 808, 404, 0, 1403, 1407, 1, 0, 0, 0, 1404, 1407, 3, 202, 101, 0, 1405, 1407, 5, 254, 0, 0, 1406, 1392, 1, 0, 0, 0, 1406, 1393, 1, 0, 0, 0, 1406, 1394, 1, 0, 0, 0, 1406, 1395, 1, 0, 0, 0, 1406, 1400, 1, 0, 0, 0, 1406, 1404, 1, 0, 0, 0, 1406, 1405, 1, 0, 0, 0, 1407, 57, 1, 0, 0, 0, 1408, 1411, 3, 822, 411, 0, 1409, 1411, 3, 808, 404, 0, 1410, 1408, 1, 0, 0, 0, 1410, 1409, 1, 0, 0, 0, 1411, 59, 1, 0, 0, 0, 1412, 1413, 5, 313, 0, 0, 1413, 1414, 3, 62, 31, 0, 1414, 61, 1, 0, 0, 0, 1415, 1416, 5, 418, 0, 0, 1416, 1425, 5, 386, 0, 0, 1417, 1418, 5, 356, 0, 0, 1418, 1419, 5, 244, 0, 0, 1419, 1425, 5, 251, 0, 0, 1420, 1421, 5, 332, 0, 0, 1421, 1425, 5, 106, 0, 0, 1422, 1425, 5, 30, 0, 0, 1423, 1425, 3, 44, 22, 0, 1424, 1415, 1, 0, 0, 0, 1424, 1417, 1, 0, 0, 0, 1424, 1420, 1, 0, 0, 0, 1424, 1422, 1, 0, 0, 0, 1424, 1423, 1, 0, 0, 0, 1425, 63, 1, 0, 0, 0, 1426, 1427, 5, 333, 0, 0, 1427, 1430, 3, 38, 19, 0, 1428, 1430, 3, 60, 30, 0, 1429, 1426, 1, 0, 0, 0, 1429, 1428, 1, 0, 0, 0, 1430, 65, 1, 0, 0, 0, 1431, 1432, 5, 333, 0, 0, 1432, 1435, 3, 42, 21, 0, 1433, 1435, 3, 60, 30, 0, 1434, 1431, 1, 0, 0, 0, 1434, 1433, 1, 0, 0, 0, 1435, 67, 1, 0, 0, 0, 1436, 1446, 5, 335, 0, 0, 1437, 1447, 3, 44, 22, 0, 1438, 1439, 5, 418, 0, 0, 1439, 1447, 5, 386, 0, 0, 1440, 1441, 5, 356, 0, 0, 1441, 1442, 5, 244, 0, 0, 1442, 1447, 5, 251, 0, 0, 1443, 1444, 5, 332, 0, 0, 1444, 1447, 5, 106, 0, 0, 1445, 1447, 5, 30, 0, 0, 1446, 1437, 1, 0, 0, 0, 1446, 1438, 1, 0, 0, 0, 1446, 1440, 1, 0, 0, 0, 1446, 1443, 1, 0, 0, 0, 1446, 1445, 1, 0, 0, 0, 1447, 69, 1, 0, 0, 0, 1448, 1449, 5, 333, 0, 0, 1449, 1452, 5, 165, 0, 0, 1450, 1453, 5, 30, 0, 0, 1451, 1453, 3, 760, 380, 0, 1452, 1450, 1, 0, 0, 0, 1452, 1451, 1, 0, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1455, 7, 9, 0, 0, 1455, 71, 1, 0, 0, 0, 1456, 1457, 5, 155, 0, 0, 1457, 73, 1, 0, 0, 0, 1458, 1459, 5, 187, 0, 0, 1459, 1460, 7, 10, 0, 0, 1460, 75, 1, 0, 0, 0, 1461, 1462, 5, 138, 0, 0, 1462, 1464, 5, 92, 0, 0, 1463, 1465, 3, 422, 211, 0, 1464, 1463, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1469, 3, 624, 312, 0, 1467, 1470, 3, 78, 39, 0, 1468, 1470, 3, 88, 44, 0, 1469, 1467, 1, 0, 0, 0, 1469, 1468, 1, 0, 0, 0, 1470, 1583, 1, 0, 0, 0, 1471, 1472, 5, 138, 0, 0, 1472, 1473, 5, 92, 0, 0, 1473, 1474, 5, 30, 0, 0, 1474, 1475, 5, 68, 0, 0, 1475, 1479, 3, 176, 88, 0, 1476, 1477, 5, 281, 0, 0, 1477, 1478, 5, 147, 0, 0, 1478, 1480, 3, 816, 408, 0, 1479, 1476, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1482, 5, 333, 0, 0, 1482, 1483, 5, 351, 0, 0, 1483, 1485, 3, 768, 384, 0, 1484, 1486, 5, 272, 0, 0, 1485, 1484, 1, 0, 0, 0, 1485, 1486, 1, 0, 0, 0, 1486, 1583, 1, 0, 0, 0, 1487, 1488, 5, 138, 0, 0, 1488, 1490, 5, 92, 0, 0, 1489, 1491, 3, 422, 211, 0, 1490, 1489, 1, 0, 0, 0, 1490, 1491, 1, 0, 0, 0, 1491, 1492, 1, 0, 0, 0, 1492, 1493, 3, 774, 387, 0, 1493, 1498, 3, 90, 45, 0, 1494, 1495, 5, 62, 0, 0, 1495, 1496, 5, 422, 0, 0, 1496, 1499, 3, 80, 40, 0, 1497, 1499, 5, 53, 0, 0, 1498, 1494, 1, 0, 0, 0, 1498, 1497, 1, 0, 0, 0, 1499, 1583, 1, 0, 0, 0, 1500, 1501, 5, 138, 0, 0, 1501, 1503, 5, 92, 0, 0, 1502, 1504, 3, 422, 211, 0, 1503, 1502, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1506, 3, 774, 387, 0, 1506, 1507, 5, 436, 0, 0, 1507, 1508, 5, 285, 0, 0, 1508, 1510, 3, 780, 390, 0, 1509, 1511, 7, 11, 0, 0, 1510, 1509, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 1583, 1, 0, 0, 0, 1512, 1513, 5, 138, 0, 0, 1513, 1515, 5, 226, 0, 0, 1514, 1516, 3, 422, 211, 0, 1515, 1514, 1, 0, 0, 0, 1515, 1516, 1, 0, 0, 0, 1516, 1517, 1, 0, 0, 0, 1517, 1520, 3, 780, 390, 0, 1518, 1521, 3, 78, 39, 0, 1519, 1521, 3, 90, 45, 0, 1520, 1518, 1, 0, 0, 0, 1520, 1519, 1, 0, 0, 0, 1521, 1583, 1, 0, 0, 0, 1522, 1523, 5, 138, 0, 0, 1523, 1524, 5, 226, 0, 0, 1524, 1525, 5, 30, 0, 0, 1525, 1526, 5, 68, 0, 0, 1526, 1530, 3, 176, 88, 0, 1527, 1528, 5, 281, 0, 0, 1528, 1529, 5, 147, 0, 0, 1529, 1531, 3, 816, 408, 0, 1530, 1527, 1, 0, 0, 0, 1530, 1531, 1, 0, 0, 0, 1531, 1532, 1, 0, 0, 0, 1532, 1533, 5, 333, 0, 0, 1533, 1535, 3, 176, 88, 0, 1534, 1536, 5, 272, 0, 0, 1535, 1534, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1583, 1, 0, 0, 0, 1537, 1538, 5, 138, 0, 0, 1538, 1540, 5, 328, 0, 0, 1539, 1541, 3, 422, 211, 0, 1540, 1539, 1, 0, 0, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1542, 1, 0, 0, 0, 1542, 1543, 3, 780, 390, 0, 1543, 1544, 3, 78, 39, 0, 1544, 1583, 1, 0, 0, 0, 1545, 1547, 5, 138, 0, 0, 1546, 1548, 5, 259, 0, 0, 1547, 1546, 1, 0, 0, 0, 1547, 1548, 1, 0, 0, 0, 1548, 1549, 1, 0, 0, 0, 1549, 1551, 5, 376, 0, 0, 1550, 1552, 3, 422, 211, 0, 1551, 1550, 1, 0, 0, 0, 1551, 1552, 1, 0, 0, 0, 1552, 1553, 1, 0, 0, 0, 1553, 1554, 3, 778, 389, 0, 1554, 1555, 3, 78, 39, 0, 1555, 1583, 1, 0, 0, 0, 1556, 1557, 5, 138, 0, 0, 1557, 1558, 5, 259, 0, 0, 1558, 1559, 5, 376, 0, 0, 1559, 1560, 5, 30, 0, 0, 1560, 1561, 5, 68, 0, 0, 1561, 1565, 3, 176, 88, 0, 1562, 1563, 5, 281, 0, 0, 1563, 1564, 5, 147, 0, 0, 1564, 1566, 3, 816, 408, 0, 1565, 1562, 1, 0, 0, 0, 1565, 1566, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 1568, 5, 333, 0, 0, 1568, 1569, 5, 351, 0, 0, 1569, 1571, 3, 768, 384, 0, 1570, 1572, 5, 272, 0, 0, 1571, 1570, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1583, 1, 0, 0, 0, 1573, 1574, 5, 138, 0, 0, 1574, 1575, 5, 63, 0, 0, 1575, 1577, 5, 92, 0, 0, 1576, 1578, 3, 422, 211, 0, 1577, 1576, 1, 0, 0, 0, 1577, 1578, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 1580, 3, 624, 312, 0, 1580, 1581, 3, 78, 39, 0, 1581, 1583, 1, 0, 0, 0, 1582, 1461, 1, 0, 0, 0, 1582, 1471, 1, 0, 0, 0, 1582, 1487, 1, 0, 0, 0, 1582, 1500, 1, 0, 0, 0, 1582, 1512, 1, 0, 0, 0, 1582, 1522, 1, 0, 0, 0, 1582, 1537, 1, 0, 0, 0, 1582, 1545, 1, 0, 0, 0, 1582, 1556, 1, 0, 0, 0, 1582, 1573, 1, 0, 0, 0, 1583, 77, 1, 0, 0, 0, 1584, 1589, 3, 92, 46, 0, 1585, 1586, 5, 6, 0, 0, 1586, 1588, 3, 92, 46, 0, 1587, 1585, 1, 0, 0, 0, 1588, 1591, 1, 0, 0, 0, 1589, 1587, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 79, 1, 0, 0, 0, 1591, 1589, 1, 0, 0, 0, 1592, 1593, 5, 68, 0, 0, 1593, 1602, 3, 534, 267, 0, 1594, 1595, 5, 64, 0, 0, 1595, 1596, 3, 82, 41, 0, 1596, 1597, 5, 94, 0, 0, 1597, 1598, 3, 82, 41, 0, 1598, 1602, 1, 0, 0, 0, 1599, 1600, 5, 105, 0, 0, 1600, 1602, 3, 86, 43, 0, 1601, 1592, 1, 0, 0, 0, 1601, 1594, 1, 0, 0, 0, 1601, 1599, 1, 0, 0, 0, 1602, 81, 1, 0, 0, 0, 1603, 1604, 5, 2, 0, 0, 1604, 1609, 3, 84, 42, 0, 1605, 1606, 5, 6, 0, 0, 1606, 1608, 3, 84, 42, 0, 1607, 1605, 1, 0, 0, 0, 1608, 1611, 1, 0, 0, 0, 1609, 1607, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1612, 1, 0, 0, 0, 1611, 1609, 1, 0, 0, 0, 1612, 1613, 5, 3, 0, 0, 1613, 83, 1, 0, 0, 0, 1614, 1618, 3, 534, 267, 0, 1615, 1618, 5, 262, 0, 0, 1616, 1618, 5, 260, 0, 0, 1617, 1614, 1, 0, 0, 0, 1617, 1615, 1, 0, 0, 0, 1617, 1616, 1, 0, 0, 0, 1618, 85, 1, 0, 0, 0, 1619, 1620, 5, 2, 0, 0, 1620, 1621, 5, 533, 0, 0, 1621, 1622, 3, 202, 101, 0, 1622, 1623, 5, 6, 0, 0, 1623, 1624, 5, 534, 0, 0, 1624, 1625, 3, 202, 101, 0, 1625, 1626, 5, 3, 0, 0, 1626, 87, 1, 0, 0, 0, 1627, 1628, 3, 90, 45, 0, 1628, 1629, 3, 106, 53, 0, 1629, 1634, 1, 0, 0, 0, 1630, 1631, 5, 436, 0, 0, 1631, 1632, 5, 285, 0, 0, 1632, 1634, 3, 780, 390, 0, 1633, 1627, 1, 0, 0, 0, 1633, 1630, 1, 0, 0, 0, 1634, 89, 1, 0, 0, 0, 1635, 1636, 5, 435, 0, 0, 1636, 1637, 5, 285, 0, 0, 1637, 1638, 3, 780, 390, 0, 1638, 91, 1, 0, 0, 0, 1639, 1642, 5, 133, 0, 0, 1640, 1641, 5, 45, 0, 0, 1641, 1643, 3, 818, 409, 0, 1642, 1640, 1, 0, 0, 0, 1642, 1643, 1, 0, 0, 0, 1643, 1644, 1, 0, 0, 0, 1644, 1873, 3, 142, 71, 0, 1645, 1646, 5, 138, 0, 0, 1646, 1647, 5, 45, 0, 0, 1647, 1651, 3, 818, 409, 0, 1648, 1650, 3, 272, 136, 0, 1649, 1648, 1, 0, 0, 0, 1650, 1653, 1, 0, 0, 0, 1651, 1649, 1, 0, 0, 0, 1651, 1652, 1, 0, 0, 0, 1652, 1873, 1, 0, 0, 0, 1653, 1651, 1, 0, 0, 0, 1654, 1655, 5, 372, 0, 0, 1655, 1656, 5, 45, 0, 0, 1656, 1873, 3, 818, 409, 0, 1657, 1658, 5, 191, 0, 0, 1658, 1660, 5, 45, 0, 0, 1659, 1661, 3, 422, 211, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1664, 3, 818, 409, 0, 1663, 1665, 3, 96, 48, 0, 1664, 1663, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1873, 1, 0, 0, 0, 1666, 1667, 5, 333, 0, 0, 1667, 1668, 5, 379, 0, 0, 1668, 1873, 7, 12, 0, 0, 1669, 1670, 5, 158, 0, 0, 1670, 1671, 5, 80, 0, 0, 1671, 1873, 3, 818, 409, 0, 1672, 1673, 5, 333, 0, 0, 1673, 1873, 7, 13, 0, 0, 1674, 1676, 5, 193, 0, 0, 1675, 1677, 7, 14, 0, 0, 1676, 1675, 1, 0, 0, 0, 1676, 1677, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 1873, 5, 357, 0, 0, 1679, 1680, 5, 186, 0, 0, 1680, 1684, 5, 357, 0, 0, 1681, 1685, 5, 30, 0, 0, 1682, 1685, 5, 99, 0, 0, 1683, 1685, 3, 818, 409, 0, 1684, 1681, 1, 0, 0, 0, 1684, 1682, 1, 0, 0, 0, 1684, 1683, 1, 0, 0, 0, 1685, 1873, 1, 0, 0, 0, 1686, 1687, 5, 193, 0, 0, 1687, 1688, 7, 14, 0, 0, 1688, 1689, 5, 321, 0, 0, 1689, 1873, 3, 818, 409, 0, 1690, 1691, 5, 186, 0, 0, 1691, 1692, 5, 321, 0, 0, 1692, 1873, 3, 818, 409, 0, 1693, 1695, 5, 269, 0, 0, 1694, 1693, 1, 0, 0, 0, 1694, 1695, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 1697, 5, 228, 0, 0, 1697, 1873, 3, 780, 390, 0, 1698, 1699, 5, 275, 0, 0, 1699, 1873, 3, 316, 158, 0, 1700, 1701, 5, 77, 0, 0, 1701, 1873, 5, 275, 0, 0, 1702, 1703, 5, 282, 0, 0, 1703, 1704, 5, 94, 0, 0, 1704, 1873, 3, 814, 407, 0, 1705, 1706, 5, 333, 0, 0, 1706, 1707, 5, 351, 0, 0, 1707, 1873, 3, 768, 384, 0, 1708, 1709, 5, 312, 0, 0, 1709, 1714, 5, 219, 0, 0, 1710, 1715, 5, 270, 0, 0, 1711, 1715, 5, 113, 0, 0, 1712, 1715, 5, 53, 0, 0, 1713, 1715, 3, 180, 90, 0, 1714, 1710, 1, 0, 0, 0, 1714, 1711, 1, 0, 0, 0, 1714, 1712, 1, 0, 0, 0, 1714, 1713, 1, 0, 0, 0, 1715, 1873, 1, 0, 0, 0, 1716, 1723, 5, 193, 0, 0, 1717, 1723, 5, 186, 0, 0, 1718, 1720, 5, 269, 0, 0, 1719, 1718, 1, 0, 0, 0, 1719, 1720, 1, 0, 0, 0, 1720, 1721, 1, 0, 0, 0, 1721, 1723, 5, 209, 0, 0, 1722, 1716, 1, 0, 0, 0, 1722, 1717, 1, 0, 0, 0, 1722, 1719, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1725, 5, 414, 0, 0, 1725, 1726, 5, 251, 0, 0, 1726, 1873, 5, 327, 0, 0, 1727, 1729, 5, 191, 0, 0, 1728, 1730, 5, 44, 0, 0, 1729, 1728, 1, 0, 0, 0, 1729, 1730, 1, 0, 0, 0, 1730, 1732, 1, 0, 0, 0, 1731, 1733, 3, 422, 211, 0, 1732, 1731, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1734, 1, 0, 0, 0, 1734, 1736, 3, 800, 400, 0, 1735, 1737, 3, 96, 48, 0, 1736, 1735, 1, 0, 0, 0, 1736, 1737, 1, 0, 0, 0, 1737, 1873, 1, 0, 0, 0, 1738, 1740, 5, 133, 0, 0, 1739, 1741, 5, 44, 0, 0, 1740, 1739, 1, 0, 0, 0, 1740, 1741, 1, 0, 0, 0, 1741, 1743, 1, 0, 0, 0, 1742, 1744, 3, 294, 147, 0, 1743, 1742, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1873, 3, 132, 66, 0, 1746, 1748, 5, 138, 0, 0, 1747, 1749, 5, 44, 0, 0, 1748, 1747, 1, 0, 0, 0, 1748, 1749, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1753, 3, 800, 400, 0, 1751, 1754, 3, 94, 47, 0, 1752, 1754, 3, 222, 111, 0, 1753, 1751, 1, 0, 0, 0, 1753, 1752, 1, 0, 0, 0, 1754, 1873, 1, 0, 0, 0, 1755, 1757, 5, 138, 0, 0, 1756, 1758, 5, 44, 0, 0, 1757, 1756, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1759, 1, 0, 0, 0, 1759, 1760, 3, 800, 400, 0, 1760, 1761, 7, 15, 0, 0, 1761, 1762, 5, 77, 0, 0, 1762, 1763, 5, 78, 0, 0, 1763, 1873, 1, 0, 0, 0, 1764, 1766, 5, 138, 0, 0, 1765, 1767, 5, 44, 0, 0, 1766, 1765, 1, 0, 0, 0, 1766, 1767, 1, 0, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1769, 3, 800, 400, 0, 1769, 1770, 5, 191, 0, 0, 1770, 1772, 5, 437, 0, 0, 1771, 1773, 3, 422, 211, 0, 1772, 1771, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1873, 1, 0, 0, 0, 1774, 1776, 5, 138, 0, 0, 1775, 1777, 5, 44, 0, 0, 1776, 1775, 1, 0, 0, 0, 1776, 1777, 1, 0, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1779, 3, 800, 400, 0, 1779, 1780, 5, 333, 0, 0, 1780, 1781, 5, 342, 0, 0, 1781, 1782, 3, 812, 406, 0, 1782, 1873, 1, 0, 0, 0, 1783, 1785, 5, 138, 0, 0, 1784, 1786, 5, 44, 0, 0, 1785, 1784, 1, 0, 0, 0, 1785, 1786, 1, 0, 0, 0, 1786, 1787, 1, 0, 0, 0, 1787, 1789, 3, 800, 400, 0, 1788, 1783, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1790, 1791, 7, 16, 0, 0, 1791, 1873, 3, 100, 50, 0, 1792, 1794, 5, 138, 0, 0, 1793, 1795, 5, 44, 0, 0, 1794, 1793, 1, 0, 0, 0, 1794, 1795, 1, 0, 0, 0, 1795, 1796, 1, 0, 0, 0, 1796, 1797, 3, 800, 400, 0, 1797, 1798, 5, 333, 0, 0, 1798, 1799, 5, 345, 0, 0, 1799, 1800, 3, 818, 409, 0, 1800, 1873, 1, 0, 0, 0, 1801, 1803, 5, 138, 0, 0, 1802, 1804, 5, 44, 0, 0, 1803, 1802, 1, 0, 0, 0, 1803, 1804, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1806, 3, 800, 400, 0, 1806, 1807, 5, 133, 0, 0, 1807, 1808, 5, 438, 0, 0, 1808, 1809, 3, 138, 69, 0, 1809, 1810, 5, 36, 0, 0, 1810, 1819, 5, 219, 0, 0, 1811, 1813, 5, 2, 0, 0, 1812, 1814, 3, 200, 100, 0, 1813, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1815, 1816, 1, 0, 0, 0, 1816, 1817, 1, 0, 0, 0, 1817, 1818, 5, 3, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1811, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1873, 1, 0, 0, 0, 1821, 1823, 5, 138, 0, 0, 1822, 1824, 5, 44, 0, 0, 1823, 1822, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 1839, 3, 800, 400, 0, 1826, 1831, 5, 314, 0, 0, 1827, 1829, 5, 105, 0, 0, 1828, 1827, 1, 0, 0, 0, 1828, 1829, 1, 0, 0, 0, 1829, 1830, 1, 0, 0, 0, 1830, 1832, 3, 202, 101, 0, 1831, 1828, 1, 0, 0, 0, 1831, 1832, 1, 0, 0, 0, 1832, 1840, 1, 0, 0, 0, 1833, 1837, 5, 333, 0, 0, 1834, 1838, 3, 200, 100, 0, 1835, 1836, 5, 438, 0, 0, 1836, 1838, 3, 138, 69, 0, 1837, 1834, 1, 0, 0, 0, 1837, 1835, 1, 0, 0, 0, 1838, 1840, 1, 0, 0, 0, 1839, 1826, 1, 0, 0, 0, 1839, 1833, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 1839, 1, 0, 0, 0, 1841, 1842, 1, 0, 0, 0, 1842, 1873, 1, 0, 0, 0, 1843, 1845, 5, 138, 0, 0, 1844, 1846, 5, 44, 0, 0, 1845, 1844, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 1847, 1, 0, 0, 0, 1847, 1848, 3, 800, 400, 0, 1848, 1849, 5, 191, 0, 0, 1849, 1851, 5, 219, 0, 0, 1850, 1852, 3, 422, 211, 0, 1851, 1850, 1, 0, 0, 0, 1851, 1852, 1, 0, 0, 0, 1852, 1873, 1, 0, 0, 0, 1853, 1855, 5, 138, 0, 0, 1854, 1856, 5, 44, 0, 0, 1855, 1854, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 1857, 1, 0, 0, 0, 1857, 1860, 3, 800, 400, 0, 1858, 1859, 5, 333, 0, 0, 1859, 1861, 5, 174, 0, 0, 1860, 1858, 1, 0, 0, 0, 1860, 1861, 1, 0, 0, 0, 1861, 1862, 1, 0, 0, 0, 1862, 1863, 5, 360, 0, 0, 1863, 1865, 3, 652, 326, 0, 1864, 1866, 3, 98, 49, 0, 1865, 1864, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1869, 1, 0, 0, 0, 1867, 1868, 5, 100, 0, 0, 1868, 1870, 3, 674, 337, 0, 1869, 1867, 1, 0, 0, 0, 1869, 1870, 1, 0, 0, 0, 1870, 1873, 1, 0, 0, 0, 1871, 1873, 3, 222, 111, 0, 1872, 1639, 1, 0, 0, 0, 1872, 1645, 1, 0, 0, 0, 1872, 1654, 1, 0, 0, 0, 1872, 1657, 1, 0, 0, 0, 1872, 1666, 1, 0, 0, 0, 1872, 1669, 1, 0, 0, 0, 1872, 1672, 1, 0, 0, 0, 1872, 1674, 1, 0, 0, 0, 1872, 1679, 1, 0, 0, 0, 1872, 1686, 1, 0, 0, 0, 1872, 1690, 1, 0, 0, 0, 1872, 1694, 1, 0, 0, 0, 1872, 1698, 1, 0, 0, 0, 1872, 1700, 1, 0, 0, 0, 1872, 1702, 1, 0, 0, 0, 1872, 1705, 1, 0, 0, 0, 1872, 1708, 1, 0, 0, 0, 1872, 1722, 1, 0, 0, 0, 1872, 1727, 1, 0, 0, 0, 1872, 1738, 1, 0, 0, 0, 1872, 1746, 1, 0, 0, 0, 1872, 1755, 1, 0, 0, 0, 1872, 1764, 1, 0, 0, 0, 1872, 1774, 1, 0, 0, 0, 1872, 1788, 1, 0, 0, 0, 1872, 1792, 1, 0, 0, 0, 1872, 1801, 1, 0, 0, 0, 1872, 1821, 1, 0, 0, 0, 1872, 1843, 1, 0, 0, 0, 1872, 1853, 1, 0, 0, 0, 1872, 1871, 1, 0, 0, 0, 1873, 93, 1, 0, 0, 0, 1874, 1875, 5, 333, 0, 0, 1875, 1876, 5, 53, 0, 0, 1876, 1880, 3, 674, 337, 0, 1877, 1878, 5, 191, 0, 0, 1878, 1880, 5, 53, 0, 0, 1879, 1874, 1, 0, 0, 0, 1879, 1877, 1, 0, 0, 0, 1880, 95, 1, 0, 0, 0, 1881, 1882, 7, 17, 0, 0, 1882, 97, 1, 0, 0, 0, 1883, 1884, 5, 43, 0, 0, 1884, 1885, 3, 316, 158, 0, 1885, 99, 1, 0, 0, 0, 1886, 1887, 5, 2, 0, 0, 1887, 1892, 3, 104, 52, 0, 1888, 1889, 5, 6, 0, 0, 1889, 1891, 3, 104, 52, 0, 1890, 1888, 1, 0, 0, 0, 1891, 1894, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1895, 1, 0, 0, 0, 1894, 1892, 1, 0, 0, 0, 1895, 1896, 5, 3, 0, 0, 1896, 101, 1, 0, 0, 0, 1897, 1898, 5, 105, 0, 0, 1898, 1899, 3, 100, 50, 0, 1899, 103, 1, 0, 0, 0, 1900, 1905, 3, 824, 412, 0, 1901, 1902, 5, 10, 0, 0, 1902, 1906, 3, 288, 144, 0, 1903, 1904, 5, 11, 0, 0, 1904, 1906, 3, 286, 143, 0, 1905, 1901, 1, 0, 0, 0, 1905, 1903, 1, 0, 0, 0, 1905, 1906, 1, 0, 0, 0, 1906, 105, 1, 0, 0, 0, 1907, 1908, 5, 62, 0, 0, 1908, 1909, 5, 422, 0, 0, 1909, 1910, 5, 105, 0, 0, 1910, 1911, 5, 2, 0, 0, 1911, 1912, 5, 533, 0, 0, 1912, 1913, 5, 571, 0, 0, 1913, 1914, 5, 6, 0, 0, 1914, 1915, 5, 534, 0, 0, 1915, 1916, 5, 571, 0, 0, 1916, 1930, 5, 3, 0, 0, 1917, 1918, 5, 62, 0, 0, 1918, 1919, 5, 422, 0, 0, 1919, 1920, 5, 68, 0, 0, 1920, 1930, 3, 534, 267, 0, 1921, 1922, 5, 62, 0, 0, 1922, 1923, 5, 422, 0, 0, 1923, 1924, 5, 64, 0, 0, 1924, 1925, 3, 534, 267, 0, 1925, 1926, 5, 94, 0, 0, 1926, 1927, 3, 534, 267, 0, 1927, 1930, 1, 0, 0, 0, 1928, 1930, 5, 53, 0, 0, 1929, 1907, 1, 0, 0, 0, 1929, 1917, 1, 0, 0, 0, 1929, 1921, 1, 0, 0, 0, 1929, 1928, 1, 0, 0, 0, 1930, 107, 1, 0, 0, 0, 1931, 1932, 5, 138, 0, 0, 1932, 1933, 5, 360, 0, 0, 1933, 1934, 3, 316, 158, 0, 1934, 1939, 3, 110, 55, 0, 1935, 1936, 5, 6, 0, 0, 1936, 1938, 3, 110, 55, 0, 1937, 1935, 1, 0, 0, 0, 1938, 1941, 1, 0, 0, 0, 1939, 1937, 1, 0, 0, 0, 1939, 1940, 1, 0, 0, 0, 1940, 109, 1, 0, 0, 0, 1941, 1939, 1, 0, 0, 0, 1942, 1943, 5, 133, 0, 0, 1943, 1944, 5, 143, 0, 0, 1944, 1946, 3, 644, 322, 0, 1945, 1947, 3, 96, 48, 0, 1946, 1945, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1973, 1, 0, 0, 0, 1948, 1949, 5, 191, 0, 0, 1949, 1951, 5, 143, 0, 0, 1950, 1952, 3, 422, 211, 0, 1951, 1950, 1, 0, 0, 0, 1951, 1952, 1, 0, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 1955, 3, 818, 409, 0, 1954, 1956, 3, 96, 48, 0, 1955, 1954, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1973, 1, 0, 0, 0, 1957, 1958, 5, 138, 0, 0, 1958, 1959, 5, 143, 0, 0, 1959, 1962, 3, 818, 409, 0, 1960, 1961, 5, 333, 0, 0, 1961, 1963, 5, 174, 0, 0, 1962, 1960, 1, 0, 0, 0, 1962, 1963, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 1965, 5, 360, 0, 0, 1965, 1967, 3, 652, 326, 0, 1966, 1968, 3, 98, 49, 0, 1967, 1966, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 1, 0, 0, 0, 1969, 1971, 3, 96, 48, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 1973, 1, 0, 0, 0, 1972, 1942, 1, 0, 0, 0, 1972, 1948, 1, 0, 0, 0, 1972, 1957, 1, 0, 0, 0, 1973, 111, 1, 0, 0, 0, 1974, 1977, 5, 157, 0, 0, 1975, 1978, 3, 818, 409, 0, 1976, 1978, 5, 30, 0, 0, 1977, 1975, 1, 0, 0, 0, 1977, 1976, 1, 0, 0, 0, 1978, 113, 1, 0, 0, 0, 1979, 1981, 5, 169, 0, 0, 1980, 1982, 5, 107, 0, 0, 1981, 1980, 1, 0, 0, 0, 1981, 1982, 1, 0, 0, 0, 1982, 1983, 1, 0, 0, 0, 1983, 1985, 3, 774, 387, 0, 1984, 1986, 3, 144, 72, 0, 1985, 1984, 1, 0, 0, 0, 1985, 1986, 1, 0, 0, 0, 1986, 1987, 1, 0, 0, 0, 1987, 1989, 7, 18, 0, 0, 1988, 1990, 5, 297, 0, 0, 1989, 1988, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1994, 1, 0, 0, 0, 1991, 1995, 3, 808, 404, 0, 1992, 1995, 5, 343, 0, 0, 1993, 1995, 5, 344, 0, 0, 1994, 1991, 1, 0, 0, 0, 1994, 1992, 1, 0, 0, 0, 1994, 1993, 1, 0, 0, 0, 1995, 2001, 1, 0, 0, 0, 1996, 1998, 5, 100, 0, 0, 1997, 1996, 1, 0, 0, 0, 1997, 1998, 1, 0, 0, 0, 1998, 1999, 1, 0, 0, 0, 1999, 2000, 5, 184, 0, 0, 2000, 2002, 3, 808, 404, 0, 2001, 1997, 1, 0, 0, 0, 2001, 2002, 1, 0, 0, 0, 2002, 2004, 1, 0, 0, 0, 2003, 2005, 5, 105, 0, 0, 2004, 2003, 1, 0, 0, 0, 2004, 2005, 1, 0, 0, 0, 2005, 2006, 1, 0, 0, 0, 2006, 2008, 3, 116, 58, 0, 2007, 2009, 3, 638, 319, 0, 2008, 2007, 1, 0, 0, 0, 2008, 2009, 1, 0, 0, 0, 2009, 2029, 1, 0, 0, 0, 2010, 2011, 5, 169, 0, 0, 2011, 2012, 5, 2, 0, 0, 2012, 2013, 3, 530, 265, 0, 2013, 2014, 5, 3, 0, 0, 2014, 2016, 5, 94, 0, 0, 2015, 2017, 5, 297, 0, 0, 2016, 2015, 1, 0, 0, 0, 2016, 2017, 1, 0, 0, 0, 2017, 2021, 1, 0, 0, 0, 2018, 2022, 3, 808, 404, 0, 2019, 2022, 5, 343, 0, 0, 2020, 2022, 5, 344, 0, 0, 2021, 2018, 1, 0, 0, 0, 2021, 2019, 1, 0, 0, 0, 2021, 2020, 1, 0, 0, 0, 2022, 2024, 1, 0, 0, 0, 2023, 2025, 5, 105, 0, 0, 2024, 2023, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 2027, 3, 116, 58, 0, 2027, 2029, 1, 0, 0, 0, 2028, 1979, 1, 0, 0, 0, 2028, 2010, 1, 0, 0, 0, 2029, 115, 1, 0, 0, 0, 2030, 2054, 5, 107, 0, 0, 2031, 2054, 5, 112, 0, 0, 2032, 2034, 7, 19, 0, 0, 2033, 2035, 5, 36, 0, 0, 2034, 2033, 1, 0, 0, 0, 2034, 2035, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 2054, 3, 808, 404, 0, 2037, 2054, 5, 171, 0, 0, 2038, 2054, 5, 216, 0, 0, 2039, 2040, 5, 209, 0, 0, 2040, 2043, 5, 298, 0, 0, 2041, 2044, 3, 148, 74, 0, 2042, 2044, 5, 9, 0, 0, 2043, 2041, 1, 0, 0, 0, 2043, 2042, 1, 0, 0, 0, 2044, 2054, 1, 0, 0, 0, 2045, 2047, 5, 209, 0, 0, 2046, 2048, 5, 77, 0, 0, 2047, 2046, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2050, 5, 78, 0, 0, 2050, 2054, 3, 148, 74, 0, 2051, 2052, 5, 194, 0, 0, 2052, 2054, 3, 808, 404, 0, 2053, 2030, 1, 0, 0, 0, 2053, 2031, 1, 0, 0, 0, 2053, 2032, 1, 0, 0, 0, 2053, 2037, 1, 0, 0, 0, 2053, 2038, 1, 0, 0, 0, 2053, 2039, 1, 0, 0, 0, 2053, 2045, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2054, 2057, 1, 0, 0, 0, 2055, 2053, 1, 0, 0, 0, 2055, 2056, 1, 0, 0, 0, 2056, 2070, 1, 0, 0, 0, 2057, 2055, 1, 0, 0, 0, 2058, 2059, 5, 2, 0, 0, 2059, 2064, 3, 118, 59, 0, 2060, 2061, 5, 6, 0, 0, 2061, 2063, 3, 118, 59, 0, 2062, 2060, 1, 0, 0, 0, 2063, 2066, 1, 0, 0, 0, 2064, 2062, 1, 0, 0, 0, 2064, 2065, 1, 0, 0, 0, 2065, 2067, 1, 0, 0, 0, 2066, 2064, 1, 0, 0, 0, 2067, 2068, 5, 3, 0, 0, 2068, 2070, 1, 0, 0, 0, 2069, 2055, 1, 0, 0, 0, 2069, 2058, 1, 0, 0, 0, 2070, 117, 1, 0, 0, 0, 2071, 2086, 3, 824, 412, 0, 2072, 2087, 3, 54, 27, 0, 2073, 2087, 3, 202, 101, 0, 2074, 2087, 5, 9, 0, 0, 2075, 2076, 5, 2, 0, 0, 2076, 2081, 3, 52, 26, 0, 2077, 2078, 5, 6, 0, 0, 2078, 2080, 3, 52, 26, 0, 2079, 2077, 1, 0, 0, 0, 2080, 2083, 1, 0, 0, 0, 2081, 2079, 1, 0, 0, 0, 2081, 2082, 1, 0, 0, 0, 2082, 2084, 1, 0, 0, 0, 2083, 2081, 1, 0, 0, 0, 2084, 2085, 5, 3, 0, 0, 2085, 2087, 1, 0, 0, 0, 2086, 2072, 1, 0, 0, 0, 2086, 2073, 1, 0, 0, 0, 2086, 2074, 1, 0, 0, 0, 2086, 2075, 1, 0, 0, 0, 2086, 2087, 1, 0, 0, 0, 2087, 119, 1, 0, 0, 0, 2088, 2090, 5, 46, 0, 0, 2089, 2091, 3, 122, 61, 0, 2090, 2089, 1, 0, 0, 0, 2090, 2091, 1, 0, 0, 0, 2091, 2092, 1, 0, 0, 0, 2092, 2094, 5, 92, 0, 0, 2093, 2095, 3, 294, 147, 0, 2094, 2093, 1, 0, 0, 0, 2094, 2095, 1, 0, 0, 0, 2095, 2096, 1, 0, 0, 0, 2096, 2162, 3, 772, 386, 0, 2097, 2099, 5, 2, 0, 0, 2098, 2100, 3, 126, 63, 0, 2099, 2098, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2101, 1, 0, 0, 0, 2101, 2103, 5, 3, 0, 0, 2102, 2104, 3, 164, 82, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2106, 1, 0, 0, 0, 2105, 2107, 3, 166, 83, 0, 2106, 2105, 1, 0, 0, 0, 2106, 2107, 1, 0, 0, 0, 2107, 2109, 1, 0, 0, 0, 2108, 2110, 3, 170, 85, 0, 2109, 2108, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2112, 1, 0, 0, 0, 2111, 2113, 3, 172, 86, 0, 2112, 2111, 1, 0, 0, 0, 2112, 2113, 1, 0, 0, 0, 2113, 2115, 1, 0, 0, 0, 2114, 2116, 3, 174, 87, 0, 2115, 2114, 1, 0, 0, 0, 2115, 2116, 1, 0, 0, 0, 2116, 2118, 1, 0, 0, 0, 2117, 2119, 3, 176, 88, 0, 2118, 2117, 1, 0, 0, 0, 2118, 2119, 1, 0, 0, 0, 2119, 2163, 1, 0, 0, 0, 2120, 2121, 5, 275, 0, 0, 2121, 2123, 3, 316, 158, 0, 2122, 2124, 3, 124, 62, 0, 2123, 2122, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2126, 1, 0, 0, 0, 2125, 2127, 3, 166, 83, 0, 2126, 2125, 1, 0, 0, 0, 2126, 2127, 1, 0, 0, 0, 2127, 2129, 1, 0, 0, 0, 2128, 2130, 3, 170, 85, 0, 2129, 2128, 1, 0, 0, 0, 2129, 2130, 1, 0, 0, 0, 2130, 2132, 1, 0, 0, 0, 2131, 2133, 3, 172, 86, 0, 2132, 2131, 1, 0, 0, 0, 2132, 2133, 1, 0, 0, 0, 2133, 2135, 1, 0, 0, 0, 2134, 2136, 3, 174, 87, 0, 2135, 2134, 1, 0, 0, 0, 2135, 2136, 1, 0, 0, 0, 2136, 2138, 1, 0, 0, 0, 2137, 2139, 3, 176, 88, 0, 2138, 2137, 1, 0, 0, 0, 2138, 2139, 1, 0, 0, 0, 2139, 2163, 1, 0, 0, 0, 2140, 2141, 5, 285, 0, 0, 2141, 2142, 5, 275, 0, 0, 2142, 2144, 3, 780, 390, 0, 2143, 2145, 3, 124, 62, 0, 2144, 2143, 1, 0, 0, 0, 2144, 2145, 1, 0, 0, 0, 2145, 2146, 1, 0, 0, 0, 2146, 2148, 3, 106, 53, 0, 2147, 2149, 3, 166, 83, 0, 2148, 2147, 1, 0, 0, 0, 2148, 2149, 1, 0, 0, 0, 2149, 2151, 1, 0, 0, 0, 2150, 2152, 3, 170, 85, 0, 2151, 2150, 1, 0, 0, 0, 2151, 2152, 1, 0, 0, 0, 2152, 2154, 1, 0, 0, 0, 2153, 2155, 3, 172, 86, 0, 2154, 2153, 1, 0, 0, 0, 2154, 2155, 1, 0, 0, 0, 2155, 2157, 1, 0, 0, 0, 2156, 2158, 3, 174, 87, 0, 2157, 2156, 1, 0, 0, 0, 2157, 2158, 1, 0, 0, 0, 2158, 2160, 1, 0, 0, 0, 2159, 2161, 3, 176, 88, 0, 2160, 2159, 1, 0, 0, 0, 2160, 2161, 1, 0, 0, 0, 2161, 2163, 1, 0, 0, 0, 2162, 2097, 1, 0, 0, 0, 2162, 2120, 1, 0, 0, 0, 2162, 2140, 1, 0, 0, 0, 2163, 121, 1, 0, 0, 0, 2164, 2170, 5, 354, 0, 0, 2165, 2170, 5, 352, 0, 0, 2166, 2167, 7, 20, 0, 0, 2167, 2170, 7, 21, 0, 0, 2168, 2170, 5, 367, 0, 0, 2169, 2164, 1, 0, 0, 0, 2169, 2165, 1, 0, 0, 0, 2169, 2166, 1, 0, 0, 0, 2169, 2168, 1, 0, 0, 0, 2170, 123, 1, 0, 0, 0, 2171, 2172, 5, 2, 0, 0, 2172, 2177, 3, 130, 65, 0, 2173, 2174, 5, 6, 0, 0, 2174, 2176, 3, 130, 65, 0, 2175, 2173, 1, 0, 0, 0, 2176, 2179, 1, 0, 0, 0, 2177, 2175, 1, 0, 0, 0, 2177, 2178, 1, 0, 0, 0, 2178, 2180, 1, 0, 0, 0, 2179, 2177, 1, 0, 0, 0, 2180, 2181, 5, 3, 0, 0, 2181, 125, 1, 0, 0, 0, 2182, 2187, 3, 128, 64, 0, 2183, 2184, 5, 6, 0, 0, 2184, 2186, 3, 128, 64, 0, 2185, 2183, 1, 0, 0, 0, 2186, 2189, 1, 0, 0, 0, 2187, 2185, 1, 0, 0, 0, 2187, 2188, 1, 0, 0, 0, 2188, 127, 1, 0, 0, 0, 2189, 2187, 1, 0, 0, 0, 2190, 2191, 5, 45, 0, 0, 2191, 2193, 3, 818, 409, 0, 2192, 2190, 1, 0, 0, 0, 2192, 2193, 1, 0, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 2206, 3, 142, 71, 0, 2195, 2206, 3, 132, 66, 0, 2196, 2197, 5, 120, 0, 0, 2197, 2202, 3, 780, 390, 0, 2198, 2199, 7, 22, 0, 0, 2199, 2201, 3, 140, 70, 0, 2200, 2198, 1, 0, 0, 0, 2201, 2204, 1, 0, 0, 0, 2202, 2200, 1, 0, 0, 0, 2202, 2203, 1, 0, 0, 0, 2203, 2206, 1, 0, 0, 0, 2204, 2202, 1, 0, 0, 0, 2205, 2192, 1, 0, 0, 0, 2205, 2195, 1, 0, 0, 0, 2205, 2196, 1, 0, 0, 0, 2206, 129, 1, 0, 0, 0, 2207, 2210, 3, 802, 401, 0, 2208, 2209, 5, 105, 0, 0, 2209, 2211, 5, 280, 0, 0, 2210, 2208, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2215, 1, 0, 0, 0, 2212, 2214, 3, 134, 67, 0, 2213, 2212, 1, 0, 0, 0, 2214, 2217, 1, 0, 0, 0, 2215, 2213, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2224, 1, 0, 0, 0, 2217, 2215, 1, 0, 0, 0, 2218, 2219, 5, 45, 0, 0, 2219, 2221, 3, 818, 409, 0, 2220, 2218, 1, 0, 0, 0, 2220, 2221, 1, 0, 0, 0, 2221, 2222, 1, 0, 0, 0, 2222, 2224, 3, 142, 71, 0, 2223, 2207, 1, 0, 0, 0, 2223, 2220, 1, 0, 0, 0, 2224, 131, 1, 0, 0, 0, 2225, 2226, 3, 802, 401, 0, 2226, 2228, 3, 652, 326, 0, 2227, 2229, 3, 220, 110, 0, 2228, 2227, 1, 0, 0, 0, 2228, 2229, 1, 0, 0, 0, 2229, 2239, 1, 0, 0, 0, 2230, 2237, 5, 345, 0, 0, 2231, 2238, 5, 544, 0, 0, 2232, 2238, 5, 205, 0, 0, 2233, 2238, 5, 545, 0, 0, 2234, 2238, 5, 546, 0, 0, 2235, 2238, 5, 53, 0, 0, 2236, 2238, 3, 818, 409, 0, 2237, 2231, 1, 0, 0, 0, 2237, 2232, 1, 0, 0, 0, 2237, 2233, 1, 0, 0, 0, 2237, 2234, 1, 0, 0, 0, 2237, 2235, 1, 0, 0, 0, 2237, 2236, 1, 0, 0, 0, 2238, 2240, 1, 0, 0, 0, 2239, 2230, 1, 0, 0, 0, 2239, 2240, 1, 0, 0, 0, 2240, 2243, 1, 0, 0, 0, 2241, 2242, 5, 543, 0, 0, 2242, 2244, 3, 818, 409, 0, 2243, 2241, 1, 0, 0, 0, 2243, 2244, 1, 0, 0, 0, 2244, 2246, 1, 0, 0, 0, 2245, 2247, 3, 98, 49, 0, 2246, 2245, 1, 0, 0, 0, 2246, 2247, 1, 0, 0, 0, 2247, 2250, 1, 0, 0, 0, 2248, 2249, 5, 105, 0, 0, 2249, 2251, 5, 280, 0, 0, 2250, 2248, 1, 0, 0, 0, 2250, 2251, 1, 0, 0, 0, 2251, 2255, 1, 0, 0, 0, 2252, 2254, 3, 134, 67, 0, 2253, 2252, 1, 0, 0, 0, 2254, 2257, 1, 0, 0, 0, 2255, 2253, 1, 0, 0, 0, 2255, 2256, 1, 0, 0, 0, 2256, 133, 1, 0, 0, 0, 2257, 2255, 1, 0, 0, 0, 2258, 2259, 5, 45, 0, 0, 2259, 2261, 3, 818, 409, 0, 2260, 2258, 1, 0, 0, 0, 2260, 2261, 1, 0, 0, 0, 2261, 2262, 1, 0, 0, 0, 2262, 2267, 3, 136, 68, 0, 2263, 2265, 5, 77, 0, 0, 2264, 2263, 1, 0, 0, 0, 2264, 2265, 1, 0, 0, 0, 2265, 2266, 1, 0, 0, 0, 2266, 2268, 5, 54, 0, 0, 2267, 2264, 1, 0, 0, 0, 2267, 2268, 1, 0, 0, 0, 2268, 2271, 1, 0, 0, 0, 2269, 2270, 5, 69, 0, 0, 2270, 2272, 7, 9, 0, 0, 2271, 2269, 1, 0, 0, 0, 2271, 2272, 1, 0, 0, 0, 2272, 135, 1, 0, 0, 0, 2273, 2275, 5, 77, 0, 0, 2274, 2273, 1, 0, 0, 0, 2274, 2275, 1, 0, 0, 0, 2275, 2276, 1, 0, 0, 0, 2276, 2354, 5, 78, 0, 0, 2277, 2279, 5, 98, 0, 0, 2278, 2280, 3, 400, 200, 0, 2279, 2278, 1, 0, 0, 0, 2279, 2280, 1, 0, 0, 0, 2280, 2282, 1, 0, 0, 0, 2281, 2283, 3, 178, 89, 0, 2282, 2281, 1, 0, 0, 0, 2282, 2283, 1, 0, 0, 0, 2283, 2354, 1, 0, 0, 0, 2284, 2290, 5, 98, 0, 0, 2285, 2287, 5, 273, 0, 0, 2286, 2288, 5, 77, 0, 0, 2287, 2286, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, 0, 2289, 2291, 5, 56, 0, 0, 2290, 2285, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 2294, 1, 0, 0, 0, 2292, 2293, 5, 441, 0, 0, 2293, 2295, 3, 360, 180, 0, 2294, 2292, 1, 0, 0, 0, 2294, 2295, 1, 0, 0, 0, 2295, 2297, 1, 0, 0, 0, 2296, 2298, 3, 572, 286, 0, 2297, 2296, 1, 0, 0, 0, 2297, 2298, 1, 0, 0, 0, 2298, 2300, 1, 0, 0, 0, 2299, 2301, 3, 178, 89, 0, 2300, 2299, 1, 0, 0, 0, 2300, 2301, 1, 0, 0, 0, 2301, 2354, 1, 0, 0, 0, 2302, 2303, 5, 85, 0, 0, 2303, 2305, 5, 245, 0, 0, 2304, 2306, 3, 400, 200, 0, 2305, 2304, 1, 0, 0, 0, 2305, 2306, 1, 0, 0, 0, 2306, 2308, 1, 0, 0, 0, 2307, 2309, 3, 178, 89, 0, 2308, 2307, 1, 0, 0, 0, 2308, 2309, 1, 0, 0, 0, 2309, 2354, 1, 0, 0, 0, 2310, 2311, 5, 42, 0, 0, 2311, 2312, 5, 2, 0, 0, 2312, 2313, 3, 674, 337, 0, 2313, 2316, 5, 3, 0, 0, 2314, 2315, 5, 269, 0, 0, 2315, 2317, 5, 228, 0, 0, 2316, 2314, 1, 0, 0, 0, 2316, 2317, 1, 0, 0, 0, 2317, 2354, 1, 0, 0, 0, 2318, 2319, 5, 53, 0, 0, 2319, 2354, 3, 682, 341, 0, 2320, 2321, 5, 438, 0, 0, 2321, 2322, 3, 138, 69, 0, 2322, 2339, 5, 36, 0, 0, 2323, 2332, 5, 219, 0, 0, 2324, 2326, 5, 2, 0, 0, 2325, 2327, 3, 200, 100, 0, 2326, 2325, 1, 0, 0, 0, 2327, 2328, 1, 0, 0, 0, 2328, 2326, 1, 0, 0, 0, 2328, 2329, 1, 0, 0, 0, 2329, 2330, 1, 0, 0, 0, 2330, 2331, 5, 3, 0, 0, 2331, 2333, 1, 0, 0, 0, 2332, 2324, 1, 0, 0, 0, 2332, 2333, 1, 0, 0, 0, 2333, 2340, 1, 0, 0, 0, 2334, 2335, 5, 2, 0, 0, 2335, 2336, 3, 674, 337, 0, 2336, 2337, 5, 3, 0, 0, 2337, 2338, 5, 440, 0, 0, 2338, 2340, 1, 0, 0, 0, 2339, 2323, 1, 0, 0, 0, 2339, 2334, 1, 0, 0, 0, 2340, 2354, 1, 0, 0, 0, 2341, 2342, 5, 86, 0, 0, 2342, 2344, 3, 780, 390, 0, 2343, 2345, 3, 144, 72, 0, 2344, 2343, 1, 0, 0, 0, 2344, 2345, 1, 0, 0, 0, 2345, 2347, 1, 0, 0, 0, 2346, 2348, 3, 152, 76, 0, 2347, 2346, 1, 0, 0, 0, 2347, 2348, 1, 0, 0, 0, 2348, 2350, 1, 0, 0, 0, 2349, 2351, 3, 156, 78, 0, 2350, 2349, 1, 0, 0, 0, 2350, 2351, 1, 0, 0, 0, 2351, 2354, 1, 0, 0, 0, 2352, 2354, 3, 98, 49, 0, 2353, 2274, 1, 0, 0, 0, 2353, 2277, 1, 0, 0, 0, 2353, 2284, 1, 0, 0, 0, 2353, 2302, 1, 0, 0, 0, 2353, 2310, 1, 0, 0, 0, 2353, 2318, 1, 0, 0, 0, 2353, 2320, 1, 0, 0, 0, 2353, 2341, 1, 0, 0, 0, 2353, 2352, 1, 0, 0, 0, 2354, 137, 1, 0, 0, 0, 2355, 2359, 5, 139, 0, 0, 2356, 2357, 5, 147, 0, 0, 2357, 2359, 5, 53, 0, 0, 2358, 2355, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2359, 139, 1, 0, 0, 0, 2360, 2361, 7, 23, 0, 0, 2361, 141, 1, 0, 0, 0, 2362, 2363, 5, 42, 0, 0, 2363, 2364, 5, 2, 0, 0, 2364, 2365, 3, 674, 337, 0, 2365, 2369, 5, 3, 0, 0, 2366, 2368, 3, 272, 136, 0, 2367, 2366, 1, 0, 0, 0, 2368, 2371, 1, 0, 0, 0, 2369, 2367, 1, 0, 0, 0, 2369, 2370, 1, 0, 0, 0, 2370, 2459, 1, 0, 0, 0, 2371, 2369, 1, 0, 0, 0, 2372, 2376, 5, 98, 0, 0, 2373, 2374, 5, 85, 0, 0, 2374, 2376, 5, 245, 0, 0, 2375, 2372, 1, 0, 0, 0, 2375, 2373, 1, 0, 0, 0, 2376, 2400, 1, 0, 0, 0, 2377, 2379, 3, 144, 72, 0, 2378, 2380, 3, 150, 75, 0, 2379, 2378, 1, 0, 0, 0, 2379, 2380, 1, 0, 0, 0, 2380, 2382, 1, 0, 0, 0, 2381, 2383, 3, 400, 200, 0, 2382, 2381, 1, 0, 0, 0, 2382, 2383, 1, 0, 0, 0, 2383, 2385, 1, 0, 0, 0, 2384, 2386, 3, 178, 89, 0, 2385, 2384, 1, 0, 0, 0, 2385, 2386, 1, 0, 0, 0, 2386, 2390, 1, 0, 0, 0, 2387, 2389, 3, 272, 136, 0, 2388, 2387, 1, 0, 0, 0, 2389, 2392, 1, 0, 0, 0, 2390, 2388, 1, 0, 0, 0, 2390, 2391, 1, 0, 0, 0, 2391, 2401, 1, 0, 0, 0, 2392, 2390, 1, 0, 0, 0, 2393, 2397, 3, 180, 90, 0, 2394, 2396, 3, 272, 136, 0, 2395, 2394, 1, 0, 0, 0, 2396, 2399, 1, 0, 0, 0, 2397, 2395, 1, 0, 0, 0, 2397, 2398, 1, 0, 0, 0, 2398, 2401, 1, 0, 0, 0, 2399, 2397, 1, 0, 0, 0, 2400, 2377, 1, 0, 0, 0, 2400, 2393, 1, 0, 0, 0, 2401, 2459, 1, 0, 0, 0, 2402, 2404, 5, 199, 0, 0, 2403, 2405, 3, 170, 85, 0, 2404, 2403, 1, 0, 0, 0, 2404, 2405, 1, 0, 0, 0, 2405, 2406, 1, 0, 0, 0, 2406, 2407, 5, 2, 0, 0, 2407, 2412, 3, 154, 77, 0, 2408, 2409, 5, 6, 0, 0, 2409, 2411, 3, 154, 77, 0, 2410, 2408, 1, 0, 0, 0, 2411, 2414, 1, 0, 0, 0, 2412, 2410, 1, 0, 0, 0, 2412, 2413, 1, 0, 0, 0, 2413, 2415, 1, 0, 0, 0, 2414, 2412, 1, 0, 0, 0, 2415, 2417, 5, 3, 0, 0, 2416, 2418, 3, 150, 75, 0, 2417, 2416, 1, 0, 0, 0, 2417, 2418, 1, 0, 0, 0, 2418, 2420, 1, 0, 0, 0, 2419, 2421, 3, 400, 200, 0, 2420, 2419, 1, 0, 0, 0, 2420, 2421, 1, 0, 0, 0, 2421, 2423, 1, 0, 0, 0, 2422, 2424, 3, 178, 89, 0, 2423, 2422, 1, 0, 0, 0, 2423, 2424, 1, 0, 0, 0, 2424, 2430, 1, 0, 0, 0, 2425, 2426, 5, 103, 0, 0, 2426, 2427, 5, 2, 0, 0, 2427, 2428, 3, 674, 337, 0, 2428, 2429, 5, 3, 0, 0, 2429, 2431, 1, 0, 0, 0, 2430, 2425, 1, 0, 0, 0, 2430, 2431, 1, 0, 0, 0, 2431, 2435, 1, 0, 0, 0, 2432, 2434, 3, 272, 136, 0, 2433, 2432, 1, 0, 0, 0, 2434, 2437, 1, 0, 0, 0, 2435, 2433, 1, 0, 0, 0, 2435, 2436, 1, 0, 0, 0, 2436, 2459, 1, 0, 0, 0, 2437, 2435, 1, 0, 0, 0, 2438, 2439, 5, 63, 0, 0, 2439, 2440, 5, 245, 0, 0, 2440, 2441, 3, 144, 72, 0, 2441, 2442, 5, 86, 0, 0, 2442, 2444, 3, 780, 390, 0, 2443, 2445, 3, 144, 72, 0, 2444, 2443, 1, 0, 0, 0, 2444, 2445, 1, 0, 0, 0, 2445, 2447, 1, 0, 0, 0, 2446, 2448, 3, 152, 76, 0, 2447, 2446, 1, 0, 0, 0, 2447, 2448, 1, 0, 0, 0, 2448, 2450, 1, 0, 0, 0, 2449, 2451, 3, 156, 78, 0, 2450, 2449, 1, 0, 0, 0, 2450, 2451, 1, 0, 0, 0, 2451, 2455, 1, 0, 0, 0, 2452, 2454, 3, 272, 136, 0, 2453, 2452, 1, 0, 0, 0, 2454, 2457, 1, 0, 0, 0, 2455, 2453, 1, 0, 0, 0, 2455, 2456, 1, 0, 0, 0, 2456, 2459, 1, 0, 0, 0, 2457, 2455, 1, 0, 0, 0, 2458, 2362, 1, 0, 0, 0, 2458, 2375, 1, 0, 0, 0, 2458, 2402, 1, 0, 0, 0, 2458, 2438, 1, 0, 0, 0, 2459, 143, 1, 0, 0, 0, 2460, 2461, 5, 2, 0, 0, 2461, 2462, 3, 148, 74, 0, 2462, 2463, 5, 3, 0, 0, 2463, 145, 1, 0, 0, 0, 2464, 2465, 5, 2, 0, 0, 2465, 2470, 3, 802, 401, 0, 2466, 2467, 5, 6, 0, 0, 2467, 2469, 3, 802, 401, 0, 2468, 2466, 1, 0, 0, 0, 2469, 2472, 1, 0, 0, 0, 2470, 2468, 1, 0, 0, 0, 2470, 2471, 1, 0, 0, 0, 2471, 2473, 1, 0, 0, 0, 2472, 2470, 1, 0, 0, 0, 2473, 2474, 5, 3, 0, 0, 2474, 147, 1, 0, 0, 0, 2475, 2480, 3, 800, 400, 0, 2476, 2477, 5, 6, 0, 0, 2477, 2479, 3, 800, 400, 0, 2478, 2476, 1, 0, 0, 0, 2479, 2482, 1, 0, 0, 0, 2480, 2478, 1, 0, 0, 0, 2480, 2481, 1, 0, 0, 0, 2481, 149, 1, 0, 0, 0, 2482, 2480, 1, 0, 0, 0, 2483, 2484, 5, 441, 0, 0, 2484, 2485, 3, 144, 72, 0, 2485, 151, 1, 0, 0, 0, 2486, 2487, 5, 258, 0, 0, 2487, 2488, 7, 24, 0, 0, 2488, 153, 1, 0, 0, 0, 2489, 2490, 3, 362, 181, 0, 2490, 2497, 5, 105, 0, 0, 2491, 2498, 3, 414, 207, 0, 2492, 2493, 5, 278, 0, 0, 2493, 2494, 5, 2, 0, 0, 2494, 2495, 3, 414, 207, 0, 2495, 2496, 5, 3, 0, 0, 2496, 2498, 1, 0, 0, 0, 2497, 2491, 1, 0, 0, 0, 2497, 2492, 1, 0, 0, 0, 2498, 155, 1, 0, 0, 0, 2499, 2501, 3, 158, 79, 0, 2500, 2502, 3, 160, 80, 0, 2501, 2500, 1, 0, 0, 0, 2501, 2502, 1, 0, 0, 0, 2502, 2508, 1, 0, 0, 0, 2503, 2505, 3, 160, 80, 0, 2504, 2506, 3, 158, 79, 0, 2505, 2504, 1, 0, 0, 0, 2505, 2506, 1, 0, 0, 0, 2506, 2508, 1, 0, 0, 0, 2507, 2499, 1, 0, 0, 0, 2507, 2503, 1, 0, 0, 0, 2508, 157, 1, 0, 0, 0, 2509, 2510, 5, 80, 0, 0, 2510, 2511, 5, 369, 0, 0, 2511, 2512, 3, 162, 81, 0, 2512, 159, 1, 0, 0, 0, 2513, 2514, 5, 80, 0, 0, 2514, 2515, 5, 182, 0, 0, 2515, 2516, 3, 162, 81, 0, 2516, 161, 1, 0, 0, 0, 2517, 2518, 5, 269, 0, 0, 2518, 2527, 5, 132, 0, 0, 2519, 2527, 5, 315, 0, 0, 2520, 2527, 5, 150, 0, 0, 2521, 2522, 5, 333, 0, 0, 2522, 2524, 7, 25, 0, 0, 2523, 2525, 3, 148, 74, 0, 2524, 2523, 1, 0, 0, 0, 2524, 2525, 1, 0, 0, 0, 2525, 2527, 1, 0, 0, 0, 2526, 2517, 1, 0, 0, 0, 2526, 2519, 1, 0, 0, 0, 2526, 2520, 1, 0, 0, 0, 2526, 2521, 1, 0, 0, 0, 2527, 163, 1, 0, 0, 0, 2528, 2529, 5, 238, 0, 0, 2529, 2530, 5, 2, 0, 0, 2530, 2531, 3, 760, 380, 0, 2531, 2532, 5, 3, 0, 0, 2532, 165, 1, 0, 0, 0, 2533, 2534, 5, 285, 0, 0, 2534, 2535, 5, 147, 0, 0, 2535, 2536, 3, 818, 409, 0, 2536, 2537, 5, 2, 0, 0, 2537, 2542, 3, 168, 84, 0, 2538, 2539, 5, 6, 0, 0, 2539, 2541, 3, 168, 84, 0, 2540, 2538, 1, 0, 0, 0, 2541, 2544, 1, 0, 0, 0, 2542, 2540, 1, 0, 0, 0, 2542, 2543, 1, 0, 0, 0, 2543, 2545, 1, 0, 0, 0, 2544, 2542, 1, 0, 0, 0, 2545, 2546, 5, 3, 0, 0, 2546, 167, 1, 0, 0, 0, 2547, 2554, 3, 800, 400, 0, 2548, 2554, 3, 688, 344, 0, 2549, 2550, 5, 2, 0, 0, 2550, 2551, 3, 674, 337, 0, 2551, 2552, 5, 3, 0, 0, 2552, 2554, 1, 0, 0, 0, 2553, 2547, 1, 0, 0, 0, 2553, 2548, 1, 0, 0, 0, 2553, 2549, 1, 0, 0, 0, 2554, 2556, 1, 0, 0, 0, 2555, 2557, 3, 98, 49, 0, 2556, 2555, 1, 0, 0, 0, 2556, 2557, 1, 0, 0, 0, 2557, 2559, 1, 0, 0, 0, 2558, 2560, 3, 316, 158, 0, 2559, 2558, 1, 0, 0, 0, 2559, 2560, 1, 0, 0, 0, 2560, 169, 1, 0, 0, 0, 2561, 2562, 5, 100, 0, 0, 2562, 2563, 3, 818, 409, 0, 2563, 171, 1, 0, 0, 0, 2564, 2565, 5, 105, 0, 0, 2565, 2569, 3, 100, 50, 0, 2566, 2567, 7, 26, 0, 0, 2567, 2569, 5, 277, 0, 0, 2568, 2564, 1, 0, 0, 0, 2568, 2566, 1, 0, 0, 0, 2569, 173, 1, 0, 0, 0, 2570, 2571, 5, 80, 0, 0, 2571, 2577, 5, 161, 0, 0, 2572, 2578, 5, 191, 0, 0, 2573, 2574, 5, 182, 0, 0, 2574, 2578, 5, 320, 0, 0, 2575, 2576, 5, 292, 0, 0, 2576, 2578, 5, 320, 0, 0, 2577, 2572, 1, 0, 0, 0, 2577, 2573, 1, 0, 0, 0, 2577, 2575, 1, 0, 0, 0, 2578, 175, 1, 0, 0, 0, 2579, 2580, 5, 351, 0, 0, 2580, 2581, 3, 770, 385, 0, 2581, 177, 1, 0, 0, 0, 2582, 2583, 5, 100, 0, 0, 2583, 2584, 5, 226, 0, 0, 2584, 2585, 3, 176, 88, 0, 2585, 179, 1, 0, 0, 0, 2586, 2587, 5, 100, 0, 0, 2587, 2588, 5, 226, 0, 0, 2588, 2589, 3, 818, 409, 0, 2589, 181, 1, 0, 0, 0, 2590, 2591, 5, 46, 0, 0, 2591, 2596, 5, 342, 0, 0, 2592, 2594, 3, 294, 147, 0, 2593, 2592, 1, 0, 0, 0, 2593, 2594, 1, 0, 0, 0, 2594, 2595, 1, 0, 0, 0, 2595, 2597, 3, 316, 158, 0, 2596, 2593, 1, 0, 0, 0, 2596, 2597, 1, 0, 0, 0, 2597, 2599, 1, 0, 0, 0, 2598, 2600, 3, 144, 72, 0, 2599, 2598, 1, 0, 0, 0, 2599, 2600, 1, 0, 0, 0, 2600, 2601, 1, 0, 0, 0, 2601, 2611, 5, 80, 0, 0, 2602, 2607, 3, 732, 366, 0, 2603, 2604, 5, 6, 0, 0, 2604, 2606, 3, 732, 366, 0, 2605, 2603, 1, 0, 0, 0, 2606, 2609, 1, 0, 0, 0, 2607, 2605, 1, 0, 0, 0, 2607, 2608, 1, 0, 0, 0, 2608, 2612, 1, 0, 0, 0, 2609, 2607, 1, 0, 0, 0, 2610, 2612, 3, 730, 365, 0, 2611, 2602, 1, 0, 0, 0, 2611, 2610, 1, 0, 0, 0, 2612, 2613, 1, 0, 0, 0, 2613, 2614, 3, 610, 305, 0, 2614, 183, 1, 0, 0, 0, 2615, 2616, 5, 138, 0, 0, 2616, 2618, 5, 342, 0, 0, 2617, 2619, 3, 422, 211, 0, 2618, 2617, 1, 0, 0, 0, 2618, 2619, 1, 0, 0, 0, 2619, 2620, 1, 0, 0, 0, 2620, 2621, 3, 316, 158, 0, 2621, 2622, 5, 333, 0, 0, 2622, 2623, 5, 342, 0, 0, 2623, 2624, 3, 812, 406, 0, 2624, 185, 1, 0, 0, 0, 2625, 2627, 5, 46, 0, 0, 2626, 2628, 3, 122, 61, 0, 2627, 2626, 1, 0, 0, 0, 2627, 2628, 1, 0, 0, 0, 2628, 2629, 1, 0, 0, 0, 2629, 2631, 5, 92, 0, 0, 2630, 2632, 3, 294, 147, 0, 2631, 2630, 1, 0, 0, 0, 2631, 2632, 1, 0, 0, 0, 2632, 2633, 1, 0, 0, 0, 2633, 2634, 3, 188, 94, 0, 2634, 2635, 5, 36, 0, 0, 2635, 2637, 3, 560, 280, 0, 2636, 2638, 3, 190, 95, 0, 2637, 2636, 1, 0, 0, 0, 2637, 2638, 1, 0, 0, 0, 2638, 187, 1, 0, 0, 0, 2639, 2641, 3, 772, 386, 0, 2640, 2642, 3, 146, 73, 0, 2641, 2640, 1, 0, 0, 0, 2641, 2642, 1, 0, 0, 0, 2642, 2644, 1, 0, 0, 0, 2643, 2645, 3, 170, 85, 0, 2644, 2643, 1, 0, 0, 0, 2644, 2645, 1, 0, 0, 0, 2645, 2647, 1, 0, 0, 0, 2646, 2648, 3, 172, 86, 0, 2647, 2646, 1, 0, 0, 0, 2647, 2648, 1, 0, 0, 0, 2648, 2650, 1, 0, 0, 0, 2649, 2651, 3, 174, 87, 0, 2650, 2649, 1, 0, 0, 0, 2650, 2651, 1, 0, 0, 0, 2651, 2653, 1, 0, 0, 0, 2652, 2654, 3, 176, 88, 0, 2653, 2652, 1, 0, 0, 0, 2653, 2654, 1, 0, 0, 0, 2654, 189, 1, 0, 0, 0, 2655, 2659, 5, 105, 0, 0, 2656, 2660, 5, 174, 0, 0, 2657, 2658, 5, 269, 0, 0, 2658, 2660, 5, 174, 0, 0, 2659, 2656, 1, 0, 0, 0, 2659, 2657, 1, 0, 0, 0, 2660, 191, 1, 0, 0, 0, 2661, 2663, 5, 46, 0, 0, 2662, 2664, 5, 367, 0, 0, 2663, 2662, 1, 0, 0, 0, 2663, 2664, 1, 0, 0, 0, 2664, 2665, 1, 0, 0, 0, 2665, 2666, 5, 259, 0, 0, 2666, 2668, 5, 376, 0, 0, 2667, 2669, 3, 294, 147, 0, 2668, 2667, 1, 0, 0, 0, 2668, 2669, 1, 0, 0, 0, 2669, 2670, 1, 0, 0, 0, 2670, 2672, 3, 776, 388, 0, 2671, 2673, 3, 146, 73, 0, 2672, 2671, 1, 0, 0, 0, 2672, 2673, 1, 0, 0, 0, 2673, 2675, 1, 0, 0, 0, 2674, 2676, 3, 170, 85, 0, 2675, 2674, 1, 0, 0, 0, 2675, 2676, 1, 0, 0, 0, 2676, 2678, 1, 0, 0, 0, 2677, 2679, 3, 102, 51, 0, 2678, 2677, 1, 0, 0, 0, 2678, 2679, 1, 0, 0, 0, 2679, 2681, 1, 0, 0, 0, 2680, 2682, 3, 176, 88, 0, 2681, 2680, 1, 0, 0, 0, 2681, 2682, 1, 0, 0, 0, 2682, 2683, 1, 0, 0, 0, 2683, 2684, 5, 36, 0, 0, 2684, 2686, 3, 560, 280, 0, 2685, 2687, 3, 190, 95, 0, 2686, 2685, 1, 0, 0, 0, 2686, 2687, 1, 0, 0, 0, 2687, 193, 1, 0, 0, 0, 2688, 2689, 5, 305, 0, 0, 2689, 2690, 5, 259, 0, 0, 2690, 2692, 5, 376, 0, 0, 2691, 2693, 5, 109, 0, 0, 2692, 2691, 1, 0, 0, 0, 2692, 2693, 1, 0, 0, 0, 2693, 2694, 1, 0, 0, 0, 2694, 2696, 3, 778, 389, 0, 2695, 2697, 3, 190, 95, 0, 2696, 2695, 1, 0, 0, 0, 2696, 2697, 1, 0, 0, 0, 2697, 195, 1, 0, 0, 0, 2698, 2700, 5, 46, 0, 0, 2699, 2701, 3, 122, 61, 0, 2700, 2699, 1, 0, 0, 0, 2700, 2701, 1, 0, 0, 0, 2701, 2702, 1, 0, 0, 0, 2702, 2704, 5, 328, 0, 0, 2703, 2705, 3, 294, 147, 0, 2704, 2703, 1, 0, 0, 0, 2704, 2705, 1, 0, 0, 0, 2705, 2706, 1, 0, 0, 0, 2706, 2712, 3, 780, 390, 0, 2707, 2709, 3, 200, 100, 0, 2708, 2707, 1, 0, 0, 0, 2709, 2710, 1, 0, 0, 0, 2710, 2708, 1, 0, 0, 0, 2710, 2711, 1, 0, 0, 0, 2711, 2713, 1, 0, 0, 0, 2712, 2708, 1, 0, 0, 0, 2712, 2713, 1, 0, 0, 0, 2713, 197, 1, 0, 0, 0, 2714, 2715, 5, 138, 0, 0, 2715, 2717, 5, 328, 0, 0, 2716, 2718, 3, 422, 211, 0, 2717, 2716, 1, 0, 0, 0, 2717, 2718, 1, 0, 0, 0, 2718, 2719, 1, 0, 0, 0, 2719, 2721, 3, 780, 390, 0, 2720, 2722, 3, 200, 100, 0, 2721, 2720, 1, 0, 0, 0, 2722, 2723, 1, 0, 0, 0, 2723, 2721, 1, 0, 0, 0, 2723, 2724, 1, 0, 0, 0, 2724, 199, 1, 0, 0, 0, 2725, 2726, 5, 36, 0, 0, 2726, 2759, 3, 654, 327, 0, 2727, 2729, 5, 148, 0, 0, 2728, 2730, 3, 202, 101, 0, 2729, 2728, 1, 0, 0, 0, 2729, 2730, 1, 0, 0, 0, 2730, 2759, 1, 0, 0, 0, 2731, 2733, 5, 225, 0, 0, 2732, 2734, 5, 147, 0, 0, 2733, 2732, 1, 0, 0, 0, 2733, 2734, 1, 0, 0, 0, 2734, 2735, 1, 0, 0, 0, 2735, 2759, 3, 202, 101, 0, 2736, 2737, 7, 27, 0, 0, 2737, 2759, 3, 202, 101, 0, 2738, 2739, 5, 269, 0, 0, 2739, 2759, 7, 28, 0, 0, 2740, 2741, 5, 281, 0, 0, 2741, 2742, 5, 147, 0, 0, 2742, 2759, 3, 800, 400, 0, 2743, 2744, 5, 328, 0, 0, 2744, 2745, 5, 266, 0, 0, 2745, 2759, 3, 316, 158, 0, 2746, 2748, 5, 340, 0, 0, 2747, 2749, 5, 105, 0, 0, 2748, 2747, 1, 0, 0, 0, 2748, 2749, 1, 0, 0, 0, 2749, 2750, 1, 0, 0, 0, 2750, 2759, 3, 202, 101, 0, 2751, 2753, 5, 314, 0, 0, 2752, 2754, 5, 105, 0, 0, 2753, 2752, 1, 0, 0, 0, 2753, 2754, 1, 0, 0, 0, 2754, 2756, 1, 0, 0, 0, 2755, 2757, 3, 202, 101, 0, 2756, 2755, 1, 0, 0, 0, 2756, 2757, 1, 0, 0, 0, 2757, 2759, 1, 0, 0, 0, 2758, 2725, 1, 0, 0, 0, 2758, 2727, 1, 0, 0, 0, 2758, 2731, 1, 0, 0, 0, 2758, 2736, 1, 0, 0, 0, 2758, 2738, 1, 0, 0, 0, 2758, 2740, 1, 0, 0, 0, 2758, 2743, 1, 0, 0, 0, 2758, 2746, 1, 0, 0, 0, 2758, 2751, 1, 0, 0, 0, 2759, 201, 1, 0, 0, 0, 2760, 2762, 7, 29, 0, 0, 2761, 2760, 1, 0, 0, 0, 2761, 2762, 1, 0, 0, 0, 2762, 2763, 1, 0, 0, 0, 2763, 2766, 5, 573, 0, 0, 2764, 2766, 3, 812, 406, 0, 2765, 2761, 1, 0, 0, 0, 2765, 2764, 1, 0, 0, 0, 2766, 203, 1, 0, 0, 0, 2767, 2769, 5, 46, 0, 0, 2768, 2770, 3, 366, 183, 0, 2769, 2768, 1, 0, 0, 0, 2769, 2770, 1, 0, 0, 0, 2770, 2772, 1, 0, 0, 0, 2771, 2773, 5, 359, 0, 0, 2772, 2771, 1, 0, 0, 0, 2772, 2773, 1, 0, 0, 0, 2773, 2775, 1, 0, 0, 0, 2774, 2776, 5, 295, 0, 0, 2775, 2774, 1, 0, 0, 0, 2775, 2776, 1, 0, 0, 0, 2776, 2777, 1, 0, 0, 0, 2777, 2778, 5, 247, 0, 0, 2778, 2791, 3, 818, 409, 0, 2779, 2780, 5, 215, 0, 0, 2780, 2783, 3, 316, 158, 0, 2781, 2782, 5, 239, 0, 0, 2782, 2784, 3, 316, 158, 0, 2783, 2781, 1, 0, 0, 0, 2783, 2784, 1, 0, 0, 0, 2784, 2789, 1, 0, 0, 0, 2785, 2786, 5, 373, 0, 0, 2786, 2790, 3, 316, 158, 0, 2787, 2788, 5, 269, 0, 0, 2788, 2790, 5, 373, 0, 0, 2789, 2785, 1, 0, 0, 0, 2789, 2787, 1, 0, 0, 0, 2789, 2790, 1, 0, 0, 0, 2790, 2792, 1, 0, 0, 0, 2791, 2779, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 205, 1, 0, 0, 0, 2793, 2794, 5, 46, 0, 0, 2794, 2797, 3, 176, 88, 0, 2795, 2796, 5, 282, 0, 0, 2796, 2798, 3, 814, 407, 0, 2797, 2795, 1, 0, 0, 0, 2797, 2798, 1, 0, 0, 0, 2798, 2799, 1, 0, 0, 0, 2799, 2800, 5, 255, 0, 0, 2800, 2802, 3, 808, 404, 0, 2801, 2803, 3, 102, 51, 0, 2802, 2801, 1, 0, 0, 0, 2802, 2803, 1, 0, 0, 0, 2803, 207, 1, 0, 0, 0, 2804, 2805, 5, 46, 0, 0, 2805, 2807, 5, 204, 0, 0, 2806, 2808, 3, 294, 147, 0, 2807, 2806, 1, 0, 0, 0, 2807, 2808, 1, 0, 0, 0, 2808, 2809, 1, 0, 0, 0, 2809, 2811, 3, 818, 409, 0, 2810, 2812, 5, 105, 0, 0, 2811, 2810, 1, 0, 0, 0, 2811, 2812, 1, 0, 0, 0, 2812, 2820, 1, 0, 0, 0, 2813, 2814, 5, 323, 0, 0, 2814, 2819, 3, 790, 395, 0, 2815, 2816, 7, 30, 0, 0, 2816, 2819, 3, 58, 29, 0, 2817, 2819, 5, 150, 0, 0, 2818, 2813, 1, 0, 0, 0, 2818, 2815, 1, 0, 0, 0, 2818, 2817, 1, 0, 0, 0, 2819, 2822, 1, 0, 0, 0, 2820, 2818, 1, 0, 0, 0, 2820, 2821, 1, 0, 0, 0, 2821, 209, 1, 0, 0, 0, 2822, 2820, 1, 0, 0, 0, 2823, 2824, 5, 138, 0, 0, 2824, 2825, 5, 204, 0, 0, 2825, 2826, 3, 818, 409, 0, 2826, 2831, 5, 369, 0, 0, 2827, 2828, 5, 94, 0, 0, 2828, 2830, 3, 58, 29, 0, 2829, 2827, 1, 0, 0, 0, 2830, 2833, 1, 0, 0, 0, 2831, 2829, 1, 0, 0, 0, 2831, 2832, 1, 0, 0, 0, 2832, 211, 1, 0, 0, 0, 2833, 2831, 1, 0, 0, 0, 2834, 2835, 5, 138, 0, 0, 2835, 2836, 5, 204, 0, 0, 2836, 2837, 3, 818, 409, 0, 2837, 2870, 7, 6, 0, 0, 2838, 2839, 5, 443, 0, 0, 2839, 2840, 5, 62, 0, 0, 2840, 2841, 3, 652, 326, 0, 2841, 2842, 5, 247, 0, 0, 2842, 2843, 3, 818, 409, 0, 2843, 2871, 1, 0, 0, 0, 2844, 2845, 5, 442, 0, 0, 2845, 2871, 3, 374, 187, 0, 2846, 2847, 5, 296, 0, 0, 2847, 2871, 3, 378, 189, 0, 2848, 2849, 5, 278, 0, 0, 2849, 2850, 7, 31, 0, 0, 2850, 2851, 3, 316, 158, 0, 2851, 2852, 3, 170, 85, 0, 2852, 2871, 1, 0, 0, 0, 2853, 2854, 5, 278, 0, 0, 2854, 2871, 3, 416, 208, 0, 2855, 2856, 5, 211, 0, 0, 2856, 2871, 3, 382, 191, 0, 2857, 2858, 7, 32, 0, 0, 2858, 2871, 3, 652, 326, 0, 2859, 2860, 5, 41, 0, 0, 2860, 2861, 5, 2, 0, 0, 2861, 2862, 3, 652, 326, 0, 2862, 2863, 5, 36, 0, 0, 2863, 2864, 3, 652, 326, 0, 2864, 2865, 5, 3, 0, 0, 2865, 2871, 1, 0, 0, 0, 2866, 2867, 5, 136, 0, 0, 2867, 2871, 3, 394, 197, 0, 2868, 2871, 3, 312, 156, 0, 2869, 2871, 3, 310, 155, 0, 2870, 2838, 1, 0, 0, 0, 2870, 2844, 1, 0, 0, 0, 2870, 2846, 1, 0, 0, 0, 2870, 2848, 1, 0, 0, 0, 2870, 2853, 1, 0, 0, 0, 2870, 2855, 1, 0, 0, 0, 2870, 2857, 1, 0, 0, 0, 2870, 2859, 1, 0, 0, 0, 2870, 2866, 1, 0, 0, 0, 2870, 2868, 1, 0, 0, 0, 2870, 2869, 1, 0, 0, 0, 2871, 213, 1, 0, 0, 0, 2872, 2873, 5, 46, 0, 0, 2873, 2874, 5, 63, 0, 0, 2874, 2875, 5, 174, 0, 0, 2875, 2876, 5, 381, 0, 0, 2876, 2882, 3, 818, 409, 0, 2877, 2879, 3, 216, 108, 0, 2878, 2877, 1, 0, 0, 0, 2879, 2880, 1, 0, 0, 0, 2880, 2878, 1, 0, 0, 0, 2880, 2881, 1, 0, 0, 0, 2881, 2883, 1, 0, 0, 0, 2882, 2878, 1, 0, 0, 0, 2882, 2883, 1, 0, 0, 0, 2883, 2885, 1, 0, 0, 0, 2884, 2886, 3, 220, 110, 0, 2885, 2884, 1, 0, 0, 0, 2885, 2886, 1, 0, 0, 0, 2886, 215, 1, 0, 0, 0, 2887, 2889, 7, 33, 0, 0, 2888, 2890, 3, 316, 158, 0, 2889, 2888, 1, 0, 0, 0, 2889, 2890, 1, 0, 0, 0, 2890, 2894, 1, 0, 0, 0, 2891, 2892, 5, 269, 0, 0, 2892, 2894, 7, 33, 0, 0, 2893, 2887, 1, 0, 0, 0, 2893, 2891, 1, 0, 0, 0, 2894, 217, 1, 0, 0, 0, 2895, 2896, 5, 138, 0, 0, 2896, 2897, 5, 63, 0, 0, 2897, 2898, 5, 174, 0, 0, 2898, 2899, 5, 381, 0, 0, 2899, 2913, 3, 818, 409, 0, 2900, 2902, 3, 216, 108, 0, 2901, 2900, 1, 0, 0, 0, 2902, 2903, 1, 0, 0, 0, 2903, 2901, 1, 0, 0, 0, 2903, 2904, 1, 0, 0, 0, 2904, 2906, 1, 0, 0, 0, 2905, 2901, 1, 0, 0, 0, 2905, 2906, 1, 0, 0, 0, 2906, 2907, 1, 0, 0, 0, 2907, 2914, 3, 222, 111, 0, 2908, 2910, 3, 216, 108, 0, 2909, 2908, 1, 0, 0, 0, 2910, 2911, 1, 0, 0, 0, 2911, 2909, 1, 0, 0, 0, 2911, 2912, 1, 0, 0, 0, 2912, 2914, 1, 0, 0, 0, 2913, 2905, 1, 0, 0, 0, 2913, 2909, 1, 0, 0, 0, 2914, 219, 1, 0, 0, 0, 2915, 2916, 5, 280, 0, 0, 2916, 2917, 5, 2, 0, 0, 2917, 2922, 3, 226, 113, 0, 2918, 2919, 5, 6, 0, 0, 2919, 2921, 3, 226, 113, 0, 2920, 2918, 1, 0, 0, 0, 2921, 2924, 1, 0, 0, 0, 2922, 2920, 1, 0, 0, 0, 2922, 2923, 1, 0, 0, 0, 2923, 2925, 1, 0, 0, 0, 2924, 2922, 1, 0, 0, 0, 2925, 2926, 5, 3, 0, 0, 2926, 221, 1, 0, 0, 0, 2927, 2928, 5, 280, 0, 0, 2928, 2929, 5, 2, 0, 0, 2929, 2934, 3, 224, 112, 0, 2930, 2931, 5, 6, 0, 0, 2931, 2933, 3, 224, 112, 0, 2932, 2930, 1, 0, 0, 0, 2933, 2936, 1, 0, 0, 0, 2934, 2932, 1, 0, 0, 0, 2934, 2935, 1, 0, 0, 0, 2935, 2937, 1, 0, 0, 0, 2936, 2934, 1, 0, 0, 0, 2937, 2938, 5, 3, 0, 0, 2938, 223, 1, 0, 0, 0, 2939, 2940, 7, 34, 0, 0, 2940, 2941, 3, 226, 113, 0, 2941, 225, 1, 0, 0, 0, 2942, 2943, 3, 824, 412, 0, 2943, 2944, 3, 808, 404, 0, 2944, 227, 1, 0, 0, 0, 2945, 2946, 5, 46, 0, 0, 2946, 2948, 5, 331, 0, 0, 2947, 2949, 3, 294, 147, 0, 2948, 2947, 1, 0, 0, 0, 2948, 2949, 1, 0, 0, 0, 2949, 2950, 1, 0, 0, 0, 2950, 2953, 3, 818, 409, 0, 2951, 2952, 5, 360, 0, 0, 2952, 2954, 3, 808, 404, 0, 2953, 2951, 1, 0, 0, 0, 2953, 2954, 1, 0, 0, 0, 2954, 2956, 1, 0, 0, 0, 2955, 2957, 3, 230, 115, 0, 2956, 2955, 1, 0, 0, 0, 2956, 2957, 1, 0, 0, 0, 2957, 2958, 1, 0, 0, 0, 2958, 2959, 5, 63, 0, 0, 2959, 2960, 5, 174, 0, 0, 2960, 2961, 5, 381, 0, 0, 2961, 2963, 3, 818, 409, 0, 2962, 2964, 3, 220, 110, 0, 2963, 2962, 1, 0, 0, 0, 2963, 2964, 1, 0, 0, 0, 2964, 229, 1, 0, 0, 0, 2965, 2968, 5, 375, 0, 0, 2966, 2969, 3, 808, 404, 0, 2967, 2969, 5, 78, 0, 0, 2968, 2966, 1, 0, 0, 0, 2968, 2967, 1, 0, 0, 0, 2969, 231, 1, 0, 0, 0, 2970, 2971, 5, 138, 0, 0, 2971, 2972, 5, 331, 0, 0, 2972, 2978, 3, 818, 409, 0, 2973, 2979, 3, 222, 111, 0, 2974, 2976, 3, 230, 115, 0, 2975, 2977, 3, 222, 111, 0, 2976, 2975, 1, 0, 0, 0, 2976, 2977, 1, 0, 0, 0, 2977, 2979, 1, 0, 0, 0, 2978, 2973, 1, 0, 0, 0, 2978, 2974, 1, 0, 0, 0, 2979, 233, 1, 0, 0, 0, 2980, 2981, 5, 46, 0, 0, 2981, 2982, 5, 63, 0, 0, 2982, 2984, 5, 92, 0, 0, 2983, 2985, 3, 294, 147, 0, 2984, 2983, 1, 0, 0, 0, 2984, 2985, 1, 0, 0, 0, 2985, 2986, 1, 0, 0, 0, 2986, 2987, 3, 772, 386, 0, 2987, 2989, 5, 2, 0, 0, 2988, 2990, 3, 126, 63, 0, 2989, 2988, 1, 0, 0, 0, 2989, 2990, 1, 0, 0, 0, 2990, 2991, 1, 0, 0, 0, 2991, 2993, 5, 3, 0, 0, 2992, 2994, 3, 164, 82, 0, 2993, 2992, 1, 0, 0, 0, 2993, 2994, 1, 0, 0, 0, 2994, 2995, 1, 0, 0, 0, 2995, 2996, 5, 331, 0, 0, 2996, 2998, 3, 818, 409, 0, 2997, 2999, 3, 220, 110, 0, 2998, 2997, 1, 0, 0, 0, 2998, 2999, 1, 0, 0, 0, 2999, 3020, 1, 0, 0, 0, 3000, 3001, 5, 46, 0, 0, 3001, 3002, 5, 63, 0, 0, 3002, 3004, 5, 92, 0, 0, 3003, 3005, 3, 294, 147, 0, 3004, 3003, 1, 0, 0, 0, 3004, 3005, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3007, 3, 772, 386, 0, 3007, 3008, 5, 285, 0, 0, 3008, 3009, 5, 275, 0, 0, 3009, 3011, 3, 774, 387, 0, 3010, 3012, 3, 124, 62, 0, 3011, 3010, 1, 0, 0, 0, 3011, 3012, 1, 0, 0, 0, 3012, 3013, 1, 0, 0, 0, 3013, 3014, 3, 106, 53, 0, 3014, 3015, 5, 331, 0, 0, 3015, 3017, 3, 818, 409, 0, 3016, 3018, 3, 220, 110, 0, 3017, 3016, 1, 0, 0, 0, 3017, 3018, 1, 0, 0, 0, 3018, 3020, 1, 0, 0, 0, 3019, 2980, 1, 0, 0, 0, 3019, 3000, 1, 0, 0, 0, 3020, 235, 1, 0, 0, 0, 3021, 3022, 5, 444, 0, 0, 3022, 3023, 5, 63, 0, 0, 3023, 3024, 5, 323, 0, 0, 3024, 3034, 3, 790, 395, 0, 3025, 3026, 5, 74, 0, 0, 3026, 3029, 5, 94, 0, 0, 3027, 3029, 5, 59, 0, 0, 3028, 3025, 1, 0, 0, 0, 3028, 3027, 1, 0, 0, 0, 3029, 3030, 1, 0, 0, 0, 3030, 3031, 5, 2, 0, 0, 3031, 3032, 3, 628, 314, 0, 3032, 3033, 5, 3, 0, 0, 3033, 3035, 1, 0, 0, 0, 3034, 3028, 1, 0, 0, 0, 3034, 3035, 1, 0, 0, 0, 3035, 3036, 1, 0, 0, 0, 3036, 3037, 5, 64, 0, 0, 3037, 3038, 5, 331, 0, 0, 3038, 3039, 3, 818, 409, 0, 3039, 3040, 5, 71, 0, 0, 3040, 3042, 3, 818, 409, 0, 3041, 3043, 3, 220, 110, 0, 3042, 3041, 1, 0, 0, 0, 3042, 3043, 1, 0, 0, 0, 3043, 237, 1, 0, 0, 0, 3044, 3045, 5, 46, 0, 0, 3045, 3046, 5, 99, 0, 0, 3046, 3048, 5, 257, 0, 0, 3047, 3049, 3, 294, 147, 0, 3048, 3047, 1, 0, 0, 0, 3048, 3049, 1, 0, 0, 0, 3049, 3050, 1, 0, 0, 0, 3050, 3053, 5, 62, 0, 0, 3051, 3054, 3, 814, 407, 0, 3052, 3054, 5, 99, 0, 0, 3053, 3051, 1, 0, 0, 0, 3053, 3052, 1, 0, 0, 0, 3054, 3055, 1, 0, 0, 0, 3055, 3056, 5, 331, 0, 0, 3056, 3058, 3, 818, 409, 0, 3057, 3059, 3, 220, 110, 0, 3058, 3057, 1, 0, 0, 0, 3058, 3059, 1, 0, 0, 0, 3059, 239, 1, 0, 0, 0, 3060, 3061, 5, 138, 0, 0, 3061, 3062, 5, 99, 0, 0, 3062, 3063, 5, 257, 0, 0, 3063, 3066, 5, 62, 0, 0, 3064, 3067, 3, 814, 407, 0, 3065, 3067, 5, 99, 0, 0, 3066, 3064, 1, 0, 0, 0, 3066, 3065, 1, 0, 0, 0, 3067, 3068, 1, 0, 0, 0, 3068, 3069, 5, 331, 0, 0, 3069, 3070, 3, 818, 409, 0, 3070, 3071, 3, 222, 111, 0, 3071, 241, 1, 0, 0, 0, 3072, 3073, 5, 46, 0, 0, 3073, 3074, 5, 445, 0, 0, 3074, 3075, 3, 818, 409, 0, 3075, 3076, 5, 80, 0, 0, 3076, 3083, 3, 780, 390, 0, 3077, 3081, 5, 36, 0, 0, 3078, 3082, 5, 541, 0, 0, 3079, 3082, 5, 542, 0, 0, 3080, 3082, 3, 826, 413, 0, 3081, 3078, 1, 0, 0, 0, 3081, 3079, 1, 0, 0, 0, 3081, 3080, 1, 0, 0, 0, 3082, 3084, 1, 0, 0, 0, 3083, 3077, 1, 0, 0, 0, 3083, 3084, 1, 0, 0, 0, 3084, 3087, 1, 0, 0, 0, 3085, 3086, 5, 62, 0, 0, 3086, 3088, 7, 35, 0, 0, 3087, 3085, 1, 0, 0, 0, 3087, 3088, 1, 0, 0, 0, 3088, 3091, 1, 0, 0, 0, 3089, 3090, 5, 94, 0, 0, 3090, 3092, 3, 816, 408, 0, 3091, 3089, 1, 0, 0, 0, 3091, 3092, 1, 0, 0, 0, 3092, 3094, 1, 0, 0, 0, 3093, 3095, 3, 250, 125, 0, 3094, 3093, 1, 0, 0, 0, 3094, 3095, 1, 0, 0, 0, 3095, 3097, 1, 0, 0, 0, 3096, 3098, 3, 252, 126, 0, 3097, 3096, 1, 0, 0, 0, 3097, 3098, 1, 0, 0, 0, 3098, 243, 1, 0, 0, 0, 3099, 3100, 5, 138, 0, 0, 3100, 3101, 5, 445, 0, 0, 3101, 3102, 3, 818, 409, 0, 3102, 3103, 5, 80, 0, 0, 3103, 3106, 3, 780, 390, 0, 3104, 3105, 5, 94, 0, 0, 3105, 3107, 3, 816, 408, 0, 3106, 3104, 1, 0, 0, 0, 3106, 3107, 1, 0, 0, 0, 3107, 3109, 1, 0, 0, 0, 3108, 3110, 3, 250, 125, 0, 3109, 3108, 1, 0, 0, 0, 3109, 3110, 1, 0, 0, 0, 3110, 3112, 1, 0, 0, 0, 3111, 3113, 3, 252, 126, 0, 3112, 3111, 1, 0, 0, 0, 3112, 3113, 1, 0, 0, 0, 3113, 245, 1, 0, 0, 0, 3114, 3115, 5, 138, 0, 0, 3115, 3116, 5, 296, 0, 0, 3116, 3118, 3, 796, 398, 0, 3117, 3119, 3, 368, 184, 0, 3118, 3117, 1, 0, 0, 0, 3118, 3119, 1, 0, 0, 0, 3119, 3146, 1, 0, 0, 0, 3120, 3124, 3, 248, 124, 0, 3121, 3123, 3, 248, 124, 0, 3122, 3121, 1, 0, 0, 0, 3123, 3126, 1, 0, 0, 0, 3124, 3122, 1, 0, 0, 0, 3124, 3125, 1, 0, 0, 0, 3125, 3128, 1, 0, 0, 0, 3126, 3124, 1, 0, 0, 0, 3127, 3129, 5, 315, 0, 0, 3128, 3127, 1, 0, 0, 0, 3128, 3129, 1, 0, 0, 0, 3129, 3147, 1, 0, 0, 0, 3130, 3131, 5, 309, 0, 0, 3131, 3132, 5, 94, 0, 0, 3132, 3147, 3, 798, 399, 0, 3133, 3134, 5, 282, 0, 0, 3134, 3135, 5, 94, 0, 0, 3135, 3147, 3, 814, 407, 0, 3136, 3137, 5, 333, 0, 0, 3137, 3138, 5, 323, 0, 0, 3138, 3147, 3, 32, 16, 0, 3139, 3141, 5, 269, 0, 0, 3140, 3139, 1, 0, 0, 0, 3140, 3141, 1, 0, 0, 0, 3141, 3142, 1, 0, 0, 0, 3142, 3143, 5, 462, 0, 0, 3143, 3144, 5, 80, 0, 0, 3144, 3145, 5, 204, 0, 0, 3145, 3147, 3, 818, 409, 0, 3146, 3120, 1, 0, 0, 0, 3146, 3130, 1, 0, 0, 0, 3146, 3133, 1, 0, 0, 0, 3146, 3136, 1, 0, 0, 0, 3146, 3140, 1, 0, 0, 0, 3147, 247, 1, 0, 0, 0, 3148, 3150, 5, 205, 0, 0, 3149, 3148, 1, 0, 0, 0, 3149, 3150, 1, 0, 0, 0, 3150, 3151, 1, 0, 0, 0, 3151, 3152, 5, 327, 0, 0, 3152, 3159, 5, 243, 0, 0, 3153, 3155, 5, 205, 0, 0, 3154, 3153, 1, 0, 0, 0, 3154, 3155, 1, 0, 0, 0, 3155, 3156, 1, 0, 0, 0, 3156, 3157, 5, 327, 0, 0, 3157, 3159, 5, 181, 0, 0, 3158, 3149, 1, 0, 0, 0, 3158, 3154, 1, 0, 0, 0, 3159, 3178, 1, 0, 0, 0, 3160, 3161, 5, 333, 0, 0, 3161, 3162, 3, 818, 409, 0, 3162, 3165, 7, 36, 0, 0, 3163, 3166, 3, 818, 409, 0, 3164, 3166, 5, 53, 0, 0, 3165, 3163, 1, 0, 0, 0, 3165, 3164, 1, 0, 0, 0, 3166, 3178, 1, 0, 0, 0, 3167, 3168, 5, 333, 0, 0, 3168, 3169, 3, 818, 409, 0, 3169, 3170, 5, 64, 0, 0, 3170, 3171, 5, 434, 0, 0, 3171, 3178, 1, 0, 0, 0, 3172, 3175, 5, 313, 0, 0, 3173, 3176, 3, 818, 409, 0, 3174, 3176, 5, 30, 0, 0, 3175, 3173, 1, 0, 0, 0, 3175, 3174, 1, 0, 0, 0, 3176, 3178, 1, 0, 0, 0, 3177, 3158, 1, 0, 0, 0, 3177, 3160, 1, 0, 0, 0, 3177, 3167, 1, 0, 0, 0, 3177, 3172, 1, 0, 0, 0, 3178, 249, 1, 0, 0, 0, 3179, 3180, 5, 100, 0, 0, 3180, 3181, 5, 2, 0, 0, 3181, 3182, 3, 674, 337, 0, 3182, 3183, 5, 3, 0, 0, 3183, 251, 1, 0, 0, 0, 3184, 3185, 5, 105, 0, 0, 3185, 3186, 5, 42, 0, 0, 3186, 3187, 5, 2, 0, 0, 3187, 3188, 3, 674, 337, 0, 3188, 3189, 5, 3, 0, 0, 3189, 253, 1, 0, 0, 0, 3190, 3191, 5, 46, 0, 0, 3191, 3192, 5, 131, 0, 0, 3192, 3193, 5, 446, 0, 0, 3193, 3194, 3, 818, 409, 0, 3194, 3195, 5, 360, 0, 0, 3195, 3196, 7, 37, 0, 0, 3196, 3197, 5, 215, 0, 0, 3197, 3198, 3, 316, 158, 0, 3198, 255, 1, 0, 0, 0, 3199, 3201, 5, 46, 0, 0, 3200, 3202, 3, 366, 183, 0, 3201, 3200, 1, 0, 0, 0, 3201, 3202, 1, 0, 0, 0, 3202, 3203, 1, 0, 0, 0, 3203, 3204, 5, 357, 0, 0, 3204, 3205, 3, 818, 409, 0, 3205, 3206, 3, 258, 129, 0, 3206, 3207, 3, 260, 130, 0, 3207, 3208, 5, 80, 0, 0, 3208, 3220, 3, 774, 387, 0, 3209, 3216, 5, 447, 0, 0, 3210, 3211, 7, 38, 0, 0, 3211, 3213, 7, 39, 0, 0, 3212, 3214, 5, 36, 0, 0, 3213, 3212, 1, 0, 0, 0, 3213, 3214, 1, 0, 0, 0, 3214, 3215, 1, 0, 0, 0, 3215, 3217, 3, 818, 409, 0, 3216, 3210, 1, 0, 0, 0, 3217, 3218, 1, 0, 0, 0, 3218, 3216, 1, 0, 0, 0, 3218, 3219, 1, 0, 0, 0, 3219, 3221, 1, 0, 0, 0, 3220, 3209, 1, 0, 0, 0, 3220, 3221, 1, 0, 0, 0, 3221, 3227, 1, 0, 0, 0, 3222, 3224, 5, 62, 0, 0, 3223, 3225, 5, 192, 0, 0, 3224, 3223, 1, 0, 0, 0, 3224, 3225, 1, 0, 0, 0, 3225, 3226, 1, 0, 0, 0, 3226, 3228, 7, 40, 0, 0, 3227, 3222, 1, 0, 0, 0, 3227, 3228, 1, 0, 0, 0, 3228, 3230, 1, 0, 0, 0, 3229, 3231, 3, 264, 132, 0, 3230, 3229, 1, 0, 0, 0, 3230, 3231, 1, 0, 0, 0, 3231, 3232, 1, 0, 0, 0, 3232, 3233, 5, 202, 0, 0, 3233, 3234, 3, 266, 133, 0, 3234, 3235, 5, 2, 0, 0, 3235, 3236, 3, 268, 134, 0, 3236, 3237, 5, 3, 0, 0, 3237, 3278, 1, 0, 0, 0, 3238, 3240, 5, 46, 0, 0, 3239, 3241, 3, 366, 183, 0, 3240, 3239, 1, 0, 0, 0, 3240, 3241, 1, 0, 0, 0, 3241, 3243, 1, 0, 0, 0, 3242, 3244, 5, 45, 0, 0, 3243, 3242, 1, 0, 0, 0, 3243, 3244, 1, 0, 0, 0, 3244, 3245, 1, 0, 0, 0, 3245, 3246, 5, 357, 0, 0, 3246, 3247, 3, 818, 409, 0, 3247, 3248, 3, 258, 129, 0, 3248, 3249, 3, 260, 130, 0, 3249, 3250, 5, 80, 0, 0, 3250, 3253, 3, 774, 387, 0, 3251, 3252, 5, 64, 0, 0, 3252, 3254, 3, 780, 390, 0, 3253, 3251, 1, 0, 0, 0, 3253, 3254, 1, 0, 0, 0, 3254, 3258, 1, 0, 0, 0, 3255, 3257, 3, 272, 136, 0, 3256, 3255, 1, 0, 0, 0, 3257, 3260, 1, 0, 0, 0, 3258, 3256, 1, 0, 0, 0, 3258, 3259, 1, 0, 0, 0, 3259, 3266, 1, 0, 0, 0, 3260, 3258, 1, 0, 0, 0, 3261, 3263, 5, 62, 0, 0, 3262, 3264, 5, 192, 0, 0, 3263, 3262, 1, 0, 0, 0, 3263, 3264, 1, 0, 0, 0, 3264, 3265, 1, 0, 0, 0, 3265, 3267, 7, 40, 0, 0, 3266, 3261, 1, 0, 0, 0, 3266, 3267, 1, 0, 0, 0, 3267, 3269, 1, 0, 0, 0, 3268, 3270, 3, 264, 132, 0, 3269, 3268, 1, 0, 0, 0, 3269, 3270, 1, 0, 0, 0, 3270, 3271, 1, 0, 0, 0, 3271, 3272, 5, 202, 0, 0, 3272, 3273, 3, 266, 133, 0, 3273, 3274, 5, 2, 0, 0, 3274, 3275, 3, 268, 134, 0, 3275, 3276, 5, 3, 0, 0, 3276, 3278, 1, 0, 0, 0, 3277, 3199, 1, 0, 0, 0, 3277, 3238, 1, 0, 0, 0, 3278, 257, 1, 0, 0, 0, 3279, 3284, 5, 145, 0, 0, 3280, 3284, 5, 135, 0, 0, 3281, 3282, 5, 242, 0, 0, 3282, 3284, 5, 275, 0, 0, 3283, 3279, 1, 0, 0, 0, 3283, 3280, 1, 0, 0, 0, 3283, 3281, 1, 0, 0, 0, 3284, 259, 1, 0, 0, 0, 3285, 3290, 3, 262, 131, 0, 3286, 3287, 5, 82, 0, 0, 3287, 3289, 3, 262, 131, 0, 3288, 3286, 1, 0, 0, 0, 3289, 3292, 1, 0, 0, 0, 3290, 3288, 1, 0, 0, 0, 3290, 3291, 1, 0, 0, 0, 3291, 261, 1, 0, 0, 0, 3292, 3290, 1, 0, 0, 0, 3293, 3302, 5, 241, 0, 0, 3294, 3302, 5, 182, 0, 0, 3295, 3298, 5, 369, 0, 0, 3296, 3297, 5, 275, 0, 0, 3297, 3299, 3, 148, 74, 0, 3298, 3296, 1, 0, 0, 0, 3298, 3299, 1, 0, 0, 0, 3299, 3302, 1, 0, 0, 0, 3300, 3302, 5, 358, 0, 0, 3301, 3293, 1, 0, 0, 0, 3301, 3294, 1, 0, 0, 0, 3301, 3295, 1, 0, 0, 0, 3301, 3300, 1, 0, 0, 0, 3302, 263, 1, 0, 0, 0, 3303, 3304, 5, 102, 0, 0, 3304, 3305, 5, 2, 0, 0, 3305, 3306, 3, 674, 337, 0, 3306, 3307, 5, 3, 0, 0, 3307, 265, 1, 0, 0, 0, 3308, 3309, 5, 211, 0, 0, 3309, 3313, 3, 806, 403, 0, 3310, 3311, 5, 296, 0, 0, 3311, 3313, 3, 796, 398, 0, 3312, 3308, 1, 0, 0, 0, 3312, 3310, 1, 0, 0, 0, 3313, 267, 1, 0, 0, 0, 3314, 3317, 3, 270, 135, 0, 3315, 3317, 1, 0, 0, 0, 3316, 3314, 1, 0, 0, 0, 3316, 3315, 1, 0, 0, 0, 3317, 3322, 1, 0, 0, 0, 3318, 3319, 5, 6, 0, 0, 3319, 3321, 3, 270, 135, 0, 3320, 3318, 1, 0, 0, 0, 3321, 3324, 1, 0, 0, 0, 3322, 3320, 1, 0, 0, 0, 3322, 3323, 1, 0, 0, 0, 3323, 269, 1, 0, 0, 0, 3324, 3322, 1, 0, 0, 0, 3325, 3330, 5, 571, 0, 0, 3326, 3330, 5, 573, 0, 0, 3327, 3330, 3, 808, 404, 0, 3328, 3330, 3, 824, 412, 0, 3329, 3325, 1, 0, 0, 0, 3329, 3326, 1, 0, 0, 0, 3329, 3327, 1, 0, 0, 0, 3329, 3328, 1, 0, 0, 0, 3330, 271, 1, 0, 0, 0, 3331, 3333, 5, 77, 0, 0, 3332, 3331, 1, 0, 0, 0, 3332, 3333, 1, 0, 0, 0, 3333, 3334, 1, 0, 0, 0, 3334, 3342, 5, 54, 0, 0, 3335, 3336, 5, 69, 0, 0, 3336, 3342, 7, 9, 0, 0, 3337, 3338, 5, 77, 0, 0, 3338, 3342, 5, 371, 0, 0, 3339, 3340, 5, 269, 0, 0, 3340, 3342, 5, 228, 0, 0, 3341, 3332, 1, 0, 0, 0, 3341, 3335, 1, 0, 0, 0, 3341, 3337, 1, 0, 0, 0, 3341, 3339, 1, 0, 0, 0, 3342, 273, 1, 0, 0, 0, 3343, 3344, 5, 46, 0, 0, 3344, 3345, 5, 198, 0, 0, 3345, 3346, 5, 357, 0, 0, 3346, 3347, 3, 818, 409, 0, 3347, 3348, 5, 80, 0, 0, 3348, 3358, 3, 824, 412, 0, 3349, 3350, 5, 102, 0, 0, 3350, 3355, 3, 276, 138, 0, 3351, 3352, 5, 33, 0, 0, 3352, 3354, 3, 276, 138, 0, 3353, 3351, 1, 0, 0, 0, 3354, 3357, 1, 0, 0, 0, 3355, 3353, 1, 0, 0, 0, 3355, 3356, 1, 0, 0, 0, 3356, 3359, 1, 0, 0, 0, 3357, 3355, 1, 0, 0, 0, 3358, 3349, 1, 0, 0, 0, 3358, 3359, 1, 0, 0, 0, 3359, 3360, 1, 0, 0, 0, 3360, 3361, 5, 202, 0, 0, 3361, 3362, 3, 266, 133, 0, 3362, 3363, 5, 2, 0, 0, 3363, 3364, 5, 3, 0, 0, 3364, 275, 1, 0, 0, 0, 3365, 3366, 3, 818, 409, 0, 3366, 3367, 5, 68, 0, 0, 3367, 3368, 5, 2, 0, 0, 3368, 3372, 3, 808, 404, 0, 3369, 3371, 3, 462, 231, 0, 3370, 3369, 1, 0, 0, 0, 3371, 3374, 1, 0, 0, 0, 3372, 3370, 1, 0, 0, 0, 3372, 3373, 1, 0, 0, 0, 3373, 3375, 1, 0, 0, 0, 3374, 3372, 1, 0, 0, 0, 3375, 3376, 5, 3, 0, 0, 3376, 277, 1, 0, 0, 0, 3377, 3378, 5, 138, 0, 0, 3378, 3379, 5, 198, 0, 0, 3379, 3380, 5, 357, 0, 0, 3380, 3386, 3, 818, 409, 0, 3381, 3383, 5, 193, 0, 0, 3382, 3384, 7, 14, 0, 0, 3383, 3382, 1, 0, 0, 0, 3383, 3384, 1, 0, 0, 0, 3384, 3387, 1, 0, 0, 0, 3385, 3387, 5, 186, 0, 0, 3386, 3381, 1, 0, 0, 0, 3386, 3385, 1, 0, 0, 0, 3387, 279, 1, 0, 0, 0, 3388, 3389, 5, 46, 0, 0, 3389, 3390, 5, 140, 0, 0, 3390, 3391, 3, 316, 158, 0, 3391, 3392, 5, 42, 0, 0, 3392, 3393, 5, 2, 0, 0, 3393, 3394, 3, 674, 337, 0, 3394, 3398, 5, 3, 0, 0, 3395, 3397, 3, 272, 136, 0, 3396, 3395, 1, 0, 0, 0, 3397, 3400, 1, 0, 0, 0, 3398, 3396, 1, 0, 0, 0, 3398, 3399, 1, 0, 0, 0, 3399, 281, 1, 0, 0, 0, 3400, 3398, 1, 0, 0, 0, 3401, 3403, 5, 46, 0, 0, 3402, 3404, 3, 366, 183, 0, 3403, 3402, 1, 0, 0, 0, 3403, 3404, 1, 0, 0, 0, 3404, 3405, 1, 0, 0, 0, 3405, 3406, 5, 136, 0, 0, 3406, 3421, 3, 806, 403, 0, 3407, 3408, 3, 392, 196, 0, 3408, 3409, 3, 284, 142, 0, 3409, 3422, 1, 0, 0, 0, 3410, 3411, 5, 2, 0, 0, 3411, 3416, 3, 290, 145, 0, 3412, 3413, 5, 6, 0, 0, 3413, 3415, 3, 290, 145, 0, 3414, 3412, 1, 0, 0, 0, 3415, 3418, 1, 0, 0, 0, 3416, 3414, 1, 0, 0, 0, 3416, 3417, 1, 0, 0, 0, 3417, 3419, 1, 0, 0, 0, 3418, 3416, 1, 0, 0, 0, 3419, 3420, 5, 3, 0, 0, 3420, 3422, 1, 0, 0, 0, 3421, 3407, 1, 0, 0, 0, 3421, 3410, 1, 0, 0, 0, 3422, 3480, 1, 0, 0, 0, 3423, 3424, 5, 46, 0, 0, 3424, 3425, 5, 278, 0, 0, 3425, 3426, 3, 414, 207, 0, 3426, 3427, 3, 284, 142, 0, 3427, 3480, 1, 0, 0, 0, 3428, 3429, 5, 46, 0, 0, 3429, 3430, 5, 360, 0, 0, 3430, 3431, 3, 316, 158, 0, 3431, 3449, 5, 36, 0, 0, 3432, 3434, 5, 2, 0, 0, 3433, 3435, 3, 642, 321, 0, 3434, 3433, 1, 0, 0, 0, 3434, 3435, 1, 0, 0, 0, 3435, 3436, 1, 0, 0, 0, 3436, 3450, 5, 3, 0, 0, 3437, 3438, 5, 196, 0, 0, 3438, 3446, 5, 2, 0, 0, 3439, 3443, 3, 808, 404, 0, 3440, 3442, 3, 462, 231, 0, 3441, 3440, 1, 0, 0, 0, 3442, 3445, 1, 0, 0, 0, 3443, 3441, 1, 0, 0, 0, 3443, 3444, 1, 0, 0, 0, 3444, 3447, 1, 0, 0, 0, 3445, 3443, 1, 0, 0, 0, 3446, 3439, 1, 0, 0, 0, 3446, 3447, 1, 0, 0, 0, 3447, 3448, 1, 0, 0, 0, 3448, 3450, 5, 3, 0, 0, 3449, 3432, 1, 0, 0, 0, 3449, 3437, 1, 0, 0, 0, 3450, 3480, 1, 0, 0, 0, 3451, 3452, 5, 46, 0, 0, 3452, 3453, 5, 360, 0, 0, 3453, 3459, 3, 316, 158, 0, 3454, 3455, 5, 36, 0, 0, 3455, 3457, 5, 299, 0, 0, 3456, 3454, 1, 0, 0, 0, 3456, 3457, 1, 0, 0, 0, 3457, 3458, 1, 0, 0, 0, 3458, 3460, 3, 284, 142, 0, 3459, 3456, 1, 0, 0, 0, 3459, 3460, 1, 0, 0, 0, 3460, 3480, 1, 0, 0, 0, 3461, 3462, 5, 46, 0, 0, 3462, 3463, 5, 355, 0, 0, 3463, 3464, 5, 325, 0, 0, 3464, 3465, 7, 41, 0, 0, 3465, 3466, 3, 316, 158, 0, 3466, 3467, 3, 284, 142, 0, 3467, 3480, 1, 0, 0, 0, 3468, 3469, 5, 46, 0, 0, 3469, 3471, 5, 108, 0, 0, 3470, 3472, 3, 294, 147, 0, 3471, 3470, 1, 0, 0, 0, 3471, 3472, 1, 0, 0, 0, 3472, 3473, 1, 0, 0, 0, 3473, 3477, 3, 316, 158, 0, 3474, 3478, 3, 284, 142, 0, 3475, 3476, 5, 64, 0, 0, 3476, 3478, 3, 316, 158, 0, 3477, 3474, 1, 0, 0, 0, 3477, 3475, 1, 0, 0, 0, 3478, 3480, 1, 0, 0, 0, 3479, 3401, 1, 0, 0, 0, 3479, 3423, 1, 0, 0, 0, 3479, 3428, 1, 0, 0, 0, 3479, 3451, 1, 0, 0, 0, 3479, 3461, 1, 0, 0, 0, 3479, 3468, 1, 0, 0, 0, 3480, 283, 1, 0, 0, 0, 3481, 3482, 5, 2, 0, 0, 3482, 3487, 3, 286, 143, 0, 3483, 3484, 5, 6, 0, 0, 3484, 3486, 3, 286, 143, 0, 3485, 3483, 1, 0, 0, 0, 3486, 3489, 1, 0, 0, 0, 3487, 3485, 1, 0, 0, 0, 3487, 3488, 1, 0, 0, 0, 3488, 3490, 1, 0, 0, 0, 3489, 3487, 1, 0, 0, 0, 3490, 3491, 5, 3, 0, 0, 3491, 285, 1, 0, 0, 0, 3492, 3495, 3, 824, 412, 0, 3493, 3494, 5, 10, 0, 0, 3494, 3496, 3, 288, 144, 0, 3495, 3493, 1, 0, 0, 0, 3495, 3496, 1, 0, 0, 0, 3496, 287, 1, 0, 0, 0, 3497, 3504, 3, 388, 194, 0, 3498, 3504, 3, 834, 417, 0, 3499, 3504, 3, 726, 363, 0, 3500, 3504, 3, 202, 101, 0, 3501, 3504, 3, 808, 404, 0, 3502, 3504, 5, 407, 0, 0, 3503, 3497, 1, 0, 0, 0, 3503, 3498, 1, 0, 0, 0, 3503, 3499, 1, 0, 0, 0, 3503, 3500, 1, 0, 0, 0, 3503, 3501, 1, 0, 0, 0, 3503, 3502, 1, 0, 0, 0, 3504, 289, 1, 0, 0, 0, 3505, 3506, 3, 826, 413, 0, 3506, 3507, 5, 10, 0, 0, 3507, 3508, 3, 288, 144, 0, 3508, 291, 1, 0, 0, 0, 3509, 3510, 5, 138, 0, 0, 3510, 3511, 5, 360, 0, 0, 3511, 3512, 3, 316, 158, 0, 3512, 3513, 5, 133, 0, 0, 3513, 3515, 5, 450, 0, 0, 3514, 3516, 3, 294, 147, 0, 3515, 3514, 1, 0, 0, 0, 3515, 3516, 1, 0, 0, 0, 3516, 3517, 1, 0, 0, 0, 3517, 3520, 3, 808, 404, 0, 3518, 3519, 7, 42, 0, 0, 3519, 3521, 3, 808, 404, 0, 3520, 3518, 1, 0, 0, 0, 3520, 3521, 1, 0, 0, 0, 3521, 3532, 1, 0, 0, 0, 3522, 3523, 5, 138, 0, 0, 3523, 3524, 5, 360, 0, 0, 3524, 3525, 3, 316, 158, 0, 3525, 3526, 5, 309, 0, 0, 3526, 3527, 5, 450, 0, 0, 3527, 3528, 3, 808, 404, 0, 3528, 3529, 5, 94, 0, 0, 3529, 3530, 3, 808, 404, 0, 3530, 3532, 1, 0, 0, 0, 3531, 3509, 1, 0, 0, 0, 3531, 3522, 1, 0, 0, 0, 3532, 293, 1, 0, 0, 0, 3533, 3534, 5, 220, 0, 0, 3534, 3535, 5, 77, 0, 0, 3535, 3536, 5, 396, 0, 0, 3536, 295, 1, 0, 0, 0, 3537, 3538, 5, 46, 0, 0, 3538, 3539, 5, 278, 0, 0, 3539, 3540, 5, 156, 0, 0, 3540, 3542, 3, 316, 158, 0, 3541, 3543, 5, 53, 0, 0, 3542, 3541, 1, 0, 0, 0, 3542, 3543, 1, 0, 0, 0, 3543, 3544, 1, 0, 0, 0, 3544, 3545, 5, 62, 0, 0, 3545, 3546, 5, 360, 0, 0, 3546, 3547, 3, 652, 326, 0, 3547, 3550, 3, 170, 85, 0, 3548, 3549, 5, 206, 0, 0, 3549, 3551, 3, 316, 158, 0, 3550, 3548, 1, 0, 0, 0, 3550, 3551, 1, 0, 0, 0, 3551, 3552, 1, 0, 0, 0, 3552, 3553, 5, 36, 0, 0, 3553, 3558, 3, 298, 149, 0, 3554, 3555, 5, 6, 0, 0, 3555, 3557, 3, 298, 149, 0, 3556, 3554, 1, 0, 0, 0, 3557, 3560, 1, 0, 0, 0, 3558, 3556, 1, 0, 0, 0, 3558, 3559, 1, 0, 0, 0, 3559, 297, 1, 0, 0, 0, 3560, 3558, 1, 0, 0, 0, 3561, 3562, 5, 278, 0, 0, 3562, 3563, 5, 571, 0, 0, 3563, 3565, 3, 414, 207, 0, 3564, 3566, 3, 412, 206, 0, 3565, 3564, 1, 0, 0, 0, 3565, 3566, 1, 0, 0, 0, 3566, 3574, 1, 0, 0, 0, 3567, 3572, 5, 62, 0, 0, 3568, 3573, 5, 325, 0, 0, 3569, 3570, 5, 83, 0, 0, 3570, 3571, 5, 147, 0, 0, 3571, 3573, 3, 316, 158, 0, 3572, 3568, 1, 0, 0, 0, 3572, 3569, 1, 0, 0, 0, 3573, 3575, 1, 0, 0, 0, 3574, 3567, 1, 0, 0, 0, 3574, 3575, 1, 0, 0, 0, 3575, 3577, 1, 0, 0, 0, 3576, 3578, 5, 302, 0, 0, 3577, 3576, 1, 0, 0, 0, 3577, 3578, 1, 0, 0, 0, 3578, 3588, 1, 0, 0, 0, 3579, 3580, 5, 211, 0, 0, 3580, 3582, 5, 571, 0, 0, 3581, 3583, 3, 528, 264, 0, 3582, 3581, 1, 0, 0, 0, 3582, 3583, 1, 0, 0, 0, 3583, 3584, 1, 0, 0, 0, 3584, 3588, 3, 382, 191, 0, 3585, 3586, 5, 345, 0, 0, 3586, 3588, 3, 652, 326, 0, 3587, 3561, 1, 0, 0, 0, 3587, 3579, 1, 0, 0, 0, 3587, 3585, 1, 0, 0, 0, 3588, 299, 1, 0, 0, 0, 3589, 3590, 5, 46, 0, 0, 3590, 3591, 5, 278, 0, 0, 3591, 3592, 5, 206, 0, 0, 3592, 3593, 3, 316, 158, 0, 3593, 3594, 3, 170, 85, 0, 3594, 301, 1, 0, 0, 0, 3595, 3596, 5, 138, 0, 0, 3596, 3597, 5, 278, 0, 0, 3597, 3598, 5, 206, 0, 0, 3598, 3599, 3, 316, 158, 0, 3599, 3618, 3, 170, 85, 0, 3600, 3601, 5, 133, 0, 0, 3601, 3606, 3, 298, 149, 0, 3602, 3603, 5, 6, 0, 0, 3603, 3605, 3, 298, 149, 0, 3604, 3602, 1, 0, 0, 0, 3605, 3608, 1, 0, 0, 0, 3606, 3604, 1, 0, 0, 0, 3606, 3607, 1, 0, 0, 0, 3607, 3619, 1, 0, 0, 0, 3608, 3606, 1, 0, 0, 0, 3609, 3610, 5, 191, 0, 0, 3610, 3615, 3, 304, 152, 0, 3611, 3612, 5, 6, 0, 0, 3612, 3614, 3, 304, 152, 0, 3613, 3611, 1, 0, 0, 0, 3614, 3617, 1, 0, 0, 0, 3615, 3613, 1, 0, 0, 0, 3615, 3616, 1, 0, 0, 0, 3616, 3619, 1, 0, 0, 0, 3617, 3615, 1, 0, 0, 0, 3618, 3600, 1, 0, 0, 0, 3618, 3609, 1, 0, 0, 0, 3619, 303, 1, 0, 0, 0, 3620, 3621, 7, 43, 0, 0, 3621, 3622, 5, 571, 0, 0, 3622, 3623, 3, 528, 264, 0, 3623, 305, 1, 0, 0, 0, 3624, 3625, 5, 301, 0, 0, 3625, 3626, 5, 281, 0, 0, 3626, 3627, 5, 147, 0, 0, 3627, 3628, 3, 816, 408, 0, 3628, 3629, 5, 94, 0, 0, 3629, 3630, 3, 814, 407, 0, 3630, 307, 1, 0, 0, 0, 3631, 3654, 5, 191, 0, 0, 3632, 3655, 5, 328, 0, 0, 3633, 3655, 5, 226, 0, 0, 3634, 3655, 5, 108, 0, 0, 3635, 3655, 5, 168, 0, 0, 3636, 3655, 5, 342, 0, 0, 3637, 3655, 5, 452, 0, 0, 3638, 3655, 5, 331, 0, 0, 3639, 3640, 5, 131, 0, 0, 3640, 3655, 5, 446, 0, 0, 3641, 3642, 5, 198, 0, 0, 3642, 3655, 5, 357, 0, 0, 3643, 3655, 5, 204, 0, 0, 3644, 3646, 5, 295, 0, 0, 3645, 3644, 1, 0, 0, 0, 3645, 3646, 1, 0, 0, 0, 3646, 3647, 1, 0, 0, 0, 3647, 3655, 5, 247, 0, 0, 3648, 3649, 5, 63, 0, 0, 3649, 3650, 5, 174, 0, 0, 3650, 3655, 5, 381, 0, 0, 3651, 3652, 5, 355, 0, 0, 3652, 3653, 5, 325, 0, 0, 3653, 3655, 7, 41, 0, 0, 3654, 3632, 1, 0, 0, 0, 3654, 3633, 1, 0, 0, 0, 3654, 3634, 1, 0, 0, 0, 3654, 3635, 1, 0, 0, 0, 3654, 3636, 1, 0, 0, 0, 3654, 3637, 1, 0, 0, 0, 3654, 3638, 1, 0, 0, 0, 3654, 3639, 1, 0, 0, 0, 3654, 3641, 1, 0, 0, 0, 3654, 3643, 1, 0, 0, 0, 3654, 3645, 1, 0, 0, 0, 3654, 3648, 1, 0, 0, 0, 3654, 3651, 1, 0, 0, 0, 3655, 3657, 1, 0, 0, 0, 3656, 3658, 3, 422, 211, 0, 3657, 3656, 1, 0, 0, 0, 3657, 3658, 1, 0, 0, 0, 3658, 3659, 1, 0, 0, 0, 3659, 3661, 3, 784, 392, 0, 3660, 3662, 3, 96, 48, 0, 3661, 3660, 1, 0, 0, 0, 3661, 3662, 1, 0, 0, 0, 3662, 3839, 1, 0, 0, 0, 3663, 3665, 5, 191, 0, 0, 3664, 3666, 5, 259, 0, 0, 3665, 3664, 1, 0, 0, 0, 3665, 3666, 1, 0, 0, 0, 3666, 3667, 1, 0, 0, 0, 3667, 3669, 5, 376, 0, 0, 3668, 3670, 3, 422, 211, 0, 3669, 3668, 1, 0, 0, 0, 3669, 3670, 1, 0, 0, 0, 3670, 3671, 1, 0, 0, 0, 3671, 3676, 3, 778, 389, 0, 3672, 3673, 5, 6, 0, 0, 3673, 3675, 3, 778, 389, 0, 3674, 3672, 1, 0, 0, 0, 3675, 3678, 1, 0, 0, 0, 3676, 3674, 1, 0, 0, 0, 3676, 3677, 1, 0, 0, 0, 3677, 3680, 1, 0, 0, 0, 3678, 3676, 1, 0, 0, 0, 3679, 3681, 3, 96, 48, 0, 3680, 3679, 1, 0, 0, 0, 3680, 3681, 1, 0, 0, 0, 3681, 3839, 1, 0, 0, 0, 3682, 3684, 5, 191, 0, 0, 3683, 3685, 5, 63, 0, 0, 3684, 3683, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 3686, 1, 0, 0, 0, 3686, 3688, 5, 92, 0, 0, 3687, 3689, 3, 422, 211, 0, 3688, 3687, 1, 0, 0, 0, 3688, 3689, 1, 0, 0, 0, 3689, 3690, 1, 0, 0, 0, 3690, 3692, 3, 762, 381, 0, 3691, 3693, 3, 96, 48, 0, 3692, 3691, 1, 0, 0, 0, 3692, 3693, 1, 0, 0, 0, 3693, 3839, 1, 0, 0, 0, 3694, 3695, 5, 191, 0, 0, 3695, 3697, 5, 323, 0, 0, 3696, 3698, 3, 422, 211, 0, 3697, 3696, 1, 0, 0, 0, 3697, 3698, 1, 0, 0, 0, 3698, 3699, 1, 0, 0, 0, 3699, 3701, 3, 764, 382, 0, 3700, 3702, 3, 96, 48, 0, 3701, 3700, 1, 0, 0, 0, 3701, 3702, 1, 0, 0, 0, 3702, 3839, 1, 0, 0, 0, 3703, 3704, 5, 191, 0, 0, 3704, 3706, 7, 44, 0, 0, 3705, 3707, 3, 422, 211, 0, 3706, 3705, 1, 0, 0, 0, 3706, 3707, 1, 0, 0, 0, 3707, 3708, 1, 0, 0, 0, 3708, 3709, 3, 818, 409, 0, 3709, 3710, 5, 80, 0, 0, 3710, 3712, 3, 316, 158, 0, 3711, 3713, 3, 96, 48, 0, 3712, 3711, 1, 0, 0, 0, 3712, 3713, 1, 0, 0, 0, 3713, 3839, 1, 0, 0, 0, 3714, 3715, 5, 191, 0, 0, 3715, 3717, 7, 32, 0, 0, 3716, 3718, 3, 422, 211, 0, 3717, 3716, 1, 0, 0, 0, 3717, 3718, 1, 0, 0, 0, 3718, 3719, 1, 0, 0, 0, 3719, 3724, 3, 652, 326, 0, 3720, 3721, 5, 6, 0, 0, 3721, 3723, 3, 652, 326, 0, 3722, 3720, 1, 0, 0, 0, 3723, 3726, 1, 0, 0, 0, 3724, 3722, 1, 0, 0, 0, 3724, 3725, 1, 0, 0, 0, 3725, 3728, 1, 0, 0, 0, 3726, 3724, 1, 0, 0, 0, 3727, 3729, 3, 96, 48, 0, 3728, 3727, 1, 0, 0, 0, 3728, 3729, 1, 0, 0, 0, 3729, 3839, 1, 0, 0, 0, 3730, 3731, 5, 191, 0, 0, 3731, 3732, 5, 226, 0, 0, 3732, 3734, 5, 109, 0, 0, 3733, 3735, 3, 422, 211, 0, 3734, 3733, 1, 0, 0, 0, 3734, 3735, 1, 0, 0, 0, 3735, 3736, 1, 0, 0, 0, 3736, 3738, 3, 314, 157, 0, 3737, 3739, 3, 96, 48, 0, 3738, 3737, 1, 0, 0, 0, 3738, 3739, 1, 0, 0, 0, 3739, 3839, 1, 0, 0, 0, 3740, 3741, 5, 191, 0, 0, 3741, 3743, 5, 41, 0, 0, 3742, 3744, 3, 422, 211, 0, 3743, 3742, 1, 0, 0, 0, 3743, 3744, 1, 0, 0, 0, 3744, 3745, 1, 0, 0, 0, 3745, 3746, 5, 2, 0, 0, 3746, 3747, 3, 652, 326, 0, 3747, 3748, 5, 36, 0, 0, 3748, 3749, 3, 652, 326, 0, 3749, 3751, 5, 3, 0, 0, 3750, 3752, 3, 96, 48, 0, 3751, 3750, 1, 0, 0, 0, 3751, 3752, 1, 0, 0, 0, 3752, 3839, 1, 0, 0, 0, 3753, 3754, 5, 191, 0, 0, 3754, 3755, 5, 278, 0, 0, 3755, 3757, 7, 31, 0, 0, 3756, 3758, 3, 422, 211, 0, 3757, 3756, 1, 0, 0, 0, 3757, 3758, 1, 0, 0, 0, 3758, 3759, 1, 0, 0, 0, 3759, 3760, 3, 316, 158, 0, 3760, 3762, 3, 170, 85, 0, 3761, 3763, 3, 96, 48, 0, 3762, 3761, 1, 0, 0, 0, 3762, 3763, 1, 0, 0, 0, 3763, 3839, 1, 0, 0, 0, 3764, 3765, 5, 191, 0, 0, 3765, 3766, 5, 281, 0, 0, 3766, 3767, 5, 147, 0, 0, 3767, 3769, 3, 816, 408, 0, 3768, 3770, 3, 96, 48, 0, 3769, 3768, 1, 0, 0, 0, 3769, 3770, 1, 0, 0, 0, 3770, 3839, 1, 0, 0, 0, 3771, 3772, 5, 191, 0, 0, 3772, 3774, 5, 451, 0, 0, 3773, 3775, 3, 422, 211, 0, 3774, 3773, 1, 0, 0, 0, 3774, 3775, 1, 0, 0, 0, 3775, 3776, 1, 0, 0, 0, 3776, 3778, 3, 818, 409, 0, 3777, 3779, 3, 96, 48, 0, 3778, 3777, 1, 0, 0, 0, 3778, 3779, 1, 0, 0, 0, 3779, 3839, 1, 0, 0, 0, 3780, 3781, 5, 191, 0, 0, 3781, 3783, 5, 351, 0, 0, 3782, 3784, 3, 422, 211, 0, 3783, 3782, 1, 0, 0, 0, 3783, 3784, 1, 0, 0, 0, 3784, 3785, 1, 0, 0, 0, 3785, 3839, 3, 770, 385, 0, 3786, 3787, 5, 191, 0, 0, 3787, 3789, 5, 443, 0, 0, 3788, 3790, 3, 422, 211, 0, 3789, 3788, 1, 0, 0, 0, 3789, 3790, 1, 0, 0, 0, 3790, 3791, 1, 0, 0, 0, 3791, 3792, 5, 62, 0, 0, 3792, 3793, 3, 652, 326, 0, 3793, 3794, 5, 247, 0, 0, 3794, 3796, 3, 818, 409, 0, 3795, 3797, 3, 96, 48, 0, 3796, 3795, 1, 0, 0, 0, 3796, 3797, 1, 0, 0, 0, 3797, 3839, 1, 0, 0, 0, 3798, 3799, 5, 191, 0, 0, 3799, 3801, 7, 45, 0, 0, 3800, 3802, 3, 422, 211, 0, 3801, 3800, 1, 0, 0, 0, 3801, 3802, 1, 0, 0, 0, 3802, 3803, 1, 0, 0, 0, 3803, 3839, 3, 816, 408, 0, 3804, 3805, 5, 191, 0, 0, 3805, 3806, 5, 99, 0, 0, 3806, 3808, 5, 257, 0, 0, 3807, 3809, 3, 422, 211, 0, 3808, 3807, 1, 0, 0, 0, 3808, 3809, 1, 0, 0, 0, 3809, 3810, 1, 0, 0, 0, 3810, 3813, 5, 62, 0, 0, 3811, 3814, 3, 814, 407, 0, 3812, 3814, 5, 99, 0, 0, 3813, 3811, 1, 0, 0, 0, 3813, 3812, 1, 0, 0, 0, 3814, 3815, 1, 0, 0, 0, 3815, 3816, 5, 331, 0, 0, 3816, 3839, 3, 818, 409, 0, 3817, 3818, 5, 191, 0, 0, 3818, 3820, 5, 175, 0, 0, 3819, 3821, 3, 422, 211, 0, 3820, 3819, 1, 0, 0, 0, 3820, 3821, 1, 0, 0, 0, 3821, 3822, 1, 0, 0, 0, 3822, 3836, 3, 788, 394, 0, 3823, 3825, 5, 105, 0, 0, 3824, 3823, 1, 0, 0, 0, 3824, 3825, 1, 0, 0, 0, 3825, 3826, 1, 0, 0, 0, 3826, 3827, 5, 2, 0, 0, 3827, 3832, 5, 209, 0, 0, 3828, 3829, 5, 6, 0, 0, 3829, 3831, 5, 209, 0, 0, 3830, 3828, 1, 0, 0, 0, 3831, 3834, 1, 0, 0, 0, 3832, 3830, 1, 0, 0, 0, 3832, 3833, 1, 0, 0, 0, 3833, 3835, 1, 0, 0, 0, 3834, 3832, 1, 0, 0, 0, 3835, 3837, 5, 3, 0, 0, 3836, 3824, 1, 0, 0, 0, 3836, 3837, 1, 0, 0, 0, 3837, 3839, 1, 0, 0, 0, 3838, 3631, 1, 0, 0, 0, 3838, 3663, 1, 0, 0, 0, 3838, 3682, 1, 0, 0, 0, 3838, 3694, 1, 0, 0, 0, 3838, 3703, 1, 0, 0, 0, 3838, 3714, 1, 0, 0, 0, 3838, 3730, 1, 0, 0, 0, 3838, 3740, 1, 0, 0, 0, 3838, 3753, 1, 0, 0, 0, 3838, 3764, 1, 0, 0, 0, 3838, 3771, 1, 0, 0, 0, 3838, 3780, 1, 0, 0, 0, 3838, 3786, 1, 0, 0, 0, 3838, 3798, 1, 0, 0, 0, 3838, 3804, 1, 0, 0, 0, 3838, 3817, 1, 0, 0, 0, 3839, 309, 1, 0, 0, 0, 3840, 3842, 5, 63, 0, 0, 3841, 3840, 1, 0, 0, 0, 3841, 3842, 1, 0, 0, 0, 3842, 3843, 1, 0, 0, 0, 3843, 3844, 5, 92, 0, 0, 3844, 3857, 3, 774, 387, 0, 3845, 3847, 5, 259, 0, 0, 3846, 3845, 1, 0, 0, 0, 3846, 3847, 1, 0, 0, 0, 3847, 3848, 1, 0, 0, 0, 3848, 3849, 5, 376, 0, 0, 3849, 3857, 3, 778, 389, 0, 3850, 3851, 7, 46, 0, 0, 3851, 3857, 3, 316, 158, 0, 3852, 3853, 5, 355, 0, 0, 3853, 3854, 5, 325, 0, 0, 3854, 3855, 7, 41, 0, 0, 3855, 3857, 3, 316, 158, 0, 3856, 3841, 1, 0, 0, 0, 3856, 3846, 1, 0, 0, 0, 3856, 3850, 1, 0, 0, 0, 3856, 3852, 1, 0, 0, 0, 3857, 311, 1, 0, 0, 0, 3858, 3859, 5, 198, 0, 0, 3859, 3875, 5, 357, 0, 0, 3860, 3861, 5, 131, 0, 0, 3861, 3875, 5, 446, 0, 0, 3862, 3875, 5, 204, 0, 0, 3863, 3875, 5, 452, 0, 0, 3864, 3875, 5, 331, 0, 0, 3865, 3875, 5, 318, 0, 0, 3866, 3875, 5, 451, 0, 0, 3867, 3868, 5, 63, 0, 0, 3868, 3869, 5, 174, 0, 0, 3869, 3875, 5, 381, 0, 0, 3870, 3872, 5, 295, 0, 0, 3871, 3870, 1, 0, 0, 0, 3871, 3872, 1, 0, 0, 0, 3872, 3873, 1, 0, 0, 0, 3873, 3875, 5, 247, 0, 0, 3874, 3858, 1, 0, 0, 0, 3874, 3860, 1, 0, 0, 0, 3874, 3862, 1, 0, 0, 0, 3874, 3863, 1, 0, 0, 0, 3874, 3864, 1, 0, 0, 0, 3874, 3865, 1, 0, 0, 0, 3874, 3866, 1, 0, 0, 0, 3874, 3867, 1, 0, 0, 0, 3874, 3871, 1, 0, 0, 0, 3875, 3876, 1, 0, 0, 0, 3876, 3883, 3, 818, 409, 0, 3877, 3878, 5, 323, 0, 0, 3878, 3883, 3, 790, 395, 0, 3879, 3880, 5, 175, 0, 0, 3880, 3883, 3, 788, 394, 0, 3881, 3883, 3, 176, 88, 0, 3882, 3874, 1, 0, 0, 0, 3882, 3877, 1, 0, 0, 0, 3882, 3879, 1, 0, 0, 0, 3882, 3881, 1, 0, 0, 0, 3883, 313, 1, 0, 0, 0, 3884, 3889, 3, 316, 158, 0, 3885, 3886, 5, 6, 0, 0, 3886, 3888, 3, 316, 158, 0, 3887, 3885, 1, 0, 0, 0, 3888, 3891, 1, 0, 0, 0, 3889, 3887, 1, 0, 0, 0, 3889, 3890, 1, 0, 0, 0, 3890, 315, 1, 0, 0, 0, 3891, 3889, 1, 0, 0, 0, 3892, 3894, 3, 818, 409, 0, 3893, 3895, 3, 318, 159, 0, 3894, 3893, 1, 0, 0, 0, 3894, 3895, 1, 0, 0, 0, 3895, 317, 1, 0, 0, 0, 3896, 3897, 5, 11, 0, 0, 3897, 3899, 3, 824, 412, 0, 3898, 3896, 1, 0, 0, 0, 3899, 3900, 1, 0, 0, 0, 3900, 3898, 1, 0, 0, 0, 3900, 3901, 1, 0, 0, 0, 3901, 319, 1, 0, 0, 0, 3902, 3904, 5, 358, 0, 0, 3903, 3905, 5, 92, 0, 0, 3904, 3903, 1, 0, 0, 0, 3904, 3905, 1, 0, 0, 0, 3905, 3906, 1, 0, 0, 0, 3906, 3911, 3, 322, 161, 0, 3907, 3908, 5, 6, 0, 0, 3908, 3910, 3, 322, 161, 0, 3909, 3907, 1, 0, 0, 0, 3910, 3913, 1, 0, 0, 0, 3911, 3909, 1, 0, 0, 0, 3911, 3912, 1, 0, 0, 0, 3912, 3916, 1, 0, 0, 0, 3913, 3911, 1, 0, 0, 0, 3914, 3915, 7, 47, 0, 0, 3915, 3917, 5, 219, 0, 0, 3916, 3914, 1, 0, 0, 0, 3916, 3917, 1, 0, 0, 0, 3917, 3919, 1, 0, 0, 0, 3918, 3920, 3, 96, 48, 0, 3919, 3918, 1, 0, 0, 0, 3919, 3920, 1, 0, 0, 0, 3920, 321, 1, 0, 0, 0, 3921, 3923, 5, 81, 0, 0, 3922, 3921, 1, 0, 0, 0, 3922, 3923, 1, 0, 0, 0, 3923, 3924, 1, 0, 0, 0, 3924, 3926, 3, 774, 387, 0, 3925, 3927, 5, 9, 0, 0, 3926, 3925, 1, 0, 0, 0, 3926, 3927, 1, 0, 0, 0, 3927, 323, 1, 0, 0, 0, 3928, 3929, 5, 159, 0, 0, 3929, 3988, 5, 80, 0, 0, 3930, 3989, 3, 310, 155, 0, 3931, 3989, 3, 312, 156, 0, 3932, 3933, 5, 44, 0, 0, 3933, 3935, 3, 818, 409, 0, 3934, 3936, 3, 318, 159, 0, 3935, 3934, 1, 0, 0, 0, 3935, 3936, 1, 0, 0, 0, 3936, 3937, 1, 0, 0, 0, 3937, 3938, 5, 11, 0, 0, 3938, 3939, 3, 800, 400, 0, 3939, 3989, 1, 0, 0, 0, 3940, 3941, 7, 32, 0, 0, 3941, 3989, 3, 652, 326, 0, 3942, 3943, 5, 136, 0, 0, 3943, 3989, 3, 394, 197, 0, 3944, 3945, 5, 211, 0, 0, 3945, 3989, 3, 382, 191, 0, 3946, 3947, 5, 278, 0, 0, 3947, 3989, 3, 416, 208, 0, 3948, 3949, 5, 45, 0, 0, 3949, 3950, 3, 818, 409, 0, 3950, 3956, 5, 80, 0, 0, 3951, 3957, 3, 774, 387, 0, 3952, 3954, 5, 189, 0, 0, 3953, 3952, 1, 0, 0, 0, 3953, 3954, 1, 0, 0, 0, 3954, 3955, 1, 0, 0, 0, 3955, 3957, 3, 316, 158, 0, 3956, 3951, 1, 0, 0, 0, 3956, 3953, 1, 0, 0, 0, 3957, 3989, 1, 0, 0, 0, 3958, 3959, 7, 44, 0, 0, 3959, 3960, 3, 818, 409, 0, 3960, 3961, 5, 80, 0, 0, 3961, 3962, 3, 316, 158, 0, 3962, 3989, 1, 0, 0, 0, 3963, 3964, 5, 296, 0, 0, 3964, 3989, 3, 378, 189, 0, 3965, 3966, 5, 442, 0, 0, 3966, 3989, 3, 374, 187, 0, 3967, 3968, 5, 443, 0, 0, 3968, 3969, 5, 62, 0, 0, 3969, 3970, 3, 652, 326, 0, 3970, 3971, 5, 247, 0, 0, 3971, 3972, 3, 818, 409, 0, 3972, 3989, 1, 0, 0, 0, 3973, 3974, 5, 278, 0, 0, 3974, 3975, 7, 31, 0, 0, 3975, 3976, 3, 316, 158, 0, 3976, 3977, 3, 170, 85, 0, 3977, 3989, 1, 0, 0, 0, 3978, 3979, 5, 248, 0, 0, 3979, 3980, 5, 274, 0, 0, 3980, 3989, 3, 202, 101, 0, 3981, 3982, 5, 41, 0, 0, 3982, 3983, 5, 2, 0, 0, 3983, 3984, 3, 652, 326, 0, 3984, 3985, 5, 36, 0, 0, 3985, 3986, 3, 652, 326, 0, 3986, 3987, 5, 3, 0, 0, 3987, 3989, 1, 0, 0, 0, 3988, 3930, 1, 0, 0, 0, 3988, 3931, 1, 0, 0, 0, 3988, 3932, 1, 0, 0, 0, 3988, 3940, 1, 0, 0, 0, 3988, 3942, 1, 0, 0, 0, 3988, 3944, 1, 0, 0, 0, 3988, 3946, 1, 0, 0, 0, 3988, 3948, 1, 0, 0, 0, 3988, 3958, 1, 0, 0, 0, 3988, 3963, 1, 0, 0, 0, 3988, 3965, 1, 0, 0, 0, 3988, 3967, 1, 0, 0, 0, 3988, 3973, 1, 0, 0, 0, 3988, 3978, 1, 0, 0, 0, 3988, 3981, 1, 0, 0, 0, 3989, 3990, 1, 0, 0, 0, 3990, 3993, 5, 116, 0, 0, 3991, 3994, 3, 808, 404, 0, 3992, 3994, 5, 78, 0, 0, 3993, 3991, 1, 0, 0, 0, 3993, 3992, 1, 0, 0, 0, 3994, 325, 1, 0, 0, 0, 3995, 3996, 5, 327, 0, 0, 3996, 3999, 5, 246, 0, 0, 3997, 3998, 5, 62, 0, 0, 3998, 4000, 3, 58, 29, 0, 3999, 3997, 1, 0, 0, 0, 3999, 4000, 1, 0, 0, 0, 4000, 4001, 1, 0, 0, 0, 4001, 4019, 5, 80, 0, 0, 4002, 4003, 7, 32, 0, 0, 4003, 4020, 3, 652, 326, 0, 4004, 4005, 5, 136, 0, 0, 4005, 4020, 3, 394, 197, 0, 4006, 4007, 5, 44, 0, 0, 4007, 4020, 3, 800, 400, 0, 4008, 4009, 5, 211, 0, 0, 4009, 4020, 3, 382, 191, 0, 4010, 4011, 5, 248, 0, 0, 4011, 4012, 5, 274, 0, 0, 4012, 4020, 3, 202, 101, 0, 4013, 4014, 5, 296, 0, 0, 4014, 4020, 3, 378, 189, 0, 4015, 4016, 5, 442, 0, 0, 4016, 4020, 3, 374, 187, 0, 4017, 4020, 3, 310, 155, 0, 4018, 4020, 3, 312, 156, 0, 4019, 4002, 1, 0, 0, 0, 4019, 4004, 1, 0, 0, 0, 4019, 4006, 1, 0, 0, 0, 4019, 4008, 1, 0, 0, 0, 4019, 4010, 1, 0, 0, 0, 4019, 4013, 1, 0, 0, 0, 4019, 4015, 1, 0, 0, 0, 4019, 4017, 1, 0, 0, 0, 4019, 4018, 1, 0, 0, 0, 4020, 4021, 1, 0, 0, 0, 4021, 4024, 5, 116, 0, 0, 4022, 4025, 3, 808, 404, 0, 4023, 4025, 5, 78, 0, 0, 4024, 4022, 1, 0, 0, 0, 4024, 4023, 1, 0, 0, 0, 4025, 327, 1, 0, 0, 0, 4026, 4027, 7, 48, 0, 0, 4027, 4028, 3, 330, 165, 0, 4028, 329, 1, 0, 0, 0, 4029, 4031, 7, 49, 0, 0, 4030, 4029, 1, 0, 0, 0, 4030, 4031, 1, 0, 0, 0, 4031, 4033, 1, 0, 0, 0, 4032, 4034, 3, 332, 166, 0, 4033, 4032, 1, 0, 0, 0, 4033, 4034, 1, 0, 0, 0, 4034, 4035, 1, 0, 0, 0, 4035, 4073, 3, 818, 409, 0, 4036, 4038, 7, 50, 0, 0, 4037, 4036, 1, 0, 0, 0, 4037, 4038, 1, 0, 0, 0, 4038, 4039, 1, 0, 0, 0, 4039, 4041, 3, 812, 406, 0, 4040, 4042, 3, 332, 166, 0, 4041, 4040, 1, 0, 0, 0, 4041, 4042, 1, 0, 0, 0, 4042, 4043, 1, 0, 0, 0, 4043, 4044, 3, 818, 409, 0, 4044, 4073, 1, 0, 0, 0, 4045, 4047, 5, 210, 0, 0, 4046, 4048, 3, 812, 406, 0, 4047, 4046, 1, 0, 0, 0, 4047, 4048, 1, 0, 0, 0, 4048, 4050, 1, 0, 0, 0, 4049, 4051, 3, 332, 166, 0, 4050, 4049, 1, 0, 0, 0, 4050, 4051, 1, 0, 0, 0, 4051, 4052, 1, 0, 0, 0, 4052, 4073, 3, 818, 409, 0, 4053, 4055, 5, 210, 0, 0, 4054, 4053, 1, 0, 0, 0, 4054, 4055, 1, 0, 0, 0, 4055, 4056, 1, 0, 0, 0, 4056, 4058, 5, 30, 0, 0, 4057, 4059, 3, 332, 166, 0, 4058, 4057, 1, 0, 0, 0, 4058, 4059, 1, 0, 0, 0, 4059, 4060, 1, 0, 0, 0, 4060, 4073, 3, 818, 409, 0, 4061, 4066, 5, 144, 0, 0, 4062, 4064, 5, 30, 0, 0, 4063, 4062, 1, 0, 0, 0, 4063, 4064, 1, 0, 0, 0, 4064, 4067, 1, 0, 0, 0, 4065, 4067, 3, 812, 406, 0, 4066, 4063, 1, 0, 0, 0, 4066, 4065, 1, 0, 0, 0, 4067, 4069, 1, 0, 0, 0, 4068, 4070, 3, 332, 166, 0, 4069, 4068, 1, 0, 0, 0, 4069, 4070, 1, 0, 0, 0, 4070, 4071, 1, 0, 0, 0, 4071, 4073, 3, 818, 409, 0, 4072, 4030, 1, 0, 0, 0, 4072, 4037, 1, 0, 0, 0, 4072, 4045, 1, 0, 0, 0, 4072, 4054, 1, 0, 0, 0, 4072, 4061, 1, 0, 0, 0, 4073, 331, 1, 0, 0, 0, 4074, 4075, 7, 51, 0, 0, 4075, 333, 1, 0, 0, 0, 4076, 4077, 5, 65, 0, 0, 4077, 4078, 3, 338, 169, 0, 4078, 4079, 5, 80, 0, 0, 4079, 4080, 3, 344, 172, 0, 4080, 4081, 5, 94, 0, 0, 4081, 4085, 3, 346, 173, 0, 4082, 4083, 5, 105, 0, 0, 4083, 4084, 5, 65, 0, 0, 4084, 4086, 5, 279, 0, 0, 4085, 4082, 1, 0, 0, 0, 4085, 4086, 1, 0, 0, 0, 4086, 335, 1, 0, 0, 0, 4087, 4091, 5, 317, 0, 0, 4088, 4089, 5, 65, 0, 0, 4089, 4090, 5, 279, 0, 0, 4090, 4092, 5, 62, 0, 0, 4091, 4088, 1, 0, 0, 0, 4091, 4092, 1, 0, 0, 0, 4092, 4093, 1, 0, 0, 0, 4093, 4094, 3, 338, 169, 0, 4094, 4095, 5, 80, 0, 0, 4095, 4096, 3, 344, 172, 0, 4096, 4097, 5, 64, 0, 0, 4097, 4099, 3, 346, 173, 0, 4098, 4100, 3, 96, 48, 0, 4099, 4098, 1, 0, 0, 0, 4099, 4100, 1, 0, 0, 0, 4100, 337, 1, 0, 0, 0, 4101, 4106, 3, 342, 171, 0, 4102, 4103, 5, 6, 0, 0, 4103, 4105, 3, 342, 171, 0, 4104, 4102, 1, 0, 0, 0, 4105, 4108, 1, 0, 0, 0, 4106, 4104, 1, 0, 0, 0, 4106, 4107, 1, 0, 0, 0, 4107, 4125, 1, 0, 0, 0, 4108, 4106, 1, 0, 0, 0, 4109, 4111, 5, 30, 0, 0, 4110, 4112, 5, 294, 0, 0, 4111, 4110, 1, 0, 0, 0, 4111, 4112, 1, 0, 0, 0, 4112, 4114, 1, 0, 0, 0, 4113, 4115, 3, 144, 72, 0, 4114, 4113, 1, 0, 0, 0, 4114, 4115, 1, 0, 0, 0, 4115, 4125, 1, 0, 0, 0, 4116, 4121, 3, 340, 170, 0, 4117, 4118, 5, 6, 0, 0, 4118, 4120, 3, 340, 170, 0, 4119, 4117, 1, 0, 0, 0, 4120, 4123, 1, 0, 0, 0, 4121, 4119, 1, 0, 0, 0, 4121, 4122, 1, 0, 0, 0, 4122, 4125, 1, 0, 0, 0, 4123, 4121, 1, 0, 0, 0, 4124, 4101, 1, 0, 0, 0, 4124, 4109, 1, 0, 0, 0, 4124, 4116, 1, 0, 0, 0, 4125, 339, 1, 0, 0, 0, 4126, 4127, 7, 52, 0, 0, 4127, 341, 1, 0, 0, 0, 4128, 4133, 5, 88, 0, 0, 4129, 4133, 5, 86, 0, 0, 4130, 4133, 5, 46, 0, 0, 4131, 4133, 3, 818, 409, 0, 4132, 4128, 1, 0, 0, 0, 4132, 4129, 1, 0, 0, 0, 4132, 4130, 1, 0, 0, 0, 4132, 4131, 1, 0, 0, 0, 4133, 4135, 1, 0, 0, 0, 4134, 4136, 3, 144, 72, 0, 4135, 4134, 1, 0, 0, 0, 4135, 4136, 1, 0, 0, 0, 4136, 343, 1, 0, 0, 0, 4137, 4138, 5, 92, 0, 0, 4138, 4183, 3, 762, 381, 0, 4139, 4141, 5, 328, 0, 0, 4140, 4139, 1, 0, 0, 0, 4140, 4141, 1, 0, 0, 0, 4141, 4142, 1, 0, 0, 0, 4142, 4183, 3, 760, 380, 0, 4143, 4147, 5, 63, 0, 0, 4144, 4145, 5, 174, 0, 0, 4145, 4148, 5, 381, 0, 0, 4146, 4148, 5, 331, 0, 0, 4147, 4144, 1, 0, 0, 0, 4147, 4146, 1, 0, 0, 0, 4148, 4151, 1, 0, 0, 0, 4149, 4151, 5, 247, 0, 0, 4150, 4143, 1, 0, 0, 0, 4150, 4149, 1, 0, 0, 0, 4151, 4152, 1, 0, 0, 0, 4152, 4183, 3, 784, 392, 0, 4153, 4154, 5, 211, 0, 0, 4154, 4183, 3, 380, 190, 0, 4155, 4156, 5, 296, 0, 0, 4156, 4183, 3, 376, 188, 0, 4157, 4158, 5, 442, 0, 0, 4158, 4183, 3, 372, 186, 0, 4159, 4160, 5, 175, 0, 0, 4160, 4183, 3, 766, 383, 0, 4161, 4162, 7, 32, 0, 0, 4162, 4183, 3, 314, 157, 0, 4163, 4164, 5, 248, 0, 0, 4164, 4165, 5, 274, 0, 0, 4165, 4170, 3, 202, 101, 0, 4166, 4167, 5, 6, 0, 0, 4167, 4169, 3, 202, 101, 0, 4168, 4166, 1, 0, 0, 0, 4169, 4172, 1, 0, 0, 0, 4170, 4168, 1, 0, 0, 0, 4170, 4171, 1, 0, 0, 0, 4171, 4183, 1, 0, 0, 0, 4172, 4170, 1, 0, 0, 0, 4173, 4174, 5, 323, 0, 0, 4174, 4183, 3, 764, 382, 0, 4175, 4176, 5, 351, 0, 0, 4176, 4183, 3, 782, 391, 0, 4177, 4178, 5, 30, 0, 0, 4178, 4179, 7, 53, 0, 0, 4179, 4180, 5, 68, 0, 0, 4180, 4181, 5, 323, 0, 0, 4181, 4183, 3, 764, 382, 0, 4182, 4137, 1, 0, 0, 0, 4182, 4140, 1, 0, 0, 0, 4182, 4150, 1, 0, 0, 0, 4182, 4153, 1, 0, 0, 0, 4182, 4155, 1, 0, 0, 0, 4182, 4157, 1, 0, 0, 0, 4182, 4159, 1, 0, 0, 0, 4182, 4161, 1, 0, 0, 0, 4182, 4163, 1, 0, 0, 0, 4182, 4173, 1, 0, 0, 0, 4182, 4175, 1, 0, 0, 0, 4182, 4177, 1, 0, 0, 0, 4183, 345, 1, 0, 0, 0, 4184, 4186, 5, 66, 0, 0, 4185, 4184, 1, 0, 0, 0, 4185, 4186, 1, 0, 0, 0, 4186, 4187, 1, 0, 0, 0, 4187, 4188, 3, 814, 407, 0, 4188, 4196, 1, 0, 0, 0, 4189, 4191, 5, 6, 0, 0, 4190, 4192, 5, 66, 0, 0, 4191, 4190, 1, 0, 0, 0, 4191, 4192, 1, 0, 0, 0, 4192, 4193, 1, 0, 0, 0, 4193, 4195, 3, 814, 407, 0, 4194, 4189, 1, 0, 0, 0, 4195, 4198, 1, 0, 0, 0, 4196, 4194, 1, 0, 0, 0, 4196, 4197, 1, 0, 0, 0, 4197, 347, 1, 0, 0, 0, 4198, 4196, 1, 0, 0, 0, 4199, 4200, 5, 65, 0, 0, 4200, 4205, 3, 342, 171, 0, 4201, 4202, 5, 6, 0, 0, 4202, 4204, 3, 342, 171, 0, 4203, 4201, 1, 0, 0, 0, 4204, 4207, 1, 0, 0, 0, 4205, 4203, 1, 0, 0, 0, 4205, 4206, 1, 0, 0, 0, 4206, 4208, 1, 0, 0, 0, 4207, 4205, 1, 0, 0, 0, 4208, 4209, 5, 94, 0, 0, 4209, 4213, 3, 816, 408, 0, 4210, 4211, 5, 105, 0, 0, 4211, 4212, 5, 134, 0, 0, 4212, 4214, 5, 279, 0, 0, 4213, 4210, 1, 0, 0, 0, 4213, 4214, 1, 0, 0, 0, 4214, 4218, 1, 0, 0, 0, 4215, 4216, 5, 214, 0, 0, 4216, 4217, 5, 147, 0, 0, 4217, 4219, 3, 814, 407, 0, 4218, 4215, 1, 0, 0, 0, 4218, 4219, 1, 0, 0, 0, 4219, 349, 1, 0, 0, 0, 4220, 4224, 5, 317, 0, 0, 4221, 4222, 5, 134, 0, 0, 4222, 4223, 5, 279, 0, 0, 4223, 4225, 5, 62, 0, 0, 4224, 4221, 1, 0, 0, 0, 4224, 4225, 1, 0, 0, 0, 4225, 4226, 1, 0, 0, 0, 4226, 4231, 3, 342, 171, 0, 4227, 4228, 5, 6, 0, 0, 4228, 4230, 3, 342, 171, 0, 4229, 4227, 1, 0, 0, 0, 4230, 4233, 1, 0, 0, 0, 4231, 4229, 1, 0, 0, 0, 4231, 4232, 1, 0, 0, 0, 4232, 4234, 1, 0, 0, 0, 4233, 4231, 1, 0, 0, 0, 4234, 4235, 5, 64, 0, 0, 4235, 4239, 3, 816, 408, 0, 4236, 4237, 5, 214, 0, 0, 4237, 4238, 5, 147, 0, 0, 4238, 4240, 3, 814, 407, 0, 4239, 4236, 1, 0, 0, 0, 4239, 4240, 1, 0, 0, 0, 4240, 4242, 1, 0, 0, 0, 4241, 4243, 3, 96, 48, 0, 4242, 4241, 1, 0, 0, 0, 4242, 4243, 1, 0, 0, 0, 4243, 351, 1, 0, 0, 0, 4244, 4245, 5, 138, 0, 0, 4245, 4246, 5, 53, 0, 0, 4246, 4255, 5, 294, 0, 0, 4247, 4248, 5, 68, 0, 0, 4248, 4249, 5, 323, 0, 0, 4249, 4254, 3, 764, 382, 0, 4250, 4251, 5, 62, 0, 0, 4251, 4252, 7, 2, 0, 0, 4252, 4254, 3, 816, 408, 0, 4253, 4247, 1, 0, 0, 0, 4253, 4250, 1, 0, 0, 0, 4254, 4257, 1, 0, 0, 0, 4255, 4253, 1, 0, 0, 0, 4255, 4256, 1, 0, 0, 0, 4256, 4258, 1, 0, 0, 0, 4257, 4255, 1, 0, 0, 0, 4258, 4259, 3, 354, 177, 0, 4259, 353, 1, 0, 0, 0, 4260, 4261, 5, 65, 0, 0, 4261, 4262, 3, 338, 169, 0, 4262, 4263, 5, 80, 0, 0, 4263, 4264, 3, 356, 178, 0, 4264, 4265, 5, 94, 0, 0, 4265, 4269, 3, 346, 173, 0, 4266, 4267, 5, 105, 0, 0, 4267, 4268, 5, 65, 0, 0, 4268, 4270, 5, 279, 0, 0, 4269, 4266, 1, 0, 0, 0, 4269, 4270, 1, 0, 0, 0, 4270, 4286, 1, 0, 0, 0, 4271, 4275, 5, 317, 0, 0, 4272, 4273, 5, 65, 0, 0, 4273, 4274, 5, 279, 0, 0, 4274, 4276, 5, 62, 0, 0, 4275, 4272, 1, 0, 0, 0, 4275, 4276, 1, 0, 0, 0, 4276, 4277, 1, 0, 0, 0, 4277, 4278, 3, 338, 169, 0, 4278, 4279, 5, 80, 0, 0, 4279, 4280, 3, 356, 178, 0, 4280, 4281, 5, 64, 0, 0, 4281, 4283, 3, 346, 173, 0, 4282, 4284, 3, 96, 48, 0, 4283, 4282, 1, 0, 0, 0, 4283, 4284, 1, 0, 0, 0, 4284, 4286, 1, 0, 0, 0, 4285, 4260, 1, 0, 0, 0, 4285, 4271, 1, 0, 0, 0, 4286, 355, 1, 0, 0, 0, 4287, 4288, 7, 54, 0, 0, 4288, 357, 1, 0, 0, 0, 4289, 4291, 5, 46, 0, 0, 4290, 4292, 5, 98, 0, 0, 4291, 4290, 1, 0, 0, 0, 4291, 4292, 1, 0, 0, 0, 4292, 4293, 1, 0, 0, 0, 4293, 4295, 5, 226, 0, 0, 4294, 4296, 5, 109, 0, 0, 4295, 4294, 1, 0, 0, 0, 4295, 4296, 1, 0, 0, 0, 4296, 4298, 1, 0, 0, 0, 4297, 4299, 3, 294, 147, 0, 4298, 4297, 1, 0, 0, 0, 4298, 4299, 1, 0, 0, 0, 4299, 4301, 1, 0, 0, 0, 4300, 4302, 3, 818, 409, 0, 4301, 4300, 1, 0, 0, 0, 4301, 4302, 1, 0, 0, 0, 4302, 4303, 1, 0, 0, 0, 4303, 4304, 5, 80, 0, 0, 4304, 4306, 3, 624, 312, 0, 4305, 4307, 3, 170, 85, 0, 4306, 4305, 1, 0, 0, 0, 4306, 4307, 1, 0, 0, 0, 4307, 4308, 1, 0, 0, 0, 4308, 4311, 3, 360, 180, 0, 4309, 4310, 5, 441, 0, 0, 4310, 4312, 3, 360, 180, 0, 4311, 4309, 1, 0, 0, 0, 4311, 4312, 1, 0, 0, 0, 4312, 4318, 1, 0, 0, 0, 4313, 4315, 5, 273, 0, 0, 4314, 4316, 5, 77, 0, 0, 4315, 4314, 1, 0, 0, 0, 4315, 4316, 1, 0, 0, 0, 4316, 4317, 1, 0, 0, 0, 4317, 4319, 5, 56, 0, 0, 4318, 4313, 1, 0, 0, 0, 4318, 4319, 1, 0, 0, 0, 4319, 4321, 1, 0, 0, 0, 4320, 4322, 3, 102, 51, 0, 4321, 4320, 1, 0, 0, 0, 4321, 4322, 1, 0, 0, 0, 4322, 4324, 1, 0, 0, 0, 4323, 4325, 3, 176, 88, 0, 4324, 4323, 1, 0, 0, 0, 4324, 4325, 1, 0, 0, 0, 4325, 4327, 1, 0, 0, 0, 4326, 4328, 3, 638, 319, 0, 4327, 4326, 1, 0, 0, 0, 4327, 4328, 1, 0, 0, 0, 4328, 359, 1, 0, 0, 0, 4329, 4330, 5, 2, 0, 0, 4330, 4335, 3, 362, 181, 0, 4331, 4332, 5, 6, 0, 0, 4332, 4334, 3, 362, 181, 0, 4333, 4331, 1, 0, 0, 0, 4334, 4337, 1, 0, 0, 0, 4335, 4333, 1, 0, 0, 0, 4335, 4336, 1, 0, 0, 0, 4336, 4338, 1, 0, 0, 0, 4337, 4335, 1, 0, 0, 0, 4338, 4339, 5, 3, 0, 0, 4339, 361, 1, 0, 0, 0, 4340, 4347, 3, 800, 400, 0, 4341, 4347, 3, 688, 344, 0, 4342, 4343, 5, 2, 0, 0, 4343, 4344, 3, 674, 337, 0, 4344, 4345, 5, 3, 0, 0, 4345, 4347, 1, 0, 0, 0, 4346, 4340, 1, 0, 0, 0, 4346, 4341, 1, 0, 0, 0, 4346, 4342, 1, 0, 0, 0, 4347, 4349, 1, 0, 0, 0, 4348, 4350, 3, 98, 49, 0, 4349, 4348, 1, 0, 0, 0, 4349, 4350, 1, 0, 0, 0, 4350, 4357, 1, 0, 0, 0, 4351, 4353, 3, 316, 158, 0, 4352, 4351, 1, 0, 0, 0, 4352, 4353, 1, 0, 0, 0, 4353, 4358, 1, 0, 0, 0, 4354, 4355, 3, 316, 158, 0, 4355, 4356, 3, 100, 50, 0, 4356, 4358, 1, 0, 0, 0, 4357, 4352, 1, 0, 0, 0, 4357, 4354, 1, 0, 0, 0, 4358, 4360, 1, 0, 0, 0, 4359, 4361, 7, 55, 0, 0, 4360, 4359, 1, 0, 0, 0, 4360, 4361, 1, 0, 0, 0, 4361, 4364, 1, 0, 0, 0, 4362, 4363, 5, 273, 0, 0, 4363, 4365, 7, 56, 0, 0, 4364, 4362, 1, 0, 0, 0, 4364, 4365, 1, 0, 0, 0, 4365, 363, 1, 0, 0, 0, 4366, 4368, 5, 46, 0, 0, 4367, 4369, 3, 366, 183, 0, 4368, 4367, 1, 0, 0, 0, 4368, 4369, 1, 0, 0, 0, 4369, 4374, 1, 0, 0, 0, 4370, 4371, 5, 211, 0, 0, 4371, 4375, 3, 804, 402, 0, 4372, 4373, 5, 296, 0, 0, 4373, 4375, 3, 798, 399, 0, 4374, 4370, 1, 0, 0, 0, 4374, 4372, 1, 0, 0, 0, 4375, 4376, 1, 0, 0, 0, 4376, 4385, 5, 2, 0, 0, 4377, 4382, 3, 390, 195, 0, 4378, 4379, 5, 6, 0, 0, 4379, 4381, 3, 390, 195, 0, 4380, 4378, 1, 0, 0, 0, 4381, 4384, 1, 0, 0, 0, 4382, 4380, 1, 0, 0, 0, 4382, 4383, 1, 0, 0, 0, 4383, 4386, 1, 0, 0, 0, 4384, 4382, 1, 0, 0, 0, 4385, 4377, 1, 0, 0, 0, 4385, 4386, 1, 0, 0, 0, 4386, 4387, 1, 0, 0, 0, 4387, 4388, 5, 3, 0, 0, 4388, 4405, 1, 0, 0, 0, 4389, 4403, 5, 316, 0, 0, 4390, 4404, 3, 388, 194, 0, 4391, 4392, 5, 92, 0, 0, 4392, 4393, 5, 2, 0, 0, 4393, 4398, 3, 402, 201, 0, 4394, 4395, 5, 6, 0, 0, 4395, 4397, 3, 402, 201, 0, 4396, 4394, 1, 0, 0, 0, 4397, 4400, 1, 0, 0, 0, 4398, 4396, 1, 0, 0, 0, 4398, 4399, 1, 0, 0, 0, 4399, 4401, 1, 0, 0, 0, 4400, 4398, 1, 0, 0, 0, 4401, 4402, 5, 3, 0, 0, 4402, 4404, 1, 0, 0, 0, 4403, 4390, 1, 0, 0, 0, 4403, 4391, 1, 0, 0, 0, 4404, 4406, 1, 0, 0, 0, 4405, 4389, 1, 0, 0, 0, 4405, 4406, 1, 0, 0, 0, 4406, 4408, 1, 0, 0, 0, 4407, 4409, 3, 398, 199, 0, 4408, 4407, 1, 0, 0, 0, 4409, 4410, 1, 0, 0, 0, 4410, 4408, 1, 0, 0, 0, 4410, 4411, 1, 0, 0, 0, 4411, 4417, 1, 0, 0, 0, 4412, 4413, 5, 105, 0, 0, 4413, 4414, 5, 2, 0, 0, 4414, 4415, 3, 784, 392, 0, 4415, 4416, 5, 3, 0, 0, 4416, 4418, 1, 0, 0, 0, 4417, 4412, 1, 0, 0, 0, 4417, 4418, 1, 0, 0, 0, 4418, 365, 1, 0, 0, 0, 4419, 4420, 5, 82, 0, 0, 4420, 4421, 5, 311, 0, 0, 4421, 367, 1, 0, 0, 0, 4422, 4424, 5, 2, 0, 0, 4423, 4425, 3, 370, 185, 0, 4424, 4423, 1, 0, 0, 0, 4424, 4425, 1, 0, 0, 0, 4425, 4426, 1, 0, 0, 0, 4426, 4427, 5, 3, 0, 0, 4427, 369, 1, 0, 0, 0, 4428, 4433, 3, 384, 192, 0, 4429, 4430, 5, 6, 0, 0, 4430, 4432, 3, 384, 192, 0, 4431, 4429, 1, 0, 0, 0, 4432, 4435, 1, 0, 0, 0, 4433, 4431, 1, 0, 0, 0, 4433, 4434, 1, 0, 0, 0, 4434, 371, 1, 0, 0, 0, 4435, 4433, 1, 0, 0, 0, 4436, 4441, 3, 374, 187, 0, 4437, 4438, 5, 6, 0, 0, 4438, 4440, 3, 374, 187, 0, 4439, 4437, 1, 0, 0, 0, 4440, 4443, 1, 0, 0, 0, 4441, 4439, 1, 0, 0, 0, 4441, 4442, 1, 0, 0, 0, 4442, 373, 1, 0, 0, 0, 4443, 4441, 1, 0, 0, 0, 4444, 4445, 3, 794, 397, 0, 4445, 4446, 3, 368, 184, 0, 4446, 4450, 1, 0, 0, 0, 4447, 4450, 3, 832, 416, 0, 4448, 4450, 3, 780, 390, 0, 4449, 4444, 1, 0, 0, 0, 4449, 4447, 1, 0, 0, 0, 4449, 4448, 1, 0, 0, 0, 4450, 375, 1, 0, 0, 0, 4451, 4456, 3, 378, 189, 0, 4452, 4453, 5, 6, 0, 0, 4453, 4455, 3, 378, 189, 0, 4454, 4452, 1, 0, 0, 0, 4455, 4458, 1, 0, 0, 0, 4456, 4454, 1, 0, 0, 0, 4456, 4457, 1, 0, 0, 0, 4457, 377, 1, 0, 0, 0, 4458, 4456, 1, 0, 0, 0, 4459, 4460, 3, 796, 398, 0, 4460, 4461, 3, 368, 184, 0, 4461, 4465, 1, 0, 0, 0, 4462, 4465, 3, 832, 416, 0, 4463, 4465, 3, 780, 390, 0, 4464, 4459, 1, 0, 0, 0, 4464, 4462, 1, 0, 0, 0, 4464, 4463, 1, 0, 0, 0, 4465, 379, 1, 0, 0, 0, 4466, 4471, 3, 382, 191, 0, 4467, 4468, 5, 6, 0, 0, 4468, 4470, 3, 382, 191, 0, 4469, 4467, 1, 0, 0, 0, 4470, 4473, 1, 0, 0, 0, 4471, 4469, 1, 0, 0, 0, 4471, 4472, 1, 0, 0, 0, 4472, 381, 1, 0, 0, 0, 4473, 4471, 1, 0, 0, 0, 4474, 4475, 3, 806, 403, 0, 4475, 4476, 3, 368, 184, 0, 4476, 4480, 1, 0, 0, 0, 4477, 4480, 3, 832, 416, 0, 4478, 4480, 3, 780, 390, 0, 4479, 4474, 1, 0, 0, 0, 4479, 4477, 1, 0, 0, 0, 4479, 4478, 1, 0, 0, 0, 4480, 383, 1, 0, 0, 0, 4481, 4483, 3, 386, 193, 0, 4482, 4484, 3, 820, 410, 0, 4483, 4482, 1, 0, 0, 0, 4483, 4484, 1, 0, 0, 0, 4484, 4490, 1, 0, 0, 0, 4485, 4487, 3, 820, 410, 0, 4486, 4488, 3, 386, 193, 0, 4487, 4486, 1, 0, 0, 0, 4487, 4488, 1, 0, 0, 0, 4488, 4490, 1, 0, 0, 0, 4489, 4481, 1, 0, 0, 0, 4489, 4485, 1, 0, 0, 0, 4489, 4490, 1, 0, 0, 0, 4490, 4491, 1, 0, 0, 0, 4491, 4492, 3, 388, 194, 0, 4492, 385, 1, 0, 0, 0, 4493, 4495, 5, 68, 0, 0, 4494, 4496, 5, 453, 0, 0, 4495, 4494, 1, 0, 0, 0, 4495, 4496, 1, 0, 0, 0, 4496, 4501, 1, 0, 0, 0, 4497, 4501, 5, 453, 0, 0, 4498, 4501, 5, 400, 0, 0, 4499, 4501, 5, 101, 0, 0, 4500, 4493, 1, 0, 0, 0, 4500, 4497, 1, 0, 0, 0, 4500, 4498, 1, 0, 0, 0, 4500, 4499, 1, 0, 0, 0, 4501, 387, 1, 0, 0, 0, 4502, 4512, 3, 652, 326, 0, 4503, 4505, 5, 415, 0, 0, 4504, 4503, 1, 0, 0, 0, 4504, 4505, 1, 0, 0, 0, 4505, 4506, 1, 0, 0, 0, 4506, 4507, 3, 820, 410, 0, 4507, 4508, 3, 318, 159, 0, 4508, 4509, 5, 27, 0, 0, 4509, 4510, 5, 360, 0, 0, 4510, 4512, 1, 0, 0, 0, 4511, 4502, 1, 0, 0, 0, 4511, 4504, 1, 0, 0, 0, 4512, 389, 1, 0, 0, 0, 4513, 4516, 3, 384, 192, 0, 4514, 4515, 7, 57, 0, 0, 4515, 4517, 3, 674, 337, 0, 4516, 4514, 1, 0, 0, 0, 4516, 4517, 1, 0, 0, 0, 4517, 391, 1, 0, 0, 0, 4518, 4528, 5, 2, 0, 0, 4519, 4529, 5, 9, 0, 0, 4520, 4522, 3, 370, 185, 0, 4521, 4520, 1, 0, 0, 0, 4521, 4522, 1, 0, 0, 0, 4522, 4526, 1, 0, 0, 0, 4523, 4524, 5, 83, 0, 0, 4524, 4525, 5, 147, 0, 0, 4525, 4527, 3, 370, 185, 0, 4526, 4523, 1, 0, 0, 0, 4526, 4527, 1, 0, 0, 0, 4527, 4529, 1, 0, 0, 0, 4528, 4519, 1, 0, 0, 0, 4528, 4521, 1, 0, 0, 0, 4529, 4530, 1, 0, 0, 0, 4530, 4531, 5, 3, 0, 0, 4531, 393, 1, 0, 0, 0, 4532, 4533, 3, 806, 403, 0, 4533, 4534, 3, 392, 196, 0, 4534, 395, 1, 0, 0, 0, 4535, 4536, 5, 316, 0, 0, 4536, 4539, 5, 78, 0, 0, 4537, 4539, 5, 149, 0, 0, 4538, 4535, 1, 0, 0, 0, 4538, 4537, 1, 0, 0, 0, 4539, 4540, 1, 0, 0, 0, 4540, 4541, 5, 80, 0, 0, 4541, 4542, 5, 78, 0, 0, 4542, 4565, 5, 458, 0, 0, 4543, 4565, 5, 346, 0, 0, 4544, 4565, 5, 222, 0, 0, 4545, 4565, 5, 338, 0, 0, 4546, 4565, 5, 377, 0, 0, 4547, 4549, 5, 205, 0, 0, 4548, 4547, 1, 0, 0, 0, 4548, 4549, 1, 0, 0, 0, 4549, 4550, 1, 0, 0, 0, 4550, 4551, 5, 327, 0, 0, 4551, 4565, 7, 58, 0, 0, 4552, 4565, 5, 250, 0, 0, 4553, 4554, 5, 77, 0, 0, 4554, 4565, 5, 250, 0, 0, 4555, 4556, 7, 59, 0, 0, 4556, 4565, 3, 202, 101, 0, 4557, 4558, 5, 459, 0, 0, 4558, 4565, 3, 316, 158, 0, 4559, 4560, 5, 333, 0, 0, 4560, 4565, 3, 42, 21, 0, 4561, 4565, 3, 60, 30, 0, 4562, 4563, 5, 460, 0, 0, 4563, 4565, 3, 818, 409, 0, 4564, 4538, 1, 0, 0, 0, 4564, 4543, 1, 0, 0, 0, 4564, 4544, 1, 0, 0, 0, 4564, 4545, 1, 0, 0, 0, 4564, 4546, 1, 0, 0, 0, 4564, 4548, 1, 0, 0, 0, 4564, 4552, 1, 0, 0, 0, 4564, 4553, 1, 0, 0, 0, 4564, 4555, 1, 0, 0, 0, 4564, 4557, 1, 0, 0, 0, 4564, 4559, 1, 0, 0, 0, 4564, 4561, 1, 0, 0, 0, 4564, 4562, 1, 0, 0, 0, 4565, 397, 1, 0, 0, 0, 4566, 4567, 5, 36, 0, 0, 4567, 4568, 3, 808, 404, 0, 4568, 4569, 3, 462, 231, 0, 4569, 4602, 1, 0, 0, 0, 4570, 4571, 5, 247, 0, 0, 4571, 4602, 3, 58, 29, 0, 4572, 4573, 5, 443, 0, 0, 4573, 4574, 5, 62, 0, 0, 4574, 4575, 5, 360, 0, 0, 4575, 4582, 3, 652, 326, 0, 4576, 4577, 5, 6, 0, 0, 4577, 4578, 5, 62, 0, 0, 4578, 4579, 5, 360, 0, 0, 4579, 4581, 3, 652, 326, 0, 4580, 4576, 1, 0, 0, 0, 4581, 4584, 1, 0, 0, 0, 4582, 4580, 1, 0, 0, 0, 4582, 4583, 1, 0, 0, 0, 4583, 4602, 1, 0, 0, 0, 4584, 4582, 1, 0, 0, 0, 4585, 4602, 5, 104, 0, 0, 4586, 4587, 5, 333, 0, 0, 4587, 4594, 3, 818, 409, 0, 4588, 4589, 5, 94, 0, 0, 4589, 4595, 3, 818, 409, 0, 4590, 4591, 5, 10, 0, 0, 4591, 4595, 3, 818, 409, 0, 4592, 4593, 5, 64, 0, 0, 4593, 4595, 5, 434, 0, 0, 4594, 4588, 1, 0, 0, 0, 4594, 4590, 1, 0, 0, 0, 4594, 4592, 1, 0, 0, 0, 4595, 4602, 1, 0, 0, 0, 4596, 4597, 5, 36, 0, 0, 4597, 4602, 3, 818, 409, 0, 4598, 4602, 3, 4, 2, 0, 4599, 4602, 3, 396, 198, 0, 4600, 4602, 3, 818, 409, 0, 4601, 4566, 1, 0, 0, 0, 4601, 4570, 1, 0, 0, 0, 4601, 4572, 1, 0, 0, 0, 4601, 4585, 1, 0, 0, 0, 4601, 4586, 1, 0, 0, 0, 4601, 4596, 1, 0, 0, 0, 4601, 4598, 1, 0, 0, 0, 4601, 4599, 1, 0, 0, 0, 4601, 4600, 1, 0, 0, 0, 4602, 399, 1, 0, 0, 0, 4603, 4604, 5, 105, 0, 0, 4604, 4605, 3, 284, 142, 0, 4605, 401, 1, 0, 0, 0, 4606, 4607, 3, 800, 400, 0, 4607, 4608, 3, 388, 194, 0, 4608, 403, 1, 0, 0, 0, 4609, 4616, 5, 138, 0, 0, 4610, 4611, 5, 211, 0, 0, 4611, 4617, 3, 382, 191, 0, 4612, 4613, 5, 296, 0, 0, 4613, 4617, 3, 378, 189, 0, 4614, 4615, 5, 442, 0, 0, 4615, 4617, 3, 374, 187, 0, 4616, 4610, 1, 0, 0, 0, 4616, 4612, 1, 0, 0, 0, 4616, 4614, 1, 0, 0, 0, 4617, 4619, 1, 0, 0, 0, 4618, 4620, 3, 396, 198, 0, 4619, 4618, 1, 0, 0, 0, 4620, 4621, 1, 0, 0, 0, 4621, 4619, 1, 0, 0, 0, 4621, 4622, 1, 0, 0, 0, 4622, 4624, 1, 0, 0, 0, 4623, 4625, 5, 315, 0, 0, 4624, 4623, 1, 0, 0, 0, 4624, 4625, 1, 0, 0, 0, 4625, 405, 1, 0, 0, 0, 4626, 4642, 5, 191, 0, 0, 4627, 4629, 5, 211, 0, 0, 4628, 4630, 3, 422, 211, 0, 4629, 4628, 1, 0, 0, 0, 4629, 4630, 1, 0, 0, 0, 4630, 4631, 1, 0, 0, 0, 4631, 4643, 3, 380, 190, 0, 4632, 4634, 5, 296, 0, 0, 4633, 4635, 3, 422, 211, 0, 4634, 4633, 1, 0, 0, 0, 4634, 4635, 1, 0, 0, 0, 4635, 4636, 1, 0, 0, 0, 4636, 4643, 3, 376, 188, 0, 4637, 4639, 5, 442, 0, 0, 4638, 4640, 3, 422, 211, 0, 4639, 4638, 1, 0, 0, 0, 4639, 4640, 1, 0, 0, 0, 4640, 4641, 1, 0, 0, 0, 4641, 4643, 3, 372, 186, 0, 4642, 4627, 1, 0, 0, 0, 4642, 4632, 1, 0, 0, 0, 4642, 4637, 1, 0, 0, 0, 4643, 4645, 1, 0, 0, 0, 4644, 4646, 3, 96, 48, 0, 4645, 4644, 1, 0, 0, 0, 4645, 4646, 1, 0, 0, 0, 4646, 407, 1, 0, 0, 0, 4647, 4648, 5, 191, 0, 0, 4648, 4650, 5, 136, 0, 0, 4649, 4651, 3, 422, 211, 0, 4650, 4649, 1, 0, 0, 0, 4650, 4651, 1, 0, 0, 0, 4651, 4652, 1, 0, 0, 0, 4652, 4657, 3, 394, 197, 0, 4653, 4654, 5, 6, 0, 0, 4654, 4656, 3, 394, 197, 0, 4655, 4653, 1, 0, 0, 0, 4656, 4659, 1, 0, 0, 0, 4657, 4655, 1, 0, 0, 0, 4657, 4658, 1, 0, 0, 0, 4658, 4661, 1, 0, 0, 0, 4659, 4657, 1, 0, 0, 0, 4660, 4662, 3, 96, 48, 0, 4661, 4660, 1, 0, 0, 0, 4661, 4662, 1, 0, 0, 0, 4662, 409, 1, 0, 0, 0, 4663, 4664, 5, 191, 0, 0, 4664, 4666, 5, 278, 0, 0, 4665, 4667, 3, 422, 211, 0, 4666, 4665, 1, 0, 0, 0, 4666, 4667, 1, 0, 0, 0, 4667, 4668, 1, 0, 0, 0, 4668, 4673, 3, 416, 208, 0, 4669, 4670, 5, 6, 0, 0, 4670, 4672, 3, 416, 208, 0, 4671, 4669, 1, 0, 0, 0, 4672, 4675, 1, 0, 0, 0, 4673, 4671, 1, 0, 0, 0, 4673, 4674, 1, 0, 0, 0, 4674, 4677, 1, 0, 0, 0, 4675, 4673, 1, 0, 0, 0, 4676, 4678, 3, 96, 48, 0, 4677, 4676, 1, 0, 0, 0, 4677, 4678, 1, 0, 0, 0, 4678, 411, 1, 0, 0, 0, 4679, 4692, 5, 2, 0, 0, 4680, 4683, 3, 652, 326, 0, 4681, 4682, 5, 6, 0, 0, 4682, 4684, 3, 652, 326, 0, 4683, 4681, 1, 0, 0, 0, 4683, 4684, 1, 0, 0, 0, 4684, 4693, 1, 0, 0, 0, 4685, 4686, 5, 407, 0, 0, 4686, 4687, 5, 6, 0, 0, 4687, 4693, 3, 652, 326, 0, 4688, 4689, 3, 652, 326, 0, 4689, 4690, 5, 6, 0, 0, 4690, 4691, 5, 407, 0, 0, 4691, 4693, 1, 0, 0, 0, 4692, 4680, 1, 0, 0, 0, 4692, 4685, 1, 0, 0, 0, 4692, 4688, 1, 0, 0, 0, 4693, 4694, 1, 0, 0, 0, 4694, 4695, 5, 3, 0, 0, 4695, 413, 1, 0, 0, 0, 4696, 4697, 3, 818, 409, 0, 4697, 4698, 5, 11, 0, 0, 4698, 4700, 1, 0, 0, 0, 4699, 4696, 1, 0, 0, 0, 4700, 4703, 1, 0, 0, 0, 4701, 4699, 1, 0, 0, 0, 4701, 4702, 1, 0, 0, 0, 4702, 4704, 1, 0, 0, 0, 4703, 4701, 1, 0, 0, 0, 4704, 4705, 3, 720, 360, 0, 4705, 415, 1, 0, 0, 0, 4706, 4707, 3, 414, 207, 0, 4707, 4708, 3, 412, 206, 0, 4708, 417, 1, 0, 0, 0, 4709, 4713, 5, 57, 0, 0, 4710, 4714, 3, 808, 404, 0, 4711, 4712, 5, 247, 0, 0, 4712, 4714, 3, 58, 29, 0, 4713, 4710, 1, 0, 0, 0, 4713, 4711, 1, 0, 0, 0, 4714, 4715, 1, 0, 0, 0, 4715, 4713, 1, 0, 0, 0, 4715, 4716, 1, 0, 0, 0, 4716, 419, 1, 0, 0, 0, 4717, 4718, 5, 46, 0, 0, 4718, 4719, 5, 41, 0, 0, 4719, 4720, 5, 2, 0, 0, 4720, 4721, 3, 652, 326, 0, 4721, 4722, 5, 36, 0, 0, 4722, 4723, 3, 652, 326, 0, 4723, 4740, 5, 3, 0, 0, 4724, 4725, 5, 379, 0, 0, 4725, 4728, 5, 211, 0, 0, 4726, 4727, 5, 36, 0, 0, 4727, 4729, 7, 60, 0, 0, 4728, 4726, 1, 0, 0, 0, 4728, 4729, 1, 0, 0, 0, 4729, 4741, 1, 0, 0, 0, 4730, 4734, 5, 105, 0, 0, 4731, 4732, 5, 211, 0, 0, 4732, 4735, 3, 382, 191, 0, 4733, 4735, 5, 400, 0, 0, 4734, 4731, 1, 0, 0, 0, 4734, 4733, 1, 0, 0, 0, 4735, 4738, 1, 0, 0, 0, 4736, 4737, 5, 36, 0, 0, 4737, 4739, 7, 60, 0, 0, 4738, 4736, 1, 0, 0, 0, 4738, 4739, 1, 0, 0, 0, 4739, 4741, 1, 0, 0, 0, 4740, 4724, 1, 0, 0, 0, 4740, 4730, 1, 0, 0, 0, 4741, 421, 1, 0, 0, 0, 4742, 4743, 5, 220, 0, 0, 4743, 4744, 5, 396, 0, 0, 4744, 423, 1, 0, 0, 0, 4745, 4747, 5, 46, 0, 0, 4746, 4748, 3, 366, 183, 0, 4747, 4746, 1, 0, 0, 0, 4747, 4748, 1, 0, 0, 0, 4748, 4749, 1, 0, 0, 0, 4749, 4750, 5, 443, 0, 0, 4750, 4751, 5, 62, 0, 0, 4751, 4752, 3, 652, 326, 0, 4752, 4753, 5, 247, 0, 0, 4753, 4754, 3, 818, 409, 0, 4754, 4769, 5, 2, 0, 0, 4755, 4756, 5, 64, 0, 0, 4756, 4760, 3, 426, 213, 0, 4757, 4758, 5, 6, 0, 0, 4758, 4759, 5, 94, 0, 0, 4759, 4761, 3, 426, 213, 0, 4760, 4757, 1, 0, 0, 0, 4760, 4761, 1, 0, 0, 0, 4761, 4770, 1, 0, 0, 0, 4762, 4763, 5, 94, 0, 0, 4763, 4767, 3, 426, 213, 0, 4764, 4765, 5, 6, 0, 0, 4765, 4766, 5, 64, 0, 0, 4766, 4768, 3, 426, 213, 0, 4767, 4764, 1, 0, 0, 0, 4767, 4768, 1, 0, 0, 0, 4768, 4770, 1, 0, 0, 0, 4769, 4755, 1, 0, 0, 0, 4769, 4762, 1, 0, 0, 0, 4770, 4771, 1, 0, 0, 0, 4771, 4772, 5, 3, 0, 0, 4772, 425, 1, 0, 0, 0, 4773, 4774, 5, 461, 0, 0, 4774, 4775, 5, 105, 0, 0, 4775, 4776, 5, 211, 0, 0, 4776, 4777, 3, 382, 191, 0, 4777, 427, 1, 0, 0, 0, 4778, 4789, 5, 306, 0, 0, 4779, 4780, 5, 2, 0, 0, 4780, 4785, 5, 128, 0, 0, 4781, 4782, 5, 6, 0, 0, 4782, 4784, 5, 128, 0, 0, 4783, 4781, 1, 0, 0, 0, 4784, 4787, 1, 0, 0, 0, 4785, 4783, 1, 0, 0, 0, 4785, 4786, 1, 0, 0, 0, 4786, 4788, 1, 0, 0, 0, 4787, 4785, 1, 0, 0, 0, 4788, 4790, 5, 3, 0, 0, 4789, 4779, 1, 0, 0, 0, 4789, 4790, 1, 0, 0, 0, 4790, 4816, 1, 0, 0, 0, 4791, 4793, 5, 226, 0, 0, 4792, 4794, 5, 109, 0, 0, 4793, 4792, 1, 0, 0, 0, 4793, 4794, 1, 0, 0, 0, 4794, 4795, 1, 0, 0, 0, 4795, 4817, 3, 780, 390, 0, 4796, 4798, 5, 92, 0, 0, 4797, 4799, 5, 109, 0, 0, 4798, 4797, 1, 0, 0, 0, 4798, 4799, 1, 0, 0, 0, 4799, 4800, 1, 0, 0, 0, 4800, 4817, 3, 774, 387, 0, 4801, 4803, 5, 323, 0, 0, 4802, 4804, 5, 109, 0, 0, 4803, 4802, 1, 0, 0, 0, 4803, 4804, 1, 0, 0, 0, 4804, 4805, 1, 0, 0, 0, 4805, 4817, 3, 790, 395, 0, 4806, 4808, 5, 349, 0, 0, 4807, 4809, 5, 109, 0, 0, 4808, 4807, 1, 0, 0, 0, 4808, 4809, 1, 0, 0, 0, 4809, 4810, 1, 0, 0, 0, 4810, 4817, 3, 818, 409, 0, 4811, 4813, 5, 175, 0, 0, 4812, 4814, 5, 109, 0, 0, 4813, 4812, 1, 0, 0, 0, 4813, 4814, 1, 0, 0, 0, 4814, 4815, 1, 0, 0, 0, 4815, 4817, 3, 788, 394, 0, 4816, 4791, 1, 0, 0, 0, 4816, 4796, 1, 0, 0, 0, 4816, 4801, 1, 0, 0, 0, 4816, 4806, 1, 0, 0, 0, 4816, 4811, 1, 0, 0, 0, 4817, 429, 1, 0, 0, 0, 4818, 4819, 5, 138, 0, 0, 4819, 4820, 3, 176, 88, 0, 4820, 4821, 7, 16, 0, 0, 4821, 4822, 3, 100, 50, 0, 4822, 431, 1, 0, 0, 0, 4823, 4828, 5, 138, 0, 0, 4824, 4825, 5, 136, 0, 0, 4825, 4829, 3, 394, 197, 0, 4826, 4827, 5, 442, 0, 0, 4827, 4829, 3, 374, 187, 0, 4828, 4824, 1, 0, 0, 0, 4828, 4826, 1, 0, 0, 0, 4829, 4830, 1, 0, 0, 0, 4830, 4831, 5, 309, 0, 0, 4831, 4832, 5, 94, 0, 0, 4832, 4833, 3, 818, 409, 0, 4833, 5031, 1, 0, 0, 0, 4834, 4835, 5, 138, 0, 0, 4835, 4836, 5, 175, 0, 0, 4836, 4837, 3, 788, 394, 0, 4837, 4838, 5, 309, 0, 0, 4838, 4839, 5, 94, 0, 0, 4839, 4840, 3, 786, 393, 0, 4840, 5031, 1, 0, 0, 0, 4841, 4842, 5, 138, 0, 0, 4842, 4843, 7, 61, 0, 0, 4843, 4844, 3, 316, 158, 0, 4844, 4845, 5, 309, 0, 0, 4845, 4846, 5, 94, 0, 0, 4846, 4847, 3, 818, 409, 0, 4847, 5031, 1, 0, 0, 0, 4848, 4849, 5, 138, 0, 0, 4849, 4850, 5, 211, 0, 0, 4850, 4851, 3, 382, 191, 0, 4851, 4852, 5, 309, 0, 0, 4852, 4853, 5, 94, 0, 0, 4853, 4854, 3, 804, 402, 0, 4854, 5031, 1, 0, 0, 0, 4855, 4856, 5, 138, 0, 0, 4856, 4857, 5, 278, 0, 0, 4857, 4858, 7, 31, 0, 0, 4858, 4859, 3, 316, 158, 0, 4859, 4860, 3, 170, 85, 0, 4860, 4861, 5, 309, 0, 0, 4861, 4862, 5, 94, 0, 0, 4862, 4863, 3, 818, 409, 0, 4863, 5031, 1, 0, 0, 0, 4864, 4865, 5, 138, 0, 0, 4865, 4866, 5, 296, 0, 0, 4866, 4867, 3, 378, 189, 0, 4867, 4868, 5, 309, 0, 0, 4868, 4869, 5, 94, 0, 0, 4869, 4870, 3, 798, 399, 0, 4870, 5031, 1, 0, 0, 0, 4871, 4872, 5, 138, 0, 0, 4872, 4873, 5, 323, 0, 0, 4873, 4874, 3, 790, 395, 0, 4874, 4875, 5, 309, 0, 0, 4875, 4876, 5, 94, 0, 0, 4876, 4877, 3, 32, 16, 0, 4877, 5031, 1, 0, 0, 0, 4878, 4879, 5, 138, 0, 0, 4879, 4881, 7, 62, 0, 0, 4880, 4882, 3, 422, 211, 0, 4881, 4880, 1, 0, 0, 0, 4881, 4882, 1, 0, 0, 0, 4882, 4883, 1, 0, 0, 0, 4883, 4884, 3, 780, 390, 0, 4884, 4885, 5, 309, 0, 0, 4885, 4886, 5, 94, 0, 0, 4886, 4887, 3, 818, 409, 0, 4887, 5031, 1, 0, 0, 0, 4888, 4890, 5, 138, 0, 0, 4889, 4891, 5, 259, 0, 0, 4890, 4889, 1, 0, 0, 0, 4890, 4891, 1, 0, 0, 0, 4891, 4892, 1, 0, 0, 0, 4892, 4894, 5, 376, 0, 0, 4893, 4895, 3, 422, 211, 0, 4894, 4893, 1, 0, 0, 0, 4894, 4895, 1, 0, 0, 0, 4895, 4896, 1, 0, 0, 0, 4896, 4897, 3, 778, 389, 0, 4897, 4898, 5, 309, 0, 0, 4898, 4899, 5, 94, 0, 0, 4899, 4900, 3, 776, 388, 0, 4900, 5031, 1, 0, 0, 0, 4901, 4903, 5, 138, 0, 0, 4902, 4904, 5, 63, 0, 0, 4903, 4902, 1, 0, 0, 0, 4903, 4904, 1, 0, 0, 0, 4904, 4905, 1, 0, 0, 0, 4905, 4907, 5, 92, 0, 0, 4906, 4908, 3, 422, 211, 0, 4907, 4906, 1, 0, 0, 0, 4907, 4908, 1, 0, 0, 0, 4908, 4909, 1, 0, 0, 0, 4909, 4910, 3, 624, 312, 0, 4910, 4911, 5, 309, 0, 0, 4911, 4912, 5, 94, 0, 0, 4912, 4913, 3, 772, 386, 0, 4913, 5031, 1, 0, 0, 0, 4914, 4939, 5, 138, 0, 0, 4915, 4917, 5, 63, 0, 0, 4916, 4915, 1, 0, 0, 0, 4916, 4917, 1, 0, 0, 0, 4917, 4918, 1, 0, 0, 0, 4918, 4920, 5, 92, 0, 0, 4919, 4921, 3, 422, 211, 0, 4920, 4919, 1, 0, 0, 0, 4920, 4921, 1, 0, 0, 0, 4921, 4922, 1, 0, 0, 0, 4922, 4923, 3, 624, 312, 0, 4923, 4925, 5, 309, 0, 0, 4924, 4926, 5, 44, 0, 0, 4925, 4924, 1, 0, 0, 0, 4925, 4926, 1, 0, 0, 0, 4926, 4940, 1, 0, 0, 0, 4927, 4929, 5, 259, 0, 0, 4928, 4927, 1, 0, 0, 0, 4928, 4929, 1, 0, 0, 0, 4929, 4930, 1, 0, 0, 0, 4930, 4932, 5, 376, 0, 0, 4931, 4933, 3, 422, 211, 0, 4932, 4931, 1, 0, 0, 0, 4932, 4933, 1, 0, 0, 0, 4933, 4934, 1, 0, 0, 0, 4934, 4935, 3, 778, 389, 0, 4935, 4937, 5, 309, 0, 0, 4936, 4938, 5, 44, 0, 0, 4937, 4936, 1, 0, 0, 0, 4937, 4938, 1, 0, 0, 0, 4938, 4940, 1, 0, 0, 0, 4939, 4916, 1, 0, 0, 0, 4939, 4928, 1, 0, 0, 0, 4940, 4941, 1, 0, 0, 0, 4941, 4942, 3, 800, 400, 0, 4942, 4943, 5, 94, 0, 0, 4943, 4944, 3, 802, 401, 0, 4944, 5031, 1, 0, 0, 0, 4945, 4953, 5, 138, 0, 0, 4946, 4948, 5, 92, 0, 0, 4947, 4949, 3, 422, 211, 0, 4948, 4947, 1, 0, 0, 0, 4948, 4949, 1, 0, 0, 0, 4949, 4950, 1, 0, 0, 0, 4950, 4954, 3, 624, 312, 0, 4951, 4952, 5, 189, 0, 0, 4952, 4954, 3, 316, 158, 0, 4953, 4946, 1, 0, 0, 0, 4953, 4951, 1, 0, 0, 0, 4954, 4955, 1, 0, 0, 0, 4955, 4956, 5, 309, 0, 0, 4956, 4957, 5, 45, 0, 0, 4957, 4958, 3, 818, 409, 0, 4958, 4959, 5, 94, 0, 0, 4959, 4960, 3, 818, 409, 0, 4960, 5031, 1, 0, 0, 0, 4961, 4968, 5, 138, 0, 0, 4962, 4964, 5, 445, 0, 0, 4963, 4965, 3, 422, 211, 0, 4964, 4963, 1, 0, 0, 0, 4964, 4965, 1, 0, 0, 0, 4965, 4969, 1, 0, 0, 0, 4966, 4969, 5, 321, 0, 0, 4967, 4969, 5, 357, 0, 0, 4968, 4962, 1, 0, 0, 0, 4968, 4966, 1, 0, 0, 0, 4968, 4967, 1, 0, 0, 0, 4969, 4970, 1, 0, 0, 0, 4970, 4971, 3, 818, 409, 0, 4971, 4972, 5, 80, 0, 0, 4972, 4973, 3, 780, 390, 0, 4973, 4974, 5, 309, 0, 0, 4974, 4975, 5, 94, 0, 0, 4975, 4976, 3, 818, 409, 0, 4976, 5031, 1, 0, 0, 0, 4977, 4990, 5, 138, 0, 0, 4978, 4979, 5, 63, 0, 0, 4979, 4980, 5, 174, 0, 0, 4980, 4991, 5, 381, 0, 0, 4981, 4983, 5, 295, 0, 0, 4982, 4981, 1, 0, 0, 0, 4982, 4983, 1, 0, 0, 0, 4983, 4984, 1, 0, 0, 0, 4984, 4991, 5, 247, 0, 0, 4985, 4991, 5, 452, 0, 0, 4986, 4991, 5, 331, 0, 0, 4987, 4991, 5, 451, 0, 0, 4988, 4989, 5, 198, 0, 0, 4989, 4991, 5, 357, 0, 0, 4990, 4978, 1, 0, 0, 0, 4990, 4982, 1, 0, 0, 0, 4990, 4985, 1, 0, 0, 0, 4990, 4986, 1, 0, 0, 0, 4990, 4987, 1, 0, 0, 0, 4990, 4988, 1, 0, 0, 0, 4991, 4992, 1, 0, 0, 0, 4992, 4993, 3, 818, 409, 0, 4993, 4994, 5, 309, 0, 0, 4994, 4995, 5, 94, 0, 0, 4995, 4996, 3, 818, 409, 0, 4996, 5031, 1, 0, 0, 0, 4997, 4998, 5, 138, 0, 0, 4998, 4999, 7, 45, 0, 0, 4999, 5000, 3, 814, 407, 0, 5000, 5001, 5, 309, 0, 0, 5001, 5002, 5, 94, 0, 0, 5002, 5003, 3, 814, 407, 0, 5003, 5031, 1, 0, 0, 0, 5004, 5005, 5, 138, 0, 0, 5005, 5006, 3, 176, 88, 0, 5006, 5007, 5, 309, 0, 0, 5007, 5008, 5, 94, 0, 0, 5008, 5009, 3, 768, 384, 0, 5009, 5031, 1, 0, 0, 0, 5010, 5011, 5, 138, 0, 0, 5011, 5012, 5, 355, 0, 0, 5012, 5013, 5, 325, 0, 0, 5013, 5014, 7, 41, 0, 0, 5014, 5015, 3, 316, 158, 0, 5015, 5016, 5, 309, 0, 0, 5016, 5017, 5, 94, 0, 0, 5017, 5018, 3, 818, 409, 0, 5018, 5031, 1, 0, 0, 0, 5019, 5020, 5, 138, 0, 0, 5020, 5021, 5, 360, 0, 0, 5021, 5022, 3, 316, 158, 0, 5022, 5023, 5, 309, 0, 0, 5023, 5024, 5, 143, 0, 0, 5024, 5025, 3, 818, 409, 0, 5025, 5026, 5, 94, 0, 0, 5026, 5028, 3, 818, 409, 0, 5027, 5029, 3, 96, 48, 0, 5028, 5027, 1, 0, 0, 0, 5028, 5029, 1, 0, 0, 0, 5029, 5031, 1, 0, 0, 0, 5030, 4823, 1, 0, 0, 0, 5030, 4834, 1, 0, 0, 0, 5030, 4841, 1, 0, 0, 0, 5030, 4848, 1, 0, 0, 0, 5030, 4855, 1, 0, 0, 0, 5030, 4864, 1, 0, 0, 0, 5030, 4871, 1, 0, 0, 0, 5030, 4878, 1, 0, 0, 0, 5030, 4888, 1, 0, 0, 0, 5030, 4901, 1, 0, 0, 0, 5030, 4914, 1, 0, 0, 0, 5030, 4945, 1, 0, 0, 0, 5030, 4961, 1, 0, 0, 0, 5030, 4977, 1, 0, 0, 0, 5030, 4997, 1, 0, 0, 0, 5030, 5004, 1, 0, 0, 0, 5030, 5010, 1, 0, 0, 0, 5030, 5019, 1, 0, 0, 0, 5031, 433, 1, 0, 0, 0, 5032, 5049, 5, 138, 0, 0, 5033, 5034, 5, 211, 0, 0, 5034, 5050, 3, 382, 191, 0, 5035, 5036, 5, 296, 0, 0, 5036, 5050, 3, 378, 189, 0, 5037, 5038, 5, 442, 0, 0, 5038, 5050, 3, 374, 187, 0, 5039, 5040, 5, 357, 0, 0, 5040, 5041, 3, 818, 409, 0, 5041, 5042, 5, 80, 0, 0, 5042, 5043, 3, 780, 390, 0, 5043, 5050, 1, 0, 0, 0, 5044, 5045, 5, 259, 0, 0, 5045, 5046, 5, 376, 0, 0, 5046, 5050, 3, 778, 389, 0, 5047, 5048, 5, 226, 0, 0, 5048, 5050, 3, 780, 390, 0, 5049, 5033, 1, 0, 0, 0, 5049, 5035, 1, 0, 0, 0, 5049, 5037, 1, 0, 0, 0, 5049, 5039, 1, 0, 0, 0, 5049, 5044, 1, 0, 0, 0, 5049, 5047, 1, 0, 0, 0, 5050, 5052, 1, 0, 0, 0, 5051, 5053, 5, 269, 0, 0, 5052, 5051, 1, 0, 0, 0, 5052, 5053, 1, 0, 0, 0, 5053, 5054, 1, 0, 0, 0, 5054, 5055, 5, 462, 0, 0, 5055, 5056, 5, 80, 0, 0, 5056, 5057, 5, 204, 0, 0, 5057, 5058, 3, 818, 409, 0, 5058, 435, 1, 0, 0, 0, 5059, 5098, 5, 138, 0, 0, 5060, 5061, 5, 136, 0, 0, 5061, 5099, 3, 394, 197, 0, 5062, 5063, 5, 204, 0, 0, 5063, 5099, 3, 818, 409, 0, 5064, 5065, 5, 211, 0, 0, 5065, 5099, 3, 382, 191, 0, 5066, 5067, 5, 278, 0, 0, 5067, 5099, 3, 416, 208, 0, 5068, 5069, 5, 278, 0, 0, 5069, 5070, 7, 31, 0, 0, 5070, 5071, 3, 316, 158, 0, 5071, 5072, 3, 170, 85, 0, 5072, 5099, 1, 0, 0, 0, 5073, 5074, 5, 296, 0, 0, 5074, 5099, 3, 378, 189, 0, 5075, 5076, 5, 442, 0, 0, 5076, 5099, 3, 374, 187, 0, 5077, 5079, 5, 328, 0, 0, 5078, 5080, 3, 422, 211, 0, 5079, 5078, 1, 0, 0, 0, 5079, 5080, 1, 0, 0, 0, 5080, 5081, 1, 0, 0, 0, 5081, 5099, 3, 780, 390, 0, 5082, 5084, 5, 259, 0, 0, 5083, 5082, 1, 0, 0, 0, 5083, 5084, 1, 0, 0, 0, 5084, 5085, 1, 0, 0, 0, 5085, 5087, 5, 376, 0, 0, 5086, 5088, 3, 422, 211, 0, 5087, 5086, 1, 0, 0, 0, 5087, 5088, 1, 0, 0, 0, 5088, 5089, 1, 0, 0, 0, 5089, 5099, 3, 778, 389, 0, 5090, 5092, 5, 63, 0, 0, 5091, 5090, 1, 0, 0, 0, 5091, 5092, 1, 0, 0, 0, 5092, 5093, 1, 0, 0, 0, 5093, 5095, 5, 92, 0, 0, 5094, 5096, 3, 422, 211, 0, 5095, 5094, 1, 0, 0, 0, 5095, 5096, 1, 0, 0, 0, 5096, 5097, 1, 0, 0, 0, 5097, 5099, 3, 624, 312, 0, 5098, 5060, 1, 0, 0, 0, 5098, 5062, 1, 0, 0, 0, 5098, 5064, 1, 0, 0, 0, 5098, 5066, 1, 0, 0, 0, 5098, 5068, 1, 0, 0, 0, 5098, 5073, 1, 0, 0, 0, 5098, 5075, 1, 0, 0, 0, 5098, 5077, 1, 0, 0, 0, 5098, 5083, 1, 0, 0, 0, 5098, 5091, 1, 0, 0, 0, 5099, 5100, 1, 0, 0, 0, 5100, 5101, 5, 333, 0, 0, 5101, 5102, 5, 323, 0, 0, 5102, 5103, 3, 790, 395, 0, 5103, 5121, 1, 0, 0, 0, 5104, 5113, 5, 138, 0, 0, 5105, 5106, 5, 355, 0, 0, 5106, 5107, 5, 325, 0, 0, 5107, 5114, 7, 41, 0, 0, 5108, 5114, 5, 108, 0, 0, 5109, 5114, 5, 168, 0, 0, 5110, 5114, 5, 189, 0, 0, 5111, 5114, 5, 342, 0, 0, 5112, 5114, 5, 360, 0, 0, 5113, 5105, 1, 0, 0, 0, 5113, 5108, 1, 0, 0, 0, 5113, 5109, 1, 0, 0, 0, 5113, 5110, 1, 0, 0, 0, 5113, 5111, 1, 0, 0, 0, 5113, 5112, 1, 0, 0, 0, 5114, 5115, 1, 0, 0, 0, 5115, 5116, 3, 316, 158, 0, 5116, 5117, 5, 333, 0, 0, 5117, 5118, 5, 323, 0, 0, 5118, 5119, 3, 790, 395, 0, 5119, 5121, 1, 0, 0, 0, 5120, 5059, 1, 0, 0, 0, 5120, 5104, 1, 0, 0, 0, 5121, 437, 1, 0, 0, 0, 5122, 5123, 5, 138, 0, 0, 5123, 5124, 5, 278, 0, 0, 5124, 5125, 3, 416, 208, 0, 5125, 5126, 5, 333, 0, 0, 5126, 5127, 3, 440, 220, 0, 5127, 439, 1, 0, 0, 0, 5128, 5129, 5, 2, 0, 0, 5129, 5134, 3, 442, 221, 0, 5130, 5131, 5, 6, 0, 0, 5131, 5133, 3, 442, 221, 0, 5132, 5130, 1, 0, 0, 0, 5133, 5136, 1, 0, 0, 0, 5134, 5132, 1, 0, 0, 0, 5134, 5135, 1, 0, 0, 0, 5135, 5137, 1, 0, 0, 0, 5136, 5134, 1, 0, 0, 0, 5137, 5138, 5, 3, 0, 0, 5138, 441, 1, 0, 0, 0, 5139, 5140, 3, 824, 412, 0, 5140, 5147, 5, 10, 0, 0, 5141, 5148, 5, 407, 0, 0, 5142, 5148, 3, 388, 194, 0, 5143, 5148, 3, 834, 417, 0, 5144, 5148, 3, 726, 363, 0, 5145, 5148, 3, 202, 101, 0, 5146, 5148, 3, 808, 404, 0, 5147, 5141, 1, 0, 0, 0, 5147, 5142, 1, 0, 0, 0, 5147, 5143, 1, 0, 0, 0, 5147, 5144, 1, 0, 0, 0, 5147, 5145, 1, 0, 0, 0, 5147, 5146, 1, 0, 0, 0, 5148, 443, 1, 0, 0, 0, 5149, 5150, 5, 138, 0, 0, 5150, 5151, 5, 360, 0, 0, 5151, 5152, 3, 316, 158, 0, 5152, 5153, 5, 333, 0, 0, 5153, 5154, 3, 440, 220, 0, 5154, 445, 1, 0, 0, 0, 5155, 5156, 5, 138, 0, 0, 5156, 5157, 5, 278, 0, 0, 5157, 5158, 7, 31, 0, 0, 5158, 5159, 3, 316, 158, 0, 5159, 5160, 3, 170, 85, 0, 5160, 5161, 5, 282, 0, 0, 5161, 5162, 5, 94, 0, 0, 5162, 5163, 3, 814, 407, 0, 5163, 5230, 1, 0, 0, 0, 5164, 5191, 5, 138, 0, 0, 5165, 5166, 5, 136, 0, 0, 5166, 5192, 3, 394, 197, 0, 5167, 5168, 5, 175, 0, 0, 5168, 5192, 3, 788, 394, 0, 5169, 5170, 5, 211, 0, 0, 5170, 5192, 3, 382, 191, 0, 5171, 5173, 5, 295, 0, 0, 5172, 5171, 1, 0, 0, 0, 5172, 5173, 1, 0, 0, 0, 5173, 5174, 1, 0, 0, 0, 5174, 5175, 5, 247, 0, 0, 5175, 5192, 3, 818, 409, 0, 5176, 5177, 5, 248, 0, 0, 5177, 5178, 5, 274, 0, 0, 5178, 5192, 3, 202, 101, 0, 5179, 5180, 5, 248, 0, 0, 5180, 5181, 5, 274, 0, 0, 5181, 5192, 3, 202, 101, 0, 5182, 5183, 5, 278, 0, 0, 5183, 5192, 3, 416, 208, 0, 5184, 5185, 5, 296, 0, 0, 5185, 5192, 3, 378, 189, 0, 5186, 5187, 5, 442, 0, 0, 5187, 5192, 3, 374, 187, 0, 5188, 5189, 5, 323, 0, 0, 5189, 5192, 3, 790, 395, 0, 5190, 5192, 3, 176, 88, 0, 5191, 5165, 1, 0, 0, 0, 5191, 5167, 1, 0, 0, 0, 5191, 5169, 1, 0, 0, 0, 5191, 5172, 1, 0, 0, 0, 5191, 5176, 1, 0, 0, 0, 5191, 5179, 1, 0, 0, 0, 5191, 5182, 1, 0, 0, 0, 5191, 5184, 1, 0, 0, 0, 5191, 5186, 1, 0, 0, 0, 5191, 5188, 1, 0, 0, 0, 5191, 5190, 1, 0, 0, 0, 5192, 5193, 1, 0, 0, 0, 5193, 5194, 5, 282, 0, 0, 5194, 5195, 5, 94, 0, 0, 5195, 5196, 3, 814, 407, 0, 5196, 5230, 1, 0, 0, 0, 5197, 5206, 5, 138, 0, 0, 5198, 5199, 5, 355, 0, 0, 5199, 5200, 5, 325, 0, 0, 5200, 5207, 7, 63, 0, 0, 5201, 5207, 5, 108, 0, 0, 5202, 5207, 5, 168, 0, 0, 5203, 5207, 5, 189, 0, 0, 5204, 5207, 5, 360, 0, 0, 5205, 5207, 5, 342, 0, 0, 5206, 5198, 1, 0, 0, 0, 5206, 5201, 1, 0, 0, 0, 5206, 5202, 1, 0, 0, 0, 5206, 5203, 1, 0, 0, 0, 5206, 5204, 1, 0, 0, 0, 5206, 5205, 1, 0, 0, 0, 5207, 5208, 1, 0, 0, 0, 5208, 5209, 3, 316, 158, 0, 5209, 5210, 5, 282, 0, 0, 5210, 5211, 5, 94, 0, 0, 5211, 5212, 3, 814, 407, 0, 5212, 5230, 1, 0, 0, 0, 5213, 5222, 5, 138, 0, 0, 5214, 5223, 5, 331, 0, 0, 5215, 5216, 5, 63, 0, 0, 5216, 5217, 5, 174, 0, 0, 5217, 5223, 5, 381, 0, 0, 5218, 5219, 5, 198, 0, 0, 5219, 5223, 5, 357, 0, 0, 5220, 5223, 5, 452, 0, 0, 5221, 5223, 5, 451, 0, 0, 5222, 5214, 1, 0, 0, 0, 5222, 5215, 1, 0, 0, 0, 5222, 5218, 1, 0, 0, 0, 5222, 5220, 1, 0, 0, 0, 5222, 5221, 1, 0, 0, 0, 5223, 5224, 1, 0, 0, 0, 5224, 5225, 3, 818, 409, 0, 5225, 5226, 5, 282, 0, 0, 5226, 5227, 5, 94, 0, 0, 5227, 5228, 3, 814, 407, 0, 5228, 5230, 1, 0, 0, 0, 5229, 5155, 1, 0, 0, 0, 5229, 5164, 1, 0, 0, 0, 5229, 5197, 1, 0, 0, 0, 5229, 5213, 1, 0, 0, 0, 5230, 447, 1, 0, 0, 0, 5231, 5232, 5, 46, 0, 0, 5232, 5233, 5, 452, 0, 0, 5233, 5240, 3, 818, 409, 0, 5234, 5235, 5, 62, 0, 0, 5235, 5236, 5, 92, 0, 0, 5236, 5241, 3, 628, 314, 0, 5237, 5238, 5, 62, 0, 0, 5238, 5239, 5, 30, 0, 0, 5239, 5241, 5, 350, 0, 0, 5240, 5234, 1, 0, 0, 0, 5240, 5237, 1, 0, 0, 0, 5240, 5241, 1, 0, 0, 0, 5241, 5243, 1, 0, 0, 0, 5242, 5244, 3, 400, 200, 0, 5243, 5242, 1, 0, 0, 0, 5243, 5244, 1, 0, 0, 0, 5244, 449, 1, 0, 0, 0, 5245, 5246, 5, 138, 0, 0, 5246, 5247, 5, 452, 0, 0, 5247, 5265, 3, 818, 409, 0, 5248, 5249, 5, 282, 0, 0, 5249, 5250, 5, 94, 0, 0, 5250, 5266, 3, 814, 407, 0, 5251, 5252, 5, 333, 0, 0, 5252, 5266, 3, 284, 142, 0, 5253, 5254, 5, 309, 0, 0, 5254, 5255, 5, 94, 0, 0, 5255, 5266, 3, 818, 409, 0, 5256, 5257, 7, 34, 0, 0, 5257, 5262, 3, 626, 313, 0, 5258, 5259, 5, 6, 0, 0, 5259, 5261, 3, 626, 313, 0, 5260, 5258, 1, 0, 0, 0, 5261, 5264, 1, 0, 0, 0, 5262, 5260, 1, 0, 0, 0, 5262, 5263, 1, 0, 0, 0, 5263, 5266, 1, 0, 0, 0, 5264, 5262, 1, 0, 0, 0, 5265, 5248, 1, 0, 0, 0, 5265, 5251, 1, 0, 0, 0, 5265, 5253, 1, 0, 0, 0, 5265, 5256, 1, 0, 0, 0, 5266, 451, 1, 0, 0, 0, 5267, 5268, 5, 46, 0, 0, 5268, 5269, 5, 451, 0, 0, 5269, 5270, 3, 818, 409, 0, 5270, 5271, 5, 164, 0, 0, 5271, 5272, 3, 808, 404, 0, 5272, 5273, 5, 452, 0, 0, 5273, 5278, 3, 824, 412, 0, 5274, 5275, 5, 6, 0, 0, 5275, 5277, 3, 824, 412, 0, 5276, 5274, 1, 0, 0, 0, 5277, 5280, 1, 0, 0, 0, 5278, 5276, 1, 0, 0, 0, 5278, 5279, 1, 0, 0, 0, 5279, 5282, 1, 0, 0, 0, 5280, 5278, 1, 0, 0, 0, 5281, 5283, 3, 400, 200, 0, 5282, 5281, 1, 0, 0, 0, 5282, 5283, 1, 0, 0, 0, 5283, 453, 1, 0, 0, 0, 5284, 5285, 5, 138, 0, 0, 5285, 5286, 5, 451, 0, 0, 5286, 5287, 3, 818, 409, 0, 5287, 5288, 5, 333, 0, 0, 5288, 5289, 3, 284, 142, 0, 5289, 5341, 1, 0, 0, 0, 5290, 5291, 5, 138, 0, 0, 5291, 5292, 5, 451, 0, 0, 5292, 5293, 3, 818, 409, 0, 5293, 5294, 5, 164, 0, 0, 5294, 5295, 3, 808, 404, 0, 5295, 5341, 1, 0, 0, 0, 5296, 5297, 5, 138, 0, 0, 5297, 5298, 5, 451, 0, 0, 5298, 5299, 3, 818, 409, 0, 5299, 5300, 5, 305, 0, 0, 5300, 5302, 5, 452, 0, 0, 5301, 5303, 3, 400, 200, 0, 5302, 5301, 1, 0, 0, 0, 5302, 5303, 1, 0, 0, 0, 5303, 5341, 1, 0, 0, 0, 5304, 5305, 5, 138, 0, 0, 5305, 5306, 5, 451, 0, 0, 5306, 5307, 3, 818, 409, 0, 5307, 5308, 7, 34, 0, 0, 5308, 5309, 5, 452, 0, 0, 5309, 5314, 3, 824, 412, 0, 5310, 5311, 5, 6, 0, 0, 5311, 5313, 3, 824, 412, 0, 5312, 5310, 1, 0, 0, 0, 5313, 5316, 1, 0, 0, 0, 5314, 5312, 1, 0, 0, 0, 5314, 5315, 1, 0, 0, 0, 5315, 5318, 1, 0, 0, 0, 5316, 5314, 1, 0, 0, 0, 5317, 5319, 3, 400, 200, 0, 5318, 5317, 1, 0, 0, 0, 5318, 5319, 1, 0, 0, 0, 5319, 5341, 1, 0, 0, 0, 5320, 5321, 5, 138, 0, 0, 5321, 5322, 5, 451, 0, 0, 5322, 5323, 3, 818, 409, 0, 5323, 5324, 7, 64, 0, 0, 5324, 5341, 1, 0, 0, 0, 5325, 5326, 5, 138, 0, 0, 5326, 5327, 5, 451, 0, 0, 5327, 5328, 3, 818, 409, 0, 5328, 5329, 5, 465, 0, 0, 5329, 5330, 5, 2, 0, 0, 5330, 5331, 3, 290, 145, 0, 5331, 5332, 5, 3, 0, 0, 5332, 5341, 1, 0, 0, 0, 5333, 5334, 5, 138, 0, 0, 5334, 5335, 5, 451, 0, 0, 5335, 5336, 3, 818, 409, 0, 5336, 5337, 5, 282, 0, 0, 5337, 5338, 5, 94, 0, 0, 5338, 5339, 3, 814, 407, 0, 5339, 5341, 1, 0, 0, 0, 5340, 5284, 1, 0, 0, 0, 5340, 5290, 1, 0, 0, 0, 5340, 5296, 1, 0, 0, 0, 5340, 5304, 1, 0, 0, 0, 5340, 5320, 1, 0, 0, 0, 5340, 5325, 1, 0, 0, 0, 5340, 5333, 1, 0, 0, 0, 5341, 455, 1, 0, 0, 0, 5342, 5344, 5, 46, 0, 0, 5343, 5345, 3, 366, 183, 0, 5344, 5343, 1, 0, 0, 0, 5344, 5345, 1, 0, 0, 0, 5345, 5346, 1, 0, 0, 0, 5346, 5347, 5, 321, 0, 0, 5347, 5348, 3, 818, 409, 0, 5348, 5349, 5, 36, 0, 0, 5349, 5350, 5, 80, 0, 0, 5350, 5351, 7, 65, 0, 0, 5351, 5352, 5, 94, 0, 0, 5352, 5354, 3, 780, 390, 0, 5353, 5355, 3, 638, 319, 0, 5354, 5353, 1, 0, 0, 0, 5354, 5355, 1, 0, 0, 0, 5355, 5356, 1, 0, 0, 0, 5356, 5358, 5, 57, 0, 0, 5357, 5359, 7, 66, 0, 0, 5358, 5357, 1, 0, 0, 0, 5358, 5359, 1, 0, 0, 0, 5359, 5376, 1, 0, 0, 0, 5360, 5377, 5, 270, 0, 0, 5361, 5377, 3, 458, 229, 0, 5362, 5364, 5, 2, 0, 0, 5363, 5365, 3, 458, 229, 0, 5364, 5363, 1, 0, 0, 0, 5364, 5365, 1, 0, 0, 0, 5365, 5372, 1, 0, 0, 0, 5366, 5368, 5, 7, 0, 0, 5367, 5369, 3, 458, 229, 0, 5368, 5367, 1, 0, 0, 0, 5368, 5369, 1, 0, 0, 0, 5369, 5371, 1, 0, 0, 0, 5370, 5366, 1, 0, 0, 0, 5371, 5374, 1, 0, 0, 0, 5372, 5370, 1, 0, 0, 0, 5372, 5373, 1, 0, 0, 0, 5373, 5375, 1, 0, 0, 0, 5374, 5372, 1, 0, 0, 0, 5375, 5377, 5, 3, 0, 0, 5376, 5360, 1, 0, 0, 0, 5376, 5361, 1, 0, 0, 0, 5376, 5362, 1, 0, 0, 0, 5377, 457, 1, 0, 0, 0, 5378, 5384, 3, 560, 280, 0, 5379, 5384, 3, 538, 269, 0, 5380, 5384, 3, 552, 276, 0, 5381, 5384, 3, 548, 274, 0, 5382, 5384, 3, 460, 230, 0, 5383, 5378, 1, 0, 0, 0, 5383, 5379, 1, 0, 0, 0, 5383, 5380, 1, 0, 0, 0, 5383, 5381, 1, 0, 0, 0, 5383, 5382, 1, 0, 0, 0, 5384, 459, 1, 0, 0, 0, 5385, 5386, 5, 271, 0, 0, 5386, 5388, 3, 818, 409, 0, 5387, 5389, 3, 462, 231, 0, 5388, 5387, 1, 0, 0, 0, 5388, 5389, 1, 0, 0, 0, 5389, 461, 1, 0, 0, 0, 5390, 5391, 5, 6, 0, 0, 5391, 5392, 3, 808, 404, 0, 5392, 463, 1, 0, 0, 0, 5393, 5394, 5, 252, 0, 0, 5394, 5395, 3, 818, 409, 0, 5395, 465, 1, 0, 0, 0, 5396, 5399, 5, 366, 0, 0, 5397, 5400, 3, 818, 409, 0, 5398, 5400, 5, 9, 0, 0, 5399, 5397, 1, 0, 0, 0, 5399, 5398, 1, 0, 0, 0, 5400, 467, 1, 0, 0, 0, 5401, 5403, 5, 146, 0, 0, 5402, 5404, 3, 470, 235, 0, 5403, 5402, 1, 0, 0, 0, 5403, 5404, 1, 0, 0, 0, 5404, 5406, 1, 0, 0, 0, 5405, 5407, 3, 474, 237, 0, 5406, 5405, 1, 0, 0, 0, 5406, 5407, 1, 0, 0, 0, 5407, 5447, 1, 0, 0, 0, 5408, 5409, 5, 340, 0, 0, 5409, 5411, 5, 356, 0, 0, 5410, 5412, 3, 474, 237, 0, 5411, 5410, 1, 0, 0, 0, 5411, 5412, 1, 0, 0, 0, 5412, 5447, 1, 0, 0, 0, 5413, 5414, 5, 322, 0, 0, 5414, 5447, 3, 818, 409, 0, 5415, 5417, 5, 308, 0, 0, 5416, 5418, 5, 322, 0, 0, 5417, 5416, 1, 0, 0, 0, 5417, 5418, 1, 0, 0, 0, 5418, 5419, 1, 0, 0, 0, 5419, 5447, 3, 818, 409, 0, 5420, 5421, 5, 290, 0, 0, 5421, 5422, 5, 356, 0, 0, 5422, 5447, 3, 808, 404, 0, 5423, 5424, 7, 67, 0, 0, 5424, 5425, 5, 291, 0, 0, 5425, 5447, 3, 808, 404, 0, 5426, 5428, 7, 68, 0, 0, 5427, 5429, 3, 470, 235, 0, 5428, 5427, 1, 0, 0, 0, 5428, 5429, 1, 0, 0, 0, 5429, 5435, 1, 0, 0, 0, 5430, 5432, 5, 33, 0, 0, 5431, 5433, 5, 269, 0, 0, 5432, 5431, 1, 0, 0, 0, 5432, 5433, 1, 0, 0, 0, 5433, 5434, 1, 0, 0, 0, 5434, 5436, 5, 153, 0, 0, 5435, 5430, 1, 0, 0, 0, 5435, 5436, 1, 0, 0, 0, 5436, 5447, 1, 0, 0, 0, 5437, 5439, 5, 319, 0, 0, 5438, 5440, 3, 470, 235, 0, 5439, 5438, 1, 0, 0, 0, 5439, 5440, 1, 0, 0, 0, 5440, 5441, 1, 0, 0, 0, 5441, 5443, 5, 94, 0, 0, 5442, 5444, 5, 322, 0, 0, 5443, 5442, 1, 0, 0, 0, 5443, 5444, 1, 0, 0, 0, 5444, 5445, 1, 0, 0, 0, 5445, 5447, 3, 818, 409, 0, 5446, 5401, 1, 0, 0, 0, 5446, 5408, 1, 0, 0, 0, 5446, 5413, 1, 0, 0, 0, 5446, 5415, 1, 0, 0, 0, 5446, 5420, 1, 0, 0, 0, 5446, 5423, 1, 0, 0, 0, 5446, 5426, 1, 0, 0, 0, 5446, 5437, 1, 0, 0, 0, 5447, 469, 1, 0, 0, 0, 5448, 5449, 7, 69, 0, 0, 5449, 471, 1, 0, 0, 0, 5450, 5451, 5, 244, 0, 0, 5451, 5452, 5, 251, 0, 0, 5452, 5460, 3, 50, 25, 0, 5453, 5454, 5, 300, 0, 0, 5454, 5460, 7, 70, 0, 0, 5455, 5457, 5, 77, 0, 0, 5456, 5455, 1, 0, 0, 0, 5456, 5457, 1, 0, 0, 0, 5457, 5458, 1, 0, 0, 0, 5458, 5460, 5, 54, 0, 0, 5459, 5450, 1, 0, 0, 0, 5459, 5453, 1, 0, 0, 0, 5459, 5456, 1, 0, 0, 0, 5460, 473, 1, 0, 0, 0, 5461, 5468, 3, 472, 236, 0, 5462, 5464, 5, 6, 0, 0, 5463, 5462, 1, 0, 0, 0, 5463, 5464, 1, 0, 0, 0, 5464, 5465, 1, 0, 0, 0, 5465, 5467, 3, 472, 236, 0, 5466, 5463, 1, 0, 0, 0, 5467, 5470, 1, 0, 0, 0, 5468, 5466, 1, 0, 0, 0, 5468, 5469, 1, 0, 0, 0, 5469, 475, 1, 0, 0, 0, 5470, 5468, 1, 0, 0, 0, 5471, 5474, 5, 46, 0, 0, 5472, 5473, 5, 82, 0, 0, 5473, 5475, 5, 311, 0, 0, 5474, 5472, 1, 0, 0, 0, 5474, 5475, 1, 0, 0, 0, 5475, 5477, 1, 0, 0, 0, 5476, 5478, 3, 122, 61, 0, 5477, 5476, 1, 0, 0, 0, 5477, 5478, 1, 0, 0, 0, 5478, 5494, 1, 0, 0, 0, 5479, 5480, 5, 376, 0, 0, 5480, 5482, 3, 776, 388, 0, 5481, 5483, 3, 146, 73, 0, 5482, 5481, 1, 0, 0, 0, 5482, 5483, 1, 0, 0, 0, 5483, 5485, 1, 0, 0, 0, 5484, 5486, 3, 102, 51, 0, 5485, 5484, 1, 0, 0, 0, 5485, 5486, 1, 0, 0, 0, 5486, 5495, 1, 0, 0, 0, 5487, 5488, 5, 303, 0, 0, 5488, 5489, 5, 376, 0, 0, 5489, 5490, 3, 776, 388, 0, 5490, 5492, 3, 144, 72, 0, 5491, 5493, 3, 102, 51, 0, 5492, 5491, 1, 0, 0, 0, 5492, 5493, 1, 0, 0, 0, 5493, 5495, 1, 0, 0, 0, 5494, 5479, 1, 0, 0, 0, 5494, 5487, 1, 0, 0, 0, 5495, 5496, 1, 0, 0, 0, 5496, 5497, 5, 36, 0, 0, 5497, 5504, 3, 560, 280, 0, 5498, 5500, 5, 105, 0, 0, 5499, 5501, 7, 71, 0, 0, 5500, 5499, 1, 0, 0, 0, 5500, 5501, 1, 0, 0, 0, 5501, 5502, 1, 0, 0, 0, 5502, 5503, 5, 42, 0, 0, 5503, 5505, 5, 279, 0, 0, 5504, 5498, 1, 0, 0, 0, 5504, 5505, 1, 0, 0, 0, 5505, 477, 1, 0, 0, 0, 5506, 5507, 5, 253, 0, 0, 5507, 5508, 3, 808, 404, 0, 5508, 479, 1, 0, 0, 0, 5509, 5510, 5, 46, 0, 0, 5510, 5511, 5, 175, 0, 0, 5511, 5513, 3, 786, 393, 0, 5512, 5514, 5, 105, 0, 0, 5513, 5512, 1, 0, 0, 0, 5513, 5514, 1, 0, 0, 0, 5514, 5520, 1, 0, 0, 0, 5515, 5517, 3, 482, 241, 0, 5516, 5515, 1, 0, 0, 0, 5517, 5518, 1, 0, 0, 0, 5518, 5516, 1, 0, 0, 0, 5518, 5519, 1, 0, 0, 0, 5519, 5521, 1, 0, 0, 0, 5520, 5516, 1, 0, 0, 0, 5520, 5521, 1, 0, 0, 0, 5521, 481, 1, 0, 0, 0, 5522, 5523, 5, 164, 0, 0, 5523, 5531, 5, 74, 0, 0, 5524, 5531, 5, 194, 0, 0, 5525, 5531, 5, 255, 0, 0, 5526, 5531, 5, 282, 0, 0, 5527, 5531, 5, 351, 0, 0, 5528, 5531, 5, 353, 0, 0, 5529, 5531, 3, 826, 413, 0, 5530, 5522, 1, 0, 0, 0, 5530, 5524, 1, 0, 0, 0, 5530, 5525, 1, 0, 0, 0, 5530, 5526, 1, 0, 0, 0, 5530, 5527, 1, 0, 0, 0, 5530, 5528, 1, 0, 0, 0, 5530, 5529, 1, 0, 0, 0, 5531, 5533, 1, 0, 0, 0, 5532, 5534, 5, 10, 0, 0, 5533, 5532, 1, 0, 0, 0, 5533, 5534, 1, 0, 0, 0, 5534, 5538, 1, 0, 0, 0, 5535, 5539, 3, 812, 406, 0, 5536, 5539, 3, 54, 27, 0, 5537, 5539, 5, 53, 0, 0, 5538, 5535, 1, 0, 0, 0, 5538, 5536, 1, 0, 0, 0, 5538, 5537, 1, 0, 0, 0, 5539, 483, 1, 0, 0, 0, 5540, 5541, 5, 138, 0, 0, 5541, 5542, 5, 175, 0, 0, 5542, 5558, 3, 788, 394, 0, 5543, 5544, 5, 333, 0, 0, 5544, 5545, 5, 351, 0, 0, 5545, 5547, 3, 768, 384, 0, 5546, 5543, 1, 0, 0, 0, 5546, 5547, 1, 0, 0, 0, 5547, 5559, 1, 0, 0, 0, 5548, 5550, 5, 105, 0, 0, 5549, 5548, 1, 0, 0, 0, 5549, 5550, 1, 0, 0, 0, 5550, 5552, 1, 0, 0, 0, 5551, 5553, 3, 482, 241, 0, 5552, 5551, 1, 0, 0, 0, 5553, 5554, 1, 0, 0, 0, 5554, 5552, 1, 0, 0, 0, 5554, 5555, 1, 0, 0, 0, 5555, 5557, 1, 0, 0, 0, 5556, 5549, 1, 0, 0, 0, 5556, 5557, 1, 0, 0, 0, 5557, 5559, 1, 0, 0, 0, 5558, 5546, 1, 0, 0, 0, 5558, 5556, 1, 0, 0, 0, 5559, 485, 1, 0, 0, 0, 5560, 5561, 5, 138, 0, 0, 5561, 5562, 5, 175, 0, 0, 5562, 5564, 3, 788, 394, 0, 5563, 5565, 3, 64, 32, 0, 5564, 5563, 1, 0, 0, 0, 5564, 5565, 1, 0, 0, 0, 5565, 487, 1, 0, 0, 0, 5566, 5567, 5, 138, 0, 0, 5567, 5568, 5, 108, 0, 0, 5568, 5569, 3, 316, 158, 0, 5569, 5570, 5, 305, 0, 0, 5570, 5571, 5, 375, 0, 0, 5571, 489, 1, 0, 0, 0, 5572, 5573, 5, 138, 0, 0, 5573, 5574, 5, 349, 0, 0, 5574, 5575, 7, 16, 0, 0, 5575, 5576, 3, 40, 20, 0, 5576, 491, 1, 0, 0, 0, 5577, 5578, 5, 46, 0, 0, 5578, 5579, 5, 189, 0, 0, 5579, 5581, 3, 316, 158, 0, 5580, 5582, 5, 36, 0, 0, 5581, 5580, 1, 0, 0, 0, 5581, 5582, 1, 0, 0, 0, 5582, 5583, 1, 0, 0, 0, 5583, 5587, 3, 652, 326, 0, 5584, 5586, 3, 134, 67, 0, 5585, 5584, 1, 0, 0, 0, 5586, 5589, 1, 0, 0, 0, 5587, 5585, 1, 0, 0, 0, 5587, 5588, 1, 0, 0, 0, 5588, 493, 1, 0, 0, 0, 5589, 5587, 1, 0, 0, 0, 5590, 5591, 5, 138, 0, 0, 5591, 5592, 5, 189, 0, 0, 5592, 5615, 3, 316, 158, 0, 5593, 5616, 3, 94, 47, 0, 5594, 5595, 7, 15, 0, 0, 5595, 5596, 5, 77, 0, 0, 5596, 5616, 5, 78, 0, 0, 5597, 5600, 5, 133, 0, 0, 5598, 5599, 5, 45, 0, 0, 5599, 5601, 3, 818, 409, 0, 5600, 5598, 1, 0, 0, 0, 5600, 5601, 1, 0, 0, 0, 5601, 5602, 1, 0, 0, 0, 5602, 5616, 3, 142, 71, 0, 5603, 5604, 5, 191, 0, 0, 5604, 5606, 5, 45, 0, 0, 5605, 5607, 3, 422, 211, 0, 5606, 5605, 1, 0, 0, 0, 5606, 5607, 1, 0, 0, 0, 5607, 5608, 1, 0, 0, 0, 5608, 5610, 3, 818, 409, 0, 5609, 5611, 3, 96, 48, 0, 5610, 5609, 1, 0, 0, 0, 5610, 5611, 1, 0, 0, 0, 5611, 5616, 1, 0, 0, 0, 5612, 5613, 5, 372, 0, 0, 5613, 5614, 5, 45, 0, 0, 5614, 5616, 3, 818, 409, 0, 5615, 5593, 1, 0, 0, 0, 5615, 5594, 1, 0, 0, 0, 5615, 5597, 1, 0, 0, 0, 5615, 5603, 1, 0, 0, 0, 5615, 5612, 1, 0, 0, 0, 5616, 495, 1, 0, 0, 0, 5617, 5618, 5, 138, 0, 0, 5618, 5619, 5, 355, 0, 0, 5619, 5620, 5, 325, 0, 0, 5620, 5621, 5, 185, 0, 0, 5621, 5622, 3, 316, 158, 0, 5622, 5623, 3, 284, 142, 0, 5623, 497, 1, 0, 0, 0, 5624, 5625, 5, 138, 0, 0, 5625, 5626, 5, 355, 0, 0, 5626, 5627, 5, 325, 0, 0, 5627, 5628, 5, 163, 0, 0, 5628, 5629, 3, 316, 158, 0, 5629, 5630, 7, 72, 0, 0, 5630, 5631, 5, 257, 0, 0, 5631, 5632, 5, 62, 0, 0, 5632, 5633, 3, 784, 392, 0, 5633, 5634, 5, 105, 0, 0, 5634, 5635, 3, 314, 157, 0, 5635, 5666, 1, 0, 0, 0, 5636, 5637, 5, 138, 0, 0, 5637, 5638, 5, 355, 0, 0, 5638, 5639, 5, 325, 0, 0, 5639, 5640, 5, 163, 0, 0, 5640, 5641, 3, 316, 158, 0, 5641, 5642, 5, 138, 0, 0, 5642, 5645, 5, 257, 0, 0, 5643, 5644, 5, 62, 0, 0, 5644, 5646, 3, 784, 392, 0, 5645, 5643, 1, 0, 0, 0, 5645, 5646, 1, 0, 0, 0, 5646, 5647, 1, 0, 0, 0, 5647, 5648, 5, 311, 0, 0, 5648, 5649, 3, 316, 158, 0, 5649, 5650, 5, 105, 0, 0, 5650, 5651, 3, 316, 158, 0, 5651, 5666, 1, 0, 0, 0, 5652, 5653, 5, 138, 0, 0, 5653, 5654, 5, 355, 0, 0, 5654, 5655, 5, 325, 0, 0, 5655, 5656, 5, 163, 0, 0, 5656, 5657, 3, 316, 158, 0, 5657, 5658, 5, 191, 0, 0, 5658, 5660, 5, 257, 0, 0, 5659, 5661, 3, 422, 211, 0, 5660, 5659, 1, 0, 0, 0, 5660, 5661, 1, 0, 0, 0, 5661, 5662, 1, 0, 0, 0, 5662, 5663, 5, 62, 0, 0, 5663, 5664, 3, 784, 392, 0, 5664, 5666, 1, 0, 0, 0, 5665, 5624, 1, 0, 0, 0, 5665, 5636, 1, 0, 0, 0, 5665, 5652, 1, 0, 0, 0, 5666, 499, 1, 0, 0, 0, 5667, 5669, 5, 46, 0, 0, 5668, 5670, 5, 53, 0, 0, 5669, 5668, 1, 0, 0, 0, 5669, 5670, 1, 0, 0, 0, 5670, 5671, 1, 0, 0, 0, 5671, 5672, 5, 168, 0, 0, 5672, 5673, 3, 316, 158, 0, 5673, 5674, 5, 62, 0, 0, 5674, 5675, 3, 808, 404, 0, 5675, 5676, 5, 94, 0, 0, 5676, 5677, 3, 808, 404, 0, 5677, 5678, 5, 64, 0, 0, 5678, 5679, 3, 316, 158, 0, 5679, 501, 1, 0, 0, 0, 5680, 5682, 5, 158, 0, 0, 5681, 5683, 3, 514, 257, 0, 5682, 5681, 1, 0, 0, 0, 5682, 5683, 1, 0, 0, 0, 5683, 5688, 1, 0, 0, 0, 5684, 5686, 3, 774, 387, 0, 5685, 5687, 3, 170, 85, 0, 5686, 5685, 1, 0, 0, 0, 5686, 5687, 1, 0, 0, 0, 5687, 5689, 1, 0, 0, 0, 5688, 5684, 1, 0, 0, 0, 5688, 5689, 1, 0, 0, 0, 5689, 5706, 1, 0, 0, 0, 5690, 5691, 5, 158, 0, 0, 5691, 5692, 5, 2, 0, 0, 5692, 5697, 3, 514, 257, 0, 5693, 5694, 5, 6, 0, 0, 5694, 5696, 3, 514, 257, 0, 5695, 5693, 1, 0, 0, 0, 5696, 5699, 1, 0, 0, 0, 5697, 5695, 1, 0, 0, 0, 5697, 5698, 1, 0, 0, 0, 5698, 5700, 1, 0, 0, 0, 5699, 5697, 1, 0, 0, 0, 5700, 5701, 5, 3, 0, 0, 5701, 5703, 3, 774, 387, 0, 5702, 5704, 3, 170, 85, 0, 5703, 5702, 1, 0, 0, 0, 5703, 5704, 1, 0, 0, 0, 5704, 5706, 1, 0, 0, 0, 5705, 5680, 1, 0, 0, 0, 5705, 5690, 1, 0, 0, 0, 5706, 503, 1, 0, 0, 0, 5707, 5723, 5, 370, 0, 0, 5708, 5710, 5, 113, 0, 0, 5709, 5708, 1, 0, 0, 0, 5709, 5710, 1, 0, 0, 0, 5710, 5712, 1, 0, 0, 0, 5711, 5713, 5, 112, 0, 0, 5712, 5711, 1, 0, 0, 0, 5712, 5713, 1, 0, 0, 0, 5713, 5715, 1, 0, 0, 0, 5714, 5716, 3, 514, 257, 0, 5715, 5714, 1, 0, 0, 0, 5715, 5716, 1, 0, 0, 0, 5716, 5718, 1, 0, 0, 0, 5717, 5719, 3, 508, 254, 0, 5718, 5717, 1, 0, 0, 0, 5718, 5719, 1, 0, 0, 0, 5719, 5724, 1, 0, 0, 0, 5720, 5722, 3, 524, 262, 0, 5721, 5720, 1, 0, 0, 0, 5721, 5722, 1, 0, 0, 0, 5722, 5724, 1, 0, 0, 0, 5723, 5709, 1, 0, 0, 0, 5723, 5721, 1, 0, 0, 0, 5724, 5726, 1, 0, 0, 0, 5725, 5727, 3, 518, 259, 0, 5726, 5725, 1, 0, 0, 0, 5726, 5727, 1, 0, 0, 0, 5727, 505, 1, 0, 0, 0, 5728, 5743, 3, 508, 254, 0, 5729, 5731, 3, 514, 257, 0, 5730, 5729, 1, 0, 0, 0, 5730, 5731, 1, 0, 0, 0, 5731, 5744, 1, 0, 0, 0, 5732, 5733, 5, 2, 0, 0, 5733, 5738, 3, 512, 256, 0, 5734, 5735, 5, 6, 0, 0, 5735, 5737, 3, 512, 256, 0, 5736, 5734, 1, 0, 0, 0, 5737, 5740, 1, 0, 0, 0, 5738, 5736, 1, 0, 0, 0, 5738, 5739, 1, 0, 0, 0, 5739, 5741, 1, 0, 0, 0, 5740, 5738, 1, 0, 0, 0, 5741, 5742, 5, 3, 0, 0, 5742, 5744, 1, 0, 0, 0, 5743, 5730, 1, 0, 0, 0, 5743, 5732, 1, 0, 0, 0, 5744, 5746, 1, 0, 0, 0, 5745, 5747, 3, 518, 259, 0, 5746, 5745, 1, 0, 0, 0, 5746, 5747, 1, 0, 0, 0, 5747, 507, 1, 0, 0, 0, 5748, 5749, 7, 73, 0, 0, 5749, 509, 1, 0, 0, 0, 5750, 5753, 3, 822, 411, 0, 5751, 5753, 3, 508, 254, 0, 5752, 5750, 1, 0, 0, 0, 5752, 5751, 1, 0, 0, 0, 5753, 5756, 1, 0, 0, 0, 5754, 5757, 3, 54, 27, 0, 5755, 5757, 3, 202, 101, 0, 5756, 5754, 1, 0, 0, 0, 5756, 5755, 1, 0, 0, 0, 5756, 5757, 1, 0, 0, 0, 5757, 511, 1, 0, 0, 0, 5758, 5760, 7, 74, 0, 0, 5759, 5761, 7, 75, 0, 0, 5760, 5759, 1, 0, 0, 0, 5760, 5761, 1, 0, 0, 0, 5761, 5768, 1, 0, 0, 0, 5762, 5765, 5, 548, 0, 0, 5763, 5766, 3, 202, 101, 0, 5764, 5766, 3, 808, 404, 0, 5765, 5763, 1, 0, 0, 0, 5765, 5764, 1, 0, 0, 0, 5766, 5768, 1, 0, 0, 0, 5767, 5758, 1, 0, 0, 0, 5767, 5762, 1, 0, 0, 0, 5768, 513, 1, 0, 0, 0, 5769, 5771, 5, 128, 0, 0, 5770, 5772, 7, 75, 0, 0, 5771, 5770, 1, 0, 0, 0, 5771, 5772, 1, 0, 0, 0, 5772, 515, 1, 0, 0, 0, 5773, 5775, 3, 774, 387, 0, 5774, 5776, 3, 144, 72, 0, 5775, 5774, 1, 0, 0, 0, 5775, 5776, 1, 0, 0, 0, 5776, 517, 1, 0, 0, 0, 5777, 5782, 3, 516, 258, 0, 5778, 5779, 5, 6, 0, 0, 5779, 5781, 3, 516, 258, 0, 5780, 5778, 1, 0, 0, 0, 5781, 5784, 1, 0, 0, 0, 5782, 5780, 1, 0, 0, 0, 5782, 5783, 1, 0, 0, 0, 5783, 519, 1, 0, 0, 0, 5784, 5782, 1, 0, 0, 0, 5785, 5796, 5, 203, 0, 0, 5786, 5797, 3, 524, 262, 0, 5787, 5789, 5, 128, 0, 0, 5788, 5787, 1, 0, 0, 0, 5788, 5789, 1, 0, 0, 0, 5789, 5797, 1, 0, 0, 0, 5790, 5792, 3, 508, 254, 0, 5791, 5793, 3, 514, 257, 0, 5792, 5791, 1, 0, 0, 0, 5792, 5793, 1, 0, 0, 0, 5793, 5795, 1, 0, 0, 0, 5794, 5790, 1, 0, 0, 0, 5794, 5795, 1, 0, 0, 0, 5795, 5797, 1, 0, 0, 0, 5796, 5786, 1, 0, 0, 0, 5796, 5788, 1, 0, 0, 0, 5796, 5794, 1, 0, 0, 0, 5797, 5798, 1, 0, 0, 0, 5798, 5799, 3, 522, 261, 0, 5799, 521, 1, 0, 0, 0, 5800, 5810, 3, 560, 280, 0, 5801, 5810, 3, 538, 269, 0, 5802, 5810, 3, 552, 276, 0, 5803, 5810, 3, 548, 274, 0, 5804, 5810, 3, 558, 279, 0, 5805, 5810, 3, 186, 93, 0, 5806, 5810, 3, 192, 96, 0, 5807, 5810, 3, 194, 97, 0, 5808, 5810, 3, 532, 266, 0, 5809, 5800, 1, 0, 0, 0, 5809, 5801, 1, 0, 0, 0, 5809, 5802, 1, 0, 0, 0, 5809, 5803, 1, 0, 0, 0, 5809, 5804, 1, 0, 0, 0, 5809, 5805, 1, 0, 0, 0, 5809, 5806, 1, 0, 0, 0, 5809, 5807, 1, 0, 0, 0, 5809, 5808, 1, 0, 0, 0, 5810, 523, 1, 0, 0, 0, 5811, 5812, 5, 2, 0, 0, 5812, 5817, 3, 510, 255, 0, 5813, 5814, 5, 6, 0, 0, 5814, 5816, 3, 510, 255, 0, 5815, 5813, 1, 0, 0, 0, 5816, 5819, 1, 0, 0, 0, 5817, 5815, 1, 0, 0, 0, 5817, 5818, 1, 0, 0, 0, 5818, 5820, 1, 0, 0, 0, 5819, 5817, 1, 0, 0, 0, 5820, 5821, 5, 3, 0, 0, 5821, 525, 1, 0, 0, 0, 5822, 5823, 5, 290, 0, 0, 5823, 5825, 3, 818, 409, 0, 5824, 5826, 3, 528, 264, 0, 5825, 5824, 1, 0, 0, 0, 5825, 5826, 1, 0, 0, 0, 5826, 5827, 1, 0, 0, 0, 5827, 5828, 5, 36, 0, 0, 5828, 5829, 3, 530, 265, 0, 5829, 527, 1, 0, 0, 0, 5830, 5831, 5, 2, 0, 0, 5831, 5836, 3, 652, 326, 0, 5832, 5833, 5, 6, 0, 0, 5833, 5835, 3, 652, 326, 0, 5834, 5832, 1, 0, 0, 0, 5835, 5838, 1, 0, 0, 0, 5836, 5834, 1, 0, 0, 0, 5836, 5837, 1, 0, 0, 0, 5837, 5839, 1, 0, 0, 0, 5838, 5836, 1, 0, 0, 0, 5839, 5840, 5, 3, 0, 0, 5840, 529, 1, 0, 0, 0, 5841, 5846, 3, 560, 280, 0, 5842, 5846, 3, 538, 269, 0, 5843, 5846, 3, 552, 276, 0, 5844, 5846, 3, 548, 274, 0, 5845, 5841, 1, 0, 0, 0, 5845, 5842, 1, 0, 0, 0, 5845, 5843, 1, 0, 0, 0, 5845, 5844, 1, 0, 0, 0, 5846, 531, 1, 0, 0, 0, 5847, 5848, 5, 202, 0, 0, 5848, 5850, 3, 818, 409, 0, 5849, 5851, 3, 534, 267, 0, 5850, 5849, 1, 0, 0, 0, 5850, 5851, 1, 0, 0, 0, 5851, 5871, 1, 0, 0, 0, 5852, 5854, 5, 46, 0, 0, 5853, 5855, 3, 122, 61, 0, 5854, 5853, 1, 0, 0, 0, 5854, 5855, 1, 0, 0, 0, 5855, 5856, 1, 0, 0, 0, 5856, 5858, 5, 92, 0, 0, 5857, 5859, 3, 294, 147, 0, 5858, 5857, 1, 0, 0, 0, 5858, 5859, 1, 0, 0, 0, 5859, 5860, 1, 0, 0, 0, 5860, 5861, 3, 188, 94, 0, 5861, 5862, 5, 36, 0, 0, 5862, 5863, 5, 202, 0, 0, 5863, 5865, 3, 818, 409, 0, 5864, 5866, 3, 534, 267, 0, 5865, 5864, 1, 0, 0, 0, 5865, 5866, 1, 0, 0, 0, 5866, 5868, 1, 0, 0, 0, 5867, 5869, 3, 190, 95, 0, 5868, 5867, 1, 0, 0, 0, 5868, 5869, 1, 0, 0, 0, 5869, 5871, 1, 0, 0, 0, 5870, 5847, 1, 0, 0, 0, 5870, 5852, 1, 0, 0, 0, 5871, 533, 1, 0, 0, 0, 5872, 5873, 5, 2, 0, 0, 5873, 5874, 3, 730, 365, 0, 5874, 5875, 5, 3, 0, 0, 5875, 535, 1, 0, 0, 0, 5876, 5878, 5, 177, 0, 0, 5877, 5879, 5, 290, 0, 0, 5878, 5877, 1, 0, 0, 0, 5878, 5879, 1, 0, 0, 0, 5879, 5882, 1, 0, 0, 0, 5880, 5883, 3, 818, 409, 0, 5881, 5883, 5, 30, 0, 0, 5882, 5880, 1, 0, 0, 0, 5882, 5881, 1, 0, 0, 0, 5883, 537, 1, 0, 0, 0, 5884, 5886, 3, 572, 286, 0, 5885, 5884, 1, 0, 0, 0, 5885, 5886, 1, 0, 0, 0, 5886, 5887, 1, 0, 0, 0, 5887, 5888, 5, 241, 0, 0, 5888, 5889, 5, 71, 0, 0, 5889, 5892, 3, 774, 387, 0, 5890, 5891, 5, 36, 0, 0, 5891, 5893, 3, 818, 409, 0, 5892, 5890, 1, 0, 0, 0, 5892, 5893, 1, 0, 0, 0, 5893, 5894, 1, 0, 0, 0, 5894, 5916, 3, 540, 270, 0, 5895, 5896, 5, 80, 0, 0, 5896, 5904, 5, 464, 0, 0, 5897, 5899, 3, 360, 180, 0, 5898, 5900, 3, 638, 319, 0, 5899, 5898, 1, 0, 0, 0, 5899, 5900, 1, 0, 0, 0, 5900, 5905, 1, 0, 0, 0, 5901, 5902, 5, 80, 0, 0, 5902, 5903, 5, 45, 0, 0, 5903, 5905, 3, 818, 409, 0, 5904, 5897, 1, 0, 0, 0, 5904, 5901, 1, 0, 0, 0, 5904, 5905, 1, 0, 0, 0, 5905, 5906, 1, 0, 0, 0, 5906, 5914, 5, 57, 0, 0, 5907, 5908, 5, 369, 0, 0, 5908, 5909, 5, 333, 0, 0, 5909, 5911, 3, 554, 277, 0, 5910, 5912, 3, 638, 319, 0, 5911, 5910, 1, 0, 0, 0, 5911, 5912, 1, 0, 0, 0, 5912, 5915, 1, 0, 0, 0, 5913, 5915, 5, 270, 0, 0, 5914, 5907, 1, 0, 0, 0, 5914, 5913, 1, 0, 0, 0, 5915, 5917, 1, 0, 0, 0, 5916, 5895, 1, 0, 0, 0, 5916, 5917, 1, 0, 0, 0, 5917, 5919, 1, 0, 0, 0, 5918, 5920, 3, 546, 273, 0, 5919, 5918, 1, 0, 0, 0, 5919, 5920, 1, 0, 0, 0, 5920, 539, 1, 0, 0, 0, 5921, 5922, 5, 2, 0, 0, 5922, 5923, 3, 542, 271, 0, 5923, 5924, 5, 3, 0, 0, 5924, 5926, 1, 0, 0, 0, 5925, 5921, 1, 0, 0, 0, 5925, 5926, 1, 0, 0, 0, 5926, 5930, 1, 0, 0, 0, 5927, 5928, 5, 463, 0, 0, 5928, 5929, 7, 76, 0, 0, 5929, 5931, 5, 450, 0, 0, 5930, 5927, 1, 0, 0, 0, 5930, 5931, 1, 0, 0, 0, 5931, 5934, 1, 0, 0, 0, 5932, 5935, 3, 910, 455, 0, 5933, 5935, 3, 560, 280, 0, 5934, 5932, 1, 0, 0, 0, 5934, 5933, 1, 0, 0, 0, 5935, 541, 1, 0, 0, 0, 5936, 5941, 3, 544, 272, 0, 5937, 5938, 5, 6, 0, 0, 5938, 5940, 3, 544, 272, 0, 5939, 5937, 1, 0, 0, 0, 5940, 5943, 1, 0, 0, 0, 5941, 5939, 1, 0, 0, 0, 5941, 5942, 1, 0, 0, 0, 5942, 543, 1, 0, 0, 0, 5943, 5941, 1, 0, 0, 0, 5944, 5945, 3, 800, 400, 0, 5945, 5946, 3, 754, 377, 0, 5946, 545, 1, 0, 0, 0, 5947, 5948, 5, 87, 0, 0, 5948, 5949, 3, 756, 378, 0, 5949, 547, 1, 0, 0, 0, 5950, 5952, 3, 572, 286, 0, 5951, 5950, 1, 0, 0, 0, 5951, 5952, 1, 0, 0, 0, 5952, 5953, 1, 0, 0, 0, 5953, 5954, 5, 182, 0, 0, 5954, 5955, 5, 64, 0, 0, 5955, 5958, 3, 630, 315, 0, 5956, 5957, 5, 100, 0, 0, 5957, 5959, 3, 612, 306, 0, 5958, 5956, 1, 0, 0, 0, 5958, 5959, 1, 0, 0, 0, 5959, 5961, 1, 0, 0, 0, 5960, 5962, 3, 640, 320, 0, 5961, 5960, 1, 0, 0, 0, 5961, 5962, 1, 0, 0, 0, 5962, 5964, 1, 0, 0, 0, 5963, 5965, 3, 546, 273, 0, 5964, 5963, 1, 0, 0, 0, 5964, 5965, 1, 0, 0, 0, 5965, 549, 1, 0, 0, 0, 5966, 5968, 5, 256, 0, 0, 5967, 5969, 5, 92, 0, 0, 5968, 5967, 1, 0, 0, 0, 5968, 5969, 1, 0, 0, 0, 5969, 5970, 1, 0, 0, 0, 5970, 5985, 3, 628, 314, 0, 5971, 5982, 5, 68, 0, 0, 5972, 5973, 7, 77, 0, 0, 5973, 5983, 7, 78, 0, 0, 5974, 5979, 5, 334, 0, 0, 5975, 5976, 5, 369, 0, 0, 5976, 5980, 5, 201, 0, 0, 5977, 5978, 5, 414, 0, 0, 5978, 5980, 5, 201, 0, 0, 5979, 5975, 1, 0, 0, 0, 5979, 5977, 1, 0, 0, 0, 5979, 5980, 1, 0, 0, 0, 5980, 5983, 1, 0, 0, 0, 5981, 5983, 5, 201, 0, 0, 5982, 5972, 1, 0, 0, 0, 5982, 5974, 1, 0, 0, 0, 5982, 5981, 1, 0, 0, 0, 5983, 5984, 1, 0, 0, 0, 5984, 5986, 5, 263, 0, 0, 5985, 5971, 1, 0, 0, 0, 5985, 5986, 1, 0, 0, 0, 5986, 5988, 1, 0, 0, 0, 5987, 5989, 5, 272, 0, 0, 5988, 5987, 1, 0, 0, 0, 5988, 5989, 1, 0, 0, 0, 5989, 551, 1, 0, 0, 0, 5990, 5992, 3, 572, 286, 0, 5991, 5990, 1, 0, 0, 0, 5991, 5992, 1, 0, 0, 0, 5992, 5993, 1, 0, 0, 0, 5993, 5994, 5, 369, 0, 0, 5994, 5995, 3, 630, 315, 0, 5995, 5996, 5, 333, 0, 0, 5996, 5998, 3, 554, 277, 0, 5997, 5999, 3, 610, 305, 0, 5998, 5997, 1, 0, 0, 0, 5998, 5999, 1, 0, 0, 0, 5999, 6001, 1, 0, 0, 0, 6000, 6002, 3, 640, 320, 0, 6001, 6000, 1, 0, 0, 0, 6001, 6002, 1, 0, 0, 0, 6002, 6004, 1, 0, 0, 0, 6003, 6005, 3, 546, 273, 0, 6004, 6003, 1, 0, 0, 0, 6004, 6005, 1, 0, 0, 0, 6005, 553, 1, 0, 0, 0, 6006, 6011, 3, 556, 278, 0, 6007, 6008, 5, 6, 0, 0, 6008, 6010, 3, 556, 278, 0, 6009, 6007, 1, 0, 0, 0, 6010, 6013, 1, 0, 0, 0, 6011, 6009, 1, 0, 0, 0, 6011, 6012, 1, 0, 0, 0, 6012, 555, 1, 0, 0, 0, 6013, 6011, 1, 0, 0, 0, 6014, 6015, 3, 544, 272, 0, 6015, 6016, 5, 10, 0, 0, 6016, 6017, 3, 674, 337, 0, 6017, 6033, 1, 0, 0, 0, 6018, 6019, 5, 2, 0, 0, 6019, 6020, 3, 542, 271, 0, 6020, 6021, 5, 3, 0, 0, 6021, 6030, 5, 10, 0, 0, 6022, 6024, 5, 414, 0, 0, 6023, 6022, 1, 0, 0, 0, 6023, 6024, 1, 0, 0, 0, 6024, 6025, 1, 0, 0, 0, 6025, 6031, 3, 674, 337, 0, 6026, 6027, 5, 2, 0, 0, 6027, 6028, 3, 566, 283, 0, 6028, 6029, 5, 3, 0, 0, 6029, 6031, 1, 0, 0, 0, 6030, 6023, 1, 0, 0, 0, 6030, 6026, 1, 0, 0, 0, 6031, 6033, 1, 0, 0, 0, 6032, 6014, 1, 0, 0, 0, 6032, 6018, 1, 0, 0, 0, 6033, 557, 1, 0, 0, 0, 6034, 6035, 5, 178, 0, 0, 6035, 6044, 3, 818, 409, 0, 6036, 6038, 5, 269, 0, 0, 6037, 6036, 1, 0, 0, 0, 6037, 6038, 1, 0, 0, 0, 6038, 6039, 1, 0, 0, 0, 6039, 6043, 5, 324, 0, 0, 6040, 6043, 5, 107, 0, 0, 6041, 6043, 5, 240, 0, 0, 6042, 6037, 1, 0, 0, 0, 6042, 6040, 1, 0, 0, 0, 6042, 6041, 1, 0, 0, 0, 6043, 6046, 1, 0, 0, 0, 6044, 6042, 1, 0, 0, 0, 6044, 6045, 1, 0, 0, 0, 6045, 6047, 1, 0, 0, 0, 6046, 6044, 1, 0, 0, 0, 6047, 6050, 5, 172, 0, 0, 6048, 6049, 7, 26, 0, 0, 6049, 6051, 5, 217, 0, 0, 6050, 6048, 1, 0, 0, 0, 6050, 6051, 1, 0, 0, 0, 6051, 6052, 1, 0, 0, 0, 6052, 6053, 5, 62, 0, 0, 6053, 6054, 3, 560, 280, 0, 6054, 559, 1, 0, 0, 0, 6055, 6058, 3, 564, 282, 0, 6056, 6058, 3, 562, 281, 0, 6057, 6055, 1, 0, 0, 0, 6057, 6056, 1, 0, 0, 0, 6058, 561, 1, 0, 0, 0, 6059, 6062, 5, 2, 0, 0, 6060, 6063, 3, 564, 282, 0, 6061, 6063, 3, 562, 281, 0, 6062, 6060, 1, 0, 0, 0, 6062, 6061, 1, 0, 0, 0, 6063, 6064, 1, 0, 0, 0, 6064, 6065, 5, 3, 0, 0, 6065, 563, 1, 0, 0, 0, 6066, 6068, 3, 572, 286, 0, 6067, 6066, 1, 0, 0, 0, 6067, 6068, 1, 0, 0, 0, 6068, 6069, 1, 0, 0, 0, 6069, 6071, 3, 566, 283, 0, 6070, 6072, 3, 586, 293, 0, 6071, 6070, 1, 0, 0, 0, 6071, 6072, 1, 0, 0, 0, 6072, 6081, 1, 0, 0, 0, 6073, 6075, 3, 606, 303, 0, 6074, 6076, 3, 590, 295, 0, 6075, 6074, 1, 0, 0, 0, 6075, 6076, 1, 0, 0, 0, 6076, 6082, 1, 0, 0, 0, 6077, 6079, 3, 590, 295, 0, 6078, 6080, 3, 606, 303, 0, 6079, 6078, 1, 0, 0, 0, 6079, 6080, 1, 0, 0, 0, 6080, 6082, 1, 0, 0, 0, 6081, 6073, 1, 0, 0, 0, 6081, 6077, 1, 0, 0, 0, 6081, 6082, 1, 0, 0, 0, 6082, 565, 1, 0, 0, 0, 6083, 6086, 3, 568, 284, 0, 6084, 6086, 3, 562, 281, 0, 6085, 6083, 1, 0, 0, 0, 6085, 6084, 1, 0, 0, 0, 6086, 567, 1, 0, 0, 0, 6087, 6097, 5, 88, 0, 0, 6088, 6090, 5, 30, 0, 0, 6089, 6088, 1, 0, 0, 0, 6089, 6090, 1, 0, 0, 0, 6090, 6092, 1, 0, 0, 0, 6091, 6093, 3, 580, 290, 0, 6092, 6091, 1, 0, 0, 0, 6092, 6093, 1, 0, 0, 0, 6093, 6098, 1, 0, 0, 0, 6094, 6096, 3, 584, 292, 0, 6095, 6094, 1, 0, 0, 0, 6095, 6096, 1, 0, 0, 0, 6096, 6098, 1, 0, 0, 0, 6097, 6089, 1, 0, 0, 0, 6097, 6095, 1, 0, 0, 0, 6098, 6099, 1, 0, 0, 0, 6099, 6110, 3, 930, 465, 0, 6100, 6110, 3, 608, 304, 0, 6101, 6102, 5, 92, 0, 0, 6102, 6110, 3, 624, 312, 0, 6103, 6104, 3, 562, 281, 0, 6104, 6107, 3, 570, 285, 0, 6105, 6108, 3, 568, 284, 0, 6106, 6108, 3, 562, 281, 0, 6107, 6105, 1, 0, 0, 0, 6107, 6106, 1, 0, 0, 0, 6108, 6110, 1, 0, 0, 0, 6109, 6087, 1, 0, 0, 0, 6109, 6100, 1, 0, 0, 0, 6109, 6101, 1, 0, 0, 0, 6109, 6103, 1, 0, 0, 0, 6110, 6118, 1, 0, 0, 0, 6111, 6114, 3, 570, 285, 0, 6112, 6115, 3, 568, 284, 0, 6113, 6115, 3, 562, 281, 0, 6114, 6112, 1, 0, 0, 0, 6114, 6113, 1, 0, 0, 0, 6115, 6117, 1, 0, 0, 0, 6116, 6111, 1, 0, 0, 0, 6117, 6120, 1, 0, 0, 0, 6118, 6116, 1, 0, 0, 0, 6118, 6119, 1, 0, 0, 0, 6119, 569, 1, 0, 0, 0, 6120, 6118, 1, 0, 0, 0, 6121, 6123, 7, 79, 0, 0, 6122, 6124, 7, 80, 0, 0, 6123, 6122, 1, 0, 0, 0, 6123, 6124, 1, 0, 0, 0, 6124, 571, 1, 0, 0, 0, 6125, 6127, 5, 105, 0, 0, 6126, 6128, 5, 303, 0, 0, 6127, 6126, 1, 0, 0, 0, 6127, 6128, 1, 0, 0, 0, 6128, 6129, 1, 0, 0, 0, 6129, 6134, 3, 574, 287, 0, 6130, 6131, 5, 6, 0, 0, 6131, 6133, 3, 574, 287, 0, 6132, 6130, 1, 0, 0, 0, 6133, 6136, 1, 0, 0, 0, 6134, 6132, 1, 0, 0, 0, 6134, 6135, 1, 0, 0, 0, 6135, 573, 1, 0, 0, 0, 6136, 6134, 1, 0, 0, 0, 6137, 6139, 3, 818, 409, 0, 6138, 6140, 3, 144, 72, 0, 6139, 6138, 1, 0, 0, 0, 6139, 6140, 1, 0, 0, 0, 6140, 6141, 1, 0, 0, 0, 6141, 6146, 5, 36, 0, 0, 6142, 6144, 5, 77, 0, 0, 6143, 6142, 1, 0, 0, 0, 6143, 6144, 1, 0, 0, 0, 6144, 6145, 1, 0, 0, 0, 6145, 6147, 5, 259, 0, 0, 6146, 6143, 1, 0, 0, 0, 6146, 6147, 1, 0, 0, 0, 6147, 6148, 1, 0, 0, 0, 6148, 6149, 5, 2, 0, 0, 6149, 6150, 3, 530, 265, 0, 6150, 6152, 5, 3, 0, 0, 6151, 6153, 3, 576, 288, 0, 6152, 6151, 1, 0, 0, 0, 6152, 6153, 1, 0, 0, 0, 6153, 6155, 1, 0, 0, 0, 6154, 6156, 3, 578, 289, 0, 6155, 6154, 1, 0, 0, 0, 6155, 6156, 1, 0, 0, 0, 6156, 575, 1, 0, 0, 0, 6157, 6158, 5, 325, 0, 0, 6158, 6159, 7, 81, 0, 0, 6159, 6160, 5, 207, 0, 0, 6160, 6161, 5, 147, 0, 0, 6161, 6162, 3, 148, 74, 0, 6162, 6163, 5, 333, 0, 0, 6163, 6164, 3, 800, 400, 0, 6164, 577, 1, 0, 0, 0, 6165, 6166, 5, 173, 0, 0, 6166, 6167, 3, 148, 74, 0, 6167, 6168, 5, 333, 0, 0, 6168, 6174, 3, 800, 400, 0, 6169, 6170, 5, 94, 0, 0, 6170, 6171, 3, 818, 409, 0, 6171, 6172, 5, 53, 0, 0, 6172, 6173, 3, 818, 409, 0, 6173, 6175, 1, 0, 0, 0, 6174, 6169, 1, 0, 0, 0, 6174, 6175, 1, 0, 0, 0, 6175, 6176, 1, 0, 0, 0, 6176, 6177, 5, 100, 0, 0, 6177, 6178, 3, 800, 400, 0, 6178, 579, 1, 0, 0, 0, 6179, 6185, 5, 71, 0, 0, 6180, 6182, 5, 346, 0, 0, 6181, 6180, 1, 0, 0, 0, 6181, 6182, 1, 0, 0, 0, 6182, 6183, 1, 0, 0, 0, 6183, 6186, 3, 582, 291, 0, 6184, 6186, 3, 730, 365, 0, 6185, 6181, 1, 0, 0, 0, 6185, 6184, 1, 0, 0, 0, 6186, 581, 1, 0, 0, 0, 6187, 6189, 7, 20, 0, 0, 6188, 6187, 1, 0, 0, 0, 6188, 6189, 1, 0, 0, 0, 6189, 6190, 1, 0, 0, 0, 6190, 6192, 7, 21, 0, 0, 6191, 6193, 5, 92, 0, 0, 6192, 6191, 1, 0, 0, 0, 6192, 6193, 1, 0, 0, 0, 6193, 6194, 1, 0, 0, 0, 6194, 6203, 3, 772, 386, 0, 6195, 6197, 5, 367, 0, 0, 6196, 6195, 1, 0, 0, 0, 6196, 6197, 1, 0, 0, 0, 6197, 6199, 1, 0, 0, 0, 6198, 6200, 5, 92, 0, 0, 6199, 6198, 1, 0, 0, 0, 6199, 6200, 1, 0, 0, 0, 6200, 6201, 1, 0, 0, 0, 6201, 6203, 3, 772, 386, 0, 6202, 6188, 1, 0, 0, 0, 6202, 6196, 1, 0, 0, 0, 6203, 583, 1, 0, 0, 0, 6204, 6207, 5, 56, 0, 0, 6205, 6206, 5, 80, 0, 0, 6206, 6208, 3, 534, 267, 0, 6207, 6205, 1, 0, 0, 0, 6207, 6208, 1, 0, 0, 0, 6208, 585, 1, 0, 0, 0, 6209, 6210, 5, 83, 0, 0, 6210, 6211, 5, 147, 0, 0, 6211, 6216, 3, 588, 294, 0, 6212, 6213, 5, 6, 0, 0, 6213, 6215, 3, 588, 294, 0, 6214, 6212, 1, 0, 0, 0, 6215, 6218, 1, 0, 0, 0, 6216, 6214, 1, 0, 0, 0, 6216, 6217, 1, 0, 0, 0, 6217, 587, 1, 0, 0, 0, 6218, 6216, 1, 0, 0, 0, 6219, 6223, 3, 734, 367, 0, 6220, 6221, 5, 100, 0, 0, 6221, 6224, 3, 726, 363, 0, 6222, 6224, 7, 55, 0, 0, 6223, 6220, 1, 0, 0, 0, 6223, 6222, 1, 0, 0, 0, 6223, 6224, 1, 0, 0, 0, 6224, 6227, 1, 0, 0, 0, 6225, 6226, 5, 273, 0, 0, 6226, 6228, 7, 56, 0, 0, 6227, 6225, 1, 0, 0, 0, 6227, 6228, 1, 0, 0, 0, 6228, 589, 1, 0, 0, 0, 6229, 6231, 3, 596, 298, 0, 6230, 6232, 3, 594, 297, 0, 6231, 6230, 1, 0, 0, 0, 6231, 6232, 1, 0, 0, 0, 6232, 6241, 1, 0, 0, 0, 6233, 6236, 3, 592, 296, 0, 6234, 6236, 3, 594, 297, 0, 6235, 6233, 1, 0, 0, 0, 6235, 6234, 1, 0, 0, 0, 6236, 6238, 1, 0, 0, 0, 6237, 6239, 3, 596, 298, 0, 6238, 6237, 1, 0, 0, 0, 6238, 6239, 1, 0, 0, 0, 6239, 6241, 1, 0, 0, 0, 6240, 6229, 1, 0, 0, 0, 6240, 6235, 1, 0, 0, 0, 6241, 591, 1, 0, 0, 0, 6242, 6245, 5, 74, 0, 0, 6243, 6246, 3, 674, 337, 0, 6244, 6246, 5, 30, 0, 0, 6245, 6243, 1, 0, 0, 0, 6245, 6244, 1, 0, 0, 0, 6246, 6249, 1, 0, 0, 0, 6247, 6248, 5, 6, 0, 0, 6248, 6250, 3, 674, 337, 0, 6249, 6247, 1, 0, 0, 0, 6249, 6250, 1, 0, 0, 0, 6250, 593, 1, 0, 0, 0, 6251, 6252, 5, 61, 0, 0, 6252, 6254, 7, 82, 0, 0, 6253, 6255, 3, 598, 299, 0, 6254, 6253, 1, 0, 0, 0, 6254, 6255, 1, 0, 0, 0, 6255, 6256, 1, 0, 0, 0, 6256, 6260, 7, 83, 0, 0, 6257, 6261, 5, 81, 0, 0, 6258, 6259, 5, 105, 0, 0, 6259, 6261, 5, 467, 0, 0, 6260, 6257, 1, 0, 0, 0, 6260, 6258, 1, 0, 0, 0, 6261, 595, 1, 0, 0, 0, 6262, 6267, 5, 79, 0, 0, 6263, 6264, 3, 598, 299, 0, 6264, 6265, 7, 83, 0, 0, 6265, 6268, 1, 0, 0, 0, 6266, 6268, 3, 674, 337, 0, 6267, 6263, 1, 0, 0, 0, 6267, 6266, 1, 0, 0, 0, 6268, 597, 1, 0, 0, 0, 6269, 6270, 7, 29, 0, 0, 6270, 6273, 7, 84, 0, 0, 6271, 6273, 3, 682, 341, 0, 6272, 6269, 1, 0, 0, 0, 6272, 6271, 1, 0, 0, 0, 6273, 599, 1, 0, 0, 0, 6274, 6275, 5, 66, 0, 0, 6275, 6277, 5, 147, 0, 0, 6276, 6278, 7, 80, 0, 0, 6277, 6276, 1, 0, 0, 0, 6277, 6278, 1, 0, 0, 0, 6278, 6279, 1, 0, 0, 0, 6279, 6280, 3, 602, 301, 0, 6280, 601, 1, 0, 0, 0, 6281, 6286, 3, 604, 302, 0, 6282, 6283, 5, 6, 0, 0, 6283, 6285, 3, 604, 302, 0, 6284, 6282, 1, 0, 0, 0, 6285, 6288, 1, 0, 0, 0, 6286, 6284, 1, 0, 0, 0, 6286, 6287, 1, 0, 0, 0, 6287, 603, 1, 0, 0, 0, 6288, 6286, 1, 0, 0, 0, 6289, 6313, 3, 734, 367, 0, 6290, 6291, 5, 2, 0, 0, 6291, 6313, 5, 3, 0, 0, 6292, 6294, 7, 85, 0, 0, 6293, 6292, 1, 0, 0, 0, 6293, 6294, 1, 0, 0, 0, 6294, 6295, 1, 0, 0, 0, 6295, 6296, 5, 2, 0, 0, 6296, 6301, 3, 734, 367, 0, 6297, 6298, 5, 6, 0, 0, 6298, 6300, 3, 734, 367, 0, 6299, 6297, 1, 0, 0, 0, 6300, 6303, 1, 0, 0, 0, 6301, 6299, 1, 0, 0, 0, 6301, 6302, 1, 0, 0, 0, 6302, 6304, 1, 0, 0, 0, 6303, 6301, 1, 0, 0, 0, 6304, 6305, 5, 3, 0, 0, 6305, 6313, 1, 0, 0, 0, 6306, 6307, 5, 470, 0, 0, 6307, 6308, 5, 471, 0, 0, 6308, 6309, 5, 2, 0, 0, 6309, 6310, 3, 602, 301, 0, 6310, 6311, 5, 3, 0, 0, 6311, 6313, 1, 0, 0, 0, 6312, 6289, 1, 0, 0, 0, 6312, 6290, 1, 0, 0, 0, 6312, 6293, 1, 0, 0, 0, 6312, 6306, 1, 0, 0, 0, 6313, 605, 1, 0, 0, 0, 6314, 6324, 5, 62, 0, 0, 6315, 6316, 5, 269, 0, 0, 6316, 6318, 5, 245, 0, 0, 6317, 6315, 1, 0, 0, 0, 6317, 6318, 1, 0, 0, 0, 6318, 6319, 1, 0, 0, 0, 6319, 6325, 5, 369, 0, 0, 6320, 6322, 5, 245, 0, 0, 6321, 6320, 1, 0, 0, 0, 6321, 6322, 1, 0, 0, 0, 6322, 6323, 1, 0, 0, 0, 6323, 6325, 5, 334, 0, 0, 6324, 6317, 1, 0, 0, 0, 6324, 6321, 1, 0, 0, 0, 6325, 6328, 1, 0, 0, 0, 6326, 6327, 5, 275, 0, 0, 6327, 6329, 3, 760, 380, 0, 6328, 6326, 1, 0, 0, 0, 6328, 6329, 1, 0, 0, 0, 6329, 6333, 1, 0, 0, 0, 6330, 6334, 5, 272, 0, 0, 6331, 6332, 5, 465, 0, 0, 6332, 6334, 5, 466, 0, 0, 6333, 6330, 1, 0, 0, 0, 6333, 6331, 1, 0, 0, 0, 6333, 6334, 1, 0, 0, 0, 6334, 6336, 1, 0, 0, 0, 6335, 6314, 1, 0, 0, 0, 6336, 6337, 1, 0, 0, 0, 6337, 6335, 1, 0, 0, 0, 6337, 6338, 1, 0, 0, 0, 6338, 6343, 1, 0, 0, 0, 6339, 6340, 5, 62, 0, 0, 6340, 6341, 5, 300, 0, 0, 6341, 6343, 5, 81, 0, 0, 6342, 6335, 1, 0, 0, 0, 6342, 6339, 1, 0, 0, 0, 6343, 607, 1, 0, 0, 0, 6344, 6345, 5, 422, 0, 0, 6345, 6350, 3, 534, 267, 0, 6346, 6347, 5, 6, 0, 0, 6347, 6349, 3, 534, 267, 0, 6348, 6346, 1, 0, 0, 0, 6349, 6352, 1, 0, 0, 0, 6350, 6348, 1, 0, 0, 0, 6350, 6351, 1, 0, 0, 0, 6351, 609, 1, 0, 0, 0, 6352, 6350, 1, 0, 0, 0, 6353, 6354, 5, 64, 0, 0, 6354, 6355, 3, 612, 306, 0, 6355, 611, 1, 0, 0, 0, 6356, 6361, 3, 614, 307, 0, 6357, 6358, 5, 6, 0, 0, 6358, 6360, 3, 614, 307, 0, 6359, 6357, 1, 0, 0, 0, 6360, 6363, 1, 0, 0, 0, 6361, 6359, 1, 0, 0, 0, 6361, 6362, 1, 0, 0, 0, 6362, 613, 1, 0, 0, 0, 6363, 6361, 1, 0, 0, 0, 6364, 6379, 3, 624, 312, 0, 6365, 6367, 5, 81, 0, 0, 6366, 6365, 1, 0, 0, 0, 6366, 6367, 1, 0, 0, 0, 6367, 6368, 1, 0, 0, 0, 6368, 6370, 3, 778, 389, 0, 6369, 6371, 5, 9, 0, 0, 6370, 6369, 1, 0, 0, 0, 6370, 6371, 1, 0, 0, 0, 6371, 6373, 1, 0, 0, 0, 6372, 6374, 3, 148, 74, 0, 6373, 6372, 1, 0, 0, 0, 6373, 6374, 1, 0, 0, 0, 6374, 6376, 1, 0, 0, 0, 6375, 6377, 3, 638, 319, 0, 6376, 6375, 1, 0, 0, 0, 6376, 6377, 1, 0, 0, 0, 6377, 6379, 1, 0, 0, 0, 6378, 6364, 1, 0, 0, 0, 6378, 6366, 1, 0, 0, 0, 6379, 6381, 1, 0, 0, 0, 6380, 6382, 3, 616, 308, 0, 6381, 6380, 1, 0, 0, 0, 6381, 6382, 1, 0, 0, 0, 6382, 6384, 1, 0, 0, 0, 6383, 6385, 3, 632, 316, 0, 6384, 6383, 1, 0, 0, 0, 6384, 6385, 1, 0, 0, 0, 6385, 6428, 1, 0, 0, 0, 6386, 6388, 5, 72, 0, 0, 6387, 6386, 1, 0, 0, 0, 6387, 6388, 1, 0, 0, 0, 6388, 6401, 1, 0, 0, 0, 6389, 6391, 3, 646, 323, 0, 6390, 6392, 3, 616, 308, 0, 6391, 6390, 1, 0, 0, 0, 6391, 6392, 1, 0, 0, 0, 6392, 6402, 1, 0, 0, 0, 6393, 6395, 3, 634, 317, 0, 6394, 6396, 3, 618, 309, 0, 6395, 6394, 1, 0, 0, 0, 6395, 6396, 1, 0, 0, 0, 6396, 6402, 1, 0, 0, 0, 6397, 6399, 3, 562, 281, 0, 6398, 6400, 3, 616, 308, 0, 6399, 6398, 1, 0, 0, 0, 6399, 6400, 1, 0, 0, 0, 6400, 6402, 1, 0, 0, 0, 6401, 6389, 1, 0, 0, 0, 6401, 6393, 1, 0, 0, 0, 6401, 6397, 1, 0, 0, 0, 6402, 6428, 1, 0, 0, 0, 6403, 6404, 5, 2, 0, 0, 6404, 6421, 3, 614, 307, 0, 6405, 6406, 5, 110, 0, 0, 6406, 6407, 5, 118, 0, 0, 6407, 6422, 3, 614, 307, 0, 6408, 6410, 5, 121, 0, 0, 6409, 6411, 3, 620, 310, 0, 6410, 6409, 1, 0, 0, 0, 6410, 6411, 1, 0, 0, 0, 6411, 6412, 1, 0, 0, 0, 6412, 6413, 5, 118, 0, 0, 6413, 6422, 3, 614, 307, 0, 6414, 6416, 3, 620, 310, 0, 6415, 6414, 1, 0, 0, 0, 6415, 6416, 1, 0, 0, 0, 6416, 6417, 1, 0, 0, 0, 6417, 6418, 5, 118, 0, 0, 6418, 6419, 3, 614, 307, 0, 6419, 6420, 3, 622, 311, 0, 6420, 6422, 1, 0, 0, 0, 6421, 6405, 1, 0, 0, 0, 6421, 6408, 1, 0, 0, 0, 6421, 6415, 1, 0, 0, 0, 6421, 6422, 1, 0, 0, 0, 6422, 6423, 1, 0, 0, 0, 6423, 6425, 5, 3, 0, 0, 6424, 6426, 3, 616, 308, 0, 6425, 6424, 1, 0, 0, 0, 6425, 6426, 1, 0, 0, 0, 6426, 6428, 1, 0, 0, 0, 6427, 6378, 1, 0, 0, 0, 6427, 6387, 1, 0, 0, 0, 6427, 6403, 1, 0, 0, 0, 6428, 6447, 1, 0, 0, 0, 6429, 6430, 5, 110, 0, 0, 6430, 6431, 5, 118, 0, 0, 6431, 6446, 3, 614, 307, 0, 6432, 6434, 5, 121, 0, 0, 6433, 6435, 3, 620, 310, 0, 6434, 6433, 1, 0, 0, 0, 6434, 6435, 1, 0, 0, 0, 6435, 6436, 1, 0, 0, 0, 6436, 6437, 5, 118, 0, 0, 6437, 6446, 3, 614, 307, 0, 6438, 6440, 3, 620, 310, 0, 6439, 6438, 1, 0, 0, 0, 6439, 6440, 1, 0, 0, 0, 6440, 6441, 1, 0, 0, 0, 6441, 6442, 5, 118, 0, 0, 6442, 6443, 3, 614, 307, 0, 6443, 6444, 3, 622, 311, 0, 6444, 6446, 1, 0, 0, 0, 6445, 6429, 1, 0, 0, 0, 6445, 6432, 1, 0, 0, 0, 6445, 6439, 1, 0, 0, 0, 6446, 6449, 1, 0, 0, 0, 6447, 6445, 1, 0, 0, 0, 6447, 6448, 1, 0, 0, 0, 6448, 615, 1, 0, 0, 0, 6449, 6447, 1, 0, 0, 0, 6450, 6452, 5, 36, 0, 0, 6451, 6450, 1, 0, 0, 0, 6451, 6452, 1, 0, 0, 0, 6452, 6453, 1, 0, 0, 0, 6453, 6458, 3, 818, 409, 0, 6454, 6455, 5, 2, 0, 0, 6455, 6456, 3, 784, 392, 0, 6456, 6457, 5, 3, 0, 0, 6457, 6459, 1, 0, 0, 0, 6458, 6454, 1, 0, 0, 0, 6458, 6459, 1, 0, 0, 0, 6459, 617, 1, 0, 0, 0, 6460, 6473, 3, 616, 308, 0, 6461, 6463, 5, 36, 0, 0, 6462, 6464, 3, 818, 409, 0, 6463, 6462, 1, 0, 0, 0, 6463, 6464, 1, 0, 0, 0, 6464, 6467, 1, 0, 0, 0, 6465, 6467, 3, 818, 409, 0, 6466, 6461, 1, 0, 0, 0, 6466, 6465, 1, 0, 0, 0, 6467, 6468, 1, 0, 0, 0, 6468, 6469, 5, 2, 0, 0, 6469, 6470, 3, 642, 321, 0, 6470, 6471, 5, 3, 0, 0, 6471, 6473, 1, 0, 0, 0, 6472, 6460, 1, 0, 0, 0, 6472, 6466, 1, 0, 0, 0, 6473, 619, 1, 0, 0, 0, 6474, 6476, 7, 86, 0, 0, 6475, 6477, 5, 123, 0, 0, 6476, 6475, 1, 0, 0, 0, 6476, 6477, 1, 0, 0, 0, 6477, 621, 1, 0, 0, 0, 6478, 6479, 5, 100, 0, 0, 6479, 6483, 3, 144, 72, 0, 6480, 6481, 5, 80, 0, 0, 6481, 6483, 3, 674, 337, 0, 6482, 6478, 1, 0, 0, 0, 6482, 6480, 1, 0, 0, 0, 6483, 623, 1, 0, 0, 0, 6484, 6500, 3, 322, 161, 0, 6485, 6491, 5, 81, 0, 0, 6486, 6492, 3, 774, 387, 0, 6487, 6488, 5, 2, 0, 0, 6488, 6489, 3, 774, 387, 0, 6489, 6490, 5, 3, 0, 0, 6490, 6492, 1, 0, 0, 0, 6491, 6486, 1, 0, 0, 0, 6491, 6487, 1, 0, 0, 0, 6492, 6500, 1, 0, 0, 0, 6493, 6494, 5, 68, 0, 0, 6494, 6497, 5, 323, 0, 0, 6495, 6498, 3, 790, 395, 0, 6496, 6498, 5, 111, 0, 0, 6497, 6495, 1, 0, 0, 0, 6497, 6496, 1, 0, 0, 0, 6498, 6500, 1, 0, 0, 0, 6499, 6484, 1, 0, 0, 0, 6499, 6485, 1, 0, 0, 0, 6499, 6493, 1, 0, 0, 0, 6500, 625, 1, 0, 0, 0, 6501, 6502, 5, 92, 0, 0, 6502, 6504, 3, 322, 161, 0, 6503, 6505, 3, 144, 72, 0, 6504, 6503, 1, 0, 0, 0, 6504, 6505, 1, 0, 0, 0, 6505, 6507, 1, 0, 0, 0, 6506, 6508, 3, 638, 319, 0, 6507, 6506, 1, 0, 0, 0, 6507, 6508, 1, 0, 0, 0, 6508, 6526, 1, 0, 0, 0, 6509, 6510, 5, 92, 0, 0, 6510, 6516, 5, 81, 0, 0, 6511, 6517, 3, 774, 387, 0, 6512, 6513, 5, 2, 0, 0, 6513, 6514, 3, 774, 387, 0, 6514, 6515, 5, 3, 0, 0, 6515, 6517, 1, 0, 0, 0, 6516, 6511, 1, 0, 0, 0, 6516, 6512, 1, 0, 0, 0, 6517, 6526, 1, 0, 0, 0, 6518, 6519, 5, 350, 0, 0, 6519, 6520, 5, 68, 0, 0, 6520, 6523, 5, 323, 0, 0, 6521, 6524, 3, 790, 395, 0, 6522, 6524, 5, 111, 0, 0, 6523, 6521, 1, 0, 0, 0, 6523, 6522, 1, 0, 0, 0, 6524, 6526, 1, 0, 0, 0, 6525, 6501, 1, 0, 0, 0, 6525, 6509, 1, 0, 0, 0, 6525, 6518, 1, 0, 0, 0, 6526, 627, 1, 0, 0, 0, 6527, 6532, 3, 624, 312, 0, 6528, 6529, 5, 6, 0, 0, 6529, 6531, 3, 624, 312, 0, 6530, 6528, 1, 0, 0, 0, 6531, 6534, 1, 0, 0, 0, 6532, 6530, 1, 0, 0, 0, 6532, 6533, 1, 0, 0, 0, 6533, 629, 1, 0, 0, 0, 6534, 6532, 1, 0, 0, 0, 6535, 6540, 3, 624, 312, 0, 6536, 6538, 5, 36, 0, 0, 6537, 6536, 1, 0, 0, 0, 6537, 6538, 1, 0, 0, 0, 6538, 6539, 1, 0, 0, 0, 6539, 6541, 3, 818, 409, 0, 6540, 6537, 1, 0, 0, 0, 6540, 6541, 1, 0, 0, 0, 6541, 631, 1, 0, 0, 0, 6542, 6543, 5, 472, 0, 0, 6543, 6544, 3, 806, 403, 0, 6544, 6550, 3, 534, 267, 0, 6545, 6546, 5, 310, 0, 0, 6546, 6547, 5, 2, 0, 0, 6547, 6548, 3, 674, 337, 0, 6548, 6549, 5, 3, 0, 0, 6549, 6551, 1, 0, 0, 0, 6550, 6545, 1, 0, 0, 0, 6550, 6551, 1, 0, 0, 0, 6551, 633, 1, 0, 0, 0, 6552, 6567, 3, 688, 344, 0, 6553, 6554, 5, 320, 0, 0, 6554, 6555, 5, 64, 0, 0, 6555, 6556, 5, 2, 0, 0, 6556, 6561, 3, 636, 318, 0, 6557, 6558, 5, 6, 0, 0, 6558, 6560, 3, 636, 318, 0, 6559, 6557, 1, 0, 0, 0, 6560, 6563, 1, 0, 0, 0, 6561, 6559, 1, 0, 0, 0, 6561, 6562, 1, 0, 0, 0, 6562, 6564, 1, 0, 0, 0, 6563, 6561, 1, 0, 0, 0, 6564, 6565, 5, 3, 0, 0, 6565, 6567, 1, 0, 0, 0, 6566, 6552, 1, 0, 0, 0, 6566, 6553, 1, 0, 0, 0, 6567, 6570, 1, 0, 0, 0, 6568, 6569, 5, 105, 0, 0, 6569, 6571, 5, 473, 0, 0, 6570, 6568, 1, 0, 0, 0, 6570, 6571, 1, 0, 0, 0, 6571, 635, 1, 0, 0, 0, 6572, 6578, 3, 688, 344, 0, 6573, 6574, 5, 36, 0, 0, 6574, 6575, 5, 2, 0, 0, 6575, 6576, 3, 642, 321, 0, 6576, 6577, 5, 3, 0, 0, 6577, 6579, 1, 0, 0, 0, 6578, 6573, 1, 0, 0, 0, 6578, 6579, 1, 0, 0, 0, 6579, 637, 1, 0, 0, 0, 6580, 6581, 5, 103, 0, 0, 6581, 6582, 3, 734, 367, 0, 6582, 639, 1, 0, 0, 0, 6583, 6588, 5, 103, 0, 0, 6584, 6585, 5, 434, 0, 0, 6585, 6586, 5, 275, 0, 0, 6586, 6589, 3, 818, 409, 0, 6587, 6589, 3, 674, 337, 0, 6588, 6584, 1, 0, 0, 0, 6588, 6587, 1, 0, 0, 0, 6589, 641, 1, 0, 0, 0, 6590, 6595, 3, 644, 322, 0, 6591, 6592, 5, 6, 0, 0, 6592, 6594, 3, 644, 322, 0, 6593, 6591, 1, 0, 0, 0, 6594, 6597, 1, 0, 0, 0, 6595, 6593, 1, 0, 0, 0, 6595, 6596, 1, 0, 0, 0, 6596, 643, 1, 0, 0, 0, 6597, 6595, 1, 0, 0, 0, 6598, 6599, 3, 818, 409, 0, 6599, 6601, 3, 652, 326, 0, 6600, 6602, 3, 98, 49, 0, 6601, 6600, 1, 0, 0, 0, 6601, 6602, 1, 0, 0, 0, 6602, 645, 1, 0, 0, 0, 6603, 6604, 5, 474, 0, 0, 6604, 6618, 5, 2, 0, 0, 6605, 6606, 5, 476, 0, 0, 6606, 6607, 5, 2, 0, 0, 6607, 6612, 3, 650, 325, 0, 6608, 6609, 5, 6, 0, 0, 6609, 6611, 3, 650, 325, 0, 6610, 6608, 1, 0, 0, 0, 6611, 6614, 1, 0, 0, 0, 6612, 6610, 1, 0, 0, 0, 6612, 6613, 1, 0, 0, 0, 6613, 6615, 1, 0, 0, 0, 6614, 6612, 1, 0, 0, 0, 6615, 6616, 5, 3, 0, 0, 6616, 6617, 5, 6, 0, 0, 6617, 6619, 1, 0, 0, 0, 6618, 6605, 1, 0, 0, 0, 6618, 6619, 1, 0, 0, 0, 6619, 6620, 1, 0, 0, 0, 6620, 6621, 3, 682, 341, 0, 6621, 6622, 3, 698, 349, 0, 6622, 6623, 5, 475, 0, 0, 6623, 6628, 3, 648, 324, 0, 6624, 6625, 5, 6, 0, 0, 6625, 6627, 3, 648, 324, 0, 6626, 6624, 1, 0, 0, 0, 6627, 6630, 1, 0, 0, 0, 6628, 6626, 1, 0, 0, 0, 6628, 6629, 1, 0, 0, 0, 6629, 6631, 1, 0, 0, 0, 6630, 6628, 1, 0, 0, 0, 6631, 6632, 5, 3, 0, 0, 6632, 647, 1, 0, 0, 0, 6633, 6652, 3, 818, 409, 0, 6634, 6648, 3, 652, 326, 0, 6635, 6638, 5, 53, 0, 0, 6636, 6638, 3, 826, 413, 0, 6637, 6635, 1, 0, 0, 0, 6637, 6636, 1, 0, 0, 0, 6638, 6639, 1, 0, 0, 0, 6639, 6645, 3, 674, 337, 0, 6640, 6642, 5, 77, 0, 0, 6641, 6640, 1, 0, 0, 0, 6641, 6642, 1, 0, 0, 0, 6642, 6643, 1, 0, 0, 0, 6643, 6645, 5, 78, 0, 0, 6644, 6637, 1, 0, 0, 0, 6644, 6641, 1, 0, 0, 0, 6645, 6646, 1, 0, 0, 0, 6646, 6644, 1, 0, 0, 0, 6646, 6647, 1, 0, 0, 0, 6647, 6649, 1, 0, 0, 0, 6648, 6644, 1, 0, 0, 0, 6648, 6649, 1, 0, 0, 0, 6649, 6653, 1, 0, 0, 0, 6650, 6651, 5, 62, 0, 0, 6651, 6653, 5, 473, 0, 0, 6652, 6634, 1, 0, 0, 0, 6652, 6650, 1, 0, 0, 0, 6653, 649, 1, 0, 0, 0, 6654, 6655, 3, 682, 341, 0, 6655, 6656, 5, 36, 0, 0, 6656, 6657, 3, 824, 412, 0, 6657, 6661, 1, 0, 0, 0, 6658, 6659, 5, 53, 0, 0, 6659, 6661, 3, 682, 341, 0, 6660, 6654, 1, 0, 0, 0, 6660, 6658, 1, 0, 0, 0, 6661, 651, 1, 0, 0, 0, 6662, 6664, 5, 415, 0, 0, 6663, 6662, 1, 0, 0, 0, 6663, 6664, 1, 0, 0, 0, 6664, 6665, 1, 0, 0, 0, 6665, 6682, 3, 654, 327, 0, 6666, 6668, 5, 4, 0, 0, 6667, 6669, 5, 571, 0, 0, 6668, 6667, 1, 0, 0, 0, 6668, 6669, 1, 0, 0, 0, 6669, 6670, 1, 0, 0, 0, 6670, 6672, 5, 5, 0, 0, 6671, 6666, 1, 0, 0, 0, 6672, 6675, 1, 0, 0, 0, 6673, 6671, 1, 0, 0, 0, 6673, 6674, 1, 0, 0, 0, 6674, 6683, 1, 0, 0, 0, 6675, 6673, 1, 0, 0, 0, 6676, 6680, 5, 35, 0, 0, 6677, 6678, 5, 4, 0, 0, 6678, 6679, 5, 571, 0, 0, 6679, 6681, 5, 5, 0, 0, 6680, 6677, 1, 0, 0, 0, 6680, 6681, 1, 0, 0, 0, 6681, 6683, 1, 0, 0, 0, 6682, 6673, 1, 0, 0, 0, 6682, 6676, 1, 0, 0, 0, 6683, 6689, 1, 0, 0, 0, 6684, 6685, 3, 780, 390, 0, 6685, 6686, 5, 27, 0, 0, 6686, 6687, 7, 87, 0, 0, 6687, 6689, 1, 0, 0, 0, 6688, 6663, 1, 0, 0, 0, 6688, 6684, 1, 0, 0, 0, 6689, 653, 1, 0, 0, 0, 6690, 6692, 3, 820, 410, 0, 6691, 6693, 3, 318, 159, 0, 6692, 6691, 1, 0, 0, 0, 6692, 6693, 1, 0, 0, 0, 6693, 6695, 1, 0, 0, 0, 6694, 6696, 3, 534, 267, 0, 6695, 6694, 1, 0, 0, 0, 6695, 6696, 1, 0, 0, 0, 6696, 6706, 1, 0, 0, 0, 6697, 6706, 3, 656, 328, 0, 6698, 6703, 5, 403, 0, 0, 6699, 6701, 3, 668, 334, 0, 6700, 6699, 1, 0, 0, 0, 6700, 6701, 1, 0, 0, 0, 6701, 6704, 1, 0, 0, 0, 6702, 6704, 3, 660, 330, 0, 6703, 6700, 1, 0, 0, 0, 6703, 6702, 1, 0, 0, 0, 6704, 6706, 1, 0, 0, 0, 6705, 6690, 1, 0, 0, 0, 6705, 6697, 1, 0, 0, 0, 6705, 6698, 1, 0, 0, 0, 6706, 655, 1, 0, 0, 0, 6707, 6712, 3, 658, 329, 0, 6708, 6712, 3, 662, 331, 0, 6709, 6712, 3, 664, 332, 0, 6710, 6712, 3, 666, 333, 0, 6711, 6707, 1, 0, 0, 0, 6711, 6708, 1, 0, 0, 0, 6711, 6709, 1, 0, 0, 0, 6711, 6710, 1, 0, 0, 0, 6712, 657, 1, 0, 0, 0, 6713, 6730, 5, 401, 0, 0, 6714, 6730, 5, 402, 0, 0, 6715, 6730, 5, 416, 0, 0, 6716, 6730, 5, 388, 0, 0, 6717, 6730, 5, 413, 0, 0, 6718, 6720, 5, 398, 0, 0, 6719, 6721, 3, 660, 330, 0, 6720, 6719, 1, 0, 0, 0, 6720, 6721, 1, 0, 0, 0, 6721, 6730, 1, 0, 0, 0, 6722, 6723, 5, 190, 0, 0, 6723, 6730, 5, 412, 0, 0, 6724, 6726, 7, 88, 0, 0, 6725, 6727, 3, 534, 267, 0, 6726, 6725, 1, 0, 0, 0, 6726, 6727, 1, 0, 0, 0, 6727, 6730, 1, 0, 0, 0, 6728, 6730, 5, 390, 0, 0, 6729, 6713, 1, 0, 0, 0, 6729, 6714, 1, 0, 0, 0, 6729, 6715, 1, 0, 0, 0, 6729, 6716, 1, 0, 0, 0, 6729, 6717, 1, 0, 0, 0, 6729, 6718, 1, 0, 0, 0, 6729, 6722, 1, 0, 0, 0, 6729, 6724, 1, 0, 0, 0, 6729, 6728, 1, 0, 0, 0, 6730, 659, 1, 0, 0, 0, 6731, 6732, 5, 2, 0, 0, 6732, 6733, 5, 571, 0, 0, 6733, 6734, 5, 3, 0, 0, 6734, 661, 1, 0, 0, 0, 6735, 6737, 5, 389, 0, 0, 6736, 6738, 5, 374, 0, 0, 6737, 6736, 1, 0, 0, 0, 6737, 6738, 1, 0, 0, 0, 6738, 6740, 1, 0, 0, 0, 6739, 6741, 3, 534, 267, 0, 6740, 6739, 1, 0, 0, 0, 6740, 6741, 1, 0, 0, 0, 6741, 663, 1, 0, 0, 0, 6742, 6744, 7, 89, 0, 0, 6743, 6745, 5, 374, 0, 0, 6744, 6743, 1, 0, 0, 0, 6744, 6745, 1, 0, 0, 0, 6745, 6753, 1, 0, 0, 0, 6746, 6753, 5, 423, 0, 0, 6747, 6748, 5, 405, 0, 0, 6748, 6750, 7, 90, 0, 0, 6749, 6751, 5, 374, 0, 0, 6750, 6749, 1, 0, 0, 0, 6750, 6751, 1, 0, 0, 0, 6751, 6753, 1, 0, 0, 0, 6752, 6742, 1, 0, 0, 0, 6752, 6746, 1, 0, 0, 0, 6752, 6747, 1, 0, 0, 0, 6753, 6755, 1, 0, 0, 0, 6754, 6756, 3, 660, 330, 0, 6755, 6754, 1, 0, 0, 0, 6755, 6756, 1, 0, 0, 0, 6756, 665, 1, 0, 0, 0, 6757, 6759, 7, 91, 0, 0, 6758, 6760, 3, 660, 330, 0, 6759, 6758, 1, 0, 0, 0, 6759, 6760, 1, 0, 0, 0, 6760, 6764, 1, 0, 0, 0, 6761, 6762, 7, 26, 0, 0, 6762, 6763, 5, 418, 0, 0, 6763, 6765, 5, 386, 0, 0, 6764, 6761, 1, 0, 0, 0, 6764, 6765, 1, 0, 0, 0, 6765, 667, 1, 0, 0, 0, 6766, 6796, 5, 264, 0, 0, 6767, 6796, 3, 670, 335, 0, 6768, 6771, 5, 384, 0, 0, 6769, 6770, 5, 94, 0, 0, 6770, 6772, 5, 264, 0, 0, 6771, 6769, 1, 0, 0, 0, 6771, 6772, 1, 0, 0, 0, 6772, 6796, 1, 0, 0, 0, 6773, 6780, 5, 176, 0, 0, 6774, 6778, 5, 94, 0, 0, 6775, 6779, 5, 218, 0, 0, 6776, 6779, 5, 261, 0, 0, 6777, 6779, 3, 670, 335, 0, 6778, 6775, 1, 0, 0, 0, 6778, 6776, 1, 0, 0, 0, 6778, 6777, 1, 0, 0, 0, 6779, 6781, 1, 0, 0, 0, 6780, 6774, 1, 0, 0, 0, 6780, 6781, 1, 0, 0, 0, 6781, 6796, 1, 0, 0, 0, 6782, 6788, 5, 218, 0, 0, 6783, 6786, 5, 94, 0, 0, 6784, 6787, 5, 261, 0, 0, 6785, 6787, 3, 670, 335, 0, 6786, 6784, 1, 0, 0, 0, 6786, 6785, 1, 0, 0, 0, 6787, 6789, 1, 0, 0, 0, 6788, 6783, 1, 0, 0, 0, 6788, 6789, 1, 0, 0, 0, 6789, 6796, 1, 0, 0, 0, 6790, 6793, 5, 261, 0, 0, 6791, 6792, 5, 94, 0, 0, 6792, 6794, 3, 670, 335, 0, 6793, 6791, 1, 0, 0, 0, 6793, 6794, 1, 0, 0, 0, 6794, 6796, 1, 0, 0, 0, 6795, 6766, 1, 0, 0, 0, 6795, 6767, 1, 0, 0, 0, 6795, 6768, 1, 0, 0, 0, 6795, 6773, 1, 0, 0, 0, 6795, 6782, 1, 0, 0, 0, 6795, 6790, 1, 0, 0, 0, 6796, 669, 1, 0, 0, 0, 6797, 6799, 5, 326, 0, 0, 6798, 6800, 3, 660, 330, 0, 6799, 6798, 1, 0, 0, 0, 6799, 6800, 1, 0, 0, 0, 6800, 671, 1, 0, 0, 0, 6801, 6802, 7, 92, 0, 0, 6802, 673, 1, 0, 0, 0, 6803, 6804, 3, 676, 338, 0, 6804, 675, 1, 0, 0, 0, 6805, 6806, 6, 338, -1, 0, 6806, 6808, 3, 680, 340, 0, 6807, 6809, 3, 678, 339, 0, 6808, 6807, 1, 0, 0, 0, 6808, 6809, 1, 0, 0, 0, 6809, 6813, 1, 0, 0, 0, 6810, 6811, 5, 77, 0, 0, 6811, 6813, 3, 676, 338, 3, 6812, 6805, 1, 0, 0, 0, 6812, 6810, 1, 0, 0, 0, 6813, 6822, 1, 0, 0, 0, 6814, 6815, 10, 2, 0, 0, 6815, 6816, 5, 33, 0, 0, 6816, 6821, 3, 676, 338, 3, 6817, 6818, 10, 1, 0, 0, 6818, 6819, 5, 82, 0, 0, 6819, 6821, 3, 676, 338, 2, 6820, 6814, 1, 0, 0, 0, 6820, 6817, 1, 0, 0, 0, 6821, 6824, 1, 0, 0, 0, 6822, 6820, 1, 0, 0, 0, 6822, 6823, 1, 0, 0, 0, 6823, 677, 1, 0, 0, 0, 6824, 6822, 1, 0, 0, 0, 6825, 6826, 3, 672, 336, 0, 6826, 6827, 3, 680, 340, 0, 6827, 6897, 1, 0, 0, 0, 6828, 6829, 3, 672, 336, 0, 6829, 6830, 3, 728, 364, 0, 6830, 6836, 3, 718, 359, 0, 6831, 6837, 3, 562, 281, 0, 6832, 6833, 5, 2, 0, 0, 6833, 6834, 3, 674, 337, 0, 6834, 6835, 5, 3, 0, 0, 6835, 6837, 1, 0, 0, 0, 6836, 6831, 1, 0, 0, 0, 6836, 6832, 1, 0, 0, 0, 6837, 6897, 1, 0, 0, 0, 6838, 6840, 5, 77, 0, 0, 6839, 6838, 1, 0, 0, 0, 6839, 6840, 1, 0, 0, 0, 6840, 6841, 1, 0, 0, 0, 6841, 6842, 5, 387, 0, 0, 6842, 6843, 3, 680, 340, 0, 6843, 6844, 5, 33, 0, 0, 6844, 6845, 3, 680, 340, 0, 6845, 6897, 1, 0, 0, 0, 6846, 6848, 5, 77, 0, 0, 6847, 6846, 1, 0, 0, 0, 6847, 6848, 1, 0, 0, 0, 6848, 6849, 1, 0, 0, 0, 6849, 6850, 5, 68, 0, 0, 6850, 6851, 5, 2, 0, 0, 6851, 6856, 3, 674, 337, 0, 6852, 6853, 5, 6, 0, 0, 6853, 6855, 3, 674, 337, 0, 6854, 6852, 1, 0, 0, 0, 6855, 6858, 1, 0, 0, 0, 6856, 6854, 1, 0, 0, 0, 6856, 6857, 1, 0, 0, 0, 6857, 6859, 1, 0, 0, 0, 6858, 6856, 1, 0, 0, 0, 6859, 6860, 5, 3, 0, 0, 6860, 6897, 1, 0, 0, 0, 6861, 6863, 5, 77, 0, 0, 6862, 6861, 1, 0, 0, 0, 6862, 6863, 1, 0, 0, 0, 6863, 6864, 1, 0, 0, 0, 6864, 6865, 5, 68, 0, 0, 6865, 6897, 3, 562, 281, 0, 6866, 6868, 5, 77, 0, 0, 6867, 6866, 1, 0, 0, 0, 6867, 6868, 1, 0, 0, 0, 6868, 6877, 1, 0, 0, 0, 6869, 6878, 5, 120, 0, 0, 6870, 6878, 5, 114, 0, 0, 6871, 6872, 5, 127, 0, 0, 6872, 6878, 5, 94, 0, 0, 6873, 6875, 5, 387, 0, 0, 6874, 6876, 5, 91, 0, 0, 6875, 6874, 1, 0, 0, 0, 6875, 6876, 1, 0, 0, 0, 6876, 6878, 1, 0, 0, 0, 6877, 6869, 1, 0, 0, 0, 6877, 6870, 1, 0, 0, 0, 6877, 6871, 1, 0, 0, 0, 6877, 6873, 1, 0, 0, 0, 6878, 6879, 1, 0, 0, 0, 6879, 6882, 3, 680, 340, 0, 6880, 6881, 5, 197, 0, 0, 6881, 6883, 3, 680, 340, 0, 6882, 6880, 1, 0, 0, 0, 6882, 6883, 1, 0, 0, 0, 6883, 6897, 1, 0, 0, 0, 6884, 6886, 5, 116, 0, 0, 6885, 6887, 5, 77, 0, 0, 6886, 6885, 1, 0, 0, 0, 6886, 6887, 1, 0, 0, 0, 6887, 6888, 1, 0, 0, 0, 6888, 6897, 5, 78, 0, 0, 6889, 6891, 5, 116, 0, 0, 6890, 6892, 5, 77, 0, 0, 6891, 6890, 1, 0, 0, 0, 6891, 6892, 1, 0, 0, 0, 6892, 6893, 1, 0, 0, 0, 6893, 6894, 5, 56, 0, 0, 6894, 6895, 5, 64, 0, 0, 6895, 6897, 3, 680, 340, 0, 6896, 6825, 1, 0, 0, 0, 6896, 6828, 1, 0, 0, 0, 6896, 6839, 1, 0, 0, 0, 6896, 6847, 1, 0, 0, 0, 6896, 6862, 1, 0, 0, 0, 6896, 6867, 1, 0, 0, 0, 6896, 6884, 1, 0, 0, 0, 6896, 6889, 1, 0, 0, 0, 6897, 679, 1, 0, 0, 0, 6898, 6899, 6, 340, -1, 0, 6899, 6903, 3, 682, 341, 0, 6900, 6901, 7, 29, 0, 0, 6901, 6903, 3, 680, 340, 4, 6902, 6898, 1, 0, 0, 0, 6902, 6900, 1, 0, 0, 0, 6903, 6920, 1, 0, 0, 0, 6904, 6905, 10, 3, 0, 0, 6905, 6906, 7, 93, 0, 0, 6906, 6919, 3, 680, 340, 4, 6907, 6908, 10, 2, 0, 0, 6908, 6909, 7, 29, 0, 0, 6909, 6919, 3, 680, 340, 3, 6910, 6911, 10, 1, 0, 0, 6911, 6912, 5, 15, 0, 0, 6912, 6919, 3, 680, 340, 2, 6913, 6914, 10, 5, 0, 0, 6914, 6915, 5, 142, 0, 0, 6915, 6916, 5, 418, 0, 0, 6916, 6917, 5, 386, 0, 0, 6917, 6919, 3, 674, 337, 0, 6918, 6904, 1, 0, 0, 0, 6918, 6907, 1, 0, 0, 0, 6918, 6910, 1, 0, 0, 0, 6918, 6913, 1, 0, 0, 0, 6919, 6922, 1, 0, 0, 0, 6920, 6918, 1, 0, 0, 0, 6920, 6921, 1, 0, 0, 0, 6921, 681, 1, 0, 0, 0, 6922, 6920, 1, 0, 0, 0, 6923, 6924, 6, 341, -1, 0, 6924, 6925, 7, 94, 0, 0, 6925, 7012, 3, 562, 281, 0, 6926, 6929, 5, 35, 0, 0, 6927, 6930, 3, 562, 281, 0, 6928, 6930, 3, 740, 370, 0, 6929, 6927, 1, 0, 0, 0, 6929, 6928, 1, 0, 0, 0, 6930, 7012, 1, 0, 0, 0, 6931, 6932, 5, 28, 0, 0, 6932, 7012, 3, 754, 377, 0, 6933, 6934, 5, 470, 0, 0, 6934, 7012, 3, 534, 267, 0, 6935, 7012, 5, 571, 0, 0, 6936, 7012, 5, 573, 0, 0, 6937, 7012, 5, 563, 0, 0, 6938, 7012, 5, 567, 0, 0, 6939, 6949, 3, 806, 403, 0, 6940, 6950, 3, 808, 404, 0, 6941, 6942, 5, 2, 0, 0, 6942, 6944, 3, 736, 368, 0, 6943, 6945, 3, 586, 293, 0, 6944, 6943, 1, 0, 0, 0, 6944, 6945, 1, 0, 0, 0, 6945, 6946, 1, 0, 0, 0, 6946, 6947, 5, 3, 0, 0, 6947, 6948, 3, 808, 404, 0, 6948, 6950, 1, 0, 0, 0, 6949, 6940, 1, 0, 0, 0, 6949, 6941, 1, 0, 0, 0, 6950, 7012, 1, 0, 0, 0, 6951, 6953, 3, 656, 328, 0, 6952, 6951, 1, 0, 0, 0, 6952, 6953, 1, 0, 0, 0, 6953, 6954, 1, 0, 0, 0, 6954, 7012, 3, 808, 404, 0, 6955, 6963, 5, 403, 0, 0, 6956, 6958, 3, 808, 404, 0, 6957, 6959, 3, 668, 334, 0, 6958, 6957, 1, 0, 0, 0, 6958, 6959, 1, 0, 0, 0, 6959, 6964, 1, 0, 0, 0, 6960, 6961, 3, 660, 330, 0, 6961, 6962, 3, 808, 404, 0, 6962, 6964, 1, 0, 0, 0, 6963, 6956, 1, 0, 0, 0, 6963, 6960, 1, 0, 0, 0, 6964, 7012, 1, 0, 0, 0, 6965, 7012, 5, 96, 0, 0, 6966, 7012, 5, 60, 0, 0, 6967, 7012, 5, 78, 0, 0, 6968, 7012, 5, 574, 0, 0, 6969, 6970, 5, 2, 0, 0, 6970, 6971, 3, 674, 337, 0, 6971, 6972, 5, 3, 0, 0, 6972, 6973, 3, 754, 377, 0, 6973, 7012, 1, 0, 0, 0, 6974, 6976, 5, 40, 0, 0, 6975, 6977, 3, 674, 337, 0, 6976, 6975, 1, 0, 0, 0, 6976, 6977, 1, 0, 0, 0, 6977, 6979, 1, 0, 0, 0, 6978, 6980, 3, 748, 374, 0, 6979, 6978, 1, 0, 0, 0, 6980, 6981, 1, 0, 0, 0, 6981, 6979, 1, 0, 0, 0, 6981, 6982, 1, 0, 0, 0, 6982, 6985, 1, 0, 0, 0, 6983, 6984, 5, 58, 0, 0, 6984, 6986, 3, 674, 337, 0, 6985, 6983, 1, 0, 0, 0, 6985, 6986, 1, 0, 0, 0, 6986, 6987, 1, 0, 0, 0, 6987, 6988, 5, 454, 0, 0, 6988, 7012, 1, 0, 0, 0, 6989, 7012, 3, 686, 343, 0, 6990, 6992, 3, 562, 281, 0, 6991, 6993, 3, 752, 376, 0, 6992, 6991, 1, 0, 0, 0, 6992, 6993, 1, 0, 0, 0, 6993, 7012, 1, 0, 0, 0, 6994, 7012, 3, 716, 358, 0, 6995, 6996, 5, 2, 0, 0, 6996, 6997, 3, 674, 337, 0, 6997, 6998, 5, 6, 0, 0, 6998, 6999, 3, 730, 365, 0, 6999, 7000, 5, 3, 0, 0, 7000, 7012, 1, 0, 0, 0, 7001, 7002, 3, 714, 357, 0, 7002, 7003, 5, 125, 0, 0, 7003, 7004, 3, 714, 357, 0, 7004, 7012, 1, 0, 0, 0, 7005, 7012, 3, 780, 390, 0, 7006, 7007, 7, 29, 0, 0, 7007, 7012, 3, 682, 341, 5, 7008, 7009, 3, 724, 362, 0, 7009, 7010, 3, 682, 341, 2, 7010, 7012, 1, 0, 0, 0, 7011, 6923, 1, 0, 0, 0, 7011, 6926, 1, 0, 0, 0, 7011, 6931, 1, 0, 0, 0, 7011, 6933, 1, 0, 0, 0, 7011, 6935, 1, 0, 0, 0, 7011, 6936, 1, 0, 0, 0, 7011, 6937, 1, 0, 0, 0, 7011, 6938, 1, 0, 0, 0, 7011, 6939, 1, 0, 0, 0, 7011, 6952, 1, 0, 0, 0, 7011, 6955, 1, 0, 0, 0, 7011, 6965, 1, 0, 0, 0, 7011, 6966, 1, 0, 0, 0, 7011, 6967, 1, 0, 0, 0, 7011, 6968, 1, 0, 0, 0, 7011, 6969, 1, 0, 0, 0, 7011, 6974, 1, 0, 0, 0, 7011, 6989, 1, 0, 0, 0, 7011, 6990, 1, 0, 0, 0, 7011, 6994, 1, 0, 0, 0, 7011, 6995, 1, 0, 0, 0, 7011, 7001, 1, 0, 0, 0, 7011, 7005, 1, 0, 0, 0, 7011, 7006, 1, 0, 0, 0, 7011, 7008, 1, 0, 0, 0, 7012, 7040, 1, 0, 0, 0, 7013, 7014, 10, 3, 0, 0, 7014, 7015, 3, 722, 361, 0, 7015, 7016, 3, 682, 341, 4, 7016, 7039, 1, 0, 0, 0, 7017, 7018, 10, 6, 0, 0, 7018, 7019, 5, 26, 0, 0, 7019, 7039, 3, 652, 326, 0, 7020, 7021, 10, 4, 0, 0, 7021, 7023, 3, 724, 362, 0, 7022, 7024, 3, 682, 341, 0, 7023, 7022, 1, 0, 0, 0, 7023, 7024, 1, 0, 0, 0, 7024, 7039, 1, 0, 0, 0, 7025, 7026, 10, 1, 0, 0, 7026, 7028, 5, 116, 0, 0, 7027, 7029, 5, 77, 0, 0, 7028, 7027, 1, 0, 0, 0, 7028, 7029, 1, 0, 0, 0, 7029, 7036, 1, 0, 0, 0, 7030, 7031, 5, 56, 0, 0, 7031, 7032, 5, 64, 0, 0, 7032, 7037, 3, 682, 341, 0, 7033, 7034, 5, 275, 0, 0, 7034, 7037, 3, 528, 264, 0, 7035, 7037, 5, 188, 0, 0, 7036, 7030, 1, 0, 0, 0, 7036, 7033, 1, 0, 0, 0, 7036, 7035, 1, 0, 0, 0, 7037, 7039, 1, 0, 0, 0, 7038, 7013, 1, 0, 0, 0, 7038, 7017, 1, 0, 0, 0, 7038, 7020, 1, 0, 0, 0, 7038, 7025, 1, 0, 0, 0, 7039, 7042, 1, 0, 0, 0, 7040, 7038, 1, 0, 0, 0, 7040, 7041, 1, 0, 0, 0, 7041, 683, 1, 0, 0, 0, 7042, 7040, 1, 0, 0, 0, 7043, 7044, 3, 806, 403, 0, 7044, 7065, 5, 2, 0, 0, 7045, 7049, 3, 736, 368, 0, 7046, 7047, 5, 6, 0, 0, 7047, 7048, 5, 101, 0, 0, 7048, 7050, 3, 738, 369, 0, 7049, 7046, 1, 0, 0, 0, 7049, 7050, 1, 0, 0, 0, 7050, 7052, 1, 0, 0, 0, 7051, 7053, 3, 586, 293, 0, 7052, 7051, 1, 0, 0, 0, 7052, 7053, 1, 0, 0, 0, 7053, 7066, 1, 0, 0, 0, 7054, 7055, 5, 101, 0, 0, 7055, 7057, 3, 738, 369, 0, 7056, 7058, 3, 586, 293, 0, 7057, 7056, 1, 0, 0, 0, 7057, 7058, 1, 0, 0, 0, 7058, 7066, 1, 0, 0, 0, 7059, 7060, 7, 80, 0, 0, 7060, 7062, 3, 736, 368, 0, 7061, 7063, 3, 586, 293, 0, 7062, 7061, 1, 0, 0, 0, 7062, 7063, 1, 0, 0, 0, 7063, 7066, 1, 0, 0, 0, 7064, 7066, 5, 9, 0, 0, 7065, 7045, 1, 0, 0, 0, 7065, 7054, 1, 0, 0, 0, 7065, 7059, 1, 0, 0, 0, 7065, 7064, 1, 0, 0, 0, 7065, 7066, 1, 0, 0, 0, 7066, 7067, 1, 0, 0, 0, 7067, 7068, 5, 3, 0, 0, 7068, 685, 1, 0, 0, 0, 7069, 7076, 3, 684, 342, 0, 7070, 7071, 5, 479, 0, 0, 7071, 7072, 5, 66, 0, 0, 7072, 7073, 5, 2, 0, 0, 7073, 7074, 3, 586, 293, 0, 7074, 7075, 5, 3, 0, 0, 7075, 7077, 1, 0, 0, 0, 7076, 7070, 1, 0, 0, 0, 7076, 7077, 1, 0, 0, 0, 7077, 7084, 1, 0, 0, 0, 7078, 7079, 5, 480, 0, 0, 7079, 7080, 5, 2, 0, 0, 7080, 7081, 5, 103, 0, 0, 7081, 7082, 3, 674, 337, 0, 7082, 7083, 5, 3, 0, 0, 7083, 7085, 1, 0, 0, 0, 7084, 7078, 1, 0, 0, 0, 7084, 7085, 1, 0, 0, 0, 7085, 7091, 1, 0, 0, 0, 7086, 7089, 5, 124, 0, 0, 7087, 7090, 3, 708, 354, 0, 7088, 7090, 3, 818, 409, 0, 7089, 7087, 1, 0, 0, 0, 7089, 7088, 1, 0, 0, 0, 7090, 7092, 1, 0, 0, 0, 7091, 7086, 1, 0, 0, 0, 7091, 7092, 1, 0, 0, 0, 7092, 7095, 1, 0, 0, 0, 7093, 7095, 3, 690, 345, 0, 7094, 7069, 1, 0, 0, 0, 7094, 7093, 1, 0, 0, 0, 7095, 687, 1, 0, 0, 0, 7096, 7099, 3, 684, 342, 0, 7097, 7099, 3, 690, 345, 0, 7098, 7096, 1, 0, 0, 0, 7098, 7097, 1, 0, 0, 0, 7099, 689, 1, 0, 0, 0, 7100, 7101, 5, 108, 0, 0, 7101, 7102, 5, 62, 0, 0, 7102, 7103, 5, 2, 0, 0, 7103, 7104, 3, 674, 337, 0, 7104, 7105, 5, 3, 0, 0, 7105, 7275, 1, 0, 0, 0, 7106, 7275, 5, 48, 0, 0, 7107, 7109, 7, 95, 0, 0, 7108, 7110, 3, 660, 330, 0, 7109, 7108, 1, 0, 0, 0, 7109, 7110, 1, 0, 0, 0, 7110, 7275, 1, 0, 0, 0, 7111, 7275, 5, 49, 0, 0, 7112, 7275, 5, 52, 0, 0, 7113, 7275, 5, 89, 0, 0, 7114, 7275, 5, 99, 0, 0, 7115, 7275, 5, 47, 0, 0, 7116, 7275, 5, 111, 0, 0, 7117, 7118, 7, 96, 0, 0, 7118, 7119, 5, 2, 0, 0, 7119, 7120, 3, 674, 337, 0, 7120, 7121, 5, 36, 0, 0, 7121, 7122, 3, 652, 326, 0, 7122, 7123, 5, 3, 0, 0, 7123, 7275, 1, 0, 0, 0, 7124, 7125, 5, 397, 0, 0, 7125, 7130, 5, 2, 0, 0, 7126, 7127, 3, 742, 371, 0, 7127, 7128, 5, 64, 0, 0, 7128, 7129, 3, 674, 337, 0, 7129, 7131, 1, 0, 0, 0, 7130, 7126, 1, 0, 0, 0, 7130, 7131, 1, 0, 0, 0, 7131, 7132, 1, 0, 0, 0, 7132, 7275, 5, 3, 0, 0, 7133, 7134, 5, 489, 0, 0, 7134, 7135, 5, 2, 0, 0, 7135, 7138, 3, 674, 337, 0, 7136, 7137, 5, 6, 0, 0, 7137, 7139, 3, 744, 372, 0, 7138, 7136, 1, 0, 0, 0, 7138, 7139, 1, 0, 0, 0, 7139, 7140, 1, 0, 0, 0, 7140, 7141, 5, 3, 0, 0, 7141, 7275, 1, 0, 0, 0, 7142, 7143, 5, 410, 0, 0, 7143, 7144, 5, 2, 0, 0, 7144, 7145, 3, 674, 337, 0, 7145, 7146, 5, 84, 0, 0, 7146, 7147, 3, 674, 337, 0, 7147, 7148, 5, 64, 0, 0, 7148, 7151, 3, 674, 337, 0, 7149, 7150, 5, 62, 0, 0, 7150, 7152, 3, 674, 337, 0, 7151, 7149, 1, 0, 0, 0, 7151, 7152, 1, 0, 0, 0, 7152, 7153, 1, 0, 0, 0, 7153, 7154, 5, 3, 0, 0, 7154, 7275, 1, 0, 0, 0, 7155, 7156, 5, 411, 0, 0, 7156, 7161, 5, 2, 0, 0, 7157, 7158, 3, 682, 341, 0, 7158, 7159, 5, 68, 0, 0, 7159, 7160, 3, 682, 341, 0, 7160, 7162, 1, 0, 0, 0, 7161, 7157, 1, 0, 0, 0, 7161, 7162, 1, 0, 0, 0, 7162, 7163, 1, 0, 0, 0, 7163, 7275, 5, 3, 0, 0, 7164, 7165, 5, 417, 0, 0, 7165, 7167, 5, 2, 0, 0, 7166, 7168, 3, 746, 373, 0, 7167, 7166, 1, 0, 0, 0, 7167, 7168, 1, 0, 0, 0, 7168, 7169, 1, 0, 0, 0, 7169, 7275, 5, 3, 0, 0, 7170, 7171, 5, 421, 0, 0, 7171, 7173, 5, 2, 0, 0, 7172, 7174, 7, 97, 0, 0, 7173, 7172, 1, 0, 0, 0, 7173, 7174, 1, 0, 0, 0, 7174, 7179, 1, 0, 0, 0, 7175, 7177, 3, 674, 337, 0, 7176, 7175, 1, 0, 0, 0, 7176, 7177, 1, 0, 0, 0, 7177, 7178, 1, 0, 0, 0, 7178, 7180, 5, 64, 0, 0, 7179, 7176, 1, 0, 0, 0, 7179, 7180, 1, 0, 0, 0, 7180, 7181, 1, 0, 0, 0, 7181, 7182, 3, 730, 365, 0, 7182, 7183, 1, 0, 0, 0, 7183, 7184, 5, 3, 0, 0, 7184, 7275, 1, 0, 0, 0, 7185, 7186, 5, 408, 0, 0, 7186, 7187, 5, 2, 0, 0, 7187, 7188, 3, 674, 337, 0, 7188, 7189, 5, 6, 0, 0, 7189, 7190, 3, 674, 337, 0, 7190, 7191, 5, 3, 0, 0, 7191, 7275, 1, 0, 0, 0, 7192, 7193, 7, 98, 0, 0, 7193, 7275, 3, 534, 267, 0, 7194, 7195, 5, 426, 0, 0, 7195, 7196, 5, 2, 0, 0, 7196, 7197, 5, 266, 0, 0, 7197, 7207, 3, 824, 412, 0, 7198, 7205, 5, 6, 0, 0, 7199, 7200, 5, 424, 0, 0, 7200, 7201, 5, 2, 0, 0, 7201, 7202, 3, 692, 346, 0, 7202, 7203, 5, 3, 0, 0, 7203, 7206, 1, 0, 0, 0, 7204, 7206, 3, 730, 365, 0, 7205, 7199, 1, 0, 0, 0, 7205, 7204, 1, 0, 0, 0, 7206, 7208, 1, 0, 0, 0, 7207, 7198, 1, 0, 0, 0, 7207, 7208, 1, 0, 0, 0, 7208, 7209, 1, 0, 0, 0, 7209, 7210, 5, 3, 0, 0, 7210, 7275, 1, 0, 0, 0, 7211, 7212, 5, 427, 0, 0, 7212, 7213, 5, 2, 0, 0, 7213, 7214, 3, 682, 341, 0, 7214, 7215, 3, 698, 349, 0, 7215, 7216, 5, 3, 0, 0, 7216, 7275, 1, 0, 0, 0, 7217, 7218, 5, 428, 0, 0, 7218, 7219, 5, 2, 0, 0, 7219, 7220, 3, 692, 346, 0, 7220, 7221, 5, 3, 0, 0, 7221, 7275, 1, 0, 0, 0, 7222, 7223, 5, 429, 0, 0, 7223, 7224, 5, 2, 0, 0, 7224, 7225, 3, 696, 348, 0, 7225, 7228, 3, 674, 337, 0, 7226, 7227, 7, 99, 0, 0, 7227, 7229, 5, 378, 0, 0, 7228, 7226, 1, 0, 0, 0, 7228, 7229, 1, 0, 0, 0, 7229, 7230, 1, 0, 0, 0, 7230, 7231, 5, 3, 0, 0, 7231, 7275, 1, 0, 0, 0, 7232, 7233, 5, 430, 0, 0, 7233, 7234, 5, 2, 0, 0, 7234, 7235, 5, 266, 0, 0, 7235, 7238, 3, 824, 412, 0, 7236, 7237, 5, 6, 0, 0, 7237, 7239, 3, 674, 337, 0, 7238, 7236, 1, 0, 0, 0, 7238, 7239, 1, 0, 0, 0, 7239, 7240, 1, 0, 0, 0, 7240, 7241, 5, 3, 0, 0, 7241, 7275, 1, 0, 0, 0, 7242, 7243, 5, 431, 0, 0, 7243, 7244, 5, 2, 0, 0, 7244, 7245, 5, 383, 0, 0, 7245, 7246, 3, 674, 337, 0, 7246, 7247, 5, 6, 0, 0, 7247, 7251, 5, 375, 0, 0, 7248, 7249, 5, 269, 0, 0, 7249, 7252, 5, 450, 0, 0, 7250, 7252, 3, 674, 337, 0, 7251, 7248, 1, 0, 0, 0, 7251, 7250, 1, 0, 0, 0, 7252, 7262, 1, 0, 0, 0, 7253, 7254, 5, 6, 0, 0, 7254, 7260, 5, 339, 0, 0, 7255, 7257, 5, 269, 0, 0, 7256, 7255, 1, 0, 0, 0, 7256, 7257, 1, 0, 0, 0, 7257, 7258, 1, 0, 0, 0, 7258, 7261, 5, 450, 0, 0, 7259, 7261, 5, 385, 0, 0, 7260, 7256, 1, 0, 0, 0, 7260, 7259, 1, 0, 0, 0, 7261, 7263, 1, 0, 0, 0, 7262, 7253, 1, 0, 0, 0, 7262, 7263, 1, 0, 0, 0, 7263, 7264, 1, 0, 0, 0, 7264, 7265, 5, 3, 0, 0, 7265, 7275, 1, 0, 0, 0, 7266, 7267, 5, 432, 0, 0, 7267, 7268, 5, 2, 0, 0, 7268, 7269, 3, 696, 348, 0, 7269, 7270, 3, 674, 337, 0, 7270, 7271, 5, 36, 0, 0, 7271, 7272, 3, 654, 327, 0, 7272, 7273, 5, 3, 0, 0, 7273, 7275, 1, 0, 0, 0, 7274, 7100, 1, 0, 0, 0, 7274, 7106, 1, 0, 0, 0, 7274, 7107, 1, 0, 0, 0, 7274, 7111, 1, 0, 0, 0, 7274, 7112, 1, 0, 0, 0, 7274, 7113, 1, 0, 0, 0, 7274, 7114, 1, 0, 0, 0, 7274, 7115, 1, 0, 0, 0, 7274, 7116, 1, 0, 0, 0, 7274, 7117, 1, 0, 0, 0, 7274, 7124, 1, 0, 0, 0, 7274, 7133, 1, 0, 0, 0, 7274, 7142, 1, 0, 0, 0, 7274, 7155, 1, 0, 0, 0, 7274, 7164, 1, 0, 0, 0, 7274, 7170, 1, 0, 0, 0, 7274, 7185, 1, 0, 0, 0, 7274, 7192, 1, 0, 0, 0, 7274, 7194, 1, 0, 0, 0, 7274, 7211, 1, 0, 0, 0, 7274, 7217, 1, 0, 0, 0, 7274, 7222, 1, 0, 0, 0, 7274, 7232, 1, 0, 0, 0, 7274, 7242, 1, 0, 0, 0, 7274, 7266, 1, 0, 0, 0, 7275, 691, 1, 0, 0, 0, 7276, 7281, 3, 694, 347, 0, 7277, 7278, 5, 6, 0, 0, 7278, 7280, 3, 694, 347, 0, 7279, 7277, 1, 0, 0, 0, 7280, 7283, 1, 0, 0, 0, 7281, 7279, 1, 0, 0, 0, 7281, 7282, 1, 0, 0, 0, 7282, 693, 1, 0, 0, 0, 7283, 7281, 1, 0, 0, 0, 7284, 7287, 3, 674, 337, 0, 7285, 7286, 5, 36, 0, 0, 7286, 7288, 3, 824, 412, 0, 7287, 7285, 1, 0, 0, 0, 7287, 7288, 1, 0, 0, 0, 7288, 695, 1, 0, 0, 0, 7289, 7290, 7, 100, 0, 0, 7290, 697, 1, 0, 0, 0, 7291, 7293, 5, 286, 0, 0, 7292, 7294, 3, 700, 350, 0, 7293, 7292, 1, 0, 0, 0, 7293, 7294, 1, 0, 0, 0, 7294, 7295, 1, 0, 0, 0, 7295, 7297, 3, 682, 341, 0, 7296, 7298, 3, 700, 350, 0, 7297, 7296, 1, 0, 0, 0, 7297, 7298, 1, 0, 0, 0, 7298, 699, 1, 0, 0, 0, 7299, 7300, 5, 147, 0, 0, 7300, 7301, 7, 101, 0, 0, 7301, 701, 1, 0, 0, 0, 7302, 7303, 5, 104, 0, 0, 7303, 7308, 3, 704, 352, 0, 7304, 7305, 5, 6, 0, 0, 7305, 7307, 3, 704, 352, 0, 7306, 7304, 1, 0, 0, 0, 7307, 7310, 1, 0, 0, 0, 7308, 7306, 1, 0, 0, 0, 7308, 7309, 1, 0, 0, 0, 7309, 703, 1, 0, 0, 0, 7310, 7308, 1, 0, 0, 0, 7311, 7312, 3, 818, 409, 0, 7312, 7313, 5, 36, 0, 0, 7313, 7314, 3, 708, 354, 0, 7314, 705, 1, 0, 0, 0, 7315, 7318, 5, 124, 0, 0, 7316, 7319, 3, 708, 354, 0, 7317, 7319, 3, 818, 409, 0, 7318, 7316, 1, 0, 0, 0, 7318, 7317, 1, 0, 0, 0, 7319, 707, 1, 0, 0, 0, 7320, 7322, 5, 2, 0, 0, 7321, 7323, 3, 818, 409, 0, 7322, 7321, 1, 0, 0, 0, 7322, 7323, 1, 0, 0, 0, 7323, 7327, 1, 0, 0, 0, 7324, 7325, 5, 285, 0, 0, 7325, 7326, 5, 147, 0, 0, 7326, 7328, 3, 730, 365, 0, 7327, 7324, 1, 0, 0, 0, 7327, 7328, 1, 0, 0, 0, 7328, 7330, 1, 0, 0, 0, 7329, 7331, 3, 586, 293, 0, 7330, 7329, 1, 0, 0, 0, 7330, 7331, 1, 0, 0, 0, 7331, 7333, 1, 0, 0, 0, 7332, 7334, 3, 710, 355, 0, 7333, 7332, 1, 0, 0, 0, 7333, 7334, 1, 0, 0, 0, 7334, 7335, 1, 0, 0, 0, 7335, 7336, 5, 3, 0, 0, 7336, 709, 1, 0, 0, 0, 7337, 7342, 7, 102, 0, 0, 7338, 7339, 5, 387, 0, 0, 7339, 7340, 3, 712, 356, 0, 7340, 7341, 5, 33, 0, 0, 7341, 7343, 1, 0, 0, 0, 7342, 7338, 1, 0, 0, 0, 7342, 7343, 1, 0, 0, 0, 7343, 7344, 1, 0, 0, 0, 7344, 7345, 3, 712, 356, 0, 7345, 7355, 1, 0, 0, 0, 7346, 7353, 5, 199, 0, 0, 7347, 7348, 5, 434, 0, 0, 7348, 7354, 5, 414, 0, 0, 7349, 7354, 5, 66, 0, 0, 7350, 7354, 5, 467, 0, 0, 7351, 7352, 5, 269, 0, 0, 7352, 7354, 5, 482, 0, 0, 7353, 7347, 1, 0, 0, 0, 7353, 7349, 1, 0, 0, 0, 7353, 7350, 1, 0, 0, 0, 7353, 7351, 1, 0, 0, 0, 7354, 7356, 1, 0, 0, 0, 7355, 7346, 1, 0, 0, 0, 7355, 7356, 1, 0, 0, 0, 7356, 711, 1, 0, 0, 0, 7357, 7360, 5, 362, 0, 0, 7358, 7360, 3, 674, 337, 0, 7359, 7357, 1, 0, 0, 0, 7359, 7358, 1, 0, 0, 0, 7360, 7361, 1, 0, 0, 0, 7361, 7365, 7, 103, 0, 0, 7362, 7363, 5, 434, 0, 0, 7363, 7365, 5, 414, 0, 0, 7364, 7359, 1, 0, 0, 0, 7364, 7362, 1, 0, 0, 0, 7365, 713, 1, 0, 0, 0, 7366, 7374, 3, 716, 358, 0, 7367, 7368, 5, 2, 0, 0, 7368, 7369, 3, 730, 365, 0, 7369, 7370, 5, 6, 0, 0, 7370, 7371, 3, 674, 337, 0, 7371, 7372, 5, 3, 0, 0, 7372, 7374, 1, 0, 0, 0, 7373, 7366, 1, 0, 0, 0, 7373, 7367, 1, 0, 0, 0, 7374, 715, 1, 0, 0, 0, 7375, 7376, 5, 414, 0, 0, 7376, 7378, 5, 2, 0, 0, 7377, 7379, 3, 730, 365, 0, 7378, 7377, 1, 0, 0, 0, 7378, 7379, 1, 0, 0, 0, 7379, 7380, 1, 0, 0, 0, 7380, 7381, 5, 3, 0, 0, 7381, 717, 1, 0, 0, 0, 7382, 7383, 7, 104, 0, 0, 7383, 719, 1, 0, 0, 0, 7384, 7387, 5, 29, 0, 0, 7385, 7387, 3, 722, 361, 0, 7386, 7384, 1, 0, 0, 0, 7386, 7385, 1, 0, 0, 0, 7387, 721, 1, 0, 0, 0, 7388, 7389, 7, 105, 0, 0, 7389, 723, 1, 0, 0, 0, 7390, 7397, 5, 29, 0, 0, 7391, 7392, 5, 278, 0, 0, 7392, 7393, 5, 2, 0, 0, 7393, 7394, 3, 414, 207, 0, 7394, 7395, 5, 3, 0, 0, 7395, 7397, 1, 0, 0, 0, 7396, 7390, 1, 0, 0, 0, 7396, 7391, 1, 0, 0, 0, 7397, 725, 1, 0, 0, 0, 7398, 7405, 3, 720, 360, 0, 7399, 7400, 5, 278, 0, 0, 7400, 7401, 5, 2, 0, 0, 7401, 7402, 3, 414, 207, 0, 7402, 7403, 5, 3, 0, 0, 7403, 7405, 1, 0, 0, 0, 7404, 7398, 1, 0, 0, 0, 7404, 7399, 1, 0, 0, 0, 7405, 727, 1, 0, 0, 0, 7406, 7412, 3, 726, 363, 0, 7407, 7409, 5, 77, 0, 0, 7408, 7407, 1, 0, 0, 0, 7408, 7409, 1, 0, 0, 0, 7409, 7410, 1, 0, 0, 0, 7410, 7412, 7, 106, 0, 0, 7411, 7406, 1, 0, 0, 0, 7411, 7408, 1, 0, 0, 0, 7412, 729, 1, 0, 0, 0, 7413, 7418, 3, 674, 337, 0, 7414, 7415, 5, 6, 0, 0, 7415, 7417, 3, 674, 337, 0, 7416, 7414, 1, 0, 0, 0, 7417, 7420, 1, 0, 0, 0, 7418, 7416, 1, 0, 0, 0, 7418, 7419, 1, 0, 0, 0, 7419, 731, 1, 0, 0, 0, 7420, 7418, 1, 0, 0, 0, 7421, 7422, 5, 2, 0, 0, 7422, 7423, 3, 674, 337, 0, 7423, 7424, 5, 3, 0, 0, 7424, 7427, 1, 0, 0, 0, 7425, 7427, 3, 800, 400, 0, 7426, 7421, 1, 0, 0, 0, 7426, 7425, 1, 0, 0, 0, 7427, 733, 1, 0, 0, 0, 7428, 7431, 3, 674, 337, 0, 7429, 7431, 3, 800, 400, 0, 7430, 7428, 1, 0, 0, 0, 7430, 7429, 1, 0, 0, 0, 7431, 735, 1, 0, 0, 0, 7432, 7437, 3, 738, 369, 0, 7433, 7434, 5, 6, 0, 0, 7434, 7436, 3, 738, 369, 0, 7435, 7433, 1, 0, 0, 0, 7436, 7439, 1, 0, 0, 0, 7437, 7435, 1, 0, 0, 0, 7437, 7438, 1, 0, 0, 0, 7438, 737, 1, 0, 0, 0, 7439, 7437, 1, 0, 0, 0, 7440, 7447, 3, 800, 400, 0, 7441, 7447, 3, 674, 337, 0, 7442, 7443, 3, 820, 410, 0, 7443, 7444, 7, 107, 0, 0, 7444, 7445, 3, 674, 337, 0, 7445, 7447, 1, 0, 0, 0, 7446, 7440, 1, 0, 0, 0, 7446, 7441, 1, 0, 0, 0, 7446, 7442, 1, 0, 0, 0, 7447, 739, 1, 0, 0, 0, 7448, 7458, 5, 4, 0, 0, 7449, 7459, 3, 730, 365, 0, 7450, 7455, 3, 740, 370, 0, 7451, 7452, 5, 6, 0, 0, 7452, 7454, 3, 740, 370, 0, 7453, 7451, 1, 0, 0, 0, 7454, 7457, 1, 0, 0, 0, 7455, 7453, 1, 0, 0, 0, 7455, 7456, 1, 0, 0, 0, 7456, 7459, 1, 0, 0, 0, 7457, 7455, 1, 0, 0, 0, 7458, 7449, 1, 0, 0, 0, 7458, 7450, 1, 0, 0, 0, 7458, 7459, 1, 0, 0, 0, 7459, 7460, 1, 0, 0, 0, 7460, 7461, 5, 5, 0, 0, 7461, 741, 1, 0, 0, 0, 7462, 7471, 3, 826, 413, 0, 7463, 7471, 5, 384, 0, 0, 7464, 7471, 5, 264, 0, 0, 7465, 7471, 5, 176, 0, 0, 7466, 7471, 5, 218, 0, 0, 7467, 7471, 5, 261, 0, 0, 7468, 7471, 5, 326, 0, 0, 7469, 7471, 3, 808, 404, 0, 7470, 7462, 1, 0, 0, 0, 7470, 7463, 1, 0, 0, 0, 7470, 7464, 1, 0, 0, 0, 7470, 7465, 1, 0, 0, 0, 7470, 7466, 1, 0, 0, 0, 7470, 7467, 1, 0, 0, 0, 7470, 7468, 1, 0, 0, 0, 7470, 7469, 1, 0, 0, 0, 7471, 743, 1, 0, 0, 0, 7472, 7473, 7, 108, 0, 0, 7473, 745, 1, 0, 0, 0, 7474, 7475, 3, 674, 337, 0, 7475, 7476, 5, 64, 0, 0, 7476, 7479, 3, 674, 337, 0, 7477, 7478, 5, 62, 0, 0, 7478, 7480, 3, 674, 337, 0, 7479, 7477, 1, 0, 0, 0, 7479, 7480, 1, 0, 0, 0, 7480, 7496, 1, 0, 0, 0, 7481, 7482, 3, 674, 337, 0, 7482, 7483, 5, 62, 0, 0, 7483, 7486, 3, 674, 337, 0, 7484, 7485, 5, 64, 0, 0, 7485, 7487, 3, 674, 337, 0, 7486, 7484, 1, 0, 0, 0, 7486, 7487, 1, 0, 0, 0, 7487, 7496, 1, 0, 0, 0, 7488, 7489, 3, 674, 337, 0, 7489, 7490, 5, 127, 0, 0, 7490, 7491, 3, 674, 337, 0, 7491, 7492, 5, 197, 0, 0, 7492, 7493, 3, 674, 337, 0, 7493, 7496, 1, 0, 0, 0, 7494, 7496, 3, 730, 365, 0, 7495, 7474, 1, 0, 0, 0, 7495, 7481, 1, 0, 0, 0, 7495, 7488, 1, 0, 0, 0, 7495, 7494, 1, 0, 0, 0, 7496, 747, 1, 0, 0, 0, 7497, 7498, 5, 102, 0, 0, 7498, 7499, 3, 674, 337, 0, 7499, 7500, 5, 93, 0, 0, 7500, 7501, 3, 674, 337, 0, 7501, 749, 1, 0, 0, 0, 7502, 7505, 5, 11, 0, 0, 7503, 7506, 3, 824, 412, 0, 7504, 7506, 5, 9, 0, 0, 7505, 7503, 1, 0, 0, 0, 7505, 7504, 1, 0, 0, 0, 7506, 7520, 1, 0, 0, 0, 7507, 7516, 5, 4, 0, 0, 7508, 7517, 3, 674, 337, 0, 7509, 7511, 3, 674, 337, 0, 7510, 7509, 1, 0, 0, 0, 7510, 7511, 1, 0, 0, 0, 7511, 7512, 1, 0, 0, 0, 7512, 7514, 5, 8, 0, 0, 7513, 7515, 3, 674, 337, 0, 7514, 7513, 1, 0, 0, 0, 7514, 7515, 1, 0, 0, 0, 7515, 7517, 1, 0, 0, 0, 7516, 7508, 1, 0, 0, 0, 7516, 7510, 1, 0, 0, 0, 7517, 7518, 1, 0, 0, 0, 7518, 7520, 5, 5, 0, 0, 7519, 7502, 1, 0, 0, 0, 7519, 7507, 1, 0, 0, 0, 7520, 751, 1, 0, 0, 0, 7521, 7523, 3, 750, 375, 0, 7522, 7521, 1, 0, 0, 0, 7523, 7524, 1, 0, 0, 0, 7524, 7522, 1, 0, 0, 0, 7524, 7525, 1, 0, 0, 0, 7525, 753, 1, 0, 0, 0, 7526, 7528, 3, 750, 375, 0, 7527, 7526, 1, 0, 0, 0, 7528, 7531, 1, 0, 0, 0, 7529, 7527, 1, 0, 0, 0, 7529, 7530, 1, 0, 0, 0, 7530, 755, 1, 0, 0, 0, 7531, 7529, 1, 0, 0, 0, 7532, 7537, 3, 758, 379, 0, 7533, 7534, 5, 6, 0, 0, 7534, 7536, 3, 758, 379, 0, 7535, 7533, 1, 0, 0, 0, 7536, 7539, 1, 0, 0, 0, 7537, 7535, 1, 0, 0, 0, 7537, 7538, 1, 0, 0, 0, 7538, 757, 1, 0, 0, 0, 7539, 7537, 1, 0, 0, 0, 7540, 7545, 3, 734, 367, 0, 7541, 7542, 5, 36, 0, 0, 7542, 7546, 3, 824, 412, 0, 7543, 7546, 3, 826, 413, 0, 7544, 7546, 1, 0, 0, 0, 7545, 7541, 1, 0, 0, 0, 7545, 7543, 1, 0, 0, 0, 7545, 7544, 1, 0, 0, 0, 7546, 7549, 1, 0, 0, 0, 7547, 7549, 5, 9, 0, 0, 7548, 7540, 1, 0, 0, 0, 7548, 7547, 1, 0, 0, 0, 7549, 759, 1, 0, 0, 0, 7550, 7555, 3, 780, 390, 0, 7551, 7552, 5, 6, 0, 0, 7552, 7554, 3, 780, 390, 0, 7553, 7551, 1, 0, 0, 0, 7554, 7557, 1, 0, 0, 0, 7555, 7553, 1, 0, 0, 0, 7555, 7556, 1, 0, 0, 0, 7556, 761, 1, 0, 0, 0, 7557, 7555, 1, 0, 0, 0, 7558, 7563, 3, 774, 387, 0, 7559, 7560, 5, 6, 0, 0, 7560, 7562, 3, 774, 387, 0, 7561, 7559, 1, 0, 0, 0, 7562, 7565, 1, 0, 0, 0, 7563, 7561, 1, 0, 0, 0, 7563, 7564, 1, 0, 0, 0, 7564, 763, 1, 0, 0, 0, 7565, 7563, 1, 0, 0, 0, 7566, 7571, 3, 790, 395, 0, 7567, 7568, 5, 6, 0, 0, 7568, 7570, 3, 790, 395, 0, 7569, 7567, 1, 0, 0, 0, 7570, 7573, 1, 0, 0, 0, 7571, 7569, 1, 0, 0, 0, 7571, 7572, 1, 0, 0, 0, 7572, 765, 1, 0, 0, 0, 7573, 7571, 1, 0, 0, 0, 7574, 7579, 3, 788, 394, 0, 7575, 7576, 5, 6, 0, 0, 7576, 7578, 3, 788, 394, 0, 7577, 7575, 1, 0, 0, 0, 7578, 7581, 1, 0, 0, 0, 7579, 7577, 1, 0, 0, 0, 7579, 7580, 1, 0, 0, 0, 7580, 767, 1, 0, 0, 0, 7581, 7579, 1, 0, 0, 0, 7582, 7583, 3, 780, 390, 0, 7583, 769, 1, 0, 0, 0, 7584, 7585, 3, 780, 390, 0, 7585, 771, 1, 0, 0, 0, 7586, 7587, 3, 780, 390, 0, 7587, 773, 1, 0, 0, 0, 7588, 7589, 3, 780, 390, 0, 7589, 775, 1, 0, 0, 0, 7590, 7591, 3, 780, 390, 0, 7591, 777, 1, 0, 0, 0, 7592, 7593, 3, 316, 158, 0, 7593, 779, 1, 0, 0, 0, 7594, 7596, 3, 818, 409, 0, 7595, 7597, 3, 752, 376, 0, 7596, 7595, 1, 0, 0, 0, 7596, 7597, 1, 0, 0, 0, 7597, 781, 1, 0, 0, 0, 7598, 7603, 3, 770, 385, 0, 7599, 7600, 5, 6, 0, 0, 7600, 7602, 3, 770, 385, 0, 7601, 7599, 1, 0, 0, 0, 7602, 7605, 1, 0, 0, 0, 7603, 7601, 1, 0, 0, 0, 7603, 7604, 1, 0, 0, 0, 7604, 783, 1, 0, 0, 0, 7605, 7603, 1, 0, 0, 0, 7606, 7611, 3, 818, 409, 0, 7607, 7608, 5, 6, 0, 0, 7608, 7610, 3, 818, 409, 0, 7609, 7607, 1, 0, 0, 0, 7610, 7613, 1, 0, 0, 0, 7611, 7609, 1, 0, 0, 0, 7611, 7612, 1, 0, 0, 0, 7612, 785, 1, 0, 0, 0, 7613, 7611, 1, 0, 0, 0, 7614, 7615, 3, 316, 158, 0, 7615, 787, 1, 0, 0, 0, 7616, 7617, 3, 316, 158, 0, 7617, 789, 1, 0, 0, 0, 7618, 7619, 3, 316, 158, 0, 7619, 791, 1, 0, 0, 0, 7620, 7621, 3, 818, 409, 0, 7621, 793, 1, 0, 0, 0, 7622, 7623, 3, 818, 409, 0, 7623, 795, 1, 0, 0, 0, 7624, 7629, 3, 820, 410, 0, 7625, 7626, 3, 818, 409, 0, 7626, 7627, 3, 752, 376, 0, 7627, 7629, 1, 0, 0, 0, 7628, 7624, 1, 0, 0, 0, 7628, 7625, 1, 0, 0, 0, 7629, 797, 1, 0, 0, 0, 7630, 7635, 3, 820, 410, 0, 7631, 7632, 3, 818, 409, 0, 7632, 7633, 3, 752, 376, 0, 7633, 7635, 1, 0, 0, 0, 7634, 7630, 1, 0, 0, 0, 7634, 7631, 1, 0, 0, 0, 7635, 799, 1, 0, 0, 0, 7636, 7637, 3, 818, 409, 0, 7637, 7638, 3, 754, 377, 0, 7638, 7641, 1, 0, 0, 0, 7639, 7641, 4, 400, 10, 0, 7640, 7636, 1, 0, 0, 0, 7640, 7639, 1, 0, 0, 0, 7641, 801, 1, 0, 0, 0, 7642, 7643, 3, 818, 409, 0, 7643, 803, 1, 0, 0, 0, 7644, 7649, 3, 820, 410, 0, 7645, 7646, 3, 818, 409, 0, 7646, 7647, 3, 752, 376, 0, 7647, 7649, 1, 0, 0, 0, 7648, 7644, 1, 0, 0, 0, 7648, 7645, 1, 0, 0, 0, 7649, 805, 1, 0, 0, 0, 7650, 7655, 3, 820, 410, 0, 7651, 7652, 3, 818, 409, 0, 7652, 7653, 3, 752, 376, 0, 7653, 7655, 1, 0, 0, 0, 7654, 7650, 1, 0, 0, 0, 7654, 7651, 1, 0, 0, 0, 7655, 807, 1, 0, 0, 0, 7656, 7659, 3, 810, 405, 0, 7657, 7658, 5, 487, 0, 0, 7658, 7660, 3, 810, 405, 0, 7659, 7657, 1, 0, 0, 0, 7659, 7660, 1, 0, 0, 0, 7660, 809, 1, 0, 0, 0, 7661, 7673, 5, 558, 0, 0, 7662, 7673, 5, 560, 0, 0, 7663, 7667, 5, 562, 0, 0, 7664, 7666, 5, 588, 0, 0, 7665, 7664, 1, 0, 0, 0, 7666, 7669, 1, 0, 0, 0, 7667, 7665, 1, 0, 0, 0, 7667, 7668, 1, 0, 0, 0, 7668, 7670, 1, 0, 0, 0, 7669, 7667, 1, 0, 0, 0, 7670, 7673, 5, 589, 0, 0, 7671, 7673, 5, 584, 0, 0, 7672, 7661, 1, 0, 0, 0, 7672, 7662, 1, 0, 0, 0, 7672, 7663, 1, 0, 0, 0, 7672, 7671, 1, 0, 0, 0, 7673, 811, 1, 0, 0, 0, 7674, 7676, 7, 29, 0, 0, 7675, 7674, 1, 0, 0, 0, 7675, 7676, 1, 0, 0, 0, 7676, 7677, 1, 0, 0, 0, 7677, 7678, 5, 571, 0, 0, 7678, 813, 1, 0, 0, 0, 7679, 7685, 3, 822, 411, 0, 7680, 7685, 5, 52, 0, 0, 7681, 7685, 5, 49, 0, 0, 7682, 7685, 5, 89, 0, 0, 7683, 7685, 5, 524, 0, 0, 7684, 7679, 1, 0, 0, 0, 7684, 7680, 1, 0, 0, 0, 7684, 7681, 1, 0, 0, 0, 7684, 7682, 1, 0, 0, 0, 7684, 7683, 1, 0, 0, 0, 7685, 815, 1, 0, 0, 0, 7686, 7691, 3, 814, 407, 0, 7687, 7688, 5, 6, 0, 0, 7688, 7690, 3, 814, 407, 0, 7689, 7687, 1, 0, 0, 0, 7690, 7693, 1, 0, 0, 0, 7691, 7689, 1, 0, 0, 0, 7691, 7692, 1, 0, 0, 0, 7692, 817, 1, 0, 0, 0, 7693, 7691, 1, 0, 0, 0, 7694, 7697, 3, 826, 413, 0, 7695, 7697, 3, 830, 415, 0, 7696, 7694, 1, 0, 0, 0, 7696, 7695, 1, 0, 0, 0, 7697, 819, 1, 0, 0, 0, 7698, 7701, 3, 826, 413, 0, 7699, 7701, 3, 832, 416, 0, 7700, 7698, 1, 0, 0, 0, 7700, 7699, 1, 0, 0, 0, 7701, 821, 1, 0, 0, 0, 7702, 7706, 3, 826, 413, 0, 7703, 7706, 3, 830, 415, 0, 7704, 7706, 3, 832, 416, 0, 7705, 7702, 1, 0, 0, 0, 7705, 7703, 1, 0, 0, 0, 7705, 7704, 1, 0, 0, 0, 7706, 823, 1, 0, 0, 0, 7707, 7712, 3, 826, 413, 0, 7708, 7712, 3, 830, 415, 0, 7709, 7712, 3, 832, 416, 0, 7710, 7712, 3, 834, 417, 0, 7711, 7707, 1, 0, 0, 0, 7711, 7708, 1, 0, 0, 0, 7711, 7709, 1, 0, 0, 0, 7711, 7710, 1, 0, 0, 0, 7712, 825, 1, 0, 0, 0, 7713, 7716, 5, 549, 0, 0, 7714, 7715, 5, 487, 0, 0, 7715, 7717, 3, 810, 405, 0, 7716, 7714, 1, 0, 0, 0, 7716, 7717, 1, 0, 0, 0, 7717, 7725, 1, 0, 0, 0, 7718, 7725, 3, 808, 404, 0, 7719, 7725, 5, 550, 0, 0, 7720, 7725, 5, 554, 0, 0, 7721, 7725, 5, 574, 0, 0, 7722, 7725, 5, 575, 0, 0, 7723, 7725, 3, 828, 414, 0, 7724, 7713, 1, 0, 0, 0, 7724, 7718, 1, 0, 0, 0, 7724, 7719, 1, 0, 0, 0, 7724, 7720, 1, 0, 0, 0, 7724, 7721, 1, 0, 0, 0, 7724, 7722, 1, 0, 0, 0, 7724, 7723, 1, 0, 0, 0, 7725, 827, 1, 0, 0, 0, 7726, 7727, 7, 109, 0, 0, 7727, 829, 1, 0, 0, 0, 7728, 7780, 5, 387, 0, 0, 7729, 7780, 5, 388, 0, 0, 7730, 7780, 3, 662, 331, 0, 7731, 7780, 5, 390, 0, 0, 7732, 7780, 5, 391, 0, 0, 7733, 7780, 3, 664, 332, 0, 7734, 7780, 5, 393, 0, 0, 7735, 7780, 5, 394, 0, 0, 7736, 7780, 5, 395, 0, 0, 7737, 7780, 5, 396, 0, 0, 7738, 7780, 5, 397, 0, 0, 7739, 7780, 5, 398, 0, 0, 7740, 7780, 5, 399, 0, 0, 7741, 7780, 5, 470, 0, 0, 7742, 7780, 5, 400, 0, 0, 7743, 7780, 5, 401, 0, 0, 7744, 7780, 5, 402, 0, 0, 7745, 7780, 5, 403, 0, 0, 7746, 7780, 5, 404, 0, 0, 7747, 7780, 5, 405, 0, 0, 7748, 7780, 5, 406, 0, 0, 7749, 7780, 5, 407, 0, 0, 7750, 7780, 5, 489, 0, 0, 7751, 7780, 5, 408, 0, 0, 7752, 7780, 3, 658, 329, 0, 7753, 7780, 5, 453, 0, 0, 7754, 7780, 5, 410, 0, 0, 7755, 7780, 5, 411, 0, 0, 7756, 7780, 5, 412, 0, 0, 7757, 7780, 5, 413, 0, 0, 7758, 7780, 5, 414, 0, 0, 7759, 7780, 5, 415, 0, 0, 7760, 7780, 5, 416, 0, 0, 7761, 7780, 5, 417, 0, 0, 7762, 7780, 5, 418, 0, 0, 7763, 7780, 5, 419, 0, 0, 7764, 7780, 5, 420, 0, 0, 7765, 7780, 5, 421, 0, 0, 7766, 7780, 5, 422, 0, 0, 7767, 7780, 5, 423, 0, 0, 7768, 7780, 5, 424, 0, 0, 7769, 7780, 5, 425, 0, 0, 7770, 7780, 5, 426, 0, 0, 7771, 7780, 5, 427, 0, 0, 7772, 7780, 5, 428, 0, 0, 7773, 7780, 5, 476, 0, 0, 7774, 7780, 5, 429, 0, 0, 7775, 7780, 5, 430, 0, 0, 7776, 7780, 5, 431, 0, 0, 7777, 7780, 5, 432, 0, 0, 7778, 7780, 5, 474, 0, 0, 7779, 7728, 1, 0, 0, 0, 7779, 7729, 1, 0, 0, 0, 7779, 7730, 1, 0, 0, 0, 7779, 7731, 1, 0, 0, 0, 7779, 7732, 1, 0, 0, 0, 7779, 7733, 1, 0, 0, 0, 7779, 7734, 1, 0, 0, 0, 7779, 7735, 1, 0, 0, 0, 7779, 7736, 1, 0, 0, 0, 7779, 7737, 1, 0, 0, 0, 7779, 7738, 1, 0, 0, 0, 7779, 7739, 1, 0, 0, 0, 7779, 7740, 1, 0, 0, 0, 7779, 7741, 1, 0, 0, 0, 7779, 7742, 1, 0, 0, 0, 7779, 7743, 1, 0, 0, 0, 7779, 7744, 1, 0, 0, 0, 7779, 7745, 1, 0, 0, 0, 7779, 7746, 1, 0, 0, 0, 7779, 7747, 1, 0, 0, 0, 7779, 7748, 1, 0, 0, 0, 7779, 7749, 1, 0, 0, 0, 7779, 7750, 1, 0, 0, 0, 7779, 7751, 1, 0, 0, 0, 7779, 7752, 1, 0, 0, 0, 7779, 7753, 1, 0, 0, 0, 7779, 7754, 1, 0, 0, 0, 7779, 7755, 1, 0, 0, 0, 7779, 7756, 1, 0, 0, 0, 7779, 7757, 1, 0, 0, 0, 7779, 7758, 1, 0, 0, 0, 7779, 7759, 1, 0, 0, 0, 7779, 7760, 1, 0, 0, 0, 7779, 7761, 1, 0, 0, 0, 7779, 7762, 1, 0, 0, 0, 7779, 7763, 1, 0, 0, 0, 7779, 7764, 1, 0, 0, 0, 7779, 7765, 1, 0, 0, 0, 7779, 7766, 1, 0, 0, 0, 7779, 7767, 1, 0, 0, 0, 7779, 7768, 1, 0, 0, 0, 7779, 7769, 1, 0, 0, 0, 7779, 7770, 1, 0, 0, 0, 7779, 7771, 1, 0, 0, 0, 7779, 7772, 1, 0, 0, 0, 7779, 7773, 1, 0, 0, 0, 7779, 7774, 1, 0, 0, 0, 7779, 7775, 1, 0, 0, 0, 7779, 7776, 1, 0, 0, 0, 7779, 7777, 1, 0, 0, 0, 7779, 7778, 1, 0, 0, 0, 7780, 831, 1, 0, 0, 0, 7781, 7782, 7, 110, 0, 0, 7782, 833, 1, 0, 0, 0, 7783, 7784, 7, 111, 0, 0, 7784, 835, 1, 0, 0, 0, 7785, 7787, 3, 838, 419, 0, 7786, 7785, 1, 0, 0, 0, 7786, 7787, 1, 0, 0, 0, 7787, 7798, 1, 0, 0, 0, 7788, 7796, 5, 178, 0, 0, 7789, 7793, 3, 840, 420, 0, 7790, 7793, 5, 178, 0, 0, 7791, 7793, 3, 838, 419, 0, 7792, 7789, 1, 0, 0, 0, 7792, 7790, 1, 0, 0, 0, 7792, 7791, 1, 0, 0, 0, 7793, 7794, 1, 0, 0, 0, 7794, 7792, 1, 0, 0, 0, 7794, 7795, 1, 0, 0, 0, 7795, 7797, 1, 0, 0, 0, 7796, 7792, 1, 0, 0, 0, 7796, 7797, 1, 0, 0, 0, 7797, 7799, 1, 0, 0, 0, 7798, 7788, 1, 0, 0, 0, 7798, 7799, 1, 0, 0, 0, 7799, 7800, 1, 0, 0, 0, 7800, 7804, 5, 146, 0, 0, 7801, 7803, 3, 846, 423, 0, 7802, 7801, 1, 0, 0, 0, 7803, 7806, 1, 0, 0, 0, 7804, 7802, 1, 0, 0, 0, 7804, 7805, 1, 0, 0, 0, 7805, 7808, 1, 0, 0, 0, 7806, 7804, 1, 0, 0, 0, 7807, 7809, 3, 924, 462, 0, 7808, 7807, 1, 0, 0, 0, 7808, 7809, 1, 0, 0, 0, 7809, 7810, 1, 0, 0, 0, 7810, 7812, 5, 454, 0, 0, 7811, 7813, 3, 928, 464, 0, 7812, 7811, 1, 0, 0, 0, 7812, 7813, 1, 0, 0, 0, 7813, 837, 1, 0, 0, 0, 7814, 7815, 5, 18, 0, 0, 7815, 7816, 3, 928, 464, 0, 7816, 7817, 5, 19, 0, 0, 7817, 839, 1, 0, 0, 0, 7818, 7865, 3, 928, 464, 0, 7819, 7820, 5, 496, 0, 0, 7820, 7823, 5, 62, 0, 0, 7821, 7824, 5, 28, 0, 0, 7822, 7824, 3, 818, 409, 0, 7823, 7821, 1, 0, 0, 0, 7823, 7822, 1, 0, 0, 0, 7824, 7866, 1, 0, 0, 0, 7825, 7827, 5, 497, 0, 0, 7826, 7825, 1, 0, 0, 0, 7826, 7827, 1, 0, 0, 0, 7827, 7828, 1, 0, 0, 0, 7828, 7830, 3, 652, 326, 0, 7829, 7831, 3, 98, 49, 0, 7830, 7829, 1, 0, 0, 0, 7830, 7831, 1, 0, 0, 0, 7831, 7834, 1, 0, 0, 0, 7832, 7833, 5, 77, 0, 0, 7833, 7835, 5, 78, 0, 0, 7834, 7832, 1, 0, 0, 0, 7834, 7835, 1, 0, 0, 0, 7835, 7841, 1, 0, 0, 0, 7836, 7839, 3, 844, 422, 0, 7837, 7839, 5, 53, 0, 0, 7838, 7836, 1, 0, 0, 0, 7838, 7837, 1, 0, 0, 0, 7839, 7840, 1, 0, 0, 0, 7840, 7842, 3, 930, 465, 0, 7841, 7838, 1, 0, 0, 0, 7841, 7842, 1, 0, 0, 0, 7842, 7866, 1, 0, 0, 0, 7843, 7845, 5, 269, 0, 0, 7844, 7843, 1, 0, 0, 0, 7844, 7845, 1, 0, 0, 0, 7845, 7846, 1, 0, 0, 0, 7846, 7848, 5, 324, 0, 0, 7847, 7844, 1, 0, 0, 0, 7847, 7848, 1, 0, 0, 0, 7848, 7849, 1, 0, 0, 0, 7849, 7861, 5, 172, 0, 0, 7850, 7851, 5, 2, 0, 0, 7851, 7856, 3, 842, 421, 0, 7852, 7853, 5, 6, 0, 0, 7853, 7855, 3, 842, 421, 0, 7854, 7852, 1, 0, 0, 0, 7855, 7858, 1, 0, 0, 0, 7856, 7854, 1, 0, 0, 0, 7856, 7857, 1, 0, 0, 0, 7857, 7859, 1, 0, 0, 0, 7858, 7856, 1, 0, 0, 0, 7859, 7860, 5, 3, 0, 0, 7860, 7862, 1, 0, 0, 0, 7861, 7850, 1, 0, 0, 0, 7861, 7862, 1, 0, 0, 0, 7862, 7863, 1, 0, 0, 0, 7863, 7864, 7, 112, 0, 0, 7864, 7866, 3, 560, 280, 0, 7865, 7819, 1, 0, 0, 0, 7865, 7826, 1, 0, 0, 0, 7865, 7847, 1, 0, 0, 0, 7866, 7867, 1, 0, 0, 0, 7867, 7868, 5, 7, 0, 0, 7868, 841, 1, 0, 0, 0, 7869, 7870, 3, 928, 464, 0, 7870, 7871, 3, 652, 326, 0, 7871, 843, 1, 0, 0, 0, 7872, 7873, 7, 113, 0, 0, 7873, 845, 1, 0, 0, 0, 7874, 7875, 3, 836, 418, 0, 7875, 7876, 5, 7, 0, 0, 7876, 7899, 1, 0, 0, 0, 7877, 7899, 3, 874, 437, 0, 7878, 7899, 3, 876, 438, 0, 7879, 7899, 3, 852, 426, 0, 7880, 7899, 3, 860, 430, 0, 7881, 7899, 3, 864, 432, 0, 7882, 7899, 3, 866, 433, 0, 7883, 7899, 3, 870, 435, 0, 7884, 7899, 3, 872, 436, 0, 7885, 7899, 3, 880, 440, 0, 7886, 7899, 3, 884, 442, 0, 7887, 7899, 3, 886, 443, 0, 7888, 7899, 3, 848, 424, 0, 7889, 7899, 3, 850, 425, 0, 7890, 7899, 3, 854, 427, 0, 7891, 7899, 3, 890, 445, 0, 7892, 7899, 3, 894, 447, 0, 7893, 7899, 3, 898, 449, 0, 7894, 7899, 3, 914, 457, 0, 7895, 7899, 3, 916, 458, 0, 7896, 7899, 3, 918, 459, 0, 7897, 7899, 3, 920, 460, 0, 7898, 7874, 1, 0, 0, 0, 7898, 7877, 1, 0, 0, 0, 7898, 7878, 1, 0, 0, 0, 7898, 7879, 1, 0, 0, 0, 7898, 7880, 1, 0, 0, 0, 7898, 7881, 1, 0, 0, 0, 7898, 7882, 1, 0, 0, 0, 7898, 7883, 1, 0, 0, 0, 7898, 7884, 1, 0, 0, 0, 7898, 7885, 1, 0, 0, 0, 7898, 7886, 1, 0, 0, 0, 7898, 7887, 1, 0, 0, 0, 7898, 7888, 1, 0, 0, 0, 7898, 7889, 1, 0, 0, 0, 7898, 7890, 1, 0, 0, 0, 7898, 7891, 1, 0, 0, 0, 7898, 7892, 1, 0, 0, 0, 7898, 7893, 1, 0, 0, 0, 7898, 7894, 1, 0, 0, 0, 7898, 7895, 1, 0, 0, 0, 7898, 7896, 1, 0, 0, 0, 7898, 7897, 1, 0, 0, 0, 7899, 847, 1, 0, 0, 0, 7900, 7901, 5, 498, 0, 0, 7901, 7902, 3, 930, 465, 0, 7902, 7903, 5, 7, 0, 0, 7903, 849, 1, 0, 0, 0, 7904, 7905, 5, 433, 0, 0, 7905, 7912, 3, 928, 464, 0, 7906, 7908, 5, 2, 0, 0, 7907, 7909, 3, 730, 365, 0, 7908, 7907, 1, 0, 0, 0, 7908, 7909, 1, 0, 0, 0, 7909, 7910, 1, 0, 0, 0, 7910, 7911, 5, 3, 0, 0, 7911, 7913, 5, 7, 0, 0, 7912, 7906, 1, 0, 0, 0, 7912, 7913, 1, 0, 0, 0, 7913, 7924, 1, 0, 0, 0, 7914, 7915, 5, 57, 0, 0, 7915, 7916, 3, 928, 464, 0, 7916, 7918, 5, 2, 0, 0, 7917, 7919, 3, 730, 365, 0, 7918, 7917, 1, 0, 0, 0, 7918, 7919, 1, 0, 0, 0, 7919, 7920, 1, 0, 0, 0, 7920, 7921, 5, 3, 0, 0, 7921, 7922, 5, 7, 0, 0, 7922, 7924, 1, 0, 0, 0, 7923, 7904, 1, 0, 0, 0, 7923, 7914, 1, 0, 0, 0, 7924, 851, 1, 0, 0, 0, 7925, 7926, 3, 858, 429, 0, 7926, 7927, 3, 844, 422, 0, 7927, 7928, 3, 930, 465, 0, 7928, 7929, 5, 7, 0, 0, 7929, 853, 1, 0, 0, 0, 7930, 7932, 5, 499, 0, 0, 7931, 7933, 7, 114, 0, 0, 7932, 7931, 1, 0, 0, 0, 7932, 7933, 1, 0, 0, 0, 7933, 7934, 1, 0, 0, 0, 7934, 7935, 5, 500, 0, 0, 7935, 7940, 3, 856, 428, 0, 7936, 7937, 5, 6, 0, 0, 7937, 7939, 3, 856, 428, 0, 7938, 7936, 1, 0, 0, 0, 7939, 7942, 1, 0, 0, 0, 7940, 7938, 1, 0, 0, 0, 7940, 7941, 1, 0, 0, 0, 7941, 7943, 1, 0, 0, 0, 7942, 7940, 1, 0, 0, 0, 7943, 7944, 5, 7, 0, 0, 7944, 855, 1, 0, 0, 0, 7945, 7946, 3, 858, 429, 0, 7946, 7947, 3, 844, 422, 0, 7947, 7948, 3, 818, 409, 0, 7948, 857, 1, 0, 0, 0, 7949, 7952, 3, 316, 158, 0, 7950, 7952, 5, 28, 0, 0, 7951, 7949, 1, 0, 0, 0, 7951, 7950, 1, 0, 0, 0, 7952, 7959, 1, 0, 0, 0, 7953, 7954, 5, 4, 0, 0, 7954, 7955, 3, 674, 337, 0, 7955, 7956, 5, 5, 0, 0, 7956, 7958, 1, 0, 0, 0, 7957, 7953, 1, 0, 0, 0, 7958, 7961, 1, 0, 0, 0, 7959, 7957, 1, 0, 0, 0, 7959, 7960, 1, 0, 0, 0, 7960, 859, 1, 0, 0, 0, 7961, 7959, 1, 0, 0, 0, 7962, 7963, 5, 220, 0, 0, 7963, 7964, 3, 930, 465, 0, 7964, 7968, 5, 93, 0, 0, 7965, 7967, 3, 846, 423, 0, 7966, 7965, 1, 0, 0, 0, 7967, 7970, 1, 0, 0, 0, 7968, 7966, 1, 0, 0, 0, 7968, 7969, 1, 0, 0, 0, 7969, 7982, 1, 0, 0, 0, 7970, 7968, 1, 0, 0, 0, 7971, 7972, 5, 502, 0, 0, 7972, 7973, 3, 674, 337, 0, 7973, 7977, 5, 93, 0, 0, 7974, 7976, 3, 846, 423, 0, 7975, 7974, 1, 0, 0, 0, 7976, 7979, 1, 0, 0, 0, 7977, 7975, 1, 0, 0, 0, 7977, 7978, 1, 0, 0, 0, 7978, 7981, 1, 0, 0, 0, 7979, 7977, 1, 0, 0, 0, 7980, 7971, 1, 0, 0, 0, 7981, 7984, 1, 0, 0, 0, 7982, 7980, 1, 0, 0, 0, 7982, 7983, 1, 0, 0, 0, 7983, 7986, 1, 0, 0, 0, 7984, 7982, 1, 0, 0, 0, 7985, 7987, 3, 862, 431, 0, 7986, 7985, 1, 0, 0, 0, 7986, 7987, 1, 0, 0, 0, 7987, 7988, 1, 0, 0, 0, 7988, 7989, 5, 454, 0, 0, 7989, 7990, 5, 220, 0, 0, 7990, 7991, 5, 7, 0, 0, 7991, 861, 1, 0, 0, 0, 7992, 7996, 5, 58, 0, 0, 7993, 7995, 3, 846, 423, 0, 7994, 7993, 1, 0, 0, 0, 7995, 7998, 1, 0, 0, 0, 7996, 7994, 1, 0, 0, 0, 7996, 7997, 1, 0, 0, 0, 7997, 863, 1, 0, 0, 0, 7998, 7996, 1, 0, 0, 0, 7999, 8001, 5, 40, 0, 0, 8000, 8002, 3, 930, 465, 0, 8001, 8000, 1, 0, 0, 0, 8001, 8002, 1, 0, 0, 0, 8002, 8012, 1, 0, 0, 0, 8003, 8004, 5, 102, 0, 0, 8004, 8005, 3, 730, 365, 0, 8005, 8009, 5, 93, 0, 0, 8006, 8008, 3, 846, 423, 0, 8007, 8006, 1, 0, 0, 0, 8008, 8011, 1, 0, 0, 0, 8009, 8007, 1, 0, 0, 0, 8009, 8010, 1, 0, 0, 0, 8010, 8013, 1, 0, 0, 0, 8011, 8009, 1, 0, 0, 0, 8012, 8003, 1, 0, 0, 0, 8013, 8014, 1, 0, 0, 0, 8014, 8012, 1, 0, 0, 0, 8014, 8015, 1, 0, 0, 0, 8015, 8017, 1, 0, 0, 0, 8016, 8018, 3, 862, 431, 0, 8017, 8016, 1, 0, 0, 0, 8017, 8018, 1, 0, 0, 0, 8018, 8019, 1, 0, 0, 0, 8019, 8020, 5, 454, 0, 0, 8020, 8021, 5, 40, 0, 0, 8021, 8022, 5, 7, 0, 0, 8022, 865, 1, 0, 0, 0, 8023, 8025, 3, 838, 419, 0, 8024, 8023, 1, 0, 0, 0, 8024, 8025, 1, 0, 0, 0, 8025, 8030, 1, 0, 0, 0, 8026, 8027, 5, 503, 0, 0, 8027, 8031, 3, 674, 337, 0, 8028, 8029, 5, 62, 0, 0, 8029, 8031, 3, 868, 434, 0, 8030, 8026, 1, 0, 0, 0, 8030, 8028, 1, 0, 0, 0, 8030, 8031, 1, 0, 0, 0, 8031, 8032, 1, 0, 0, 0, 8032, 8033, 3, 882, 441, 0, 8033, 867, 1, 0, 0, 0, 8034, 8035, 3, 314, 157, 0, 8035, 8058, 5, 68, 0, 0, 8036, 8038, 3, 818, 409, 0, 8037, 8039, 3, 534, 267, 0, 8038, 8037, 1, 0, 0, 0, 8038, 8039, 1, 0, 0, 0, 8039, 8059, 1, 0, 0, 0, 8040, 8059, 3, 560, 280, 0, 8041, 8059, 3, 520, 260, 0, 8042, 8043, 5, 202, 0, 0, 8043, 8046, 3, 674, 337, 0, 8044, 8045, 5, 100, 0, 0, 8045, 8047, 3, 730, 365, 0, 8046, 8044, 1, 0, 0, 0, 8046, 8047, 1, 0, 0, 0, 8047, 8059, 1, 0, 0, 0, 8048, 8050, 5, 504, 0, 0, 8049, 8048, 1, 0, 0, 0, 8049, 8050, 1, 0, 0, 0, 8050, 8051, 1, 0, 0, 0, 8051, 8052, 3, 674, 337, 0, 8052, 8053, 5, 24, 0, 0, 8053, 8056, 3, 674, 337, 0, 8054, 8055, 5, 147, 0, 0, 8055, 8057, 3, 674, 337, 0, 8056, 8054, 1, 0, 0, 0, 8056, 8057, 1, 0, 0, 0, 8057, 8059, 1, 0, 0, 0, 8058, 8036, 1, 0, 0, 0, 8058, 8040, 1, 0, 0, 0, 8058, 8041, 1, 0, 0, 0, 8058, 8042, 1, 0, 0, 0, 8058, 8049, 1, 0, 0, 0, 8059, 869, 1, 0, 0, 0, 8060, 8062, 3, 838, 419, 0, 8061, 8060, 1, 0, 0, 0, 8061, 8062, 1, 0, 0, 0, 8062, 8063, 1, 0, 0, 0, 8063, 8064, 5, 505, 0, 0, 8064, 8067, 3, 314, 157, 0, 8065, 8066, 5, 506, 0, 0, 8066, 8068, 5, 571, 0, 0, 8067, 8065, 1, 0, 0, 0, 8067, 8068, 1, 0, 0, 0, 8068, 8069, 1, 0, 0, 0, 8069, 8070, 5, 68, 0, 0, 8070, 8071, 5, 35, 0, 0, 8071, 8072, 3, 674, 337, 0, 8072, 8073, 3, 882, 441, 0, 8073, 871, 1, 0, 0, 0, 8074, 8076, 7, 115, 0, 0, 8075, 8077, 3, 928, 464, 0, 8076, 8075, 1, 0, 0, 0, 8076, 8077, 1, 0, 0, 0, 8077, 8080, 1, 0, 0, 0, 8078, 8079, 5, 102, 0, 0, 8079, 8081, 3, 930, 465, 0, 8080, 8078, 1, 0, 0, 0, 8080, 8081, 1, 0, 0, 0, 8081, 8082, 1, 0, 0, 0, 8082, 8083, 5, 7, 0, 0, 8083, 873, 1, 0, 0, 0, 8084, 8099, 5, 508, 0, 0, 8085, 8086, 5, 268, 0, 0, 8086, 8100, 3, 930, 465, 0, 8087, 8094, 5, 509, 0, 0, 8088, 8089, 5, 202, 0, 0, 8089, 8090, 3, 674, 337, 0, 8090, 8091, 5, 100, 0, 0, 8091, 8092, 3, 730, 365, 0, 8092, 8095, 1, 0, 0, 0, 8093, 8095, 3, 560, 280, 0, 8094, 8088, 1, 0, 0, 0, 8094, 8093, 1, 0, 0, 0, 8095, 8100, 1, 0, 0, 0, 8096, 8098, 3, 930, 465, 0, 8097, 8096, 1, 0, 0, 0, 8097, 8098, 1, 0, 0, 0, 8098, 8100, 1, 0, 0, 0, 8099, 8085, 1, 0, 0, 0, 8099, 8087, 1, 0, 0, 0, 8099, 8097, 1, 0, 0, 0, 8100, 8101, 1, 0, 0, 0, 8101, 8102, 5, 7, 0, 0, 8102, 875, 1, 0, 0, 0, 8103, 8133, 5, 510, 0, 0, 8104, 8106, 7, 116, 0, 0, 8105, 8104, 1, 0, 0, 0, 8105, 8106, 1, 0, 0, 0, 8106, 8119, 1, 0, 0, 0, 8107, 8120, 3, 826, 413, 0, 8108, 8109, 5, 511, 0, 0, 8109, 8120, 3, 808, 404, 0, 8110, 8117, 3, 808, 404, 0, 8111, 8112, 5, 6, 0, 0, 8112, 8114, 3, 674, 337, 0, 8113, 8111, 1, 0, 0, 0, 8114, 8115, 1, 0, 0, 0, 8115, 8113, 1, 0, 0, 0, 8115, 8116, 1, 0, 0, 0, 8116, 8118, 1, 0, 0, 0, 8117, 8113, 1, 0, 0, 0, 8117, 8118, 1, 0, 0, 0, 8118, 8120, 1, 0, 0, 0, 8119, 8107, 1, 0, 0, 0, 8119, 8108, 1, 0, 0, 0, 8119, 8110, 1, 0, 0, 0, 8119, 8120, 1, 0, 0, 0, 8120, 8130, 1, 0, 0, 0, 8121, 8122, 5, 100, 0, 0, 8122, 8127, 3, 878, 439, 0, 8123, 8124, 5, 6, 0, 0, 8124, 8126, 3, 878, 439, 0, 8125, 8123, 1, 0, 0, 0, 8126, 8129, 1, 0, 0, 0, 8127, 8125, 1, 0, 0, 0, 8127, 8128, 1, 0, 0, 0, 8128, 8131, 1, 0, 0, 0, 8129, 8127, 1, 0, 0, 0, 8130, 8121, 1, 0, 0, 0, 8130, 8131, 1, 0, 0, 0, 8131, 8132, 1, 0, 0, 0, 8132, 8134, 5, 7, 0, 0, 8133, 8105, 1, 0, 0, 0, 8133, 8134, 1, 0, 0, 0, 8134, 877, 1, 0, 0, 0, 8135, 8136, 3, 826, 413, 0, 8136, 8137, 5, 10, 0, 0, 8137, 8138, 3, 674, 337, 0, 8138, 879, 1, 0, 0, 0, 8139, 8140, 5, 518, 0, 0, 8140, 8143, 3, 930, 465, 0, 8141, 8142, 5, 6, 0, 0, 8142, 8144, 3, 930, 465, 0, 8143, 8141, 1, 0, 0, 0, 8143, 8144, 1, 0, 0, 0, 8144, 8145, 1, 0, 0, 0, 8145, 8146, 5, 7, 0, 0, 8146, 881, 1, 0, 0, 0, 8147, 8151, 5, 519, 0, 0, 8148, 8150, 3, 846, 423, 0, 8149, 8148, 1, 0, 0, 0, 8150, 8153, 1, 0, 0, 0, 8151, 8149, 1, 0, 0, 0, 8151, 8152, 1, 0, 0, 0, 8152, 8154, 1, 0, 0, 0, 8153, 8151, 1, 0, 0, 0, 8154, 8155, 5, 454, 0, 0, 8155, 8157, 5, 519, 0, 0, 8156, 8158, 3, 928, 464, 0, 8157, 8156, 1, 0, 0, 0, 8157, 8158, 1, 0, 0, 0, 8158, 8159, 1, 0, 0, 0, 8159, 8160, 5, 7, 0, 0, 8160, 883, 1, 0, 0, 0, 8161, 8163, 3, 4, 2, 0, 8162, 8164, 3, 888, 444, 0, 8163, 8162, 1, 0, 0, 0, 8163, 8164, 1, 0, 0, 0, 8164, 8165, 1, 0, 0, 0, 8165, 8166, 5, 7, 0, 0, 8166, 885, 1, 0, 0, 0, 8167, 8168, 5, 202, 0, 0, 8168, 8184, 3, 674, 337, 0, 8169, 8171, 3, 888, 444, 0, 8170, 8169, 1, 0, 0, 0, 8170, 8171, 1, 0, 0, 0, 8171, 8174, 1, 0, 0, 0, 8172, 8173, 5, 100, 0, 0, 8173, 8175, 3, 730, 365, 0, 8174, 8172, 1, 0, 0, 0, 8174, 8175, 1, 0, 0, 0, 8175, 8185, 1, 0, 0, 0, 8176, 8177, 5, 100, 0, 0, 8177, 8179, 3, 730, 365, 0, 8178, 8176, 1, 0, 0, 0, 8178, 8179, 1, 0, 0, 0, 8179, 8181, 1, 0, 0, 0, 8180, 8182, 3, 888, 444, 0, 8181, 8180, 1, 0, 0, 0, 8181, 8182, 1, 0, 0, 0, 8182, 8185, 1, 0, 0, 0, 8183, 8185, 1, 0, 0, 0, 8184, 8170, 1, 0, 0, 0, 8184, 8178, 1, 0, 0, 0, 8184, 8183, 1, 0, 0, 0, 8185, 8186, 1, 0, 0, 0, 8186, 8187, 5, 7, 0, 0, 8187, 887, 1, 0, 0, 0, 8188, 8190, 5, 71, 0, 0, 8189, 8191, 5, 346, 0, 0, 8190, 8189, 1, 0, 0, 0, 8190, 8191, 1, 0, 0, 0, 8191, 8192, 1, 0, 0, 0, 8192, 8193, 3, 730, 365, 0, 8193, 889, 1, 0, 0, 0, 8194, 8226, 5, 520, 0, 0, 8195, 8200, 3, 922, 461, 0, 8196, 8198, 5, 269, 0, 0, 8197, 8196, 1, 0, 0, 0, 8197, 8198, 1, 0, 0, 0, 8198, 8199, 1, 0, 0, 0, 8199, 8201, 5, 324, 0, 0, 8200, 8197, 1, 0, 0, 0, 8200, 8201, 1, 0, 0, 0, 8201, 8202, 1, 0, 0, 0, 8202, 8210, 5, 62, 0, 0, 8203, 8211, 3, 560, 280, 0, 8204, 8205, 5, 202, 0, 0, 8205, 8208, 3, 930, 465, 0, 8206, 8207, 5, 100, 0, 0, 8207, 8209, 3, 730, 365, 0, 8208, 8206, 1, 0, 0, 0, 8208, 8209, 1, 0, 0, 0, 8209, 8211, 1, 0, 0, 0, 8210, 8203, 1, 0, 0, 0, 8210, 8204, 1, 0, 0, 0, 8211, 8227, 1, 0, 0, 0, 8212, 8224, 3, 818, 409, 0, 8213, 8214, 5, 2, 0, 0, 8214, 8219, 3, 892, 446, 0, 8215, 8216, 5, 6, 0, 0, 8216, 8218, 3, 892, 446, 0, 8217, 8215, 1, 0, 0, 0, 8218, 8221, 1, 0, 0, 0, 8219, 8217, 1, 0, 0, 0, 8219, 8220, 1, 0, 0, 0, 8220, 8222, 1, 0, 0, 0, 8221, 8219, 1, 0, 0, 0, 8222, 8223, 5, 3, 0, 0, 8223, 8225, 1, 0, 0, 0, 8224, 8213, 1, 0, 0, 0, 8224, 8225, 1, 0, 0, 0, 8225, 8227, 1, 0, 0, 0, 8226, 8195, 1, 0, 0, 0, 8226, 8212, 1, 0, 0, 0, 8227, 8228, 1, 0, 0, 0, 8228, 8229, 5, 7, 0, 0, 8229, 891, 1, 0, 0, 0, 8230, 8231, 3, 818, 409, 0, 8231, 8232, 5, 20, 0, 0, 8232, 8234, 1, 0, 0, 0, 8233, 8230, 1, 0, 0, 0, 8233, 8234, 1, 0, 0, 0, 8234, 8235, 1, 0, 0, 0, 8235, 8236, 3, 674, 337, 0, 8236, 893, 1, 0, 0, 0, 8237, 8239, 5, 61, 0, 0, 8238, 8240, 3, 896, 448, 0, 8239, 8238, 1, 0, 0, 0, 8239, 8240, 1, 0, 0, 0, 8240, 8242, 1, 0, 0, 0, 8241, 8243, 3, 332, 166, 0, 8242, 8241, 1, 0, 0, 0, 8242, 8243, 1, 0, 0, 0, 8243, 8244, 1, 0, 0, 0, 8244, 8245, 3, 922, 461, 0, 8245, 8246, 5, 71, 0, 0, 8246, 8247, 3, 730, 365, 0, 8247, 8248, 5, 7, 0, 0, 8248, 895, 1, 0, 0, 0, 8249, 8264, 5, 268, 0, 0, 8250, 8264, 5, 293, 0, 0, 8251, 8264, 5, 207, 0, 0, 8252, 8264, 5, 249, 0, 0, 8253, 8255, 7, 50, 0, 0, 8254, 8253, 1, 0, 0, 0, 8254, 8255, 1, 0, 0, 0, 8255, 8256, 1, 0, 0, 0, 8256, 8264, 3, 674, 337, 0, 8257, 8264, 5, 30, 0, 0, 8258, 8261, 7, 117, 0, 0, 8259, 8262, 3, 674, 337, 0, 8260, 8262, 5, 30, 0, 0, 8261, 8259, 1, 0, 0, 0, 8261, 8260, 1, 0, 0, 0, 8261, 8262, 1, 0, 0, 0, 8262, 8264, 1, 0, 0, 0, 8263, 8249, 1, 0, 0, 0, 8263, 8250, 1, 0, 0, 0, 8263, 8251, 1, 0, 0, 0, 8263, 8252, 1, 0, 0, 0, 8263, 8254, 1, 0, 0, 0, 8263, 8257, 1, 0, 0, 0, 8263, 8258, 1, 0, 0, 0, 8264, 897, 1, 0, 0, 0, 8265, 8267, 5, 265, 0, 0, 8266, 8268, 3, 896, 448, 0, 8267, 8266, 1, 0, 0, 0, 8267, 8268, 1, 0, 0, 0, 8268, 8269, 1, 0, 0, 0, 8269, 8270, 3, 922, 461, 0, 8270, 8271, 5, 7, 0, 0, 8271, 899, 1, 0, 0, 0, 8272, 8274, 3, 572, 286, 0, 8273, 8272, 1, 0, 0, 0, 8273, 8274, 1, 0, 0, 0, 8274, 8275, 1, 0, 0, 0, 8275, 8276, 5, 525, 0, 0, 8276, 8278, 5, 71, 0, 0, 8277, 8279, 5, 81, 0, 0, 8278, 8277, 1, 0, 0, 0, 8278, 8279, 1, 0, 0, 0, 8279, 8280, 1, 0, 0, 0, 8280, 8282, 3, 774, 387, 0, 8281, 8283, 5, 9, 0, 0, 8282, 8281, 1, 0, 0, 0, 8282, 8283, 1, 0, 0, 0, 8283, 8288, 1, 0, 0, 0, 8284, 8286, 5, 36, 0, 0, 8285, 8284, 1, 0, 0, 0, 8285, 8286, 1, 0, 0, 0, 8286, 8287, 1, 0, 0, 0, 8287, 8289, 3, 818, 409, 0, 8288, 8285, 1, 0, 0, 0, 8288, 8289, 1, 0, 0, 0, 8289, 8290, 1, 0, 0, 0, 8290, 8291, 5, 100, 0, 0, 8291, 8292, 3, 902, 451, 0, 8292, 8293, 5, 80, 0, 0, 8293, 8295, 3, 674, 337, 0, 8294, 8296, 3, 904, 452, 0, 8295, 8294, 1, 0, 0, 0, 8296, 8297, 1, 0, 0, 0, 8297, 8295, 1, 0, 0, 0, 8297, 8298, 1, 0, 0, 0, 8298, 901, 1, 0, 0, 0, 8299, 8301, 5, 81, 0, 0, 8300, 8299, 1, 0, 0, 0, 8300, 8301, 1, 0, 0, 0, 8301, 8302, 1, 0, 0, 0, 8302, 8304, 3, 774, 387, 0, 8303, 8305, 5, 9, 0, 0, 8304, 8303, 1, 0, 0, 0, 8304, 8305, 1, 0, 0, 0, 8305, 8311, 1, 0, 0, 0, 8306, 8309, 3, 564, 282, 0, 8307, 8309, 3, 608, 304, 0, 8308, 8306, 1, 0, 0, 0, 8308, 8307, 1, 0, 0, 0, 8309, 8311, 1, 0, 0, 0, 8310, 8300, 1, 0, 0, 0, 8310, 8308, 1, 0, 0, 0, 8311, 8316, 1, 0, 0, 0, 8312, 8314, 5, 36, 0, 0, 8313, 8312, 1, 0, 0, 0, 8313, 8314, 1, 0, 0, 0, 8314, 8315, 1, 0, 0, 0, 8315, 8317, 3, 818, 409, 0, 8316, 8313, 1, 0, 0, 0, 8316, 8317, 1, 0, 0, 0, 8317, 903, 1, 0, 0, 0, 8318, 8319, 5, 102, 0, 0, 8319, 8322, 5, 526, 0, 0, 8320, 8321, 5, 33, 0, 0, 8321, 8323, 3, 674, 337, 0, 8322, 8320, 1, 0, 0, 0, 8322, 8323, 1, 0, 0, 0, 8323, 8324, 1, 0, 0, 0, 8324, 8329, 5, 93, 0, 0, 8325, 8330, 3, 908, 454, 0, 8326, 8330, 5, 182, 0, 0, 8327, 8328, 5, 57, 0, 0, 8328, 8330, 5, 270, 0, 0, 8329, 8325, 1, 0, 0, 0, 8329, 8326, 1, 0, 0, 0, 8329, 8327, 1, 0, 0, 0, 8330, 8345, 1, 0, 0, 0, 8331, 8332, 5, 102, 0, 0, 8332, 8333, 5, 77, 0, 0, 8333, 8336, 5, 526, 0, 0, 8334, 8335, 5, 33, 0, 0, 8335, 8337, 3, 674, 337, 0, 8336, 8334, 1, 0, 0, 0, 8336, 8337, 1, 0, 0, 0, 8337, 8338, 1, 0, 0, 0, 8338, 8342, 5, 93, 0, 0, 8339, 8343, 3, 906, 453, 0, 8340, 8341, 5, 57, 0, 0, 8341, 8343, 5, 270, 0, 0, 8342, 8339, 1, 0, 0, 0, 8342, 8340, 1, 0, 0, 0, 8343, 8345, 1, 0, 0, 0, 8344, 8318, 1, 0, 0, 0, 8344, 8331, 1, 0, 0, 0, 8345, 905, 1, 0, 0, 0, 8346, 8348, 5, 241, 0, 0, 8347, 8349, 3, 144, 72, 0, 8348, 8347, 1, 0, 0, 0, 8348, 8349, 1, 0, 0, 0, 8349, 8353, 1, 0, 0, 0, 8350, 8351, 5, 463, 0, 0, 8351, 8352, 7, 76, 0, 0, 8352, 8354, 5, 450, 0, 0, 8353, 8350, 1, 0, 0, 0, 8353, 8354, 1, 0, 0, 0, 8354, 8355, 1, 0, 0, 0, 8355, 8356, 3, 910, 455, 0, 8356, 907, 1, 0, 0, 0, 8357, 8358, 5, 369, 0, 0, 8358, 8376, 5, 333, 0, 0, 8359, 8360, 3, 800, 400, 0, 8360, 8361, 5, 10, 0, 0, 8361, 8362, 3, 912, 456, 0, 8362, 8377, 1, 0, 0, 0, 8363, 8364, 3, 144, 72, 0, 8364, 8365, 5, 10, 0, 0, 8365, 8366, 5, 2, 0, 0, 8366, 8371, 3, 912, 456, 0, 8367, 8368, 5, 6, 0, 0, 8368, 8370, 3, 912, 456, 0, 8369, 8367, 1, 0, 0, 0, 8370, 8373, 1, 0, 0, 0, 8371, 8369, 1, 0, 0, 0, 8371, 8372, 1, 0, 0, 0, 8372, 8374, 1, 0, 0, 0, 8373, 8371, 1, 0, 0, 0, 8374, 8375, 5, 3, 0, 0, 8375, 8377, 1, 0, 0, 0, 8376, 8359, 1, 0, 0, 0, 8376, 8363, 1, 0, 0, 0, 8377, 8378, 1, 0, 0, 0, 8378, 8376, 1, 0, 0, 0, 8378, 8379, 1, 0, 0, 0, 8379, 909, 1, 0, 0, 0, 8380, 8381, 5, 422, 0, 0, 8381, 8382, 5, 2, 0, 0, 8382, 8387, 3, 912, 456, 0, 8383, 8384, 5, 6, 0, 0, 8384, 8386, 3, 912, 456, 0, 8385, 8383, 1, 0, 0, 0, 8386, 8389, 1, 0, 0, 0, 8387, 8385, 1, 0, 0, 0, 8387, 8388, 1, 0, 0, 0, 8388, 8390, 1, 0, 0, 0, 8389, 8387, 1, 0, 0, 0, 8390, 8391, 5, 3, 0, 0, 8391, 8395, 1, 0, 0, 0, 8392, 8393, 5, 53, 0, 0, 8393, 8395, 5, 422, 0, 0, 8394, 8380, 1, 0, 0, 0, 8394, 8392, 1, 0, 0, 0, 8395, 911, 1, 0, 0, 0, 8396, 8399, 3, 588, 294, 0, 8397, 8399, 5, 53, 0, 0, 8398, 8396, 1, 0, 0, 0, 8398, 8397, 1, 0, 0, 0, 8399, 913, 1, 0, 0, 0, 8400, 8401, 5, 157, 0, 0, 8401, 8402, 3, 922, 461, 0, 8402, 8403, 5, 7, 0, 0, 8403, 915, 1, 0, 0, 0, 8404, 8405, 5, 78, 0, 0, 8405, 8406, 5, 7, 0, 0, 8406, 917, 1, 0, 0, 0, 8407, 8413, 7, 67, 0, 0, 8408, 8410, 5, 33, 0, 0, 8409, 8411, 5, 269, 0, 0, 8410, 8409, 1, 0, 0, 0, 8410, 8411, 1, 0, 0, 0, 8411, 8412, 1, 0, 0, 0, 8412, 8414, 5, 153, 0, 0, 8413, 8408, 1, 0, 0, 0, 8413, 8414, 1, 0, 0, 0, 8414, 8415, 1, 0, 0, 0, 8415, 8416, 5, 7, 0, 0, 8416, 919, 1, 0, 0, 0, 8417, 8418, 5, 333, 0, 0, 8418, 8419, 3, 316, 158, 0, 8419, 8420, 5, 94, 0, 0, 8420, 8421, 5, 53, 0, 0, 8421, 8422, 5, 7, 0, 0, 8422, 8430, 1, 0, 0, 0, 8423, 8426, 5, 313, 0, 0, 8424, 8427, 3, 316, 158, 0, 8425, 8427, 5, 30, 0, 0, 8426, 8424, 1, 0, 0, 0, 8426, 8425, 1, 0, 0, 0, 8427, 8428, 1, 0, 0, 0, 8428, 8430, 5, 7, 0, 0, 8429, 8417, 1, 0, 0, 0, 8429, 8423, 1, 0, 0, 0, 8430, 921, 1, 0, 0, 0, 8431, 8434, 3, 818, 409, 0, 8432, 8434, 5, 28, 0, 0, 8433, 8431, 1, 0, 0, 0, 8433, 8432, 1, 0, 0, 0, 8434, 923, 1, 0, 0, 0, 8435, 8452, 5, 517, 0, 0, 8436, 8437, 5, 102, 0, 0, 8437, 8442, 3, 926, 463, 0, 8438, 8439, 5, 82, 0, 0, 8439, 8441, 3, 926, 463, 0, 8440, 8438, 1, 0, 0, 0, 8441, 8444, 1, 0, 0, 0, 8442, 8440, 1, 0, 0, 0, 8442, 8443, 1, 0, 0, 0, 8443, 8445, 1, 0, 0, 0, 8444, 8442, 1, 0, 0, 0, 8445, 8449, 5, 93, 0, 0, 8446, 8448, 3, 846, 423, 0, 8447, 8446, 1, 0, 0, 0, 8448, 8451, 1, 0, 0, 0, 8449, 8447, 1, 0, 0, 0, 8449, 8450, 1, 0, 0, 0, 8450, 8453, 1, 0, 0, 0, 8451, 8449, 1, 0, 0, 0, 8452, 8436, 1, 0, 0, 0, 8453, 8454, 1, 0, 0, 0, 8454, 8452, 1, 0, 0, 0, 8454, 8455, 1, 0, 0, 0, 8455, 925, 1, 0, 0, 0, 8456, 8460, 3, 928, 464, 0, 8457, 8458, 5, 511, 0, 0, 8458, 8460, 3, 808, 404, 0, 8459, 8456, 1, 0, 0, 0, 8459, 8457, 1, 0, 0, 0, 8460, 927, 1, 0, 0, 0, 8461, 8464, 3, 818, 409, 0, 8462, 8464, 3, 828, 414, 0, 8463, 8461, 1, 0, 0, 0, 8463, 8462, 1, 0, 0, 0, 8464, 929, 1, 0, 0, 0, 8465, 8467, 3, 756, 378, 0, 8466, 8465, 1, 0, 0, 0, 8466, 8467, 1, 0, 0, 0, 8467, 8469, 1, 0, 0, 0, 8468, 8470, 3, 580, 290, 0, 8469, 8468, 1, 0, 0, 0, 8469, 8470, 1, 0, 0, 0, 8470, 8472, 1, 0, 0, 0, 8471, 8473, 3, 610, 305, 0, 8472, 8471, 1, 0, 0, 0, 8472, 8473, 1, 0, 0, 0, 8473, 8475, 1, 0, 0, 0, 8474, 8476, 3, 638, 319, 0, 8475, 8474, 1, 0, 0, 0, 8475, 8476, 1, 0, 0, 0, 8476, 8478, 1, 0, 0, 0, 8477, 8479, 3, 600, 300, 0, 8478, 8477, 1, 0, 0, 0, 8478, 8479, 1, 0, 0, 0, 8479, 8482, 1, 0, 0, 0, 8480, 8481, 5, 67, 0, 0, 8481, 8483, 3, 674, 337, 0, 8482, 8480, 1, 0, 0, 0, 8482, 8483, 1, 0, 0, 0, 8483, 8485, 1, 0, 0, 0, 8484, 8486, 3, 702, 351, 0, 8485, 8484, 1, 0, 0, 0, 8485, 8486, 1, 0, 0, 0, 8486, 931, 1, 0, 0, 0, 1186, 935, 942, 1062, 1064, 1073, 1078, 1084, 1119, 1129, 1135, 1140, 1147, 1152, 1159, 1170, 1178, 1182, 1194, 1200, 1206, 1210, 1215, 1219, 1232, 1242, 1244, 1250, 1255, 1268, 1271, 1276, 1281, 1292, 1296, 1308, 1312, 1315, 1319, 1331, 1349, 1356, 1364, 1369, 1376, 1384, 1390, 1398, 1406, 1410, 1424, 1429, 1434, 1446, 1452, 1464, 1469, 1479, 1485, 1490, 1498, 1503, 1510, 1515, 1520, 1530, 1535, 1540, 1547, 1551, 1565, 1571, 1577, 1582, 1589, 1601, 1609, 1617, 1633, 1642, 1651, 1660, 1664, 1676, 1684, 1694, 1714, 1719, 1722, 1729, 1732, 1736, 1740, 1743, 1748, 1753, 1757, 1766, 1772, 1776, 1785, 1788, 1794, 1803, 1815, 1819, 1823, 1828, 1831, 1837, 1839, 1841, 1845, 1851, 1855, 1860, 1865, 1869, 1872, 1879, 1892, 1905, 1929, 1939, 1946, 1951, 1955, 1962, 1967, 1970, 1972, 1977, 1981, 1985, 1989, 1994, 1997, 2001, 2004, 2008, 2016, 2021, 2024, 2028, 2034, 2043, 2047, 2053, 2055, 2064, 2069, 2081, 2086, 2090, 2094, 2099, 2103, 2106, 2109, 2112, 2115, 2118, 2123, 2126, 2129, 2132, 2135, 2138, 2144, 2148, 2151, 2154, 2157, 2160, 2162, 2169, 2177, 2187, 2192, 2202, 2205, 2210, 2215, 2220, 2223, 2228, 2237, 2239, 2243, 2246, 2250, 2255, 2260, 2264, 2267, 2271, 2274, 2279, 2282, 2287, 2290, 2294, 2297, 2300, 2305, 2308, 2316, 2328, 2332, 2339, 2344, 2347, 2350, 2353, 2358, 2369, 2375, 2379, 2382, 2385, 2390, 2397, 2400, 2404, 2412, 2417, 2420, 2423, 2430, 2435, 2444, 2447, 2450, 2455, 2458, 2470, 2480, 2497, 2501, 2505, 2507, 2524, 2526, 2542, 2553, 2556, 2559, 2568, 2577, 2593, 2596, 2599, 2607, 2611, 2618, 2627, 2631, 2637, 2641, 2644, 2647, 2650, 2653, 2659, 2663, 2668, 2672, 2675, 2678, 2681, 2686, 2692, 2696, 2700, 2704, 2710, 2712, 2717, 2723, 2729, 2733, 2748, 2753, 2756, 2758, 2761, 2765, 2769, 2772, 2775, 2783, 2789, 2791, 2797, 2802, 2807, 2811, 2818, 2820, 2831, 2870, 2880, 2882, 2885, 2889, 2893, 2903, 2905, 2911, 2913, 2922, 2934, 2948, 2953, 2956, 2963, 2968, 2976, 2978, 2984, 2989, 2993, 2998, 3004, 3011, 3017, 3019, 3028, 3034, 3042, 3048, 3053, 3058, 3066, 3081, 3083, 3087, 3091, 3094, 3097, 3106, 3109, 3112, 3118, 3124, 3128, 3140, 3146, 3149, 3154, 3158, 3165, 3175, 3177, 3201, 3213, 3218, 3220, 3224, 3227, 3230, 3240, 3243, 3253, 3258, 3263, 3266, 3269, 3277, 3283, 3290, 3298, 3301, 3312, 3316, 3322, 3329, 3332, 3341, 3355, 3358, 3372, 3383, 3386, 3398, 3403, 3416, 3421, 3434, 3443, 3446, 3449, 3456, 3459, 3471, 3477, 3479, 3487, 3495, 3503, 3515, 3520, 3531, 3542, 3550, 3558, 3565, 3572, 3574, 3577, 3582, 3587, 3606, 3615, 3618, 3645, 3654, 3657, 3661, 3665, 3669, 3676, 3680, 3684, 3688, 3692, 3697, 3701, 3706, 3712, 3717, 3724, 3728, 3734, 3738, 3743, 3751, 3757, 3762, 3769, 3774, 3778, 3783, 3789, 3796, 3801, 3808, 3813, 3820, 3824, 3832, 3836, 3838, 3841, 3846, 3856, 3871, 3874, 3882, 3889, 3894, 3900, 3904, 3911, 3916, 3919, 3922, 3926, 3935, 3953, 3956, 3988, 3993, 3999, 4019, 4024, 4030, 4033, 4037, 4041, 4047, 4050, 4054, 4058, 4063, 4066, 4069, 4072, 4085, 4091, 4099, 4106, 4111, 4114, 4121, 4124, 4132, 4135, 4140, 4147, 4150, 4170, 4182, 4185, 4191, 4196, 4205, 4213, 4218, 4224, 4231, 4239, 4242, 4253, 4255, 4269, 4275, 4283, 4285, 4291, 4295, 4298, 4301, 4306, 4311, 4315, 4318, 4321, 4324, 4327, 4335, 4346, 4349, 4352, 4357, 4360, 4364, 4368, 4374, 4382, 4385, 4398, 4403, 4405, 4410, 4417, 4424, 4433, 4441, 4449, 4456, 4464, 4471, 4479, 4483, 4487, 4489, 4495, 4500, 4504, 4511, 4516, 4521, 4526, 4528, 4538, 4548, 4564, 4582, 4594, 4601, 4616, 4621, 4624, 4629, 4634, 4639, 4642, 4645, 4650, 4657, 4661, 4666, 4673, 4677, 4683, 4692, 4701, 4713, 4715, 4728, 4734, 4738, 4740, 4747, 4760, 4767, 4769, 4785, 4789, 4793, 4798, 4803, 4808, 4813, 4816, 4828, 4881, 4890, 4894, 4903, 4907, 4916, 4920, 4925, 4928, 4932, 4937, 4939, 4948, 4953, 4964, 4968, 4982, 4990, 5028, 5030, 5049, 5052, 5079, 5083, 5087, 5091, 5095, 5098, 5113, 5120, 5134, 5147, 5172, 5191, 5206, 5222, 5229, 5240, 5243, 5262, 5265, 5278, 5282, 5302, 5314, 5318, 5340, 5344, 5354, 5358, 5364, 5368, 5372, 5376, 5383, 5388, 5399, 5403, 5406, 5411, 5417, 5428, 5432, 5435, 5439, 5443, 5446, 5456, 5459, 5463, 5468, 5474, 5477, 5482, 5485, 5492, 5494, 5500, 5504, 5513, 5518, 5520, 5530, 5533, 5538, 5546, 5549, 5554, 5556, 5558, 5564, 5581, 5587, 5600, 5606, 5610, 5615, 5645, 5660, 5665, 5669, 5682, 5686, 5688, 5697, 5703, 5705, 5709, 5712, 5715, 5718, 5721, 5723, 5726, 5730, 5738, 5743, 5746, 5752, 5756, 5760, 5765, 5767, 5771, 5775, 5782, 5788, 5792, 5794, 5796, 5809, 5817, 5825, 5836, 5845, 5850, 5854, 5858, 5865, 5868, 5870, 5878, 5882, 5885, 5892, 5899, 5904, 5911, 5914, 5916, 5919, 5925, 5930, 5934, 5941, 5951, 5958, 5961, 5964, 5968, 5979, 5982, 5985, 5988, 5991, 5998, 6001, 6004, 6011, 6023, 6030, 6032, 6037, 6042, 6044, 6050, 6057, 6062, 6067, 6071, 6075, 6079, 6081, 6085, 6089, 6092, 6095, 6097, 6107, 6109, 6114, 6118, 6123, 6127, 6134, 6139, 6143, 6146, 6152, 6155, 6174, 6181, 6185, 6188, 6192, 6196, 6199, 6202, 6207, 6216, 6223, 6227, 6231, 6235, 6238, 6240, 6245, 6249, 6254, 6260, 6267, 6272, 6277, 6286, 6293, 6301, 6312, 6317, 6321, 6324, 6328, 6333, 6337, 6342, 6350, 6361, 6366, 6370, 6373, 6376, 6378, 6381, 6384, 6387, 6391, 6395, 6399, 6401, 6410, 6415, 6421, 6425, 6427, 6434, 6439, 6445, 6447, 6451, 6458, 6463, 6466, 6472, 6476, 6482, 6491, 6497, 6499, 6504, 6507, 6516, 6523, 6525, 6532, 6537, 6540, 6550, 6561, 6566, 6570, 6578, 6588, 6595, 6601, 6612, 6618, 6628, 6637, 6641, 6644, 6646, 6648, 6652, 6660, 6663, 6668, 6673, 6680, 6682, 6688, 6692, 6695, 6700, 6703, 6705, 6711, 6720, 6726, 6729, 6737, 6740, 6744, 6750, 6752, 6755, 6759, 6764, 6771, 6778, 6780, 6786, 6788, 6793, 6795, 6799, 6808, 6812, 6820, 6822, 6836, 6839, 6847, 6856, 6862, 6867, 6875, 6877, 6882, 6886, 6891, 6896, 6902, 6918, 6920, 6929, 6944, 6949, 6952, 6958, 6963, 6976, 6981, 6985, 6992, 7011, 7023, 7028, 7036, 7038, 7040, 7049, 7052, 7057, 7062, 7065, 7076, 7084, 7089, 7091, 7094, 7098, 7109, 7130, 7138, 7151, 7161, 7167, 7173, 7176, 7179, 7205, 7207, 7228, 7238, 7251, 7256, 7260, 7262, 7274, 7281, 7287, 7293, 7297, 7308, 7318, 7322, 7327, 7330, 7333, 7342, 7353, 7355, 7359, 7364, 7373, 7378, 7386, 7396, 7404, 7408, 7411, 7418, 7426, 7430, 7437, 7446, 7455, 7458, 7470, 7479, 7486, 7495, 7505, 7510, 7514, 7516, 7519, 7524, 7529, 7537, 7545, 7548, 7555, 7563, 7571, 7579, 7596, 7603, 7611, 7628, 7634, 7640, 7648, 7654, 7659, 7667, 7672, 7675, 7684, 7691, 7696, 7700, 7705, 7711, 7716, 7724, 7779, 7786, 7792, 7794, 7796, 7798, 7804, 7808, 7812, 7823, 7826, 7830, 7834, 7838, 7841, 7844, 7847, 7856, 7861, 7865, 7898, 7908, 7912, 7918, 7923, 7932, 7940, 7951, 7959, 7968, 7977, 7982, 7986, 7996, 8001, 8009, 8014, 8017, 8024, 8030, 8038, 8046, 8049, 8056, 8058, 8061, 8067, 8076, 8080, 8094, 8097, 8099, 8105, 8115, 8117, 8119, 8127, 8130, 8133, 8143, 8151, 8157, 8163, 8170, 8174, 8178, 8181, 8184, 8190, 8197, 8200, 8208, 8210, 8219, 8224, 8226, 8233, 8239, 8242, 8254, 8261, 8263, 8267, 8273, 8278, 8282, 8285, 8288, 8297, 8300, 8304, 8308, 8310, 8313, 8316, 8322, 8329, 8336, 8342, 8344, 8348, 8353, 8371, 8376, 8378, 8387, 8394, 8398, 8410, 8413, 8426, 8429, 8433, 8442, 8449, 8454, 8459, 8463, 8466, 8469, 8472, 8475, 8478, 8482, 8485] \ No newline at end of file +[4, 1, 590, 8489, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, 409, 2, 410, 7, 410, 2, 411, 7, 411, 2, 412, 7, 412, 2, 413, 7, 413, 2, 414, 7, 414, 2, 415, 7, 415, 2, 416, 7, 416, 2, 417, 7, 417, 2, 418, 7, 418, 2, 419, 7, 419, 2, 420, 7, 420, 2, 421, 7, 421, 2, 422, 7, 422, 2, 423, 7, 423, 2, 424, 7, 424, 2, 425, 7, 425, 2, 426, 7, 426, 2, 427, 7, 427, 2, 428, 7, 428, 2, 429, 7, 429, 2, 430, 7, 430, 2, 431, 7, 431, 2, 432, 7, 432, 2, 433, 7, 433, 2, 434, 7, 434, 2, 435, 7, 435, 2, 436, 7, 436, 2, 437, 7, 437, 2, 438, 7, 438, 2, 439, 7, 439, 2, 440, 7, 440, 2, 441, 7, 441, 2, 442, 7, 442, 2, 443, 7, 443, 2, 444, 7, 444, 2, 445, 7, 445, 2, 446, 7, 446, 2, 447, 7, 447, 2, 448, 7, 448, 2, 449, 7, 449, 2, 450, 7, 450, 2, 451, 7, 451, 2, 452, 7, 452, 2, 453, 7, 453, 2, 454, 7, 454, 2, 455, 7, 455, 2, 456, 7, 456, 2, 457, 7, 457, 2, 458, 7, 458, 2, 459, 7, 459, 2, 460, 7, 460, 2, 461, 7, 461, 2, 462, 7, 462, 2, 463, 7, 463, 2, 464, 7, 464, 2, 465, 7, 465, 1, 0, 5, 0, 934, 8, 0, 10, 0, 12, 0, 937, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 943, 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, 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, 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, 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, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1063, 8, 2, 3, 2, 1065, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 1074, 8, 4, 1, 4, 5, 4, 1077, 8, 4, 10, 4, 12, 4, 1080, 9, 4, 1, 5, 1, 5, 1, 5, 3, 5, 1085, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 1120, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1130, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1136, 8, 7, 1, 7, 5, 7, 1139, 8, 7, 10, 7, 12, 7, 1142, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 1148, 8, 8, 1, 8, 5, 8, 1151, 8, 8, 10, 8, 12, 8, 1154, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 1160, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 1171, 8, 10, 1, 10, 1, 10, 1, 11, 1, 11, 5, 11, 1177, 8, 11, 10, 11, 12, 11, 1180, 9, 11, 1, 11, 3, 11, 1183, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 1195, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 1201, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1207, 8, 12, 1, 12, 1, 12, 3, 12, 1211, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1216, 8, 12, 1, 12, 1, 12, 3, 12, 1220, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1233, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1243, 8, 12, 3, 12, 1245, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 1251, 8, 13, 1, 13, 5, 13, 1254, 8, 13, 10, 13, 12, 13, 1257, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 3, 15, 1269, 8, 15, 1, 15, 3, 15, 1272, 8, 15, 1, 15, 1, 15, 1, 15, 3, 15, 1277, 8, 15, 1, 15, 5, 15, 1280, 8, 15, 10, 15, 12, 15, 1283, 9, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1293, 8, 17, 1, 18, 1, 18, 3, 18, 1297, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 1309, 8, 19, 1, 20, 1, 20, 3, 20, 1313, 8, 20, 1, 20, 3, 20, 1316, 8, 20, 1, 20, 1, 20, 3, 20, 1320, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1332, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 1350, 8, 21, 1, 22, 1, 22, 1, 22, 5, 22, 1355, 8, 22, 10, 22, 12, 22, 1358, 9, 22, 1, 23, 1, 23, 1, 23, 5, 23, 1363, 8, 23, 10, 23, 12, 23, 1366, 9, 23, 1, 24, 1, 24, 3, 24, 1370, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 1377, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 1385, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 1391, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 1399, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 1407, 8, 28, 1, 29, 1, 29, 3, 29, 1411, 8, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 1425, 8, 31, 1, 32, 1, 32, 1, 32, 3, 32, 1430, 8, 32, 1, 33, 1, 33, 1, 33, 3, 33, 1435, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 1447, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 1453, 8, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 3, 38, 1465, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1470, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1480, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1486, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1491, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1499, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1504, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1511, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1516, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1521, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1531, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1536, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1541, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1548, 8, 38, 1, 38, 1, 38, 3, 38, 1552, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1566, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1572, 8, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1578, 8, 38, 1, 38, 1, 38, 1, 38, 3, 38, 1583, 8, 38, 1, 39, 1, 39, 1, 39, 5, 39, 1588, 8, 39, 10, 39, 12, 39, 1591, 9, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 1602, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1608, 8, 41, 10, 41, 12, 41, 1611, 9, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 3, 42, 1618, 8, 42, 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, 3, 44, 1634, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 3, 46, 1643, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 1650, 8, 46, 10, 46, 12, 46, 1653, 9, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1661, 8, 46, 1, 46, 1, 46, 3, 46, 1665, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1677, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1685, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1695, 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, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1715, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1720, 8, 46, 1, 46, 3, 46, 1723, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1730, 8, 46, 1, 46, 3, 46, 1733, 8, 46, 1, 46, 1, 46, 3, 46, 1737, 8, 46, 1, 46, 1, 46, 3, 46, 1741, 8, 46, 1, 46, 3, 46, 1744, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1749, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1754, 8, 46, 1, 46, 1, 46, 3, 46, 1758, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1767, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1773, 8, 46, 1, 46, 1, 46, 3, 46, 1777, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1786, 8, 46, 1, 46, 3, 46, 1789, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1795, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1804, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 4, 46, 1814, 8, 46, 11, 46, 12, 46, 1815, 1, 46, 1, 46, 3, 46, 1820, 8, 46, 1, 46, 1, 46, 3, 46, 1824, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1829, 8, 46, 1, 46, 3, 46, 1832, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1838, 8, 46, 4, 46, 1840, 8, 46, 11, 46, 12, 46, 1841, 1, 46, 1, 46, 3, 46, 1846, 8, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1852, 8, 46, 1, 46, 1, 46, 3, 46, 1856, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1861, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 1866, 8, 46, 1, 46, 1, 46, 3, 46, 1870, 8, 46, 1, 46, 3, 46, 1873, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 1880, 8, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1891, 8, 50, 10, 50, 12, 50, 1894, 9, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 1906, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 1930, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 5, 54, 1938, 8, 54, 10, 54, 12, 54, 1941, 9, 54, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1947, 8, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1952, 8, 55, 1, 55, 1, 55, 3, 55, 1956, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1963, 8, 55, 1, 55, 1, 55, 1, 55, 3, 55, 1968, 8, 55, 1, 55, 3, 55, 1971, 8, 55, 3, 55, 1973, 8, 55, 1, 56, 1, 56, 1, 56, 3, 56, 1978, 8, 56, 1, 57, 1, 57, 3, 57, 1982, 8, 57, 1, 57, 1, 57, 3, 57, 1986, 8, 57, 1, 57, 1, 57, 3, 57, 1990, 8, 57, 1, 57, 1, 57, 1, 57, 3, 57, 1995, 8, 57, 1, 57, 3, 57, 1998, 8, 57, 1, 57, 1, 57, 3, 57, 2002, 8, 57, 1, 57, 3, 57, 2005, 8, 57, 1, 57, 1, 57, 3, 57, 2009, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 2017, 8, 57, 1, 57, 1, 57, 1, 57, 3, 57, 2022, 8, 57, 1, 57, 3, 57, 2025, 8, 57, 1, 57, 1, 57, 3, 57, 2029, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2035, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2044, 8, 58, 1, 58, 1, 58, 3, 58, 2048, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2054, 8, 58, 10, 58, 12, 58, 2057, 9, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 2063, 8, 58, 10, 58, 12, 58, 2066, 9, 58, 1, 58, 1, 58, 3, 58, 2070, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 2080, 8, 59, 10, 59, 12, 59, 2083, 9, 59, 1, 59, 1, 59, 3, 59, 2087, 8, 59, 1, 60, 1, 60, 3, 60, 2091, 8, 60, 1, 60, 1, 60, 3, 60, 2095, 8, 60, 1, 60, 1, 60, 1, 60, 3, 60, 2100, 8, 60, 1, 60, 1, 60, 3, 60, 2104, 8, 60, 1, 60, 3, 60, 2107, 8, 60, 1, 60, 3, 60, 2110, 8, 60, 1, 60, 3, 60, 2113, 8, 60, 1, 60, 3, 60, 2116, 8, 60, 1, 60, 3, 60, 2119, 8, 60, 1, 60, 1, 60, 1, 60, 3, 60, 2124, 8, 60, 1, 60, 3, 60, 2127, 8, 60, 1, 60, 3, 60, 2130, 8, 60, 1, 60, 3, 60, 2133, 8, 60, 1, 60, 3, 60, 2136, 8, 60, 1, 60, 3, 60, 2139, 8, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 2145, 8, 60, 1, 60, 1, 60, 3, 60, 2149, 8, 60, 1, 60, 3, 60, 2152, 8, 60, 1, 60, 3, 60, 2155, 8, 60, 1, 60, 3, 60, 2158, 8, 60, 1, 60, 3, 60, 2161, 8, 60, 3, 60, 2163, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 2170, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 2176, 8, 62, 10, 62, 12, 62, 2179, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 5, 63, 2186, 8, 63, 10, 63, 12, 63, 2189, 9, 63, 1, 64, 1, 64, 3, 64, 2193, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 5, 64, 2201, 8, 64, 10, 64, 12, 64, 2204, 9, 64, 3, 64, 2206, 8, 64, 1, 65, 1, 65, 1, 65, 3, 65, 2211, 8, 65, 1, 65, 5, 65, 2214, 8, 65, 10, 65, 12, 65, 2217, 9, 65, 1, 65, 1, 65, 3, 65, 2221, 8, 65, 1, 65, 3, 65, 2224, 8, 65, 1, 66, 1, 66, 1, 66, 3, 66, 2229, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 2238, 8, 66, 3, 66, 2240, 8, 66, 1, 66, 1, 66, 3, 66, 2244, 8, 66, 1, 66, 3, 66, 2247, 8, 66, 1, 66, 1, 66, 3, 66, 2251, 8, 66, 1, 66, 5, 66, 2254, 8, 66, 10, 66, 12, 66, 2257, 9, 66, 1, 67, 1, 67, 3, 67, 2261, 8, 67, 1, 67, 1, 67, 3, 67, 2265, 8, 67, 1, 67, 3, 67, 2268, 8, 67, 1, 67, 1, 67, 3, 67, 2272, 8, 67, 1, 68, 3, 68, 2275, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2280, 8, 68, 1, 68, 3, 68, 2283, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2288, 8, 68, 1, 68, 3, 68, 2291, 8, 68, 1, 68, 1, 68, 3, 68, 2295, 8, 68, 1, 68, 3, 68, 2298, 8, 68, 1, 68, 3, 68, 2301, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2306, 8, 68, 1, 68, 3, 68, 2309, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2317, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 4, 68, 2327, 8, 68, 11, 68, 12, 68, 2328, 1, 68, 1, 68, 3, 68, 2333, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2340, 8, 68, 1, 68, 1, 68, 1, 68, 3, 68, 2345, 8, 68, 1, 68, 3, 68, 2348, 8, 68, 1, 68, 3, 68, 2351, 8, 68, 1, 68, 3, 68, 2354, 8, 68, 1, 69, 1, 69, 1, 69, 3, 69, 2359, 8, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2368, 8, 71, 10, 71, 12, 71, 2371, 9, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2376, 8, 71, 1, 71, 1, 71, 3, 71, 2380, 8, 71, 1, 71, 3, 71, 2383, 8, 71, 1, 71, 3, 71, 2386, 8, 71, 1, 71, 5, 71, 2389, 8, 71, 10, 71, 12, 71, 2392, 9, 71, 1, 71, 1, 71, 5, 71, 2396, 8, 71, 10, 71, 12, 71, 2399, 9, 71, 3, 71, 2401, 8, 71, 1, 71, 1, 71, 3, 71, 2405, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2411, 8, 71, 10, 71, 12, 71, 2414, 9, 71, 1, 71, 1, 71, 3, 71, 2418, 8, 71, 1, 71, 3, 71, 2421, 8, 71, 1, 71, 3, 71, 2424, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2431, 8, 71, 1, 71, 5, 71, 2434, 8, 71, 10, 71, 12, 71, 2437, 9, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 2445, 8, 71, 1, 71, 3, 71, 2448, 8, 71, 1, 71, 3, 71, 2451, 8, 71, 1, 71, 5, 71, 2454, 8, 71, 10, 71, 12, 71, 2457, 9, 71, 3, 71, 2459, 8, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 5, 73, 2469, 8, 73, 10, 73, 12, 73, 2472, 9, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 5, 74, 2479, 8, 74, 10, 74, 12, 74, 2482, 9, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 3, 77, 2498, 8, 77, 1, 78, 1, 78, 3, 78, 2502, 8, 78, 1, 78, 1, 78, 3, 78, 2506, 8, 78, 3, 78, 2508, 8, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 2525, 8, 81, 3, 81, 2527, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 5, 83, 2541, 8, 83, 10, 83, 12, 83, 2544, 9, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 2554, 8, 84, 1, 84, 3, 84, 2557, 8, 84, 1, 84, 3, 84, 2560, 8, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 2569, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 2578, 8, 87, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 3, 91, 2594, 8, 91, 1, 91, 3, 91, 2597, 8, 91, 1, 91, 3, 91, 2600, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 5, 91, 2606, 8, 91, 10, 91, 12, 91, 2609, 9, 91, 1, 91, 3, 91, 2612, 8, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 2619, 8, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 3, 93, 2628, 8, 93, 1, 93, 1, 93, 3, 93, 2632, 8, 93, 1, 93, 1, 93, 1, 93, 1, 93, 3, 93, 2638, 8, 93, 1, 94, 1, 94, 3, 94, 2642, 8, 94, 1, 94, 3, 94, 2645, 8, 94, 1, 94, 3, 94, 2648, 8, 94, 1, 94, 3, 94, 2651, 8, 94, 1, 94, 3, 94, 2654, 8, 94, 1, 95, 1, 95, 1, 95, 1, 95, 3, 95, 2660, 8, 95, 1, 96, 1, 96, 3, 96, 2664, 8, 96, 1, 96, 1, 96, 1, 96, 3, 96, 2669, 8, 96, 1, 96, 1, 96, 3, 96, 2673, 8, 96, 1, 96, 3, 96, 2676, 8, 96, 1, 96, 3, 96, 2679, 8, 96, 1, 96, 3, 96, 2682, 8, 96, 1, 96, 1, 96, 1, 96, 3, 96, 2687, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2693, 8, 97, 1, 97, 1, 97, 3, 97, 2697, 8, 97, 1, 98, 1, 98, 3, 98, 2701, 8, 98, 1, 98, 1, 98, 3, 98, 2705, 8, 98, 1, 98, 1, 98, 4, 98, 2709, 8, 98, 11, 98, 12, 98, 2710, 3, 98, 2713, 8, 98, 1, 99, 1, 99, 1, 99, 3, 99, 2718, 8, 99, 1, 99, 1, 99, 4, 99, 2722, 8, 99, 11, 99, 12, 99, 2723, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 2730, 8, 100, 1, 100, 1, 100, 3, 100, 2734, 8, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 3, 100, 2749, 8, 100, 1, 100, 1, 100, 1, 100, 3, 100, 2754, 8, 100, 1, 100, 3, 100, 2757, 8, 100, 3, 100, 2759, 8, 100, 1, 101, 3, 101, 2762, 8, 101, 1, 101, 1, 101, 3, 101, 2766, 8, 101, 1, 102, 1, 102, 3, 102, 2770, 8, 102, 1, 102, 3, 102, 2773, 8, 102, 1, 102, 3, 102, 2776, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2784, 8, 102, 1, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2790, 8, 102, 3, 102, 2792, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 2798, 8, 103, 1, 103, 1, 103, 1, 103, 3, 103, 2803, 8, 103, 1, 104, 1, 104, 1, 104, 3, 104, 2808, 8, 104, 1, 104, 1, 104, 3, 104, 2812, 8, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 2819, 8, 104, 10, 104, 12, 104, 2822, 9, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 5, 105, 2830, 8, 105, 10, 105, 12, 105, 2833, 9, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 3, 106, 2871, 8, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 4, 107, 2879, 8, 107, 11, 107, 12, 107, 2880, 3, 107, 2883, 8, 107, 1, 107, 3, 107, 2886, 8, 107, 1, 108, 1, 108, 3, 108, 2890, 8, 108, 1, 108, 1, 108, 3, 108, 2894, 8, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 4, 109, 2902, 8, 109, 11, 109, 12, 109, 2903, 3, 109, 2906, 8, 109, 1, 109, 1, 109, 4, 109, 2910, 8, 109, 11, 109, 12, 109, 2911, 3, 109, 2914, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 2921, 8, 110, 10, 110, 12, 110, 2924, 9, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 2933, 8, 111, 10, 111, 12, 111, 2936, 9, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 2949, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 2954, 8, 114, 1, 114, 3, 114, 2957, 8, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 2964, 8, 114, 1, 115, 1, 115, 1, 115, 3, 115, 2969, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 2977, 8, 116, 3, 116, 2979, 8, 116, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 2985, 8, 117, 1, 117, 1, 117, 1, 117, 3, 117, 2990, 8, 117, 1, 117, 1, 117, 3, 117, 2994, 8, 117, 1, 117, 1, 117, 1, 117, 3, 117, 2999, 8, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 3005, 8, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 3012, 8, 117, 1, 117, 1, 117, 1, 117, 1, 117, 3, 117, 3018, 8, 117, 3, 117, 3020, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3029, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3035, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3043, 8, 118, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 3049, 8, 119, 1, 119, 1, 119, 1, 119, 3, 119, 3054, 8, 119, 1, 119, 1, 119, 1, 119, 3, 119, 3059, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 3, 120, 3067, 8, 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, 3, 121, 3082, 8, 121, 3, 121, 3084, 8, 121, 1, 121, 1, 121, 3, 121, 3088, 8, 121, 1, 121, 1, 121, 3, 121, 3092, 8, 121, 1, 121, 3, 121, 3095, 8, 121, 1, 121, 3, 121, 3098, 8, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 3, 122, 3107, 8, 122, 1, 122, 3, 122, 3110, 8, 122, 1, 122, 3, 122, 3113, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 3119, 8, 123, 1, 123, 1, 123, 5, 123, 3123, 8, 123, 10, 123, 12, 123, 3126, 9, 123, 1, 123, 3, 123, 3129, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 3141, 8, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 3147, 8, 123, 1, 124, 3, 124, 3150, 8, 124, 1, 124, 1, 124, 1, 124, 3, 124, 3155, 8, 124, 1, 124, 1, 124, 3, 124, 3159, 8, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 3166, 8, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 3176, 8, 124, 3, 124, 3178, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 3, 128, 3202, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3214, 8, 128, 1, 128, 4, 128, 3217, 8, 128, 11, 128, 12, 128, 3218, 3, 128, 3221, 8, 128, 1, 128, 1, 128, 3, 128, 3225, 8, 128, 1, 128, 3, 128, 3228, 8, 128, 1, 128, 3, 128, 3231, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3241, 8, 128, 1, 128, 3, 128, 3244, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3254, 8, 128, 1, 128, 5, 128, 3257, 8, 128, 10, 128, 12, 128, 3260, 9, 128, 1, 128, 1, 128, 3, 128, 3264, 8, 128, 1, 128, 3, 128, 3267, 8, 128, 1, 128, 3, 128, 3270, 8, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 3, 128, 3278, 8, 128, 1, 129, 1, 129, 1, 129, 1, 129, 3, 129, 3284, 8, 129, 1, 130, 1, 130, 1, 130, 5, 130, 3289, 8, 130, 10, 130, 12, 130, 3292, 9, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 3299, 8, 131, 1, 131, 3, 131, 3302, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 3313, 8, 133, 1, 134, 1, 134, 3, 134, 3317, 8, 134, 1, 134, 1, 134, 5, 134, 3321, 8, 134, 10, 134, 12, 134, 3324, 9, 134, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 3330, 8, 135, 1, 136, 3, 136, 3333, 8, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 3, 136, 3342, 8, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 5, 137, 3354, 8, 137, 10, 137, 12, 137, 3357, 9, 137, 3, 137, 3359, 8, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 5, 138, 3371, 8, 138, 10, 138, 12, 138, 3374, 9, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3384, 8, 139, 1, 139, 3, 139, 3387, 8, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 5, 140, 3397, 8, 140, 10, 140, 12, 140, 3400, 9, 140, 1, 141, 1, 141, 3, 141, 3404, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 5, 141, 3415, 8, 141, 10, 141, 12, 141, 3418, 9, 141, 1, 141, 1, 141, 3, 141, 3422, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3435, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 5, 141, 3442, 8, 141, 10, 141, 12, 141, 3445, 9, 141, 3, 141, 3447, 8, 141, 1, 141, 3, 141, 3450, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3457, 8, 141, 1, 141, 3, 141, 3460, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3472, 8, 141, 1, 141, 1, 141, 1, 141, 1, 141, 3, 141, 3478, 8, 141, 3, 141, 3480, 8, 141, 1, 142, 1, 142, 1, 142, 1, 142, 5, 142, 3486, 8, 142, 10, 142, 12, 142, 3489, 9, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 3, 143, 3496, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 3, 144, 3504, 8, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3516, 8, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3521, 8, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3532, 8, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 3543, 8, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 3, 148, 3551, 8, 148, 1, 148, 1, 148, 1, 148, 1, 148, 5, 148, 3557, 8, 148, 10, 148, 12, 148, 3560, 9, 148, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3566, 8, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3573, 8, 149, 3, 149, 3575, 8, 149, 1, 149, 3, 149, 3578, 8, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3583, 8, 149, 1, 149, 1, 149, 1, 149, 3, 149, 3588, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 5, 151, 3605, 8, 151, 10, 151, 12, 151, 3608, 9, 151, 1, 151, 1, 151, 1, 151, 1, 151, 5, 151, 3614, 8, 151, 10, 151, 12, 151, 3617, 9, 151, 3, 151, 3619, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3646, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3655, 8, 154, 1, 154, 3, 154, 3658, 8, 154, 1, 154, 1, 154, 3, 154, 3662, 8, 154, 1, 154, 1, 154, 3, 154, 3666, 8, 154, 1, 154, 1, 154, 3, 154, 3670, 8, 154, 1, 154, 1, 154, 1, 154, 5, 154, 3675, 8, 154, 10, 154, 12, 154, 3678, 9, 154, 1, 154, 3, 154, 3681, 8, 154, 1, 154, 1, 154, 3, 154, 3685, 8, 154, 1, 154, 1, 154, 3, 154, 3689, 8, 154, 1, 154, 1, 154, 3, 154, 3693, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3698, 8, 154, 1, 154, 1, 154, 3, 154, 3702, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3707, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3713, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3718, 8, 154, 1, 154, 1, 154, 1, 154, 5, 154, 3723, 8, 154, 10, 154, 12, 154, 3726, 9, 154, 1, 154, 3, 154, 3729, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3735, 8, 154, 1, 154, 1, 154, 3, 154, 3739, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3744, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3752, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3758, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3763, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3770, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3775, 8, 154, 1, 154, 1, 154, 3, 154, 3779, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3784, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3790, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3797, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3802, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3809, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3814, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3821, 8, 154, 1, 154, 1, 154, 3, 154, 3825, 8, 154, 1, 154, 1, 154, 1, 154, 1, 154, 5, 154, 3831, 8, 154, 10, 154, 12, 154, 3834, 9, 154, 1, 154, 3, 154, 3837, 8, 154, 3, 154, 3839, 8, 154, 1, 155, 3, 155, 3842, 8, 155, 1, 155, 1, 155, 1, 155, 3, 155, 3847, 8, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 3, 155, 3857, 8, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 3872, 8, 156, 1, 156, 3, 156, 3875, 8, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 3, 156, 3883, 8, 156, 1, 157, 1, 157, 1, 157, 5, 157, 3888, 8, 157, 10, 157, 12, 157, 3891, 9, 157, 1, 158, 1, 158, 3, 158, 3895, 8, 158, 1, 159, 1, 159, 4, 159, 3899, 8, 159, 11, 159, 12, 159, 3900, 1, 160, 1, 160, 3, 160, 3905, 8, 160, 1, 160, 1, 160, 1, 160, 5, 160, 3910, 8, 160, 10, 160, 12, 160, 3913, 9, 160, 1, 160, 1, 160, 3, 160, 3917, 8, 160, 1, 160, 3, 160, 3920, 8, 160, 1, 161, 3, 161, 3923, 8, 161, 1, 161, 1, 161, 3, 161, 3927, 8, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3936, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3954, 8, 162, 1, 162, 3, 162, 3957, 8, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3989, 8, 162, 1, 162, 1, 162, 1, 162, 3, 162, 3994, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 4000, 8, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 4020, 8, 163, 1, 163, 1, 163, 1, 163, 3, 163, 4025, 8, 163, 1, 164, 1, 164, 1, 164, 1, 165, 3, 165, 4031, 8, 165, 1, 165, 3, 165, 4034, 8, 165, 1, 165, 1, 165, 3, 165, 4038, 8, 165, 1, 165, 1, 165, 3, 165, 4042, 8, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 4048, 8, 165, 1, 165, 3, 165, 4051, 8, 165, 1, 165, 1, 165, 3, 165, 4055, 8, 165, 1, 165, 1, 165, 3, 165, 4059, 8, 165, 1, 165, 1, 165, 1, 165, 3, 165, 4064, 8, 165, 1, 165, 3, 165, 4067, 8, 165, 1, 165, 3, 165, 4070, 8, 165, 1, 165, 3, 165, 4073, 8, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 4086, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 4092, 8, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 4100, 8, 168, 1, 169, 1, 169, 1, 169, 5, 169, 4105, 8, 169, 10, 169, 12, 169, 4108, 9, 169, 1, 169, 1, 169, 3, 169, 4112, 8, 169, 1, 169, 3, 169, 4115, 8, 169, 1, 169, 1, 169, 1, 169, 5, 169, 4120, 8, 169, 10, 169, 12, 169, 4123, 9, 169, 3, 169, 4125, 8, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 4133, 8, 171, 1, 171, 3, 171, 4136, 8, 171, 1, 172, 1, 172, 1, 172, 3, 172, 4141, 8, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 4148, 8, 172, 1, 172, 3, 172, 4151, 8, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 5, 172, 4169, 8, 172, 10, 172, 12, 172, 4172, 9, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 4183, 8, 172, 1, 173, 3, 173, 4186, 8, 173, 1, 173, 1, 173, 1, 173, 1, 173, 3, 173, 4192, 8, 173, 1, 173, 5, 173, 4195, 8, 173, 10, 173, 12, 173, 4198, 9, 173, 1, 174, 1, 174, 1, 174, 1, 174, 5, 174, 4204, 8, 174, 10, 174, 12, 174, 4207, 9, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 3, 174, 4214, 8, 174, 1, 174, 1, 174, 1, 174, 3, 174, 4219, 8, 174, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 4225, 8, 175, 1, 175, 1, 175, 1, 175, 5, 175, 4230, 8, 175, 10, 175, 12, 175, 4233, 9, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 3, 175, 4240, 8, 175, 1, 175, 3, 175, 4243, 8, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 5, 176, 4254, 8, 176, 10, 176, 12, 176, 4257, 9, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 4270, 8, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 4276, 8, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 3, 177, 4284, 8, 177, 3, 177, 4286, 8, 177, 1, 178, 1, 178, 1, 179, 1, 179, 3, 179, 4292, 8, 179, 1, 179, 1, 179, 3, 179, 4296, 8, 179, 1, 179, 3, 179, 4299, 8, 179, 1, 179, 3, 179, 4302, 8, 179, 1, 179, 1, 179, 1, 179, 3, 179, 4307, 8, 179, 1, 179, 1, 179, 1, 179, 3, 179, 4312, 8, 179, 1, 179, 1, 179, 3, 179, 4316, 8, 179, 1, 179, 3, 179, 4319, 8, 179, 1, 179, 3, 179, 4322, 8, 179, 1, 179, 3, 179, 4325, 8, 179, 1, 179, 3, 179, 4328, 8, 179, 1, 180, 1, 180, 1, 180, 1, 180, 5, 180, 4334, 8, 180, 10, 180, 12, 180, 4337, 9, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 4347, 8, 181, 1, 181, 3, 181, 4350, 8, 181, 1, 181, 3, 181, 4353, 8, 181, 1, 181, 1, 181, 1, 181, 3, 181, 4358, 8, 181, 1, 181, 3, 181, 4361, 8, 181, 1, 181, 1, 181, 3, 181, 4365, 8, 181, 1, 182, 1, 182, 3, 182, 4369, 8, 182, 1, 182, 1, 182, 1, 182, 1, 182, 3, 182, 4375, 8, 182, 1, 182, 1, 182, 1, 182, 1, 182, 5, 182, 4381, 8, 182, 10, 182, 12, 182, 4384, 9, 182, 3, 182, 4386, 8, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 5, 182, 4397, 8, 182, 10, 182, 12, 182, 4400, 9, 182, 1, 182, 1, 182, 3, 182, 4404, 8, 182, 3, 182, 4406, 8, 182, 1, 182, 4, 182, 4409, 8, 182, 11, 182, 12, 182, 4410, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 3, 182, 4418, 8, 182, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 3, 184, 4425, 8, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 5, 185, 4432, 8, 185, 10, 185, 12, 185, 4435, 9, 185, 1, 186, 1, 186, 1, 186, 5, 186, 4440, 8, 186, 10, 186, 12, 186, 4443, 9, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 3, 187, 4450, 8, 187, 1, 188, 1, 188, 1, 188, 5, 188, 4455, 8, 188, 10, 188, 12, 188, 4458, 9, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 4465, 8, 189, 1, 190, 1, 190, 1, 190, 5, 190, 4470, 8, 190, 10, 190, 12, 190, 4473, 9, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 3, 191, 4480, 8, 191, 1, 192, 1, 192, 3, 192, 4484, 8, 192, 1, 192, 1, 192, 3, 192, 4488, 8, 192, 3, 192, 4490, 8, 192, 1, 192, 1, 192, 1, 193, 1, 193, 3, 193, 4496, 8, 193, 1, 193, 1, 193, 1, 193, 3, 193, 4501, 8, 193, 1, 194, 1, 194, 3, 194, 4505, 8, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 4512, 8, 194, 1, 195, 1, 195, 1, 195, 3, 195, 4517, 8, 195, 1, 196, 1, 196, 1, 196, 3, 196, 4522, 8, 196, 1, 196, 1, 196, 1, 196, 3, 196, 4527, 8, 196, 3, 196, 4529, 8, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 3, 198, 4539, 8, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 4549, 8, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 3, 198, 4565, 8, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 4581, 8, 199, 10, 199, 12, 199, 4584, 9, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 3, 199, 4595, 8, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 3, 199, 4602, 8, 199, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 3, 202, 4617, 8, 202, 1, 202, 4, 202, 4620, 8, 202, 11, 202, 12, 202, 4621, 1, 202, 3, 202, 4625, 8, 202, 1, 203, 1, 203, 1, 203, 3, 203, 4630, 8, 203, 1, 203, 1, 203, 1, 203, 3, 203, 4635, 8, 203, 1, 203, 1, 203, 1, 203, 3, 203, 4640, 8, 203, 1, 203, 3, 203, 4643, 8, 203, 1, 203, 3, 203, 4646, 8, 203, 1, 204, 1, 204, 1, 204, 3, 204, 4651, 8, 204, 1, 204, 1, 204, 1, 204, 5, 204, 4656, 8, 204, 10, 204, 12, 204, 4659, 9, 204, 1, 204, 3, 204, 4662, 8, 204, 1, 205, 1, 205, 1, 205, 3, 205, 4667, 8, 205, 1, 205, 1, 205, 1, 205, 5, 205, 4672, 8, 205, 10, 205, 12, 205, 4675, 9, 205, 1, 205, 3, 205, 4678, 8, 205, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 4684, 8, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 3, 206, 4693, 8, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 5, 207, 4700, 8, 207, 10, 207, 12, 207, 4703, 9, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 4, 209, 4714, 8, 209, 11, 209, 12, 209, 4715, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 4729, 8, 210, 1, 210, 1, 210, 1, 210, 1, 210, 3, 210, 4735, 8, 210, 1, 210, 1, 210, 3, 210, 4739, 8, 210, 3, 210, 4741, 8, 210, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 3, 212, 4748, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 4761, 8, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 3, 212, 4768, 8, 212, 3, 212, 4770, 8, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 5, 214, 4784, 8, 214, 10, 214, 12, 214, 4787, 9, 214, 1, 214, 3, 214, 4790, 8, 214, 1, 214, 1, 214, 3, 214, 4794, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4799, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4804, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4809, 8, 214, 1, 214, 1, 214, 1, 214, 3, 214, 4814, 8, 214, 1, 214, 3, 214, 4817, 8, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4829, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4882, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4891, 8, 216, 1, 216, 1, 216, 3, 216, 4895, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4904, 8, 216, 1, 216, 1, 216, 3, 216, 4908, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4917, 8, 216, 1, 216, 1, 216, 3, 216, 4921, 8, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4926, 8, 216, 1, 216, 3, 216, 4929, 8, 216, 1, 216, 1, 216, 3, 216, 4933, 8, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4938, 8, 216, 3, 216, 4940, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4949, 8, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4954, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4965, 8, 216, 1, 216, 1, 216, 3, 216, 4969, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4983, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 4991, 8, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 3, 216, 5029, 8, 216, 3, 216, 5031, 8, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 3, 217, 5050, 8, 217, 1, 217, 3, 217, 5053, 8, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 5080, 8, 218, 1, 218, 1, 218, 3, 218, 5084, 8, 218, 1, 218, 1, 218, 3, 218, 5088, 8, 218, 1, 218, 1, 218, 3, 218, 5092, 8, 218, 1, 218, 1, 218, 3, 218, 5096, 8, 218, 1, 218, 3, 218, 5099, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 5114, 8, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 3, 218, 5121, 8, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 5, 220, 5133, 8, 220, 10, 220, 12, 220, 5136, 9, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 3, 221, 5148, 8, 221, 1, 222, 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, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5173, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5192, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5207, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5223, 8, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 3, 223, 5230, 8, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 3, 224, 5241, 8, 224, 1, 224, 3, 224, 5244, 8, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 5, 225, 5261, 8, 225, 10, 225, 12, 225, 5264, 9, 225, 3, 225, 5266, 8, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 5, 226, 5277, 8, 226, 10, 226, 12, 226, 5280, 9, 226, 1, 226, 3, 226, 5283, 8, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 3, 227, 5303, 8, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 5, 227, 5313, 8, 227, 10, 227, 12, 227, 5316, 9, 227, 1, 227, 3, 227, 5319, 8, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 3, 227, 5341, 8, 227, 1, 228, 1, 228, 3, 228, 5345, 8, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 3, 228, 5355, 8, 228, 1, 228, 1, 228, 3, 228, 5359, 8, 228, 1, 228, 1, 228, 1, 228, 1, 228, 3, 228, 5365, 8, 228, 1, 228, 1, 228, 3, 228, 5369, 8, 228, 5, 228, 5371, 8, 228, 10, 228, 12, 228, 5374, 9, 228, 1, 228, 3, 228, 5377, 8, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 3, 229, 5384, 8, 229, 1, 230, 1, 230, 1, 230, 3, 230, 5389, 8, 230, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 3, 233, 5400, 8, 233, 1, 234, 1, 234, 3, 234, 5404, 8, 234, 1, 234, 3, 234, 5407, 8, 234, 1, 234, 1, 234, 1, 234, 3, 234, 5412, 8, 234, 1, 234, 1, 234, 1, 234, 1, 234, 3, 234, 5418, 8, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 3, 234, 5429, 8, 234, 1, 234, 1, 234, 3, 234, 5433, 8, 234, 1, 234, 3, 234, 5436, 8, 234, 1, 234, 1, 234, 3, 234, 5440, 8, 234, 1, 234, 1, 234, 3, 234, 5444, 8, 234, 1, 234, 3, 234, 5447, 8, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 3, 236, 5457, 8, 236, 1, 236, 3, 236, 5460, 8, 236, 1, 237, 1, 237, 3, 237, 5464, 8, 237, 1, 237, 5, 237, 5467, 8, 237, 10, 237, 12, 237, 5470, 9, 237, 1, 238, 1, 238, 1, 238, 3, 238, 5475, 8, 238, 1, 238, 3, 238, 5478, 8, 238, 1, 238, 1, 238, 1, 238, 3, 238, 5483, 8, 238, 1, 238, 3, 238, 5486, 8, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 3, 238, 5493, 8, 238, 3, 238, 5495, 8, 238, 1, 238, 1, 238, 1, 238, 1, 238, 3, 238, 5501, 8, 238, 1, 238, 1, 238, 3, 238, 5505, 8, 238, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 3, 240, 5514, 8, 240, 1, 240, 4, 240, 5517, 8, 240, 11, 240, 12, 240, 5518, 3, 240, 5521, 8, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 3, 241, 5531, 8, 241, 1, 241, 3, 241, 5534, 8, 241, 1, 241, 1, 241, 1, 241, 3, 241, 5539, 8, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 3, 242, 5547, 8, 242, 1, 242, 3, 242, 5550, 8, 242, 1, 242, 4, 242, 5553, 8, 242, 11, 242, 12, 242, 5554, 3, 242, 5557, 8, 242, 3, 242, 5559, 8, 242, 1, 243, 1, 243, 1, 243, 1, 243, 3, 243, 5565, 8, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 3, 246, 5582, 8, 246, 1, 246, 1, 246, 5, 246, 5586, 8, 246, 10, 246, 12, 246, 5589, 9, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 3, 247, 5601, 8, 247, 1, 247, 1, 247, 1, 247, 1, 247, 3, 247, 5607, 8, 247, 1, 247, 1, 247, 3, 247, 5611, 8, 247, 1, 247, 1, 247, 1, 247, 3, 247, 5616, 8, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 3, 249, 5646, 8, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 3, 249, 5661, 8, 249, 1, 249, 1, 249, 1, 249, 3, 249, 5666, 8, 249, 1, 250, 1, 250, 3, 250, 5670, 8, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 3, 251, 5683, 8, 251, 1, 251, 1, 251, 3, 251, 5687, 8, 251, 3, 251, 5689, 8, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 5, 251, 5696, 8, 251, 10, 251, 12, 251, 5699, 9, 251, 1, 251, 1, 251, 1, 251, 3, 251, 5704, 8, 251, 3, 251, 5706, 8, 251, 1, 252, 1, 252, 3, 252, 5710, 8, 252, 1, 252, 3, 252, 5713, 8, 252, 1, 252, 3, 252, 5716, 8, 252, 1, 252, 3, 252, 5719, 8, 252, 1, 252, 3, 252, 5722, 8, 252, 3, 252, 5724, 8, 252, 1, 252, 3, 252, 5727, 8, 252, 1, 253, 1, 253, 3, 253, 5731, 8, 253, 1, 253, 1, 253, 1, 253, 1, 253, 5, 253, 5737, 8, 253, 10, 253, 12, 253, 5740, 9, 253, 1, 253, 1, 253, 3, 253, 5744, 8, 253, 1, 253, 3, 253, 5747, 8, 253, 1, 254, 1, 254, 1, 255, 1, 255, 3, 255, 5753, 8, 255, 1, 255, 1, 255, 3, 255, 5757, 8, 255, 1, 256, 1, 256, 3, 256, 5761, 8, 256, 1, 256, 1, 256, 1, 256, 3, 256, 5766, 8, 256, 3, 256, 5768, 8, 256, 1, 257, 1, 257, 3, 257, 5772, 8, 257, 1, 258, 1, 258, 3, 258, 5776, 8, 258, 1, 259, 1, 259, 1, 259, 5, 259, 5781, 8, 259, 10, 259, 12, 259, 5784, 9, 259, 1, 260, 1, 260, 1, 260, 3, 260, 5789, 8, 260, 1, 260, 1, 260, 3, 260, 5793, 8, 260, 3, 260, 5795, 8, 260, 3, 260, 5797, 8, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 3, 261, 5810, 8, 261, 1, 262, 1, 262, 1, 262, 1, 262, 5, 262, 5816, 8, 262, 10, 262, 12, 262, 5819, 9, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 3, 263, 5826, 8, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 5, 264, 5835, 8, 264, 10, 264, 12, 264, 5838, 9, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 3, 265, 5846, 8, 265, 1, 266, 1, 266, 1, 266, 3, 266, 5851, 8, 266, 1, 266, 1, 266, 3, 266, 5855, 8, 266, 1, 266, 1, 266, 3, 266, 5859, 8, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 3, 266, 5866, 8, 266, 1, 266, 3, 266, 5869, 8, 266, 3, 266, 5871, 8, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 3, 268, 5879, 8, 268, 1, 268, 1, 268, 3, 268, 5883, 8, 268, 1, 269, 3, 269, 5886, 8, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5893, 8, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5900, 8, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5905, 8, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 3, 269, 5912, 8, 269, 1, 269, 3, 269, 5915, 8, 269, 3, 269, 5917, 8, 269, 1, 269, 3, 269, 5920, 8, 269, 1, 270, 1, 270, 1, 270, 1, 270, 3, 270, 5926, 8, 270, 1, 270, 1, 270, 1, 270, 3, 270, 5931, 8, 270, 1, 270, 1, 270, 3, 270, 5935, 8, 270, 1, 271, 1, 271, 1, 271, 5, 271, 5940, 8, 271, 10, 271, 12, 271, 5943, 9, 271, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 274, 3, 274, 5952, 8, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 3, 274, 5959, 8, 274, 1, 274, 3, 274, 5962, 8, 274, 1, 274, 3, 274, 5965, 8, 274, 1, 275, 1, 275, 3, 275, 5969, 8, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 3, 275, 5980, 8, 275, 1, 275, 3, 275, 5983, 8, 275, 1, 275, 3, 275, 5986, 8, 275, 1, 275, 3, 275, 5989, 8, 275, 1, 276, 3, 276, 5992, 8, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 3, 276, 5999, 8, 276, 1, 276, 3, 276, 6002, 8, 276, 1, 276, 3, 276, 6005, 8, 276, 1, 277, 1, 277, 1, 277, 5, 277, 6010, 8, 277, 10, 277, 12, 277, 6013, 9, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 3, 278, 6024, 8, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 3, 278, 6031, 8, 278, 3, 278, 6033, 8, 278, 1, 279, 1, 279, 1, 279, 3, 279, 6038, 8, 279, 1, 279, 1, 279, 1, 279, 5, 279, 6043, 8, 279, 10, 279, 12, 279, 6046, 9, 279, 1, 279, 1, 279, 1, 279, 3, 279, 6051, 8, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 3, 280, 6058, 8, 280, 1, 281, 1, 281, 1, 281, 3, 281, 6063, 8, 281, 1, 281, 1, 281, 1, 282, 3, 282, 6068, 8, 282, 1, 282, 1, 282, 3, 282, 6072, 8, 282, 1, 282, 1, 282, 3, 282, 6076, 8, 282, 1, 282, 1, 282, 3, 282, 6080, 8, 282, 3, 282, 6082, 8, 282, 1, 283, 1, 283, 3, 283, 6086, 8, 283, 1, 284, 1, 284, 3, 284, 6090, 8, 284, 1, 284, 3, 284, 6093, 8, 284, 1, 284, 3, 284, 6096, 8, 284, 3, 284, 6098, 8, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 3, 284, 6108, 8, 284, 3, 284, 6110, 8, 284, 1, 284, 1, 284, 1, 284, 3, 284, 6115, 8, 284, 5, 284, 6117, 8, 284, 10, 284, 12, 284, 6120, 9, 284, 1, 285, 1, 285, 3, 285, 6124, 8, 285, 1, 286, 1, 286, 3, 286, 6128, 8, 286, 1, 286, 1, 286, 1, 286, 5, 286, 6133, 8, 286, 10, 286, 12, 286, 6136, 9, 286, 1, 287, 1, 287, 3, 287, 6140, 8, 287, 1, 287, 1, 287, 3, 287, 6144, 8, 287, 1, 287, 3, 287, 6147, 8, 287, 1, 287, 1, 287, 1, 287, 1, 287, 3, 287, 6153, 8, 287, 1, 287, 3, 287, 6156, 8, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 3, 289, 6175, 8, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 3, 290, 6182, 8, 290, 1, 290, 1, 290, 3, 290, 6186, 8, 290, 1, 291, 3, 291, 6189, 8, 291, 1, 291, 1, 291, 3, 291, 6193, 8, 291, 1, 291, 1, 291, 3, 291, 6197, 8, 291, 1, 291, 3, 291, 6200, 8, 291, 1, 291, 3, 291, 6203, 8, 291, 1, 292, 1, 292, 1, 292, 3, 292, 6208, 8, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 5, 293, 6215, 8, 293, 10, 293, 12, 293, 6218, 9, 293, 1, 294, 1, 294, 1, 294, 1, 294, 3, 294, 6224, 8, 294, 1, 294, 1, 294, 3, 294, 6228, 8, 294, 1, 295, 1, 295, 3, 295, 6232, 8, 295, 1, 295, 1, 295, 3, 295, 6236, 8, 295, 1, 295, 3, 295, 6239, 8, 295, 3, 295, 6241, 8, 295, 1, 296, 1, 296, 1, 296, 3, 296, 6246, 8, 296, 1, 296, 1, 296, 3, 296, 6250, 8, 296, 1, 297, 1, 297, 1, 297, 3, 297, 6255, 8, 297, 1, 297, 1, 297, 1, 297, 1, 297, 3, 297, 6261, 8, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 3, 298, 6268, 8, 298, 1, 299, 1, 299, 1, 299, 3, 299, 6273, 8, 299, 1, 300, 1, 300, 1, 300, 3, 300, 6278, 8, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 5, 301, 6285, 8, 301, 10, 301, 12, 301, 6288, 9, 301, 1, 302, 1, 302, 1, 302, 1, 302, 3, 302, 6294, 8, 302, 1, 302, 1, 302, 1, 302, 1, 302, 5, 302, 6300, 8, 302, 10, 302, 12, 302, 6303, 9, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 3, 302, 6313, 8, 302, 1, 303, 1, 303, 1, 303, 3, 303, 6318, 8, 303, 1, 303, 1, 303, 3, 303, 6322, 8, 303, 1, 303, 3, 303, 6325, 8, 303, 1, 303, 1, 303, 3, 303, 6329, 8, 303, 1, 303, 1, 303, 1, 303, 3, 303, 6334, 8, 303, 4, 303, 6336, 8, 303, 11, 303, 12, 303, 6337, 1, 303, 1, 303, 1, 303, 3, 303, 6343, 8, 303, 1, 304, 1, 304, 1, 304, 1, 304, 5, 304, 6349, 8, 304, 10, 304, 12, 304, 6352, 9, 304, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 5, 306, 6360, 8, 306, 10, 306, 12, 306, 6363, 9, 306, 1, 307, 1, 307, 3, 307, 6367, 8, 307, 1, 307, 1, 307, 3, 307, 6371, 8, 307, 1, 307, 3, 307, 6374, 8, 307, 1, 307, 3, 307, 6377, 8, 307, 3, 307, 6379, 8, 307, 1, 307, 3, 307, 6382, 8, 307, 1, 307, 3, 307, 6385, 8, 307, 1, 307, 3, 307, 6388, 8, 307, 1, 307, 1, 307, 3, 307, 6392, 8, 307, 1, 307, 1, 307, 3, 307, 6396, 8, 307, 1, 307, 1, 307, 3, 307, 6400, 8, 307, 3, 307, 6402, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6411, 8, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6416, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6422, 8, 307, 1, 307, 1, 307, 3, 307, 6426, 8, 307, 3, 307, 6428, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6435, 8, 307, 1, 307, 1, 307, 1, 307, 3, 307, 6440, 8, 307, 1, 307, 1, 307, 1, 307, 1, 307, 5, 307, 6446, 8, 307, 10, 307, 12, 307, 6449, 9, 307, 1, 308, 3, 308, 6452, 8, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 3, 308, 6459, 8, 308, 1, 309, 1, 309, 1, 309, 3, 309, 6464, 8, 309, 1, 309, 3, 309, 6467, 8, 309, 1, 309, 1, 309, 1, 309, 1, 309, 3, 309, 6473, 8, 309, 1, 310, 1, 310, 3, 310, 6477, 8, 310, 1, 311, 1, 311, 1, 311, 1, 311, 3, 311, 6483, 8, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 6492, 8, 312, 1, 312, 1, 312, 1, 312, 1, 312, 3, 312, 6498, 8, 312, 3, 312, 6500, 8, 312, 1, 313, 1, 313, 1, 313, 3, 313, 6505, 8, 313, 1, 313, 3, 313, 6508, 8, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 3, 313, 6517, 8, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 3, 313, 6524, 8, 313, 3, 313, 6526, 8, 313, 1, 314, 1, 314, 1, 314, 5, 314, 6531, 8, 314, 10, 314, 12, 314, 6534, 9, 314, 1, 315, 1, 315, 3, 315, 6538, 8, 315, 1, 315, 3, 315, 6541, 8, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 3, 316, 6551, 8, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 5, 317, 6560, 8, 317, 10, 317, 12, 317, 6563, 9, 317, 1, 317, 1, 317, 3, 317, 6567, 8, 317, 1, 317, 1, 317, 3, 317, 6571, 8, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 3, 318, 6579, 8, 318, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 3, 320, 6589, 8, 320, 1, 321, 1, 321, 1, 321, 5, 321, 6594, 8, 321, 10, 321, 12, 321, 6597, 9, 321, 1, 322, 1, 322, 1, 322, 3, 322, 6602, 8, 322, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 5, 323, 6611, 8, 323, 10, 323, 12, 323, 6614, 9, 323, 1, 323, 1, 323, 1, 323, 3, 323, 6619, 8, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 5, 323, 6627, 8, 323, 10, 323, 12, 323, 6630, 9, 323, 1, 323, 1, 323, 1, 324, 1, 324, 1, 324, 1, 324, 3, 324, 6638, 8, 324, 1, 324, 1, 324, 3, 324, 6642, 8, 324, 1, 324, 4, 324, 6645, 8, 324, 11, 324, 12, 324, 6646, 3, 324, 6649, 8, 324, 1, 324, 1, 324, 3, 324, 6653, 8, 324, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 1, 325, 3, 325, 6661, 8, 325, 1, 326, 3, 326, 6664, 8, 326, 1, 326, 1, 326, 1, 326, 3, 326, 6669, 8, 326, 1, 326, 5, 326, 6672, 8, 326, 10, 326, 12, 326, 6675, 9, 326, 1, 326, 1, 326, 1, 326, 1, 326, 3, 326, 6681, 8, 326, 3, 326, 6683, 8, 326, 1, 326, 1, 326, 1, 326, 1, 326, 3, 326, 6689, 8, 326, 1, 327, 1, 327, 3, 327, 6693, 8, 327, 1, 327, 3, 327, 6696, 8, 327, 1, 327, 1, 327, 1, 327, 3, 327, 6701, 8, 327, 1, 327, 3, 327, 6704, 8, 327, 3, 327, 6706, 8, 327, 1, 328, 1, 328, 1, 328, 1, 328, 3, 328, 6712, 8, 328, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 3, 329, 6721, 8, 329, 1, 329, 1, 329, 1, 329, 1, 329, 3, 329, 6727, 8, 329, 1, 329, 3, 329, 6730, 8, 329, 1, 330, 1, 330, 1, 330, 1, 330, 1, 331, 1, 331, 3, 331, 6738, 8, 331, 1, 331, 3, 331, 6741, 8, 331, 1, 332, 1, 332, 3, 332, 6745, 8, 332, 1, 332, 1, 332, 1, 332, 1, 332, 3, 332, 6751, 8, 332, 3, 332, 6753, 8, 332, 1, 332, 3, 332, 6756, 8, 332, 1, 333, 1, 333, 3, 333, 6760, 8, 333, 1, 333, 1, 333, 1, 333, 3, 333, 6765, 8, 333, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6772, 8, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6779, 8, 334, 3, 334, 6781, 8, 334, 1, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6787, 8, 334, 3, 334, 6789, 8, 334, 1, 334, 1, 334, 1, 334, 3, 334, 6794, 8, 334, 3, 334, 6796, 8, 334, 1, 335, 1, 335, 3, 335, 6800, 8, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 3, 338, 6809, 8, 338, 1, 338, 1, 338, 3, 338, 6813, 8, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 5, 338, 6821, 8, 338, 10, 338, 12, 338, 6824, 9, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6837, 8, 339, 1, 339, 3, 339, 6840, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6848, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 5, 339, 6855, 8, 339, 10, 339, 12, 339, 6858, 9, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6863, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6868, 8, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6876, 8, 339, 3, 339, 6878, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6883, 8, 339, 1, 339, 1, 339, 3, 339, 6887, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6892, 8, 339, 1, 339, 1, 339, 1, 339, 3, 339, 6897, 8, 339, 1, 340, 1, 340, 1, 340, 1, 340, 3, 340, 6903, 8, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 5, 340, 6919, 8, 340, 10, 340, 12, 340, 6922, 9, 340, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6930, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6945, 8, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6950, 8, 341, 1, 341, 3, 341, 6953, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6959, 8, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6964, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6977, 8, 341, 1, 341, 4, 341, 6980, 8, 341, 11, 341, 12, 341, 6981, 1, 341, 1, 341, 3, 341, 6986, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 6993, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7012, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7024, 8, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7029, 8, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 3, 341, 7037, 8, 341, 5, 341, 7039, 8, 341, 10, 341, 12, 341, 7042, 9, 341, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 1, 342, 3, 342, 7050, 8, 342, 1, 342, 3, 342, 7053, 8, 342, 1, 342, 1, 342, 1, 342, 3, 342, 7058, 8, 342, 1, 342, 1, 342, 1, 342, 3, 342, 7063, 8, 342, 1, 342, 3, 342, 7066, 8, 342, 1, 342, 1, 342, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 3, 343, 7077, 8, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 3, 343, 7085, 8, 343, 1, 343, 1, 343, 1, 343, 3, 343, 7090, 8, 343, 3, 343, 7092, 8, 343, 1, 343, 3, 343, 7095, 8, 343, 1, 344, 1, 344, 3, 344, 7099, 8, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7110, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7131, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7139, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7152, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7162, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7168, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7174, 8, 345, 1, 345, 3, 345, 7177, 8, 345, 1, 345, 3, 345, 7180, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7206, 8, 345, 3, 345, 7208, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7229, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7239, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7252, 8, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7257, 8, 345, 1, 345, 1, 345, 3, 345, 7261, 8, 345, 3, 345, 7263, 8, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 3, 345, 7275, 8, 345, 1, 346, 1, 346, 1, 346, 5, 346, 7280, 8, 346, 10, 346, 12, 346, 7283, 9, 346, 1, 347, 1, 347, 1, 347, 3, 347, 7288, 8, 347, 1, 348, 1, 348, 1, 349, 1, 349, 3, 349, 7294, 8, 349, 1, 349, 1, 349, 3, 349, 7298, 8, 349, 1, 350, 1, 350, 1, 350, 1, 351, 1, 351, 1, 351, 1, 351, 5, 351, 7307, 8, 351, 10, 351, 12, 351, 7310, 9, 351, 1, 352, 1, 352, 1, 352, 1, 352, 1, 353, 1, 353, 1, 353, 3, 353, 7319, 8, 353, 1, 354, 1, 354, 3, 354, 7323, 8, 354, 1, 354, 1, 354, 1, 354, 3, 354, 7328, 8, 354, 1, 354, 3, 354, 7331, 8, 354, 1, 354, 3, 354, 7334, 8, 354, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 3, 355, 7343, 8, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 3, 355, 7354, 8, 355, 3, 355, 7356, 8, 355, 1, 356, 1, 356, 3, 356, 7360, 8, 356, 1, 356, 1, 356, 1, 356, 3, 356, 7365, 8, 356, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 3, 357, 7374, 8, 357, 1, 358, 1, 358, 1, 358, 3, 358, 7379, 8, 358, 1, 358, 1, 358, 1, 359, 1, 359, 1, 360, 1, 360, 3, 360, 7387, 8, 360, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 3, 362, 7397, 8, 362, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 3, 363, 7405, 8, 363, 1, 364, 1, 364, 3, 364, 7409, 8, 364, 1, 364, 3, 364, 7412, 8, 364, 1, 365, 1, 365, 1, 365, 5, 365, 7417, 8, 365, 10, 365, 12, 365, 7420, 9, 365, 1, 366, 1, 366, 1, 366, 1, 366, 1, 366, 3, 366, 7427, 8, 366, 1, 367, 1, 367, 3, 367, 7431, 8, 367, 1, 368, 1, 368, 1, 368, 5, 368, 7436, 8, 368, 10, 368, 12, 368, 7439, 9, 368, 1, 369, 1, 369, 1, 369, 1, 369, 1, 369, 3, 369, 7446, 8, 369, 3, 369, 7448, 8, 369, 1, 370, 1, 370, 1, 370, 1, 370, 1, 370, 5, 370, 7455, 8, 370, 10, 370, 12, 370, 7458, 9, 370, 3, 370, 7460, 8, 370, 1, 370, 1, 370, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 1, 371, 3, 371, 7472, 8, 371, 1, 372, 1, 372, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 3, 373, 7481, 8, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 3, 373, 7488, 8, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 1, 373, 3, 373, 7497, 8, 373, 1, 374, 1, 374, 1, 374, 1, 374, 1, 374, 1, 375, 1, 375, 1, 375, 3, 375, 7507, 8, 375, 1, 375, 1, 375, 1, 375, 3, 375, 7512, 8, 375, 1, 375, 1, 375, 3, 375, 7516, 8, 375, 3, 375, 7518, 8, 375, 1, 375, 3, 375, 7521, 8, 375, 1, 376, 4, 376, 7524, 8, 376, 11, 376, 12, 376, 7525, 1, 377, 5, 377, 7529, 8, 377, 10, 377, 12, 377, 7532, 9, 377, 1, 378, 1, 378, 1, 378, 5, 378, 7537, 8, 378, 10, 378, 12, 378, 7540, 9, 378, 1, 379, 1, 379, 1, 379, 1, 379, 1, 379, 3, 379, 7547, 8, 379, 1, 379, 3, 379, 7550, 8, 379, 1, 380, 1, 380, 1, 380, 5, 380, 7555, 8, 380, 10, 380, 12, 380, 7558, 9, 380, 1, 381, 1, 381, 1, 381, 5, 381, 7563, 8, 381, 10, 381, 12, 381, 7566, 9, 381, 1, 382, 1, 382, 1, 382, 5, 382, 7571, 8, 382, 10, 382, 12, 382, 7574, 9, 382, 1, 383, 1, 383, 1, 383, 5, 383, 7579, 8, 383, 10, 383, 12, 383, 7582, 9, 383, 1, 384, 1, 384, 1, 385, 1, 385, 1, 386, 1, 386, 1, 387, 1, 387, 1, 388, 1, 388, 1, 389, 1, 389, 1, 390, 1, 390, 3, 390, 7598, 8, 390, 1, 391, 1, 391, 1, 391, 5, 391, 7603, 8, 391, 10, 391, 12, 391, 7606, 9, 391, 1, 392, 1, 392, 1, 392, 5, 392, 7611, 8, 392, 10, 392, 12, 392, 7614, 9, 392, 1, 393, 1, 393, 1, 394, 1, 394, 1, 395, 1, 395, 1, 396, 1, 396, 1, 397, 1, 397, 1, 398, 1, 398, 1, 398, 1, 398, 3, 398, 7630, 8, 398, 1, 399, 1, 399, 1, 399, 1, 399, 3, 399, 7636, 8, 399, 1, 400, 1, 400, 1, 400, 1, 400, 3, 400, 7642, 8, 400, 1, 401, 1, 401, 1, 402, 1, 402, 1, 402, 1, 402, 3, 402, 7650, 8, 402, 1, 403, 1, 403, 1, 403, 1, 403, 3, 403, 7656, 8, 403, 1, 404, 1, 404, 1, 404, 3, 404, 7661, 8, 404, 1, 405, 1, 405, 1, 405, 1, 405, 5, 405, 7667, 8, 405, 10, 405, 12, 405, 7670, 9, 405, 1, 405, 1, 405, 3, 405, 7674, 8, 405, 1, 406, 3, 406, 7677, 8, 406, 1, 406, 1, 406, 1, 407, 1, 407, 1, 407, 1, 407, 1, 407, 3, 407, 7686, 8, 407, 1, 408, 1, 408, 1, 408, 5, 408, 7691, 8, 408, 10, 408, 12, 408, 7694, 9, 408, 1, 409, 1, 409, 3, 409, 7698, 8, 409, 1, 410, 1, 410, 3, 410, 7702, 8, 410, 1, 411, 1, 411, 1, 411, 3, 411, 7707, 8, 411, 1, 412, 1, 412, 1, 412, 1, 412, 3, 412, 7713, 8, 412, 1, 413, 1, 413, 1, 413, 3, 413, 7718, 8, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 1, 413, 3, 413, 7726, 8, 413, 1, 414, 1, 414, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 1, 415, 3, 415, 7781, 8, 415, 1, 416, 1, 416, 1, 417, 1, 417, 1, 418, 3, 418, 7788, 8, 418, 1, 418, 1, 418, 1, 418, 1, 418, 4, 418, 7794, 8, 418, 11, 418, 12, 418, 7795, 3, 418, 7798, 8, 418, 3, 418, 7800, 8, 418, 1, 418, 1, 418, 5, 418, 7804, 8, 418, 10, 418, 12, 418, 7807, 9, 418, 1, 418, 3, 418, 7810, 8, 418, 1, 418, 1, 418, 3, 418, 7814, 8, 418, 1, 419, 1, 419, 1, 419, 1, 419, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 3, 420, 7825, 8, 420, 1, 420, 3, 420, 7828, 8, 420, 1, 420, 1, 420, 3, 420, 7832, 8, 420, 1, 420, 1, 420, 3, 420, 7836, 8, 420, 1, 420, 1, 420, 3, 420, 7840, 8, 420, 1, 420, 3, 420, 7843, 8, 420, 1, 420, 3, 420, 7846, 8, 420, 1, 420, 3, 420, 7849, 8, 420, 1, 420, 1, 420, 1, 420, 1, 420, 1, 420, 5, 420, 7856, 8, 420, 10, 420, 12, 420, 7859, 9, 420, 1, 420, 1, 420, 3, 420, 7863, 8, 420, 1, 420, 1, 420, 3, 420, 7867, 8, 420, 1, 420, 1, 420, 1, 421, 1, 421, 1, 421, 1, 422, 1, 422, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 1, 423, 3, 423, 7900, 8, 423, 1, 424, 1, 424, 1, 424, 1, 424, 1, 425, 1, 425, 1, 425, 1, 425, 3, 425, 7910, 8, 425, 1, 425, 1, 425, 3, 425, 7914, 8, 425, 1, 425, 1, 425, 1, 425, 1, 425, 3, 425, 7920, 8, 425, 1, 425, 1, 425, 1, 425, 3, 425, 7925, 8, 425, 1, 426, 1, 426, 1, 426, 1, 426, 1, 426, 1, 427, 1, 427, 3, 427, 7934, 8, 427, 1, 427, 1, 427, 1, 427, 1, 427, 5, 427, 7940, 8, 427, 10, 427, 12, 427, 7943, 9, 427, 1, 427, 1, 427, 1, 428, 1, 428, 1, 428, 1, 428, 1, 429, 1, 429, 3, 429, 7953, 8, 429, 1, 429, 1, 429, 1, 429, 1, 429, 5, 429, 7959, 8, 429, 10, 429, 12, 429, 7962, 9, 429, 1, 430, 1, 430, 1, 430, 1, 430, 5, 430, 7968, 8, 430, 10, 430, 12, 430, 7971, 9, 430, 1, 430, 1, 430, 1, 430, 1, 430, 5, 430, 7977, 8, 430, 10, 430, 12, 430, 7980, 9, 430, 5, 430, 7982, 8, 430, 10, 430, 12, 430, 7985, 9, 430, 1, 430, 3, 430, 7988, 8, 430, 1, 430, 1, 430, 1, 430, 1, 430, 1, 431, 1, 431, 5, 431, 7996, 8, 431, 10, 431, 12, 431, 7999, 9, 431, 1, 432, 1, 432, 3, 432, 8003, 8, 432, 1, 432, 1, 432, 1, 432, 1, 432, 5, 432, 8009, 8, 432, 10, 432, 12, 432, 8012, 9, 432, 4, 432, 8014, 8, 432, 11, 432, 12, 432, 8015, 1, 432, 3, 432, 8019, 8, 432, 1, 432, 1, 432, 1, 432, 1, 432, 1, 433, 3, 433, 8026, 8, 433, 1, 433, 1, 433, 1, 433, 1, 433, 3, 433, 8032, 8, 433, 1, 433, 1, 433, 1, 434, 1, 434, 1, 434, 1, 434, 3, 434, 8040, 8, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 3, 434, 8048, 8, 434, 1, 434, 3, 434, 8051, 8, 434, 1, 434, 1, 434, 1, 434, 1, 434, 1, 434, 3, 434, 8058, 8, 434, 3, 434, 8060, 8, 434, 1, 435, 3, 435, 8063, 8, 435, 1, 435, 1, 435, 1, 435, 1, 435, 3, 435, 8069, 8, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 435, 1, 436, 1, 436, 3, 436, 8078, 8, 436, 1, 436, 1, 436, 3, 436, 8082, 8, 436, 1, 436, 1, 436, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 1, 437, 3, 437, 8096, 8, 437, 1, 437, 3, 437, 8099, 8, 437, 3, 437, 8101, 8, 437, 1, 437, 1, 437, 1, 438, 1, 438, 3, 438, 8107, 8, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 1, 438, 4, 438, 8115, 8, 438, 11, 438, 12, 438, 8116, 3, 438, 8119, 8, 438, 3, 438, 8121, 8, 438, 1, 438, 1, 438, 1, 438, 1, 438, 5, 438, 8127, 8, 438, 10, 438, 12, 438, 8130, 9, 438, 3, 438, 8132, 8, 438, 1, 438, 3, 438, 8135, 8, 438, 1, 439, 1, 439, 1, 439, 1, 439, 1, 440, 1, 440, 1, 440, 1, 440, 3, 440, 8145, 8, 440, 1, 440, 1, 440, 1, 441, 1, 441, 5, 441, 8151, 8, 441, 10, 441, 12, 441, 8154, 9, 441, 1, 441, 1, 441, 1, 441, 3, 441, 8159, 8, 441, 1, 441, 1, 441, 1, 442, 1, 442, 3, 442, 8165, 8, 442, 1, 442, 1, 442, 1, 443, 1, 443, 1, 443, 3, 443, 8172, 8, 443, 1, 443, 1, 443, 3, 443, 8176, 8, 443, 1, 443, 1, 443, 3, 443, 8180, 8, 443, 1, 443, 3, 443, 8183, 8, 443, 1, 443, 3, 443, 8186, 8, 443, 1, 443, 1, 443, 1, 444, 1, 444, 3, 444, 8192, 8, 444, 1, 444, 1, 444, 1, 445, 1, 445, 1, 445, 3, 445, 8199, 8, 445, 1, 445, 3, 445, 8202, 8, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 3, 445, 8210, 8, 445, 3, 445, 8212, 8, 445, 1, 445, 1, 445, 1, 445, 1, 445, 1, 445, 5, 445, 8219, 8, 445, 10, 445, 12, 445, 8222, 9, 445, 1, 445, 1, 445, 3, 445, 8226, 8, 445, 3, 445, 8228, 8, 445, 1, 445, 1, 445, 1, 446, 1, 446, 1, 446, 3, 446, 8235, 8, 446, 1, 446, 1, 446, 1, 447, 1, 447, 3, 447, 8241, 8, 447, 1, 447, 3, 447, 8244, 8, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 447, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 3, 448, 8256, 8, 448, 1, 448, 1, 448, 1, 448, 1, 448, 1, 448, 3, 448, 8263, 8, 448, 3, 448, 8265, 8, 448, 1, 449, 1, 449, 3, 449, 8269, 8, 449, 1, 449, 1, 449, 1, 449, 1, 450, 3, 450, 8275, 8, 450, 1, 450, 1, 450, 1, 450, 3, 450, 8280, 8, 450, 1, 450, 1, 450, 3, 450, 8284, 8, 450, 1, 450, 3, 450, 8287, 8, 450, 1, 450, 3, 450, 8290, 8, 450, 1, 450, 1, 450, 1, 450, 1, 450, 1, 450, 4, 450, 8297, 8, 450, 11, 450, 12, 450, 8298, 1, 451, 3, 451, 8302, 8, 451, 1, 451, 1, 451, 3, 451, 8306, 8, 451, 1, 451, 1, 451, 3, 451, 8310, 8, 451, 3, 451, 8312, 8, 451, 1, 451, 3, 451, 8315, 8, 451, 1, 451, 3, 451, 8318, 8, 451, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8324, 8, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8331, 8, 452, 1, 452, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8338, 8, 452, 1, 452, 1, 452, 1, 452, 1, 452, 3, 452, 8344, 8, 452, 3, 452, 8346, 8, 452, 1, 453, 1, 453, 3, 453, 8350, 8, 453, 1, 453, 1, 453, 1, 453, 3, 453, 8355, 8, 453, 1, 453, 1, 453, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 1, 454, 5, 454, 8371, 8, 454, 10, 454, 12, 454, 8374, 9, 454, 1, 454, 1, 454, 4, 454, 8378, 8, 454, 11, 454, 12, 454, 8379, 1, 455, 1, 455, 1, 455, 1, 455, 1, 455, 5, 455, 8387, 8, 455, 10, 455, 12, 455, 8390, 9, 455, 1, 455, 1, 455, 1, 455, 1, 455, 3, 455, 8396, 8, 455, 1, 456, 1, 456, 3, 456, 8400, 8, 456, 1, 457, 1, 457, 1, 457, 1, 457, 1, 458, 1, 458, 1, 458, 1, 459, 1, 459, 1, 459, 3, 459, 8412, 8, 459, 1, 459, 3, 459, 8415, 8, 459, 1, 459, 1, 459, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 1, 460, 3, 460, 8428, 8, 460, 1, 460, 3, 460, 8431, 8, 460, 1, 461, 1, 461, 3, 461, 8435, 8, 461, 1, 462, 1, 462, 1, 462, 1, 462, 1, 462, 5, 462, 8442, 8, 462, 10, 462, 12, 462, 8445, 9, 462, 1, 462, 1, 462, 5, 462, 8449, 8, 462, 10, 462, 12, 462, 8452, 9, 462, 4, 462, 8454, 8, 462, 11, 462, 12, 462, 8455, 1, 463, 1, 463, 1, 463, 3, 463, 8461, 8, 463, 1, 464, 1, 464, 3, 464, 8465, 8, 464, 1, 465, 3, 465, 8468, 8, 465, 1, 465, 3, 465, 8471, 8, 465, 1, 465, 3, 465, 8474, 8, 465, 1, 465, 3, 465, 8477, 8, 465, 1, 465, 3, 465, 8480, 8, 465, 1, 465, 1, 465, 3, 465, 8484, 8, 465, 1, 465, 3, 465, 8487, 8, 465, 1, 465, 0, 3, 676, 680, 682, 466, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416, 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446, 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696, 698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796, 798, 800, 802, 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922, 924, 926, 928, 930, 0, 118, 2, 0, 195, 195, 364, 364, 2, 0, 66, 66, 318, 318, 2, 0, 99, 99, 318, 318, 2, 0, 134, 134, 318, 318, 1, 0, 529, 531, 2, 0, 10, 10, 94, 94, 2, 0, 133, 133, 191, 191, 2, 0, 254, 254, 332, 332, 2, 0, 162, 162, 363, 363, 2, 0, 180, 180, 221, 221, 5, 0, 30, 30, 288, 288, 329, 329, 352, 352, 354, 354, 2, 0, 109, 109, 532, 532, 2, 0, 158, 158, 277, 277, 2, 0, 367, 367, 439, 439, 2, 0, 139, 139, 312, 312, 2, 0, 191, 191, 333, 333, 2, 0, 313, 313, 333, 333, 2, 0, 150, 150, 315, 315, 2, 0, 64, 64, 94, 94, 4, 0, 78, 78, 183, 183, 197, 197, 298, 298, 2, 0, 213, 213, 254, 254, 2, 0, 352, 352, 354, 354, 2, 0, 200, 200, 224, 224, 9, 0, 30, 30, 160, 160, 165, 165, 179, 179, 219, 219, 227, 227, 342, 342, 345, 345, 438, 438, 3, 0, 113, 113, 284, 284, 336, 336, 2, 0, 53, 53, 78, 78, 2, 0, 105, 105, 379, 379, 2, 0, 260, 260, 262, 262, 3, 0, 173, 173, 260, 260, 262, 262, 1, 0, 12, 13, 2, 0, 64, 64, 375, 375, 2, 0, 156, 156, 206, 206, 2, 0, 189, 189, 360, 360, 2, 0, 215, 215, 373, 373, 3, 0, 133, 133, 191, 191, 333, 333, 5, 0, 30, 30, 88, 88, 182, 182, 241, 241, 369, 369, 2, 0, 9, 9, 94, 94, 2, 0, 92, 92, 226, 226, 1, 0, 448, 449, 2, 0, 92, 92, 414, 414, 2, 0, 341, 341, 414, 414, 4, 0, 163, 163, 185, 185, 283, 283, 353, 353, 2, 0, 135, 135, 145, 145, 2, 0, 211, 211, 278, 278, 3, 0, 321, 321, 357, 357, 445, 445, 3, 0, 66, 66, 99, 99, 318, 318, 5, 0, 108, 108, 168, 168, 226, 226, 328, 328, 342, 342, 2, 0, 167, 167, 314, 314, 2, 0, 61, 61, 265, 265, 4, 0, 207, 207, 249, 249, 268, 268, 293, 293, 2, 0, 130, 130, 307, 307, 2, 0, 64, 64, 68, 68, 10, 0, 46, 46, 88, 88, 182, 182, 202, 202, 241, 241, 352, 352, 354, 354, 357, 358, 369, 369, 521, 523, 5, 0, 212, 212, 329, 329, 350, 350, 455, 455, 457, 457, 5, 0, 212, 212, 329, 329, 350, 350, 361, 361, 455, 456, 2, 0, 37, 37, 55, 55, 2, 0, 207, 207, 249, 249, 2, 0, 10, 10, 53, 53, 2, 0, 181, 181, 243, 243, 2, 0, 170, 170, 320, 320, 2, 0, 141, 141, 223, 223, 5, 0, 108, 108, 168, 168, 189, 189, 342, 342, 360, 360, 2, 0, 226, 226, 328, 328, 2, 0, 163, 163, 185, 185, 2, 0, 186, 186, 193, 193, 4, 0, 88, 88, 182, 182, 241, 241, 369, 369, 2, 0, 137, 137, 242, 242, 2, 0, 161, 161, 319, 319, 4, 0, 129, 129, 161, 161, 319, 319, 454, 454, 2, 0, 356, 356, 380, 380, 2, 0, 81, 81, 382, 382, 2, 0, 151, 151, 254, 254, 2, 0, 133, 133, 138, 138, 1, 0, 31, 32, 2, 0, 128, 128, 547, 547, 2, 0, 60, 60, 96, 96, 2, 0, 99, 99, 349, 349, 2, 0, 131, 131, 414, 414, 2, 0, 201, 201, 334, 334, 3, 0, 59, 59, 70, 70, 97, 97, 2, 0, 30, 30, 56, 56, 1, 0, 527, 528, 2, 0, 207, 207, 268, 268, 2, 0, 320, 320, 414, 414, 2, 0, 571, 571, 573, 573, 1, 0, 468, 469, 4, 0, 113, 113, 115, 115, 119, 119, 126, 126, 2, 0, 360, 360, 477, 477, 2, 0, 394, 395, 409, 409, 2, 0, 391, 392, 406, 406, 1, 0, 391, 392, 1, 0, 418, 419, 5, 0, 10, 10, 16, 17, 21, 21, 23, 23, 25, 25, 3, 0, 9, 9, 14, 14, 27, 27, 2, 0, 98, 98, 396, 396, 2, 0, 50, 51, 75, 76, 2, 0, 41, 41, 420, 420, 3, 0, 39, 39, 73, 73, 95, 95, 4, 0, 393, 393, 399, 399, 404, 404, 425, 425, 2, 0, 292, 292, 347, 347, 2, 0, 166, 166, 188, 188, 2, 0, 304, 304, 450, 450, 3, 0, 299, 299, 320, 320, 481, 481, 2, 0, 208, 208, 289, 289, 3, 0, 30, 30, 34, 34, 90, 90, 6, 0, 9, 10, 12, 17, 21, 21, 23, 23, 25, 25, 27, 27, 2, 0, 114, 114, 120, 120, 2, 0, 20, 20, 22, 22, 1, 0, 483, 486, 17, 0, 53, 53, 116, 116, 123, 124, 129, 228, 238, 386, 433, 452, 455, 469, 471, 471, 473, 473, 475, 475, 477, 488, 490, 502, 504, 504, 506, 518, 520, 520, 524, 524, 547, 548, 3, 0, 106, 123, 125, 128, 472, 472, 4, 0, 30, 52, 54, 70, 72, 105, 454, 454, 2, 0, 62, 62, 116, 116, 2, 0, 10, 10, 20, 20, 2, 0, 434, 434, 501, 501, 2, 0, 167, 167, 507, 507, 1, 0, 512, 517, 2, 0, 144, 144, 210, 210, 9923, 0, 935, 1, 0, 0, 0, 2, 940, 1, 0, 0, 0, 4, 1064, 1, 0, 0, 0, 6, 1066, 1, 0, 0, 0, 8, 1069, 1, 0, 0, 0, 10, 1119, 1, 0, 0, 0, 12, 1129, 1, 0, 0, 0, 14, 1131, 1, 0, 0, 0, 16, 1143, 1, 0, 0, 0, 18, 1155, 1, 0, 0, 0, 20, 1166, 1, 0, 0, 0, 22, 1200, 1, 0, 0, 0, 24, 1244, 1, 0, 0, 0, 26, 1246, 1, 0, 0, 0, 28, 1258, 1, 0, 0, 0, 30, 1265, 1, 0, 0, 0, 32, 1284, 1, 0, 0, 0, 34, 1292, 1, 0, 0, 0, 36, 1294, 1, 0, 0, 0, 38, 1308, 1, 0, 0, 0, 40, 1312, 1, 0, 0, 0, 42, 1349, 1, 0, 0, 0, 44, 1351, 1, 0, 0, 0, 46, 1359, 1, 0, 0, 0, 48, 1369, 1, 0, 0, 0, 50, 1376, 1, 0, 0, 0, 52, 1384, 1, 0, 0, 0, 54, 1390, 1, 0, 0, 0, 56, 1406, 1, 0, 0, 0, 58, 1410, 1, 0, 0, 0, 60, 1412, 1, 0, 0, 0, 62, 1424, 1, 0, 0, 0, 64, 1429, 1, 0, 0, 0, 66, 1434, 1, 0, 0, 0, 68, 1436, 1, 0, 0, 0, 70, 1448, 1, 0, 0, 0, 72, 1456, 1, 0, 0, 0, 74, 1458, 1, 0, 0, 0, 76, 1582, 1, 0, 0, 0, 78, 1584, 1, 0, 0, 0, 80, 1601, 1, 0, 0, 0, 82, 1603, 1, 0, 0, 0, 84, 1617, 1, 0, 0, 0, 86, 1619, 1, 0, 0, 0, 88, 1633, 1, 0, 0, 0, 90, 1635, 1, 0, 0, 0, 92, 1872, 1, 0, 0, 0, 94, 1879, 1, 0, 0, 0, 96, 1881, 1, 0, 0, 0, 98, 1883, 1, 0, 0, 0, 100, 1886, 1, 0, 0, 0, 102, 1897, 1, 0, 0, 0, 104, 1900, 1, 0, 0, 0, 106, 1929, 1, 0, 0, 0, 108, 1931, 1, 0, 0, 0, 110, 1972, 1, 0, 0, 0, 112, 1974, 1, 0, 0, 0, 114, 2028, 1, 0, 0, 0, 116, 2069, 1, 0, 0, 0, 118, 2071, 1, 0, 0, 0, 120, 2088, 1, 0, 0, 0, 122, 2169, 1, 0, 0, 0, 124, 2171, 1, 0, 0, 0, 126, 2182, 1, 0, 0, 0, 128, 2205, 1, 0, 0, 0, 130, 2223, 1, 0, 0, 0, 132, 2225, 1, 0, 0, 0, 134, 2260, 1, 0, 0, 0, 136, 2353, 1, 0, 0, 0, 138, 2358, 1, 0, 0, 0, 140, 2360, 1, 0, 0, 0, 142, 2458, 1, 0, 0, 0, 144, 2460, 1, 0, 0, 0, 146, 2464, 1, 0, 0, 0, 148, 2475, 1, 0, 0, 0, 150, 2483, 1, 0, 0, 0, 152, 2486, 1, 0, 0, 0, 154, 2489, 1, 0, 0, 0, 156, 2507, 1, 0, 0, 0, 158, 2509, 1, 0, 0, 0, 160, 2513, 1, 0, 0, 0, 162, 2526, 1, 0, 0, 0, 164, 2528, 1, 0, 0, 0, 166, 2533, 1, 0, 0, 0, 168, 2553, 1, 0, 0, 0, 170, 2561, 1, 0, 0, 0, 172, 2568, 1, 0, 0, 0, 174, 2570, 1, 0, 0, 0, 176, 2579, 1, 0, 0, 0, 178, 2582, 1, 0, 0, 0, 180, 2586, 1, 0, 0, 0, 182, 2590, 1, 0, 0, 0, 184, 2615, 1, 0, 0, 0, 186, 2625, 1, 0, 0, 0, 188, 2639, 1, 0, 0, 0, 190, 2655, 1, 0, 0, 0, 192, 2661, 1, 0, 0, 0, 194, 2688, 1, 0, 0, 0, 196, 2698, 1, 0, 0, 0, 198, 2714, 1, 0, 0, 0, 200, 2758, 1, 0, 0, 0, 202, 2765, 1, 0, 0, 0, 204, 2767, 1, 0, 0, 0, 206, 2793, 1, 0, 0, 0, 208, 2804, 1, 0, 0, 0, 210, 2823, 1, 0, 0, 0, 212, 2834, 1, 0, 0, 0, 214, 2872, 1, 0, 0, 0, 216, 2893, 1, 0, 0, 0, 218, 2895, 1, 0, 0, 0, 220, 2915, 1, 0, 0, 0, 222, 2927, 1, 0, 0, 0, 224, 2939, 1, 0, 0, 0, 226, 2942, 1, 0, 0, 0, 228, 2945, 1, 0, 0, 0, 230, 2965, 1, 0, 0, 0, 232, 2970, 1, 0, 0, 0, 234, 3019, 1, 0, 0, 0, 236, 3021, 1, 0, 0, 0, 238, 3044, 1, 0, 0, 0, 240, 3060, 1, 0, 0, 0, 242, 3072, 1, 0, 0, 0, 244, 3099, 1, 0, 0, 0, 246, 3114, 1, 0, 0, 0, 248, 3177, 1, 0, 0, 0, 250, 3179, 1, 0, 0, 0, 252, 3184, 1, 0, 0, 0, 254, 3190, 1, 0, 0, 0, 256, 3277, 1, 0, 0, 0, 258, 3283, 1, 0, 0, 0, 260, 3285, 1, 0, 0, 0, 262, 3301, 1, 0, 0, 0, 264, 3303, 1, 0, 0, 0, 266, 3312, 1, 0, 0, 0, 268, 3316, 1, 0, 0, 0, 270, 3329, 1, 0, 0, 0, 272, 3341, 1, 0, 0, 0, 274, 3343, 1, 0, 0, 0, 276, 3365, 1, 0, 0, 0, 278, 3377, 1, 0, 0, 0, 280, 3388, 1, 0, 0, 0, 282, 3479, 1, 0, 0, 0, 284, 3481, 1, 0, 0, 0, 286, 3492, 1, 0, 0, 0, 288, 3503, 1, 0, 0, 0, 290, 3505, 1, 0, 0, 0, 292, 3531, 1, 0, 0, 0, 294, 3533, 1, 0, 0, 0, 296, 3537, 1, 0, 0, 0, 298, 3587, 1, 0, 0, 0, 300, 3589, 1, 0, 0, 0, 302, 3595, 1, 0, 0, 0, 304, 3620, 1, 0, 0, 0, 306, 3624, 1, 0, 0, 0, 308, 3838, 1, 0, 0, 0, 310, 3856, 1, 0, 0, 0, 312, 3882, 1, 0, 0, 0, 314, 3884, 1, 0, 0, 0, 316, 3892, 1, 0, 0, 0, 318, 3898, 1, 0, 0, 0, 320, 3902, 1, 0, 0, 0, 322, 3922, 1, 0, 0, 0, 324, 3928, 1, 0, 0, 0, 326, 3995, 1, 0, 0, 0, 328, 4026, 1, 0, 0, 0, 330, 4072, 1, 0, 0, 0, 332, 4074, 1, 0, 0, 0, 334, 4076, 1, 0, 0, 0, 336, 4087, 1, 0, 0, 0, 338, 4124, 1, 0, 0, 0, 340, 4126, 1, 0, 0, 0, 342, 4132, 1, 0, 0, 0, 344, 4182, 1, 0, 0, 0, 346, 4185, 1, 0, 0, 0, 348, 4199, 1, 0, 0, 0, 350, 4220, 1, 0, 0, 0, 352, 4244, 1, 0, 0, 0, 354, 4285, 1, 0, 0, 0, 356, 4287, 1, 0, 0, 0, 358, 4289, 1, 0, 0, 0, 360, 4329, 1, 0, 0, 0, 362, 4346, 1, 0, 0, 0, 364, 4366, 1, 0, 0, 0, 366, 4419, 1, 0, 0, 0, 368, 4422, 1, 0, 0, 0, 370, 4428, 1, 0, 0, 0, 372, 4436, 1, 0, 0, 0, 374, 4449, 1, 0, 0, 0, 376, 4451, 1, 0, 0, 0, 378, 4464, 1, 0, 0, 0, 380, 4466, 1, 0, 0, 0, 382, 4479, 1, 0, 0, 0, 384, 4489, 1, 0, 0, 0, 386, 4500, 1, 0, 0, 0, 388, 4511, 1, 0, 0, 0, 390, 4513, 1, 0, 0, 0, 392, 4518, 1, 0, 0, 0, 394, 4532, 1, 0, 0, 0, 396, 4564, 1, 0, 0, 0, 398, 4601, 1, 0, 0, 0, 400, 4603, 1, 0, 0, 0, 402, 4606, 1, 0, 0, 0, 404, 4609, 1, 0, 0, 0, 406, 4626, 1, 0, 0, 0, 408, 4647, 1, 0, 0, 0, 410, 4663, 1, 0, 0, 0, 412, 4679, 1, 0, 0, 0, 414, 4701, 1, 0, 0, 0, 416, 4706, 1, 0, 0, 0, 418, 4709, 1, 0, 0, 0, 420, 4717, 1, 0, 0, 0, 422, 4742, 1, 0, 0, 0, 424, 4745, 1, 0, 0, 0, 426, 4773, 1, 0, 0, 0, 428, 4778, 1, 0, 0, 0, 430, 4818, 1, 0, 0, 0, 432, 5030, 1, 0, 0, 0, 434, 5032, 1, 0, 0, 0, 436, 5120, 1, 0, 0, 0, 438, 5122, 1, 0, 0, 0, 440, 5128, 1, 0, 0, 0, 442, 5139, 1, 0, 0, 0, 444, 5149, 1, 0, 0, 0, 446, 5229, 1, 0, 0, 0, 448, 5231, 1, 0, 0, 0, 450, 5245, 1, 0, 0, 0, 452, 5267, 1, 0, 0, 0, 454, 5340, 1, 0, 0, 0, 456, 5342, 1, 0, 0, 0, 458, 5383, 1, 0, 0, 0, 460, 5385, 1, 0, 0, 0, 462, 5390, 1, 0, 0, 0, 464, 5393, 1, 0, 0, 0, 466, 5396, 1, 0, 0, 0, 468, 5446, 1, 0, 0, 0, 470, 5448, 1, 0, 0, 0, 472, 5459, 1, 0, 0, 0, 474, 5461, 1, 0, 0, 0, 476, 5471, 1, 0, 0, 0, 478, 5506, 1, 0, 0, 0, 480, 5509, 1, 0, 0, 0, 482, 5530, 1, 0, 0, 0, 484, 5540, 1, 0, 0, 0, 486, 5560, 1, 0, 0, 0, 488, 5566, 1, 0, 0, 0, 490, 5572, 1, 0, 0, 0, 492, 5577, 1, 0, 0, 0, 494, 5590, 1, 0, 0, 0, 496, 5617, 1, 0, 0, 0, 498, 5665, 1, 0, 0, 0, 500, 5667, 1, 0, 0, 0, 502, 5705, 1, 0, 0, 0, 504, 5707, 1, 0, 0, 0, 506, 5728, 1, 0, 0, 0, 508, 5748, 1, 0, 0, 0, 510, 5752, 1, 0, 0, 0, 512, 5767, 1, 0, 0, 0, 514, 5769, 1, 0, 0, 0, 516, 5773, 1, 0, 0, 0, 518, 5777, 1, 0, 0, 0, 520, 5785, 1, 0, 0, 0, 522, 5809, 1, 0, 0, 0, 524, 5811, 1, 0, 0, 0, 526, 5822, 1, 0, 0, 0, 528, 5830, 1, 0, 0, 0, 530, 5845, 1, 0, 0, 0, 532, 5870, 1, 0, 0, 0, 534, 5872, 1, 0, 0, 0, 536, 5876, 1, 0, 0, 0, 538, 5885, 1, 0, 0, 0, 540, 5925, 1, 0, 0, 0, 542, 5936, 1, 0, 0, 0, 544, 5944, 1, 0, 0, 0, 546, 5947, 1, 0, 0, 0, 548, 5951, 1, 0, 0, 0, 550, 5966, 1, 0, 0, 0, 552, 5991, 1, 0, 0, 0, 554, 6006, 1, 0, 0, 0, 556, 6032, 1, 0, 0, 0, 558, 6034, 1, 0, 0, 0, 560, 6057, 1, 0, 0, 0, 562, 6059, 1, 0, 0, 0, 564, 6067, 1, 0, 0, 0, 566, 6085, 1, 0, 0, 0, 568, 6109, 1, 0, 0, 0, 570, 6121, 1, 0, 0, 0, 572, 6125, 1, 0, 0, 0, 574, 6137, 1, 0, 0, 0, 576, 6157, 1, 0, 0, 0, 578, 6165, 1, 0, 0, 0, 580, 6179, 1, 0, 0, 0, 582, 6202, 1, 0, 0, 0, 584, 6204, 1, 0, 0, 0, 586, 6209, 1, 0, 0, 0, 588, 6219, 1, 0, 0, 0, 590, 6240, 1, 0, 0, 0, 592, 6242, 1, 0, 0, 0, 594, 6251, 1, 0, 0, 0, 596, 6262, 1, 0, 0, 0, 598, 6272, 1, 0, 0, 0, 600, 6274, 1, 0, 0, 0, 602, 6281, 1, 0, 0, 0, 604, 6312, 1, 0, 0, 0, 606, 6342, 1, 0, 0, 0, 608, 6344, 1, 0, 0, 0, 610, 6353, 1, 0, 0, 0, 612, 6356, 1, 0, 0, 0, 614, 6427, 1, 0, 0, 0, 616, 6451, 1, 0, 0, 0, 618, 6472, 1, 0, 0, 0, 620, 6474, 1, 0, 0, 0, 622, 6482, 1, 0, 0, 0, 624, 6499, 1, 0, 0, 0, 626, 6525, 1, 0, 0, 0, 628, 6527, 1, 0, 0, 0, 630, 6535, 1, 0, 0, 0, 632, 6542, 1, 0, 0, 0, 634, 6566, 1, 0, 0, 0, 636, 6572, 1, 0, 0, 0, 638, 6580, 1, 0, 0, 0, 640, 6583, 1, 0, 0, 0, 642, 6590, 1, 0, 0, 0, 644, 6598, 1, 0, 0, 0, 646, 6603, 1, 0, 0, 0, 648, 6633, 1, 0, 0, 0, 650, 6660, 1, 0, 0, 0, 652, 6688, 1, 0, 0, 0, 654, 6705, 1, 0, 0, 0, 656, 6711, 1, 0, 0, 0, 658, 6729, 1, 0, 0, 0, 660, 6731, 1, 0, 0, 0, 662, 6735, 1, 0, 0, 0, 664, 6752, 1, 0, 0, 0, 666, 6757, 1, 0, 0, 0, 668, 6795, 1, 0, 0, 0, 670, 6797, 1, 0, 0, 0, 672, 6801, 1, 0, 0, 0, 674, 6803, 1, 0, 0, 0, 676, 6812, 1, 0, 0, 0, 678, 6896, 1, 0, 0, 0, 680, 6902, 1, 0, 0, 0, 682, 7011, 1, 0, 0, 0, 684, 7043, 1, 0, 0, 0, 686, 7094, 1, 0, 0, 0, 688, 7098, 1, 0, 0, 0, 690, 7274, 1, 0, 0, 0, 692, 7276, 1, 0, 0, 0, 694, 7284, 1, 0, 0, 0, 696, 7289, 1, 0, 0, 0, 698, 7291, 1, 0, 0, 0, 700, 7299, 1, 0, 0, 0, 702, 7302, 1, 0, 0, 0, 704, 7311, 1, 0, 0, 0, 706, 7315, 1, 0, 0, 0, 708, 7320, 1, 0, 0, 0, 710, 7337, 1, 0, 0, 0, 712, 7364, 1, 0, 0, 0, 714, 7373, 1, 0, 0, 0, 716, 7375, 1, 0, 0, 0, 718, 7382, 1, 0, 0, 0, 720, 7386, 1, 0, 0, 0, 722, 7388, 1, 0, 0, 0, 724, 7396, 1, 0, 0, 0, 726, 7404, 1, 0, 0, 0, 728, 7411, 1, 0, 0, 0, 730, 7413, 1, 0, 0, 0, 732, 7426, 1, 0, 0, 0, 734, 7430, 1, 0, 0, 0, 736, 7432, 1, 0, 0, 0, 738, 7447, 1, 0, 0, 0, 740, 7449, 1, 0, 0, 0, 742, 7471, 1, 0, 0, 0, 744, 7473, 1, 0, 0, 0, 746, 7496, 1, 0, 0, 0, 748, 7498, 1, 0, 0, 0, 750, 7520, 1, 0, 0, 0, 752, 7523, 1, 0, 0, 0, 754, 7530, 1, 0, 0, 0, 756, 7533, 1, 0, 0, 0, 758, 7549, 1, 0, 0, 0, 760, 7551, 1, 0, 0, 0, 762, 7559, 1, 0, 0, 0, 764, 7567, 1, 0, 0, 0, 766, 7575, 1, 0, 0, 0, 768, 7583, 1, 0, 0, 0, 770, 7585, 1, 0, 0, 0, 772, 7587, 1, 0, 0, 0, 774, 7589, 1, 0, 0, 0, 776, 7591, 1, 0, 0, 0, 778, 7593, 1, 0, 0, 0, 780, 7595, 1, 0, 0, 0, 782, 7599, 1, 0, 0, 0, 784, 7607, 1, 0, 0, 0, 786, 7615, 1, 0, 0, 0, 788, 7617, 1, 0, 0, 0, 790, 7619, 1, 0, 0, 0, 792, 7621, 1, 0, 0, 0, 794, 7623, 1, 0, 0, 0, 796, 7629, 1, 0, 0, 0, 798, 7635, 1, 0, 0, 0, 800, 7641, 1, 0, 0, 0, 802, 7643, 1, 0, 0, 0, 804, 7649, 1, 0, 0, 0, 806, 7655, 1, 0, 0, 0, 808, 7657, 1, 0, 0, 0, 810, 7673, 1, 0, 0, 0, 812, 7676, 1, 0, 0, 0, 814, 7685, 1, 0, 0, 0, 816, 7687, 1, 0, 0, 0, 818, 7697, 1, 0, 0, 0, 820, 7701, 1, 0, 0, 0, 822, 7706, 1, 0, 0, 0, 824, 7712, 1, 0, 0, 0, 826, 7725, 1, 0, 0, 0, 828, 7727, 1, 0, 0, 0, 830, 7780, 1, 0, 0, 0, 832, 7782, 1, 0, 0, 0, 834, 7784, 1, 0, 0, 0, 836, 7787, 1, 0, 0, 0, 838, 7815, 1, 0, 0, 0, 840, 7819, 1, 0, 0, 0, 842, 7870, 1, 0, 0, 0, 844, 7873, 1, 0, 0, 0, 846, 7899, 1, 0, 0, 0, 848, 7901, 1, 0, 0, 0, 850, 7924, 1, 0, 0, 0, 852, 7926, 1, 0, 0, 0, 854, 7931, 1, 0, 0, 0, 856, 7946, 1, 0, 0, 0, 858, 7952, 1, 0, 0, 0, 860, 7963, 1, 0, 0, 0, 862, 7993, 1, 0, 0, 0, 864, 8000, 1, 0, 0, 0, 866, 8025, 1, 0, 0, 0, 868, 8035, 1, 0, 0, 0, 870, 8062, 1, 0, 0, 0, 872, 8075, 1, 0, 0, 0, 874, 8085, 1, 0, 0, 0, 876, 8104, 1, 0, 0, 0, 878, 8136, 1, 0, 0, 0, 880, 8140, 1, 0, 0, 0, 882, 8148, 1, 0, 0, 0, 884, 8162, 1, 0, 0, 0, 886, 8168, 1, 0, 0, 0, 888, 8189, 1, 0, 0, 0, 890, 8195, 1, 0, 0, 0, 892, 8234, 1, 0, 0, 0, 894, 8238, 1, 0, 0, 0, 896, 8264, 1, 0, 0, 0, 898, 8266, 1, 0, 0, 0, 900, 8274, 1, 0, 0, 0, 902, 8311, 1, 0, 0, 0, 904, 8345, 1, 0, 0, 0, 906, 8347, 1, 0, 0, 0, 908, 8358, 1, 0, 0, 0, 910, 8395, 1, 0, 0, 0, 912, 8399, 1, 0, 0, 0, 914, 8401, 1, 0, 0, 0, 916, 8405, 1, 0, 0, 0, 918, 8408, 1, 0, 0, 0, 920, 8430, 1, 0, 0, 0, 922, 8434, 1, 0, 0, 0, 924, 8436, 1, 0, 0, 0, 926, 8460, 1, 0, 0, 0, 928, 8464, 1, 0, 0, 0, 930, 8467, 1, 0, 0, 0, 932, 934, 3, 2, 1, 0, 933, 932, 1, 0, 0, 0, 934, 937, 1, 0, 0, 0, 935, 933, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 1, 0, 0, 0, 937, 935, 1, 0, 0, 0, 938, 939, 5, 0, 0, 1, 939, 1, 1, 0, 0, 0, 940, 942, 3, 4, 2, 0, 941, 943, 5, 7, 0, 0, 942, 941, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 3, 1, 0, 0, 0, 944, 1065, 3, 278, 139, 0, 945, 1065, 3, 488, 244, 0, 946, 1065, 3, 484, 242, 0, 947, 1065, 3, 486, 243, 0, 948, 1065, 3, 352, 176, 0, 949, 1065, 3, 494, 247, 0, 950, 1065, 3, 292, 146, 0, 951, 1065, 3, 210, 105, 0, 952, 1065, 3, 212, 106, 0, 953, 1065, 3, 218, 109, 0, 954, 1065, 3, 232, 116, 0, 955, 1065, 3, 404, 202, 0, 956, 1065, 3, 28, 14, 0, 957, 1065, 3, 434, 217, 0, 958, 1065, 3, 436, 218, 0, 959, 1065, 3, 446, 223, 0, 960, 1065, 3, 438, 219, 0, 961, 1065, 3, 444, 222, 0, 962, 1065, 3, 244, 122, 0, 963, 1065, 3, 246, 123, 0, 964, 1065, 3, 198, 99, 0, 965, 1065, 3, 490, 245, 0, 966, 1065, 3, 76, 38, 0, 967, 1065, 3, 430, 215, 0, 968, 1065, 3, 108, 54, 0, 969, 1065, 3, 450, 225, 0, 970, 1065, 3, 18, 9, 0, 971, 1065, 3, 20, 10, 0, 972, 1065, 3, 16, 8, 0, 973, 1065, 3, 454, 227, 0, 974, 1065, 3, 184, 92, 0, 975, 1065, 3, 498, 249, 0, 976, 1065, 3, 496, 248, 0, 977, 1065, 3, 240, 120, 0, 978, 1065, 3, 506, 253, 0, 979, 1065, 3, 6, 3, 0, 980, 1065, 3, 72, 36, 0, 981, 1065, 3, 112, 56, 0, 982, 1065, 3, 502, 251, 0, 983, 1065, 3, 324, 162, 0, 984, 1065, 3, 70, 35, 0, 985, 1065, 3, 114, 57, 0, 986, 1065, 3, 254, 127, 0, 987, 1065, 3, 186, 93, 0, 988, 1065, 3, 280, 140, 0, 989, 1065, 3, 420, 210, 0, 990, 1065, 3, 500, 250, 0, 991, 1065, 3, 492, 246, 0, 992, 1065, 3, 208, 104, 0, 993, 1065, 3, 214, 107, 0, 994, 1065, 3, 228, 114, 0, 995, 1065, 3, 234, 117, 0, 996, 1065, 3, 364, 182, 0, 997, 1065, 3, 26, 13, 0, 998, 1065, 3, 192, 96, 0, 999, 1065, 3, 296, 148, 0, 1000, 1065, 3, 300, 150, 0, 1001, 1065, 3, 448, 224, 0, 1002, 1065, 3, 302, 151, 0, 1003, 1065, 3, 242, 121, 0, 1004, 1065, 3, 204, 102, 0, 1005, 1065, 3, 30, 15, 0, 1006, 1065, 3, 196, 98, 0, 1007, 1065, 3, 120, 60, 0, 1008, 1065, 3, 452, 226, 0, 1009, 1065, 3, 182, 91, 0, 1010, 1065, 3, 206, 103, 0, 1011, 1065, 3, 424, 212, 0, 1012, 1065, 3, 256, 128, 0, 1013, 1065, 3, 274, 137, 0, 1014, 1065, 3, 8, 4, 0, 1015, 1065, 3, 14, 7, 0, 1016, 1065, 3, 238, 119, 0, 1017, 1065, 3, 480, 240, 0, 1018, 1065, 3, 536, 268, 0, 1019, 1065, 3, 558, 279, 0, 1020, 1065, 3, 282, 141, 0, 1021, 1065, 3, 548, 274, 0, 1022, 1065, 3, 74, 37, 0, 1023, 1065, 3, 418, 209, 0, 1024, 1065, 3, 308, 154, 0, 1025, 1065, 3, 532, 266, 0, 1026, 1065, 3, 520, 260, 0, 1027, 1065, 3, 328, 164, 0, 1028, 1065, 3, 334, 167, 0, 1029, 1065, 3, 348, 174, 0, 1030, 1065, 3, 900, 450, 0, 1031, 1065, 3, 236, 118, 0, 1032, 1065, 3, 358, 179, 0, 1033, 1065, 3, 538, 269, 0, 1034, 1065, 3, 464, 232, 0, 1035, 1065, 3, 194, 97, 0, 1036, 1065, 3, 478, 239, 0, 1037, 1065, 3, 550, 275, 0, 1038, 1065, 3, 460, 230, 0, 1039, 1065, 3, 526, 263, 0, 1040, 1065, 3, 306, 153, 0, 1041, 1065, 3, 428, 214, 0, 1042, 1065, 3, 408, 204, 0, 1043, 1065, 3, 406, 203, 0, 1044, 1065, 3, 410, 205, 0, 1045, 1065, 3, 432, 216, 0, 1046, 1065, 3, 336, 168, 0, 1047, 1065, 3, 350, 175, 0, 1048, 1065, 3, 456, 228, 0, 1049, 1065, 3, 326, 163, 0, 1050, 1065, 3, 560, 280, 0, 1051, 1065, 3, 468, 234, 0, 1052, 1065, 3, 320, 160, 0, 1053, 1065, 3, 466, 233, 0, 1054, 1065, 3, 552, 276, 0, 1055, 1065, 3, 504, 252, 0, 1056, 1065, 3, 60, 30, 0, 1057, 1065, 3, 36, 18, 0, 1058, 1065, 3, 68, 34, 0, 1059, 1065, 3, 476, 238, 0, 1060, 1062, 5, 581, 0, 0, 1061, 1063, 5, 582, 0, 0, 1062, 1061, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1065, 1, 0, 0, 0, 1064, 944, 1, 0, 0, 0, 1064, 945, 1, 0, 0, 0, 1064, 946, 1, 0, 0, 0, 1064, 947, 1, 0, 0, 0, 1064, 948, 1, 0, 0, 0, 1064, 949, 1, 0, 0, 0, 1064, 950, 1, 0, 0, 0, 1064, 951, 1, 0, 0, 0, 1064, 952, 1, 0, 0, 0, 1064, 953, 1, 0, 0, 0, 1064, 954, 1, 0, 0, 0, 1064, 955, 1, 0, 0, 0, 1064, 956, 1, 0, 0, 0, 1064, 957, 1, 0, 0, 0, 1064, 958, 1, 0, 0, 0, 1064, 959, 1, 0, 0, 0, 1064, 960, 1, 0, 0, 0, 1064, 961, 1, 0, 0, 0, 1064, 962, 1, 0, 0, 0, 1064, 963, 1, 0, 0, 0, 1064, 964, 1, 0, 0, 0, 1064, 965, 1, 0, 0, 0, 1064, 966, 1, 0, 0, 0, 1064, 967, 1, 0, 0, 0, 1064, 968, 1, 0, 0, 0, 1064, 969, 1, 0, 0, 0, 1064, 970, 1, 0, 0, 0, 1064, 971, 1, 0, 0, 0, 1064, 972, 1, 0, 0, 0, 1064, 973, 1, 0, 0, 0, 1064, 974, 1, 0, 0, 0, 1064, 975, 1, 0, 0, 0, 1064, 976, 1, 0, 0, 0, 1064, 977, 1, 0, 0, 0, 1064, 978, 1, 0, 0, 0, 1064, 979, 1, 0, 0, 0, 1064, 980, 1, 0, 0, 0, 1064, 981, 1, 0, 0, 0, 1064, 982, 1, 0, 0, 0, 1064, 983, 1, 0, 0, 0, 1064, 984, 1, 0, 0, 0, 1064, 985, 1, 0, 0, 0, 1064, 986, 1, 0, 0, 0, 1064, 987, 1, 0, 0, 0, 1064, 988, 1, 0, 0, 0, 1064, 989, 1, 0, 0, 0, 1064, 990, 1, 0, 0, 0, 1064, 991, 1, 0, 0, 0, 1064, 992, 1, 0, 0, 0, 1064, 993, 1, 0, 0, 0, 1064, 994, 1, 0, 0, 0, 1064, 995, 1, 0, 0, 0, 1064, 996, 1, 0, 0, 0, 1064, 997, 1, 0, 0, 0, 1064, 998, 1, 0, 0, 0, 1064, 999, 1, 0, 0, 0, 1064, 1000, 1, 0, 0, 0, 1064, 1001, 1, 0, 0, 0, 1064, 1002, 1, 0, 0, 0, 1064, 1003, 1, 0, 0, 0, 1064, 1004, 1, 0, 0, 0, 1064, 1005, 1, 0, 0, 0, 1064, 1006, 1, 0, 0, 0, 1064, 1007, 1, 0, 0, 0, 1064, 1008, 1, 0, 0, 0, 1064, 1009, 1, 0, 0, 0, 1064, 1010, 1, 0, 0, 0, 1064, 1011, 1, 0, 0, 0, 1064, 1012, 1, 0, 0, 0, 1064, 1013, 1, 0, 0, 0, 1064, 1014, 1, 0, 0, 0, 1064, 1015, 1, 0, 0, 0, 1064, 1016, 1, 0, 0, 0, 1064, 1017, 1, 0, 0, 0, 1064, 1018, 1, 0, 0, 0, 1064, 1019, 1, 0, 0, 0, 1064, 1020, 1, 0, 0, 0, 1064, 1021, 1, 0, 0, 0, 1064, 1022, 1, 0, 0, 0, 1064, 1023, 1, 0, 0, 0, 1064, 1024, 1, 0, 0, 0, 1064, 1025, 1, 0, 0, 0, 1064, 1026, 1, 0, 0, 0, 1064, 1027, 1, 0, 0, 0, 1064, 1028, 1, 0, 0, 0, 1064, 1029, 1, 0, 0, 0, 1064, 1030, 1, 0, 0, 0, 1064, 1031, 1, 0, 0, 0, 1064, 1032, 1, 0, 0, 0, 1064, 1033, 1, 0, 0, 0, 1064, 1034, 1, 0, 0, 0, 1064, 1035, 1, 0, 0, 0, 1064, 1036, 1, 0, 0, 0, 1064, 1037, 1, 0, 0, 0, 1064, 1038, 1, 0, 0, 0, 1064, 1039, 1, 0, 0, 0, 1064, 1040, 1, 0, 0, 0, 1064, 1041, 1, 0, 0, 0, 1064, 1042, 1, 0, 0, 0, 1064, 1043, 1, 0, 0, 0, 1064, 1044, 1, 0, 0, 0, 1064, 1045, 1, 0, 0, 0, 1064, 1046, 1, 0, 0, 0, 1064, 1047, 1, 0, 0, 0, 1064, 1048, 1, 0, 0, 0, 1064, 1049, 1, 0, 0, 0, 1064, 1050, 1, 0, 0, 0, 1064, 1051, 1, 0, 0, 0, 1064, 1052, 1, 0, 0, 0, 1064, 1053, 1, 0, 0, 0, 1064, 1054, 1, 0, 0, 0, 1064, 1055, 1, 0, 0, 0, 1064, 1056, 1, 0, 0, 0, 1064, 1057, 1, 0, 0, 0, 1064, 1058, 1, 0, 0, 0, 1064, 1059, 1, 0, 0, 0, 1064, 1060, 1, 0, 0, 0, 1065, 5, 1, 0, 0, 0, 1066, 1067, 5, 433, 0, 0, 1067, 1068, 3, 684, 342, 0, 1068, 7, 1, 0, 0, 0, 1069, 1070, 5, 46, 0, 0, 1070, 1071, 5, 318, 0, 0, 1071, 1073, 3, 814, 407, 0, 1072, 1074, 5, 105, 0, 0, 1073, 1072, 1, 0, 0, 0, 1073, 1074, 1, 0, 0, 0, 1074, 1078, 1, 0, 0, 0, 1075, 1077, 3, 12, 6, 0, 1076, 1075, 1, 0, 0, 0, 1077, 1080, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 9, 1, 0, 0, 0, 1080, 1078, 1, 0, 0, 0, 1081, 1084, 5, 287, 0, 0, 1082, 1085, 3, 808, 404, 0, 1083, 1085, 5, 78, 0, 0, 1084, 1082, 1, 0, 0, 0, 1084, 1083, 1, 0, 0, 0, 1085, 1120, 1, 0, 0, 0, 1086, 1087, 7, 0, 0, 0, 1087, 1088, 5, 287, 0, 0, 1088, 1120, 3, 808, 404, 0, 1089, 1120, 5, 228, 0, 0, 1090, 1120, 5, 229, 0, 0, 1091, 1120, 5, 236, 0, 0, 1092, 1120, 5, 237, 0, 0, 1093, 1120, 5, 234, 0, 0, 1094, 1120, 5, 235, 0, 0, 1095, 1120, 5, 232, 0, 0, 1096, 1120, 5, 233, 0, 0, 1097, 1120, 5, 230, 0, 0, 1098, 1120, 5, 231, 0, 0, 1099, 1120, 5, 535, 0, 0, 1100, 1120, 5, 536, 0, 0, 1101, 1120, 5, 537, 0, 0, 1102, 1120, 5, 538, 0, 0, 1103, 1120, 5, 539, 0, 0, 1104, 1120, 5, 540, 0, 0, 1105, 1106, 5, 164, 0, 0, 1106, 1107, 5, 74, 0, 0, 1107, 1120, 3, 812, 406, 0, 1108, 1109, 5, 371, 0, 0, 1109, 1110, 5, 368, 0, 0, 1110, 1120, 3, 808, 404, 0, 1111, 1112, 5, 68, 0, 0, 1112, 1113, 7, 1, 0, 0, 1113, 1120, 3, 784, 392, 0, 1114, 1115, 7, 2, 0, 0, 1115, 1120, 3, 816, 408, 0, 1116, 1117, 5, 134, 0, 0, 1117, 1120, 3, 784, 392, 0, 1118, 1120, 3, 826, 413, 0, 1119, 1081, 1, 0, 0, 0, 1119, 1086, 1, 0, 0, 0, 1119, 1089, 1, 0, 0, 0, 1119, 1090, 1, 0, 0, 0, 1119, 1091, 1, 0, 0, 0, 1119, 1092, 1, 0, 0, 0, 1119, 1093, 1, 0, 0, 0, 1119, 1094, 1, 0, 0, 0, 1119, 1095, 1, 0, 0, 0, 1119, 1096, 1, 0, 0, 0, 1119, 1097, 1, 0, 0, 0, 1119, 1098, 1, 0, 0, 0, 1119, 1099, 1, 0, 0, 0, 1119, 1100, 1, 0, 0, 0, 1119, 1101, 1, 0, 0, 0, 1119, 1102, 1, 0, 0, 0, 1119, 1103, 1, 0, 0, 0, 1119, 1104, 1, 0, 0, 0, 1119, 1105, 1, 0, 0, 0, 1119, 1108, 1, 0, 0, 0, 1119, 1111, 1, 0, 0, 0, 1119, 1114, 1, 0, 0, 0, 1119, 1116, 1, 0, 0, 0, 1119, 1118, 1, 0, 0, 0, 1120, 11, 1, 0, 0, 0, 1121, 1130, 3, 10, 5, 0, 1122, 1123, 5, 348, 0, 0, 1123, 1130, 5, 571, 0, 0, 1124, 1125, 7, 3, 0, 0, 1125, 1130, 3, 816, 408, 0, 1126, 1127, 5, 68, 0, 0, 1127, 1128, 7, 1, 0, 0, 1128, 1130, 3, 816, 408, 0, 1129, 1121, 1, 0, 0, 0, 1129, 1122, 1, 0, 0, 0, 1129, 1124, 1, 0, 0, 0, 1129, 1126, 1, 0, 0, 0, 1130, 13, 1, 0, 0, 0, 1131, 1132, 5, 46, 0, 0, 1132, 1133, 5, 99, 0, 0, 1133, 1135, 3, 814, 407, 0, 1134, 1136, 5, 105, 0, 0, 1135, 1134, 1, 0, 0, 0, 1135, 1136, 1, 0, 0, 0, 1136, 1140, 1, 0, 0, 0, 1137, 1139, 3, 12, 6, 0, 1138, 1137, 1, 0, 0, 0, 1139, 1142, 1, 0, 0, 0, 1140, 1138, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 15, 1, 0, 0, 0, 1142, 1140, 1, 0, 0, 0, 1143, 1144, 5, 138, 0, 0, 1144, 1145, 7, 2, 0, 0, 1145, 1147, 3, 814, 407, 0, 1146, 1148, 5, 105, 0, 0, 1147, 1146, 1, 0, 0, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1152, 1, 0, 0, 0, 1149, 1151, 3, 10, 5, 0, 1150, 1149, 1, 0, 0, 0, 1151, 1154, 1, 0, 0, 0, 1152, 1150, 1, 0, 0, 0, 1152, 1153, 1, 0, 0, 0, 1153, 17, 1, 0, 0, 0, 1154, 1152, 1, 0, 0, 0, 1155, 1156, 5, 138, 0, 0, 1156, 1159, 7, 2, 0, 0, 1157, 1160, 5, 30, 0, 0, 1158, 1160, 3, 814, 407, 0, 1159, 1157, 1, 0, 0, 0, 1159, 1158, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1162, 5, 68, 0, 0, 1162, 1163, 5, 175, 0, 0, 1163, 1164, 3, 788, 394, 0, 1164, 1165, 3, 64, 32, 0, 1165, 19, 1, 0, 0, 0, 1166, 1167, 5, 138, 0, 0, 1167, 1168, 5, 442, 0, 0, 1168, 1170, 3, 794, 397, 0, 1169, 1171, 3, 368, 184, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1172, 1, 0, 0, 0, 1172, 1173, 3, 22, 11, 0, 1173, 21, 1, 0, 0, 0, 1174, 1178, 3, 24, 12, 0, 1175, 1177, 3, 24, 12, 0, 1176, 1175, 1, 0, 0, 0, 1177, 1180, 1, 0, 0, 0, 1178, 1176, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1182, 1, 0, 0, 0, 1180, 1178, 1, 0, 0, 0, 1181, 1183, 5, 315, 0, 0, 1182, 1181, 1, 0, 0, 0, 1182, 1183, 1, 0, 0, 0, 1183, 1201, 1, 0, 0, 0, 1184, 1185, 5, 309, 0, 0, 1185, 1186, 5, 94, 0, 0, 1186, 1201, 3, 792, 396, 0, 1187, 1188, 5, 282, 0, 0, 1188, 1189, 5, 94, 0, 0, 1189, 1201, 3, 814, 407, 0, 1190, 1191, 5, 333, 0, 0, 1191, 1192, 5, 323, 0, 0, 1192, 1201, 3, 32, 16, 0, 1193, 1195, 5, 269, 0, 0, 1194, 1193, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1197, 5, 462, 0, 0, 1197, 1198, 5, 80, 0, 0, 1198, 1199, 5, 204, 0, 0, 1199, 1201, 3, 818, 409, 0, 1200, 1174, 1, 0, 0, 0, 1200, 1184, 1, 0, 0, 0, 1200, 1187, 1, 0, 0, 0, 1200, 1190, 1, 0, 0, 0, 1200, 1194, 1, 0, 0, 0, 1201, 23, 1, 0, 0, 0, 1202, 1245, 5, 222, 0, 0, 1203, 1245, 5, 338, 0, 0, 1204, 1245, 5, 377, 0, 0, 1205, 1207, 5, 77, 0, 0, 1206, 1205, 1, 0, 0, 0, 1206, 1207, 1, 0, 0, 0, 1207, 1208, 1, 0, 0, 0, 1208, 1245, 5, 250, 0, 0, 1209, 1211, 5, 205, 0, 0, 1210, 1209, 1, 0, 0, 0, 1210, 1211, 1, 0, 0, 0, 1211, 1212, 1, 0, 0, 0, 1212, 1213, 5, 327, 0, 0, 1213, 1220, 5, 243, 0, 0, 1214, 1216, 5, 205, 0, 0, 1215, 1214, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1218, 5, 327, 0, 0, 1218, 1220, 5, 181, 0, 0, 1219, 1210, 1, 0, 0, 0, 1219, 1215, 1, 0, 0, 0, 1220, 1245, 1, 0, 0, 0, 1221, 1222, 5, 460, 0, 0, 1222, 1245, 7, 4, 0, 0, 1223, 1224, 5, 170, 0, 0, 1224, 1245, 3, 824, 412, 0, 1225, 1226, 5, 320, 0, 0, 1226, 1245, 3, 818, 409, 0, 1227, 1228, 5, 333, 0, 0, 1228, 1229, 3, 818, 409, 0, 1229, 1232, 7, 5, 0, 0, 1230, 1233, 3, 818, 409, 0, 1231, 1233, 5, 53, 0, 0, 1232, 1230, 1, 0, 0, 0, 1232, 1231, 1, 0, 0, 0, 1233, 1245, 1, 0, 0, 0, 1234, 1235, 5, 333, 0, 0, 1235, 1236, 3, 818, 409, 0, 1236, 1237, 5, 64, 0, 0, 1237, 1238, 5, 434, 0, 0, 1238, 1245, 1, 0, 0, 0, 1239, 1242, 5, 313, 0, 0, 1240, 1243, 3, 818, 409, 0, 1241, 1243, 5, 30, 0, 0, 1242, 1240, 1, 0, 0, 0, 1242, 1241, 1, 0, 0, 0, 1243, 1245, 1, 0, 0, 0, 1244, 1202, 1, 0, 0, 0, 1244, 1203, 1, 0, 0, 0, 1244, 1204, 1, 0, 0, 0, 1244, 1206, 1, 0, 0, 0, 1244, 1219, 1, 0, 0, 0, 1244, 1221, 1, 0, 0, 0, 1244, 1223, 1, 0, 0, 0, 1244, 1225, 1, 0, 0, 0, 1244, 1227, 1, 0, 0, 0, 1244, 1234, 1, 0, 0, 0, 1244, 1239, 1, 0, 0, 0, 1245, 25, 1, 0, 0, 0, 1246, 1247, 5, 46, 0, 0, 1247, 1248, 5, 66, 0, 0, 1248, 1250, 3, 814, 407, 0, 1249, 1251, 5, 105, 0, 0, 1250, 1249, 1, 0, 0, 0, 1250, 1251, 1, 0, 0, 0, 1251, 1255, 1, 0, 0, 0, 1252, 1254, 3, 12, 6, 0, 1253, 1252, 1, 0, 0, 0, 1254, 1257, 1, 0, 0, 0, 1255, 1253, 1, 0, 0, 0, 1255, 1256, 1, 0, 0, 0, 1256, 27, 1, 0, 0, 0, 1257, 1255, 1, 0, 0, 0, 1258, 1259, 5, 138, 0, 0, 1259, 1260, 5, 66, 0, 0, 1260, 1261, 3, 814, 407, 0, 1261, 1262, 7, 6, 0, 0, 1262, 1263, 5, 99, 0, 0, 1263, 1264, 3, 816, 408, 0, 1264, 29, 1, 0, 0, 0, 1265, 1266, 5, 46, 0, 0, 1266, 1268, 5, 323, 0, 0, 1267, 1269, 3, 294, 147, 0, 1268, 1267, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1276, 1, 0, 0, 0, 1270, 1272, 3, 32, 16, 0, 1271, 1270, 1, 0, 0, 0, 1271, 1272, 1, 0, 0, 0, 1272, 1273, 1, 0, 0, 0, 1273, 1274, 5, 106, 0, 0, 1274, 1277, 3, 814, 407, 0, 1275, 1277, 3, 32, 16, 0, 1276, 1271, 1, 0, 0, 0, 1276, 1275, 1, 0, 0, 0, 1277, 1281, 1, 0, 0, 0, 1278, 1280, 3, 34, 17, 0, 1279, 1278, 1, 0, 0, 0, 1280, 1283, 1, 0, 0, 0, 1281, 1279, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 31, 1, 0, 0, 0, 1283, 1281, 1, 0, 0, 0, 1284, 1285, 3, 316, 158, 0, 1285, 33, 1, 0, 0, 0, 1286, 1293, 3, 120, 60, 0, 1287, 1293, 3, 358, 179, 0, 1288, 1293, 3, 196, 98, 0, 1289, 1293, 3, 256, 128, 0, 1290, 1293, 3, 334, 167, 0, 1291, 1293, 3, 476, 238, 0, 1292, 1286, 1, 0, 0, 0, 1292, 1287, 1, 0, 0, 0, 1292, 1288, 1, 0, 0, 0, 1292, 1289, 1, 0, 0, 0, 1292, 1290, 1, 0, 0, 0, 1292, 1291, 1, 0, 0, 0, 1293, 35, 1, 0, 0, 0, 1294, 1296, 5, 333, 0, 0, 1295, 1297, 7, 7, 0, 0, 1296, 1295, 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1299, 3, 38, 19, 0, 1299, 37, 1, 0, 0, 0, 1300, 1301, 5, 356, 0, 0, 1301, 1309, 3, 474, 237, 0, 1302, 1303, 5, 332, 0, 0, 1303, 1304, 5, 154, 0, 0, 1304, 1305, 5, 36, 0, 0, 1305, 1306, 5, 356, 0, 0, 1306, 1309, 3, 474, 237, 0, 1307, 1309, 3, 42, 21, 0, 1308, 1300, 1, 0, 0, 0, 1308, 1302, 1, 0, 0, 0, 1308, 1307, 1, 0, 0, 0, 1309, 39, 1, 0, 0, 0, 1310, 1313, 5, 30, 0, 0, 1311, 1313, 3, 44, 22, 0, 1312, 1310, 1, 0, 0, 0, 1312, 1311, 1, 0, 0, 0, 1313, 1315, 1, 0, 0, 0, 1314, 1316, 7, 5, 0, 0, 1315, 1314, 1, 0, 0, 0, 1315, 1316, 1, 0, 0, 0, 1316, 1319, 1, 0, 0, 0, 1317, 1320, 5, 53, 0, 0, 1318, 1320, 3, 46, 23, 0, 1319, 1317, 1, 0, 0, 0, 1319, 1318, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 41, 1, 0, 0, 0, 1321, 1322, 5, 418, 0, 0, 1322, 1323, 5, 386, 0, 0, 1323, 1350, 3, 56, 28, 0, 1324, 1325, 5, 152, 0, 0, 1325, 1350, 3, 808, 404, 0, 1326, 1327, 5, 323, 0, 0, 1327, 1350, 3, 790, 395, 0, 1328, 1331, 5, 267, 0, 0, 1329, 1332, 3, 808, 404, 0, 1330, 1332, 5, 53, 0, 0, 1331, 1329, 1, 0, 0, 0, 1331, 1330, 1, 0, 0, 0, 1331, 1332, 1, 0, 0, 0, 1332, 1350, 1, 0, 0, 0, 1333, 1334, 5, 318, 0, 0, 1334, 1350, 3, 58, 29, 0, 1335, 1336, 5, 332, 0, 0, 1336, 1337, 5, 106, 0, 0, 1337, 1350, 3, 58, 29, 0, 1338, 1339, 5, 383, 0, 0, 1339, 1340, 5, 279, 0, 0, 1340, 1350, 3, 696, 348, 0, 1341, 1342, 5, 356, 0, 0, 1342, 1343, 5, 337, 0, 0, 1343, 1350, 3, 808, 404, 0, 1344, 1345, 3, 44, 22, 0, 1345, 1346, 5, 64, 0, 0, 1346, 1347, 5, 434, 0, 0, 1347, 1350, 1, 0, 0, 0, 1348, 1350, 3, 40, 20, 0, 1349, 1321, 1, 0, 0, 0, 1349, 1324, 1, 0, 0, 0, 1349, 1326, 1, 0, 0, 0, 1349, 1328, 1, 0, 0, 0, 1349, 1333, 1, 0, 0, 0, 1349, 1335, 1, 0, 0, 0, 1349, 1338, 1, 0, 0, 0, 1349, 1341, 1, 0, 0, 0, 1349, 1344, 1, 0, 0, 0, 1349, 1348, 1, 0, 0, 0, 1350, 43, 1, 0, 0, 0, 1351, 1356, 3, 818, 409, 0, 1352, 1353, 5, 11, 0, 0, 1353, 1355, 3, 818, 409, 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, 45, 1, 0, 0, 0, 1358, 1356, 1, 0, 0, 0, 1359, 1364, 3, 48, 24, 0, 1360, 1361, 5, 6, 0, 0, 1361, 1363, 3, 48, 24, 0, 1362, 1360, 1, 0, 0, 0, 1363, 1366, 1, 0, 0, 0, 1364, 1362, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 47, 1, 0, 0, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1370, 3, 54, 27, 0, 1368, 1370, 3, 202, 101, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1368, 1, 0, 0, 0, 1370, 49, 1, 0, 0, 0, 1371, 1372, 5, 300, 0, 0, 1372, 1377, 7, 8, 0, 0, 1373, 1374, 5, 310, 0, 0, 1374, 1377, 5, 300, 0, 0, 1375, 1377, 5, 330, 0, 0, 1376, 1371, 1, 0, 0, 0, 1376, 1373, 1, 0, 0, 0, 1376, 1375, 1, 0, 0, 0, 1377, 51, 1, 0, 0, 0, 1378, 1385, 5, 96, 0, 0, 1379, 1385, 5, 60, 0, 0, 1380, 1385, 5, 80, 0, 0, 1381, 1385, 3, 800, 400, 0, 1382, 1385, 3, 832, 416, 0, 1383, 1385, 3, 808, 404, 0, 1384, 1378, 1, 0, 0, 0, 1384, 1379, 1, 0, 0, 0, 1384, 1380, 1, 0, 0, 0, 1384, 1381, 1, 0, 0, 0, 1384, 1382, 1, 0, 0, 0, 1384, 1383, 1, 0, 0, 0, 1385, 53, 1, 0, 0, 0, 1386, 1391, 5, 96, 0, 0, 1387, 1391, 5, 60, 0, 0, 1388, 1391, 5, 80, 0, 0, 1389, 1391, 3, 58, 29, 0, 1390, 1386, 1, 0, 0, 0, 1390, 1387, 1, 0, 0, 0, 1390, 1388, 1, 0, 0, 0, 1390, 1389, 1, 0, 0, 0, 1391, 55, 1, 0, 0, 0, 1392, 1407, 3, 808, 404, 0, 1393, 1407, 5, 53, 0, 0, 1394, 1407, 3, 826, 413, 0, 1395, 1396, 5, 403, 0, 0, 1396, 1398, 3, 808, 404, 0, 1397, 1399, 3, 668, 334, 0, 1398, 1397, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1407, 1, 0, 0, 0, 1400, 1401, 5, 403, 0, 0, 1401, 1402, 3, 660, 330, 0, 1402, 1403, 3, 808, 404, 0, 1403, 1407, 1, 0, 0, 0, 1404, 1407, 3, 202, 101, 0, 1405, 1407, 5, 254, 0, 0, 1406, 1392, 1, 0, 0, 0, 1406, 1393, 1, 0, 0, 0, 1406, 1394, 1, 0, 0, 0, 1406, 1395, 1, 0, 0, 0, 1406, 1400, 1, 0, 0, 0, 1406, 1404, 1, 0, 0, 0, 1406, 1405, 1, 0, 0, 0, 1407, 57, 1, 0, 0, 0, 1408, 1411, 3, 822, 411, 0, 1409, 1411, 3, 808, 404, 0, 1410, 1408, 1, 0, 0, 0, 1410, 1409, 1, 0, 0, 0, 1411, 59, 1, 0, 0, 0, 1412, 1413, 5, 313, 0, 0, 1413, 1414, 3, 62, 31, 0, 1414, 61, 1, 0, 0, 0, 1415, 1416, 5, 418, 0, 0, 1416, 1425, 5, 386, 0, 0, 1417, 1418, 5, 356, 0, 0, 1418, 1419, 5, 244, 0, 0, 1419, 1425, 5, 251, 0, 0, 1420, 1421, 5, 332, 0, 0, 1421, 1425, 5, 106, 0, 0, 1422, 1425, 5, 30, 0, 0, 1423, 1425, 3, 44, 22, 0, 1424, 1415, 1, 0, 0, 0, 1424, 1417, 1, 0, 0, 0, 1424, 1420, 1, 0, 0, 0, 1424, 1422, 1, 0, 0, 0, 1424, 1423, 1, 0, 0, 0, 1425, 63, 1, 0, 0, 0, 1426, 1427, 5, 333, 0, 0, 1427, 1430, 3, 38, 19, 0, 1428, 1430, 3, 60, 30, 0, 1429, 1426, 1, 0, 0, 0, 1429, 1428, 1, 0, 0, 0, 1430, 65, 1, 0, 0, 0, 1431, 1432, 5, 333, 0, 0, 1432, 1435, 3, 42, 21, 0, 1433, 1435, 3, 60, 30, 0, 1434, 1431, 1, 0, 0, 0, 1434, 1433, 1, 0, 0, 0, 1435, 67, 1, 0, 0, 0, 1436, 1446, 5, 335, 0, 0, 1437, 1447, 3, 44, 22, 0, 1438, 1439, 5, 418, 0, 0, 1439, 1447, 5, 386, 0, 0, 1440, 1441, 5, 356, 0, 0, 1441, 1442, 5, 244, 0, 0, 1442, 1447, 5, 251, 0, 0, 1443, 1444, 5, 332, 0, 0, 1444, 1447, 5, 106, 0, 0, 1445, 1447, 5, 30, 0, 0, 1446, 1437, 1, 0, 0, 0, 1446, 1438, 1, 0, 0, 0, 1446, 1440, 1, 0, 0, 0, 1446, 1443, 1, 0, 0, 0, 1446, 1445, 1, 0, 0, 0, 1447, 69, 1, 0, 0, 0, 1448, 1449, 5, 333, 0, 0, 1449, 1452, 5, 165, 0, 0, 1450, 1453, 5, 30, 0, 0, 1451, 1453, 3, 760, 380, 0, 1452, 1450, 1, 0, 0, 0, 1452, 1451, 1, 0, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1455, 7, 9, 0, 0, 1455, 71, 1, 0, 0, 0, 1456, 1457, 5, 155, 0, 0, 1457, 73, 1, 0, 0, 0, 1458, 1459, 5, 187, 0, 0, 1459, 1460, 7, 10, 0, 0, 1460, 75, 1, 0, 0, 0, 1461, 1462, 5, 138, 0, 0, 1462, 1464, 5, 92, 0, 0, 1463, 1465, 3, 422, 211, 0, 1464, 1463, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1469, 3, 624, 312, 0, 1467, 1470, 3, 78, 39, 0, 1468, 1470, 3, 88, 44, 0, 1469, 1467, 1, 0, 0, 0, 1469, 1468, 1, 0, 0, 0, 1470, 1583, 1, 0, 0, 0, 1471, 1472, 5, 138, 0, 0, 1472, 1473, 5, 92, 0, 0, 1473, 1474, 5, 30, 0, 0, 1474, 1475, 5, 68, 0, 0, 1475, 1479, 3, 176, 88, 0, 1476, 1477, 5, 281, 0, 0, 1477, 1478, 5, 147, 0, 0, 1478, 1480, 3, 816, 408, 0, 1479, 1476, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1482, 5, 333, 0, 0, 1482, 1483, 5, 351, 0, 0, 1483, 1485, 3, 768, 384, 0, 1484, 1486, 5, 272, 0, 0, 1485, 1484, 1, 0, 0, 0, 1485, 1486, 1, 0, 0, 0, 1486, 1583, 1, 0, 0, 0, 1487, 1488, 5, 138, 0, 0, 1488, 1490, 5, 92, 0, 0, 1489, 1491, 3, 422, 211, 0, 1490, 1489, 1, 0, 0, 0, 1490, 1491, 1, 0, 0, 0, 1491, 1492, 1, 0, 0, 0, 1492, 1493, 3, 774, 387, 0, 1493, 1498, 3, 90, 45, 0, 1494, 1495, 5, 62, 0, 0, 1495, 1496, 5, 422, 0, 0, 1496, 1499, 3, 80, 40, 0, 1497, 1499, 5, 53, 0, 0, 1498, 1494, 1, 0, 0, 0, 1498, 1497, 1, 0, 0, 0, 1499, 1583, 1, 0, 0, 0, 1500, 1501, 5, 138, 0, 0, 1501, 1503, 5, 92, 0, 0, 1502, 1504, 3, 422, 211, 0, 1503, 1502, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1506, 3, 774, 387, 0, 1506, 1507, 5, 436, 0, 0, 1507, 1508, 5, 285, 0, 0, 1508, 1510, 3, 780, 390, 0, 1509, 1511, 7, 11, 0, 0, 1510, 1509, 1, 0, 0, 0, 1510, 1511, 1, 0, 0, 0, 1511, 1583, 1, 0, 0, 0, 1512, 1513, 5, 138, 0, 0, 1513, 1515, 5, 226, 0, 0, 1514, 1516, 3, 422, 211, 0, 1515, 1514, 1, 0, 0, 0, 1515, 1516, 1, 0, 0, 0, 1516, 1517, 1, 0, 0, 0, 1517, 1520, 3, 780, 390, 0, 1518, 1521, 3, 78, 39, 0, 1519, 1521, 3, 90, 45, 0, 1520, 1518, 1, 0, 0, 0, 1520, 1519, 1, 0, 0, 0, 1521, 1583, 1, 0, 0, 0, 1522, 1523, 5, 138, 0, 0, 1523, 1524, 5, 226, 0, 0, 1524, 1525, 5, 30, 0, 0, 1525, 1526, 5, 68, 0, 0, 1526, 1530, 3, 176, 88, 0, 1527, 1528, 5, 281, 0, 0, 1528, 1529, 5, 147, 0, 0, 1529, 1531, 3, 816, 408, 0, 1530, 1527, 1, 0, 0, 0, 1530, 1531, 1, 0, 0, 0, 1531, 1532, 1, 0, 0, 0, 1532, 1533, 5, 333, 0, 0, 1533, 1535, 3, 176, 88, 0, 1534, 1536, 5, 272, 0, 0, 1535, 1534, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 1583, 1, 0, 0, 0, 1537, 1538, 5, 138, 0, 0, 1538, 1540, 5, 328, 0, 0, 1539, 1541, 3, 422, 211, 0, 1540, 1539, 1, 0, 0, 0, 1540, 1541, 1, 0, 0, 0, 1541, 1542, 1, 0, 0, 0, 1542, 1543, 3, 780, 390, 0, 1543, 1544, 3, 78, 39, 0, 1544, 1583, 1, 0, 0, 0, 1545, 1547, 5, 138, 0, 0, 1546, 1548, 5, 259, 0, 0, 1547, 1546, 1, 0, 0, 0, 1547, 1548, 1, 0, 0, 0, 1548, 1549, 1, 0, 0, 0, 1549, 1551, 5, 376, 0, 0, 1550, 1552, 3, 422, 211, 0, 1551, 1550, 1, 0, 0, 0, 1551, 1552, 1, 0, 0, 0, 1552, 1553, 1, 0, 0, 0, 1553, 1554, 3, 778, 389, 0, 1554, 1555, 3, 78, 39, 0, 1555, 1583, 1, 0, 0, 0, 1556, 1557, 5, 138, 0, 0, 1557, 1558, 5, 259, 0, 0, 1558, 1559, 5, 376, 0, 0, 1559, 1560, 5, 30, 0, 0, 1560, 1561, 5, 68, 0, 0, 1561, 1565, 3, 176, 88, 0, 1562, 1563, 5, 281, 0, 0, 1563, 1564, 5, 147, 0, 0, 1564, 1566, 3, 816, 408, 0, 1565, 1562, 1, 0, 0, 0, 1565, 1566, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 1568, 5, 333, 0, 0, 1568, 1569, 5, 351, 0, 0, 1569, 1571, 3, 768, 384, 0, 1570, 1572, 5, 272, 0, 0, 1571, 1570, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1583, 1, 0, 0, 0, 1573, 1574, 5, 138, 0, 0, 1574, 1575, 5, 63, 0, 0, 1575, 1577, 5, 92, 0, 0, 1576, 1578, 3, 422, 211, 0, 1577, 1576, 1, 0, 0, 0, 1577, 1578, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 1580, 3, 624, 312, 0, 1580, 1581, 3, 78, 39, 0, 1581, 1583, 1, 0, 0, 0, 1582, 1461, 1, 0, 0, 0, 1582, 1471, 1, 0, 0, 0, 1582, 1487, 1, 0, 0, 0, 1582, 1500, 1, 0, 0, 0, 1582, 1512, 1, 0, 0, 0, 1582, 1522, 1, 0, 0, 0, 1582, 1537, 1, 0, 0, 0, 1582, 1545, 1, 0, 0, 0, 1582, 1556, 1, 0, 0, 0, 1582, 1573, 1, 0, 0, 0, 1583, 77, 1, 0, 0, 0, 1584, 1589, 3, 92, 46, 0, 1585, 1586, 5, 6, 0, 0, 1586, 1588, 3, 92, 46, 0, 1587, 1585, 1, 0, 0, 0, 1588, 1591, 1, 0, 0, 0, 1589, 1587, 1, 0, 0, 0, 1589, 1590, 1, 0, 0, 0, 1590, 79, 1, 0, 0, 0, 1591, 1589, 1, 0, 0, 0, 1592, 1593, 5, 68, 0, 0, 1593, 1602, 3, 534, 267, 0, 1594, 1595, 5, 64, 0, 0, 1595, 1596, 3, 82, 41, 0, 1596, 1597, 5, 94, 0, 0, 1597, 1598, 3, 82, 41, 0, 1598, 1602, 1, 0, 0, 0, 1599, 1600, 5, 105, 0, 0, 1600, 1602, 3, 86, 43, 0, 1601, 1592, 1, 0, 0, 0, 1601, 1594, 1, 0, 0, 0, 1601, 1599, 1, 0, 0, 0, 1602, 81, 1, 0, 0, 0, 1603, 1604, 5, 2, 0, 0, 1604, 1609, 3, 84, 42, 0, 1605, 1606, 5, 6, 0, 0, 1606, 1608, 3, 84, 42, 0, 1607, 1605, 1, 0, 0, 0, 1608, 1611, 1, 0, 0, 0, 1609, 1607, 1, 0, 0, 0, 1609, 1610, 1, 0, 0, 0, 1610, 1612, 1, 0, 0, 0, 1611, 1609, 1, 0, 0, 0, 1612, 1613, 5, 3, 0, 0, 1613, 83, 1, 0, 0, 0, 1614, 1618, 3, 534, 267, 0, 1615, 1618, 5, 262, 0, 0, 1616, 1618, 5, 260, 0, 0, 1617, 1614, 1, 0, 0, 0, 1617, 1615, 1, 0, 0, 0, 1617, 1616, 1, 0, 0, 0, 1618, 85, 1, 0, 0, 0, 1619, 1620, 5, 2, 0, 0, 1620, 1621, 5, 533, 0, 0, 1621, 1622, 3, 202, 101, 0, 1622, 1623, 5, 6, 0, 0, 1623, 1624, 5, 534, 0, 0, 1624, 1625, 3, 202, 101, 0, 1625, 1626, 5, 3, 0, 0, 1626, 87, 1, 0, 0, 0, 1627, 1628, 3, 90, 45, 0, 1628, 1629, 3, 106, 53, 0, 1629, 1634, 1, 0, 0, 0, 1630, 1631, 5, 436, 0, 0, 1631, 1632, 5, 285, 0, 0, 1632, 1634, 3, 780, 390, 0, 1633, 1627, 1, 0, 0, 0, 1633, 1630, 1, 0, 0, 0, 1634, 89, 1, 0, 0, 0, 1635, 1636, 5, 435, 0, 0, 1636, 1637, 5, 285, 0, 0, 1637, 1638, 3, 780, 390, 0, 1638, 91, 1, 0, 0, 0, 1639, 1642, 5, 133, 0, 0, 1640, 1641, 5, 45, 0, 0, 1641, 1643, 3, 818, 409, 0, 1642, 1640, 1, 0, 0, 0, 1642, 1643, 1, 0, 0, 0, 1643, 1644, 1, 0, 0, 0, 1644, 1873, 3, 142, 71, 0, 1645, 1646, 5, 138, 0, 0, 1646, 1647, 5, 45, 0, 0, 1647, 1651, 3, 818, 409, 0, 1648, 1650, 3, 272, 136, 0, 1649, 1648, 1, 0, 0, 0, 1650, 1653, 1, 0, 0, 0, 1651, 1649, 1, 0, 0, 0, 1651, 1652, 1, 0, 0, 0, 1652, 1873, 1, 0, 0, 0, 1653, 1651, 1, 0, 0, 0, 1654, 1655, 5, 372, 0, 0, 1655, 1656, 5, 45, 0, 0, 1656, 1873, 3, 818, 409, 0, 1657, 1658, 5, 191, 0, 0, 1658, 1660, 5, 45, 0, 0, 1659, 1661, 3, 422, 211, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1662, 1, 0, 0, 0, 1662, 1664, 3, 818, 409, 0, 1663, 1665, 3, 96, 48, 0, 1664, 1663, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1873, 1, 0, 0, 0, 1666, 1667, 5, 333, 0, 0, 1667, 1668, 5, 379, 0, 0, 1668, 1873, 7, 12, 0, 0, 1669, 1670, 5, 158, 0, 0, 1670, 1671, 5, 80, 0, 0, 1671, 1873, 3, 818, 409, 0, 1672, 1673, 5, 333, 0, 0, 1673, 1873, 7, 13, 0, 0, 1674, 1676, 5, 193, 0, 0, 1675, 1677, 7, 14, 0, 0, 1676, 1675, 1, 0, 0, 0, 1676, 1677, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 1873, 5, 357, 0, 0, 1679, 1680, 5, 186, 0, 0, 1680, 1684, 5, 357, 0, 0, 1681, 1685, 5, 30, 0, 0, 1682, 1685, 5, 99, 0, 0, 1683, 1685, 3, 818, 409, 0, 1684, 1681, 1, 0, 0, 0, 1684, 1682, 1, 0, 0, 0, 1684, 1683, 1, 0, 0, 0, 1685, 1873, 1, 0, 0, 0, 1686, 1687, 5, 193, 0, 0, 1687, 1688, 7, 14, 0, 0, 1688, 1689, 5, 321, 0, 0, 1689, 1873, 3, 818, 409, 0, 1690, 1691, 5, 186, 0, 0, 1691, 1692, 5, 321, 0, 0, 1692, 1873, 3, 818, 409, 0, 1693, 1695, 5, 269, 0, 0, 1694, 1693, 1, 0, 0, 0, 1694, 1695, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 1697, 5, 228, 0, 0, 1697, 1873, 3, 780, 390, 0, 1698, 1699, 5, 275, 0, 0, 1699, 1873, 3, 316, 158, 0, 1700, 1701, 5, 77, 0, 0, 1701, 1873, 5, 275, 0, 0, 1702, 1703, 5, 282, 0, 0, 1703, 1704, 5, 94, 0, 0, 1704, 1873, 3, 814, 407, 0, 1705, 1706, 5, 333, 0, 0, 1706, 1707, 5, 351, 0, 0, 1707, 1873, 3, 768, 384, 0, 1708, 1709, 5, 312, 0, 0, 1709, 1714, 5, 219, 0, 0, 1710, 1715, 5, 270, 0, 0, 1711, 1715, 5, 113, 0, 0, 1712, 1715, 5, 53, 0, 0, 1713, 1715, 3, 180, 90, 0, 1714, 1710, 1, 0, 0, 0, 1714, 1711, 1, 0, 0, 0, 1714, 1712, 1, 0, 0, 0, 1714, 1713, 1, 0, 0, 0, 1715, 1873, 1, 0, 0, 0, 1716, 1723, 5, 193, 0, 0, 1717, 1723, 5, 186, 0, 0, 1718, 1720, 5, 269, 0, 0, 1719, 1718, 1, 0, 0, 0, 1719, 1720, 1, 0, 0, 0, 1720, 1721, 1, 0, 0, 0, 1721, 1723, 5, 209, 0, 0, 1722, 1716, 1, 0, 0, 0, 1722, 1717, 1, 0, 0, 0, 1722, 1719, 1, 0, 0, 0, 1723, 1724, 1, 0, 0, 0, 1724, 1725, 5, 414, 0, 0, 1725, 1726, 5, 251, 0, 0, 1726, 1873, 5, 327, 0, 0, 1727, 1729, 5, 191, 0, 0, 1728, 1730, 5, 44, 0, 0, 1729, 1728, 1, 0, 0, 0, 1729, 1730, 1, 0, 0, 0, 1730, 1732, 1, 0, 0, 0, 1731, 1733, 3, 422, 211, 0, 1732, 1731, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1734, 1, 0, 0, 0, 1734, 1736, 3, 800, 400, 0, 1735, 1737, 3, 96, 48, 0, 1736, 1735, 1, 0, 0, 0, 1736, 1737, 1, 0, 0, 0, 1737, 1873, 1, 0, 0, 0, 1738, 1740, 5, 133, 0, 0, 1739, 1741, 5, 44, 0, 0, 1740, 1739, 1, 0, 0, 0, 1740, 1741, 1, 0, 0, 0, 1741, 1743, 1, 0, 0, 0, 1742, 1744, 3, 294, 147, 0, 1743, 1742, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1873, 3, 132, 66, 0, 1746, 1748, 5, 138, 0, 0, 1747, 1749, 5, 44, 0, 0, 1748, 1747, 1, 0, 0, 0, 1748, 1749, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1753, 3, 800, 400, 0, 1751, 1754, 3, 94, 47, 0, 1752, 1754, 3, 222, 111, 0, 1753, 1751, 1, 0, 0, 0, 1753, 1752, 1, 0, 0, 0, 1754, 1873, 1, 0, 0, 0, 1755, 1757, 5, 138, 0, 0, 1756, 1758, 5, 44, 0, 0, 1757, 1756, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1759, 1, 0, 0, 0, 1759, 1760, 3, 800, 400, 0, 1760, 1761, 7, 15, 0, 0, 1761, 1762, 5, 77, 0, 0, 1762, 1763, 5, 78, 0, 0, 1763, 1873, 1, 0, 0, 0, 1764, 1766, 5, 138, 0, 0, 1765, 1767, 5, 44, 0, 0, 1766, 1765, 1, 0, 0, 0, 1766, 1767, 1, 0, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1769, 3, 800, 400, 0, 1769, 1770, 5, 191, 0, 0, 1770, 1772, 5, 437, 0, 0, 1771, 1773, 3, 422, 211, 0, 1772, 1771, 1, 0, 0, 0, 1772, 1773, 1, 0, 0, 0, 1773, 1873, 1, 0, 0, 0, 1774, 1776, 5, 138, 0, 0, 1775, 1777, 5, 44, 0, 0, 1776, 1775, 1, 0, 0, 0, 1776, 1777, 1, 0, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1779, 3, 800, 400, 0, 1779, 1780, 5, 333, 0, 0, 1780, 1781, 5, 342, 0, 0, 1781, 1782, 3, 812, 406, 0, 1782, 1873, 1, 0, 0, 0, 1783, 1785, 5, 138, 0, 0, 1784, 1786, 5, 44, 0, 0, 1785, 1784, 1, 0, 0, 0, 1785, 1786, 1, 0, 0, 0, 1786, 1787, 1, 0, 0, 0, 1787, 1789, 3, 800, 400, 0, 1788, 1783, 1, 0, 0, 0, 1788, 1789, 1, 0, 0, 0, 1789, 1790, 1, 0, 0, 0, 1790, 1791, 7, 16, 0, 0, 1791, 1873, 3, 100, 50, 0, 1792, 1794, 5, 138, 0, 0, 1793, 1795, 5, 44, 0, 0, 1794, 1793, 1, 0, 0, 0, 1794, 1795, 1, 0, 0, 0, 1795, 1796, 1, 0, 0, 0, 1796, 1797, 3, 800, 400, 0, 1797, 1798, 5, 333, 0, 0, 1798, 1799, 5, 345, 0, 0, 1799, 1800, 3, 818, 409, 0, 1800, 1873, 1, 0, 0, 0, 1801, 1803, 5, 138, 0, 0, 1802, 1804, 5, 44, 0, 0, 1803, 1802, 1, 0, 0, 0, 1803, 1804, 1, 0, 0, 0, 1804, 1805, 1, 0, 0, 0, 1805, 1806, 3, 800, 400, 0, 1806, 1807, 5, 133, 0, 0, 1807, 1808, 5, 438, 0, 0, 1808, 1809, 3, 138, 69, 0, 1809, 1810, 5, 36, 0, 0, 1810, 1819, 5, 219, 0, 0, 1811, 1813, 5, 2, 0, 0, 1812, 1814, 3, 200, 100, 0, 1813, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1815, 1816, 1, 0, 0, 0, 1816, 1817, 1, 0, 0, 0, 1817, 1818, 5, 3, 0, 0, 1818, 1820, 1, 0, 0, 0, 1819, 1811, 1, 0, 0, 0, 1819, 1820, 1, 0, 0, 0, 1820, 1873, 1, 0, 0, 0, 1821, 1823, 5, 138, 0, 0, 1822, 1824, 5, 44, 0, 0, 1823, 1822, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1825, 1, 0, 0, 0, 1825, 1839, 3, 800, 400, 0, 1826, 1831, 5, 314, 0, 0, 1827, 1829, 5, 105, 0, 0, 1828, 1827, 1, 0, 0, 0, 1828, 1829, 1, 0, 0, 0, 1829, 1830, 1, 0, 0, 0, 1830, 1832, 3, 202, 101, 0, 1831, 1828, 1, 0, 0, 0, 1831, 1832, 1, 0, 0, 0, 1832, 1840, 1, 0, 0, 0, 1833, 1837, 5, 333, 0, 0, 1834, 1838, 3, 200, 100, 0, 1835, 1836, 5, 438, 0, 0, 1836, 1838, 3, 138, 69, 0, 1837, 1834, 1, 0, 0, 0, 1837, 1835, 1, 0, 0, 0, 1838, 1840, 1, 0, 0, 0, 1839, 1826, 1, 0, 0, 0, 1839, 1833, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 1839, 1, 0, 0, 0, 1841, 1842, 1, 0, 0, 0, 1842, 1873, 1, 0, 0, 0, 1843, 1845, 5, 138, 0, 0, 1844, 1846, 5, 44, 0, 0, 1845, 1844, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 1847, 1, 0, 0, 0, 1847, 1848, 3, 800, 400, 0, 1848, 1849, 5, 191, 0, 0, 1849, 1851, 5, 219, 0, 0, 1850, 1852, 3, 422, 211, 0, 1851, 1850, 1, 0, 0, 0, 1851, 1852, 1, 0, 0, 0, 1852, 1873, 1, 0, 0, 0, 1853, 1855, 5, 138, 0, 0, 1854, 1856, 5, 44, 0, 0, 1855, 1854, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 1857, 1, 0, 0, 0, 1857, 1860, 3, 800, 400, 0, 1858, 1859, 5, 333, 0, 0, 1859, 1861, 5, 174, 0, 0, 1860, 1858, 1, 0, 0, 0, 1860, 1861, 1, 0, 0, 0, 1861, 1862, 1, 0, 0, 0, 1862, 1863, 5, 360, 0, 0, 1863, 1865, 3, 652, 326, 0, 1864, 1866, 3, 98, 49, 0, 1865, 1864, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1869, 1, 0, 0, 0, 1867, 1868, 5, 100, 0, 0, 1868, 1870, 3, 674, 337, 0, 1869, 1867, 1, 0, 0, 0, 1869, 1870, 1, 0, 0, 0, 1870, 1873, 1, 0, 0, 0, 1871, 1873, 3, 222, 111, 0, 1872, 1639, 1, 0, 0, 0, 1872, 1645, 1, 0, 0, 0, 1872, 1654, 1, 0, 0, 0, 1872, 1657, 1, 0, 0, 0, 1872, 1666, 1, 0, 0, 0, 1872, 1669, 1, 0, 0, 0, 1872, 1672, 1, 0, 0, 0, 1872, 1674, 1, 0, 0, 0, 1872, 1679, 1, 0, 0, 0, 1872, 1686, 1, 0, 0, 0, 1872, 1690, 1, 0, 0, 0, 1872, 1694, 1, 0, 0, 0, 1872, 1698, 1, 0, 0, 0, 1872, 1700, 1, 0, 0, 0, 1872, 1702, 1, 0, 0, 0, 1872, 1705, 1, 0, 0, 0, 1872, 1708, 1, 0, 0, 0, 1872, 1722, 1, 0, 0, 0, 1872, 1727, 1, 0, 0, 0, 1872, 1738, 1, 0, 0, 0, 1872, 1746, 1, 0, 0, 0, 1872, 1755, 1, 0, 0, 0, 1872, 1764, 1, 0, 0, 0, 1872, 1774, 1, 0, 0, 0, 1872, 1788, 1, 0, 0, 0, 1872, 1792, 1, 0, 0, 0, 1872, 1801, 1, 0, 0, 0, 1872, 1821, 1, 0, 0, 0, 1872, 1843, 1, 0, 0, 0, 1872, 1853, 1, 0, 0, 0, 1872, 1871, 1, 0, 0, 0, 1873, 93, 1, 0, 0, 0, 1874, 1875, 5, 333, 0, 0, 1875, 1876, 5, 53, 0, 0, 1876, 1880, 3, 674, 337, 0, 1877, 1878, 5, 191, 0, 0, 1878, 1880, 5, 53, 0, 0, 1879, 1874, 1, 0, 0, 0, 1879, 1877, 1, 0, 0, 0, 1880, 95, 1, 0, 0, 0, 1881, 1882, 7, 17, 0, 0, 1882, 97, 1, 0, 0, 0, 1883, 1884, 5, 43, 0, 0, 1884, 1885, 3, 316, 158, 0, 1885, 99, 1, 0, 0, 0, 1886, 1887, 5, 2, 0, 0, 1887, 1892, 3, 104, 52, 0, 1888, 1889, 5, 6, 0, 0, 1889, 1891, 3, 104, 52, 0, 1890, 1888, 1, 0, 0, 0, 1891, 1894, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1892, 1893, 1, 0, 0, 0, 1893, 1895, 1, 0, 0, 0, 1894, 1892, 1, 0, 0, 0, 1895, 1896, 5, 3, 0, 0, 1896, 101, 1, 0, 0, 0, 1897, 1898, 5, 105, 0, 0, 1898, 1899, 3, 100, 50, 0, 1899, 103, 1, 0, 0, 0, 1900, 1905, 3, 824, 412, 0, 1901, 1902, 5, 10, 0, 0, 1902, 1906, 3, 288, 144, 0, 1903, 1904, 5, 11, 0, 0, 1904, 1906, 3, 286, 143, 0, 1905, 1901, 1, 0, 0, 0, 1905, 1903, 1, 0, 0, 0, 1905, 1906, 1, 0, 0, 0, 1906, 105, 1, 0, 0, 0, 1907, 1908, 5, 62, 0, 0, 1908, 1909, 5, 422, 0, 0, 1909, 1910, 5, 105, 0, 0, 1910, 1911, 5, 2, 0, 0, 1911, 1912, 5, 533, 0, 0, 1912, 1913, 5, 571, 0, 0, 1913, 1914, 5, 6, 0, 0, 1914, 1915, 5, 534, 0, 0, 1915, 1916, 5, 571, 0, 0, 1916, 1930, 5, 3, 0, 0, 1917, 1918, 5, 62, 0, 0, 1918, 1919, 5, 422, 0, 0, 1919, 1920, 5, 68, 0, 0, 1920, 1930, 3, 534, 267, 0, 1921, 1922, 5, 62, 0, 0, 1922, 1923, 5, 422, 0, 0, 1923, 1924, 5, 64, 0, 0, 1924, 1925, 3, 534, 267, 0, 1925, 1926, 5, 94, 0, 0, 1926, 1927, 3, 534, 267, 0, 1927, 1930, 1, 0, 0, 0, 1928, 1930, 5, 53, 0, 0, 1929, 1907, 1, 0, 0, 0, 1929, 1917, 1, 0, 0, 0, 1929, 1921, 1, 0, 0, 0, 1929, 1928, 1, 0, 0, 0, 1930, 107, 1, 0, 0, 0, 1931, 1932, 5, 138, 0, 0, 1932, 1933, 5, 360, 0, 0, 1933, 1934, 3, 316, 158, 0, 1934, 1939, 3, 110, 55, 0, 1935, 1936, 5, 6, 0, 0, 1936, 1938, 3, 110, 55, 0, 1937, 1935, 1, 0, 0, 0, 1938, 1941, 1, 0, 0, 0, 1939, 1937, 1, 0, 0, 0, 1939, 1940, 1, 0, 0, 0, 1940, 109, 1, 0, 0, 0, 1941, 1939, 1, 0, 0, 0, 1942, 1943, 5, 133, 0, 0, 1943, 1944, 5, 143, 0, 0, 1944, 1946, 3, 644, 322, 0, 1945, 1947, 3, 96, 48, 0, 1946, 1945, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1973, 1, 0, 0, 0, 1948, 1949, 5, 191, 0, 0, 1949, 1951, 5, 143, 0, 0, 1950, 1952, 3, 422, 211, 0, 1951, 1950, 1, 0, 0, 0, 1951, 1952, 1, 0, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 1955, 3, 818, 409, 0, 1954, 1956, 3, 96, 48, 0, 1955, 1954, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1973, 1, 0, 0, 0, 1957, 1958, 5, 138, 0, 0, 1958, 1959, 5, 143, 0, 0, 1959, 1962, 3, 818, 409, 0, 1960, 1961, 5, 333, 0, 0, 1961, 1963, 5, 174, 0, 0, 1962, 1960, 1, 0, 0, 0, 1962, 1963, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 1965, 5, 360, 0, 0, 1965, 1967, 3, 652, 326, 0, 1966, 1968, 3, 98, 49, 0, 1967, 1966, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 1, 0, 0, 0, 1969, 1971, 3, 96, 48, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 1973, 1, 0, 0, 0, 1972, 1942, 1, 0, 0, 0, 1972, 1948, 1, 0, 0, 0, 1972, 1957, 1, 0, 0, 0, 1973, 111, 1, 0, 0, 0, 1974, 1977, 5, 157, 0, 0, 1975, 1978, 3, 818, 409, 0, 1976, 1978, 5, 30, 0, 0, 1977, 1975, 1, 0, 0, 0, 1977, 1976, 1, 0, 0, 0, 1978, 113, 1, 0, 0, 0, 1979, 1981, 5, 169, 0, 0, 1980, 1982, 5, 107, 0, 0, 1981, 1980, 1, 0, 0, 0, 1981, 1982, 1, 0, 0, 0, 1982, 1983, 1, 0, 0, 0, 1983, 1985, 3, 774, 387, 0, 1984, 1986, 3, 144, 72, 0, 1985, 1984, 1, 0, 0, 0, 1985, 1986, 1, 0, 0, 0, 1986, 1987, 1, 0, 0, 0, 1987, 1989, 7, 18, 0, 0, 1988, 1990, 5, 297, 0, 0, 1989, 1988, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1994, 1, 0, 0, 0, 1991, 1995, 3, 808, 404, 0, 1992, 1995, 5, 343, 0, 0, 1993, 1995, 5, 344, 0, 0, 1994, 1991, 1, 0, 0, 0, 1994, 1992, 1, 0, 0, 0, 1994, 1993, 1, 0, 0, 0, 1995, 2001, 1, 0, 0, 0, 1996, 1998, 5, 100, 0, 0, 1997, 1996, 1, 0, 0, 0, 1997, 1998, 1, 0, 0, 0, 1998, 1999, 1, 0, 0, 0, 1999, 2000, 5, 184, 0, 0, 2000, 2002, 3, 808, 404, 0, 2001, 1997, 1, 0, 0, 0, 2001, 2002, 1, 0, 0, 0, 2002, 2004, 1, 0, 0, 0, 2003, 2005, 5, 105, 0, 0, 2004, 2003, 1, 0, 0, 0, 2004, 2005, 1, 0, 0, 0, 2005, 2006, 1, 0, 0, 0, 2006, 2008, 3, 116, 58, 0, 2007, 2009, 3, 638, 319, 0, 2008, 2007, 1, 0, 0, 0, 2008, 2009, 1, 0, 0, 0, 2009, 2029, 1, 0, 0, 0, 2010, 2011, 5, 169, 0, 0, 2011, 2012, 5, 2, 0, 0, 2012, 2013, 3, 530, 265, 0, 2013, 2014, 5, 3, 0, 0, 2014, 2016, 5, 94, 0, 0, 2015, 2017, 5, 297, 0, 0, 2016, 2015, 1, 0, 0, 0, 2016, 2017, 1, 0, 0, 0, 2017, 2021, 1, 0, 0, 0, 2018, 2022, 3, 808, 404, 0, 2019, 2022, 5, 343, 0, 0, 2020, 2022, 5, 344, 0, 0, 2021, 2018, 1, 0, 0, 0, 2021, 2019, 1, 0, 0, 0, 2021, 2020, 1, 0, 0, 0, 2022, 2024, 1, 0, 0, 0, 2023, 2025, 5, 105, 0, 0, 2024, 2023, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 2027, 3, 116, 58, 0, 2027, 2029, 1, 0, 0, 0, 2028, 1979, 1, 0, 0, 0, 2028, 2010, 1, 0, 0, 0, 2029, 115, 1, 0, 0, 0, 2030, 2054, 5, 107, 0, 0, 2031, 2054, 5, 112, 0, 0, 2032, 2034, 7, 19, 0, 0, 2033, 2035, 5, 36, 0, 0, 2034, 2033, 1, 0, 0, 0, 2034, 2035, 1, 0, 0, 0, 2035, 2036, 1, 0, 0, 0, 2036, 2054, 3, 808, 404, 0, 2037, 2054, 5, 171, 0, 0, 2038, 2054, 5, 216, 0, 0, 2039, 2040, 5, 209, 0, 0, 2040, 2043, 5, 298, 0, 0, 2041, 2044, 3, 148, 74, 0, 2042, 2044, 5, 9, 0, 0, 2043, 2041, 1, 0, 0, 0, 2043, 2042, 1, 0, 0, 0, 2044, 2054, 1, 0, 0, 0, 2045, 2047, 5, 209, 0, 0, 2046, 2048, 5, 77, 0, 0, 2047, 2046, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2050, 5, 78, 0, 0, 2050, 2054, 3, 148, 74, 0, 2051, 2052, 5, 194, 0, 0, 2052, 2054, 3, 808, 404, 0, 2053, 2030, 1, 0, 0, 0, 2053, 2031, 1, 0, 0, 0, 2053, 2032, 1, 0, 0, 0, 2053, 2037, 1, 0, 0, 0, 2053, 2038, 1, 0, 0, 0, 2053, 2039, 1, 0, 0, 0, 2053, 2045, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2054, 2057, 1, 0, 0, 0, 2055, 2053, 1, 0, 0, 0, 2055, 2056, 1, 0, 0, 0, 2056, 2070, 1, 0, 0, 0, 2057, 2055, 1, 0, 0, 0, 2058, 2059, 5, 2, 0, 0, 2059, 2064, 3, 118, 59, 0, 2060, 2061, 5, 6, 0, 0, 2061, 2063, 3, 118, 59, 0, 2062, 2060, 1, 0, 0, 0, 2063, 2066, 1, 0, 0, 0, 2064, 2062, 1, 0, 0, 0, 2064, 2065, 1, 0, 0, 0, 2065, 2067, 1, 0, 0, 0, 2066, 2064, 1, 0, 0, 0, 2067, 2068, 5, 3, 0, 0, 2068, 2070, 1, 0, 0, 0, 2069, 2055, 1, 0, 0, 0, 2069, 2058, 1, 0, 0, 0, 2070, 117, 1, 0, 0, 0, 2071, 2086, 3, 824, 412, 0, 2072, 2087, 3, 54, 27, 0, 2073, 2087, 3, 202, 101, 0, 2074, 2087, 5, 9, 0, 0, 2075, 2076, 5, 2, 0, 0, 2076, 2081, 3, 52, 26, 0, 2077, 2078, 5, 6, 0, 0, 2078, 2080, 3, 52, 26, 0, 2079, 2077, 1, 0, 0, 0, 2080, 2083, 1, 0, 0, 0, 2081, 2079, 1, 0, 0, 0, 2081, 2082, 1, 0, 0, 0, 2082, 2084, 1, 0, 0, 0, 2083, 2081, 1, 0, 0, 0, 2084, 2085, 5, 3, 0, 0, 2085, 2087, 1, 0, 0, 0, 2086, 2072, 1, 0, 0, 0, 2086, 2073, 1, 0, 0, 0, 2086, 2074, 1, 0, 0, 0, 2086, 2075, 1, 0, 0, 0, 2086, 2087, 1, 0, 0, 0, 2087, 119, 1, 0, 0, 0, 2088, 2090, 5, 46, 0, 0, 2089, 2091, 3, 122, 61, 0, 2090, 2089, 1, 0, 0, 0, 2090, 2091, 1, 0, 0, 0, 2091, 2092, 1, 0, 0, 0, 2092, 2094, 5, 92, 0, 0, 2093, 2095, 3, 294, 147, 0, 2094, 2093, 1, 0, 0, 0, 2094, 2095, 1, 0, 0, 0, 2095, 2096, 1, 0, 0, 0, 2096, 2162, 3, 772, 386, 0, 2097, 2099, 5, 2, 0, 0, 2098, 2100, 3, 126, 63, 0, 2099, 2098, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2101, 1, 0, 0, 0, 2101, 2103, 5, 3, 0, 0, 2102, 2104, 3, 164, 82, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2106, 1, 0, 0, 0, 2105, 2107, 3, 166, 83, 0, 2106, 2105, 1, 0, 0, 0, 2106, 2107, 1, 0, 0, 0, 2107, 2109, 1, 0, 0, 0, 2108, 2110, 3, 170, 85, 0, 2109, 2108, 1, 0, 0, 0, 2109, 2110, 1, 0, 0, 0, 2110, 2112, 1, 0, 0, 0, 2111, 2113, 3, 172, 86, 0, 2112, 2111, 1, 0, 0, 0, 2112, 2113, 1, 0, 0, 0, 2113, 2115, 1, 0, 0, 0, 2114, 2116, 3, 174, 87, 0, 2115, 2114, 1, 0, 0, 0, 2115, 2116, 1, 0, 0, 0, 2116, 2118, 1, 0, 0, 0, 2117, 2119, 3, 176, 88, 0, 2118, 2117, 1, 0, 0, 0, 2118, 2119, 1, 0, 0, 0, 2119, 2163, 1, 0, 0, 0, 2120, 2121, 5, 275, 0, 0, 2121, 2123, 3, 316, 158, 0, 2122, 2124, 3, 124, 62, 0, 2123, 2122, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2126, 1, 0, 0, 0, 2125, 2127, 3, 166, 83, 0, 2126, 2125, 1, 0, 0, 0, 2126, 2127, 1, 0, 0, 0, 2127, 2129, 1, 0, 0, 0, 2128, 2130, 3, 170, 85, 0, 2129, 2128, 1, 0, 0, 0, 2129, 2130, 1, 0, 0, 0, 2130, 2132, 1, 0, 0, 0, 2131, 2133, 3, 172, 86, 0, 2132, 2131, 1, 0, 0, 0, 2132, 2133, 1, 0, 0, 0, 2133, 2135, 1, 0, 0, 0, 2134, 2136, 3, 174, 87, 0, 2135, 2134, 1, 0, 0, 0, 2135, 2136, 1, 0, 0, 0, 2136, 2138, 1, 0, 0, 0, 2137, 2139, 3, 176, 88, 0, 2138, 2137, 1, 0, 0, 0, 2138, 2139, 1, 0, 0, 0, 2139, 2163, 1, 0, 0, 0, 2140, 2141, 5, 285, 0, 0, 2141, 2142, 5, 275, 0, 0, 2142, 2144, 3, 780, 390, 0, 2143, 2145, 3, 124, 62, 0, 2144, 2143, 1, 0, 0, 0, 2144, 2145, 1, 0, 0, 0, 2145, 2146, 1, 0, 0, 0, 2146, 2148, 3, 106, 53, 0, 2147, 2149, 3, 166, 83, 0, 2148, 2147, 1, 0, 0, 0, 2148, 2149, 1, 0, 0, 0, 2149, 2151, 1, 0, 0, 0, 2150, 2152, 3, 170, 85, 0, 2151, 2150, 1, 0, 0, 0, 2151, 2152, 1, 0, 0, 0, 2152, 2154, 1, 0, 0, 0, 2153, 2155, 3, 172, 86, 0, 2154, 2153, 1, 0, 0, 0, 2154, 2155, 1, 0, 0, 0, 2155, 2157, 1, 0, 0, 0, 2156, 2158, 3, 174, 87, 0, 2157, 2156, 1, 0, 0, 0, 2157, 2158, 1, 0, 0, 0, 2158, 2160, 1, 0, 0, 0, 2159, 2161, 3, 176, 88, 0, 2160, 2159, 1, 0, 0, 0, 2160, 2161, 1, 0, 0, 0, 2161, 2163, 1, 0, 0, 0, 2162, 2097, 1, 0, 0, 0, 2162, 2120, 1, 0, 0, 0, 2162, 2140, 1, 0, 0, 0, 2163, 121, 1, 0, 0, 0, 2164, 2170, 5, 354, 0, 0, 2165, 2170, 5, 352, 0, 0, 2166, 2167, 7, 20, 0, 0, 2167, 2170, 7, 21, 0, 0, 2168, 2170, 5, 367, 0, 0, 2169, 2164, 1, 0, 0, 0, 2169, 2165, 1, 0, 0, 0, 2169, 2166, 1, 0, 0, 0, 2169, 2168, 1, 0, 0, 0, 2170, 123, 1, 0, 0, 0, 2171, 2172, 5, 2, 0, 0, 2172, 2177, 3, 130, 65, 0, 2173, 2174, 5, 6, 0, 0, 2174, 2176, 3, 130, 65, 0, 2175, 2173, 1, 0, 0, 0, 2176, 2179, 1, 0, 0, 0, 2177, 2175, 1, 0, 0, 0, 2177, 2178, 1, 0, 0, 0, 2178, 2180, 1, 0, 0, 0, 2179, 2177, 1, 0, 0, 0, 2180, 2181, 5, 3, 0, 0, 2181, 125, 1, 0, 0, 0, 2182, 2187, 3, 128, 64, 0, 2183, 2184, 5, 6, 0, 0, 2184, 2186, 3, 128, 64, 0, 2185, 2183, 1, 0, 0, 0, 2186, 2189, 1, 0, 0, 0, 2187, 2185, 1, 0, 0, 0, 2187, 2188, 1, 0, 0, 0, 2188, 127, 1, 0, 0, 0, 2189, 2187, 1, 0, 0, 0, 2190, 2191, 5, 45, 0, 0, 2191, 2193, 3, 818, 409, 0, 2192, 2190, 1, 0, 0, 0, 2192, 2193, 1, 0, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 2206, 3, 142, 71, 0, 2195, 2206, 3, 132, 66, 0, 2196, 2197, 5, 120, 0, 0, 2197, 2202, 3, 780, 390, 0, 2198, 2199, 7, 22, 0, 0, 2199, 2201, 3, 140, 70, 0, 2200, 2198, 1, 0, 0, 0, 2201, 2204, 1, 0, 0, 0, 2202, 2200, 1, 0, 0, 0, 2202, 2203, 1, 0, 0, 0, 2203, 2206, 1, 0, 0, 0, 2204, 2202, 1, 0, 0, 0, 2205, 2192, 1, 0, 0, 0, 2205, 2195, 1, 0, 0, 0, 2205, 2196, 1, 0, 0, 0, 2206, 129, 1, 0, 0, 0, 2207, 2210, 3, 802, 401, 0, 2208, 2209, 5, 105, 0, 0, 2209, 2211, 5, 280, 0, 0, 2210, 2208, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2215, 1, 0, 0, 0, 2212, 2214, 3, 134, 67, 0, 2213, 2212, 1, 0, 0, 0, 2214, 2217, 1, 0, 0, 0, 2215, 2213, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2224, 1, 0, 0, 0, 2217, 2215, 1, 0, 0, 0, 2218, 2219, 5, 45, 0, 0, 2219, 2221, 3, 818, 409, 0, 2220, 2218, 1, 0, 0, 0, 2220, 2221, 1, 0, 0, 0, 2221, 2222, 1, 0, 0, 0, 2222, 2224, 3, 142, 71, 0, 2223, 2207, 1, 0, 0, 0, 2223, 2220, 1, 0, 0, 0, 2224, 131, 1, 0, 0, 0, 2225, 2226, 3, 802, 401, 0, 2226, 2228, 3, 652, 326, 0, 2227, 2229, 3, 220, 110, 0, 2228, 2227, 1, 0, 0, 0, 2228, 2229, 1, 0, 0, 0, 2229, 2239, 1, 0, 0, 0, 2230, 2237, 5, 345, 0, 0, 2231, 2238, 5, 544, 0, 0, 2232, 2238, 5, 205, 0, 0, 2233, 2238, 5, 545, 0, 0, 2234, 2238, 5, 546, 0, 0, 2235, 2238, 5, 53, 0, 0, 2236, 2238, 3, 818, 409, 0, 2237, 2231, 1, 0, 0, 0, 2237, 2232, 1, 0, 0, 0, 2237, 2233, 1, 0, 0, 0, 2237, 2234, 1, 0, 0, 0, 2237, 2235, 1, 0, 0, 0, 2237, 2236, 1, 0, 0, 0, 2238, 2240, 1, 0, 0, 0, 2239, 2230, 1, 0, 0, 0, 2239, 2240, 1, 0, 0, 0, 2240, 2243, 1, 0, 0, 0, 2241, 2242, 5, 543, 0, 0, 2242, 2244, 3, 818, 409, 0, 2243, 2241, 1, 0, 0, 0, 2243, 2244, 1, 0, 0, 0, 2244, 2246, 1, 0, 0, 0, 2245, 2247, 3, 98, 49, 0, 2246, 2245, 1, 0, 0, 0, 2246, 2247, 1, 0, 0, 0, 2247, 2250, 1, 0, 0, 0, 2248, 2249, 5, 105, 0, 0, 2249, 2251, 5, 280, 0, 0, 2250, 2248, 1, 0, 0, 0, 2250, 2251, 1, 0, 0, 0, 2251, 2255, 1, 0, 0, 0, 2252, 2254, 3, 134, 67, 0, 2253, 2252, 1, 0, 0, 0, 2254, 2257, 1, 0, 0, 0, 2255, 2253, 1, 0, 0, 0, 2255, 2256, 1, 0, 0, 0, 2256, 133, 1, 0, 0, 0, 2257, 2255, 1, 0, 0, 0, 2258, 2259, 5, 45, 0, 0, 2259, 2261, 3, 818, 409, 0, 2260, 2258, 1, 0, 0, 0, 2260, 2261, 1, 0, 0, 0, 2261, 2262, 1, 0, 0, 0, 2262, 2267, 3, 136, 68, 0, 2263, 2265, 5, 77, 0, 0, 2264, 2263, 1, 0, 0, 0, 2264, 2265, 1, 0, 0, 0, 2265, 2266, 1, 0, 0, 0, 2266, 2268, 5, 54, 0, 0, 2267, 2264, 1, 0, 0, 0, 2267, 2268, 1, 0, 0, 0, 2268, 2271, 1, 0, 0, 0, 2269, 2270, 5, 69, 0, 0, 2270, 2272, 7, 9, 0, 0, 2271, 2269, 1, 0, 0, 0, 2271, 2272, 1, 0, 0, 0, 2272, 135, 1, 0, 0, 0, 2273, 2275, 5, 77, 0, 0, 2274, 2273, 1, 0, 0, 0, 2274, 2275, 1, 0, 0, 0, 2275, 2276, 1, 0, 0, 0, 2276, 2354, 5, 78, 0, 0, 2277, 2279, 5, 98, 0, 0, 2278, 2280, 3, 400, 200, 0, 2279, 2278, 1, 0, 0, 0, 2279, 2280, 1, 0, 0, 0, 2280, 2282, 1, 0, 0, 0, 2281, 2283, 3, 178, 89, 0, 2282, 2281, 1, 0, 0, 0, 2282, 2283, 1, 0, 0, 0, 2283, 2354, 1, 0, 0, 0, 2284, 2290, 5, 98, 0, 0, 2285, 2287, 5, 273, 0, 0, 2286, 2288, 5, 77, 0, 0, 2287, 2286, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, 0, 2289, 2291, 5, 56, 0, 0, 2290, 2285, 1, 0, 0, 0, 2290, 2291, 1, 0, 0, 0, 2291, 2294, 1, 0, 0, 0, 2292, 2293, 5, 441, 0, 0, 2293, 2295, 3, 360, 180, 0, 2294, 2292, 1, 0, 0, 0, 2294, 2295, 1, 0, 0, 0, 2295, 2297, 1, 0, 0, 0, 2296, 2298, 3, 572, 286, 0, 2297, 2296, 1, 0, 0, 0, 2297, 2298, 1, 0, 0, 0, 2298, 2300, 1, 0, 0, 0, 2299, 2301, 3, 178, 89, 0, 2300, 2299, 1, 0, 0, 0, 2300, 2301, 1, 0, 0, 0, 2301, 2354, 1, 0, 0, 0, 2302, 2303, 5, 85, 0, 0, 2303, 2305, 5, 245, 0, 0, 2304, 2306, 3, 400, 200, 0, 2305, 2304, 1, 0, 0, 0, 2305, 2306, 1, 0, 0, 0, 2306, 2308, 1, 0, 0, 0, 2307, 2309, 3, 178, 89, 0, 2308, 2307, 1, 0, 0, 0, 2308, 2309, 1, 0, 0, 0, 2309, 2354, 1, 0, 0, 0, 2310, 2311, 5, 42, 0, 0, 2311, 2312, 5, 2, 0, 0, 2312, 2313, 3, 674, 337, 0, 2313, 2316, 5, 3, 0, 0, 2314, 2315, 5, 269, 0, 0, 2315, 2317, 5, 228, 0, 0, 2316, 2314, 1, 0, 0, 0, 2316, 2317, 1, 0, 0, 0, 2317, 2354, 1, 0, 0, 0, 2318, 2319, 5, 53, 0, 0, 2319, 2354, 3, 682, 341, 0, 2320, 2321, 5, 438, 0, 0, 2321, 2322, 3, 138, 69, 0, 2322, 2339, 5, 36, 0, 0, 2323, 2332, 5, 219, 0, 0, 2324, 2326, 5, 2, 0, 0, 2325, 2327, 3, 200, 100, 0, 2326, 2325, 1, 0, 0, 0, 2327, 2328, 1, 0, 0, 0, 2328, 2326, 1, 0, 0, 0, 2328, 2329, 1, 0, 0, 0, 2329, 2330, 1, 0, 0, 0, 2330, 2331, 5, 3, 0, 0, 2331, 2333, 1, 0, 0, 0, 2332, 2324, 1, 0, 0, 0, 2332, 2333, 1, 0, 0, 0, 2333, 2340, 1, 0, 0, 0, 2334, 2335, 5, 2, 0, 0, 2335, 2336, 3, 674, 337, 0, 2336, 2337, 5, 3, 0, 0, 2337, 2338, 5, 440, 0, 0, 2338, 2340, 1, 0, 0, 0, 2339, 2323, 1, 0, 0, 0, 2339, 2334, 1, 0, 0, 0, 2340, 2354, 1, 0, 0, 0, 2341, 2342, 5, 86, 0, 0, 2342, 2344, 3, 780, 390, 0, 2343, 2345, 3, 144, 72, 0, 2344, 2343, 1, 0, 0, 0, 2344, 2345, 1, 0, 0, 0, 2345, 2347, 1, 0, 0, 0, 2346, 2348, 3, 152, 76, 0, 2347, 2346, 1, 0, 0, 0, 2347, 2348, 1, 0, 0, 0, 2348, 2350, 1, 0, 0, 0, 2349, 2351, 3, 156, 78, 0, 2350, 2349, 1, 0, 0, 0, 2350, 2351, 1, 0, 0, 0, 2351, 2354, 1, 0, 0, 0, 2352, 2354, 3, 98, 49, 0, 2353, 2274, 1, 0, 0, 0, 2353, 2277, 1, 0, 0, 0, 2353, 2284, 1, 0, 0, 0, 2353, 2302, 1, 0, 0, 0, 2353, 2310, 1, 0, 0, 0, 2353, 2318, 1, 0, 0, 0, 2353, 2320, 1, 0, 0, 0, 2353, 2341, 1, 0, 0, 0, 2353, 2352, 1, 0, 0, 0, 2354, 137, 1, 0, 0, 0, 2355, 2359, 5, 139, 0, 0, 2356, 2357, 5, 147, 0, 0, 2357, 2359, 5, 53, 0, 0, 2358, 2355, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2359, 139, 1, 0, 0, 0, 2360, 2361, 7, 23, 0, 0, 2361, 141, 1, 0, 0, 0, 2362, 2363, 5, 42, 0, 0, 2363, 2364, 5, 2, 0, 0, 2364, 2365, 3, 674, 337, 0, 2365, 2369, 5, 3, 0, 0, 2366, 2368, 3, 272, 136, 0, 2367, 2366, 1, 0, 0, 0, 2368, 2371, 1, 0, 0, 0, 2369, 2367, 1, 0, 0, 0, 2369, 2370, 1, 0, 0, 0, 2370, 2459, 1, 0, 0, 0, 2371, 2369, 1, 0, 0, 0, 2372, 2376, 5, 98, 0, 0, 2373, 2374, 5, 85, 0, 0, 2374, 2376, 5, 245, 0, 0, 2375, 2372, 1, 0, 0, 0, 2375, 2373, 1, 0, 0, 0, 2376, 2400, 1, 0, 0, 0, 2377, 2379, 3, 144, 72, 0, 2378, 2380, 3, 150, 75, 0, 2379, 2378, 1, 0, 0, 0, 2379, 2380, 1, 0, 0, 0, 2380, 2382, 1, 0, 0, 0, 2381, 2383, 3, 400, 200, 0, 2382, 2381, 1, 0, 0, 0, 2382, 2383, 1, 0, 0, 0, 2383, 2385, 1, 0, 0, 0, 2384, 2386, 3, 178, 89, 0, 2385, 2384, 1, 0, 0, 0, 2385, 2386, 1, 0, 0, 0, 2386, 2390, 1, 0, 0, 0, 2387, 2389, 3, 272, 136, 0, 2388, 2387, 1, 0, 0, 0, 2389, 2392, 1, 0, 0, 0, 2390, 2388, 1, 0, 0, 0, 2390, 2391, 1, 0, 0, 0, 2391, 2401, 1, 0, 0, 0, 2392, 2390, 1, 0, 0, 0, 2393, 2397, 3, 180, 90, 0, 2394, 2396, 3, 272, 136, 0, 2395, 2394, 1, 0, 0, 0, 2396, 2399, 1, 0, 0, 0, 2397, 2395, 1, 0, 0, 0, 2397, 2398, 1, 0, 0, 0, 2398, 2401, 1, 0, 0, 0, 2399, 2397, 1, 0, 0, 0, 2400, 2377, 1, 0, 0, 0, 2400, 2393, 1, 0, 0, 0, 2401, 2459, 1, 0, 0, 0, 2402, 2404, 5, 199, 0, 0, 2403, 2405, 3, 170, 85, 0, 2404, 2403, 1, 0, 0, 0, 2404, 2405, 1, 0, 0, 0, 2405, 2406, 1, 0, 0, 0, 2406, 2407, 5, 2, 0, 0, 2407, 2412, 3, 154, 77, 0, 2408, 2409, 5, 6, 0, 0, 2409, 2411, 3, 154, 77, 0, 2410, 2408, 1, 0, 0, 0, 2411, 2414, 1, 0, 0, 0, 2412, 2410, 1, 0, 0, 0, 2412, 2413, 1, 0, 0, 0, 2413, 2415, 1, 0, 0, 0, 2414, 2412, 1, 0, 0, 0, 2415, 2417, 5, 3, 0, 0, 2416, 2418, 3, 150, 75, 0, 2417, 2416, 1, 0, 0, 0, 2417, 2418, 1, 0, 0, 0, 2418, 2420, 1, 0, 0, 0, 2419, 2421, 3, 400, 200, 0, 2420, 2419, 1, 0, 0, 0, 2420, 2421, 1, 0, 0, 0, 2421, 2423, 1, 0, 0, 0, 2422, 2424, 3, 178, 89, 0, 2423, 2422, 1, 0, 0, 0, 2423, 2424, 1, 0, 0, 0, 2424, 2430, 1, 0, 0, 0, 2425, 2426, 5, 103, 0, 0, 2426, 2427, 5, 2, 0, 0, 2427, 2428, 3, 674, 337, 0, 2428, 2429, 5, 3, 0, 0, 2429, 2431, 1, 0, 0, 0, 2430, 2425, 1, 0, 0, 0, 2430, 2431, 1, 0, 0, 0, 2431, 2435, 1, 0, 0, 0, 2432, 2434, 3, 272, 136, 0, 2433, 2432, 1, 0, 0, 0, 2434, 2437, 1, 0, 0, 0, 2435, 2433, 1, 0, 0, 0, 2435, 2436, 1, 0, 0, 0, 2436, 2459, 1, 0, 0, 0, 2437, 2435, 1, 0, 0, 0, 2438, 2439, 5, 63, 0, 0, 2439, 2440, 5, 245, 0, 0, 2440, 2441, 3, 144, 72, 0, 2441, 2442, 5, 86, 0, 0, 2442, 2444, 3, 780, 390, 0, 2443, 2445, 3, 144, 72, 0, 2444, 2443, 1, 0, 0, 0, 2444, 2445, 1, 0, 0, 0, 2445, 2447, 1, 0, 0, 0, 2446, 2448, 3, 152, 76, 0, 2447, 2446, 1, 0, 0, 0, 2447, 2448, 1, 0, 0, 0, 2448, 2450, 1, 0, 0, 0, 2449, 2451, 3, 156, 78, 0, 2450, 2449, 1, 0, 0, 0, 2450, 2451, 1, 0, 0, 0, 2451, 2455, 1, 0, 0, 0, 2452, 2454, 3, 272, 136, 0, 2453, 2452, 1, 0, 0, 0, 2454, 2457, 1, 0, 0, 0, 2455, 2453, 1, 0, 0, 0, 2455, 2456, 1, 0, 0, 0, 2456, 2459, 1, 0, 0, 0, 2457, 2455, 1, 0, 0, 0, 2458, 2362, 1, 0, 0, 0, 2458, 2375, 1, 0, 0, 0, 2458, 2402, 1, 0, 0, 0, 2458, 2438, 1, 0, 0, 0, 2459, 143, 1, 0, 0, 0, 2460, 2461, 5, 2, 0, 0, 2461, 2462, 3, 148, 74, 0, 2462, 2463, 5, 3, 0, 0, 2463, 145, 1, 0, 0, 0, 2464, 2465, 5, 2, 0, 0, 2465, 2470, 3, 802, 401, 0, 2466, 2467, 5, 6, 0, 0, 2467, 2469, 3, 802, 401, 0, 2468, 2466, 1, 0, 0, 0, 2469, 2472, 1, 0, 0, 0, 2470, 2468, 1, 0, 0, 0, 2470, 2471, 1, 0, 0, 0, 2471, 2473, 1, 0, 0, 0, 2472, 2470, 1, 0, 0, 0, 2473, 2474, 5, 3, 0, 0, 2474, 147, 1, 0, 0, 0, 2475, 2480, 3, 800, 400, 0, 2476, 2477, 5, 6, 0, 0, 2477, 2479, 3, 800, 400, 0, 2478, 2476, 1, 0, 0, 0, 2479, 2482, 1, 0, 0, 0, 2480, 2478, 1, 0, 0, 0, 2480, 2481, 1, 0, 0, 0, 2481, 149, 1, 0, 0, 0, 2482, 2480, 1, 0, 0, 0, 2483, 2484, 5, 441, 0, 0, 2484, 2485, 3, 144, 72, 0, 2485, 151, 1, 0, 0, 0, 2486, 2487, 5, 258, 0, 0, 2487, 2488, 7, 24, 0, 0, 2488, 153, 1, 0, 0, 0, 2489, 2490, 3, 362, 181, 0, 2490, 2497, 5, 105, 0, 0, 2491, 2498, 3, 414, 207, 0, 2492, 2493, 5, 278, 0, 0, 2493, 2494, 5, 2, 0, 0, 2494, 2495, 3, 414, 207, 0, 2495, 2496, 5, 3, 0, 0, 2496, 2498, 1, 0, 0, 0, 2497, 2491, 1, 0, 0, 0, 2497, 2492, 1, 0, 0, 0, 2498, 155, 1, 0, 0, 0, 2499, 2501, 3, 158, 79, 0, 2500, 2502, 3, 160, 80, 0, 2501, 2500, 1, 0, 0, 0, 2501, 2502, 1, 0, 0, 0, 2502, 2508, 1, 0, 0, 0, 2503, 2505, 3, 160, 80, 0, 2504, 2506, 3, 158, 79, 0, 2505, 2504, 1, 0, 0, 0, 2505, 2506, 1, 0, 0, 0, 2506, 2508, 1, 0, 0, 0, 2507, 2499, 1, 0, 0, 0, 2507, 2503, 1, 0, 0, 0, 2508, 157, 1, 0, 0, 0, 2509, 2510, 5, 80, 0, 0, 2510, 2511, 5, 369, 0, 0, 2511, 2512, 3, 162, 81, 0, 2512, 159, 1, 0, 0, 0, 2513, 2514, 5, 80, 0, 0, 2514, 2515, 5, 182, 0, 0, 2515, 2516, 3, 162, 81, 0, 2516, 161, 1, 0, 0, 0, 2517, 2518, 5, 269, 0, 0, 2518, 2527, 5, 132, 0, 0, 2519, 2527, 5, 315, 0, 0, 2520, 2527, 5, 150, 0, 0, 2521, 2522, 5, 333, 0, 0, 2522, 2524, 7, 25, 0, 0, 2523, 2525, 3, 148, 74, 0, 2524, 2523, 1, 0, 0, 0, 2524, 2525, 1, 0, 0, 0, 2525, 2527, 1, 0, 0, 0, 2526, 2517, 1, 0, 0, 0, 2526, 2519, 1, 0, 0, 0, 2526, 2520, 1, 0, 0, 0, 2526, 2521, 1, 0, 0, 0, 2527, 163, 1, 0, 0, 0, 2528, 2529, 5, 238, 0, 0, 2529, 2530, 5, 2, 0, 0, 2530, 2531, 3, 760, 380, 0, 2531, 2532, 5, 3, 0, 0, 2532, 165, 1, 0, 0, 0, 2533, 2534, 5, 285, 0, 0, 2534, 2535, 5, 147, 0, 0, 2535, 2536, 3, 818, 409, 0, 2536, 2537, 5, 2, 0, 0, 2537, 2542, 3, 168, 84, 0, 2538, 2539, 5, 6, 0, 0, 2539, 2541, 3, 168, 84, 0, 2540, 2538, 1, 0, 0, 0, 2541, 2544, 1, 0, 0, 0, 2542, 2540, 1, 0, 0, 0, 2542, 2543, 1, 0, 0, 0, 2543, 2545, 1, 0, 0, 0, 2544, 2542, 1, 0, 0, 0, 2545, 2546, 5, 3, 0, 0, 2546, 167, 1, 0, 0, 0, 2547, 2554, 3, 800, 400, 0, 2548, 2554, 3, 688, 344, 0, 2549, 2550, 5, 2, 0, 0, 2550, 2551, 3, 674, 337, 0, 2551, 2552, 5, 3, 0, 0, 2552, 2554, 1, 0, 0, 0, 2553, 2547, 1, 0, 0, 0, 2553, 2548, 1, 0, 0, 0, 2553, 2549, 1, 0, 0, 0, 2554, 2556, 1, 0, 0, 0, 2555, 2557, 3, 98, 49, 0, 2556, 2555, 1, 0, 0, 0, 2556, 2557, 1, 0, 0, 0, 2557, 2559, 1, 0, 0, 0, 2558, 2560, 3, 316, 158, 0, 2559, 2558, 1, 0, 0, 0, 2559, 2560, 1, 0, 0, 0, 2560, 169, 1, 0, 0, 0, 2561, 2562, 5, 100, 0, 0, 2562, 2563, 3, 818, 409, 0, 2563, 171, 1, 0, 0, 0, 2564, 2565, 5, 105, 0, 0, 2565, 2569, 3, 100, 50, 0, 2566, 2567, 7, 26, 0, 0, 2567, 2569, 5, 277, 0, 0, 2568, 2564, 1, 0, 0, 0, 2568, 2566, 1, 0, 0, 0, 2569, 173, 1, 0, 0, 0, 2570, 2571, 5, 80, 0, 0, 2571, 2577, 5, 161, 0, 0, 2572, 2578, 5, 191, 0, 0, 2573, 2574, 5, 182, 0, 0, 2574, 2578, 5, 320, 0, 0, 2575, 2576, 5, 292, 0, 0, 2576, 2578, 5, 320, 0, 0, 2577, 2572, 1, 0, 0, 0, 2577, 2573, 1, 0, 0, 0, 2577, 2575, 1, 0, 0, 0, 2578, 175, 1, 0, 0, 0, 2579, 2580, 5, 351, 0, 0, 2580, 2581, 3, 770, 385, 0, 2581, 177, 1, 0, 0, 0, 2582, 2583, 5, 100, 0, 0, 2583, 2584, 5, 226, 0, 0, 2584, 2585, 3, 176, 88, 0, 2585, 179, 1, 0, 0, 0, 2586, 2587, 5, 100, 0, 0, 2587, 2588, 5, 226, 0, 0, 2588, 2589, 3, 818, 409, 0, 2589, 181, 1, 0, 0, 0, 2590, 2591, 5, 46, 0, 0, 2591, 2596, 5, 342, 0, 0, 2592, 2594, 3, 294, 147, 0, 2593, 2592, 1, 0, 0, 0, 2593, 2594, 1, 0, 0, 0, 2594, 2595, 1, 0, 0, 0, 2595, 2597, 3, 316, 158, 0, 2596, 2593, 1, 0, 0, 0, 2596, 2597, 1, 0, 0, 0, 2597, 2599, 1, 0, 0, 0, 2598, 2600, 3, 144, 72, 0, 2599, 2598, 1, 0, 0, 0, 2599, 2600, 1, 0, 0, 0, 2600, 2601, 1, 0, 0, 0, 2601, 2611, 5, 80, 0, 0, 2602, 2607, 3, 732, 366, 0, 2603, 2604, 5, 6, 0, 0, 2604, 2606, 3, 732, 366, 0, 2605, 2603, 1, 0, 0, 0, 2606, 2609, 1, 0, 0, 0, 2607, 2605, 1, 0, 0, 0, 2607, 2608, 1, 0, 0, 0, 2608, 2612, 1, 0, 0, 0, 2609, 2607, 1, 0, 0, 0, 2610, 2612, 3, 730, 365, 0, 2611, 2602, 1, 0, 0, 0, 2611, 2610, 1, 0, 0, 0, 2612, 2613, 1, 0, 0, 0, 2613, 2614, 3, 610, 305, 0, 2614, 183, 1, 0, 0, 0, 2615, 2616, 5, 138, 0, 0, 2616, 2618, 5, 342, 0, 0, 2617, 2619, 3, 422, 211, 0, 2618, 2617, 1, 0, 0, 0, 2618, 2619, 1, 0, 0, 0, 2619, 2620, 1, 0, 0, 0, 2620, 2621, 3, 316, 158, 0, 2621, 2622, 5, 333, 0, 0, 2622, 2623, 5, 342, 0, 0, 2623, 2624, 3, 812, 406, 0, 2624, 185, 1, 0, 0, 0, 2625, 2627, 5, 46, 0, 0, 2626, 2628, 3, 122, 61, 0, 2627, 2626, 1, 0, 0, 0, 2627, 2628, 1, 0, 0, 0, 2628, 2629, 1, 0, 0, 0, 2629, 2631, 5, 92, 0, 0, 2630, 2632, 3, 294, 147, 0, 2631, 2630, 1, 0, 0, 0, 2631, 2632, 1, 0, 0, 0, 2632, 2633, 1, 0, 0, 0, 2633, 2634, 3, 188, 94, 0, 2634, 2635, 5, 36, 0, 0, 2635, 2637, 3, 560, 280, 0, 2636, 2638, 3, 190, 95, 0, 2637, 2636, 1, 0, 0, 0, 2637, 2638, 1, 0, 0, 0, 2638, 187, 1, 0, 0, 0, 2639, 2641, 3, 772, 386, 0, 2640, 2642, 3, 146, 73, 0, 2641, 2640, 1, 0, 0, 0, 2641, 2642, 1, 0, 0, 0, 2642, 2644, 1, 0, 0, 0, 2643, 2645, 3, 170, 85, 0, 2644, 2643, 1, 0, 0, 0, 2644, 2645, 1, 0, 0, 0, 2645, 2647, 1, 0, 0, 0, 2646, 2648, 3, 172, 86, 0, 2647, 2646, 1, 0, 0, 0, 2647, 2648, 1, 0, 0, 0, 2648, 2650, 1, 0, 0, 0, 2649, 2651, 3, 174, 87, 0, 2650, 2649, 1, 0, 0, 0, 2650, 2651, 1, 0, 0, 0, 2651, 2653, 1, 0, 0, 0, 2652, 2654, 3, 176, 88, 0, 2653, 2652, 1, 0, 0, 0, 2653, 2654, 1, 0, 0, 0, 2654, 189, 1, 0, 0, 0, 2655, 2659, 5, 105, 0, 0, 2656, 2660, 5, 174, 0, 0, 2657, 2658, 5, 269, 0, 0, 2658, 2660, 5, 174, 0, 0, 2659, 2656, 1, 0, 0, 0, 2659, 2657, 1, 0, 0, 0, 2660, 191, 1, 0, 0, 0, 2661, 2663, 5, 46, 0, 0, 2662, 2664, 5, 367, 0, 0, 2663, 2662, 1, 0, 0, 0, 2663, 2664, 1, 0, 0, 0, 2664, 2665, 1, 0, 0, 0, 2665, 2666, 5, 259, 0, 0, 2666, 2668, 5, 376, 0, 0, 2667, 2669, 3, 294, 147, 0, 2668, 2667, 1, 0, 0, 0, 2668, 2669, 1, 0, 0, 0, 2669, 2670, 1, 0, 0, 0, 2670, 2672, 3, 776, 388, 0, 2671, 2673, 3, 146, 73, 0, 2672, 2671, 1, 0, 0, 0, 2672, 2673, 1, 0, 0, 0, 2673, 2675, 1, 0, 0, 0, 2674, 2676, 3, 170, 85, 0, 2675, 2674, 1, 0, 0, 0, 2675, 2676, 1, 0, 0, 0, 2676, 2678, 1, 0, 0, 0, 2677, 2679, 3, 102, 51, 0, 2678, 2677, 1, 0, 0, 0, 2678, 2679, 1, 0, 0, 0, 2679, 2681, 1, 0, 0, 0, 2680, 2682, 3, 176, 88, 0, 2681, 2680, 1, 0, 0, 0, 2681, 2682, 1, 0, 0, 0, 2682, 2683, 1, 0, 0, 0, 2683, 2684, 5, 36, 0, 0, 2684, 2686, 3, 560, 280, 0, 2685, 2687, 3, 190, 95, 0, 2686, 2685, 1, 0, 0, 0, 2686, 2687, 1, 0, 0, 0, 2687, 193, 1, 0, 0, 0, 2688, 2689, 5, 305, 0, 0, 2689, 2690, 5, 259, 0, 0, 2690, 2692, 5, 376, 0, 0, 2691, 2693, 5, 109, 0, 0, 2692, 2691, 1, 0, 0, 0, 2692, 2693, 1, 0, 0, 0, 2693, 2694, 1, 0, 0, 0, 2694, 2696, 3, 778, 389, 0, 2695, 2697, 3, 190, 95, 0, 2696, 2695, 1, 0, 0, 0, 2696, 2697, 1, 0, 0, 0, 2697, 195, 1, 0, 0, 0, 2698, 2700, 5, 46, 0, 0, 2699, 2701, 3, 122, 61, 0, 2700, 2699, 1, 0, 0, 0, 2700, 2701, 1, 0, 0, 0, 2701, 2702, 1, 0, 0, 0, 2702, 2704, 5, 328, 0, 0, 2703, 2705, 3, 294, 147, 0, 2704, 2703, 1, 0, 0, 0, 2704, 2705, 1, 0, 0, 0, 2705, 2706, 1, 0, 0, 0, 2706, 2712, 3, 780, 390, 0, 2707, 2709, 3, 200, 100, 0, 2708, 2707, 1, 0, 0, 0, 2709, 2710, 1, 0, 0, 0, 2710, 2708, 1, 0, 0, 0, 2710, 2711, 1, 0, 0, 0, 2711, 2713, 1, 0, 0, 0, 2712, 2708, 1, 0, 0, 0, 2712, 2713, 1, 0, 0, 0, 2713, 197, 1, 0, 0, 0, 2714, 2715, 5, 138, 0, 0, 2715, 2717, 5, 328, 0, 0, 2716, 2718, 3, 422, 211, 0, 2717, 2716, 1, 0, 0, 0, 2717, 2718, 1, 0, 0, 0, 2718, 2719, 1, 0, 0, 0, 2719, 2721, 3, 780, 390, 0, 2720, 2722, 3, 200, 100, 0, 2721, 2720, 1, 0, 0, 0, 2722, 2723, 1, 0, 0, 0, 2723, 2721, 1, 0, 0, 0, 2723, 2724, 1, 0, 0, 0, 2724, 199, 1, 0, 0, 0, 2725, 2726, 5, 36, 0, 0, 2726, 2759, 3, 654, 327, 0, 2727, 2729, 5, 148, 0, 0, 2728, 2730, 3, 202, 101, 0, 2729, 2728, 1, 0, 0, 0, 2729, 2730, 1, 0, 0, 0, 2730, 2759, 1, 0, 0, 0, 2731, 2733, 5, 225, 0, 0, 2732, 2734, 5, 147, 0, 0, 2733, 2732, 1, 0, 0, 0, 2733, 2734, 1, 0, 0, 0, 2734, 2735, 1, 0, 0, 0, 2735, 2759, 3, 202, 101, 0, 2736, 2737, 7, 27, 0, 0, 2737, 2759, 3, 202, 101, 0, 2738, 2739, 5, 269, 0, 0, 2739, 2759, 7, 28, 0, 0, 2740, 2741, 5, 281, 0, 0, 2741, 2742, 5, 147, 0, 0, 2742, 2759, 3, 800, 400, 0, 2743, 2744, 5, 328, 0, 0, 2744, 2745, 5, 266, 0, 0, 2745, 2759, 3, 316, 158, 0, 2746, 2748, 5, 340, 0, 0, 2747, 2749, 5, 105, 0, 0, 2748, 2747, 1, 0, 0, 0, 2748, 2749, 1, 0, 0, 0, 2749, 2750, 1, 0, 0, 0, 2750, 2759, 3, 202, 101, 0, 2751, 2753, 5, 314, 0, 0, 2752, 2754, 5, 105, 0, 0, 2753, 2752, 1, 0, 0, 0, 2753, 2754, 1, 0, 0, 0, 2754, 2756, 1, 0, 0, 0, 2755, 2757, 3, 202, 101, 0, 2756, 2755, 1, 0, 0, 0, 2756, 2757, 1, 0, 0, 0, 2757, 2759, 1, 0, 0, 0, 2758, 2725, 1, 0, 0, 0, 2758, 2727, 1, 0, 0, 0, 2758, 2731, 1, 0, 0, 0, 2758, 2736, 1, 0, 0, 0, 2758, 2738, 1, 0, 0, 0, 2758, 2740, 1, 0, 0, 0, 2758, 2743, 1, 0, 0, 0, 2758, 2746, 1, 0, 0, 0, 2758, 2751, 1, 0, 0, 0, 2759, 201, 1, 0, 0, 0, 2760, 2762, 7, 29, 0, 0, 2761, 2760, 1, 0, 0, 0, 2761, 2762, 1, 0, 0, 0, 2762, 2763, 1, 0, 0, 0, 2763, 2766, 5, 573, 0, 0, 2764, 2766, 3, 812, 406, 0, 2765, 2761, 1, 0, 0, 0, 2765, 2764, 1, 0, 0, 0, 2766, 203, 1, 0, 0, 0, 2767, 2769, 5, 46, 0, 0, 2768, 2770, 3, 366, 183, 0, 2769, 2768, 1, 0, 0, 0, 2769, 2770, 1, 0, 0, 0, 2770, 2772, 1, 0, 0, 0, 2771, 2773, 5, 359, 0, 0, 2772, 2771, 1, 0, 0, 0, 2772, 2773, 1, 0, 0, 0, 2773, 2775, 1, 0, 0, 0, 2774, 2776, 5, 295, 0, 0, 2775, 2774, 1, 0, 0, 0, 2775, 2776, 1, 0, 0, 0, 2776, 2777, 1, 0, 0, 0, 2777, 2778, 5, 247, 0, 0, 2778, 2791, 3, 818, 409, 0, 2779, 2780, 5, 215, 0, 0, 2780, 2783, 3, 316, 158, 0, 2781, 2782, 5, 239, 0, 0, 2782, 2784, 3, 316, 158, 0, 2783, 2781, 1, 0, 0, 0, 2783, 2784, 1, 0, 0, 0, 2784, 2789, 1, 0, 0, 0, 2785, 2786, 5, 373, 0, 0, 2786, 2790, 3, 316, 158, 0, 2787, 2788, 5, 269, 0, 0, 2788, 2790, 5, 373, 0, 0, 2789, 2785, 1, 0, 0, 0, 2789, 2787, 1, 0, 0, 0, 2789, 2790, 1, 0, 0, 0, 2790, 2792, 1, 0, 0, 0, 2791, 2779, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 205, 1, 0, 0, 0, 2793, 2794, 5, 46, 0, 0, 2794, 2797, 3, 176, 88, 0, 2795, 2796, 5, 282, 0, 0, 2796, 2798, 3, 814, 407, 0, 2797, 2795, 1, 0, 0, 0, 2797, 2798, 1, 0, 0, 0, 2798, 2799, 1, 0, 0, 0, 2799, 2800, 5, 255, 0, 0, 2800, 2802, 3, 808, 404, 0, 2801, 2803, 3, 102, 51, 0, 2802, 2801, 1, 0, 0, 0, 2802, 2803, 1, 0, 0, 0, 2803, 207, 1, 0, 0, 0, 2804, 2805, 5, 46, 0, 0, 2805, 2807, 5, 204, 0, 0, 2806, 2808, 3, 294, 147, 0, 2807, 2806, 1, 0, 0, 0, 2807, 2808, 1, 0, 0, 0, 2808, 2809, 1, 0, 0, 0, 2809, 2811, 3, 818, 409, 0, 2810, 2812, 5, 105, 0, 0, 2811, 2810, 1, 0, 0, 0, 2811, 2812, 1, 0, 0, 0, 2812, 2820, 1, 0, 0, 0, 2813, 2814, 5, 323, 0, 0, 2814, 2819, 3, 790, 395, 0, 2815, 2816, 7, 30, 0, 0, 2816, 2819, 3, 58, 29, 0, 2817, 2819, 5, 150, 0, 0, 2818, 2813, 1, 0, 0, 0, 2818, 2815, 1, 0, 0, 0, 2818, 2817, 1, 0, 0, 0, 2819, 2822, 1, 0, 0, 0, 2820, 2818, 1, 0, 0, 0, 2820, 2821, 1, 0, 0, 0, 2821, 209, 1, 0, 0, 0, 2822, 2820, 1, 0, 0, 0, 2823, 2824, 5, 138, 0, 0, 2824, 2825, 5, 204, 0, 0, 2825, 2826, 3, 818, 409, 0, 2826, 2831, 5, 369, 0, 0, 2827, 2828, 5, 94, 0, 0, 2828, 2830, 3, 58, 29, 0, 2829, 2827, 1, 0, 0, 0, 2830, 2833, 1, 0, 0, 0, 2831, 2829, 1, 0, 0, 0, 2831, 2832, 1, 0, 0, 0, 2832, 211, 1, 0, 0, 0, 2833, 2831, 1, 0, 0, 0, 2834, 2835, 5, 138, 0, 0, 2835, 2836, 5, 204, 0, 0, 2836, 2837, 3, 818, 409, 0, 2837, 2870, 7, 6, 0, 0, 2838, 2839, 5, 443, 0, 0, 2839, 2840, 5, 62, 0, 0, 2840, 2841, 3, 652, 326, 0, 2841, 2842, 5, 247, 0, 0, 2842, 2843, 3, 818, 409, 0, 2843, 2871, 1, 0, 0, 0, 2844, 2845, 5, 442, 0, 0, 2845, 2871, 3, 374, 187, 0, 2846, 2847, 5, 296, 0, 0, 2847, 2871, 3, 378, 189, 0, 2848, 2849, 5, 278, 0, 0, 2849, 2850, 7, 31, 0, 0, 2850, 2851, 3, 316, 158, 0, 2851, 2852, 3, 170, 85, 0, 2852, 2871, 1, 0, 0, 0, 2853, 2854, 5, 278, 0, 0, 2854, 2871, 3, 416, 208, 0, 2855, 2856, 5, 211, 0, 0, 2856, 2871, 3, 382, 191, 0, 2857, 2858, 7, 32, 0, 0, 2858, 2871, 3, 652, 326, 0, 2859, 2860, 5, 41, 0, 0, 2860, 2861, 5, 2, 0, 0, 2861, 2862, 3, 652, 326, 0, 2862, 2863, 5, 36, 0, 0, 2863, 2864, 3, 652, 326, 0, 2864, 2865, 5, 3, 0, 0, 2865, 2871, 1, 0, 0, 0, 2866, 2867, 5, 136, 0, 0, 2867, 2871, 3, 394, 197, 0, 2868, 2871, 3, 312, 156, 0, 2869, 2871, 3, 310, 155, 0, 2870, 2838, 1, 0, 0, 0, 2870, 2844, 1, 0, 0, 0, 2870, 2846, 1, 0, 0, 0, 2870, 2848, 1, 0, 0, 0, 2870, 2853, 1, 0, 0, 0, 2870, 2855, 1, 0, 0, 0, 2870, 2857, 1, 0, 0, 0, 2870, 2859, 1, 0, 0, 0, 2870, 2866, 1, 0, 0, 0, 2870, 2868, 1, 0, 0, 0, 2870, 2869, 1, 0, 0, 0, 2871, 213, 1, 0, 0, 0, 2872, 2873, 5, 46, 0, 0, 2873, 2874, 5, 63, 0, 0, 2874, 2875, 5, 174, 0, 0, 2875, 2876, 5, 381, 0, 0, 2876, 2882, 3, 818, 409, 0, 2877, 2879, 3, 216, 108, 0, 2878, 2877, 1, 0, 0, 0, 2879, 2880, 1, 0, 0, 0, 2880, 2878, 1, 0, 0, 0, 2880, 2881, 1, 0, 0, 0, 2881, 2883, 1, 0, 0, 0, 2882, 2878, 1, 0, 0, 0, 2882, 2883, 1, 0, 0, 0, 2883, 2885, 1, 0, 0, 0, 2884, 2886, 3, 220, 110, 0, 2885, 2884, 1, 0, 0, 0, 2885, 2886, 1, 0, 0, 0, 2886, 215, 1, 0, 0, 0, 2887, 2889, 7, 33, 0, 0, 2888, 2890, 3, 316, 158, 0, 2889, 2888, 1, 0, 0, 0, 2889, 2890, 1, 0, 0, 0, 2890, 2894, 1, 0, 0, 0, 2891, 2892, 5, 269, 0, 0, 2892, 2894, 7, 33, 0, 0, 2893, 2887, 1, 0, 0, 0, 2893, 2891, 1, 0, 0, 0, 2894, 217, 1, 0, 0, 0, 2895, 2896, 5, 138, 0, 0, 2896, 2897, 5, 63, 0, 0, 2897, 2898, 5, 174, 0, 0, 2898, 2899, 5, 381, 0, 0, 2899, 2913, 3, 818, 409, 0, 2900, 2902, 3, 216, 108, 0, 2901, 2900, 1, 0, 0, 0, 2902, 2903, 1, 0, 0, 0, 2903, 2901, 1, 0, 0, 0, 2903, 2904, 1, 0, 0, 0, 2904, 2906, 1, 0, 0, 0, 2905, 2901, 1, 0, 0, 0, 2905, 2906, 1, 0, 0, 0, 2906, 2907, 1, 0, 0, 0, 2907, 2914, 3, 222, 111, 0, 2908, 2910, 3, 216, 108, 0, 2909, 2908, 1, 0, 0, 0, 2910, 2911, 1, 0, 0, 0, 2911, 2909, 1, 0, 0, 0, 2911, 2912, 1, 0, 0, 0, 2912, 2914, 1, 0, 0, 0, 2913, 2905, 1, 0, 0, 0, 2913, 2909, 1, 0, 0, 0, 2914, 219, 1, 0, 0, 0, 2915, 2916, 5, 280, 0, 0, 2916, 2917, 5, 2, 0, 0, 2917, 2922, 3, 226, 113, 0, 2918, 2919, 5, 6, 0, 0, 2919, 2921, 3, 226, 113, 0, 2920, 2918, 1, 0, 0, 0, 2921, 2924, 1, 0, 0, 0, 2922, 2920, 1, 0, 0, 0, 2922, 2923, 1, 0, 0, 0, 2923, 2925, 1, 0, 0, 0, 2924, 2922, 1, 0, 0, 0, 2925, 2926, 5, 3, 0, 0, 2926, 221, 1, 0, 0, 0, 2927, 2928, 5, 280, 0, 0, 2928, 2929, 5, 2, 0, 0, 2929, 2934, 3, 224, 112, 0, 2930, 2931, 5, 6, 0, 0, 2931, 2933, 3, 224, 112, 0, 2932, 2930, 1, 0, 0, 0, 2933, 2936, 1, 0, 0, 0, 2934, 2932, 1, 0, 0, 0, 2934, 2935, 1, 0, 0, 0, 2935, 2937, 1, 0, 0, 0, 2936, 2934, 1, 0, 0, 0, 2937, 2938, 5, 3, 0, 0, 2938, 223, 1, 0, 0, 0, 2939, 2940, 7, 34, 0, 0, 2940, 2941, 3, 226, 113, 0, 2941, 225, 1, 0, 0, 0, 2942, 2943, 3, 824, 412, 0, 2943, 2944, 3, 808, 404, 0, 2944, 227, 1, 0, 0, 0, 2945, 2946, 5, 46, 0, 0, 2946, 2948, 5, 331, 0, 0, 2947, 2949, 3, 294, 147, 0, 2948, 2947, 1, 0, 0, 0, 2948, 2949, 1, 0, 0, 0, 2949, 2950, 1, 0, 0, 0, 2950, 2953, 3, 818, 409, 0, 2951, 2952, 5, 360, 0, 0, 2952, 2954, 3, 808, 404, 0, 2953, 2951, 1, 0, 0, 0, 2953, 2954, 1, 0, 0, 0, 2954, 2956, 1, 0, 0, 0, 2955, 2957, 3, 230, 115, 0, 2956, 2955, 1, 0, 0, 0, 2956, 2957, 1, 0, 0, 0, 2957, 2958, 1, 0, 0, 0, 2958, 2959, 5, 63, 0, 0, 2959, 2960, 5, 174, 0, 0, 2960, 2961, 5, 381, 0, 0, 2961, 2963, 3, 818, 409, 0, 2962, 2964, 3, 220, 110, 0, 2963, 2962, 1, 0, 0, 0, 2963, 2964, 1, 0, 0, 0, 2964, 229, 1, 0, 0, 0, 2965, 2968, 5, 375, 0, 0, 2966, 2969, 3, 808, 404, 0, 2967, 2969, 5, 78, 0, 0, 2968, 2966, 1, 0, 0, 0, 2968, 2967, 1, 0, 0, 0, 2969, 231, 1, 0, 0, 0, 2970, 2971, 5, 138, 0, 0, 2971, 2972, 5, 331, 0, 0, 2972, 2978, 3, 818, 409, 0, 2973, 2979, 3, 222, 111, 0, 2974, 2976, 3, 230, 115, 0, 2975, 2977, 3, 222, 111, 0, 2976, 2975, 1, 0, 0, 0, 2976, 2977, 1, 0, 0, 0, 2977, 2979, 1, 0, 0, 0, 2978, 2973, 1, 0, 0, 0, 2978, 2974, 1, 0, 0, 0, 2979, 233, 1, 0, 0, 0, 2980, 2981, 5, 46, 0, 0, 2981, 2982, 5, 63, 0, 0, 2982, 2984, 5, 92, 0, 0, 2983, 2985, 3, 294, 147, 0, 2984, 2983, 1, 0, 0, 0, 2984, 2985, 1, 0, 0, 0, 2985, 2986, 1, 0, 0, 0, 2986, 2987, 3, 772, 386, 0, 2987, 2989, 5, 2, 0, 0, 2988, 2990, 3, 126, 63, 0, 2989, 2988, 1, 0, 0, 0, 2989, 2990, 1, 0, 0, 0, 2990, 2991, 1, 0, 0, 0, 2991, 2993, 5, 3, 0, 0, 2992, 2994, 3, 164, 82, 0, 2993, 2992, 1, 0, 0, 0, 2993, 2994, 1, 0, 0, 0, 2994, 2995, 1, 0, 0, 0, 2995, 2996, 5, 331, 0, 0, 2996, 2998, 3, 818, 409, 0, 2997, 2999, 3, 220, 110, 0, 2998, 2997, 1, 0, 0, 0, 2998, 2999, 1, 0, 0, 0, 2999, 3020, 1, 0, 0, 0, 3000, 3001, 5, 46, 0, 0, 3001, 3002, 5, 63, 0, 0, 3002, 3004, 5, 92, 0, 0, 3003, 3005, 3, 294, 147, 0, 3004, 3003, 1, 0, 0, 0, 3004, 3005, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3007, 3, 772, 386, 0, 3007, 3008, 5, 285, 0, 0, 3008, 3009, 5, 275, 0, 0, 3009, 3011, 3, 774, 387, 0, 3010, 3012, 3, 124, 62, 0, 3011, 3010, 1, 0, 0, 0, 3011, 3012, 1, 0, 0, 0, 3012, 3013, 1, 0, 0, 0, 3013, 3014, 3, 106, 53, 0, 3014, 3015, 5, 331, 0, 0, 3015, 3017, 3, 818, 409, 0, 3016, 3018, 3, 220, 110, 0, 3017, 3016, 1, 0, 0, 0, 3017, 3018, 1, 0, 0, 0, 3018, 3020, 1, 0, 0, 0, 3019, 2980, 1, 0, 0, 0, 3019, 3000, 1, 0, 0, 0, 3020, 235, 1, 0, 0, 0, 3021, 3022, 5, 444, 0, 0, 3022, 3023, 5, 63, 0, 0, 3023, 3024, 5, 323, 0, 0, 3024, 3034, 3, 790, 395, 0, 3025, 3026, 5, 74, 0, 0, 3026, 3029, 5, 94, 0, 0, 3027, 3029, 5, 59, 0, 0, 3028, 3025, 1, 0, 0, 0, 3028, 3027, 1, 0, 0, 0, 3029, 3030, 1, 0, 0, 0, 3030, 3031, 5, 2, 0, 0, 3031, 3032, 3, 628, 314, 0, 3032, 3033, 5, 3, 0, 0, 3033, 3035, 1, 0, 0, 0, 3034, 3028, 1, 0, 0, 0, 3034, 3035, 1, 0, 0, 0, 3035, 3036, 1, 0, 0, 0, 3036, 3037, 5, 64, 0, 0, 3037, 3038, 5, 331, 0, 0, 3038, 3039, 3, 818, 409, 0, 3039, 3040, 5, 71, 0, 0, 3040, 3042, 3, 818, 409, 0, 3041, 3043, 3, 220, 110, 0, 3042, 3041, 1, 0, 0, 0, 3042, 3043, 1, 0, 0, 0, 3043, 237, 1, 0, 0, 0, 3044, 3045, 5, 46, 0, 0, 3045, 3046, 5, 99, 0, 0, 3046, 3048, 5, 257, 0, 0, 3047, 3049, 3, 294, 147, 0, 3048, 3047, 1, 0, 0, 0, 3048, 3049, 1, 0, 0, 0, 3049, 3050, 1, 0, 0, 0, 3050, 3053, 5, 62, 0, 0, 3051, 3054, 3, 814, 407, 0, 3052, 3054, 5, 99, 0, 0, 3053, 3051, 1, 0, 0, 0, 3053, 3052, 1, 0, 0, 0, 3054, 3055, 1, 0, 0, 0, 3055, 3056, 5, 331, 0, 0, 3056, 3058, 3, 818, 409, 0, 3057, 3059, 3, 220, 110, 0, 3058, 3057, 1, 0, 0, 0, 3058, 3059, 1, 0, 0, 0, 3059, 239, 1, 0, 0, 0, 3060, 3061, 5, 138, 0, 0, 3061, 3062, 5, 99, 0, 0, 3062, 3063, 5, 257, 0, 0, 3063, 3066, 5, 62, 0, 0, 3064, 3067, 3, 814, 407, 0, 3065, 3067, 5, 99, 0, 0, 3066, 3064, 1, 0, 0, 0, 3066, 3065, 1, 0, 0, 0, 3067, 3068, 1, 0, 0, 0, 3068, 3069, 5, 331, 0, 0, 3069, 3070, 3, 818, 409, 0, 3070, 3071, 3, 222, 111, 0, 3071, 241, 1, 0, 0, 0, 3072, 3073, 5, 46, 0, 0, 3073, 3074, 5, 445, 0, 0, 3074, 3075, 3, 818, 409, 0, 3075, 3076, 5, 80, 0, 0, 3076, 3083, 3, 780, 390, 0, 3077, 3081, 5, 36, 0, 0, 3078, 3082, 5, 541, 0, 0, 3079, 3082, 5, 542, 0, 0, 3080, 3082, 3, 826, 413, 0, 3081, 3078, 1, 0, 0, 0, 3081, 3079, 1, 0, 0, 0, 3081, 3080, 1, 0, 0, 0, 3082, 3084, 1, 0, 0, 0, 3083, 3077, 1, 0, 0, 0, 3083, 3084, 1, 0, 0, 0, 3084, 3087, 1, 0, 0, 0, 3085, 3086, 5, 62, 0, 0, 3086, 3088, 7, 35, 0, 0, 3087, 3085, 1, 0, 0, 0, 3087, 3088, 1, 0, 0, 0, 3088, 3091, 1, 0, 0, 0, 3089, 3090, 5, 94, 0, 0, 3090, 3092, 3, 816, 408, 0, 3091, 3089, 1, 0, 0, 0, 3091, 3092, 1, 0, 0, 0, 3092, 3094, 1, 0, 0, 0, 3093, 3095, 3, 250, 125, 0, 3094, 3093, 1, 0, 0, 0, 3094, 3095, 1, 0, 0, 0, 3095, 3097, 1, 0, 0, 0, 3096, 3098, 3, 252, 126, 0, 3097, 3096, 1, 0, 0, 0, 3097, 3098, 1, 0, 0, 0, 3098, 243, 1, 0, 0, 0, 3099, 3100, 5, 138, 0, 0, 3100, 3101, 5, 445, 0, 0, 3101, 3102, 3, 818, 409, 0, 3102, 3103, 5, 80, 0, 0, 3103, 3106, 3, 780, 390, 0, 3104, 3105, 5, 94, 0, 0, 3105, 3107, 3, 816, 408, 0, 3106, 3104, 1, 0, 0, 0, 3106, 3107, 1, 0, 0, 0, 3107, 3109, 1, 0, 0, 0, 3108, 3110, 3, 250, 125, 0, 3109, 3108, 1, 0, 0, 0, 3109, 3110, 1, 0, 0, 0, 3110, 3112, 1, 0, 0, 0, 3111, 3113, 3, 252, 126, 0, 3112, 3111, 1, 0, 0, 0, 3112, 3113, 1, 0, 0, 0, 3113, 245, 1, 0, 0, 0, 3114, 3115, 5, 138, 0, 0, 3115, 3116, 5, 296, 0, 0, 3116, 3118, 3, 796, 398, 0, 3117, 3119, 3, 368, 184, 0, 3118, 3117, 1, 0, 0, 0, 3118, 3119, 1, 0, 0, 0, 3119, 3146, 1, 0, 0, 0, 3120, 3124, 3, 248, 124, 0, 3121, 3123, 3, 248, 124, 0, 3122, 3121, 1, 0, 0, 0, 3123, 3126, 1, 0, 0, 0, 3124, 3122, 1, 0, 0, 0, 3124, 3125, 1, 0, 0, 0, 3125, 3128, 1, 0, 0, 0, 3126, 3124, 1, 0, 0, 0, 3127, 3129, 5, 315, 0, 0, 3128, 3127, 1, 0, 0, 0, 3128, 3129, 1, 0, 0, 0, 3129, 3147, 1, 0, 0, 0, 3130, 3131, 5, 309, 0, 0, 3131, 3132, 5, 94, 0, 0, 3132, 3147, 3, 798, 399, 0, 3133, 3134, 5, 282, 0, 0, 3134, 3135, 5, 94, 0, 0, 3135, 3147, 3, 814, 407, 0, 3136, 3137, 5, 333, 0, 0, 3137, 3138, 5, 323, 0, 0, 3138, 3147, 3, 32, 16, 0, 3139, 3141, 5, 269, 0, 0, 3140, 3139, 1, 0, 0, 0, 3140, 3141, 1, 0, 0, 0, 3141, 3142, 1, 0, 0, 0, 3142, 3143, 5, 462, 0, 0, 3143, 3144, 5, 80, 0, 0, 3144, 3145, 5, 204, 0, 0, 3145, 3147, 3, 818, 409, 0, 3146, 3120, 1, 0, 0, 0, 3146, 3130, 1, 0, 0, 0, 3146, 3133, 1, 0, 0, 0, 3146, 3136, 1, 0, 0, 0, 3146, 3140, 1, 0, 0, 0, 3147, 247, 1, 0, 0, 0, 3148, 3150, 5, 205, 0, 0, 3149, 3148, 1, 0, 0, 0, 3149, 3150, 1, 0, 0, 0, 3150, 3151, 1, 0, 0, 0, 3151, 3152, 5, 327, 0, 0, 3152, 3159, 5, 243, 0, 0, 3153, 3155, 5, 205, 0, 0, 3154, 3153, 1, 0, 0, 0, 3154, 3155, 1, 0, 0, 0, 3155, 3156, 1, 0, 0, 0, 3156, 3157, 5, 327, 0, 0, 3157, 3159, 5, 181, 0, 0, 3158, 3149, 1, 0, 0, 0, 3158, 3154, 1, 0, 0, 0, 3159, 3178, 1, 0, 0, 0, 3160, 3161, 5, 333, 0, 0, 3161, 3162, 3, 818, 409, 0, 3162, 3165, 7, 36, 0, 0, 3163, 3166, 3, 818, 409, 0, 3164, 3166, 5, 53, 0, 0, 3165, 3163, 1, 0, 0, 0, 3165, 3164, 1, 0, 0, 0, 3166, 3178, 1, 0, 0, 0, 3167, 3168, 5, 333, 0, 0, 3168, 3169, 3, 818, 409, 0, 3169, 3170, 5, 64, 0, 0, 3170, 3171, 5, 434, 0, 0, 3171, 3178, 1, 0, 0, 0, 3172, 3175, 5, 313, 0, 0, 3173, 3176, 3, 818, 409, 0, 3174, 3176, 5, 30, 0, 0, 3175, 3173, 1, 0, 0, 0, 3175, 3174, 1, 0, 0, 0, 3176, 3178, 1, 0, 0, 0, 3177, 3158, 1, 0, 0, 0, 3177, 3160, 1, 0, 0, 0, 3177, 3167, 1, 0, 0, 0, 3177, 3172, 1, 0, 0, 0, 3178, 249, 1, 0, 0, 0, 3179, 3180, 5, 100, 0, 0, 3180, 3181, 5, 2, 0, 0, 3181, 3182, 3, 674, 337, 0, 3182, 3183, 5, 3, 0, 0, 3183, 251, 1, 0, 0, 0, 3184, 3185, 5, 105, 0, 0, 3185, 3186, 5, 42, 0, 0, 3186, 3187, 5, 2, 0, 0, 3187, 3188, 3, 674, 337, 0, 3188, 3189, 5, 3, 0, 0, 3189, 253, 1, 0, 0, 0, 3190, 3191, 5, 46, 0, 0, 3191, 3192, 5, 131, 0, 0, 3192, 3193, 5, 446, 0, 0, 3193, 3194, 3, 818, 409, 0, 3194, 3195, 5, 360, 0, 0, 3195, 3196, 7, 37, 0, 0, 3196, 3197, 5, 215, 0, 0, 3197, 3198, 3, 316, 158, 0, 3198, 255, 1, 0, 0, 0, 3199, 3201, 5, 46, 0, 0, 3200, 3202, 3, 366, 183, 0, 3201, 3200, 1, 0, 0, 0, 3201, 3202, 1, 0, 0, 0, 3202, 3203, 1, 0, 0, 0, 3203, 3204, 5, 357, 0, 0, 3204, 3205, 3, 818, 409, 0, 3205, 3206, 3, 258, 129, 0, 3206, 3207, 3, 260, 130, 0, 3207, 3208, 5, 80, 0, 0, 3208, 3220, 3, 774, 387, 0, 3209, 3216, 5, 447, 0, 0, 3210, 3211, 7, 38, 0, 0, 3211, 3213, 7, 39, 0, 0, 3212, 3214, 5, 36, 0, 0, 3213, 3212, 1, 0, 0, 0, 3213, 3214, 1, 0, 0, 0, 3214, 3215, 1, 0, 0, 0, 3215, 3217, 3, 818, 409, 0, 3216, 3210, 1, 0, 0, 0, 3217, 3218, 1, 0, 0, 0, 3218, 3216, 1, 0, 0, 0, 3218, 3219, 1, 0, 0, 0, 3219, 3221, 1, 0, 0, 0, 3220, 3209, 1, 0, 0, 0, 3220, 3221, 1, 0, 0, 0, 3221, 3227, 1, 0, 0, 0, 3222, 3224, 5, 62, 0, 0, 3223, 3225, 5, 192, 0, 0, 3224, 3223, 1, 0, 0, 0, 3224, 3225, 1, 0, 0, 0, 3225, 3226, 1, 0, 0, 0, 3226, 3228, 7, 40, 0, 0, 3227, 3222, 1, 0, 0, 0, 3227, 3228, 1, 0, 0, 0, 3228, 3230, 1, 0, 0, 0, 3229, 3231, 3, 264, 132, 0, 3230, 3229, 1, 0, 0, 0, 3230, 3231, 1, 0, 0, 0, 3231, 3232, 1, 0, 0, 0, 3232, 3233, 5, 202, 0, 0, 3233, 3234, 3, 266, 133, 0, 3234, 3235, 5, 2, 0, 0, 3235, 3236, 3, 268, 134, 0, 3236, 3237, 5, 3, 0, 0, 3237, 3278, 1, 0, 0, 0, 3238, 3240, 5, 46, 0, 0, 3239, 3241, 3, 366, 183, 0, 3240, 3239, 1, 0, 0, 0, 3240, 3241, 1, 0, 0, 0, 3241, 3243, 1, 0, 0, 0, 3242, 3244, 5, 45, 0, 0, 3243, 3242, 1, 0, 0, 0, 3243, 3244, 1, 0, 0, 0, 3244, 3245, 1, 0, 0, 0, 3245, 3246, 5, 357, 0, 0, 3246, 3247, 3, 818, 409, 0, 3247, 3248, 3, 258, 129, 0, 3248, 3249, 3, 260, 130, 0, 3249, 3250, 5, 80, 0, 0, 3250, 3253, 3, 774, 387, 0, 3251, 3252, 5, 64, 0, 0, 3252, 3254, 3, 780, 390, 0, 3253, 3251, 1, 0, 0, 0, 3253, 3254, 1, 0, 0, 0, 3254, 3258, 1, 0, 0, 0, 3255, 3257, 3, 272, 136, 0, 3256, 3255, 1, 0, 0, 0, 3257, 3260, 1, 0, 0, 0, 3258, 3256, 1, 0, 0, 0, 3258, 3259, 1, 0, 0, 0, 3259, 3266, 1, 0, 0, 0, 3260, 3258, 1, 0, 0, 0, 3261, 3263, 5, 62, 0, 0, 3262, 3264, 5, 192, 0, 0, 3263, 3262, 1, 0, 0, 0, 3263, 3264, 1, 0, 0, 0, 3264, 3265, 1, 0, 0, 0, 3265, 3267, 7, 40, 0, 0, 3266, 3261, 1, 0, 0, 0, 3266, 3267, 1, 0, 0, 0, 3267, 3269, 1, 0, 0, 0, 3268, 3270, 3, 264, 132, 0, 3269, 3268, 1, 0, 0, 0, 3269, 3270, 1, 0, 0, 0, 3270, 3271, 1, 0, 0, 0, 3271, 3272, 5, 202, 0, 0, 3272, 3273, 3, 266, 133, 0, 3273, 3274, 5, 2, 0, 0, 3274, 3275, 3, 268, 134, 0, 3275, 3276, 5, 3, 0, 0, 3276, 3278, 1, 0, 0, 0, 3277, 3199, 1, 0, 0, 0, 3277, 3238, 1, 0, 0, 0, 3278, 257, 1, 0, 0, 0, 3279, 3284, 5, 145, 0, 0, 3280, 3284, 5, 135, 0, 0, 3281, 3282, 5, 242, 0, 0, 3282, 3284, 5, 275, 0, 0, 3283, 3279, 1, 0, 0, 0, 3283, 3280, 1, 0, 0, 0, 3283, 3281, 1, 0, 0, 0, 3284, 259, 1, 0, 0, 0, 3285, 3290, 3, 262, 131, 0, 3286, 3287, 5, 82, 0, 0, 3287, 3289, 3, 262, 131, 0, 3288, 3286, 1, 0, 0, 0, 3289, 3292, 1, 0, 0, 0, 3290, 3288, 1, 0, 0, 0, 3290, 3291, 1, 0, 0, 0, 3291, 261, 1, 0, 0, 0, 3292, 3290, 1, 0, 0, 0, 3293, 3302, 5, 241, 0, 0, 3294, 3302, 5, 182, 0, 0, 3295, 3298, 5, 369, 0, 0, 3296, 3297, 5, 275, 0, 0, 3297, 3299, 3, 148, 74, 0, 3298, 3296, 1, 0, 0, 0, 3298, 3299, 1, 0, 0, 0, 3299, 3302, 1, 0, 0, 0, 3300, 3302, 5, 358, 0, 0, 3301, 3293, 1, 0, 0, 0, 3301, 3294, 1, 0, 0, 0, 3301, 3295, 1, 0, 0, 0, 3301, 3300, 1, 0, 0, 0, 3302, 263, 1, 0, 0, 0, 3303, 3304, 5, 102, 0, 0, 3304, 3305, 5, 2, 0, 0, 3305, 3306, 3, 674, 337, 0, 3306, 3307, 5, 3, 0, 0, 3307, 265, 1, 0, 0, 0, 3308, 3309, 5, 211, 0, 0, 3309, 3313, 3, 806, 403, 0, 3310, 3311, 5, 296, 0, 0, 3311, 3313, 3, 796, 398, 0, 3312, 3308, 1, 0, 0, 0, 3312, 3310, 1, 0, 0, 0, 3313, 267, 1, 0, 0, 0, 3314, 3317, 3, 270, 135, 0, 3315, 3317, 1, 0, 0, 0, 3316, 3314, 1, 0, 0, 0, 3316, 3315, 1, 0, 0, 0, 3317, 3322, 1, 0, 0, 0, 3318, 3319, 5, 6, 0, 0, 3319, 3321, 3, 270, 135, 0, 3320, 3318, 1, 0, 0, 0, 3321, 3324, 1, 0, 0, 0, 3322, 3320, 1, 0, 0, 0, 3322, 3323, 1, 0, 0, 0, 3323, 269, 1, 0, 0, 0, 3324, 3322, 1, 0, 0, 0, 3325, 3330, 5, 571, 0, 0, 3326, 3330, 5, 573, 0, 0, 3327, 3330, 3, 808, 404, 0, 3328, 3330, 3, 824, 412, 0, 3329, 3325, 1, 0, 0, 0, 3329, 3326, 1, 0, 0, 0, 3329, 3327, 1, 0, 0, 0, 3329, 3328, 1, 0, 0, 0, 3330, 271, 1, 0, 0, 0, 3331, 3333, 5, 77, 0, 0, 3332, 3331, 1, 0, 0, 0, 3332, 3333, 1, 0, 0, 0, 3333, 3334, 1, 0, 0, 0, 3334, 3342, 5, 54, 0, 0, 3335, 3336, 5, 69, 0, 0, 3336, 3342, 7, 9, 0, 0, 3337, 3338, 5, 77, 0, 0, 3338, 3342, 5, 371, 0, 0, 3339, 3340, 5, 269, 0, 0, 3340, 3342, 5, 228, 0, 0, 3341, 3332, 1, 0, 0, 0, 3341, 3335, 1, 0, 0, 0, 3341, 3337, 1, 0, 0, 0, 3341, 3339, 1, 0, 0, 0, 3342, 273, 1, 0, 0, 0, 3343, 3344, 5, 46, 0, 0, 3344, 3345, 5, 198, 0, 0, 3345, 3346, 5, 357, 0, 0, 3346, 3347, 3, 818, 409, 0, 3347, 3348, 5, 80, 0, 0, 3348, 3358, 3, 824, 412, 0, 3349, 3350, 5, 102, 0, 0, 3350, 3355, 3, 276, 138, 0, 3351, 3352, 5, 33, 0, 0, 3352, 3354, 3, 276, 138, 0, 3353, 3351, 1, 0, 0, 0, 3354, 3357, 1, 0, 0, 0, 3355, 3353, 1, 0, 0, 0, 3355, 3356, 1, 0, 0, 0, 3356, 3359, 1, 0, 0, 0, 3357, 3355, 1, 0, 0, 0, 3358, 3349, 1, 0, 0, 0, 3358, 3359, 1, 0, 0, 0, 3359, 3360, 1, 0, 0, 0, 3360, 3361, 5, 202, 0, 0, 3361, 3362, 3, 266, 133, 0, 3362, 3363, 5, 2, 0, 0, 3363, 3364, 5, 3, 0, 0, 3364, 275, 1, 0, 0, 0, 3365, 3366, 3, 818, 409, 0, 3366, 3367, 5, 68, 0, 0, 3367, 3368, 5, 2, 0, 0, 3368, 3372, 3, 808, 404, 0, 3369, 3371, 3, 462, 231, 0, 3370, 3369, 1, 0, 0, 0, 3371, 3374, 1, 0, 0, 0, 3372, 3370, 1, 0, 0, 0, 3372, 3373, 1, 0, 0, 0, 3373, 3375, 1, 0, 0, 0, 3374, 3372, 1, 0, 0, 0, 3375, 3376, 5, 3, 0, 0, 3376, 277, 1, 0, 0, 0, 3377, 3378, 5, 138, 0, 0, 3378, 3379, 5, 198, 0, 0, 3379, 3380, 5, 357, 0, 0, 3380, 3386, 3, 818, 409, 0, 3381, 3383, 5, 193, 0, 0, 3382, 3384, 7, 14, 0, 0, 3383, 3382, 1, 0, 0, 0, 3383, 3384, 1, 0, 0, 0, 3384, 3387, 1, 0, 0, 0, 3385, 3387, 5, 186, 0, 0, 3386, 3381, 1, 0, 0, 0, 3386, 3385, 1, 0, 0, 0, 3387, 279, 1, 0, 0, 0, 3388, 3389, 5, 46, 0, 0, 3389, 3390, 5, 140, 0, 0, 3390, 3391, 3, 316, 158, 0, 3391, 3392, 5, 42, 0, 0, 3392, 3393, 5, 2, 0, 0, 3393, 3394, 3, 674, 337, 0, 3394, 3398, 5, 3, 0, 0, 3395, 3397, 3, 272, 136, 0, 3396, 3395, 1, 0, 0, 0, 3397, 3400, 1, 0, 0, 0, 3398, 3396, 1, 0, 0, 0, 3398, 3399, 1, 0, 0, 0, 3399, 281, 1, 0, 0, 0, 3400, 3398, 1, 0, 0, 0, 3401, 3403, 5, 46, 0, 0, 3402, 3404, 3, 366, 183, 0, 3403, 3402, 1, 0, 0, 0, 3403, 3404, 1, 0, 0, 0, 3404, 3405, 1, 0, 0, 0, 3405, 3406, 5, 136, 0, 0, 3406, 3421, 3, 806, 403, 0, 3407, 3408, 3, 392, 196, 0, 3408, 3409, 3, 284, 142, 0, 3409, 3422, 1, 0, 0, 0, 3410, 3411, 5, 2, 0, 0, 3411, 3416, 3, 290, 145, 0, 3412, 3413, 5, 6, 0, 0, 3413, 3415, 3, 290, 145, 0, 3414, 3412, 1, 0, 0, 0, 3415, 3418, 1, 0, 0, 0, 3416, 3414, 1, 0, 0, 0, 3416, 3417, 1, 0, 0, 0, 3417, 3419, 1, 0, 0, 0, 3418, 3416, 1, 0, 0, 0, 3419, 3420, 5, 3, 0, 0, 3420, 3422, 1, 0, 0, 0, 3421, 3407, 1, 0, 0, 0, 3421, 3410, 1, 0, 0, 0, 3422, 3480, 1, 0, 0, 0, 3423, 3424, 5, 46, 0, 0, 3424, 3425, 5, 278, 0, 0, 3425, 3426, 3, 414, 207, 0, 3426, 3427, 3, 284, 142, 0, 3427, 3480, 1, 0, 0, 0, 3428, 3429, 5, 46, 0, 0, 3429, 3430, 5, 360, 0, 0, 3430, 3431, 3, 316, 158, 0, 3431, 3449, 5, 36, 0, 0, 3432, 3434, 5, 2, 0, 0, 3433, 3435, 3, 642, 321, 0, 3434, 3433, 1, 0, 0, 0, 3434, 3435, 1, 0, 0, 0, 3435, 3436, 1, 0, 0, 0, 3436, 3450, 5, 3, 0, 0, 3437, 3438, 5, 196, 0, 0, 3438, 3446, 5, 2, 0, 0, 3439, 3443, 3, 808, 404, 0, 3440, 3442, 3, 462, 231, 0, 3441, 3440, 1, 0, 0, 0, 3442, 3445, 1, 0, 0, 0, 3443, 3441, 1, 0, 0, 0, 3443, 3444, 1, 0, 0, 0, 3444, 3447, 1, 0, 0, 0, 3445, 3443, 1, 0, 0, 0, 3446, 3439, 1, 0, 0, 0, 3446, 3447, 1, 0, 0, 0, 3447, 3448, 1, 0, 0, 0, 3448, 3450, 5, 3, 0, 0, 3449, 3432, 1, 0, 0, 0, 3449, 3437, 1, 0, 0, 0, 3450, 3480, 1, 0, 0, 0, 3451, 3452, 5, 46, 0, 0, 3452, 3453, 5, 360, 0, 0, 3453, 3459, 3, 316, 158, 0, 3454, 3455, 5, 36, 0, 0, 3455, 3457, 5, 299, 0, 0, 3456, 3454, 1, 0, 0, 0, 3456, 3457, 1, 0, 0, 0, 3457, 3458, 1, 0, 0, 0, 3458, 3460, 3, 284, 142, 0, 3459, 3456, 1, 0, 0, 0, 3459, 3460, 1, 0, 0, 0, 3460, 3480, 1, 0, 0, 0, 3461, 3462, 5, 46, 0, 0, 3462, 3463, 5, 355, 0, 0, 3463, 3464, 5, 325, 0, 0, 3464, 3465, 7, 41, 0, 0, 3465, 3466, 3, 316, 158, 0, 3466, 3467, 3, 284, 142, 0, 3467, 3480, 1, 0, 0, 0, 3468, 3469, 5, 46, 0, 0, 3469, 3471, 5, 108, 0, 0, 3470, 3472, 3, 294, 147, 0, 3471, 3470, 1, 0, 0, 0, 3471, 3472, 1, 0, 0, 0, 3472, 3473, 1, 0, 0, 0, 3473, 3477, 3, 316, 158, 0, 3474, 3478, 3, 284, 142, 0, 3475, 3476, 5, 64, 0, 0, 3476, 3478, 3, 316, 158, 0, 3477, 3474, 1, 0, 0, 0, 3477, 3475, 1, 0, 0, 0, 3478, 3480, 1, 0, 0, 0, 3479, 3401, 1, 0, 0, 0, 3479, 3423, 1, 0, 0, 0, 3479, 3428, 1, 0, 0, 0, 3479, 3451, 1, 0, 0, 0, 3479, 3461, 1, 0, 0, 0, 3479, 3468, 1, 0, 0, 0, 3480, 283, 1, 0, 0, 0, 3481, 3482, 5, 2, 0, 0, 3482, 3487, 3, 286, 143, 0, 3483, 3484, 5, 6, 0, 0, 3484, 3486, 3, 286, 143, 0, 3485, 3483, 1, 0, 0, 0, 3486, 3489, 1, 0, 0, 0, 3487, 3485, 1, 0, 0, 0, 3487, 3488, 1, 0, 0, 0, 3488, 3490, 1, 0, 0, 0, 3489, 3487, 1, 0, 0, 0, 3490, 3491, 5, 3, 0, 0, 3491, 285, 1, 0, 0, 0, 3492, 3495, 3, 824, 412, 0, 3493, 3494, 5, 10, 0, 0, 3494, 3496, 3, 288, 144, 0, 3495, 3493, 1, 0, 0, 0, 3495, 3496, 1, 0, 0, 0, 3496, 287, 1, 0, 0, 0, 3497, 3504, 3, 388, 194, 0, 3498, 3504, 3, 834, 417, 0, 3499, 3504, 3, 726, 363, 0, 3500, 3504, 3, 202, 101, 0, 3501, 3504, 3, 808, 404, 0, 3502, 3504, 5, 407, 0, 0, 3503, 3497, 1, 0, 0, 0, 3503, 3498, 1, 0, 0, 0, 3503, 3499, 1, 0, 0, 0, 3503, 3500, 1, 0, 0, 0, 3503, 3501, 1, 0, 0, 0, 3503, 3502, 1, 0, 0, 0, 3504, 289, 1, 0, 0, 0, 3505, 3506, 3, 826, 413, 0, 3506, 3507, 5, 10, 0, 0, 3507, 3508, 3, 288, 144, 0, 3508, 291, 1, 0, 0, 0, 3509, 3510, 5, 138, 0, 0, 3510, 3511, 5, 360, 0, 0, 3511, 3512, 3, 316, 158, 0, 3512, 3513, 5, 133, 0, 0, 3513, 3515, 5, 450, 0, 0, 3514, 3516, 3, 294, 147, 0, 3515, 3514, 1, 0, 0, 0, 3515, 3516, 1, 0, 0, 0, 3516, 3517, 1, 0, 0, 0, 3517, 3520, 3, 808, 404, 0, 3518, 3519, 7, 42, 0, 0, 3519, 3521, 3, 808, 404, 0, 3520, 3518, 1, 0, 0, 0, 3520, 3521, 1, 0, 0, 0, 3521, 3532, 1, 0, 0, 0, 3522, 3523, 5, 138, 0, 0, 3523, 3524, 5, 360, 0, 0, 3524, 3525, 3, 316, 158, 0, 3525, 3526, 5, 309, 0, 0, 3526, 3527, 5, 450, 0, 0, 3527, 3528, 3, 808, 404, 0, 3528, 3529, 5, 94, 0, 0, 3529, 3530, 3, 808, 404, 0, 3530, 3532, 1, 0, 0, 0, 3531, 3509, 1, 0, 0, 0, 3531, 3522, 1, 0, 0, 0, 3532, 293, 1, 0, 0, 0, 3533, 3534, 5, 220, 0, 0, 3534, 3535, 5, 77, 0, 0, 3535, 3536, 5, 396, 0, 0, 3536, 295, 1, 0, 0, 0, 3537, 3538, 5, 46, 0, 0, 3538, 3539, 5, 278, 0, 0, 3539, 3540, 5, 156, 0, 0, 3540, 3542, 3, 316, 158, 0, 3541, 3543, 5, 53, 0, 0, 3542, 3541, 1, 0, 0, 0, 3542, 3543, 1, 0, 0, 0, 3543, 3544, 1, 0, 0, 0, 3544, 3545, 5, 62, 0, 0, 3545, 3546, 5, 360, 0, 0, 3546, 3547, 3, 652, 326, 0, 3547, 3550, 3, 170, 85, 0, 3548, 3549, 5, 206, 0, 0, 3549, 3551, 3, 316, 158, 0, 3550, 3548, 1, 0, 0, 0, 3550, 3551, 1, 0, 0, 0, 3551, 3552, 1, 0, 0, 0, 3552, 3553, 5, 36, 0, 0, 3553, 3558, 3, 298, 149, 0, 3554, 3555, 5, 6, 0, 0, 3555, 3557, 3, 298, 149, 0, 3556, 3554, 1, 0, 0, 0, 3557, 3560, 1, 0, 0, 0, 3558, 3556, 1, 0, 0, 0, 3558, 3559, 1, 0, 0, 0, 3559, 297, 1, 0, 0, 0, 3560, 3558, 1, 0, 0, 0, 3561, 3562, 5, 278, 0, 0, 3562, 3563, 5, 571, 0, 0, 3563, 3565, 3, 414, 207, 0, 3564, 3566, 3, 412, 206, 0, 3565, 3564, 1, 0, 0, 0, 3565, 3566, 1, 0, 0, 0, 3566, 3574, 1, 0, 0, 0, 3567, 3572, 5, 62, 0, 0, 3568, 3573, 5, 325, 0, 0, 3569, 3570, 5, 83, 0, 0, 3570, 3571, 5, 147, 0, 0, 3571, 3573, 3, 316, 158, 0, 3572, 3568, 1, 0, 0, 0, 3572, 3569, 1, 0, 0, 0, 3573, 3575, 1, 0, 0, 0, 3574, 3567, 1, 0, 0, 0, 3574, 3575, 1, 0, 0, 0, 3575, 3577, 1, 0, 0, 0, 3576, 3578, 5, 302, 0, 0, 3577, 3576, 1, 0, 0, 0, 3577, 3578, 1, 0, 0, 0, 3578, 3588, 1, 0, 0, 0, 3579, 3580, 5, 211, 0, 0, 3580, 3582, 5, 571, 0, 0, 3581, 3583, 3, 528, 264, 0, 3582, 3581, 1, 0, 0, 0, 3582, 3583, 1, 0, 0, 0, 3583, 3584, 1, 0, 0, 0, 3584, 3588, 3, 382, 191, 0, 3585, 3586, 5, 345, 0, 0, 3586, 3588, 3, 652, 326, 0, 3587, 3561, 1, 0, 0, 0, 3587, 3579, 1, 0, 0, 0, 3587, 3585, 1, 0, 0, 0, 3588, 299, 1, 0, 0, 0, 3589, 3590, 5, 46, 0, 0, 3590, 3591, 5, 278, 0, 0, 3591, 3592, 5, 206, 0, 0, 3592, 3593, 3, 316, 158, 0, 3593, 3594, 3, 170, 85, 0, 3594, 301, 1, 0, 0, 0, 3595, 3596, 5, 138, 0, 0, 3596, 3597, 5, 278, 0, 0, 3597, 3598, 5, 206, 0, 0, 3598, 3599, 3, 316, 158, 0, 3599, 3618, 3, 170, 85, 0, 3600, 3601, 5, 133, 0, 0, 3601, 3606, 3, 298, 149, 0, 3602, 3603, 5, 6, 0, 0, 3603, 3605, 3, 298, 149, 0, 3604, 3602, 1, 0, 0, 0, 3605, 3608, 1, 0, 0, 0, 3606, 3604, 1, 0, 0, 0, 3606, 3607, 1, 0, 0, 0, 3607, 3619, 1, 0, 0, 0, 3608, 3606, 1, 0, 0, 0, 3609, 3610, 5, 191, 0, 0, 3610, 3615, 3, 304, 152, 0, 3611, 3612, 5, 6, 0, 0, 3612, 3614, 3, 304, 152, 0, 3613, 3611, 1, 0, 0, 0, 3614, 3617, 1, 0, 0, 0, 3615, 3613, 1, 0, 0, 0, 3615, 3616, 1, 0, 0, 0, 3616, 3619, 1, 0, 0, 0, 3617, 3615, 1, 0, 0, 0, 3618, 3600, 1, 0, 0, 0, 3618, 3609, 1, 0, 0, 0, 3619, 303, 1, 0, 0, 0, 3620, 3621, 7, 43, 0, 0, 3621, 3622, 5, 571, 0, 0, 3622, 3623, 3, 528, 264, 0, 3623, 305, 1, 0, 0, 0, 3624, 3625, 5, 301, 0, 0, 3625, 3626, 5, 281, 0, 0, 3626, 3627, 5, 147, 0, 0, 3627, 3628, 3, 816, 408, 0, 3628, 3629, 5, 94, 0, 0, 3629, 3630, 3, 814, 407, 0, 3630, 307, 1, 0, 0, 0, 3631, 3654, 5, 191, 0, 0, 3632, 3655, 5, 328, 0, 0, 3633, 3655, 5, 226, 0, 0, 3634, 3655, 5, 108, 0, 0, 3635, 3655, 5, 168, 0, 0, 3636, 3655, 5, 342, 0, 0, 3637, 3655, 5, 452, 0, 0, 3638, 3655, 5, 331, 0, 0, 3639, 3640, 5, 131, 0, 0, 3640, 3655, 5, 446, 0, 0, 3641, 3642, 5, 198, 0, 0, 3642, 3655, 5, 357, 0, 0, 3643, 3655, 5, 204, 0, 0, 3644, 3646, 5, 295, 0, 0, 3645, 3644, 1, 0, 0, 0, 3645, 3646, 1, 0, 0, 0, 3646, 3647, 1, 0, 0, 0, 3647, 3655, 5, 247, 0, 0, 3648, 3649, 5, 63, 0, 0, 3649, 3650, 5, 174, 0, 0, 3650, 3655, 5, 381, 0, 0, 3651, 3652, 5, 355, 0, 0, 3652, 3653, 5, 325, 0, 0, 3653, 3655, 7, 41, 0, 0, 3654, 3632, 1, 0, 0, 0, 3654, 3633, 1, 0, 0, 0, 3654, 3634, 1, 0, 0, 0, 3654, 3635, 1, 0, 0, 0, 3654, 3636, 1, 0, 0, 0, 3654, 3637, 1, 0, 0, 0, 3654, 3638, 1, 0, 0, 0, 3654, 3639, 1, 0, 0, 0, 3654, 3641, 1, 0, 0, 0, 3654, 3643, 1, 0, 0, 0, 3654, 3645, 1, 0, 0, 0, 3654, 3648, 1, 0, 0, 0, 3654, 3651, 1, 0, 0, 0, 3655, 3657, 1, 0, 0, 0, 3656, 3658, 3, 422, 211, 0, 3657, 3656, 1, 0, 0, 0, 3657, 3658, 1, 0, 0, 0, 3658, 3659, 1, 0, 0, 0, 3659, 3661, 3, 784, 392, 0, 3660, 3662, 3, 96, 48, 0, 3661, 3660, 1, 0, 0, 0, 3661, 3662, 1, 0, 0, 0, 3662, 3839, 1, 0, 0, 0, 3663, 3665, 5, 191, 0, 0, 3664, 3666, 5, 259, 0, 0, 3665, 3664, 1, 0, 0, 0, 3665, 3666, 1, 0, 0, 0, 3666, 3667, 1, 0, 0, 0, 3667, 3669, 5, 376, 0, 0, 3668, 3670, 3, 422, 211, 0, 3669, 3668, 1, 0, 0, 0, 3669, 3670, 1, 0, 0, 0, 3670, 3671, 1, 0, 0, 0, 3671, 3676, 3, 778, 389, 0, 3672, 3673, 5, 6, 0, 0, 3673, 3675, 3, 778, 389, 0, 3674, 3672, 1, 0, 0, 0, 3675, 3678, 1, 0, 0, 0, 3676, 3674, 1, 0, 0, 0, 3676, 3677, 1, 0, 0, 0, 3677, 3680, 1, 0, 0, 0, 3678, 3676, 1, 0, 0, 0, 3679, 3681, 3, 96, 48, 0, 3680, 3679, 1, 0, 0, 0, 3680, 3681, 1, 0, 0, 0, 3681, 3839, 1, 0, 0, 0, 3682, 3684, 5, 191, 0, 0, 3683, 3685, 5, 63, 0, 0, 3684, 3683, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 3686, 1, 0, 0, 0, 3686, 3688, 5, 92, 0, 0, 3687, 3689, 3, 422, 211, 0, 3688, 3687, 1, 0, 0, 0, 3688, 3689, 1, 0, 0, 0, 3689, 3690, 1, 0, 0, 0, 3690, 3692, 3, 762, 381, 0, 3691, 3693, 3, 96, 48, 0, 3692, 3691, 1, 0, 0, 0, 3692, 3693, 1, 0, 0, 0, 3693, 3839, 1, 0, 0, 0, 3694, 3695, 5, 191, 0, 0, 3695, 3697, 5, 323, 0, 0, 3696, 3698, 3, 422, 211, 0, 3697, 3696, 1, 0, 0, 0, 3697, 3698, 1, 0, 0, 0, 3698, 3699, 1, 0, 0, 0, 3699, 3701, 3, 764, 382, 0, 3700, 3702, 3, 96, 48, 0, 3701, 3700, 1, 0, 0, 0, 3701, 3702, 1, 0, 0, 0, 3702, 3839, 1, 0, 0, 0, 3703, 3704, 5, 191, 0, 0, 3704, 3706, 7, 44, 0, 0, 3705, 3707, 3, 422, 211, 0, 3706, 3705, 1, 0, 0, 0, 3706, 3707, 1, 0, 0, 0, 3707, 3708, 1, 0, 0, 0, 3708, 3709, 3, 818, 409, 0, 3709, 3710, 5, 80, 0, 0, 3710, 3712, 3, 316, 158, 0, 3711, 3713, 3, 96, 48, 0, 3712, 3711, 1, 0, 0, 0, 3712, 3713, 1, 0, 0, 0, 3713, 3839, 1, 0, 0, 0, 3714, 3715, 5, 191, 0, 0, 3715, 3717, 7, 32, 0, 0, 3716, 3718, 3, 422, 211, 0, 3717, 3716, 1, 0, 0, 0, 3717, 3718, 1, 0, 0, 0, 3718, 3719, 1, 0, 0, 0, 3719, 3724, 3, 652, 326, 0, 3720, 3721, 5, 6, 0, 0, 3721, 3723, 3, 652, 326, 0, 3722, 3720, 1, 0, 0, 0, 3723, 3726, 1, 0, 0, 0, 3724, 3722, 1, 0, 0, 0, 3724, 3725, 1, 0, 0, 0, 3725, 3728, 1, 0, 0, 0, 3726, 3724, 1, 0, 0, 0, 3727, 3729, 3, 96, 48, 0, 3728, 3727, 1, 0, 0, 0, 3728, 3729, 1, 0, 0, 0, 3729, 3839, 1, 0, 0, 0, 3730, 3731, 5, 191, 0, 0, 3731, 3732, 5, 226, 0, 0, 3732, 3734, 5, 109, 0, 0, 3733, 3735, 3, 422, 211, 0, 3734, 3733, 1, 0, 0, 0, 3734, 3735, 1, 0, 0, 0, 3735, 3736, 1, 0, 0, 0, 3736, 3738, 3, 314, 157, 0, 3737, 3739, 3, 96, 48, 0, 3738, 3737, 1, 0, 0, 0, 3738, 3739, 1, 0, 0, 0, 3739, 3839, 1, 0, 0, 0, 3740, 3741, 5, 191, 0, 0, 3741, 3743, 5, 41, 0, 0, 3742, 3744, 3, 422, 211, 0, 3743, 3742, 1, 0, 0, 0, 3743, 3744, 1, 0, 0, 0, 3744, 3745, 1, 0, 0, 0, 3745, 3746, 5, 2, 0, 0, 3746, 3747, 3, 652, 326, 0, 3747, 3748, 5, 36, 0, 0, 3748, 3749, 3, 652, 326, 0, 3749, 3751, 5, 3, 0, 0, 3750, 3752, 3, 96, 48, 0, 3751, 3750, 1, 0, 0, 0, 3751, 3752, 1, 0, 0, 0, 3752, 3839, 1, 0, 0, 0, 3753, 3754, 5, 191, 0, 0, 3754, 3755, 5, 278, 0, 0, 3755, 3757, 7, 31, 0, 0, 3756, 3758, 3, 422, 211, 0, 3757, 3756, 1, 0, 0, 0, 3757, 3758, 1, 0, 0, 0, 3758, 3759, 1, 0, 0, 0, 3759, 3760, 3, 316, 158, 0, 3760, 3762, 3, 170, 85, 0, 3761, 3763, 3, 96, 48, 0, 3762, 3761, 1, 0, 0, 0, 3762, 3763, 1, 0, 0, 0, 3763, 3839, 1, 0, 0, 0, 3764, 3765, 5, 191, 0, 0, 3765, 3766, 5, 281, 0, 0, 3766, 3767, 5, 147, 0, 0, 3767, 3769, 3, 816, 408, 0, 3768, 3770, 3, 96, 48, 0, 3769, 3768, 1, 0, 0, 0, 3769, 3770, 1, 0, 0, 0, 3770, 3839, 1, 0, 0, 0, 3771, 3772, 5, 191, 0, 0, 3772, 3774, 5, 451, 0, 0, 3773, 3775, 3, 422, 211, 0, 3774, 3773, 1, 0, 0, 0, 3774, 3775, 1, 0, 0, 0, 3775, 3776, 1, 0, 0, 0, 3776, 3778, 3, 818, 409, 0, 3777, 3779, 3, 96, 48, 0, 3778, 3777, 1, 0, 0, 0, 3778, 3779, 1, 0, 0, 0, 3779, 3839, 1, 0, 0, 0, 3780, 3781, 5, 191, 0, 0, 3781, 3783, 5, 351, 0, 0, 3782, 3784, 3, 422, 211, 0, 3783, 3782, 1, 0, 0, 0, 3783, 3784, 1, 0, 0, 0, 3784, 3785, 1, 0, 0, 0, 3785, 3839, 3, 770, 385, 0, 3786, 3787, 5, 191, 0, 0, 3787, 3789, 5, 443, 0, 0, 3788, 3790, 3, 422, 211, 0, 3789, 3788, 1, 0, 0, 0, 3789, 3790, 1, 0, 0, 0, 3790, 3791, 1, 0, 0, 0, 3791, 3792, 5, 62, 0, 0, 3792, 3793, 3, 652, 326, 0, 3793, 3794, 5, 247, 0, 0, 3794, 3796, 3, 818, 409, 0, 3795, 3797, 3, 96, 48, 0, 3796, 3795, 1, 0, 0, 0, 3796, 3797, 1, 0, 0, 0, 3797, 3839, 1, 0, 0, 0, 3798, 3799, 5, 191, 0, 0, 3799, 3801, 7, 45, 0, 0, 3800, 3802, 3, 422, 211, 0, 3801, 3800, 1, 0, 0, 0, 3801, 3802, 1, 0, 0, 0, 3802, 3803, 1, 0, 0, 0, 3803, 3839, 3, 816, 408, 0, 3804, 3805, 5, 191, 0, 0, 3805, 3806, 5, 99, 0, 0, 3806, 3808, 5, 257, 0, 0, 3807, 3809, 3, 422, 211, 0, 3808, 3807, 1, 0, 0, 0, 3808, 3809, 1, 0, 0, 0, 3809, 3810, 1, 0, 0, 0, 3810, 3813, 5, 62, 0, 0, 3811, 3814, 3, 814, 407, 0, 3812, 3814, 5, 99, 0, 0, 3813, 3811, 1, 0, 0, 0, 3813, 3812, 1, 0, 0, 0, 3814, 3815, 1, 0, 0, 0, 3815, 3816, 5, 331, 0, 0, 3816, 3839, 3, 818, 409, 0, 3817, 3818, 5, 191, 0, 0, 3818, 3820, 5, 175, 0, 0, 3819, 3821, 3, 422, 211, 0, 3820, 3819, 1, 0, 0, 0, 3820, 3821, 1, 0, 0, 0, 3821, 3822, 1, 0, 0, 0, 3822, 3836, 3, 788, 394, 0, 3823, 3825, 5, 105, 0, 0, 3824, 3823, 1, 0, 0, 0, 3824, 3825, 1, 0, 0, 0, 3825, 3826, 1, 0, 0, 0, 3826, 3827, 5, 2, 0, 0, 3827, 3832, 5, 209, 0, 0, 3828, 3829, 5, 6, 0, 0, 3829, 3831, 5, 209, 0, 0, 3830, 3828, 1, 0, 0, 0, 3831, 3834, 1, 0, 0, 0, 3832, 3830, 1, 0, 0, 0, 3832, 3833, 1, 0, 0, 0, 3833, 3835, 1, 0, 0, 0, 3834, 3832, 1, 0, 0, 0, 3835, 3837, 5, 3, 0, 0, 3836, 3824, 1, 0, 0, 0, 3836, 3837, 1, 0, 0, 0, 3837, 3839, 1, 0, 0, 0, 3838, 3631, 1, 0, 0, 0, 3838, 3663, 1, 0, 0, 0, 3838, 3682, 1, 0, 0, 0, 3838, 3694, 1, 0, 0, 0, 3838, 3703, 1, 0, 0, 0, 3838, 3714, 1, 0, 0, 0, 3838, 3730, 1, 0, 0, 0, 3838, 3740, 1, 0, 0, 0, 3838, 3753, 1, 0, 0, 0, 3838, 3764, 1, 0, 0, 0, 3838, 3771, 1, 0, 0, 0, 3838, 3780, 1, 0, 0, 0, 3838, 3786, 1, 0, 0, 0, 3838, 3798, 1, 0, 0, 0, 3838, 3804, 1, 0, 0, 0, 3838, 3817, 1, 0, 0, 0, 3839, 309, 1, 0, 0, 0, 3840, 3842, 5, 63, 0, 0, 3841, 3840, 1, 0, 0, 0, 3841, 3842, 1, 0, 0, 0, 3842, 3843, 1, 0, 0, 0, 3843, 3844, 5, 92, 0, 0, 3844, 3857, 3, 774, 387, 0, 3845, 3847, 5, 259, 0, 0, 3846, 3845, 1, 0, 0, 0, 3846, 3847, 1, 0, 0, 0, 3847, 3848, 1, 0, 0, 0, 3848, 3849, 5, 376, 0, 0, 3849, 3857, 3, 778, 389, 0, 3850, 3851, 7, 46, 0, 0, 3851, 3857, 3, 316, 158, 0, 3852, 3853, 5, 355, 0, 0, 3853, 3854, 5, 325, 0, 0, 3854, 3855, 7, 41, 0, 0, 3855, 3857, 3, 316, 158, 0, 3856, 3841, 1, 0, 0, 0, 3856, 3846, 1, 0, 0, 0, 3856, 3850, 1, 0, 0, 0, 3856, 3852, 1, 0, 0, 0, 3857, 311, 1, 0, 0, 0, 3858, 3859, 5, 198, 0, 0, 3859, 3875, 5, 357, 0, 0, 3860, 3861, 5, 131, 0, 0, 3861, 3875, 5, 446, 0, 0, 3862, 3875, 5, 204, 0, 0, 3863, 3875, 5, 452, 0, 0, 3864, 3875, 5, 331, 0, 0, 3865, 3875, 5, 318, 0, 0, 3866, 3875, 5, 451, 0, 0, 3867, 3868, 5, 63, 0, 0, 3868, 3869, 5, 174, 0, 0, 3869, 3875, 5, 381, 0, 0, 3870, 3872, 5, 295, 0, 0, 3871, 3870, 1, 0, 0, 0, 3871, 3872, 1, 0, 0, 0, 3872, 3873, 1, 0, 0, 0, 3873, 3875, 5, 247, 0, 0, 3874, 3858, 1, 0, 0, 0, 3874, 3860, 1, 0, 0, 0, 3874, 3862, 1, 0, 0, 0, 3874, 3863, 1, 0, 0, 0, 3874, 3864, 1, 0, 0, 0, 3874, 3865, 1, 0, 0, 0, 3874, 3866, 1, 0, 0, 0, 3874, 3867, 1, 0, 0, 0, 3874, 3871, 1, 0, 0, 0, 3875, 3876, 1, 0, 0, 0, 3876, 3883, 3, 818, 409, 0, 3877, 3878, 5, 323, 0, 0, 3878, 3883, 3, 790, 395, 0, 3879, 3880, 5, 175, 0, 0, 3880, 3883, 3, 788, 394, 0, 3881, 3883, 3, 176, 88, 0, 3882, 3874, 1, 0, 0, 0, 3882, 3877, 1, 0, 0, 0, 3882, 3879, 1, 0, 0, 0, 3882, 3881, 1, 0, 0, 0, 3883, 313, 1, 0, 0, 0, 3884, 3889, 3, 316, 158, 0, 3885, 3886, 5, 6, 0, 0, 3886, 3888, 3, 316, 158, 0, 3887, 3885, 1, 0, 0, 0, 3888, 3891, 1, 0, 0, 0, 3889, 3887, 1, 0, 0, 0, 3889, 3890, 1, 0, 0, 0, 3890, 315, 1, 0, 0, 0, 3891, 3889, 1, 0, 0, 0, 3892, 3894, 3, 818, 409, 0, 3893, 3895, 3, 318, 159, 0, 3894, 3893, 1, 0, 0, 0, 3894, 3895, 1, 0, 0, 0, 3895, 317, 1, 0, 0, 0, 3896, 3897, 5, 11, 0, 0, 3897, 3899, 3, 824, 412, 0, 3898, 3896, 1, 0, 0, 0, 3899, 3900, 1, 0, 0, 0, 3900, 3898, 1, 0, 0, 0, 3900, 3901, 1, 0, 0, 0, 3901, 319, 1, 0, 0, 0, 3902, 3904, 5, 358, 0, 0, 3903, 3905, 5, 92, 0, 0, 3904, 3903, 1, 0, 0, 0, 3904, 3905, 1, 0, 0, 0, 3905, 3906, 1, 0, 0, 0, 3906, 3911, 3, 322, 161, 0, 3907, 3908, 5, 6, 0, 0, 3908, 3910, 3, 322, 161, 0, 3909, 3907, 1, 0, 0, 0, 3910, 3913, 1, 0, 0, 0, 3911, 3909, 1, 0, 0, 0, 3911, 3912, 1, 0, 0, 0, 3912, 3916, 1, 0, 0, 0, 3913, 3911, 1, 0, 0, 0, 3914, 3915, 7, 47, 0, 0, 3915, 3917, 5, 219, 0, 0, 3916, 3914, 1, 0, 0, 0, 3916, 3917, 1, 0, 0, 0, 3917, 3919, 1, 0, 0, 0, 3918, 3920, 3, 96, 48, 0, 3919, 3918, 1, 0, 0, 0, 3919, 3920, 1, 0, 0, 0, 3920, 321, 1, 0, 0, 0, 3921, 3923, 5, 81, 0, 0, 3922, 3921, 1, 0, 0, 0, 3922, 3923, 1, 0, 0, 0, 3923, 3924, 1, 0, 0, 0, 3924, 3926, 3, 774, 387, 0, 3925, 3927, 5, 9, 0, 0, 3926, 3925, 1, 0, 0, 0, 3926, 3927, 1, 0, 0, 0, 3927, 323, 1, 0, 0, 0, 3928, 3929, 5, 159, 0, 0, 3929, 3988, 5, 80, 0, 0, 3930, 3989, 3, 310, 155, 0, 3931, 3989, 3, 312, 156, 0, 3932, 3933, 5, 44, 0, 0, 3933, 3935, 3, 818, 409, 0, 3934, 3936, 3, 318, 159, 0, 3935, 3934, 1, 0, 0, 0, 3935, 3936, 1, 0, 0, 0, 3936, 3937, 1, 0, 0, 0, 3937, 3938, 5, 11, 0, 0, 3938, 3939, 3, 800, 400, 0, 3939, 3989, 1, 0, 0, 0, 3940, 3941, 7, 32, 0, 0, 3941, 3989, 3, 652, 326, 0, 3942, 3943, 5, 136, 0, 0, 3943, 3989, 3, 394, 197, 0, 3944, 3945, 5, 211, 0, 0, 3945, 3989, 3, 382, 191, 0, 3946, 3947, 5, 278, 0, 0, 3947, 3989, 3, 416, 208, 0, 3948, 3949, 5, 45, 0, 0, 3949, 3950, 3, 818, 409, 0, 3950, 3956, 5, 80, 0, 0, 3951, 3957, 3, 774, 387, 0, 3952, 3954, 5, 189, 0, 0, 3953, 3952, 1, 0, 0, 0, 3953, 3954, 1, 0, 0, 0, 3954, 3955, 1, 0, 0, 0, 3955, 3957, 3, 316, 158, 0, 3956, 3951, 1, 0, 0, 0, 3956, 3953, 1, 0, 0, 0, 3957, 3989, 1, 0, 0, 0, 3958, 3959, 7, 44, 0, 0, 3959, 3960, 3, 818, 409, 0, 3960, 3961, 5, 80, 0, 0, 3961, 3962, 3, 316, 158, 0, 3962, 3989, 1, 0, 0, 0, 3963, 3964, 5, 296, 0, 0, 3964, 3989, 3, 378, 189, 0, 3965, 3966, 5, 442, 0, 0, 3966, 3989, 3, 374, 187, 0, 3967, 3968, 5, 443, 0, 0, 3968, 3969, 5, 62, 0, 0, 3969, 3970, 3, 652, 326, 0, 3970, 3971, 5, 247, 0, 0, 3971, 3972, 3, 818, 409, 0, 3972, 3989, 1, 0, 0, 0, 3973, 3974, 5, 278, 0, 0, 3974, 3975, 7, 31, 0, 0, 3975, 3976, 3, 316, 158, 0, 3976, 3977, 3, 170, 85, 0, 3977, 3989, 1, 0, 0, 0, 3978, 3979, 5, 248, 0, 0, 3979, 3980, 5, 274, 0, 0, 3980, 3989, 3, 202, 101, 0, 3981, 3982, 5, 41, 0, 0, 3982, 3983, 5, 2, 0, 0, 3983, 3984, 3, 652, 326, 0, 3984, 3985, 5, 36, 0, 0, 3985, 3986, 3, 652, 326, 0, 3986, 3987, 5, 3, 0, 0, 3987, 3989, 1, 0, 0, 0, 3988, 3930, 1, 0, 0, 0, 3988, 3931, 1, 0, 0, 0, 3988, 3932, 1, 0, 0, 0, 3988, 3940, 1, 0, 0, 0, 3988, 3942, 1, 0, 0, 0, 3988, 3944, 1, 0, 0, 0, 3988, 3946, 1, 0, 0, 0, 3988, 3948, 1, 0, 0, 0, 3988, 3958, 1, 0, 0, 0, 3988, 3963, 1, 0, 0, 0, 3988, 3965, 1, 0, 0, 0, 3988, 3967, 1, 0, 0, 0, 3988, 3973, 1, 0, 0, 0, 3988, 3978, 1, 0, 0, 0, 3988, 3981, 1, 0, 0, 0, 3989, 3990, 1, 0, 0, 0, 3990, 3993, 5, 116, 0, 0, 3991, 3994, 3, 808, 404, 0, 3992, 3994, 5, 78, 0, 0, 3993, 3991, 1, 0, 0, 0, 3993, 3992, 1, 0, 0, 0, 3994, 325, 1, 0, 0, 0, 3995, 3996, 5, 327, 0, 0, 3996, 3999, 5, 246, 0, 0, 3997, 3998, 5, 62, 0, 0, 3998, 4000, 3, 58, 29, 0, 3999, 3997, 1, 0, 0, 0, 3999, 4000, 1, 0, 0, 0, 4000, 4001, 1, 0, 0, 0, 4001, 4019, 5, 80, 0, 0, 4002, 4003, 7, 32, 0, 0, 4003, 4020, 3, 652, 326, 0, 4004, 4005, 5, 136, 0, 0, 4005, 4020, 3, 394, 197, 0, 4006, 4007, 5, 44, 0, 0, 4007, 4020, 3, 800, 400, 0, 4008, 4009, 5, 211, 0, 0, 4009, 4020, 3, 382, 191, 0, 4010, 4011, 5, 248, 0, 0, 4011, 4012, 5, 274, 0, 0, 4012, 4020, 3, 202, 101, 0, 4013, 4014, 5, 296, 0, 0, 4014, 4020, 3, 378, 189, 0, 4015, 4016, 5, 442, 0, 0, 4016, 4020, 3, 374, 187, 0, 4017, 4020, 3, 310, 155, 0, 4018, 4020, 3, 312, 156, 0, 4019, 4002, 1, 0, 0, 0, 4019, 4004, 1, 0, 0, 0, 4019, 4006, 1, 0, 0, 0, 4019, 4008, 1, 0, 0, 0, 4019, 4010, 1, 0, 0, 0, 4019, 4013, 1, 0, 0, 0, 4019, 4015, 1, 0, 0, 0, 4019, 4017, 1, 0, 0, 0, 4019, 4018, 1, 0, 0, 0, 4020, 4021, 1, 0, 0, 0, 4021, 4024, 5, 116, 0, 0, 4022, 4025, 3, 808, 404, 0, 4023, 4025, 5, 78, 0, 0, 4024, 4022, 1, 0, 0, 0, 4024, 4023, 1, 0, 0, 0, 4025, 327, 1, 0, 0, 0, 4026, 4027, 7, 48, 0, 0, 4027, 4028, 3, 330, 165, 0, 4028, 329, 1, 0, 0, 0, 4029, 4031, 7, 49, 0, 0, 4030, 4029, 1, 0, 0, 0, 4030, 4031, 1, 0, 0, 0, 4031, 4033, 1, 0, 0, 0, 4032, 4034, 3, 332, 166, 0, 4033, 4032, 1, 0, 0, 0, 4033, 4034, 1, 0, 0, 0, 4034, 4035, 1, 0, 0, 0, 4035, 4073, 3, 818, 409, 0, 4036, 4038, 7, 50, 0, 0, 4037, 4036, 1, 0, 0, 0, 4037, 4038, 1, 0, 0, 0, 4038, 4039, 1, 0, 0, 0, 4039, 4041, 3, 812, 406, 0, 4040, 4042, 3, 332, 166, 0, 4041, 4040, 1, 0, 0, 0, 4041, 4042, 1, 0, 0, 0, 4042, 4043, 1, 0, 0, 0, 4043, 4044, 3, 818, 409, 0, 4044, 4073, 1, 0, 0, 0, 4045, 4047, 5, 210, 0, 0, 4046, 4048, 3, 812, 406, 0, 4047, 4046, 1, 0, 0, 0, 4047, 4048, 1, 0, 0, 0, 4048, 4050, 1, 0, 0, 0, 4049, 4051, 3, 332, 166, 0, 4050, 4049, 1, 0, 0, 0, 4050, 4051, 1, 0, 0, 0, 4051, 4052, 1, 0, 0, 0, 4052, 4073, 3, 818, 409, 0, 4053, 4055, 5, 210, 0, 0, 4054, 4053, 1, 0, 0, 0, 4054, 4055, 1, 0, 0, 0, 4055, 4056, 1, 0, 0, 0, 4056, 4058, 5, 30, 0, 0, 4057, 4059, 3, 332, 166, 0, 4058, 4057, 1, 0, 0, 0, 4058, 4059, 1, 0, 0, 0, 4059, 4060, 1, 0, 0, 0, 4060, 4073, 3, 818, 409, 0, 4061, 4066, 5, 144, 0, 0, 4062, 4064, 5, 30, 0, 0, 4063, 4062, 1, 0, 0, 0, 4063, 4064, 1, 0, 0, 0, 4064, 4067, 1, 0, 0, 0, 4065, 4067, 3, 812, 406, 0, 4066, 4063, 1, 0, 0, 0, 4066, 4065, 1, 0, 0, 0, 4067, 4069, 1, 0, 0, 0, 4068, 4070, 3, 332, 166, 0, 4069, 4068, 1, 0, 0, 0, 4069, 4070, 1, 0, 0, 0, 4070, 4071, 1, 0, 0, 0, 4071, 4073, 3, 818, 409, 0, 4072, 4030, 1, 0, 0, 0, 4072, 4037, 1, 0, 0, 0, 4072, 4045, 1, 0, 0, 0, 4072, 4054, 1, 0, 0, 0, 4072, 4061, 1, 0, 0, 0, 4073, 331, 1, 0, 0, 0, 4074, 4075, 7, 51, 0, 0, 4075, 333, 1, 0, 0, 0, 4076, 4077, 5, 65, 0, 0, 4077, 4078, 3, 338, 169, 0, 4078, 4079, 5, 80, 0, 0, 4079, 4080, 3, 344, 172, 0, 4080, 4081, 5, 94, 0, 0, 4081, 4085, 3, 346, 173, 0, 4082, 4083, 5, 105, 0, 0, 4083, 4084, 5, 65, 0, 0, 4084, 4086, 5, 279, 0, 0, 4085, 4082, 1, 0, 0, 0, 4085, 4086, 1, 0, 0, 0, 4086, 335, 1, 0, 0, 0, 4087, 4091, 5, 317, 0, 0, 4088, 4089, 5, 65, 0, 0, 4089, 4090, 5, 279, 0, 0, 4090, 4092, 5, 62, 0, 0, 4091, 4088, 1, 0, 0, 0, 4091, 4092, 1, 0, 0, 0, 4092, 4093, 1, 0, 0, 0, 4093, 4094, 3, 338, 169, 0, 4094, 4095, 5, 80, 0, 0, 4095, 4096, 3, 344, 172, 0, 4096, 4097, 5, 64, 0, 0, 4097, 4099, 3, 346, 173, 0, 4098, 4100, 3, 96, 48, 0, 4099, 4098, 1, 0, 0, 0, 4099, 4100, 1, 0, 0, 0, 4100, 337, 1, 0, 0, 0, 4101, 4106, 3, 342, 171, 0, 4102, 4103, 5, 6, 0, 0, 4103, 4105, 3, 342, 171, 0, 4104, 4102, 1, 0, 0, 0, 4105, 4108, 1, 0, 0, 0, 4106, 4104, 1, 0, 0, 0, 4106, 4107, 1, 0, 0, 0, 4107, 4125, 1, 0, 0, 0, 4108, 4106, 1, 0, 0, 0, 4109, 4111, 5, 30, 0, 0, 4110, 4112, 5, 294, 0, 0, 4111, 4110, 1, 0, 0, 0, 4111, 4112, 1, 0, 0, 0, 4112, 4114, 1, 0, 0, 0, 4113, 4115, 3, 144, 72, 0, 4114, 4113, 1, 0, 0, 0, 4114, 4115, 1, 0, 0, 0, 4115, 4125, 1, 0, 0, 0, 4116, 4121, 3, 340, 170, 0, 4117, 4118, 5, 6, 0, 0, 4118, 4120, 3, 340, 170, 0, 4119, 4117, 1, 0, 0, 0, 4120, 4123, 1, 0, 0, 0, 4121, 4119, 1, 0, 0, 0, 4121, 4122, 1, 0, 0, 0, 4122, 4125, 1, 0, 0, 0, 4123, 4121, 1, 0, 0, 0, 4124, 4101, 1, 0, 0, 0, 4124, 4109, 1, 0, 0, 0, 4124, 4116, 1, 0, 0, 0, 4125, 339, 1, 0, 0, 0, 4126, 4127, 7, 52, 0, 0, 4127, 341, 1, 0, 0, 0, 4128, 4133, 5, 88, 0, 0, 4129, 4133, 5, 86, 0, 0, 4130, 4133, 5, 46, 0, 0, 4131, 4133, 3, 818, 409, 0, 4132, 4128, 1, 0, 0, 0, 4132, 4129, 1, 0, 0, 0, 4132, 4130, 1, 0, 0, 0, 4132, 4131, 1, 0, 0, 0, 4133, 4135, 1, 0, 0, 0, 4134, 4136, 3, 144, 72, 0, 4135, 4134, 1, 0, 0, 0, 4135, 4136, 1, 0, 0, 0, 4136, 343, 1, 0, 0, 0, 4137, 4138, 5, 92, 0, 0, 4138, 4183, 3, 762, 381, 0, 4139, 4141, 5, 328, 0, 0, 4140, 4139, 1, 0, 0, 0, 4140, 4141, 1, 0, 0, 0, 4141, 4142, 1, 0, 0, 0, 4142, 4183, 3, 760, 380, 0, 4143, 4147, 5, 63, 0, 0, 4144, 4145, 5, 174, 0, 0, 4145, 4148, 5, 381, 0, 0, 4146, 4148, 5, 331, 0, 0, 4147, 4144, 1, 0, 0, 0, 4147, 4146, 1, 0, 0, 0, 4148, 4151, 1, 0, 0, 0, 4149, 4151, 5, 247, 0, 0, 4150, 4143, 1, 0, 0, 0, 4150, 4149, 1, 0, 0, 0, 4151, 4152, 1, 0, 0, 0, 4152, 4183, 3, 784, 392, 0, 4153, 4154, 5, 211, 0, 0, 4154, 4183, 3, 380, 190, 0, 4155, 4156, 5, 296, 0, 0, 4156, 4183, 3, 376, 188, 0, 4157, 4158, 5, 442, 0, 0, 4158, 4183, 3, 372, 186, 0, 4159, 4160, 5, 175, 0, 0, 4160, 4183, 3, 766, 383, 0, 4161, 4162, 7, 32, 0, 0, 4162, 4183, 3, 314, 157, 0, 4163, 4164, 5, 248, 0, 0, 4164, 4165, 5, 274, 0, 0, 4165, 4170, 3, 202, 101, 0, 4166, 4167, 5, 6, 0, 0, 4167, 4169, 3, 202, 101, 0, 4168, 4166, 1, 0, 0, 0, 4169, 4172, 1, 0, 0, 0, 4170, 4168, 1, 0, 0, 0, 4170, 4171, 1, 0, 0, 0, 4171, 4183, 1, 0, 0, 0, 4172, 4170, 1, 0, 0, 0, 4173, 4174, 5, 323, 0, 0, 4174, 4183, 3, 764, 382, 0, 4175, 4176, 5, 351, 0, 0, 4176, 4183, 3, 782, 391, 0, 4177, 4178, 5, 30, 0, 0, 4178, 4179, 7, 53, 0, 0, 4179, 4180, 5, 68, 0, 0, 4180, 4181, 5, 323, 0, 0, 4181, 4183, 3, 764, 382, 0, 4182, 4137, 1, 0, 0, 0, 4182, 4140, 1, 0, 0, 0, 4182, 4150, 1, 0, 0, 0, 4182, 4153, 1, 0, 0, 0, 4182, 4155, 1, 0, 0, 0, 4182, 4157, 1, 0, 0, 0, 4182, 4159, 1, 0, 0, 0, 4182, 4161, 1, 0, 0, 0, 4182, 4163, 1, 0, 0, 0, 4182, 4173, 1, 0, 0, 0, 4182, 4175, 1, 0, 0, 0, 4182, 4177, 1, 0, 0, 0, 4183, 345, 1, 0, 0, 0, 4184, 4186, 5, 66, 0, 0, 4185, 4184, 1, 0, 0, 0, 4185, 4186, 1, 0, 0, 0, 4186, 4187, 1, 0, 0, 0, 4187, 4188, 3, 814, 407, 0, 4188, 4196, 1, 0, 0, 0, 4189, 4191, 5, 6, 0, 0, 4190, 4192, 5, 66, 0, 0, 4191, 4190, 1, 0, 0, 0, 4191, 4192, 1, 0, 0, 0, 4192, 4193, 1, 0, 0, 0, 4193, 4195, 3, 814, 407, 0, 4194, 4189, 1, 0, 0, 0, 4195, 4198, 1, 0, 0, 0, 4196, 4194, 1, 0, 0, 0, 4196, 4197, 1, 0, 0, 0, 4197, 347, 1, 0, 0, 0, 4198, 4196, 1, 0, 0, 0, 4199, 4200, 5, 65, 0, 0, 4200, 4205, 3, 342, 171, 0, 4201, 4202, 5, 6, 0, 0, 4202, 4204, 3, 342, 171, 0, 4203, 4201, 1, 0, 0, 0, 4204, 4207, 1, 0, 0, 0, 4205, 4203, 1, 0, 0, 0, 4205, 4206, 1, 0, 0, 0, 4206, 4208, 1, 0, 0, 0, 4207, 4205, 1, 0, 0, 0, 4208, 4209, 5, 94, 0, 0, 4209, 4213, 3, 816, 408, 0, 4210, 4211, 5, 105, 0, 0, 4211, 4212, 5, 134, 0, 0, 4212, 4214, 5, 279, 0, 0, 4213, 4210, 1, 0, 0, 0, 4213, 4214, 1, 0, 0, 0, 4214, 4218, 1, 0, 0, 0, 4215, 4216, 5, 214, 0, 0, 4216, 4217, 5, 147, 0, 0, 4217, 4219, 3, 814, 407, 0, 4218, 4215, 1, 0, 0, 0, 4218, 4219, 1, 0, 0, 0, 4219, 349, 1, 0, 0, 0, 4220, 4224, 5, 317, 0, 0, 4221, 4222, 5, 134, 0, 0, 4222, 4223, 5, 279, 0, 0, 4223, 4225, 5, 62, 0, 0, 4224, 4221, 1, 0, 0, 0, 4224, 4225, 1, 0, 0, 0, 4225, 4226, 1, 0, 0, 0, 4226, 4231, 3, 342, 171, 0, 4227, 4228, 5, 6, 0, 0, 4228, 4230, 3, 342, 171, 0, 4229, 4227, 1, 0, 0, 0, 4230, 4233, 1, 0, 0, 0, 4231, 4229, 1, 0, 0, 0, 4231, 4232, 1, 0, 0, 0, 4232, 4234, 1, 0, 0, 0, 4233, 4231, 1, 0, 0, 0, 4234, 4235, 5, 64, 0, 0, 4235, 4239, 3, 816, 408, 0, 4236, 4237, 5, 214, 0, 0, 4237, 4238, 5, 147, 0, 0, 4238, 4240, 3, 814, 407, 0, 4239, 4236, 1, 0, 0, 0, 4239, 4240, 1, 0, 0, 0, 4240, 4242, 1, 0, 0, 0, 4241, 4243, 3, 96, 48, 0, 4242, 4241, 1, 0, 0, 0, 4242, 4243, 1, 0, 0, 0, 4243, 351, 1, 0, 0, 0, 4244, 4245, 5, 138, 0, 0, 4245, 4246, 5, 53, 0, 0, 4246, 4255, 5, 294, 0, 0, 4247, 4248, 5, 68, 0, 0, 4248, 4249, 5, 323, 0, 0, 4249, 4254, 3, 764, 382, 0, 4250, 4251, 5, 62, 0, 0, 4251, 4252, 7, 2, 0, 0, 4252, 4254, 3, 816, 408, 0, 4253, 4247, 1, 0, 0, 0, 4253, 4250, 1, 0, 0, 0, 4254, 4257, 1, 0, 0, 0, 4255, 4253, 1, 0, 0, 0, 4255, 4256, 1, 0, 0, 0, 4256, 4258, 1, 0, 0, 0, 4257, 4255, 1, 0, 0, 0, 4258, 4259, 3, 354, 177, 0, 4259, 353, 1, 0, 0, 0, 4260, 4261, 5, 65, 0, 0, 4261, 4262, 3, 338, 169, 0, 4262, 4263, 5, 80, 0, 0, 4263, 4264, 3, 356, 178, 0, 4264, 4265, 5, 94, 0, 0, 4265, 4269, 3, 346, 173, 0, 4266, 4267, 5, 105, 0, 0, 4267, 4268, 5, 65, 0, 0, 4268, 4270, 5, 279, 0, 0, 4269, 4266, 1, 0, 0, 0, 4269, 4270, 1, 0, 0, 0, 4270, 4286, 1, 0, 0, 0, 4271, 4275, 5, 317, 0, 0, 4272, 4273, 5, 65, 0, 0, 4273, 4274, 5, 279, 0, 0, 4274, 4276, 5, 62, 0, 0, 4275, 4272, 1, 0, 0, 0, 4275, 4276, 1, 0, 0, 0, 4276, 4277, 1, 0, 0, 0, 4277, 4278, 3, 338, 169, 0, 4278, 4279, 5, 80, 0, 0, 4279, 4280, 3, 356, 178, 0, 4280, 4281, 5, 64, 0, 0, 4281, 4283, 3, 346, 173, 0, 4282, 4284, 3, 96, 48, 0, 4283, 4282, 1, 0, 0, 0, 4283, 4284, 1, 0, 0, 0, 4284, 4286, 1, 0, 0, 0, 4285, 4260, 1, 0, 0, 0, 4285, 4271, 1, 0, 0, 0, 4286, 355, 1, 0, 0, 0, 4287, 4288, 7, 54, 0, 0, 4288, 357, 1, 0, 0, 0, 4289, 4291, 5, 46, 0, 0, 4290, 4292, 5, 98, 0, 0, 4291, 4290, 1, 0, 0, 0, 4291, 4292, 1, 0, 0, 0, 4292, 4293, 1, 0, 0, 0, 4293, 4295, 5, 226, 0, 0, 4294, 4296, 5, 109, 0, 0, 4295, 4294, 1, 0, 0, 0, 4295, 4296, 1, 0, 0, 0, 4296, 4298, 1, 0, 0, 0, 4297, 4299, 3, 294, 147, 0, 4298, 4297, 1, 0, 0, 0, 4298, 4299, 1, 0, 0, 0, 4299, 4301, 1, 0, 0, 0, 4300, 4302, 3, 818, 409, 0, 4301, 4300, 1, 0, 0, 0, 4301, 4302, 1, 0, 0, 0, 4302, 4303, 1, 0, 0, 0, 4303, 4304, 5, 80, 0, 0, 4304, 4306, 3, 624, 312, 0, 4305, 4307, 3, 170, 85, 0, 4306, 4305, 1, 0, 0, 0, 4306, 4307, 1, 0, 0, 0, 4307, 4308, 1, 0, 0, 0, 4308, 4311, 3, 360, 180, 0, 4309, 4310, 5, 441, 0, 0, 4310, 4312, 3, 360, 180, 0, 4311, 4309, 1, 0, 0, 0, 4311, 4312, 1, 0, 0, 0, 4312, 4318, 1, 0, 0, 0, 4313, 4315, 5, 273, 0, 0, 4314, 4316, 5, 77, 0, 0, 4315, 4314, 1, 0, 0, 0, 4315, 4316, 1, 0, 0, 0, 4316, 4317, 1, 0, 0, 0, 4317, 4319, 5, 56, 0, 0, 4318, 4313, 1, 0, 0, 0, 4318, 4319, 1, 0, 0, 0, 4319, 4321, 1, 0, 0, 0, 4320, 4322, 3, 102, 51, 0, 4321, 4320, 1, 0, 0, 0, 4321, 4322, 1, 0, 0, 0, 4322, 4324, 1, 0, 0, 0, 4323, 4325, 3, 176, 88, 0, 4324, 4323, 1, 0, 0, 0, 4324, 4325, 1, 0, 0, 0, 4325, 4327, 1, 0, 0, 0, 4326, 4328, 3, 638, 319, 0, 4327, 4326, 1, 0, 0, 0, 4327, 4328, 1, 0, 0, 0, 4328, 359, 1, 0, 0, 0, 4329, 4330, 5, 2, 0, 0, 4330, 4335, 3, 362, 181, 0, 4331, 4332, 5, 6, 0, 0, 4332, 4334, 3, 362, 181, 0, 4333, 4331, 1, 0, 0, 0, 4334, 4337, 1, 0, 0, 0, 4335, 4333, 1, 0, 0, 0, 4335, 4336, 1, 0, 0, 0, 4336, 4338, 1, 0, 0, 0, 4337, 4335, 1, 0, 0, 0, 4338, 4339, 5, 3, 0, 0, 4339, 361, 1, 0, 0, 0, 4340, 4347, 3, 800, 400, 0, 4341, 4347, 3, 688, 344, 0, 4342, 4343, 5, 2, 0, 0, 4343, 4344, 3, 674, 337, 0, 4344, 4345, 5, 3, 0, 0, 4345, 4347, 1, 0, 0, 0, 4346, 4340, 1, 0, 0, 0, 4346, 4341, 1, 0, 0, 0, 4346, 4342, 1, 0, 0, 0, 4347, 4349, 1, 0, 0, 0, 4348, 4350, 3, 98, 49, 0, 4349, 4348, 1, 0, 0, 0, 4349, 4350, 1, 0, 0, 0, 4350, 4357, 1, 0, 0, 0, 4351, 4353, 3, 316, 158, 0, 4352, 4351, 1, 0, 0, 0, 4352, 4353, 1, 0, 0, 0, 4353, 4358, 1, 0, 0, 0, 4354, 4355, 3, 316, 158, 0, 4355, 4356, 3, 100, 50, 0, 4356, 4358, 1, 0, 0, 0, 4357, 4352, 1, 0, 0, 0, 4357, 4354, 1, 0, 0, 0, 4358, 4360, 1, 0, 0, 0, 4359, 4361, 7, 55, 0, 0, 4360, 4359, 1, 0, 0, 0, 4360, 4361, 1, 0, 0, 0, 4361, 4364, 1, 0, 0, 0, 4362, 4363, 5, 273, 0, 0, 4363, 4365, 7, 56, 0, 0, 4364, 4362, 1, 0, 0, 0, 4364, 4365, 1, 0, 0, 0, 4365, 363, 1, 0, 0, 0, 4366, 4368, 5, 46, 0, 0, 4367, 4369, 3, 366, 183, 0, 4368, 4367, 1, 0, 0, 0, 4368, 4369, 1, 0, 0, 0, 4369, 4374, 1, 0, 0, 0, 4370, 4371, 5, 211, 0, 0, 4371, 4375, 3, 804, 402, 0, 4372, 4373, 5, 296, 0, 0, 4373, 4375, 3, 798, 399, 0, 4374, 4370, 1, 0, 0, 0, 4374, 4372, 1, 0, 0, 0, 4375, 4376, 1, 0, 0, 0, 4376, 4385, 5, 2, 0, 0, 4377, 4382, 3, 390, 195, 0, 4378, 4379, 5, 6, 0, 0, 4379, 4381, 3, 390, 195, 0, 4380, 4378, 1, 0, 0, 0, 4381, 4384, 1, 0, 0, 0, 4382, 4380, 1, 0, 0, 0, 4382, 4383, 1, 0, 0, 0, 4383, 4386, 1, 0, 0, 0, 4384, 4382, 1, 0, 0, 0, 4385, 4377, 1, 0, 0, 0, 4385, 4386, 1, 0, 0, 0, 4386, 4387, 1, 0, 0, 0, 4387, 4388, 5, 3, 0, 0, 4388, 4405, 1, 0, 0, 0, 4389, 4403, 5, 316, 0, 0, 4390, 4404, 3, 388, 194, 0, 4391, 4392, 5, 92, 0, 0, 4392, 4393, 5, 2, 0, 0, 4393, 4398, 3, 402, 201, 0, 4394, 4395, 5, 6, 0, 0, 4395, 4397, 3, 402, 201, 0, 4396, 4394, 1, 0, 0, 0, 4397, 4400, 1, 0, 0, 0, 4398, 4396, 1, 0, 0, 0, 4398, 4399, 1, 0, 0, 0, 4399, 4401, 1, 0, 0, 0, 4400, 4398, 1, 0, 0, 0, 4401, 4402, 5, 3, 0, 0, 4402, 4404, 1, 0, 0, 0, 4403, 4390, 1, 0, 0, 0, 4403, 4391, 1, 0, 0, 0, 4404, 4406, 1, 0, 0, 0, 4405, 4389, 1, 0, 0, 0, 4405, 4406, 1, 0, 0, 0, 4406, 4408, 1, 0, 0, 0, 4407, 4409, 3, 398, 199, 0, 4408, 4407, 1, 0, 0, 0, 4409, 4410, 1, 0, 0, 0, 4410, 4408, 1, 0, 0, 0, 4410, 4411, 1, 0, 0, 0, 4411, 4417, 1, 0, 0, 0, 4412, 4413, 5, 105, 0, 0, 4413, 4414, 5, 2, 0, 0, 4414, 4415, 3, 784, 392, 0, 4415, 4416, 5, 3, 0, 0, 4416, 4418, 1, 0, 0, 0, 4417, 4412, 1, 0, 0, 0, 4417, 4418, 1, 0, 0, 0, 4418, 365, 1, 0, 0, 0, 4419, 4420, 5, 82, 0, 0, 4420, 4421, 5, 311, 0, 0, 4421, 367, 1, 0, 0, 0, 4422, 4424, 5, 2, 0, 0, 4423, 4425, 3, 370, 185, 0, 4424, 4423, 1, 0, 0, 0, 4424, 4425, 1, 0, 0, 0, 4425, 4426, 1, 0, 0, 0, 4426, 4427, 5, 3, 0, 0, 4427, 369, 1, 0, 0, 0, 4428, 4433, 3, 384, 192, 0, 4429, 4430, 5, 6, 0, 0, 4430, 4432, 3, 384, 192, 0, 4431, 4429, 1, 0, 0, 0, 4432, 4435, 1, 0, 0, 0, 4433, 4431, 1, 0, 0, 0, 4433, 4434, 1, 0, 0, 0, 4434, 371, 1, 0, 0, 0, 4435, 4433, 1, 0, 0, 0, 4436, 4441, 3, 374, 187, 0, 4437, 4438, 5, 6, 0, 0, 4438, 4440, 3, 374, 187, 0, 4439, 4437, 1, 0, 0, 0, 4440, 4443, 1, 0, 0, 0, 4441, 4439, 1, 0, 0, 0, 4441, 4442, 1, 0, 0, 0, 4442, 373, 1, 0, 0, 0, 4443, 4441, 1, 0, 0, 0, 4444, 4445, 3, 794, 397, 0, 4445, 4446, 3, 368, 184, 0, 4446, 4450, 1, 0, 0, 0, 4447, 4450, 3, 832, 416, 0, 4448, 4450, 3, 780, 390, 0, 4449, 4444, 1, 0, 0, 0, 4449, 4447, 1, 0, 0, 0, 4449, 4448, 1, 0, 0, 0, 4450, 375, 1, 0, 0, 0, 4451, 4456, 3, 378, 189, 0, 4452, 4453, 5, 6, 0, 0, 4453, 4455, 3, 378, 189, 0, 4454, 4452, 1, 0, 0, 0, 4455, 4458, 1, 0, 0, 0, 4456, 4454, 1, 0, 0, 0, 4456, 4457, 1, 0, 0, 0, 4457, 377, 1, 0, 0, 0, 4458, 4456, 1, 0, 0, 0, 4459, 4460, 3, 796, 398, 0, 4460, 4461, 3, 368, 184, 0, 4461, 4465, 1, 0, 0, 0, 4462, 4465, 3, 832, 416, 0, 4463, 4465, 3, 780, 390, 0, 4464, 4459, 1, 0, 0, 0, 4464, 4462, 1, 0, 0, 0, 4464, 4463, 1, 0, 0, 0, 4465, 379, 1, 0, 0, 0, 4466, 4471, 3, 382, 191, 0, 4467, 4468, 5, 6, 0, 0, 4468, 4470, 3, 382, 191, 0, 4469, 4467, 1, 0, 0, 0, 4470, 4473, 1, 0, 0, 0, 4471, 4469, 1, 0, 0, 0, 4471, 4472, 1, 0, 0, 0, 4472, 381, 1, 0, 0, 0, 4473, 4471, 1, 0, 0, 0, 4474, 4475, 3, 806, 403, 0, 4475, 4476, 3, 368, 184, 0, 4476, 4480, 1, 0, 0, 0, 4477, 4480, 3, 832, 416, 0, 4478, 4480, 3, 780, 390, 0, 4479, 4474, 1, 0, 0, 0, 4479, 4477, 1, 0, 0, 0, 4479, 4478, 1, 0, 0, 0, 4480, 383, 1, 0, 0, 0, 4481, 4483, 3, 386, 193, 0, 4482, 4484, 3, 820, 410, 0, 4483, 4482, 1, 0, 0, 0, 4483, 4484, 1, 0, 0, 0, 4484, 4490, 1, 0, 0, 0, 4485, 4487, 3, 820, 410, 0, 4486, 4488, 3, 386, 193, 0, 4487, 4486, 1, 0, 0, 0, 4487, 4488, 1, 0, 0, 0, 4488, 4490, 1, 0, 0, 0, 4489, 4481, 1, 0, 0, 0, 4489, 4485, 1, 0, 0, 0, 4489, 4490, 1, 0, 0, 0, 4490, 4491, 1, 0, 0, 0, 4491, 4492, 3, 388, 194, 0, 4492, 385, 1, 0, 0, 0, 4493, 4495, 5, 68, 0, 0, 4494, 4496, 5, 453, 0, 0, 4495, 4494, 1, 0, 0, 0, 4495, 4496, 1, 0, 0, 0, 4496, 4501, 1, 0, 0, 0, 4497, 4501, 5, 453, 0, 0, 4498, 4501, 5, 400, 0, 0, 4499, 4501, 5, 101, 0, 0, 4500, 4493, 1, 0, 0, 0, 4500, 4497, 1, 0, 0, 0, 4500, 4498, 1, 0, 0, 0, 4500, 4499, 1, 0, 0, 0, 4501, 387, 1, 0, 0, 0, 4502, 4512, 3, 652, 326, 0, 4503, 4505, 5, 415, 0, 0, 4504, 4503, 1, 0, 0, 0, 4504, 4505, 1, 0, 0, 0, 4505, 4506, 1, 0, 0, 0, 4506, 4507, 3, 820, 410, 0, 4507, 4508, 3, 318, 159, 0, 4508, 4509, 5, 27, 0, 0, 4509, 4510, 5, 360, 0, 0, 4510, 4512, 1, 0, 0, 0, 4511, 4502, 1, 0, 0, 0, 4511, 4504, 1, 0, 0, 0, 4512, 389, 1, 0, 0, 0, 4513, 4516, 3, 384, 192, 0, 4514, 4515, 7, 57, 0, 0, 4515, 4517, 3, 674, 337, 0, 4516, 4514, 1, 0, 0, 0, 4516, 4517, 1, 0, 0, 0, 4517, 391, 1, 0, 0, 0, 4518, 4528, 5, 2, 0, 0, 4519, 4529, 5, 9, 0, 0, 4520, 4522, 3, 370, 185, 0, 4521, 4520, 1, 0, 0, 0, 4521, 4522, 1, 0, 0, 0, 4522, 4526, 1, 0, 0, 0, 4523, 4524, 5, 83, 0, 0, 4524, 4525, 5, 147, 0, 0, 4525, 4527, 3, 370, 185, 0, 4526, 4523, 1, 0, 0, 0, 4526, 4527, 1, 0, 0, 0, 4527, 4529, 1, 0, 0, 0, 4528, 4519, 1, 0, 0, 0, 4528, 4521, 1, 0, 0, 0, 4529, 4530, 1, 0, 0, 0, 4530, 4531, 5, 3, 0, 0, 4531, 393, 1, 0, 0, 0, 4532, 4533, 3, 806, 403, 0, 4533, 4534, 3, 392, 196, 0, 4534, 395, 1, 0, 0, 0, 4535, 4536, 5, 316, 0, 0, 4536, 4539, 5, 78, 0, 0, 4537, 4539, 5, 149, 0, 0, 4538, 4535, 1, 0, 0, 0, 4538, 4537, 1, 0, 0, 0, 4539, 4540, 1, 0, 0, 0, 4540, 4541, 5, 80, 0, 0, 4541, 4542, 5, 78, 0, 0, 4542, 4565, 5, 458, 0, 0, 4543, 4565, 5, 346, 0, 0, 4544, 4565, 5, 222, 0, 0, 4545, 4565, 5, 338, 0, 0, 4546, 4565, 5, 377, 0, 0, 4547, 4549, 5, 205, 0, 0, 4548, 4547, 1, 0, 0, 0, 4548, 4549, 1, 0, 0, 0, 4549, 4550, 1, 0, 0, 0, 4550, 4551, 5, 327, 0, 0, 4551, 4565, 7, 58, 0, 0, 4552, 4565, 5, 250, 0, 0, 4553, 4554, 5, 77, 0, 0, 4554, 4565, 5, 250, 0, 0, 4555, 4556, 7, 59, 0, 0, 4556, 4565, 3, 202, 101, 0, 4557, 4558, 5, 459, 0, 0, 4558, 4565, 3, 316, 158, 0, 4559, 4560, 5, 333, 0, 0, 4560, 4565, 3, 42, 21, 0, 4561, 4565, 3, 60, 30, 0, 4562, 4563, 5, 460, 0, 0, 4563, 4565, 3, 818, 409, 0, 4564, 4538, 1, 0, 0, 0, 4564, 4543, 1, 0, 0, 0, 4564, 4544, 1, 0, 0, 0, 4564, 4545, 1, 0, 0, 0, 4564, 4546, 1, 0, 0, 0, 4564, 4548, 1, 0, 0, 0, 4564, 4552, 1, 0, 0, 0, 4564, 4553, 1, 0, 0, 0, 4564, 4555, 1, 0, 0, 0, 4564, 4557, 1, 0, 0, 0, 4564, 4559, 1, 0, 0, 0, 4564, 4561, 1, 0, 0, 0, 4564, 4562, 1, 0, 0, 0, 4565, 397, 1, 0, 0, 0, 4566, 4567, 5, 36, 0, 0, 4567, 4568, 3, 808, 404, 0, 4568, 4569, 3, 462, 231, 0, 4569, 4602, 1, 0, 0, 0, 4570, 4571, 5, 247, 0, 0, 4571, 4602, 3, 58, 29, 0, 4572, 4573, 5, 443, 0, 0, 4573, 4574, 5, 62, 0, 0, 4574, 4575, 5, 360, 0, 0, 4575, 4582, 3, 652, 326, 0, 4576, 4577, 5, 6, 0, 0, 4577, 4578, 5, 62, 0, 0, 4578, 4579, 5, 360, 0, 0, 4579, 4581, 3, 652, 326, 0, 4580, 4576, 1, 0, 0, 0, 4581, 4584, 1, 0, 0, 0, 4582, 4580, 1, 0, 0, 0, 4582, 4583, 1, 0, 0, 0, 4583, 4602, 1, 0, 0, 0, 4584, 4582, 1, 0, 0, 0, 4585, 4602, 5, 104, 0, 0, 4586, 4587, 5, 333, 0, 0, 4587, 4594, 3, 818, 409, 0, 4588, 4589, 5, 94, 0, 0, 4589, 4595, 3, 818, 409, 0, 4590, 4591, 5, 10, 0, 0, 4591, 4595, 3, 818, 409, 0, 4592, 4593, 5, 64, 0, 0, 4593, 4595, 5, 434, 0, 0, 4594, 4588, 1, 0, 0, 0, 4594, 4590, 1, 0, 0, 0, 4594, 4592, 1, 0, 0, 0, 4595, 4602, 1, 0, 0, 0, 4596, 4597, 5, 36, 0, 0, 4597, 4602, 3, 818, 409, 0, 4598, 4602, 3, 4, 2, 0, 4599, 4602, 3, 396, 198, 0, 4600, 4602, 3, 818, 409, 0, 4601, 4566, 1, 0, 0, 0, 4601, 4570, 1, 0, 0, 0, 4601, 4572, 1, 0, 0, 0, 4601, 4585, 1, 0, 0, 0, 4601, 4586, 1, 0, 0, 0, 4601, 4596, 1, 0, 0, 0, 4601, 4598, 1, 0, 0, 0, 4601, 4599, 1, 0, 0, 0, 4601, 4600, 1, 0, 0, 0, 4602, 399, 1, 0, 0, 0, 4603, 4604, 5, 105, 0, 0, 4604, 4605, 3, 284, 142, 0, 4605, 401, 1, 0, 0, 0, 4606, 4607, 3, 800, 400, 0, 4607, 4608, 3, 388, 194, 0, 4608, 403, 1, 0, 0, 0, 4609, 4616, 5, 138, 0, 0, 4610, 4611, 5, 211, 0, 0, 4611, 4617, 3, 382, 191, 0, 4612, 4613, 5, 296, 0, 0, 4613, 4617, 3, 378, 189, 0, 4614, 4615, 5, 442, 0, 0, 4615, 4617, 3, 374, 187, 0, 4616, 4610, 1, 0, 0, 0, 4616, 4612, 1, 0, 0, 0, 4616, 4614, 1, 0, 0, 0, 4617, 4619, 1, 0, 0, 0, 4618, 4620, 3, 396, 198, 0, 4619, 4618, 1, 0, 0, 0, 4620, 4621, 1, 0, 0, 0, 4621, 4619, 1, 0, 0, 0, 4621, 4622, 1, 0, 0, 0, 4622, 4624, 1, 0, 0, 0, 4623, 4625, 5, 315, 0, 0, 4624, 4623, 1, 0, 0, 0, 4624, 4625, 1, 0, 0, 0, 4625, 405, 1, 0, 0, 0, 4626, 4642, 5, 191, 0, 0, 4627, 4629, 5, 211, 0, 0, 4628, 4630, 3, 422, 211, 0, 4629, 4628, 1, 0, 0, 0, 4629, 4630, 1, 0, 0, 0, 4630, 4631, 1, 0, 0, 0, 4631, 4643, 3, 380, 190, 0, 4632, 4634, 5, 296, 0, 0, 4633, 4635, 3, 422, 211, 0, 4634, 4633, 1, 0, 0, 0, 4634, 4635, 1, 0, 0, 0, 4635, 4636, 1, 0, 0, 0, 4636, 4643, 3, 376, 188, 0, 4637, 4639, 5, 442, 0, 0, 4638, 4640, 3, 422, 211, 0, 4639, 4638, 1, 0, 0, 0, 4639, 4640, 1, 0, 0, 0, 4640, 4641, 1, 0, 0, 0, 4641, 4643, 3, 372, 186, 0, 4642, 4627, 1, 0, 0, 0, 4642, 4632, 1, 0, 0, 0, 4642, 4637, 1, 0, 0, 0, 4643, 4645, 1, 0, 0, 0, 4644, 4646, 3, 96, 48, 0, 4645, 4644, 1, 0, 0, 0, 4645, 4646, 1, 0, 0, 0, 4646, 407, 1, 0, 0, 0, 4647, 4648, 5, 191, 0, 0, 4648, 4650, 5, 136, 0, 0, 4649, 4651, 3, 422, 211, 0, 4650, 4649, 1, 0, 0, 0, 4650, 4651, 1, 0, 0, 0, 4651, 4652, 1, 0, 0, 0, 4652, 4657, 3, 394, 197, 0, 4653, 4654, 5, 6, 0, 0, 4654, 4656, 3, 394, 197, 0, 4655, 4653, 1, 0, 0, 0, 4656, 4659, 1, 0, 0, 0, 4657, 4655, 1, 0, 0, 0, 4657, 4658, 1, 0, 0, 0, 4658, 4661, 1, 0, 0, 0, 4659, 4657, 1, 0, 0, 0, 4660, 4662, 3, 96, 48, 0, 4661, 4660, 1, 0, 0, 0, 4661, 4662, 1, 0, 0, 0, 4662, 409, 1, 0, 0, 0, 4663, 4664, 5, 191, 0, 0, 4664, 4666, 5, 278, 0, 0, 4665, 4667, 3, 422, 211, 0, 4666, 4665, 1, 0, 0, 0, 4666, 4667, 1, 0, 0, 0, 4667, 4668, 1, 0, 0, 0, 4668, 4673, 3, 416, 208, 0, 4669, 4670, 5, 6, 0, 0, 4670, 4672, 3, 416, 208, 0, 4671, 4669, 1, 0, 0, 0, 4672, 4675, 1, 0, 0, 0, 4673, 4671, 1, 0, 0, 0, 4673, 4674, 1, 0, 0, 0, 4674, 4677, 1, 0, 0, 0, 4675, 4673, 1, 0, 0, 0, 4676, 4678, 3, 96, 48, 0, 4677, 4676, 1, 0, 0, 0, 4677, 4678, 1, 0, 0, 0, 4678, 411, 1, 0, 0, 0, 4679, 4692, 5, 2, 0, 0, 4680, 4683, 3, 652, 326, 0, 4681, 4682, 5, 6, 0, 0, 4682, 4684, 3, 652, 326, 0, 4683, 4681, 1, 0, 0, 0, 4683, 4684, 1, 0, 0, 0, 4684, 4693, 1, 0, 0, 0, 4685, 4686, 5, 407, 0, 0, 4686, 4687, 5, 6, 0, 0, 4687, 4693, 3, 652, 326, 0, 4688, 4689, 3, 652, 326, 0, 4689, 4690, 5, 6, 0, 0, 4690, 4691, 5, 407, 0, 0, 4691, 4693, 1, 0, 0, 0, 4692, 4680, 1, 0, 0, 0, 4692, 4685, 1, 0, 0, 0, 4692, 4688, 1, 0, 0, 0, 4693, 4694, 1, 0, 0, 0, 4694, 4695, 5, 3, 0, 0, 4695, 413, 1, 0, 0, 0, 4696, 4697, 3, 818, 409, 0, 4697, 4698, 5, 11, 0, 0, 4698, 4700, 1, 0, 0, 0, 4699, 4696, 1, 0, 0, 0, 4700, 4703, 1, 0, 0, 0, 4701, 4699, 1, 0, 0, 0, 4701, 4702, 1, 0, 0, 0, 4702, 4704, 1, 0, 0, 0, 4703, 4701, 1, 0, 0, 0, 4704, 4705, 3, 720, 360, 0, 4705, 415, 1, 0, 0, 0, 4706, 4707, 3, 414, 207, 0, 4707, 4708, 3, 412, 206, 0, 4708, 417, 1, 0, 0, 0, 4709, 4713, 5, 57, 0, 0, 4710, 4714, 3, 808, 404, 0, 4711, 4712, 5, 247, 0, 0, 4712, 4714, 3, 58, 29, 0, 4713, 4710, 1, 0, 0, 0, 4713, 4711, 1, 0, 0, 0, 4714, 4715, 1, 0, 0, 0, 4715, 4713, 1, 0, 0, 0, 4715, 4716, 1, 0, 0, 0, 4716, 419, 1, 0, 0, 0, 4717, 4718, 5, 46, 0, 0, 4718, 4719, 5, 41, 0, 0, 4719, 4720, 5, 2, 0, 0, 4720, 4721, 3, 652, 326, 0, 4721, 4722, 5, 36, 0, 0, 4722, 4723, 3, 652, 326, 0, 4723, 4740, 5, 3, 0, 0, 4724, 4725, 5, 379, 0, 0, 4725, 4728, 5, 211, 0, 0, 4726, 4727, 5, 36, 0, 0, 4727, 4729, 7, 60, 0, 0, 4728, 4726, 1, 0, 0, 0, 4728, 4729, 1, 0, 0, 0, 4729, 4741, 1, 0, 0, 0, 4730, 4734, 5, 105, 0, 0, 4731, 4732, 5, 211, 0, 0, 4732, 4735, 3, 382, 191, 0, 4733, 4735, 5, 400, 0, 0, 4734, 4731, 1, 0, 0, 0, 4734, 4733, 1, 0, 0, 0, 4735, 4738, 1, 0, 0, 0, 4736, 4737, 5, 36, 0, 0, 4737, 4739, 7, 60, 0, 0, 4738, 4736, 1, 0, 0, 0, 4738, 4739, 1, 0, 0, 0, 4739, 4741, 1, 0, 0, 0, 4740, 4724, 1, 0, 0, 0, 4740, 4730, 1, 0, 0, 0, 4741, 421, 1, 0, 0, 0, 4742, 4743, 5, 220, 0, 0, 4743, 4744, 5, 396, 0, 0, 4744, 423, 1, 0, 0, 0, 4745, 4747, 5, 46, 0, 0, 4746, 4748, 3, 366, 183, 0, 4747, 4746, 1, 0, 0, 0, 4747, 4748, 1, 0, 0, 0, 4748, 4749, 1, 0, 0, 0, 4749, 4750, 5, 443, 0, 0, 4750, 4751, 5, 62, 0, 0, 4751, 4752, 3, 652, 326, 0, 4752, 4753, 5, 247, 0, 0, 4753, 4754, 3, 818, 409, 0, 4754, 4769, 5, 2, 0, 0, 4755, 4756, 5, 64, 0, 0, 4756, 4760, 3, 426, 213, 0, 4757, 4758, 5, 6, 0, 0, 4758, 4759, 5, 94, 0, 0, 4759, 4761, 3, 426, 213, 0, 4760, 4757, 1, 0, 0, 0, 4760, 4761, 1, 0, 0, 0, 4761, 4770, 1, 0, 0, 0, 4762, 4763, 5, 94, 0, 0, 4763, 4767, 3, 426, 213, 0, 4764, 4765, 5, 6, 0, 0, 4765, 4766, 5, 64, 0, 0, 4766, 4768, 3, 426, 213, 0, 4767, 4764, 1, 0, 0, 0, 4767, 4768, 1, 0, 0, 0, 4768, 4770, 1, 0, 0, 0, 4769, 4755, 1, 0, 0, 0, 4769, 4762, 1, 0, 0, 0, 4770, 4771, 1, 0, 0, 0, 4771, 4772, 5, 3, 0, 0, 4772, 425, 1, 0, 0, 0, 4773, 4774, 5, 461, 0, 0, 4774, 4775, 5, 105, 0, 0, 4775, 4776, 5, 211, 0, 0, 4776, 4777, 3, 382, 191, 0, 4777, 427, 1, 0, 0, 0, 4778, 4789, 5, 306, 0, 0, 4779, 4780, 5, 2, 0, 0, 4780, 4785, 5, 128, 0, 0, 4781, 4782, 5, 6, 0, 0, 4782, 4784, 5, 128, 0, 0, 4783, 4781, 1, 0, 0, 0, 4784, 4787, 1, 0, 0, 0, 4785, 4783, 1, 0, 0, 0, 4785, 4786, 1, 0, 0, 0, 4786, 4788, 1, 0, 0, 0, 4787, 4785, 1, 0, 0, 0, 4788, 4790, 5, 3, 0, 0, 4789, 4779, 1, 0, 0, 0, 4789, 4790, 1, 0, 0, 0, 4790, 4816, 1, 0, 0, 0, 4791, 4793, 5, 226, 0, 0, 4792, 4794, 5, 109, 0, 0, 4793, 4792, 1, 0, 0, 0, 4793, 4794, 1, 0, 0, 0, 4794, 4795, 1, 0, 0, 0, 4795, 4817, 3, 780, 390, 0, 4796, 4798, 5, 92, 0, 0, 4797, 4799, 5, 109, 0, 0, 4798, 4797, 1, 0, 0, 0, 4798, 4799, 1, 0, 0, 0, 4799, 4800, 1, 0, 0, 0, 4800, 4817, 3, 774, 387, 0, 4801, 4803, 5, 323, 0, 0, 4802, 4804, 5, 109, 0, 0, 4803, 4802, 1, 0, 0, 0, 4803, 4804, 1, 0, 0, 0, 4804, 4805, 1, 0, 0, 0, 4805, 4817, 3, 790, 395, 0, 4806, 4808, 5, 349, 0, 0, 4807, 4809, 5, 109, 0, 0, 4808, 4807, 1, 0, 0, 0, 4808, 4809, 1, 0, 0, 0, 4809, 4810, 1, 0, 0, 0, 4810, 4817, 3, 818, 409, 0, 4811, 4813, 5, 175, 0, 0, 4812, 4814, 5, 109, 0, 0, 4813, 4812, 1, 0, 0, 0, 4813, 4814, 1, 0, 0, 0, 4814, 4815, 1, 0, 0, 0, 4815, 4817, 3, 788, 394, 0, 4816, 4791, 1, 0, 0, 0, 4816, 4796, 1, 0, 0, 0, 4816, 4801, 1, 0, 0, 0, 4816, 4806, 1, 0, 0, 0, 4816, 4811, 1, 0, 0, 0, 4817, 429, 1, 0, 0, 0, 4818, 4819, 5, 138, 0, 0, 4819, 4820, 3, 176, 88, 0, 4820, 4821, 7, 16, 0, 0, 4821, 4822, 3, 100, 50, 0, 4822, 431, 1, 0, 0, 0, 4823, 4828, 5, 138, 0, 0, 4824, 4825, 5, 136, 0, 0, 4825, 4829, 3, 394, 197, 0, 4826, 4827, 5, 442, 0, 0, 4827, 4829, 3, 374, 187, 0, 4828, 4824, 1, 0, 0, 0, 4828, 4826, 1, 0, 0, 0, 4829, 4830, 1, 0, 0, 0, 4830, 4831, 5, 309, 0, 0, 4831, 4832, 5, 94, 0, 0, 4832, 4833, 3, 818, 409, 0, 4833, 5031, 1, 0, 0, 0, 4834, 4835, 5, 138, 0, 0, 4835, 4836, 5, 175, 0, 0, 4836, 4837, 3, 788, 394, 0, 4837, 4838, 5, 309, 0, 0, 4838, 4839, 5, 94, 0, 0, 4839, 4840, 3, 786, 393, 0, 4840, 5031, 1, 0, 0, 0, 4841, 4842, 5, 138, 0, 0, 4842, 4843, 7, 61, 0, 0, 4843, 4844, 3, 316, 158, 0, 4844, 4845, 5, 309, 0, 0, 4845, 4846, 5, 94, 0, 0, 4846, 4847, 3, 818, 409, 0, 4847, 5031, 1, 0, 0, 0, 4848, 4849, 5, 138, 0, 0, 4849, 4850, 5, 211, 0, 0, 4850, 4851, 3, 382, 191, 0, 4851, 4852, 5, 309, 0, 0, 4852, 4853, 5, 94, 0, 0, 4853, 4854, 3, 804, 402, 0, 4854, 5031, 1, 0, 0, 0, 4855, 4856, 5, 138, 0, 0, 4856, 4857, 5, 278, 0, 0, 4857, 4858, 7, 31, 0, 0, 4858, 4859, 3, 316, 158, 0, 4859, 4860, 3, 170, 85, 0, 4860, 4861, 5, 309, 0, 0, 4861, 4862, 5, 94, 0, 0, 4862, 4863, 3, 818, 409, 0, 4863, 5031, 1, 0, 0, 0, 4864, 4865, 5, 138, 0, 0, 4865, 4866, 5, 296, 0, 0, 4866, 4867, 3, 378, 189, 0, 4867, 4868, 5, 309, 0, 0, 4868, 4869, 5, 94, 0, 0, 4869, 4870, 3, 798, 399, 0, 4870, 5031, 1, 0, 0, 0, 4871, 4872, 5, 138, 0, 0, 4872, 4873, 5, 323, 0, 0, 4873, 4874, 3, 790, 395, 0, 4874, 4875, 5, 309, 0, 0, 4875, 4876, 5, 94, 0, 0, 4876, 4877, 3, 32, 16, 0, 4877, 5031, 1, 0, 0, 0, 4878, 4879, 5, 138, 0, 0, 4879, 4881, 7, 62, 0, 0, 4880, 4882, 3, 422, 211, 0, 4881, 4880, 1, 0, 0, 0, 4881, 4882, 1, 0, 0, 0, 4882, 4883, 1, 0, 0, 0, 4883, 4884, 3, 780, 390, 0, 4884, 4885, 5, 309, 0, 0, 4885, 4886, 5, 94, 0, 0, 4886, 4887, 3, 818, 409, 0, 4887, 5031, 1, 0, 0, 0, 4888, 4890, 5, 138, 0, 0, 4889, 4891, 5, 259, 0, 0, 4890, 4889, 1, 0, 0, 0, 4890, 4891, 1, 0, 0, 0, 4891, 4892, 1, 0, 0, 0, 4892, 4894, 5, 376, 0, 0, 4893, 4895, 3, 422, 211, 0, 4894, 4893, 1, 0, 0, 0, 4894, 4895, 1, 0, 0, 0, 4895, 4896, 1, 0, 0, 0, 4896, 4897, 3, 778, 389, 0, 4897, 4898, 5, 309, 0, 0, 4898, 4899, 5, 94, 0, 0, 4899, 4900, 3, 776, 388, 0, 4900, 5031, 1, 0, 0, 0, 4901, 4903, 5, 138, 0, 0, 4902, 4904, 5, 63, 0, 0, 4903, 4902, 1, 0, 0, 0, 4903, 4904, 1, 0, 0, 0, 4904, 4905, 1, 0, 0, 0, 4905, 4907, 5, 92, 0, 0, 4906, 4908, 3, 422, 211, 0, 4907, 4906, 1, 0, 0, 0, 4907, 4908, 1, 0, 0, 0, 4908, 4909, 1, 0, 0, 0, 4909, 4910, 3, 624, 312, 0, 4910, 4911, 5, 309, 0, 0, 4911, 4912, 5, 94, 0, 0, 4912, 4913, 3, 772, 386, 0, 4913, 5031, 1, 0, 0, 0, 4914, 4939, 5, 138, 0, 0, 4915, 4917, 5, 63, 0, 0, 4916, 4915, 1, 0, 0, 0, 4916, 4917, 1, 0, 0, 0, 4917, 4918, 1, 0, 0, 0, 4918, 4920, 5, 92, 0, 0, 4919, 4921, 3, 422, 211, 0, 4920, 4919, 1, 0, 0, 0, 4920, 4921, 1, 0, 0, 0, 4921, 4922, 1, 0, 0, 0, 4922, 4923, 3, 624, 312, 0, 4923, 4925, 5, 309, 0, 0, 4924, 4926, 5, 44, 0, 0, 4925, 4924, 1, 0, 0, 0, 4925, 4926, 1, 0, 0, 0, 4926, 4940, 1, 0, 0, 0, 4927, 4929, 5, 259, 0, 0, 4928, 4927, 1, 0, 0, 0, 4928, 4929, 1, 0, 0, 0, 4929, 4930, 1, 0, 0, 0, 4930, 4932, 5, 376, 0, 0, 4931, 4933, 3, 422, 211, 0, 4932, 4931, 1, 0, 0, 0, 4932, 4933, 1, 0, 0, 0, 4933, 4934, 1, 0, 0, 0, 4934, 4935, 3, 778, 389, 0, 4935, 4937, 5, 309, 0, 0, 4936, 4938, 5, 44, 0, 0, 4937, 4936, 1, 0, 0, 0, 4937, 4938, 1, 0, 0, 0, 4938, 4940, 1, 0, 0, 0, 4939, 4916, 1, 0, 0, 0, 4939, 4928, 1, 0, 0, 0, 4940, 4941, 1, 0, 0, 0, 4941, 4942, 3, 800, 400, 0, 4942, 4943, 5, 94, 0, 0, 4943, 4944, 3, 802, 401, 0, 4944, 5031, 1, 0, 0, 0, 4945, 4953, 5, 138, 0, 0, 4946, 4948, 5, 92, 0, 0, 4947, 4949, 3, 422, 211, 0, 4948, 4947, 1, 0, 0, 0, 4948, 4949, 1, 0, 0, 0, 4949, 4950, 1, 0, 0, 0, 4950, 4954, 3, 624, 312, 0, 4951, 4952, 5, 189, 0, 0, 4952, 4954, 3, 316, 158, 0, 4953, 4946, 1, 0, 0, 0, 4953, 4951, 1, 0, 0, 0, 4954, 4955, 1, 0, 0, 0, 4955, 4956, 5, 309, 0, 0, 4956, 4957, 5, 45, 0, 0, 4957, 4958, 3, 818, 409, 0, 4958, 4959, 5, 94, 0, 0, 4959, 4960, 3, 818, 409, 0, 4960, 5031, 1, 0, 0, 0, 4961, 4968, 5, 138, 0, 0, 4962, 4964, 5, 445, 0, 0, 4963, 4965, 3, 422, 211, 0, 4964, 4963, 1, 0, 0, 0, 4964, 4965, 1, 0, 0, 0, 4965, 4969, 1, 0, 0, 0, 4966, 4969, 5, 321, 0, 0, 4967, 4969, 5, 357, 0, 0, 4968, 4962, 1, 0, 0, 0, 4968, 4966, 1, 0, 0, 0, 4968, 4967, 1, 0, 0, 0, 4969, 4970, 1, 0, 0, 0, 4970, 4971, 3, 818, 409, 0, 4971, 4972, 5, 80, 0, 0, 4972, 4973, 3, 780, 390, 0, 4973, 4974, 5, 309, 0, 0, 4974, 4975, 5, 94, 0, 0, 4975, 4976, 3, 818, 409, 0, 4976, 5031, 1, 0, 0, 0, 4977, 4990, 5, 138, 0, 0, 4978, 4979, 5, 63, 0, 0, 4979, 4980, 5, 174, 0, 0, 4980, 4991, 5, 381, 0, 0, 4981, 4983, 5, 295, 0, 0, 4982, 4981, 1, 0, 0, 0, 4982, 4983, 1, 0, 0, 0, 4983, 4984, 1, 0, 0, 0, 4984, 4991, 5, 247, 0, 0, 4985, 4991, 5, 452, 0, 0, 4986, 4991, 5, 331, 0, 0, 4987, 4991, 5, 451, 0, 0, 4988, 4989, 5, 198, 0, 0, 4989, 4991, 5, 357, 0, 0, 4990, 4978, 1, 0, 0, 0, 4990, 4982, 1, 0, 0, 0, 4990, 4985, 1, 0, 0, 0, 4990, 4986, 1, 0, 0, 0, 4990, 4987, 1, 0, 0, 0, 4990, 4988, 1, 0, 0, 0, 4991, 4992, 1, 0, 0, 0, 4992, 4993, 3, 818, 409, 0, 4993, 4994, 5, 309, 0, 0, 4994, 4995, 5, 94, 0, 0, 4995, 4996, 3, 818, 409, 0, 4996, 5031, 1, 0, 0, 0, 4997, 4998, 5, 138, 0, 0, 4998, 4999, 7, 45, 0, 0, 4999, 5000, 3, 814, 407, 0, 5000, 5001, 5, 309, 0, 0, 5001, 5002, 5, 94, 0, 0, 5002, 5003, 3, 814, 407, 0, 5003, 5031, 1, 0, 0, 0, 5004, 5005, 5, 138, 0, 0, 5005, 5006, 3, 176, 88, 0, 5006, 5007, 5, 309, 0, 0, 5007, 5008, 5, 94, 0, 0, 5008, 5009, 3, 768, 384, 0, 5009, 5031, 1, 0, 0, 0, 5010, 5011, 5, 138, 0, 0, 5011, 5012, 5, 355, 0, 0, 5012, 5013, 5, 325, 0, 0, 5013, 5014, 7, 41, 0, 0, 5014, 5015, 3, 316, 158, 0, 5015, 5016, 5, 309, 0, 0, 5016, 5017, 5, 94, 0, 0, 5017, 5018, 3, 818, 409, 0, 5018, 5031, 1, 0, 0, 0, 5019, 5020, 5, 138, 0, 0, 5020, 5021, 5, 360, 0, 0, 5021, 5022, 3, 316, 158, 0, 5022, 5023, 5, 309, 0, 0, 5023, 5024, 5, 143, 0, 0, 5024, 5025, 3, 818, 409, 0, 5025, 5026, 5, 94, 0, 0, 5026, 5028, 3, 818, 409, 0, 5027, 5029, 3, 96, 48, 0, 5028, 5027, 1, 0, 0, 0, 5028, 5029, 1, 0, 0, 0, 5029, 5031, 1, 0, 0, 0, 5030, 4823, 1, 0, 0, 0, 5030, 4834, 1, 0, 0, 0, 5030, 4841, 1, 0, 0, 0, 5030, 4848, 1, 0, 0, 0, 5030, 4855, 1, 0, 0, 0, 5030, 4864, 1, 0, 0, 0, 5030, 4871, 1, 0, 0, 0, 5030, 4878, 1, 0, 0, 0, 5030, 4888, 1, 0, 0, 0, 5030, 4901, 1, 0, 0, 0, 5030, 4914, 1, 0, 0, 0, 5030, 4945, 1, 0, 0, 0, 5030, 4961, 1, 0, 0, 0, 5030, 4977, 1, 0, 0, 0, 5030, 4997, 1, 0, 0, 0, 5030, 5004, 1, 0, 0, 0, 5030, 5010, 1, 0, 0, 0, 5030, 5019, 1, 0, 0, 0, 5031, 433, 1, 0, 0, 0, 5032, 5049, 5, 138, 0, 0, 5033, 5034, 5, 211, 0, 0, 5034, 5050, 3, 382, 191, 0, 5035, 5036, 5, 296, 0, 0, 5036, 5050, 3, 378, 189, 0, 5037, 5038, 5, 442, 0, 0, 5038, 5050, 3, 374, 187, 0, 5039, 5040, 5, 357, 0, 0, 5040, 5041, 3, 818, 409, 0, 5041, 5042, 5, 80, 0, 0, 5042, 5043, 3, 780, 390, 0, 5043, 5050, 1, 0, 0, 0, 5044, 5045, 5, 259, 0, 0, 5045, 5046, 5, 376, 0, 0, 5046, 5050, 3, 778, 389, 0, 5047, 5048, 5, 226, 0, 0, 5048, 5050, 3, 780, 390, 0, 5049, 5033, 1, 0, 0, 0, 5049, 5035, 1, 0, 0, 0, 5049, 5037, 1, 0, 0, 0, 5049, 5039, 1, 0, 0, 0, 5049, 5044, 1, 0, 0, 0, 5049, 5047, 1, 0, 0, 0, 5050, 5052, 1, 0, 0, 0, 5051, 5053, 5, 269, 0, 0, 5052, 5051, 1, 0, 0, 0, 5052, 5053, 1, 0, 0, 0, 5053, 5054, 1, 0, 0, 0, 5054, 5055, 5, 462, 0, 0, 5055, 5056, 5, 80, 0, 0, 5056, 5057, 5, 204, 0, 0, 5057, 5058, 3, 818, 409, 0, 5058, 435, 1, 0, 0, 0, 5059, 5098, 5, 138, 0, 0, 5060, 5061, 5, 136, 0, 0, 5061, 5099, 3, 394, 197, 0, 5062, 5063, 5, 204, 0, 0, 5063, 5099, 3, 818, 409, 0, 5064, 5065, 5, 211, 0, 0, 5065, 5099, 3, 382, 191, 0, 5066, 5067, 5, 278, 0, 0, 5067, 5099, 3, 416, 208, 0, 5068, 5069, 5, 278, 0, 0, 5069, 5070, 7, 31, 0, 0, 5070, 5071, 3, 316, 158, 0, 5071, 5072, 3, 170, 85, 0, 5072, 5099, 1, 0, 0, 0, 5073, 5074, 5, 296, 0, 0, 5074, 5099, 3, 378, 189, 0, 5075, 5076, 5, 442, 0, 0, 5076, 5099, 3, 374, 187, 0, 5077, 5079, 5, 328, 0, 0, 5078, 5080, 3, 422, 211, 0, 5079, 5078, 1, 0, 0, 0, 5079, 5080, 1, 0, 0, 0, 5080, 5081, 1, 0, 0, 0, 5081, 5099, 3, 780, 390, 0, 5082, 5084, 5, 259, 0, 0, 5083, 5082, 1, 0, 0, 0, 5083, 5084, 1, 0, 0, 0, 5084, 5085, 1, 0, 0, 0, 5085, 5087, 5, 376, 0, 0, 5086, 5088, 3, 422, 211, 0, 5087, 5086, 1, 0, 0, 0, 5087, 5088, 1, 0, 0, 0, 5088, 5089, 1, 0, 0, 0, 5089, 5099, 3, 778, 389, 0, 5090, 5092, 5, 63, 0, 0, 5091, 5090, 1, 0, 0, 0, 5091, 5092, 1, 0, 0, 0, 5092, 5093, 1, 0, 0, 0, 5093, 5095, 5, 92, 0, 0, 5094, 5096, 3, 422, 211, 0, 5095, 5094, 1, 0, 0, 0, 5095, 5096, 1, 0, 0, 0, 5096, 5097, 1, 0, 0, 0, 5097, 5099, 3, 624, 312, 0, 5098, 5060, 1, 0, 0, 0, 5098, 5062, 1, 0, 0, 0, 5098, 5064, 1, 0, 0, 0, 5098, 5066, 1, 0, 0, 0, 5098, 5068, 1, 0, 0, 0, 5098, 5073, 1, 0, 0, 0, 5098, 5075, 1, 0, 0, 0, 5098, 5077, 1, 0, 0, 0, 5098, 5083, 1, 0, 0, 0, 5098, 5091, 1, 0, 0, 0, 5099, 5100, 1, 0, 0, 0, 5100, 5101, 5, 333, 0, 0, 5101, 5102, 5, 323, 0, 0, 5102, 5103, 3, 790, 395, 0, 5103, 5121, 1, 0, 0, 0, 5104, 5113, 5, 138, 0, 0, 5105, 5106, 5, 355, 0, 0, 5106, 5107, 5, 325, 0, 0, 5107, 5114, 7, 41, 0, 0, 5108, 5114, 5, 108, 0, 0, 5109, 5114, 5, 168, 0, 0, 5110, 5114, 5, 189, 0, 0, 5111, 5114, 5, 342, 0, 0, 5112, 5114, 5, 360, 0, 0, 5113, 5105, 1, 0, 0, 0, 5113, 5108, 1, 0, 0, 0, 5113, 5109, 1, 0, 0, 0, 5113, 5110, 1, 0, 0, 0, 5113, 5111, 1, 0, 0, 0, 5113, 5112, 1, 0, 0, 0, 5114, 5115, 1, 0, 0, 0, 5115, 5116, 3, 316, 158, 0, 5116, 5117, 5, 333, 0, 0, 5117, 5118, 5, 323, 0, 0, 5118, 5119, 3, 790, 395, 0, 5119, 5121, 1, 0, 0, 0, 5120, 5059, 1, 0, 0, 0, 5120, 5104, 1, 0, 0, 0, 5121, 437, 1, 0, 0, 0, 5122, 5123, 5, 138, 0, 0, 5123, 5124, 5, 278, 0, 0, 5124, 5125, 3, 416, 208, 0, 5125, 5126, 5, 333, 0, 0, 5126, 5127, 3, 440, 220, 0, 5127, 439, 1, 0, 0, 0, 5128, 5129, 5, 2, 0, 0, 5129, 5134, 3, 442, 221, 0, 5130, 5131, 5, 6, 0, 0, 5131, 5133, 3, 442, 221, 0, 5132, 5130, 1, 0, 0, 0, 5133, 5136, 1, 0, 0, 0, 5134, 5132, 1, 0, 0, 0, 5134, 5135, 1, 0, 0, 0, 5135, 5137, 1, 0, 0, 0, 5136, 5134, 1, 0, 0, 0, 5137, 5138, 5, 3, 0, 0, 5138, 441, 1, 0, 0, 0, 5139, 5140, 3, 824, 412, 0, 5140, 5147, 5, 10, 0, 0, 5141, 5148, 5, 407, 0, 0, 5142, 5148, 3, 388, 194, 0, 5143, 5148, 3, 834, 417, 0, 5144, 5148, 3, 726, 363, 0, 5145, 5148, 3, 202, 101, 0, 5146, 5148, 3, 808, 404, 0, 5147, 5141, 1, 0, 0, 0, 5147, 5142, 1, 0, 0, 0, 5147, 5143, 1, 0, 0, 0, 5147, 5144, 1, 0, 0, 0, 5147, 5145, 1, 0, 0, 0, 5147, 5146, 1, 0, 0, 0, 5148, 443, 1, 0, 0, 0, 5149, 5150, 5, 138, 0, 0, 5150, 5151, 5, 360, 0, 0, 5151, 5152, 3, 316, 158, 0, 5152, 5153, 5, 333, 0, 0, 5153, 5154, 3, 440, 220, 0, 5154, 445, 1, 0, 0, 0, 5155, 5156, 5, 138, 0, 0, 5156, 5157, 5, 278, 0, 0, 5157, 5158, 7, 31, 0, 0, 5158, 5159, 3, 316, 158, 0, 5159, 5160, 3, 170, 85, 0, 5160, 5161, 5, 282, 0, 0, 5161, 5162, 5, 94, 0, 0, 5162, 5163, 3, 814, 407, 0, 5163, 5230, 1, 0, 0, 0, 5164, 5191, 5, 138, 0, 0, 5165, 5166, 5, 136, 0, 0, 5166, 5192, 3, 394, 197, 0, 5167, 5168, 5, 175, 0, 0, 5168, 5192, 3, 788, 394, 0, 5169, 5170, 5, 211, 0, 0, 5170, 5192, 3, 382, 191, 0, 5171, 5173, 5, 295, 0, 0, 5172, 5171, 1, 0, 0, 0, 5172, 5173, 1, 0, 0, 0, 5173, 5174, 1, 0, 0, 0, 5174, 5175, 5, 247, 0, 0, 5175, 5192, 3, 818, 409, 0, 5176, 5177, 5, 248, 0, 0, 5177, 5178, 5, 274, 0, 0, 5178, 5192, 3, 202, 101, 0, 5179, 5180, 5, 248, 0, 0, 5180, 5181, 5, 274, 0, 0, 5181, 5192, 3, 202, 101, 0, 5182, 5183, 5, 278, 0, 0, 5183, 5192, 3, 416, 208, 0, 5184, 5185, 5, 296, 0, 0, 5185, 5192, 3, 378, 189, 0, 5186, 5187, 5, 442, 0, 0, 5187, 5192, 3, 374, 187, 0, 5188, 5189, 5, 323, 0, 0, 5189, 5192, 3, 790, 395, 0, 5190, 5192, 3, 176, 88, 0, 5191, 5165, 1, 0, 0, 0, 5191, 5167, 1, 0, 0, 0, 5191, 5169, 1, 0, 0, 0, 5191, 5172, 1, 0, 0, 0, 5191, 5176, 1, 0, 0, 0, 5191, 5179, 1, 0, 0, 0, 5191, 5182, 1, 0, 0, 0, 5191, 5184, 1, 0, 0, 0, 5191, 5186, 1, 0, 0, 0, 5191, 5188, 1, 0, 0, 0, 5191, 5190, 1, 0, 0, 0, 5192, 5193, 1, 0, 0, 0, 5193, 5194, 5, 282, 0, 0, 5194, 5195, 5, 94, 0, 0, 5195, 5196, 3, 814, 407, 0, 5196, 5230, 1, 0, 0, 0, 5197, 5206, 5, 138, 0, 0, 5198, 5199, 5, 355, 0, 0, 5199, 5200, 5, 325, 0, 0, 5200, 5207, 7, 63, 0, 0, 5201, 5207, 5, 108, 0, 0, 5202, 5207, 5, 168, 0, 0, 5203, 5207, 5, 189, 0, 0, 5204, 5207, 5, 360, 0, 0, 5205, 5207, 5, 342, 0, 0, 5206, 5198, 1, 0, 0, 0, 5206, 5201, 1, 0, 0, 0, 5206, 5202, 1, 0, 0, 0, 5206, 5203, 1, 0, 0, 0, 5206, 5204, 1, 0, 0, 0, 5206, 5205, 1, 0, 0, 0, 5207, 5208, 1, 0, 0, 0, 5208, 5209, 3, 316, 158, 0, 5209, 5210, 5, 282, 0, 0, 5210, 5211, 5, 94, 0, 0, 5211, 5212, 3, 814, 407, 0, 5212, 5230, 1, 0, 0, 0, 5213, 5222, 5, 138, 0, 0, 5214, 5223, 5, 331, 0, 0, 5215, 5216, 5, 63, 0, 0, 5216, 5217, 5, 174, 0, 0, 5217, 5223, 5, 381, 0, 0, 5218, 5219, 5, 198, 0, 0, 5219, 5223, 5, 357, 0, 0, 5220, 5223, 5, 452, 0, 0, 5221, 5223, 5, 451, 0, 0, 5222, 5214, 1, 0, 0, 0, 5222, 5215, 1, 0, 0, 0, 5222, 5218, 1, 0, 0, 0, 5222, 5220, 1, 0, 0, 0, 5222, 5221, 1, 0, 0, 0, 5223, 5224, 1, 0, 0, 0, 5224, 5225, 3, 818, 409, 0, 5225, 5226, 5, 282, 0, 0, 5226, 5227, 5, 94, 0, 0, 5227, 5228, 3, 814, 407, 0, 5228, 5230, 1, 0, 0, 0, 5229, 5155, 1, 0, 0, 0, 5229, 5164, 1, 0, 0, 0, 5229, 5197, 1, 0, 0, 0, 5229, 5213, 1, 0, 0, 0, 5230, 447, 1, 0, 0, 0, 5231, 5232, 5, 46, 0, 0, 5232, 5233, 5, 452, 0, 0, 5233, 5240, 3, 818, 409, 0, 5234, 5235, 5, 62, 0, 0, 5235, 5236, 5, 92, 0, 0, 5236, 5241, 3, 628, 314, 0, 5237, 5238, 5, 62, 0, 0, 5238, 5239, 5, 30, 0, 0, 5239, 5241, 5, 350, 0, 0, 5240, 5234, 1, 0, 0, 0, 5240, 5237, 1, 0, 0, 0, 5240, 5241, 1, 0, 0, 0, 5241, 5243, 1, 0, 0, 0, 5242, 5244, 3, 400, 200, 0, 5243, 5242, 1, 0, 0, 0, 5243, 5244, 1, 0, 0, 0, 5244, 449, 1, 0, 0, 0, 5245, 5246, 5, 138, 0, 0, 5246, 5247, 5, 452, 0, 0, 5247, 5265, 3, 818, 409, 0, 5248, 5249, 5, 282, 0, 0, 5249, 5250, 5, 94, 0, 0, 5250, 5266, 3, 814, 407, 0, 5251, 5252, 5, 333, 0, 0, 5252, 5266, 3, 284, 142, 0, 5253, 5254, 5, 309, 0, 0, 5254, 5255, 5, 94, 0, 0, 5255, 5266, 3, 818, 409, 0, 5256, 5257, 7, 34, 0, 0, 5257, 5262, 3, 626, 313, 0, 5258, 5259, 5, 6, 0, 0, 5259, 5261, 3, 626, 313, 0, 5260, 5258, 1, 0, 0, 0, 5261, 5264, 1, 0, 0, 0, 5262, 5260, 1, 0, 0, 0, 5262, 5263, 1, 0, 0, 0, 5263, 5266, 1, 0, 0, 0, 5264, 5262, 1, 0, 0, 0, 5265, 5248, 1, 0, 0, 0, 5265, 5251, 1, 0, 0, 0, 5265, 5253, 1, 0, 0, 0, 5265, 5256, 1, 0, 0, 0, 5266, 451, 1, 0, 0, 0, 5267, 5268, 5, 46, 0, 0, 5268, 5269, 5, 451, 0, 0, 5269, 5270, 3, 818, 409, 0, 5270, 5271, 5, 164, 0, 0, 5271, 5272, 3, 808, 404, 0, 5272, 5273, 5, 452, 0, 0, 5273, 5278, 3, 824, 412, 0, 5274, 5275, 5, 6, 0, 0, 5275, 5277, 3, 824, 412, 0, 5276, 5274, 1, 0, 0, 0, 5277, 5280, 1, 0, 0, 0, 5278, 5276, 1, 0, 0, 0, 5278, 5279, 1, 0, 0, 0, 5279, 5282, 1, 0, 0, 0, 5280, 5278, 1, 0, 0, 0, 5281, 5283, 3, 400, 200, 0, 5282, 5281, 1, 0, 0, 0, 5282, 5283, 1, 0, 0, 0, 5283, 453, 1, 0, 0, 0, 5284, 5285, 5, 138, 0, 0, 5285, 5286, 5, 451, 0, 0, 5286, 5287, 3, 818, 409, 0, 5287, 5288, 5, 333, 0, 0, 5288, 5289, 3, 284, 142, 0, 5289, 5341, 1, 0, 0, 0, 5290, 5291, 5, 138, 0, 0, 5291, 5292, 5, 451, 0, 0, 5292, 5293, 3, 818, 409, 0, 5293, 5294, 5, 164, 0, 0, 5294, 5295, 3, 808, 404, 0, 5295, 5341, 1, 0, 0, 0, 5296, 5297, 5, 138, 0, 0, 5297, 5298, 5, 451, 0, 0, 5298, 5299, 3, 818, 409, 0, 5299, 5300, 5, 305, 0, 0, 5300, 5302, 5, 452, 0, 0, 5301, 5303, 3, 400, 200, 0, 5302, 5301, 1, 0, 0, 0, 5302, 5303, 1, 0, 0, 0, 5303, 5341, 1, 0, 0, 0, 5304, 5305, 5, 138, 0, 0, 5305, 5306, 5, 451, 0, 0, 5306, 5307, 3, 818, 409, 0, 5307, 5308, 7, 34, 0, 0, 5308, 5309, 5, 452, 0, 0, 5309, 5314, 3, 824, 412, 0, 5310, 5311, 5, 6, 0, 0, 5311, 5313, 3, 824, 412, 0, 5312, 5310, 1, 0, 0, 0, 5313, 5316, 1, 0, 0, 0, 5314, 5312, 1, 0, 0, 0, 5314, 5315, 1, 0, 0, 0, 5315, 5318, 1, 0, 0, 0, 5316, 5314, 1, 0, 0, 0, 5317, 5319, 3, 400, 200, 0, 5318, 5317, 1, 0, 0, 0, 5318, 5319, 1, 0, 0, 0, 5319, 5341, 1, 0, 0, 0, 5320, 5321, 5, 138, 0, 0, 5321, 5322, 5, 451, 0, 0, 5322, 5323, 3, 818, 409, 0, 5323, 5324, 7, 64, 0, 0, 5324, 5341, 1, 0, 0, 0, 5325, 5326, 5, 138, 0, 0, 5326, 5327, 5, 451, 0, 0, 5327, 5328, 3, 818, 409, 0, 5328, 5329, 5, 465, 0, 0, 5329, 5330, 5, 2, 0, 0, 5330, 5331, 3, 290, 145, 0, 5331, 5332, 5, 3, 0, 0, 5332, 5341, 1, 0, 0, 0, 5333, 5334, 5, 138, 0, 0, 5334, 5335, 5, 451, 0, 0, 5335, 5336, 3, 818, 409, 0, 5336, 5337, 5, 282, 0, 0, 5337, 5338, 5, 94, 0, 0, 5338, 5339, 3, 814, 407, 0, 5339, 5341, 1, 0, 0, 0, 5340, 5284, 1, 0, 0, 0, 5340, 5290, 1, 0, 0, 0, 5340, 5296, 1, 0, 0, 0, 5340, 5304, 1, 0, 0, 0, 5340, 5320, 1, 0, 0, 0, 5340, 5325, 1, 0, 0, 0, 5340, 5333, 1, 0, 0, 0, 5341, 455, 1, 0, 0, 0, 5342, 5344, 5, 46, 0, 0, 5343, 5345, 3, 366, 183, 0, 5344, 5343, 1, 0, 0, 0, 5344, 5345, 1, 0, 0, 0, 5345, 5346, 1, 0, 0, 0, 5346, 5347, 5, 321, 0, 0, 5347, 5348, 3, 818, 409, 0, 5348, 5349, 5, 36, 0, 0, 5349, 5350, 5, 80, 0, 0, 5350, 5351, 7, 65, 0, 0, 5351, 5352, 5, 94, 0, 0, 5352, 5354, 3, 780, 390, 0, 5353, 5355, 3, 638, 319, 0, 5354, 5353, 1, 0, 0, 0, 5354, 5355, 1, 0, 0, 0, 5355, 5356, 1, 0, 0, 0, 5356, 5358, 5, 57, 0, 0, 5357, 5359, 7, 66, 0, 0, 5358, 5357, 1, 0, 0, 0, 5358, 5359, 1, 0, 0, 0, 5359, 5376, 1, 0, 0, 0, 5360, 5377, 5, 270, 0, 0, 5361, 5377, 3, 458, 229, 0, 5362, 5364, 5, 2, 0, 0, 5363, 5365, 3, 458, 229, 0, 5364, 5363, 1, 0, 0, 0, 5364, 5365, 1, 0, 0, 0, 5365, 5372, 1, 0, 0, 0, 5366, 5368, 5, 7, 0, 0, 5367, 5369, 3, 458, 229, 0, 5368, 5367, 1, 0, 0, 0, 5368, 5369, 1, 0, 0, 0, 5369, 5371, 1, 0, 0, 0, 5370, 5366, 1, 0, 0, 0, 5371, 5374, 1, 0, 0, 0, 5372, 5370, 1, 0, 0, 0, 5372, 5373, 1, 0, 0, 0, 5373, 5375, 1, 0, 0, 0, 5374, 5372, 1, 0, 0, 0, 5375, 5377, 5, 3, 0, 0, 5376, 5360, 1, 0, 0, 0, 5376, 5361, 1, 0, 0, 0, 5376, 5362, 1, 0, 0, 0, 5377, 457, 1, 0, 0, 0, 5378, 5384, 3, 560, 280, 0, 5379, 5384, 3, 538, 269, 0, 5380, 5384, 3, 552, 276, 0, 5381, 5384, 3, 548, 274, 0, 5382, 5384, 3, 460, 230, 0, 5383, 5378, 1, 0, 0, 0, 5383, 5379, 1, 0, 0, 0, 5383, 5380, 1, 0, 0, 0, 5383, 5381, 1, 0, 0, 0, 5383, 5382, 1, 0, 0, 0, 5384, 459, 1, 0, 0, 0, 5385, 5386, 5, 271, 0, 0, 5386, 5388, 3, 818, 409, 0, 5387, 5389, 3, 462, 231, 0, 5388, 5387, 1, 0, 0, 0, 5388, 5389, 1, 0, 0, 0, 5389, 461, 1, 0, 0, 0, 5390, 5391, 5, 6, 0, 0, 5391, 5392, 3, 808, 404, 0, 5392, 463, 1, 0, 0, 0, 5393, 5394, 5, 252, 0, 0, 5394, 5395, 3, 818, 409, 0, 5395, 465, 1, 0, 0, 0, 5396, 5399, 5, 366, 0, 0, 5397, 5400, 3, 818, 409, 0, 5398, 5400, 5, 9, 0, 0, 5399, 5397, 1, 0, 0, 0, 5399, 5398, 1, 0, 0, 0, 5400, 467, 1, 0, 0, 0, 5401, 5403, 5, 146, 0, 0, 5402, 5404, 3, 470, 235, 0, 5403, 5402, 1, 0, 0, 0, 5403, 5404, 1, 0, 0, 0, 5404, 5406, 1, 0, 0, 0, 5405, 5407, 3, 474, 237, 0, 5406, 5405, 1, 0, 0, 0, 5406, 5407, 1, 0, 0, 0, 5407, 5447, 1, 0, 0, 0, 5408, 5409, 5, 340, 0, 0, 5409, 5411, 5, 356, 0, 0, 5410, 5412, 3, 474, 237, 0, 5411, 5410, 1, 0, 0, 0, 5411, 5412, 1, 0, 0, 0, 5412, 5447, 1, 0, 0, 0, 5413, 5414, 5, 322, 0, 0, 5414, 5447, 3, 818, 409, 0, 5415, 5417, 5, 308, 0, 0, 5416, 5418, 5, 322, 0, 0, 5417, 5416, 1, 0, 0, 0, 5417, 5418, 1, 0, 0, 0, 5418, 5419, 1, 0, 0, 0, 5419, 5447, 3, 818, 409, 0, 5420, 5421, 5, 290, 0, 0, 5421, 5422, 5, 356, 0, 0, 5422, 5447, 3, 808, 404, 0, 5423, 5424, 7, 67, 0, 0, 5424, 5425, 5, 291, 0, 0, 5425, 5447, 3, 808, 404, 0, 5426, 5428, 7, 68, 0, 0, 5427, 5429, 3, 470, 235, 0, 5428, 5427, 1, 0, 0, 0, 5428, 5429, 1, 0, 0, 0, 5429, 5435, 1, 0, 0, 0, 5430, 5432, 5, 33, 0, 0, 5431, 5433, 5, 269, 0, 0, 5432, 5431, 1, 0, 0, 0, 5432, 5433, 1, 0, 0, 0, 5433, 5434, 1, 0, 0, 0, 5434, 5436, 5, 153, 0, 0, 5435, 5430, 1, 0, 0, 0, 5435, 5436, 1, 0, 0, 0, 5436, 5447, 1, 0, 0, 0, 5437, 5439, 5, 319, 0, 0, 5438, 5440, 3, 470, 235, 0, 5439, 5438, 1, 0, 0, 0, 5439, 5440, 1, 0, 0, 0, 5440, 5441, 1, 0, 0, 0, 5441, 5443, 5, 94, 0, 0, 5442, 5444, 5, 322, 0, 0, 5443, 5442, 1, 0, 0, 0, 5443, 5444, 1, 0, 0, 0, 5444, 5445, 1, 0, 0, 0, 5445, 5447, 3, 818, 409, 0, 5446, 5401, 1, 0, 0, 0, 5446, 5408, 1, 0, 0, 0, 5446, 5413, 1, 0, 0, 0, 5446, 5415, 1, 0, 0, 0, 5446, 5420, 1, 0, 0, 0, 5446, 5423, 1, 0, 0, 0, 5446, 5426, 1, 0, 0, 0, 5446, 5437, 1, 0, 0, 0, 5447, 469, 1, 0, 0, 0, 5448, 5449, 7, 69, 0, 0, 5449, 471, 1, 0, 0, 0, 5450, 5451, 5, 244, 0, 0, 5451, 5452, 5, 251, 0, 0, 5452, 5460, 3, 50, 25, 0, 5453, 5454, 5, 300, 0, 0, 5454, 5460, 7, 70, 0, 0, 5455, 5457, 5, 77, 0, 0, 5456, 5455, 1, 0, 0, 0, 5456, 5457, 1, 0, 0, 0, 5457, 5458, 1, 0, 0, 0, 5458, 5460, 5, 54, 0, 0, 5459, 5450, 1, 0, 0, 0, 5459, 5453, 1, 0, 0, 0, 5459, 5456, 1, 0, 0, 0, 5460, 473, 1, 0, 0, 0, 5461, 5468, 3, 472, 236, 0, 5462, 5464, 5, 6, 0, 0, 5463, 5462, 1, 0, 0, 0, 5463, 5464, 1, 0, 0, 0, 5464, 5465, 1, 0, 0, 0, 5465, 5467, 3, 472, 236, 0, 5466, 5463, 1, 0, 0, 0, 5467, 5470, 1, 0, 0, 0, 5468, 5466, 1, 0, 0, 0, 5468, 5469, 1, 0, 0, 0, 5469, 475, 1, 0, 0, 0, 5470, 5468, 1, 0, 0, 0, 5471, 5474, 5, 46, 0, 0, 5472, 5473, 5, 82, 0, 0, 5473, 5475, 5, 311, 0, 0, 5474, 5472, 1, 0, 0, 0, 5474, 5475, 1, 0, 0, 0, 5475, 5477, 1, 0, 0, 0, 5476, 5478, 3, 122, 61, 0, 5477, 5476, 1, 0, 0, 0, 5477, 5478, 1, 0, 0, 0, 5478, 5494, 1, 0, 0, 0, 5479, 5480, 5, 376, 0, 0, 5480, 5482, 3, 776, 388, 0, 5481, 5483, 3, 146, 73, 0, 5482, 5481, 1, 0, 0, 0, 5482, 5483, 1, 0, 0, 0, 5483, 5485, 1, 0, 0, 0, 5484, 5486, 3, 102, 51, 0, 5485, 5484, 1, 0, 0, 0, 5485, 5486, 1, 0, 0, 0, 5486, 5495, 1, 0, 0, 0, 5487, 5488, 5, 303, 0, 0, 5488, 5489, 5, 376, 0, 0, 5489, 5490, 3, 776, 388, 0, 5490, 5492, 3, 144, 72, 0, 5491, 5493, 3, 102, 51, 0, 5492, 5491, 1, 0, 0, 0, 5492, 5493, 1, 0, 0, 0, 5493, 5495, 1, 0, 0, 0, 5494, 5479, 1, 0, 0, 0, 5494, 5487, 1, 0, 0, 0, 5495, 5496, 1, 0, 0, 0, 5496, 5497, 5, 36, 0, 0, 5497, 5504, 3, 560, 280, 0, 5498, 5500, 5, 105, 0, 0, 5499, 5501, 7, 71, 0, 0, 5500, 5499, 1, 0, 0, 0, 5500, 5501, 1, 0, 0, 0, 5501, 5502, 1, 0, 0, 0, 5502, 5503, 5, 42, 0, 0, 5503, 5505, 5, 279, 0, 0, 5504, 5498, 1, 0, 0, 0, 5504, 5505, 1, 0, 0, 0, 5505, 477, 1, 0, 0, 0, 5506, 5507, 5, 253, 0, 0, 5507, 5508, 3, 808, 404, 0, 5508, 479, 1, 0, 0, 0, 5509, 5510, 5, 46, 0, 0, 5510, 5511, 5, 175, 0, 0, 5511, 5513, 3, 786, 393, 0, 5512, 5514, 5, 105, 0, 0, 5513, 5512, 1, 0, 0, 0, 5513, 5514, 1, 0, 0, 0, 5514, 5520, 1, 0, 0, 0, 5515, 5517, 3, 482, 241, 0, 5516, 5515, 1, 0, 0, 0, 5517, 5518, 1, 0, 0, 0, 5518, 5516, 1, 0, 0, 0, 5518, 5519, 1, 0, 0, 0, 5519, 5521, 1, 0, 0, 0, 5520, 5516, 1, 0, 0, 0, 5520, 5521, 1, 0, 0, 0, 5521, 481, 1, 0, 0, 0, 5522, 5523, 5, 164, 0, 0, 5523, 5531, 5, 74, 0, 0, 5524, 5531, 5, 194, 0, 0, 5525, 5531, 5, 255, 0, 0, 5526, 5531, 5, 282, 0, 0, 5527, 5531, 5, 351, 0, 0, 5528, 5531, 5, 353, 0, 0, 5529, 5531, 3, 826, 413, 0, 5530, 5522, 1, 0, 0, 0, 5530, 5524, 1, 0, 0, 0, 5530, 5525, 1, 0, 0, 0, 5530, 5526, 1, 0, 0, 0, 5530, 5527, 1, 0, 0, 0, 5530, 5528, 1, 0, 0, 0, 5530, 5529, 1, 0, 0, 0, 5531, 5533, 1, 0, 0, 0, 5532, 5534, 5, 10, 0, 0, 5533, 5532, 1, 0, 0, 0, 5533, 5534, 1, 0, 0, 0, 5534, 5538, 1, 0, 0, 0, 5535, 5539, 3, 812, 406, 0, 5536, 5539, 3, 54, 27, 0, 5537, 5539, 5, 53, 0, 0, 5538, 5535, 1, 0, 0, 0, 5538, 5536, 1, 0, 0, 0, 5538, 5537, 1, 0, 0, 0, 5539, 483, 1, 0, 0, 0, 5540, 5541, 5, 138, 0, 0, 5541, 5542, 5, 175, 0, 0, 5542, 5558, 3, 788, 394, 0, 5543, 5544, 5, 333, 0, 0, 5544, 5545, 5, 351, 0, 0, 5545, 5547, 3, 768, 384, 0, 5546, 5543, 1, 0, 0, 0, 5546, 5547, 1, 0, 0, 0, 5547, 5559, 1, 0, 0, 0, 5548, 5550, 5, 105, 0, 0, 5549, 5548, 1, 0, 0, 0, 5549, 5550, 1, 0, 0, 0, 5550, 5552, 1, 0, 0, 0, 5551, 5553, 3, 482, 241, 0, 5552, 5551, 1, 0, 0, 0, 5553, 5554, 1, 0, 0, 0, 5554, 5552, 1, 0, 0, 0, 5554, 5555, 1, 0, 0, 0, 5555, 5557, 1, 0, 0, 0, 5556, 5549, 1, 0, 0, 0, 5556, 5557, 1, 0, 0, 0, 5557, 5559, 1, 0, 0, 0, 5558, 5546, 1, 0, 0, 0, 5558, 5556, 1, 0, 0, 0, 5559, 485, 1, 0, 0, 0, 5560, 5561, 5, 138, 0, 0, 5561, 5562, 5, 175, 0, 0, 5562, 5564, 3, 788, 394, 0, 5563, 5565, 3, 64, 32, 0, 5564, 5563, 1, 0, 0, 0, 5564, 5565, 1, 0, 0, 0, 5565, 487, 1, 0, 0, 0, 5566, 5567, 5, 138, 0, 0, 5567, 5568, 5, 108, 0, 0, 5568, 5569, 3, 316, 158, 0, 5569, 5570, 5, 305, 0, 0, 5570, 5571, 5, 375, 0, 0, 5571, 489, 1, 0, 0, 0, 5572, 5573, 5, 138, 0, 0, 5573, 5574, 5, 349, 0, 0, 5574, 5575, 7, 16, 0, 0, 5575, 5576, 3, 40, 20, 0, 5576, 491, 1, 0, 0, 0, 5577, 5578, 5, 46, 0, 0, 5578, 5579, 5, 189, 0, 0, 5579, 5581, 3, 316, 158, 0, 5580, 5582, 5, 36, 0, 0, 5581, 5580, 1, 0, 0, 0, 5581, 5582, 1, 0, 0, 0, 5582, 5583, 1, 0, 0, 0, 5583, 5587, 3, 652, 326, 0, 5584, 5586, 3, 134, 67, 0, 5585, 5584, 1, 0, 0, 0, 5586, 5589, 1, 0, 0, 0, 5587, 5585, 1, 0, 0, 0, 5587, 5588, 1, 0, 0, 0, 5588, 493, 1, 0, 0, 0, 5589, 5587, 1, 0, 0, 0, 5590, 5591, 5, 138, 0, 0, 5591, 5592, 5, 189, 0, 0, 5592, 5615, 3, 316, 158, 0, 5593, 5616, 3, 94, 47, 0, 5594, 5595, 7, 15, 0, 0, 5595, 5596, 5, 77, 0, 0, 5596, 5616, 5, 78, 0, 0, 5597, 5600, 5, 133, 0, 0, 5598, 5599, 5, 45, 0, 0, 5599, 5601, 3, 818, 409, 0, 5600, 5598, 1, 0, 0, 0, 5600, 5601, 1, 0, 0, 0, 5601, 5602, 1, 0, 0, 0, 5602, 5616, 3, 142, 71, 0, 5603, 5604, 5, 191, 0, 0, 5604, 5606, 5, 45, 0, 0, 5605, 5607, 3, 422, 211, 0, 5606, 5605, 1, 0, 0, 0, 5606, 5607, 1, 0, 0, 0, 5607, 5608, 1, 0, 0, 0, 5608, 5610, 3, 818, 409, 0, 5609, 5611, 3, 96, 48, 0, 5610, 5609, 1, 0, 0, 0, 5610, 5611, 1, 0, 0, 0, 5611, 5616, 1, 0, 0, 0, 5612, 5613, 5, 372, 0, 0, 5613, 5614, 5, 45, 0, 0, 5614, 5616, 3, 818, 409, 0, 5615, 5593, 1, 0, 0, 0, 5615, 5594, 1, 0, 0, 0, 5615, 5597, 1, 0, 0, 0, 5615, 5603, 1, 0, 0, 0, 5615, 5612, 1, 0, 0, 0, 5616, 495, 1, 0, 0, 0, 5617, 5618, 5, 138, 0, 0, 5618, 5619, 5, 355, 0, 0, 5619, 5620, 5, 325, 0, 0, 5620, 5621, 5, 185, 0, 0, 5621, 5622, 3, 316, 158, 0, 5622, 5623, 3, 284, 142, 0, 5623, 497, 1, 0, 0, 0, 5624, 5625, 5, 138, 0, 0, 5625, 5626, 5, 355, 0, 0, 5626, 5627, 5, 325, 0, 0, 5627, 5628, 5, 163, 0, 0, 5628, 5629, 3, 316, 158, 0, 5629, 5630, 7, 72, 0, 0, 5630, 5631, 5, 257, 0, 0, 5631, 5632, 5, 62, 0, 0, 5632, 5633, 3, 784, 392, 0, 5633, 5634, 5, 105, 0, 0, 5634, 5635, 3, 314, 157, 0, 5635, 5666, 1, 0, 0, 0, 5636, 5637, 5, 138, 0, 0, 5637, 5638, 5, 355, 0, 0, 5638, 5639, 5, 325, 0, 0, 5639, 5640, 5, 163, 0, 0, 5640, 5641, 3, 316, 158, 0, 5641, 5642, 5, 138, 0, 0, 5642, 5645, 5, 257, 0, 0, 5643, 5644, 5, 62, 0, 0, 5644, 5646, 3, 784, 392, 0, 5645, 5643, 1, 0, 0, 0, 5645, 5646, 1, 0, 0, 0, 5646, 5647, 1, 0, 0, 0, 5647, 5648, 5, 311, 0, 0, 5648, 5649, 3, 316, 158, 0, 5649, 5650, 5, 105, 0, 0, 5650, 5651, 3, 316, 158, 0, 5651, 5666, 1, 0, 0, 0, 5652, 5653, 5, 138, 0, 0, 5653, 5654, 5, 355, 0, 0, 5654, 5655, 5, 325, 0, 0, 5655, 5656, 5, 163, 0, 0, 5656, 5657, 3, 316, 158, 0, 5657, 5658, 5, 191, 0, 0, 5658, 5660, 5, 257, 0, 0, 5659, 5661, 3, 422, 211, 0, 5660, 5659, 1, 0, 0, 0, 5660, 5661, 1, 0, 0, 0, 5661, 5662, 1, 0, 0, 0, 5662, 5663, 5, 62, 0, 0, 5663, 5664, 3, 784, 392, 0, 5664, 5666, 1, 0, 0, 0, 5665, 5624, 1, 0, 0, 0, 5665, 5636, 1, 0, 0, 0, 5665, 5652, 1, 0, 0, 0, 5666, 499, 1, 0, 0, 0, 5667, 5669, 5, 46, 0, 0, 5668, 5670, 5, 53, 0, 0, 5669, 5668, 1, 0, 0, 0, 5669, 5670, 1, 0, 0, 0, 5670, 5671, 1, 0, 0, 0, 5671, 5672, 5, 168, 0, 0, 5672, 5673, 3, 316, 158, 0, 5673, 5674, 5, 62, 0, 0, 5674, 5675, 3, 808, 404, 0, 5675, 5676, 5, 94, 0, 0, 5676, 5677, 3, 808, 404, 0, 5677, 5678, 5, 64, 0, 0, 5678, 5679, 3, 316, 158, 0, 5679, 501, 1, 0, 0, 0, 5680, 5682, 5, 158, 0, 0, 5681, 5683, 3, 514, 257, 0, 5682, 5681, 1, 0, 0, 0, 5682, 5683, 1, 0, 0, 0, 5683, 5688, 1, 0, 0, 0, 5684, 5686, 3, 774, 387, 0, 5685, 5687, 3, 170, 85, 0, 5686, 5685, 1, 0, 0, 0, 5686, 5687, 1, 0, 0, 0, 5687, 5689, 1, 0, 0, 0, 5688, 5684, 1, 0, 0, 0, 5688, 5689, 1, 0, 0, 0, 5689, 5706, 1, 0, 0, 0, 5690, 5691, 5, 158, 0, 0, 5691, 5692, 5, 2, 0, 0, 5692, 5697, 3, 514, 257, 0, 5693, 5694, 5, 6, 0, 0, 5694, 5696, 3, 514, 257, 0, 5695, 5693, 1, 0, 0, 0, 5696, 5699, 1, 0, 0, 0, 5697, 5695, 1, 0, 0, 0, 5697, 5698, 1, 0, 0, 0, 5698, 5700, 1, 0, 0, 0, 5699, 5697, 1, 0, 0, 0, 5700, 5701, 5, 3, 0, 0, 5701, 5703, 3, 774, 387, 0, 5702, 5704, 3, 170, 85, 0, 5703, 5702, 1, 0, 0, 0, 5703, 5704, 1, 0, 0, 0, 5704, 5706, 1, 0, 0, 0, 5705, 5680, 1, 0, 0, 0, 5705, 5690, 1, 0, 0, 0, 5706, 503, 1, 0, 0, 0, 5707, 5723, 5, 370, 0, 0, 5708, 5710, 5, 113, 0, 0, 5709, 5708, 1, 0, 0, 0, 5709, 5710, 1, 0, 0, 0, 5710, 5712, 1, 0, 0, 0, 5711, 5713, 5, 112, 0, 0, 5712, 5711, 1, 0, 0, 0, 5712, 5713, 1, 0, 0, 0, 5713, 5715, 1, 0, 0, 0, 5714, 5716, 3, 514, 257, 0, 5715, 5714, 1, 0, 0, 0, 5715, 5716, 1, 0, 0, 0, 5716, 5718, 1, 0, 0, 0, 5717, 5719, 3, 508, 254, 0, 5718, 5717, 1, 0, 0, 0, 5718, 5719, 1, 0, 0, 0, 5719, 5724, 1, 0, 0, 0, 5720, 5722, 3, 524, 262, 0, 5721, 5720, 1, 0, 0, 0, 5721, 5722, 1, 0, 0, 0, 5722, 5724, 1, 0, 0, 0, 5723, 5709, 1, 0, 0, 0, 5723, 5721, 1, 0, 0, 0, 5724, 5726, 1, 0, 0, 0, 5725, 5727, 3, 518, 259, 0, 5726, 5725, 1, 0, 0, 0, 5726, 5727, 1, 0, 0, 0, 5727, 505, 1, 0, 0, 0, 5728, 5743, 3, 508, 254, 0, 5729, 5731, 3, 514, 257, 0, 5730, 5729, 1, 0, 0, 0, 5730, 5731, 1, 0, 0, 0, 5731, 5744, 1, 0, 0, 0, 5732, 5733, 5, 2, 0, 0, 5733, 5738, 3, 512, 256, 0, 5734, 5735, 5, 6, 0, 0, 5735, 5737, 3, 512, 256, 0, 5736, 5734, 1, 0, 0, 0, 5737, 5740, 1, 0, 0, 0, 5738, 5736, 1, 0, 0, 0, 5738, 5739, 1, 0, 0, 0, 5739, 5741, 1, 0, 0, 0, 5740, 5738, 1, 0, 0, 0, 5741, 5742, 5, 3, 0, 0, 5742, 5744, 1, 0, 0, 0, 5743, 5730, 1, 0, 0, 0, 5743, 5732, 1, 0, 0, 0, 5744, 5746, 1, 0, 0, 0, 5745, 5747, 3, 518, 259, 0, 5746, 5745, 1, 0, 0, 0, 5746, 5747, 1, 0, 0, 0, 5747, 507, 1, 0, 0, 0, 5748, 5749, 7, 73, 0, 0, 5749, 509, 1, 0, 0, 0, 5750, 5753, 3, 822, 411, 0, 5751, 5753, 3, 508, 254, 0, 5752, 5750, 1, 0, 0, 0, 5752, 5751, 1, 0, 0, 0, 5753, 5756, 1, 0, 0, 0, 5754, 5757, 3, 54, 27, 0, 5755, 5757, 3, 202, 101, 0, 5756, 5754, 1, 0, 0, 0, 5756, 5755, 1, 0, 0, 0, 5756, 5757, 1, 0, 0, 0, 5757, 511, 1, 0, 0, 0, 5758, 5760, 7, 74, 0, 0, 5759, 5761, 7, 75, 0, 0, 5760, 5759, 1, 0, 0, 0, 5760, 5761, 1, 0, 0, 0, 5761, 5768, 1, 0, 0, 0, 5762, 5765, 5, 548, 0, 0, 5763, 5766, 3, 202, 101, 0, 5764, 5766, 3, 808, 404, 0, 5765, 5763, 1, 0, 0, 0, 5765, 5764, 1, 0, 0, 0, 5766, 5768, 1, 0, 0, 0, 5767, 5758, 1, 0, 0, 0, 5767, 5762, 1, 0, 0, 0, 5768, 513, 1, 0, 0, 0, 5769, 5771, 5, 128, 0, 0, 5770, 5772, 7, 75, 0, 0, 5771, 5770, 1, 0, 0, 0, 5771, 5772, 1, 0, 0, 0, 5772, 515, 1, 0, 0, 0, 5773, 5775, 3, 774, 387, 0, 5774, 5776, 3, 144, 72, 0, 5775, 5774, 1, 0, 0, 0, 5775, 5776, 1, 0, 0, 0, 5776, 517, 1, 0, 0, 0, 5777, 5782, 3, 516, 258, 0, 5778, 5779, 5, 6, 0, 0, 5779, 5781, 3, 516, 258, 0, 5780, 5778, 1, 0, 0, 0, 5781, 5784, 1, 0, 0, 0, 5782, 5780, 1, 0, 0, 0, 5782, 5783, 1, 0, 0, 0, 5783, 519, 1, 0, 0, 0, 5784, 5782, 1, 0, 0, 0, 5785, 5796, 5, 203, 0, 0, 5786, 5797, 3, 524, 262, 0, 5787, 5789, 5, 128, 0, 0, 5788, 5787, 1, 0, 0, 0, 5788, 5789, 1, 0, 0, 0, 5789, 5797, 1, 0, 0, 0, 5790, 5792, 3, 508, 254, 0, 5791, 5793, 3, 514, 257, 0, 5792, 5791, 1, 0, 0, 0, 5792, 5793, 1, 0, 0, 0, 5793, 5795, 1, 0, 0, 0, 5794, 5790, 1, 0, 0, 0, 5794, 5795, 1, 0, 0, 0, 5795, 5797, 1, 0, 0, 0, 5796, 5786, 1, 0, 0, 0, 5796, 5788, 1, 0, 0, 0, 5796, 5794, 1, 0, 0, 0, 5797, 5798, 1, 0, 0, 0, 5798, 5799, 3, 522, 261, 0, 5799, 521, 1, 0, 0, 0, 5800, 5810, 3, 560, 280, 0, 5801, 5810, 3, 538, 269, 0, 5802, 5810, 3, 552, 276, 0, 5803, 5810, 3, 548, 274, 0, 5804, 5810, 3, 558, 279, 0, 5805, 5810, 3, 186, 93, 0, 5806, 5810, 3, 192, 96, 0, 5807, 5810, 3, 194, 97, 0, 5808, 5810, 3, 532, 266, 0, 5809, 5800, 1, 0, 0, 0, 5809, 5801, 1, 0, 0, 0, 5809, 5802, 1, 0, 0, 0, 5809, 5803, 1, 0, 0, 0, 5809, 5804, 1, 0, 0, 0, 5809, 5805, 1, 0, 0, 0, 5809, 5806, 1, 0, 0, 0, 5809, 5807, 1, 0, 0, 0, 5809, 5808, 1, 0, 0, 0, 5810, 523, 1, 0, 0, 0, 5811, 5812, 5, 2, 0, 0, 5812, 5817, 3, 510, 255, 0, 5813, 5814, 5, 6, 0, 0, 5814, 5816, 3, 510, 255, 0, 5815, 5813, 1, 0, 0, 0, 5816, 5819, 1, 0, 0, 0, 5817, 5815, 1, 0, 0, 0, 5817, 5818, 1, 0, 0, 0, 5818, 5820, 1, 0, 0, 0, 5819, 5817, 1, 0, 0, 0, 5820, 5821, 5, 3, 0, 0, 5821, 525, 1, 0, 0, 0, 5822, 5823, 5, 290, 0, 0, 5823, 5825, 3, 818, 409, 0, 5824, 5826, 3, 528, 264, 0, 5825, 5824, 1, 0, 0, 0, 5825, 5826, 1, 0, 0, 0, 5826, 5827, 1, 0, 0, 0, 5827, 5828, 5, 36, 0, 0, 5828, 5829, 3, 530, 265, 0, 5829, 527, 1, 0, 0, 0, 5830, 5831, 5, 2, 0, 0, 5831, 5836, 3, 652, 326, 0, 5832, 5833, 5, 6, 0, 0, 5833, 5835, 3, 652, 326, 0, 5834, 5832, 1, 0, 0, 0, 5835, 5838, 1, 0, 0, 0, 5836, 5834, 1, 0, 0, 0, 5836, 5837, 1, 0, 0, 0, 5837, 5839, 1, 0, 0, 0, 5838, 5836, 1, 0, 0, 0, 5839, 5840, 5, 3, 0, 0, 5840, 529, 1, 0, 0, 0, 5841, 5846, 3, 560, 280, 0, 5842, 5846, 3, 538, 269, 0, 5843, 5846, 3, 552, 276, 0, 5844, 5846, 3, 548, 274, 0, 5845, 5841, 1, 0, 0, 0, 5845, 5842, 1, 0, 0, 0, 5845, 5843, 1, 0, 0, 0, 5845, 5844, 1, 0, 0, 0, 5846, 531, 1, 0, 0, 0, 5847, 5848, 5, 202, 0, 0, 5848, 5850, 3, 818, 409, 0, 5849, 5851, 3, 534, 267, 0, 5850, 5849, 1, 0, 0, 0, 5850, 5851, 1, 0, 0, 0, 5851, 5871, 1, 0, 0, 0, 5852, 5854, 5, 46, 0, 0, 5853, 5855, 3, 122, 61, 0, 5854, 5853, 1, 0, 0, 0, 5854, 5855, 1, 0, 0, 0, 5855, 5856, 1, 0, 0, 0, 5856, 5858, 5, 92, 0, 0, 5857, 5859, 3, 294, 147, 0, 5858, 5857, 1, 0, 0, 0, 5858, 5859, 1, 0, 0, 0, 5859, 5860, 1, 0, 0, 0, 5860, 5861, 3, 188, 94, 0, 5861, 5862, 5, 36, 0, 0, 5862, 5863, 5, 202, 0, 0, 5863, 5865, 3, 818, 409, 0, 5864, 5866, 3, 534, 267, 0, 5865, 5864, 1, 0, 0, 0, 5865, 5866, 1, 0, 0, 0, 5866, 5868, 1, 0, 0, 0, 5867, 5869, 3, 190, 95, 0, 5868, 5867, 1, 0, 0, 0, 5868, 5869, 1, 0, 0, 0, 5869, 5871, 1, 0, 0, 0, 5870, 5847, 1, 0, 0, 0, 5870, 5852, 1, 0, 0, 0, 5871, 533, 1, 0, 0, 0, 5872, 5873, 5, 2, 0, 0, 5873, 5874, 3, 730, 365, 0, 5874, 5875, 5, 3, 0, 0, 5875, 535, 1, 0, 0, 0, 5876, 5878, 5, 177, 0, 0, 5877, 5879, 5, 290, 0, 0, 5878, 5877, 1, 0, 0, 0, 5878, 5879, 1, 0, 0, 0, 5879, 5882, 1, 0, 0, 0, 5880, 5883, 3, 818, 409, 0, 5881, 5883, 5, 30, 0, 0, 5882, 5880, 1, 0, 0, 0, 5882, 5881, 1, 0, 0, 0, 5883, 537, 1, 0, 0, 0, 5884, 5886, 3, 572, 286, 0, 5885, 5884, 1, 0, 0, 0, 5885, 5886, 1, 0, 0, 0, 5886, 5887, 1, 0, 0, 0, 5887, 5888, 5, 241, 0, 0, 5888, 5889, 5, 71, 0, 0, 5889, 5892, 3, 774, 387, 0, 5890, 5891, 5, 36, 0, 0, 5891, 5893, 3, 818, 409, 0, 5892, 5890, 1, 0, 0, 0, 5892, 5893, 1, 0, 0, 0, 5893, 5894, 1, 0, 0, 0, 5894, 5916, 3, 540, 270, 0, 5895, 5896, 5, 80, 0, 0, 5896, 5904, 5, 464, 0, 0, 5897, 5899, 3, 360, 180, 0, 5898, 5900, 3, 638, 319, 0, 5899, 5898, 1, 0, 0, 0, 5899, 5900, 1, 0, 0, 0, 5900, 5905, 1, 0, 0, 0, 5901, 5902, 5, 80, 0, 0, 5902, 5903, 5, 45, 0, 0, 5903, 5905, 3, 818, 409, 0, 5904, 5897, 1, 0, 0, 0, 5904, 5901, 1, 0, 0, 0, 5904, 5905, 1, 0, 0, 0, 5905, 5906, 1, 0, 0, 0, 5906, 5914, 5, 57, 0, 0, 5907, 5908, 5, 369, 0, 0, 5908, 5909, 5, 333, 0, 0, 5909, 5911, 3, 554, 277, 0, 5910, 5912, 3, 638, 319, 0, 5911, 5910, 1, 0, 0, 0, 5911, 5912, 1, 0, 0, 0, 5912, 5915, 1, 0, 0, 0, 5913, 5915, 5, 270, 0, 0, 5914, 5907, 1, 0, 0, 0, 5914, 5913, 1, 0, 0, 0, 5915, 5917, 1, 0, 0, 0, 5916, 5895, 1, 0, 0, 0, 5916, 5917, 1, 0, 0, 0, 5917, 5919, 1, 0, 0, 0, 5918, 5920, 3, 546, 273, 0, 5919, 5918, 1, 0, 0, 0, 5919, 5920, 1, 0, 0, 0, 5920, 539, 1, 0, 0, 0, 5921, 5922, 5, 2, 0, 0, 5922, 5923, 3, 542, 271, 0, 5923, 5924, 5, 3, 0, 0, 5924, 5926, 1, 0, 0, 0, 5925, 5921, 1, 0, 0, 0, 5925, 5926, 1, 0, 0, 0, 5926, 5930, 1, 0, 0, 0, 5927, 5928, 5, 463, 0, 0, 5928, 5929, 7, 76, 0, 0, 5929, 5931, 5, 450, 0, 0, 5930, 5927, 1, 0, 0, 0, 5930, 5931, 1, 0, 0, 0, 5931, 5934, 1, 0, 0, 0, 5932, 5935, 3, 910, 455, 0, 5933, 5935, 3, 560, 280, 0, 5934, 5932, 1, 0, 0, 0, 5934, 5933, 1, 0, 0, 0, 5935, 541, 1, 0, 0, 0, 5936, 5941, 3, 544, 272, 0, 5937, 5938, 5, 6, 0, 0, 5938, 5940, 3, 544, 272, 0, 5939, 5937, 1, 0, 0, 0, 5940, 5943, 1, 0, 0, 0, 5941, 5939, 1, 0, 0, 0, 5941, 5942, 1, 0, 0, 0, 5942, 543, 1, 0, 0, 0, 5943, 5941, 1, 0, 0, 0, 5944, 5945, 3, 800, 400, 0, 5945, 5946, 3, 754, 377, 0, 5946, 545, 1, 0, 0, 0, 5947, 5948, 5, 87, 0, 0, 5948, 5949, 3, 756, 378, 0, 5949, 547, 1, 0, 0, 0, 5950, 5952, 3, 572, 286, 0, 5951, 5950, 1, 0, 0, 0, 5951, 5952, 1, 0, 0, 0, 5952, 5953, 1, 0, 0, 0, 5953, 5954, 5, 182, 0, 0, 5954, 5955, 5, 64, 0, 0, 5955, 5958, 3, 630, 315, 0, 5956, 5957, 5, 100, 0, 0, 5957, 5959, 3, 612, 306, 0, 5958, 5956, 1, 0, 0, 0, 5958, 5959, 1, 0, 0, 0, 5959, 5961, 1, 0, 0, 0, 5960, 5962, 3, 640, 320, 0, 5961, 5960, 1, 0, 0, 0, 5961, 5962, 1, 0, 0, 0, 5962, 5964, 1, 0, 0, 0, 5963, 5965, 3, 546, 273, 0, 5964, 5963, 1, 0, 0, 0, 5964, 5965, 1, 0, 0, 0, 5965, 549, 1, 0, 0, 0, 5966, 5968, 5, 256, 0, 0, 5967, 5969, 5, 92, 0, 0, 5968, 5967, 1, 0, 0, 0, 5968, 5969, 1, 0, 0, 0, 5969, 5970, 1, 0, 0, 0, 5970, 5985, 3, 628, 314, 0, 5971, 5982, 5, 68, 0, 0, 5972, 5973, 7, 77, 0, 0, 5973, 5983, 7, 78, 0, 0, 5974, 5979, 5, 334, 0, 0, 5975, 5976, 5, 369, 0, 0, 5976, 5980, 5, 201, 0, 0, 5977, 5978, 5, 414, 0, 0, 5978, 5980, 5, 201, 0, 0, 5979, 5975, 1, 0, 0, 0, 5979, 5977, 1, 0, 0, 0, 5979, 5980, 1, 0, 0, 0, 5980, 5983, 1, 0, 0, 0, 5981, 5983, 5, 201, 0, 0, 5982, 5972, 1, 0, 0, 0, 5982, 5974, 1, 0, 0, 0, 5982, 5981, 1, 0, 0, 0, 5983, 5984, 1, 0, 0, 0, 5984, 5986, 5, 263, 0, 0, 5985, 5971, 1, 0, 0, 0, 5985, 5986, 1, 0, 0, 0, 5986, 5988, 1, 0, 0, 0, 5987, 5989, 5, 272, 0, 0, 5988, 5987, 1, 0, 0, 0, 5988, 5989, 1, 0, 0, 0, 5989, 551, 1, 0, 0, 0, 5990, 5992, 3, 572, 286, 0, 5991, 5990, 1, 0, 0, 0, 5991, 5992, 1, 0, 0, 0, 5992, 5993, 1, 0, 0, 0, 5993, 5994, 5, 369, 0, 0, 5994, 5995, 3, 630, 315, 0, 5995, 5996, 5, 333, 0, 0, 5996, 5998, 3, 554, 277, 0, 5997, 5999, 3, 610, 305, 0, 5998, 5997, 1, 0, 0, 0, 5998, 5999, 1, 0, 0, 0, 5999, 6001, 1, 0, 0, 0, 6000, 6002, 3, 640, 320, 0, 6001, 6000, 1, 0, 0, 0, 6001, 6002, 1, 0, 0, 0, 6002, 6004, 1, 0, 0, 0, 6003, 6005, 3, 546, 273, 0, 6004, 6003, 1, 0, 0, 0, 6004, 6005, 1, 0, 0, 0, 6005, 553, 1, 0, 0, 0, 6006, 6011, 3, 556, 278, 0, 6007, 6008, 5, 6, 0, 0, 6008, 6010, 3, 556, 278, 0, 6009, 6007, 1, 0, 0, 0, 6010, 6013, 1, 0, 0, 0, 6011, 6009, 1, 0, 0, 0, 6011, 6012, 1, 0, 0, 0, 6012, 555, 1, 0, 0, 0, 6013, 6011, 1, 0, 0, 0, 6014, 6015, 3, 544, 272, 0, 6015, 6016, 5, 10, 0, 0, 6016, 6017, 3, 674, 337, 0, 6017, 6033, 1, 0, 0, 0, 6018, 6019, 5, 2, 0, 0, 6019, 6020, 3, 542, 271, 0, 6020, 6021, 5, 3, 0, 0, 6021, 6030, 5, 10, 0, 0, 6022, 6024, 5, 414, 0, 0, 6023, 6022, 1, 0, 0, 0, 6023, 6024, 1, 0, 0, 0, 6024, 6025, 1, 0, 0, 0, 6025, 6031, 3, 674, 337, 0, 6026, 6027, 5, 2, 0, 0, 6027, 6028, 3, 566, 283, 0, 6028, 6029, 5, 3, 0, 0, 6029, 6031, 1, 0, 0, 0, 6030, 6023, 1, 0, 0, 0, 6030, 6026, 1, 0, 0, 0, 6031, 6033, 1, 0, 0, 0, 6032, 6014, 1, 0, 0, 0, 6032, 6018, 1, 0, 0, 0, 6033, 557, 1, 0, 0, 0, 6034, 6035, 5, 178, 0, 0, 6035, 6044, 3, 818, 409, 0, 6036, 6038, 5, 269, 0, 0, 6037, 6036, 1, 0, 0, 0, 6037, 6038, 1, 0, 0, 0, 6038, 6039, 1, 0, 0, 0, 6039, 6043, 5, 324, 0, 0, 6040, 6043, 5, 107, 0, 0, 6041, 6043, 5, 240, 0, 0, 6042, 6037, 1, 0, 0, 0, 6042, 6040, 1, 0, 0, 0, 6042, 6041, 1, 0, 0, 0, 6043, 6046, 1, 0, 0, 0, 6044, 6042, 1, 0, 0, 0, 6044, 6045, 1, 0, 0, 0, 6045, 6047, 1, 0, 0, 0, 6046, 6044, 1, 0, 0, 0, 6047, 6050, 5, 172, 0, 0, 6048, 6049, 7, 26, 0, 0, 6049, 6051, 5, 217, 0, 0, 6050, 6048, 1, 0, 0, 0, 6050, 6051, 1, 0, 0, 0, 6051, 6052, 1, 0, 0, 0, 6052, 6053, 5, 62, 0, 0, 6053, 6054, 3, 560, 280, 0, 6054, 559, 1, 0, 0, 0, 6055, 6058, 3, 564, 282, 0, 6056, 6058, 3, 562, 281, 0, 6057, 6055, 1, 0, 0, 0, 6057, 6056, 1, 0, 0, 0, 6058, 561, 1, 0, 0, 0, 6059, 6062, 5, 2, 0, 0, 6060, 6063, 3, 564, 282, 0, 6061, 6063, 3, 562, 281, 0, 6062, 6060, 1, 0, 0, 0, 6062, 6061, 1, 0, 0, 0, 6063, 6064, 1, 0, 0, 0, 6064, 6065, 5, 3, 0, 0, 6065, 563, 1, 0, 0, 0, 6066, 6068, 3, 572, 286, 0, 6067, 6066, 1, 0, 0, 0, 6067, 6068, 1, 0, 0, 0, 6068, 6069, 1, 0, 0, 0, 6069, 6071, 3, 566, 283, 0, 6070, 6072, 3, 586, 293, 0, 6071, 6070, 1, 0, 0, 0, 6071, 6072, 1, 0, 0, 0, 6072, 6081, 1, 0, 0, 0, 6073, 6075, 3, 606, 303, 0, 6074, 6076, 3, 590, 295, 0, 6075, 6074, 1, 0, 0, 0, 6075, 6076, 1, 0, 0, 0, 6076, 6082, 1, 0, 0, 0, 6077, 6079, 3, 590, 295, 0, 6078, 6080, 3, 606, 303, 0, 6079, 6078, 1, 0, 0, 0, 6079, 6080, 1, 0, 0, 0, 6080, 6082, 1, 0, 0, 0, 6081, 6073, 1, 0, 0, 0, 6081, 6077, 1, 0, 0, 0, 6081, 6082, 1, 0, 0, 0, 6082, 565, 1, 0, 0, 0, 6083, 6086, 3, 568, 284, 0, 6084, 6086, 3, 562, 281, 0, 6085, 6083, 1, 0, 0, 0, 6085, 6084, 1, 0, 0, 0, 6086, 567, 1, 0, 0, 0, 6087, 6097, 5, 88, 0, 0, 6088, 6090, 5, 30, 0, 0, 6089, 6088, 1, 0, 0, 0, 6089, 6090, 1, 0, 0, 0, 6090, 6092, 1, 0, 0, 0, 6091, 6093, 3, 580, 290, 0, 6092, 6091, 1, 0, 0, 0, 6092, 6093, 1, 0, 0, 0, 6093, 6098, 1, 0, 0, 0, 6094, 6096, 3, 584, 292, 0, 6095, 6094, 1, 0, 0, 0, 6095, 6096, 1, 0, 0, 0, 6096, 6098, 1, 0, 0, 0, 6097, 6089, 1, 0, 0, 0, 6097, 6095, 1, 0, 0, 0, 6098, 6099, 1, 0, 0, 0, 6099, 6110, 3, 930, 465, 0, 6100, 6110, 3, 608, 304, 0, 6101, 6102, 5, 92, 0, 0, 6102, 6110, 3, 624, 312, 0, 6103, 6104, 3, 562, 281, 0, 6104, 6107, 3, 570, 285, 0, 6105, 6108, 3, 568, 284, 0, 6106, 6108, 3, 562, 281, 0, 6107, 6105, 1, 0, 0, 0, 6107, 6106, 1, 0, 0, 0, 6108, 6110, 1, 0, 0, 0, 6109, 6087, 1, 0, 0, 0, 6109, 6100, 1, 0, 0, 0, 6109, 6101, 1, 0, 0, 0, 6109, 6103, 1, 0, 0, 0, 6110, 6118, 1, 0, 0, 0, 6111, 6114, 3, 570, 285, 0, 6112, 6115, 3, 568, 284, 0, 6113, 6115, 3, 562, 281, 0, 6114, 6112, 1, 0, 0, 0, 6114, 6113, 1, 0, 0, 0, 6115, 6117, 1, 0, 0, 0, 6116, 6111, 1, 0, 0, 0, 6117, 6120, 1, 0, 0, 0, 6118, 6116, 1, 0, 0, 0, 6118, 6119, 1, 0, 0, 0, 6119, 569, 1, 0, 0, 0, 6120, 6118, 1, 0, 0, 0, 6121, 6123, 7, 79, 0, 0, 6122, 6124, 7, 80, 0, 0, 6123, 6122, 1, 0, 0, 0, 6123, 6124, 1, 0, 0, 0, 6124, 571, 1, 0, 0, 0, 6125, 6127, 5, 105, 0, 0, 6126, 6128, 5, 303, 0, 0, 6127, 6126, 1, 0, 0, 0, 6127, 6128, 1, 0, 0, 0, 6128, 6129, 1, 0, 0, 0, 6129, 6134, 3, 574, 287, 0, 6130, 6131, 5, 6, 0, 0, 6131, 6133, 3, 574, 287, 0, 6132, 6130, 1, 0, 0, 0, 6133, 6136, 1, 0, 0, 0, 6134, 6132, 1, 0, 0, 0, 6134, 6135, 1, 0, 0, 0, 6135, 573, 1, 0, 0, 0, 6136, 6134, 1, 0, 0, 0, 6137, 6139, 3, 818, 409, 0, 6138, 6140, 3, 144, 72, 0, 6139, 6138, 1, 0, 0, 0, 6139, 6140, 1, 0, 0, 0, 6140, 6141, 1, 0, 0, 0, 6141, 6146, 5, 36, 0, 0, 6142, 6144, 5, 77, 0, 0, 6143, 6142, 1, 0, 0, 0, 6143, 6144, 1, 0, 0, 0, 6144, 6145, 1, 0, 0, 0, 6145, 6147, 5, 259, 0, 0, 6146, 6143, 1, 0, 0, 0, 6146, 6147, 1, 0, 0, 0, 6147, 6148, 1, 0, 0, 0, 6148, 6149, 5, 2, 0, 0, 6149, 6150, 3, 530, 265, 0, 6150, 6152, 5, 3, 0, 0, 6151, 6153, 3, 576, 288, 0, 6152, 6151, 1, 0, 0, 0, 6152, 6153, 1, 0, 0, 0, 6153, 6155, 1, 0, 0, 0, 6154, 6156, 3, 578, 289, 0, 6155, 6154, 1, 0, 0, 0, 6155, 6156, 1, 0, 0, 0, 6156, 575, 1, 0, 0, 0, 6157, 6158, 5, 325, 0, 0, 6158, 6159, 7, 81, 0, 0, 6159, 6160, 5, 207, 0, 0, 6160, 6161, 5, 147, 0, 0, 6161, 6162, 3, 148, 74, 0, 6162, 6163, 5, 333, 0, 0, 6163, 6164, 3, 800, 400, 0, 6164, 577, 1, 0, 0, 0, 6165, 6166, 5, 173, 0, 0, 6166, 6167, 3, 148, 74, 0, 6167, 6168, 5, 333, 0, 0, 6168, 6174, 3, 800, 400, 0, 6169, 6170, 5, 94, 0, 0, 6170, 6171, 3, 818, 409, 0, 6171, 6172, 5, 53, 0, 0, 6172, 6173, 3, 818, 409, 0, 6173, 6175, 1, 0, 0, 0, 6174, 6169, 1, 0, 0, 0, 6174, 6175, 1, 0, 0, 0, 6175, 6176, 1, 0, 0, 0, 6176, 6177, 5, 100, 0, 0, 6177, 6178, 3, 800, 400, 0, 6178, 579, 1, 0, 0, 0, 6179, 6185, 5, 71, 0, 0, 6180, 6182, 5, 346, 0, 0, 6181, 6180, 1, 0, 0, 0, 6181, 6182, 1, 0, 0, 0, 6182, 6183, 1, 0, 0, 0, 6183, 6186, 3, 582, 291, 0, 6184, 6186, 3, 730, 365, 0, 6185, 6181, 1, 0, 0, 0, 6185, 6184, 1, 0, 0, 0, 6186, 581, 1, 0, 0, 0, 6187, 6189, 7, 20, 0, 0, 6188, 6187, 1, 0, 0, 0, 6188, 6189, 1, 0, 0, 0, 6189, 6190, 1, 0, 0, 0, 6190, 6192, 7, 21, 0, 0, 6191, 6193, 5, 92, 0, 0, 6192, 6191, 1, 0, 0, 0, 6192, 6193, 1, 0, 0, 0, 6193, 6194, 1, 0, 0, 0, 6194, 6203, 3, 772, 386, 0, 6195, 6197, 5, 367, 0, 0, 6196, 6195, 1, 0, 0, 0, 6196, 6197, 1, 0, 0, 0, 6197, 6199, 1, 0, 0, 0, 6198, 6200, 5, 92, 0, 0, 6199, 6198, 1, 0, 0, 0, 6199, 6200, 1, 0, 0, 0, 6200, 6201, 1, 0, 0, 0, 6201, 6203, 3, 772, 386, 0, 6202, 6188, 1, 0, 0, 0, 6202, 6196, 1, 0, 0, 0, 6203, 583, 1, 0, 0, 0, 6204, 6207, 5, 56, 0, 0, 6205, 6206, 5, 80, 0, 0, 6206, 6208, 3, 534, 267, 0, 6207, 6205, 1, 0, 0, 0, 6207, 6208, 1, 0, 0, 0, 6208, 585, 1, 0, 0, 0, 6209, 6210, 5, 83, 0, 0, 6210, 6211, 5, 147, 0, 0, 6211, 6216, 3, 588, 294, 0, 6212, 6213, 5, 6, 0, 0, 6213, 6215, 3, 588, 294, 0, 6214, 6212, 1, 0, 0, 0, 6215, 6218, 1, 0, 0, 0, 6216, 6214, 1, 0, 0, 0, 6216, 6217, 1, 0, 0, 0, 6217, 587, 1, 0, 0, 0, 6218, 6216, 1, 0, 0, 0, 6219, 6223, 3, 734, 367, 0, 6220, 6221, 5, 100, 0, 0, 6221, 6224, 3, 726, 363, 0, 6222, 6224, 7, 55, 0, 0, 6223, 6220, 1, 0, 0, 0, 6223, 6222, 1, 0, 0, 0, 6223, 6224, 1, 0, 0, 0, 6224, 6227, 1, 0, 0, 0, 6225, 6226, 5, 273, 0, 0, 6226, 6228, 7, 56, 0, 0, 6227, 6225, 1, 0, 0, 0, 6227, 6228, 1, 0, 0, 0, 6228, 589, 1, 0, 0, 0, 6229, 6231, 3, 596, 298, 0, 6230, 6232, 3, 594, 297, 0, 6231, 6230, 1, 0, 0, 0, 6231, 6232, 1, 0, 0, 0, 6232, 6241, 1, 0, 0, 0, 6233, 6236, 3, 592, 296, 0, 6234, 6236, 3, 594, 297, 0, 6235, 6233, 1, 0, 0, 0, 6235, 6234, 1, 0, 0, 0, 6236, 6238, 1, 0, 0, 0, 6237, 6239, 3, 596, 298, 0, 6238, 6237, 1, 0, 0, 0, 6238, 6239, 1, 0, 0, 0, 6239, 6241, 1, 0, 0, 0, 6240, 6229, 1, 0, 0, 0, 6240, 6235, 1, 0, 0, 0, 6241, 591, 1, 0, 0, 0, 6242, 6245, 5, 74, 0, 0, 6243, 6246, 3, 674, 337, 0, 6244, 6246, 5, 30, 0, 0, 6245, 6243, 1, 0, 0, 0, 6245, 6244, 1, 0, 0, 0, 6246, 6249, 1, 0, 0, 0, 6247, 6248, 5, 6, 0, 0, 6248, 6250, 3, 674, 337, 0, 6249, 6247, 1, 0, 0, 0, 6249, 6250, 1, 0, 0, 0, 6250, 593, 1, 0, 0, 0, 6251, 6252, 5, 61, 0, 0, 6252, 6254, 7, 82, 0, 0, 6253, 6255, 3, 598, 299, 0, 6254, 6253, 1, 0, 0, 0, 6254, 6255, 1, 0, 0, 0, 6255, 6256, 1, 0, 0, 0, 6256, 6260, 7, 83, 0, 0, 6257, 6261, 5, 81, 0, 0, 6258, 6259, 5, 105, 0, 0, 6259, 6261, 5, 467, 0, 0, 6260, 6257, 1, 0, 0, 0, 6260, 6258, 1, 0, 0, 0, 6261, 595, 1, 0, 0, 0, 6262, 6267, 5, 79, 0, 0, 6263, 6264, 3, 598, 299, 0, 6264, 6265, 7, 83, 0, 0, 6265, 6268, 1, 0, 0, 0, 6266, 6268, 3, 674, 337, 0, 6267, 6263, 1, 0, 0, 0, 6267, 6266, 1, 0, 0, 0, 6268, 597, 1, 0, 0, 0, 6269, 6270, 7, 29, 0, 0, 6270, 6273, 7, 84, 0, 0, 6271, 6273, 3, 682, 341, 0, 6272, 6269, 1, 0, 0, 0, 6272, 6271, 1, 0, 0, 0, 6273, 599, 1, 0, 0, 0, 6274, 6275, 5, 66, 0, 0, 6275, 6277, 5, 147, 0, 0, 6276, 6278, 7, 80, 0, 0, 6277, 6276, 1, 0, 0, 0, 6277, 6278, 1, 0, 0, 0, 6278, 6279, 1, 0, 0, 0, 6279, 6280, 3, 602, 301, 0, 6280, 601, 1, 0, 0, 0, 6281, 6286, 3, 604, 302, 0, 6282, 6283, 5, 6, 0, 0, 6283, 6285, 3, 604, 302, 0, 6284, 6282, 1, 0, 0, 0, 6285, 6288, 1, 0, 0, 0, 6286, 6284, 1, 0, 0, 0, 6286, 6287, 1, 0, 0, 0, 6287, 603, 1, 0, 0, 0, 6288, 6286, 1, 0, 0, 0, 6289, 6313, 3, 734, 367, 0, 6290, 6291, 5, 2, 0, 0, 6291, 6313, 5, 3, 0, 0, 6292, 6294, 7, 85, 0, 0, 6293, 6292, 1, 0, 0, 0, 6293, 6294, 1, 0, 0, 0, 6294, 6295, 1, 0, 0, 0, 6295, 6296, 5, 2, 0, 0, 6296, 6301, 3, 734, 367, 0, 6297, 6298, 5, 6, 0, 0, 6298, 6300, 3, 734, 367, 0, 6299, 6297, 1, 0, 0, 0, 6300, 6303, 1, 0, 0, 0, 6301, 6299, 1, 0, 0, 0, 6301, 6302, 1, 0, 0, 0, 6302, 6304, 1, 0, 0, 0, 6303, 6301, 1, 0, 0, 0, 6304, 6305, 5, 3, 0, 0, 6305, 6313, 1, 0, 0, 0, 6306, 6307, 5, 470, 0, 0, 6307, 6308, 5, 471, 0, 0, 6308, 6309, 5, 2, 0, 0, 6309, 6310, 3, 602, 301, 0, 6310, 6311, 5, 3, 0, 0, 6311, 6313, 1, 0, 0, 0, 6312, 6289, 1, 0, 0, 0, 6312, 6290, 1, 0, 0, 0, 6312, 6293, 1, 0, 0, 0, 6312, 6306, 1, 0, 0, 0, 6313, 605, 1, 0, 0, 0, 6314, 6324, 5, 62, 0, 0, 6315, 6316, 5, 269, 0, 0, 6316, 6318, 5, 245, 0, 0, 6317, 6315, 1, 0, 0, 0, 6317, 6318, 1, 0, 0, 0, 6318, 6319, 1, 0, 0, 0, 6319, 6325, 5, 369, 0, 0, 6320, 6322, 5, 245, 0, 0, 6321, 6320, 1, 0, 0, 0, 6321, 6322, 1, 0, 0, 0, 6322, 6323, 1, 0, 0, 0, 6323, 6325, 5, 334, 0, 0, 6324, 6317, 1, 0, 0, 0, 6324, 6321, 1, 0, 0, 0, 6325, 6328, 1, 0, 0, 0, 6326, 6327, 5, 275, 0, 0, 6327, 6329, 3, 760, 380, 0, 6328, 6326, 1, 0, 0, 0, 6328, 6329, 1, 0, 0, 0, 6329, 6333, 1, 0, 0, 0, 6330, 6334, 5, 272, 0, 0, 6331, 6332, 5, 465, 0, 0, 6332, 6334, 5, 466, 0, 0, 6333, 6330, 1, 0, 0, 0, 6333, 6331, 1, 0, 0, 0, 6333, 6334, 1, 0, 0, 0, 6334, 6336, 1, 0, 0, 0, 6335, 6314, 1, 0, 0, 0, 6336, 6337, 1, 0, 0, 0, 6337, 6335, 1, 0, 0, 0, 6337, 6338, 1, 0, 0, 0, 6338, 6343, 1, 0, 0, 0, 6339, 6340, 5, 62, 0, 0, 6340, 6341, 5, 300, 0, 0, 6341, 6343, 5, 81, 0, 0, 6342, 6335, 1, 0, 0, 0, 6342, 6339, 1, 0, 0, 0, 6343, 607, 1, 0, 0, 0, 6344, 6345, 5, 422, 0, 0, 6345, 6350, 3, 534, 267, 0, 6346, 6347, 5, 6, 0, 0, 6347, 6349, 3, 534, 267, 0, 6348, 6346, 1, 0, 0, 0, 6349, 6352, 1, 0, 0, 0, 6350, 6348, 1, 0, 0, 0, 6350, 6351, 1, 0, 0, 0, 6351, 609, 1, 0, 0, 0, 6352, 6350, 1, 0, 0, 0, 6353, 6354, 5, 64, 0, 0, 6354, 6355, 3, 612, 306, 0, 6355, 611, 1, 0, 0, 0, 6356, 6361, 3, 614, 307, 0, 6357, 6358, 5, 6, 0, 0, 6358, 6360, 3, 614, 307, 0, 6359, 6357, 1, 0, 0, 0, 6360, 6363, 1, 0, 0, 0, 6361, 6359, 1, 0, 0, 0, 6361, 6362, 1, 0, 0, 0, 6362, 613, 1, 0, 0, 0, 6363, 6361, 1, 0, 0, 0, 6364, 6379, 3, 624, 312, 0, 6365, 6367, 5, 81, 0, 0, 6366, 6365, 1, 0, 0, 0, 6366, 6367, 1, 0, 0, 0, 6367, 6368, 1, 0, 0, 0, 6368, 6370, 3, 778, 389, 0, 6369, 6371, 5, 9, 0, 0, 6370, 6369, 1, 0, 0, 0, 6370, 6371, 1, 0, 0, 0, 6371, 6373, 1, 0, 0, 0, 6372, 6374, 3, 148, 74, 0, 6373, 6372, 1, 0, 0, 0, 6373, 6374, 1, 0, 0, 0, 6374, 6376, 1, 0, 0, 0, 6375, 6377, 3, 638, 319, 0, 6376, 6375, 1, 0, 0, 0, 6376, 6377, 1, 0, 0, 0, 6377, 6379, 1, 0, 0, 0, 6378, 6364, 1, 0, 0, 0, 6378, 6366, 1, 0, 0, 0, 6379, 6381, 1, 0, 0, 0, 6380, 6382, 3, 616, 308, 0, 6381, 6380, 1, 0, 0, 0, 6381, 6382, 1, 0, 0, 0, 6382, 6384, 1, 0, 0, 0, 6383, 6385, 3, 632, 316, 0, 6384, 6383, 1, 0, 0, 0, 6384, 6385, 1, 0, 0, 0, 6385, 6428, 1, 0, 0, 0, 6386, 6388, 5, 72, 0, 0, 6387, 6386, 1, 0, 0, 0, 6387, 6388, 1, 0, 0, 0, 6388, 6401, 1, 0, 0, 0, 6389, 6391, 3, 646, 323, 0, 6390, 6392, 3, 616, 308, 0, 6391, 6390, 1, 0, 0, 0, 6391, 6392, 1, 0, 0, 0, 6392, 6402, 1, 0, 0, 0, 6393, 6395, 3, 634, 317, 0, 6394, 6396, 3, 618, 309, 0, 6395, 6394, 1, 0, 0, 0, 6395, 6396, 1, 0, 0, 0, 6396, 6402, 1, 0, 0, 0, 6397, 6399, 3, 562, 281, 0, 6398, 6400, 3, 616, 308, 0, 6399, 6398, 1, 0, 0, 0, 6399, 6400, 1, 0, 0, 0, 6400, 6402, 1, 0, 0, 0, 6401, 6389, 1, 0, 0, 0, 6401, 6393, 1, 0, 0, 0, 6401, 6397, 1, 0, 0, 0, 6402, 6428, 1, 0, 0, 0, 6403, 6404, 5, 2, 0, 0, 6404, 6421, 3, 614, 307, 0, 6405, 6406, 5, 110, 0, 0, 6406, 6407, 5, 118, 0, 0, 6407, 6422, 3, 614, 307, 0, 6408, 6410, 5, 121, 0, 0, 6409, 6411, 3, 620, 310, 0, 6410, 6409, 1, 0, 0, 0, 6410, 6411, 1, 0, 0, 0, 6411, 6412, 1, 0, 0, 0, 6412, 6413, 5, 118, 0, 0, 6413, 6422, 3, 614, 307, 0, 6414, 6416, 3, 620, 310, 0, 6415, 6414, 1, 0, 0, 0, 6415, 6416, 1, 0, 0, 0, 6416, 6417, 1, 0, 0, 0, 6417, 6418, 5, 118, 0, 0, 6418, 6419, 3, 614, 307, 0, 6419, 6420, 3, 622, 311, 0, 6420, 6422, 1, 0, 0, 0, 6421, 6405, 1, 0, 0, 0, 6421, 6408, 1, 0, 0, 0, 6421, 6415, 1, 0, 0, 0, 6421, 6422, 1, 0, 0, 0, 6422, 6423, 1, 0, 0, 0, 6423, 6425, 5, 3, 0, 0, 6424, 6426, 3, 616, 308, 0, 6425, 6424, 1, 0, 0, 0, 6425, 6426, 1, 0, 0, 0, 6426, 6428, 1, 0, 0, 0, 6427, 6378, 1, 0, 0, 0, 6427, 6387, 1, 0, 0, 0, 6427, 6403, 1, 0, 0, 0, 6428, 6447, 1, 0, 0, 0, 6429, 6430, 5, 110, 0, 0, 6430, 6431, 5, 118, 0, 0, 6431, 6446, 3, 614, 307, 0, 6432, 6434, 5, 121, 0, 0, 6433, 6435, 3, 620, 310, 0, 6434, 6433, 1, 0, 0, 0, 6434, 6435, 1, 0, 0, 0, 6435, 6436, 1, 0, 0, 0, 6436, 6437, 5, 118, 0, 0, 6437, 6446, 3, 614, 307, 0, 6438, 6440, 3, 620, 310, 0, 6439, 6438, 1, 0, 0, 0, 6439, 6440, 1, 0, 0, 0, 6440, 6441, 1, 0, 0, 0, 6441, 6442, 5, 118, 0, 0, 6442, 6443, 3, 614, 307, 0, 6443, 6444, 3, 622, 311, 0, 6444, 6446, 1, 0, 0, 0, 6445, 6429, 1, 0, 0, 0, 6445, 6432, 1, 0, 0, 0, 6445, 6439, 1, 0, 0, 0, 6446, 6449, 1, 0, 0, 0, 6447, 6445, 1, 0, 0, 0, 6447, 6448, 1, 0, 0, 0, 6448, 615, 1, 0, 0, 0, 6449, 6447, 1, 0, 0, 0, 6450, 6452, 5, 36, 0, 0, 6451, 6450, 1, 0, 0, 0, 6451, 6452, 1, 0, 0, 0, 6452, 6453, 1, 0, 0, 0, 6453, 6458, 3, 818, 409, 0, 6454, 6455, 5, 2, 0, 0, 6455, 6456, 3, 784, 392, 0, 6456, 6457, 5, 3, 0, 0, 6457, 6459, 1, 0, 0, 0, 6458, 6454, 1, 0, 0, 0, 6458, 6459, 1, 0, 0, 0, 6459, 617, 1, 0, 0, 0, 6460, 6473, 3, 616, 308, 0, 6461, 6463, 5, 36, 0, 0, 6462, 6464, 3, 818, 409, 0, 6463, 6462, 1, 0, 0, 0, 6463, 6464, 1, 0, 0, 0, 6464, 6467, 1, 0, 0, 0, 6465, 6467, 3, 818, 409, 0, 6466, 6461, 1, 0, 0, 0, 6466, 6465, 1, 0, 0, 0, 6467, 6468, 1, 0, 0, 0, 6468, 6469, 5, 2, 0, 0, 6469, 6470, 3, 642, 321, 0, 6470, 6471, 5, 3, 0, 0, 6471, 6473, 1, 0, 0, 0, 6472, 6460, 1, 0, 0, 0, 6472, 6466, 1, 0, 0, 0, 6473, 619, 1, 0, 0, 0, 6474, 6476, 7, 86, 0, 0, 6475, 6477, 5, 123, 0, 0, 6476, 6475, 1, 0, 0, 0, 6476, 6477, 1, 0, 0, 0, 6477, 621, 1, 0, 0, 0, 6478, 6479, 5, 100, 0, 0, 6479, 6483, 3, 144, 72, 0, 6480, 6481, 5, 80, 0, 0, 6481, 6483, 3, 674, 337, 0, 6482, 6478, 1, 0, 0, 0, 6482, 6480, 1, 0, 0, 0, 6483, 623, 1, 0, 0, 0, 6484, 6500, 3, 322, 161, 0, 6485, 6491, 5, 81, 0, 0, 6486, 6492, 3, 774, 387, 0, 6487, 6488, 5, 2, 0, 0, 6488, 6489, 3, 774, 387, 0, 6489, 6490, 5, 3, 0, 0, 6490, 6492, 1, 0, 0, 0, 6491, 6486, 1, 0, 0, 0, 6491, 6487, 1, 0, 0, 0, 6492, 6500, 1, 0, 0, 0, 6493, 6494, 5, 68, 0, 0, 6494, 6497, 5, 323, 0, 0, 6495, 6498, 3, 790, 395, 0, 6496, 6498, 5, 111, 0, 0, 6497, 6495, 1, 0, 0, 0, 6497, 6496, 1, 0, 0, 0, 6498, 6500, 1, 0, 0, 0, 6499, 6484, 1, 0, 0, 0, 6499, 6485, 1, 0, 0, 0, 6499, 6493, 1, 0, 0, 0, 6500, 625, 1, 0, 0, 0, 6501, 6502, 5, 92, 0, 0, 6502, 6504, 3, 322, 161, 0, 6503, 6505, 3, 144, 72, 0, 6504, 6503, 1, 0, 0, 0, 6504, 6505, 1, 0, 0, 0, 6505, 6507, 1, 0, 0, 0, 6506, 6508, 3, 638, 319, 0, 6507, 6506, 1, 0, 0, 0, 6507, 6508, 1, 0, 0, 0, 6508, 6526, 1, 0, 0, 0, 6509, 6510, 5, 92, 0, 0, 6510, 6516, 5, 81, 0, 0, 6511, 6517, 3, 774, 387, 0, 6512, 6513, 5, 2, 0, 0, 6513, 6514, 3, 774, 387, 0, 6514, 6515, 5, 3, 0, 0, 6515, 6517, 1, 0, 0, 0, 6516, 6511, 1, 0, 0, 0, 6516, 6512, 1, 0, 0, 0, 6517, 6526, 1, 0, 0, 0, 6518, 6519, 5, 350, 0, 0, 6519, 6520, 5, 68, 0, 0, 6520, 6523, 5, 323, 0, 0, 6521, 6524, 3, 790, 395, 0, 6522, 6524, 5, 111, 0, 0, 6523, 6521, 1, 0, 0, 0, 6523, 6522, 1, 0, 0, 0, 6524, 6526, 1, 0, 0, 0, 6525, 6501, 1, 0, 0, 0, 6525, 6509, 1, 0, 0, 0, 6525, 6518, 1, 0, 0, 0, 6526, 627, 1, 0, 0, 0, 6527, 6532, 3, 624, 312, 0, 6528, 6529, 5, 6, 0, 0, 6529, 6531, 3, 624, 312, 0, 6530, 6528, 1, 0, 0, 0, 6531, 6534, 1, 0, 0, 0, 6532, 6530, 1, 0, 0, 0, 6532, 6533, 1, 0, 0, 0, 6533, 629, 1, 0, 0, 0, 6534, 6532, 1, 0, 0, 0, 6535, 6540, 3, 624, 312, 0, 6536, 6538, 5, 36, 0, 0, 6537, 6536, 1, 0, 0, 0, 6537, 6538, 1, 0, 0, 0, 6538, 6539, 1, 0, 0, 0, 6539, 6541, 3, 818, 409, 0, 6540, 6537, 1, 0, 0, 0, 6540, 6541, 1, 0, 0, 0, 6541, 631, 1, 0, 0, 0, 6542, 6543, 5, 472, 0, 0, 6543, 6544, 3, 806, 403, 0, 6544, 6550, 3, 534, 267, 0, 6545, 6546, 5, 310, 0, 0, 6546, 6547, 5, 2, 0, 0, 6547, 6548, 3, 674, 337, 0, 6548, 6549, 5, 3, 0, 0, 6549, 6551, 1, 0, 0, 0, 6550, 6545, 1, 0, 0, 0, 6550, 6551, 1, 0, 0, 0, 6551, 633, 1, 0, 0, 0, 6552, 6567, 3, 688, 344, 0, 6553, 6554, 5, 320, 0, 0, 6554, 6555, 5, 64, 0, 0, 6555, 6556, 5, 2, 0, 0, 6556, 6561, 3, 636, 318, 0, 6557, 6558, 5, 6, 0, 0, 6558, 6560, 3, 636, 318, 0, 6559, 6557, 1, 0, 0, 0, 6560, 6563, 1, 0, 0, 0, 6561, 6559, 1, 0, 0, 0, 6561, 6562, 1, 0, 0, 0, 6562, 6564, 1, 0, 0, 0, 6563, 6561, 1, 0, 0, 0, 6564, 6565, 5, 3, 0, 0, 6565, 6567, 1, 0, 0, 0, 6566, 6552, 1, 0, 0, 0, 6566, 6553, 1, 0, 0, 0, 6567, 6570, 1, 0, 0, 0, 6568, 6569, 5, 105, 0, 0, 6569, 6571, 5, 473, 0, 0, 6570, 6568, 1, 0, 0, 0, 6570, 6571, 1, 0, 0, 0, 6571, 635, 1, 0, 0, 0, 6572, 6578, 3, 688, 344, 0, 6573, 6574, 5, 36, 0, 0, 6574, 6575, 5, 2, 0, 0, 6575, 6576, 3, 642, 321, 0, 6576, 6577, 5, 3, 0, 0, 6577, 6579, 1, 0, 0, 0, 6578, 6573, 1, 0, 0, 0, 6578, 6579, 1, 0, 0, 0, 6579, 637, 1, 0, 0, 0, 6580, 6581, 5, 103, 0, 0, 6581, 6582, 3, 734, 367, 0, 6582, 639, 1, 0, 0, 0, 6583, 6588, 5, 103, 0, 0, 6584, 6585, 5, 434, 0, 0, 6585, 6586, 5, 275, 0, 0, 6586, 6589, 3, 818, 409, 0, 6587, 6589, 3, 674, 337, 0, 6588, 6584, 1, 0, 0, 0, 6588, 6587, 1, 0, 0, 0, 6589, 641, 1, 0, 0, 0, 6590, 6595, 3, 644, 322, 0, 6591, 6592, 5, 6, 0, 0, 6592, 6594, 3, 644, 322, 0, 6593, 6591, 1, 0, 0, 0, 6594, 6597, 1, 0, 0, 0, 6595, 6593, 1, 0, 0, 0, 6595, 6596, 1, 0, 0, 0, 6596, 643, 1, 0, 0, 0, 6597, 6595, 1, 0, 0, 0, 6598, 6599, 3, 818, 409, 0, 6599, 6601, 3, 652, 326, 0, 6600, 6602, 3, 98, 49, 0, 6601, 6600, 1, 0, 0, 0, 6601, 6602, 1, 0, 0, 0, 6602, 645, 1, 0, 0, 0, 6603, 6604, 5, 474, 0, 0, 6604, 6618, 5, 2, 0, 0, 6605, 6606, 5, 476, 0, 0, 6606, 6607, 5, 2, 0, 0, 6607, 6612, 3, 650, 325, 0, 6608, 6609, 5, 6, 0, 0, 6609, 6611, 3, 650, 325, 0, 6610, 6608, 1, 0, 0, 0, 6611, 6614, 1, 0, 0, 0, 6612, 6610, 1, 0, 0, 0, 6612, 6613, 1, 0, 0, 0, 6613, 6615, 1, 0, 0, 0, 6614, 6612, 1, 0, 0, 0, 6615, 6616, 5, 3, 0, 0, 6616, 6617, 5, 6, 0, 0, 6617, 6619, 1, 0, 0, 0, 6618, 6605, 1, 0, 0, 0, 6618, 6619, 1, 0, 0, 0, 6619, 6620, 1, 0, 0, 0, 6620, 6621, 3, 682, 341, 0, 6621, 6622, 3, 698, 349, 0, 6622, 6623, 5, 475, 0, 0, 6623, 6628, 3, 648, 324, 0, 6624, 6625, 5, 6, 0, 0, 6625, 6627, 3, 648, 324, 0, 6626, 6624, 1, 0, 0, 0, 6627, 6630, 1, 0, 0, 0, 6628, 6626, 1, 0, 0, 0, 6628, 6629, 1, 0, 0, 0, 6629, 6631, 1, 0, 0, 0, 6630, 6628, 1, 0, 0, 0, 6631, 6632, 5, 3, 0, 0, 6632, 647, 1, 0, 0, 0, 6633, 6652, 3, 818, 409, 0, 6634, 6648, 3, 652, 326, 0, 6635, 6638, 5, 53, 0, 0, 6636, 6638, 3, 826, 413, 0, 6637, 6635, 1, 0, 0, 0, 6637, 6636, 1, 0, 0, 0, 6638, 6639, 1, 0, 0, 0, 6639, 6645, 3, 674, 337, 0, 6640, 6642, 5, 77, 0, 0, 6641, 6640, 1, 0, 0, 0, 6641, 6642, 1, 0, 0, 0, 6642, 6643, 1, 0, 0, 0, 6643, 6645, 5, 78, 0, 0, 6644, 6637, 1, 0, 0, 0, 6644, 6641, 1, 0, 0, 0, 6645, 6646, 1, 0, 0, 0, 6646, 6644, 1, 0, 0, 0, 6646, 6647, 1, 0, 0, 0, 6647, 6649, 1, 0, 0, 0, 6648, 6644, 1, 0, 0, 0, 6648, 6649, 1, 0, 0, 0, 6649, 6653, 1, 0, 0, 0, 6650, 6651, 5, 62, 0, 0, 6651, 6653, 5, 473, 0, 0, 6652, 6634, 1, 0, 0, 0, 6652, 6650, 1, 0, 0, 0, 6653, 649, 1, 0, 0, 0, 6654, 6655, 3, 682, 341, 0, 6655, 6656, 5, 36, 0, 0, 6656, 6657, 3, 824, 412, 0, 6657, 6661, 1, 0, 0, 0, 6658, 6659, 5, 53, 0, 0, 6659, 6661, 3, 682, 341, 0, 6660, 6654, 1, 0, 0, 0, 6660, 6658, 1, 0, 0, 0, 6661, 651, 1, 0, 0, 0, 6662, 6664, 5, 415, 0, 0, 6663, 6662, 1, 0, 0, 0, 6663, 6664, 1, 0, 0, 0, 6664, 6665, 1, 0, 0, 0, 6665, 6682, 3, 654, 327, 0, 6666, 6668, 5, 4, 0, 0, 6667, 6669, 5, 571, 0, 0, 6668, 6667, 1, 0, 0, 0, 6668, 6669, 1, 0, 0, 0, 6669, 6670, 1, 0, 0, 0, 6670, 6672, 5, 5, 0, 0, 6671, 6666, 1, 0, 0, 0, 6672, 6675, 1, 0, 0, 0, 6673, 6671, 1, 0, 0, 0, 6673, 6674, 1, 0, 0, 0, 6674, 6683, 1, 0, 0, 0, 6675, 6673, 1, 0, 0, 0, 6676, 6680, 5, 35, 0, 0, 6677, 6678, 5, 4, 0, 0, 6678, 6679, 5, 571, 0, 0, 6679, 6681, 5, 5, 0, 0, 6680, 6677, 1, 0, 0, 0, 6680, 6681, 1, 0, 0, 0, 6681, 6683, 1, 0, 0, 0, 6682, 6673, 1, 0, 0, 0, 6682, 6676, 1, 0, 0, 0, 6683, 6689, 1, 0, 0, 0, 6684, 6685, 3, 780, 390, 0, 6685, 6686, 5, 27, 0, 0, 6686, 6687, 7, 87, 0, 0, 6687, 6689, 1, 0, 0, 0, 6688, 6663, 1, 0, 0, 0, 6688, 6684, 1, 0, 0, 0, 6689, 653, 1, 0, 0, 0, 6690, 6692, 3, 820, 410, 0, 6691, 6693, 3, 318, 159, 0, 6692, 6691, 1, 0, 0, 0, 6692, 6693, 1, 0, 0, 0, 6693, 6695, 1, 0, 0, 0, 6694, 6696, 3, 534, 267, 0, 6695, 6694, 1, 0, 0, 0, 6695, 6696, 1, 0, 0, 0, 6696, 6706, 1, 0, 0, 0, 6697, 6706, 3, 656, 328, 0, 6698, 6703, 5, 403, 0, 0, 6699, 6701, 3, 668, 334, 0, 6700, 6699, 1, 0, 0, 0, 6700, 6701, 1, 0, 0, 0, 6701, 6704, 1, 0, 0, 0, 6702, 6704, 3, 660, 330, 0, 6703, 6700, 1, 0, 0, 0, 6703, 6702, 1, 0, 0, 0, 6704, 6706, 1, 0, 0, 0, 6705, 6690, 1, 0, 0, 0, 6705, 6697, 1, 0, 0, 0, 6705, 6698, 1, 0, 0, 0, 6706, 655, 1, 0, 0, 0, 6707, 6712, 3, 658, 329, 0, 6708, 6712, 3, 662, 331, 0, 6709, 6712, 3, 664, 332, 0, 6710, 6712, 3, 666, 333, 0, 6711, 6707, 1, 0, 0, 0, 6711, 6708, 1, 0, 0, 0, 6711, 6709, 1, 0, 0, 0, 6711, 6710, 1, 0, 0, 0, 6712, 657, 1, 0, 0, 0, 6713, 6730, 5, 401, 0, 0, 6714, 6730, 5, 402, 0, 0, 6715, 6730, 5, 416, 0, 0, 6716, 6730, 5, 388, 0, 0, 6717, 6730, 5, 413, 0, 0, 6718, 6720, 5, 398, 0, 0, 6719, 6721, 3, 660, 330, 0, 6720, 6719, 1, 0, 0, 0, 6720, 6721, 1, 0, 0, 0, 6721, 6730, 1, 0, 0, 0, 6722, 6723, 5, 190, 0, 0, 6723, 6730, 5, 412, 0, 0, 6724, 6726, 7, 88, 0, 0, 6725, 6727, 3, 534, 267, 0, 6726, 6725, 1, 0, 0, 0, 6726, 6727, 1, 0, 0, 0, 6727, 6730, 1, 0, 0, 0, 6728, 6730, 5, 390, 0, 0, 6729, 6713, 1, 0, 0, 0, 6729, 6714, 1, 0, 0, 0, 6729, 6715, 1, 0, 0, 0, 6729, 6716, 1, 0, 0, 0, 6729, 6717, 1, 0, 0, 0, 6729, 6718, 1, 0, 0, 0, 6729, 6722, 1, 0, 0, 0, 6729, 6724, 1, 0, 0, 0, 6729, 6728, 1, 0, 0, 0, 6730, 659, 1, 0, 0, 0, 6731, 6732, 5, 2, 0, 0, 6732, 6733, 5, 571, 0, 0, 6733, 6734, 5, 3, 0, 0, 6734, 661, 1, 0, 0, 0, 6735, 6737, 5, 389, 0, 0, 6736, 6738, 5, 374, 0, 0, 6737, 6736, 1, 0, 0, 0, 6737, 6738, 1, 0, 0, 0, 6738, 6740, 1, 0, 0, 0, 6739, 6741, 3, 534, 267, 0, 6740, 6739, 1, 0, 0, 0, 6740, 6741, 1, 0, 0, 0, 6741, 663, 1, 0, 0, 0, 6742, 6744, 7, 89, 0, 0, 6743, 6745, 5, 374, 0, 0, 6744, 6743, 1, 0, 0, 0, 6744, 6745, 1, 0, 0, 0, 6745, 6753, 1, 0, 0, 0, 6746, 6753, 5, 423, 0, 0, 6747, 6748, 5, 405, 0, 0, 6748, 6750, 7, 90, 0, 0, 6749, 6751, 5, 374, 0, 0, 6750, 6749, 1, 0, 0, 0, 6750, 6751, 1, 0, 0, 0, 6751, 6753, 1, 0, 0, 0, 6752, 6742, 1, 0, 0, 0, 6752, 6746, 1, 0, 0, 0, 6752, 6747, 1, 0, 0, 0, 6753, 6755, 1, 0, 0, 0, 6754, 6756, 3, 660, 330, 0, 6755, 6754, 1, 0, 0, 0, 6755, 6756, 1, 0, 0, 0, 6756, 665, 1, 0, 0, 0, 6757, 6759, 7, 91, 0, 0, 6758, 6760, 3, 660, 330, 0, 6759, 6758, 1, 0, 0, 0, 6759, 6760, 1, 0, 0, 0, 6760, 6764, 1, 0, 0, 0, 6761, 6762, 7, 26, 0, 0, 6762, 6763, 5, 418, 0, 0, 6763, 6765, 5, 386, 0, 0, 6764, 6761, 1, 0, 0, 0, 6764, 6765, 1, 0, 0, 0, 6765, 667, 1, 0, 0, 0, 6766, 6796, 5, 264, 0, 0, 6767, 6796, 3, 670, 335, 0, 6768, 6771, 5, 384, 0, 0, 6769, 6770, 5, 94, 0, 0, 6770, 6772, 5, 264, 0, 0, 6771, 6769, 1, 0, 0, 0, 6771, 6772, 1, 0, 0, 0, 6772, 6796, 1, 0, 0, 0, 6773, 6780, 5, 176, 0, 0, 6774, 6778, 5, 94, 0, 0, 6775, 6779, 5, 218, 0, 0, 6776, 6779, 5, 261, 0, 0, 6777, 6779, 3, 670, 335, 0, 6778, 6775, 1, 0, 0, 0, 6778, 6776, 1, 0, 0, 0, 6778, 6777, 1, 0, 0, 0, 6779, 6781, 1, 0, 0, 0, 6780, 6774, 1, 0, 0, 0, 6780, 6781, 1, 0, 0, 0, 6781, 6796, 1, 0, 0, 0, 6782, 6788, 5, 218, 0, 0, 6783, 6786, 5, 94, 0, 0, 6784, 6787, 5, 261, 0, 0, 6785, 6787, 3, 670, 335, 0, 6786, 6784, 1, 0, 0, 0, 6786, 6785, 1, 0, 0, 0, 6787, 6789, 1, 0, 0, 0, 6788, 6783, 1, 0, 0, 0, 6788, 6789, 1, 0, 0, 0, 6789, 6796, 1, 0, 0, 0, 6790, 6793, 5, 261, 0, 0, 6791, 6792, 5, 94, 0, 0, 6792, 6794, 3, 670, 335, 0, 6793, 6791, 1, 0, 0, 0, 6793, 6794, 1, 0, 0, 0, 6794, 6796, 1, 0, 0, 0, 6795, 6766, 1, 0, 0, 0, 6795, 6767, 1, 0, 0, 0, 6795, 6768, 1, 0, 0, 0, 6795, 6773, 1, 0, 0, 0, 6795, 6782, 1, 0, 0, 0, 6795, 6790, 1, 0, 0, 0, 6796, 669, 1, 0, 0, 0, 6797, 6799, 5, 326, 0, 0, 6798, 6800, 3, 660, 330, 0, 6799, 6798, 1, 0, 0, 0, 6799, 6800, 1, 0, 0, 0, 6800, 671, 1, 0, 0, 0, 6801, 6802, 7, 92, 0, 0, 6802, 673, 1, 0, 0, 0, 6803, 6804, 3, 676, 338, 0, 6804, 675, 1, 0, 0, 0, 6805, 6806, 6, 338, -1, 0, 6806, 6808, 3, 680, 340, 0, 6807, 6809, 3, 678, 339, 0, 6808, 6807, 1, 0, 0, 0, 6808, 6809, 1, 0, 0, 0, 6809, 6813, 1, 0, 0, 0, 6810, 6811, 5, 77, 0, 0, 6811, 6813, 3, 676, 338, 3, 6812, 6805, 1, 0, 0, 0, 6812, 6810, 1, 0, 0, 0, 6813, 6822, 1, 0, 0, 0, 6814, 6815, 10, 2, 0, 0, 6815, 6816, 5, 33, 0, 0, 6816, 6821, 3, 676, 338, 3, 6817, 6818, 10, 1, 0, 0, 6818, 6819, 5, 82, 0, 0, 6819, 6821, 3, 676, 338, 2, 6820, 6814, 1, 0, 0, 0, 6820, 6817, 1, 0, 0, 0, 6821, 6824, 1, 0, 0, 0, 6822, 6820, 1, 0, 0, 0, 6822, 6823, 1, 0, 0, 0, 6823, 677, 1, 0, 0, 0, 6824, 6822, 1, 0, 0, 0, 6825, 6826, 3, 672, 336, 0, 6826, 6827, 3, 680, 340, 0, 6827, 6897, 1, 0, 0, 0, 6828, 6829, 3, 672, 336, 0, 6829, 6830, 3, 728, 364, 0, 6830, 6836, 3, 718, 359, 0, 6831, 6837, 3, 562, 281, 0, 6832, 6833, 5, 2, 0, 0, 6833, 6834, 3, 674, 337, 0, 6834, 6835, 5, 3, 0, 0, 6835, 6837, 1, 0, 0, 0, 6836, 6831, 1, 0, 0, 0, 6836, 6832, 1, 0, 0, 0, 6837, 6897, 1, 0, 0, 0, 6838, 6840, 5, 77, 0, 0, 6839, 6838, 1, 0, 0, 0, 6839, 6840, 1, 0, 0, 0, 6840, 6841, 1, 0, 0, 0, 6841, 6842, 5, 387, 0, 0, 6842, 6843, 3, 680, 340, 0, 6843, 6844, 5, 33, 0, 0, 6844, 6845, 3, 680, 340, 0, 6845, 6897, 1, 0, 0, 0, 6846, 6848, 5, 77, 0, 0, 6847, 6846, 1, 0, 0, 0, 6847, 6848, 1, 0, 0, 0, 6848, 6849, 1, 0, 0, 0, 6849, 6850, 5, 68, 0, 0, 6850, 6851, 5, 2, 0, 0, 6851, 6856, 3, 674, 337, 0, 6852, 6853, 5, 6, 0, 0, 6853, 6855, 3, 674, 337, 0, 6854, 6852, 1, 0, 0, 0, 6855, 6858, 1, 0, 0, 0, 6856, 6854, 1, 0, 0, 0, 6856, 6857, 1, 0, 0, 0, 6857, 6859, 1, 0, 0, 0, 6858, 6856, 1, 0, 0, 0, 6859, 6860, 5, 3, 0, 0, 6860, 6897, 1, 0, 0, 0, 6861, 6863, 5, 77, 0, 0, 6862, 6861, 1, 0, 0, 0, 6862, 6863, 1, 0, 0, 0, 6863, 6864, 1, 0, 0, 0, 6864, 6865, 5, 68, 0, 0, 6865, 6897, 3, 562, 281, 0, 6866, 6868, 5, 77, 0, 0, 6867, 6866, 1, 0, 0, 0, 6867, 6868, 1, 0, 0, 0, 6868, 6877, 1, 0, 0, 0, 6869, 6878, 5, 120, 0, 0, 6870, 6878, 5, 114, 0, 0, 6871, 6872, 5, 127, 0, 0, 6872, 6878, 5, 94, 0, 0, 6873, 6875, 5, 387, 0, 0, 6874, 6876, 5, 91, 0, 0, 6875, 6874, 1, 0, 0, 0, 6875, 6876, 1, 0, 0, 0, 6876, 6878, 1, 0, 0, 0, 6877, 6869, 1, 0, 0, 0, 6877, 6870, 1, 0, 0, 0, 6877, 6871, 1, 0, 0, 0, 6877, 6873, 1, 0, 0, 0, 6878, 6879, 1, 0, 0, 0, 6879, 6882, 3, 680, 340, 0, 6880, 6881, 5, 197, 0, 0, 6881, 6883, 3, 680, 340, 0, 6882, 6880, 1, 0, 0, 0, 6882, 6883, 1, 0, 0, 0, 6883, 6897, 1, 0, 0, 0, 6884, 6886, 5, 116, 0, 0, 6885, 6887, 5, 77, 0, 0, 6886, 6885, 1, 0, 0, 0, 6886, 6887, 1, 0, 0, 0, 6887, 6888, 1, 0, 0, 0, 6888, 6897, 5, 78, 0, 0, 6889, 6891, 5, 116, 0, 0, 6890, 6892, 5, 77, 0, 0, 6891, 6890, 1, 0, 0, 0, 6891, 6892, 1, 0, 0, 0, 6892, 6893, 1, 0, 0, 0, 6893, 6894, 5, 56, 0, 0, 6894, 6895, 5, 64, 0, 0, 6895, 6897, 3, 680, 340, 0, 6896, 6825, 1, 0, 0, 0, 6896, 6828, 1, 0, 0, 0, 6896, 6839, 1, 0, 0, 0, 6896, 6847, 1, 0, 0, 0, 6896, 6862, 1, 0, 0, 0, 6896, 6867, 1, 0, 0, 0, 6896, 6884, 1, 0, 0, 0, 6896, 6889, 1, 0, 0, 0, 6897, 679, 1, 0, 0, 0, 6898, 6899, 6, 340, -1, 0, 6899, 6903, 3, 682, 341, 0, 6900, 6901, 7, 29, 0, 0, 6901, 6903, 3, 680, 340, 4, 6902, 6898, 1, 0, 0, 0, 6902, 6900, 1, 0, 0, 0, 6903, 6920, 1, 0, 0, 0, 6904, 6905, 10, 3, 0, 0, 6905, 6906, 7, 93, 0, 0, 6906, 6919, 3, 680, 340, 4, 6907, 6908, 10, 2, 0, 0, 6908, 6909, 7, 29, 0, 0, 6909, 6919, 3, 680, 340, 3, 6910, 6911, 10, 1, 0, 0, 6911, 6912, 5, 15, 0, 0, 6912, 6919, 3, 680, 340, 2, 6913, 6914, 10, 5, 0, 0, 6914, 6915, 5, 142, 0, 0, 6915, 6916, 5, 418, 0, 0, 6916, 6917, 5, 386, 0, 0, 6917, 6919, 3, 674, 337, 0, 6918, 6904, 1, 0, 0, 0, 6918, 6907, 1, 0, 0, 0, 6918, 6910, 1, 0, 0, 0, 6918, 6913, 1, 0, 0, 0, 6919, 6922, 1, 0, 0, 0, 6920, 6918, 1, 0, 0, 0, 6920, 6921, 1, 0, 0, 0, 6921, 681, 1, 0, 0, 0, 6922, 6920, 1, 0, 0, 0, 6923, 6924, 6, 341, -1, 0, 6924, 6925, 7, 94, 0, 0, 6925, 7012, 3, 562, 281, 0, 6926, 6929, 5, 35, 0, 0, 6927, 6930, 3, 562, 281, 0, 6928, 6930, 3, 740, 370, 0, 6929, 6927, 1, 0, 0, 0, 6929, 6928, 1, 0, 0, 0, 6930, 7012, 1, 0, 0, 0, 6931, 6932, 5, 28, 0, 0, 6932, 7012, 3, 754, 377, 0, 6933, 6934, 5, 470, 0, 0, 6934, 7012, 3, 534, 267, 0, 6935, 7012, 5, 571, 0, 0, 6936, 7012, 5, 573, 0, 0, 6937, 7012, 5, 563, 0, 0, 6938, 7012, 5, 567, 0, 0, 6939, 6949, 3, 806, 403, 0, 6940, 6950, 3, 808, 404, 0, 6941, 6942, 5, 2, 0, 0, 6942, 6944, 3, 736, 368, 0, 6943, 6945, 3, 586, 293, 0, 6944, 6943, 1, 0, 0, 0, 6944, 6945, 1, 0, 0, 0, 6945, 6946, 1, 0, 0, 0, 6946, 6947, 5, 3, 0, 0, 6947, 6948, 3, 808, 404, 0, 6948, 6950, 1, 0, 0, 0, 6949, 6940, 1, 0, 0, 0, 6949, 6941, 1, 0, 0, 0, 6950, 7012, 1, 0, 0, 0, 6951, 6953, 3, 656, 328, 0, 6952, 6951, 1, 0, 0, 0, 6952, 6953, 1, 0, 0, 0, 6953, 6954, 1, 0, 0, 0, 6954, 7012, 3, 808, 404, 0, 6955, 6963, 5, 403, 0, 0, 6956, 6958, 3, 808, 404, 0, 6957, 6959, 3, 668, 334, 0, 6958, 6957, 1, 0, 0, 0, 6958, 6959, 1, 0, 0, 0, 6959, 6964, 1, 0, 0, 0, 6960, 6961, 3, 660, 330, 0, 6961, 6962, 3, 808, 404, 0, 6962, 6964, 1, 0, 0, 0, 6963, 6956, 1, 0, 0, 0, 6963, 6960, 1, 0, 0, 0, 6964, 7012, 1, 0, 0, 0, 6965, 7012, 5, 96, 0, 0, 6966, 7012, 5, 60, 0, 0, 6967, 7012, 5, 78, 0, 0, 6968, 7012, 5, 574, 0, 0, 6969, 6970, 5, 2, 0, 0, 6970, 6971, 3, 674, 337, 0, 6971, 6972, 5, 3, 0, 0, 6972, 6973, 3, 754, 377, 0, 6973, 7012, 1, 0, 0, 0, 6974, 6976, 5, 40, 0, 0, 6975, 6977, 3, 674, 337, 0, 6976, 6975, 1, 0, 0, 0, 6976, 6977, 1, 0, 0, 0, 6977, 6979, 1, 0, 0, 0, 6978, 6980, 3, 748, 374, 0, 6979, 6978, 1, 0, 0, 0, 6980, 6981, 1, 0, 0, 0, 6981, 6979, 1, 0, 0, 0, 6981, 6982, 1, 0, 0, 0, 6982, 6985, 1, 0, 0, 0, 6983, 6984, 5, 58, 0, 0, 6984, 6986, 3, 674, 337, 0, 6985, 6983, 1, 0, 0, 0, 6985, 6986, 1, 0, 0, 0, 6986, 6987, 1, 0, 0, 0, 6987, 6988, 5, 454, 0, 0, 6988, 7012, 1, 0, 0, 0, 6989, 7012, 3, 686, 343, 0, 6990, 6992, 3, 562, 281, 0, 6991, 6993, 3, 752, 376, 0, 6992, 6991, 1, 0, 0, 0, 6992, 6993, 1, 0, 0, 0, 6993, 7012, 1, 0, 0, 0, 6994, 7012, 3, 716, 358, 0, 6995, 6996, 5, 2, 0, 0, 6996, 6997, 3, 674, 337, 0, 6997, 6998, 5, 6, 0, 0, 6998, 6999, 3, 730, 365, 0, 6999, 7000, 5, 3, 0, 0, 7000, 7012, 1, 0, 0, 0, 7001, 7002, 3, 714, 357, 0, 7002, 7003, 5, 125, 0, 0, 7003, 7004, 3, 714, 357, 0, 7004, 7012, 1, 0, 0, 0, 7005, 7012, 3, 780, 390, 0, 7006, 7007, 7, 29, 0, 0, 7007, 7012, 3, 682, 341, 5, 7008, 7009, 3, 724, 362, 0, 7009, 7010, 3, 682, 341, 2, 7010, 7012, 1, 0, 0, 0, 7011, 6923, 1, 0, 0, 0, 7011, 6926, 1, 0, 0, 0, 7011, 6931, 1, 0, 0, 0, 7011, 6933, 1, 0, 0, 0, 7011, 6935, 1, 0, 0, 0, 7011, 6936, 1, 0, 0, 0, 7011, 6937, 1, 0, 0, 0, 7011, 6938, 1, 0, 0, 0, 7011, 6939, 1, 0, 0, 0, 7011, 6952, 1, 0, 0, 0, 7011, 6955, 1, 0, 0, 0, 7011, 6965, 1, 0, 0, 0, 7011, 6966, 1, 0, 0, 0, 7011, 6967, 1, 0, 0, 0, 7011, 6968, 1, 0, 0, 0, 7011, 6969, 1, 0, 0, 0, 7011, 6974, 1, 0, 0, 0, 7011, 6989, 1, 0, 0, 0, 7011, 6990, 1, 0, 0, 0, 7011, 6994, 1, 0, 0, 0, 7011, 6995, 1, 0, 0, 0, 7011, 7001, 1, 0, 0, 0, 7011, 7005, 1, 0, 0, 0, 7011, 7006, 1, 0, 0, 0, 7011, 7008, 1, 0, 0, 0, 7012, 7040, 1, 0, 0, 0, 7013, 7014, 10, 3, 0, 0, 7014, 7015, 3, 722, 361, 0, 7015, 7016, 3, 682, 341, 4, 7016, 7039, 1, 0, 0, 0, 7017, 7018, 10, 6, 0, 0, 7018, 7019, 5, 26, 0, 0, 7019, 7039, 3, 652, 326, 0, 7020, 7021, 10, 4, 0, 0, 7021, 7023, 3, 724, 362, 0, 7022, 7024, 3, 682, 341, 0, 7023, 7022, 1, 0, 0, 0, 7023, 7024, 1, 0, 0, 0, 7024, 7039, 1, 0, 0, 0, 7025, 7026, 10, 1, 0, 0, 7026, 7028, 5, 116, 0, 0, 7027, 7029, 5, 77, 0, 0, 7028, 7027, 1, 0, 0, 0, 7028, 7029, 1, 0, 0, 0, 7029, 7036, 1, 0, 0, 0, 7030, 7031, 5, 56, 0, 0, 7031, 7032, 5, 64, 0, 0, 7032, 7037, 3, 682, 341, 0, 7033, 7034, 5, 275, 0, 0, 7034, 7037, 3, 528, 264, 0, 7035, 7037, 5, 188, 0, 0, 7036, 7030, 1, 0, 0, 0, 7036, 7033, 1, 0, 0, 0, 7036, 7035, 1, 0, 0, 0, 7037, 7039, 1, 0, 0, 0, 7038, 7013, 1, 0, 0, 0, 7038, 7017, 1, 0, 0, 0, 7038, 7020, 1, 0, 0, 0, 7038, 7025, 1, 0, 0, 0, 7039, 7042, 1, 0, 0, 0, 7040, 7038, 1, 0, 0, 0, 7040, 7041, 1, 0, 0, 0, 7041, 683, 1, 0, 0, 0, 7042, 7040, 1, 0, 0, 0, 7043, 7044, 3, 806, 403, 0, 7044, 7065, 5, 2, 0, 0, 7045, 7049, 3, 736, 368, 0, 7046, 7047, 5, 6, 0, 0, 7047, 7048, 5, 101, 0, 0, 7048, 7050, 3, 738, 369, 0, 7049, 7046, 1, 0, 0, 0, 7049, 7050, 1, 0, 0, 0, 7050, 7052, 1, 0, 0, 0, 7051, 7053, 3, 586, 293, 0, 7052, 7051, 1, 0, 0, 0, 7052, 7053, 1, 0, 0, 0, 7053, 7066, 1, 0, 0, 0, 7054, 7055, 5, 101, 0, 0, 7055, 7057, 3, 738, 369, 0, 7056, 7058, 3, 586, 293, 0, 7057, 7056, 1, 0, 0, 0, 7057, 7058, 1, 0, 0, 0, 7058, 7066, 1, 0, 0, 0, 7059, 7060, 7, 80, 0, 0, 7060, 7062, 3, 736, 368, 0, 7061, 7063, 3, 586, 293, 0, 7062, 7061, 1, 0, 0, 0, 7062, 7063, 1, 0, 0, 0, 7063, 7066, 1, 0, 0, 0, 7064, 7066, 5, 9, 0, 0, 7065, 7045, 1, 0, 0, 0, 7065, 7054, 1, 0, 0, 0, 7065, 7059, 1, 0, 0, 0, 7065, 7064, 1, 0, 0, 0, 7065, 7066, 1, 0, 0, 0, 7066, 7067, 1, 0, 0, 0, 7067, 7068, 5, 3, 0, 0, 7068, 685, 1, 0, 0, 0, 7069, 7076, 3, 684, 342, 0, 7070, 7071, 5, 479, 0, 0, 7071, 7072, 5, 66, 0, 0, 7072, 7073, 5, 2, 0, 0, 7073, 7074, 3, 586, 293, 0, 7074, 7075, 5, 3, 0, 0, 7075, 7077, 1, 0, 0, 0, 7076, 7070, 1, 0, 0, 0, 7076, 7077, 1, 0, 0, 0, 7077, 7084, 1, 0, 0, 0, 7078, 7079, 5, 480, 0, 0, 7079, 7080, 5, 2, 0, 0, 7080, 7081, 5, 103, 0, 0, 7081, 7082, 3, 674, 337, 0, 7082, 7083, 5, 3, 0, 0, 7083, 7085, 1, 0, 0, 0, 7084, 7078, 1, 0, 0, 0, 7084, 7085, 1, 0, 0, 0, 7085, 7091, 1, 0, 0, 0, 7086, 7089, 5, 124, 0, 0, 7087, 7090, 3, 708, 354, 0, 7088, 7090, 3, 818, 409, 0, 7089, 7087, 1, 0, 0, 0, 7089, 7088, 1, 0, 0, 0, 7090, 7092, 1, 0, 0, 0, 7091, 7086, 1, 0, 0, 0, 7091, 7092, 1, 0, 0, 0, 7092, 7095, 1, 0, 0, 0, 7093, 7095, 3, 690, 345, 0, 7094, 7069, 1, 0, 0, 0, 7094, 7093, 1, 0, 0, 0, 7095, 687, 1, 0, 0, 0, 7096, 7099, 3, 684, 342, 0, 7097, 7099, 3, 690, 345, 0, 7098, 7096, 1, 0, 0, 0, 7098, 7097, 1, 0, 0, 0, 7099, 689, 1, 0, 0, 0, 7100, 7101, 5, 108, 0, 0, 7101, 7102, 5, 62, 0, 0, 7102, 7103, 5, 2, 0, 0, 7103, 7104, 3, 674, 337, 0, 7104, 7105, 5, 3, 0, 0, 7105, 7275, 1, 0, 0, 0, 7106, 7275, 5, 48, 0, 0, 7107, 7109, 7, 95, 0, 0, 7108, 7110, 3, 660, 330, 0, 7109, 7108, 1, 0, 0, 0, 7109, 7110, 1, 0, 0, 0, 7110, 7275, 1, 0, 0, 0, 7111, 7275, 5, 49, 0, 0, 7112, 7275, 5, 52, 0, 0, 7113, 7275, 5, 89, 0, 0, 7114, 7275, 5, 99, 0, 0, 7115, 7275, 5, 47, 0, 0, 7116, 7275, 5, 111, 0, 0, 7117, 7118, 7, 96, 0, 0, 7118, 7119, 5, 2, 0, 0, 7119, 7120, 3, 674, 337, 0, 7120, 7121, 5, 36, 0, 0, 7121, 7122, 3, 652, 326, 0, 7122, 7123, 5, 3, 0, 0, 7123, 7275, 1, 0, 0, 0, 7124, 7125, 5, 397, 0, 0, 7125, 7130, 5, 2, 0, 0, 7126, 7127, 3, 742, 371, 0, 7127, 7128, 5, 64, 0, 0, 7128, 7129, 3, 674, 337, 0, 7129, 7131, 1, 0, 0, 0, 7130, 7126, 1, 0, 0, 0, 7130, 7131, 1, 0, 0, 0, 7131, 7132, 1, 0, 0, 0, 7132, 7275, 5, 3, 0, 0, 7133, 7134, 5, 489, 0, 0, 7134, 7135, 5, 2, 0, 0, 7135, 7138, 3, 674, 337, 0, 7136, 7137, 5, 6, 0, 0, 7137, 7139, 3, 744, 372, 0, 7138, 7136, 1, 0, 0, 0, 7138, 7139, 1, 0, 0, 0, 7139, 7140, 1, 0, 0, 0, 7140, 7141, 5, 3, 0, 0, 7141, 7275, 1, 0, 0, 0, 7142, 7143, 5, 410, 0, 0, 7143, 7144, 5, 2, 0, 0, 7144, 7145, 3, 674, 337, 0, 7145, 7146, 5, 84, 0, 0, 7146, 7147, 3, 674, 337, 0, 7147, 7148, 5, 64, 0, 0, 7148, 7151, 3, 674, 337, 0, 7149, 7150, 5, 62, 0, 0, 7150, 7152, 3, 674, 337, 0, 7151, 7149, 1, 0, 0, 0, 7151, 7152, 1, 0, 0, 0, 7152, 7153, 1, 0, 0, 0, 7153, 7154, 5, 3, 0, 0, 7154, 7275, 1, 0, 0, 0, 7155, 7156, 5, 411, 0, 0, 7156, 7161, 5, 2, 0, 0, 7157, 7158, 3, 682, 341, 0, 7158, 7159, 5, 68, 0, 0, 7159, 7160, 3, 682, 341, 0, 7160, 7162, 1, 0, 0, 0, 7161, 7157, 1, 0, 0, 0, 7161, 7162, 1, 0, 0, 0, 7162, 7163, 1, 0, 0, 0, 7163, 7275, 5, 3, 0, 0, 7164, 7165, 5, 417, 0, 0, 7165, 7167, 5, 2, 0, 0, 7166, 7168, 3, 746, 373, 0, 7167, 7166, 1, 0, 0, 0, 7167, 7168, 1, 0, 0, 0, 7168, 7169, 1, 0, 0, 0, 7169, 7275, 5, 3, 0, 0, 7170, 7171, 5, 421, 0, 0, 7171, 7173, 5, 2, 0, 0, 7172, 7174, 7, 97, 0, 0, 7173, 7172, 1, 0, 0, 0, 7173, 7174, 1, 0, 0, 0, 7174, 7179, 1, 0, 0, 0, 7175, 7177, 3, 674, 337, 0, 7176, 7175, 1, 0, 0, 0, 7176, 7177, 1, 0, 0, 0, 7177, 7178, 1, 0, 0, 0, 7178, 7180, 5, 64, 0, 0, 7179, 7176, 1, 0, 0, 0, 7179, 7180, 1, 0, 0, 0, 7180, 7181, 1, 0, 0, 0, 7181, 7182, 3, 730, 365, 0, 7182, 7183, 1, 0, 0, 0, 7183, 7184, 5, 3, 0, 0, 7184, 7275, 1, 0, 0, 0, 7185, 7186, 5, 408, 0, 0, 7186, 7187, 5, 2, 0, 0, 7187, 7188, 3, 674, 337, 0, 7188, 7189, 5, 6, 0, 0, 7189, 7190, 3, 674, 337, 0, 7190, 7191, 5, 3, 0, 0, 7191, 7275, 1, 0, 0, 0, 7192, 7193, 7, 98, 0, 0, 7193, 7275, 3, 534, 267, 0, 7194, 7195, 5, 426, 0, 0, 7195, 7196, 5, 2, 0, 0, 7196, 7197, 5, 266, 0, 0, 7197, 7207, 3, 824, 412, 0, 7198, 7205, 5, 6, 0, 0, 7199, 7200, 5, 424, 0, 0, 7200, 7201, 5, 2, 0, 0, 7201, 7202, 3, 692, 346, 0, 7202, 7203, 5, 3, 0, 0, 7203, 7206, 1, 0, 0, 0, 7204, 7206, 3, 730, 365, 0, 7205, 7199, 1, 0, 0, 0, 7205, 7204, 1, 0, 0, 0, 7206, 7208, 1, 0, 0, 0, 7207, 7198, 1, 0, 0, 0, 7207, 7208, 1, 0, 0, 0, 7208, 7209, 1, 0, 0, 0, 7209, 7210, 5, 3, 0, 0, 7210, 7275, 1, 0, 0, 0, 7211, 7212, 5, 427, 0, 0, 7212, 7213, 5, 2, 0, 0, 7213, 7214, 3, 682, 341, 0, 7214, 7215, 3, 698, 349, 0, 7215, 7216, 5, 3, 0, 0, 7216, 7275, 1, 0, 0, 0, 7217, 7218, 5, 428, 0, 0, 7218, 7219, 5, 2, 0, 0, 7219, 7220, 3, 692, 346, 0, 7220, 7221, 5, 3, 0, 0, 7221, 7275, 1, 0, 0, 0, 7222, 7223, 5, 429, 0, 0, 7223, 7224, 5, 2, 0, 0, 7224, 7225, 3, 696, 348, 0, 7225, 7228, 3, 674, 337, 0, 7226, 7227, 7, 99, 0, 0, 7227, 7229, 5, 378, 0, 0, 7228, 7226, 1, 0, 0, 0, 7228, 7229, 1, 0, 0, 0, 7229, 7230, 1, 0, 0, 0, 7230, 7231, 5, 3, 0, 0, 7231, 7275, 1, 0, 0, 0, 7232, 7233, 5, 430, 0, 0, 7233, 7234, 5, 2, 0, 0, 7234, 7235, 5, 266, 0, 0, 7235, 7238, 3, 824, 412, 0, 7236, 7237, 5, 6, 0, 0, 7237, 7239, 3, 674, 337, 0, 7238, 7236, 1, 0, 0, 0, 7238, 7239, 1, 0, 0, 0, 7239, 7240, 1, 0, 0, 0, 7240, 7241, 5, 3, 0, 0, 7241, 7275, 1, 0, 0, 0, 7242, 7243, 5, 431, 0, 0, 7243, 7244, 5, 2, 0, 0, 7244, 7245, 5, 383, 0, 0, 7245, 7246, 3, 674, 337, 0, 7246, 7247, 5, 6, 0, 0, 7247, 7251, 5, 375, 0, 0, 7248, 7249, 5, 269, 0, 0, 7249, 7252, 5, 450, 0, 0, 7250, 7252, 3, 674, 337, 0, 7251, 7248, 1, 0, 0, 0, 7251, 7250, 1, 0, 0, 0, 7252, 7262, 1, 0, 0, 0, 7253, 7254, 5, 6, 0, 0, 7254, 7260, 5, 339, 0, 0, 7255, 7257, 5, 269, 0, 0, 7256, 7255, 1, 0, 0, 0, 7256, 7257, 1, 0, 0, 0, 7257, 7258, 1, 0, 0, 0, 7258, 7261, 5, 450, 0, 0, 7259, 7261, 5, 385, 0, 0, 7260, 7256, 1, 0, 0, 0, 7260, 7259, 1, 0, 0, 0, 7261, 7263, 1, 0, 0, 0, 7262, 7253, 1, 0, 0, 0, 7262, 7263, 1, 0, 0, 0, 7263, 7264, 1, 0, 0, 0, 7264, 7265, 5, 3, 0, 0, 7265, 7275, 1, 0, 0, 0, 7266, 7267, 5, 432, 0, 0, 7267, 7268, 5, 2, 0, 0, 7268, 7269, 3, 696, 348, 0, 7269, 7270, 3, 674, 337, 0, 7270, 7271, 5, 36, 0, 0, 7271, 7272, 3, 654, 327, 0, 7272, 7273, 5, 3, 0, 0, 7273, 7275, 1, 0, 0, 0, 7274, 7100, 1, 0, 0, 0, 7274, 7106, 1, 0, 0, 0, 7274, 7107, 1, 0, 0, 0, 7274, 7111, 1, 0, 0, 0, 7274, 7112, 1, 0, 0, 0, 7274, 7113, 1, 0, 0, 0, 7274, 7114, 1, 0, 0, 0, 7274, 7115, 1, 0, 0, 0, 7274, 7116, 1, 0, 0, 0, 7274, 7117, 1, 0, 0, 0, 7274, 7124, 1, 0, 0, 0, 7274, 7133, 1, 0, 0, 0, 7274, 7142, 1, 0, 0, 0, 7274, 7155, 1, 0, 0, 0, 7274, 7164, 1, 0, 0, 0, 7274, 7170, 1, 0, 0, 0, 7274, 7185, 1, 0, 0, 0, 7274, 7192, 1, 0, 0, 0, 7274, 7194, 1, 0, 0, 0, 7274, 7211, 1, 0, 0, 0, 7274, 7217, 1, 0, 0, 0, 7274, 7222, 1, 0, 0, 0, 7274, 7232, 1, 0, 0, 0, 7274, 7242, 1, 0, 0, 0, 7274, 7266, 1, 0, 0, 0, 7275, 691, 1, 0, 0, 0, 7276, 7281, 3, 694, 347, 0, 7277, 7278, 5, 6, 0, 0, 7278, 7280, 3, 694, 347, 0, 7279, 7277, 1, 0, 0, 0, 7280, 7283, 1, 0, 0, 0, 7281, 7279, 1, 0, 0, 0, 7281, 7282, 1, 0, 0, 0, 7282, 693, 1, 0, 0, 0, 7283, 7281, 1, 0, 0, 0, 7284, 7287, 3, 674, 337, 0, 7285, 7286, 5, 36, 0, 0, 7286, 7288, 3, 824, 412, 0, 7287, 7285, 1, 0, 0, 0, 7287, 7288, 1, 0, 0, 0, 7288, 695, 1, 0, 0, 0, 7289, 7290, 7, 100, 0, 0, 7290, 697, 1, 0, 0, 0, 7291, 7293, 5, 286, 0, 0, 7292, 7294, 3, 700, 350, 0, 7293, 7292, 1, 0, 0, 0, 7293, 7294, 1, 0, 0, 0, 7294, 7295, 1, 0, 0, 0, 7295, 7297, 3, 682, 341, 0, 7296, 7298, 3, 700, 350, 0, 7297, 7296, 1, 0, 0, 0, 7297, 7298, 1, 0, 0, 0, 7298, 699, 1, 0, 0, 0, 7299, 7300, 5, 147, 0, 0, 7300, 7301, 7, 101, 0, 0, 7301, 701, 1, 0, 0, 0, 7302, 7303, 5, 104, 0, 0, 7303, 7308, 3, 704, 352, 0, 7304, 7305, 5, 6, 0, 0, 7305, 7307, 3, 704, 352, 0, 7306, 7304, 1, 0, 0, 0, 7307, 7310, 1, 0, 0, 0, 7308, 7306, 1, 0, 0, 0, 7308, 7309, 1, 0, 0, 0, 7309, 703, 1, 0, 0, 0, 7310, 7308, 1, 0, 0, 0, 7311, 7312, 3, 818, 409, 0, 7312, 7313, 5, 36, 0, 0, 7313, 7314, 3, 708, 354, 0, 7314, 705, 1, 0, 0, 0, 7315, 7318, 5, 124, 0, 0, 7316, 7319, 3, 708, 354, 0, 7317, 7319, 3, 818, 409, 0, 7318, 7316, 1, 0, 0, 0, 7318, 7317, 1, 0, 0, 0, 7319, 707, 1, 0, 0, 0, 7320, 7322, 5, 2, 0, 0, 7321, 7323, 3, 818, 409, 0, 7322, 7321, 1, 0, 0, 0, 7322, 7323, 1, 0, 0, 0, 7323, 7327, 1, 0, 0, 0, 7324, 7325, 5, 285, 0, 0, 7325, 7326, 5, 147, 0, 0, 7326, 7328, 3, 730, 365, 0, 7327, 7324, 1, 0, 0, 0, 7327, 7328, 1, 0, 0, 0, 7328, 7330, 1, 0, 0, 0, 7329, 7331, 3, 586, 293, 0, 7330, 7329, 1, 0, 0, 0, 7330, 7331, 1, 0, 0, 0, 7331, 7333, 1, 0, 0, 0, 7332, 7334, 3, 710, 355, 0, 7333, 7332, 1, 0, 0, 0, 7333, 7334, 1, 0, 0, 0, 7334, 7335, 1, 0, 0, 0, 7335, 7336, 5, 3, 0, 0, 7336, 709, 1, 0, 0, 0, 7337, 7342, 7, 102, 0, 0, 7338, 7339, 5, 387, 0, 0, 7339, 7340, 3, 712, 356, 0, 7340, 7341, 5, 33, 0, 0, 7341, 7343, 1, 0, 0, 0, 7342, 7338, 1, 0, 0, 0, 7342, 7343, 1, 0, 0, 0, 7343, 7344, 1, 0, 0, 0, 7344, 7345, 3, 712, 356, 0, 7345, 7355, 1, 0, 0, 0, 7346, 7353, 5, 199, 0, 0, 7347, 7348, 5, 434, 0, 0, 7348, 7354, 5, 414, 0, 0, 7349, 7354, 5, 66, 0, 0, 7350, 7354, 5, 467, 0, 0, 7351, 7352, 5, 269, 0, 0, 7352, 7354, 5, 482, 0, 0, 7353, 7347, 1, 0, 0, 0, 7353, 7349, 1, 0, 0, 0, 7353, 7350, 1, 0, 0, 0, 7353, 7351, 1, 0, 0, 0, 7354, 7356, 1, 0, 0, 0, 7355, 7346, 1, 0, 0, 0, 7355, 7356, 1, 0, 0, 0, 7356, 711, 1, 0, 0, 0, 7357, 7360, 5, 362, 0, 0, 7358, 7360, 3, 674, 337, 0, 7359, 7357, 1, 0, 0, 0, 7359, 7358, 1, 0, 0, 0, 7360, 7361, 1, 0, 0, 0, 7361, 7365, 7, 103, 0, 0, 7362, 7363, 5, 434, 0, 0, 7363, 7365, 5, 414, 0, 0, 7364, 7359, 1, 0, 0, 0, 7364, 7362, 1, 0, 0, 0, 7365, 713, 1, 0, 0, 0, 7366, 7374, 3, 716, 358, 0, 7367, 7368, 5, 2, 0, 0, 7368, 7369, 3, 730, 365, 0, 7369, 7370, 5, 6, 0, 0, 7370, 7371, 3, 674, 337, 0, 7371, 7372, 5, 3, 0, 0, 7372, 7374, 1, 0, 0, 0, 7373, 7366, 1, 0, 0, 0, 7373, 7367, 1, 0, 0, 0, 7374, 715, 1, 0, 0, 0, 7375, 7376, 5, 414, 0, 0, 7376, 7378, 5, 2, 0, 0, 7377, 7379, 3, 730, 365, 0, 7378, 7377, 1, 0, 0, 0, 7378, 7379, 1, 0, 0, 0, 7379, 7380, 1, 0, 0, 0, 7380, 7381, 5, 3, 0, 0, 7381, 717, 1, 0, 0, 0, 7382, 7383, 7, 104, 0, 0, 7383, 719, 1, 0, 0, 0, 7384, 7387, 5, 29, 0, 0, 7385, 7387, 3, 722, 361, 0, 7386, 7384, 1, 0, 0, 0, 7386, 7385, 1, 0, 0, 0, 7387, 721, 1, 0, 0, 0, 7388, 7389, 7, 105, 0, 0, 7389, 723, 1, 0, 0, 0, 7390, 7397, 5, 29, 0, 0, 7391, 7392, 5, 278, 0, 0, 7392, 7393, 5, 2, 0, 0, 7393, 7394, 3, 414, 207, 0, 7394, 7395, 5, 3, 0, 0, 7395, 7397, 1, 0, 0, 0, 7396, 7390, 1, 0, 0, 0, 7396, 7391, 1, 0, 0, 0, 7397, 725, 1, 0, 0, 0, 7398, 7405, 3, 720, 360, 0, 7399, 7400, 5, 278, 0, 0, 7400, 7401, 5, 2, 0, 0, 7401, 7402, 3, 414, 207, 0, 7402, 7403, 5, 3, 0, 0, 7403, 7405, 1, 0, 0, 0, 7404, 7398, 1, 0, 0, 0, 7404, 7399, 1, 0, 0, 0, 7405, 727, 1, 0, 0, 0, 7406, 7412, 3, 726, 363, 0, 7407, 7409, 5, 77, 0, 0, 7408, 7407, 1, 0, 0, 0, 7408, 7409, 1, 0, 0, 0, 7409, 7410, 1, 0, 0, 0, 7410, 7412, 7, 106, 0, 0, 7411, 7406, 1, 0, 0, 0, 7411, 7408, 1, 0, 0, 0, 7412, 729, 1, 0, 0, 0, 7413, 7418, 3, 674, 337, 0, 7414, 7415, 5, 6, 0, 0, 7415, 7417, 3, 674, 337, 0, 7416, 7414, 1, 0, 0, 0, 7417, 7420, 1, 0, 0, 0, 7418, 7416, 1, 0, 0, 0, 7418, 7419, 1, 0, 0, 0, 7419, 731, 1, 0, 0, 0, 7420, 7418, 1, 0, 0, 0, 7421, 7422, 5, 2, 0, 0, 7422, 7423, 3, 674, 337, 0, 7423, 7424, 5, 3, 0, 0, 7424, 7427, 1, 0, 0, 0, 7425, 7427, 3, 800, 400, 0, 7426, 7421, 1, 0, 0, 0, 7426, 7425, 1, 0, 0, 0, 7427, 733, 1, 0, 0, 0, 7428, 7431, 3, 674, 337, 0, 7429, 7431, 3, 800, 400, 0, 7430, 7428, 1, 0, 0, 0, 7430, 7429, 1, 0, 0, 0, 7431, 735, 1, 0, 0, 0, 7432, 7437, 3, 738, 369, 0, 7433, 7434, 5, 6, 0, 0, 7434, 7436, 3, 738, 369, 0, 7435, 7433, 1, 0, 0, 0, 7436, 7439, 1, 0, 0, 0, 7437, 7435, 1, 0, 0, 0, 7437, 7438, 1, 0, 0, 0, 7438, 737, 1, 0, 0, 0, 7439, 7437, 1, 0, 0, 0, 7440, 7448, 3, 800, 400, 0, 7441, 7448, 3, 674, 337, 0, 7442, 7445, 3, 820, 410, 0, 7443, 7444, 7, 107, 0, 0, 7444, 7446, 3, 674, 337, 0, 7445, 7443, 1, 0, 0, 0, 7445, 7446, 1, 0, 0, 0, 7446, 7448, 1, 0, 0, 0, 7447, 7440, 1, 0, 0, 0, 7447, 7441, 1, 0, 0, 0, 7447, 7442, 1, 0, 0, 0, 7448, 739, 1, 0, 0, 0, 7449, 7459, 5, 4, 0, 0, 7450, 7460, 3, 730, 365, 0, 7451, 7456, 3, 740, 370, 0, 7452, 7453, 5, 6, 0, 0, 7453, 7455, 3, 740, 370, 0, 7454, 7452, 1, 0, 0, 0, 7455, 7458, 1, 0, 0, 0, 7456, 7454, 1, 0, 0, 0, 7456, 7457, 1, 0, 0, 0, 7457, 7460, 1, 0, 0, 0, 7458, 7456, 1, 0, 0, 0, 7459, 7450, 1, 0, 0, 0, 7459, 7451, 1, 0, 0, 0, 7459, 7460, 1, 0, 0, 0, 7460, 7461, 1, 0, 0, 0, 7461, 7462, 5, 5, 0, 0, 7462, 741, 1, 0, 0, 0, 7463, 7472, 3, 826, 413, 0, 7464, 7472, 5, 384, 0, 0, 7465, 7472, 5, 264, 0, 0, 7466, 7472, 5, 176, 0, 0, 7467, 7472, 5, 218, 0, 0, 7468, 7472, 5, 261, 0, 0, 7469, 7472, 5, 326, 0, 0, 7470, 7472, 3, 808, 404, 0, 7471, 7463, 1, 0, 0, 0, 7471, 7464, 1, 0, 0, 0, 7471, 7465, 1, 0, 0, 0, 7471, 7466, 1, 0, 0, 0, 7471, 7467, 1, 0, 0, 0, 7471, 7468, 1, 0, 0, 0, 7471, 7469, 1, 0, 0, 0, 7471, 7470, 1, 0, 0, 0, 7472, 743, 1, 0, 0, 0, 7473, 7474, 7, 108, 0, 0, 7474, 745, 1, 0, 0, 0, 7475, 7476, 3, 674, 337, 0, 7476, 7477, 5, 64, 0, 0, 7477, 7480, 3, 674, 337, 0, 7478, 7479, 5, 62, 0, 0, 7479, 7481, 3, 674, 337, 0, 7480, 7478, 1, 0, 0, 0, 7480, 7481, 1, 0, 0, 0, 7481, 7497, 1, 0, 0, 0, 7482, 7483, 3, 674, 337, 0, 7483, 7484, 5, 62, 0, 0, 7484, 7487, 3, 674, 337, 0, 7485, 7486, 5, 64, 0, 0, 7486, 7488, 3, 674, 337, 0, 7487, 7485, 1, 0, 0, 0, 7487, 7488, 1, 0, 0, 0, 7488, 7497, 1, 0, 0, 0, 7489, 7490, 3, 674, 337, 0, 7490, 7491, 5, 127, 0, 0, 7491, 7492, 3, 674, 337, 0, 7492, 7493, 5, 197, 0, 0, 7493, 7494, 3, 674, 337, 0, 7494, 7497, 1, 0, 0, 0, 7495, 7497, 3, 730, 365, 0, 7496, 7475, 1, 0, 0, 0, 7496, 7482, 1, 0, 0, 0, 7496, 7489, 1, 0, 0, 0, 7496, 7495, 1, 0, 0, 0, 7497, 747, 1, 0, 0, 0, 7498, 7499, 5, 102, 0, 0, 7499, 7500, 3, 674, 337, 0, 7500, 7501, 5, 93, 0, 0, 7501, 7502, 3, 674, 337, 0, 7502, 749, 1, 0, 0, 0, 7503, 7506, 5, 11, 0, 0, 7504, 7507, 3, 824, 412, 0, 7505, 7507, 5, 9, 0, 0, 7506, 7504, 1, 0, 0, 0, 7506, 7505, 1, 0, 0, 0, 7507, 7521, 1, 0, 0, 0, 7508, 7517, 5, 4, 0, 0, 7509, 7518, 3, 674, 337, 0, 7510, 7512, 3, 674, 337, 0, 7511, 7510, 1, 0, 0, 0, 7511, 7512, 1, 0, 0, 0, 7512, 7513, 1, 0, 0, 0, 7513, 7515, 5, 8, 0, 0, 7514, 7516, 3, 674, 337, 0, 7515, 7514, 1, 0, 0, 0, 7515, 7516, 1, 0, 0, 0, 7516, 7518, 1, 0, 0, 0, 7517, 7509, 1, 0, 0, 0, 7517, 7511, 1, 0, 0, 0, 7518, 7519, 1, 0, 0, 0, 7519, 7521, 5, 5, 0, 0, 7520, 7503, 1, 0, 0, 0, 7520, 7508, 1, 0, 0, 0, 7521, 751, 1, 0, 0, 0, 7522, 7524, 3, 750, 375, 0, 7523, 7522, 1, 0, 0, 0, 7524, 7525, 1, 0, 0, 0, 7525, 7523, 1, 0, 0, 0, 7525, 7526, 1, 0, 0, 0, 7526, 753, 1, 0, 0, 0, 7527, 7529, 3, 750, 375, 0, 7528, 7527, 1, 0, 0, 0, 7529, 7532, 1, 0, 0, 0, 7530, 7528, 1, 0, 0, 0, 7530, 7531, 1, 0, 0, 0, 7531, 755, 1, 0, 0, 0, 7532, 7530, 1, 0, 0, 0, 7533, 7538, 3, 758, 379, 0, 7534, 7535, 5, 6, 0, 0, 7535, 7537, 3, 758, 379, 0, 7536, 7534, 1, 0, 0, 0, 7537, 7540, 1, 0, 0, 0, 7538, 7536, 1, 0, 0, 0, 7538, 7539, 1, 0, 0, 0, 7539, 757, 1, 0, 0, 0, 7540, 7538, 1, 0, 0, 0, 7541, 7546, 3, 734, 367, 0, 7542, 7543, 5, 36, 0, 0, 7543, 7547, 3, 824, 412, 0, 7544, 7547, 3, 826, 413, 0, 7545, 7547, 1, 0, 0, 0, 7546, 7542, 1, 0, 0, 0, 7546, 7544, 1, 0, 0, 0, 7546, 7545, 1, 0, 0, 0, 7547, 7550, 1, 0, 0, 0, 7548, 7550, 5, 9, 0, 0, 7549, 7541, 1, 0, 0, 0, 7549, 7548, 1, 0, 0, 0, 7550, 759, 1, 0, 0, 0, 7551, 7556, 3, 780, 390, 0, 7552, 7553, 5, 6, 0, 0, 7553, 7555, 3, 780, 390, 0, 7554, 7552, 1, 0, 0, 0, 7555, 7558, 1, 0, 0, 0, 7556, 7554, 1, 0, 0, 0, 7556, 7557, 1, 0, 0, 0, 7557, 761, 1, 0, 0, 0, 7558, 7556, 1, 0, 0, 0, 7559, 7564, 3, 774, 387, 0, 7560, 7561, 5, 6, 0, 0, 7561, 7563, 3, 774, 387, 0, 7562, 7560, 1, 0, 0, 0, 7563, 7566, 1, 0, 0, 0, 7564, 7562, 1, 0, 0, 0, 7564, 7565, 1, 0, 0, 0, 7565, 763, 1, 0, 0, 0, 7566, 7564, 1, 0, 0, 0, 7567, 7572, 3, 790, 395, 0, 7568, 7569, 5, 6, 0, 0, 7569, 7571, 3, 790, 395, 0, 7570, 7568, 1, 0, 0, 0, 7571, 7574, 1, 0, 0, 0, 7572, 7570, 1, 0, 0, 0, 7572, 7573, 1, 0, 0, 0, 7573, 765, 1, 0, 0, 0, 7574, 7572, 1, 0, 0, 0, 7575, 7580, 3, 788, 394, 0, 7576, 7577, 5, 6, 0, 0, 7577, 7579, 3, 788, 394, 0, 7578, 7576, 1, 0, 0, 0, 7579, 7582, 1, 0, 0, 0, 7580, 7578, 1, 0, 0, 0, 7580, 7581, 1, 0, 0, 0, 7581, 767, 1, 0, 0, 0, 7582, 7580, 1, 0, 0, 0, 7583, 7584, 3, 780, 390, 0, 7584, 769, 1, 0, 0, 0, 7585, 7586, 3, 780, 390, 0, 7586, 771, 1, 0, 0, 0, 7587, 7588, 3, 780, 390, 0, 7588, 773, 1, 0, 0, 0, 7589, 7590, 3, 780, 390, 0, 7590, 775, 1, 0, 0, 0, 7591, 7592, 3, 780, 390, 0, 7592, 777, 1, 0, 0, 0, 7593, 7594, 3, 316, 158, 0, 7594, 779, 1, 0, 0, 0, 7595, 7597, 3, 818, 409, 0, 7596, 7598, 3, 752, 376, 0, 7597, 7596, 1, 0, 0, 0, 7597, 7598, 1, 0, 0, 0, 7598, 781, 1, 0, 0, 0, 7599, 7604, 3, 770, 385, 0, 7600, 7601, 5, 6, 0, 0, 7601, 7603, 3, 770, 385, 0, 7602, 7600, 1, 0, 0, 0, 7603, 7606, 1, 0, 0, 0, 7604, 7602, 1, 0, 0, 0, 7604, 7605, 1, 0, 0, 0, 7605, 783, 1, 0, 0, 0, 7606, 7604, 1, 0, 0, 0, 7607, 7612, 3, 818, 409, 0, 7608, 7609, 5, 6, 0, 0, 7609, 7611, 3, 818, 409, 0, 7610, 7608, 1, 0, 0, 0, 7611, 7614, 1, 0, 0, 0, 7612, 7610, 1, 0, 0, 0, 7612, 7613, 1, 0, 0, 0, 7613, 785, 1, 0, 0, 0, 7614, 7612, 1, 0, 0, 0, 7615, 7616, 3, 316, 158, 0, 7616, 787, 1, 0, 0, 0, 7617, 7618, 3, 316, 158, 0, 7618, 789, 1, 0, 0, 0, 7619, 7620, 3, 316, 158, 0, 7620, 791, 1, 0, 0, 0, 7621, 7622, 3, 818, 409, 0, 7622, 793, 1, 0, 0, 0, 7623, 7624, 3, 818, 409, 0, 7624, 795, 1, 0, 0, 0, 7625, 7630, 3, 820, 410, 0, 7626, 7627, 3, 818, 409, 0, 7627, 7628, 3, 752, 376, 0, 7628, 7630, 1, 0, 0, 0, 7629, 7625, 1, 0, 0, 0, 7629, 7626, 1, 0, 0, 0, 7630, 797, 1, 0, 0, 0, 7631, 7636, 3, 820, 410, 0, 7632, 7633, 3, 818, 409, 0, 7633, 7634, 3, 752, 376, 0, 7634, 7636, 1, 0, 0, 0, 7635, 7631, 1, 0, 0, 0, 7635, 7632, 1, 0, 0, 0, 7636, 799, 1, 0, 0, 0, 7637, 7638, 3, 818, 409, 0, 7638, 7639, 3, 754, 377, 0, 7639, 7642, 1, 0, 0, 0, 7640, 7642, 4, 400, 10, 0, 7641, 7637, 1, 0, 0, 0, 7641, 7640, 1, 0, 0, 0, 7642, 801, 1, 0, 0, 0, 7643, 7644, 3, 818, 409, 0, 7644, 803, 1, 0, 0, 0, 7645, 7650, 3, 820, 410, 0, 7646, 7647, 3, 818, 409, 0, 7647, 7648, 3, 752, 376, 0, 7648, 7650, 1, 0, 0, 0, 7649, 7645, 1, 0, 0, 0, 7649, 7646, 1, 0, 0, 0, 7650, 805, 1, 0, 0, 0, 7651, 7656, 3, 820, 410, 0, 7652, 7653, 3, 818, 409, 0, 7653, 7654, 3, 752, 376, 0, 7654, 7656, 1, 0, 0, 0, 7655, 7651, 1, 0, 0, 0, 7655, 7652, 1, 0, 0, 0, 7656, 807, 1, 0, 0, 0, 7657, 7660, 3, 810, 405, 0, 7658, 7659, 5, 487, 0, 0, 7659, 7661, 3, 810, 405, 0, 7660, 7658, 1, 0, 0, 0, 7660, 7661, 1, 0, 0, 0, 7661, 809, 1, 0, 0, 0, 7662, 7674, 5, 558, 0, 0, 7663, 7674, 5, 560, 0, 0, 7664, 7668, 5, 562, 0, 0, 7665, 7667, 5, 588, 0, 0, 7666, 7665, 1, 0, 0, 0, 7667, 7670, 1, 0, 0, 0, 7668, 7666, 1, 0, 0, 0, 7668, 7669, 1, 0, 0, 0, 7669, 7671, 1, 0, 0, 0, 7670, 7668, 1, 0, 0, 0, 7671, 7674, 5, 589, 0, 0, 7672, 7674, 5, 584, 0, 0, 7673, 7662, 1, 0, 0, 0, 7673, 7663, 1, 0, 0, 0, 7673, 7664, 1, 0, 0, 0, 7673, 7672, 1, 0, 0, 0, 7674, 811, 1, 0, 0, 0, 7675, 7677, 7, 29, 0, 0, 7676, 7675, 1, 0, 0, 0, 7676, 7677, 1, 0, 0, 0, 7677, 7678, 1, 0, 0, 0, 7678, 7679, 5, 571, 0, 0, 7679, 813, 1, 0, 0, 0, 7680, 7686, 3, 822, 411, 0, 7681, 7686, 5, 52, 0, 0, 7682, 7686, 5, 49, 0, 0, 7683, 7686, 5, 89, 0, 0, 7684, 7686, 5, 524, 0, 0, 7685, 7680, 1, 0, 0, 0, 7685, 7681, 1, 0, 0, 0, 7685, 7682, 1, 0, 0, 0, 7685, 7683, 1, 0, 0, 0, 7685, 7684, 1, 0, 0, 0, 7686, 815, 1, 0, 0, 0, 7687, 7692, 3, 814, 407, 0, 7688, 7689, 5, 6, 0, 0, 7689, 7691, 3, 814, 407, 0, 7690, 7688, 1, 0, 0, 0, 7691, 7694, 1, 0, 0, 0, 7692, 7690, 1, 0, 0, 0, 7692, 7693, 1, 0, 0, 0, 7693, 817, 1, 0, 0, 0, 7694, 7692, 1, 0, 0, 0, 7695, 7698, 3, 826, 413, 0, 7696, 7698, 3, 830, 415, 0, 7697, 7695, 1, 0, 0, 0, 7697, 7696, 1, 0, 0, 0, 7698, 819, 1, 0, 0, 0, 7699, 7702, 3, 826, 413, 0, 7700, 7702, 3, 832, 416, 0, 7701, 7699, 1, 0, 0, 0, 7701, 7700, 1, 0, 0, 0, 7702, 821, 1, 0, 0, 0, 7703, 7707, 3, 826, 413, 0, 7704, 7707, 3, 830, 415, 0, 7705, 7707, 3, 832, 416, 0, 7706, 7703, 1, 0, 0, 0, 7706, 7704, 1, 0, 0, 0, 7706, 7705, 1, 0, 0, 0, 7707, 823, 1, 0, 0, 0, 7708, 7713, 3, 826, 413, 0, 7709, 7713, 3, 830, 415, 0, 7710, 7713, 3, 832, 416, 0, 7711, 7713, 3, 834, 417, 0, 7712, 7708, 1, 0, 0, 0, 7712, 7709, 1, 0, 0, 0, 7712, 7710, 1, 0, 0, 0, 7712, 7711, 1, 0, 0, 0, 7713, 825, 1, 0, 0, 0, 7714, 7717, 5, 549, 0, 0, 7715, 7716, 5, 487, 0, 0, 7716, 7718, 3, 810, 405, 0, 7717, 7715, 1, 0, 0, 0, 7717, 7718, 1, 0, 0, 0, 7718, 7726, 1, 0, 0, 0, 7719, 7726, 3, 808, 404, 0, 7720, 7726, 5, 550, 0, 0, 7721, 7726, 5, 554, 0, 0, 7722, 7726, 5, 574, 0, 0, 7723, 7726, 5, 575, 0, 0, 7724, 7726, 3, 828, 414, 0, 7725, 7714, 1, 0, 0, 0, 7725, 7719, 1, 0, 0, 0, 7725, 7720, 1, 0, 0, 0, 7725, 7721, 1, 0, 0, 0, 7725, 7722, 1, 0, 0, 0, 7725, 7723, 1, 0, 0, 0, 7725, 7724, 1, 0, 0, 0, 7726, 827, 1, 0, 0, 0, 7727, 7728, 7, 109, 0, 0, 7728, 829, 1, 0, 0, 0, 7729, 7781, 5, 387, 0, 0, 7730, 7781, 5, 388, 0, 0, 7731, 7781, 3, 662, 331, 0, 7732, 7781, 5, 390, 0, 0, 7733, 7781, 5, 391, 0, 0, 7734, 7781, 3, 664, 332, 0, 7735, 7781, 5, 393, 0, 0, 7736, 7781, 5, 394, 0, 0, 7737, 7781, 5, 395, 0, 0, 7738, 7781, 5, 396, 0, 0, 7739, 7781, 5, 397, 0, 0, 7740, 7781, 5, 398, 0, 0, 7741, 7781, 5, 399, 0, 0, 7742, 7781, 5, 470, 0, 0, 7743, 7781, 5, 400, 0, 0, 7744, 7781, 5, 401, 0, 0, 7745, 7781, 5, 402, 0, 0, 7746, 7781, 5, 403, 0, 0, 7747, 7781, 5, 404, 0, 0, 7748, 7781, 5, 405, 0, 0, 7749, 7781, 5, 406, 0, 0, 7750, 7781, 5, 407, 0, 0, 7751, 7781, 5, 489, 0, 0, 7752, 7781, 5, 408, 0, 0, 7753, 7781, 3, 658, 329, 0, 7754, 7781, 5, 453, 0, 0, 7755, 7781, 5, 410, 0, 0, 7756, 7781, 5, 411, 0, 0, 7757, 7781, 5, 412, 0, 0, 7758, 7781, 5, 413, 0, 0, 7759, 7781, 5, 414, 0, 0, 7760, 7781, 5, 415, 0, 0, 7761, 7781, 5, 416, 0, 0, 7762, 7781, 5, 417, 0, 0, 7763, 7781, 5, 418, 0, 0, 7764, 7781, 5, 419, 0, 0, 7765, 7781, 5, 420, 0, 0, 7766, 7781, 5, 421, 0, 0, 7767, 7781, 5, 422, 0, 0, 7768, 7781, 5, 423, 0, 0, 7769, 7781, 5, 424, 0, 0, 7770, 7781, 5, 425, 0, 0, 7771, 7781, 5, 426, 0, 0, 7772, 7781, 5, 427, 0, 0, 7773, 7781, 5, 428, 0, 0, 7774, 7781, 5, 476, 0, 0, 7775, 7781, 5, 429, 0, 0, 7776, 7781, 5, 430, 0, 0, 7777, 7781, 5, 431, 0, 0, 7778, 7781, 5, 432, 0, 0, 7779, 7781, 5, 474, 0, 0, 7780, 7729, 1, 0, 0, 0, 7780, 7730, 1, 0, 0, 0, 7780, 7731, 1, 0, 0, 0, 7780, 7732, 1, 0, 0, 0, 7780, 7733, 1, 0, 0, 0, 7780, 7734, 1, 0, 0, 0, 7780, 7735, 1, 0, 0, 0, 7780, 7736, 1, 0, 0, 0, 7780, 7737, 1, 0, 0, 0, 7780, 7738, 1, 0, 0, 0, 7780, 7739, 1, 0, 0, 0, 7780, 7740, 1, 0, 0, 0, 7780, 7741, 1, 0, 0, 0, 7780, 7742, 1, 0, 0, 0, 7780, 7743, 1, 0, 0, 0, 7780, 7744, 1, 0, 0, 0, 7780, 7745, 1, 0, 0, 0, 7780, 7746, 1, 0, 0, 0, 7780, 7747, 1, 0, 0, 0, 7780, 7748, 1, 0, 0, 0, 7780, 7749, 1, 0, 0, 0, 7780, 7750, 1, 0, 0, 0, 7780, 7751, 1, 0, 0, 0, 7780, 7752, 1, 0, 0, 0, 7780, 7753, 1, 0, 0, 0, 7780, 7754, 1, 0, 0, 0, 7780, 7755, 1, 0, 0, 0, 7780, 7756, 1, 0, 0, 0, 7780, 7757, 1, 0, 0, 0, 7780, 7758, 1, 0, 0, 0, 7780, 7759, 1, 0, 0, 0, 7780, 7760, 1, 0, 0, 0, 7780, 7761, 1, 0, 0, 0, 7780, 7762, 1, 0, 0, 0, 7780, 7763, 1, 0, 0, 0, 7780, 7764, 1, 0, 0, 0, 7780, 7765, 1, 0, 0, 0, 7780, 7766, 1, 0, 0, 0, 7780, 7767, 1, 0, 0, 0, 7780, 7768, 1, 0, 0, 0, 7780, 7769, 1, 0, 0, 0, 7780, 7770, 1, 0, 0, 0, 7780, 7771, 1, 0, 0, 0, 7780, 7772, 1, 0, 0, 0, 7780, 7773, 1, 0, 0, 0, 7780, 7774, 1, 0, 0, 0, 7780, 7775, 1, 0, 0, 0, 7780, 7776, 1, 0, 0, 0, 7780, 7777, 1, 0, 0, 0, 7780, 7778, 1, 0, 0, 0, 7780, 7779, 1, 0, 0, 0, 7781, 831, 1, 0, 0, 0, 7782, 7783, 7, 110, 0, 0, 7783, 833, 1, 0, 0, 0, 7784, 7785, 7, 111, 0, 0, 7785, 835, 1, 0, 0, 0, 7786, 7788, 3, 838, 419, 0, 7787, 7786, 1, 0, 0, 0, 7787, 7788, 1, 0, 0, 0, 7788, 7799, 1, 0, 0, 0, 7789, 7797, 5, 178, 0, 0, 7790, 7794, 3, 840, 420, 0, 7791, 7794, 5, 178, 0, 0, 7792, 7794, 3, 838, 419, 0, 7793, 7790, 1, 0, 0, 0, 7793, 7791, 1, 0, 0, 0, 7793, 7792, 1, 0, 0, 0, 7794, 7795, 1, 0, 0, 0, 7795, 7793, 1, 0, 0, 0, 7795, 7796, 1, 0, 0, 0, 7796, 7798, 1, 0, 0, 0, 7797, 7793, 1, 0, 0, 0, 7797, 7798, 1, 0, 0, 0, 7798, 7800, 1, 0, 0, 0, 7799, 7789, 1, 0, 0, 0, 7799, 7800, 1, 0, 0, 0, 7800, 7801, 1, 0, 0, 0, 7801, 7805, 5, 146, 0, 0, 7802, 7804, 3, 846, 423, 0, 7803, 7802, 1, 0, 0, 0, 7804, 7807, 1, 0, 0, 0, 7805, 7803, 1, 0, 0, 0, 7805, 7806, 1, 0, 0, 0, 7806, 7809, 1, 0, 0, 0, 7807, 7805, 1, 0, 0, 0, 7808, 7810, 3, 924, 462, 0, 7809, 7808, 1, 0, 0, 0, 7809, 7810, 1, 0, 0, 0, 7810, 7811, 1, 0, 0, 0, 7811, 7813, 5, 454, 0, 0, 7812, 7814, 3, 928, 464, 0, 7813, 7812, 1, 0, 0, 0, 7813, 7814, 1, 0, 0, 0, 7814, 837, 1, 0, 0, 0, 7815, 7816, 5, 18, 0, 0, 7816, 7817, 3, 928, 464, 0, 7817, 7818, 5, 19, 0, 0, 7818, 839, 1, 0, 0, 0, 7819, 7866, 3, 928, 464, 0, 7820, 7821, 5, 496, 0, 0, 7821, 7824, 5, 62, 0, 0, 7822, 7825, 5, 28, 0, 0, 7823, 7825, 3, 818, 409, 0, 7824, 7822, 1, 0, 0, 0, 7824, 7823, 1, 0, 0, 0, 7825, 7867, 1, 0, 0, 0, 7826, 7828, 5, 497, 0, 0, 7827, 7826, 1, 0, 0, 0, 7827, 7828, 1, 0, 0, 0, 7828, 7829, 1, 0, 0, 0, 7829, 7831, 3, 652, 326, 0, 7830, 7832, 3, 98, 49, 0, 7831, 7830, 1, 0, 0, 0, 7831, 7832, 1, 0, 0, 0, 7832, 7835, 1, 0, 0, 0, 7833, 7834, 5, 77, 0, 0, 7834, 7836, 5, 78, 0, 0, 7835, 7833, 1, 0, 0, 0, 7835, 7836, 1, 0, 0, 0, 7836, 7842, 1, 0, 0, 0, 7837, 7840, 3, 844, 422, 0, 7838, 7840, 5, 53, 0, 0, 7839, 7837, 1, 0, 0, 0, 7839, 7838, 1, 0, 0, 0, 7840, 7841, 1, 0, 0, 0, 7841, 7843, 3, 930, 465, 0, 7842, 7839, 1, 0, 0, 0, 7842, 7843, 1, 0, 0, 0, 7843, 7867, 1, 0, 0, 0, 7844, 7846, 5, 269, 0, 0, 7845, 7844, 1, 0, 0, 0, 7845, 7846, 1, 0, 0, 0, 7846, 7847, 1, 0, 0, 0, 7847, 7849, 5, 324, 0, 0, 7848, 7845, 1, 0, 0, 0, 7848, 7849, 1, 0, 0, 0, 7849, 7850, 1, 0, 0, 0, 7850, 7862, 5, 172, 0, 0, 7851, 7852, 5, 2, 0, 0, 7852, 7857, 3, 842, 421, 0, 7853, 7854, 5, 6, 0, 0, 7854, 7856, 3, 842, 421, 0, 7855, 7853, 1, 0, 0, 0, 7856, 7859, 1, 0, 0, 0, 7857, 7855, 1, 0, 0, 0, 7857, 7858, 1, 0, 0, 0, 7858, 7860, 1, 0, 0, 0, 7859, 7857, 1, 0, 0, 0, 7860, 7861, 5, 3, 0, 0, 7861, 7863, 1, 0, 0, 0, 7862, 7851, 1, 0, 0, 0, 7862, 7863, 1, 0, 0, 0, 7863, 7864, 1, 0, 0, 0, 7864, 7865, 7, 112, 0, 0, 7865, 7867, 3, 560, 280, 0, 7866, 7820, 1, 0, 0, 0, 7866, 7827, 1, 0, 0, 0, 7866, 7848, 1, 0, 0, 0, 7867, 7868, 1, 0, 0, 0, 7868, 7869, 5, 7, 0, 0, 7869, 841, 1, 0, 0, 0, 7870, 7871, 3, 928, 464, 0, 7871, 7872, 3, 652, 326, 0, 7872, 843, 1, 0, 0, 0, 7873, 7874, 7, 113, 0, 0, 7874, 845, 1, 0, 0, 0, 7875, 7876, 3, 836, 418, 0, 7876, 7877, 5, 7, 0, 0, 7877, 7900, 1, 0, 0, 0, 7878, 7900, 3, 874, 437, 0, 7879, 7900, 3, 876, 438, 0, 7880, 7900, 3, 852, 426, 0, 7881, 7900, 3, 860, 430, 0, 7882, 7900, 3, 864, 432, 0, 7883, 7900, 3, 866, 433, 0, 7884, 7900, 3, 870, 435, 0, 7885, 7900, 3, 872, 436, 0, 7886, 7900, 3, 880, 440, 0, 7887, 7900, 3, 884, 442, 0, 7888, 7900, 3, 886, 443, 0, 7889, 7900, 3, 848, 424, 0, 7890, 7900, 3, 850, 425, 0, 7891, 7900, 3, 854, 427, 0, 7892, 7900, 3, 890, 445, 0, 7893, 7900, 3, 894, 447, 0, 7894, 7900, 3, 898, 449, 0, 7895, 7900, 3, 914, 457, 0, 7896, 7900, 3, 916, 458, 0, 7897, 7900, 3, 918, 459, 0, 7898, 7900, 3, 920, 460, 0, 7899, 7875, 1, 0, 0, 0, 7899, 7878, 1, 0, 0, 0, 7899, 7879, 1, 0, 0, 0, 7899, 7880, 1, 0, 0, 0, 7899, 7881, 1, 0, 0, 0, 7899, 7882, 1, 0, 0, 0, 7899, 7883, 1, 0, 0, 0, 7899, 7884, 1, 0, 0, 0, 7899, 7885, 1, 0, 0, 0, 7899, 7886, 1, 0, 0, 0, 7899, 7887, 1, 0, 0, 0, 7899, 7888, 1, 0, 0, 0, 7899, 7889, 1, 0, 0, 0, 7899, 7890, 1, 0, 0, 0, 7899, 7891, 1, 0, 0, 0, 7899, 7892, 1, 0, 0, 0, 7899, 7893, 1, 0, 0, 0, 7899, 7894, 1, 0, 0, 0, 7899, 7895, 1, 0, 0, 0, 7899, 7896, 1, 0, 0, 0, 7899, 7897, 1, 0, 0, 0, 7899, 7898, 1, 0, 0, 0, 7900, 847, 1, 0, 0, 0, 7901, 7902, 5, 498, 0, 0, 7902, 7903, 3, 930, 465, 0, 7903, 7904, 5, 7, 0, 0, 7904, 849, 1, 0, 0, 0, 7905, 7906, 5, 433, 0, 0, 7906, 7913, 3, 928, 464, 0, 7907, 7909, 5, 2, 0, 0, 7908, 7910, 3, 730, 365, 0, 7909, 7908, 1, 0, 0, 0, 7909, 7910, 1, 0, 0, 0, 7910, 7911, 1, 0, 0, 0, 7911, 7912, 5, 3, 0, 0, 7912, 7914, 5, 7, 0, 0, 7913, 7907, 1, 0, 0, 0, 7913, 7914, 1, 0, 0, 0, 7914, 7925, 1, 0, 0, 0, 7915, 7916, 5, 57, 0, 0, 7916, 7917, 3, 928, 464, 0, 7917, 7919, 5, 2, 0, 0, 7918, 7920, 3, 730, 365, 0, 7919, 7918, 1, 0, 0, 0, 7919, 7920, 1, 0, 0, 0, 7920, 7921, 1, 0, 0, 0, 7921, 7922, 5, 3, 0, 0, 7922, 7923, 5, 7, 0, 0, 7923, 7925, 1, 0, 0, 0, 7924, 7905, 1, 0, 0, 0, 7924, 7915, 1, 0, 0, 0, 7925, 851, 1, 0, 0, 0, 7926, 7927, 3, 858, 429, 0, 7927, 7928, 3, 844, 422, 0, 7928, 7929, 3, 930, 465, 0, 7929, 7930, 5, 7, 0, 0, 7930, 853, 1, 0, 0, 0, 7931, 7933, 5, 499, 0, 0, 7932, 7934, 7, 114, 0, 0, 7933, 7932, 1, 0, 0, 0, 7933, 7934, 1, 0, 0, 0, 7934, 7935, 1, 0, 0, 0, 7935, 7936, 5, 500, 0, 0, 7936, 7941, 3, 856, 428, 0, 7937, 7938, 5, 6, 0, 0, 7938, 7940, 3, 856, 428, 0, 7939, 7937, 1, 0, 0, 0, 7940, 7943, 1, 0, 0, 0, 7941, 7939, 1, 0, 0, 0, 7941, 7942, 1, 0, 0, 0, 7942, 7944, 1, 0, 0, 0, 7943, 7941, 1, 0, 0, 0, 7944, 7945, 5, 7, 0, 0, 7945, 855, 1, 0, 0, 0, 7946, 7947, 3, 858, 429, 0, 7947, 7948, 3, 844, 422, 0, 7948, 7949, 3, 818, 409, 0, 7949, 857, 1, 0, 0, 0, 7950, 7953, 3, 316, 158, 0, 7951, 7953, 5, 28, 0, 0, 7952, 7950, 1, 0, 0, 0, 7952, 7951, 1, 0, 0, 0, 7953, 7960, 1, 0, 0, 0, 7954, 7955, 5, 4, 0, 0, 7955, 7956, 3, 674, 337, 0, 7956, 7957, 5, 5, 0, 0, 7957, 7959, 1, 0, 0, 0, 7958, 7954, 1, 0, 0, 0, 7959, 7962, 1, 0, 0, 0, 7960, 7958, 1, 0, 0, 0, 7960, 7961, 1, 0, 0, 0, 7961, 859, 1, 0, 0, 0, 7962, 7960, 1, 0, 0, 0, 7963, 7964, 5, 220, 0, 0, 7964, 7965, 3, 930, 465, 0, 7965, 7969, 5, 93, 0, 0, 7966, 7968, 3, 846, 423, 0, 7967, 7966, 1, 0, 0, 0, 7968, 7971, 1, 0, 0, 0, 7969, 7967, 1, 0, 0, 0, 7969, 7970, 1, 0, 0, 0, 7970, 7983, 1, 0, 0, 0, 7971, 7969, 1, 0, 0, 0, 7972, 7973, 5, 502, 0, 0, 7973, 7974, 3, 674, 337, 0, 7974, 7978, 5, 93, 0, 0, 7975, 7977, 3, 846, 423, 0, 7976, 7975, 1, 0, 0, 0, 7977, 7980, 1, 0, 0, 0, 7978, 7976, 1, 0, 0, 0, 7978, 7979, 1, 0, 0, 0, 7979, 7982, 1, 0, 0, 0, 7980, 7978, 1, 0, 0, 0, 7981, 7972, 1, 0, 0, 0, 7982, 7985, 1, 0, 0, 0, 7983, 7981, 1, 0, 0, 0, 7983, 7984, 1, 0, 0, 0, 7984, 7987, 1, 0, 0, 0, 7985, 7983, 1, 0, 0, 0, 7986, 7988, 3, 862, 431, 0, 7987, 7986, 1, 0, 0, 0, 7987, 7988, 1, 0, 0, 0, 7988, 7989, 1, 0, 0, 0, 7989, 7990, 5, 454, 0, 0, 7990, 7991, 5, 220, 0, 0, 7991, 7992, 5, 7, 0, 0, 7992, 861, 1, 0, 0, 0, 7993, 7997, 5, 58, 0, 0, 7994, 7996, 3, 846, 423, 0, 7995, 7994, 1, 0, 0, 0, 7996, 7999, 1, 0, 0, 0, 7997, 7995, 1, 0, 0, 0, 7997, 7998, 1, 0, 0, 0, 7998, 863, 1, 0, 0, 0, 7999, 7997, 1, 0, 0, 0, 8000, 8002, 5, 40, 0, 0, 8001, 8003, 3, 930, 465, 0, 8002, 8001, 1, 0, 0, 0, 8002, 8003, 1, 0, 0, 0, 8003, 8013, 1, 0, 0, 0, 8004, 8005, 5, 102, 0, 0, 8005, 8006, 3, 730, 365, 0, 8006, 8010, 5, 93, 0, 0, 8007, 8009, 3, 846, 423, 0, 8008, 8007, 1, 0, 0, 0, 8009, 8012, 1, 0, 0, 0, 8010, 8008, 1, 0, 0, 0, 8010, 8011, 1, 0, 0, 0, 8011, 8014, 1, 0, 0, 0, 8012, 8010, 1, 0, 0, 0, 8013, 8004, 1, 0, 0, 0, 8014, 8015, 1, 0, 0, 0, 8015, 8013, 1, 0, 0, 0, 8015, 8016, 1, 0, 0, 0, 8016, 8018, 1, 0, 0, 0, 8017, 8019, 3, 862, 431, 0, 8018, 8017, 1, 0, 0, 0, 8018, 8019, 1, 0, 0, 0, 8019, 8020, 1, 0, 0, 0, 8020, 8021, 5, 454, 0, 0, 8021, 8022, 5, 40, 0, 0, 8022, 8023, 5, 7, 0, 0, 8023, 865, 1, 0, 0, 0, 8024, 8026, 3, 838, 419, 0, 8025, 8024, 1, 0, 0, 0, 8025, 8026, 1, 0, 0, 0, 8026, 8031, 1, 0, 0, 0, 8027, 8028, 5, 503, 0, 0, 8028, 8032, 3, 674, 337, 0, 8029, 8030, 5, 62, 0, 0, 8030, 8032, 3, 868, 434, 0, 8031, 8027, 1, 0, 0, 0, 8031, 8029, 1, 0, 0, 0, 8031, 8032, 1, 0, 0, 0, 8032, 8033, 1, 0, 0, 0, 8033, 8034, 3, 882, 441, 0, 8034, 867, 1, 0, 0, 0, 8035, 8036, 3, 314, 157, 0, 8036, 8059, 5, 68, 0, 0, 8037, 8039, 3, 818, 409, 0, 8038, 8040, 3, 534, 267, 0, 8039, 8038, 1, 0, 0, 0, 8039, 8040, 1, 0, 0, 0, 8040, 8060, 1, 0, 0, 0, 8041, 8060, 3, 560, 280, 0, 8042, 8060, 3, 520, 260, 0, 8043, 8044, 5, 202, 0, 0, 8044, 8047, 3, 674, 337, 0, 8045, 8046, 5, 100, 0, 0, 8046, 8048, 3, 730, 365, 0, 8047, 8045, 1, 0, 0, 0, 8047, 8048, 1, 0, 0, 0, 8048, 8060, 1, 0, 0, 0, 8049, 8051, 5, 504, 0, 0, 8050, 8049, 1, 0, 0, 0, 8050, 8051, 1, 0, 0, 0, 8051, 8052, 1, 0, 0, 0, 8052, 8053, 3, 674, 337, 0, 8053, 8054, 5, 24, 0, 0, 8054, 8057, 3, 674, 337, 0, 8055, 8056, 5, 147, 0, 0, 8056, 8058, 3, 674, 337, 0, 8057, 8055, 1, 0, 0, 0, 8057, 8058, 1, 0, 0, 0, 8058, 8060, 1, 0, 0, 0, 8059, 8037, 1, 0, 0, 0, 8059, 8041, 1, 0, 0, 0, 8059, 8042, 1, 0, 0, 0, 8059, 8043, 1, 0, 0, 0, 8059, 8050, 1, 0, 0, 0, 8060, 869, 1, 0, 0, 0, 8061, 8063, 3, 838, 419, 0, 8062, 8061, 1, 0, 0, 0, 8062, 8063, 1, 0, 0, 0, 8063, 8064, 1, 0, 0, 0, 8064, 8065, 5, 505, 0, 0, 8065, 8068, 3, 314, 157, 0, 8066, 8067, 5, 506, 0, 0, 8067, 8069, 5, 571, 0, 0, 8068, 8066, 1, 0, 0, 0, 8068, 8069, 1, 0, 0, 0, 8069, 8070, 1, 0, 0, 0, 8070, 8071, 5, 68, 0, 0, 8071, 8072, 5, 35, 0, 0, 8072, 8073, 3, 674, 337, 0, 8073, 8074, 3, 882, 441, 0, 8074, 871, 1, 0, 0, 0, 8075, 8077, 7, 115, 0, 0, 8076, 8078, 3, 928, 464, 0, 8077, 8076, 1, 0, 0, 0, 8077, 8078, 1, 0, 0, 0, 8078, 8081, 1, 0, 0, 0, 8079, 8080, 5, 102, 0, 0, 8080, 8082, 3, 930, 465, 0, 8081, 8079, 1, 0, 0, 0, 8081, 8082, 1, 0, 0, 0, 8082, 8083, 1, 0, 0, 0, 8083, 8084, 5, 7, 0, 0, 8084, 873, 1, 0, 0, 0, 8085, 8100, 5, 508, 0, 0, 8086, 8087, 5, 268, 0, 0, 8087, 8101, 3, 930, 465, 0, 8088, 8095, 5, 509, 0, 0, 8089, 8090, 5, 202, 0, 0, 8090, 8091, 3, 674, 337, 0, 8091, 8092, 5, 100, 0, 0, 8092, 8093, 3, 730, 365, 0, 8093, 8096, 1, 0, 0, 0, 8094, 8096, 3, 560, 280, 0, 8095, 8089, 1, 0, 0, 0, 8095, 8094, 1, 0, 0, 0, 8096, 8101, 1, 0, 0, 0, 8097, 8099, 3, 930, 465, 0, 8098, 8097, 1, 0, 0, 0, 8098, 8099, 1, 0, 0, 0, 8099, 8101, 1, 0, 0, 0, 8100, 8086, 1, 0, 0, 0, 8100, 8088, 1, 0, 0, 0, 8100, 8098, 1, 0, 0, 0, 8101, 8102, 1, 0, 0, 0, 8102, 8103, 5, 7, 0, 0, 8103, 875, 1, 0, 0, 0, 8104, 8134, 5, 510, 0, 0, 8105, 8107, 7, 116, 0, 0, 8106, 8105, 1, 0, 0, 0, 8106, 8107, 1, 0, 0, 0, 8107, 8120, 1, 0, 0, 0, 8108, 8121, 3, 826, 413, 0, 8109, 8110, 5, 511, 0, 0, 8110, 8121, 3, 808, 404, 0, 8111, 8118, 3, 808, 404, 0, 8112, 8113, 5, 6, 0, 0, 8113, 8115, 3, 674, 337, 0, 8114, 8112, 1, 0, 0, 0, 8115, 8116, 1, 0, 0, 0, 8116, 8114, 1, 0, 0, 0, 8116, 8117, 1, 0, 0, 0, 8117, 8119, 1, 0, 0, 0, 8118, 8114, 1, 0, 0, 0, 8118, 8119, 1, 0, 0, 0, 8119, 8121, 1, 0, 0, 0, 8120, 8108, 1, 0, 0, 0, 8120, 8109, 1, 0, 0, 0, 8120, 8111, 1, 0, 0, 0, 8120, 8121, 1, 0, 0, 0, 8121, 8131, 1, 0, 0, 0, 8122, 8123, 5, 100, 0, 0, 8123, 8128, 3, 878, 439, 0, 8124, 8125, 5, 6, 0, 0, 8125, 8127, 3, 878, 439, 0, 8126, 8124, 1, 0, 0, 0, 8127, 8130, 1, 0, 0, 0, 8128, 8126, 1, 0, 0, 0, 8128, 8129, 1, 0, 0, 0, 8129, 8132, 1, 0, 0, 0, 8130, 8128, 1, 0, 0, 0, 8131, 8122, 1, 0, 0, 0, 8131, 8132, 1, 0, 0, 0, 8132, 8133, 1, 0, 0, 0, 8133, 8135, 5, 7, 0, 0, 8134, 8106, 1, 0, 0, 0, 8134, 8135, 1, 0, 0, 0, 8135, 877, 1, 0, 0, 0, 8136, 8137, 3, 826, 413, 0, 8137, 8138, 5, 10, 0, 0, 8138, 8139, 3, 674, 337, 0, 8139, 879, 1, 0, 0, 0, 8140, 8141, 5, 518, 0, 0, 8141, 8144, 3, 930, 465, 0, 8142, 8143, 5, 6, 0, 0, 8143, 8145, 3, 930, 465, 0, 8144, 8142, 1, 0, 0, 0, 8144, 8145, 1, 0, 0, 0, 8145, 8146, 1, 0, 0, 0, 8146, 8147, 5, 7, 0, 0, 8147, 881, 1, 0, 0, 0, 8148, 8152, 5, 519, 0, 0, 8149, 8151, 3, 846, 423, 0, 8150, 8149, 1, 0, 0, 0, 8151, 8154, 1, 0, 0, 0, 8152, 8150, 1, 0, 0, 0, 8152, 8153, 1, 0, 0, 0, 8153, 8155, 1, 0, 0, 0, 8154, 8152, 1, 0, 0, 0, 8155, 8156, 5, 454, 0, 0, 8156, 8158, 5, 519, 0, 0, 8157, 8159, 3, 928, 464, 0, 8158, 8157, 1, 0, 0, 0, 8158, 8159, 1, 0, 0, 0, 8159, 8160, 1, 0, 0, 0, 8160, 8161, 5, 7, 0, 0, 8161, 883, 1, 0, 0, 0, 8162, 8164, 3, 4, 2, 0, 8163, 8165, 3, 888, 444, 0, 8164, 8163, 1, 0, 0, 0, 8164, 8165, 1, 0, 0, 0, 8165, 8166, 1, 0, 0, 0, 8166, 8167, 5, 7, 0, 0, 8167, 885, 1, 0, 0, 0, 8168, 8169, 5, 202, 0, 0, 8169, 8185, 3, 674, 337, 0, 8170, 8172, 3, 888, 444, 0, 8171, 8170, 1, 0, 0, 0, 8171, 8172, 1, 0, 0, 0, 8172, 8175, 1, 0, 0, 0, 8173, 8174, 5, 100, 0, 0, 8174, 8176, 3, 730, 365, 0, 8175, 8173, 1, 0, 0, 0, 8175, 8176, 1, 0, 0, 0, 8176, 8186, 1, 0, 0, 0, 8177, 8178, 5, 100, 0, 0, 8178, 8180, 3, 730, 365, 0, 8179, 8177, 1, 0, 0, 0, 8179, 8180, 1, 0, 0, 0, 8180, 8182, 1, 0, 0, 0, 8181, 8183, 3, 888, 444, 0, 8182, 8181, 1, 0, 0, 0, 8182, 8183, 1, 0, 0, 0, 8183, 8186, 1, 0, 0, 0, 8184, 8186, 1, 0, 0, 0, 8185, 8171, 1, 0, 0, 0, 8185, 8179, 1, 0, 0, 0, 8185, 8184, 1, 0, 0, 0, 8186, 8187, 1, 0, 0, 0, 8187, 8188, 5, 7, 0, 0, 8188, 887, 1, 0, 0, 0, 8189, 8191, 5, 71, 0, 0, 8190, 8192, 5, 346, 0, 0, 8191, 8190, 1, 0, 0, 0, 8191, 8192, 1, 0, 0, 0, 8192, 8193, 1, 0, 0, 0, 8193, 8194, 3, 730, 365, 0, 8194, 889, 1, 0, 0, 0, 8195, 8227, 5, 520, 0, 0, 8196, 8201, 3, 922, 461, 0, 8197, 8199, 5, 269, 0, 0, 8198, 8197, 1, 0, 0, 0, 8198, 8199, 1, 0, 0, 0, 8199, 8200, 1, 0, 0, 0, 8200, 8202, 5, 324, 0, 0, 8201, 8198, 1, 0, 0, 0, 8201, 8202, 1, 0, 0, 0, 8202, 8203, 1, 0, 0, 0, 8203, 8211, 5, 62, 0, 0, 8204, 8212, 3, 560, 280, 0, 8205, 8206, 5, 202, 0, 0, 8206, 8209, 3, 930, 465, 0, 8207, 8208, 5, 100, 0, 0, 8208, 8210, 3, 730, 365, 0, 8209, 8207, 1, 0, 0, 0, 8209, 8210, 1, 0, 0, 0, 8210, 8212, 1, 0, 0, 0, 8211, 8204, 1, 0, 0, 0, 8211, 8205, 1, 0, 0, 0, 8212, 8228, 1, 0, 0, 0, 8213, 8225, 3, 818, 409, 0, 8214, 8215, 5, 2, 0, 0, 8215, 8220, 3, 892, 446, 0, 8216, 8217, 5, 6, 0, 0, 8217, 8219, 3, 892, 446, 0, 8218, 8216, 1, 0, 0, 0, 8219, 8222, 1, 0, 0, 0, 8220, 8218, 1, 0, 0, 0, 8220, 8221, 1, 0, 0, 0, 8221, 8223, 1, 0, 0, 0, 8222, 8220, 1, 0, 0, 0, 8223, 8224, 5, 3, 0, 0, 8224, 8226, 1, 0, 0, 0, 8225, 8214, 1, 0, 0, 0, 8225, 8226, 1, 0, 0, 0, 8226, 8228, 1, 0, 0, 0, 8227, 8196, 1, 0, 0, 0, 8227, 8213, 1, 0, 0, 0, 8228, 8229, 1, 0, 0, 0, 8229, 8230, 5, 7, 0, 0, 8230, 891, 1, 0, 0, 0, 8231, 8232, 3, 818, 409, 0, 8232, 8233, 5, 20, 0, 0, 8233, 8235, 1, 0, 0, 0, 8234, 8231, 1, 0, 0, 0, 8234, 8235, 1, 0, 0, 0, 8235, 8236, 1, 0, 0, 0, 8236, 8237, 3, 674, 337, 0, 8237, 893, 1, 0, 0, 0, 8238, 8240, 5, 61, 0, 0, 8239, 8241, 3, 896, 448, 0, 8240, 8239, 1, 0, 0, 0, 8240, 8241, 1, 0, 0, 0, 8241, 8243, 1, 0, 0, 0, 8242, 8244, 3, 332, 166, 0, 8243, 8242, 1, 0, 0, 0, 8243, 8244, 1, 0, 0, 0, 8244, 8245, 1, 0, 0, 0, 8245, 8246, 3, 922, 461, 0, 8246, 8247, 5, 71, 0, 0, 8247, 8248, 3, 730, 365, 0, 8248, 8249, 5, 7, 0, 0, 8249, 895, 1, 0, 0, 0, 8250, 8265, 5, 268, 0, 0, 8251, 8265, 5, 293, 0, 0, 8252, 8265, 5, 207, 0, 0, 8253, 8265, 5, 249, 0, 0, 8254, 8256, 7, 50, 0, 0, 8255, 8254, 1, 0, 0, 0, 8255, 8256, 1, 0, 0, 0, 8256, 8257, 1, 0, 0, 0, 8257, 8265, 3, 674, 337, 0, 8258, 8265, 5, 30, 0, 0, 8259, 8262, 7, 117, 0, 0, 8260, 8263, 3, 674, 337, 0, 8261, 8263, 5, 30, 0, 0, 8262, 8260, 1, 0, 0, 0, 8262, 8261, 1, 0, 0, 0, 8262, 8263, 1, 0, 0, 0, 8263, 8265, 1, 0, 0, 0, 8264, 8250, 1, 0, 0, 0, 8264, 8251, 1, 0, 0, 0, 8264, 8252, 1, 0, 0, 0, 8264, 8253, 1, 0, 0, 0, 8264, 8255, 1, 0, 0, 0, 8264, 8258, 1, 0, 0, 0, 8264, 8259, 1, 0, 0, 0, 8265, 897, 1, 0, 0, 0, 8266, 8268, 5, 265, 0, 0, 8267, 8269, 3, 896, 448, 0, 8268, 8267, 1, 0, 0, 0, 8268, 8269, 1, 0, 0, 0, 8269, 8270, 1, 0, 0, 0, 8270, 8271, 3, 922, 461, 0, 8271, 8272, 5, 7, 0, 0, 8272, 899, 1, 0, 0, 0, 8273, 8275, 3, 572, 286, 0, 8274, 8273, 1, 0, 0, 0, 8274, 8275, 1, 0, 0, 0, 8275, 8276, 1, 0, 0, 0, 8276, 8277, 5, 525, 0, 0, 8277, 8279, 5, 71, 0, 0, 8278, 8280, 5, 81, 0, 0, 8279, 8278, 1, 0, 0, 0, 8279, 8280, 1, 0, 0, 0, 8280, 8281, 1, 0, 0, 0, 8281, 8283, 3, 774, 387, 0, 8282, 8284, 5, 9, 0, 0, 8283, 8282, 1, 0, 0, 0, 8283, 8284, 1, 0, 0, 0, 8284, 8289, 1, 0, 0, 0, 8285, 8287, 5, 36, 0, 0, 8286, 8285, 1, 0, 0, 0, 8286, 8287, 1, 0, 0, 0, 8287, 8288, 1, 0, 0, 0, 8288, 8290, 3, 818, 409, 0, 8289, 8286, 1, 0, 0, 0, 8289, 8290, 1, 0, 0, 0, 8290, 8291, 1, 0, 0, 0, 8291, 8292, 5, 100, 0, 0, 8292, 8293, 3, 902, 451, 0, 8293, 8294, 5, 80, 0, 0, 8294, 8296, 3, 674, 337, 0, 8295, 8297, 3, 904, 452, 0, 8296, 8295, 1, 0, 0, 0, 8297, 8298, 1, 0, 0, 0, 8298, 8296, 1, 0, 0, 0, 8298, 8299, 1, 0, 0, 0, 8299, 901, 1, 0, 0, 0, 8300, 8302, 5, 81, 0, 0, 8301, 8300, 1, 0, 0, 0, 8301, 8302, 1, 0, 0, 0, 8302, 8303, 1, 0, 0, 0, 8303, 8305, 3, 774, 387, 0, 8304, 8306, 5, 9, 0, 0, 8305, 8304, 1, 0, 0, 0, 8305, 8306, 1, 0, 0, 0, 8306, 8312, 1, 0, 0, 0, 8307, 8310, 3, 564, 282, 0, 8308, 8310, 3, 608, 304, 0, 8309, 8307, 1, 0, 0, 0, 8309, 8308, 1, 0, 0, 0, 8310, 8312, 1, 0, 0, 0, 8311, 8301, 1, 0, 0, 0, 8311, 8309, 1, 0, 0, 0, 8312, 8317, 1, 0, 0, 0, 8313, 8315, 5, 36, 0, 0, 8314, 8313, 1, 0, 0, 0, 8314, 8315, 1, 0, 0, 0, 8315, 8316, 1, 0, 0, 0, 8316, 8318, 3, 818, 409, 0, 8317, 8314, 1, 0, 0, 0, 8317, 8318, 1, 0, 0, 0, 8318, 903, 1, 0, 0, 0, 8319, 8320, 5, 102, 0, 0, 8320, 8323, 5, 526, 0, 0, 8321, 8322, 5, 33, 0, 0, 8322, 8324, 3, 674, 337, 0, 8323, 8321, 1, 0, 0, 0, 8323, 8324, 1, 0, 0, 0, 8324, 8325, 1, 0, 0, 0, 8325, 8330, 5, 93, 0, 0, 8326, 8331, 3, 908, 454, 0, 8327, 8331, 5, 182, 0, 0, 8328, 8329, 5, 57, 0, 0, 8329, 8331, 5, 270, 0, 0, 8330, 8326, 1, 0, 0, 0, 8330, 8327, 1, 0, 0, 0, 8330, 8328, 1, 0, 0, 0, 8331, 8346, 1, 0, 0, 0, 8332, 8333, 5, 102, 0, 0, 8333, 8334, 5, 77, 0, 0, 8334, 8337, 5, 526, 0, 0, 8335, 8336, 5, 33, 0, 0, 8336, 8338, 3, 674, 337, 0, 8337, 8335, 1, 0, 0, 0, 8337, 8338, 1, 0, 0, 0, 8338, 8339, 1, 0, 0, 0, 8339, 8343, 5, 93, 0, 0, 8340, 8344, 3, 906, 453, 0, 8341, 8342, 5, 57, 0, 0, 8342, 8344, 5, 270, 0, 0, 8343, 8340, 1, 0, 0, 0, 8343, 8341, 1, 0, 0, 0, 8344, 8346, 1, 0, 0, 0, 8345, 8319, 1, 0, 0, 0, 8345, 8332, 1, 0, 0, 0, 8346, 905, 1, 0, 0, 0, 8347, 8349, 5, 241, 0, 0, 8348, 8350, 3, 144, 72, 0, 8349, 8348, 1, 0, 0, 0, 8349, 8350, 1, 0, 0, 0, 8350, 8354, 1, 0, 0, 0, 8351, 8352, 5, 463, 0, 0, 8352, 8353, 7, 76, 0, 0, 8353, 8355, 5, 450, 0, 0, 8354, 8351, 1, 0, 0, 0, 8354, 8355, 1, 0, 0, 0, 8355, 8356, 1, 0, 0, 0, 8356, 8357, 3, 910, 455, 0, 8357, 907, 1, 0, 0, 0, 8358, 8359, 5, 369, 0, 0, 8359, 8377, 5, 333, 0, 0, 8360, 8361, 3, 800, 400, 0, 8361, 8362, 5, 10, 0, 0, 8362, 8363, 3, 912, 456, 0, 8363, 8378, 1, 0, 0, 0, 8364, 8365, 3, 144, 72, 0, 8365, 8366, 5, 10, 0, 0, 8366, 8367, 5, 2, 0, 0, 8367, 8372, 3, 912, 456, 0, 8368, 8369, 5, 6, 0, 0, 8369, 8371, 3, 912, 456, 0, 8370, 8368, 1, 0, 0, 0, 8371, 8374, 1, 0, 0, 0, 8372, 8370, 1, 0, 0, 0, 8372, 8373, 1, 0, 0, 0, 8373, 8375, 1, 0, 0, 0, 8374, 8372, 1, 0, 0, 0, 8375, 8376, 5, 3, 0, 0, 8376, 8378, 1, 0, 0, 0, 8377, 8360, 1, 0, 0, 0, 8377, 8364, 1, 0, 0, 0, 8378, 8379, 1, 0, 0, 0, 8379, 8377, 1, 0, 0, 0, 8379, 8380, 1, 0, 0, 0, 8380, 909, 1, 0, 0, 0, 8381, 8382, 5, 422, 0, 0, 8382, 8383, 5, 2, 0, 0, 8383, 8388, 3, 912, 456, 0, 8384, 8385, 5, 6, 0, 0, 8385, 8387, 3, 912, 456, 0, 8386, 8384, 1, 0, 0, 0, 8387, 8390, 1, 0, 0, 0, 8388, 8386, 1, 0, 0, 0, 8388, 8389, 1, 0, 0, 0, 8389, 8391, 1, 0, 0, 0, 8390, 8388, 1, 0, 0, 0, 8391, 8392, 5, 3, 0, 0, 8392, 8396, 1, 0, 0, 0, 8393, 8394, 5, 53, 0, 0, 8394, 8396, 5, 422, 0, 0, 8395, 8381, 1, 0, 0, 0, 8395, 8393, 1, 0, 0, 0, 8396, 911, 1, 0, 0, 0, 8397, 8400, 3, 588, 294, 0, 8398, 8400, 5, 53, 0, 0, 8399, 8397, 1, 0, 0, 0, 8399, 8398, 1, 0, 0, 0, 8400, 913, 1, 0, 0, 0, 8401, 8402, 5, 157, 0, 0, 8402, 8403, 3, 922, 461, 0, 8403, 8404, 5, 7, 0, 0, 8404, 915, 1, 0, 0, 0, 8405, 8406, 5, 78, 0, 0, 8406, 8407, 5, 7, 0, 0, 8407, 917, 1, 0, 0, 0, 8408, 8414, 7, 67, 0, 0, 8409, 8411, 5, 33, 0, 0, 8410, 8412, 5, 269, 0, 0, 8411, 8410, 1, 0, 0, 0, 8411, 8412, 1, 0, 0, 0, 8412, 8413, 1, 0, 0, 0, 8413, 8415, 5, 153, 0, 0, 8414, 8409, 1, 0, 0, 0, 8414, 8415, 1, 0, 0, 0, 8415, 8416, 1, 0, 0, 0, 8416, 8417, 5, 7, 0, 0, 8417, 919, 1, 0, 0, 0, 8418, 8419, 5, 333, 0, 0, 8419, 8420, 3, 316, 158, 0, 8420, 8421, 5, 94, 0, 0, 8421, 8422, 5, 53, 0, 0, 8422, 8423, 5, 7, 0, 0, 8423, 8431, 1, 0, 0, 0, 8424, 8427, 5, 313, 0, 0, 8425, 8428, 3, 316, 158, 0, 8426, 8428, 5, 30, 0, 0, 8427, 8425, 1, 0, 0, 0, 8427, 8426, 1, 0, 0, 0, 8428, 8429, 1, 0, 0, 0, 8429, 8431, 5, 7, 0, 0, 8430, 8418, 1, 0, 0, 0, 8430, 8424, 1, 0, 0, 0, 8431, 921, 1, 0, 0, 0, 8432, 8435, 3, 818, 409, 0, 8433, 8435, 5, 28, 0, 0, 8434, 8432, 1, 0, 0, 0, 8434, 8433, 1, 0, 0, 0, 8435, 923, 1, 0, 0, 0, 8436, 8453, 5, 517, 0, 0, 8437, 8438, 5, 102, 0, 0, 8438, 8443, 3, 926, 463, 0, 8439, 8440, 5, 82, 0, 0, 8440, 8442, 3, 926, 463, 0, 8441, 8439, 1, 0, 0, 0, 8442, 8445, 1, 0, 0, 0, 8443, 8441, 1, 0, 0, 0, 8443, 8444, 1, 0, 0, 0, 8444, 8446, 1, 0, 0, 0, 8445, 8443, 1, 0, 0, 0, 8446, 8450, 5, 93, 0, 0, 8447, 8449, 3, 846, 423, 0, 8448, 8447, 1, 0, 0, 0, 8449, 8452, 1, 0, 0, 0, 8450, 8448, 1, 0, 0, 0, 8450, 8451, 1, 0, 0, 0, 8451, 8454, 1, 0, 0, 0, 8452, 8450, 1, 0, 0, 0, 8453, 8437, 1, 0, 0, 0, 8454, 8455, 1, 0, 0, 0, 8455, 8453, 1, 0, 0, 0, 8455, 8456, 1, 0, 0, 0, 8456, 925, 1, 0, 0, 0, 8457, 8461, 3, 928, 464, 0, 8458, 8459, 5, 511, 0, 0, 8459, 8461, 3, 808, 404, 0, 8460, 8457, 1, 0, 0, 0, 8460, 8458, 1, 0, 0, 0, 8461, 927, 1, 0, 0, 0, 8462, 8465, 3, 818, 409, 0, 8463, 8465, 3, 828, 414, 0, 8464, 8462, 1, 0, 0, 0, 8464, 8463, 1, 0, 0, 0, 8465, 929, 1, 0, 0, 0, 8466, 8468, 3, 756, 378, 0, 8467, 8466, 1, 0, 0, 0, 8467, 8468, 1, 0, 0, 0, 8468, 8470, 1, 0, 0, 0, 8469, 8471, 3, 580, 290, 0, 8470, 8469, 1, 0, 0, 0, 8470, 8471, 1, 0, 0, 0, 8471, 8473, 1, 0, 0, 0, 8472, 8474, 3, 610, 305, 0, 8473, 8472, 1, 0, 0, 0, 8473, 8474, 1, 0, 0, 0, 8474, 8476, 1, 0, 0, 0, 8475, 8477, 3, 638, 319, 0, 8476, 8475, 1, 0, 0, 0, 8476, 8477, 1, 0, 0, 0, 8477, 8479, 1, 0, 0, 0, 8478, 8480, 3, 600, 300, 0, 8479, 8478, 1, 0, 0, 0, 8479, 8480, 1, 0, 0, 0, 8480, 8483, 1, 0, 0, 0, 8481, 8482, 5, 67, 0, 0, 8482, 8484, 3, 674, 337, 0, 8483, 8481, 1, 0, 0, 0, 8483, 8484, 1, 0, 0, 0, 8484, 8486, 1, 0, 0, 0, 8485, 8487, 3, 702, 351, 0, 8486, 8485, 1, 0, 0, 0, 8486, 8487, 1, 0, 0, 0, 8487, 931, 1, 0, 0, 0, 1187, 935, 942, 1062, 1064, 1073, 1078, 1084, 1119, 1129, 1135, 1140, 1147, 1152, 1159, 1170, 1178, 1182, 1194, 1200, 1206, 1210, 1215, 1219, 1232, 1242, 1244, 1250, 1255, 1268, 1271, 1276, 1281, 1292, 1296, 1308, 1312, 1315, 1319, 1331, 1349, 1356, 1364, 1369, 1376, 1384, 1390, 1398, 1406, 1410, 1424, 1429, 1434, 1446, 1452, 1464, 1469, 1479, 1485, 1490, 1498, 1503, 1510, 1515, 1520, 1530, 1535, 1540, 1547, 1551, 1565, 1571, 1577, 1582, 1589, 1601, 1609, 1617, 1633, 1642, 1651, 1660, 1664, 1676, 1684, 1694, 1714, 1719, 1722, 1729, 1732, 1736, 1740, 1743, 1748, 1753, 1757, 1766, 1772, 1776, 1785, 1788, 1794, 1803, 1815, 1819, 1823, 1828, 1831, 1837, 1839, 1841, 1845, 1851, 1855, 1860, 1865, 1869, 1872, 1879, 1892, 1905, 1929, 1939, 1946, 1951, 1955, 1962, 1967, 1970, 1972, 1977, 1981, 1985, 1989, 1994, 1997, 2001, 2004, 2008, 2016, 2021, 2024, 2028, 2034, 2043, 2047, 2053, 2055, 2064, 2069, 2081, 2086, 2090, 2094, 2099, 2103, 2106, 2109, 2112, 2115, 2118, 2123, 2126, 2129, 2132, 2135, 2138, 2144, 2148, 2151, 2154, 2157, 2160, 2162, 2169, 2177, 2187, 2192, 2202, 2205, 2210, 2215, 2220, 2223, 2228, 2237, 2239, 2243, 2246, 2250, 2255, 2260, 2264, 2267, 2271, 2274, 2279, 2282, 2287, 2290, 2294, 2297, 2300, 2305, 2308, 2316, 2328, 2332, 2339, 2344, 2347, 2350, 2353, 2358, 2369, 2375, 2379, 2382, 2385, 2390, 2397, 2400, 2404, 2412, 2417, 2420, 2423, 2430, 2435, 2444, 2447, 2450, 2455, 2458, 2470, 2480, 2497, 2501, 2505, 2507, 2524, 2526, 2542, 2553, 2556, 2559, 2568, 2577, 2593, 2596, 2599, 2607, 2611, 2618, 2627, 2631, 2637, 2641, 2644, 2647, 2650, 2653, 2659, 2663, 2668, 2672, 2675, 2678, 2681, 2686, 2692, 2696, 2700, 2704, 2710, 2712, 2717, 2723, 2729, 2733, 2748, 2753, 2756, 2758, 2761, 2765, 2769, 2772, 2775, 2783, 2789, 2791, 2797, 2802, 2807, 2811, 2818, 2820, 2831, 2870, 2880, 2882, 2885, 2889, 2893, 2903, 2905, 2911, 2913, 2922, 2934, 2948, 2953, 2956, 2963, 2968, 2976, 2978, 2984, 2989, 2993, 2998, 3004, 3011, 3017, 3019, 3028, 3034, 3042, 3048, 3053, 3058, 3066, 3081, 3083, 3087, 3091, 3094, 3097, 3106, 3109, 3112, 3118, 3124, 3128, 3140, 3146, 3149, 3154, 3158, 3165, 3175, 3177, 3201, 3213, 3218, 3220, 3224, 3227, 3230, 3240, 3243, 3253, 3258, 3263, 3266, 3269, 3277, 3283, 3290, 3298, 3301, 3312, 3316, 3322, 3329, 3332, 3341, 3355, 3358, 3372, 3383, 3386, 3398, 3403, 3416, 3421, 3434, 3443, 3446, 3449, 3456, 3459, 3471, 3477, 3479, 3487, 3495, 3503, 3515, 3520, 3531, 3542, 3550, 3558, 3565, 3572, 3574, 3577, 3582, 3587, 3606, 3615, 3618, 3645, 3654, 3657, 3661, 3665, 3669, 3676, 3680, 3684, 3688, 3692, 3697, 3701, 3706, 3712, 3717, 3724, 3728, 3734, 3738, 3743, 3751, 3757, 3762, 3769, 3774, 3778, 3783, 3789, 3796, 3801, 3808, 3813, 3820, 3824, 3832, 3836, 3838, 3841, 3846, 3856, 3871, 3874, 3882, 3889, 3894, 3900, 3904, 3911, 3916, 3919, 3922, 3926, 3935, 3953, 3956, 3988, 3993, 3999, 4019, 4024, 4030, 4033, 4037, 4041, 4047, 4050, 4054, 4058, 4063, 4066, 4069, 4072, 4085, 4091, 4099, 4106, 4111, 4114, 4121, 4124, 4132, 4135, 4140, 4147, 4150, 4170, 4182, 4185, 4191, 4196, 4205, 4213, 4218, 4224, 4231, 4239, 4242, 4253, 4255, 4269, 4275, 4283, 4285, 4291, 4295, 4298, 4301, 4306, 4311, 4315, 4318, 4321, 4324, 4327, 4335, 4346, 4349, 4352, 4357, 4360, 4364, 4368, 4374, 4382, 4385, 4398, 4403, 4405, 4410, 4417, 4424, 4433, 4441, 4449, 4456, 4464, 4471, 4479, 4483, 4487, 4489, 4495, 4500, 4504, 4511, 4516, 4521, 4526, 4528, 4538, 4548, 4564, 4582, 4594, 4601, 4616, 4621, 4624, 4629, 4634, 4639, 4642, 4645, 4650, 4657, 4661, 4666, 4673, 4677, 4683, 4692, 4701, 4713, 4715, 4728, 4734, 4738, 4740, 4747, 4760, 4767, 4769, 4785, 4789, 4793, 4798, 4803, 4808, 4813, 4816, 4828, 4881, 4890, 4894, 4903, 4907, 4916, 4920, 4925, 4928, 4932, 4937, 4939, 4948, 4953, 4964, 4968, 4982, 4990, 5028, 5030, 5049, 5052, 5079, 5083, 5087, 5091, 5095, 5098, 5113, 5120, 5134, 5147, 5172, 5191, 5206, 5222, 5229, 5240, 5243, 5262, 5265, 5278, 5282, 5302, 5314, 5318, 5340, 5344, 5354, 5358, 5364, 5368, 5372, 5376, 5383, 5388, 5399, 5403, 5406, 5411, 5417, 5428, 5432, 5435, 5439, 5443, 5446, 5456, 5459, 5463, 5468, 5474, 5477, 5482, 5485, 5492, 5494, 5500, 5504, 5513, 5518, 5520, 5530, 5533, 5538, 5546, 5549, 5554, 5556, 5558, 5564, 5581, 5587, 5600, 5606, 5610, 5615, 5645, 5660, 5665, 5669, 5682, 5686, 5688, 5697, 5703, 5705, 5709, 5712, 5715, 5718, 5721, 5723, 5726, 5730, 5738, 5743, 5746, 5752, 5756, 5760, 5765, 5767, 5771, 5775, 5782, 5788, 5792, 5794, 5796, 5809, 5817, 5825, 5836, 5845, 5850, 5854, 5858, 5865, 5868, 5870, 5878, 5882, 5885, 5892, 5899, 5904, 5911, 5914, 5916, 5919, 5925, 5930, 5934, 5941, 5951, 5958, 5961, 5964, 5968, 5979, 5982, 5985, 5988, 5991, 5998, 6001, 6004, 6011, 6023, 6030, 6032, 6037, 6042, 6044, 6050, 6057, 6062, 6067, 6071, 6075, 6079, 6081, 6085, 6089, 6092, 6095, 6097, 6107, 6109, 6114, 6118, 6123, 6127, 6134, 6139, 6143, 6146, 6152, 6155, 6174, 6181, 6185, 6188, 6192, 6196, 6199, 6202, 6207, 6216, 6223, 6227, 6231, 6235, 6238, 6240, 6245, 6249, 6254, 6260, 6267, 6272, 6277, 6286, 6293, 6301, 6312, 6317, 6321, 6324, 6328, 6333, 6337, 6342, 6350, 6361, 6366, 6370, 6373, 6376, 6378, 6381, 6384, 6387, 6391, 6395, 6399, 6401, 6410, 6415, 6421, 6425, 6427, 6434, 6439, 6445, 6447, 6451, 6458, 6463, 6466, 6472, 6476, 6482, 6491, 6497, 6499, 6504, 6507, 6516, 6523, 6525, 6532, 6537, 6540, 6550, 6561, 6566, 6570, 6578, 6588, 6595, 6601, 6612, 6618, 6628, 6637, 6641, 6644, 6646, 6648, 6652, 6660, 6663, 6668, 6673, 6680, 6682, 6688, 6692, 6695, 6700, 6703, 6705, 6711, 6720, 6726, 6729, 6737, 6740, 6744, 6750, 6752, 6755, 6759, 6764, 6771, 6778, 6780, 6786, 6788, 6793, 6795, 6799, 6808, 6812, 6820, 6822, 6836, 6839, 6847, 6856, 6862, 6867, 6875, 6877, 6882, 6886, 6891, 6896, 6902, 6918, 6920, 6929, 6944, 6949, 6952, 6958, 6963, 6976, 6981, 6985, 6992, 7011, 7023, 7028, 7036, 7038, 7040, 7049, 7052, 7057, 7062, 7065, 7076, 7084, 7089, 7091, 7094, 7098, 7109, 7130, 7138, 7151, 7161, 7167, 7173, 7176, 7179, 7205, 7207, 7228, 7238, 7251, 7256, 7260, 7262, 7274, 7281, 7287, 7293, 7297, 7308, 7318, 7322, 7327, 7330, 7333, 7342, 7353, 7355, 7359, 7364, 7373, 7378, 7386, 7396, 7404, 7408, 7411, 7418, 7426, 7430, 7437, 7445, 7447, 7456, 7459, 7471, 7480, 7487, 7496, 7506, 7511, 7515, 7517, 7520, 7525, 7530, 7538, 7546, 7549, 7556, 7564, 7572, 7580, 7597, 7604, 7612, 7629, 7635, 7641, 7649, 7655, 7660, 7668, 7673, 7676, 7685, 7692, 7697, 7701, 7706, 7712, 7717, 7725, 7780, 7787, 7793, 7795, 7797, 7799, 7805, 7809, 7813, 7824, 7827, 7831, 7835, 7839, 7842, 7845, 7848, 7857, 7862, 7866, 7899, 7909, 7913, 7919, 7924, 7933, 7941, 7952, 7960, 7969, 7978, 7983, 7987, 7997, 8002, 8010, 8015, 8018, 8025, 8031, 8039, 8047, 8050, 8057, 8059, 8062, 8068, 8077, 8081, 8095, 8098, 8100, 8106, 8116, 8118, 8120, 8128, 8131, 8134, 8144, 8152, 8158, 8164, 8171, 8175, 8179, 8182, 8185, 8191, 8198, 8201, 8209, 8211, 8220, 8225, 8227, 8234, 8240, 8243, 8255, 8262, 8264, 8268, 8274, 8279, 8283, 8286, 8289, 8298, 8301, 8305, 8309, 8311, 8314, 8317, 8323, 8330, 8337, 8343, 8345, 8349, 8354, 8372, 8377, 8379, 8388, 8395, 8399, 8411, 8414, 8427, 8430, 8434, 8443, 8450, 8455, 8460, 8464, 8467, 8470, 8473, 8476, 8479, 8483, 8486] \ No newline at end of file diff --git a/src/lib/postgresql/PostgreSqlParser.ts b/src/lib/postgresql/PostgreSqlParser.ts index 7a7ed4a25..5dc0570b5 100644 --- a/src/lib/postgresql/PostgreSqlParser.ts +++ b/src/lib/postgresql/PostgreSqlParser.ts @@ -11532,7 +11532,7 @@ export class PostgreSqlParser extends SQLParserBase { this.state = 2225; this.column_name_create(); this.state = 2226; - this.typename(); + localContext._colType = this.typename(); this.state = 2228; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 184, this.context) ) { @@ -36851,7 +36851,7 @@ export class PostgreSqlParser extends SQLParserBase { } this.state = 6453; - this.colid(); + localContext._alias = this.colid(); this.state = 6458; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 864, this.context) ) { @@ -36913,7 +36913,7 @@ export class PostgreSqlParser extends SQLParserBase { if (_la === 53 || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 4294959489) !== 0) || ((((_la - 148)) & ~0x1F) === 0 && ((1 << (_la - 148)) & 4294967295) !== 0) || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 4294967295) !== 0) || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 4227989503) !== 0) || ((((_la - 244)) & ~0x1F) === 0 && ((1 << (_la - 244)) & 4294967295) !== 0) || ((((_la - 276)) & ~0x1F) === 0 && ((1 << (_la - 276)) & 4294967295) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & 4294967295) !== 0) || ((((_la - 340)) & ~0x1F) === 0 && ((1 << (_la - 340)) & 4294967295) !== 0) || ((((_la - 372)) & ~0x1F) === 0 && ((1 << (_la - 372)) & 4294967295) !== 0) || ((((_la - 404)) & ~0x1F) === 0 && ((1 << (_la - 404)) & 4294967295) !== 0) || ((((_la - 436)) & ~0x1F) === 0 && ((1 << (_la - 436)) & 4294705151) !== 0) || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 4294967279) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 18350039) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) { { this.state = 6462; - this.colid(); + localContext._alias = this.colid(); } } @@ -37315,7 +37315,7 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.EscapeStringConstant: { this.state = 6465; - this.colid(); + localContext._alias = this.colid(); } break; default: @@ -45671,9 +45671,9 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 738, PostgreSqlParser.RULE_func_arg_expr); let _la: number; try { - this.state = 7446; + this.state = 7447; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1020, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1021, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { @@ -45693,17 +45693,25 @@ export class PostgreSqlParser extends SQLParserBase { { this.state = 7442; this.type_function_name(); - this.state = 7443; + this.state = 7445; + this.errorHandler.sync(this); _la = this.tokenStream.LA(1); - if(!(_la === 20 || _la === 22)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); + if (_la === 20 || _la === 22) { + { + this.state = 7443; + _la = this.tokenStream.LA(1); + if(!(_la === 20 || _la === 22)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 7444; + this.expression(); + } } - this.state = 7444; - this.expression(); + } break; } @@ -45729,9 +45737,9 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7448; + this.state = 7449; this.match(PostgreSqlParser.OPEN_BRACKET); - this.state = 7458; + this.state = 7459; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.OPEN_PAREN: @@ -46177,28 +46185,28 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.PLSQLIDENTIFIER: case PostgreSqlParser.EscapeStringConstant: { - this.state = 7449; + this.state = 7450; this.expr_list(); } break; case PostgreSqlParser.OPEN_BRACKET: { { - this.state = 7450; + this.state = 7451; this.array_expr(); - this.state = 7455; + this.state = 7456; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7451; - this.match(PostgreSqlParser.COMMA); this.state = 7452; + this.match(PostgreSqlParser.COMMA); + this.state = 7453; this.array_expr(); } } - this.state = 7457; + this.state = 7458; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -46210,7 +46218,7 @@ export class PostgreSqlParser extends SQLParserBase { default: break; } - this.state = 7460; + this.state = 7461; this.match(PostgreSqlParser.CLOSE_BRACKET); } } @@ -46232,62 +46240,62 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Extract_argContext(this.context, this.state); this.enterRule(localContext, 742, PostgreSqlParser.RULE_extract_arg); try { - this.state = 7470; + this.state = 7471; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1023, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1024, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7462; + this.state = 7463; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7463; + this.state = 7464; this.match(PostgreSqlParser.KW_YEAR); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 7464; + this.state = 7465; this.match(PostgreSqlParser.KW_MONTH); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 7465; + this.state = 7466; this.match(PostgreSqlParser.KW_DAY); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 7466; + this.state = 7467; this.match(PostgreSqlParser.KW_HOUR); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 7467; + this.state = 7468; this.match(PostgreSqlParser.KW_MINUTE); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 7468; + this.state = 7469; this.match(PostgreSqlParser.KW_SECOND); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 7469; + this.state = 7470; this.sconst(); } break; @@ -46314,7 +46322,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7472; + this.state = 7473; _la = this.tokenStream.LA(1); if(!(((((_la - 483)) & ~0x1F) === 0 && ((1 << (_la - 483)) & 15) !== 0))) { this.errorHandler.recoverInline(this); @@ -46344,26 +46352,26 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 746, PostgreSqlParser.RULE_substr_list); let _la: number; try { - this.state = 7495; + this.state = 7496; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1026, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1027, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7474; - this.expression(); this.state = 7475; - this.match(PostgreSqlParser.KW_FROM); + this.expression(); this.state = 7476; + this.match(PostgreSqlParser.KW_FROM); + this.state = 7477; this.expression(); - this.state = 7479; + this.state = 7480; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 62) { { - this.state = 7477; - this.match(PostgreSqlParser.KW_FOR); this.state = 7478; + this.match(PostgreSqlParser.KW_FOR); + this.state = 7479; this.expression(); } } @@ -46373,20 +46381,20 @@ export class PostgreSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7481; - this.expression(); this.state = 7482; - this.match(PostgreSqlParser.KW_FOR); + this.expression(); this.state = 7483; + this.match(PostgreSqlParser.KW_FOR); + this.state = 7484; this.expression(); - this.state = 7486; + this.state = 7487; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 64) { { - this.state = 7484; - this.match(PostgreSqlParser.KW_FROM); this.state = 7485; + this.match(PostgreSqlParser.KW_FROM); + this.state = 7486; this.expression(); } } @@ -46396,22 +46404,22 @@ export class PostgreSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 7488; - this.expression(); this.state = 7489; - this.match(PostgreSqlParser.KW_SIMILAR); - this.state = 7490; this.expression(); + this.state = 7490; + this.match(PostgreSqlParser.KW_SIMILAR); this.state = 7491; - this.match(PostgreSqlParser.KW_ESCAPE); + this.expression(); this.state = 7492; + this.match(PostgreSqlParser.KW_ESCAPE); + this.state = 7493; this.expression(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 7494; + this.state = 7495; this.expr_list(); } break; @@ -46437,13 +46445,13 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7497; - this.match(PostgreSqlParser.KW_WHEN); this.state = 7498; - this.expression(); + this.match(PostgreSqlParser.KW_WHEN); this.state = 7499; - this.match(PostgreSqlParser.KW_THEN); + this.expression(); this.state = 7500; + this.match(PostgreSqlParser.KW_THEN); + this.state = 7501; this.expression(); } } @@ -46466,15 +46474,15 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 750, PostgreSqlParser.RULE_indirection_el); let _la: number; try { - this.state = 7519; + this.state = 7520; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.DOT: this.enterOuterAlt(localContext, 1); { - this.state = 7502; + this.state = 7503; this.match(PostgreSqlParser.DOT); - this.state = 7505; + this.state = 7506; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_ALL: @@ -46968,13 +46976,13 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.PLSQLIDENTIFIER: case PostgreSqlParser.EscapeStringConstant: { - this.state = 7503; + this.state = 7504; this.collabel(); } break; case PostgreSqlParser.STAR: { - this.state = 7504; + this.state = 7505; this.match(PostgreSqlParser.STAR); } break; @@ -46986,37 +46994,37 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.OPEN_BRACKET: this.enterOuterAlt(localContext, 2); { - this.state = 7507; + this.state = 7508; this.match(PostgreSqlParser.OPEN_BRACKET); - this.state = 7516; + this.state = 7517; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1030, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1031, this.context) ) { case 1: { - this.state = 7508; + this.state = 7509; this.expression(); } break; case 2: { - this.state = 7510; + this.state = 7511; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 34074721) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174763023) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 1174402559) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) { { - this.state = 7509; + this.state = 7510; this.expression(); } } - this.state = 7512; + this.state = 7513; this.match(PostgreSqlParser.COLON); - this.state = 7514; + this.state = 7515; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 34074721) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174763023) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 1174402559) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) { { - this.state = 7513; + this.state = 7514; this.expression(); } } @@ -47024,7 +47032,7 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 7518; + this.state = 7519; this.match(PostgreSqlParser.CLOSE_BRACKET); } break; @@ -47053,7 +47061,7 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 7522; + this.state = 7523; this.errorHandler.sync(this); alternative = 1; do { @@ -47061,7 +47069,7 @@ export class PostgreSqlParser extends SQLParserBase { case 1: { { - this.state = 7521; + this.state = 7522; this.indirection_el(); } } @@ -47069,9 +47077,9 @@ export class PostgreSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 7524; + this.state = 7525; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1032, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1033, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } } @@ -47096,21 +47104,21 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 7529; + this.state = 7530; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1033, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1034, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 7526; + this.state = 7527; this.indirection_el(); } } } - this.state = 7531; + this.state = 7532; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1033, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1034, this.context); } } } @@ -47135,25 +47143,25 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 7532; + this.state = 7533; this.target_el(); - this.state = 7537; + this.state = 7538; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1034, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1035, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 7533; - this.match(PostgreSqlParser.COMMA); this.state = 7534; + this.match(PostgreSqlParser.COMMA); + this.state = 7535; this.target_el(); } } } - this.state = 7539; + this.state = 7540; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1034, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1035, this.context); } } } @@ -47175,29 +47183,29 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Target_elContext(this.context, this.state); this.enterRule(localContext, 758, PostgreSqlParser.RULE_target_el); try { - this.state = 7548; + this.state = 7549; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1036, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1037, this.context) ) { case 1: localContext = new Target_labelContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7540; + this.state = 7541; this.column_expr_noparen(); - this.state = 7545; + this.state = 7546; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1035, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1036, this.context) ) { case 1: { - this.state = 7541; - this.match(PostgreSqlParser.KW_AS); this.state = 7542; + this.match(PostgreSqlParser.KW_AS); + this.state = 7543; this.collabel(); } break; case 2: { - this.state = 7543; + this.state = 7544; this.identifier(); } break; @@ -47213,7 +47221,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new Target_starContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 7547; + this.state = 7548; this.match(PostgreSqlParser.STAR); } break; @@ -47240,21 +47248,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7550; + this.state = 7551; this.qualified_name(); - this.state = 7555; + this.state = 7556; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7551; - this.match(PostgreSqlParser.COMMA); this.state = 7552; + this.match(PostgreSqlParser.COMMA); + this.state = 7553; this.qualified_name(); } } - this.state = 7557; + this.state = 7558; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -47281,21 +47289,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7558; + this.state = 7559; this.table_name(); - this.state = 7563; + this.state = 7564; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7559; - this.match(PostgreSqlParser.COMMA); this.state = 7560; + this.match(PostgreSqlParser.COMMA); + this.state = 7561; this.table_name(); } } - this.state = 7565; + this.state = 7566; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -47322,21 +47330,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7566; + this.state = 7567; this.schema_name(); - this.state = 7571; + this.state = 7572; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7567; - this.match(PostgreSqlParser.COMMA); this.state = 7568; + this.match(PostgreSqlParser.COMMA); + this.state = 7569; this.schema_name(); } } - this.state = 7573; + this.state = 7574; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -47363,21 +47371,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7574; + this.state = 7575; this.database_name(); - this.state = 7579; + this.state = 7580; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7575; - this.match(PostgreSqlParser.COMMA); this.state = 7576; + this.match(PostgreSqlParser.COMMA); + this.state = 7577; this.database_name(); } } - this.state = 7581; + this.state = 7582; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -47404,7 +47412,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new TablespaceNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7582; + this.state = 7583; this.qualified_name(); } } @@ -47429,7 +47437,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new TablespaceNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7584; + this.state = 7585; this.qualified_name(); } } @@ -47454,7 +47462,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new TableNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7586; + this.state = 7587; this.qualified_name(); } } @@ -47479,7 +47487,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new TableNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7588; + this.state = 7589; this.qualified_name(); } } @@ -47504,7 +47512,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new ViewNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7590; + this.state = 7591; this.qualified_name(); } } @@ -47529,7 +47537,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new ViewNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7592; + this.state = 7593; this.any_name(); } } @@ -47553,14 +47561,14 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7594; + this.state = 7595; this.colid(); - this.state = 7596; + this.state = 7597; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1041, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1042, this.context) ) { case 1: { - this.state = 7595; + this.state = 7596; this.indirection(); } break; @@ -47588,21 +47596,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7598; + this.state = 7599; this.tablespace_name(); - this.state = 7603; + this.state = 7604; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7599; - this.match(PostgreSqlParser.COMMA); this.state = 7600; + this.match(PostgreSqlParser.COMMA); + this.state = 7601; this.tablespace_name(); } } - this.state = 7605; + this.state = 7606; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -47629,21 +47637,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7606; + this.state = 7607; this.colid(); - this.state = 7611; + this.state = 7612; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7607; - this.match(PostgreSqlParser.COMMA); this.state = 7608; + this.match(PostgreSqlParser.COMMA); + this.state = 7609; this.colid(); } } - this.state = 7613; + this.state = 7614; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -47670,7 +47678,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new DatabaseNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7614; + this.state = 7615; this.any_name(); } } @@ -47695,7 +47703,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new DatabaseNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7616; + this.state = 7617; this.any_name(); } } @@ -47720,7 +47728,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new SchemaNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7618; + this.state = 7619; this.any_name(); } } @@ -47745,7 +47753,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new RoutineNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7620; + this.state = 7621; this.colid(); } } @@ -47770,7 +47778,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new RoutineNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7622; + this.state = 7623; this.colid(); } } @@ -47792,14 +47800,14 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Procedure_nameContext(this.context, this.state); this.enterRule(localContext, 796, PostgreSqlParser.RULE_procedure_name); try { - this.state = 7628; + this.state = 7629; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1044, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1045, this.context) ) { case 1: localContext = new ProcedureNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7624; + this.state = 7625; this.type_function_name(); } break; @@ -47807,9 +47815,9 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new ProcedureNameContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 7625; - this.colid(); this.state = 7626; + this.colid(); + this.state = 7627; this.indirection(); } break; @@ -47833,14 +47841,14 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Procedure_name_createContext(this.context, this.state); this.enterRule(localContext, 798, PostgreSqlParser.RULE_procedure_name_create); try { - this.state = 7634; + this.state = 7635; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1045, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1046, this.context) ) { case 1: localContext = new ProcedureNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7630; + this.state = 7631; this.type_function_name(); } break; @@ -47848,9 +47856,9 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new ProcedureNameCreateContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 7631; - this.colid(); this.state = 7632; + this.colid(); + this.state = 7633; this.indirection(); } break; @@ -47874,16 +47882,16 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Column_nameContext(this.context, this.state); this.enterRule(localContext, 800, PostgreSqlParser.RULE_column_name); try { - this.state = 7640; + this.state = 7641; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1046, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1047, this.context) ) { case 1: localContext = new ColumnNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7636; - this.colid(); this.state = 7637; + this.colid(); + this.state = 7638; this.opt_indirection(); } break; @@ -47891,7 +47899,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new ColumnNameMatchContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 7639; + this.state = 7640; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } @@ -47920,7 +47928,7 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new ColumnNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7642; + this.state = 7643; this.colid(); } } @@ -47942,14 +47950,14 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Function_name_createContext(this.context, this.state); this.enterRule(localContext, 804, PostgreSqlParser.RULE_function_name_create); try { - this.state = 7648; + this.state = 7649; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1047, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1048, this.context) ) { case 1: localContext = new FunctionNameCreateContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7644; + this.state = 7645; this.type_function_name(); } break; @@ -47957,9 +47965,9 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new FunctionNameCreateContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 7645; - this.colid(); this.state = 7646; + this.colid(); + this.state = 7647; this.indirection(); } break; @@ -47983,14 +47991,14 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Function_nameContext(this.context, this.state); this.enterRule(localContext, 806, PostgreSqlParser.RULE_function_name); try { - this.state = 7654; + this.state = 7655; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1048, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1049, this.context) ) { case 1: localContext = new FunctionNameContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 7650; + this.state = 7651; this.type_function_name(); } break; @@ -47998,9 +48006,9 @@ export class PostgreSqlParser extends SQLParserBase { localContext = new FunctionNameContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 7651; - this.colid(); this.state = 7652; + this.colid(); + this.state = 7653; this.indirection(); } break; @@ -48026,16 +48034,16 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7656; + this.state = 7657; this.anysconst(); - this.state = 7659; + this.state = 7660; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1049, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1050, this.context) ) { case 1: { - this.state = 7657; - this.match(PostgreSqlParser.KW_UESCAPE); this.state = 7658; + this.match(PostgreSqlParser.KW_UESCAPE); + this.state = 7659; this.anysconst(); } break; @@ -48061,50 +48069,50 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 810, PostgreSqlParser.RULE_anysconst); let _la: number; try { - this.state = 7672; + this.state = 7673; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.StringConstant: this.enterOuterAlt(localContext, 1); { - this.state = 7661; + this.state = 7662; this.match(PostgreSqlParser.StringConstant); } break; case PostgreSqlParser.UnicodeEscapeStringConstant: this.enterOuterAlt(localContext, 2); { - this.state = 7662; + this.state = 7663; this.match(PostgreSqlParser.UnicodeEscapeStringConstant); } break; case PostgreSqlParser.BeginDollarStringConstant: this.enterOuterAlt(localContext, 3); { - this.state = 7663; + this.state = 7664; this.match(PostgreSqlParser.BeginDollarStringConstant); - this.state = 7667; + this.state = 7668; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 588) { { { - this.state = 7664; + this.state = 7665; this.match(PostgreSqlParser.DollarText); } } - this.state = 7669; + this.state = 7670; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 7670; + this.state = 7671; this.match(PostgreSqlParser.EndDollarStringConstant); } break; case PostgreSqlParser.EscapeStringConstant: this.enterOuterAlt(localContext, 4); { - this.state = 7671; + this.state = 7672; this.match(PostgreSqlParser.EscapeStringConstant); } break; @@ -48133,12 +48141,12 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7675; + this.state = 7676; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 12 || _la === 13) { { - this.state = 7674; + this.state = 7675; _la = this.tokenStream.LA(1); if(!(_la === 12 || _la === 13)) { this.errorHandler.recoverInline(this); @@ -48150,7 +48158,7 @@ export class PostgreSqlParser extends SQLParserBase { } } - this.state = 7677; + this.state = 7678; this.match(PostgreSqlParser.Integral); } } @@ -48172,41 +48180,41 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new RolespecContext(this.context, this.state); this.enterRule(localContext, 814, PostgreSqlParser.RULE_rolespec); try { - this.state = 7684; + this.state = 7685; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1053, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1054, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7679; + this.state = 7680; this.nonreservedword(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7680; + this.state = 7681; this.match(PostgreSqlParser.KW_CURRENT_USER); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 7681; + this.state = 7682; this.match(PostgreSqlParser.KW_CURRENT_ROLE); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 7682; + this.state = 7683; this.match(PostgreSqlParser.KW_SESSION_USER); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 7683; + this.state = 7684; this.match(PostgreSqlParser.KW_PUBLIC); } break; @@ -48233,21 +48241,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7686; + this.state = 7687; this.rolespec(); - this.state = 7691; + this.state = 7692; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7687; - this.match(PostgreSqlParser.COMMA); this.state = 7688; + this.match(PostgreSqlParser.COMMA); + this.state = 7689; this.rolespec(); } } - this.state = 7693; + this.state = 7694; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -48271,20 +48279,20 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new ColidContext(this.context, this.state); this.enterRule(localContext, 818, PostgreSqlParser.RULE_colid); try { - this.state = 7696; + this.state = 7697; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1055, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1056, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7694; + this.state = 7695; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7695; + this.state = 7696; this.col_name_keyword(); } break; @@ -48308,20 +48316,20 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Type_function_nameContext(this.context, this.state); this.enterRule(localContext, 820, PostgreSqlParser.RULE_type_function_name); try { - this.state = 7700; + this.state = 7701; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1056, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1057, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7698; + this.state = 7699; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7699; + this.state = 7700; this.type_func_name_keyword(); } break; @@ -48345,27 +48353,27 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new NonreservedwordContext(this.context, this.state); this.enterRule(localContext, 822, PostgreSqlParser.RULE_nonreservedword); try { - this.state = 7705; + this.state = 7706; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1057, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1058, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7702; + this.state = 7703; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7703; + this.state = 7704; this.col_name_keyword(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 7704; + this.state = 7705; this.type_func_name_keyword(); } break; @@ -48389,34 +48397,34 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new CollabelContext(this.context, this.state); this.enterRule(localContext, 824, PostgreSqlParser.RULE_collabel); try { - this.state = 7711; + this.state = 7712; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1058, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1059, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7707; + this.state = 7708; this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7708; + this.state = 7709; this.col_name_keyword(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 7709; + this.state = 7710; this.type_func_name_keyword(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 7710; + this.state = 7711; this.reserved_keyword(); } break; @@ -48440,22 +48448,22 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new IdentifierContext(this.context, this.state); this.enterRule(localContext, 826, PostgreSqlParser.RULE_identifier); try { - this.state = 7724; + this.state = 7725; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.Identifier: this.enterOuterAlt(localContext, 1); { - this.state = 7713; + this.state = 7714; this.match(PostgreSqlParser.Identifier); - this.state = 7716; + this.state = 7717; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1059, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1060, this.context) ) { case 1: { - this.state = 7714; - this.match(PostgreSqlParser.KW_UESCAPE); this.state = 7715; + this.match(PostgreSqlParser.KW_UESCAPE); + this.state = 7716; this.anysconst(); } break; @@ -48468,35 +48476,35 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.EscapeStringConstant: this.enterOuterAlt(localContext, 2); { - this.state = 7718; + this.state = 7719; this.sconst(); } break; case PostgreSqlParser.QuotedIdentifier: this.enterOuterAlt(localContext, 3); { - this.state = 7719; + this.state = 7720; this.match(PostgreSqlParser.QuotedIdentifier); } break; case PostgreSqlParser.UnicodeQuotedIdentifier: this.enterOuterAlt(localContext, 4); { - this.state = 7720; + this.state = 7721; this.match(PostgreSqlParser.UnicodeQuotedIdentifier); } break; case PostgreSqlParser.PLSQLVARIABLENAME: this.enterOuterAlt(localContext, 5); { - this.state = 7721; + this.state = 7722; this.match(PostgreSqlParser.PLSQLVARIABLENAME); } break; case PostgreSqlParser.PLSQLIDENTIFIER: this.enterOuterAlt(localContext, 6); { - this.state = 7722; + this.state = 7723; this.match(PostgreSqlParser.PLSQLIDENTIFIER); } break; @@ -48836,7 +48844,7 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.KW_BUFFER_USAGE_LIMIT: this.enterOuterAlt(localContext, 7); { - this.state = 7723; + this.state = 7724; this.unreserved_keyword(); } break; @@ -48865,7 +48873,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7726; + this.state = 7727; _la = this.tokenStream.LA(1); if(!(_la === 53 || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 4294959489) !== 0) || ((((_la - 148)) & ~0x1F) === 0 && ((1 << (_la - 148)) & 4294967295) !== 0) || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 4294967295) !== 0) || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 4227989503) !== 0) || ((((_la - 244)) & ~0x1F) === 0 && ((1 << (_la - 244)) & 4294967295) !== 0) || ((((_la - 276)) & ~0x1F) === 0 && ((1 << (_la - 276)) & 4294967295) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & 4294967295) !== 0) || ((((_la - 340)) & ~0x1F) === 0 && ((1 << (_la - 340)) & 4294967295) !== 0) || ((((_la - 372)) & ~0x1F) === 0 && ((1 << (_la - 372)) & 32767) !== 0) || ((((_la - 433)) & ~0x1F) === 0 && ((1 << (_la - 433)) & 4291821567) !== 0) || ((((_la - 465)) & ~0x1F) === 0 && ((1 << (_la - 465)) & 4278187359) !== 0) || ((((_la - 497)) & ~0x1F) === 0 && ((1 << (_la - 497)) & 146800319) !== 0) || _la === 547 || _la === 548)) { this.errorHandler.recoverInline(this); @@ -48894,363 +48902,363 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Col_name_keywordContext(this.context, this.state); this.enterRule(localContext, 830, PostgreSqlParser.RULE_col_name_keyword); try { - this.state = 7779; + this.state = 7780; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1061, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1062, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7728; + this.state = 7729; this.match(PostgreSqlParser.KW_BETWEEN); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7729; + this.state = 7730; this.match(PostgreSqlParser.KW_BIGINT); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 7730; + this.state = 7731; this.bit(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 7731; + this.state = 7732; this.match(PostgreSqlParser.KW_BOOLEAN); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 7732; + this.state = 7733; this.match(PostgreSqlParser.KW_CHAR); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 7733; + this.state = 7734; this.character(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 7734; + this.state = 7735; this.match(PostgreSqlParser.KW_COALESCE); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 7735; + this.state = 7736; this.match(PostgreSqlParser.KW_DEC); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 7736; + this.state = 7737; this.match(PostgreSqlParser.KW_DECIMAL); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 7737; + this.state = 7738; this.match(PostgreSqlParser.KW_EXISTS); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 7738; + this.state = 7739; this.match(PostgreSqlParser.KW_EXTRACT); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 7739; + this.state = 7740; this.match(PostgreSqlParser.KW_FLOAT); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 7740; + this.state = 7741; this.match(PostgreSqlParser.KW_GREATEST); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 7741; + this.state = 7742; this.match(PostgreSqlParser.KW_GROUPING); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 7742; + this.state = 7743; this.match(PostgreSqlParser.KW_INOUT); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 7743; + this.state = 7744; this.match(PostgreSqlParser.KW_INT); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 7744; + this.state = 7745; this.match(PostgreSqlParser.KW_INTEGER); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 7745; + this.state = 7746; this.match(PostgreSqlParser.KW_INTERVAL); } break; case 19: this.enterOuterAlt(localContext, 19); { - this.state = 7746; + this.state = 7747; this.match(PostgreSqlParser.KW_LEAST); } break; case 20: this.enterOuterAlt(localContext, 20); { - this.state = 7747; + this.state = 7748; this.match(PostgreSqlParser.KW_NATIONAL); } break; case 21: this.enterOuterAlt(localContext, 21); { - this.state = 7748; + this.state = 7749; this.match(PostgreSqlParser.KW_NCHAR); } break; case 22: this.enterOuterAlt(localContext, 22); { - this.state = 7749; + this.state = 7750; this.match(PostgreSqlParser.KW_NONE); } break; case 23: this.enterOuterAlt(localContext, 23); { - this.state = 7750; + this.state = 7751; this.match(PostgreSqlParser.KW_NORMALIZE); } break; case 24: this.enterOuterAlt(localContext, 24); { - this.state = 7751; + this.state = 7752; this.match(PostgreSqlParser.KW_NULLIF); } break; case 25: this.enterOuterAlt(localContext, 25); { - this.state = 7752; + this.state = 7753; this.numeric(); } break; case 26: this.enterOuterAlt(localContext, 26); { - this.state = 7753; + this.state = 7754; this.match(PostgreSqlParser.KW_OUT); } break; case 27: this.enterOuterAlt(localContext, 27); { - this.state = 7754; + this.state = 7755; this.match(PostgreSqlParser.KW_OVERLAY); } break; case 28: this.enterOuterAlt(localContext, 28); { - this.state = 7755; + this.state = 7756; this.match(PostgreSqlParser.KW_POSITION); } break; case 29: this.enterOuterAlt(localContext, 29); { - this.state = 7756; + this.state = 7757; this.match(PostgreSqlParser.KW_PRECISION); } break; case 30: this.enterOuterAlt(localContext, 30); { - this.state = 7757; + this.state = 7758; this.match(PostgreSqlParser.KW_REAL); } break; case 31: this.enterOuterAlt(localContext, 31); { - this.state = 7758; + this.state = 7759; this.match(PostgreSqlParser.KW_ROW); } break; case 32: this.enterOuterAlt(localContext, 32); { - this.state = 7759; + this.state = 7760; this.match(PostgreSqlParser.KW_SETOF); } break; case 33: this.enterOuterAlt(localContext, 33); { - this.state = 7760; + this.state = 7761; this.match(PostgreSqlParser.KW_SMALLINT); } break; case 34: this.enterOuterAlt(localContext, 34); { - this.state = 7761; + this.state = 7762; this.match(PostgreSqlParser.KW_SUBSTRING); } break; case 35: this.enterOuterAlt(localContext, 35); { - this.state = 7762; + this.state = 7763; this.match(PostgreSqlParser.KW_TIME); } break; case 36: this.enterOuterAlt(localContext, 36); { - this.state = 7763; + this.state = 7764; this.match(PostgreSqlParser.KW_TIMESTAMP); } break; case 37: this.enterOuterAlt(localContext, 37); { - this.state = 7764; + this.state = 7765; this.match(PostgreSqlParser.KW_TREAT); } break; case 38: this.enterOuterAlt(localContext, 38); { - this.state = 7765; + this.state = 7766; this.match(PostgreSqlParser.KW_TRIM); } break; case 39: this.enterOuterAlt(localContext, 39); { - this.state = 7766; + this.state = 7767; this.match(PostgreSqlParser.KW_VALUES); } break; case 40: this.enterOuterAlt(localContext, 40); { - this.state = 7767; + this.state = 7768; this.match(PostgreSqlParser.KW_VARCHAR); } break; case 41: this.enterOuterAlt(localContext, 41); { - this.state = 7768; + this.state = 7769; this.match(PostgreSqlParser.KW_XMLATTRIBUTES); } break; case 42: this.enterOuterAlt(localContext, 42); { - this.state = 7769; + this.state = 7770; this.match(PostgreSqlParser.KW_XMLCONCAT); } break; case 43: this.enterOuterAlt(localContext, 43); { - this.state = 7770; + this.state = 7771; this.match(PostgreSqlParser.KW_XMLELEMENT); } break; case 44: this.enterOuterAlt(localContext, 44); { - this.state = 7771; + this.state = 7772; this.match(PostgreSqlParser.KW_XMLEXISTS); } break; case 45: this.enterOuterAlt(localContext, 45); { - this.state = 7772; + this.state = 7773; this.match(PostgreSqlParser.KW_XMLFOREST); } break; case 46: this.enterOuterAlt(localContext, 46); { - this.state = 7773; + this.state = 7774; this.match(PostgreSqlParser.KW_XMLNAMESPACES); } break; case 47: this.enterOuterAlt(localContext, 47); { - this.state = 7774; + this.state = 7775; this.match(PostgreSqlParser.KW_XMLPARSE); } break; case 48: this.enterOuterAlt(localContext, 48); { - this.state = 7775; + this.state = 7776; this.match(PostgreSqlParser.KW_XMLPI); } break; case 49: this.enterOuterAlt(localContext, 49); { - this.state = 7776; + this.state = 7777; this.match(PostgreSqlParser.KW_XMLROOT); } break; case 50: this.enterOuterAlt(localContext, 50); { - this.state = 7777; + this.state = 7778; this.match(PostgreSqlParser.KW_XMLSERIALIZE); } break; case 51: this.enterOuterAlt(localContext, 51); { - this.state = 7778; + this.state = 7779; this.match(PostgreSqlParser.KW_XMLTABLE); } break; @@ -49277,7 +49285,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7781; + this.state = 7782; _la = this.tokenStream.LA(1); if(!(((((_la - 106)) & ~0x1F) === 0 && ((1 << (_la - 106)) & 8126463) !== 0) || _la === 472)) { this.errorHandler.recoverInline(this); @@ -49309,7 +49317,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7783; + this.state = 7784; _la = this.tokenStream.LA(1); if(!(((((_la - 30)) & ~0x1F) === 0 && ((1 << (_la - 30)) & 4286578687) !== 0) || ((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & 4294966783) !== 0) || ((((_la - 94)) & ~0x1F) === 0 && ((1 << (_la - 94)) & 4095) !== 0) || _la === 454)) { this.errorHandler.recoverInline(this); @@ -49343,53 +49351,53 @@ export class PostgreSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 1); { { - this.state = 7786; + this.state = 7787; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 18) { { - this.state = 7785; + this.state = 7786; this.label_decl(); } } - this.state = 7798; + this.state = 7799; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 178) { { - this.state = 7788; + this.state = 7789; this.match(PostgreSqlParser.KW_DECLARE); - this.state = 7796; + this.state = 7797; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1065, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1066, this.context) ) { case 1: { - this.state = 7792; + this.state = 7793; this.errorHandler.sync(this); alternative = 1; do { switch (alternative) { case 1: { - this.state = 7792; + this.state = 7793; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1063, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1064, this.context) ) { case 1: { - this.state = 7789; + this.state = 7790; this.decl_statement(); } break; case 2: { - this.state = 7790; + this.state = 7791; this.match(PostgreSqlParser.KW_DECLARE); } break; case 3: { - this.state = 7791; + this.state = 7792; this.label_decl(); } break; @@ -49399,9 +49407,9 @@ export class PostgreSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 7794; + this.state = 7795; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1064, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1065, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } break; @@ -49410,42 +49418,42 @@ export class PostgreSqlParser extends SQLParserBase { } } - this.state = 7800; + this.state = 7801; this.match(PostgreSqlParser.KW_BEGIN); - this.state = 7804; + this.state = 7805; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1067, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1068, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 7801; + this.state = 7802; this.proc_stmt(); } } } - this.state = 7806; + this.state = 7807; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1067, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1068, this.context); } - this.state = 7808; + this.state = 7809; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 517) { { - this.state = 7807; + this.state = 7808; this.exception_sect(); } } - this.state = 7810; + this.state = 7811; this.match(PostgreSqlParser.KW_END); - this.state = 7812; + this.state = 7813; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 53 || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 4294959489) !== 0) || ((((_la - 148)) & ~0x1F) === 0 && ((1 << (_la - 148)) & 4294967295) !== 0) || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 4294967295) !== 0) || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 4227989503) !== 0) || ((((_la - 244)) & ~0x1F) === 0 && ((1 << (_la - 244)) & 4294967295) !== 0) || ((((_la - 276)) & ~0x1F) === 0 && ((1 << (_la - 276)) & 4294967295) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & 4294967295) !== 0) || ((((_la - 340)) & ~0x1F) === 0 && ((1 << (_la - 340)) & 4294967295) !== 0) || ((((_la - 372)) & ~0x1F) === 0 && ((1 << (_la - 372)) & 4294967295) !== 0) || ((((_la - 404)) & ~0x1F) === 0 && ((1 << (_la - 404)) & 4294967295) !== 0) || ((((_la - 436)) & ~0x1F) === 0 && ((1 << (_la - 436)) & 4294705151) !== 0) || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 4294967279) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 18350039) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) { { - this.state = 7811; + this.state = 7812; this.any_identifier(); } } @@ -49472,11 +49480,11 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7814; - this.match(PostgreSqlParser.LESS_LESS); this.state = 7815; - this.any_identifier(); + this.match(PostgreSqlParser.LESS_LESS); this.state = 7816; + this.any_identifier(); + this.state = 7817; this.match(PostgreSqlParser.GREATER_GREATER); } } @@ -49501,23 +49509,23 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7818; + this.state = 7819; this.any_identifier(); - this.state = 7865; + this.state = 7866; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1080, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1081, this.context) ) { case 1: { - this.state = 7819; - this.match(PostgreSqlParser.KW_ALIAS); this.state = 7820; + this.match(PostgreSqlParser.KW_ALIAS); + this.state = 7821; this.match(PostgreSqlParser.KW_FOR); - this.state = 7823; + this.state = 7824; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.PARAM: { - this.state = 7821; + this.state = 7822; this.match(PostgreSqlParser.PARAM); } break; @@ -49916,7 +49924,7 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.PLSQLIDENTIFIER: case PostgreSqlParser.EscapeStringConstant: { - this.state = 7822; + this.state = 7823; this.colid(); } break; @@ -49927,65 +49935,65 @@ export class PostgreSqlParser extends SQLParserBase { break; case 2: { - this.state = 7826; + this.state = 7827; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1071, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1072, this.context) ) { case 1: { - this.state = 7825; + this.state = 7826; this.match(PostgreSqlParser.KW_CONSTANT); } break; } - this.state = 7828; + this.state = 7829; this.typename(); - this.state = 7830; + this.state = 7831; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 43) { { - this.state = 7829; + this.state = 7830; this.opt_collate_clause(); } } - this.state = 7834; + this.state = 7835; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 77) { { - this.state = 7832; - this.match(PostgreSqlParser.KW_NOT); this.state = 7833; + this.match(PostgreSqlParser.KW_NOT); + this.state = 7834; this.match(PostgreSqlParser.KW_NULL); } } - this.state = 7841; + this.state = 7842; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 10 || _la === 20 || _la === 53) { { - this.state = 7838; + this.state = 7839; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.EQUAL: case PostgreSqlParser.COLON_EQUALS: { - this.state = 7836; + this.state = 7837; this.assign_operator(); } break; case PostgreSqlParser.KW_DEFAULT: { - this.state = 7837; + this.state = 7838; this.match(PostgreSqlParser.KW_DEFAULT); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 7840; + this.state = 7841; this.sql_expression(); } } @@ -49994,59 +50002,59 @@ export class PostgreSqlParser extends SQLParserBase { break; case 3: { - this.state = 7847; + this.state = 7848; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 269 || _la === 324) { { - this.state = 7844; + this.state = 7845; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 269) { { - this.state = 7843; + this.state = 7844; this.match(PostgreSqlParser.KW_NO); } } - this.state = 7846; + this.state = 7847; this.match(PostgreSqlParser.KW_SCROLL); } } - this.state = 7849; + this.state = 7850; this.match(PostgreSqlParser.KW_CURSOR); - this.state = 7861; + this.state = 7862; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2) { { - this.state = 7850; - this.match(PostgreSqlParser.OPEN_PAREN); this.state = 7851; + this.match(PostgreSqlParser.OPEN_PAREN); + this.state = 7852; this.decl_cursor_arg(); - this.state = 7856; + this.state = 7857; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7852; - this.match(PostgreSqlParser.COMMA); this.state = 7853; + this.match(PostgreSqlParser.COMMA); + this.state = 7854; this.decl_cursor_arg(); } } - this.state = 7858; + this.state = 7859; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 7859; + this.state = 7860; this.match(PostgreSqlParser.CLOSE_PAREN); } } - this.state = 7863; + this.state = 7864; _la = this.tokenStream.LA(1); if(!(_la === 62 || _la === 116)) { this.errorHandler.recoverInline(this); @@ -50055,12 +50063,12 @@ export class PostgreSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 7864; + this.state = 7865; this.selectstmt(); } break; } - this.state = 7867; + this.state = 7868; this.match(PostgreSqlParser.SEMI); } } @@ -50084,9 +50092,9 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7869; - this.any_identifier(); this.state = 7870; + this.any_identifier(); + this.state = 7871; this.typename(); } } @@ -50111,7 +50119,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7872; + this.state = 7873; _la = this.tokenStream.LA(1); if(!(_la === 10 || _la === 20)) { this.errorHandler.recoverInline(this); @@ -50140,162 +50148,162 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Proc_stmtContext(this.context, this.state); this.enterRule(localContext, 846, PostgreSqlParser.RULE_proc_stmt); try { - this.state = 7898; + this.state = 7899; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1081, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1082, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 7874; - this.pl_block(); this.state = 7875; + this.pl_block(); + this.state = 7876; this.match(PostgreSqlParser.SEMI); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 7877; + this.state = 7878; this.stmt_return(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 7878; + this.state = 7879; this.stmt_raise(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 7879; + this.state = 7880; this.stmt_assign(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 7880; + this.state = 7881; this.stmt_if(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 7881; + this.state = 7882; this.stmt_case(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 7882; + this.state = 7883; this.stmt_loop_while_for(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 7883; + this.state = 7884; this.stmt_foreach_a(); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 7884; + this.state = 7885; this.stmt_exit(); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 7885; + this.state = 7886; this.stmt_assert(); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 7886; + this.state = 7887; this.stmt_execsql(); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 7887; + this.state = 7888; this.stmt_dynexecute(); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 7888; + this.state = 7889; this.stmt_perform(); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 7889; + this.state = 7890; this.stmt_call(); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 7890; + this.state = 7891; this.stmt_getdiag(); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 7891; + this.state = 7892; this.stmt_open(); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 7892; + this.state = 7893; this.stmt_fetch(); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 7893; + this.state = 7894; this.stmt_move(); } break; case 19: this.enterOuterAlt(localContext, 19); { - this.state = 7894; + this.state = 7895; this.stmt_close(); } break; case 20: this.enterOuterAlt(localContext, 20); { - this.state = 7895; + this.state = 7896; this.stmt_null(); } break; case 21: this.enterOuterAlt(localContext, 21); { - this.state = 7896; + this.state = 7897; this.stmt_commit_or_rollback(); } break; case 22: this.enterOuterAlt(localContext, 22); { - this.state = 7897; + this.state = 7898; this.stmt_set(); } break; @@ -50321,11 +50329,11 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7900; - this.match(PostgreSqlParser.KW_PERFORM); this.state = 7901; - this.sql_expression(); + this.match(PostgreSqlParser.KW_PERFORM); this.state = 7902; + this.sql_expression(); + this.state = 7903; this.match(PostgreSqlParser.SEMI); } } @@ -50348,36 +50356,36 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 850, PostgreSqlParser.RULE_stmt_call); let _la: number; try { - this.state = 7923; + this.state = 7924; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_CALL: this.enterOuterAlt(localContext, 1); { - this.state = 7904; - this.match(PostgreSqlParser.KW_CALL); this.state = 7905; + this.match(PostgreSqlParser.KW_CALL); + this.state = 7906; this.any_identifier(); - this.state = 7912; + this.state = 7913; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1083, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1084, this.context) ) { case 1: { - this.state = 7906; + this.state = 7907; this.match(PostgreSqlParser.OPEN_PAREN); - this.state = 7908; + this.state = 7909; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 34074721) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174763023) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 1174402559) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) { { - this.state = 7907; + this.state = 7908; this.expr_list(); } } - this.state = 7910; - this.match(PostgreSqlParser.CLOSE_PAREN); this.state = 7911; + this.match(PostgreSqlParser.CLOSE_PAREN); + this.state = 7912; this.match(PostgreSqlParser.SEMI); } break; @@ -50387,25 +50395,25 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.KW_DO: this.enterOuterAlt(localContext, 2); { - this.state = 7914; - this.match(PostgreSqlParser.KW_DO); this.state = 7915; - this.any_identifier(); + this.match(PostgreSqlParser.KW_DO); this.state = 7916; + this.any_identifier(); + this.state = 7917; this.match(PostgreSqlParser.OPEN_PAREN); - this.state = 7918; + this.state = 7919; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 805318660) !== 0) || ((((_la - 35)) & ~0x1F) === 0 && ((1 << (_la - 35)) & 34074721) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & 2174763023) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 4294967295) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & 4294967295) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & 4294967295) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & 67108863) !== 0) || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 4294967295) !== 0) || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & 4294967295) !== 0) || ((((_la - 302)) & ~0x1F) === 0 && ((1 << (_la - 302)) & 4294967295) !== 0) || ((((_la - 334)) & ~0x1F) === 0 && ((1 << (_la - 334)) & 4294967295) !== 0) || ((((_la - 366)) & ~0x1F) === 0 && ((1 << (_la - 366)) & 4294967295) !== 0) || ((((_la - 398)) & ~0x1F) === 0 && ((1 << (_la - 398)) & 4294967295) !== 0) || ((((_la - 430)) & ~0x1F) === 0 && ((1 << (_la - 430)) & 4278190079) !== 0) || ((((_la - 462)) & ~0x1F) === 0 && ((1 << (_la - 462)) & 4294967295) !== 0) || ((((_la - 494)) & ~0x1F) === 0 && ((1 << (_la - 494)) & 1174402559) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 487696527) !== 0) || _la === 584) { { - this.state = 7917; + this.state = 7918; this.expr_list(); } } - this.state = 7920; - this.match(PostgreSqlParser.CLOSE_PAREN); this.state = 7921; + this.match(PostgreSqlParser.CLOSE_PAREN); + this.state = 7922; this.match(PostgreSqlParser.SEMI); } break; @@ -50433,13 +50441,13 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7925; - this.assign_var(); this.state = 7926; - this.assign_operator(); + this.assign_var(); this.state = 7927; - this.sql_expression(); + this.assign_operator(); this.state = 7928; + this.sql_expression(); + this.state = 7929; this.match(PostgreSqlParser.SEMI); } } @@ -50464,14 +50472,14 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7930; + this.state = 7931; this.match(PostgreSqlParser.KW_GET); - this.state = 7932; + this.state = 7933; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 434 || _la === 501) { { - this.state = 7931; + this.state = 7932; _la = this.tokenStream.LA(1); if(!(_la === 434 || _la === 501)) { this.errorHandler.recoverInline(this); @@ -50483,29 +50491,29 @@ export class PostgreSqlParser extends SQLParserBase { } } - this.state = 7934; + this.state = 7935; this.match(PostgreSqlParser.KW_DIAGNOSTICS); { - this.state = 7935; + this.state = 7936; this.getdiag_list_item(); - this.state = 7940; + this.state = 7941; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 7936; - this.match(PostgreSqlParser.COMMA); this.state = 7937; + this.match(PostgreSqlParser.COMMA); + this.state = 7938; this.getdiag_list_item(); } } - this.state = 7942; + this.state = 7943; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } - this.state = 7943; + this.state = 7944; this.match(PostgreSqlParser.SEMI); } } @@ -50529,11 +50537,11 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7945; - this.assign_var(); this.state = 7946; - this.assign_operator(); + this.assign_var(); this.state = 7947; + this.assign_operator(); + this.state = 7948; this.colid(); } } @@ -50558,7 +50566,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 7951; + this.state = 7952; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_DEFAULT: @@ -50956,34 +50964,34 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.PLSQLIDENTIFIER: case PostgreSqlParser.EscapeStringConstant: { - this.state = 7949; + this.state = 7950; this.any_name(); } break; case PostgreSqlParser.PARAM: { - this.state = 7950; + this.state = 7951; this.match(PostgreSqlParser.PARAM); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 7959; + this.state = 7960; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 7953; - this.match(PostgreSqlParser.OPEN_BRACKET); this.state = 7954; - this.expression(); + this.match(PostgreSqlParser.OPEN_BRACKET); this.state = 7955; + this.expression(); + this.state = 7956; this.match(PostgreSqlParser.CLOSE_BRACKET); } } - this.state = 7961; + this.state = 7962; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -51011,79 +51019,79 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 7962; - this.match(PostgreSqlParser.KW_IF); this.state = 7963; - this.sql_expression(); + this.match(PostgreSqlParser.KW_IF); this.state = 7964; + this.sql_expression(); + this.state = 7965; this.match(PostgreSqlParser.KW_THEN); - this.state = 7968; + this.state = 7969; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1090, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1091, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 7965; + this.state = 7966; this.proc_stmt(); } } } - this.state = 7970; + this.state = 7971; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1090, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1091, this.context); } { - this.state = 7982; + this.state = 7983; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 502) { { { - this.state = 7971; - this.match(PostgreSqlParser.KW_ELSIF); this.state = 7972; - this.expression(); + this.match(PostgreSqlParser.KW_ELSIF); this.state = 7973; + this.expression(); + this.state = 7974; this.match(PostgreSqlParser.KW_THEN); - this.state = 7977; + this.state = 7978; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1091, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1092, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 7974; + this.state = 7975; this.proc_stmt(); } } } - this.state = 7979; + this.state = 7980; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1091, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1092, this.context); } } } - this.state = 7984; + this.state = 7985; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } - this.state = 7986; + this.state = 7987; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 58) { { - this.state = 7985; + this.state = 7986; this.stmt_else(); } } - this.state = 7988; - this.match(PostgreSqlParser.KW_END); this.state = 7989; - this.match(PostgreSqlParser.KW_IF); + this.match(PostgreSqlParser.KW_END); this.state = 7990; + this.match(PostgreSqlParser.KW_IF); + this.state = 7991; this.match(PostgreSqlParser.SEMI); } } @@ -51108,23 +51116,23 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 7992; + this.state = 7993; this.match(PostgreSqlParser.KW_ELSE); - this.state = 7996; + this.state = 7997; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1094, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1095, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 7993; + this.state = 7994; this.proc_stmt(); } } } - this.state = 7998; + this.state = 7999; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1094, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1095, this.context); } } } @@ -51150,67 +51158,67 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 7999; + this.state = 8000; this.match(PostgreSqlParser.KW_CASE); - this.state = 8001; + this.state = 8002; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1095, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1096, this.context) ) { case 1: { - this.state = 8000; + this.state = 8001; this.sql_expression(); } break; } - this.state = 8012; + this.state = 8013; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 8003; - this.match(PostgreSqlParser.KW_WHEN); this.state = 8004; - this.expr_list(); + this.match(PostgreSqlParser.KW_WHEN); this.state = 8005; + this.expr_list(); + this.state = 8006; this.match(PostgreSqlParser.KW_THEN); - this.state = 8009; + this.state = 8010; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1096, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1097, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 8006; + this.state = 8007; this.proc_stmt(); } } } - this.state = 8011; + this.state = 8012; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1096, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1097, this.context); } } } - this.state = 8014; + this.state = 8015; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 102); - this.state = 8017; + this.state = 8018; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 58) { { - this.state = 8016; + this.state = 8017; this.stmt_else(); } } - this.state = 8019; - this.match(PostgreSqlParser.KW_END); this.state = 8020; - this.match(PostgreSqlParser.KW_CASE); + this.match(PostgreSqlParser.KW_END); this.state = 8021; + this.match(PostgreSqlParser.KW_CASE); + this.state = 8022; this.match(PostgreSqlParser.SEMI); } } @@ -51235,25 +51243,25 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8024; + this.state = 8025; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 18) { { - this.state = 8023; + this.state = 8024; this.label_decl(); } } - this.state = 8030; + this.state = 8031; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_WHILE: { { - this.state = 8026; - this.match(PostgreSqlParser.KW_WHILE); this.state = 8027; + this.match(PostgreSqlParser.KW_WHILE); + this.state = 8028; this.expression(); } } @@ -51261,9 +51269,9 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.KW_FOR: { { - this.state = 8028; - this.match(PostgreSqlParser.KW_FOR); this.state = 8029; + this.match(PostgreSqlParser.KW_FOR); + this.state = 8030; this.for_control(); } } @@ -51273,7 +51281,7 @@ export class PostgreSqlParser extends SQLParserBase { default: break; } - this.state = 8032; + this.state = 8033; this.loop_body(); } } @@ -51298,23 +51306,23 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8034; - this.any_name_list(); this.state = 8035; + this.any_name_list(); + this.state = 8036; this.match(PostgreSqlParser.KW_IN); - this.state = 8058; + this.state = 8059; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1105, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1106, this.context) ) { case 1: { - this.state = 8036; + this.state = 8037; this.colid(); - this.state = 8038; + this.state = 8039; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2) { { - this.state = 8037; + this.state = 8038; this.execute_param_clause(); } } @@ -51323,30 +51331,30 @@ export class PostgreSqlParser extends SQLParserBase { break; case 2: { - this.state = 8040; + this.state = 8041; this.selectstmt(); } break; case 3: { - this.state = 8041; + this.state = 8042; this.explainstmt(); } break; case 4: { - this.state = 8042; - this.match(PostgreSqlParser.KW_EXECUTE); this.state = 8043; + this.match(PostgreSqlParser.KW_EXECUTE); + this.state = 8044; this.expression(); - this.state = 8046; + this.state = 8047; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 100) { { - this.state = 8044; - this.match(PostgreSqlParser.KW_USING); this.state = 8045; + this.match(PostgreSqlParser.KW_USING); + this.state = 8046; this.expr_list(); } } @@ -51355,30 +51363,30 @@ export class PostgreSqlParser extends SQLParserBase { break; case 5: { - this.state = 8049; + this.state = 8050; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1103, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1104, this.context) ) { case 1: { - this.state = 8048; + this.state = 8049; this.match(PostgreSqlParser.KW_REVERSE); } break; } - this.state = 8051; - this.expression(); this.state = 8052; - this.match(PostgreSqlParser.DOT_DOT); + this.expression(); this.state = 8053; + this.match(PostgreSqlParser.DOT_DOT); + this.state = 8054; this.expression(); - this.state = 8056; + this.state = 8057; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 147) { { - this.state = 8054; - this.match(PostgreSqlParser.KW_BY); this.state = 8055; + this.match(PostgreSqlParser.KW_BY); + this.state = 8056; this.expression(); } } @@ -51409,39 +51417,39 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8061; + this.state = 8062; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 18) { { - this.state = 8060; + this.state = 8061; this.label_decl(); } } - this.state = 8063; - this.match(PostgreSqlParser.KW_FOREACH); this.state = 8064; + this.match(PostgreSqlParser.KW_FOREACH); + this.state = 8065; this.any_name_list(); - this.state = 8067; + this.state = 8068; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 506) { { - this.state = 8065; - this.match(PostgreSqlParser.KW_SLICE); this.state = 8066; + this.match(PostgreSqlParser.KW_SLICE); + this.state = 8067; this.match(PostgreSqlParser.Integral); } } - this.state = 8069; - this.match(PostgreSqlParser.KW_IN); this.state = 8070; - this.match(PostgreSqlParser.KW_ARRAY); + this.match(PostgreSqlParser.KW_IN); this.state = 8071; - this.expression(); + this.match(PostgreSqlParser.KW_ARRAY); this.state = 8072; + this.expression(); + this.state = 8073; this.loop_body(); } } @@ -51466,7 +51474,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8074; + this.state = 8075; _la = this.tokenStream.LA(1); if(!(_la === 167 || _la === 507)) { this.errorHandler.recoverInline(this); @@ -51475,29 +51483,29 @@ export class PostgreSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 8076; + this.state = 8077; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 53 || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 4294959489) !== 0) || ((((_la - 148)) & ~0x1F) === 0 && ((1 << (_la - 148)) & 4294967295) !== 0) || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 4294967295) !== 0) || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 4227989503) !== 0) || ((((_la - 244)) & ~0x1F) === 0 && ((1 << (_la - 244)) & 4294967295) !== 0) || ((((_la - 276)) & ~0x1F) === 0 && ((1 << (_la - 276)) & 4294967295) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & 4294967295) !== 0) || ((((_la - 340)) & ~0x1F) === 0 && ((1 << (_la - 340)) & 4294967295) !== 0) || ((((_la - 372)) & ~0x1F) === 0 && ((1 << (_la - 372)) & 4294967295) !== 0) || ((((_la - 404)) & ~0x1F) === 0 && ((1 << (_la - 404)) & 4294967295) !== 0) || ((((_la - 436)) & ~0x1F) === 0 && ((1 << (_la - 436)) & 4294705151) !== 0) || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 4294967279) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 18350039) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) { { - this.state = 8075; + this.state = 8076; this.any_identifier(); } } - this.state = 8080; + this.state = 8081; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 102) { { - this.state = 8078; - this.match(PostgreSqlParser.KW_WHEN); this.state = 8079; + this.match(PostgreSqlParser.KW_WHEN); + this.state = 8080; this.sql_expression(); } } - this.state = 8082; + this.state = 8083; this.match(PostgreSqlParser.SEMI); } } @@ -51521,35 +51529,35 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8084; + this.state = 8085; this.match(PostgreSqlParser.KW_RETURN); - this.state = 8099; + this.state = 8100; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1112, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1113, this.context) ) { case 1: { - this.state = 8085; - this.match(PostgreSqlParser.KW_NEXT); this.state = 8086; + this.match(PostgreSqlParser.KW_NEXT); + this.state = 8087; this.sql_expression(); } break; case 2: { - this.state = 8087; + this.state = 8088; this.match(PostgreSqlParser.KW_QUERY); - this.state = 8094; + this.state = 8095; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_EXECUTE: { - this.state = 8088; - this.match(PostgreSqlParser.KW_EXECUTE); this.state = 8089; - this.expression(); + this.match(PostgreSqlParser.KW_EXECUTE); this.state = 8090; - this.match(PostgreSqlParser.KW_USING); + this.expression(); this.state = 8091; + this.match(PostgreSqlParser.KW_USING); + this.state = 8092; this.expr_list(); } break; @@ -51559,7 +51567,7 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.KW_WITH: case PostgreSqlParser.KW_VALUES: { - this.state = 8093; + this.state = 8094; this.selectstmt(); } break; @@ -51570,12 +51578,12 @@ export class PostgreSqlParser extends SQLParserBase { break; case 3: { - this.state = 8097; + this.state = 8098; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1111, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1112, this.context) ) { case 1: { - this.state = 8096; + this.state = 8097; this.sql_expression(); } break; @@ -51583,7 +51591,7 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 8101; + this.state = 8102; this.match(PostgreSqlParser.SEMI); } } @@ -51608,19 +51616,19 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8103; + this.state = 8104; this.match(PostgreSqlParser.KW_RAISE); - this.state = 8133; + this.state = 8134; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1119, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1120, this.context) ) { case 1: { - this.state = 8105; + this.state = 8106; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1113, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1114, this.context) ) { case 1: { - this.state = 8104; + this.state = 8105; _la = this.tokenStream.LA(1); if(!(((((_la - 512)) & ~0x1F) === 0 && ((1 << (_la - 512)) & 63) !== 0))) { this.errorHandler.recoverInline(this); @@ -51632,21 +51640,21 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 8119; + this.state = 8120; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1116, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1117, this.context) ) { case 1: { - this.state = 8107; + this.state = 8108; this.identifier(); } break; case 2: { { - this.state = 8108; - this.match(PostgreSqlParser.KW_SQLSTATE); this.state = 8109; + this.match(PostgreSqlParser.KW_SQLSTATE); + this.state = 8110; this.sconst(); } } @@ -51654,26 +51662,26 @@ export class PostgreSqlParser extends SQLParserBase { case 3: { { - this.state = 8110; + this.state = 8111; this.sconst(); - this.state = 8117; + this.state = 8118; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 6) { { - this.state = 8113; + this.state = 8114; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 8111; - this.match(PostgreSqlParser.COMMA); this.state = 8112; + this.match(PostgreSqlParser.COMMA); + this.state = 8113; this.expression(); } } - this.state = 8115; + this.state = 8116; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 6); @@ -51684,29 +51692,29 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 8130; + this.state = 8131; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 100) { { - this.state = 8121; + this.state = 8122; this.match(PostgreSqlParser.KW_USING); { - this.state = 8122; + this.state = 8123; this.opt_raise_using_elem(); - this.state = 8127; + this.state = 8128; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 8123; - this.match(PostgreSqlParser.COMMA); this.state = 8124; + this.match(PostgreSqlParser.COMMA); + this.state = 8125; this.opt_raise_using_elem(); } } - this.state = 8129; + this.state = 8130; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -51714,7 +51722,7 @@ export class PostgreSqlParser extends SQLParserBase { } } - this.state = 8132; + this.state = 8133; this.match(PostgreSqlParser.SEMI); } break; @@ -51741,11 +51749,11 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8135; - this.identifier(); this.state = 8136; - this.match(PostgreSqlParser.EQUAL); + this.identifier(); this.state = 8137; + this.match(PostgreSqlParser.EQUAL); + this.state = 8138; this.expression(); } } @@ -51770,23 +51778,23 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8139; - this.match(PostgreSqlParser.KW_ASSERT); this.state = 8140; + this.match(PostgreSqlParser.KW_ASSERT); + this.state = 8141; this.sql_expression(); - this.state = 8143; + this.state = 8144; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 6) { { - this.state = 8141; - this.match(PostgreSqlParser.COMMA); this.state = 8142; + this.match(PostgreSqlParser.COMMA); + this.state = 8143; this.sql_expression(); } } - this.state = 8145; + this.state = 8146; this.match(PostgreSqlParser.SEMI); } } @@ -51812,39 +51820,39 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 8147; + this.state = 8148; this.match(PostgreSqlParser.KW_LOOP); - this.state = 8151; + this.state = 8152; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1121, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1122, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 8148; + this.state = 8149; this.proc_stmt(); } } } - this.state = 8153; + this.state = 8154; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1121, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1122, this.context); } - this.state = 8154; - this.match(PostgreSqlParser.KW_END); this.state = 8155; + this.match(PostgreSqlParser.KW_END); + this.state = 8156; this.match(PostgreSqlParser.KW_LOOP); - this.state = 8157; + this.state = 8158; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 53 || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 4294959489) !== 0) || ((((_la - 148)) & ~0x1F) === 0 && ((1 << (_la - 148)) & 4294967295) !== 0) || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 4294967295) !== 0) || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 4227989503) !== 0) || ((((_la - 244)) & ~0x1F) === 0 && ((1 << (_la - 244)) & 4294967295) !== 0) || ((((_la - 276)) & ~0x1F) === 0 && ((1 << (_la - 276)) & 4294967295) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & 4294967295) !== 0) || ((((_la - 340)) & ~0x1F) === 0 && ((1 << (_la - 340)) & 4294967295) !== 0) || ((((_la - 372)) & ~0x1F) === 0 && ((1 << (_la - 372)) & 4294967295) !== 0) || ((((_la - 404)) & ~0x1F) === 0 && ((1 << (_la - 404)) & 4294967295) !== 0) || ((((_la - 436)) & ~0x1F) === 0 && ((1 << (_la - 436)) & 4294705151) !== 0) || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 4294967279) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 18350039) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) { { - this.state = 8156; + this.state = 8157; this.any_identifier(); } } - this.state = 8159; + this.state = 8160; this.match(PostgreSqlParser.SEMI); } } @@ -51869,19 +51877,19 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8161; + this.state = 8162; this.stmt(); - this.state = 8163; + this.state = 8164; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 71) { { - this.state = 8162; + this.state = 8163; this.opt_execute_into(); } } - this.state = 8165; + this.state = 8166; this.match(PostgreSqlParser.SEMI); } } @@ -51906,33 +51914,33 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8167; - this.match(PostgreSqlParser.KW_EXECUTE); this.state = 8168; + this.match(PostgreSqlParser.KW_EXECUTE); + this.state = 8169; this.expression(); - this.state = 8184; + this.state = 8185; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1128, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1129, this.context) ) { case 1: { - this.state = 8170; + this.state = 8171; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 71) { { - this.state = 8169; + this.state = 8170; this.opt_execute_into(); } } - this.state = 8174; + this.state = 8175; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 100) { { - this.state = 8172; - this.match(PostgreSqlParser.KW_USING); this.state = 8173; + this.match(PostgreSqlParser.KW_USING); + this.state = 8174; this.expr_list(); } } @@ -51941,24 +51949,24 @@ export class PostgreSqlParser extends SQLParserBase { break; case 2: { - this.state = 8178; + this.state = 8179; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 100) { { - this.state = 8176; - this.match(PostgreSqlParser.KW_USING); this.state = 8177; + this.match(PostgreSqlParser.KW_USING); + this.state = 8178; this.expr_list(); } } - this.state = 8181; + this.state = 8182; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 71) { { - this.state = 8180; + this.state = 8181; this.opt_execute_into(); } } @@ -51971,7 +51979,7 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 8186; + this.state = 8187; this.match(PostgreSqlParser.SEMI); } } @@ -51995,19 +52003,19 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8188; + this.state = 8189; this.match(PostgreSqlParser.KW_INTO); - this.state = 8190; + this.state = 8191; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1129, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1130, this.context) ) { case 1: { - this.state = 8189; + this.state = 8190; this.match(PostgreSqlParser.KW_STRICT); } break; } - this.state = 8192; + this.state = 8193; this.expr_list(); } } @@ -52032,38 +52040,38 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8194; + this.state = 8195; this.match(PostgreSqlParser.KW_OPEN); - this.state = 8226; + this.state = 8227; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1136, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1137, this.context) ) { case 1: { - this.state = 8195; + this.state = 8196; this.cursor_variable(); - this.state = 8200; + this.state = 8201; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 269 || _la === 324) { { - this.state = 8197; + this.state = 8198; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 269) { { - this.state = 8196; + this.state = 8197; this.match(PostgreSqlParser.KW_NO); } } - this.state = 8199; + this.state = 8200; this.match(PostgreSqlParser.KW_SCROLL); } } - this.state = 8202; + this.state = 8203; this.match(PostgreSqlParser.KW_FOR); - this.state = 8210; + this.state = 8211; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.OPEN_PAREN: @@ -52072,24 +52080,24 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.KW_WITH: case PostgreSqlParser.KW_VALUES: { - this.state = 8203; + this.state = 8204; this.selectstmt(); } break; case PostgreSqlParser.KW_EXECUTE: { - this.state = 8204; - this.match(PostgreSqlParser.KW_EXECUTE); this.state = 8205; + this.match(PostgreSqlParser.KW_EXECUTE); + this.state = 8206; this.sql_expression(); - this.state = 8208; + this.state = 8209; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 100) { { - this.state = 8206; - this.match(PostgreSqlParser.KW_USING); this.state = 8207; + this.match(PostgreSqlParser.KW_USING); + this.state = 8208; this.expr_list(); } } @@ -52103,36 +52111,36 @@ export class PostgreSqlParser extends SQLParserBase { break; case 2: { - this.state = 8212; + this.state = 8213; this.colid(); - this.state = 8224; + this.state = 8225; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2) { { - this.state = 8213; + this.state = 8214; this.match(PostgreSqlParser.OPEN_PAREN); { - this.state = 8214; + this.state = 8215; this.opt_open_bound_list_item(); - this.state = 8219; + this.state = 8220; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 8215; - this.match(PostgreSqlParser.COMMA); this.state = 8216; + this.match(PostgreSqlParser.COMMA); + this.state = 8217; this.opt_open_bound_list_item(); } } - this.state = 8221; + this.state = 8222; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } - this.state = 8222; + this.state = 8223; this.match(PostgreSqlParser.CLOSE_PAREN); } } @@ -52140,7 +52148,7 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 8228; + this.state = 8229; this.match(PostgreSqlParser.SEMI); } } @@ -52164,19 +52172,19 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8233; + this.state = 8234; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1137, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1138, this.context) ) { case 1: { - this.state = 8230; - this.colid(); this.state = 8231; + this.colid(); + this.state = 8232; this.match(PostgreSqlParser.COLON_EQUALS); } break; } - this.state = 8235; + this.state = 8236; this.expression(); } } @@ -52201,35 +52209,35 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8237; + this.state = 8238; this.match(PostgreSqlParser.KW_FETCH); - this.state = 8239; + this.state = 8240; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1138, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1139, this.context) ) { case 1: { - this.state = 8238; + this.state = 8239; localContext._direction = this.opt_fetch_direction(); } break; } - this.state = 8242; + this.state = 8243; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 64 || _la === 68) { { - this.state = 8241; + this.state = 8242; this.from_in(); } } - this.state = 8244; - this.cursor_variable(); this.state = 8245; - this.match(PostgreSqlParser.KW_INTO); + this.cursor_variable(); this.state = 8246; - this.expr_list(); + this.match(PostgreSqlParser.KW_INTO); this.state = 8247; + this.expr_list(); + this.state = 8248; this.match(PostgreSqlParser.SEMI); } } @@ -52252,46 +52260,46 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 896, PostgreSqlParser.RULE_opt_fetch_direction); let _la: number; try { - this.state = 8263; + this.state = 8264; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1142, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1143, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 8249; + this.state = 8250; this.match(PostgreSqlParser.KW_NEXT); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 8250; + this.state = 8251; this.match(PostgreSqlParser.KW_PRIOR); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 8251; + this.state = 8252; this.match(PostgreSqlParser.KW_FIRST); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 8252; + this.state = 8253; this.match(PostgreSqlParser.KW_LAST); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 8254; + this.state = 8255; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1140, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1141, this.context) ) { case 1: { - this.state = 8253; + this.state = 8254; _la = this.tokenStream.LA(1); if(!(_la === 130 || _la === 307)) { this.errorHandler.recoverInline(this); @@ -52303,21 +52311,21 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 8256; + this.state = 8257; this.expression(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 8257; + this.state = 8258; this.match(PostgreSqlParser.KW_ALL); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 8258; + this.state = 8259; _la = this.tokenStream.LA(1); if(!(_la === 144 || _la === 210)) { this.errorHandler.recoverInline(this); @@ -52326,18 +52334,18 @@ export class PostgreSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 8261; + this.state = 8262; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1141, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1142, this.context) ) { case 1: { - this.state = 8259; + this.state = 8260; this.expression(); } break; case 2: { - this.state = 8260; + this.state = 8261; this.match(PostgreSqlParser.KW_ALL); } break; @@ -52366,21 +52374,21 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8265; + this.state = 8266; this.match(PostgreSqlParser.KW_MOVE); - this.state = 8267; + this.state = 8268; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1143, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1144, this.context) ) { case 1: { - this.state = 8266; + this.state = 8267; this.opt_fetch_direction(); } break; } - this.state = 8269; - this.cursor_variable(); this.state = 8270; + this.cursor_variable(); + this.state = 8271; this.match(PostgreSqlParser.SEMI); } } @@ -52405,81 +52413,81 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8273; + this.state = 8274; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 105) { { - this.state = 8272; + this.state = 8273; this.with_clause(); } } - this.state = 8275; - this.match(PostgreSqlParser.KW_MERGE); this.state = 8276; + this.match(PostgreSqlParser.KW_MERGE); + this.state = 8277; this.match(PostgreSqlParser.KW_INTO); - this.state = 8278; + this.state = 8279; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 81) { { - this.state = 8277; + this.state = 8278; this.match(PostgreSqlParser.KW_ONLY); } } - this.state = 8280; + this.state = 8281; this.table_name(); - this.state = 8282; + this.state = 8283; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 8281; + this.state = 8282; this.match(PostgreSqlParser.STAR); } } - this.state = 8288; + this.state = 8289; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 36 || _la === 53 || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 4294959489) !== 0) || ((((_la - 148)) & ~0x1F) === 0 && ((1 << (_la - 148)) & 4294967295) !== 0) || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 4294967295) !== 0) || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 4227989503) !== 0) || ((((_la - 244)) & ~0x1F) === 0 && ((1 << (_la - 244)) & 4294967295) !== 0) || ((((_la - 276)) & ~0x1F) === 0 && ((1 << (_la - 276)) & 4294967295) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & 4294967295) !== 0) || ((((_la - 340)) & ~0x1F) === 0 && ((1 << (_la - 340)) & 4294967295) !== 0) || ((((_la - 372)) & ~0x1F) === 0 && ((1 << (_la - 372)) & 4294967295) !== 0) || ((((_la - 404)) & ~0x1F) === 0 && ((1 << (_la - 404)) & 4294967295) !== 0) || ((((_la - 436)) & ~0x1F) === 0 && ((1 << (_la - 436)) & 4294705151) !== 0) || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 4294967279) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 18350039) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) { { - this.state = 8285; + this.state = 8286; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 36) { { - this.state = 8284; + this.state = 8285; this.match(PostgreSqlParser.KW_AS); } } - this.state = 8287; + this.state = 8288; this.colid(); } } - this.state = 8290; - this.match(PostgreSqlParser.KW_USING); this.state = 8291; - this.data_source(); + this.match(PostgreSqlParser.KW_USING); this.state = 8292; - this.match(PostgreSqlParser.KW_ON); + this.data_source(); this.state = 8293; + this.match(PostgreSqlParser.KW_ON); + this.state = 8294; this.expression(); - this.state = 8295; + this.state = 8296; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 8294; + this.state = 8295; this.merge_when_clause(); } } - this.state = 8297; + this.state = 8298; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 102); @@ -52506,29 +52514,29 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8310; + this.state = 8311; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1153, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1154, this.context) ) { case 1: { - this.state = 8300; + this.state = 8301; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 81) { { - this.state = 8299; + this.state = 8300; this.match(PostgreSqlParser.KW_ONLY); } } - this.state = 8302; + this.state = 8303; this.table_name(); - this.state = 8304; + this.state = 8305; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9) { { - this.state = 8303; + this.state = 8304; this.match(PostgreSqlParser.STAR); } } @@ -52537,18 +52545,18 @@ export class PostgreSqlParser extends SQLParserBase { break; case 2: { - this.state = 8308; + this.state = 8309; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1152, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1153, this.context) ) { case 1: { - this.state = 8306; + this.state = 8307; this.select_no_parens(); } break; case 2: { - this.state = 8307; + this.state = 8308; this.values_clause(); } break; @@ -52556,22 +52564,22 @@ export class PostgreSqlParser extends SQLParserBase { } break; } - this.state = 8316; + this.state = 8317; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 36 || _la === 53 || ((((_la - 116)) & ~0x1F) === 0 && ((1 << (_la - 116)) & 4294959489) !== 0) || ((((_la - 148)) & ~0x1F) === 0 && ((1 << (_la - 148)) & 4294967295) !== 0) || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 4294967295) !== 0) || ((((_la - 212)) & ~0x1F) === 0 && ((1 << (_la - 212)) & 4227989503) !== 0) || ((((_la - 244)) & ~0x1F) === 0 && ((1 << (_la - 244)) & 4294967295) !== 0) || ((((_la - 276)) & ~0x1F) === 0 && ((1 << (_la - 276)) & 4294967295) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & 4294967295) !== 0) || ((((_la - 340)) & ~0x1F) === 0 && ((1 << (_la - 340)) & 4294967295) !== 0) || ((((_la - 372)) & ~0x1F) === 0 && ((1 << (_la - 372)) & 4294967295) !== 0) || ((((_la - 404)) & ~0x1F) === 0 && ((1 << (_la - 404)) & 4294967295) !== 0) || ((((_la - 436)) & ~0x1F) === 0 && ((1 << (_la - 436)) & 4294705151) !== 0) || ((((_la - 468)) & ~0x1F) === 0 && ((1 << (_la - 468)) & 4294967279) !== 0) || ((((_la - 500)) & ~0x1F) === 0 && ((1 << (_la - 500)) & 18350039) !== 0) || ((((_la - 547)) & ~0x1F) === 0 && ((1 << (_la - 547)) & 402696335) !== 0) || _la === 584) { { - this.state = 8313; + this.state = 8314; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 36) { { - this.state = 8312; + this.state = 8313; this.match(PostgreSqlParser.KW_AS); } } - this.state = 8315; + this.state = 8316; this.colid(); } } @@ -52597,50 +52605,50 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 904, PostgreSqlParser.RULE_merge_when_clause); let _la: number; try { - this.state = 8344; + this.state = 8345; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1160, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1161, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 8318; - this.match(PostgreSqlParser.KW_WHEN); this.state = 8319; + this.match(PostgreSqlParser.KW_WHEN); + this.state = 8320; this.match(PostgreSqlParser.KW_MATCHED); - this.state = 8322; + this.state = 8323; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 33) { { - this.state = 8320; - this.match(PostgreSqlParser.KW_AND); this.state = 8321; + this.match(PostgreSqlParser.KW_AND); + this.state = 8322; this.expression(); } } - this.state = 8324; + this.state = 8325; this.match(PostgreSqlParser.KW_THEN); - this.state = 8329; + this.state = 8330; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_UPDATE: { - this.state = 8325; + this.state = 8326; this.merge_update(); } break; case PostgreSqlParser.KW_DELETE: { - this.state = 8326; + this.state = 8327; this.match(PostgreSqlParser.KW_DELETE); } break; case PostgreSqlParser.KW_DO: { - this.state = 8327; - this.match(PostgreSqlParser.KW_DO); this.state = 8328; + this.match(PostgreSqlParser.KW_DO); + this.state = 8329; this.match(PostgreSqlParser.KW_NOTHING); } break; @@ -52652,40 +52660,40 @@ export class PostgreSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 8331; - this.match(PostgreSqlParser.KW_WHEN); this.state = 8332; - this.match(PostgreSqlParser.KW_NOT); + this.match(PostgreSqlParser.KW_WHEN); this.state = 8333; + this.match(PostgreSqlParser.KW_NOT); + this.state = 8334; this.match(PostgreSqlParser.KW_MATCHED); - this.state = 8336; + this.state = 8337; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 33) { { - this.state = 8334; - this.match(PostgreSqlParser.KW_AND); this.state = 8335; + this.match(PostgreSqlParser.KW_AND); + this.state = 8336; this.expression(); } } - this.state = 8338; + this.state = 8339; this.match(PostgreSqlParser.KW_THEN); - this.state = 8342; + this.state = 8343; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_INSERT: { - this.state = 8339; + this.state = 8340; this.merge_insert(); } break; case PostgreSqlParser.KW_DO: { - this.state = 8340; - this.match(PostgreSqlParser.KW_DO); this.state = 8341; + this.match(PostgreSqlParser.KW_DO); + this.state = 8342; this.match(PostgreSqlParser.KW_NOTHING); } break; @@ -52717,26 +52725,26 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8346; + this.state = 8347; this.match(PostgreSqlParser.KW_INSERT); - this.state = 8348; + this.state = 8349; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2) { { - this.state = 8347; + this.state = 8348; this.opt_column_list(); } } - this.state = 8353; + this.state = 8354; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 463) { { - this.state = 8350; - this.match(PostgreSqlParser.KW_OVERRIDING); this.state = 8351; + this.match(PostgreSqlParser.KW_OVERRIDING); + this.state = 8352; _la = this.tokenStream.LA(1); if(!(_la === 99 || _la === 349)) { this.errorHandler.recoverInline(this); @@ -52745,12 +52753,12 @@ export class PostgreSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 8352; + this.state = 8353; this.match(PostgreSqlParser.KW_VALUE); } } - this.state = 8355; + this.state = 8356; this.default_values_or_values(); } } @@ -52776,57 +52784,57 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 8357; - this.match(PostgreSqlParser.KW_UPDATE); this.state = 8358; + this.match(PostgreSqlParser.KW_UPDATE); + this.state = 8359; this.match(PostgreSqlParser.KW_SET); - this.state = 8376; + this.state = 8377; this.errorHandler.sync(this); alternative = 1; do { switch (alternative) { case 1: { - this.state = 8376; + this.state = 8377; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1164, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1165, this.context) ) { case 1: { - this.state = 8359; - this.column_name(); this.state = 8360; - this.match(PostgreSqlParser.EQUAL); + this.column_name(); this.state = 8361; + this.match(PostgreSqlParser.EQUAL); + this.state = 8362; this.exprofdefault(); } break; case 2: { - this.state = 8363; - this.opt_column_list(); this.state = 8364; - this.match(PostgreSqlParser.EQUAL); + this.opt_column_list(); this.state = 8365; - this.match(PostgreSqlParser.OPEN_PAREN); + this.match(PostgreSqlParser.EQUAL); this.state = 8366; + this.match(PostgreSqlParser.OPEN_PAREN); + this.state = 8367; this.exprofdefault(); - this.state = 8371; + this.state = 8372; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 8367; - this.match(PostgreSqlParser.COMMA); this.state = 8368; + this.match(PostgreSqlParser.COMMA); + this.state = 8369; this.exprofdefault(); } } - this.state = 8373; + this.state = 8374; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 8374; + this.state = 8375; this.match(PostgreSqlParser.CLOSE_PAREN); } break; @@ -52836,9 +52844,9 @@ export class PostgreSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 8378; + this.state = 8379; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1165, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1166, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } } @@ -52861,44 +52869,44 @@ export class PostgreSqlParser extends SQLParserBase { this.enterRule(localContext, 910, PostgreSqlParser.RULE_default_values_or_values); let _la: number; try { - this.state = 8394; + this.state = 8395; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_VALUES: this.enterOuterAlt(localContext, 1); { - this.state = 8380; - this.match(PostgreSqlParser.KW_VALUES); this.state = 8381; - this.match(PostgreSqlParser.OPEN_PAREN); + this.match(PostgreSqlParser.KW_VALUES); this.state = 8382; + this.match(PostgreSqlParser.OPEN_PAREN); + this.state = 8383; this.exprofdefault(); - this.state = 8387; + this.state = 8388; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 6) { { { - this.state = 8383; - this.match(PostgreSqlParser.COMMA); this.state = 8384; + this.match(PostgreSqlParser.COMMA); + this.state = 8385; this.exprofdefault(); } } - this.state = 8389; + this.state = 8390; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 8390; + this.state = 8391; this.match(PostgreSqlParser.CLOSE_PAREN); } break; case PostgreSqlParser.KW_DEFAULT: this.enterOuterAlt(localContext, 2); { - this.state = 8392; - this.match(PostgreSqlParser.KW_DEFAULT); this.state = 8393; + this.match(PostgreSqlParser.KW_DEFAULT); + this.state = 8394; this.match(PostgreSqlParser.KW_VALUES); } break; @@ -52924,20 +52932,20 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new ExprofdefaultContext(this.context, this.state); this.enterRule(localContext, 912, PostgreSqlParser.RULE_exprofdefault); try { - this.state = 8398; + this.state = 8399; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1168, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1169, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 8396; + this.state = 8397; this.sortby(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 8397; + this.state = 8398; this.match(PostgreSqlParser.KW_DEFAULT); } break; @@ -52963,11 +52971,11 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8400; - this.match(PostgreSqlParser.KW_CLOSE); this.state = 8401; - this.cursor_variable(); + this.match(PostgreSqlParser.KW_CLOSE); this.state = 8402; + this.cursor_variable(); + this.state = 8403; this.match(PostgreSqlParser.SEMI); } } @@ -52991,9 +52999,9 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8404; - this.match(PostgreSqlParser.KW_NULL); this.state = 8405; + this.match(PostgreSqlParser.KW_NULL); + this.state = 8406; this.match(PostgreSqlParser.SEMI); } } @@ -53018,7 +53026,7 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8407; + this.state = 8408; _la = this.tokenStream.LA(1); if(!(_la === 161 || _la === 319)) { this.errorHandler.recoverInline(this); @@ -53027,29 +53035,29 @@ export class PostgreSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 8413; + this.state = 8414; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 33) { { - this.state = 8408; + this.state = 8409; this.match(PostgreSqlParser.KW_AND); - this.state = 8410; + this.state = 8411; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 269) { { - this.state = 8409; + this.state = 8410; this.match(PostgreSqlParser.KW_NO); } } - this.state = 8412; + this.state = 8413; this.match(PostgreSqlParser.KW_CHAIN); } } - this.state = 8415; + this.state = 8416; this.match(PostgreSqlParser.SEMI); } } @@ -53071,30 +53079,30 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Stmt_setContext(this.context, this.state); this.enterRule(localContext, 920, PostgreSqlParser.RULE_stmt_set); try { - this.state = 8429; + this.state = 8430; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_SET: this.enterOuterAlt(localContext, 1); { - this.state = 8417; - this.match(PostgreSqlParser.KW_SET); this.state = 8418; - this.any_name(); + this.match(PostgreSqlParser.KW_SET); this.state = 8419; - this.match(PostgreSqlParser.KW_TO); + this.any_name(); this.state = 8420; - this.match(PostgreSqlParser.KW_DEFAULT); + this.match(PostgreSqlParser.KW_TO); this.state = 8421; + this.match(PostgreSqlParser.KW_DEFAULT); + this.state = 8422; this.match(PostgreSqlParser.SEMI); } break; case PostgreSqlParser.KW_RESET: this.enterOuterAlt(localContext, 2); { - this.state = 8423; + this.state = 8424; this.match(PostgreSqlParser.KW_RESET); - this.state = 8426; + this.state = 8427; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_DEFAULT: @@ -53492,20 +53500,20 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.PLSQLIDENTIFIER: case PostgreSqlParser.EscapeStringConstant: { - this.state = 8424; + this.state = 8425; this.any_name(); } break; case PostgreSqlParser.KW_ALL: { - this.state = 8425; + this.state = 8426; this.match(PostgreSqlParser.KW_ALL); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 8428; + this.state = 8429; this.match(PostgreSqlParser.SEMI); } break; @@ -53531,7 +53539,7 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Cursor_variableContext(this.context, this.state); this.enterRule(localContext, 922, PostgreSqlParser.RULE_cursor_variable); try { - this.state = 8433; + this.state = 8434; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case PostgreSqlParser.KW_DEFAULT: @@ -53930,14 +53938,14 @@ export class PostgreSqlParser extends SQLParserBase { case PostgreSqlParser.EscapeStringConstant: this.enterOuterAlt(localContext, 1); { - this.state = 8431; + this.state = 8432; this.colid(); } break; case PostgreSqlParser.PARAM: this.enterOuterAlt(localContext, 2); { - this.state = 8432; + this.state = 8433; this.match(PostgreSqlParser.PARAM); } break; @@ -53967,57 +53975,57 @@ export class PostgreSqlParser extends SQLParserBase { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 8435; + this.state = 8436; this.match(PostgreSqlParser.KW_EXCEPTION); - this.state = 8452; + this.state = 8453; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 8436; + this.state = 8437; this.match(PostgreSqlParser.KW_WHEN); { - this.state = 8437; + this.state = 8438; this.proc_condition(); - this.state = 8442; + this.state = 8443; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 82) { { { - this.state = 8438; - this.match(PostgreSqlParser.KW_OR); this.state = 8439; + this.match(PostgreSqlParser.KW_OR); + this.state = 8440; this.proc_condition(); } } - this.state = 8444; + this.state = 8445; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } - this.state = 8445; + this.state = 8446; this.match(PostgreSqlParser.KW_THEN); - this.state = 8449; + this.state = 8450; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1175, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1176, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 8446; + this.state = 8447; this.proc_stmt(); } } } - this.state = 8451; + this.state = 8452; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 1175, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 1176, this.context); } } } - this.state = 8454; + this.state = 8455; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 102); @@ -54041,22 +54049,22 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Proc_conditionContext(this.context, this.state); this.enterRule(localContext, 926, PostgreSqlParser.RULE_proc_condition); try { - this.state = 8459; + this.state = 8460; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1177, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1178, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 8456; + this.state = 8457; this.any_identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 8457; - this.match(PostgreSqlParser.KW_SQLSTATE); this.state = 8458; + this.match(PostgreSqlParser.KW_SQLSTATE); + this.state = 8459; this.sconst(); } break; @@ -54080,20 +54088,20 @@ export class PostgreSqlParser extends SQLParserBase { let localContext = new Any_identifierContext(this.context, this.state); this.enterRule(localContext, 928, PostgreSqlParser.RULE_any_identifier); try { - this.state = 8463; + this.state = 8464; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1178, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1179, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 8461; + this.state = 8462; this.colid(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 8462; + this.state = 8463; this.unreserved_keyword(); } break; @@ -54120,74 +54128,74 @@ export class PostgreSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 8466; + this.state = 8467; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1179, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1180, this.context) ) { case 1: { - this.state = 8465; + this.state = 8466; this.target_list(); } break; } - this.state = 8469; + this.state = 8470; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1180, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1181, this.context) ) { case 1: { - this.state = 8468; + this.state = 8469; this.into_clause(); } break; } - this.state = 8472; + this.state = 8473; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 64) { { - this.state = 8471; + this.state = 8472; this.from_clause(); } } - this.state = 8475; + this.state = 8476; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 103) { { - this.state = 8474; + this.state = 8475; this.where_clause(); } } - this.state = 8478; + this.state = 8479; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 66) { { - this.state = 8477; + this.state = 8478; this.group_clause(); } } - this.state = 8482; + this.state = 8483; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 67) { { - this.state = 8480; - this.match(PostgreSqlParser.KW_HAVING); this.state = 8481; + this.match(PostgreSqlParser.KW_HAVING); + this.state = 8482; this.expression(); } } - this.state = 8485; + this.state = 8486; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 1185, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 1186, this.context) ) { case 1: { - this.state = 8484; + this.state = 8485; this.window_clause(); } break; @@ -54266,7 +54274,7 @@ export class PostgreSqlParser extends SQLParserBase { } public static readonly _serializedATN: number[] = [ - 4,1,590,8488,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, + 4,1,590,8489,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, @@ -55009,120 +55017,120 @@ export class PostgreSqlParser extends SQLParserBase { 364,3,364,7412,8,364,1,365,1,365,1,365,5,365,7417,8,365,10,365,12, 365,7420,9,365,1,366,1,366,1,366,1,366,1,366,3,366,7427,8,366,1, 367,1,367,3,367,7431,8,367,1,368,1,368,1,368,5,368,7436,8,368,10, - 368,12,368,7439,9,368,1,369,1,369,1,369,1,369,1,369,1,369,3,369, - 7447,8,369,1,370,1,370,1,370,1,370,1,370,5,370,7454,8,370,10,370, - 12,370,7457,9,370,3,370,7459,8,370,1,370,1,370,1,371,1,371,1,371, - 1,371,1,371,1,371,1,371,1,371,3,371,7471,8,371,1,372,1,372,1,373, - 1,373,1,373,1,373,1,373,3,373,7480,8,373,1,373,1,373,1,373,1,373, - 1,373,3,373,7487,8,373,1,373,1,373,1,373,1,373,1,373,1,373,1,373, - 3,373,7496,8,373,1,374,1,374,1,374,1,374,1,374,1,375,1,375,1,375, - 3,375,7506,8,375,1,375,1,375,1,375,3,375,7511,8,375,1,375,1,375, - 3,375,7515,8,375,3,375,7517,8,375,1,375,3,375,7520,8,375,1,376,4, - 376,7523,8,376,11,376,12,376,7524,1,377,5,377,7528,8,377,10,377, - 12,377,7531,9,377,1,378,1,378,1,378,5,378,7536,8,378,10,378,12,378, - 7539,9,378,1,379,1,379,1,379,1,379,1,379,3,379,7546,8,379,1,379, - 3,379,7549,8,379,1,380,1,380,1,380,5,380,7554,8,380,10,380,12,380, - 7557,9,380,1,381,1,381,1,381,5,381,7562,8,381,10,381,12,381,7565, - 9,381,1,382,1,382,1,382,5,382,7570,8,382,10,382,12,382,7573,9,382, - 1,383,1,383,1,383,5,383,7578,8,383,10,383,12,383,7581,9,383,1,384, - 1,384,1,385,1,385,1,386,1,386,1,387,1,387,1,388,1,388,1,389,1,389, - 1,390,1,390,3,390,7597,8,390,1,391,1,391,1,391,5,391,7602,8,391, - 10,391,12,391,7605,9,391,1,392,1,392,1,392,5,392,7610,8,392,10,392, - 12,392,7613,9,392,1,393,1,393,1,394,1,394,1,395,1,395,1,396,1,396, - 1,397,1,397,1,398,1,398,1,398,1,398,3,398,7629,8,398,1,399,1,399, - 1,399,1,399,3,399,7635,8,399,1,400,1,400,1,400,1,400,3,400,7641, - 8,400,1,401,1,401,1,402,1,402,1,402,1,402,3,402,7649,8,402,1,403, - 1,403,1,403,1,403,3,403,7655,8,403,1,404,1,404,1,404,3,404,7660, - 8,404,1,405,1,405,1,405,1,405,5,405,7666,8,405,10,405,12,405,7669, - 9,405,1,405,1,405,3,405,7673,8,405,1,406,3,406,7676,8,406,1,406, - 1,406,1,407,1,407,1,407,1,407,1,407,3,407,7685,8,407,1,408,1,408, - 1,408,5,408,7690,8,408,10,408,12,408,7693,9,408,1,409,1,409,3,409, - 7697,8,409,1,410,1,410,3,410,7701,8,410,1,411,1,411,1,411,3,411, - 7706,8,411,1,412,1,412,1,412,1,412,3,412,7712,8,412,1,413,1,413, - 1,413,3,413,7717,8,413,1,413,1,413,1,413,1,413,1,413,1,413,3,413, - 7725,8,413,1,414,1,414,1,415,1,415,1,415,1,415,1,415,1,415,1,415, + 368,12,368,7439,9,368,1,369,1,369,1,369,1,369,1,369,3,369,7446,8, + 369,3,369,7448,8,369,1,370,1,370,1,370,1,370,1,370,5,370,7455,8, + 370,10,370,12,370,7458,9,370,3,370,7460,8,370,1,370,1,370,1,371, + 1,371,1,371,1,371,1,371,1,371,1,371,1,371,3,371,7472,8,371,1,372, + 1,372,1,373,1,373,1,373,1,373,1,373,3,373,7481,8,373,1,373,1,373, + 1,373,1,373,1,373,3,373,7488,8,373,1,373,1,373,1,373,1,373,1,373, + 1,373,1,373,3,373,7497,8,373,1,374,1,374,1,374,1,374,1,374,1,375, + 1,375,1,375,3,375,7507,8,375,1,375,1,375,1,375,3,375,7512,8,375, + 1,375,1,375,3,375,7516,8,375,3,375,7518,8,375,1,375,3,375,7521,8, + 375,1,376,4,376,7524,8,376,11,376,12,376,7525,1,377,5,377,7529,8, + 377,10,377,12,377,7532,9,377,1,378,1,378,1,378,5,378,7537,8,378, + 10,378,12,378,7540,9,378,1,379,1,379,1,379,1,379,1,379,3,379,7547, + 8,379,1,379,3,379,7550,8,379,1,380,1,380,1,380,5,380,7555,8,380, + 10,380,12,380,7558,9,380,1,381,1,381,1,381,5,381,7563,8,381,10,381, + 12,381,7566,9,381,1,382,1,382,1,382,5,382,7571,8,382,10,382,12,382, + 7574,9,382,1,383,1,383,1,383,5,383,7579,8,383,10,383,12,383,7582, + 9,383,1,384,1,384,1,385,1,385,1,386,1,386,1,387,1,387,1,388,1,388, + 1,389,1,389,1,390,1,390,3,390,7598,8,390,1,391,1,391,1,391,5,391, + 7603,8,391,10,391,12,391,7606,9,391,1,392,1,392,1,392,5,392,7611, + 8,392,10,392,12,392,7614,9,392,1,393,1,393,1,394,1,394,1,395,1,395, + 1,396,1,396,1,397,1,397,1,398,1,398,1,398,1,398,3,398,7630,8,398, + 1,399,1,399,1,399,1,399,3,399,7636,8,399,1,400,1,400,1,400,1,400, + 3,400,7642,8,400,1,401,1,401,1,402,1,402,1,402,1,402,3,402,7650, + 8,402,1,403,1,403,1,403,1,403,3,403,7656,8,403,1,404,1,404,1,404, + 3,404,7661,8,404,1,405,1,405,1,405,1,405,5,405,7667,8,405,10,405, + 12,405,7670,9,405,1,405,1,405,3,405,7674,8,405,1,406,3,406,7677, + 8,406,1,406,1,406,1,407,1,407,1,407,1,407,1,407,3,407,7686,8,407, + 1,408,1,408,1,408,5,408,7691,8,408,10,408,12,408,7694,9,408,1,409, + 1,409,3,409,7698,8,409,1,410,1,410,3,410,7702,8,410,1,411,1,411, + 1,411,3,411,7707,8,411,1,412,1,412,1,412,1,412,3,412,7713,8,412, + 1,413,1,413,1,413,3,413,7718,8,413,1,413,1,413,1,413,1,413,1,413, + 1,413,3,413,7726,8,413,1,414,1,414,1,415,1,415,1,415,1,415,1,415, 1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415, 1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415, 1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415, 1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415,1,415, - 3,415,7780,8,415,1,416,1,416,1,417,1,417,1,418,3,418,7787,8,418, - 1,418,1,418,1,418,1,418,4,418,7793,8,418,11,418,12,418,7794,3,418, - 7797,8,418,3,418,7799,8,418,1,418,1,418,5,418,7803,8,418,10,418, - 12,418,7806,9,418,1,418,3,418,7809,8,418,1,418,1,418,3,418,7813, - 8,418,1,419,1,419,1,419,1,419,1,420,1,420,1,420,1,420,1,420,3,420, - 7824,8,420,1,420,3,420,7827,8,420,1,420,1,420,3,420,7831,8,420,1, - 420,1,420,3,420,7835,8,420,1,420,1,420,3,420,7839,8,420,1,420,3, - 420,7842,8,420,1,420,3,420,7845,8,420,1,420,3,420,7848,8,420,1,420, - 1,420,1,420,1,420,1,420,5,420,7855,8,420,10,420,12,420,7858,9,420, - 1,420,1,420,3,420,7862,8,420,1,420,1,420,3,420,7866,8,420,1,420, - 1,420,1,421,1,421,1,421,1,422,1,422,1,423,1,423,1,423,1,423,1,423, + 1,415,1,415,3,415,7781,8,415,1,416,1,416,1,417,1,417,1,418,3,418, + 7788,8,418,1,418,1,418,1,418,1,418,4,418,7794,8,418,11,418,12,418, + 7795,3,418,7798,8,418,3,418,7800,8,418,1,418,1,418,5,418,7804,8, + 418,10,418,12,418,7807,9,418,1,418,3,418,7810,8,418,1,418,1,418, + 3,418,7814,8,418,1,419,1,419,1,419,1,419,1,420,1,420,1,420,1,420, + 1,420,3,420,7825,8,420,1,420,3,420,7828,8,420,1,420,1,420,3,420, + 7832,8,420,1,420,1,420,3,420,7836,8,420,1,420,1,420,3,420,7840,8, + 420,1,420,3,420,7843,8,420,1,420,3,420,7846,8,420,1,420,3,420,7849, + 8,420,1,420,1,420,1,420,1,420,1,420,5,420,7856,8,420,10,420,12,420, + 7859,9,420,1,420,1,420,3,420,7863,8,420,1,420,1,420,3,420,7867,8, + 420,1,420,1,420,1,421,1,421,1,421,1,422,1,422,1,423,1,423,1,423, 1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423, - 1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423,3,423,7899,8,423, - 1,424,1,424,1,424,1,424,1,425,1,425,1,425,1,425,3,425,7909,8,425, - 1,425,1,425,3,425,7913,8,425,1,425,1,425,1,425,1,425,3,425,7919, - 8,425,1,425,1,425,1,425,3,425,7924,8,425,1,426,1,426,1,426,1,426, - 1,426,1,427,1,427,3,427,7933,8,427,1,427,1,427,1,427,1,427,5,427, - 7939,8,427,10,427,12,427,7942,9,427,1,427,1,427,1,428,1,428,1,428, - 1,428,1,429,1,429,3,429,7952,8,429,1,429,1,429,1,429,1,429,5,429, - 7958,8,429,10,429,12,429,7961,9,429,1,430,1,430,1,430,1,430,5,430, - 7967,8,430,10,430,12,430,7970,9,430,1,430,1,430,1,430,1,430,5,430, - 7976,8,430,10,430,12,430,7979,9,430,5,430,7981,8,430,10,430,12,430, - 7984,9,430,1,430,3,430,7987,8,430,1,430,1,430,1,430,1,430,1,431, - 1,431,5,431,7995,8,431,10,431,12,431,7998,9,431,1,432,1,432,3,432, - 8002,8,432,1,432,1,432,1,432,1,432,5,432,8008,8,432,10,432,12,432, - 8011,9,432,4,432,8013,8,432,11,432,12,432,8014,1,432,3,432,8018, - 8,432,1,432,1,432,1,432,1,432,1,433,3,433,8025,8,433,1,433,1,433, - 1,433,1,433,3,433,8031,8,433,1,433,1,433,1,434,1,434,1,434,1,434, - 3,434,8039,8,434,1,434,1,434,1,434,1,434,1,434,1,434,3,434,8047, - 8,434,1,434,3,434,8050,8,434,1,434,1,434,1,434,1,434,1,434,3,434, - 8057,8,434,3,434,8059,8,434,1,435,3,435,8062,8,435,1,435,1,435,1, - 435,1,435,3,435,8068,8,435,1,435,1,435,1,435,1,435,1,435,1,436,1, - 436,3,436,8077,8,436,1,436,1,436,3,436,8081,8,436,1,436,1,436,1, - 437,1,437,1,437,1,437,1,437,1,437,1,437,1,437,1,437,1,437,3,437, - 8095,8,437,1,437,3,437,8098,8,437,3,437,8100,8,437,1,437,1,437,1, - 438,1,438,3,438,8106,8,438,1,438,1,438,1,438,1,438,1,438,1,438,4, - 438,8114,8,438,11,438,12,438,8115,3,438,8118,8,438,3,438,8120,8, - 438,1,438,1,438,1,438,1,438,5,438,8126,8,438,10,438,12,438,8129, - 9,438,3,438,8131,8,438,1,438,3,438,8134,8,438,1,439,1,439,1,439, - 1,439,1,440,1,440,1,440,1,440,3,440,8144,8,440,1,440,1,440,1,441, - 1,441,5,441,8150,8,441,10,441,12,441,8153,9,441,1,441,1,441,1,441, - 3,441,8158,8,441,1,441,1,441,1,442,1,442,3,442,8164,8,442,1,442, - 1,442,1,443,1,443,1,443,3,443,8171,8,443,1,443,1,443,3,443,8175, - 8,443,1,443,1,443,3,443,8179,8,443,1,443,3,443,8182,8,443,1,443, - 3,443,8185,8,443,1,443,1,443,1,444,1,444,3,444,8191,8,444,1,444, - 1,444,1,445,1,445,1,445,3,445,8198,8,445,1,445,3,445,8201,8,445, - 1,445,1,445,1,445,1,445,1,445,1,445,3,445,8209,8,445,3,445,8211, - 8,445,1,445,1,445,1,445,1,445,1,445,5,445,8218,8,445,10,445,12,445, - 8221,9,445,1,445,1,445,3,445,8225,8,445,3,445,8227,8,445,1,445,1, - 445,1,446,1,446,1,446,3,446,8234,8,446,1,446,1,446,1,447,1,447,3, - 447,8240,8,447,1,447,3,447,8243,8,447,1,447,1,447,1,447,1,447,1, - 447,1,448,1,448,1,448,1,448,1,448,3,448,8255,8,448,1,448,1,448,1, - 448,1,448,1,448,3,448,8262,8,448,3,448,8264,8,448,1,449,1,449,3, - 449,8268,8,449,1,449,1,449,1,449,1,450,3,450,8274,8,450,1,450,1, - 450,1,450,3,450,8279,8,450,1,450,1,450,3,450,8283,8,450,1,450,3, - 450,8286,8,450,1,450,3,450,8289,8,450,1,450,1,450,1,450,1,450,1, - 450,4,450,8296,8,450,11,450,12,450,8297,1,451,3,451,8301,8,451,1, - 451,1,451,3,451,8305,8,451,1,451,1,451,3,451,8309,8,451,3,451,8311, - 8,451,1,451,3,451,8314,8,451,1,451,3,451,8317,8,451,1,452,1,452, - 1,452,1,452,3,452,8323,8,452,1,452,1,452,1,452,1,452,1,452,3,452, - 8330,8,452,1,452,1,452,1,452,1,452,1,452,3,452,8337,8,452,1,452, - 1,452,1,452,1,452,3,452,8343,8,452,3,452,8345,8,452,1,453,1,453, - 3,453,8349,8,453,1,453,1,453,1,453,3,453,8354,8,453,1,453,1,453, + 1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423,1,423,3,423, + 7900,8,423,1,424,1,424,1,424,1,424,1,425,1,425,1,425,1,425,3,425, + 7910,8,425,1,425,1,425,3,425,7914,8,425,1,425,1,425,1,425,1,425, + 3,425,7920,8,425,1,425,1,425,1,425,3,425,7925,8,425,1,426,1,426, + 1,426,1,426,1,426,1,427,1,427,3,427,7934,8,427,1,427,1,427,1,427, + 1,427,5,427,7940,8,427,10,427,12,427,7943,9,427,1,427,1,427,1,428, + 1,428,1,428,1,428,1,429,1,429,3,429,7953,8,429,1,429,1,429,1,429, + 1,429,5,429,7959,8,429,10,429,12,429,7962,9,429,1,430,1,430,1,430, + 1,430,5,430,7968,8,430,10,430,12,430,7971,9,430,1,430,1,430,1,430, + 1,430,5,430,7977,8,430,10,430,12,430,7980,9,430,5,430,7982,8,430, + 10,430,12,430,7985,9,430,1,430,3,430,7988,8,430,1,430,1,430,1,430, + 1,430,1,431,1,431,5,431,7996,8,431,10,431,12,431,7999,9,431,1,432, + 1,432,3,432,8003,8,432,1,432,1,432,1,432,1,432,5,432,8009,8,432, + 10,432,12,432,8012,9,432,4,432,8014,8,432,11,432,12,432,8015,1,432, + 3,432,8019,8,432,1,432,1,432,1,432,1,432,1,433,3,433,8026,8,433, + 1,433,1,433,1,433,1,433,3,433,8032,8,433,1,433,1,433,1,434,1,434, + 1,434,1,434,3,434,8040,8,434,1,434,1,434,1,434,1,434,1,434,1,434, + 3,434,8048,8,434,1,434,3,434,8051,8,434,1,434,1,434,1,434,1,434, + 1,434,3,434,8058,8,434,3,434,8060,8,434,1,435,3,435,8063,8,435,1, + 435,1,435,1,435,1,435,3,435,8069,8,435,1,435,1,435,1,435,1,435,1, + 435,1,436,1,436,3,436,8078,8,436,1,436,1,436,3,436,8082,8,436,1, + 436,1,436,1,437,1,437,1,437,1,437,1,437,1,437,1,437,1,437,1,437, + 1,437,3,437,8096,8,437,1,437,3,437,8099,8,437,3,437,8101,8,437,1, + 437,1,437,1,438,1,438,3,438,8107,8,438,1,438,1,438,1,438,1,438,1, + 438,1,438,4,438,8115,8,438,11,438,12,438,8116,3,438,8119,8,438,3, + 438,8121,8,438,1,438,1,438,1,438,1,438,5,438,8127,8,438,10,438,12, + 438,8130,9,438,3,438,8132,8,438,1,438,3,438,8135,8,438,1,439,1,439, + 1,439,1,439,1,440,1,440,1,440,1,440,3,440,8145,8,440,1,440,1,440, + 1,441,1,441,5,441,8151,8,441,10,441,12,441,8154,9,441,1,441,1,441, + 1,441,3,441,8159,8,441,1,441,1,441,1,442,1,442,3,442,8165,8,442, + 1,442,1,442,1,443,1,443,1,443,3,443,8172,8,443,1,443,1,443,3,443, + 8176,8,443,1,443,1,443,3,443,8180,8,443,1,443,3,443,8183,8,443,1, + 443,3,443,8186,8,443,1,443,1,443,1,444,1,444,3,444,8192,8,444,1, + 444,1,444,1,445,1,445,1,445,3,445,8199,8,445,1,445,3,445,8202,8, + 445,1,445,1,445,1,445,1,445,1,445,1,445,3,445,8210,8,445,3,445,8212, + 8,445,1,445,1,445,1,445,1,445,1,445,5,445,8219,8,445,10,445,12,445, + 8222,9,445,1,445,1,445,3,445,8226,8,445,3,445,8228,8,445,1,445,1, + 445,1,446,1,446,1,446,3,446,8235,8,446,1,446,1,446,1,447,1,447,3, + 447,8241,8,447,1,447,3,447,8244,8,447,1,447,1,447,1,447,1,447,1, + 447,1,448,1,448,1,448,1,448,1,448,3,448,8256,8,448,1,448,1,448,1, + 448,1,448,1,448,3,448,8263,8,448,3,448,8265,8,448,1,449,1,449,3, + 449,8269,8,449,1,449,1,449,1,449,1,450,3,450,8275,8,450,1,450,1, + 450,1,450,3,450,8280,8,450,1,450,1,450,3,450,8284,8,450,1,450,3, + 450,8287,8,450,1,450,3,450,8290,8,450,1,450,1,450,1,450,1,450,1, + 450,4,450,8297,8,450,11,450,12,450,8298,1,451,3,451,8302,8,451,1, + 451,1,451,3,451,8306,8,451,1,451,1,451,3,451,8310,8,451,3,451,8312, + 8,451,1,451,3,451,8315,8,451,1,451,3,451,8318,8,451,1,452,1,452, + 1,452,1,452,3,452,8324,8,452,1,452,1,452,1,452,1,452,1,452,3,452, + 8331,8,452,1,452,1,452,1,452,1,452,1,452,3,452,8338,8,452,1,452, + 1,452,1,452,1,452,3,452,8344,8,452,3,452,8346,8,452,1,453,1,453, + 3,453,8350,8,453,1,453,1,453,1,453,3,453,8355,8,453,1,453,1,453, 1,454,1,454,1,454,1,454,1,454,1,454,1,454,1,454,1,454,1,454,1,454, - 1,454,5,454,8370,8,454,10,454,12,454,8373,9,454,1,454,1,454,4,454, - 8377,8,454,11,454,12,454,8378,1,455,1,455,1,455,1,455,1,455,5,455, - 8386,8,455,10,455,12,455,8389,9,455,1,455,1,455,1,455,1,455,3,455, - 8395,8,455,1,456,1,456,3,456,8399,8,456,1,457,1,457,1,457,1,457, - 1,458,1,458,1,458,1,459,1,459,1,459,3,459,8411,8,459,1,459,3,459, - 8414,8,459,1,459,1,459,1,460,1,460,1,460,1,460,1,460,1,460,1,460, - 1,460,1,460,3,460,8427,8,460,1,460,3,460,8430,8,460,1,461,1,461, - 3,461,8434,8,461,1,462,1,462,1,462,1,462,1,462,5,462,8441,8,462, - 10,462,12,462,8444,9,462,1,462,1,462,5,462,8448,8,462,10,462,12, - 462,8451,9,462,4,462,8453,8,462,11,462,12,462,8454,1,463,1,463,1, - 463,3,463,8460,8,463,1,464,1,464,3,464,8464,8,464,1,465,3,465,8467, - 8,465,1,465,3,465,8470,8,465,1,465,3,465,8473,8,465,1,465,3,465, - 8476,8,465,1,465,3,465,8479,8,465,1,465,1,465,3,465,8483,8,465,1, - 465,3,465,8486,8,465,1,465,0,3,676,680,682,466,0,2,4,6,8,10,12,14, + 1,454,5,454,8371,8,454,10,454,12,454,8374,9,454,1,454,1,454,4,454, + 8378,8,454,11,454,12,454,8379,1,455,1,455,1,455,1,455,1,455,5,455, + 8387,8,455,10,455,12,455,8390,9,455,1,455,1,455,1,455,1,455,3,455, + 8396,8,455,1,456,1,456,3,456,8400,8,456,1,457,1,457,1,457,1,457, + 1,458,1,458,1,458,1,459,1,459,1,459,3,459,8412,8,459,1,459,3,459, + 8415,8,459,1,459,1,459,1,460,1,460,1,460,1,460,1,460,1,460,1,460, + 1,460,1,460,3,460,8428,8,460,1,460,3,460,8431,8,460,1,461,1,461, + 3,461,8435,8,461,1,462,1,462,1,462,1,462,1,462,5,462,8442,8,462, + 10,462,12,462,8445,9,462,1,462,1,462,5,462,8449,8,462,10,462,12, + 462,8452,9,462,4,462,8454,8,462,11,462,12,462,8455,1,463,1,463,1, + 463,3,463,8461,8,463,1,464,1,464,3,464,8465,8,464,1,465,3,465,8468, + 8,465,1,465,3,465,8471,8,465,1,465,3,465,8474,8,465,1,465,3,465, + 8477,8,465,1,465,3,465,8480,8,465,1,465,1,465,3,465,8484,8,465,1, + 465,3,465,8487,8,465,1,465,0,3,676,680,682,466,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, @@ -55194,7 +55202,7 @@ export class PostgreSqlParser extends SQLParserBase { 504,504,506,518,520,520,524,524,547,548,3,0,106,123,125,128,472, 472,4,0,30,52,54,70,72,105,454,454,2,0,62,62,116,116,2,0,10,10,20, 20,2,0,434,434,501,501,2,0,167,167,507,507,1,0,512,517,2,0,144,144, - 210,210,9921,0,935,1,0,0,0,2,940,1,0,0,0,4,1064,1,0,0,0,6,1066,1, + 210,210,9923,0,935,1,0,0,0,2,940,1,0,0,0,4,1064,1,0,0,0,6,1066,1, 0,0,0,8,1069,1,0,0,0,10,1119,1,0,0,0,12,1129,1,0,0,0,14,1131,1,0, 0,0,16,1143,1,0,0,0,18,1155,1,0,0,0,20,1166,1,0,0,0,22,1200,1,0, 0,0,24,1244,1,0,0,0,26,1246,1,0,0,0,28,1258,1,0,0,0,30,1265,1,0, @@ -55286,31 +55294,31 @@ export class PostgreSqlParser extends SQLParserBase { 1,0,0,0,712,7364,1,0,0,0,714,7373,1,0,0,0,716,7375,1,0,0,0,718,7382, 1,0,0,0,720,7386,1,0,0,0,722,7388,1,0,0,0,724,7396,1,0,0,0,726,7404, 1,0,0,0,728,7411,1,0,0,0,730,7413,1,0,0,0,732,7426,1,0,0,0,734,7430, - 1,0,0,0,736,7432,1,0,0,0,738,7446,1,0,0,0,740,7448,1,0,0,0,742,7470, - 1,0,0,0,744,7472,1,0,0,0,746,7495,1,0,0,0,748,7497,1,0,0,0,750,7519, - 1,0,0,0,752,7522,1,0,0,0,754,7529,1,0,0,0,756,7532,1,0,0,0,758,7548, - 1,0,0,0,760,7550,1,0,0,0,762,7558,1,0,0,0,764,7566,1,0,0,0,766,7574, - 1,0,0,0,768,7582,1,0,0,0,770,7584,1,0,0,0,772,7586,1,0,0,0,774,7588, - 1,0,0,0,776,7590,1,0,0,0,778,7592,1,0,0,0,780,7594,1,0,0,0,782,7598, - 1,0,0,0,784,7606,1,0,0,0,786,7614,1,0,0,0,788,7616,1,0,0,0,790,7618, - 1,0,0,0,792,7620,1,0,0,0,794,7622,1,0,0,0,796,7628,1,0,0,0,798,7634, - 1,0,0,0,800,7640,1,0,0,0,802,7642,1,0,0,0,804,7648,1,0,0,0,806,7654, - 1,0,0,0,808,7656,1,0,0,0,810,7672,1,0,0,0,812,7675,1,0,0,0,814,7684, - 1,0,0,0,816,7686,1,0,0,0,818,7696,1,0,0,0,820,7700,1,0,0,0,822,7705, - 1,0,0,0,824,7711,1,0,0,0,826,7724,1,0,0,0,828,7726,1,0,0,0,830,7779, - 1,0,0,0,832,7781,1,0,0,0,834,7783,1,0,0,0,836,7786,1,0,0,0,838,7814, - 1,0,0,0,840,7818,1,0,0,0,842,7869,1,0,0,0,844,7872,1,0,0,0,846,7898, - 1,0,0,0,848,7900,1,0,0,0,850,7923,1,0,0,0,852,7925,1,0,0,0,854,7930, - 1,0,0,0,856,7945,1,0,0,0,858,7951,1,0,0,0,860,7962,1,0,0,0,862,7992, - 1,0,0,0,864,7999,1,0,0,0,866,8024,1,0,0,0,868,8034,1,0,0,0,870,8061, - 1,0,0,0,872,8074,1,0,0,0,874,8084,1,0,0,0,876,8103,1,0,0,0,878,8135, - 1,0,0,0,880,8139,1,0,0,0,882,8147,1,0,0,0,884,8161,1,0,0,0,886,8167, - 1,0,0,0,888,8188,1,0,0,0,890,8194,1,0,0,0,892,8233,1,0,0,0,894,8237, - 1,0,0,0,896,8263,1,0,0,0,898,8265,1,0,0,0,900,8273,1,0,0,0,902,8310, - 1,0,0,0,904,8344,1,0,0,0,906,8346,1,0,0,0,908,8357,1,0,0,0,910,8394, - 1,0,0,0,912,8398,1,0,0,0,914,8400,1,0,0,0,916,8404,1,0,0,0,918,8407, - 1,0,0,0,920,8429,1,0,0,0,922,8433,1,0,0,0,924,8435,1,0,0,0,926,8459, - 1,0,0,0,928,8463,1,0,0,0,930,8466,1,0,0,0,932,934,3,2,1,0,933,932, + 1,0,0,0,736,7432,1,0,0,0,738,7447,1,0,0,0,740,7449,1,0,0,0,742,7471, + 1,0,0,0,744,7473,1,0,0,0,746,7496,1,0,0,0,748,7498,1,0,0,0,750,7520, + 1,0,0,0,752,7523,1,0,0,0,754,7530,1,0,0,0,756,7533,1,0,0,0,758,7549, + 1,0,0,0,760,7551,1,0,0,0,762,7559,1,0,0,0,764,7567,1,0,0,0,766,7575, + 1,0,0,0,768,7583,1,0,0,0,770,7585,1,0,0,0,772,7587,1,0,0,0,774,7589, + 1,0,0,0,776,7591,1,0,0,0,778,7593,1,0,0,0,780,7595,1,0,0,0,782,7599, + 1,0,0,0,784,7607,1,0,0,0,786,7615,1,0,0,0,788,7617,1,0,0,0,790,7619, + 1,0,0,0,792,7621,1,0,0,0,794,7623,1,0,0,0,796,7629,1,0,0,0,798,7635, + 1,0,0,0,800,7641,1,0,0,0,802,7643,1,0,0,0,804,7649,1,0,0,0,806,7655, + 1,0,0,0,808,7657,1,0,0,0,810,7673,1,0,0,0,812,7676,1,0,0,0,814,7685, + 1,0,0,0,816,7687,1,0,0,0,818,7697,1,0,0,0,820,7701,1,0,0,0,822,7706, + 1,0,0,0,824,7712,1,0,0,0,826,7725,1,0,0,0,828,7727,1,0,0,0,830,7780, + 1,0,0,0,832,7782,1,0,0,0,834,7784,1,0,0,0,836,7787,1,0,0,0,838,7815, + 1,0,0,0,840,7819,1,0,0,0,842,7870,1,0,0,0,844,7873,1,0,0,0,846,7899, + 1,0,0,0,848,7901,1,0,0,0,850,7924,1,0,0,0,852,7926,1,0,0,0,854,7931, + 1,0,0,0,856,7946,1,0,0,0,858,7952,1,0,0,0,860,7963,1,0,0,0,862,7993, + 1,0,0,0,864,8000,1,0,0,0,866,8025,1,0,0,0,868,8035,1,0,0,0,870,8062, + 1,0,0,0,872,8075,1,0,0,0,874,8085,1,0,0,0,876,8104,1,0,0,0,878,8136, + 1,0,0,0,880,8140,1,0,0,0,882,8148,1,0,0,0,884,8162,1,0,0,0,886,8168, + 1,0,0,0,888,8189,1,0,0,0,890,8195,1,0,0,0,892,8234,1,0,0,0,894,8238, + 1,0,0,0,896,8264,1,0,0,0,898,8266,1,0,0,0,900,8274,1,0,0,0,902,8311, + 1,0,0,0,904,8345,1,0,0,0,906,8347,1,0,0,0,908,8358,1,0,0,0,910,8395, + 1,0,0,0,912,8399,1,0,0,0,914,8401,1,0,0,0,916,8405,1,0,0,0,918,8408, + 1,0,0,0,920,8430,1,0,0,0,922,8434,1,0,0,0,924,8436,1,0,0,0,926,8460, + 1,0,0,0,928,8464,1,0,0,0,930,8467,1,0,0,0,932,934,3,2,1,0,933,932, 1,0,0,0,934,937,1,0,0,0,935,933,1,0,0,0,935,936,1,0,0,0,936,938, 1,0,0,0,937,935,1,0,0,0,938,939,5,0,0,1,939,1,1,0,0,0,940,942,3, 4,2,0,941,943,5,7,0,0,942,941,1,0,0,0,942,943,1,0,0,0,943,3,1,0, @@ -57682,483 +57690,484 @@ export class PostgreSqlParser extends SQLParserBase { 0,0,0,7430,7429,1,0,0,0,7431,735,1,0,0,0,7432,7437,3,738,369,0,7433, 7434,5,6,0,0,7434,7436,3,738,369,0,7435,7433,1,0,0,0,7436,7439,1, 0,0,0,7437,7435,1,0,0,0,7437,7438,1,0,0,0,7438,737,1,0,0,0,7439, - 7437,1,0,0,0,7440,7447,3,800,400,0,7441,7447,3,674,337,0,7442,7443, - 3,820,410,0,7443,7444,7,107,0,0,7444,7445,3,674,337,0,7445,7447, - 1,0,0,0,7446,7440,1,0,0,0,7446,7441,1,0,0,0,7446,7442,1,0,0,0,7447, - 739,1,0,0,0,7448,7458,5,4,0,0,7449,7459,3,730,365,0,7450,7455,3, - 740,370,0,7451,7452,5,6,0,0,7452,7454,3,740,370,0,7453,7451,1,0, - 0,0,7454,7457,1,0,0,0,7455,7453,1,0,0,0,7455,7456,1,0,0,0,7456,7459, - 1,0,0,0,7457,7455,1,0,0,0,7458,7449,1,0,0,0,7458,7450,1,0,0,0,7458, - 7459,1,0,0,0,7459,7460,1,0,0,0,7460,7461,5,5,0,0,7461,741,1,0,0, - 0,7462,7471,3,826,413,0,7463,7471,5,384,0,0,7464,7471,5,264,0,0, - 7465,7471,5,176,0,0,7466,7471,5,218,0,0,7467,7471,5,261,0,0,7468, - 7471,5,326,0,0,7469,7471,3,808,404,0,7470,7462,1,0,0,0,7470,7463, - 1,0,0,0,7470,7464,1,0,0,0,7470,7465,1,0,0,0,7470,7466,1,0,0,0,7470, - 7467,1,0,0,0,7470,7468,1,0,0,0,7470,7469,1,0,0,0,7471,743,1,0,0, - 0,7472,7473,7,108,0,0,7473,745,1,0,0,0,7474,7475,3,674,337,0,7475, - 7476,5,64,0,0,7476,7479,3,674,337,0,7477,7478,5,62,0,0,7478,7480, - 3,674,337,0,7479,7477,1,0,0,0,7479,7480,1,0,0,0,7480,7496,1,0,0, - 0,7481,7482,3,674,337,0,7482,7483,5,62,0,0,7483,7486,3,674,337,0, - 7484,7485,5,64,0,0,7485,7487,3,674,337,0,7486,7484,1,0,0,0,7486, - 7487,1,0,0,0,7487,7496,1,0,0,0,7488,7489,3,674,337,0,7489,7490,5, - 127,0,0,7490,7491,3,674,337,0,7491,7492,5,197,0,0,7492,7493,3,674, - 337,0,7493,7496,1,0,0,0,7494,7496,3,730,365,0,7495,7474,1,0,0,0, - 7495,7481,1,0,0,0,7495,7488,1,0,0,0,7495,7494,1,0,0,0,7496,747,1, - 0,0,0,7497,7498,5,102,0,0,7498,7499,3,674,337,0,7499,7500,5,93,0, - 0,7500,7501,3,674,337,0,7501,749,1,0,0,0,7502,7505,5,11,0,0,7503, - 7506,3,824,412,0,7504,7506,5,9,0,0,7505,7503,1,0,0,0,7505,7504,1, - 0,0,0,7506,7520,1,0,0,0,7507,7516,5,4,0,0,7508,7517,3,674,337,0, - 7509,7511,3,674,337,0,7510,7509,1,0,0,0,7510,7511,1,0,0,0,7511,7512, - 1,0,0,0,7512,7514,5,8,0,0,7513,7515,3,674,337,0,7514,7513,1,0,0, - 0,7514,7515,1,0,0,0,7515,7517,1,0,0,0,7516,7508,1,0,0,0,7516,7510, - 1,0,0,0,7517,7518,1,0,0,0,7518,7520,5,5,0,0,7519,7502,1,0,0,0,7519, - 7507,1,0,0,0,7520,751,1,0,0,0,7521,7523,3,750,375,0,7522,7521,1, - 0,0,0,7523,7524,1,0,0,0,7524,7522,1,0,0,0,7524,7525,1,0,0,0,7525, - 753,1,0,0,0,7526,7528,3,750,375,0,7527,7526,1,0,0,0,7528,7531,1, - 0,0,0,7529,7527,1,0,0,0,7529,7530,1,0,0,0,7530,755,1,0,0,0,7531, - 7529,1,0,0,0,7532,7537,3,758,379,0,7533,7534,5,6,0,0,7534,7536,3, - 758,379,0,7535,7533,1,0,0,0,7536,7539,1,0,0,0,7537,7535,1,0,0,0, - 7537,7538,1,0,0,0,7538,757,1,0,0,0,7539,7537,1,0,0,0,7540,7545,3, - 734,367,0,7541,7542,5,36,0,0,7542,7546,3,824,412,0,7543,7546,3,826, - 413,0,7544,7546,1,0,0,0,7545,7541,1,0,0,0,7545,7543,1,0,0,0,7545, - 7544,1,0,0,0,7546,7549,1,0,0,0,7547,7549,5,9,0,0,7548,7540,1,0,0, - 0,7548,7547,1,0,0,0,7549,759,1,0,0,0,7550,7555,3,780,390,0,7551, - 7552,5,6,0,0,7552,7554,3,780,390,0,7553,7551,1,0,0,0,7554,7557,1, - 0,0,0,7555,7553,1,0,0,0,7555,7556,1,0,0,0,7556,761,1,0,0,0,7557, - 7555,1,0,0,0,7558,7563,3,774,387,0,7559,7560,5,6,0,0,7560,7562,3, - 774,387,0,7561,7559,1,0,0,0,7562,7565,1,0,0,0,7563,7561,1,0,0,0, - 7563,7564,1,0,0,0,7564,763,1,0,0,0,7565,7563,1,0,0,0,7566,7571,3, - 790,395,0,7567,7568,5,6,0,0,7568,7570,3,790,395,0,7569,7567,1,0, - 0,0,7570,7573,1,0,0,0,7571,7569,1,0,0,0,7571,7572,1,0,0,0,7572,765, - 1,0,0,0,7573,7571,1,0,0,0,7574,7579,3,788,394,0,7575,7576,5,6,0, - 0,7576,7578,3,788,394,0,7577,7575,1,0,0,0,7578,7581,1,0,0,0,7579, - 7577,1,0,0,0,7579,7580,1,0,0,0,7580,767,1,0,0,0,7581,7579,1,0,0, - 0,7582,7583,3,780,390,0,7583,769,1,0,0,0,7584,7585,3,780,390,0,7585, - 771,1,0,0,0,7586,7587,3,780,390,0,7587,773,1,0,0,0,7588,7589,3,780, - 390,0,7589,775,1,0,0,0,7590,7591,3,780,390,0,7591,777,1,0,0,0,7592, - 7593,3,316,158,0,7593,779,1,0,0,0,7594,7596,3,818,409,0,7595,7597, - 3,752,376,0,7596,7595,1,0,0,0,7596,7597,1,0,0,0,7597,781,1,0,0,0, - 7598,7603,3,770,385,0,7599,7600,5,6,0,0,7600,7602,3,770,385,0,7601, - 7599,1,0,0,0,7602,7605,1,0,0,0,7603,7601,1,0,0,0,7603,7604,1,0,0, - 0,7604,783,1,0,0,0,7605,7603,1,0,0,0,7606,7611,3,818,409,0,7607, - 7608,5,6,0,0,7608,7610,3,818,409,0,7609,7607,1,0,0,0,7610,7613,1, - 0,0,0,7611,7609,1,0,0,0,7611,7612,1,0,0,0,7612,785,1,0,0,0,7613, - 7611,1,0,0,0,7614,7615,3,316,158,0,7615,787,1,0,0,0,7616,7617,3, - 316,158,0,7617,789,1,0,0,0,7618,7619,3,316,158,0,7619,791,1,0,0, - 0,7620,7621,3,818,409,0,7621,793,1,0,0,0,7622,7623,3,818,409,0,7623, - 795,1,0,0,0,7624,7629,3,820,410,0,7625,7626,3,818,409,0,7626,7627, - 3,752,376,0,7627,7629,1,0,0,0,7628,7624,1,0,0,0,7628,7625,1,0,0, - 0,7629,797,1,0,0,0,7630,7635,3,820,410,0,7631,7632,3,818,409,0,7632, - 7633,3,752,376,0,7633,7635,1,0,0,0,7634,7630,1,0,0,0,7634,7631,1, - 0,0,0,7635,799,1,0,0,0,7636,7637,3,818,409,0,7637,7638,3,754,377, - 0,7638,7641,1,0,0,0,7639,7641,4,400,10,0,7640,7636,1,0,0,0,7640, - 7639,1,0,0,0,7641,801,1,0,0,0,7642,7643,3,818,409,0,7643,803,1,0, - 0,0,7644,7649,3,820,410,0,7645,7646,3,818,409,0,7646,7647,3,752, - 376,0,7647,7649,1,0,0,0,7648,7644,1,0,0,0,7648,7645,1,0,0,0,7649, - 805,1,0,0,0,7650,7655,3,820,410,0,7651,7652,3,818,409,0,7652,7653, - 3,752,376,0,7653,7655,1,0,0,0,7654,7650,1,0,0,0,7654,7651,1,0,0, - 0,7655,807,1,0,0,0,7656,7659,3,810,405,0,7657,7658,5,487,0,0,7658, - 7660,3,810,405,0,7659,7657,1,0,0,0,7659,7660,1,0,0,0,7660,809,1, - 0,0,0,7661,7673,5,558,0,0,7662,7673,5,560,0,0,7663,7667,5,562,0, - 0,7664,7666,5,588,0,0,7665,7664,1,0,0,0,7666,7669,1,0,0,0,7667,7665, - 1,0,0,0,7667,7668,1,0,0,0,7668,7670,1,0,0,0,7669,7667,1,0,0,0,7670, - 7673,5,589,0,0,7671,7673,5,584,0,0,7672,7661,1,0,0,0,7672,7662,1, - 0,0,0,7672,7663,1,0,0,0,7672,7671,1,0,0,0,7673,811,1,0,0,0,7674, - 7676,7,29,0,0,7675,7674,1,0,0,0,7675,7676,1,0,0,0,7676,7677,1,0, - 0,0,7677,7678,5,571,0,0,7678,813,1,0,0,0,7679,7685,3,822,411,0,7680, - 7685,5,52,0,0,7681,7685,5,49,0,0,7682,7685,5,89,0,0,7683,7685,5, - 524,0,0,7684,7679,1,0,0,0,7684,7680,1,0,0,0,7684,7681,1,0,0,0,7684, - 7682,1,0,0,0,7684,7683,1,0,0,0,7685,815,1,0,0,0,7686,7691,3,814, - 407,0,7687,7688,5,6,0,0,7688,7690,3,814,407,0,7689,7687,1,0,0,0, - 7690,7693,1,0,0,0,7691,7689,1,0,0,0,7691,7692,1,0,0,0,7692,817,1, - 0,0,0,7693,7691,1,0,0,0,7694,7697,3,826,413,0,7695,7697,3,830,415, - 0,7696,7694,1,0,0,0,7696,7695,1,0,0,0,7697,819,1,0,0,0,7698,7701, - 3,826,413,0,7699,7701,3,832,416,0,7700,7698,1,0,0,0,7700,7699,1, - 0,0,0,7701,821,1,0,0,0,7702,7706,3,826,413,0,7703,7706,3,830,415, - 0,7704,7706,3,832,416,0,7705,7702,1,0,0,0,7705,7703,1,0,0,0,7705, - 7704,1,0,0,0,7706,823,1,0,0,0,7707,7712,3,826,413,0,7708,7712,3, - 830,415,0,7709,7712,3,832,416,0,7710,7712,3,834,417,0,7711,7707, - 1,0,0,0,7711,7708,1,0,0,0,7711,7709,1,0,0,0,7711,7710,1,0,0,0,7712, - 825,1,0,0,0,7713,7716,5,549,0,0,7714,7715,5,487,0,0,7715,7717,3, - 810,405,0,7716,7714,1,0,0,0,7716,7717,1,0,0,0,7717,7725,1,0,0,0, - 7718,7725,3,808,404,0,7719,7725,5,550,0,0,7720,7725,5,554,0,0,7721, - 7725,5,574,0,0,7722,7725,5,575,0,0,7723,7725,3,828,414,0,7724,7713, - 1,0,0,0,7724,7718,1,0,0,0,7724,7719,1,0,0,0,7724,7720,1,0,0,0,7724, - 7721,1,0,0,0,7724,7722,1,0,0,0,7724,7723,1,0,0,0,7725,827,1,0,0, - 0,7726,7727,7,109,0,0,7727,829,1,0,0,0,7728,7780,5,387,0,0,7729, - 7780,5,388,0,0,7730,7780,3,662,331,0,7731,7780,5,390,0,0,7732,7780, - 5,391,0,0,7733,7780,3,664,332,0,7734,7780,5,393,0,0,7735,7780,5, - 394,0,0,7736,7780,5,395,0,0,7737,7780,5,396,0,0,7738,7780,5,397, - 0,0,7739,7780,5,398,0,0,7740,7780,5,399,0,0,7741,7780,5,470,0,0, - 7742,7780,5,400,0,0,7743,7780,5,401,0,0,7744,7780,5,402,0,0,7745, - 7780,5,403,0,0,7746,7780,5,404,0,0,7747,7780,5,405,0,0,7748,7780, - 5,406,0,0,7749,7780,5,407,0,0,7750,7780,5,489,0,0,7751,7780,5,408, - 0,0,7752,7780,3,658,329,0,7753,7780,5,453,0,0,7754,7780,5,410,0, - 0,7755,7780,5,411,0,0,7756,7780,5,412,0,0,7757,7780,5,413,0,0,7758, - 7780,5,414,0,0,7759,7780,5,415,0,0,7760,7780,5,416,0,0,7761,7780, - 5,417,0,0,7762,7780,5,418,0,0,7763,7780,5,419,0,0,7764,7780,5,420, - 0,0,7765,7780,5,421,0,0,7766,7780,5,422,0,0,7767,7780,5,423,0,0, - 7768,7780,5,424,0,0,7769,7780,5,425,0,0,7770,7780,5,426,0,0,7771, - 7780,5,427,0,0,7772,7780,5,428,0,0,7773,7780,5,476,0,0,7774,7780, - 5,429,0,0,7775,7780,5,430,0,0,7776,7780,5,431,0,0,7777,7780,5,432, - 0,0,7778,7780,5,474,0,0,7779,7728,1,0,0,0,7779,7729,1,0,0,0,7779, - 7730,1,0,0,0,7779,7731,1,0,0,0,7779,7732,1,0,0,0,7779,7733,1,0,0, - 0,7779,7734,1,0,0,0,7779,7735,1,0,0,0,7779,7736,1,0,0,0,7779,7737, - 1,0,0,0,7779,7738,1,0,0,0,7779,7739,1,0,0,0,7779,7740,1,0,0,0,7779, - 7741,1,0,0,0,7779,7742,1,0,0,0,7779,7743,1,0,0,0,7779,7744,1,0,0, - 0,7779,7745,1,0,0,0,7779,7746,1,0,0,0,7779,7747,1,0,0,0,7779,7748, - 1,0,0,0,7779,7749,1,0,0,0,7779,7750,1,0,0,0,7779,7751,1,0,0,0,7779, - 7752,1,0,0,0,7779,7753,1,0,0,0,7779,7754,1,0,0,0,7779,7755,1,0,0, - 0,7779,7756,1,0,0,0,7779,7757,1,0,0,0,7779,7758,1,0,0,0,7779,7759, - 1,0,0,0,7779,7760,1,0,0,0,7779,7761,1,0,0,0,7779,7762,1,0,0,0,7779, - 7763,1,0,0,0,7779,7764,1,0,0,0,7779,7765,1,0,0,0,7779,7766,1,0,0, - 0,7779,7767,1,0,0,0,7779,7768,1,0,0,0,7779,7769,1,0,0,0,7779,7770, - 1,0,0,0,7779,7771,1,0,0,0,7779,7772,1,0,0,0,7779,7773,1,0,0,0,7779, - 7774,1,0,0,0,7779,7775,1,0,0,0,7779,7776,1,0,0,0,7779,7777,1,0,0, - 0,7779,7778,1,0,0,0,7780,831,1,0,0,0,7781,7782,7,110,0,0,7782,833, - 1,0,0,0,7783,7784,7,111,0,0,7784,835,1,0,0,0,7785,7787,3,838,419, - 0,7786,7785,1,0,0,0,7786,7787,1,0,0,0,7787,7798,1,0,0,0,7788,7796, - 5,178,0,0,7789,7793,3,840,420,0,7790,7793,5,178,0,0,7791,7793,3, - 838,419,0,7792,7789,1,0,0,0,7792,7790,1,0,0,0,7792,7791,1,0,0,0, - 7793,7794,1,0,0,0,7794,7792,1,0,0,0,7794,7795,1,0,0,0,7795,7797, - 1,0,0,0,7796,7792,1,0,0,0,7796,7797,1,0,0,0,7797,7799,1,0,0,0,7798, - 7788,1,0,0,0,7798,7799,1,0,0,0,7799,7800,1,0,0,0,7800,7804,5,146, - 0,0,7801,7803,3,846,423,0,7802,7801,1,0,0,0,7803,7806,1,0,0,0,7804, - 7802,1,0,0,0,7804,7805,1,0,0,0,7805,7808,1,0,0,0,7806,7804,1,0,0, - 0,7807,7809,3,924,462,0,7808,7807,1,0,0,0,7808,7809,1,0,0,0,7809, - 7810,1,0,0,0,7810,7812,5,454,0,0,7811,7813,3,928,464,0,7812,7811, - 1,0,0,0,7812,7813,1,0,0,0,7813,837,1,0,0,0,7814,7815,5,18,0,0,7815, - 7816,3,928,464,0,7816,7817,5,19,0,0,7817,839,1,0,0,0,7818,7865,3, - 928,464,0,7819,7820,5,496,0,0,7820,7823,5,62,0,0,7821,7824,5,28, - 0,0,7822,7824,3,818,409,0,7823,7821,1,0,0,0,7823,7822,1,0,0,0,7824, - 7866,1,0,0,0,7825,7827,5,497,0,0,7826,7825,1,0,0,0,7826,7827,1,0, - 0,0,7827,7828,1,0,0,0,7828,7830,3,652,326,0,7829,7831,3,98,49,0, - 7830,7829,1,0,0,0,7830,7831,1,0,0,0,7831,7834,1,0,0,0,7832,7833, - 5,77,0,0,7833,7835,5,78,0,0,7834,7832,1,0,0,0,7834,7835,1,0,0,0, - 7835,7841,1,0,0,0,7836,7839,3,844,422,0,7837,7839,5,53,0,0,7838, - 7836,1,0,0,0,7838,7837,1,0,0,0,7839,7840,1,0,0,0,7840,7842,3,930, - 465,0,7841,7838,1,0,0,0,7841,7842,1,0,0,0,7842,7866,1,0,0,0,7843, - 7845,5,269,0,0,7844,7843,1,0,0,0,7844,7845,1,0,0,0,7845,7846,1,0, - 0,0,7846,7848,5,324,0,0,7847,7844,1,0,0,0,7847,7848,1,0,0,0,7848, - 7849,1,0,0,0,7849,7861,5,172,0,0,7850,7851,5,2,0,0,7851,7856,3,842, - 421,0,7852,7853,5,6,0,0,7853,7855,3,842,421,0,7854,7852,1,0,0,0, - 7855,7858,1,0,0,0,7856,7854,1,0,0,0,7856,7857,1,0,0,0,7857,7859, - 1,0,0,0,7858,7856,1,0,0,0,7859,7860,5,3,0,0,7860,7862,1,0,0,0,7861, - 7850,1,0,0,0,7861,7862,1,0,0,0,7862,7863,1,0,0,0,7863,7864,7,112, - 0,0,7864,7866,3,560,280,0,7865,7819,1,0,0,0,7865,7826,1,0,0,0,7865, - 7847,1,0,0,0,7866,7867,1,0,0,0,7867,7868,5,7,0,0,7868,841,1,0,0, - 0,7869,7870,3,928,464,0,7870,7871,3,652,326,0,7871,843,1,0,0,0,7872, - 7873,7,113,0,0,7873,845,1,0,0,0,7874,7875,3,836,418,0,7875,7876, - 5,7,0,0,7876,7899,1,0,0,0,7877,7899,3,874,437,0,7878,7899,3,876, - 438,0,7879,7899,3,852,426,0,7880,7899,3,860,430,0,7881,7899,3,864, - 432,0,7882,7899,3,866,433,0,7883,7899,3,870,435,0,7884,7899,3,872, - 436,0,7885,7899,3,880,440,0,7886,7899,3,884,442,0,7887,7899,3,886, - 443,0,7888,7899,3,848,424,0,7889,7899,3,850,425,0,7890,7899,3,854, - 427,0,7891,7899,3,890,445,0,7892,7899,3,894,447,0,7893,7899,3,898, - 449,0,7894,7899,3,914,457,0,7895,7899,3,916,458,0,7896,7899,3,918, - 459,0,7897,7899,3,920,460,0,7898,7874,1,0,0,0,7898,7877,1,0,0,0, - 7898,7878,1,0,0,0,7898,7879,1,0,0,0,7898,7880,1,0,0,0,7898,7881, - 1,0,0,0,7898,7882,1,0,0,0,7898,7883,1,0,0,0,7898,7884,1,0,0,0,7898, - 7885,1,0,0,0,7898,7886,1,0,0,0,7898,7887,1,0,0,0,7898,7888,1,0,0, - 0,7898,7889,1,0,0,0,7898,7890,1,0,0,0,7898,7891,1,0,0,0,7898,7892, - 1,0,0,0,7898,7893,1,0,0,0,7898,7894,1,0,0,0,7898,7895,1,0,0,0,7898, - 7896,1,0,0,0,7898,7897,1,0,0,0,7899,847,1,0,0,0,7900,7901,5,498, - 0,0,7901,7902,3,930,465,0,7902,7903,5,7,0,0,7903,849,1,0,0,0,7904, - 7905,5,433,0,0,7905,7912,3,928,464,0,7906,7908,5,2,0,0,7907,7909, - 3,730,365,0,7908,7907,1,0,0,0,7908,7909,1,0,0,0,7909,7910,1,0,0, - 0,7910,7911,5,3,0,0,7911,7913,5,7,0,0,7912,7906,1,0,0,0,7912,7913, - 1,0,0,0,7913,7924,1,0,0,0,7914,7915,5,57,0,0,7915,7916,3,928,464, - 0,7916,7918,5,2,0,0,7917,7919,3,730,365,0,7918,7917,1,0,0,0,7918, - 7919,1,0,0,0,7919,7920,1,0,0,0,7920,7921,5,3,0,0,7921,7922,5,7,0, - 0,7922,7924,1,0,0,0,7923,7904,1,0,0,0,7923,7914,1,0,0,0,7924,851, - 1,0,0,0,7925,7926,3,858,429,0,7926,7927,3,844,422,0,7927,7928,3, - 930,465,0,7928,7929,5,7,0,0,7929,853,1,0,0,0,7930,7932,5,499,0,0, - 7931,7933,7,114,0,0,7932,7931,1,0,0,0,7932,7933,1,0,0,0,7933,7934, - 1,0,0,0,7934,7935,5,500,0,0,7935,7940,3,856,428,0,7936,7937,5,6, - 0,0,7937,7939,3,856,428,0,7938,7936,1,0,0,0,7939,7942,1,0,0,0,7940, - 7938,1,0,0,0,7940,7941,1,0,0,0,7941,7943,1,0,0,0,7942,7940,1,0,0, - 0,7943,7944,5,7,0,0,7944,855,1,0,0,0,7945,7946,3,858,429,0,7946, - 7947,3,844,422,0,7947,7948,3,818,409,0,7948,857,1,0,0,0,7949,7952, - 3,316,158,0,7950,7952,5,28,0,0,7951,7949,1,0,0,0,7951,7950,1,0,0, - 0,7952,7959,1,0,0,0,7953,7954,5,4,0,0,7954,7955,3,674,337,0,7955, - 7956,5,5,0,0,7956,7958,1,0,0,0,7957,7953,1,0,0,0,7958,7961,1,0,0, - 0,7959,7957,1,0,0,0,7959,7960,1,0,0,0,7960,859,1,0,0,0,7961,7959, - 1,0,0,0,7962,7963,5,220,0,0,7963,7964,3,930,465,0,7964,7968,5,93, - 0,0,7965,7967,3,846,423,0,7966,7965,1,0,0,0,7967,7970,1,0,0,0,7968, - 7966,1,0,0,0,7968,7969,1,0,0,0,7969,7982,1,0,0,0,7970,7968,1,0,0, - 0,7971,7972,5,502,0,0,7972,7973,3,674,337,0,7973,7977,5,93,0,0,7974, - 7976,3,846,423,0,7975,7974,1,0,0,0,7976,7979,1,0,0,0,7977,7975,1, - 0,0,0,7977,7978,1,0,0,0,7978,7981,1,0,0,0,7979,7977,1,0,0,0,7980, - 7971,1,0,0,0,7981,7984,1,0,0,0,7982,7980,1,0,0,0,7982,7983,1,0,0, - 0,7983,7986,1,0,0,0,7984,7982,1,0,0,0,7985,7987,3,862,431,0,7986, - 7985,1,0,0,0,7986,7987,1,0,0,0,7987,7988,1,0,0,0,7988,7989,5,454, - 0,0,7989,7990,5,220,0,0,7990,7991,5,7,0,0,7991,861,1,0,0,0,7992, - 7996,5,58,0,0,7993,7995,3,846,423,0,7994,7993,1,0,0,0,7995,7998, - 1,0,0,0,7996,7994,1,0,0,0,7996,7997,1,0,0,0,7997,863,1,0,0,0,7998, - 7996,1,0,0,0,7999,8001,5,40,0,0,8000,8002,3,930,465,0,8001,8000, - 1,0,0,0,8001,8002,1,0,0,0,8002,8012,1,0,0,0,8003,8004,5,102,0,0, - 8004,8005,3,730,365,0,8005,8009,5,93,0,0,8006,8008,3,846,423,0,8007, - 8006,1,0,0,0,8008,8011,1,0,0,0,8009,8007,1,0,0,0,8009,8010,1,0,0, - 0,8010,8013,1,0,0,0,8011,8009,1,0,0,0,8012,8003,1,0,0,0,8013,8014, - 1,0,0,0,8014,8012,1,0,0,0,8014,8015,1,0,0,0,8015,8017,1,0,0,0,8016, - 8018,3,862,431,0,8017,8016,1,0,0,0,8017,8018,1,0,0,0,8018,8019,1, - 0,0,0,8019,8020,5,454,0,0,8020,8021,5,40,0,0,8021,8022,5,7,0,0,8022, - 865,1,0,0,0,8023,8025,3,838,419,0,8024,8023,1,0,0,0,8024,8025,1, - 0,0,0,8025,8030,1,0,0,0,8026,8027,5,503,0,0,8027,8031,3,674,337, - 0,8028,8029,5,62,0,0,8029,8031,3,868,434,0,8030,8026,1,0,0,0,8030, - 8028,1,0,0,0,8030,8031,1,0,0,0,8031,8032,1,0,0,0,8032,8033,3,882, - 441,0,8033,867,1,0,0,0,8034,8035,3,314,157,0,8035,8058,5,68,0,0, - 8036,8038,3,818,409,0,8037,8039,3,534,267,0,8038,8037,1,0,0,0,8038, - 8039,1,0,0,0,8039,8059,1,0,0,0,8040,8059,3,560,280,0,8041,8059,3, - 520,260,0,8042,8043,5,202,0,0,8043,8046,3,674,337,0,8044,8045,5, - 100,0,0,8045,8047,3,730,365,0,8046,8044,1,0,0,0,8046,8047,1,0,0, - 0,8047,8059,1,0,0,0,8048,8050,5,504,0,0,8049,8048,1,0,0,0,8049,8050, - 1,0,0,0,8050,8051,1,0,0,0,8051,8052,3,674,337,0,8052,8053,5,24,0, - 0,8053,8056,3,674,337,0,8054,8055,5,147,0,0,8055,8057,3,674,337, - 0,8056,8054,1,0,0,0,8056,8057,1,0,0,0,8057,8059,1,0,0,0,8058,8036, - 1,0,0,0,8058,8040,1,0,0,0,8058,8041,1,0,0,0,8058,8042,1,0,0,0,8058, - 8049,1,0,0,0,8059,869,1,0,0,0,8060,8062,3,838,419,0,8061,8060,1, - 0,0,0,8061,8062,1,0,0,0,8062,8063,1,0,0,0,8063,8064,5,505,0,0,8064, - 8067,3,314,157,0,8065,8066,5,506,0,0,8066,8068,5,571,0,0,8067,8065, - 1,0,0,0,8067,8068,1,0,0,0,8068,8069,1,0,0,0,8069,8070,5,68,0,0,8070, - 8071,5,35,0,0,8071,8072,3,674,337,0,8072,8073,3,882,441,0,8073,871, - 1,0,0,0,8074,8076,7,115,0,0,8075,8077,3,928,464,0,8076,8075,1,0, - 0,0,8076,8077,1,0,0,0,8077,8080,1,0,0,0,8078,8079,5,102,0,0,8079, - 8081,3,930,465,0,8080,8078,1,0,0,0,8080,8081,1,0,0,0,8081,8082,1, - 0,0,0,8082,8083,5,7,0,0,8083,873,1,0,0,0,8084,8099,5,508,0,0,8085, - 8086,5,268,0,0,8086,8100,3,930,465,0,8087,8094,5,509,0,0,8088,8089, - 5,202,0,0,8089,8090,3,674,337,0,8090,8091,5,100,0,0,8091,8092,3, - 730,365,0,8092,8095,1,0,0,0,8093,8095,3,560,280,0,8094,8088,1,0, - 0,0,8094,8093,1,0,0,0,8095,8100,1,0,0,0,8096,8098,3,930,465,0,8097, - 8096,1,0,0,0,8097,8098,1,0,0,0,8098,8100,1,0,0,0,8099,8085,1,0,0, - 0,8099,8087,1,0,0,0,8099,8097,1,0,0,0,8100,8101,1,0,0,0,8101,8102, - 5,7,0,0,8102,875,1,0,0,0,8103,8133,5,510,0,0,8104,8106,7,116,0,0, - 8105,8104,1,0,0,0,8105,8106,1,0,0,0,8106,8119,1,0,0,0,8107,8120, - 3,826,413,0,8108,8109,5,511,0,0,8109,8120,3,808,404,0,8110,8117, - 3,808,404,0,8111,8112,5,6,0,0,8112,8114,3,674,337,0,8113,8111,1, - 0,0,0,8114,8115,1,0,0,0,8115,8113,1,0,0,0,8115,8116,1,0,0,0,8116, - 8118,1,0,0,0,8117,8113,1,0,0,0,8117,8118,1,0,0,0,8118,8120,1,0,0, - 0,8119,8107,1,0,0,0,8119,8108,1,0,0,0,8119,8110,1,0,0,0,8119,8120, - 1,0,0,0,8120,8130,1,0,0,0,8121,8122,5,100,0,0,8122,8127,3,878,439, - 0,8123,8124,5,6,0,0,8124,8126,3,878,439,0,8125,8123,1,0,0,0,8126, - 8129,1,0,0,0,8127,8125,1,0,0,0,8127,8128,1,0,0,0,8128,8131,1,0,0, - 0,8129,8127,1,0,0,0,8130,8121,1,0,0,0,8130,8131,1,0,0,0,8131,8132, - 1,0,0,0,8132,8134,5,7,0,0,8133,8105,1,0,0,0,8133,8134,1,0,0,0,8134, - 877,1,0,0,0,8135,8136,3,826,413,0,8136,8137,5,10,0,0,8137,8138,3, - 674,337,0,8138,879,1,0,0,0,8139,8140,5,518,0,0,8140,8143,3,930,465, - 0,8141,8142,5,6,0,0,8142,8144,3,930,465,0,8143,8141,1,0,0,0,8143, - 8144,1,0,0,0,8144,8145,1,0,0,0,8145,8146,5,7,0,0,8146,881,1,0,0, - 0,8147,8151,5,519,0,0,8148,8150,3,846,423,0,8149,8148,1,0,0,0,8150, - 8153,1,0,0,0,8151,8149,1,0,0,0,8151,8152,1,0,0,0,8152,8154,1,0,0, - 0,8153,8151,1,0,0,0,8154,8155,5,454,0,0,8155,8157,5,519,0,0,8156, - 8158,3,928,464,0,8157,8156,1,0,0,0,8157,8158,1,0,0,0,8158,8159,1, - 0,0,0,8159,8160,5,7,0,0,8160,883,1,0,0,0,8161,8163,3,4,2,0,8162, - 8164,3,888,444,0,8163,8162,1,0,0,0,8163,8164,1,0,0,0,8164,8165,1, - 0,0,0,8165,8166,5,7,0,0,8166,885,1,0,0,0,8167,8168,5,202,0,0,8168, - 8184,3,674,337,0,8169,8171,3,888,444,0,8170,8169,1,0,0,0,8170,8171, - 1,0,0,0,8171,8174,1,0,0,0,8172,8173,5,100,0,0,8173,8175,3,730,365, - 0,8174,8172,1,0,0,0,8174,8175,1,0,0,0,8175,8185,1,0,0,0,8176,8177, - 5,100,0,0,8177,8179,3,730,365,0,8178,8176,1,0,0,0,8178,8179,1,0, - 0,0,8179,8181,1,0,0,0,8180,8182,3,888,444,0,8181,8180,1,0,0,0,8181, - 8182,1,0,0,0,8182,8185,1,0,0,0,8183,8185,1,0,0,0,8184,8170,1,0,0, - 0,8184,8178,1,0,0,0,8184,8183,1,0,0,0,8185,8186,1,0,0,0,8186,8187, - 5,7,0,0,8187,887,1,0,0,0,8188,8190,5,71,0,0,8189,8191,5,346,0,0, - 8190,8189,1,0,0,0,8190,8191,1,0,0,0,8191,8192,1,0,0,0,8192,8193, - 3,730,365,0,8193,889,1,0,0,0,8194,8226,5,520,0,0,8195,8200,3,922, - 461,0,8196,8198,5,269,0,0,8197,8196,1,0,0,0,8197,8198,1,0,0,0,8198, - 8199,1,0,0,0,8199,8201,5,324,0,0,8200,8197,1,0,0,0,8200,8201,1,0, - 0,0,8201,8202,1,0,0,0,8202,8210,5,62,0,0,8203,8211,3,560,280,0,8204, - 8205,5,202,0,0,8205,8208,3,930,465,0,8206,8207,5,100,0,0,8207,8209, - 3,730,365,0,8208,8206,1,0,0,0,8208,8209,1,0,0,0,8209,8211,1,0,0, - 0,8210,8203,1,0,0,0,8210,8204,1,0,0,0,8211,8227,1,0,0,0,8212,8224, - 3,818,409,0,8213,8214,5,2,0,0,8214,8219,3,892,446,0,8215,8216,5, - 6,0,0,8216,8218,3,892,446,0,8217,8215,1,0,0,0,8218,8221,1,0,0,0, - 8219,8217,1,0,0,0,8219,8220,1,0,0,0,8220,8222,1,0,0,0,8221,8219, - 1,0,0,0,8222,8223,5,3,0,0,8223,8225,1,0,0,0,8224,8213,1,0,0,0,8224, - 8225,1,0,0,0,8225,8227,1,0,0,0,8226,8195,1,0,0,0,8226,8212,1,0,0, - 0,8227,8228,1,0,0,0,8228,8229,5,7,0,0,8229,891,1,0,0,0,8230,8231, - 3,818,409,0,8231,8232,5,20,0,0,8232,8234,1,0,0,0,8233,8230,1,0,0, - 0,8233,8234,1,0,0,0,8234,8235,1,0,0,0,8235,8236,3,674,337,0,8236, - 893,1,0,0,0,8237,8239,5,61,0,0,8238,8240,3,896,448,0,8239,8238,1, - 0,0,0,8239,8240,1,0,0,0,8240,8242,1,0,0,0,8241,8243,3,332,166,0, - 8242,8241,1,0,0,0,8242,8243,1,0,0,0,8243,8244,1,0,0,0,8244,8245, - 3,922,461,0,8245,8246,5,71,0,0,8246,8247,3,730,365,0,8247,8248,5, - 7,0,0,8248,895,1,0,0,0,8249,8264,5,268,0,0,8250,8264,5,293,0,0,8251, - 8264,5,207,0,0,8252,8264,5,249,0,0,8253,8255,7,50,0,0,8254,8253, - 1,0,0,0,8254,8255,1,0,0,0,8255,8256,1,0,0,0,8256,8264,3,674,337, - 0,8257,8264,5,30,0,0,8258,8261,7,117,0,0,8259,8262,3,674,337,0,8260, - 8262,5,30,0,0,8261,8259,1,0,0,0,8261,8260,1,0,0,0,8261,8262,1,0, - 0,0,8262,8264,1,0,0,0,8263,8249,1,0,0,0,8263,8250,1,0,0,0,8263,8251, - 1,0,0,0,8263,8252,1,0,0,0,8263,8254,1,0,0,0,8263,8257,1,0,0,0,8263, - 8258,1,0,0,0,8264,897,1,0,0,0,8265,8267,5,265,0,0,8266,8268,3,896, - 448,0,8267,8266,1,0,0,0,8267,8268,1,0,0,0,8268,8269,1,0,0,0,8269, - 8270,3,922,461,0,8270,8271,5,7,0,0,8271,899,1,0,0,0,8272,8274,3, - 572,286,0,8273,8272,1,0,0,0,8273,8274,1,0,0,0,8274,8275,1,0,0,0, - 8275,8276,5,525,0,0,8276,8278,5,71,0,0,8277,8279,5,81,0,0,8278,8277, - 1,0,0,0,8278,8279,1,0,0,0,8279,8280,1,0,0,0,8280,8282,3,774,387, - 0,8281,8283,5,9,0,0,8282,8281,1,0,0,0,8282,8283,1,0,0,0,8283,8288, - 1,0,0,0,8284,8286,5,36,0,0,8285,8284,1,0,0,0,8285,8286,1,0,0,0,8286, - 8287,1,0,0,0,8287,8289,3,818,409,0,8288,8285,1,0,0,0,8288,8289,1, - 0,0,0,8289,8290,1,0,0,0,8290,8291,5,100,0,0,8291,8292,3,902,451, - 0,8292,8293,5,80,0,0,8293,8295,3,674,337,0,8294,8296,3,904,452,0, - 8295,8294,1,0,0,0,8296,8297,1,0,0,0,8297,8295,1,0,0,0,8297,8298, - 1,0,0,0,8298,901,1,0,0,0,8299,8301,5,81,0,0,8300,8299,1,0,0,0,8300, - 8301,1,0,0,0,8301,8302,1,0,0,0,8302,8304,3,774,387,0,8303,8305,5, - 9,0,0,8304,8303,1,0,0,0,8304,8305,1,0,0,0,8305,8311,1,0,0,0,8306, - 8309,3,564,282,0,8307,8309,3,608,304,0,8308,8306,1,0,0,0,8308,8307, - 1,0,0,0,8309,8311,1,0,0,0,8310,8300,1,0,0,0,8310,8308,1,0,0,0,8311, - 8316,1,0,0,0,8312,8314,5,36,0,0,8313,8312,1,0,0,0,8313,8314,1,0, - 0,0,8314,8315,1,0,0,0,8315,8317,3,818,409,0,8316,8313,1,0,0,0,8316, - 8317,1,0,0,0,8317,903,1,0,0,0,8318,8319,5,102,0,0,8319,8322,5,526, - 0,0,8320,8321,5,33,0,0,8321,8323,3,674,337,0,8322,8320,1,0,0,0,8322, - 8323,1,0,0,0,8323,8324,1,0,0,0,8324,8329,5,93,0,0,8325,8330,3,908, - 454,0,8326,8330,5,182,0,0,8327,8328,5,57,0,0,8328,8330,5,270,0,0, - 8329,8325,1,0,0,0,8329,8326,1,0,0,0,8329,8327,1,0,0,0,8330,8345, - 1,0,0,0,8331,8332,5,102,0,0,8332,8333,5,77,0,0,8333,8336,5,526,0, - 0,8334,8335,5,33,0,0,8335,8337,3,674,337,0,8336,8334,1,0,0,0,8336, - 8337,1,0,0,0,8337,8338,1,0,0,0,8338,8342,5,93,0,0,8339,8343,3,906, - 453,0,8340,8341,5,57,0,0,8341,8343,5,270,0,0,8342,8339,1,0,0,0,8342, - 8340,1,0,0,0,8343,8345,1,0,0,0,8344,8318,1,0,0,0,8344,8331,1,0,0, - 0,8345,905,1,0,0,0,8346,8348,5,241,0,0,8347,8349,3,144,72,0,8348, - 8347,1,0,0,0,8348,8349,1,0,0,0,8349,8353,1,0,0,0,8350,8351,5,463, - 0,0,8351,8352,7,76,0,0,8352,8354,5,450,0,0,8353,8350,1,0,0,0,8353, - 8354,1,0,0,0,8354,8355,1,0,0,0,8355,8356,3,910,455,0,8356,907,1, - 0,0,0,8357,8358,5,369,0,0,8358,8376,5,333,0,0,8359,8360,3,800,400, - 0,8360,8361,5,10,0,0,8361,8362,3,912,456,0,8362,8377,1,0,0,0,8363, - 8364,3,144,72,0,8364,8365,5,10,0,0,8365,8366,5,2,0,0,8366,8371,3, - 912,456,0,8367,8368,5,6,0,0,8368,8370,3,912,456,0,8369,8367,1,0, - 0,0,8370,8373,1,0,0,0,8371,8369,1,0,0,0,8371,8372,1,0,0,0,8372,8374, - 1,0,0,0,8373,8371,1,0,0,0,8374,8375,5,3,0,0,8375,8377,1,0,0,0,8376, - 8359,1,0,0,0,8376,8363,1,0,0,0,8377,8378,1,0,0,0,8378,8376,1,0,0, - 0,8378,8379,1,0,0,0,8379,909,1,0,0,0,8380,8381,5,422,0,0,8381,8382, - 5,2,0,0,8382,8387,3,912,456,0,8383,8384,5,6,0,0,8384,8386,3,912, - 456,0,8385,8383,1,0,0,0,8386,8389,1,0,0,0,8387,8385,1,0,0,0,8387, - 8388,1,0,0,0,8388,8390,1,0,0,0,8389,8387,1,0,0,0,8390,8391,5,3,0, - 0,8391,8395,1,0,0,0,8392,8393,5,53,0,0,8393,8395,5,422,0,0,8394, - 8380,1,0,0,0,8394,8392,1,0,0,0,8395,911,1,0,0,0,8396,8399,3,588, - 294,0,8397,8399,5,53,0,0,8398,8396,1,0,0,0,8398,8397,1,0,0,0,8399, - 913,1,0,0,0,8400,8401,5,157,0,0,8401,8402,3,922,461,0,8402,8403, - 5,7,0,0,8403,915,1,0,0,0,8404,8405,5,78,0,0,8405,8406,5,7,0,0,8406, - 917,1,0,0,0,8407,8413,7,67,0,0,8408,8410,5,33,0,0,8409,8411,5,269, - 0,0,8410,8409,1,0,0,0,8410,8411,1,0,0,0,8411,8412,1,0,0,0,8412,8414, - 5,153,0,0,8413,8408,1,0,0,0,8413,8414,1,0,0,0,8414,8415,1,0,0,0, - 8415,8416,5,7,0,0,8416,919,1,0,0,0,8417,8418,5,333,0,0,8418,8419, - 3,316,158,0,8419,8420,5,94,0,0,8420,8421,5,53,0,0,8421,8422,5,7, - 0,0,8422,8430,1,0,0,0,8423,8426,5,313,0,0,8424,8427,3,316,158,0, - 8425,8427,5,30,0,0,8426,8424,1,0,0,0,8426,8425,1,0,0,0,8427,8428, - 1,0,0,0,8428,8430,5,7,0,0,8429,8417,1,0,0,0,8429,8423,1,0,0,0,8430, - 921,1,0,0,0,8431,8434,3,818,409,0,8432,8434,5,28,0,0,8433,8431,1, - 0,0,0,8433,8432,1,0,0,0,8434,923,1,0,0,0,8435,8452,5,517,0,0,8436, - 8437,5,102,0,0,8437,8442,3,926,463,0,8438,8439,5,82,0,0,8439,8441, - 3,926,463,0,8440,8438,1,0,0,0,8441,8444,1,0,0,0,8442,8440,1,0,0, - 0,8442,8443,1,0,0,0,8443,8445,1,0,0,0,8444,8442,1,0,0,0,8445,8449, - 5,93,0,0,8446,8448,3,846,423,0,8447,8446,1,0,0,0,8448,8451,1,0,0, - 0,8449,8447,1,0,0,0,8449,8450,1,0,0,0,8450,8453,1,0,0,0,8451,8449, - 1,0,0,0,8452,8436,1,0,0,0,8453,8454,1,0,0,0,8454,8452,1,0,0,0,8454, - 8455,1,0,0,0,8455,925,1,0,0,0,8456,8460,3,928,464,0,8457,8458,5, - 511,0,0,8458,8460,3,808,404,0,8459,8456,1,0,0,0,8459,8457,1,0,0, - 0,8460,927,1,0,0,0,8461,8464,3,818,409,0,8462,8464,3,828,414,0,8463, - 8461,1,0,0,0,8463,8462,1,0,0,0,8464,929,1,0,0,0,8465,8467,3,756, - 378,0,8466,8465,1,0,0,0,8466,8467,1,0,0,0,8467,8469,1,0,0,0,8468, - 8470,3,580,290,0,8469,8468,1,0,0,0,8469,8470,1,0,0,0,8470,8472,1, - 0,0,0,8471,8473,3,610,305,0,8472,8471,1,0,0,0,8472,8473,1,0,0,0, - 8473,8475,1,0,0,0,8474,8476,3,638,319,0,8475,8474,1,0,0,0,8475,8476, - 1,0,0,0,8476,8478,1,0,0,0,8477,8479,3,600,300,0,8478,8477,1,0,0, - 0,8478,8479,1,0,0,0,8479,8482,1,0,0,0,8480,8481,5,67,0,0,8481,8483, - 3,674,337,0,8482,8480,1,0,0,0,8482,8483,1,0,0,0,8483,8485,1,0,0, - 0,8484,8486,3,702,351,0,8485,8484,1,0,0,0,8485,8486,1,0,0,0,8486, - 931,1,0,0,0,1186,935,942,1062,1064,1073,1078,1084,1119,1129,1135, - 1140,1147,1152,1159,1170,1178,1182,1194,1200,1206,1210,1215,1219, - 1232,1242,1244,1250,1255,1268,1271,1276,1281,1292,1296,1308,1312, - 1315,1319,1331,1349,1356,1364,1369,1376,1384,1390,1398,1406,1410, - 1424,1429,1434,1446,1452,1464,1469,1479,1485,1490,1498,1503,1510, - 1515,1520,1530,1535,1540,1547,1551,1565,1571,1577,1582,1589,1601, - 1609,1617,1633,1642,1651,1660,1664,1676,1684,1694,1714,1719,1722, - 1729,1732,1736,1740,1743,1748,1753,1757,1766,1772,1776,1785,1788, - 1794,1803,1815,1819,1823,1828,1831,1837,1839,1841,1845,1851,1855, - 1860,1865,1869,1872,1879,1892,1905,1929,1939,1946,1951,1955,1962, - 1967,1970,1972,1977,1981,1985,1989,1994,1997,2001,2004,2008,2016, - 2021,2024,2028,2034,2043,2047,2053,2055,2064,2069,2081,2086,2090, - 2094,2099,2103,2106,2109,2112,2115,2118,2123,2126,2129,2132,2135, - 2138,2144,2148,2151,2154,2157,2160,2162,2169,2177,2187,2192,2202, - 2205,2210,2215,2220,2223,2228,2237,2239,2243,2246,2250,2255,2260, - 2264,2267,2271,2274,2279,2282,2287,2290,2294,2297,2300,2305,2308, - 2316,2328,2332,2339,2344,2347,2350,2353,2358,2369,2375,2379,2382, - 2385,2390,2397,2400,2404,2412,2417,2420,2423,2430,2435,2444,2447, - 2450,2455,2458,2470,2480,2497,2501,2505,2507,2524,2526,2542,2553, - 2556,2559,2568,2577,2593,2596,2599,2607,2611,2618,2627,2631,2637, - 2641,2644,2647,2650,2653,2659,2663,2668,2672,2675,2678,2681,2686, - 2692,2696,2700,2704,2710,2712,2717,2723,2729,2733,2748,2753,2756, - 2758,2761,2765,2769,2772,2775,2783,2789,2791,2797,2802,2807,2811, - 2818,2820,2831,2870,2880,2882,2885,2889,2893,2903,2905,2911,2913, - 2922,2934,2948,2953,2956,2963,2968,2976,2978,2984,2989,2993,2998, - 3004,3011,3017,3019,3028,3034,3042,3048,3053,3058,3066,3081,3083, - 3087,3091,3094,3097,3106,3109,3112,3118,3124,3128,3140,3146,3149, - 3154,3158,3165,3175,3177,3201,3213,3218,3220,3224,3227,3230,3240, - 3243,3253,3258,3263,3266,3269,3277,3283,3290,3298,3301,3312,3316, - 3322,3329,3332,3341,3355,3358,3372,3383,3386,3398,3403,3416,3421, - 3434,3443,3446,3449,3456,3459,3471,3477,3479,3487,3495,3503,3515, - 3520,3531,3542,3550,3558,3565,3572,3574,3577,3582,3587,3606,3615, - 3618,3645,3654,3657,3661,3665,3669,3676,3680,3684,3688,3692,3697, - 3701,3706,3712,3717,3724,3728,3734,3738,3743,3751,3757,3762,3769, - 3774,3778,3783,3789,3796,3801,3808,3813,3820,3824,3832,3836,3838, - 3841,3846,3856,3871,3874,3882,3889,3894,3900,3904,3911,3916,3919, - 3922,3926,3935,3953,3956,3988,3993,3999,4019,4024,4030,4033,4037, - 4041,4047,4050,4054,4058,4063,4066,4069,4072,4085,4091,4099,4106, - 4111,4114,4121,4124,4132,4135,4140,4147,4150,4170,4182,4185,4191, - 4196,4205,4213,4218,4224,4231,4239,4242,4253,4255,4269,4275,4283, - 4285,4291,4295,4298,4301,4306,4311,4315,4318,4321,4324,4327,4335, - 4346,4349,4352,4357,4360,4364,4368,4374,4382,4385,4398,4403,4405, - 4410,4417,4424,4433,4441,4449,4456,4464,4471,4479,4483,4487,4489, - 4495,4500,4504,4511,4516,4521,4526,4528,4538,4548,4564,4582,4594, - 4601,4616,4621,4624,4629,4634,4639,4642,4645,4650,4657,4661,4666, - 4673,4677,4683,4692,4701,4713,4715,4728,4734,4738,4740,4747,4760, - 4767,4769,4785,4789,4793,4798,4803,4808,4813,4816,4828,4881,4890, - 4894,4903,4907,4916,4920,4925,4928,4932,4937,4939,4948,4953,4964, - 4968,4982,4990,5028,5030,5049,5052,5079,5083,5087,5091,5095,5098, - 5113,5120,5134,5147,5172,5191,5206,5222,5229,5240,5243,5262,5265, - 5278,5282,5302,5314,5318,5340,5344,5354,5358,5364,5368,5372,5376, - 5383,5388,5399,5403,5406,5411,5417,5428,5432,5435,5439,5443,5446, - 5456,5459,5463,5468,5474,5477,5482,5485,5492,5494,5500,5504,5513, - 5518,5520,5530,5533,5538,5546,5549,5554,5556,5558,5564,5581,5587, - 5600,5606,5610,5615,5645,5660,5665,5669,5682,5686,5688,5697,5703, - 5705,5709,5712,5715,5718,5721,5723,5726,5730,5738,5743,5746,5752, - 5756,5760,5765,5767,5771,5775,5782,5788,5792,5794,5796,5809,5817, - 5825,5836,5845,5850,5854,5858,5865,5868,5870,5878,5882,5885,5892, - 5899,5904,5911,5914,5916,5919,5925,5930,5934,5941,5951,5958,5961, - 5964,5968,5979,5982,5985,5988,5991,5998,6001,6004,6011,6023,6030, - 6032,6037,6042,6044,6050,6057,6062,6067,6071,6075,6079,6081,6085, - 6089,6092,6095,6097,6107,6109,6114,6118,6123,6127,6134,6139,6143, - 6146,6152,6155,6174,6181,6185,6188,6192,6196,6199,6202,6207,6216, - 6223,6227,6231,6235,6238,6240,6245,6249,6254,6260,6267,6272,6277, - 6286,6293,6301,6312,6317,6321,6324,6328,6333,6337,6342,6350,6361, - 6366,6370,6373,6376,6378,6381,6384,6387,6391,6395,6399,6401,6410, - 6415,6421,6425,6427,6434,6439,6445,6447,6451,6458,6463,6466,6472, - 6476,6482,6491,6497,6499,6504,6507,6516,6523,6525,6532,6537,6540, - 6550,6561,6566,6570,6578,6588,6595,6601,6612,6618,6628,6637,6641, - 6644,6646,6648,6652,6660,6663,6668,6673,6680,6682,6688,6692,6695, - 6700,6703,6705,6711,6720,6726,6729,6737,6740,6744,6750,6752,6755, - 6759,6764,6771,6778,6780,6786,6788,6793,6795,6799,6808,6812,6820, - 6822,6836,6839,6847,6856,6862,6867,6875,6877,6882,6886,6891,6896, - 6902,6918,6920,6929,6944,6949,6952,6958,6963,6976,6981,6985,6992, - 7011,7023,7028,7036,7038,7040,7049,7052,7057,7062,7065,7076,7084, - 7089,7091,7094,7098,7109,7130,7138,7151,7161,7167,7173,7176,7179, - 7205,7207,7228,7238,7251,7256,7260,7262,7274,7281,7287,7293,7297, - 7308,7318,7322,7327,7330,7333,7342,7353,7355,7359,7364,7373,7378, - 7386,7396,7404,7408,7411,7418,7426,7430,7437,7446,7455,7458,7470, - 7479,7486,7495,7505,7510,7514,7516,7519,7524,7529,7537,7545,7548, - 7555,7563,7571,7579,7596,7603,7611,7628,7634,7640,7648,7654,7659, - 7667,7672,7675,7684,7691,7696,7700,7705,7711,7716,7724,7779,7786, - 7792,7794,7796,7798,7804,7808,7812,7823,7826,7830,7834,7838,7841, - 7844,7847,7856,7861,7865,7898,7908,7912,7918,7923,7932,7940,7951, - 7959,7968,7977,7982,7986,7996,8001,8009,8014,8017,8024,8030,8038, - 8046,8049,8056,8058,8061,8067,8076,8080,8094,8097,8099,8105,8115, - 8117,8119,8127,8130,8133,8143,8151,8157,8163,8170,8174,8178,8181, - 8184,8190,8197,8200,8208,8210,8219,8224,8226,8233,8239,8242,8254, - 8261,8263,8267,8273,8278,8282,8285,8288,8297,8300,8304,8308,8310, - 8313,8316,8322,8329,8336,8342,8344,8348,8353,8371,8376,8378,8387, - 8394,8398,8410,8413,8426,8429,8433,8442,8449,8454,8459,8463,8466, - 8469,8472,8475,8478,8482,8485 + 7437,1,0,0,0,7440,7448,3,800,400,0,7441,7448,3,674,337,0,7442,7445, + 3,820,410,0,7443,7444,7,107,0,0,7444,7446,3,674,337,0,7445,7443, + 1,0,0,0,7445,7446,1,0,0,0,7446,7448,1,0,0,0,7447,7440,1,0,0,0,7447, + 7441,1,0,0,0,7447,7442,1,0,0,0,7448,739,1,0,0,0,7449,7459,5,4,0, + 0,7450,7460,3,730,365,0,7451,7456,3,740,370,0,7452,7453,5,6,0,0, + 7453,7455,3,740,370,0,7454,7452,1,0,0,0,7455,7458,1,0,0,0,7456,7454, + 1,0,0,0,7456,7457,1,0,0,0,7457,7460,1,0,0,0,7458,7456,1,0,0,0,7459, + 7450,1,0,0,0,7459,7451,1,0,0,0,7459,7460,1,0,0,0,7460,7461,1,0,0, + 0,7461,7462,5,5,0,0,7462,741,1,0,0,0,7463,7472,3,826,413,0,7464, + 7472,5,384,0,0,7465,7472,5,264,0,0,7466,7472,5,176,0,0,7467,7472, + 5,218,0,0,7468,7472,5,261,0,0,7469,7472,5,326,0,0,7470,7472,3,808, + 404,0,7471,7463,1,0,0,0,7471,7464,1,0,0,0,7471,7465,1,0,0,0,7471, + 7466,1,0,0,0,7471,7467,1,0,0,0,7471,7468,1,0,0,0,7471,7469,1,0,0, + 0,7471,7470,1,0,0,0,7472,743,1,0,0,0,7473,7474,7,108,0,0,7474,745, + 1,0,0,0,7475,7476,3,674,337,0,7476,7477,5,64,0,0,7477,7480,3,674, + 337,0,7478,7479,5,62,0,0,7479,7481,3,674,337,0,7480,7478,1,0,0,0, + 7480,7481,1,0,0,0,7481,7497,1,0,0,0,7482,7483,3,674,337,0,7483,7484, + 5,62,0,0,7484,7487,3,674,337,0,7485,7486,5,64,0,0,7486,7488,3,674, + 337,0,7487,7485,1,0,0,0,7487,7488,1,0,0,0,7488,7497,1,0,0,0,7489, + 7490,3,674,337,0,7490,7491,5,127,0,0,7491,7492,3,674,337,0,7492, + 7493,5,197,0,0,7493,7494,3,674,337,0,7494,7497,1,0,0,0,7495,7497, + 3,730,365,0,7496,7475,1,0,0,0,7496,7482,1,0,0,0,7496,7489,1,0,0, + 0,7496,7495,1,0,0,0,7497,747,1,0,0,0,7498,7499,5,102,0,0,7499,7500, + 3,674,337,0,7500,7501,5,93,0,0,7501,7502,3,674,337,0,7502,749,1, + 0,0,0,7503,7506,5,11,0,0,7504,7507,3,824,412,0,7505,7507,5,9,0,0, + 7506,7504,1,0,0,0,7506,7505,1,0,0,0,7507,7521,1,0,0,0,7508,7517, + 5,4,0,0,7509,7518,3,674,337,0,7510,7512,3,674,337,0,7511,7510,1, + 0,0,0,7511,7512,1,0,0,0,7512,7513,1,0,0,0,7513,7515,5,8,0,0,7514, + 7516,3,674,337,0,7515,7514,1,0,0,0,7515,7516,1,0,0,0,7516,7518,1, + 0,0,0,7517,7509,1,0,0,0,7517,7511,1,0,0,0,7518,7519,1,0,0,0,7519, + 7521,5,5,0,0,7520,7503,1,0,0,0,7520,7508,1,0,0,0,7521,751,1,0,0, + 0,7522,7524,3,750,375,0,7523,7522,1,0,0,0,7524,7525,1,0,0,0,7525, + 7523,1,0,0,0,7525,7526,1,0,0,0,7526,753,1,0,0,0,7527,7529,3,750, + 375,0,7528,7527,1,0,0,0,7529,7532,1,0,0,0,7530,7528,1,0,0,0,7530, + 7531,1,0,0,0,7531,755,1,0,0,0,7532,7530,1,0,0,0,7533,7538,3,758, + 379,0,7534,7535,5,6,0,0,7535,7537,3,758,379,0,7536,7534,1,0,0,0, + 7537,7540,1,0,0,0,7538,7536,1,0,0,0,7538,7539,1,0,0,0,7539,757,1, + 0,0,0,7540,7538,1,0,0,0,7541,7546,3,734,367,0,7542,7543,5,36,0,0, + 7543,7547,3,824,412,0,7544,7547,3,826,413,0,7545,7547,1,0,0,0,7546, + 7542,1,0,0,0,7546,7544,1,0,0,0,7546,7545,1,0,0,0,7547,7550,1,0,0, + 0,7548,7550,5,9,0,0,7549,7541,1,0,0,0,7549,7548,1,0,0,0,7550,759, + 1,0,0,0,7551,7556,3,780,390,0,7552,7553,5,6,0,0,7553,7555,3,780, + 390,0,7554,7552,1,0,0,0,7555,7558,1,0,0,0,7556,7554,1,0,0,0,7556, + 7557,1,0,0,0,7557,761,1,0,0,0,7558,7556,1,0,0,0,7559,7564,3,774, + 387,0,7560,7561,5,6,0,0,7561,7563,3,774,387,0,7562,7560,1,0,0,0, + 7563,7566,1,0,0,0,7564,7562,1,0,0,0,7564,7565,1,0,0,0,7565,763,1, + 0,0,0,7566,7564,1,0,0,0,7567,7572,3,790,395,0,7568,7569,5,6,0,0, + 7569,7571,3,790,395,0,7570,7568,1,0,0,0,7571,7574,1,0,0,0,7572,7570, + 1,0,0,0,7572,7573,1,0,0,0,7573,765,1,0,0,0,7574,7572,1,0,0,0,7575, + 7580,3,788,394,0,7576,7577,5,6,0,0,7577,7579,3,788,394,0,7578,7576, + 1,0,0,0,7579,7582,1,0,0,0,7580,7578,1,0,0,0,7580,7581,1,0,0,0,7581, + 767,1,0,0,0,7582,7580,1,0,0,0,7583,7584,3,780,390,0,7584,769,1,0, + 0,0,7585,7586,3,780,390,0,7586,771,1,0,0,0,7587,7588,3,780,390,0, + 7588,773,1,0,0,0,7589,7590,3,780,390,0,7590,775,1,0,0,0,7591,7592, + 3,780,390,0,7592,777,1,0,0,0,7593,7594,3,316,158,0,7594,779,1,0, + 0,0,7595,7597,3,818,409,0,7596,7598,3,752,376,0,7597,7596,1,0,0, + 0,7597,7598,1,0,0,0,7598,781,1,0,0,0,7599,7604,3,770,385,0,7600, + 7601,5,6,0,0,7601,7603,3,770,385,0,7602,7600,1,0,0,0,7603,7606,1, + 0,0,0,7604,7602,1,0,0,0,7604,7605,1,0,0,0,7605,783,1,0,0,0,7606, + 7604,1,0,0,0,7607,7612,3,818,409,0,7608,7609,5,6,0,0,7609,7611,3, + 818,409,0,7610,7608,1,0,0,0,7611,7614,1,0,0,0,7612,7610,1,0,0,0, + 7612,7613,1,0,0,0,7613,785,1,0,0,0,7614,7612,1,0,0,0,7615,7616,3, + 316,158,0,7616,787,1,0,0,0,7617,7618,3,316,158,0,7618,789,1,0,0, + 0,7619,7620,3,316,158,0,7620,791,1,0,0,0,7621,7622,3,818,409,0,7622, + 793,1,0,0,0,7623,7624,3,818,409,0,7624,795,1,0,0,0,7625,7630,3,820, + 410,0,7626,7627,3,818,409,0,7627,7628,3,752,376,0,7628,7630,1,0, + 0,0,7629,7625,1,0,0,0,7629,7626,1,0,0,0,7630,797,1,0,0,0,7631,7636, + 3,820,410,0,7632,7633,3,818,409,0,7633,7634,3,752,376,0,7634,7636, + 1,0,0,0,7635,7631,1,0,0,0,7635,7632,1,0,0,0,7636,799,1,0,0,0,7637, + 7638,3,818,409,0,7638,7639,3,754,377,0,7639,7642,1,0,0,0,7640,7642, + 4,400,10,0,7641,7637,1,0,0,0,7641,7640,1,0,0,0,7642,801,1,0,0,0, + 7643,7644,3,818,409,0,7644,803,1,0,0,0,7645,7650,3,820,410,0,7646, + 7647,3,818,409,0,7647,7648,3,752,376,0,7648,7650,1,0,0,0,7649,7645, + 1,0,0,0,7649,7646,1,0,0,0,7650,805,1,0,0,0,7651,7656,3,820,410,0, + 7652,7653,3,818,409,0,7653,7654,3,752,376,0,7654,7656,1,0,0,0,7655, + 7651,1,0,0,0,7655,7652,1,0,0,0,7656,807,1,0,0,0,7657,7660,3,810, + 405,0,7658,7659,5,487,0,0,7659,7661,3,810,405,0,7660,7658,1,0,0, + 0,7660,7661,1,0,0,0,7661,809,1,0,0,0,7662,7674,5,558,0,0,7663,7674, + 5,560,0,0,7664,7668,5,562,0,0,7665,7667,5,588,0,0,7666,7665,1,0, + 0,0,7667,7670,1,0,0,0,7668,7666,1,0,0,0,7668,7669,1,0,0,0,7669,7671, + 1,0,0,0,7670,7668,1,0,0,0,7671,7674,5,589,0,0,7672,7674,5,584,0, + 0,7673,7662,1,0,0,0,7673,7663,1,0,0,0,7673,7664,1,0,0,0,7673,7672, + 1,0,0,0,7674,811,1,0,0,0,7675,7677,7,29,0,0,7676,7675,1,0,0,0,7676, + 7677,1,0,0,0,7677,7678,1,0,0,0,7678,7679,5,571,0,0,7679,813,1,0, + 0,0,7680,7686,3,822,411,0,7681,7686,5,52,0,0,7682,7686,5,49,0,0, + 7683,7686,5,89,0,0,7684,7686,5,524,0,0,7685,7680,1,0,0,0,7685,7681, + 1,0,0,0,7685,7682,1,0,0,0,7685,7683,1,0,0,0,7685,7684,1,0,0,0,7686, + 815,1,0,0,0,7687,7692,3,814,407,0,7688,7689,5,6,0,0,7689,7691,3, + 814,407,0,7690,7688,1,0,0,0,7691,7694,1,0,0,0,7692,7690,1,0,0,0, + 7692,7693,1,0,0,0,7693,817,1,0,0,0,7694,7692,1,0,0,0,7695,7698,3, + 826,413,0,7696,7698,3,830,415,0,7697,7695,1,0,0,0,7697,7696,1,0, + 0,0,7698,819,1,0,0,0,7699,7702,3,826,413,0,7700,7702,3,832,416,0, + 7701,7699,1,0,0,0,7701,7700,1,0,0,0,7702,821,1,0,0,0,7703,7707,3, + 826,413,0,7704,7707,3,830,415,0,7705,7707,3,832,416,0,7706,7703, + 1,0,0,0,7706,7704,1,0,0,0,7706,7705,1,0,0,0,7707,823,1,0,0,0,7708, + 7713,3,826,413,0,7709,7713,3,830,415,0,7710,7713,3,832,416,0,7711, + 7713,3,834,417,0,7712,7708,1,0,0,0,7712,7709,1,0,0,0,7712,7710,1, + 0,0,0,7712,7711,1,0,0,0,7713,825,1,0,0,0,7714,7717,5,549,0,0,7715, + 7716,5,487,0,0,7716,7718,3,810,405,0,7717,7715,1,0,0,0,7717,7718, + 1,0,0,0,7718,7726,1,0,0,0,7719,7726,3,808,404,0,7720,7726,5,550, + 0,0,7721,7726,5,554,0,0,7722,7726,5,574,0,0,7723,7726,5,575,0,0, + 7724,7726,3,828,414,0,7725,7714,1,0,0,0,7725,7719,1,0,0,0,7725,7720, + 1,0,0,0,7725,7721,1,0,0,0,7725,7722,1,0,0,0,7725,7723,1,0,0,0,7725, + 7724,1,0,0,0,7726,827,1,0,0,0,7727,7728,7,109,0,0,7728,829,1,0,0, + 0,7729,7781,5,387,0,0,7730,7781,5,388,0,0,7731,7781,3,662,331,0, + 7732,7781,5,390,0,0,7733,7781,5,391,0,0,7734,7781,3,664,332,0,7735, + 7781,5,393,0,0,7736,7781,5,394,0,0,7737,7781,5,395,0,0,7738,7781, + 5,396,0,0,7739,7781,5,397,0,0,7740,7781,5,398,0,0,7741,7781,5,399, + 0,0,7742,7781,5,470,0,0,7743,7781,5,400,0,0,7744,7781,5,401,0,0, + 7745,7781,5,402,0,0,7746,7781,5,403,0,0,7747,7781,5,404,0,0,7748, + 7781,5,405,0,0,7749,7781,5,406,0,0,7750,7781,5,407,0,0,7751,7781, + 5,489,0,0,7752,7781,5,408,0,0,7753,7781,3,658,329,0,7754,7781,5, + 453,0,0,7755,7781,5,410,0,0,7756,7781,5,411,0,0,7757,7781,5,412, + 0,0,7758,7781,5,413,0,0,7759,7781,5,414,0,0,7760,7781,5,415,0,0, + 7761,7781,5,416,0,0,7762,7781,5,417,0,0,7763,7781,5,418,0,0,7764, + 7781,5,419,0,0,7765,7781,5,420,0,0,7766,7781,5,421,0,0,7767,7781, + 5,422,0,0,7768,7781,5,423,0,0,7769,7781,5,424,0,0,7770,7781,5,425, + 0,0,7771,7781,5,426,0,0,7772,7781,5,427,0,0,7773,7781,5,428,0,0, + 7774,7781,5,476,0,0,7775,7781,5,429,0,0,7776,7781,5,430,0,0,7777, + 7781,5,431,0,0,7778,7781,5,432,0,0,7779,7781,5,474,0,0,7780,7729, + 1,0,0,0,7780,7730,1,0,0,0,7780,7731,1,0,0,0,7780,7732,1,0,0,0,7780, + 7733,1,0,0,0,7780,7734,1,0,0,0,7780,7735,1,0,0,0,7780,7736,1,0,0, + 0,7780,7737,1,0,0,0,7780,7738,1,0,0,0,7780,7739,1,0,0,0,7780,7740, + 1,0,0,0,7780,7741,1,0,0,0,7780,7742,1,0,0,0,7780,7743,1,0,0,0,7780, + 7744,1,0,0,0,7780,7745,1,0,0,0,7780,7746,1,0,0,0,7780,7747,1,0,0, + 0,7780,7748,1,0,0,0,7780,7749,1,0,0,0,7780,7750,1,0,0,0,7780,7751, + 1,0,0,0,7780,7752,1,0,0,0,7780,7753,1,0,0,0,7780,7754,1,0,0,0,7780, + 7755,1,0,0,0,7780,7756,1,0,0,0,7780,7757,1,0,0,0,7780,7758,1,0,0, + 0,7780,7759,1,0,0,0,7780,7760,1,0,0,0,7780,7761,1,0,0,0,7780,7762, + 1,0,0,0,7780,7763,1,0,0,0,7780,7764,1,0,0,0,7780,7765,1,0,0,0,7780, + 7766,1,0,0,0,7780,7767,1,0,0,0,7780,7768,1,0,0,0,7780,7769,1,0,0, + 0,7780,7770,1,0,0,0,7780,7771,1,0,0,0,7780,7772,1,0,0,0,7780,7773, + 1,0,0,0,7780,7774,1,0,0,0,7780,7775,1,0,0,0,7780,7776,1,0,0,0,7780, + 7777,1,0,0,0,7780,7778,1,0,0,0,7780,7779,1,0,0,0,7781,831,1,0,0, + 0,7782,7783,7,110,0,0,7783,833,1,0,0,0,7784,7785,7,111,0,0,7785, + 835,1,0,0,0,7786,7788,3,838,419,0,7787,7786,1,0,0,0,7787,7788,1, + 0,0,0,7788,7799,1,0,0,0,7789,7797,5,178,0,0,7790,7794,3,840,420, + 0,7791,7794,5,178,0,0,7792,7794,3,838,419,0,7793,7790,1,0,0,0,7793, + 7791,1,0,0,0,7793,7792,1,0,0,0,7794,7795,1,0,0,0,7795,7793,1,0,0, + 0,7795,7796,1,0,0,0,7796,7798,1,0,0,0,7797,7793,1,0,0,0,7797,7798, + 1,0,0,0,7798,7800,1,0,0,0,7799,7789,1,0,0,0,7799,7800,1,0,0,0,7800, + 7801,1,0,0,0,7801,7805,5,146,0,0,7802,7804,3,846,423,0,7803,7802, + 1,0,0,0,7804,7807,1,0,0,0,7805,7803,1,0,0,0,7805,7806,1,0,0,0,7806, + 7809,1,0,0,0,7807,7805,1,0,0,0,7808,7810,3,924,462,0,7809,7808,1, + 0,0,0,7809,7810,1,0,0,0,7810,7811,1,0,0,0,7811,7813,5,454,0,0,7812, + 7814,3,928,464,0,7813,7812,1,0,0,0,7813,7814,1,0,0,0,7814,837,1, + 0,0,0,7815,7816,5,18,0,0,7816,7817,3,928,464,0,7817,7818,5,19,0, + 0,7818,839,1,0,0,0,7819,7866,3,928,464,0,7820,7821,5,496,0,0,7821, + 7824,5,62,0,0,7822,7825,5,28,0,0,7823,7825,3,818,409,0,7824,7822, + 1,0,0,0,7824,7823,1,0,0,0,7825,7867,1,0,0,0,7826,7828,5,497,0,0, + 7827,7826,1,0,0,0,7827,7828,1,0,0,0,7828,7829,1,0,0,0,7829,7831, + 3,652,326,0,7830,7832,3,98,49,0,7831,7830,1,0,0,0,7831,7832,1,0, + 0,0,7832,7835,1,0,0,0,7833,7834,5,77,0,0,7834,7836,5,78,0,0,7835, + 7833,1,0,0,0,7835,7836,1,0,0,0,7836,7842,1,0,0,0,7837,7840,3,844, + 422,0,7838,7840,5,53,0,0,7839,7837,1,0,0,0,7839,7838,1,0,0,0,7840, + 7841,1,0,0,0,7841,7843,3,930,465,0,7842,7839,1,0,0,0,7842,7843,1, + 0,0,0,7843,7867,1,0,0,0,7844,7846,5,269,0,0,7845,7844,1,0,0,0,7845, + 7846,1,0,0,0,7846,7847,1,0,0,0,7847,7849,5,324,0,0,7848,7845,1,0, + 0,0,7848,7849,1,0,0,0,7849,7850,1,0,0,0,7850,7862,5,172,0,0,7851, + 7852,5,2,0,0,7852,7857,3,842,421,0,7853,7854,5,6,0,0,7854,7856,3, + 842,421,0,7855,7853,1,0,0,0,7856,7859,1,0,0,0,7857,7855,1,0,0,0, + 7857,7858,1,0,0,0,7858,7860,1,0,0,0,7859,7857,1,0,0,0,7860,7861, + 5,3,0,0,7861,7863,1,0,0,0,7862,7851,1,0,0,0,7862,7863,1,0,0,0,7863, + 7864,1,0,0,0,7864,7865,7,112,0,0,7865,7867,3,560,280,0,7866,7820, + 1,0,0,0,7866,7827,1,0,0,0,7866,7848,1,0,0,0,7867,7868,1,0,0,0,7868, + 7869,5,7,0,0,7869,841,1,0,0,0,7870,7871,3,928,464,0,7871,7872,3, + 652,326,0,7872,843,1,0,0,0,7873,7874,7,113,0,0,7874,845,1,0,0,0, + 7875,7876,3,836,418,0,7876,7877,5,7,0,0,7877,7900,1,0,0,0,7878,7900, + 3,874,437,0,7879,7900,3,876,438,0,7880,7900,3,852,426,0,7881,7900, + 3,860,430,0,7882,7900,3,864,432,0,7883,7900,3,866,433,0,7884,7900, + 3,870,435,0,7885,7900,3,872,436,0,7886,7900,3,880,440,0,7887,7900, + 3,884,442,0,7888,7900,3,886,443,0,7889,7900,3,848,424,0,7890,7900, + 3,850,425,0,7891,7900,3,854,427,0,7892,7900,3,890,445,0,7893,7900, + 3,894,447,0,7894,7900,3,898,449,0,7895,7900,3,914,457,0,7896,7900, + 3,916,458,0,7897,7900,3,918,459,0,7898,7900,3,920,460,0,7899,7875, + 1,0,0,0,7899,7878,1,0,0,0,7899,7879,1,0,0,0,7899,7880,1,0,0,0,7899, + 7881,1,0,0,0,7899,7882,1,0,0,0,7899,7883,1,0,0,0,7899,7884,1,0,0, + 0,7899,7885,1,0,0,0,7899,7886,1,0,0,0,7899,7887,1,0,0,0,7899,7888, + 1,0,0,0,7899,7889,1,0,0,0,7899,7890,1,0,0,0,7899,7891,1,0,0,0,7899, + 7892,1,0,0,0,7899,7893,1,0,0,0,7899,7894,1,0,0,0,7899,7895,1,0,0, + 0,7899,7896,1,0,0,0,7899,7897,1,0,0,0,7899,7898,1,0,0,0,7900,847, + 1,0,0,0,7901,7902,5,498,0,0,7902,7903,3,930,465,0,7903,7904,5,7, + 0,0,7904,849,1,0,0,0,7905,7906,5,433,0,0,7906,7913,3,928,464,0,7907, + 7909,5,2,0,0,7908,7910,3,730,365,0,7909,7908,1,0,0,0,7909,7910,1, + 0,0,0,7910,7911,1,0,0,0,7911,7912,5,3,0,0,7912,7914,5,7,0,0,7913, + 7907,1,0,0,0,7913,7914,1,0,0,0,7914,7925,1,0,0,0,7915,7916,5,57, + 0,0,7916,7917,3,928,464,0,7917,7919,5,2,0,0,7918,7920,3,730,365, + 0,7919,7918,1,0,0,0,7919,7920,1,0,0,0,7920,7921,1,0,0,0,7921,7922, + 5,3,0,0,7922,7923,5,7,0,0,7923,7925,1,0,0,0,7924,7905,1,0,0,0,7924, + 7915,1,0,0,0,7925,851,1,0,0,0,7926,7927,3,858,429,0,7927,7928,3, + 844,422,0,7928,7929,3,930,465,0,7929,7930,5,7,0,0,7930,853,1,0,0, + 0,7931,7933,5,499,0,0,7932,7934,7,114,0,0,7933,7932,1,0,0,0,7933, + 7934,1,0,0,0,7934,7935,1,0,0,0,7935,7936,5,500,0,0,7936,7941,3,856, + 428,0,7937,7938,5,6,0,0,7938,7940,3,856,428,0,7939,7937,1,0,0,0, + 7940,7943,1,0,0,0,7941,7939,1,0,0,0,7941,7942,1,0,0,0,7942,7944, + 1,0,0,0,7943,7941,1,0,0,0,7944,7945,5,7,0,0,7945,855,1,0,0,0,7946, + 7947,3,858,429,0,7947,7948,3,844,422,0,7948,7949,3,818,409,0,7949, + 857,1,0,0,0,7950,7953,3,316,158,0,7951,7953,5,28,0,0,7952,7950,1, + 0,0,0,7952,7951,1,0,0,0,7953,7960,1,0,0,0,7954,7955,5,4,0,0,7955, + 7956,3,674,337,0,7956,7957,5,5,0,0,7957,7959,1,0,0,0,7958,7954,1, + 0,0,0,7959,7962,1,0,0,0,7960,7958,1,0,0,0,7960,7961,1,0,0,0,7961, + 859,1,0,0,0,7962,7960,1,0,0,0,7963,7964,5,220,0,0,7964,7965,3,930, + 465,0,7965,7969,5,93,0,0,7966,7968,3,846,423,0,7967,7966,1,0,0,0, + 7968,7971,1,0,0,0,7969,7967,1,0,0,0,7969,7970,1,0,0,0,7970,7983, + 1,0,0,0,7971,7969,1,0,0,0,7972,7973,5,502,0,0,7973,7974,3,674,337, + 0,7974,7978,5,93,0,0,7975,7977,3,846,423,0,7976,7975,1,0,0,0,7977, + 7980,1,0,0,0,7978,7976,1,0,0,0,7978,7979,1,0,0,0,7979,7982,1,0,0, + 0,7980,7978,1,0,0,0,7981,7972,1,0,0,0,7982,7985,1,0,0,0,7983,7981, + 1,0,0,0,7983,7984,1,0,0,0,7984,7987,1,0,0,0,7985,7983,1,0,0,0,7986, + 7988,3,862,431,0,7987,7986,1,0,0,0,7987,7988,1,0,0,0,7988,7989,1, + 0,0,0,7989,7990,5,454,0,0,7990,7991,5,220,0,0,7991,7992,5,7,0,0, + 7992,861,1,0,0,0,7993,7997,5,58,0,0,7994,7996,3,846,423,0,7995,7994, + 1,0,0,0,7996,7999,1,0,0,0,7997,7995,1,0,0,0,7997,7998,1,0,0,0,7998, + 863,1,0,0,0,7999,7997,1,0,0,0,8000,8002,5,40,0,0,8001,8003,3,930, + 465,0,8002,8001,1,0,0,0,8002,8003,1,0,0,0,8003,8013,1,0,0,0,8004, + 8005,5,102,0,0,8005,8006,3,730,365,0,8006,8010,5,93,0,0,8007,8009, + 3,846,423,0,8008,8007,1,0,0,0,8009,8012,1,0,0,0,8010,8008,1,0,0, + 0,8010,8011,1,0,0,0,8011,8014,1,0,0,0,8012,8010,1,0,0,0,8013,8004, + 1,0,0,0,8014,8015,1,0,0,0,8015,8013,1,0,0,0,8015,8016,1,0,0,0,8016, + 8018,1,0,0,0,8017,8019,3,862,431,0,8018,8017,1,0,0,0,8018,8019,1, + 0,0,0,8019,8020,1,0,0,0,8020,8021,5,454,0,0,8021,8022,5,40,0,0,8022, + 8023,5,7,0,0,8023,865,1,0,0,0,8024,8026,3,838,419,0,8025,8024,1, + 0,0,0,8025,8026,1,0,0,0,8026,8031,1,0,0,0,8027,8028,5,503,0,0,8028, + 8032,3,674,337,0,8029,8030,5,62,0,0,8030,8032,3,868,434,0,8031,8027, + 1,0,0,0,8031,8029,1,0,0,0,8031,8032,1,0,0,0,8032,8033,1,0,0,0,8033, + 8034,3,882,441,0,8034,867,1,0,0,0,8035,8036,3,314,157,0,8036,8059, + 5,68,0,0,8037,8039,3,818,409,0,8038,8040,3,534,267,0,8039,8038,1, + 0,0,0,8039,8040,1,0,0,0,8040,8060,1,0,0,0,8041,8060,3,560,280,0, + 8042,8060,3,520,260,0,8043,8044,5,202,0,0,8044,8047,3,674,337,0, + 8045,8046,5,100,0,0,8046,8048,3,730,365,0,8047,8045,1,0,0,0,8047, + 8048,1,0,0,0,8048,8060,1,0,0,0,8049,8051,5,504,0,0,8050,8049,1,0, + 0,0,8050,8051,1,0,0,0,8051,8052,1,0,0,0,8052,8053,3,674,337,0,8053, + 8054,5,24,0,0,8054,8057,3,674,337,0,8055,8056,5,147,0,0,8056,8058, + 3,674,337,0,8057,8055,1,0,0,0,8057,8058,1,0,0,0,8058,8060,1,0,0, + 0,8059,8037,1,0,0,0,8059,8041,1,0,0,0,8059,8042,1,0,0,0,8059,8043, + 1,0,0,0,8059,8050,1,0,0,0,8060,869,1,0,0,0,8061,8063,3,838,419,0, + 8062,8061,1,0,0,0,8062,8063,1,0,0,0,8063,8064,1,0,0,0,8064,8065, + 5,505,0,0,8065,8068,3,314,157,0,8066,8067,5,506,0,0,8067,8069,5, + 571,0,0,8068,8066,1,0,0,0,8068,8069,1,0,0,0,8069,8070,1,0,0,0,8070, + 8071,5,68,0,0,8071,8072,5,35,0,0,8072,8073,3,674,337,0,8073,8074, + 3,882,441,0,8074,871,1,0,0,0,8075,8077,7,115,0,0,8076,8078,3,928, + 464,0,8077,8076,1,0,0,0,8077,8078,1,0,0,0,8078,8081,1,0,0,0,8079, + 8080,5,102,0,0,8080,8082,3,930,465,0,8081,8079,1,0,0,0,8081,8082, + 1,0,0,0,8082,8083,1,0,0,0,8083,8084,5,7,0,0,8084,873,1,0,0,0,8085, + 8100,5,508,0,0,8086,8087,5,268,0,0,8087,8101,3,930,465,0,8088,8095, + 5,509,0,0,8089,8090,5,202,0,0,8090,8091,3,674,337,0,8091,8092,5, + 100,0,0,8092,8093,3,730,365,0,8093,8096,1,0,0,0,8094,8096,3,560, + 280,0,8095,8089,1,0,0,0,8095,8094,1,0,0,0,8096,8101,1,0,0,0,8097, + 8099,3,930,465,0,8098,8097,1,0,0,0,8098,8099,1,0,0,0,8099,8101,1, + 0,0,0,8100,8086,1,0,0,0,8100,8088,1,0,0,0,8100,8098,1,0,0,0,8101, + 8102,1,0,0,0,8102,8103,5,7,0,0,8103,875,1,0,0,0,8104,8134,5,510, + 0,0,8105,8107,7,116,0,0,8106,8105,1,0,0,0,8106,8107,1,0,0,0,8107, + 8120,1,0,0,0,8108,8121,3,826,413,0,8109,8110,5,511,0,0,8110,8121, + 3,808,404,0,8111,8118,3,808,404,0,8112,8113,5,6,0,0,8113,8115,3, + 674,337,0,8114,8112,1,0,0,0,8115,8116,1,0,0,0,8116,8114,1,0,0,0, + 8116,8117,1,0,0,0,8117,8119,1,0,0,0,8118,8114,1,0,0,0,8118,8119, + 1,0,0,0,8119,8121,1,0,0,0,8120,8108,1,0,0,0,8120,8109,1,0,0,0,8120, + 8111,1,0,0,0,8120,8121,1,0,0,0,8121,8131,1,0,0,0,8122,8123,5,100, + 0,0,8123,8128,3,878,439,0,8124,8125,5,6,0,0,8125,8127,3,878,439, + 0,8126,8124,1,0,0,0,8127,8130,1,0,0,0,8128,8126,1,0,0,0,8128,8129, + 1,0,0,0,8129,8132,1,0,0,0,8130,8128,1,0,0,0,8131,8122,1,0,0,0,8131, + 8132,1,0,0,0,8132,8133,1,0,0,0,8133,8135,5,7,0,0,8134,8106,1,0,0, + 0,8134,8135,1,0,0,0,8135,877,1,0,0,0,8136,8137,3,826,413,0,8137, + 8138,5,10,0,0,8138,8139,3,674,337,0,8139,879,1,0,0,0,8140,8141,5, + 518,0,0,8141,8144,3,930,465,0,8142,8143,5,6,0,0,8143,8145,3,930, + 465,0,8144,8142,1,0,0,0,8144,8145,1,0,0,0,8145,8146,1,0,0,0,8146, + 8147,5,7,0,0,8147,881,1,0,0,0,8148,8152,5,519,0,0,8149,8151,3,846, + 423,0,8150,8149,1,0,0,0,8151,8154,1,0,0,0,8152,8150,1,0,0,0,8152, + 8153,1,0,0,0,8153,8155,1,0,0,0,8154,8152,1,0,0,0,8155,8156,5,454, + 0,0,8156,8158,5,519,0,0,8157,8159,3,928,464,0,8158,8157,1,0,0,0, + 8158,8159,1,0,0,0,8159,8160,1,0,0,0,8160,8161,5,7,0,0,8161,883,1, + 0,0,0,8162,8164,3,4,2,0,8163,8165,3,888,444,0,8164,8163,1,0,0,0, + 8164,8165,1,0,0,0,8165,8166,1,0,0,0,8166,8167,5,7,0,0,8167,885,1, + 0,0,0,8168,8169,5,202,0,0,8169,8185,3,674,337,0,8170,8172,3,888, + 444,0,8171,8170,1,0,0,0,8171,8172,1,0,0,0,8172,8175,1,0,0,0,8173, + 8174,5,100,0,0,8174,8176,3,730,365,0,8175,8173,1,0,0,0,8175,8176, + 1,0,0,0,8176,8186,1,0,0,0,8177,8178,5,100,0,0,8178,8180,3,730,365, + 0,8179,8177,1,0,0,0,8179,8180,1,0,0,0,8180,8182,1,0,0,0,8181,8183, + 3,888,444,0,8182,8181,1,0,0,0,8182,8183,1,0,0,0,8183,8186,1,0,0, + 0,8184,8186,1,0,0,0,8185,8171,1,0,0,0,8185,8179,1,0,0,0,8185,8184, + 1,0,0,0,8186,8187,1,0,0,0,8187,8188,5,7,0,0,8188,887,1,0,0,0,8189, + 8191,5,71,0,0,8190,8192,5,346,0,0,8191,8190,1,0,0,0,8191,8192,1, + 0,0,0,8192,8193,1,0,0,0,8193,8194,3,730,365,0,8194,889,1,0,0,0,8195, + 8227,5,520,0,0,8196,8201,3,922,461,0,8197,8199,5,269,0,0,8198,8197, + 1,0,0,0,8198,8199,1,0,0,0,8199,8200,1,0,0,0,8200,8202,5,324,0,0, + 8201,8198,1,0,0,0,8201,8202,1,0,0,0,8202,8203,1,0,0,0,8203,8211, + 5,62,0,0,8204,8212,3,560,280,0,8205,8206,5,202,0,0,8206,8209,3,930, + 465,0,8207,8208,5,100,0,0,8208,8210,3,730,365,0,8209,8207,1,0,0, + 0,8209,8210,1,0,0,0,8210,8212,1,0,0,0,8211,8204,1,0,0,0,8211,8205, + 1,0,0,0,8212,8228,1,0,0,0,8213,8225,3,818,409,0,8214,8215,5,2,0, + 0,8215,8220,3,892,446,0,8216,8217,5,6,0,0,8217,8219,3,892,446,0, + 8218,8216,1,0,0,0,8219,8222,1,0,0,0,8220,8218,1,0,0,0,8220,8221, + 1,0,0,0,8221,8223,1,0,0,0,8222,8220,1,0,0,0,8223,8224,5,3,0,0,8224, + 8226,1,0,0,0,8225,8214,1,0,0,0,8225,8226,1,0,0,0,8226,8228,1,0,0, + 0,8227,8196,1,0,0,0,8227,8213,1,0,0,0,8228,8229,1,0,0,0,8229,8230, + 5,7,0,0,8230,891,1,0,0,0,8231,8232,3,818,409,0,8232,8233,5,20,0, + 0,8233,8235,1,0,0,0,8234,8231,1,0,0,0,8234,8235,1,0,0,0,8235,8236, + 1,0,0,0,8236,8237,3,674,337,0,8237,893,1,0,0,0,8238,8240,5,61,0, + 0,8239,8241,3,896,448,0,8240,8239,1,0,0,0,8240,8241,1,0,0,0,8241, + 8243,1,0,0,0,8242,8244,3,332,166,0,8243,8242,1,0,0,0,8243,8244,1, + 0,0,0,8244,8245,1,0,0,0,8245,8246,3,922,461,0,8246,8247,5,71,0,0, + 8247,8248,3,730,365,0,8248,8249,5,7,0,0,8249,895,1,0,0,0,8250,8265, + 5,268,0,0,8251,8265,5,293,0,0,8252,8265,5,207,0,0,8253,8265,5,249, + 0,0,8254,8256,7,50,0,0,8255,8254,1,0,0,0,8255,8256,1,0,0,0,8256, + 8257,1,0,0,0,8257,8265,3,674,337,0,8258,8265,5,30,0,0,8259,8262, + 7,117,0,0,8260,8263,3,674,337,0,8261,8263,5,30,0,0,8262,8260,1,0, + 0,0,8262,8261,1,0,0,0,8262,8263,1,0,0,0,8263,8265,1,0,0,0,8264,8250, + 1,0,0,0,8264,8251,1,0,0,0,8264,8252,1,0,0,0,8264,8253,1,0,0,0,8264, + 8255,1,0,0,0,8264,8258,1,0,0,0,8264,8259,1,0,0,0,8265,897,1,0,0, + 0,8266,8268,5,265,0,0,8267,8269,3,896,448,0,8268,8267,1,0,0,0,8268, + 8269,1,0,0,0,8269,8270,1,0,0,0,8270,8271,3,922,461,0,8271,8272,5, + 7,0,0,8272,899,1,0,0,0,8273,8275,3,572,286,0,8274,8273,1,0,0,0,8274, + 8275,1,0,0,0,8275,8276,1,0,0,0,8276,8277,5,525,0,0,8277,8279,5,71, + 0,0,8278,8280,5,81,0,0,8279,8278,1,0,0,0,8279,8280,1,0,0,0,8280, + 8281,1,0,0,0,8281,8283,3,774,387,0,8282,8284,5,9,0,0,8283,8282,1, + 0,0,0,8283,8284,1,0,0,0,8284,8289,1,0,0,0,8285,8287,5,36,0,0,8286, + 8285,1,0,0,0,8286,8287,1,0,0,0,8287,8288,1,0,0,0,8288,8290,3,818, + 409,0,8289,8286,1,0,0,0,8289,8290,1,0,0,0,8290,8291,1,0,0,0,8291, + 8292,5,100,0,0,8292,8293,3,902,451,0,8293,8294,5,80,0,0,8294,8296, + 3,674,337,0,8295,8297,3,904,452,0,8296,8295,1,0,0,0,8297,8298,1, + 0,0,0,8298,8296,1,0,0,0,8298,8299,1,0,0,0,8299,901,1,0,0,0,8300, + 8302,5,81,0,0,8301,8300,1,0,0,0,8301,8302,1,0,0,0,8302,8303,1,0, + 0,0,8303,8305,3,774,387,0,8304,8306,5,9,0,0,8305,8304,1,0,0,0,8305, + 8306,1,0,0,0,8306,8312,1,0,0,0,8307,8310,3,564,282,0,8308,8310,3, + 608,304,0,8309,8307,1,0,0,0,8309,8308,1,0,0,0,8310,8312,1,0,0,0, + 8311,8301,1,0,0,0,8311,8309,1,0,0,0,8312,8317,1,0,0,0,8313,8315, + 5,36,0,0,8314,8313,1,0,0,0,8314,8315,1,0,0,0,8315,8316,1,0,0,0,8316, + 8318,3,818,409,0,8317,8314,1,0,0,0,8317,8318,1,0,0,0,8318,903,1, + 0,0,0,8319,8320,5,102,0,0,8320,8323,5,526,0,0,8321,8322,5,33,0,0, + 8322,8324,3,674,337,0,8323,8321,1,0,0,0,8323,8324,1,0,0,0,8324,8325, + 1,0,0,0,8325,8330,5,93,0,0,8326,8331,3,908,454,0,8327,8331,5,182, + 0,0,8328,8329,5,57,0,0,8329,8331,5,270,0,0,8330,8326,1,0,0,0,8330, + 8327,1,0,0,0,8330,8328,1,0,0,0,8331,8346,1,0,0,0,8332,8333,5,102, + 0,0,8333,8334,5,77,0,0,8334,8337,5,526,0,0,8335,8336,5,33,0,0,8336, + 8338,3,674,337,0,8337,8335,1,0,0,0,8337,8338,1,0,0,0,8338,8339,1, + 0,0,0,8339,8343,5,93,0,0,8340,8344,3,906,453,0,8341,8342,5,57,0, + 0,8342,8344,5,270,0,0,8343,8340,1,0,0,0,8343,8341,1,0,0,0,8344,8346, + 1,0,0,0,8345,8319,1,0,0,0,8345,8332,1,0,0,0,8346,905,1,0,0,0,8347, + 8349,5,241,0,0,8348,8350,3,144,72,0,8349,8348,1,0,0,0,8349,8350, + 1,0,0,0,8350,8354,1,0,0,0,8351,8352,5,463,0,0,8352,8353,7,76,0,0, + 8353,8355,5,450,0,0,8354,8351,1,0,0,0,8354,8355,1,0,0,0,8355,8356, + 1,0,0,0,8356,8357,3,910,455,0,8357,907,1,0,0,0,8358,8359,5,369,0, + 0,8359,8377,5,333,0,0,8360,8361,3,800,400,0,8361,8362,5,10,0,0,8362, + 8363,3,912,456,0,8363,8378,1,0,0,0,8364,8365,3,144,72,0,8365,8366, + 5,10,0,0,8366,8367,5,2,0,0,8367,8372,3,912,456,0,8368,8369,5,6,0, + 0,8369,8371,3,912,456,0,8370,8368,1,0,0,0,8371,8374,1,0,0,0,8372, + 8370,1,0,0,0,8372,8373,1,0,0,0,8373,8375,1,0,0,0,8374,8372,1,0,0, + 0,8375,8376,5,3,0,0,8376,8378,1,0,0,0,8377,8360,1,0,0,0,8377,8364, + 1,0,0,0,8378,8379,1,0,0,0,8379,8377,1,0,0,0,8379,8380,1,0,0,0,8380, + 909,1,0,0,0,8381,8382,5,422,0,0,8382,8383,5,2,0,0,8383,8388,3,912, + 456,0,8384,8385,5,6,0,0,8385,8387,3,912,456,0,8386,8384,1,0,0,0, + 8387,8390,1,0,0,0,8388,8386,1,0,0,0,8388,8389,1,0,0,0,8389,8391, + 1,0,0,0,8390,8388,1,0,0,0,8391,8392,5,3,0,0,8392,8396,1,0,0,0,8393, + 8394,5,53,0,0,8394,8396,5,422,0,0,8395,8381,1,0,0,0,8395,8393,1, + 0,0,0,8396,911,1,0,0,0,8397,8400,3,588,294,0,8398,8400,5,53,0,0, + 8399,8397,1,0,0,0,8399,8398,1,0,0,0,8400,913,1,0,0,0,8401,8402,5, + 157,0,0,8402,8403,3,922,461,0,8403,8404,5,7,0,0,8404,915,1,0,0,0, + 8405,8406,5,78,0,0,8406,8407,5,7,0,0,8407,917,1,0,0,0,8408,8414, + 7,67,0,0,8409,8411,5,33,0,0,8410,8412,5,269,0,0,8411,8410,1,0,0, + 0,8411,8412,1,0,0,0,8412,8413,1,0,0,0,8413,8415,5,153,0,0,8414,8409, + 1,0,0,0,8414,8415,1,0,0,0,8415,8416,1,0,0,0,8416,8417,5,7,0,0,8417, + 919,1,0,0,0,8418,8419,5,333,0,0,8419,8420,3,316,158,0,8420,8421, + 5,94,0,0,8421,8422,5,53,0,0,8422,8423,5,7,0,0,8423,8431,1,0,0,0, + 8424,8427,5,313,0,0,8425,8428,3,316,158,0,8426,8428,5,30,0,0,8427, + 8425,1,0,0,0,8427,8426,1,0,0,0,8428,8429,1,0,0,0,8429,8431,5,7,0, + 0,8430,8418,1,0,0,0,8430,8424,1,0,0,0,8431,921,1,0,0,0,8432,8435, + 3,818,409,0,8433,8435,5,28,0,0,8434,8432,1,0,0,0,8434,8433,1,0,0, + 0,8435,923,1,0,0,0,8436,8453,5,517,0,0,8437,8438,5,102,0,0,8438, + 8443,3,926,463,0,8439,8440,5,82,0,0,8440,8442,3,926,463,0,8441,8439, + 1,0,0,0,8442,8445,1,0,0,0,8443,8441,1,0,0,0,8443,8444,1,0,0,0,8444, + 8446,1,0,0,0,8445,8443,1,0,0,0,8446,8450,5,93,0,0,8447,8449,3,846, + 423,0,8448,8447,1,0,0,0,8449,8452,1,0,0,0,8450,8448,1,0,0,0,8450, + 8451,1,0,0,0,8451,8454,1,0,0,0,8452,8450,1,0,0,0,8453,8437,1,0,0, + 0,8454,8455,1,0,0,0,8455,8453,1,0,0,0,8455,8456,1,0,0,0,8456,925, + 1,0,0,0,8457,8461,3,928,464,0,8458,8459,5,511,0,0,8459,8461,3,808, + 404,0,8460,8457,1,0,0,0,8460,8458,1,0,0,0,8461,927,1,0,0,0,8462, + 8465,3,818,409,0,8463,8465,3,828,414,0,8464,8462,1,0,0,0,8464,8463, + 1,0,0,0,8465,929,1,0,0,0,8466,8468,3,756,378,0,8467,8466,1,0,0,0, + 8467,8468,1,0,0,0,8468,8470,1,0,0,0,8469,8471,3,580,290,0,8470,8469, + 1,0,0,0,8470,8471,1,0,0,0,8471,8473,1,0,0,0,8472,8474,3,610,305, + 0,8473,8472,1,0,0,0,8473,8474,1,0,0,0,8474,8476,1,0,0,0,8475,8477, + 3,638,319,0,8476,8475,1,0,0,0,8476,8477,1,0,0,0,8477,8479,1,0,0, + 0,8478,8480,3,600,300,0,8479,8478,1,0,0,0,8479,8480,1,0,0,0,8480, + 8483,1,0,0,0,8481,8482,5,67,0,0,8482,8484,3,674,337,0,8483,8481, + 1,0,0,0,8483,8484,1,0,0,0,8484,8486,1,0,0,0,8485,8487,3,702,351, + 0,8486,8485,1,0,0,0,8486,8487,1,0,0,0,8487,931,1,0,0,0,1187,935, + 942,1062,1064,1073,1078,1084,1119,1129,1135,1140,1147,1152,1159, + 1170,1178,1182,1194,1200,1206,1210,1215,1219,1232,1242,1244,1250, + 1255,1268,1271,1276,1281,1292,1296,1308,1312,1315,1319,1331,1349, + 1356,1364,1369,1376,1384,1390,1398,1406,1410,1424,1429,1434,1446, + 1452,1464,1469,1479,1485,1490,1498,1503,1510,1515,1520,1530,1535, + 1540,1547,1551,1565,1571,1577,1582,1589,1601,1609,1617,1633,1642, + 1651,1660,1664,1676,1684,1694,1714,1719,1722,1729,1732,1736,1740, + 1743,1748,1753,1757,1766,1772,1776,1785,1788,1794,1803,1815,1819, + 1823,1828,1831,1837,1839,1841,1845,1851,1855,1860,1865,1869,1872, + 1879,1892,1905,1929,1939,1946,1951,1955,1962,1967,1970,1972,1977, + 1981,1985,1989,1994,1997,2001,2004,2008,2016,2021,2024,2028,2034, + 2043,2047,2053,2055,2064,2069,2081,2086,2090,2094,2099,2103,2106, + 2109,2112,2115,2118,2123,2126,2129,2132,2135,2138,2144,2148,2151, + 2154,2157,2160,2162,2169,2177,2187,2192,2202,2205,2210,2215,2220, + 2223,2228,2237,2239,2243,2246,2250,2255,2260,2264,2267,2271,2274, + 2279,2282,2287,2290,2294,2297,2300,2305,2308,2316,2328,2332,2339, + 2344,2347,2350,2353,2358,2369,2375,2379,2382,2385,2390,2397,2400, + 2404,2412,2417,2420,2423,2430,2435,2444,2447,2450,2455,2458,2470, + 2480,2497,2501,2505,2507,2524,2526,2542,2553,2556,2559,2568,2577, + 2593,2596,2599,2607,2611,2618,2627,2631,2637,2641,2644,2647,2650, + 2653,2659,2663,2668,2672,2675,2678,2681,2686,2692,2696,2700,2704, + 2710,2712,2717,2723,2729,2733,2748,2753,2756,2758,2761,2765,2769, + 2772,2775,2783,2789,2791,2797,2802,2807,2811,2818,2820,2831,2870, + 2880,2882,2885,2889,2893,2903,2905,2911,2913,2922,2934,2948,2953, + 2956,2963,2968,2976,2978,2984,2989,2993,2998,3004,3011,3017,3019, + 3028,3034,3042,3048,3053,3058,3066,3081,3083,3087,3091,3094,3097, + 3106,3109,3112,3118,3124,3128,3140,3146,3149,3154,3158,3165,3175, + 3177,3201,3213,3218,3220,3224,3227,3230,3240,3243,3253,3258,3263, + 3266,3269,3277,3283,3290,3298,3301,3312,3316,3322,3329,3332,3341, + 3355,3358,3372,3383,3386,3398,3403,3416,3421,3434,3443,3446,3449, + 3456,3459,3471,3477,3479,3487,3495,3503,3515,3520,3531,3542,3550, + 3558,3565,3572,3574,3577,3582,3587,3606,3615,3618,3645,3654,3657, + 3661,3665,3669,3676,3680,3684,3688,3692,3697,3701,3706,3712,3717, + 3724,3728,3734,3738,3743,3751,3757,3762,3769,3774,3778,3783,3789, + 3796,3801,3808,3813,3820,3824,3832,3836,3838,3841,3846,3856,3871, + 3874,3882,3889,3894,3900,3904,3911,3916,3919,3922,3926,3935,3953, + 3956,3988,3993,3999,4019,4024,4030,4033,4037,4041,4047,4050,4054, + 4058,4063,4066,4069,4072,4085,4091,4099,4106,4111,4114,4121,4124, + 4132,4135,4140,4147,4150,4170,4182,4185,4191,4196,4205,4213,4218, + 4224,4231,4239,4242,4253,4255,4269,4275,4283,4285,4291,4295,4298, + 4301,4306,4311,4315,4318,4321,4324,4327,4335,4346,4349,4352,4357, + 4360,4364,4368,4374,4382,4385,4398,4403,4405,4410,4417,4424,4433, + 4441,4449,4456,4464,4471,4479,4483,4487,4489,4495,4500,4504,4511, + 4516,4521,4526,4528,4538,4548,4564,4582,4594,4601,4616,4621,4624, + 4629,4634,4639,4642,4645,4650,4657,4661,4666,4673,4677,4683,4692, + 4701,4713,4715,4728,4734,4738,4740,4747,4760,4767,4769,4785,4789, + 4793,4798,4803,4808,4813,4816,4828,4881,4890,4894,4903,4907,4916, + 4920,4925,4928,4932,4937,4939,4948,4953,4964,4968,4982,4990,5028, + 5030,5049,5052,5079,5083,5087,5091,5095,5098,5113,5120,5134,5147, + 5172,5191,5206,5222,5229,5240,5243,5262,5265,5278,5282,5302,5314, + 5318,5340,5344,5354,5358,5364,5368,5372,5376,5383,5388,5399,5403, + 5406,5411,5417,5428,5432,5435,5439,5443,5446,5456,5459,5463,5468, + 5474,5477,5482,5485,5492,5494,5500,5504,5513,5518,5520,5530,5533, + 5538,5546,5549,5554,5556,5558,5564,5581,5587,5600,5606,5610,5615, + 5645,5660,5665,5669,5682,5686,5688,5697,5703,5705,5709,5712,5715, + 5718,5721,5723,5726,5730,5738,5743,5746,5752,5756,5760,5765,5767, + 5771,5775,5782,5788,5792,5794,5796,5809,5817,5825,5836,5845,5850, + 5854,5858,5865,5868,5870,5878,5882,5885,5892,5899,5904,5911,5914, + 5916,5919,5925,5930,5934,5941,5951,5958,5961,5964,5968,5979,5982, + 5985,5988,5991,5998,6001,6004,6011,6023,6030,6032,6037,6042,6044, + 6050,6057,6062,6067,6071,6075,6079,6081,6085,6089,6092,6095,6097, + 6107,6109,6114,6118,6123,6127,6134,6139,6143,6146,6152,6155,6174, + 6181,6185,6188,6192,6196,6199,6202,6207,6216,6223,6227,6231,6235, + 6238,6240,6245,6249,6254,6260,6267,6272,6277,6286,6293,6301,6312, + 6317,6321,6324,6328,6333,6337,6342,6350,6361,6366,6370,6373,6376, + 6378,6381,6384,6387,6391,6395,6399,6401,6410,6415,6421,6425,6427, + 6434,6439,6445,6447,6451,6458,6463,6466,6472,6476,6482,6491,6497, + 6499,6504,6507,6516,6523,6525,6532,6537,6540,6550,6561,6566,6570, + 6578,6588,6595,6601,6612,6618,6628,6637,6641,6644,6646,6648,6652, + 6660,6663,6668,6673,6680,6682,6688,6692,6695,6700,6703,6705,6711, + 6720,6726,6729,6737,6740,6744,6750,6752,6755,6759,6764,6771,6778, + 6780,6786,6788,6793,6795,6799,6808,6812,6820,6822,6836,6839,6847, + 6856,6862,6867,6875,6877,6882,6886,6891,6896,6902,6918,6920,6929, + 6944,6949,6952,6958,6963,6976,6981,6985,6992,7011,7023,7028,7036, + 7038,7040,7049,7052,7057,7062,7065,7076,7084,7089,7091,7094,7098, + 7109,7130,7138,7151,7161,7167,7173,7176,7179,7205,7207,7228,7238, + 7251,7256,7260,7262,7274,7281,7287,7293,7297,7308,7318,7322,7327, + 7330,7333,7342,7353,7355,7359,7364,7373,7378,7386,7396,7404,7408, + 7411,7418,7426,7430,7437,7445,7447,7456,7459,7471,7480,7487,7496, + 7506,7511,7515,7517,7520,7525,7530,7538,7546,7549,7556,7564,7572, + 7580,7597,7604,7612,7629,7635,7641,7649,7655,7660,7668,7673,7676, + 7685,7692,7697,7701,7706,7712,7717,7725,7780,7787,7793,7795,7797, + 7799,7805,7809,7813,7824,7827,7831,7835,7839,7842,7845,7848,7857, + 7862,7866,7899,7909,7913,7919,7924,7933,7941,7952,7960,7969,7978, + 7983,7987,7997,8002,8010,8015,8018,8025,8031,8039,8047,8050,8057, + 8059,8062,8068,8077,8081,8095,8098,8100,8106,8116,8118,8120,8128, + 8131,8134,8144,8152,8158,8164,8171,8175,8179,8182,8185,8191,8198, + 8201,8209,8211,8220,8225,8227,8234,8240,8243,8255,8262,8264,8268, + 8274,8279,8283,8286,8289,8298,8301,8305,8309,8311,8314,8317,8323, + 8330,8337,8343,8345,8349,8354,8372,8377,8379,8388,8395,8399,8411, + 8414,8427,8430,8434,8443,8450,8455,8460,8464,8467,8470,8473,8476, + 8479,8483,8486 ]; private static __ATN: antlr.ATN; @@ -62306,6 +62315,7 @@ export class TypedtableelementContext extends antlr.ParserRuleContext { export class Column_defContext extends antlr.ParserRuleContext { + public _colType?: TypenameContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -76486,6 +76496,7 @@ export class Table_refContext extends antlr.ParserRuleContext { export class Alias_clauseContext extends antlr.ParserRuleContext { + public _alias?: ColidContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -76528,6 +76539,7 @@ export class Alias_clauseContext extends antlr.ParserRuleContext { export class Func_alias_clauseContext extends antlr.ParserRuleContext { + public _alias?: ColidContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } diff --git a/src/lib/spark/SparkSqlParser.interp b/src/lib/spark/SparkSqlParser.interp index 71336af6d..9fea3175c 100644 --- a/src/lib/spark/SparkSqlParser.interp +++ b/src/lib/spark/SparkSqlParser.interp @@ -794,23 +794,15 @@ rule names: program singleStatement statement -timezone -configKey -configValue unsupportedHiveNativeCommands -createTableHeader -replaceTableHeader bucketSpec skewSpec -locationSpec -commentSpec query insertInto partitionSpecLocation partitionSpec partitionVal namespace -namespaces describeFuncName describeColName ctes @@ -829,7 +821,6 @@ nestedConstantList createFileFormat fileFormat storageHandler -resource dmlStatementNoWith namespaceName namespaceNameCreate @@ -842,11 +833,9 @@ columnNameSeq columnNameCreate identifierReference queryOrganization -multiInsertQueryBody queryTerm queryPrimary sortItem -fromStatement fromStatementBody querySpecification transformClause @@ -855,9 +844,7 @@ setClause matchedClause notMatchedClause notMatchedBySourceClause -matchedAction notMatchedAction -notMatchedBySourceAction assignmentList assignment whereClause @@ -865,33 +852,24 @@ havingClause hint hintStatement fromClause -functionKind temporalClause aggregationClause groupByClause groupingAnalytics -groupingElement groupingSet pivotClause pivotColumn pivotValue unpivotClause -unpivotNullClause -unpivotOperator unpivotSingleValueColumnClause unpivotMultiValueColumnClause unpivotColumnSet -unpivotValueColumn -unpivotNameColumn unpivotColumnAndAlias -unpivotColumn -unpivotAlias ifNotExists ifExists lateralView setQuantifier relation -relationExtension joinRelation joinType joinCriteria @@ -904,13 +882,11 @@ orderedIdentifier identifierCommentList identifierComment relationPrimary -inlineTable functionTableSubqueryArgument tableArgumentPartitioning functionTableNamedArgumentExpression functionTableReferenceArgument functionTableArgument -functionTable tableAlias rowFormat multipartIdentifierList @@ -956,20 +932,15 @@ qualifiedColTypeWithPositionForAdd qualifiedColTypeWithPositionSeqForReplace qualifiedColTypeWithPositionForReplace colDefinitionDescriptorWithPosition -defaultExpression variableDefaultExpression colTypeList -colType +columnType createOrReplaceTableColTypeList createOrReplaceTableColType colDefinitionOption -generationExpression -complexColTypeList complexColType whenClause windowClause -zorderClause -namedWindow windowSpec windowFrame frameBound @@ -982,16 +953,13 @@ errorCapturingIdentifierExtra identifier strictIdentifier quotedIdentifier -backQuotedIdentifier number alterColumnAction stringLit -comment -version ansiNonReserved strictNonReserved nonReserved atn: -[4, 1, 393, 3971, 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, 1, 0, 5, 0, 402, 8, 0, 10, 0, 12, 0, 405, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 411, 8, 1, 1, 2, 1, 2, 3, 2, 415, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 420, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 427, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 432, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 440, 8, 2, 10, 2, 12, 2, 443, 9, 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, 461, 8, 2, 1, 2, 1, 2, 3, 2, 465, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 471, 8, 2, 1, 2, 3, 2, 474, 8, 2, 1, 2, 3, 2, 477, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 484, 8, 2, 1, 2, 3, 2, 487, 8, 2, 1, 2, 1, 2, 3, 2, 491, 8, 2, 1, 2, 3, 2, 494, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 499, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 511, 8, 2, 10, 2, 12, 2, 514, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 521, 8, 2, 1, 2, 3, 2, 524, 8, 2, 1, 2, 1, 2, 3, 2, 528, 8, 2, 1, 2, 3, 2, 531, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 537, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 548, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 554, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 559, 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, 3, 2, 592, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 602, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 613, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 624, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 635, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 640, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 649, 8, 2, 1, 2, 1, 2, 3, 2, 653, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 659, 8, 2, 1, 2, 1, 2, 3, 2, 663, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 668, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 674, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 686, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 694, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 700, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 711, 8, 2, 1, 2, 1, 2, 3, 2, 715, 8, 2, 1, 2, 4, 2, 718, 8, 2, 11, 2, 12, 2, 719, 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, 735, 8, 2, 1, 2, 1, 2, 3, 2, 739, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 744, 8, 2, 10, 2, 12, 2, 747, 9, 2, 1, 2, 3, 2, 750, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 756, 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, 3, 2, 785, 8, 2, 1, 2, 1, 2, 3, 2, 789, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 794, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 801, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 807, 8, 2, 1, 2, 3, 2, 810, 8, 2, 1, 2, 3, 2, 813, 8, 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, 5, 2, 829, 8, 2, 10, 2, 12, 2, 832, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 840, 8, 2, 1, 2, 3, 2, 843, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 852, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 857, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 863, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 870, 8, 2, 1, 2, 3, 2, 873, 8, 2, 1, 2, 1, 2, 3, 2, 877, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 886, 8, 2, 10, 2, 12, 2, 889, 9, 2, 3, 2, 891, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 897, 8, 2, 1, 2, 1, 2, 3, 2, 901, 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, 5, 2, 916, 8, 2, 10, 2, 12, 2, 919, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 926, 8, 2, 1, 2, 1, 2, 3, 2, 930, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 936, 8, 2, 1, 2, 3, 2, 939, 8, 2, 1, 2, 1, 2, 3, 2, 943, 8, 2, 1, 2, 3, 2, 946, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 952, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 957, 8, 2, 1, 2, 1, 2, 3, 2, 961, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 968, 8, 2, 1, 2, 3, 2, 971, 8, 2, 1, 2, 3, 2, 974, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 981, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 986, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 995, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1003, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1009, 8, 2, 1, 2, 3, 2, 1012, 8, 2, 1, 2, 3, 2, 1015, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1021, 8, 2, 1, 2, 1, 2, 3, 2, 1025, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1030, 8, 2, 1, 2, 3, 2, 1033, 8, 2, 1, 2, 1, 2, 3, 2, 1037, 8, 2, 3, 2, 1039, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1047, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1055, 8, 2, 1, 2, 3, 2, 1058, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1065, 8, 2, 1, 2, 3, 2, 1068, 8, 2, 1, 2, 3, 2, 1071, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1080, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1085, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1091, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1096, 8, 2, 1, 2, 3, 2, 1099, 8, 2, 1, 2, 1, 2, 3, 2, 1103, 8, 2, 1, 2, 3, 2, 1106, 8, 2, 1, 2, 1, 2, 3, 2, 1110, 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, 5, 2, 1136, 8, 2, 10, 2, 12, 2, 1139, 9, 2, 3, 2, 1141, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1149, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1155, 8, 2, 1, 2, 3, 2, 1158, 8, 2, 1, 2, 3, 2, 1161, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1166, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1174, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1179, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1185, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1191, 8, 2, 1, 2, 3, 2, 1194, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1201, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1206, 8, 2, 10, 2, 12, 2, 1209, 9, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1214, 8, 2, 10, 2, 12, 2, 1217, 9, 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, 1231, 8, 2, 10, 2, 12, 2, 1234, 9, 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, 1258, 8, 2, 10, 2, 12, 2, 1261, 9, 2, 3, 2, 1263, 8, 2, 1, 2, 1, 2, 5, 2, 1267, 8, 2, 10, 2, 12, 2, 1270, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1276, 8, 2, 10, 2, 12, 2, 1279, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1285, 8, 2, 10, 2, 12, 2, 1288, 9, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1293, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1298, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1303, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1310, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1315, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1320, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1327, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1333, 8, 2, 10, 2, 12, 2, 1336, 9, 2, 3, 2, 1338, 8, 2, 1, 3, 1, 3, 3, 3, 1342, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1354, 8, 6, 1, 6, 1, 6, 3, 6, 1358, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1365, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1481, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1489, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1497, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1506, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 1516, 8, 6, 1, 7, 1, 7, 3, 7, 1520, 8, 7, 1, 7, 3, 7, 1523, 8, 7, 1, 7, 1, 7, 3, 7, 1527, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 3, 8, 1533, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 1545, 8, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 1557, 8, 10, 1, 10, 1, 10, 1, 10, 3, 10, 1562, 8, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 3, 13, 1571, 8, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 3, 14, 1579, 8, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1584, 8, 14, 3, 14, 1586, 8, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1594, 8, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1599, 8, 14, 1, 14, 1, 14, 3, 14, 1603, 8, 14, 1, 14, 3, 14, 1606, 8, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1614, 8, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1619, 8, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1628, 8, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1633, 8, 14, 1, 14, 3, 14, 1636, 8, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1641, 8, 14, 1, 14, 1, 14, 3, 14, 1645, 8, 14, 1, 14, 1, 14, 1, 14, 3, 14, 1650, 8, 14, 3, 14, 1652, 8, 14, 1, 15, 1, 15, 3, 15, 1656, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 1663, 8, 16, 10, 16, 12, 16, 1666, 9, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 3, 17, 1673, 8, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 1679, 8, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 1690, 8, 20, 1, 21, 1, 21, 1, 21, 5, 21, 1695, 8, 21, 10, 21, 12, 21, 1698, 9, 21, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 1704, 8, 22, 10, 22, 12, 22, 1707, 9, 22, 1, 23, 1, 23, 3, 23, 1711, 8, 23, 1, 23, 3, 23, 1714, 8, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 1737, 8, 25, 10, 25, 12, 25, 1740, 9, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 1749, 8, 27, 10, 27, 12, 27, 1752, 9, 27, 1, 27, 1, 27, 1, 28, 1, 28, 3, 28, 1758, 8, 28, 1, 28, 3, 28, 1761, 8, 28, 1, 29, 1, 29, 1, 29, 5, 29, 1766, 8, 29, 10, 29, 12, 29, 1769, 9, 29, 1, 29, 3, 29, 1772, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1778, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 1784, 8, 31, 10, 31, 12, 31, 1787, 9, 31, 1, 31, 1, 31, 1, 32, 1, 32, 3, 32, 1793, 8, 32, 1, 32, 3, 32, 1796, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 1802, 8, 33, 10, 33, 12, 33, 1805, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 5, 34, 1813, 8, 34, 10, 34, 12, 34, 1816, 9, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 1826, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 1834, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 1840, 8, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 4, 39, 1850, 8, 39, 11, 39, 12, 39, 1851, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 1859, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 1866, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 1878, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 5, 39, 1884, 8, 39, 10, 39, 12, 39, 1887, 9, 39, 1, 39, 5, 39, 1890, 8, 39, 10, 39, 12, 39, 1893, 9, 39, 1, 39, 5, 39, 1896, 8, 39, 10, 39, 12, 39, 1899, 9, 39, 3, 39, 1901, 8, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 3, 46, 1917, 8, 46, 1, 47, 1, 47, 1, 47, 5, 47, 1922, 8, 47, 10, 47, 12, 47, 1925, 9, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 1935, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1942, 8, 50, 10, 50, 12, 50, 1945, 9, 50, 3, 50, 1947, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1954, 8, 50, 10, 50, 12, 50, 1957, 9, 50, 3, 50, 1959, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1966, 8, 50, 10, 50, 12, 50, 1969, 9, 50, 3, 50, 1971, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 1978, 8, 50, 10, 50, 12, 50, 1981, 9, 50, 3, 50, 1983, 8, 50, 1, 50, 3, 50, 1986, 8, 50, 1, 50, 1, 50, 1, 50, 3, 50, 1991, 8, 50, 3, 50, 1993, 8, 50, 1, 50, 1, 50, 3, 50, 1997, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 2008, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 2014, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 2020, 8, 52, 1, 52, 5, 52, 2023, 8, 52, 10, 52, 12, 52, 2026, 9, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 2037, 8, 53, 1, 54, 1, 54, 3, 54, 2041, 8, 54, 1, 54, 3, 54, 2044, 8, 54, 1, 54, 1, 54, 3, 54, 2048, 8, 54, 1, 55, 1, 55, 4, 55, 2052, 8, 55, 11, 55, 12, 55, 2053, 1, 56, 1, 56, 3, 56, 2058, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 2064, 8, 56, 10, 56, 12, 56, 2067, 9, 56, 1, 56, 3, 56, 2070, 8, 56, 1, 56, 3, 56, 2073, 8, 56, 1, 56, 3, 56, 2076, 8, 56, 1, 56, 3, 56, 2079, 8, 56, 1, 56, 1, 56, 3, 56, 2083, 8, 56, 1, 57, 1, 57, 3, 57, 2087, 8, 57, 1, 57, 5, 57, 2090, 8, 57, 10, 57, 12, 57, 2093, 9, 57, 1, 57, 3, 57, 2096, 8, 57, 1, 57, 3, 57, 2099, 8, 57, 1, 57, 3, 57, 2102, 8, 57, 1, 57, 3, 57, 2105, 8, 57, 1, 57, 1, 57, 3, 57, 2109, 8, 57, 1, 57, 5, 57, 2112, 8, 57, 10, 57, 12, 57, 2115, 9, 57, 1, 57, 3, 57, 2118, 8, 57, 1, 57, 3, 57, 2121, 8, 57, 1, 57, 3, 57, 2124, 8, 57, 1, 57, 3, 57, 2127, 8, 57, 3, 57, 2129, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2135, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2142, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2147, 8, 58, 1, 58, 3, 58, 2150, 8, 58, 1, 58, 3, 58, 2153, 8, 58, 1, 58, 1, 58, 3, 58, 2157, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 2167, 8, 58, 1, 58, 1, 58, 3, 58, 2171, 8, 58, 3, 58, 2173, 8, 58, 1, 58, 3, 58, 2176, 8, 58, 1, 58, 1, 58, 3, 58, 2180, 8, 58, 1, 59, 1, 59, 5, 59, 2184, 8, 59, 10, 59, 12, 59, 2187, 9, 59, 1, 59, 3, 59, 2190, 8, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 2201, 8, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 2211, 8, 62, 1, 62, 1, 62, 3, 62, 2215, 8, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 2227, 8, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 2239, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 5, 65, 2252, 8, 65, 10, 65, 12, 65, 2255, 9, 65, 1, 65, 1, 65, 3, 65, 2259, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 2265, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 2270, 8, 67, 10, 67, 12, 67, 2273, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 3, 71, 2288, 8, 71, 1, 71, 5, 71, 2291, 8, 71, 10, 71, 12, 71, 2294, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 2304, 8, 72, 10, 72, 12, 72, 2307, 9, 72, 1, 72, 1, 72, 3, 72, 2311, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 5, 73, 2317, 8, 73, 10, 73, 12, 73, 2320, 9, 73, 1, 73, 5, 73, 2323, 8, 73, 10, 73, 12, 73, 2326, 9, 73, 1, 73, 3, 73, 2329, 8, 73, 1, 73, 3, 73, 2332, 8, 73, 1, 74, 1, 74, 1, 75, 3, 75, 2337, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 2344, 8, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 2350, 8, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 2357, 8, 76, 10, 76, 12, 76, 2360, 9, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 2367, 8, 76, 10, 76, 12, 76, 2370, 9, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 2382, 8, 76, 10, 76, 12, 76, 2385, 9, 76, 1, 76, 1, 76, 3, 76, 2389, 8, 76, 3, 76, 2391, 8, 76, 1, 77, 1, 77, 1, 77, 3, 77, 2396, 8, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 2403, 8, 78, 10, 78, 12, 78, 2406, 9, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 2416, 8, 78, 10, 78, 12, 78, 2419, 9, 78, 1, 78, 1, 78, 3, 78, 2423, 8, 78, 1, 79, 1, 79, 3, 79, 2427, 8, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 3, 80, 2434, 8, 80, 1, 80, 1, 80, 1, 80, 3, 80, 2439, 8, 80, 5, 80, 2441, 8, 80, 10, 80, 12, 80, 2444, 9, 80, 3, 80, 2446, 8, 80, 1, 80, 3, 80, 2449, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 2461, 8, 81, 10, 81, 12, 81, 2464, 9, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, 2474, 8, 82, 10, 82, 12, 82, 2477, 9, 82, 1, 82, 1, 82, 3, 82, 2481, 8, 82, 1, 83, 1, 83, 3, 83, 2485, 8, 83, 1, 83, 3, 83, 2488, 8, 83, 1, 84, 1, 84, 3, 84, 2492, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 2498, 8, 84, 1, 84, 3, 84, 2501, 8, 84, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 3, 86, 2508, 8, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 5, 87, 2518, 8, 87, 10, 87, 12, 87, 2521, 9, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 2529, 8, 88, 10, 88, 12, 88, 2532, 9, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 2542, 8, 88, 10, 88, 12, 88, 2545, 9, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 5, 89, 2553, 8, 89, 10, 89, 12, 89, 2556, 9, 89, 1, 89, 1, 89, 3, 89, 2560, 8, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 3, 92, 2568, 8, 92, 1, 93, 1, 93, 1, 94, 3, 94, 2573, 8, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 3, 97, 2587, 8, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 5, 97, 2594, 8, 97, 10, 97, 12, 97, 2597, 9, 97, 3, 97, 2599, 8, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2604, 8, 97, 1, 97, 1, 97, 1, 97, 5, 97, 2609, 8, 97, 10, 97, 12, 97, 2612, 9, 97, 3, 97, 2614, 8, 97, 1, 98, 1, 98, 1, 99, 1, 99, 3, 99, 2620, 8, 99, 1, 99, 1, 99, 5, 99, 2624, 8, 99, 10, 99, 12, 99, 2627, 9, 99, 3, 99, 2629, 8, 99, 1, 100, 1, 100, 1, 100, 3, 100, 2634, 8, 100, 1, 101, 1, 101, 1, 101, 3, 101, 2639, 8, 101, 1, 101, 1, 101, 3, 101, 2643, 8, 101, 1, 101, 1, 101, 1, 101, 1, 101, 3, 101, 2649, 8, 101, 1, 101, 1, 101, 3, 101, 2653, 8, 101, 1, 102, 3, 102, 2656, 8, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2661, 8, 102, 1, 102, 3, 102, 2664, 8, 102, 1, 102, 1, 102, 1, 102, 3, 102, 2669, 8, 102, 1, 102, 1, 102, 3, 102, 2673, 8, 102, 1, 102, 3, 102, 2676, 8, 102, 1, 102, 3, 102, 2679, 8, 102, 1, 103, 1, 103, 1, 103, 1, 103, 3, 103, 2685, 8, 103, 1, 104, 1, 104, 1, 104, 3, 104, 2690, 8, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 3, 104, 2697, 8, 104, 1, 105, 3, 105, 2700, 8, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 3, 105, 2718, 8, 105, 3, 105, 2720, 8, 105, 1, 105, 3, 105, 2723, 8, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 5, 107, 2732, 8, 107, 10, 107, 12, 107, 2735, 9, 107, 1, 108, 1, 108, 1, 108, 1, 108, 5, 108, 2741, 8, 108, 10, 108, 12, 108, 2744, 9, 108, 1, 108, 1, 108, 1, 109, 1, 109, 3, 109, 2750, 8, 109, 1, 110, 1, 110, 1, 110, 1, 110, 5, 110, 2756, 8, 110, 10, 110, 12, 110, 2759, 9, 110, 1, 110, 1, 110, 1, 111, 1, 111, 3, 111, 2765, 8, 111, 1, 112, 1, 112, 1, 112, 3, 112, 2770, 8, 112, 1, 112, 3, 112, 2773, 8, 112, 1, 112, 3, 112, 2776, 8, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 2784, 8, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 2792, 8, 112, 1, 112, 1, 112, 1, 112, 1, 112, 3, 112, 2798, 8, 112, 1, 113, 1, 113, 1, 113, 1, 113, 5, 113, 2804, 8, 113, 10, 113, 12, 113, 2807, 9, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 2814, 8, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 2821, 8, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 2828, 8, 114, 3, 114, 2830, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 2841, 8, 115, 10, 115, 12, 115, 2844, 9, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2849, 8, 115, 3, 115, 2851, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 2859, 8, 115, 10, 115, 12, 115, 2862, 9, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2867, 8, 115, 3, 115, 2869, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 3, 117, 2877, 8, 117, 1, 118, 1, 118, 3, 118, 2881, 8, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 5, 119, 2888, 8, 119, 10, 119, 12, 119, 2891, 9, 119, 3, 119, 2893, 8, 119, 1, 119, 1, 119, 1, 119, 1, 120, 3, 120, 2899, 8, 120, 1, 120, 1, 120, 3, 120, 2903, 8, 120, 3, 120, 2905, 8, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 2914, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 2926, 8, 121, 3, 121, 2928, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 2935, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 2942, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 2948, 8, 121, 1, 121, 1, 121, 1, 121, 1, 121, 3, 121, 2954, 8, 121, 3, 121, 2956, 8, 121, 1, 122, 1, 122, 1, 122, 5, 122, 2961, 8, 122, 10, 122, 12, 122, 2964, 9, 122, 1, 123, 1, 123, 1, 123, 5, 123, 2969, 8, 123, 10, 123, 12, 123, 2972, 9, 123, 1, 124, 1, 124, 1, 124, 5, 124, 2977, 8, 124, 10, 124, 12, 124, 2980, 9, 124, 1, 125, 1, 125, 1, 125, 3, 125, 2985, 8, 125, 1, 126, 1, 126, 1, 126, 3, 126, 2990, 8, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 3, 127, 2997, 8, 127, 1, 127, 1, 127, 1, 128, 1, 128, 3, 128, 3003, 8, 128, 1, 128, 3, 128, 3006, 8, 128, 1, 128, 1, 128, 3, 128, 3010, 8, 128, 3, 128, 3012, 8, 128, 1, 129, 1, 129, 1, 129, 5, 129, 3017, 8, 129, 10, 129, 12, 129, 3020, 9, 129, 1, 130, 1, 130, 1, 130, 1, 130, 5, 130, 3026, 8, 130, 10, 130, 12, 130, 3029, 9, 130, 1, 130, 1, 130, 1, 131, 1, 131, 3, 131, 3035, 8, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 3043, 8, 132, 10, 132, 12, 132, 3046, 9, 132, 1, 132, 1, 132, 3, 132, 3050, 8, 132, 1, 133, 1, 133, 3, 133, 3054, 8, 133, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 3, 136, 3064, 8, 136, 1, 137, 1, 137, 1, 137, 5, 137, 3069, 8, 137, 10, 137, 12, 137, 3072, 9, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 3, 138, 3084, 8, 138, 3, 138, 3086, 8, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 5, 138, 3094, 8, 138, 10, 138, 12, 138, 3097, 9, 138, 1, 139, 3, 139, 3100, 8, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3108, 8, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 5, 139, 3115, 8, 139, 10, 139, 12, 139, 3118, 9, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3123, 8, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3131, 8, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3136, 8, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 5, 139, 3146, 8, 139, 10, 139, 12, 139, 3149, 9, 139, 1, 139, 1, 139, 3, 139, 3153, 8, 139, 1, 139, 3, 139, 3156, 8, 139, 1, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3162, 8, 139, 1, 139, 1, 139, 3, 139, 3166, 8, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3171, 8, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3176, 8, 139, 1, 139, 1, 139, 1, 139, 3, 139, 3181, 8, 139, 1, 140, 1, 140, 1, 140, 1, 140, 3, 140, 3187, 8, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 5, 140, 3208, 8, 140, 10, 140, 12, 140, 3211, 9, 140, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3221, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3233, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 4, 142, 3243, 8, 142, 11, 142, 12, 142, 3244, 1, 142, 1, 142, 3, 142, 3249, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 4, 142, 3256, 8, 142, 11, 142, 12, 142, 3257, 1, 142, 1, 142, 3, 142, 3262, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 5, 142, 3278, 8, 142, 10, 142, 12, 142, 3281, 9, 142, 3, 142, 3283, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3291, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3300, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3309, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 4, 142, 3330, 8, 142, 11, 142, 12, 142, 3331, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3348, 8, 142, 1, 142, 1, 142, 1, 142, 5, 142, 3353, 8, 142, 10, 142, 12, 142, 3356, 9, 142, 3, 142, 3358, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3367, 8, 142, 1, 142, 1, 142, 3, 142, 3371, 8, 142, 1, 142, 1, 142, 3, 142, 3375, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 4, 142, 3385, 8, 142, 11, 142, 12, 142, 3386, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3412, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3419, 8, 142, 1, 142, 3, 142, 3422, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3437, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 3, 142, 3458, 8, 142, 1, 142, 1, 142, 3, 142, 3462, 8, 142, 3, 142, 3464, 8, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 5, 142, 3474, 8, 142, 10, 142, 12, 142, 3477, 9, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 3486, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 4, 144, 3499, 8, 144, 11, 144, 12, 144, 3500, 3, 144, 3503, 8, 144, 1, 145, 1, 145, 1, 146, 1, 146, 1, 147, 1, 147, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 3, 149, 3516, 8, 149, 1, 150, 1, 150, 3, 150, 3520, 8, 150, 1, 151, 1, 151, 1, 151, 4, 151, 3525, 8, 151, 11, 151, 12, 151, 3526, 1, 152, 1, 152, 1, 152, 3, 152, 3532, 8, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 3, 154, 3540, 8, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3545, 8, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 3, 157, 3554, 8, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 3, 158, 3586, 8, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 3603, 8, 159, 1, 159, 1, 159, 3, 159, 3607, 8, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 3613, 8, 159, 1, 159, 1, 159, 1, 159, 1, 159, 3, 159, 3619, 8, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 5, 159, 3626, 8, 159, 10, 159, 12, 159, 3629, 9, 159, 1, 159, 3, 159, 3632, 8, 159, 3, 159, 3634, 8, 159, 1, 160, 1, 160, 1, 160, 5, 160, 3639, 8, 160, 10, 160, 12, 160, 3642, 9, 160, 1, 161, 1, 161, 1, 161, 5, 161, 3647, 8, 161, 10, 161, 12, 161, 3650, 9, 161, 1, 162, 1, 162, 1, 162, 5, 162, 3655, 8, 162, 10, 162, 12, 162, 3658, 9, 162, 1, 163, 1, 163, 1, 163, 5, 163, 3663, 8, 163, 10, 163, 12, 163, 3666, 9, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 3673, 8, 164, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 5, 167, 3684, 8, 167, 10, 167, 12, 167, 3687, 9, 167, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 3693, 8, 168, 1, 168, 3, 168, 3696, 8, 168, 1, 169, 1, 169, 1, 169, 5, 169, 3701, 8, 169, 10, 169, 12, 169, 3704, 9, 169, 1, 170, 1, 170, 1, 170, 5, 170, 3709, 8, 170, 10, 170, 12, 170, 3712, 9, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 3, 171, 3719, 8, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 5, 173, 3731, 8, 173, 10, 173, 12, 173, 3734, 9, 173, 1, 174, 1, 174, 3, 174, 3738, 8, 174, 1, 174, 1, 174, 1, 174, 3, 174, 3743, 8, 174, 1, 174, 3, 174, 3746, 8, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 5, 176, 3757, 8, 176, 10, 176, 12, 176, 3760, 9, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 5, 179, 3781, 8, 179, 10, 179, 12, 179, 3784, 9, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 5, 179, 3791, 8, 179, 10, 179, 12, 179, 3794, 9, 179, 3, 179, 3796, 8, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 5, 179, 3803, 8, 179, 10, 179, 12, 179, 3806, 9, 179, 3, 179, 3808, 8, 179, 3, 179, 3810, 8, 179, 1, 179, 3, 179, 3813, 8, 179, 1, 179, 3, 179, 3816, 8, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 3, 180, 3834, 8, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 3, 181, 3843, 8, 181, 1, 182, 1, 182, 1, 182, 5, 182, 3848, 8, 182, 10, 182, 12, 182, 3851, 9, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 3, 183, 3862, 8, 183, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 5, 185, 3869, 8, 185, 10, 185, 12, 185, 3872, 9, 185, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 4, 187, 3879, 8, 187, 11, 187, 12, 187, 3880, 1, 187, 3, 187, 3884, 8, 187, 1, 188, 1, 188, 3, 188, 3888, 8, 188, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 3894, 8, 189, 1, 190, 1, 190, 1, 191, 1, 191, 1, 192, 3, 192, 3901, 8, 192, 1, 192, 1, 192, 3, 192, 3905, 8, 192, 1, 192, 1, 192, 3, 192, 3909, 8, 192, 1, 192, 1, 192, 3, 192, 3913, 8, 192, 1, 192, 1, 192, 3, 192, 3917, 8, 192, 1, 192, 1, 192, 3, 192, 3921, 8, 192, 1, 192, 1, 192, 3, 192, 3925, 8, 192, 1, 192, 1, 192, 3, 192, 3929, 8, 192, 1, 192, 1, 192, 3, 192, 3933, 8, 192, 1, 192, 1, 192, 3, 192, 3937, 8, 192, 1, 192, 3, 192, 3940, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 3, 193, 3953, 8, 193, 1, 194, 1, 194, 1, 195, 1, 195, 3, 195, 3959, 8, 195, 1, 196, 1, 196, 3, 196, 3963, 8, 196, 1, 197, 1, 197, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 9, 1137, 1207, 1215, 1232, 1259, 1268, 1277, 1286, 1334, 4, 104, 276, 280, 284, 200, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398, 0, 64, 2, 0, 78, 78, 229, 229, 2, 0, 34, 34, 247, 247, 2, 0, 123, 123, 140, 140, 2, 0, 11, 11, 39, 39, 2, 0, 91, 91, 98, 98, 5, 0, 46, 46, 58, 58, 108, 108, 122, 122, 173, 173, 1, 0, 86, 87, 2, 0, 108, 108, 122, 122, 3, 0, 8, 8, 96, 96, 289, 289, 2, 0, 8, 8, 167, 167, 1, 0, 335, 336, 3, 0, 72, 72, 190, 190, 261, 261, 3, 0, 73, 73, 191, 191, 262, 262, 4, 0, 102, 102, 148, 148, 270, 270, 323, 323, 3, 0, 102, 102, 270, 270, 323, 323, 2, 0, 21, 21, 86, 86, 2, 0, 116, 116, 157, 157, 3, 0, 10, 10, 290, 290, 331, 331, 2, 0, 292, 292, 337, 337, 2, 0, 291, 291, 303, 303, 2, 0, 61, 61, 256, 256, 2, 0, 104, 104, 141, 141, 2, 0, 10, 10, 92, 92, 2, 0, 382, 382, 384, 384, 2, 0, 93, 93, 217, 217, 2, 0, 209, 209, 278, 278, 2, 0, 197, 197, 360, 360, 1, 0, 251, 252, 1, 0, 163, 164, 3, 0, 10, 10, 16, 16, 277, 277, 3, 0, 111, 111, 316, 316, 325, 325, 2, 0, 361, 362, 366, 366, 2, 0, 94, 94, 363, 365, 2, 0, 361, 362, 369, 369, 11, 0, 67, 67, 69, 69, 134, 134, 180, 180, 182, 182, 184, 184, 186, 186, 231, 231, 259, 259, 341, 341, 348, 348, 4, 0, 63, 63, 65, 66, 268, 268, 331, 331, 2, 0, 74, 75, 306, 306, 3, 0, 76, 77, 302, 302, 307, 307, 2, 0, 36, 36, 318, 318, 2, 0, 138, 138, 246, 246, 1, 0, 287, 288, 2, 0, 4, 4, 123, 123, 2, 0, 4, 4, 119, 119, 3, 0, 28, 28, 160, 160, 311, 311, 1, 0, 220, 221, 1, 0, 352, 359, 2, 0, 94, 94, 361, 370, 4, 0, 14, 14, 140, 140, 197, 197, 208, 208, 2, 0, 111, 111, 316, 316, 1, 0, 361, 362, 7, 0, 67, 68, 134, 135, 180, 187, 192, 193, 259, 260, 341, 342, 348, 349, 6, 0, 67, 67, 134, 134, 184, 184, 186, 186, 259, 259, 348, 348, 2, 0, 186, 186, 348, 348, 4, 0, 67, 67, 134, 134, 184, 184, 259, 259, 3, 0, 134, 134, 184, 184, 259, 259, 2, 0, 82, 82, 352, 352, 2, 0, 118, 118, 226, 226, 2, 0, 378, 378, 389, 389, 1, 0, 383, 384, 2, 0, 96, 96, 269, 269, 1, 0, 377, 378, 52, 0, 8, 9, 11, 13, 15, 15, 17, 19, 21, 22, 24, 27, 29, 34, 37, 41, 43, 46, 48, 48, 50, 56, 58, 58, 61, 62, 67, 91, 93, 96, 98, 98, 101, 101, 103, 110, 113, 113, 115, 118, 121, 122, 125, 128, 131, 131, 133, 139, 141, 143, 145, 147, 149, 151, 154, 154, 156, 157, 159, 159, 163, 193, 195, 195, 199, 201, 205, 207, 210, 210, 212, 213, 215, 219, 222, 226, 228, 238, 240, 249, 251, 262, 264, 267, 269, 276, 278, 292, 294, 299, 302, 308, 310, 310, 312, 322, 326, 330, 333, 342, 345, 345, 348, 351, 16, 0, 15, 15, 60, 60, 102, 102, 124, 124, 144, 144, 148, 148, 155, 155, 158, 158, 161, 161, 194, 194, 203, 203, 250, 250, 264, 264, 270, 270, 323, 323, 332, 332, 19, 0, 8, 14, 16, 59, 61, 101, 103, 122, 125, 143, 145, 147, 149, 154, 156, 157, 159, 160, 162, 193, 195, 195, 197, 202, 204, 249, 251, 262, 265, 269, 271, 292, 294, 322, 324, 331, 333, 351, 4586, 0, 403, 1, 0, 0, 0, 2, 408, 1, 0, 0, 0, 4, 1337, 1, 0, 0, 0, 6, 1341, 1, 0, 0, 0, 8, 1343, 1, 0, 0, 0, 10, 1345, 1, 0, 0, 0, 12, 1515, 1, 0, 0, 0, 14, 1517, 1, 0, 0, 0, 16, 1532, 1, 0, 0, 0, 18, 1538, 1, 0, 0, 0, 20, 1550, 1, 0, 0, 0, 22, 1563, 1, 0, 0, 0, 24, 1566, 1, 0, 0, 0, 26, 1570, 1, 0, 0, 0, 28, 1651, 1, 0, 0, 0, 30, 1653, 1, 0, 0, 0, 32, 1657, 1, 0, 0, 0, 34, 1678, 1, 0, 0, 0, 36, 1680, 1, 0, 0, 0, 38, 1682, 1, 0, 0, 0, 40, 1689, 1, 0, 0, 0, 42, 1691, 1, 0, 0, 0, 44, 1699, 1, 0, 0, 0, 46, 1708, 1, 0, 0, 0, 48, 1719, 1, 0, 0, 0, 50, 1738, 1, 0, 0, 0, 52, 1741, 1, 0, 0, 0, 54, 1744, 1, 0, 0, 0, 56, 1755, 1, 0, 0, 0, 58, 1771, 1, 0, 0, 0, 60, 1777, 1, 0, 0, 0, 62, 1779, 1, 0, 0, 0, 64, 1790, 1, 0, 0, 0, 66, 1797, 1, 0, 0, 0, 68, 1808, 1, 0, 0, 0, 70, 1825, 1, 0, 0, 0, 72, 1833, 1, 0, 0, 0, 74, 1835, 1, 0, 0, 0, 76, 1841, 1, 0, 0, 0, 78, 1900, 1, 0, 0, 0, 80, 1902, 1, 0, 0, 0, 82, 1904, 1, 0, 0, 0, 84, 1906, 1, 0, 0, 0, 86, 1908, 1, 0, 0, 0, 88, 1910, 1, 0, 0, 0, 90, 1912, 1, 0, 0, 0, 92, 1916, 1, 0, 0, 0, 94, 1918, 1, 0, 0, 0, 96, 1926, 1, 0, 0, 0, 98, 1934, 1, 0, 0, 0, 100, 1946, 1, 0, 0, 0, 102, 1998, 1, 0, 0, 0, 104, 2001, 1, 0, 0, 0, 106, 2036, 1, 0, 0, 0, 108, 2040, 1, 0, 0, 0, 110, 2049, 1, 0, 0, 0, 112, 2082, 1, 0, 0, 0, 114, 2128, 1, 0, 0, 0, 116, 2149, 1, 0, 0, 0, 118, 2181, 1, 0, 0, 0, 120, 2193, 1, 0, 0, 0, 122, 2196, 1, 0, 0, 0, 124, 2205, 1, 0, 0, 0, 126, 2219, 1, 0, 0, 0, 128, 2238, 1, 0, 0, 0, 130, 2258, 1, 0, 0, 0, 132, 2264, 1, 0, 0, 0, 134, 2266, 1, 0, 0, 0, 136, 2274, 1, 0, 0, 0, 138, 2278, 1, 0, 0, 0, 140, 2281, 1, 0, 0, 0, 142, 2284, 1, 0, 0, 0, 144, 2310, 1, 0, 0, 0, 146, 2312, 1, 0, 0, 0, 148, 2333, 1, 0, 0, 0, 150, 2349, 1, 0, 0, 0, 152, 2390, 1, 0, 0, 0, 154, 2395, 1, 0, 0, 0, 156, 2422, 1, 0, 0, 0, 158, 2426, 1, 0, 0, 0, 160, 2448, 1, 0, 0, 0, 162, 2450, 1, 0, 0, 0, 164, 2480, 1, 0, 0, 0, 166, 2482, 1, 0, 0, 0, 168, 2489, 1, 0, 0, 0, 170, 2502, 1, 0, 0, 0, 172, 2507, 1, 0, 0, 0, 174, 2509, 1, 0, 0, 0, 176, 2524, 1, 0, 0, 0, 178, 2548, 1, 0, 0, 0, 180, 2561, 1, 0, 0, 0, 182, 2563, 1, 0, 0, 0, 184, 2565, 1, 0, 0, 0, 186, 2569, 1, 0, 0, 0, 188, 2572, 1, 0, 0, 0, 190, 2576, 1, 0, 0, 0, 192, 2580, 1, 0, 0, 0, 194, 2583, 1, 0, 0, 0, 196, 2615, 1, 0, 0, 0, 198, 2628, 1, 0, 0, 0, 200, 2633, 1, 0, 0, 0, 202, 2652, 1, 0, 0, 0, 204, 2678, 1, 0, 0, 0, 206, 2684, 1, 0, 0, 0, 208, 2686, 1, 0, 0, 0, 210, 2722, 1, 0, 0, 0, 212, 2724, 1, 0, 0, 0, 214, 2728, 1, 0, 0, 0, 216, 2736, 1, 0, 0, 0, 218, 2747, 1, 0, 0, 0, 220, 2751, 1, 0, 0, 0, 222, 2762, 1, 0, 0, 0, 224, 2797, 1, 0, 0, 0, 226, 2799, 1, 0, 0, 0, 228, 2829, 1, 0, 0, 0, 230, 2850, 1, 0, 0, 0, 232, 2870, 1, 0, 0, 0, 234, 2876, 1, 0, 0, 0, 236, 2880, 1, 0, 0, 0, 238, 2882, 1, 0, 0, 0, 240, 2904, 1, 0, 0, 0, 242, 2955, 1, 0, 0, 0, 244, 2957, 1, 0, 0, 0, 246, 2965, 1, 0, 0, 0, 248, 2973, 1, 0, 0, 0, 250, 2981, 1, 0, 0, 0, 252, 2989, 1, 0, 0, 0, 254, 2996, 1, 0, 0, 0, 256, 3002, 1, 0, 0, 0, 258, 3013, 1, 0, 0, 0, 260, 3021, 1, 0, 0, 0, 262, 3034, 1, 0, 0, 0, 264, 3049, 1, 0, 0, 0, 266, 3053, 1, 0, 0, 0, 268, 3055, 1, 0, 0, 0, 270, 3057, 1, 0, 0, 0, 272, 3063, 1, 0, 0, 0, 274, 3065, 1, 0, 0, 0, 276, 3085, 1, 0, 0, 0, 278, 3180, 1, 0, 0, 0, 280, 3186, 1, 0, 0, 0, 282, 3212, 1, 0, 0, 0, 284, 3463, 1, 0, 0, 0, 286, 3485, 1, 0, 0, 0, 288, 3502, 1, 0, 0, 0, 290, 3504, 1, 0, 0, 0, 292, 3506, 1, 0, 0, 0, 294, 3508, 1, 0, 0, 0, 296, 3510, 1, 0, 0, 0, 298, 3512, 1, 0, 0, 0, 300, 3517, 1, 0, 0, 0, 302, 3524, 1, 0, 0, 0, 304, 3528, 1, 0, 0, 0, 306, 3533, 1, 0, 0, 0, 308, 3539, 1, 0, 0, 0, 310, 3546, 1, 0, 0, 0, 312, 3548, 1, 0, 0, 0, 314, 3553, 1, 0, 0, 0, 316, 3585, 1, 0, 0, 0, 318, 3633, 1, 0, 0, 0, 320, 3635, 1, 0, 0, 0, 322, 3643, 1, 0, 0, 0, 324, 3651, 1, 0, 0, 0, 326, 3659, 1, 0, 0, 0, 328, 3672, 1, 0, 0, 0, 330, 3674, 1, 0, 0, 0, 332, 3677, 1, 0, 0, 0, 334, 3680, 1, 0, 0, 0, 336, 3688, 1, 0, 0, 0, 338, 3697, 1, 0, 0, 0, 340, 3705, 1, 0, 0, 0, 342, 3718, 1, 0, 0, 0, 344, 3720, 1, 0, 0, 0, 346, 3727, 1, 0, 0, 0, 348, 3735, 1, 0, 0, 0, 350, 3747, 1, 0, 0, 0, 352, 3752, 1, 0, 0, 0, 354, 3761, 1, 0, 0, 0, 356, 3765, 1, 0, 0, 0, 358, 3815, 1, 0, 0, 0, 360, 3833, 1, 0, 0, 0, 362, 3842, 1, 0, 0, 0, 364, 3844, 1, 0, 0, 0, 366, 3861, 1, 0, 0, 0, 368, 3863, 1, 0, 0, 0, 370, 3865, 1, 0, 0, 0, 372, 3873, 1, 0, 0, 0, 374, 3883, 1, 0, 0, 0, 376, 3887, 1, 0, 0, 0, 378, 3893, 1, 0, 0, 0, 380, 3895, 1, 0, 0, 0, 382, 3897, 1, 0, 0, 0, 384, 3939, 1, 0, 0, 0, 386, 3952, 1, 0, 0, 0, 388, 3954, 1, 0, 0, 0, 390, 3958, 1, 0, 0, 0, 392, 3962, 1, 0, 0, 0, 394, 3964, 1, 0, 0, 0, 396, 3966, 1, 0, 0, 0, 398, 3968, 1, 0, 0, 0, 400, 402, 3, 2, 1, 0, 401, 400, 1, 0, 0, 0, 402, 405, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 406, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 406, 407, 5, 0, 0, 1, 407, 1, 1, 0, 0, 0, 408, 410, 3, 4, 2, 0, 409, 411, 5, 1, 0, 0, 410, 409, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 3, 1, 0, 0, 0, 412, 1338, 3, 26, 13, 0, 413, 415, 3, 44, 22, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 1338, 3, 78, 39, 0, 417, 419, 5, 330, 0, 0, 418, 420, 3, 36, 18, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 1338, 3, 80, 40, 0, 422, 423, 5, 269, 0, 0, 423, 426, 5, 37, 0, 0, 424, 427, 3, 376, 188, 0, 425, 427, 3, 388, 194, 0, 426, 424, 1, 0, 0, 0, 426, 425, 1, 0, 0, 0, 427, 1338, 1, 0, 0, 0, 428, 429, 5, 59, 0, 0, 429, 431, 3, 36, 18, 0, 430, 432, 3, 190, 95, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 441, 3, 82, 41, 0, 434, 440, 3, 24, 12, 0, 435, 440, 3, 22, 11, 0, 436, 437, 5, 346, 0, 0, 437, 438, 7, 0, 0, 0, 438, 440, 3, 54, 27, 0, 439, 434, 1, 0, 0, 0, 439, 435, 1, 0, 0, 0, 439, 436, 1, 0, 0, 0, 440, 443, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 1338, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 444, 445, 5, 11, 0, 0, 445, 446, 3, 36, 18, 0, 446, 447, 3, 80, 40, 0, 447, 448, 5, 269, 0, 0, 448, 449, 7, 0, 0, 0, 449, 450, 3, 54, 27, 0, 450, 1338, 1, 0, 0, 0, 451, 452, 5, 11, 0, 0, 452, 453, 3, 36, 18, 0, 453, 454, 3, 80, 40, 0, 454, 455, 5, 269, 0, 0, 455, 456, 3, 22, 11, 0, 456, 1338, 1, 0, 0, 0, 457, 458, 5, 96, 0, 0, 458, 460, 3, 36, 18, 0, 459, 461, 3, 192, 96, 0, 460, 459, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 464, 3, 80, 40, 0, 463, 465, 7, 1, 0, 0, 464, 463, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 1338, 1, 0, 0, 0, 466, 467, 5, 273, 0, 0, 467, 470, 3, 38, 19, 0, 468, 469, 7, 2, 0, 0, 469, 471, 3, 246, 123, 0, 470, 468, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 476, 1, 0, 0, 0, 472, 474, 5, 163, 0, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 477, 3, 388, 194, 0, 476, 473, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 1338, 1, 0, 0, 0, 478, 483, 3, 14, 7, 0, 479, 480, 5, 2, 0, 0, 480, 481, 3, 338, 169, 0, 481, 482, 5, 3, 0, 0, 482, 484, 1, 0, 0, 0, 483, 479, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 486, 1, 0, 0, 0, 485, 487, 3, 48, 24, 0, 486, 485, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 493, 3, 50, 25, 0, 489, 491, 5, 20, 0, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, 492, 494, 3, 26, 13, 0, 493, 490, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 1338, 1, 0, 0, 0, 495, 496, 5, 59, 0, 0, 496, 498, 5, 293, 0, 0, 497, 499, 3, 190, 95, 0, 498, 497, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 3, 84, 42, 0, 501, 502, 5, 163, 0, 0, 502, 512, 3, 86, 43, 0, 503, 511, 3, 48, 24, 0, 504, 511, 3, 242, 121, 0, 505, 511, 3, 70, 35, 0, 506, 511, 3, 22, 11, 0, 507, 508, 5, 297, 0, 0, 508, 511, 3, 54, 27, 0, 509, 511, 3, 52, 26, 0, 510, 503, 1, 0, 0, 0, 510, 504, 1, 0, 0, 0, 510, 505, 1, 0, 0, 0, 510, 506, 1, 0, 0, 0, 510, 507, 1, 0, 0, 0, 510, 509, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 1338, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 520, 3, 16, 8, 0, 516, 517, 5, 2, 0, 0, 517, 518, 3, 338, 169, 0, 518, 519, 5, 3, 0, 0, 519, 521, 1, 0, 0, 0, 520, 516, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 523, 1, 0, 0, 0, 522, 524, 3, 48, 24, 0, 523, 522, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 530, 3, 50, 25, 0, 526, 528, 5, 20, 0, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 531, 3, 26, 13, 0, 530, 527, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 1338, 1, 0, 0, 0, 532, 533, 5, 13, 0, 0, 533, 534, 5, 293, 0, 0, 534, 536, 3, 86, 43, 0, 535, 537, 3, 32, 16, 0, 536, 535, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 539, 5, 55, 0, 0, 539, 547, 5, 282, 0, 0, 540, 548, 5, 196, 0, 0, 541, 542, 5, 119, 0, 0, 542, 543, 5, 50, 0, 0, 543, 548, 3, 94, 47, 0, 544, 545, 5, 119, 0, 0, 545, 546, 5, 10, 0, 0, 546, 548, 5, 50, 0, 0, 547, 540, 1, 0, 0, 0, 547, 541, 1, 0, 0, 0, 547, 544, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 1338, 1, 0, 0, 0, 549, 550, 5, 13, 0, 0, 550, 553, 5, 294, 0, 0, 551, 552, 7, 2, 0, 0, 552, 554, 3, 80, 40, 0, 553, 551, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 5, 55, 0, 0, 556, 558, 5, 282, 0, 0, 557, 559, 5, 196, 0, 0, 558, 557, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 1338, 1, 0, 0, 0, 560, 561, 5, 11, 0, 0, 561, 562, 5, 293, 0, 0, 562, 563, 3, 86, 43, 0, 563, 564, 5, 8, 0, 0, 564, 565, 5, 49, 0, 0, 565, 566, 3, 322, 161, 0, 566, 1338, 1, 0, 0, 0, 567, 568, 5, 11, 0, 0, 568, 569, 5, 293, 0, 0, 569, 570, 3, 86, 43, 0, 570, 571, 5, 8, 0, 0, 571, 572, 5, 50, 0, 0, 572, 573, 5, 2, 0, 0, 573, 574, 3, 320, 160, 0, 574, 575, 5, 3, 0, 0, 575, 1338, 1, 0, 0, 0, 576, 577, 5, 11, 0, 0, 577, 578, 5, 293, 0, 0, 578, 579, 3, 86, 43, 0, 579, 580, 5, 241, 0, 0, 580, 581, 5, 49, 0, 0, 581, 582, 3, 92, 46, 0, 582, 583, 5, 309, 0, 0, 583, 584, 3, 96, 48, 0, 584, 1338, 1, 0, 0, 0, 585, 586, 5, 11, 0, 0, 586, 587, 5, 293, 0, 0, 587, 588, 3, 86, 43, 0, 588, 589, 5, 96, 0, 0, 589, 591, 5, 49, 0, 0, 590, 592, 3, 192, 96, 0, 591, 590, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 594, 3, 92, 46, 0, 594, 1338, 1, 0, 0, 0, 595, 596, 5, 11, 0, 0, 596, 597, 5, 293, 0, 0, 597, 598, 3, 86, 43, 0, 598, 599, 5, 96, 0, 0, 599, 601, 5, 50, 0, 0, 600, 602, 3, 192, 96, 0, 601, 600, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 604, 5, 2, 0, 0, 604, 605, 3, 94, 47, 0, 605, 606, 5, 3, 0, 0, 606, 1338, 1, 0, 0, 0, 607, 612, 5, 11, 0, 0, 608, 609, 5, 293, 0, 0, 609, 613, 3, 86, 43, 0, 610, 611, 5, 338, 0, 0, 611, 613, 3, 90, 45, 0, 612, 608, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 615, 5, 241, 0, 0, 615, 616, 5, 309, 0, 0, 616, 617, 3, 246, 123, 0, 617, 1338, 1, 0, 0, 0, 618, 623, 5, 11, 0, 0, 619, 620, 5, 293, 0, 0, 620, 624, 3, 86, 43, 0, 621, 622, 5, 338, 0, 0, 622, 624, 3, 90, 45, 0, 623, 619, 1, 0, 0, 0, 623, 621, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 5, 269, 0, 0, 626, 627, 5, 297, 0, 0, 627, 628, 3, 54, 27, 0, 628, 1338, 1, 0, 0, 0, 629, 634, 5, 11, 0, 0, 630, 631, 5, 293, 0, 0, 631, 635, 3, 86, 43, 0, 632, 633, 5, 338, 0, 0, 633, 635, 3, 90, 45, 0, 634, 630, 1, 0, 0, 0, 634, 632, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 5, 328, 0, 0, 637, 639, 5, 297, 0, 0, 638, 640, 3, 192, 96, 0, 639, 638, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 642, 3, 54, 27, 0, 642, 1338, 1, 0, 0, 0, 643, 644, 5, 11, 0, 0, 644, 645, 5, 293, 0, 0, 645, 646, 3, 86, 43, 0, 646, 648, 7, 3, 0, 0, 647, 649, 5, 49, 0, 0, 648, 647, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 652, 3, 92, 46, 0, 651, 653, 3, 386, 193, 0, 652, 651, 1, 0, 0, 0, 652, 653, 1, 0, 0, 0, 653, 1338, 1, 0, 0, 0, 654, 655, 5, 11, 0, 0, 655, 656, 5, 293, 0, 0, 656, 658, 3, 86, 43, 0, 657, 659, 3, 32, 16, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 662, 5, 39, 0, 0, 661, 663, 5, 49, 0, 0, 662, 661, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 665, 3, 92, 46, 0, 665, 667, 3, 336, 168, 0, 666, 668, 3, 314, 157, 0, 667, 666, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 1338, 1, 0, 0, 0, 669, 670, 5, 11, 0, 0, 670, 671, 5, 293, 0, 0, 671, 673, 3, 86, 43, 0, 672, 674, 3, 32, 16, 0, 673, 672, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 676, 5, 244, 0, 0, 676, 677, 5, 50, 0, 0, 677, 678, 5, 2, 0, 0, 678, 679, 3, 324, 162, 0, 679, 680, 5, 3, 0, 0, 680, 1338, 1, 0, 0, 0, 681, 682, 5, 11, 0, 0, 682, 683, 5, 293, 0, 0, 683, 685, 3, 86, 43, 0, 684, 686, 3, 32, 16, 0, 685, 684, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 5, 269, 0, 0, 688, 689, 5, 266, 0, 0, 689, 693, 3, 388, 194, 0, 690, 691, 5, 346, 0, 0, 691, 692, 5, 267, 0, 0, 692, 694, 3, 54, 27, 0, 693, 690, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 1338, 1, 0, 0, 0, 695, 696, 5, 11, 0, 0, 696, 697, 5, 293, 0, 0, 697, 699, 3, 86, 43, 0, 698, 700, 3, 32, 16, 0, 699, 698, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 702, 5, 269, 0, 0, 702, 703, 5, 267, 0, 0, 703, 704, 3, 54, 27, 0, 704, 1338, 1, 0, 0, 0, 705, 710, 5, 11, 0, 0, 706, 707, 5, 293, 0, 0, 707, 711, 3, 86, 43, 0, 708, 709, 5, 338, 0, 0, 709, 711, 3, 90, 45, 0, 710, 706, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 714, 5, 8, 0, 0, 713, 715, 3, 190, 95, 0, 714, 713, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 717, 1, 0, 0, 0, 716, 718, 3, 30, 15, 0, 717, 716, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 717, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 1338, 1, 0, 0, 0, 721, 722, 5, 11, 0, 0, 722, 723, 5, 293, 0, 0, 723, 724, 3, 86, 43, 0, 724, 725, 3, 32, 16, 0, 725, 726, 5, 241, 0, 0, 726, 727, 5, 309, 0, 0, 727, 728, 3, 32, 16, 0, 728, 1338, 1, 0, 0, 0, 729, 734, 5, 11, 0, 0, 730, 731, 5, 293, 0, 0, 731, 735, 3, 86, 43, 0, 732, 733, 5, 338, 0, 0, 733, 735, 3, 90, 45, 0, 734, 730, 1, 0, 0, 0, 734, 732, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 738, 5, 96, 0, 0, 737, 739, 3, 192, 96, 0, 738, 737, 1, 0, 0, 0, 738, 739, 1, 0, 0, 0, 739, 740, 1, 0, 0, 0, 740, 745, 3, 32, 16, 0, 741, 742, 5, 4, 0, 0, 742, 744, 3, 32, 16, 0, 743, 741, 1, 0, 0, 0, 744, 747, 1, 0, 0, 0, 745, 743, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 749, 1, 0, 0, 0, 747, 745, 1, 0, 0, 0, 748, 750, 5, 230, 0, 0, 749, 748, 1, 0, 0, 0, 749, 750, 1, 0, 0, 0, 750, 1338, 1, 0, 0, 0, 751, 752, 5, 11, 0, 0, 752, 753, 5, 293, 0, 0, 753, 755, 3, 86, 43, 0, 754, 756, 3, 32, 16, 0, 755, 754, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 758, 5, 269, 0, 0, 758, 759, 3, 22, 11, 0, 759, 1338, 1, 0, 0, 0, 760, 761, 5, 11, 0, 0, 761, 762, 5, 293, 0, 0, 762, 763, 3, 86, 43, 0, 763, 764, 5, 237, 0, 0, 764, 765, 5, 219, 0, 0, 765, 1338, 1, 0, 0, 0, 766, 767, 5, 11, 0, 0, 767, 768, 5, 176, 0, 0, 768, 769, 5, 338, 0, 0, 769, 770, 3, 90, 45, 0, 770, 771, 7, 4, 0, 0, 771, 772, 5, 248, 0, 0, 772, 1338, 1, 0, 0, 0, 773, 774, 5, 11, 0, 0, 774, 775, 5, 176, 0, 0, 775, 776, 5, 338, 0, 0, 776, 777, 3, 90, 45, 0, 777, 778, 5, 269, 0, 0, 778, 779, 5, 297, 0, 0, 779, 780, 3, 54, 27, 0, 780, 1338, 1, 0, 0, 0, 781, 782, 5, 96, 0, 0, 782, 784, 5, 293, 0, 0, 783, 785, 3, 192, 96, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, 3, 86, 43, 0, 787, 789, 5, 230, 0, 0, 788, 787, 1, 0, 0, 0, 788, 789, 1, 0, 0, 0, 789, 1338, 1, 0, 0, 0, 790, 791, 5, 96, 0, 0, 791, 793, 5, 338, 0, 0, 792, 794, 3, 192, 96, 0, 793, 792, 1, 0, 0, 0, 793, 794, 1, 0, 0, 0, 794, 795, 1, 0, 0, 0, 795, 1338, 3, 90, 45, 0, 796, 797, 5, 96, 0, 0, 797, 798, 5, 176, 0, 0, 798, 800, 5, 338, 0, 0, 799, 801, 3, 192, 96, 0, 800, 799, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 1338, 3, 90, 45, 0, 803, 806, 5, 59, 0, 0, 804, 805, 5, 208, 0, 0, 805, 807, 5, 244, 0, 0, 806, 804, 1, 0, 0, 0, 806, 807, 1, 0, 0, 0, 807, 812, 1, 0, 0, 0, 808, 810, 5, 128, 0, 0, 809, 808, 1, 0, 0, 0, 809, 810, 1, 0, 0, 0, 810, 811, 1, 0, 0, 0, 811, 813, 5, 298, 0, 0, 812, 809, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 816, 5, 338, 0, 0, 815, 817, 3, 190, 95, 0, 816, 815, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 820, 3, 88, 44, 0, 819, 821, 3, 220, 110, 0, 820, 819, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 830, 1, 0, 0, 0, 822, 829, 3, 24, 12, 0, 823, 824, 5, 218, 0, 0, 824, 825, 5, 203, 0, 0, 825, 829, 3, 212, 106, 0, 826, 827, 5, 297, 0, 0, 827, 829, 3, 54, 27, 0, 828, 822, 1, 0, 0, 0, 828, 823, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 829, 832, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 833, 1, 0, 0, 0, 832, 830, 1, 0, 0, 0, 833, 834, 5, 20, 0, 0, 834, 835, 3, 26, 13, 0, 835, 1338, 1, 0, 0, 0, 836, 839, 5, 59, 0, 0, 837, 838, 5, 208, 0, 0, 838, 840, 5, 244, 0, 0, 839, 837, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 1, 0, 0, 0, 841, 843, 5, 128, 0, 0, 842, 841, 1, 0, 0, 0, 842, 843, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 5, 298, 0, 0, 845, 846, 5, 338, 0, 0, 846, 851, 3, 88, 44, 0, 847, 848, 5, 2, 0, 0, 848, 849, 3, 334, 167, 0, 849, 850, 5, 3, 0, 0, 850, 852, 1, 0, 0, 0, 851, 847, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 856, 3, 48, 24, 0, 854, 855, 5, 207, 0, 0, 855, 857, 3, 54, 27, 0, 856, 854, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 1338, 1, 0, 0, 0, 858, 859, 5, 11, 0, 0, 859, 860, 5, 338, 0, 0, 860, 862, 3, 90, 45, 0, 861, 863, 5, 20, 0, 0, 862, 861, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 3, 26, 13, 0, 865, 1338, 1, 0, 0, 0, 866, 869, 5, 59, 0, 0, 867, 868, 5, 208, 0, 0, 868, 870, 5, 244, 0, 0, 869, 867, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 872, 1, 0, 0, 0, 871, 873, 5, 298, 0, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 876, 5, 125, 0, 0, 875, 877, 3, 190, 95, 0, 876, 875, 1, 0, 0, 0, 876, 877, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 3, 368, 184, 0, 879, 880, 5, 20, 0, 0, 880, 890, 3, 388, 194, 0, 881, 882, 5, 332, 0, 0, 882, 887, 3, 76, 38, 0, 883, 884, 5, 4, 0, 0, 884, 886, 3, 76, 38, 0, 885, 883, 1, 0, 0, 0, 886, 889, 1, 0, 0, 0, 887, 885, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 891, 1, 0, 0, 0, 889, 887, 1, 0, 0, 0, 890, 881, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 1338, 1, 0, 0, 0, 892, 893, 5, 59, 0, 0, 893, 894, 5, 176, 0, 0, 894, 896, 5, 338, 0, 0, 895, 897, 3, 190, 95, 0, 896, 895, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 898, 1, 0, 0, 0, 898, 900, 3, 88, 44, 0, 899, 901, 3, 48, 24, 0, 900, 899, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 917, 1, 0, 0, 0, 902, 903, 5, 207, 0, 0, 903, 916, 3, 54, 27, 0, 904, 905, 5, 218, 0, 0, 905, 906, 5, 31, 0, 0, 906, 916, 3, 260, 130, 0, 907, 916, 3, 20, 10, 0, 908, 916, 3, 18, 9, 0, 909, 916, 3, 242, 121, 0, 910, 916, 3, 70, 35, 0, 911, 916, 3, 22, 11, 0, 912, 916, 3, 24, 12, 0, 913, 914, 5, 297, 0, 0, 914, 916, 3, 54, 27, 0, 915, 902, 1, 0, 0, 0, 915, 904, 1, 0, 0, 0, 915, 907, 1, 0, 0, 0, 915, 908, 1, 0, 0, 0, 915, 909, 1, 0, 0, 0, 915, 910, 1, 0, 0, 0, 915, 911, 1, 0, 0, 0, 915, 912, 1, 0, 0, 0, 915, 913, 1, 0, 0, 0, 916, 919, 1, 0, 0, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 920, 1, 0, 0, 0, 919, 917, 1, 0, 0, 0, 920, 921, 5, 20, 0, 0, 921, 922, 3, 26, 13, 0, 922, 1338, 1, 0, 0, 0, 923, 925, 5, 96, 0, 0, 924, 926, 5, 298, 0, 0, 925, 924, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 929, 5, 125, 0, 0, 928, 930, 3, 192, 96, 0, 929, 928, 1, 0, 0, 0, 929, 930, 1, 0, 0, 0, 930, 931, 1, 0, 0, 0, 931, 1338, 3, 366, 183, 0, 932, 935, 5, 81, 0, 0, 933, 934, 5, 208, 0, 0, 934, 936, 5, 244, 0, 0, 935, 933, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 1, 0, 0, 0, 937, 939, 5, 336, 0, 0, 938, 937, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 940, 1, 0, 0, 0, 940, 942, 3, 366, 183, 0, 941, 943, 3, 318, 159, 0, 942, 941, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 945, 1, 0, 0, 0, 944, 946, 3, 332, 166, 0, 945, 944, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 1338, 1, 0, 0, 0, 947, 948, 5, 96, 0, 0, 948, 949, 5, 298, 0, 0, 949, 951, 5, 336, 0, 0, 950, 952, 3, 192, 96, 0, 951, 950, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 956, 1, 0, 0, 0, 953, 957, 3, 86, 43, 0, 954, 957, 3, 90, 45, 0, 955, 957, 3, 366, 183, 0, 956, 953, 1, 0, 0, 0, 956, 954, 1, 0, 0, 0, 956, 955, 1, 0, 0, 0, 957, 1338, 1, 0, 0, 0, 958, 960, 5, 106, 0, 0, 959, 961, 7, 5, 0, 0, 960, 959, 1, 0, 0, 0, 960, 961, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 1338, 3, 4, 2, 0, 963, 964, 5, 273, 0, 0, 964, 967, 5, 294, 0, 0, 965, 966, 7, 2, 0, 0, 966, 968, 3, 80, 40, 0, 967, 965, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 973, 1, 0, 0, 0, 969, 971, 5, 163, 0, 0, 970, 969, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 1, 0, 0, 0, 972, 974, 3, 388, 194, 0, 973, 970, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 1338, 1, 0, 0, 0, 975, 976, 5, 273, 0, 0, 976, 977, 5, 293, 0, 0, 977, 980, 5, 108, 0, 0, 978, 979, 7, 2, 0, 0, 979, 981, 3, 80, 40, 0, 980, 978, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 983, 5, 163, 0, 0, 983, 985, 3, 388, 194, 0, 984, 986, 3, 32, 16, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 1338, 1, 0, 0, 0, 987, 988, 5, 273, 0, 0, 988, 989, 5, 297, 0, 0, 989, 994, 3, 86, 43, 0, 990, 991, 5, 2, 0, 0, 991, 992, 3, 58, 29, 0, 992, 993, 5, 3, 0, 0, 993, 995, 1, 0, 0, 0, 994, 990, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 1338, 1, 0, 0, 0, 996, 997, 5, 273, 0, 0, 997, 998, 5, 50, 0, 0, 998, 999, 7, 2, 0, 0, 999, 1002, 3, 86, 43, 0, 1000, 1001, 7, 2, 0, 0, 1001, 1003, 3, 80, 40, 0, 1002, 1000, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 1338, 1, 0, 0, 0, 1004, 1005, 5, 273, 0, 0, 1005, 1008, 5, 339, 0, 0, 1006, 1007, 7, 2, 0, 0, 1007, 1009, 3, 80, 40, 0, 1008, 1006, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1014, 1, 0, 0, 0, 1010, 1012, 5, 163, 0, 0, 1011, 1010, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1015, 3, 388, 194, 0, 1014, 1011, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1338, 1, 0, 0, 0, 1016, 1017, 5, 273, 0, 0, 1017, 1018, 5, 219, 0, 0, 1018, 1020, 3, 86, 43, 0, 1019, 1021, 3, 32, 16, 0, 1020, 1019, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1338, 1, 0, 0, 0, 1022, 1024, 5, 273, 0, 0, 1023, 1025, 3, 148, 74, 0, 1024, 1023, 1, 0, 0, 0, 1024, 1025, 1, 0, 0, 0, 1025, 1026, 1, 0, 0, 0, 1026, 1029, 5, 126, 0, 0, 1027, 1028, 7, 2, 0, 0, 1028, 1030, 3, 80, 40, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1038, 1, 0, 0, 0, 1031, 1033, 5, 163, 0, 0, 1032, 1031, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1036, 1, 0, 0, 0, 1034, 1037, 3, 246, 123, 0, 1035, 1037, 3, 388, 194, 0, 1036, 1034, 1, 0, 0, 0, 1036, 1035, 1, 0, 0, 0, 1037, 1039, 1, 0, 0, 0, 1038, 1032, 1, 0, 0, 0, 1038, 1039, 1, 0, 0, 0, 1039, 1338, 1, 0, 0, 0, 1040, 1041, 5, 273, 0, 0, 1041, 1042, 5, 59, 0, 0, 1042, 1043, 5, 293, 0, 0, 1043, 1046, 3, 86, 43, 0, 1044, 1045, 5, 20, 0, 0, 1045, 1047, 5, 266, 0, 0, 1046, 1044, 1, 0, 0, 0, 1046, 1047, 1, 0, 0, 0, 1047, 1338, 1, 0, 0, 0, 1048, 1049, 5, 273, 0, 0, 1049, 1050, 5, 62, 0, 0, 1050, 1338, 3, 36, 18, 0, 1051, 1052, 5, 273, 0, 0, 1052, 1057, 5, 38, 0, 0, 1053, 1055, 5, 163, 0, 0, 1054, 1053, 1, 0, 0, 0, 1054, 1055, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1058, 3, 388, 194, 0, 1057, 1054, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1338, 1, 0, 0, 0, 1059, 1060, 5, 273, 0, 0, 1060, 1061, 5, 176, 0, 0, 1061, 1064, 5, 339, 0, 0, 1062, 1063, 7, 2, 0, 0, 1063, 1065, 3, 80, 40, 0, 1064, 1062, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1070, 1, 0, 0, 0, 1066, 1068, 5, 163, 0, 0, 1067, 1066, 1, 0, 0, 0, 1067, 1068, 1, 0, 0, 0, 1068, 1069, 1, 0, 0, 0, 1069, 1071, 3, 388, 194, 0, 1070, 1067, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1338, 1, 0, 0, 0, 1072, 1073, 5, 273, 0, 0, 1073, 1074, 5, 59, 0, 0, 1074, 1075, 5, 176, 0, 0, 1075, 1076, 5, 338, 0, 0, 1076, 1079, 3, 90, 45, 0, 1077, 1078, 5, 20, 0, 0, 1078, 1080, 5, 266, 0, 0, 1079, 1077, 1, 0, 0, 0, 1079, 1080, 1, 0, 0, 0, 1080, 1338, 1, 0, 0, 0, 1081, 1082, 7, 6, 0, 0, 1082, 1084, 5, 125, 0, 0, 1083, 1085, 5, 108, 0, 0, 1084, 1083, 1, 0, 0, 0, 1084, 1085, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1338, 3, 40, 20, 0, 1087, 1088, 7, 6, 0, 0, 1088, 1090, 5, 72, 0, 0, 1089, 1091, 5, 108, 0, 0, 1090, 1089, 1, 0, 0, 0, 1090, 1091, 1, 0, 0, 0, 1091, 1092, 1, 0, 0, 0, 1092, 1338, 3, 80, 40, 0, 1093, 1095, 7, 6, 0, 0, 1094, 1096, 5, 293, 0, 0, 1095, 1094, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1098, 1, 0, 0, 0, 1097, 1099, 7, 7, 0, 0, 1098, 1097, 1, 0, 0, 0, 1098, 1099, 1, 0, 0, 0, 1099, 1100, 1, 0, 0, 0, 1100, 1102, 3, 86, 43, 0, 1101, 1103, 3, 32, 16, 0, 1102, 1101, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1105, 1, 0, 0, 0, 1104, 1106, 3, 42, 21, 0, 1105, 1104, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1338, 1, 0, 0, 0, 1107, 1109, 7, 6, 0, 0, 1108, 1110, 5, 232, 0, 0, 1109, 1108, 1, 0, 0, 0, 1109, 1110, 1, 0, 0, 0, 1110, 1111, 1, 0, 0, 0, 1111, 1338, 3, 26, 13, 0, 1112, 1113, 5, 51, 0, 0, 1113, 1114, 5, 203, 0, 0, 1114, 1115, 3, 36, 18, 0, 1115, 1116, 3, 80, 40, 0, 1116, 1117, 5, 153, 0, 0, 1117, 1118, 3, 390, 195, 0, 1118, 1338, 1, 0, 0, 0, 1119, 1120, 5, 51, 0, 0, 1120, 1121, 5, 203, 0, 0, 1121, 1122, 5, 293, 0, 0, 1122, 1123, 3, 86, 43, 0, 1123, 1124, 5, 153, 0, 0, 1124, 1125, 3, 390, 195, 0, 1125, 1338, 1, 0, 0, 0, 1126, 1127, 5, 240, 0, 0, 1127, 1128, 5, 293, 0, 0, 1128, 1338, 3, 86, 43, 0, 1129, 1130, 5, 240, 0, 0, 1130, 1131, 5, 125, 0, 0, 1131, 1338, 3, 366, 183, 0, 1132, 1140, 5, 240, 0, 0, 1133, 1141, 3, 388, 194, 0, 1134, 1136, 9, 0, 0, 0, 1135, 1134, 1, 0, 0, 0, 1136, 1139, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1137, 1135, 1, 0, 0, 0, 1138, 1141, 1, 0, 0, 0, 1139, 1137, 1, 0, 0, 0, 1140, 1133, 1, 0, 0, 0, 1140, 1137, 1, 0, 0, 0, 1141, 1338, 1, 0, 0, 0, 1142, 1143, 5, 240, 0, 0, 1143, 1144, 5, 176, 0, 0, 1144, 1145, 5, 338, 0, 0, 1145, 1338, 3, 90, 45, 0, 1146, 1148, 5, 33, 0, 0, 1147, 1149, 5, 159, 0, 0, 1148, 1147, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1150, 1, 0, 0, 0, 1150, 1151, 5, 293, 0, 0, 1151, 1154, 3, 86, 43, 0, 1152, 1153, 5, 207, 0, 0, 1153, 1155, 3, 54, 27, 0, 1154, 1152, 1, 0, 0, 0, 1154, 1155, 1, 0, 0, 0, 1155, 1160, 1, 0, 0, 0, 1156, 1158, 5, 20, 0, 0, 1157, 1156, 1, 0, 0, 0, 1157, 1158, 1, 0, 0, 0, 1158, 1159, 1, 0, 0, 0, 1159, 1161, 3, 26, 13, 0, 1160, 1157, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1338, 1, 0, 0, 0, 1162, 1163, 5, 322, 0, 0, 1163, 1165, 5, 293, 0, 0, 1164, 1166, 3, 192, 96, 0, 1165, 1164, 1, 0, 0, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1167, 1, 0, 0, 0, 1167, 1338, 3, 86, 43, 0, 1168, 1169, 5, 43, 0, 0, 1169, 1338, 5, 33, 0, 0, 1170, 1171, 5, 168, 0, 0, 1171, 1173, 5, 70, 0, 0, 1172, 1174, 5, 169, 0, 0, 1173, 1172, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1175, 1, 0, 0, 0, 1175, 1176, 5, 145, 0, 0, 1176, 1178, 3, 388, 194, 0, 1177, 1179, 5, 216, 0, 0, 1178, 1177, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1180, 1, 0, 0, 0, 1180, 1181, 5, 152, 0, 0, 1181, 1182, 5, 293, 0, 0, 1182, 1184, 3, 86, 43, 0, 1183, 1185, 3, 32, 16, 0, 1184, 1183, 1, 0, 0, 0, 1184, 1185, 1, 0, 0, 0, 1185, 1338, 1, 0, 0, 0, 1186, 1187, 5, 317, 0, 0, 1187, 1188, 5, 293, 0, 0, 1188, 1190, 3, 86, 43, 0, 1189, 1191, 3, 32, 16, 0, 1190, 1189, 1, 0, 0, 0, 1190, 1191, 1, 0, 0, 0, 1191, 1338, 1, 0, 0, 0, 1192, 1194, 5, 188, 0, 0, 1193, 1192, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1196, 5, 242, 0, 0, 1196, 1197, 5, 293, 0, 0, 1197, 1200, 3, 86, 43, 0, 1198, 1199, 7, 8, 0, 0, 1199, 1201, 5, 219, 0, 0, 1200, 1198, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1201, 1338, 1, 0, 0, 0, 1202, 1203, 7, 9, 0, 0, 1203, 1207, 3, 376, 188, 0, 1204, 1206, 9, 0, 0, 0, 1205, 1204, 1, 0, 0, 0, 1206, 1209, 1, 0, 0, 0, 1207, 1208, 1, 0, 0, 0, 1207, 1205, 1, 0, 0, 0, 1208, 1338, 1, 0, 0, 0, 1209, 1207, 1, 0, 0, 0, 1210, 1211, 5, 269, 0, 0, 1211, 1215, 5, 253, 0, 0, 1212, 1214, 9, 0, 0, 0, 1213, 1212, 1, 0, 0, 0, 1214, 1217, 1, 0, 0, 0, 1215, 1216, 1, 0, 0, 0, 1215, 1213, 1, 0, 0, 0, 1216, 1338, 1, 0, 0, 0, 1217, 1215, 1, 0, 0, 0, 1218, 1219, 5, 269, 0, 0, 1219, 1220, 5, 301, 0, 0, 1220, 1221, 5, 350, 0, 0, 1221, 1338, 3, 298, 149, 0, 1222, 1223, 5, 269, 0, 0, 1223, 1224, 5, 301, 0, 0, 1224, 1225, 5, 350, 0, 0, 1225, 1338, 3, 6, 3, 0, 1226, 1227, 5, 269, 0, 0, 1227, 1228, 5, 301, 0, 0, 1228, 1232, 5, 350, 0, 0, 1229, 1231, 9, 0, 0, 0, 1230, 1229, 1, 0, 0, 0, 1231, 1234, 1, 0, 0, 0, 1232, 1233, 1, 0, 0, 0, 1232, 1230, 1, 0, 0, 0, 1233, 1338, 1, 0, 0, 0, 1234, 1232, 1, 0, 0, 0, 1235, 1236, 5, 269, 0, 0, 1236, 1237, 7, 10, 0, 0, 1237, 1338, 3, 134, 67, 0, 1238, 1239, 5, 269, 0, 0, 1239, 1240, 7, 10, 0, 0, 1240, 1241, 5, 2, 0, 0, 1241, 1242, 3, 244, 122, 0, 1242, 1243, 5, 3, 0, 0, 1243, 1244, 5, 352, 0, 0, 1244, 1245, 5, 2, 0, 0, 1245, 1246, 3, 26, 13, 0, 1246, 1247, 5, 3, 0, 0, 1247, 1338, 1, 0, 0, 0, 1248, 1249, 5, 269, 0, 0, 1249, 1250, 3, 8, 4, 0, 1250, 1251, 5, 352, 0, 0, 1251, 1252, 3, 10, 5, 0, 1252, 1338, 1, 0, 0, 0, 1253, 1254, 5, 269, 0, 0, 1254, 1262, 3, 8, 4, 0, 1255, 1259, 5, 352, 0, 0, 1256, 1258, 9, 0, 0, 0, 1257, 1256, 1, 0, 0, 0, 1258, 1261, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1259, 1257, 1, 0, 0, 0, 1260, 1263, 1, 0, 0, 0, 1261, 1259, 1, 0, 0, 0, 1262, 1255, 1, 0, 0, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1338, 1, 0, 0, 0, 1264, 1268, 5, 269, 0, 0, 1265, 1267, 9, 0, 0, 0, 1266, 1265, 1, 0, 0, 0, 1267, 1270, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1268, 1266, 1, 0, 0, 0, 1269, 1271, 1, 0, 0, 0, 1270, 1268, 1, 0, 0, 0, 1271, 1272, 5, 352, 0, 0, 1272, 1338, 3, 10, 5, 0, 1273, 1277, 5, 269, 0, 0, 1274, 1276, 9, 0, 0, 0, 1275, 1274, 1, 0, 0, 0, 1276, 1279, 1, 0, 0, 0, 1277, 1278, 1, 0, 0, 0, 1277, 1275, 1, 0, 0, 0, 1278, 1338, 1, 0, 0, 0, 1279, 1277, 1, 0, 0, 0, 1280, 1281, 5, 245, 0, 0, 1281, 1338, 3, 8, 4, 0, 1282, 1286, 5, 245, 0, 0, 1283, 1285, 9, 0, 0, 0, 1284, 1283, 1, 0, 0, 0, 1285, 1288, 1, 0, 0, 0, 1286, 1287, 1, 0, 0, 0, 1286, 1284, 1, 0, 0, 0, 1287, 1338, 1, 0, 0, 0, 1288, 1286, 1, 0, 0, 0, 1289, 1290, 5, 59, 0, 0, 1290, 1292, 5, 142, 0, 0, 1291, 1293, 3, 190, 95, 0, 1292, 1291, 1, 0, 0, 0, 1292, 1293, 1, 0, 0, 0, 1293, 1294, 1, 0, 0, 0, 1294, 1295, 3, 376, 188, 0, 1295, 1297, 5, 203, 0, 0, 1296, 1298, 5, 293, 0, 0, 1297, 1296, 1, 0, 0, 0, 1297, 1298, 1, 0, 0, 0, 1298, 1299, 1, 0, 0, 0, 1299, 1302, 3, 86, 43, 0, 1300, 1301, 5, 332, 0, 0, 1301, 1303, 3, 376, 188, 0, 1302, 1300, 1, 0, 0, 0, 1302, 1303, 1, 0, 0, 0, 1303, 1304, 1, 0, 0, 0, 1304, 1305, 5, 2, 0, 0, 1305, 1306, 3, 248, 124, 0, 1306, 1309, 5, 3, 0, 0, 1307, 1308, 5, 207, 0, 0, 1308, 1310, 3, 54, 27, 0, 1309, 1307, 1, 0, 0, 0, 1309, 1310, 1, 0, 0, 0, 1310, 1338, 1, 0, 0, 0, 1311, 1312, 5, 96, 0, 0, 1312, 1314, 5, 142, 0, 0, 1313, 1315, 3, 192, 96, 0, 1314, 1313, 1, 0, 0, 0, 1314, 1315, 1, 0, 0, 0, 1315, 1316, 1, 0, 0, 0, 1316, 1317, 3, 376, 188, 0, 1317, 1319, 5, 203, 0, 0, 1318, 1320, 5, 293, 0, 0, 1319, 1318, 1, 0, 0, 0, 1319, 1320, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1322, 3, 86, 43, 0, 1322, 1338, 1, 0, 0, 0, 1323, 1324, 5, 205, 0, 0, 1324, 1326, 3, 86, 43, 0, 1325, 1327, 3, 138, 69, 0, 1326, 1325, 1, 0, 0, 0, 1326, 1327, 1, 0, 0, 0, 1327, 1328, 1, 0, 0, 0, 1328, 1329, 3, 354, 177, 0, 1329, 1338, 1, 0, 0, 0, 1330, 1334, 3, 12, 6, 0, 1331, 1333, 9, 0, 0, 0, 1332, 1331, 1, 0, 0, 0, 1333, 1336, 1, 0, 0, 0, 1334, 1335, 1, 0, 0, 0, 1334, 1332, 1, 0, 0, 0, 1335, 1338, 1, 0, 0, 0, 1336, 1334, 1, 0, 0, 0, 1337, 412, 1, 0, 0, 0, 1337, 414, 1, 0, 0, 0, 1337, 417, 1, 0, 0, 0, 1337, 422, 1, 0, 0, 0, 1337, 428, 1, 0, 0, 0, 1337, 444, 1, 0, 0, 0, 1337, 451, 1, 0, 0, 0, 1337, 457, 1, 0, 0, 0, 1337, 466, 1, 0, 0, 0, 1337, 478, 1, 0, 0, 0, 1337, 495, 1, 0, 0, 0, 1337, 515, 1, 0, 0, 0, 1337, 532, 1, 0, 0, 0, 1337, 549, 1, 0, 0, 0, 1337, 560, 1, 0, 0, 0, 1337, 567, 1, 0, 0, 0, 1337, 576, 1, 0, 0, 0, 1337, 585, 1, 0, 0, 0, 1337, 595, 1, 0, 0, 0, 1337, 607, 1, 0, 0, 0, 1337, 618, 1, 0, 0, 0, 1337, 629, 1, 0, 0, 0, 1337, 643, 1, 0, 0, 0, 1337, 654, 1, 0, 0, 0, 1337, 669, 1, 0, 0, 0, 1337, 681, 1, 0, 0, 0, 1337, 695, 1, 0, 0, 0, 1337, 705, 1, 0, 0, 0, 1337, 721, 1, 0, 0, 0, 1337, 729, 1, 0, 0, 0, 1337, 751, 1, 0, 0, 0, 1337, 760, 1, 0, 0, 0, 1337, 766, 1, 0, 0, 0, 1337, 773, 1, 0, 0, 0, 1337, 781, 1, 0, 0, 0, 1337, 790, 1, 0, 0, 0, 1337, 796, 1, 0, 0, 0, 1337, 803, 1, 0, 0, 0, 1337, 836, 1, 0, 0, 0, 1337, 858, 1, 0, 0, 0, 1337, 866, 1, 0, 0, 0, 1337, 892, 1, 0, 0, 0, 1337, 923, 1, 0, 0, 0, 1337, 932, 1, 0, 0, 0, 1337, 947, 1, 0, 0, 0, 1337, 958, 1, 0, 0, 0, 1337, 963, 1, 0, 0, 0, 1337, 975, 1, 0, 0, 0, 1337, 987, 1, 0, 0, 0, 1337, 996, 1, 0, 0, 0, 1337, 1004, 1, 0, 0, 0, 1337, 1016, 1, 0, 0, 0, 1337, 1022, 1, 0, 0, 0, 1337, 1040, 1, 0, 0, 0, 1337, 1048, 1, 0, 0, 0, 1337, 1051, 1, 0, 0, 0, 1337, 1059, 1, 0, 0, 0, 1337, 1072, 1, 0, 0, 0, 1337, 1081, 1, 0, 0, 0, 1337, 1087, 1, 0, 0, 0, 1337, 1093, 1, 0, 0, 0, 1337, 1107, 1, 0, 0, 0, 1337, 1112, 1, 0, 0, 0, 1337, 1119, 1, 0, 0, 0, 1337, 1126, 1, 0, 0, 0, 1337, 1129, 1, 0, 0, 0, 1337, 1132, 1, 0, 0, 0, 1337, 1142, 1, 0, 0, 0, 1337, 1146, 1, 0, 0, 0, 1337, 1162, 1, 0, 0, 0, 1337, 1168, 1, 0, 0, 0, 1337, 1170, 1, 0, 0, 0, 1337, 1186, 1, 0, 0, 0, 1337, 1193, 1, 0, 0, 0, 1337, 1202, 1, 0, 0, 0, 1337, 1210, 1, 0, 0, 0, 1337, 1218, 1, 0, 0, 0, 1337, 1222, 1, 0, 0, 0, 1337, 1226, 1, 0, 0, 0, 1337, 1235, 1, 0, 0, 0, 1337, 1238, 1, 0, 0, 0, 1337, 1248, 1, 0, 0, 0, 1337, 1253, 1, 0, 0, 0, 1337, 1264, 1, 0, 0, 0, 1337, 1273, 1, 0, 0, 0, 1337, 1280, 1, 0, 0, 0, 1337, 1282, 1, 0, 0, 0, 1337, 1289, 1, 0, 0, 0, 1337, 1311, 1, 0, 0, 0, 1337, 1323, 1, 0, 0, 0, 1337, 1330, 1, 0, 0, 0, 1338, 5, 1, 0, 0, 0, 1339, 1342, 3, 388, 194, 0, 1340, 1342, 5, 169, 0, 0, 1341, 1339, 1, 0, 0, 0, 1341, 1340, 1, 0, 0, 0, 1342, 7, 1, 0, 0, 0, 1343, 1344, 3, 380, 190, 0, 1344, 9, 1, 0, 0, 0, 1345, 1346, 3, 382, 191, 0, 1346, 11, 1, 0, 0, 0, 1347, 1348, 5, 59, 0, 0, 1348, 1516, 5, 253, 0, 0, 1349, 1350, 5, 96, 0, 0, 1350, 1516, 5, 253, 0, 0, 1351, 1353, 5, 129, 0, 0, 1352, 1354, 5, 253, 0, 0, 1353, 1352, 1, 0, 0, 0, 1353, 1354, 1, 0, 0, 0, 1354, 1516, 1, 0, 0, 0, 1355, 1357, 5, 249, 0, 0, 1356, 1358, 5, 253, 0, 0, 1357, 1356, 1, 0, 0, 0, 1357, 1358, 1, 0, 0, 0, 1358, 1516, 1, 0, 0, 0, 1359, 1360, 5, 273, 0, 0, 1360, 1516, 5, 129, 0, 0, 1361, 1362, 5, 273, 0, 0, 1362, 1364, 5, 253, 0, 0, 1363, 1365, 5, 129, 0, 0, 1364, 1363, 1, 0, 0, 0, 1364, 1365, 1, 0, 0, 0, 1365, 1516, 1, 0, 0, 0, 1366, 1367, 5, 273, 0, 0, 1367, 1516, 5, 228, 0, 0, 1368, 1369, 5, 273, 0, 0, 1369, 1516, 5, 254, 0, 0, 1370, 1371, 5, 273, 0, 0, 1371, 1372, 5, 62, 0, 0, 1372, 1516, 5, 254, 0, 0, 1373, 1374, 5, 107, 0, 0, 1374, 1516, 5, 293, 0, 0, 1375, 1376, 5, 139, 0, 0, 1376, 1516, 5, 293, 0, 0, 1377, 1378, 5, 273, 0, 0, 1378, 1516, 5, 54, 0, 0, 1379, 1380, 5, 273, 0, 0, 1380, 1381, 5, 59, 0, 0, 1381, 1516, 5, 293, 0, 0, 1382, 1383, 5, 273, 0, 0, 1383, 1516, 5, 313, 0, 0, 1384, 1385, 5, 273, 0, 0, 1385, 1516, 5, 143, 0, 0, 1386, 1387, 5, 273, 0, 0, 1387, 1516, 5, 172, 0, 0, 1388, 1389, 5, 59, 0, 0, 1389, 1516, 5, 142, 0, 0, 1390, 1391, 5, 96, 0, 0, 1391, 1516, 5, 142, 0, 0, 1392, 1393, 5, 11, 0, 0, 1393, 1516, 5, 142, 0, 0, 1394, 1395, 5, 171, 0, 0, 1395, 1516, 5, 293, 0, 0, 1396, 1397, 5, 171, 0, 0, 1397, 1516, 5, 72, 0, 0, 1398, 1399, 5, 326, 0, 0, 1399, 1516, 5, 293, 0, 0, 1400, 1401, 5, 326, 0, 0, 1401, 1516, 5, 72, 0, 0, 1402, 1403, 5, 59, 0, 0, 1403, 1404, 5, 298, 0, 0, 1404, 1516, 5, 175, 0, 0, 1405, 1406, 5, 96, 0, 0, 1406, 1407, 5, 298, 0, 0, 1407, 1516, 5, 175, 0, 0, 1408, 1409, 5, 11, 0, 0, 1409, 1410, 5, 293, 0, 0, 1410, 1411, 3, 86, 43, 0, 1411, 1412, 5, 197, 0, 0, 1412, 1413, 5, 45, 0, 0, 1413, 1516, 1, 0, 0, 0, 1414, 1415, 5, 11, 0, 0, 1415, 1416, 5, 293, 0, 0, 1416, 1417, 3, 86, 43, 0, 1417, 1418, 5, 45, 0, 0, 1418, 1419, 5, 31, 0, 0, 1419, 1516, 1, 0, 0, 0, 1420, 1421, 5, 11, 0, 0, 1421, 1422, 5, 293, 0, 0, 1422, 1423, 3, 86, 43, 0, 1423, 1424, 5, 197, 0, 0, 1424, 1425, 5, 279, 0, 0, 1425, 1516, 1, 0, 0, 0, 1426, 1427, 5, 11, 0, 0, 1427, 1428, 5, 293, 0, 0, 1428, 1429, 3, 86, 43, 0, 1429, 1430, 5, 275, 0, 0, 1430, 1431, 5, 31, 0, 0, 1431, 1516, 1, 0, 0, 0, 1432, 1433, 5, 11, 0, 0, 1433, 1434, 5, 293, 0, 0, 1434, 1435, 3, 86, 43, 0, 1435, 1436, 5, 197, 0, 0, 1436, 1437, 5, 275, 0, 0, 1437, 1516, 1, 0, 0, 0, 1438, 1439, 5, 11, 0, 0, 1439, 1440, 5, 293, 0, 0, 1440, 1441, 3, 86, 43, 0, 1441, 1442, 5, 197, 0, 0, 1442, 1443, 5, 283, 0, 0, 1443, 1444, 5, 20, 0, 0, 1444, 1445, 5, 89, 0, 0, 1445, 1516, 1, 0, 0, 0, 1446, 1447, 5, 11, 0, 0, 1447, 1448, 5, 293, 0, 0, 1448, 1449, 3, 86, 43, 0, 1449, 1450, 5, 269, 0, 0, 1450, 1451, 5, 275, 0, 0, 1451, 1452, 5, 170, 0, 0, 1452, 1516, 1, 0, 0, 0, 1453, 1454, 5, 11, 0, 0, 1454, 1455, 5, 293, 0, 0, 1455, 1456, 3, 86, 43, 0, 1456, 1457, 5, 103, 0, 0, 1457, 1458, 5, 217, 0, 0, 1458, 1516, 1, 0, 0, 0, 1459, 1460, 5, 11, 0, 0, 1460, 1461, 5, 293, 0, 0, 1461, 1462, 3, 86, 43, 0, 1462, 1463, 5, 18, 0, 0, 1463, 1464, 5, 217, 0, 0, 1464, 1516, 1, 0, 0, 0, 1465, 1466, 5, 11, 0, 0, 1466, 1467, 5, 293, 0, 0, 1467, 1468, 3, 86, 43, 0, 1468, 1469, 5, 320, 0, 0, 1469, 1470, 5, 217, 0, 0, 1470, 1516, 1, 0, 0, 0, 1471, 1472, 5, 11, 0, 0, 1472, 1473, 5, 293, 0, 0, 1473, 1474, 3, 86, 43, 0, 1474, 1475, 5, 310, 0, 0, 1475, 1516, 1, 0, 0, 0, 1476, 1477, 5, 11, 0, 0, 1477, 1478, 5, 293, 0, 0, 1478, 1480, 3, 86, 43, 0, 1479, 1481, 3, 32, 16, 0, 1480, 1479, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1482, 1, 0, 0, 0, 1482, 1483, 5, 53, 0, 0, 1483, 1516, 1, 0, 0, 0, 1484, 1485, 5, 11, 0, 0, 1485, 1486, 5, 293, 0, 0, 1486, 1488, 3, 86, 43, 0, 1487, 1489, 3, 32, 16, 0, 1488, 1487, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1491, 5, 56, 0, 0, 1491, 1516, 1, 0, 0, 0, 1492, 1493, 5, 11, 0, 0, 1493, 1494, 5, 293, 0, 0, 1494, 1496, 3, 86, 43, 0, 1495, 1497, 3, 32, 16, 0, 1496, 1495, 1, 0, 0, 0, 1496, 1497, 1, 0, 0, 0, 1497, 1498, 1, 0, 0, 0, 1498, 1499, 5, 269, 0, 0, 1499, 1500, 5, 115, 0, 0, 1500, 1516, 1, 0, 0, 0, 1501, 1502, 5, 11, 0, 0, 1502, 1503, 5, 293, 0, 0, 1503, 1505, 3, 86, 43, 0, 1504, 1506, 3, 32, 16, 0, 1505, 1504, 1, 0, 0, 0, 1505, 1506, 1, 0, 0, 0, 1506, 1507, 1, 0, 0, 0, 1507, 1508, 5, 244, 0, 0, 1508, 1509, 5, 50, 0, 0, 1509, 1516, 1, 0, 0, 0, 1510, 1511, 5, 281, 0, 0, 1511, 1516, 5, 312, 0, 0, 1512, 1516, 5, 52, 0, 0, 1513, 1516, 5, 255, 0, 0, 1514, 1516, 5, 88, 0, 0, 1515, 1347, 1, 0, 0, 0, 1515, 1349, 1, 0, 0, 0, 1515, 1351, 1, 0, 0, 0, 1515, 1355, 1, 0, 0, 0, 1515, 1359, 1, 0, 0, 0, 1515, 1361, 1, 0, 0, 0, 1515, 1366, 1, 0, 0, 0, 1515, 1368, 1, 0, 0, 0, 1515, 1370, 1, 0, 0, 0, 1515, 1373, 1, 0, 0, 0, 1515, 1375, 1, 0, 0, 0, 1515, 1377, 1, 0, 0, 0, 1515, 1379, 1, 0, 0, 0, 1515, 1382, 1, 0, 0, 0, 1515, 1384, 1, 0, 0, 0, 1515, 1386, 1, 0, 0, 0, 1515, 1388, 1, 0, 0, 0, 1515, 1390, 1, 0, 0, 0, 1515, 1392, 1, 0, 0, 0, 1515, 1394, 1, 0, 0, 0, 1515, 1396, 1, 0, 0, 0, 1515, 1398, 1, 0, 0, 0, 1515, 1400, 1, 0, 0, 0, 1515, 1402, 1, 0, 0, 0, 1515, 1405, 1, 0, 0, 0, 1515, 1408, 1, 0, 0, 0, 1515, 1414, 1, 0, 0, 0, 1515, 1420, 1, 0, 0, 0, 1515, 1426, 1, 0, 0, 0, 1515, 1432, 1, 0, 0, 0, 1515, 1438, 1, 0, 0, 0, 1515, 1446, 1, 0, 0, 0, 1515, 1453, 1, 0, 0, 0, 1515, 1459, 1, 0, 0, 0, 1515, 1465, 1, 0, 0, 0, 1515, 1471, 1, 0, 0, 0, 1515, 1476, 1, 0, 0, 0, 1515, 1484, 1, 0, 0, 0, 1515, 1492, 1, 0, 0, 0, 1515, 1501, 1, 0, 0, 0, 1515, 1510, 1, 0, 0, 0, 1515, 1512, 1, 0, 0, 0, 1515, 1513, 1, 0, 0, 0, 1515, 1514, 1, 0, 0, 0, 1516, 13, 1, 0, 0, 0, 1517, 1519, 5, 59, 0, 0, 1518, 1520, 5, 298, 0, 0, 1519, 1518, 1, 0, 0, 0, 1519, 1520, 1, 0, 0, 0, 1520, 1522, 1, 0, 0, 0, 1521, 1523, 5, 109, 0, 0, 1522, 1521, 1, 0, 0, 0, 1522, 1523, 1, 0, 0, 0, 1523, 1524, 1, 0, 0, 0, 1524, 1526, 5, 293, 0, 0, 1525, 1527, 3, 190, 95, 0, 1526, 1525, 1, 0, 0, 0, 1526, 1527, 1, 0, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 1529, 3, 84, 42, 0, 1529, 15, 1, 0, 0, 0, 1530, 1531, 5, 59, 0, 0, 1531, 1533, 5, 208, 0, 0, 1532, 1530, 1, 0, 0, 0, 1532, 1533, 1, 0, 0, 0, 1533, 1534, 1, 0, 0, 0, 1534, 1535, 5, 244, 0, 0, 1535, 1536, 5, 293, 0, 0, 1536, 1537, 3, 84, 42, 0, 1537, 17, 1, 0, 0, 0, 1538, 1539, 5, 45, 0, 0, 1539, 1540, 5, 31, 0, 0, 1540, 1544, 3, 212, 106, 0, 1541, 1542, 5, 279, 0, 0, 1542, 1543, 5, 31, 0, 0, 1543, 1545, 3, 216, 108, 0, 1544, 1541, 1, 0, 0, 0, 1544, 1545, 1, 0, 0, 0, 1545, 1546, 1, 0, 0, 0, 1546, 1547, 5, 152, 0, 0, 1547, 1548, 5, 382, 0, 0, 1548, 1549, 5, 30, 0, 0, 1549, 19, 1, 0, 0, 0, 1550, 1551, 5, 275, 0, 0, 1551, 1552, 5, 31, 0, 0, 1552, 1553, 3, 212, 106, 0, 1553, 1556, 5, 203, 0, 0, 1554, 1557, 3, 66, 33, 0, 1555, 1557, 3, 68, 34, 0, 1556, 1554, 1, 0, 0, 0, 1556, 1555, 1, 0, 0, 0, 1557, 1561, 1, 0, 0, 0, 1558, 1559, 5, 283, 0, 0, 1559, 1560, 5, 20, 0, 0, 1560, 1562, 5, 89, 0, 0, 1561, 1558, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 21, 1, 0, 0, 0, 1563, 1564, 5, 170, 0, 0, 1564, 1565, 3, 388, 194, 0, 1565, 23, 1, 0, 0, 0, 1566, 1567, 5, 51, 0, 0, 1567, 1568, 3, 388, 194, 0, 1568, 25, 1, 0, 0, 0, 1569, 1571, 3, 44, 22, 0, 1570, 1569, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1573, 3, 104, 52, 0, 1573, 1574, 3, 100, 50, 0, 1574, 27, 1, 0, 0, 0, 1575, 1576, 5, 147, 0, 0, 1576, 1578, 5, 216, 0, 0, 1577, 1579, 5, 293, 0, 0, 1578, 1577, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 1580, 1, 0, 0, 0, 1580, 1585, 3, 86, 43, 0, 1581, 1583, 3, 32, 16, 0, 1582, 1584, 3, 190, 95, 0, 1583, 1582, 1, 0, 0, 0, 1583, 1584, 1, 0, 0, 0, 1584, 1586, 1, 0, 0, 0, 1585, 1581, 1, 0, 0, 0, 1585, 1586, 1, 0, 0, 0, 1586, 1593, 1, 0, 0, 0, 1587, 1588, 5, 31, 0, 0, 1588, 1594, 5, 189, 0, 0, 1589, 1590, 5, 2, 0, 0, 1590, 1591, 3, 94, 47, 0, 1591, 1592, 5, 3, 0, 0, 1592, 1594, 1, 0, 0, 0, 1593, 1587, 1, 0, 0, 0, 1593, 1589, 1, 0, 0, 0, 1593, 1594, 1, 0, 0, 0, 1594, 1652, 1, 0, 0, 0, 1595, 1596, 5, 147, 0, 0, 1596, 1598, 5, 152, 0, 0, 1597, 1599, 5, 293, 0, 0, 1598, 1597, 1, 0, 0, 0, 1598, 1599, 1, 0, 0, 0, 1599, 1600, 1, 0, 0, 0, 1600, 1602, 3, 86, 43, 0, 1601, 1603, 3, 32, 16, 0, 1602, 1601, 1, 0, 0, 0, 1602, 1603, 1, 0, 0, 0, 1603, 1605, 1, 0, 0, 0, 1604, 1606, 3, 190, 95, 0, 1605, 1604, 1, 0, 0, 0, 1605, 1606, 1, 0, 0, 0, 1606, 1613, 1, 0, 0, 0, 1607, 1608, 5, 31, 0, 0, 1608, 1614, 5, 189, 0, 0, 1609, 1610, 5, 2, 0, 0, 1610, 1611, 3, 94, 47, 0, 1611, 1612, 5, 3, 0, 0, 1612, 1614, 1, 0, 0, 0, 1613, 1607, 1, 0, 0, 0, 1613, 1609, 1, 0, 0, 0, 1613, 1614, 1, 0, 0, 0, 1614, 1652, 1, 0, 0, 0, 1615, 1616, 5, 147, 0, 0, 1616, 1618, 5, 152, 0, 0, 1617, 1619, 5, 293, 0, 0, 1618, 1617, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1620, 1621, 3, 86, 43, 0, 1621, 1622, 5, 244, 0, 0, 1622, 1623, 3, 138, 69, 0, 1623, 1652, 1, 0, 0, 0, 1624, 1625, 5, 147, 0, 0, 1625, 1627, 5, 216, 0, 0, 1626, 1628, 5, 169, 0, 0, 1627, 1626, 1, 0, 0, 0, 1627, 1628, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 1630, 5, 90, 0, 0, 1630, 1632, 3, 388, 194, 0, 1631, 1633, 3, 242, 121, 0, 1632, 1631, 1, 0, 0, 0, 1632, 1633, 1, 0, 0, 0, 1633, 1635, 1, 0, 0, 0, 1634, 1636, 3, 70, 35, 0, 1635, 1634, 1, 0, 0, 0, 1635, 1636, 1, 0, 0, 0, 1636, 1652, 1, 0, 0, 0, 1637, 1638, 5, 147, 0, 0, 1638, 1640, 5, 216, 0, 0, 1639, 1641, 5, 169, 0, 0, 1640, 1639, 1, 0, 0, 0, 1640, 1641, 1, 0, 0, 0, 1641, 1642, 1, 0, 0, 0, 1642, 1644, 5, 90, 0, 0, 1643, 1645, 3, 388, 194, 0, 1644, 1643, 1, 0, 0, 0, 1644, 1645, 1, 0, 0, 0, 1645, 1646, 1, 0, 0, 0, 1646, 1649, 3, 48, 24, 0, 1647, 1648, 5, 207, 0, 0, 1648, 1650, 3, 54, 27, 0, 1649, 1647, 1, 0, 0, 0, 1649, 1650, 1, 0, 0, 0, 1650, 1652, 1, 0, 0, 0, 1651, 1575, 1, 0, 0, 0, 1651, 1595, 1, 0, 0, 0, 1651, 1615, 1, 0, 0, 0, 1651, 1624, 1, 0, 0, 0, 1651, 1637, 1, 0, 0, 0, 1652, 29, 1, 0, 0, 0, 1653, 1655, 3, 32, 16, 0, 1654, 1656, 3, 22, 11, 0, 1655, 1654, 1, 0, 0, 0, 1655, 1656, 1, 0, 0, 0, 1656, 31, 1, 0, 0, 0, 1657, 1658, 5, 217, 0, 0, 1658, 1659, 5, 2, 0, 0, 1659, 1664, 3, 34, 17, 0, 1660, 1661, 5, 4, 0, 0, 1661, 1663, 3, 34, 17, 0, 1662, 1660, 1, 0, 0, 0, 1663, 1666, 1, 0, 0, 0, 1664, 1662, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1667, 1, 0, 0, 0, 1666, 1664, 1, 0, 0, 0, 1667, 1668, 5, 3, 0, 0, 1668, 33, 1, 0, 0, 0, 1669, 1672, 3, 376, 188, 0, 1670, 1671, 5, 352, 0, 0, 1671, 1673, 3, 288, 144, 0, 1672, 1670, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 1679, 1, 0, 0, 0, 1674, 1675, 3, 376, 188, 0, 1675, 1676, 5, 352, 0, 0, 1676, 1677, 5, 82, 0, 0, 1677, 1679, 1, 0, 0, 0, 1678, 1669, 1, 0, 0, 0, 1678, 1674, 1, 0, 0, 0, 1679, 35, 1, 0, 0, 0, 1680, 1681, 7, 11, 0, 0, 1681, 37, 1, 0, 0, 0, 1682, 1683, 7, 12, 0, 0, 1683, 39, 1, 0, 0, 0, 1684, 1690, 3, 98, 49, 0, 1685, 1690, 3, 388, 194, 0, 1686, 1690, 3, 290, 145, 0, 1687, 1690, 3, 292, 146, 0, 1688, 1690, 3, 294, 147, 0, 1689, 1684, 1, 0, 0, 0, 1689, 1685, 1, 0, 0, 0, 1689, 1686, 1, 0, 0, 0, 1689, 1687, 1, 0, 0, 0, 1689, 1688, 1, 0, 0, 0, 1690, 41, 1, 0, 0, 0, 1691, 1696, 3, 376, 188, 0, 1692, 1693, 5, 5, 0, 0, 1693, 1695, 3, 376, 188, 0, 1694, 1692, 1, 0, 0, 0, 1695, 1698, 1, 0, 0, 0, 1696, 1694, 1, 0, 0, 0, 1696, 1697, 1, 0, 0, 0, 1697, 43, 1, 0, 0, 0, 1698, 1696, 1, 0, 0, 0, 1699, 1700, 5, 346, 0, 0, 1700, 1705, 3, 46, 23, 0, 1701, 1702, 5, 4, 0, 0, 1702, 1704, 3, 46, 23, 0, 1703, 1701, 1, 0, 0, 0, 1704, 1707, 1, 0, 0, 0, 1705, 1703, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 45, 1, 0, 0, 0, 1707, 1705, 1, 0, 0, 0, 1708, 1710, 3, 372, 186, 0, 1709, 1711, 3, 212, 106, 0, 1710, 1709, 1, 0, 0, 0, 1710, 1711, 1, 0, 0, 0, 1711, 1713, 1, 0, 0, 0, 1712, 1714, 5, 20, 0, 0, 1713, 1712, 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1715, 1, 0, 0, 0, 1715, 1716, 5, 2, 0, 0, 1716, 1717, 3, 26, 13, 0, 1717, 1718, 5, 3, 0, 0, 1718, 47, 1, 0, 0, 0, 1719, 1720, 5, 332, 0, 0, 1720, 1721, 3, 246, 123, 0, 1721, 49, 1, 0, 0, 0, 1722, 1723, 5, 207, 0, 0, 1723, 1737, 3, 62, 31, 0, 1724, 1725, 5, 218, 0, 0, 1725, 1726, 5, 31, 0, 0, 1726, 1737, 3, 260, 130, 0, 1727, 1737, 3, 20, 10, 0, 1728, 1737, 3, 18, 9, 0, 1729, 1737, 3, 242, 121, 0, 1730, 1737, 3, 70, 35, 0, 1731, 1737, 3, 22, 11, 0, 1732, 1737, 3, 24, 12, 0, 1733, 1734, 5, 297, 0, 0, 1734, 1737, 3, 54, 27, 0, 1735, 1737, 3, 52, 26, 0, 1736, 1722, 1, 0, 0, 0, 1736, 1724, 1, 0, 0, 0, 1736, 1727, 1, 0, 0, 0, 1736, 1728, 1, 0, 0, 0, 1736, 1729, 1, 0, 0, 0, 1736, 1730, 1, 0, 0, 0, 1736, 1731, 1, 0, 0, 0, 1736, 1732, 1, 0, 0, 0, 1736, 1733, 1, 0, 0, 0, 1736, 1735, 1, 0, 0, 0, 1737, 1740, 1, 0, 0, 0, 1738, 1736, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 51, 1, 0, 0, 0, 1740, 1738, 1, 0, 0, 0, 1741, 1742, 5, 162, 0, 0, 1742, 1743, 5, 382, 0, 0, 1743, 53, 1, 0, 0, 0, 1744, 1745, 5, 2, 0, 0, 1745, 1750, 3, 56, 28, 0, 1746, 1747, 5, 4, 0, 0, 1747, 1749, 3, 56, 28, 0, 1748, 1746, 1, 0, 0, 0, 1749, 1752, 1, 0, 0, 0, 1750, 1748, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1753, 1, 0, 0, 0, 1752, 1750, 1, 0, 0, 0, 1753, 1754, 5, 3, 0, 0, 1754, 55, 1, 0, 0, 0, 1755, 1760, 3, 58, 29, 0, 1756, 1758, 5, 352, 0, 0, 1757, 1756, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1759, 1, 0, 0, 0, 1759, 1761, 3, 60, 30, 0, 1760, 1757, 1, 0, 0, 0, 1760, 1761, 1, 0, 0, 0, 1761, 57, 1, 0, 0, 0, 1762, 1767, 3, 376, 188, 0, 1763, 1764, 5, 5, 0, 0, 1764, 1766, 3, 376, 188, 0, 1765, 1763, 1, 0, 0, 0, 1766, 1769, 1, 0, 0, 0, 1767, 1765, 1, 0, 0, 0, 1767, 1768, 1, 0, 0, 0, 1768, 1772, 1, 0, 0, 0, 1769, 1767, 1, 0, 0, 0, 1770, 1772, 3, 388, 194, 0, 1771, 1762, 1, 0, 0, 0, 1771, 1770, 1, 0, 0, 0, 1772, 59, 1, 0, 0, 0, 1773, 1778, 5, 382, 0, 0, 1774, 1778, 5, 384, 0, 0, 1775, 1778, 3, 296, 148, 0, 1776, 1778, 3, 388, 194, 0, 1777, 1773, 1, 0, 0, 0, 1777, 1774, 1, 0, 0, 0, 1777, 1775, 1, 0, 0, 0, 1777, 1776, 1, 0, 0, 0, 1778, 61, 1, 0, 0, 0, 1779, 1780, 5, 2, 0, 0, 1780, 1785, 3, 64, 32, 0, 1781, 1782, 5, 4, 0, 0, 1782, 1784, 3, 64, 32, 0, 1783, 1781, 1, 0, 0, 0, 1784, 1787, 1, 0, 0, 0, 1785, 1783, 1, 0, 0, 0, 1785, 1786, 1, 0, 0, 0, 1786, 1788, 1, 0, 0, 0, 1787, 1785, 1, 0, 0, 0, 1788, 1789, 5, 3, 0, 0, 1789, 63, 1, 0, 0, 0, 1790, 1795, 3, 58, 29, 0, 1791, 1793, 5, 352, 0, 0, 1792, 1791, 1, 0, 0, 0, 1792, 1793, 1, 0, 0, 0, 1793, 1794, 1, 0, 0, 0, 1794, 1796, 3, 268, 134, 0, 1795, 1792, 1, 0, 0, 0, 1795, 1796, 1, 0, 0, 0, 1796, 65, 1, 0, 0, 0, 1797, 1798, 5, 2, 0, 0, 1798, 1803, 3, 288, 144, 0, 1799, 1800, 5, 4, 0, 0, 1800, 1802, 3, 288, 144, 0, 1801, 1799, 1, 0, 0, 0, 1802, 1805, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1803, 1804, 1, 0, 0, 0, 1804, 1806, 1, 0, 0, 0, 1805, 1803, 1, 0, 0, 0, 1806, 1807, 5, 3, 0, 0, 1807, 67, 1, 0, 0, 0, 1808, 1809, 5, 2, 0, 0, 1809, 1814, 3, 66, 33, 0, 1810, 1811, 5, 4, 0, 0, 1811, 1813, 3, 66, 33, 0, 1812, 1810, 1, 0, 0, 0, 1813, 1816, 1, 0, 0, 0, 1814, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 1817, 1, 0, 0, 0, 1816, 1814, 1, 0, 0, 0, 1817, 1818, 5, 3, 0, 0, 1818, 69, 1, 0, 0, 0, 1819, 1820, 5, 283, 0, 0, 1820, 1821, 5, 20, 0, 0, 1821, 1826, 3, 72, 36, 0, 1822, 1823, 5, 283, 0, 0, 1823, 1824, 5, 31, 0, 0, 1824, 1826, 3, 74, 37, 0, 1825, 1819, 1, 0, 0, 0, 1825, 1822, 1, 0, 0, 0, 1826, 71, 1, 0, 0, 0, 1827, 1828, 5, 146, 0, 0, 1828, 1829, 3, 388, 194, 0, 1829, 1830, 5, 212, 0, 0, 1830, 1831, 3, 388, 194, 0, 1831, 1834, 1, 0, 0, 0, 1832, 1834, 3, 376, 188, 0, 1833, 1827, 1, 0, 0, 0, 1833, 1832, 1, 0, 0, 0, 1834, 73, 1, 0, 0, 0, 1835, 1839, 3, 388, 194, 0, 1836, 1837, 5, 346, 0, 0, 1837, 1838, 5, 267, 0, 0, 1838, 1840, 3, 54, 27, 0, 1839, 1836, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 75, 1, 0, 0, 0, 1841, 1842, 3, 376, 188, 0, 1842, 1843, 3, 388, 194, 0, 1843, 77, 1, 0, 0, 0, 1844, 1845, 3, 28, 14, 0, 1845, 1846, 3, 26, 13, 0, 1846, 1901, 1, 0, 0, 0, 1847, 1849, 3, 146, 73, 0, 1848, 1850, 3, 102, 51, 0, 1849, 1848, 1, 0, 0, 0, 1850, 1851, 1, 0, 0, 0, 1851, 1849, 1, 0, 0, 0, 1851, 1852, 1, 0, 0, 0, 1852, 1901, 1, 0, 0, 0, 1853, 1854, 5, 84, 0, 0, 1854, 1855, 5, 123, 0, 0, 1855, 1856, 3, 86, 43, 0, 1856, 1858, 3, 240, 120, 0, 1857, 1859, 3, 138, 69, 0, 1858, 1857, 1, 0, 0, 0, 1858, 1859, 1, 0, 0, 0, 1859, 1901, 1, 0, 0, 0, 1860, 1861, 5, 329, 0, 0, 1861, 1862, 3, 86, 43, 0, 1862, 1863, 3, 240, 120, 0, 1863, 1865, 3, 120, 60, 0, 1864, 1866, 3, 138, 69, 0, 1865, 1864, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1901, 1, 0, 0, 0, 1867, 1868, 5, 179, 0, 0, 1868, 1869, 5, 152, 0, 0, 1869, 1870, 3, 86, 43, 0, 1870, 1871, 3, 240, 120, 0, 1871, 1877, 5, 332, 0, 0, 1872, 1878, 3, 98, 49, 0, 1873, 1874, 5, 2, 0, 0, 1874, 1875, 3, 26, 13, 0, 1875, 1876, 5, 3, 0, 0, 1876, 1878, 1, 0, 0, 0, 1877, 1872, 1, 0, 0, 0, 1877, 1873, 1, 0, 0, 0, 1878, 1879, 1, 0, 0, 0, 1879, 1880, 3, 240, 120, 0, 1880, 1881, 5, 203, 0, 0, 1881, 1885, 3, 276, 138, 0, 1882, 1884, 3, 122, 61, 0, 1883, 1882, 1, 0, 0, 0, 1884, 1887, 1, 0, 0, 0, 1885, 1883, 1, 0, 0, 0, 1885, 1886, 1, 0, 0, 0, 1886, 1891, 1, 0, 0, 0, 1887, 1885, 1, 0, 0, 0, 1888, 1890, 3, 124, 62, 0, 1889, 1888, 1, 0, 0, 0, 1890, 1893, 1, 0, 0, 0, 1891, 1889, 1, 0, 0, 0, 1891, 1892, 1, 0, 0, 0, 1892, 1897, 1, 0, 0, 0, 1893, 1891, 1, 0, 0, 0, 1894, 1896, 3, 126, 63, 0, 1895, 1894, 1, 0, 0, 0, 1896, 1899, 1, 0, 0, 0, 1897, 1895, 1, 0, 0, 0, 1897, 1898, 1, 0, 0, 0, 1898, 1901, 1, 0, 0, 0, 1899, 1897, 1, 0, 0, 0, 1900, 1844, 1, 0, 0, 0, 1900, 1847, 1, 0, 0, 0, 1900, 1853, 1, 0, 0, 0, 1900, 1860, 1, 0, 0, 0, 1900, 1867, 1, 0, 0, 0, 1901, 79, 1, 0, 0, 0, 1902, 1903, 3, 98, 49, 0, 1903, 81, 1, 0, 0, 0, 1904, 1905, 3, 98, 49, 0, 1905, 83, 1, 0, 0, 0, 1906, 1907, 3, 252, 126, 0, 1907, 85, 1, 0, 0, 0, 1908, 1909, 3, 252, 126, 0, 1909, 87, 1, 0, 0, 0, 1910, 1911, 3, 254, 127, 0, 1911, 89, 1, 0, 0, 0, 1912, 1913, 3, 254, 127, 0, 1913, 91, 1, 0, 0, 0, 1914, 1917, 3, 246, 123, 0, 1915, 1917, 4, 46, 0, 0, 1916, 1914, 1, 0, 0, 0, 1916, 1915, 1, 0, 0, 0, 1917, 93, 1, 0, 0, 0, 1918, 1923, 3, 92, 46, 0, 1919, 1920, 5, 4, 0, 0, 1920, 1922, 3, 92, 46, 0, 1921, 1919, 1, 0, 0, 0, 1922, 1925, 1, 0, 0, 0, 1923, 1921, 1, 0, 0, 0, 1923, 1924, 1, 0, 0, 0, 1924, 95, 1, 0, 0, 0, 1925, 1923, 1, 0, 0, 0, 1926, 1927, 3, 372, 186, 0, 1927, 97, 1, 0, 0, 0, 1928, 1929, 5, 136, 0, 0, 1929, 1930, 5, 2, 0, 0, 1930, 1931, 3, 268, 134, 0, 1931, 1932, 5, 3, 0, 0, 1932, 1935, 1, 0, 0, 0, 1933, 1935, 3, 246, 123, 0, 1934, 1928, 1, 0, 0, 0, 1934, 1933, 1, 0, 0, 0, 1935, 99, 1, 0, 0, 0, 1936, 1937, 5, 209, 0, 0, 1937, 1938, 5, 31, 0, 0, 1938, 1943, 3, 108, 54, 0, 1939, 1940, 5, 4, 0, 0, 1940, 1942, 3, 108, 54, 0, 1941, 1939, 1, 0, 0, 0, 1942, 1945, 1, 0, 0, 0, 1943, 1941, 1, 0, 0, 0, 1943, 1944, 1, 0, 0, 0, 1944, 1947, 1, 0, 0, 0, 1945, 1943, 1, 0, 0, 0, 1946, 1936, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1958, 1, 0, 0, 0, 1948, 1949, 5, 44, 0, 0, 1949, 1950, 5, 31, 0, 0, 1950, 1955, 3, 268, 134, 0, 1951, 1952, 5, 4, 0, 0, 1952, 1954, 3, 268, 134, 0, 1953, 1951, 1, 0, 0, 0, 1954, 1957, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1959, 1, 0, 0, 0, 1957, 1955, 1, 0, 0, 0, 1958, 1948, 1, 0, 0, 0, 1958, 1959, 1, 0, 0, 0, 1959, 1970, 1, 0, 0, 0, 1960, 1961, 5, 93, 0, 0, 1961, 1962, 5, 31, 0, 0, 1962, 1967, 3, 268, 134, 0, 1963, 1964, 5, 4, 0, 0, 1964, 1966, 3, 268, 134, 0, 1965, 1963, 1, 0, 0, 0, 1966, 1969, 1, 0, 0, 0, 1967, 1965, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1971, 1, 0, 0, 0, 1969, 1967, 1, 0, 0, 0, 1970, 1960, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 1982, 1, 0, 0, 0, 1972, 1973, 5, 278, 0, 0, 1973, 1974, 5, 31, 0, 0, 1974, 1979, 3, 108, 54, 0, 1975, 1976, 5, 4, 0, 0, 1976, 1978, 3, 108, 54, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1981, 1, 0, 0, 0, 1979, 1977, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 1983, 1, 0, 0, 0, 1981, 1979, 1, 0, 0, 0, 1982, 1972, 1, 0, 0, 0, 1982, 1983, 1, 0, 0, 0, 1983, 1985, 1, 0, 0, 0, 1984, 1986, 3, 352, 176, 0, 1985, 1984, 1, 0, 0, 0, 1985, 1986, 1, 0, 0, 0, 1986, 1992, 1, 0, 0, 0, 1987, 1990, 5, 165, 0, 0, 1988, 1991, 5, 10, 0, 0, 1989, 1991, 3, 268, 134, 0, 1990, 1988, 1, 0, 0, 0, 1990, 1989, 1, 0, 0, 0, 1991, 1993, 1, 0, 0, 0, 1992, 1987, 1, 0, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1996, 1, 0, 0, 0, 1994, 1995, 5, 202, 0, 0, 1995, 1997, 3, 268, 134, 0, 1996, 1994, 1, 0, 0, 0, 1996, 1997, 1, 0, 0, 0, 1997, 101, 1, 0, 0, 0, 1998, 1999, 3, 28, 14, 0, 1999, 2000, 3, 112, 56, 0, 2000, 103, 1, 0, 0, 0, 2001, 2002, 6, 52, -1, 0, 2002, 2003, 3, 106, 53, 0, 2003, 2024, 1, 0, 0, 0, 2004, 2005, 10, 3, 0, 0, 2005, 2007, 7, 13, 0, 0, 2006, 2008, 3, 196, 98, 0, 2007, 2006, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 2009, 1, 0, 0, 0, 2009, 2023, 3, 104, 52, 4, 2010, 2011, 10, 2, 0, 0, 2011, 2013, 5, 148, 0, 0, 2012, 2014, 3, 196, 98, 0, 2013, 2012, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2023, 3, 104, 52, 3, 2016, 2017, 10, 1, 0, 0, 2017, 2019, 7, 14, 0, 0, 2018, 2020, 3, 196, 98, 0, 2019, 2018, 1, 0, 0, 0, 2019, 2020, 1, 0, 0, 0, 2020, 2021, 1, 0, 0, 0, 2021, 2023, 3, 104, 52, 2, 2022, 2004, 1, 0, 0, 0, 2022, 2010, 1, 0, 0, 0, 2022, 2016, 1, 0, 0, 0, 2023, 2026, 1, 0, 0, 0, 2024, 2022, 1, 0, 0, 0, 2024, 2025, 1, 0, 0, 0, 2025, 105, 1, 0, 0, 0, 2026, 2024, 1, 0, 0, 0, 2027, 2037, 3, 114, 57, 0, 2028, 2037, 3, 110, 55, 0, 2029, 2030, 5, 293, 0, 0, 2030, 2037, 3, 86, 43, 0, 2031, 2037, 3, 226, 113, 0, 2032, 2033, 5, 2, 0, 0, 2033, 2034, 3, 26, 13, 0, 2034, 2035, 5, 3, 0, 0, 2035, 2037, 1, 0, 0, 0, 2036, 2027, 1, 0, 0, 0, 2036, 2028, 1, 0, 0, 0, 2036, 2029, 1, 0, 0, 0, 2036, 2031, 1, 0, 0, 0, 2036, 2032, 1, 0, 0, 0, 2037, 107, 1, 0, 0, 0, 2038, 2041, 3, 92, 46, 0, 2039, 2041, 3, 268, 134, 0, 2040, 2038, 1, 0, 0, 0, 2040, 2039, 1, 0, 0, 0, 2041, 2043, 1, 0, 0, 0, 2042, 2044, 7, 15, 0, 0, 2043, 2042, 1, 0, 0, 0, 2043, 2044, 1, 0, 0, 0, 2044, 2047, 1, 0, 0, 0, 2045, 2046, 5, 199, 0, 0, 2046, 2048, 7, 16, 0, 0, 2047, 2045, 1, 0, 0, 0, 2047, 2048, 1, 0, 0, 0, 2048, 109, 1, 0, 0, 0, 2049, 2051, 3, 146, 73, 0, 2050, 2052, 3, 112, 56, 0, 2051, 2050, 1, 0, 0, 0, 2052, 2053, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2053, 2054, 1, 0, 0, 0, 2054, 111, 1, 0, 0, 0, 2055, 2057, 3, 116, 58, 0, 2056, 2058, 3, 138, 69, 0, 2057, 2056, 1, 0, 0, 0, 2057, 2058, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2060, 3, 100, 50, 0, 2060, 2083, 1, 0, 0, 0, 2061, 2065, 3, 118, 59, 0, 2062, 2064, 3, 194, 97, 0, 2063, 2062, 1, 0, 0, 0, 2064, 2067, 1, 0, 0, 0, 2065, 2063, 1, 0, 0, 0, 2065, 2066, 1, 0, 0, 0, 2066, 2069, 1, 0, 0, 0, 2067, 2065, 1, 0, 0, 0, 2068, 2070, 3, 138, 69, 0, 2069, 2068, 1, 0, 0, 0, 2069, 2070, 1, 0, 0, 0, 2070, 2072, 1, 0, 0, 0, 2071, 2073, 3, 152, 76, 0, 2072, 2071, 1, 0, 0, 0, 2072, 2073, 1, 0, 0, 0, 2073, 2075, 1, 0, 0, 0, 2074, 2076, 3, 140, 70, 0, 2075, 2074, 1, 0, 0, 0, 2075, 2076, 1, 0, 0, 0, 2076, 2078, 1, 0, 0, 0, 2077, 2079, 3, 352, 176, 0, 2078, 2077, 1, 0, 0, 0, 2078, 2079, 1, 0, 0, 0, 2079, 2080, 1, 0, 0, 0, 2080, 2081, 3, 100, 50, 0, 2081, 2083, 1, 0, 0, 0, 2082, 2055, 1, 0, 0, 0, 2082, 2061, 1, 0, 0, 0, 2083, 113, 1, 0, 0, 0, 2084, 2086, 3, 116, 58, 0, 2085, 2087, 3, 146, 73, 0, 2086, 2085, 1, 0, 0, 0, 2086, 2087, 1, 0, 0, 0, 2087, 2091, 1, 0, 0, 0, 2088, 2090, 3, 194, 97, 0, 2089, 2088, 1, 0, 0, 0, 2090, 2093, 1, 0, 0, 0, 2091, 2089, 1, 0, 0, 0, 2091, 2092, 1, 0, 0, 0, 2092, 2095, 1, 0, 0, 0, 2093, 2091, 1, 0, 0, 0, 2094, 2096, 3, 138, 69, 0, 2095, 2094, 1, 0, 0, 0, 2095, 2096, 1, 0, 0, 0, 2096, 2098, 1, 0, 0, 0, 2097, 2099, 3, 152, 76, 0, 2098, 2097, 1, 0, 0, 0, 2098, 2099, 1, 0, 0, 0, 2099, 2101, 1, 0, 0, 0, 2100, 2102, 3, 140, 70, 0, 2101, 2100, 1, 0, 0, 0, 2101, 2102, 1, 0, 0, 0, 2102, 2104, 1, 0, 0, 0, 2103, 2105, 3, 352, 176, 0, 2104, 2103, 1, 0, 0, 0, 2104, 2105, 1, 0, 0, 0, 2105, 2129, 1, 0, 0, 0, 2106, 2108, 3, 118, 59, 0, 2107, 2109, 3, 146, 73, 0, 2108, 2107, 1, 0, 0, 0, 2108, 2109, 1, 0, 0, 0, 2109, 2113, 1, 0, 0, 0, 2110, 2112, 3, 194, 97, 0, 2111, 2110, 1, 0, 0, 0, 2112, 2115, 1, 0, 0, 0, 2113, 2111, 1, 0, 0, 0, 2113, 2114, 1, 0, 0, 0, 2114, 2117, 1, 0, 0, 0, 2115, 2113, 1, 0, 0, 0, 2116, 2118, 3, 138, 69, 0, 2117, 2116, 1, 0, 0, 0, 2117, 2118, 1, 0, 0, 0, 2118, 2120, 1, 0, 0, 0, 2119, 2121, 3, 152, 76, 0, 2120, 2119, 1, 0, 0, 0, 2120, 2121, 1, 0, 0, 0, 2121, 2123, 1, 0, 0, 0, 2122, 2124, 3, 140, 70, 0, 2123, 2122, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2126, 1, 0, 0, 0, 2125, 2127, 3, 352, 176, 0, 2126, 2125, 1, 0, 0, 0, 2126, 2127, 1, 0, 0, 0, 2127, 2129, 1, 0, 0, 0, 2128, 2084, 1, 0, 0, 0, 2128, 2106, 1, 0, 0, 0, 2129, 115, 1, 0, 0, 0, 2130, 2131, 5, 263, 0, 0, 2131, 2132, 5, 314, 0, 0, 2132, 2134, 5, 2, 0, 0, 2133, 2135, 3, 196, 98, 0, 2134, 2133, 1, 0, 0, 0, 2134, 2135, 1, 0, 0, 0, 2135, 2136, 1, 0, 0, 0, 2136, 2137, 3, 274, 137, 0, 2137, 2138, 5, 3, 0, 0, 2138, 2150, 1, 0, 0, 0, 2139, 2141, 5, 177, 0, 0, 2140, 2142, 3, 196, 98, 0, 2141, 2140, 1, 0, 0, 0, 2141, 2142, 1, 0, 0, 0, 2142, 2143, 1, 0, 0, 0, 2143, 2150, 3, 274, 137, 0, 2144, 2146, 5, 238, 0, 0, 2145, 2147, 3, 196, 98, 0, 2146, 2145, 1, 0, 0, 0, 2146, 2147, 1, 0, 0, 0, 2147, 2148, 1, 0, 0, 0, 2148, 2150, 3, 274, 137, 0, 2149, 2130, 1, 0, 0, 0, 2149, 2139, 1, 0, 0, 0, 2149, 2144, 1, 0, 0, 0, 2150, 2152, 1, 0, 0, 0, 2151, 2153, 3, 242, 121, 0, 2152, 2151, 1, 0, 0, 0, 2152, 2153, 1, 0, 0, 0, 2153, 2156, 1, 0, 0, 0, 2154, 2155, 5, 236, 0, 0, 2155, 2157, 3, 388, 194, 0, 2156, 2154, 1, 0, 0, 0, 2156, 2157, 1, 0, 0, 0, 2157, 2158, 1, 0, 0, 0, 2158, 2159, 5, 332, 0, 0, 2159, 2172, 3, 388, 194, 0, 2160, 2170, 5, 20, 0, 0, 2161, 2171, 3, 214, 107, 0, 2162, 2171, 3, 334, 167, 0, 2163, 2166, 5, 2, 0, 0, 2164, 2167, 3, 214, 107, 0, 2165, 2167, 3, 334, 167, 0, 2166, 2164, 1, 0, 0, 0, 2166, 2165, 1, 0, 0, 0, 2167, 2168, 1, 0, 0, 0, 2168, 2169, 5, 3, 0, 0, 2169, 2171, 1, 0, 0, 0, 2170, 2161, 1, 0, 0, 0, 2170, 2162, 1, 0, 0, 0, 2170, 2163, 1, 0, 0, 0, 2171, 2173, 1, 0, 0, 0, 2172, 2160, 1, 0, 0, 0, 2172, 2173, 1, 0, 0, 0, 2173, 2175, 1, 0, 0, 0, 2174, 2176, 3, 242, 121, 0, 2175, 2174, 1, 0, 0, 0, 2175, 2176, 1, 0, 0, 0, 2176, 2179, 1, 0, 0, 0, 2177, 2178, 5, 235, 0, 0, 2178, 2180, 3, 388, 194, 0, 2179, 2177, 1, 0, 0, 0, 2179, 2180, 1, 0, 0, 0, 2180, 117, 1, 0, 0, 0, 2181, 2185, 5, 263, 0, 0, 2182, 2184, 3, 142, 71, 0, 2183, 2182, 1, 0, 0, 0, 2184, 2187, 1, 0, 0, 0, 2185, 2183, 1, 0, 0, 0, 2185, 2186, 1, 0, 0, 0, 2186, 2189, 1, 0, 0, 0, 2187, 2185, 1, 0, 0, 0, 2188, 2190, 3, 196, 98, 0, 2189, 2188, 1, 0, 0, 0, 2189, 2190, 1, 0, 0, 0, 2190, 2191, 1, 0, 0, 0, 2191, 2192, 3, 258, 129, 0, 2192, 119, 1, 0, 0, 0, 2193, 2194, 5, 269, 0, 0, 2194, 2195, 3, 134, 67, 0, 2195, 121, 1, 0, 0, 0, 2196, 2197, 5, 343, 0, 0, 2197, 2200, 5, 178, 0, 0, 2198, 2199, 5, 14, 0, 0, 2199, 2201, 3, 276, 138, 0, 2200, 2198, 1, 0, 0, 0, 2200, 2201, 1, 0, 0, 0, 2201, 2202, 1, 0, 0, 0, 2202, 2203, 5, 300, 0, 0, 2203, 2204, 3, 128, 64, 0, 2204, 123, 1, 0, 0, 0, 2205, 2206, 5, 343, 0, 0, 2206, 2207, 5, 197, 0, 0, 2207, 2210, 5, 178, 0, 0, 2208, 2209, 5, 31, 0, 0, 2209, 2211, 5, 296, 0, 0, 2210, 2208, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2214, 1, 0, 0, 0, 2212, 2213, 5, 14, 0, 0, 2213, 2215, 3, 276, 138, 0, 2214, 2212, 1, 0, 0, 0, 2214, 2215, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2217, 5, 300, 0, 0, 2217, 2218, 3, 130, 65, 0, 2218, 125, 1, 0, 0, 0, 2219, 2220, 5, 343, 0, 0, 2220, 2221, 5, 197, 0, 0, 2221, 2222, 5, 178, 0, 0, 2222, 2223, 5, 31, 0, 0, 2223, 2226, 5, 280, 0, 0, 2224, 2225, 5, 14, 0, 0, 2225, 2227, 3, 276, 138, 0, 2226, 2224, 1, 0, 0, 0, 2226, 2227, 1, 0, 0, 0, 2227, 2228, 1, 0, 0, 0, 2228, 2229, 5, 300, 0, 0, 2229, 2230, 3, 132, 66, 0, 2230, 127, 1, 0, 0, 0, 2231, 2239, 5, 84, 0, 0, 2232, 2233, 5, 329, 0, 0, 2233, 2234, 5, 269, 0, 0, 2234, 2239, 5, 363, 0, 0, 2235, 2236, 5, 329, 0, 0, 2236, 2237, 5, 269, 0, 0, 2237, 2239, 3, 134, 67, 0, 2238, 2231, 1, 0, 0, 0, 2238, 2232, 1, 0, 0, 0, 2238, 2235, 1, 0, 0, 0, 2239, 129, 1, 0, 0, 0, 2240, 2241, 5, 147, 0, 0, 2241, 2259, 5, 363, 0, 0, 2242, 2243, 5, 147, 0, 0, 2243, 2244, 5, 2, 0, 0, 2244, 2245, 3, 244, 122, 0, 2245, 2246, 5, 3, 0, 0, 2246, 2247, 5, 333, 0, 0, 2247, 2248, 5, 2, 0, 0, 2248, 2253, 3, 268, 134, 0, 2249, 2250, 5, 4, 0, 0, 2250, 2252, 3, 268, 134, 0, 2251, 2249, 1, 0, 0, 0, 2252, 2255, 1, 0, 0, 0, 2253, 2251, 1, 0, 0, 0, 2253, 2254, 1, 0, 0, 0, 2254, 2256, 1, 0, 0, 0, 2255, 2253, 1, 0, 0, 0, 2256, 2257, 5, 3, 0, 0, 2257, 2259, 1, 0, 0, 0, 2258, 2240, 1, 0, 0, 0, 2258, 2242, 1, 0, 0, 0, 2259, 131, 1, 0, 0, 0, 2260, 2265, 5, 84, 0, 0, 2261, 2262, 5, 329, 0, 0, 2262, 2263, 5, 269, 0, 0, 2263, 2265, 3, 134, 67, 0, 2264, 2260, 1, 0, 0, 0, 2264, 2261, 1, 0, 0, 0, 2265, 133, 1, 0, 0, 0, 2266, 2271, 3, 136, 68, 0, 2267, 2268, 5, 4, 0, 0, 2268, 2270, 3, 136, 68, 0, 2269, 2267, 1, 0, 0, 0, 2270, 2273, 1, 0, 0, 0, 2271, 2269, 1, 0, 0, 0, 2271, 2272, 1, 0, 0, 0, 2272, 135, 1, 0, 0, 0, 2273, 2271, 1, 0, 0, 0, 2274, 2275, 3, 246, 123, 0, 2275, 2276, 5, 352, 0, 0, 2276, 2277, 3, 268, 134, 0, 2277, 137, 1, 0, 0, 0, 2278, 2279, 5, 344, 0, 0, 2279, 2280, 3, 276, 138, 0, 2280, 139, 1, 0, 0, 0, 2281, 2282, 5, 132, 0, 0, 2282, 2283, 3, 276, 138, 0, 2283, 141, 1, 0, 0, 0, 2284, 2285, 5, 374, 0, 0, 2285, 2292, 3, 144, 72, 0, 2286, 2288, 5, 4, 0, 0, 2287, 2286, 1, 0, 0, 0, 2287, 2288, 1, 0, 0, 0, 2288, 2289, 1, 0, 0, 0, 2289, 2291, 3, 144, 72, 0, 2290, 2287, 1, 0, 0, 0, 2291, 2294, 1, 0, 0, 0, 2292, 2290, 1, 0, 0, 0, 2292, 2293, 1, 0, 0, 0, 2293, 2295, 1, 0, 0, 0, 2294, 2292, 1, 0, 0, 0, 2295, 2296, 5, 375, 0, 0, 2296, 143, 1, 0, 0, 0, 2297, 2311, 3, 376, 188, 0, 2298, 2299, 3, 376, 188, 0, 2299, 2300, 5, 2, 0, 0, 2300, 2305, 3, 284, 142, 0, 2301, 2302, 5, 4, 0, 0, 2302, 2304, 3, 284, 142, 0, 2303, 2301, 1, 0, 0, 0, 2304, 2307, 1, 0, 0, 0, 2305, 2303, 1, 0, 0, 0, 2305, 2306, 1, 0, 0, 0, 2306, 2308, 1, 0, 0, 0, 2307, 2305, 1, 0, 0, 0, 2308, 2309, 5, 3, 0, 0, 2309, 2311, 1, 0, 0, 0, 2310, 2297, 1, 0, 0, 0, 2310, 2298, 1, 0, 0, 0, 2311, 145, 1, 0, 0, 0, 2312, 2313, 5, 123, 0, 0, 2313, 2318, 3, 198, 99, 0, 2314, 2315, 5, 4, 0, 0, 2315, 2317, 3, 198, 99, 0, 2316, 2314, 1, 0, 0, 0, 2317, 2320, 1, 0, 0, 0, 2318, 2316, 1, 0, 0, 0, 2318, 2319, 1, 0, 0, 0, 2319, 2324, 1, 0, 0, 0, 2320, 2318, 1, 0, 0, 0, 2321, 2323, 3, 194, 97, 0, 2322, 2321, 1, 0, 0, 0, 2323, 2326, 1, 0, 0, 0, 2324, 2322, 1, 0, 0, 0, 2324, 2325, 1, 0, 0, 0, 2325, 2328, 1, 0, 0, 0, 2326, 2324, 1, 0, 0, 0, 2327, 2329, 3, 162, 81, 0, 2328, 2327, 1, 0, 0, 0, 2328, 2329, 1, 0, 0, 0, 2329, 2331, 1, 0, 0, 0, 2330, 2332, 3, 168, 84, 0, 2331, 2330, 1, 0, 0, 0, 2331, 2332, 1, 0, 0, 0, 2332, 147, 1, 0, 0, 0, 2333, 2334, 7, 17, 0, 0, 2334, 149, 1, 0, 0, 0, 2335, 2337, 5, 119, 0, 0, 2336, 2335, 1, 0, 0, 0, 2336, 2337, 1, 0, 0, 0, 2337, 2338, 1, 0, 0, 0, 2338, 2339, 7, 18, 0, 0, 2339, 2340, 5, 20, 0, 0, 2340, 2341, 5, 201, 0, 0, 2341, 2350, 3, 392, 196, 0, 2342, 2344, 5, 119, 0, 0, 2343, 2342, 1, 0, 0, 0, 2343, 2344, 1, 0, 0, 0, 2344, 2345, 1, 0, 0, 0, 2345, 2346, 7, 19, 0, 0, 2346, 2347, 5, 20, 0, 0, 2347, 2348, 5, 201, 0, 0, 2348, 2350, 3, 280, 140, 0, 2349, 2336, 1, 0, 0, 0, 2349, 2343, 1, 0, 0, 0, 2350, 151, 1, 0, 0, 0, 2351, 2352, 5, 130, 0, 0, 2352, 2353, 5, 31, 0, 0, 2353, 2358, 3, 154, 77, 0, 2354, 2355, 5, 4, 0, 0, 2355, 2357, 3, 154, 77, 0, 2356, 2354, 1, 0, 0, 0, 2357, 2360, 1, 0, 0, 0, 2358, 2356, 1, 0, 0, 0, 2358, 2359, 1, 0, 0, 0, 2359, 2391, 1, 0, 0, 0, 2360, 2358, 1, 0, 0, 0, 2361, 2362, 5, 130, 0, 0, 2362, 2363, 5, 31, 0, 0, 2363, 2368, 3, 268, 134, 0, 2364, 2365, 5, 4, 0, 0, 2365, 2367, 3, 268, 134, 0, 2366, 2364, 1, 0, 0, 0, 2367, 2370, 1, 0, 0, 0, 2368, 2366, 1, 0, 0, 0, 2368, 2369, 1, 0, 0, 0, 2369, 2388, 1, 0, 0, 0, 2370, 2368, 1, 0, 0, 0, 2371, 2372, 5, 346, 0, 0, 2372, 2389, 5, 256, 0, 0, 2373, 2374, 5, 346, 0, 0, 2374, 2389, 5, 61, 0, 0, 2375, 2376, 5, 131, 0, 0, 2376, 2377, 5, 271, 0, 0, 2377, 2378, 5, 2, 0, 0, 2378, 2383, 3, 160, 80, 0, 2379, 2380, 5, 4, 0, 0, 2380, 2382, 3, 160, 80, 0, 2381, 2379, 1, 0, 0, 0, 2382, 2385, 1, 0, 0, 0, 2383, 2381, 1, 0, 0, 0, 2383, 2384, 1, 0, 0, 0, 2384, 2386, 1, 0, 0, 0, 2385, 2383, 1, 0, 0, 0, 2386, 2387, 5, 3, 0, 0, 2387, 2389, 1, 0, 0, 0, 2388, 2371, 1, 0, 0, 0, 2388, 2373, 1, 0, 0, 0, 2388, 2375, 1, 0, 0, 0, 2388, 2389, 1, 0, 0, 0, 2389, 2391, 1, 0, 0, 0, 2390, 2351, 1, 0, 0, 0, 2390, 2361, 1, 0, 0, 0, 2391, 153, 1, 0, 0, 0, 2392, 2396, 3, 92, 46, 0, 2393, 2396, 3, 156, 78, 0, 2394, 2396, 3, 268, 134, 0, 2395, 2392, 1, 0, 0, 0, 2395, 2393, 1, 0, 0, 0, 2395, 2394, 1, 0, 0, 0, 2396, 155, 1, 0, 0, 0, 2397, 2398, 7, 20, 0, 0, 2398, 2399, 5, 2, 0, 0, 2399, 2404, 3, 160, 80, 0, 2400, 2401, 5, 4, 0, 0, 2401, 2403, 3, 160, 80, 0, 2402, 2400, 1, 0, 0, 0, 2403, 2406, 1, 0, 0, 0, 2404, 2402, 1, 0, 0, 0, 2404, 2405, 1, 0, 0, 0, 2405, 2407, 1, 0, 0, 0, 2406, 2404, 1, 0, 0, 0, 2407, 2408, 5, 3, 0, 0, 2408, 2423, 1, 0, 0, 0, 2409, 2410, 5, 131, 0, 0, 2410, 2411, 5, 271, 0, 0, 2411, 2412, 5, 2, 0, 0, 2412, 2417, 3, 158, 79, 0, 2413, 2414, 5, 4, 0, 0, 2414, 2416, 3, 158, 79, 0, 2415, 2413, 1, 0, 0, 0, 2416, 2419, 1, 0, 0, 0, 2417, 2415, 1, 0, 0, 0, 2417, 2418, 1, 0, 0, 0, 2418, 2420, 1, 0, 0, 0, 2419, 2417, 1, 0, 0, 0, 2420, 2421, 5, 3, 0, 0, 2421, 2423, 1, 0, 0, 0, 2422, 2397, 1, 0, 0, 0, 2422, 2409, 1, 0, 0, 0, 2423, 157, 1, 0, 0, 0, 2424, 2427, 3, 156, 78, 0, 2425, 2427, 3, 160, 80, 0, 2426, 2424, 1, 0, 0, 0, 2426, 2425, 1, 0, 0, 0, 2427, 159, 1, 0, 0, 0, 2428, 2449, 3, 92, 46, 0, 2429, 2449, 3, 268, 134, 0, 2430, 2445, 5, 2, 0, 0, 2431, 2434, 3, 92, 46, 0, 2432, 2434, 3, 268, 134, 0, 2433, 2431, 1, 0, 0, 0, 2433, 2432, 1, 0, 0, 0, 2434, 2442, 1, 0, 0, 0, 2435, 2438, 5, 4, 0, 0, 2436, 2439, 3, 92, 46, 0, 2437, 2439, 3, 268, 134, 0, 2438, 2436, 1, 0, 0, 0, 2438, 2437, 1, 0, 0, 0, 2439, 2441, 1, 0, 0, 0, 2440, 2435, 1, 0, 0, 0, 2441, 2444, 1, 0, 0, 0, 2442, 2440, 1, 0, 0, 0, 2442, 2443, 1, 0, 0, 0, 2443, 2446, 1, 0, 0, 0, 2444, 2442, 1, 0, 0, 0, 2445, 2433, 1, 0, 0, 0, 2445, 2446, 1, 0, 0, 0, 2446, 2447, 1, 0, 0, 0, 2447, 2449, 5, 3, 0, 0, 2448, 2428, 1, 0, 0, 0, 2448, 2429, 1, 0, 0, 0, 2448, 2430, 1, 0, 0, 0, 2449, 161, 1, 0, 0, 0, 2450, 2451, 5, 223, 0, 0, 2451, 2452, 5, 2, 0, 0, 2452, 2453, 3, 258, 129, 0, 2453, 2454, 5, 119, 0, 0, 2454, 2455, 3, 164, 82, 0, 2455, 2456, 5, 140, 0, 0, 2456, 2457, 5, 2, 0, 0, 2457, 2462, 3, 166, 83, 0, 2458, 2459, 5, 4, 0, 0, 2459, 2461, 3, 166, 83, 0, 2460, 2458, 1, 0, 0, 0, 2461, 2464, 1, 0, 0, 0, 2462, 2460, 1, 0, 0, 0, 2462, 2463, 1, 0, 0, 0, 2463, 2465, 1, 0, 0, 0, 2464, 2462, 1, 0, 0, 0, 2465, 2466, 5, 3, 0, 0, 2466, 2467, 5, 3, 0, 0, 2467, 163, 1, 0, 0, 0, 2468, 2481, 3, 376, 188, 0, 2469, 2470, 5, 2, 0, 0, 2470, 2475, 3, 376, 188, 0, 2471, 2472, 5, 4, 0, 0, 2472, 2474, 3, 376, 188, 0, 2473, 2471, 1, 0, 0, 0, 2474, 2477, 1, 0, 0, 0, 2475, 2473, 1, 0, 0, 0, 2475, 2476, 1, 0, 0, 0, 2476, 2478, 1, 0, 0, 0, 2477, 2475, 1, 0, 0, 0, 2478, 2479, 5, 3, 0, 0, 2479, 2481, 1, 0, 0, 0, 2480, 2468, 1, 0, 0, 0, 2480, 2469, 1, 0, 0, 0, 2481, 165, 1, 0, 0, 0, 2482, 2487, 3, 268, 134, 0, 2483, 2485, 5, 20, 0, 0, 2484, 2483, 1, 0, 0, 0, 2484, 2485, 1, 0, 0, 0, 2485, 2486, 1, 0, 0, 0, 2486, 2488, 3, 376, 188, 0, 2487, 2484, 1, 0, 0, 0, 2487, 2488, 1, 0, 0, 0, 2488, 167, 1, 0, 0, 0, 2489, 2491, 5, 327, 0, 0, 2490, 2492, 3, 170, 85, 0, 2491, 2490, 1, 0, 0, 0, 2491, 2492, 1, 0, 0, 0, 2492, 2493, 1, 0, 0, 0, 2493, 2494, 5, 2, 0, 0, 2494, 2495, 3, 172, 86, 0, 2495, 2500, 5, 3, 0, 0, 2496, 2498, 5, 20, 0, 0, 2497, 2496, 1, 0, 0, 0, 2497, 2498, 1, 0, 0, 0, 2498, 2499, 1, 0, 0, 0, 2499, 2501, 3, 376, 188, 0, 2500, 2497, 1, 0, 0, 0, 2500, 2501, 1, 0, 0, 0, 2501, 169, 1, 0, 0, 0, 2502, 2503, 7, 21, 0, 0, 2503, 2504, 5, 199, 0, 0, 2504, 171, 1, 0, 0, 0, 2505, 2508, 3, 174, 87, 0, 2506, 2508, 3, 176, 88, 0, 2507, 2505, 1, 0, 0, 0, 2507, 2506, 1, 0, 0, 0, 2508, 173, 1, 0, 0, 0, 2509, 2510, 3, 180, 90, 0, 2510, 2511, 5, 119, 0, 0, 2511, 2512, 3, 182, 91, 0, 2512, 2513, 5, 140, 0, 0, 2513, 2514, 5, 2, 0, 0, 2514, 2519, 3, 184, 92, 0, 2515, 2516, 5, 4, 0, 0, 2516, 2518, 3, 184, 92, 0, 2517, 2515, 1, 0, 0, 0, 2518, 2521, 1, 0, 0, 0, 2519, 2517, 1, 0, 0, 0, 2519, 2520, 1, 0, 0, 0, 2520, 2522, 1, 0, 0, 0, 2521, 2519, 1, 0, 0, 0, 2522, 2523, 5, 3, 0, 0, 2523, 175, 1, 0, 0, 0, 2524, 2525, 5, 2, 0, 0, 2525, 2530, 3, 180, 90, 0, 2526, 2527, 5, 4, 0, 0, 2527, 2529, 3, 180, 90, 0, 2528, 2526, 1, 0, 0, 0, 2529, 2532, 1, 0, 0, 0, 2530, 2528, 1, 0, 0, 0, 2530, 2531, 1, 0, 0, 0, 2531, 2533, 1, 0, 0, 0, 2532, 2530, 1, 0, 0, 0, 2533, 2534, 5, 3, 0, 0, 2534, 2535, 5, 119, 0, 0, 2535, 2536, 3, 182, 91, 0, 2536, 2537, 5, 140, 0, 0, 2537, 2538, 5, 2, 0, 0, 2538, 2543, 3, 178, 89, 0, 2539, 2540, 5, 4, 0, 0, 2540, 2542, 3, 178, 89, 0, 2541, 2539, 1, 0, 0, 0, 2542, 2545, 1, 0, 0, 0, 2543, 2541, 1, 0, 0, 0, 2543, 2544, 1, 0, 0, 0, 2544, 2546, 1, 0, 0, 0, 2545, 2543, 1, 0, 0, 0, 2546, 2547, 5, 3, 0, 0, 2547, 177, 1, 0, 0, 0, 2548, 2549, 5, 2, 0, 0, 2549, 2554, 3, 186, 93, 0, 2550, 2551, 5, 4, 0, 0, 2551, 2553, 3, 186, 93, 0, 2552, 2550, 1, 0, 0, 0, 2553, 2556, 1, 0, 0, 0, 2554, 2552, 1, 0, 0, 0, 2554, 2555, 1, 0, 0, 0, 2555, 2557, 1, 0, 0, 0, 2556, 2554, 1, 0, 0, 0, 2557, 2559, 5, 3, 0, 0, 2558, 2560, 3, 188, 94, 0, 2559, 2558, 1, 0, 0, 0, 2559, 2560, 1, 0, 0, 0, 2560, 179, 1, 0, 0, 0, 2561, 2562, 3, 376, 188, 0, 2562, 181, 1, 0, 0, 0, 2563, 2564, 3, 376, 188, 0, 2564, 183, 1, 0, 0, 0, 2565, 2567, 3, 186, 93, 0, 2566, 2568, 3, 188, 94, 0, 2567, 2566, 1, 0, 0, 0, 2567, 2568, 1, 0, 0, 0, 2568, 185, 1, 0, 0, 0, 2569, 2570, 3, 246, 123, 0, 2570, 187, 1, 0, 0, 0, 2571, 2573, 5, 20, 0, 0, 2572, 2571, 1, 0, 0, 0, 2572, 2573, 1, 0, 0, 0, 2573, 2574, 1, 0, 0, 0, 2574, 2575, 3, 376, 188, 0, 2575, 189, 1, 0, 0, 0, 2576, 2577, 5, 137, 0, 0, 2577, 2578, 5, 197, 0, 0, 2578, 2579, 5, 105, 0, 0, 2579, 191, 1, 0, 0, 0, 2580, 2581, 5, 137, 0, 0, 2581, 2582, 5, 105, 0, 0, 2582, 193, 1, 0, 0, 0, 2583, 2584, 5, 158, 0, 0, 2584, 2586, 5, 338, 0, 0, 2585, 2587, 5, 211, 0, 0, 2586, 2585, 1, 0, 0, 0, 2586, 2587, 1, 0, 0, 0, 2587, 2588, 1, 0, 0, 0, 2588, 2589, 3, 90, 45, 0, 2589, 2598, 5, 2, 0, 0, 2590, 2595, 3, 268, 134, 0, 2591, 2592, 5, 4, 0, 0, 2592, 2594, 3, 268, 134, 0, 2593, 2591, 1, 0, 0, 0, 2594, 2597, 1, 0, 0, 0, 2595, 2593, 1, 0, 0, 0, 2595, 2596, 1, 0, 0, 0, 2596, 2599, 1, 0, 0, 0, 2597, 2595, 1, 0, 0, 0, 2598, 2590, 1, 0, 0, 0, 2598, 2599, 1, 0, 0, 0, 2599, 2600, 1, 0, 0, 0, 2600, 2601, 5, 3, 0, 0, 2601, 2613, 3, 240, 120, 0, 2602, 2604, 5, 20, 0, 0, 2603, 2602, 1, 0, 0, 0, 2603, 2604, 1, 0, 0, 0, 2604, 2605, 1, 0, 0, 0, 2605, 2610, 3, 376, 188, 0, 2606, 2607, 5, 4, 0, 0, 2607, 2609, 3, 376, 188, 0, 2608, 2606, 1, 0, 0, 0, 2609, 2612, 1, 0, 0, 0, 2610, 2608, 1, 0, 0, 0, 2610, 2611, 1, 0, 0, 0, 2611, 2614, 1, 0, 0, 0, 2612, 2610, 1, 0, 0, 0, 2613, 2603, 1, 0, 0, 0, 2613, 2614, 1, 0, 0, 0, 2614, 195, 1, 0, 0, 0, 2615, 2616, 7, 22, 0, 0, 2616, 197, 1, 0, 0, 0, 2617, 2629, 3, 86, 43, 0, 2618, 2620, 5, 158, 0, 0, 2619, 2618, 1, 0, 0, 0, 2619, 2620, 1, 0, 0, 0, 2620, 2621, 1, 0, 0, 0, 2621, 2625, 3, 224, 112, 0, 2622, 2624, 3, 200, 100, 0, 2623, 2622, 1, 0, 0, 0, 2624, 2627, 1, 0, 0, 0, 2625, 2623, 1, 0, 0, 0, 2625, 2626, 1, 0, 0, 0, 2626, 2629, 1, 0, 0, 0, 2627, 2625, 1, 0, 0, 0, 2628, 2617, 1, 0, 0, 0, 2628, 2619, 1, 0, 0, 0, 2629, 199, 1, 0, 0, 0, 2630, 2634, 3, 202, 101, 0, 2631, 2634, 3, 162, 81, 0, 2632, 2634, 3, 168, 84, 0, 2633, 2630, 1, 0, 0, 0, 2633, 2631, 1, 0, 0, 0, 2633, 2632, 1, 0, 0, 0, 2634, 201, 1, 0, 0, 0, 2635, 2636, 3, 204, 102, 0, 2636, 2638, 5, 155, 0, 0, 2637, 2639, 5, 158, 0, 0, 2638, 2637, 1, 0, 0, 0, 2638, 2639, 1, 0, 0, 0, 2639, 2640, 1, 0, 0, 0, 2640, 2642, 3, 224, 112, 0, 2641, 2643, 3, 206, 103, 0, 2642, 2641, 1, 0, 0, 0, 2642, 2643, 1, 0, 0, 0, 2643, 2653, 1, 0, 0, 0, 2644, 2645, 5, 194, 0, 0, 2645, 2646, 3, 204, 102, 0, 2646, 2648, 5, 155, 0, 0, 2647, 2649, 5, 158, 0, 0, 2648, 2647, 1, 0, 0, 0, 2648, 2649, 1, 0, 0, 0, 2649, 2650, 1, 0, 0, 0, 2650, 2651, 3, 224, 112, 0, 2651, 2653, 1, 0, 0, 0, 2652, 2635, 1, 0, 0, 0, 2652, 2644, 1, 0, 0, 0, 2653, 203, 1, 0, 0, 0, 2654, 2656, 5, 144, 0, 0, 2655, 2654, 1, 0, 0, 0, 2655, 2656, 1, 0, 0, 0, 2656, 2679, 1, 0, 0, 0, 2657, 2679, 5, 60, 0, 0, 2658, 2660, 5, 161, 0, 0, 2659, 2661, 5, 211, 0, 0, 2660, 2659, 1, 0, 0, 0, 2660, 2661, 1, 0, 0, 0, 2661, 2679, 1, 0, 0, 0, 2662, 2664, 5, 161, 0, 0, 2663, 2662, 1, 0, 0, 0, 2663, 2664, 1, 0, 0, 0, 2664, 2665, 1, 0, 0, 0, 2665, 2679, 5, 264, 0, 0, 2666, 2668, 5, 250, 0, 0, 2667, 2669, 5, 211, 0, 0, 2668, 2667, 1, 0, 0, 0, 2668, 2669, 1, 0, 0, 0, 2669, 2679, 1, 0, 0, 0, 2670, 2672, 5, 124, 0, 0, 2671, 2673, 5, 211, 0, 0, 2672, 2671, 1, 0, 0, 0, 2672, 2673, 1, 0, 0, 0, 2673, 2679, 1, 0, 0, 0, 2674, 2676, 5, 161, 0, 0, 2675, 2674, 1, 0, 0, 0, 2675, 2676, 1, 0, 0, 0, 2676, 2677, 1, 0, 0, 0, 2677, 2679, 5, 15, 0, 0, 2678, 2655, 1, 0, 0, 0, 2678, 2657, 1, 0, 0, 0, 2678, 2658, 1, 0, 0, 0, 2678, 2663, 1, 0, 0, 0, 2678, 2666, 1, 0, 0, 0, 2678, 2670, 1, 0, 0, 0, 2678, 2675, 1, 0, 0, 0, 2679, 205, 1, 0, 0, 0, 2680, 2681, 5, 203, 0, 0, 2681, 2685, 3, 276, 138, 0, 2682, 2683, 5, 332, 0, 0, 2683, 2685, 3, 212, 106, 0, 2684, 2680, 1, 0, 0, 0, 2684, 2682, 1, 0, 0, 0, 2685, 207, 1, 0, 0, 0, 2686, 2687, 5, 295, 0, 0, 2687, 2689, 5, 2, 0, 0, 2688, 2690, 3, 210, 105, 0, 2689, 2688, 1, 0, 0, 0, 2689, 2690, 1, 0, 0, 0, 2690, 2691, 1, 0, 0, 0, 2691, 2696, 5, 3, 0, 0, 2692, 2693, 5, 243, 0, 0, 2693, 2694, 5, 2, 0, 0, 2694, 2695, 5, 382, 0, 0, 2695, 2697, 5, 3, 0, 0, 2696, 2692, 1, 0, 0, 0, 2696, 2697, 1, 0, 0, 0, 2697, 209, 1, 0, 0, 0, 2698, 2700, 5, 362, 0, 0, 2699, 2698, 1, 0, 0, 0, 2699, 2700, 1, 0, 0, 0, 2700, 2701, 1, 0, 0, 0, 2701, 2702, 7, 23, 0, 0, 2702, 2723, 5, 222, 0, 0, 2703, 2704, 3, 268, 134, 0, 2704, 2705, 5, 258, 0, 0, 2705, 2723, 1, 0, 0, 0, 2706, 2707, 5, 29, 0, 0, 2707, 2708, 5, 382, 0, 0, 2708, 2709, 5, 210, 0, 0, 2709, 2710, 5, 201, 0, 0, 2710, 2719, 5, 382, 0, 0, 2711, 2717, 5, 203, 0, 0, 2712, 2718, 3, 376, 188, 0, 2713, 2714, 3, 370, 185, 0, 2714, 2715, 5, 2, 0, 0, 2715, 2716, 5, 3, 0, 0, 2716, 2718, 1, 0, 0, 0, 2717, 2712, 1, 0, 0, 0, 2717, 2713, 1, 0, 0, 0, 2718, 2720, 1, 0, 0, 0, 2719, 2711, 1, 0, 0, 0, 2719, 2720, 1, 0, 0, 0, 2720, 2723, 1, 0, 0, 0, 2721, 2723, 3, 268, 134, 0, 2722, 2699, 1, 0, 0, 0, 2722, 2703, 1, 0, 0, 0, 2722, 2706, 1, 0, 0, 0, 2722, 2721, 1, 0, 0, 0, 2723, 211, 1, 0, 0, 0, 2724, 2725, 5, 2, 0, 0, 2725, 2726, 3, 214, 107, 0, 2726, 2727, 5, 3, 0, 0, 2727, 213, 1, 0, 0, 0, 2728, 2733, 3, 372, 186, 0, 2729, 2730, 5, 4, 0, 0, 2730, 2732, 3, 372, 186, 0, 2731, 2729, 1, 0, 0, 0, 2732, 2735, 1, 0, 0, 0, 2733, 2731, 1, 0, 0, 0, 2733, 2734, 1, 0, 0, 0, 2734, 215, 1, 0, 0, 0, 2735, 2733, 1, 0, 0, 0, 2736, 2737, 5, 2, 0, 0, 2737, 2742, 3, 218, 109, 0, 2738, 2739, 5, 4, 0, 0, 2739, 2741, 3, 218, 109, 0, 2740, 2738, 1, 0, 0, 0, 2741, 2744, 1, 0, 0, 0, 2742, 2740, 1, 0, 0, 0, 2742, 2743, 1, 0, 0, 0, 2743, 2745, 1, 0, 0, 0, 2744, 2742, 1, 0, 0, 0, 2745, 2746, 5, 3, 0, 0, 2746, 217, 1, 0, 0, 0, 2747, 2749, 3, 372, 186, 0, 2748, 2750, 7, 15, 0, 0, 2749, 2748, 1, 0, 0, 0, 2749, 2750, 1, 0, 0, 0, 2750, 219, 1, 0, 0, 0, 2751, 2752, 5, 2, 0, 0, 2752, 2757, 3, 222, 111, 0, 2753, 2754, 5, 4, 0, 0, 2754, 2756, 3, 222, 111, 0, 2755, 2753, 1, 0, 0, 0, 2756, 2759, 1, 0, 0, 0, 2757, 2755, 1, 0, 0, 0, 2757, 2758, 1, 0, 0, 0, 2758, 2760, 1, 0, 0, 0, 2759, 2757, 1, 0, 0, 0, 2760, 2761, 5, 3, 0, 0, 2761, 221, 1, 0, 0, 0, 2762, 2764, 3, 96, 48, 0, 2763, 2765, 3, 24, 12, 0, 2764, 2763, 1, 0, 0, 0, 2764, 2765, 1, 0, 0, 0, 2765, 223, 1, 0, 0, 0, 2766, 2770, 3, 86, 43, 0, 2767, 2770, 3, 90, 45, 0, 2768, 2770, 3, 98, 49, 0, 2769, 2766, 1, 0, 0, 0, 2769, 2767, 1, 0, 0, 0, 2769, 2768, 1, 0, 0, 0, 2770, 2772, 1, 0, 0, 0, 2771, 2773, 3, 150, 75, 0, 2772, 2771, 1, 0, 0, 0, 2772, 2773, 1, 0, 0, 0, 2773, 2775, 1, 0, 0, 0, 2774, 2776, 3, 208, 104, 0, 2775, 2774, 1, 0, 0, 0, 2775, 2776, 1, 0, 0, 0, 2776, 2777, 1, 0, 0, 0, 2777, 2778, 3, 240, 120, 0, 2778, 2798, 1, 0, 0, 0, 2779, 2780, 5, 2, 0, 0, 2780, 2781, 3, 26, 13, 0, 2781, 2783, 5, 3, 0, 0, 2782, 2784, 3, 208, 104, 0, 2783, 2782, 1, 0, 0, 0, 2783, 2784, 1, 0, 0, 0, 2784, 2785, 1, 0, 0, 0, 2785, 2786, 3, 240, 120, 0, 2786, 2798, 1, 0, 0, 0, 2787, 2788, 5, 2, 0, 0, 2788, 2789, 3, 198, 99, 0, 2789, 2791, 5, 3, 0, 0, 2790, 2792, 3, 208, 104, 0, 2791, 2790, 1, 0, 0, 0, 2791, 2792, 1, 0, 0, 0, 2792, 2793, 1, 0, 0, 0, 2793, 2794, 3, 240, 120, 0, 2794, 2798, 1, 0, 0, 0, 2795, 2798, 3, 226, 113, 0, 2796, 2798, 3, 238, 119, 0, 2797, 2769, 1, 0, 0, 0, 2797, 2779, 1, 0, 0, 0, 2797, 2787, 1, 0, 0, 0, 2797, 2795, 1, 0, 0, 0, 2797, 2796, 1, 0, 0, 0, 2798, 225, 1, 0, 0, 0, 2799, 2800, 5, 333, 0, 0, 2800, 2805, 3, 268, 134, 0, 2801, 2802, 5, 4, 0, 0, 2802, 2804, 3, 268, 134, 0, 2803, 2801, 1, 0, 0, 0, 2804, 2807, 1, 0, 0, 0, 2805, 2803, 1, 0, 0, 0, 2805, 2806, 1, 0, 0, 0, 2806, 2808, 1, 0, 0, 0, 2807, 2805, 1, 0, 0, 0, 2808, 2809, 3, 240, 120, 0, 2809, 227, 1, 0, 0, 0, 2810, 2811, 5, 293, 0, 0, 2811, 2813, 3, 86, 43, 0, 2812, 2814, 3, 230, 115, 0, 2813, 2812, 1, 0, 0, 0, 2813, 2814, 1, 0, 0, 0, 2814, 2830, 1, 0, 0, 0, 2815, 2816, 5, 293, 0, 0, 2816, 2817, 5, 2, 0, 0, 2817, 2818, 3, 86, 43, 0, 2818, 2820, 5, 3, 0, 0, 2819, 2821, 3, 230, 115, 0, 2820, 2819, 1, 0, 0, 0, 2820, 2821, 1, 0, 0, 0, 2821, 2830, 1, 0, 0, 0, 2822, 2823, 5, 293, 0, 0, 2823, 2824, 5, 2, 0, 0, 2824, 2825, 3, 26, 13, 0, 2825, 2827, 5, 3, 0, 0, 2826, 2828, 3, 230, 115, 0, 2827, 2826, 1, 0, 0, 0, 2827, 2828, 1, 0, 0, 0, 2828, 2830, 1, 0, 0, 0, 2829, 2810, 1, 0, 0, 0, 2829, 2815, 1, 0, 0, 0, 2829, 2822, 1, 0, 0, 0, 2830, 229, 1, 0, 0, 0, 2831, 2832, 5, 346, 0, 0, 2832, 2833, 5, 274, 0, 0, 2833, 2851, 5, 217, 0, 0, 2834, 2835, 7, 24, 0, 0, 2835, 2848, 5, 31, 0, 0, 2836, 2837, 5, 2, 0, 0, 2837, 2842, 3, 268, 134, 0, 2838, 2839, 5, 4, 0, 0, 2839, 2841, 3, 268, 134, 0, 2840, 2838, 1, 0, 0, 0, 2841, 2844, 1, 0, 0, 0, 2842, 2840, 1, 0, 0, 0, 2842, 2843, 1, 0, 0, 0, 2843, 2845, 1, 0, 0, 0, 2844, 2842, 1, 0, 0, 0, 2845, 2846, 5, 3, 0, 0, 2846, 2849, 1, 0, 0, 0, 2847, 2849, 3, 268, 134, 0, 2848, 2836, 1, 0, 0, 0, 2848, 2847, 1, 0, 0, 0, 2849, 2851, 1, 0, 0, 0, 2850, 2831, 1, 0, 0, 0, 2850, 2834, 1, 0, 0, 0, 2851, 2868, 1, 0, 0, 0, 2852, 2853, 7, 25, 0, 0, 2853, 2866, 5, 31, 0, 0, 2854, 2855, 5, 2, 0, 0, 2855, 2860, 3, 108, 54, 0, 2856, 2857, 5, 4, 0, 0, 2857, 2859, 3, 108, 54, 0, 2858, 2856, 1, 0, 0, 0, 2859, 2862, 1, 0, 0, 0, 2860, 2858, 1, 0, 0, 0, 2860, 2861, 1, 0, 0, 0, 2861, 2863, 1, 0, 0, 0, 2862, 2860, 1, 0, 0, 0, 2863, 2864, 5, 3, 0, 0, 2864, 2867, 1, 0, 0, 0, 2865, 2867, 3, 108, 54, 0, 2866, 2854, 1, 0, 0, 0, 2866, 2865, 1, 0, 0, 0, 2867, 2869, 1, 0, 0, 0, 2868, 2852, 1, 0, 0, 0, 2868, 2869, 1, 0, 0, 0, 2869, 231, 1, 0, 0, 0, 2870, 2871, 3, 376, 188, 0, 2871, 2872, 5, 373, 0, 0, 2872, 2873, 3, 228, 114, 0, 2873, 233, 1, 0, 0, 0, 2874, 2877, 3, 228, 114, 0, 2875, 2877, 3, 232, 116, 0, 2876, 2874, 1, 0, 0, 0, 2876, 2875, 1, 0, 0, 0, 2877, 235, 1, 0, 0, 0, 2878, 2881, 3, 234, 117, 0, 2879, 2881, 3, 272, 136, 0, 2880, 2878, 1, 0, 0, 0, 2880, 2879, 1, 0, 0, 0, 2881, 237, 1, 0, 0, 0, 2882, 2883, 3, 366, 183, 0, 2883, 2892, 5, 2, 0, 0, 2884, 2889, 3, 236, 118, 0, 2885, 2886, 5, 4, 0, 0, 2886, 2888, 3, 236, 118, 0, 2887, 2885, 1, 0, 0, 0, 2888, 2891, 1, 0, 0, 0, 2889, 2887, 1, 0, 0, 0, 2889, 2890, 1, 0, 0, 0, 2890, 2893, 1, 0, 0, 0, 2891, 2889, 1, 0, 0, 0, 2892, 2884, 1, 0, 0, 0, 2892, 2893, 1, 0, 0, 0, 2893, 2894, 1, 0, 0, 0, 2894, 2895, 5, 3, 0, 0, 2895, 2896, 3, 240, 120, 0, 2896, 239, 1, 0, 0, 0, 2897, 2899, 5, 20, 0, 0, 2898, 2897, 1, 0, 0, 0, 2898, 2899, 1, 0, 0, 0, 2899, 2900, 1, 0, 0, 0, 2900, 2902, 3, 378, 189, 0, 2901, 2903, 3, 212, 106, 0, 2902, 2901, 1, 0, 0, 0, 2902, 2903, 1, 0, 0, 0, 2903, 2905, 1, 0, 0, 0, 2904, 2898, 1, 0, 0, 0, 2904, 2905, 1, 0, 0, 0, 2905, 241, 1, 0, 0, 0, 2906, 2907, 5, 257, 0, 0, 2907, 2908, 5, 121, 0, 0, 2908, 2909, 5, 266, 0, 0, 2909, 2913, 3, 388, 194, 0, 2910, 2911, 5, 346, 0, 0, 2911, 2912, 5, 267, 0, 0, 2912, 2914, 3, 54, 27, 0, 2913, 2910, 1, 0, 0, 0, 2913, 2914, 1, 0, 0, 0, 2914, 2956, 1, 0, 0, 0, 2915, 2916, 5, 257, 0, 0, 2916, 2917, 5, 121, 0, 0, 2917, 2927, 5, 85, 0, 0, 2918, 2919, 5, 113, 0, 0, 2919, 2920, 5, 299, 0, 0, 2920, 2921, 5, 31, 0, 0, 2921, 2925, 3, 388, 194, 0, 2922, 2923, 5, 101, 0, 0, 2923, 2924, 5, 31, 0, 0, 2924, 2926, 3, 388, 194, 0, 2925, 2922, 1, 0, 0, 0, 2925, 2926, 1, 0, 0, 0, 2926, 2928, 1, 0, 0, 0, 2927, 2918, 1, 0, 0, 0, 2927, 2928, 1, 0, 0, 0, 2928, 2934, 1, 0, 0, 0, 2929, 2930, 5, 48, 0, 0, 2930, 2931, 5, 154, 0, 0, 2931, 2932, 5, 299, 0, 0, 2932, 2933, 5, 31, 0, 0, 2933, 2935, 3, 388, 194, 0, 2934, 2929, 1, 0, 0, 0, 2934, 2935, 1, 0, 0, 0, 2935, 2941, 1, 0, 0, 0, 2936, 2937, 5, 177, 0, 0, 2937, 2938, 5, 156, 0, 0, 2938, 2939, 5, 299, 0, 0, 2939, 2940, 5, 31, 0, 0, 2940, 2942, 3, 388, 194, 0, 2941, 2936, 1, 0, 0, 0, 2941, 2942, 1, 0, 0, 0, 2942, 2947, 1, 0, 0, 0, 2943, 2944, 5, 166, 0, 0, 2944, 2945, 5, 299, 0, 0, 2945, 2946, 5, 31, 0, 0, 2946, 2948, 3, 388, 194, 0, 2947, 2943, 1, 0, 0, 0, 2947, 2948, 1, 0, 0, 0, 2948, 2953, 1, 0, 0, 0, 2949, 2950, 5, 198, 0, 0, 2950, 2951, 5, 83, 0, 0, 2951, 2952, 5, 20, 0, 0, 2952, 2954, 3, 388, 194, 0, 2953, 2949, 1, 0, 0, 0, 2953, 2954, 1, 0, 0, 0, 2954, 2956, 1, 0, 0, 0, 2955, 2906, 1, 0, 0, 0, 2955, 2915, 1, 0, 0, 0, 2956, 243, 1, 0, 0, 0, 2957, 2962, 3, 246, 123, 0, 2958, 2959, 5, 4, 0, 0, 2959, 2961, 3, 246, 123, 0, 2960, 2958, 1, 0, 0, 0, 2961, 2964, 1, 0, 0, 0, 2962, 2960, 1, 0, 0, 0, 2962, 2963, 1, 0, 0, 0, 2963, 245, 1, 0, 0, 0, 2964, 2962, 1, 0, 0, 0, 2965, 2970, 3, 372, 186, 0, 2966, 2967, 5, 5, 0, 0, 2967, 2969, 3, 372, 186, 0, 2968, 2966, 1, 0, 0, 0, 2969, 2972, 1, 0, 0, 0, 2970, 2968, 1, 0, 0, 0, 2970, 2971, 1, 0, 0, 0, 2971, 247, 1, 0, 0, 0, 2972, 2970, 1, 0, 0, 0, 2973, 2978, 3, 250, 125, 0, 2974, 2975, 5, 4, 0, 0, 2975, 2977, 3, 250, 125, 0, 2976, 2974, 1, 0, 0, 0, 2977, 2980, 1, 0, 0, 0, 2978, 2976, 1, 0, 0, 0, 2978, 2979, 1, 0, 0, 0, 2979, 249, 1, 0, 0, 0, 2980, 2978, 1, 0, 0, 0, 2981, 2984, 3, 246, 123, 0, 2982, 2983, 5, 207, 0, 0, 2983, 2985, 3, 54, 27, 0, 2984, 2982, 1, 0, 0, 0, 2984, 2985, 1, 0, 0, 0, 2985, 251, 1, 0, 0, 0, 2986, 2987, 3, 372, 186, 0, 2987, 2988, 5, 5, 0, 0, 2988, 2990, 1, 0, 0, 0, 2989, 2986, 1, 0, 0, 0, 2989, 2990, 1, 0, 0, 0, 2990, 2991, 1, 0, 0, 0, 2991, 2992, 3, 372, 186, 0, 2992, 253, 1, 0, 0, 0, 2993, 2994, 3, 372, 186, 0, 2994, 2995, 5, 5, 0, 0, 2995, 2997, 1, 0, 0, 0, 2996, 2993, 1, 0, 0, 0, 2996, 2997, 1, 0, 0, 0, 2997, 2998, 1, 0, 0, 0, 2998, 2999, 3, 372, 186, 0, 2999, 255, 1, 0, 0, 0, 3000, 3003, 3, 92, 46, 0, 3001, 3003, 3, 268, 134, 0, 3002, 3000, 1, 0, 0, 0, 3002, 3001, 1, 0, 0, 0, 3003, 3011, 1, 0, 0, 0, 3004, 3006, 5, 20, 0, 0, 3005, 3004, 1, 0, 0, 0, 3005, 3006, 1, 0, 0, 0, 3006, 3009, 1, 0, 0, 0, 3007, 3010, 3, 372, 186, 0, 3008, 3010, 3, 212, 106, 0, 3009, 3007, 1, 0, 0, 0, 3009, 3008, 1, 0, 0, 0, 3010, 3012, 1, 0, 0, 0, 3011, 3005, 1, 0, 0, 0, 3011, 3012, 1, 0, 0, 0, 3012, 257, 1, 0, 0, 0, 3013, 3018, 3, 256, 128, 0, 3014, 3015, 5, 4, 0, 0, 3015, 3017, 3, 256, 128, 0, 3016, 3014, 1, 0, 0, 0, 3017, 3020, 1, 0, 0, 0, 3018, 3016, 1, 0, 0, 0, 3018, 3019, 1, 0, 0, 0, 3019, 259, 1, 0, 0, 0, 3020, 3018, 1, 0, 0, 0, 3021, 3022, 5, 2, 0, 0, 3022, 3027, 3, 262, 131, 0, 3023, 3024, 5, 4, 0, 0, 3024, 3026, 3, 262, 131, 0, 3025, 3023, 1, 0, 0, 0, 3026, 3029, 1, 0, 0, 0, 3027, 3025, 1, 0, 0, 0, 3027, 3028, 1, 0, 0, 0, 3028, 3030, 1, 0, 0, 0, 3029, 3027, 1, 0, 0, 0, 3030, 3031, 5, 3, 0, 0, 3031, 261, 1, 0, 0, 0, 3032, 3035, 3, 264, 132, 0, 3033, 3035, 3, 336, 168, 0, 3034, 3032, 1, 0, 0, 0, 3034, 3033, 1, 0, 0, 0, 3035, 263, 1, 0, 0, 0, 3036, 3050, 3, 370, 185, 0, 3037, 3038, 3, 376, 188, 0, 3038, 3039, 5, 2, 0, 0, 3039, 3044, 3, 266, 133, 0, 3040, 3041, 5, 4, 0, 0, 3041, 3043, 3, 266, 133, 0, 3042, 3040, 1, 0, 0, 0, 3043, 3046, 1, 0, 0, 0, 3044, 3042, 1, 0, 0, 0, 3044, 3045, 1, 0, 0, 0, 3045, 3047, 1, 0, 0, 0, 3046, 3044, 1, 0, 0, 0, 3047, 3048, 5, 3, 0, 0, 3048, 3050, 1, 0, 0, 0, 3049, 3036, 1, 0, 0, 0, 3049, 3037, 1, 0, 0, 0, 3050, 265, 1, 0, 0, 0, 3051, 3054, 3, 370, 185, 0, 3052, 3054, 3, 288, 144, 0, 3053, 3051, 1, 0, 0, 0, 3053, 3052, 1, 0, 0, 0, 3054, 267, 1, 0, 0, 0, 3055, 3056, 3, 276, 138, 0, 3056, 269, 1, 0, 0, 0, 3057, 3058, 3, 376, 188, 0, 3058, 3059, 5, 373, 0, 0, 3059, 3060, 3, 268, 134, 0, 3060, 271, 1, 0, 0, 0, 3061, 3064, 3, 268, 134, 0, 3062, 3064, 3, 270, 135, 0, 3063, 3061, 1, 0, 0, 0, 3063, 3062, 1, 0, 0, 0, 3064, 273, 1, 0, 0, 0, 3065, 3070, 3, 268, 134, 0, 3066, 3067, 5, 4, 0, 0, 3067, 3069, 3, 268, 134, 0, 3068, 3066, 1, 0, 0, 0, 3069, 3072, 1, 0, 0, 0, 3070, 3068, 1, 0, 0, 0, 3070, 3071, 1, 0, 0, 0, 3071, 275, 1, 0, 0, 0, 3072, 3070, 1, 0, 0, 0, 3073, 3074, 6, 138, -1, 0, 3074, 3075, 7, 26, 0, 0, 3075, 3086, 3, 276, 138, 5, 3076, 3077, 5, 105, 0, 0, 3077, 3078, 5, 2, 0, 0, 3078, 3079, 3, 26, 13, 0, 3079, 3080, 5, 3, 0, 0, 3080, 3086, 1, 0, 0, 0, 3081, 3083, 3, 280, 140, 0, 3082, 3084, 3, 278, 139, 0, 3083, 3082, 1, 0, 0, 0, 3083, 3084, 1, 0, 0, 0, 3084, 3086, 1, 0, 0, 0, 3085, 3073, 1, 0, 0, 0, 3085, 3076, 1, 0, 0, 0, 3085, 3081, 1, 0, 0, 0, 3086, 3095, 1, 0, 0, 0, 3087, 3088, 10, 2, 0, 0, 3088, 3089, 5, 14, 0, 0, 3089, 3094, 3, 276, 138, 3, 3090, 3091, 10, 1, 0, 0, 3091, 3092, 5, 208, 0, 0, 3092, 3094, 3, 276, 138, 2, 3093, 3087, 1, 0, 0, 0, 3093, 3090, 1, 0, 0, 0, 3094, 3097, 1, 0, 0, 0, 3095, 3093, 1, 0, 0, 0, 3095, 3096, 1, 0, 0, 0, 3096, 277, 1, 0, 0, 0, 3097, 3095, 1, 0, 0, 0, 3098, 3100, 5, 197, 0, 0, 3099, 3098, 1, 0, 0, 0, 3099, 3100, 1, 0, 0, 0, 3100, 3101, 1, 0, 0, 0, 3101, 3102, 5, 24, 0, 0, 3102, 3103, 3, 280, 140, 0, 3103, 3104, 5, 14, 0, 0, 3104, 3105, 3, 280, 140, 0, 3105, 3181, 1, 0, 0, 0, 3106, 3108, 5, 197, 0, 0, 3107, 3106, 1, 0, 0, 0, 3107, 3108, 1, 0, 0, 0, 3108, 3109, 1, 0, 0, 0, 3109, 3110, 5, 140, 0, 0, 3110, 3111, 5, 2, 0, 0, 3111, 3116, 3, 268, 134, 0, 3112, 3113, 5, 4, 0, 0, 3113, 3115, 3, 268, 134, 0, 3114, 3112, 1, 0, 0, 0, 3115, 3118, 1, 0, 0, 0, 3116, 3114, 1, 0, 0, 0, 3116, 3117, 1, 0, 0, 0, 3117, 3119, 1, 0, 0, 0, 3118, 3116, 1, 0, 0, 0, 3119, 3120, 5, 3, 0, 0, 3120, 3181, 1, 0, 0, 0, 3121, 3123, 5, 197, 0, 0, 3122, 3121, 1, 0, 0, 0, 3122, 3123, 1, 0, 0, 0, 3123, 3124, 1, 0, 0, 0, 3124, 3125, 5, 140, 0, 0, 3125, 3126, 5, 2, 0, 0, 3126, 3127, 3, 26, 13, 0, 3127, 3128, 5, 3, 0, 0, 3128, 3181, 1, 0, 0, 0, 3129, 3131, 5, 197, 0, 0, 3130, 3129, 1, 0, 0, 0, 3130, 3131, 1, 0, 0, 0, 3131, 3132, 1, 0, 0, 0, 3132, 3133, 7, 27, 0, 0, 3133, 3181, 3, 280, 140, 0, 3134, 3136, 5, 197, 0, 0, 3135, 3134, 1, 0, 0, 0, 3135, 3136, 1, 0, 0, 0, 3136, 3137, 1, 0, 0, 0, 3137, 3138, 7, 28, 0, 0, 3138, 3152, 7, 29, 0, 0, 3139, 3140, 5, 2, 0, 0, 3140, 3153, 5, 3, 0, 0, 3141, 3142, 5, 2, 0, 0, 3142, 3147, 3, 268, 134, 0, 3143, 3144, 5, 4, 0, 0, 3144, 3146, 3, 268, 134, 0, 3145, 3143, 1, 0, 0, 0, 3146, 3149, 1, 0, 0, 0, 3147, 3145, 1, 0, 0, 0, 3147, 3148, 1, 0, 0, 0, 3148, 3150, 1, 0, 0, 0, 3149, 3147, 1, 0, 0, 0, 3150, 3151, 5, 3, 0, 0, 3151, 3153, 1, 0, 0, 0, 3152, 3139, 1, 0, 0, 0, 3152, 3141, 1, 0, 0, 0, 3153, 3181, 1, 0, 0, 0, 3154, 3156, 5, 197, 0, 0, 3155, 3154, 1, 0, 0, 0, 3155, 3156, 1, 0, 0, 0, 3156, 3157, 1, 0, 0, 0, 3157, 3158, 7, 28, 0, 0, 3158, 3161, 3, 280, 140, 0, 3159, 3160, 5, 100, 0, 0, 3160, 3162, 3, 388, 194, 0, 3161, 3159, 1, 0, 0, 0, 3161, 3162, 1, 0, 0, 0, 3162, 3181, 1, 0, 0, 0, 3163, 3165, 5, 153, 0, 0, 3164, 3166, 5, 197, 0, 0, 3165, 3164, 1, 0, 0, 0, 3165, 3166, 1, 0, 0, 0, 3166, 3167, 1, 0, 0, 0, 3167, 3181, 5, 198, 0, 0, 3168, 3170, 5, 153, 0, 0, 3169, 3171, 5, 197, 0, 0, 3170, 3169, 1, 0, 0, 0, 3170, 3171, 1, 0, 0, 0, 3171, 3172, 1, 0, 0, 0, 3172, 3181, 7, 30, 0, 0, 3173, 3175, 5, 153, 0, 0, 3174, 3176, 5, 197, 0, 0, 3175, 3174, 1, 0, 0, 0, 3175, 3176, 1, 0, 0, 0, 3176, 3177, 1, 0, 0, 0, 3177, 3178, 5, 92, 0, 0, 3178, 3179, 5, 123, 0, 0, 3179, 3181, 3, 280, 140, 0, 3180, 3099, 1, 0, 0, 0, 3180, 3107, 1, 0, 0, 0, 3180, 3122, 1, 0, 0, 0, 3180, 3130, 1, 0, 0, 0, 3180, 3135, 1, 0, 0, 0, 3180, 3155, 1, 0, 0, 0, 3180, 3163, 1, 0, 0, 0, 3180, 3168, 1, 0, 0, 0, 3180, 3173, 1, 0, 0, 0, 3181, 279, 1, 0, 0, 0, 3182, 3183, 6, 140, -1, 0, 3183, 3187, 3, 284, 142, 0, 3184, 3185, 7, 31, 0, 0, 3185, 3187, 3, 280, 140, 7, 3186, 3182, 1, 0, 0, 0, 3186, 3184, 1, 0, 0, 0, 3187, 3209, 1, 0, 0, 0, 3188, 3189, 10, 6, 0, 0, 3189, 3190, 7, 32, 0, 0, 3190, 3208, 3, 280, 140, 7, 3191, 3192, 10, 5, 0, 0, 3192, 3193, 7, 33, 0, 0, 3193, 3208, 3, 280, 140, 6, 3194, 3195, 10, 4, 0, 0, 3195, 3196, 5, 367, 0, 0, 3196, 3208, 3, 280, 140, 5, 3197, 3198, 10, 3, 0, 0, 3198, 3199, 5, 370, 0, 0, 3199, 3208, 3, 280, 140, 4, 3200, 3201, 10, 2, 0, 0, 3201, 3202, 5, 368, 0, 0, 3202, 3208, 3, 280, 140, 3, 3203, 3204, 10, 1, 0, 0, 3204, 3205, 3, 290, 145, 0, 3205, 3206, 3, 280, 140, 2, 3206, 3208, 1, 0, 0, 0, 3207, 3188, 1, 0, 0, 0, 3207, 3191, 1, 0, 0, 0, 3207, 3194, 1, 0, 0, 0, 3207, 3197, 1, 0, 0, 0, 3207, 3200, 1, 0, 0, 0, 3207, 3203, 1, 0, 0, 0, 3208, 3211, 1, 0, 0, 0, 3209, 3207, 1, 0, 0, 0, 3209, 3210, 1, 0, 0, 0, 3210, 281, 1, 0, 0, 0, 3211, 3209, 1, 0, 0, 0, 3212, 3213, 7, 34, 0, 0, 3213, 283, 1, 0, 0, 0, 3214, 3215, 6, 142, -1, 0, 3215, 3464, 7, 35, 0, 0, 3216, 3217, 7, 36, 0, 0, 3217, 3220, 5, 2, 0, 0, 3218, 3221, 3, 282, 141, 0, 3219, 3221, 3, 388, 194, 0, 3220, 3218, 1, 0, 0, 0, 3220, 3219, 1, 0, 0, 0, 3221, 3222, 1, 0, 0, 0, 3222, 3223, 5, 4, 0, 0, 3223, 3224, 3, 280, 140, 0, 3224, 3225, 5, 4, 0, 0, 3225, 3226, 3, 280, 140, 0, 3226, 3227, 5, 3, 0, 0, 3227, 3464, 1, 0, 0, 0, 3228, 3229, 7, 37, 0, 0, 3229, 3232, 5, 2, 0, 0, 3230, 3233, 3, 282, 141, 0, 3231, 3233, 3, 388, 194, 0, 3232, 3230, 1, 0, 0, 0, 3232, 3231, 1, 0, 0, 0, 3233, 3234, 1, 0, 0, 0, 3234, 3235, 5, 4, 0, 0, 3235, 3236, 3, 280, 140, 0, 3236, 3237, 5, 4, 0, 0, 3237, 3238, 3, 280, 140, 0, 3238, 3239, 5, 3, 0, 0, 3239, 3464, 1, 0, 0, 0, 3240, 3242, 5, 35, 0, 0, 3241, 3243, 3, 350, 175, 0, 3242, 3241, 1, 0, 0, 0, 3243, 3244, 1, 0, 0, 0, 3244, 3242, 1, 0, 0, 0, 3244, 3245, 1, 0, 0, 0, 3245, 3248, 1, 0, 0, 0, 3246, 3247, 5, 97, 0, 0, 3247, 3249, 3, 268, 134, 0, 3248, 3246, 1, 0, 0, 0, 3248, 3249, 1, 0, 0, 0, 3249, 3250, 1, 0, 0, 0, 3250, 3251, 5, 99, 0, 0, 3251, 3464, 1, 0, 0, 0, 3252, 3253, 5, 35, 0, 0, 3253, 3255, 3, 268, 134, 0, 3254, 3256, 3, 350, 175, 0, 3255, 3254, 1, 0, 0, 0, 3256, 3257, 1, 0, 0, 0, 3257, 3255, 1, 0, 0, 0, 3257, 3258, 1, 0, 0, 0, 3258, 3261, 1, 0, 0, 0, 3259, 3260, 5, 97, 0, 0, 3260, 3262, 3, 268, 134, 0, 3261, 3259, 1, 0, 0, 0, 3261, 3262, 1, 0, 0, 0, 3262, 3263, 1, 0, 0, 0, 3263, 3264, 5, 99, 0, 0, 3264, 3464, 1, 0, 0, 0, 3265, 3266, 7, 38, 0, 0, 3266, 3267, 5, 2, 0, 0, 3267, 3268, 3, 268, 134, 0, 3268, 3269, 5, 20, 0, 0, 3269, 3270, 3, 318, 159, 0, 3270, 3271, 5, 3, 0, 0, 3271, 3464, 1, 0, 0, 0, 3272, 3273, 5, 286, 0, 0, 3273, 3282, 5, 2, 0, 0, 3274, 3279, 3, 256, 128, 0, 3275, 3276, 5, 4, 0, 0, 3276, 3278, 3, 256, 128, 0, 3277, 3275, 1, 0, 0, 0, 3278, 3281, 1, 0, 0, 0, 3279, 3277, 1, 0, 0, 0, 3279, 3280, 1, 0, 0, 0, 3280, 3283, 1, 0, 0, 0, 3281, 3279, 1, 0, 0, 0, 3282, 3274, 1, 0, 0, 0, 3282, 3283, 1, 0, 0, 0, 3283, 3284, 1, 0, 0, 0, 3284, 3464, 5, 3, 0, 0, 3285, 3286, 5, 116, 0, 0, 3286, 3287, 5, 2, 0, 0, 3287, 3290, 3, 268, 134, 0, 3288, 3289, 5, 138, 0, 0, 3289, 3291, 5, 199, 0, 0, 3290, 3288, 1, 0, 0, 0, 3290, 3291, 1, 0, 0, 0, 3291, 3292, 1, 0, 0, 0, 3292, 3293, 5, 3, 0, 0, 3293, 3464, 1, 0, 0, 0, 3294, 3295, 5, 17, 0, 0, 3295, 3296, 5, 2, 0, 0, 3296, 3299, 3, 268, 134, 0, 3297, 3298, 5, 138, 0, 0, 3298, 3300, 5, 199, 0, 0, 3299, 3297, 1, 0, 0, 0, 3299, 3300, 1, 0, 0, 0, 3300, 3301, 1, 0, 0, 0, 3301, 3302, 5, 3, 0, 0, 3302, 3464, 1, 0, 0, 0, 3303, 3304, 5, 157, 0, 0, 3304, 3305, 5, 2, 0, 0, 3305, 3308, 3, 268, 134, 0, 3306, 3307, 5, 138, 0, 0, 3307, 3309, 5, 199, 0, 0, 3308, 3306, 1, 0, 0, 0, 3308, 3309, 1, 0, 0, 0, 3309, 3310, 1, 0, 0, 0, 3310, 3311, 5, 3, 0, 0, 3311, 3464, 1, 0, 0, 0, 3312, 3313, 5, 225, 0, 0, 3313, 3314, 5, 2, 0, 0, 3314, 3315, 3, 280, 140, 0, 3315, 3316, 5, 140, 0, 0, 3316, 3317, 3, 280, 140, 0, 3317, 3318, 5, 3, 0, 0, 3318, 3464, 1, 0, 0, 0, 3319, 3464, 3, 288, 144, 0, 3320, 3464, 5, 363, 0, 0, 3321, 3322, 3, 370, 185, 0, 3322, 3323, 5, 5, 0, 0, 3323, 3324, 5, 363, 0, 0, 3324, 3464, 1, 0, 0, 0, 3325, 3326, 5, 2, 0, 0, 3326, 3329, 3, 256, 128, 0, 3327, 3328, 5, 4, 0, 0, 3328, 3330, 3, 256, 128, 0, 3329, 3327, 1, 0, 0, 0, 3330, 3331, 1, 0, 0, 0, 3331, 3329, 1, 0, 0, 0, 3331, 3332, 1, 0, 0, 0, 3332, 3333, 1, 0, 0, 0, 3333, 3334, 5, 3, 0, 0, 3334, 3464, 1, 0, 0, 0, 3335, 3336, 5, 2, 0, 0, 3336, 3337, 3, 26, 13, 0, 3337, 3338, 5, 3, 0, 0, 3338, 3464, 1, 0, 0, 0, 3339, 3340, 5, 136, 0, 0, 3340, 3341, 5, 2, 0, 0, 3341, 3342, 3, 268, 134, 0, 3342, 3343, 5, 3, 0, 0, 3343, 3464, 1, 0, 0, 0, 3344, 3345, 3, 366, 183, 0, 3345, 3357, 5, 2, 0, 0, 3346, 3348, 3, 196, 98, 0, 3347, 3346, 1, 0, 0, 0, 3347, 3348, 1, 0, 0, 0, 3348, 3349, 1, 0, 0, 0, 3349, 3354, 3, 272, 136, 0, 3350, 3351, 5, 4, 0, 0, 3351, 3353, 3, 272, 136, 0, 3352, 3350, 1, 0, 0, 0, 3353, 3356, 1, 0, 0, 0, 3354, 3352, 1, 0, 0, 0, 3354, 3355, 1, 0, 0, 0, 3355, 3358, 1, 0, 0, 0, 3356, 3354, 1, 0, 0, 0, 3357, 3347, 1, 0, 0, 0, 3357, 3358, 1, 0, 0, 0, 3358, 3359, 1, 0, 0, 0, 3359, 3366, 5, 3, 0, 0, 3360, 3361, 5, 114, 0, 0, 3361, 3362, 5, 2, 0, 0, 3362, 3363, 5, 344, 0, 0, 3363, 3364, 3, 276, 138, 0, 3364, 3365, 5, 3, 0, 0, 3365, 3367, 1, 0, 0, 0, 3366, 3360, 1, 0, 0, 0, 3366, 3367, 1, 0, 0, 0, 3367, 3370, 1, 0, 0, 0, 3368, 3369, 7, 39, 0, 0, 3369, 3371, 5, 199, 0, 0, 3370, 3368, 1, 0, 0, 0, 3370, 3371, 1, 0, 0, 0, 3371, 3374, 1, 0, 0, 0, 3372, 3373, 5, 213, 0, 0, 3373, 3375, 3, 358, 179, 0, 3374, 3372, 1, 0, 0, 0, 3374, 3375, 1, 0, 0, 0, 3375, 3464, 1, 0, 0, 0, 3376, 3377, 3, 376, 188, 0, 3377, 3378, 5, 372, 0, 0, 3378, 3379, 3, 268, 134, 0, 3379, 3464, 1, 0, 0, 0, 3380, 3381, 5, 2, 0, 0, 3381, 3384, 3, 376, 188, 0, 3382, 3383, 5, 4, 0, 0, 3383, 3385, 3, 376, 188, 0, 3384, 3382, 1, 0, 0, 0, 3385, 3386, 1, 0, 0, 0, 3386, 3384, 1, 0, 0, 0, 3386, 3387, 1, 0, 0, 0, 3387, 3388, 1, 0, 0, 0, 3388, 3389, 5, 3, 0, 0, 3389, 3390, 5, 372, 0, 0, 3390, 3391, 3, 268, 134, 0, 3391, 3464, 1, 0, 0, 0, 3392, 3464, 3, 376, 188, 0, 3393, 3394, 5, 2, 0, 0, 3394, 3395, 3, 268, 134, 0, 3395, 3396, 5, 3, 0, 0, 3396, 3464, 1, 0, 0, 0, 3397, 3398, 5, 110, 0, 0, 3398, 3399, 5, 2, 0, 0, 3399, 3400, 3, 376, 188, 0, 3400, 3401, 5, 123, 0, 0, 3401, 3402, 3, 280, 140, 0, 3402, 3403, 5, 3, 0, 0, 3403, 3464, 1, 0, 0, 0, 3404, 3405, 7, 40, 0, 0, 3405, 3406, 5, 2, 0, 0, 3406, 3407, 3, 280, 140, 0, 3407, 3408, 7, 41, 0, 0, 3408, 3411, 3, 280, 140, 0, 3409, 3410, 7, 42, 0, 0, 3410, 3412, 3, 280, 140, 0, 3411, 3409, 1, 0, 0, 0, 3411, 3412, 1, 0, 0, 0, 3412, 3413, 1, 0, 0, 0, 3413, 3414, 5, 3, 0, 0, 3414, 3464, 1, 0, 0, 0, 3415, 3416, 5, 315, 0, 0, 3416, 3418, 5, 2, 0, 0, 3417, 3419, 7, 43, 0, 0, 3418, 3417, 1, 0, 0, 0, 3418, 3419, 1, 0, 0, 0, 3419, 3421, 1, 0, 0, 0, 3420, 3422, 3, 280, 140, 0, 3421, 3420, 1, 0, 0, 0, 3421, 3422, 1, 0, 0, 0, 3422, 3423, 1, 0, 0, 0, 3423, 3424, 5, 123, 0, 0, 3424, 3425, 3, 280, 140, 0, 3425, 3426, 5, 3, 0, 0, 3426, 3464, 1, 0, 0, 0, 3427, 3428, 5, 215, 0, 0, 3428, 3429, 5, 2, 0, 0, 3429, 3430, 3, 280, 140, 0, 3430, 3431, 5, 224, 0, 0, 3431, 3432, 3, 280, 140, 0, 3432, 3433, 5, 123, 0, 0, 3433, 3436, 3, 280, 140, 0, 3434, 3435, 5, 119, 0, 0, 3435, 3437, 3, 280, 140, 0, 3436, 3434, 1, 0, 0, 0, 3436, 3437, 1, 0, 0, 0, 3437, 3438, 1, 0, 0, 0, 3438, 3439, 5, 3, 0, 0, 3439, 3464, 1, 0, 0, 0, 3440, 3441, 7, 44, 0, 0, 3441, 3442, 5, 2, 0, 0, 3442, 3443, 3, 280, 140, 0, 3443, 3444, 5, 3, 0, 0, 3444, 3445, 5, 347, 0, 0, 3445, 3446, 5, 130, 0, 0, 3446, 3447, 5, 2, 0, 0, 3447, 3448, 5, 209, 0, 0, 3448, 3449, 5, 31, 0, 0, 3449, 3450, 3, 108, 54, 0, 3450, 3457, 5, 3, 0, 0, 3451, 3452, 5, 114, 0, 0, 3452, 3453, 5, 2, 0, 0, 3453, 3454, 5, 344, 0, 0, 3454, 3455, 3, 276, 138, 0, 3455, 3456, 5, 3, 0, 0, 3456, 3458, 1, 0, 0, 0, 3457, 3451, 1, 0, 0, 0, 3457, 3458, 1, 0, 0, 0, 3458, 3461, 1, 0, 0, 0, 3459, 3460, 5, 213, 0, 0, 3460, 3462, 3, 358, 179, 0, 3461, 3459, 1, 0, 0, 0, 3461, 3462, 1, 0, 0, 0, 3462, 3464, 1, 0, 0, 0, 3463, 3214, 1, 0, 0, 0, 3463, 3216, 1, 0, 0, 0, 3463, 3228, 1, 0, 0, 0, 3463, 3240, 1, 0, 0, 0, 3463, 3252, 1, 0, 0, 0, 3463, 3265, 1, 0, 0, 0, 3463, 3272, 1, 0, 0, 0, 3463, 3285, 1, 0, 0, 0, 3463, 3294, 1, 0, 0, 0, 3463, 3303, 1, 0, 0, 0, 3463, 3312, 1, 0, 0, 0, 3463, 3319, 1, 0, 0, 0, 3463, 3320, 1, 0, 0, 0, 3463, 3321, 1, 0, 0, 0, 3463, 3325, 1, 0, 0, 0, 3463, 3335, 1, 0, 0, 0, 3463, 3339, 1, 0, 0, 0, 3463, 3344, 1, 0, 0, 0, 3463, 3376, 1, 0, 0, 0, 3463, 3380, 1, 0, 0, 0, 3463, 3392, 1, 0, 0, 0, 3463, 3393, 1, 0, 0, 0, 3463, 3397, 1, 0, 0, 0, 3463, 3404, 1, 0, 0, 0, 3463, 3415, 1, 0, 0, 0, 3463, 3427, 1, 0, 0, 0, 3463, 3440, 1, 0, 0, 0, 3464, 3475, 1, 0, 0, 0, 3465, 3466, 10, 9, 0, 0, 3466, 3467, 5, 6, 0, 0, 3467, 3468, 3, 280, 140, 0, 3468, 3469, 5, 7, 0, 0, 3469, 3474, 1, 0, 0, 0, 3470, 3471, 10, 7, 0, 0, 3471, 3472, 5, 5, 0, 0, 3472, 3474, 3, 376, 188, 0, 3473, 3465, 1, 0, 0, 0, 3473, 3470, 1, 0, 0, 0, 3474, 3477, 1, 0, 0, 0, 3475, 3473, 1, 0, 0, 0, 3475, 3476, 1, 0, 0, 0, 3476, 285, 1, 0, 0, 0, 3477, 3475, 1, 0, 0, 0, 3478, 3486, 5, 71, 0, 0, 3479, 3486, 5, 303, 0, 0, 3480, 3486, 5, 304, 0, 0, 3481, 3486, 5, 305, 0, 0, 3482, 3486, 5, 149, 0, 0, 3483, 3486, 5, 133, 0, 0, 3484, 3486, 3, 376, 188, 0, 3485, 3478, 1, 0, 0, 0, 3485, 3479, 1, 0, 0, 0, 3485, 3480, 1, 0, 0, 0, 3485, 3481, 1, 0, 0, 0, 3485, 3482, 1, 0, 0, 0, 3485, 3483, 1, 0, 0, 0, 3485, 3484, 1, 0, 0, 0, 3486, 287, 1, 0, 0, 0, 3487, 3503, 5, 198, 0, 0, 3488, 3503, 5, 376, 0, 0, 3489, 3490, 5, 371, 0, 0, 3490, 3503, 3, 376, 188, 0, 3491, 3503, 3, 298, 149, 0, 3492, 3493, 3, 286, 143, 0, 3493, 3494, 3, 388, 194, 0, 3494, 3503, 1, 0, 0, 0, 3495, 3503, 3, 384, 192, 0, 3496, 3503, 3, 296, 148, 0, 3497, 3499, 3, 388, 194, 0, 3498, 3497, 1, 0, 0, 0, 3499, 3500, 1, 0, 0, 0, 3500, 3498, 1, 0, 0, 0, 3500, 3501, 1, 0, 0, 0, 3501, 3503, 1, 0, 0, 0, 3502, 3487, 1, 0, 0, 0, 3502, 3488, 1, 0, 0, 0, 3502, 3489, 1, 0, 0, 0, 3502, 3491, 1, 0, 0, 0, 3502, 3492, 1, 0, 0, 0, 3502, 3495, 1, 0, 0, 0, 3502, 3496, 1, 0, 0, 0, 3502, 3498, 1, 0, 0, 0, 3503, 289, 1, 0, 0, 0, 3504, 3505, 7, 45, 0, 0, 3505, 291, 1, 0, 0, 0, 3506, 3507, 7, 46, 0, 0, 3507, 293, 1, 0, 0, 0, 3508, 3509, 7, 47, 0, 0, 3509, 295, 1, 0, 0, 0, 3510, 3511, 7, 48, 0, 0, 3511, 297, 1, 0, 0, 0, 3512, 3515, 5, 149, 0, 0, 3513, 3516, 3, 300, 150, 0, 3514, 3516, 3, 304, 152, 0, 3515, 3513, 1, 0, 0, 0, 3515, 3514, 1, 0, 0, 0, 3516, 299, 1, 0, 0, 0, 3517, 3519, 3, 302, 151, 0, 3518, 3520, 3, 306, 153, 0, 3519, 3518, 1, 0, 0, 0, 3519, 3520, 1, 0, 0, 0, 3520, 301, 1, 0, 0, 0, 3521, 3522, 3, 308, 154, 0, 3522, 3523, 3, 310, 155, 0, 3523, 3525, 1, 0, 0, 0, 3524, 3521, 1, 0, 0, 0, 3525, 3526, 1, 0, 0, 0, 3526, 3524, 1, 0, 0, 0, 3526, 3527, 1, 0, 0, 0, 3527, 303, 1, 0, 0, 0, 3528, 3531, 3, 306, 153, 0, 3529, 3532, 3, 302, 151, 0, 3530, 3532, 3, 306, 153, 0, 3531, 3529, 1, 0, 0, 0, 3531, 3530, 1, 0, 0, 0, 3531, 3532, 1, 0, 0, 0, 3532, 305, 1, 0, 0, 0, 3533, 3534, 3, 308, 154, 0, 3534, 3535, 3, 312, 156, 0, 3535, 3536, 5, 309, 0, 0, 3536, 3537, 3, 312, 156, 0, 3537, 307, 1, 0, 0, 0, 3538, 3540, 7, 49, 0, 0, 3539, 3538, 1, 0, 0, 0, 3539, 3540, 1, 0, 0, 0, 3540, 3544, 1, 0, 0, 0, 3541, 3545, 5, 382, 0, 0, 3542, 3545, 5, 384, 0, 0, 3543, 3545, 3, 388, 194, 0, 3544, 3541, 1, 0, 0, 0, 3544, 3542, 1, 0, 0, 0, 3544, 3543, 1, 0, 0, 0, 3545, 309, 1, 0, 0, 0, 3546, 3547, 7, 50, 0, 0, 3547, 311, 1, 0, 0, 0, 3548, 3549, 7, 51, 0, 0, 3549, 313, 1, 0, 0, 0, 3550, 3554, 5, 116, 0, 0, 3551, 3552, 5, 9, 0, 0, 3552, 3554, 3, 372, 186, 0, 3553, 3550, 1, 0, 0, 0, 3553, 3551, 1, 0, 0, 0, 3554, 315, 1, 0, 0, 0, 3555, 3586, 5, 27, 0, 0, 3556, 3586, 5, 308, 0, 0, 3557, 3586, 5, 32, 0, 0, 3558, 3586, 5, 276, 0, 0, 3559, 3586, 5, 272, 0, 0, 3560, 3586, 5, 150, 0, 0, 3561, 3586, 5, 151, 0, 0, 3562, 3586, 5, 25, 0, 0, 3563, 3586, 5, 174, 0, 0, 3564, 3586, 5, 117, 0, 0, 3565, 3586, 5, 234, 0, 0, 3566, 3586, 5, 95, 0, 0, 3567, 3586, 5, 71, 0, 0, 3568, 3586, 5, 303, 0, 0, 3569, 3586, 5, 305, 0, 0, 3570, 3586, 5, 304, 0, 0, 3571, 3586, 5, 285, 0, 0, 3572, 3586, 5, 41, 0, 0, 3573, 3586, 5, 40, 0, 0, 3574, 3586, 5, 334, 0, 0, 3575, 3586, 5, 26, 0, 0, 3576, 3586, 5, 80, 0, 0, 3577, 3586, 5, 79, 0, 0, 3578, 3586, 5, 200, 0, 0, 3579, 3586, 5, 340, 0, 0, 3580, 3586, 5, 149, 0, 0, 3581, 3586, 5, 19, 0, 0, 3582, 3586, 5, 286, 0, 0, 3583, 3586, 5, 177, 0, 0, 3584, 3586, 3, 376, 188, 0, 3585, 3555, 1, 0, 0, 0, 3585, 3556, 1, 0, 0, 0, 3585, 3557, 1, 0, 0, 0, 3585, 3558, 1, 0, 0, 0, 3585, 3559, 1, 0, 0, 0, 3585, 3560, 1, 0, 0, 0, 3585, 3561, 1, 0, 0, 0, 3585, 3562, 1, 0, 0, 0, 3585, 3563, 1, 0, 0, 0, 3585, 3564, 1, 0, 0, 0, 3585, 3565, 1, 0, 0, 0, 3585, 3566, 1, 0, 0, 0, 3585, 3567, 1, 0, 0, 0, 3585, 3568, 1, 0, 0, 0, 3585, 3569, 1, 0, 0, 0, 3585, 3570, 1, 0, 0, 0, 3585, 3571, 1, 0, 0, 0, 3585, 3572, 1, 0, 0, 0, 3585, 3573, 1, 0, 0, 0, 3585, 3574, 1, 0, 0, 0, 3585, 3575, 1, 0, 0, 0, 3585, 3576, 1, 0, 0, 0, 3585, 3577, 1, 0, 0, 0, 3585, 3578, 1, 0, 0, 0, 3585, 3579, 1, 0, 0, 0, 3585, 3580, 1, 0, 0, 0, 3585, 3581, 1, 0, 0, 0, 3585, 3582, 1, 0, 0, 0, 3585, 3583, 1, 0, 0, 0, 3585, 3584, 1, 0, 0, 0, 3586, 317, 1, 0, 0, 0, 3587, 3588, 5, 19, 0, 0, 3588, 3589, 5, 356, 0, 0, 3589, 3590, 3, 318, 159, 0, 3590, 3591, 5, 358, 0, 0, 3591, 3634, 1, 0, 0, 0, 3592, 3593, 5, 177, 0, 0, 3593, 3594, 5, 356, 0, 0, 3594, 3595, 3, 318, 159, 0, 3595, 3596, 5, 4, 0, 0, 3596, 3597, 3, 318, 159, 0, 3597, 3598, 5, 358, 0, 0, 3598, 3634, 1, 0, 0, 0, 3599, 3606, 5, 286, 0, 0, 3600, 3602, 5, 356, 0, 0, 3601, 3603, 3, 346, 173, 0, 3602, 3601, 1, 0, 0, 0, 3602, 3603, 1, 0, 0, 0, 3603, 3604, 1, 0, 0, 0, 3604, 3607, 5, 358, 0, 0, 3605, 3607, 5, 354, 0, 0, 3606, 3600, 1, 0, 0, 0, 3606, 3605, 1, 0, 0, 0, 3607, 3634, 1, 0, 0, 0, 3608, 3609, 5, 149, 0, 0, 3609, 3612, 7, 52, 0, 0, 3610, 3611, 5, 309, 0, 0, 3611, 3613, 5, 186, 0, 0, 3612, 3610, 1, 0, 0, 0, 3612, 3613, 1, 0, 0, 0, 3613, 3634, 1, 0, 0, 0, 3614, 3615, 5, 149, 0, 0, 3615, 3618, 7, 53, 0, 0, 3616, 3617, 5, 309, 0, 0, 3617, 3619, 7, 54, 0, 0, 3618, 3616, 1, 0, 0, 0, 3618, 3619, 1, 0, 0, 0, 3619, 3634, 1, 0, 0, 0, 3620, 3631, 3, 316, 158, 0, 3621, 3622, 5, 2, 0, 0, 3622, 3627, 5, 382, 0, 0, 3623, 3624, 5, 4, 0, 0, 3624, 3626, 5, 382, 0, 0, 3625, 3623, 1, 0, 0, 0, 3626, 3629, 1, 0, 0, 0, 3627, 3625, 1, 0, 0, 0, 3627, 3628, 1, 0, 0, 0, 3628, 3630, 1, 0, 0, 0, 3629, 3627, 1, 0, 0, 0, 3630, 3632, 5, 3, 0, 0, 3631, 3621, 1, 0, 0, 0, 3631, 3632, 1, 0, 0, 0, 3632, 3634, 1, 0, 0, 0, 3633, 3587, 1, 0, 0, 0, 3633, 3592, 1, 0, 0, 0, 3633, 3599, 1, 0, 0, 0, 3633, 3608, 1, 0, 0, 0, 3633, 3614, 1, 0, 0, 0, 3633, 3620, 1, 0, 0, 0, 3634, 319, 1, 0, 0, 0, 3635, 3640, 3, 322, 161, 0, 3636, 3637, 5, 4, 0, 0, 3637, 3639, 3, 322, 161, 0, 3638, 3636, 1, 0, 0, 0, 3639, 3642, 1, 0, 0, 0, 3640, 3638, 1, 0, 0, 0, 3640, 3641, 1, 0, 0, 0, 3641, 321, 1, 0, 0, 0, 3642, 3640, 1, 0, 0, 0, 3643, 3644, 3, 96, 48, 0, 3644, 3648, 3, 318, 159, 0, 3645, 3647, 3, 328, 164, 0, 3646, 3645, 1, 0, 0, 0, 3647, 3650, 1, 0, 0, 0, 3648, 3646, 1, 0, 0, 0, 3648, 3649, 1, 0, 0, 0, 3649, 323, 1, 0, 0, 0, 3650, 3648, 1, 0, 0, 0, 3651, 3656, 3, 326, 163, 0, 3652, 3653, 5, 4, 0, 0, 3653, 3655, 3, 326, 163, 0, 3654, 3652, 1, 0, 0, 0, 3655, 3658, 1, 0, 0, 0, 3656, 3654, 1, 0, 0, 0, 3656, 3657, 1, 0, 0, 0, 3657, 325, 1, 0, 0, 0, 3658, 3656, 1, 0, 0, 0, 3659, 3660, 3, 92, 46, 0, 3660, 3664, 3, 318, 159, 0, 3661, 3663, 3, 328, 164, 0, 3662, 3661, 1, 0, 0, 0, 3663, 3666, 1, 0, 0, 0, 3664, 3662, 1, 0, 0, 0, 3664, 3665, 1, 0, 0, 0, 3665, 327, 1, 0, 0, 0, 3666, 3664, 1, 0, 0, 0, 3667, 3668, 5, 197, 0, 0, 3668, 3673, 5, 198, 0, 0, 3669, 3673, 3, 330, 165, 0, 3670, 3673, 3, 24, 12, 0, 3671, 3673, 3, 314, 157, 0, 3672, 3667, 1, 0, 0, 0, 3672, 3669, 1, 0, 0, 0, 3672, 3670, 1, 0, 0, 0, 3672, 3671, 1, 0, 0, 0, 3673, 329, 1, 0, 0, 0, 3674, 3675, 5, 82, 0, 0, 3675, 3676, 3, 268, 134, 0, 3676, 331, 1, 0, 0, 0, 3677, 3678, 7, 55, 0, 0, 3678, 3679, 3, 268, 134, 0, 3679, 333, 1, 0, 0, 0, 3680, 3685, 3, 336, 168, 0, 3681, 3682, 5, 4, 0, 0, 3682, 3684, 3, 336, 168, 0, 3683, 3681, 1, 0, 0, 0, 3684, 3687, 1, 0, 0, 0, 3685, 3683, 1, 0, 0, 0, 3685, 3686, 1, 0, 0, 0, 3686, 335, 1, 0, 0, 0, 3687, 3685, 1, 0, 0, 0, 3688, 3689, 3, 372, 186, 0, 3689, 3692, 3, 318, 159, 0, 3690, 3691, 5, 197, 0, 0, 3691, 3693, 5, 198, 0, 0, 3692, 3690, 1, 0, 0, 0, 3692, 3693, 1, 0, 0, 0, 3693, 3695, 1, 0, 0, 0, 3694, 3696, 3, 24, 12, 0, 3695, 3694, 1, 0, 0, 0, 3695, 3696, 1, 0, 0, 0, 3696, 337, 1, 0, 0, 0, 3697, 3702, 3, 340, 170, 0, 3698, 3699, 5, 4, 0, 0, 3699, 3701, 3, 340, 170, 0, 3700, 3698, 1, 0, 0, 0, 3701, 3704, 1, 0, 0, 0, 3702, 3700, 1, 0, 0, 0, 3702, 3703, 1, 0, 0, 0, 3703, 339, 1, 0, 0, 0, 3704, 3702, 1, 0, 0, 0, 3705, 3706, 3, 96, 48, 0, 3706, 3710, 3, 318, 159, 0, 3707, 3709, 3, 342, 171, 0, 3708, 3707, 1, 0, 0, 0, 3709, 3712, 1, 0, 0, 0, 3710, 3708, 1, 0, 0, 0, 3710, 3711, 1, 0, 0, 0, 3711, 341, 1, 0, 0, 0, 3712, 3710, 1, 0, 0, 0, 3713, 3714, 5, 197, 0, 0, 3714, 3719, 5, 198, 0, 0, 3715, 3719, 3, 330, 165, 0, 3716, 3719, 3, 344, 172, 0, 3717, 3719, 3, 24, 12, 0, 3718, 3713, 1, 0, 0, 0, 3718, 3715, 1, 0, 0, 0, 3718, 3716, 1, 0, 0, 0, 3718, 3717, 1, 0, 0, 0, 3719, 343, 1, 0, 0, 0, 3720, 3721, 5, 127, 0, 0, 3721, 3722, 5, 12, 0, 0, 3722, 3723, 5, 20, 0, 0, 3723, 3724, 5, 2, 0, 0, 3724, 3725, 3, 268, 134, 0, 3725, 3726, 5, 3, 0, 0, 3726, 345, 1, 0, 0, 0, 3727, 3732, 3, 348, 174, 0, 3728, 3729, 5, 4, 0, 0, 3729, 3731, 3, 348, 174, 0, 3730, 3728, 1, 0, 0, 0, 3731, 3734, 1, 0, 0, 0, 3732, 3730, 1, 0, 0, 0, 3732, 3733, 1, 0, 0, 0, 3733, 347, 1, 0, 0, 0, 3734, 3732, 1, 0, 0, 0, 3735, 3737, 3, 376, 188, 0, 3736, 3738, 5, 371, 0, 0, 3737, 3736, 1, 0, 0, 0, 3737, 3738, 1, 0, 0, 0, 3738, 3739, 1, 0, 0, 0, 3739, 3742, 3, 318, 159, 0, 3740, 3741, 5, 197, 0, 0, 3741, 3743, 5, 198, 0, 0, 3742, 3740, 1, 0, 0, 0, 3742, 3743, 1, 0, 0, 0, 3743, 3745, 1, 0, 0, 0, 3744, 3746, 3, 24, 12, 0, 3745, 3744, 1, 0, 0, 0, 3745, 3746, 1, 0, 0, 0, 3746, 349, 1, 0, 0, 0, 3747, 3748, 5, 343, 0, 0, 3748, 3749, 3, 268, 134, 0, 3749, 3750, 5, 300, 0, 0, 3750, 3751, 3, 268, 134, 0, 3751, 351, 1, 0, 0, 0, 3752, 3753, 5, 345, 0, 0, 3753, 3758, 3, 356, 178, 0, 3754, 3755, 5, 4, 0, 0, 3755, 3757, 3, 356, 178, 0, 3756, 3754, 1, 0, 0, 0, 3757, 3760, 1, 0, 0, 0, 3758, 3756, 1, 0, 0, 0, 3758, 3759, 1, 0, 0, 0, 3759, 353, 1, 0, 0, 0, 3760, 3758, 1, 0, 0, 0, 3761, 3762, 5, 351, 0, 0, 3762, 3763, 5, 31, 0, 0, 3763, 3764, 3, 94, 47, 0, 3764, 355, 1, 0, 0, 0, 3765, 3766, 3, 372, 186, 0, 3766, 3767, 5, 20, 0, 0, 3767, 3768, 3, 358, 179, 0, 3768, 357, 1, 0, 0, 0, 3769, 3816, 3, 372, 186, 0, 3770, 3771, 5, 2, 0, 0, 3771, 3772, 3, 372, 186, 0, 3772, 3773, 5, 3, 0, 0, 3773, 3816, 1, 0, 0, 0, 3774, 3809, 5, 2, 0, 0, 3775, 3776, 5, 44, 0, 0, 3776, 3777, 5, 31, 0, 0, 3777, 3782, 3, 268, 134, 0, 3778, 3779, 5, 4, 0, 0, 3779, 3781, 3, 268, 134, 0, 3780, 3778, 1, 0, 0, 0, 3781, 3784, 1, 0, 0, 0, 3782, 3780, 1, 0, 0, 0, 3782, 3783, 1, 0, 0, 0, 3783, 3810, 1, 0, 0, 0, 3784, 3782, 1, 0, 0, 0, 3785, 3786, 7, 24, 0, 0, 3786, 3787, 5, 31, 0, 0, 3787, 3792, 3, 268, 134, 0, 3788, 3789, 5, 4, 0, 0, 3789, 3791, 3, 268, 134, 0, 3790, 3788, 1, 0, 0, 0, 3791, 3794, 1, 0, 0, 0, 3792, 3790, 1, 0, 0, 0, 3792, 3793, 1, 0, 0, 0, 3793, 3796, 1, 0, 0, 0, 3794, 3792, 1, 0, 0, 0, 3795, 3785, 1, 0, 0, 0, 3795, 3796, 1, 0, 0, 0, 3796, 3807, 1, 0, 0, 0, 3797, 3798, 7, 25, 0, 0, 3798, 3799, 5, 31, 0, 0, 3799, 3804, 3, 108, 54, 0, 3800, 3801, 5, 4, 0, 0, 3801, 3803, 3, 108, 54, 0, 3802, 3800, 1, 0, 0, 0, 3803, 3806, 1, 0, 0, 0, 3804, 3802, 1, 0, 0, 0, 3804, 3805, 1, 0, 0, 0, 3805, 3808, 1, 0, 0, 0, 3806, 3804, 1, 0, 0, 0, 3807, 3797, 1, 0, 0, 0, 3807, 3808, 1, 0, 0, 0, 3808, 3810, 1, 0, 0, 0, 3809, 3775, 1, 0, 0, 0, 3809, 3795, 1, 0, 0, 0, 3810, 3812, 1, 0, 0, 0, 3811, 3813, 3, 360, 180, 0, 3812, 3811, 1, 0, 0, 0, 3812, 3813, 1, 0, 0, 0, 3813, 3814, 1, 0, 0, 0, 3814, 3816, 5, 3, 0, 0, 3815, 3769, 1, 0, 0, 0, 3815, 3770, 1, 0, 0, 0, 3815, 3774, 1, 0, 0, 0, 3816, 359, 1, 0, 0, 0, 3817, 3818, 5, 233, 0, 0, 3818, 3834, 3, 362, 181, 0, 3819, 3820, 5, 258, 0, 0, 3820, 3834, 3, 362, 181, 0, 3821, 3822, 5, 233, 0, 0, 3822, 3823, 5, 24, 0, 0, 3823, 3824, 3, 362, 181, 0, 3824, 3825, 5, 14, 0, 0, 3825, 3826, 3, 362, 181, 0, 3826, 3834, 1, 0, 0, 0, 3827, 3828, 5, 258, 0, 0, 3828, 3829, 5, 24, 0, 0, 3829, 3830, 3, 362, 181, 0, 3830, 3831, 5, 14, 0, 0, 3831, 3832, 3, 362, 181, 0, 3832, 3834, 1, 0, 0, 0, 3833, 3817, 1, 0, 0, 0, 3833, 3819, 1, 0, 0, 0, 3833, 3821, 1, 0, 0, 0, 3833, 3827, 1, 0, 0, 0, 3834, 361, 1, 0, 0, 0, 3835, 3836, 5, 321, 0, 0, 3836, 3843, 7, 56, 0, 0, 3837, 3838, 5, 62, 0, 0, 3838, 3843, 5, 257, 0, 0, 3839, 3840, 3, 268, 134, 0, 3840, 3841, 7, 56, 0, 0, 3841, 3843, 1, 0, 0, 0, 3842, 3835, 1, 0, 0, 0, 3842, 3837, 1, 0, 0, 0, 3842, 3839, 1, 0, 0, 0, 3843, 363, 1, 0, 0, 0, 3844, 3849, 3, 370, 185, 0, 3845, 3846, 5, 4, 0, 0, 3846, 3848, 3, 370, 185, 0, 3847, 3845, 1, 0, 0, 0, 3848, 3851, 1, 0, 0, 0, 3849, 3847, 1, 0, 0, 0, 3849, 3850, 1, 0, 0, 0, 3850, 365, 1, 0, 0, 0, 3851, 3849, 1, 0, 0, 0, 3852, 3853, 5, 136, 0, 0, 3853, 3854, 5, 2, 0, 0, 3854, 3855, 3, 268, 134, 0, 3855, 3856, 5, 3, 0, 0, 3856, 3862, 1, 0, 0, 0, 3857, 3862, 3, 370, 185, 0, 3858, 3862, 5, 114, 0, 0, 3859, 3862, 5, 161, 0, 0, 3860, 3862, 5, 250, 0, 0, 3861, 3852, 1, 0, 0, 0, 3861, 3857, 1, 0, 0, 0, 3861, 3858, 1, 0, 0, 0, 3861, 3859, 1, 0, 0, 0, 3861, 3860, 1, 0, 0, 0, 3862, 367, 1, 0, 0, 0, 3863, 3864, 3, 370, 185, 0, 3864, 369, 1, 0, 0, 0, 3865, 3870, 3, 376, 188, 0, 3866, 3867, 5, 5, 0, 0, 3867, 3869, 3, 376, 188, 0, 3868, 3866, 1, 0, 0, 0, 3869, 3872, 1, 0, 0, 0, 3870, 3868, 1, 0, 0, 0, 3870, 3871, 1, 0, 0, 0, 3871, 371, 1, 0, 0, 0, 3872, 3870, 1, 0, 0, 0, 3873, 3874, 3, 376, 188, 0, 3874, 3875, 3, 374, 187, 0, 3875, 373, 1, 0, 0, 0, 3876, 3877, 5, 362, 0, 0, 3877, 3879, 3, 376, 188, 0, 3878, 3876, 1, 0, 0, 0, 3879, 3880, 1, 0, 0, 0, 3880, 3878, 1, 0, 0, 0, 3880, 3881, 1, 0, 0, 0, 3881, 3884, 1, 0, 0, 0, 3882, 3884, 1, 0, 0, 0, 3883, 3878, 1, 0, 0, 0, 3883, 3882, 1, 0, 0, 0, 3884, 375, 1, 0, 0, 0, 3885, 3888, 3, 378, 189, 0, 3886, 3888, 3, 396, 198, 0, 3887, 3885, 1, 0, 0, 0, 3887, 3886, 1, 0, 0, 0, 3888, 377, 1, 0, 0, 0, 3889, 3894, 5, 388, 0, 0, 3890, 3894, 3, 380, 190, 0, 3891, 3894, 3, 394, 197, 0, 3892, 3894, 3, 398, 199, 0, 3893, 3889, 1, 0, 0, 0, 3893, 3890, 1, 0, 0, 0, 3893, 3891, 1, 0, 0, 0, 3893, 3892, 1, 0, 0, 0, 3894, 379, 1, 0, 0, 0, 3895, 3896, 7, 57, 0, 0, 3896, 381, 1, 0, 0, 0, 3897, 3898, 5, 389, 0, 0, 3898, 383, 1, 0, 0, 0, 3899, 3901, 5, 362, 0, 0, 3900, 3899, 1, 0, 0, 0, 3900, 3901, 1, 0, 0, 0, 3901, 3902, 1, 0, 0, 0, 3902, 3940, 5, 383, 0, 0, 3903, 3905, 5, 362, 0, 0, 3904, 3903, 1, 0, 0, 0, 3904, 3905, 1, 0, 0, 0, 3905, 3906, 1, 0, 0, 0, 3906, 3940, 5, 384, 0, 0, 3907, 3909, 5, 362, 0, 0, 3908, 3907, 1, 0, 0, 0, 3908, 3909, 1, 0, 0, 0, 3909, 3910, 1, 0, 0, 0, 3910, 3940, 7, 58, 0, 0, 3911, 3913, 5, 362, 0, 0, 3912, 3911, 1, 0, 0, 0, 3912, 3913, 1, 0, 0, 0, 3913, 3914, 1, 0, 0, 0, 3914, 3940, 5, 382, 0, 0, 3915, 3917, 5, 362, 0, 0, 3916, 3915, 1, 0, 0, 0, 3916, 3917, 1, 0, 0, 0, 3917, 3918, 1, 0, 0, 0, 3918, 3940, 5, 379, 0, 0, 3919, 3921, 5, 362, 0, 0, 3920, 3919, 1, 0, 0, 0, 3920, 3921, 1, 0, 0, 0, 3921, 3922, 1, 0, 0, 0, 3922, 3940, 5, 380, 0, 0, 3923, 3925, 5, 362, 0, 0, 3924, 3923, 1, 0, 0, 0, 3924, 3925, 1, 0, 0, 0, 3925, 3926, 1, 0, 0, 0, 3926, 3940, 5, 381, 0, 0, 3927, 3929, 5, 362, 0, 0, 3928, 3927, 1, 0, 0, 0, 3928, 3929, 1, 0, 0, 0, 3929, 3930, 1, 0, 0, 0, 3930, 3940, 5, 386, 0, 0, 3931, 3933, 5, 362, 0, 0, 3932, 3931, 1, 0, 0, 0, 3932, 3933, 1, 0, 0, 0, 3933, 3934, 1, 0, 0, 0, 3934, 3940, 5, 385, 0, 0, 3935, 3937, 5, 362, 0, 0, 3936, 3935, 1, 0, 0, 0, 3936, 3937, 1, 0, 0, 0, 3937, 3938, 1, 0, 0, 0, 3938, 3940, 5, 387, 0, 0, 3939, 3900, 1, 0, 0, 0, 3939, 3904, 1, 0, 0, 0, 3939, 3908, 1, 0, 0, 0, 3939, 3912, 1, 0, 0, 0, 3939, 3916, 1, 0, 0, 0, 3939, 3920, 1, 0, 0, 0, 3939, 3924, 1, 0, 0, 0, 3939, 3928, 1, 0, 0, 0, 3939, 3932, 1, 0, 0, 0, 3939, 3936, 1, 0, 0, 0, 3940, 385, 1, 0, 0, 0, 3941, 3942, 5, 319, 0, 0, 3942, 3953, 3, 318, 159, 0, 3943, 3953, 3, 24, 12, 0, 3944, 3953, 3, 314, 157, 0, 3945, 3946, 7, 59, 0, 0, 3946, 3947, 5, 197, 0, 0, 3947, 3953, 5, 198, 0, 0, 3948, 3949, 5, 269, 0, 0, 3949, 3953, 3, 330, 165, 0, 3950, 3951, 5, 96, 0, 0, 3951, 3953, 5, 82, 0, 0, 3952, 3941, 1, 0, 0, 0, 3952, 3943, 1, 0, 0, 0, 3952, 3944, 1, 0, 0, 0, 3952, 3945, 1, 0, 0, 0, 3952, 3948, 1, 0, 0, 0, 3952, 3950, 1, 0, 0, 0, 3953, 387, 1, 0, 0, 0, 3954, 3955, 7, 60, 0, 0, 3955, 389, 1, 0, 0, 0, 3956, 3959, 3, 388, 194, 0, 3957, 3959, 5, 198, 0, 0, 3958, 3956, 1, 0, 0, 0, 3958, 3957, 1, 0, 0, 0, 3959, 391, 1, 0, 0, 0, 3960, 3963, 5, 382, 0, 0, 3961, 3963, 3, 388, 194, 0, 3962, 3960, 1, 0, 0, 0, 3962, 3961, 1, 0, 0, 0, 3963, 393, 1, 0, 0, 0, 3964, 3965, 7, 61, 0, 0, 3965, 395, 1, 0, 0, 0, 3966, 3967, 7, 62, 0, 0, 3967, 397, 1, 0, 0, 0, 3968, 3969, 7, 63, 0, 0, 3969, 399, 1, 0, 0, 0, 517, 403, 410, 414, 419, 426, 431, 439, 441, 460, 464, 470, 473, 476, 483, 486, 490, 493, 498, 510, 512, 520, 523, 527, 530, 536, 547, 553, 558, 591, 601, 612, 623, 634, 639, 648, 652, 658, 662, 667, 673, 685, 693, 699, 710, 714, 719, 734, 738, 745, 749, 755, 784, 788, 793, 800, 806, 809, 812, 816, 820, 828, 830, 839, 842, 851, 856, 862, 869, 872, 876, 887, 890, 896, 900, 915, 917, 925, 929, 935, 938, 942, 945, 951, 956, 960, 967, 970, 973, 980, 985, 994, 1002, 1008, 1011, 1014, 1020, 1024, 1029, 1032, 1036, 1038, 1046, 1054, 1057, 1064, 1067, 1070, 1079, 1084, 1090, 1095, 1098, 1102, 1105, 1109, 1137, 1140, 1148, 1154, 1157, 1160, 1165, 1173, 1178, 1184, 1190, 1193, 1200, 1207, 1215, 1232, 1259, 1262, 1268, 1277, 1286, 1292, 1297, 1302, 1309, 1314, 1319, 1326, 1334, 1337, 1341, 1353, 1357, 1364, 1480, 1488, 1496, 1505, 1515, 1519, 1522, 1526, 1532, 1544, 1556, 1561, 1570, 1578, 1583, 1585, 1593, 1598, 1602, 1605, 1613, 1618, 1627, 1632, 1635, 1640, 1644, 1649, 1651, 1655, 1664, 1672, 1678, 1689, 1696, 1705, 1710, 1713, 1736, 1738, 1750, 1757, 1760, 1767, 1771, 1777, 1785, 1792, 1795, 1803, 1814, 1825, 1833, 1839, 1851, 1858, 1865, 1877, 1885, 1891, 1897, 1900, 1916, 1923, 1934, 1943, 1946, 1955, 1958, 1967, 1970, 1979, 1982, 1985, 1990, 1992, 1996, 2007, 2013, 2019, 2022, 2024, 2036, 2040, 2043, 2047, 2053, 2057, 2065, 2069, 2072, 2075, 2078, 2082, 2086, 2091, 2095, 2098, 2101, 2104, 2108, 2113, 2117, 2120, 2123, 2126, 2128, 2134, 2141, 2146, 2149, 2152, 2156, 2166, 2170, 2172, 2175, 2179, 2185, 2189, 2200, 2210, 2214, 2226, 2238, 2253, 2258, 2264, 2271, 2287, 2292, 2305, 2310, 2318, 2324, 2328, 2331, 2336, 2343, 2349, 2358, 2368, 2383, 2388, 2390, 2395, 2404, 2417, 2422, 2426, 2433, 2438, 2442, 2445, 2448, 2462, 2475, 2480, 2484, 2487, 2491, 2497, 2500, 2507, 2519, 2530, 2543, 2554, 2559, 2567, 2572, 2586, 2595, 2598, 2603, 2610, 2613, 2619, 2625, 2628, 2633, 2638, 2642, 2648, 2652, 2655, 2660, 2663, 2668, 2672, 2675, 2678, 2684, 2689, 2696, 2699, 2717, 2719, 2722, 2733, 2742, 2749, 2757, 2764, 2769, 2772, 2775, 2783, 2791, 2797, 2805, 2813, 2820, 2827, 2829, 2842, 2848, 2850, 2860, 2866, 2868, 2876, 2880, 2889, 2892, 2898, 2902, 2904, 2913, 2925, 2927, 2934, 2941, 2947, 2953, 2955, 2962, 2970, 2978, 2984, 2989, 2996, 3002, 3005, 3009, 3011, 3018, 3027, 3034, 3044, 3049, 3053, 3063, 3070, 3083, 3085, 3093, 3095, 3099, 3107, 3116, 3122, 3130, 3135, 3147, 3152, 3155, 3161, 3165, 3170, 3175, 3180, 3186, 3207, 3209, 3220, 3232, 3244, 3248, 3257, 3261, 3279, 3282, 3290, 3299, 3308, 3331, 3347, 3354, 3357, 3366, 3370, 3374, 3386, 3411, 3418, 3421, 3436, 3457, 3461, 3463, 3473, 3475, 3485, 3500, 3502, 3515, 3519, 3526, 3531, 3539, 3544, 3553, 3585, 3602, 3606, 3612, 3618, 3627, 3631, 3633, 3640, 3648, 3656, 3664, 3672, 3685, 3692, 3695, 3702, 3710, 3718, 3732, 3737, 3742, 3745, 3758, 3782, 3792, 3795, 3804, 3807, 3809, 3812, 3815, 3833, 3842, 3849, 3861, 3870, 3880, 3883, 3887, 3893, 3900, 3904, 3908, 3912, 3916, 3920, 3924, 3928, 3932, 3936, 3939, 3952, 3958, 3962] \ No newline at end of file +[4, 1, 393, 3761, 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, 1, 0, 5, 0, 338, 8, 0, 10, 0, 12, 0, 341, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 347, 8, 1, 1, 2, 1, 2, 3, 2, 351, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 356, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 363, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 368, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 378, 8, 2, 10, 2, 12, 2, 381, 9, 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, 400, 8, 2, 1, 2, 1, 2, 3, 2, 404, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 410, 8, 2, 1, 2, 3, 2, 413, 8, 2, 1, 2, 3, 2, 416, 8, 2, 1, 2, 1, 2, 3, 2, 420, 8, 2, 1, 2, 3, 2, 423, 8, 2, 1, 2, 1, 2, 3, 2, 427, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 434, 8, 2, 1, 2, 3, 2, 437, 8, 2, 1, 2, 1, 2, 3, 2, 441, 8, 2, 1, 2, 3, 2, 444, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 449, 8, 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, 462, 8, 2, 10, 2, 12, 2, 465, 9, 2, 1, 2, 1, 2, 3, 2, 469, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 478, 8, 2, 1, 2, 3, 2, 481, 8, 2, 1, 2, 1, 2, 3, 2, 485, 8, 2, 1, 2, 3, 2, 488, 8, 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, 1, 2, 3, 2, 505, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 511, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 516, 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, 3, 2, 549, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 559, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 570, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 581, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 592, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 597, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 606, 8, 2, 1, 2, 1, 2, 3, 2, 610, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 616, 8, 2, 1, 2, 1, 2, 3, 2, 620, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 625, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 631, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 643, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 651, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 657, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 668, 8, 2, 1, 2, 1, 2, 3, 2, 672, 8, 2, 1, 2, 4, 2, 675, 8, 2, 11, 2, 12, 2, 676, 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, 692, 8, 2, 1, 2, 1, 2, 3, 2, 696, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 701, 8, 2, 10, 2, 12, 2, 704, 9, 2, 1, 2, 3, 2, 707, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 713, 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, 3, 2, 743, 8, 2, 1, 2, 1, 2, 3, 2, 747, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 752, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 759, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 765, 8, 2, 1, 2, 3, 2, 768, 8, 2, 1, 2, 3, 2, 771, 8, 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, 1, 2, 1, 2, 1, 2, 5, 2, 788, 8, 2, 10, 2, 12, 2, 791, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 799, 8, 2, 1, 2, 3, 2, 802, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 811, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 816, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 822, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 829, 8, 2, 1, 2, 3, 2, 832, 8, 2, 1, 2, 1, 2, 3, 2, 836, 8, 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, 849, 8, 2, 10, 2, 12, 2, 852, 9, 2, 3, 2, 854, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 860, 8, 2, 1, 2, 1, 2, 3, 2, 864, 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, 5, 2, 881, 8, 2, 10, 2, 12, 2, 884, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 891, 8, 2, 1, 2, 1, 2, 3, 2, 895, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 901, 8, 2, 1, 2, 3, 2, 904, 8, 2, 1, 2, 1, 2, 3, 2, 908, 8, 2, 1, 2, 3, 2, 911, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 917, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 922, 8, 2, 1, 2, 1, 2, 3, 2, 926, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 933, 8, 2, 1, 2, 3, 2, 936, 8, 2, 1, 2, 3, 2, 939, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 946, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 951, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 960, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 968, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 974, 8, 2, 1, 2, 3, 2, 977, 8, 2, 1, 2, 3, 2, 980, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 986, 8, 2, 1, 2, 1, 2, 3, 2, 990, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 995, 8, 2, 1, 2, 3, 2, 998, 8, 2, 1, 2, 1, 2, 3, 2, 1002, 8, 2, 3, 2, 1004, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1012, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1020, 8, 2, 1, 2, 3, 2, 1023, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1030, 8, 2, 1, 2, 3, 2, 1033, 8, 2, 1, 2, 3, 2, 1036, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1045, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1050, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1056, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1061, 8, 2, 1, 2, 3, 2, 1064, 8, 2, 1, 2, 1, 2, 3, 2, 1068, 8, 2, 1, 2, 3, 2, 1071, 8, 2, 1, 2, 1, 2, 3, 2, 1075, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1085, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1090, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1101, 8, 2, 10, 2, 12, 2, 1104, 9, 2, 3, 2, 1106, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1114, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1120, 8, 2, 1, 2, 3, 2, 1123, 8, 2, 1, 2, 3, 2, 1126, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1131, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1139, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1144, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1150, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1156, 8, 2, 1, 2, 3, 2, 1159, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1166, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1171, 8, 2, 10, 2, 12, 2, 1174, 9, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1179, 8, 2, 10, 2, 12, 2, 1182, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1193, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1199, 8, 2, 10, 2, 12, 2, 1202, 9, 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, 1226, 8, 2, 10, 2, 12, 2, 1229, 9, 2, 3, 2, 1231, 8, 2, 1, 2, 1, 2, 5, 2, 1235, 8, 2, 10, 2, 12, 2, 1238, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1244, 8, 2, 10, 2, 12, 2, 1247, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1253, 8, 2, 10, 2, 12, 2, 1256, 9, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1261, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1266, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1271, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1278, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1283, 8, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1288, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 1295, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1303, 8, 2, 10, 2, 12, 2, 1306, 9, 2, 3, 2, 1308, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1314, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1321, 8, 3, 1, 3, 1, 3, 3, 3, 1325, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1388, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1396, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1403, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 1411, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 1423, 8, 5, 1, 5, 1, 5, 1, 5, 3, 5, 1428, 8, 5, 1, 6, 3, 6, 1431, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 3, 7, 1439, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1444, 8, 7, 3, 7, 1446, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1454, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1459, 8, 7, 1, 7, 1, 7, 3, 7, 1463, 8, 7, 1, 7, 3, 7, 1466, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1474, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1479, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1488, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1493, 8, 7, 1, 7, 3, 7, 1496, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1501, 8, 7, 1, 7, 1, 7, 3, 7, 1505, 8, 7, 1, 7, 1, 7, 1, 7, 3, 7, 1510, 8, 7, 3, 7, 1512, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 1517, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 1524, 8, 9, 10, 9, 12, 9, 1527, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 3, 10, 1534, 8, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 1540, 8, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 1549, 8, 12, 1, 13, 1, 13, 1, 13, 5, 13, 1554, 8, 13, 10, 13, 12, 13, 1557, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 1563, 8, 14, 10, 14, 12, 14, 1566, 9, 14, 1, 15, 1, 15, 3, 15, 1570, 8, 15, 1, 15, 3, 15, 1573, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 1598, 8, 17, 10, 17, 12, 17, 1601, 9, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 1610, 8, 19, 10, 19, 12, 19, 1613, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 3, 20, 1619, 8, 20, 1, 20, 3, 20, 1622, 8, 20, 1, 21, 1, 21, 1, 21, 5, 21, 1627, 8, 21, 10, 21, 12, 21, 1630, 9, 21, 1, 21, 3, 21, 1633, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 1639, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 1645, 8, 23, 10, 23, 12, 23, 1648, 9, 23, 1, 23, 1, 23, 1, 24, 1, 24, 3, 24, 1654, 8, 24, 1, 24, 3, 24, 1657, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 1663, 8, 25, 10, 25, 12, 25, 1666, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 1674, 8, 26, 10, 26, 12, 26, 1677, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 1687, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 1695, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 1701, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 4, 30, 1710, 8, 30, 11, 30, 12, 30, 1711, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1719, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1726, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 1738, 8, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 1744, 8, 30, 10, 30, 12, 30, 1747, 9, 30, 1, 30, 5, 30, 1750, 8, 30, 10, 30, 12, 30, 1753, 9, 30, 1, 30, 5, 30, 1756, 8, 30, 10, 30, 12, 30, 1759, 9, 30, 3, 30, 1761, 8, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 3, 37, 1777, 8, 37, 1, 38, 1, 38, 1, 38, 5, 38, 1782, 8, 38, 10, 38, 12, 38, 1785, 9, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 1795, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1802, 8, 41, 10, 41, 12, 41, 1805, 9, 41, 3, 41, 1807, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1814, 8, 41, 10, 41, 12, 41, 1817, 9, 41, 3, 41, 1819, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1826, 8, 41, 10, 41, 12, 41, 1829, 9, 41, 3, 41, 1831, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 1838, 8, 41, 10, 41, 12, 41, 1841, 9, 41, 3, 41, 1843, 8, 41, 1, 41, 3, 41, 1846, 8, 41, 1, 41, 1, 41, 1, 41, 3, 41, 1851, 8, 41, 3, 41, 1853, 8, 41, 1, 41, 1, 41, 3, 41, 1857, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 1865, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 1871, 8, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 1877, 8, 42, 1, 42, 5, 42, 1880, 8, 42, 10, 42, 12, 42, 1883, 9, 42, 1, 43, 1, 43, 1, 43, 4, 43, 1888, 8, 43, 11, 43, 12, 43, 1889, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 1898, 8, 43, 10, 43, 12, 43, 1901, 9, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 1909, 8, 43, 1, 44, 1, 44, 3, 44, 1913, 8, 44, 1, 44, 3, 44, 1916, 8, 44, 1, 44, 1, 44, 3, 44, 1920, 8, 44, 1, 45, 1, 45, 3, 45, 1924, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 1930, 8, 45, 10, 45, 12, 45, 1933, 9, 45, 1, 45, 3, 45, 1936, 8, 45, 1, 45, 3, 45, 1939, 8, 45, 1, 45, 3, 45, 1942, 8, 45, 1, 45, 3, 45, 1945, 8, 45, 1, 45, 1, 45, 3, 45, 1949, 8, 45, 1, 46, 1, 46, 3, 46, 1953, 8, 46, 1, 46, 5, 46, 1956, 8, 46, 10, 46, 12, 46, 1959, 9, 46, 1, 46, 3, 46, 1962, 8, 46, 1, 46, 3, 46, 1965, 8, 46, 1, 46, 3, 46, 1968, 8, 46, 1, 46, 3, 46, 1971, 8, 46, 1, 46, 1, 46, 3, 46, 1975, 8, 46, 1, 46, 5, 46, 1978, 8, 46, 10, 46, 12, 46, 1981, 9, 46, 1, 46, 3, 46, 1984, 8, 46, 1, 46, 3, 46, 1987, 8, 46, 1, 46, 3, 46, 1990, 8, 46, 1, 46, 3, 46, 1993, 8, 46, 3, 46, 1995, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 2001, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 2008, 8, 47, 1, 47, 1, 47, 1, 47, 3, 47, 2013, 8, 47, 1, 47, 3, 47, 2016, 8, 47, 1, 47, 3, 47, 2019, 8, 47, 1, 47, 1, 47, 3, 47, 2023, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 2033, 8, 47, 1, 47, 1, 47, 3, 47, 2037, 8, 47, 3, 47, 2039, 8, 47, 1, 47, 3, 47, 2042, 8, 47, 1, 47, 1, 47, 3, 47, 2046, 8, 47, 1, 48, 1, 48, 5, 48, 2050, 8, 48, 10, 48, 12, 48, 2053, 9, 48, 1, 48, 3, 48, 2056, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 2067, 8, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 2075, 8, 50, 3, 50, 2077, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 2084, 8, 51, 1, 51, 1, 51, 3, 51, 2088, 8, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 2100, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 2107, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 5, 53, 2120, 8, 53, 10, 53, 12, 53, 2123, 9, 53, 1, 53, 1, 53, 3, 53, 2127, 8, 53, 1, 54, 1, 54, 1, 54, 5, 54, 2132, 8, 54, 10, 54, 12, 54, 2135, 9, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 3, 58, 2150, 8, 58, 1, 58, 5, 58, 2153, 8, 58, 10, 58, 12, 58, 2156, 9, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 2166, 8, 59, 10, 59, 12, 59, 2169, 9, 59, 1, 59, 1, 59, 3, 59, 2173, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 2179, 8, 60, 10, 60, 12, 60, 2182, 9, 60, 1, 60, 5, 60, 2185, 8, 60, 10, 60, 12, 60, 2188, 9, 60, 1, 60, 3, 60, 2191, 8, 60, 1, 60, 3, 60, 2194, 8, 60, 1, 61, 3, 61, 2197, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 2204, 8, 61, 1, 61, 3, 61, 2207, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 2213, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 2220, 8, 62, 10, 62, 12, 62, 2223, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 2230, 8, 62, 10, 62, 12, 62, 2233, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 2245, 8, 62, 10, 62, 12, 62, 2248, 9, 62, 1, 62, 1, 62, 3, 62, 2252, 8, 62, 3, 62, 2254, 8, 62, 1, 63, 1, 63, 1, 63, 3, 63, 2259, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 5, 64, 2266, 8, 64, 10, 64, 12, 64, 2269, 9, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 2278, 8, 64, 1, 64, 1, 64, 1, 64, 3, 64, 2283, 8, 64, 5, 64, 2285, 8, 64, 10, 64, 12, 64, 2288, 9, 64, 1, 64, 1, 64, 3, 64, 2292, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 2299, 8, 65, 1, 65, 1, 65, 1, 65, 3, 65, 2304, 8, 65, 5, 65, 2306, 8, 65, 10, 65, 12, 65, 2309, 9, 65, 3, 65, 2311, 8, 65, 1, 65, 3, 65, 2314, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 2326, 8, 66, 10, 66, 12, 66, 2329, 9, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 2339, 8, 67, 10, 67, 12, 67, 2342, 9, 67, 1, 67, 1, 67, 3, 67, 2346, 8, 67, 1, 68, 1, 68, 3, 68, 2350, 8, 68, 1, 68, 3, 68, 2353, 8, 68, 1, 69, 1, 69, 1, 69, 3, 69, 2358, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 2363, 8, 69, 1, 69, 1, 69, 3, 69, 2367, 8, 69, 1, 69, 3, 69, 2370, 8, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 2380, 8, 70, 10, 70, 12, 70, 2383, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2391, 8, 71, 10, 71, 12, 71, 2394, 9, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 5, 71, 2404, 8, 71, 10, 71, 12, 71, 2407, 9, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 5, 72, 2415, 8, 72, 10, 72, 12, 72, 2418, 9, 72, 1, 72, 1, 72, 3, 72, 2422, 8, 72, 1, 72, 3, 72, 2425, 8, 72, 1, 73, 1, 73, 3, 73, 2429, 8, 73, 1, 73, 3, 73, 2432, 8, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 3, 76, 2444, 8, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 2451, 8, 76, 10, 76, 12, 76, 2454, 9, 76, 3, 76, 2456, 8, 76, 1, 76, 1, 76, 1, 76, 3, 76, 2461, 8, 76, 1, 76, 1, 76, 1, 76, 5, 76, 2466, 8, 76, 10, 76, 12, 76, 2469, 9, 76, 3, 76, 2471, 8, 76, 1, 77, 1, 77, 1, 78, 1, 78, 3, 78, 2477, 8, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 2483, 8, 78, 10, 78, 12, 78, 2486, 9, 78, 3, 78, 2488, 8, 78, 1, 79, 1, 79, 1, 79, 3, 79, 2493, 8, 79, 1, 79, 1, 79, 3, 79, 2497, 8, 79, 1, 79, 1, 79, 1, 79, 1, 79, 3, 79, 2503, 8, 79, 1, 79, 1, 79, 3, 79, 2507, 8, 79, 1, 80, 3, 80, 2510, 8, 80, 1, 80, 1, 80, 1, 80, 3, 80, 2515, 8, 80, 1, 80, 3, 80, 2518, 8, 80, 1, 80, 1, 80, 1, 80, 3, 80, 2523, 8, 80, 3, 80, 2525, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 2531, 8, 81, 1, 82, 1, 82, 1, 82, 3, 82, 2536, 8, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 3, 82, 2543, 8, 82, 1, 83, 3, 83, 2546, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 2564, 8, 83, 3, 83, 2566, 8, 83, 1, 83, 3, 83, 2569, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 5, 85, 2578, 8, 85, 10, 85, 12, 85, 2581, 9, 85, 1, 86, 1, 86, 1, 86, 1, 86, 5, 86, 2587, 8, 86, 10, 86, 12, 86, 2590, 9, 86, 1, 86, 1, 86, 1, 87, 1, 87, 3, 87, 2596, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 2602, 8, 88, 10, 88, 12, 88, 2605, 9, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 3, 89, 2612, 8, 89, 1, 90, 1, 90, 1, 90, 3, 90, 2617, 8, 90, 1, 90, 3, 90, 2620, 8, 90, 1, 90, 3, 90, 2623, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 2631, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 2639, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 2647, 8, 90, 10, 90, 12, 90, 2650, 9, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 2659, 8, 90, 10, 90, 12, 90, 2662, 9, 90, 3, 90, 2664, 8, 90, 1, 90, 1, 90, 1, 90, 3, 90, 2669, 8, 90, 1, 91, 1, 91, 1, 91, 3, 91, 2674, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 2681, 8, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 3, 91, 2688, 8, 91, 3, 91, 2690, 8, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 5, 92, 2701, 8, 92, 10, 92, 12, 92, 2704, 9, 92, 1, 92, 1, 92, 1, 92, 3, 92, 2709, 8, 92, 3, 92, 2711, 8, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 5, 92, 2719, 8, 92, 10, 92, 12, 92, 2722, 9, 92, 1, 92, 1, 92, 1, 92, 3, 92, 2727, 8, 92, 3, 92, 2729, 8, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 3, 94, 2737, 8, 94, 1, 95, 1, 95, 3, 95, 2741, 8, 95, 1, 96, 3, 96, 2744, 8, 96, 1, 96, 1, 96, 3, 96, 2748, 8, 96, 3, 96, 2750, 8, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2759, 8, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2771, 8, 97, 3, 97, 2773, 8, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2780, 8, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2787, 8, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2793, 8, 97, 1, 97, 1, 97, 1, 97, 1, 97, 3, 97, 2799, 8, 97, 3, 97, 2801, 8, 97, 1, 98, 1, 98, 1, 98, 5, 98, 2806, 8, 98, 10, 98, 12, 98, 2809, 9, 98, 1, 99, 1, 99, 1, 99, 5, 99, 2814, 8, 99, 10, 99, 12, 99, 2817, 9, 99, 1, 100, 1, 100, 1, 100, 5, 100, 2822, 8, 100, 10, 100, 12, 100, 2825, 9, 100, 1, 101, 1, 101, 1, 101, 3, 101, 2830, 8, 101, 1, 102, 1, 102, 1, 102, 3, 102, 2835, 8, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 3, 103, 2842, 8, 103, 1, 103, 1, 103, 1, 104, 1, 104, 3, 104, 2848, 8, 104, 1, 104, 3, 104, 2851, 8, 104, 1, 104, 1, 104, 3, 104, 2855, 8, 104, 3, 104, 2857, 8, 104, 1, 105, 1, 105, 1, 105, 5, 105, 2862, 8, 105, 10, 105, 12, 105, 2865, 9, 105, 1, 106, 1, 106, 1, 106, 1, 106, 5, 106, 2871, 8, 106, 10, 106, 12, 106, 2874, 9, 106, 1, 106, 1, 106, 1, 107, 1, 107, 3, 107, 2880, 8, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 5, 108, 2888, 8, 108, 10, 108, 12, 108, 2891, 9, 108, 1, 108, 1, 108, 3, 108, 2895, 8, 108, 1, 109, 1, 109, 3, 109, 2899, 8, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 3, 112, 2909, 8, 112, 1, 113, 1, 113, 1, 113, 5, 113, 2914, 8, 113, 10, 113, 12, 113, 2917, 9, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 3, 114, 2929, 8, 114, 3, 114, 2931, 8, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 5, 114, 2939, 8, 114, 10, 114, 12, 114, 2942, 9, 114, 1, 115, 3, 115, 2945, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2953, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 2960, 8, 115, 10, 115, 12, 115, 2963, 9, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2968, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2976, 8, 115, 1, 115, 1, 115, 1, 115, 3, 115, 2981, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 2991, 8, 115, 10, 115, 12, 115, 2994, 9, 115, 1, 115, 1, 115, 3, 115, 2998, 8, 115, 1, 115, 3, 115, 3001, 8, 115, 1, 115, 1, 115, 1, 115, 1, 115, 3, 115, 3007, 8, 115, 1, 115, 1, 115, 3, 115, 3011, 8, 115, 1, 115, 1, 115, 1, 115, 3, 115, 3016, 8, 115, 1, 115, 1, 115, 1, 115, 3, 115, 3021, 8, 115, 1, 115, 1, 115, 1, 115, 3, 115, 3026, 8, 115, 1, 116, 1, 116, 1, 116, 1, 116, 3, 116, 3032, 8, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 5, 116, 3053, 8, 116, 10, 116, 12, 116, 3056, 9, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3066, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3078, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 4, 118, 3088, 8, 118, 11, 118, 12, 118, 3089, 1, 118, 1, 118, 3, 118, 3094, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 4, 118, 3101, 8, 118, 11, 118, 12, 118, 3102, 1, 118, 1, 118, 3, 118, 3107, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 3123, 8, 118, 10, 118, 12, 118, 3126, 9, 118, 3, 118, 3128, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3136, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3145, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3154, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 4, 118, 3175, 8, 118, 11, 118, 12, 118, 3176, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3193, 8, 118, 1, 118, 1, 118, 1, 118, 5, 118, 3198, 8, 118, 10, 118, 12, 118, 3201, 9, 118, 3, 118, 3203, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3212, 8, 118, 1, 118, 1, 118, 3, 118, 3216, 8, 118, 1, 118, 1, 118, 3, 118, 3220, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 4, 118, 3230, 8, 118, 11, 118, 12, 118, 3231, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3257, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3264, 8, 118, 1, 118, 3, 118, 3267, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3282, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 3, 118, 3303, 8, 118, 1, 118, 1, 118, 3, 118, 3307, 8, 118, 3, 118, 3309, 8, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 3319, 8, 118, 10, 118, 12, 118, 3322, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 3331, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 4, 120, 3344, 8, 120, 11, 120, 12, 120, 3345, 3, 120, 3348, 8, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 3, 125, 3361, 8, 125, 1, 126, 1, 126, 3, 126, 3365, 8, 126, 1, 127, 1, 127, 1, 127, 4, 127, 3370, 8, 127, 11, 127, 12, 127, 3371, 1, 128, 1, 128, 1, 128, 3, 128, 3377, 8, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 3, 130, 3385, 8, 130, 1, 130, 1, 130, 1, 130, 3, 130, 3390, 8, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 3, 133, 3399, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 3431, 8, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 3450, 8, 135, 10, 135, 12, 135, 3453, 9, 135, 3, 135, 3455, 8, 135, 1, 135, 1, 135, 3, 135, 3459, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 3465, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 3471, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 3478, 8, 135, 10, 135, 12, 135, 3481, 9, 135, 1, 135, 3, 135, 3484, 8, 135, 3, 135, 3486, 8, 135, 1, 136, 1, 136, 1, 136, 5, 136, 3491, 8, 136, 10, 136, 12, 136, 3494, 9, 136, 1, 137, 1, 137, 1, 137, 5, 137, 3499, 8, 137, 10, 137, 12, 137, 3502, 9, 137, 1, 138, 1, 138, 1, 138, 5, 138, 3507, 8, 138, 10, 138, 12, 138, 3510, 9, 138, 1, 139, 1, 139, 1, 139, 5, 139, 3515, 8, 139, 10, 139, 12, 139, 3518, 9, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 3, 140, 3527, 8, 140, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 5, 142, 3535, 8, 142, 10, 142, 12, 142, 3538, 9, 142, 1, 143, 1, 143, 1, 143, 1, 143, 3, 143, 3544, 8, 143, 1, 143, 1, 143, 3, 143, 3548, 8, 143, 1, 144, 1, 144, 1, 144, 5, 144, 3553, 8, 144, 10, 144, 12, 144, 3556, 9, 144, 1, 145, 1, 145, 1, 145, 5, 145, 3561, 8, 145, 10, 145, 12, 145, 3564, 9, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 3, 146, 3579, 8, 146, 1, 147, 1, 147, 3, 147, 3583, 8, 147, 1, 147, 1, 147, 1, 147, 3, 147, 3588, 8, 147, 1, 147, 1, 147, 3, 147, 3592, 8, 147, 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, 5, 149, 3608, 8, 149, 10, 149, 12, 149, 3611, 9, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 5, 150, 3624, 8, 150, 10, 150, 12, 150, 3627, 9, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 5, 150, 3634, 8, 150, 10, 150, 12, 150, 3637, 9, 150, 3, 150, 3639, 8, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 5, 150, 3646, 8, 150, 10, 150, 12, 150, 3649, 9, 150, 3, 150, 3651, 8, 150, 3, 150, 3653, 8, 150, 1, 150, 3, 150, 3656, 8, 150, 1, 150, 3, 150, 3659, 8, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 3, 151, 3669, 8, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 3, 152, 3678, 8, 152, 1, 153, 1, 153, 1, 153, 5, 153, 3683, 8, 153, 10, 153, 12, 153, 3686, 9, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 3, 154, 3697, 8, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 5, 156, 3704, 8, 156, 10, 156, 12, 156, 3707, 9, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 4, 158, 3714, 8, 158, 11, 158, 12, 158, 3715, 1, 158, 3, 158, 3719, 8, 158, 1, 159, 1, 159, 3, 159, 3723, 8, 159, 1, 160, 1, 160, 1, 160, 1, 160, 3, 160, 3729, 8, 160, 1, 161, 1, 161, 1, 162, 3, 162, 3734, 8, 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, 163, 1, 163, 1, 163, 3, 163, 3751, 8, 163, 1, 164, 1, 164, 1, 165, 1, 165, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 9, 1102, 1172, 1180, 1200, 1227, 1236, 1245, 1254, 1304, 4, 84, 228, 232, 236, 168, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 0, 76, 2, 0, 78, 78, 229, 229, 2, 0, 34, 34, 247, 247, 3, 0, 73, 73, 191, 191, 262, 262, 2, 0, 123, 123, 140, 140, 2, 0, 11, 11, 39, 39, 2, 0, 91, 91, 98, 98, 5, 0, 46, 46, 58, 58, 108, 108, 122, 122, 173, 173, 3, 0, 10, 10, 290, 290, 331, 331, 1, 0, 86, 87, 2, 0, 108, 108, 122, 122, 3, 0, 8, 8, 96, 96, 289, 289, 2, 0, 8, 8, 167, 167, 1, 0, 335, 336, 2, 0, 59, 59, 96, 96, 2, 0, 129, 129, 249, 249, 6, 0, 54, 54, 129, 129, 143, 143, 172, 172, 228, 228, 313, 313, 3, 0, 11, 11, 59, 59, 96, 96, 4, 0, 107, 107, 139, 139, 171, 171, 326, 326, 2, 0, 171, 171, 326, 326, 3, 0, 45, 45, 275, 275, 279, 279, 2, 0, 45, 45, 275, 275, 3, 0, 18, 18, 103, 103, 320, 320, 3, 0, 72, 72, 190, 190, 261, 261, 4, 0, 102, 102, 148, 148, 270, 270, 323, 323, 3, 0, 102, 102, 270, 270, 323, 323, 2, 0, 21, 21, 86, 86, 2, 0, 116, 116, 157, 157, 2, 0, 292, 292, 337, 337, 2, 0, 291, 291, 303, 303, 2, 0, 61, 61, 256, 256, 2, 0, 104, 104, 141, 141, 2, 0, 10, 10, 92, 92, 2, 0, 15, 15, 264, 264, 2, 0, 124, 124, 250, 250, 2, 0, 382, 382, 384, 384, 2, 0, 93, 93, 217, 217, 2, 0, 209, 209, 278, 278, 2, 0, 197, 197, 360, 360, 1, 0, 251, 252, 1, 0, 163, 164, 3, 0, 10, 10, 16, 16, 277, 277, 3, 0, 111, 111, 316, 316, 325, 325, 2, 0, 361, 362, 366, 366, 2, 0, 94, 94, 363, 365, 2, 0, 361, 362, 369, 369, 11, 0, 67, 67, 69, 69, 134, 134, 180, 180, 182, 182, 184, 184, 186, 186, 231, 231, 259, 259, 341, 341, 348, 348, 4, 0, 63, 63, 65, 66, 268, 268, 331, 331, 2, 0, 74, 75, 306, 306, 3, 0, 76, 77, 302, 302, 307, 307, 2, 0, 36, 36, 318, 318, 2, 0, 138, 138, 246, 246, 1, 0, 287, 288, 2, 0, 4, 4, 123, 123, 2, 0, 4, 4, 119, 119, 3, 0, 28, 28, 160, 160, 311, 311, 1, 0, 220, 221, 1, 0, 352, 359, 2, 0, 94, 94, 361, 370, 4, 0, 14, 14, 140, 140, 197, 197, 208, 208, 2, 0, 111, 111, 316, 316, 1, 0, 361, 362, 7, 0, 67, 68, 134, 135, 180, 187, 192, 193, 259, 260, 341, 342, 348, 349, 6, 0, 67, 67, 134, 134, 184, 184, 186, 186, 259, 259, 348, 348, 2, 0, 186, 186, 348, 348, 4, 0, 67, 67, 134, 134, 184, 184, 259, 259, 3, 0, 134, 134, 184, 184, 259, 259, 2, 0, 82, 82, 352, 352, 2, 0, 233, 233, 258, 258, 2, 0, 118, 118, 226, 226, 2, 0, 378, 378, 389, 389, 1, 0, 379, 387, 2, 0, 96, 96, 269, 269, 1, 0, 377, 378, 52, 0, 8, 9, 11, 13, 15, 15, 17, 19, 21, 22, 24, 27, 29, 34, 37, 41, 43, 46, 48, 48, 50, 56, 58, 58, 61, 62, 67, 91, 93, 96, 98, 98, 101, 101, 103, 110, 113, 113, 115, 118, 121, 122, 125, 128, 131, 131, 133, 139, 141, 143, 145, 147, 149, 151, 154, 154, 156, 157, 159, 159, 163, 193, 195, 195, 199, 201, 205, 207, 210, 210, 212, 213, 215, 219, 222, 226, 228, 238, 240, 249, 251, 262, 264, 267, 269, 276, 278, 292, 294, 299, 302, 308, 310, 310, 312, 322, 326, 330, 333, 342, 345, 345, 348, 351, 16, 0, 15, 15, 60, 60, 102, 102, 124, 124, 144, 144, 148, 148, 155, 155, 158, 158, 161, 161, 194, 194, 203, 203, 250, 250, 264, 264, 270, 270, 323, 323, 332, 332, 19, 0, 8, 14, 16, 59, 61, 101, 103, 122, 125, 143, 145, 147, 149, 154, 156, 157, 159, 160, 162, 193, 195, 195, 197, 202, 204, 249, 251, 262, 265, 269, 271, 292, 294, 322, 324, 331, 333, 351, 4365, 0, 339, 1, 0, 0, 0, 2, 344, 1, 0, 0, 0, 4, 1307, 1, 0, 0, 0, 6, 1402, 1, 0, 0, 0, 8, 1404, 1, 0, 0, 0, 10, 1416, 1, 0, 0, 0, 12, 1430, 1, 0, 0, 0, 14, 1511, 1, 0, 0, 0, 16, 1513, 1, 0, 0, 0, 18, 1518, 1, 0, 0, 0, 20, 1539, 1, 0, 0, 0, 22, 1541, 1, 0, 0, 0, 24, 1548, 1, 0, 0, 0, 26, 1550, 1, 0, 0, 0, 28, 1558, 1, 0, 0, 0, 30, 1567, 1, 0, 0, 0, 32, 1578, 1, 0, 0, 0, 34, 1599, 1, 0, 0, 0, 36, 1602, 1, 0, 0, 0, 38, 1605, 1, 0, 0, 0, 40, 1616, 1, 0, 0, 0, 42, 1632, 1, 0, 0, 0, 44, 1638, 1, 0, 0, 0, 46, 1640, 1, 0, 0, 0, 48, 1651, 1, 0, 0, 0, 50, 1658, 1, 0, 0, 0, 52, 1669, 1, 0, 0, 0, 54, 1686, 1, 0, 0, 0, 56, 1694, 1, 0, 0, 0, 58, 1696, 1, 0, 0, 0, 60, 1760, 1, 0, 0, 0, 62, 1762, 1, 0, 0, 0, 64, 1764, 1, 0, 0, 0, 66, 1766, 1, 0, 0, 0, 68, 1768, 1, 0, 0, 0, 70, 1770, 1, 0, 0, 0, 72, 1772, 1, 0, 0, 0, 74, 1776, 1, 0, 0, 0, 76, 1778, 1, 0, 0, 0, 78, 1786, 1, 0, 0, 0, 80, 1794, 1, 0, 0, 0, 82, 1806, 1, 0, 0, 0, 84, 1858, 1, 0, 0, 0, 86, 1908, 1, 0, 0, 0, 88, 1912, 1, 0, 0, 0, 90, 1948, 1, 0, 0, 0, 92, 1994, 1, 0, 0, 0, 94, 2015, 1, 0, 0, 0, 96, 2047, 1, 0, 0, 0, 98, 2059, 1, 0, 0, 0, 100, 2062, 1, 0, 0, 0, 102, 2078, 1, 0, 0, 0, 104, 2092, 1, 0, 0, 0, 106, 2126, 1, 0, 0, 0, 108, 2128, 1, 0, 0, 0, 110, 2136, 1, 0, 0, 0, 112, 2140, 1, 0, 0, 0, 114, 2143, 1, 0, 0, 0, 116, 2146, 1, 0, 0, 0, 118, 2172, 1, 0, 0, 0, 120, 2174, 1, 0, 0, 0, 122, 2212, 1, 0, 0, 0, 124, 2253, 1, 0, 0, 0, 126, 2258, 1, 0, 0, 0, 128, 2291, 1, 0, 0, 0, 130, 2313, 1, 0, 0, 0, 132, 2315, 1, 0, 0, 0, 134, 2345, 1, 0, 0, 0, 136, 2347, 1, 0, 0, 0, 138, 2354, 1, 0, 0, 0, 140, 2371, 1, 0, 0, 0, 142, 2386, 1, 0, 0, 0, 144, 2410, 1, 0, 0, 0, 146, 2426, 1, 0, 0, 0, 148, 2433, 1, 0, 0, 0, 150, 2437, 1, 0, 0, 0, 152, 2440, 1, 0, 0, 0, 154, 2472, 1, 0, 0, 0, 156, 2487, 1, 0, 0, 0, 158, 2506, 1, 0, 0, 0, 160, 2524, 1, 0, 0, 0, 162, 2530, 1, 0, 0, 0, 164, 2532, 1, 0, 0, 0, 166, 2568, 1, 0, 0, 0, 168, 2570, 1, 0, 0, 0, 170, 2574, 1, 0, 0, 0, 172, 2582, 1, 0, 0, 0, 174, 2593, 1, 0, 0, 0, 176, 2597, 1, 0, 0, 0, 178, 2608, 1, 0, 0, 0, 180, 2668, 1, 0, 0, 0, 182, 2689, 1, 0, 0, 0, 184, 2710, 1, 0, 0, 0, 186, 2730, 1, 0, 0, 0, 188, 2736, 1, 0, 0, 0, 190, 2740, 1, 0, 0, 0, 192, 2749, 1, 0, 0, 0, 194, 2800, 1, 0, 0, 0, 196, 2802, 1, 0, 0, 0, 198, 2810, 1, 0, 0, 0, 200, 2818, 1, 0, 0, 0, 202, 2826, 1, 0, 0, 0, 204, 2834, 1, 0, 0, 0, 206, 2841, 1, 0, 0, 0, 208, 2847, 1, 0, 0, 0, 210, 2858, 1, 0, 0, 0, 212, 2866, 1, 0, 0, 0, 214, 2879, 1, 0, 0, 0, 216, 2894, 1, 0, 0, 0, 218, 2898, 1, 0, 0, 0, 220, 2900, 1, 0, 0, 0, 222, 2902, 1, 0, 0, 0, 224, 2908, 1, 0, 0, 0, 226, 2910, 1, 0, 0, 0, 228, 2930, 1, 0, 0, 0, 230, 3025, 1, 0, 0, 0, 232, 3031, 1, 0, 0, 0, 234, 3057, 1, 0, 0, 0, 236, 3308, 1, 0, 0, 0, 238, 3330, 1, 0, 0, 0, 240, 3347, 1, 0, 0, 0, 242, 3349, 1, 0, 0, 0, 244, 3351, 1, 0, 0, 0, 246, 3353, 1, 0, 0, 0, 248, 3355, 1, 0, 0, 0, 250, 3357, 1, 0, 0, 0, 252, 3362, 1, 0, 0, 0, 254, 3369, 1, 0, 0, 0, 256, 3373, 1, 0, 0, 0, 258, 3378, 1, 0, 0, 0, 260, 3384, 1, 0, 0, 0, 262, 3391, 1, 0, 0, 0, 264, 3393, 1, 0, 0, 0, 266, 3398, 1, 0, 0, 0, 268, 3430, 1, 0, 0, 0, 270, 3485, 1, 0, 0, 0, 272, 3487, 1, 0, 0, 0, 274, 3495, 1, 0, 0, 0, 276, 3503, 1, 0, 0, 0, 278, 3511, 1, 0, 0, 0, 280, 3526, 1, 0, 0, 0, 282, 3528, 1, 0, 0, 0, 284, 3531, 1, 0, 0, 0, 286, 3539, 1, 0, 0, 0, 288, 3549, 1, 0, 0, 0, 290, 3557, 1, 0, 0, 0, 292, 3578, 1, 0, 0, 0, 294, 3580, 1, 0, 0, 0, 296, 3593, 1, 0, 0, 0, 298, 3598, 1, 0, 0, 0, 300, 3658, 1, 0, 0, 0, 302, 3668, 1, 0, 0, 0, 304, 3677, 1, 0, 0, 0, 306, 3679, 1, 0, 0, 0, 308, 3696, 1, 0, 0, 0, 310, 3698, 1, 0, 0, 0, 312, 3700, 1, 0, 0, 0, 314, 3708, 1, 0, 0, 0, 316, 3718, 1, 0, 0, 0, 318, 3722, 1, 0, 0, 0, 320, 3728, 1, 0, 0, 0, 322, 3730, 1, 0, 0, 0, 324, 3733, 1, 0, 0, 0, 326, 3750, 1, 0, 0, 0, 328, 3752, 1, 0, 0, 0, 330, 3754, 1, 0, 0, 0, 332, 3756, 1, 0, 0, 0, 334, 3758, 1, 0, 0, 0, 336, 338, 3, 2, 1, 0, 337, 336, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 342, 343, 5, 0, 0, 1, 343, 1, 1, 0, 0, 0, 344, 346, 3, 4, 2, 0, 345, 347, 5, 1, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 3, 1, 0, 0, 0, 348, 1308, 3, 12, 6, 0, 349, 351, 3, 28, 14, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 1308, 3, 60, 30, 0, 353, 355, 5, 330, 0, 0, 354, 356, 3, 22, 11, 0, 355, 354, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 357, 1, 0, 0, 0, 357, 1308, 3, 62, 31, 0, 358, 359, 5, 269, 0, 0, 359, 362, 5, 37, 0, 0, 360, 363, 3, 318, 159, 0, 361, 363, 3, 328, 164, 0, 362, 360, 1, 0, 0, 0, 362, 361, 1, 0, 0, 0, 363, 1308, 1, 0, 0, 0, 364, 365, 5, 59, 0, 0, 365, 367, 3, 22, 11, 0, 366, 368, 3, 148, 74, 0, 367, 366, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 379, 3, 64, 32, 0, 370, 371, 5, 51, 0, 0, 371, 378, 3, 328, 164, 0, 372, 373, 5, 170, 0, 0, 373, 378, 3, 328, 164, 0, 374, 375, 5, 346, 0, 0, 375, 376, 7, 0, 0, 0, 376, 378, 3, 38, 19, 0, 377, 370, 1, 0, 0, 0, 377, 372, 1, 0, 0, 0, 377, 374, 1, 0, 0, 0, 378, 381, 1, 0, 0, 0, 379, 377, 1, 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 1308, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 383, 5, 11, 0, 0, 383, 384, 3, 22, 11, 0, 384, 385, 3, 62, 31, 0, 385, 386, 5, 269, 0, 0, 386, 387, 7, 0, 0, 0, 387, 388, 3, 38, 19, 0, 388, 1308, 1, 0, 0, 0, 389, 390, 5, 11, 0, 0, 390, 391, 3, 22, 11, 0, 391, 392, 3, 62, 31, 0, 392, 393, 5, 269, 0, 0, 393, 394, 5, 170, 0, 0, 394, 395, 3, 328, 164, 0, 395, 1308, 1, 0, 0, 0, 396, 397, 5, 96, 0, 0, 397, 399, 3, 22, 11, 0, 398, 400, 3, 150, 75, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 401, 1, 0, 0, 0, 401, 403, 3, 62, 31, 0, 402, 404, 7, 1, 0, 0, 403, 402, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 1308, 1, 0, 0, 0, 405, 406, 5, 273, 0, 0, 406, 409, 7, 2, 0, 0, 407, 408, 7, 3, 0, 0, 408, 410, 3, 198, 99, 0, 409, 407, 1, 0, 0, 0, 409, 410, 1, 0, 0, 0, 410, 415, 1, 0, 0, 0, 411, 413, 5, 163, 0, 0, 412, 411, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 416, 3, 328, 164, 0, 415, 412, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 1308, 1, 0, 0, 0, 417, 419, 5, 59, 0, 0, 418, 420, 5, 298, 0, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 422, 1, 0, 0, 0, 421, 423, 5, 109, 0, 0, 422, 421, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 426, 5, 293, 0, 0, 425, 427, 3, 148, 74, 0, 426, 425, 1, 0, 0, 0, 426, 427, 1, 0, 0, 0, 427, 428, 1, 0, 0, 0, 428, 433, 3, 66, 33, 0, 429, 430, 5, 2, 0, 0, 430, 431, 3, 288, 144, 0, 431, 432, 5, 3, 0, 0, 432, 434, 1, 0, 0, 0, 433, 429, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 437, 3, 32, 16, 0, 436, 435, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 443, 3, 34, 17, 0, 439, 441, 5, 20, 0, 0, 440, 439, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 444, 3, 12, 6, 0, 443, 440, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 1308, 1, 0, 0, 0, 445, 446, 5, 59, 0, 0, 446, 448, 5, 293, 0, 0, 447, 449, 3, 148, 74, 0, 448, 447, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 450, 1, 0, 0, 0, 450, 451, 3, 66, 33, 0, 451, 452, 5, 163, 0, 0, 452, 463, 3, 68, 34, 0, 453, 462, 3, 32, 16, 0, 454, 462, 3, 194, 97, 0, 455, 462, 3, 54, 27, 0, 456, 457, 5, 170, 0, 0, 457, 462, 3, 328, 164, 0, 458, 459, 5, 297, 0, 0, 459, 462, 3, 38, 19, 0, 460, 462, 3, 36, 18, 0, 461, 453, 1, 0, 0, 0, 461, 454, 1, 0, 0, 0, 461, 455, 1, 0, 0, 0, 461, 456, 1, 0, 0, 0, 461, 458, 1, 0, 0, 0, 461, 460, 1, 0, 0, 0, 462, 465, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 1308, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 466, 467, 5, 59, 0, 0, 467, 469, 5, 208, 0, 0, 468, 466, 1, 0, 0, 0, 468, 469, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 5, 244, 0, 0, 471, 472, 5, 293, 0, 0, 472, 477, 3, 66, 33, 0, 473, 474, 5, 2, 0, 0, 474, 475, 3, 288, 144, 0, 475, 476, 5, 3, 0, 0, 476, 478, 1, 0, 0, 0, 477, 473, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 480, 1, 0, 0, 0, 479, 481, 3, 32, 16, 0, 480, 479, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 487, 3, 34, 17, 0, 483, 485, 5, 20, 0, 0, 484, 483, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 3, 12, 6, 0, 487, 484, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 1308, 1, 0, 0, 0, 489, 490, 5, 13, 0, 0, 490, 491, 5, 293, 0, 0, 491, 493, 3, 68, 34, 0, 492, 494, 3, 18, 9, 0, 493, 492, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 495, 1, 0, 0, 0, 495, 496, 5, 55, 0, 0, 496, 504, 5, 282, 0, 0, 497, 505, 5, 196, 0, 0, 498, 499, 5, 119, 0, 0, 499, 500, 5, 50, 0, 0, 500, 505, 3, 76, 38, 0, 501, 502, 5, 119, 0, 0, 502, 503, 5, 10, 0, 0, 503, 505, 5, 50, 0, 0, 504, 497, 1, 0, 0, 0, 504, 498, 1, 0, 0, 0, 504, 501, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 1308, 1, 0, 0, 0, 506, 507, 5, 13, 0, 0, 507, 510, 5, 294, 0, 0, 508, 509, 7, 3, 0, 0, 509, 511, 3, 62, 31, 0, 510, 508, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 5, 55, 0, 0, 513, 515, 5, 282, 0, 0, 514, 516, 5, 196, 0, 0, 515, 514, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 1308, 1, 0, 0, 0, 517, 518, 5, 11, 0, 0, 518, 519, 5, 293, 0, 0, 519, 520, 3, 68, 34, 0, 520, 521, 5, 8, 0, 0, 521, 522, 5, 49, 0, 0, 522, 523, 3, 274, 137, 0, 523, 1308, 1, 0, 0, 0, 524, 525, 5, 11, 0, 0, 525, 526, 5, 293, 0, 0, 526, 527, 3, 68, 34, 0, 527, 528, 5, 8, 0, 0, 528, 529, 5, 50, 0, 0, 529, 530, 5, 2, 0, 0, 530, 531, 3, 272, 136, 0, 531, 532, 5, 3, 0, 0, 532, 1308, 1, 0, 0, 0, 533, 534, 5, 11, 0, 0, 534, 535, 5, 293, 0, 0, 535, 536, 3, 68, 34, 0, 536, 537, 5, 241, 0, 0, 537, 538, 5, 49, 0, 0, 538, 539, 3, 74, 37, 0, 539, 540, 5, 309, 0, 0, 540, 541, 3, 78, 39, 0, 541, 1308, 1, 0, 0, 0, 542, 543, 5, 11, 0, 0, 543, 544, 5, 293, 0, 0, 544, 545, 3, 68, 34, 0, 545, 546, 5, 96, 0, 0, 546, 548, 5, 49, 0, 0, 547, 549, 3, 150, 75, 0, 548, 547, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 3, 74, 37, 0, 551, 1308, 1, 0, 0, 0, 552, 553, 5, 11, 0, 0, 553, 554, 5, 293, 0, 0, 554, 555, 3, 68, 34, 0, 555, 556, 5, 96, 0, 0, 556, 558, 5, 50, 0, 0, 557, 559, 3, 150, 75, 0, 558, 557, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 561, 5, 2, 0, 0, 561, 562, 3, 76, 38, 0, 562, 563, 5, 3, 0, 0, 563, 1308, 1, 0, 0, 0, 564, 569, 5, 11, 0, 0, 565, 566, 5, 293, 0, 0, 566, 570, 3, 68, 34, 0, 567, 568, 5, 338, 0, 0, 568, 570, 3, 72, 36, 0, 569, 565, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 5, 241, 0, 0, 572, 573, 5, 309, 0, 0, 573, 574, 3, 198, 99, 0, 574, 1308, 1, 0, 0, 0, 575, 580, 5, 11, 0, 0, 576, 577, 5, 293, 0, 0, 577, 581, 3, 68, 34, 0, 578, 579, 5, 338, 0, 0, 579, 581, 3, 72, 36, 0, 580, 576, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 583, 5, 269, 0, 0, 583, 584, 5, 297, 0, 0, 584, 585, 3, 38, 19, 0, 585, 1308, 1, 0, 0, 0, 586, 591, 5, 11, 0, 0, 587, 588, 5, 293, 0, 0, 588, 592, 3, 68, 34, 0, 589, 590, 5, 338, 0, 0, 590, 592, 3, 72, 36, 0, 591, 587, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 594, 5, 328, 0, 0, 594, 596, 5, 297, 0, 0, 595, 597, 3, 150, 75, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 3, 38, 19, 0, 599, 1308, 1, 0, 0, 0, 600, 601, 5, 11, 0, 0, 601, 602, 5, 293, 0, 0, 602, 603, 3, 68, 34, 0, 603, 605, 7, 4, 0, 0, 604, 606, 5, 49, 0, 0, 605, 604, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 609, 3, 74, 37, 0, 608, 610, 3, 326, 163, 0, 609, 608, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 1308, 1, 0, 0, 0, 611, 612, 5, 11, 0, 0, 612, 613, 5, 293, 0, 0, 613, 615, 3, 68, 34, 0, 614, 616, 3, 18, 9, 0, 615, 614, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 619, 5, 39, 0, 0, 618, 620, 5, 49, 0, 0, 619, 618, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 622, 3, 74, 37, 0, 622, 624, 3, 286, 143, 0, 623, 625, 3, 266, 133, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 1308, 1, 0, 0, 0, 626, 627, 5, 11, 0, 0, 627, 628, 5, 293, 0, 0, 628, 630, 3, 68, 34, 0, 629, 631, 3, 18, 9, 0, 630, 629, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 633, 5, 244, 0, 0, 633, 634, 5, 50, 0, 0, 634, 635, 5, 2, 0, 0, 635, 636, 3, 276, 138, 0, 636, 637, 5, 3, 0, 0, 637, 1308, 1, 0, 0, 0, 638, 639, 5, 11, 0, 0, 639, 640, 5, 293, 0, 0, 640, 642, 3, 68, 34, 0, 641, 643, 3, 18, 9, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 645, 5, 269, 0, 0, 645, 646, 5, 266, 0, 0, 646, 650, 3, 328, 164, 0, 647, 648, 5, 346, 0, 0, 648, 649, 5, 267, 0, 0, 649, 651, 3, 38, 19, 0, 650, 647, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 1308, 1, 0, 0, 0, 652, 653, 5, 11, 0, 0, 653, 654, 5, 293, 0, 0, 654, 656, 3, 68, 34, 0, 655, 657, 3, 18, 9, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 5, 269, 0, 0, 659, 660, 5, 267, 0, 0, 660, 661, 3, 38, 19, 0, 661, 1308, 1, 0, 0, 0, 662, 667, 5, 11, 0, 0, 663, 664, 5, 293, 0, 0, 664, 668, 3, 68, 34, 0, 665, 666, 5, 338, 0, 0, 666, 668, 3, 72, 36, 0, 667, 663, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 669, 1, 0, 0, 0, 669, 671, 5, 8, 0, 0, 670, 672, 3, 148, 74, 0, 671, 670, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 674, 1, 0, 0, 0, 673, 675, 3, 16, 8, 0, 674, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 1308, 1, 0, 0, 0, 678, 679, 5, 11, 0, 0, 679, 680, 5, 293, 0, 0, 680, 681, 3, 68, 34, 0, 681, 682, 3, 18, 9, 0, 682, 683, 5, 241, 0, 0, 683, 684, 5, 309, 0, 0, 684, 685, 3, 18, 9, 0, 685, 1308, 1, 0, 0, 0, 686, 691, 5, 11, 0, 0, 687, 688, 5, 293, 0, 0, 688, 692, 3, 68, 34, 0, 689, 690, 5, 338, 0, 0, 690, 692, 3, 72, 36, 0, 691, 687, 1, 0, 0, 0, 691, 689, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 695, 5, 96, 0, 0, 694, 696, 3, 150, 75, 0, 695, 694, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 702, 3, 18, 9, 0, 698, 699, 5, 4, 0, 0, 699, 701, 3, 18, 9, 0, 700, 698, 1, 0, 0, 0, 701, 704, 1, 0, 0, 0, 702, 700, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 706, 1, 0, 0, 0, 704, 702, 1, 0, 0, 0, 705, 707, 5, 230, 0, 0, 706, 705, 1, 0, 0, 0, 706, 707, 1, 0, 0, 0, 707, 1308, 1, 0, 0, 0, 708, 709, 5, 11, 0, 0, 709, 710, 5, 293, 0, 0, 710, 712, 3, 68, 34, 0, 711, 713, 3, 18, 9, 0, 712, 711, 1, 0, 0, 0, 712, 713, 1, 0, 0, 0, 713, 714, 1, 0, 0, 0, 714, 715, 5, 269, 0, 0, 715, 716, 5, 170, 0, 0, 716, 717, 3, 328, 164, 0, 717, 1308, 1, 0, 0, 0, 718, 719, 5, 11, 0, 0, 719, 720, 5, 293, 0, 0, 720, 721, 3, 68, 34, 0, 721, 722, 5, 237, 0, 0, 722, 723, 5, 219, 0, 0, 723, 1308, 1, 0, 0, 0, 724, 725, 5, 11, 0, 0, 725, 726, 5, 176, 0, 0, 726, 727, 5, 338, 0, 0, 727, 728, 3, 72, 36, 0, 728, 729, 7, 5, 0, 0, 729, 730, 5, 248, 0, 0, 730, 1308, 1, 0, 0, 0, 731, 732, 5, 11, 0, 0, 732, 733, 5, 176, 0, 0, 733, 734, 5, 338, 0, 0, 734, 735, 3, 72, 36, 0, 735, 736, 5, 269, 0, 0, 736, 737, 5, 297, 0, 0, 737, 738, 3, 38, 19, 0, 738, 1308, 1, 0, 0, 0, 739, 740, 5, 96, 0, 0, 740, 742, 5, 293, 0, 0, 741, 743, 3, 150, 75, 0, 742, 741, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 746, 3, 68, 34, 0, 745, 747, 5, 230, 0, 0, 746, 745, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 1308, 1, 0, 0, 0, 748, 749, 5, 96, 0, 0, 749, 751, 5, 338, 0, 0, 750, 752, 3, 150, 75, 0, 751, 750, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 1308, 3, 72, 36, 0, 754, 755, 5, 96, 0, 0, 755, 756, 5, 176, 0, 0, 756, 758, 5, 338, 0, 0, 757, 759, 3, 150, 75, 0, 758, 757, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 760, 1, 0, 0, 0, 760, 1308, 3, 72, 36, 0, 761, 764, 5, 59, 0, 0, 762, 763, 5, 208, 0, 0, 763, 765, 5, 244, 0, 0, 764, 762, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 770, 1, 0, 0, 0, 766, 768, 5, 128, 0, 0, 767, 766, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 769, 1, 0, 0, 0, 769, 771, 5, 298, 0, 0, 770, 767, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 772, 774, 5, 338, 0, 0, 773, 775, 3, 148, 74, 0, 774, 773, 1, 0, 0, 0, 774, 775, 1, 0, 0, 0, 775, 776, 1, 0, 0, 0, 776, 778, 3, 70, 35, 0, 777, 779, 3, 176, 88, 0, 778, 777, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 789, 1, 0, 0, 0, 780, 781, 5, 51, 0, 0, 781, 788, 3, 328, 164, 0, 782, 783, 5, 218, 0, 0, 783, 784, 5, 203, 0, 0, 784, 788, 3, 168, 84, 0, 785, 786, 5, 297, 0, 0, 786, 788, 3, 38, 19, 0, 787, 780, 1, 0, 0, 0, 787, 782, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 788, 791, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 792, 793, 5, 20, 0, 0, 793, 794, 3, 12, 6, 0, 794, 1308, 1, 0, 0, 0, 795, 798, 5, 59, 0, 0, 796, 797, 5, 208, 0, 0, 797, 799, 5, 244, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 801, 1, 0, 0, 0, 800, 802, 5, 128, 0, 0, 801, 800, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 804, 5, 298, 0, 0, 804, 805, 5, 338, 0, 0, 805, 810, 3, 70, 35, 0, 806, 807, 5, 2, 0, 0, 807, 808, 3, 284, 142, 0, 808, 809, 5, 3, 0, 0, 809, 811, 1, 0, 0, 0, 810, 806, 1, 0, 0, 0, 810, 811, 1, 0, 0, 0, 811, 812, 1, 0, 0, 0, 812, 815, 3, 32, 16, 0, 813, 814, 5, 207, 0, 0, 814, 816, 3, 38, 19, 0, 815, 813, 1, 0, 0, 0, 815, 816, 1, 0, 0, 0, 816, 1308, 1, 0, 0, 0, 817, 818, 5, 11, 0, 0, 818, 819, 5, 338, 0, 0, 819, 821, 3, 72, 36, 0, 820, 822, 5, 20, 0, 0, 821, 820, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 823, 1, 0, 0, 0, 823, 824, 3, 12, 6, 0, 824, 1308, 1, 0, 0, 0, 825, 828, 5, 59, 0, 0, 826, 827, 5, 208, 0, 0, 827, 829, 5, 244, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 831, 1, 0, 0, 0, 830, 832, 5, 298, 0, 0, 831, 830, 1, 0, 0, 0, 831, 832, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 835, 5, 125, 0, 0, 834, 836, 3, 148, 74, 0, 835, 834, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 3, 310, 155, 0, 838, 839, 5, 20, 0, 0, 839, 853, 3, 328, 164, 0, 840, 841, 5, 332, 0, 0, 841, 842, 3, 318, 159, 0, 842, 843, 3, 328, 164, 0, 843, 850, 1, 0, 0, 0, 844, 845, 5, 4, 0, 0, 845, 846, 3, 318, 159, 0, 846, 847, 3, 328, 164, 0, 847, 849, 1, 0, 0, 0, 848, 844, 1, 0, 0, 0, 849, 852, 1, 0, 0, 0, 850, 848, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 854, 1, 0, 0, 0, 852, 850, 1, 0, 0, 0, 853, 840, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 1308, 1, 0, 0, 0, 855, 856, 5, 59, 0, 0, 856, 857, 5, 176, 0, 0, 857, 859, 5, 338, 0, 0, 858, 860, 3, 148, 74, 0, 859, 858, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 863, 3, 70, 35, 0, 862, 864, 3, 32, 16, 0, 863, 862, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 882, 1, 0, 0, 0, 865, 866, 5, 207, 0, 0, 866, 881, 3, 38, 19, 0, 867, 868, 5, 218, 0, 0, 868, 869, 5, 31, 0, 0, 869, 881, 3, 212, 106, 0, 870, 881, 3, 10, 5, 0, 871, 881, 3, 8, 4, 0, 872, 881, 3, 194, 97, 0, 873, 881, 3, 54, 27, 0, 874, 875, 5, 170, 0, 0, 875, 881, 3, 328, 164, 0, 876, 877, 5, 51, 0, 0, 877, 881, 3, 328, 164, 0, 878, 879, 5, 297, 0, 0, 879, 881, 3, 38, 19, 0, 880, 865, 1, 0, 0, 0, 880, 867, 1, 0, 0, 0, 880, 870, 1, 0, 0, 0, 880, 871, 1, 0, 0, 0, 880, 872, 1, 0, 0, 0, 880, 873, 1, 0, 0, 0, 880, 874, 1, 0, 0, 0, 880, 876, 1, 0, 0, 0, 880, 878, 1, 0, 0, 0, 881, 884, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 885, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 885, 886, 5, 20, 0, 0, 886, 887, 3, 12, 6, 0, 887, 1308, 1, 0, 0, 0, 888, 890, 5, 96, 0, 0, 889, 891, 5, 298, 0, 0, 890, 889, 1, 0, 0, 0, 890, 891, 1, 0, 0, 0, 891, 892, 1, 0, 0, 0, 892, 894, 5, 125, 0, 0, 893, 895, 3, 150, 75, 0, 894, 893, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 1308, 3, 308, 154, 0, 897, 900, 5, 81, 0, 0, 898, 899, 5, 208, 0, 0, 899, 901, 5, 244, 0, 0, 900, 898, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 903, 1, 0, 0, 0, 902, 904, 5, 336, 0, 0, 903, 902, 1, 0, 0, 0, 903, 904, 1, 0, 0, 0, 904, 905, 1, 0, 0, 0, 905, 907, 3, 308, 154, 0, 906, 908, 3, 270, 135, 0, 907, 906, 1, 0, 0, 0, 907, 908, 1, 0, 0, 0, 908, 910, 1, 0, 0, 0, 909, 911, 3, 282, 141, 0, 910, 909, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 1308, 1, 0, 0, 0, 912, 913, 5, 96, 0, 0, 913, 914, 5, 298, 0, 0, 914, 916, 5, 336, 0, 0, 915, 917, 3, 150, 75, 0, 916, 915, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 921, 1, 0, 0, 0, 918, 922, 3, 68, 34, 0, 919, 922, 3, 72, 36, 0, 920, 922, 3, 308, 154, 0, 921, 918, 1, 0, 0, 0, 921, 919, 1, 0, 0, 0, 921, 920, 1, 0, 0, 0, 922, 1308, 1, 0, 0, 0, 923, 925, 5, 106, 0, 0, 924, 926, 7, 6, 0, 0, 925, 924, 1, 0, 0, 0, 925, 926, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 1308, 3, 4, 2, 0, 928, 929, 5, 273, 0, 0, 929, 932, 5, 294, 0, 0, 930, 931, 7, 3, 0, 0, 931, 933, 3, 62, 31, 0, 932, 930, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 938, 1, 0, 0, 0, 934, 936, 5, 163, 0, 0, 935, 934, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 937, 1, 0, 0, 0, 937, 939, 3, 328, 164, 0, 938, 935, 1, 0, 0, 0, 938, 939, 1, 0, 0, 0, 939, 1308, 1, 0, 0, 0, 940, 941, 5, 273, 0, 0, 941, 942, 5, 293, 0, 0, 942, 945, 5, 108, 0, 0, 943, 944, 7, 3, 0, 0, 944, 946, 3, 62, 31, 0, 945, 943, 1, 0, 0, 0, 945, 946, 1, 0, 0, 0, 946, 947, 1, 0, 0, 0, 947, 948, 5, 163, 0, 0, 948, 950, 3, 328, 164, 0, 949, 951, 3, 18, 9, 0, 950, 949, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 1308, 1, 0, 0, 0, 952, 953, 5, 273, 0, 0, 953, 954, 5, 297, 0, 0, 954, 959, 3, 68, 34, 0, 955, 956, 5, 2, 0, 0, 956, 957, 3, 42, 21, 0, 957, 958, 5, 3, 0, 0, 958, 960, 1, 0, 0, 0, 959, 955, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 1308, 1, 0, 0, 0, 961, 962, 5, 273, 0, 0, 962, 963, 5, 50, 0, 0, 963, 964, 7, 3, 0, 0, 964, 967, 3, 68, 34, 0, 965, 966, 7, 3, 0, 0, 966, 968, 3, 62, 31, 0, 967, 965, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 1308, 1, 0, 0, 0, 969, 970, 5, 273, 0, 0, 970, 973, 5, 339, 0, 0, 971, 972, 7, 3, 0, 0, 972, 974, 3, 62, 31, 0, 973, 971, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 979, 1, 0, 0, 0, 975, 977, 5, 163, 0, 0, 976, 975, 1, 0, 0, 0, 976, 977, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 980, 3, 328, 164, 0, 979, 976, 1, 0, 0, 0, 979, 980, 1, 0, 0, 0, 980, 1308, 1, 0, 0, 0, 981, 982, 5, 273, 0, 0, 982, 983, 5, 219, 0, 0, 983, 985, 3, 68, 34, 0, 984, 986, 3, 18, 9, 0, 985, 984, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 1308, 1, 0, 0, 0, 987, 989, 5, 273, 0, 0, 988, 990, 7, 7, 0, 0, 989, 988, 1, 0, 0, 0, 989, 990, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 994, 5, 126, 0, 0, 992, 993, 7, 3, 0, 0, 993, 995, 3, 62, 31, 0, 994, 992, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 1003, 1, 0, 0, 0, 996, 998, 5, 163, 0, 0, 997, 996, 1, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 1001, 1, 0, 0, 0, 999, 1002, 3, 198, 99, 0, 1000, 1002, 3, 328, 164, 0, 1001, 999, 1, 0, 0, 0, 1001, 1000, 1, 0, 0, 0, 1002, 1004, 1, 0, 0, 0, 1003, 997, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1308, 1, 0, 0, 0, 1005, 1006, 5, 273, 0, 0, 1006, 1007, 5, 59, 0, 0, 1007, 1008, 5, 293, 0, 0, 1008, 1011, 3, 68, 34, 0, 1009, 1010, 5, 20, 0, 0, 1010, 1012, 5, 266, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1308, 1, 0, 0, 0, 1013, 1014, 5, 273, 0, 0, 1014, 1015, 5, 62, 0, 0, 1015, 1308, 3, 22, 11, 0, 1016, 1017, 5, 273, 0, 0, 1017, 1022, 5, 38, 0, 0, 1018, 1020, 5, 163, 0, 0, 1019, 1018, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1023, 3, 328, 164, 0, 1022, 1019, 1, 0, 0, 0, 1022, 1023, 1, 0, 0, 0, 1023, 1308, 1, 0, 0, 0, 1024, 1025, 5, 273, 0, 0, 1025, 1026, 5, 176, 0, 0, 1026, 1029, 5, 339, 0, 0, 1027, 1028, 7, 3, 0, 0, 1028, 1030, 3, 62, 31, 0, 1029, 1027, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1035, 1, 0, 0, 0, 1031, 1033, 5, 163, 0, 0, 1032, 1031, 1, 0, 0, 0, 1032, 1033, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 1036, 3, 328, 164, 0, 1035, 1032, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1308, 1, 0, 0, 0, 1037, 1038, 5, 273, 0, 0, 1038, 1039, 5, 59, 0, 0, 1039, 1040, 5, 176, 0, 0, 1040, 1041, 5, 338, 0, 0, 1041, 1044, 3, 72, 36, 0, 1042, 1043, 5, 20, 0, 0, 1043, 1045, 5, 266, 0, 0, 1044, 1042, 1, 0, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1308, 1, 0, 0, 0, 1046, 1047, 7, 8, 0, 0, 1047, 1049, 5, 125, 0, 0, 1048, 1050, 5, 108, 0, 0, 1049, 1048, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 1308, 3, 24, 12, 0, 1052, 1053, 7, 8, 0, 0, 1053, 1055, 5, 72, 0, 0, 1054, 1056, 5, 108, 0, 0, 1055, 1054, 1, 0, 0, 0, 1055, 1056, 1, 0, 0, 0, 1056, 1057, 1, 0, 0, 0, 1057, 1308, 3, 62, 31, 0, 1058, 1060, 7, 8, 0, 0, 1059, 1061, 5, 293, 0, 0, 1060, 1059, 1, 0, 0, 0, 1060, 1061, 1, 0, 0, 0, 1061, 1063, 1, 0, 0, 0, 1062, 1064, 7, 9, 0, 0, 1063, 1062, 1, 0, 0, 0, 1063, 1064, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1067, 3, 68, 34, 0, 1066, 1068, 3, 18, 9, 0, 1067, 1066, 1, 0, 0, 0, 1067, 1068, 1, 0, 0, 0, 1068, 1070, 1, 0, 0, 0, 1069, 1071, 3, 26, 13, 0, 1070, 1069, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1308, 1, 0, 0, 0, 1072, 1074, 7, 8, 0, 0, 1073, 1075, 5, 232, 0, 0, 1074, 1073, 1, 0, 0, 0, 1074, 1075, 1, 0, 0, 0, 1075, 1076, 1, 0, 0, 0, 1076, 1308, 3, 12, 6, 0, 1077, 1078, 5, 51, 0, 0, 1078, 1084, 5, 203, 0, 0, 1079, 1080, 3, 22, 11, 0, 1080, 1081, 3, 62, 31, 0, 1081, 1085, 1, 0, 0, 0, 1082, 1083, 5, 293, 0, 0, 1083, 1085, 3, 68, 34, 0, 1084, 1079, 1, 0, 0, 0, 1084, 1082, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1089, 5, 153, 0, 0, 1087, 1090, 3, 328, 164, 0, 1088, 1090, 5, 198, 0, 0, 1089, 1087, 1, 0, 0, 0, 1089, 1088, 1, 0, 0, 0, 1090, 1308, 1, 0, 0, 0, 1091, 1092, 5, 240, 0, 0, 1092, 1093, 5, 293, 0, 0, 1093, 1308, 3, 68, 34, 0, 1094, 1095, 5, 240, 0, 0, 1095, 1096, 5, 125, 0, 0, 1096, 1308, 3, 308, 154, 0, 1097, 1105, 5, 240, 0, 0, 1098, 1106, 3, 328, 164, 0, 1099, 1101, 9, 0, 0, 0, 1100, 1099, 1, 0, 0, 0, 1101, 1104, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1102, 1100, 1, 0, 0, 0, 1103, 1106, 1, 0, 0, 0, 1104, 1102, 1, 0, 0, 0, 1105, 1098, 1, 0, 0, 0, 1105, 1102, 1, 0, 0, 0, 1106, 1308, 1, 0, 0, 0, 1107, 1108, 5, 240, 0, 0, 1108, 1109, 5, 176, 0, 0, 1109, 1110, 5, 338, 0, 0, 1110, 1308, 3, 72, 36, 0, 1111, 1113, 5, 33, 0, 0, 1112, 1114, 5, 159, 0, 0, 1113, 1112, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1116, 5, 293, 0, 0, 1116, 1119, 3, 68, 34, 0, 1117, 1118, 5, 207, 0, 0, 1118, 1120, 3, 38, 19, 0, 1119, 1117, 1, 0, 0, 0, 1119, 1120, 1, 0, 0, 0, 1120, 1125, 1, 0, 0, 0, 1121, 1123, 5, 20, 0, 0, 1122, 1121, 1, 0, 0, 0, 1122, 1123, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 1126, 3, 12, 6, 0, 1125, 1122, 1, 0, 0, 0, 1125, 1126, 1, 0, 0, 0, 1126, 1308, 1, 0, 0, 0, 1127, 1128, 5, 322, 0, 0, 1128, 1130, 5, 293, 0, 0, 1129, 1131, 3, 150, 75, 0, 1130, 1129, 1, 0, 0, 0, 1130, 1131, 1, 0, 0, 0, 1131, 1132, 1, 0, 0, 0, 1132, 1308, 3, 68, 34, 0, 1133, 1134, 5, 43, 0, 0, 1134, 1308, 5, 33, 0, 0, 1135, 1136, 5, 168, 0, 0, 1136, 1138, 5, 70, 0, 0, 1137, 1139, 5, 169, 0, 0, 1138, 1137, 1, 0, 0, 0, 1138, 1139, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1141, 5, 145, 0, 0, 1141, 1143, 3, 328, 164, 0, 1142, 1144, 5, 216, 0, 0, 1143, 1142, 1, 0, 0, 0, 1143, 1144, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 1146, 5, 152, 0, 0, 1146, 1147, 5, 293, 0, 0, 1147, 1149, 3, 68, 34, 0, 1148, 1150, 3, 18, 9, 0, 1149, 1148, 1, 0, 0, 0, 1149, 1150, 1, 0, 0, 0, 1150, 1308, 1, 0, 0, 0, 1151, 1152, 5, 317, 0, 0, 1152, 1153, 5, 293, 0, 0, 1153, 1155, 3, 68, 34, 0, 1154, 1156, 3, 18, 9, 0, 1155, 1154, 1, 0, 0, 0, 1155, 1156, 1, 0, 0, 0, 1156, 1308, 1, 0, 0, 0, 1157, 1159, 5, 188, 0, 0, 1158, 1157, 1, 0, 0, 0, 1158, 1159, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1161, 5, 242, 0, 0, 1161, 1162, 5, 293, 0, 0, 1162, 1165, 3, 68, 34, 0, 1163, 1164, 7, 10, 0, 0, 1164, 1166, 5, 219, 0, 0, 1165, 1163, 1, 0, 0, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1308, 1, 0, 0, 0, 1167, 1168, 7, 11, 0, 0, 1168, 1172, 3, 318, 159, 0, 1169, 1171, 9, 0, 0, 0, 1170, 1169, 1, 0, 0, 0, 1171, 1174, 1, 0, 0, 0, 1172, 1173, 1, 0, 0, 0, 1172, 1170, 1, 0, 0, 0, 1173, 1308, 1, 0, 0, 0, 1174, 1172, 1, 0, 0, 0, 1175, 1176, 5, 269, 0, 0, 1176, 1180, 5, 253, 0, 0, 1177, 1179, 9, 0, 0, 0, 1178, 1177, 1, 0, 0, 0, 1179, 1182, 1, 0, 0, 0, 1180, 1181, 1, 0, 0, 0, 1180, 1178, 1, 0, 0, 0, 1181, 1308, 1, 0, 0, 0, 1182, 1180, 1, 0, 0, 0, 1183, 1184, 5, 269, 0, 0, 1184, 1185, 5, 301, 0, 0, 1185, 1186, 5, 350, 0, 0, 1186, 1308, 3, 250, 125, 0, 1187, 1188, 5, 269, 0, 0, 1188, 1189, 5, 301, 0, 0, 1189, 1192, 5, 350, 0, 0, 1190, 1193, 3, 328, 164, 0, 1191, 1193, 5, 169, 0, 0, 1192, 1190, 1, 0, 0, 0, 1192, 1191, 1, 0, 0, 0, 1193, 1308, 1, 0, 0, 0, 1194, 1195, 5, 269, 0, 0, 1195, 1196, 5, 301, 0, 0, 1196, 1200, 5, 350, 0, 0, 1197, 1199, 9, 0, 0, 0, 1198, 1197, 1, 0, 0, 0, 1199, 1202, 1, 0, 0, 0, 1200, 1201, 1, 0, 0, 0, 1200, 1198, 1, 0, 0, 0, 1201, 1308, 1, 0, 0, 0, 1202, 1200, 1, 0, 0, 0, 1203, 1204, 5, 269, 0, 0, 1204, 1205, 7, 12, 0, 0, 1205, 1308, 3, 108, 54, 0, 1206, 1207, 5, 269, 0, 0, 1207, 1208, 7, 12, 0, 0, 1208, 1209, 5, 2, 0, 0, 1209, 1210, 3, 196, 98, 0, 1210, 1211, 5, 3, 0, 0, 1211, 1212, 5, 352, 0, 0, 1212, 1213, 5, 2, 0, 0, 1213, 1214, 3, 12, 6, 0, 1214, 1215, 5, 3, 0, 0, 1215, 1308, 1, 0, 0, 0, 1216, 1217, 5, 269, 0, 0, 1217, 1218, 3, 322, 161, 0, 1218, 1219, 5, 352, 0, 0, 1219, 1220, 5, 389, 0, 0, 1220, 1308, 1, 0, 0, 0, 1221, 1222, 5, 269, 0, 0, 1222, 1230, 3, 322, 161, 0, 1223, 1227, 5, 352, 0, 0, 1224, 1226, 9, 0, 0, 0, 1225, 1224, 1, 0, 0, 0, 1226, 1229, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1227, 1225, 1, 0, 0, 0, 1228, 1231, 1, 0, 0, 0, 1229, 1227, 1, 0, 0, 0, 1230, 1223, 1, 0, 0, 0, 1230, 1231, 1, 0, 0, 0, 1231, 1308, 1, 0, 0, 0, 1232, 1236, 5, 269, 0, 0, 1233, 1235, 9, 0, 0, 0, 1234, 1233, 1, 0, 0, 0, 1235, 1238, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1236, 1234, 1, 0, 0, 0, 1237, 1239, 1, 0, 0, 0, 1238, 1236, 1, 0, 0, 0, 1239, 1240, 5, 352, 0, 0, 1240, 1308, 5, 389, 0, 0, 1241, 1245, 5, 269, 0, 0, 1242, 1244, 9, 0, 0, 0, 1243, 1242, 1, 0, 0, 0, 1244, 1247, 1, 0, 0, 0, 1245, 1246, 1, 0, 0, 0, 1245, 1243, 1, 0, 0, 0, 1246, 1308, 1, 0, 0, 0, 1247, 1245, 1, 0, 0, 0, 1248, 1249, 5, 245, 0, 0, 1249, 1308, 3, 322, 161, 0, 1250, 1254, 5, 245, 0, 0, 1251, 1253, 9, 0, 0, 0, 1252, 1251, 1, 0, 0, 0, 1253, 1256, 1, 0, 0, 0, 1254, 1255, 1, 0, 0, 0, 1254, 1252, 1, 0, 0, 0, 1255, 1308, 1, 0, 0, 0, 1256, 1254, 1, 0, 0, 0, 1257, 1258, 5, 59, 0, 0, 1258, 1260, 5, 142, 0, 0, 1259, 1261, 3, 148, 74, 0, 1260, 1259, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1263, 3, 318, 159, 0, 1263, 1265, 5, 203, 0, 0, 1264, 1266, 5, 293, 0, 0, 1265, 1264, 1, 0, 0, 0, 1265, 1266, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, 1270, 3, 68, 34, 0, 1268, 1269, 5, 332, 0, 0, 1269, 1271, 3, 318, 159, 0, 1270, 1268, 1, 0, 0, 0, 1270, 1271, 1, 0, 0, 0, 1271, 1272, 1, 0, 0, 0, 1272, 1273, 5, 2, 0, 0, 1273, 1274, 3, 200, 100, 0, 1274, 1277, 5, 3, 0, 0, 1275, 1276, 5, 207, 0, 0, 1276, 1278, 3, 38, 19, 0, 1277, 1275, 1, 0, 0, 0, 1277, 1278, 1, 0, 0, 0, 1278, 1308, 1, 0, 0, 0, 1279, 1280, 5, 96, 0, 0, 1280, 1282, 5, 142, 0, 0, 1281, 1283, 3, 150, 75, 0, 1282, 1281, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 1, 0, 0, 0, 1284, 1285, 3, 318, 159, 0, 1285, 1287, 5, 203, 0, 0, 1286, 1288, 5, 293, 0, 0, 1287, 1286, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1290, 3, 68, 34, 0, 1290, 1308, 1, 0, 0, 0, 1291, 1292, 5, 205, 0, 0, 1292, 1294, 3, 68, 34, 0, 1293, 1295, 3, 112, 56, 0, 1294, 1293, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1296, 1, 0, 0, 0, 1296, 1297, 5, 351, 0, 0, 1297, 1298, 5, 31, 0, 0, 1298, 1299, 3, 76, 38, 0, 1299, 1308, 1, 0, 0, 0, 1300, 1304, 3, 6, 3, 0, 1301, 1303, 9, 0, 0, 0, 1302, 1301, 1, 0, 0, 0, 1303, 1306, 1, 0, 0, 0, 1304, 1305, 1, 0, 0, 0, 1304, 1302, 1, 0, 0, 0, 1305, 1308, 1, 0, 0, 0, 1306, 1304, 1, 0, 0, 0, 1307, 348, 1, 0, 0, 0, 1307, 350, 1, 0, 0, 0, 1307, 353, 1, 0, 0, 0, 1307, 358, 1, 0, 0, 0, 1307, 364, 1, 0, 0, 0, 1307, 382, 1, 0, 0, 0, 1307, 389, 1, 0, 0, 0, 1307, 396, 1, 0, 0, 0, 1307, 405, 1, 0, 0, 0, 1307, 417, 1, 0, 0, 0, 1307, 445, 1, 0, 0, 0, 1307, 468, 1, 0, 0, 0, 1307, 489, 1, 0, 0, 0, 1307, 506, 1, 0, 0, 0, 1307, 517, 1, 0, 0, 0, 1307, 524, 1, 0, 0, 0, 1307, 533, 1, 0, 0, 0, 1307, 542, 1, 0, 0, 0, 1307, 552, 1, 0, 0, 0, 1307, 564, 1, 0, 0, 0, 1307, 575, 1, 0, 0, 0, 1307, 586, 1, 0, 0, 0, 1307, 600, 1, 0, 0, 0, 1307, 611, 1, 0, 0, 0, 1307, 626, 1, 0, 0, 0, 1307, 638, 1, 0, 0, 0, 1307, 652, 1, 0, 0, 0, 1307, 662, 1, 0, 0, 0, 1307, 678, 1, 0, 0, 0, 1307, 686, 1, 0, 0, 0, 1307, 708, 1, 0, 0, 0, 1307, 718, 1, 0, 0, 0, 1307, 724, 1, 0, 0, 0, 1307, 731, 1, 0, 0, 0, 1307, 739, 1, 0, 0, 0, 1307, 748, 1, 0, 0, 0, 1307, 754, 1, 0, 0, 0, 1307, 761, 1, 0, 0, 0, 1307, 795, 1, 0, 0, 0, 1307, 817, 1, 0, 0, 0, 1307, 825, 1, 0, 0, 0, 1307, 855, 1, 0, 0, 0, 1307, 888, 1, 0, 0, 0, 1307, 897, 1, 0, 0, 0, 1307, 912, 1, 0, 0, 0, 1307, 923, 1, 0, 0, 0, 1307, 928, 1, 0, 0, 0, 1307, 940, 1, 0, 0, 0, 1307, 952, 1, 0, 0, 0, 1307, 961, 1, 0, 0, 0, 1307, 969, 1, 0, 0, 0, 1307, 981, 1, 0, 0, 0, 1307, 987, 1, 0, 0, 0, 1307, 1005, 1, 0, 0, 0, 1307, 1013, 1, 0, 0, 0, 1307, 1016, 1, 0, 0, 0, 1307, 1024, 1, 0, 0, 0, 1307, 1037, 1, 0, 0, 0, 1307, 1046, 1, 0, 0, 0, 1307, 1052, 1, 0, 0, 0, 1307, 1058, 1, 0, 0, 0, 1307, 1072, 1, 0, 0, 0, 1307, 1077, 1, 0, 0, 0, 1307, 1091, 1, 0, 0, 0, 1307, 1094, 1, 0, 0, 0, 1307, 1097, 1, 0, 0, 0, 1307, 1107, 1, 0, 0, 0, 1307, 1111, 1, 0, 0, 0, 1307, 1127, 1, 0, 0, 0, 1307, 1133, 1, 0, 0, 0, 1307, 1135, 1, 0, 0, 0, 1307, 1151, 1, 0, 0, 0, 1307, 1158, 1, 0, 0, 0, 1307, 1167, 1, 0, 0, 0, 1307, 1175, 1, 0, 0, 0, 1307, 1183, 1, 0, 0, 0, 1307, 1187, 1, 0, 0, 0, 1307, 1194, 1, 0, 0, 0, 1307, 1203, 1, 0, 0, 0, 1307, 1206, 1, 0, 0, 0, 1307, 1216, 1, 0, 0, 0, 1307, 1221, 1, 0, 0, 0, 1307, 1232, 1, 0, 0, 0, 1307, 1241, 1, 0, 0, 0, 1307, 1248, 1, 0, 0, 0, 1307, 1250, 1, 0, 0, 0, 1307, 1257, 1, 0, 0, 0, 1307, 1279, 1, 0, 0, 0, 1307, 1291, 1, 0, 0, 0, 1307, 1300, 1, 0, 0, 0, 1308, 5, 1, 0, 0, 0, 1309, 1310, 7, 13, 0, 0, 1310, 1403, 5, 253, 0, 0, 1311, 1313, 7, 14, 0, 0, 1312, 1314, 5, 253, 0, 0, 1313, 1312, 1, 0, 0, 0, 1313, 1314, 1, 0, 0, 0, 1314, 1403, 1, 0, 0, 0, 1315, 1316, 5, 273, 0, 0, 1316, 1403, 7, 15, 0, 0, 1317, 1318, 5, 273, 0, 0, 1318, 1320, 5, 253, 0, 0, 1319, 1321, 5, 129, 0, 0, 1320, 1319, 1, 0, 0, 0, 1320, 1321, 1, 0, 0, 0, 1321, 1403, 1, 0, 0, 0, 1322, 1324, 5, 273, 0, 0, 1323, 1325, 5, 62, 0, 0, 1324, 1323, 1, 0, 0, 0, 1324, 1325, 1, 0, 0, 0, 1325, 1326, 1, 0, 0, 0, 1326, 1403, 5, 254, 0, 0, 1327, 1328, 5, 273, 0, 0, 1328, 1329, 5, 59, 0, 0, 1329, 1403, 5, 293, 0, 0, 1330, 1331, 7, 16, 0, 0, 1331, 1403, 5, 142, 0, 0, 1332, 1333, 7, 17, 0, 0, 1333, 1403, 5, 293, 0, 0, 1334, 1335, 7, 18, 0, 0, 1335, 1403, 5, 72, 0, 0, 1336, 1337, 7, 13, 0, 0, 1337, 1338, 5, 298, 0, 0, 1338, 1403, 5, 175, 0, 0, 1339, 1340, 5, 11, 0, 0, 1340, 1341, 5, 293, 0, 0, 1341, 1342, 3, 68, 34, 0, 1342, 1343, 5, 197, 0, 0, 1343, 1344, 7, 19, 0, 0, 1344, 1403, 1, 0, 0, 0, 1345, 1346, 5, 11, 0, 0, 1346, 1347, 5, 293, 0, 0, 1347, 1348, 3, 68, 34, 0, 1348, 1349, 7, 20, 0, 0, 1349, 1350, 5, 31, 0, 0, 1350, 1403, 1, 0, 0, 0, 1351, 1352, 5, 11, 0, 0, 1352, 1353, 5, 293, 0, 0, 1353, 1354, 3, 68, 34, 0, 1354, 1355, 5, 275, 0, 0, 1355, 1356, 5, 31, 0, 0, 1356, 1403, 1, 0, 0, 0, 1357, 1358, 5, 11, 0, 0, 1358, 1359, 5, 293, 0, 0, 1359, 1360, 3, 68, 34, 0, 1360, 1361, 5, 197, 0, 0, 1361, 1362, 5, 283, 0, 0, 1362, 1363, 5, 20, 0, 0, 1363, 1364, 5, 89, 0, 0, 1364, 1403, 1, 0, 0, 0, 1365, 1366, 5, 11, 0, 0, 1366, 1367, 5, 293, 0, 0, 1367, 1368, 3, 68, 34, 0, 1368, 1369, 5, 269, 0, 0, 1369, 1370, 5, 275, 0, 0, 1370, 1371, 5, 170, 0, 0, 1371, 1403, 1, 0, 0, 0, 1372, 1373, 5, 11, 0, 0, 1373, 1374, 5, 293, 0, 0, 1374, 1375, 3, 68, 34, 0, 1375, 1376, 7, 21, 0, 0, 1376, 1377, 5, 217, 0, 0, 1377, 1403, 1, 0, 0, 0, 1378, 1379, 5, 11, 0, 0, 1379, 1380, 5, 293, 0, 0, 1380, 1381, 3, 68, 34, 0, 1381, 1382, 5, 310, 0, 0, 1382, 1403, 1, 0, 0, 0, 1383, 1384, 5, 11, 0, 0, 1384, 1385, 5, 293, 0, 0, 1385, 1387, 3, 68, 34, 0, 1386, 1388, 3, 18, 9, 0, 1387, 1386, 1, 0, 0, 0, 1387, 1388, 1, 0, 0, 0, 1388, 1395, 1, 0, 0, 0, 1389, 1396, 5, 53, 0, 0, 1390, 1396, 5, 56, 0, 0, 1391, 1392, 5, 269, 0, 0, 1392, 1396, 5, 115, 0, 0, 1393, 1394, 5, 244, 0, 0, 1394, 1396, 5, 50, 0, 0, 1395, 1389, 1, 0, 0, 0, 1395, 1390, 1, 0, 0, 0, 1395, 1391, 1, 0, 0, 0, 1395, 1393, 1, 0, 0, 0, 1396, 1403, 1, 0, 0, 0, 1397, 1398, 5, 281, 0, 0, 1398, 1403, 5, 312, 0, 0, 1399, 1403, 5, 52, 0, 0, 1400, 1403, 5, 255, 0, 0, 1401, 1403, 5, 88, 0, 0, 1402, 1309, 1, 0, 0, 0, 1402, 1311, 1, 0, 0, 0, 1402, 1315, 1, 0, 0, 0, 1402, 1317, 1, 0, 0, 0, 1402, 1322, 1, 0, 0, 0, 1402, 1327, 1, 0, 0, 0, 1402, 1330, 1, 0, 0, 0, 1402, 1332, 1, 0, 0, 0, 1402, 1334, 1, 0, 0, 0, 1402, 1336, 1, 0, 0, 0, 1402, 1339, 1, 0, 0, 0, 1402, 1345, 1, 0, 0, 0, 1402, 1351, 1, 0, 0, 0, 1402, 1357, 1, 0, 0, 0, 1402, 1365, 1, 0, 0, 0, 1402, 1372, 1, 0, 0, 0, 1402, 1378, 1, 0, 0, 0, 1402, 1383, 1, 0, 0, 0, 1402, 1397, 1, 0, 0, 0, 1402, 1399, 1, 0, 0, 0, 1402, 1400, 1, 0, 0, 0, 1402, 1401, 1, 0, 0, 0, 1403, 7, 1, 0, 0, 0, 1404, 1405, 5, 45, 0, 0, 1405, 1406, 5, 31, 0, 0, 1406, 1410, 3, 168, 84, 0, 1407, 1408, 5, 279, 0, 0, 1408, 1409, 5, 31, 0, 0, 1409, 1411, 3, 172, 86, 0, 1410, 1407, 1, 0, 0, 0, 1410, 1411, 1, 0, 0, 0, 1411, 1412, 1, 0, 0, 0, 1412, 1413, 5, 152, 0, 0, 1413, 1414, 5, 382, 0, 0, 1414, 1415, 5, 30, 0, 0, 1415, 9, 1, 0, 0, 0, 1416, 1417, 5, 275, 0, 0, 1417, 1418, 5, 31, 0, 0, 1418, 1419, 3, 168, 84, 0, 1419, 1422, 5, 203, 0, 0, 1420, 1423, 3, 50, 25, 0, 1421, 1423, 3, 52, 26, 0, 1422, 1420, 1, 0, 0, 0, 1422, 1421, 1, 0, 0, 0, 1423, 1427, 1, 0, 0, 0, 1424, 1425, 5, 283, 0, 0, 1425, 1426, 5, 20, 0, 0, 1426, 1428, 5, 89, 0, 0, 1427, 1424, 1, 0, 0, 0, 1427, 1428, 1, 0, 0, 0, 1428, 11, 1, 0, 0, 0, 1429, 1431, 3, 28, 14, 0, 1430, 1429, 1, 0, 0, 0, 1430, 1431, 1, 0, 0, 0, 1431, 1432, 1, 0, 0, 0, 1432, 1433, 3, 84, 42, 0, 1433, 1434, 3, 82, 41, 0, 1434, 13, 1, 0, 0, 0, 1435, 1436, 5, 147, 0, 0, 1436, 1438, 5, 216, 0, 0, 1437, 1439, 5, 293, 0, 0, 1438, 1437, 1, 0, 0, 0, 1438, 1439, 1, 0, 0, 0, 1439, 1440, 1, 0, 0, 0, 1440, 1445, 3, 68, 34, 0, 1441, 1443, 3, 18, 9, 0, 1442, 1444, 3, 148, 74, 0, 1443, 1442, 1, 0, 0, 0, 1443, 1444, 1, 0, 0, 0, 1444, 1446, 1, 0, 0, 0, 1445, 1441, 1, 0, 0, 0, 1445, 1446, 1, 0, 0, 0, 1446, 1453, 1, 0, 0, 0, 1447, 1448, 5, 31, 0, 0, 1448, 1454, 5, 189, 0, 0, 1449, 1450, 5, 2, 0, 0, 1450, 1451, 3, 76, 38, 0, 1451, 1452, 5, 3, 0, 0, 1452, 1454, 1, 0, 0, 0, 1453, 1447, 1, 0, 0, 0, 1453, 1449, 1, 0, 0, 0, 1453, 1454, 1, 0, 0, 0, 1454, 1512, 1, 0, 0, 0, 1455, 1456, 5, 147, 0, 0, 1456, 1458, 5, 152, 0, 0, 1457, 1459, 5, 293, 0, 0, 1458, 1457, 1, 0, 0, 0, 1458, 1459, 1, 0, 0, 0, 1459, 1460, 1, 0, 0, 0, 1460, 1462, 3, 68, 34, 0, 1461, 1463, 3, 18, 9, 0, 1462, 1461, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1465, 1, 0, 0, 0, 1464, 1466, 3, 148, 74, 0, 1465, 1464, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1473, 1, 0, 0, 0, 1467, 1468, 5, 31, 0, 0, 1468, 1474, 5, 189, 0, 0, 1469, 1470, 5, 2, 0, 0, 1470, 1471, 3, 76, 38, 0, 1471, 1472, 5, 3, 0, 0, 1472, 1474, 1, 0, 0, 0, 1473, 1467, 1, 0, 0, 0, 1473, 1469, 1, 0, 0, 0, 1473, 1474, 1, 0, 0, 0, 1474, 1512, 1, 0, 0, 0, 1475, 1476, 5, 147, 0, 0, 1476, 1478, 5, 152, 0, 0, 1477, 1479, 5, 293, 0, 0, 1478, 1477, 1, 0, 0, 0, 1478, 1479, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1481, 3, 68, 34, 0, 1481, 1482, 5, 244, 0, 0, 1482, 1483, 3, 112, 56, 0, 1483, 1512, 1, 0, 0, 0, 1484, 1485, 5, 147, 0, 0, 1485, 1487, 5, 216, 0, 0, 1486, 1488, 5, 169, 0, 0, 1487, 1486, 1, 0, 0, 0, 1487, 1488, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 5, 90, 0, 0, 1490, 1492, 3, 328, 164, 0, 1491, 1493, 3, 194, 97, 0, 1492, 1491, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1495, 1, 0, 0, 0, 1494, 1496, 3, 54, 27, 0, 1495, 1494, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 1512, 1, 0, 0, 0, 1497, 1498, 5, 147, 0, 0, 1498, 1500, 5, 216, 0, 0, 1499, 1501, 5, 169, 0, 0, 1500, 1499, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1502, 1, 0, 0, 0, 1502, 1504, 5, 90, 0, 0, 1503, 1505, 3, 328, 164, 0, 1504, 1503, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 1506, 1, 0, 0, 0, 1506, 1509, 3, 32, 16, 0, 1507, 1508, 5, 207, 0, 0, 1508, 1510, 3, 38, 19, 0, 1509, 1507, 1, 0, 0, 0, 1509, 1510, 1, 0, 0, 0, 1510, 1512, 1, 0, 0, 0, 1511, 1435, 1, 0, 0, 0, 1511, 1455, 1, 0, 0, 0, 1511, 1475, 1, 0, 0, 0, 1511, 1484, 1, 0, 0, 0, 1511, 1497, 1, 0, 0, 0, 1512, 15, 1, 0, 0, 0, 1513, 1516, 3, 18, 9, 0, 1514, 1515, 5, 170, 0, 0, 1515, 1517, 3, 328, 164, 0, 1516, 1514, 1, 0, 0, 0, 1516, 1517, 1, 0, 0, 0, 1517, 17, 1, 0, 0, 0, 1518, 1519, 5, 217, 0, 0, 1519, 1520, 5, 2, 0, 0, 1520, 1525, 3, 20, 10, 0, 1521, 1522, 5, 4, 0, 0, 1522, 1524, 3, 20, 10, 0, 1523, 1521, 1, 0, 0, 0, 1524, 1527, 1, 0, 0, 0, 1525, 1523, 1, 0, 0, 0, 1525, 1526, 1, 0, 0, 0, 1526, 1528, 1, 0, 0, 0, 1527, 1525, 1, 0, 0, 0, 1528, 1529, 5, 3, 0, 0, 1529, 19, 1, 0, 0, 0, 1530, 1533, 3, 318, 159, 0, 1531, 1532, 5, 352, 0, 0, 1532, 1534, 3, 240, 120, 0, 1533, 1531, 1, 0, 0, 0, 1533, 1534, 1, 0, 0, 0, 1534, 1540, 1, 0, 0, 0, 1535, 1536, 3, 318, 159, 0, 1536, 1537, 5, 352, 0, 0, 1537, 1538, 5, 82, 0, 0, 1538, 1540, 1, 0, 0, 0, 1539, 1530, 1, 0, 0, 0, 1539, 1535, 1, 0, 0, 0, 1540, 21, 1, 0, 0, 0, 1541, 1542, 7, 22, 0, 0, 1542, 23, 1, 0, 0, 0, 1543, 1549, 3, 80, 40, 0, 1544, 1549, 3, 328, 164, 0, 1545, 1549, 3, 242, 121, 0, 1546, 1549, 3, 244, 122, 0, 1547, 1549, 3, 246, 123, 0, 1548, 1543, 1, 0, 0, 0, 1548, 1544, 1, 0, 0, 0, 1548, 1545, 1, 0, 0, 0, 1548, 1546, 1, 0, 0, 0, 1548, 1547, 1, 0, 0, 0, 1549, 25, 1, 0, 0, 0, 1550, 1555, 3, 318, 159, 0, 1551, 1552, 5, 5, 0, 0, 1552, 1554, 3, 318, 159, 0, 1553, 1551, 1, 0, 0, 0, 1554, 1557, 1, 0, 0, 0, 1555, 1553, 1, 0, 0, 0, 1555, 1556, 1, 0, 0, 0, 1556, 27, 1, 0, 0, 0, 1557, 1555, 1, 0, 0, 0, 1558, 1559, 5, 346, 0, 0, 1559, 1564, 3, 30, 15, 0, 1560, 1561, 5, 4, 0, 0, 1561, 1563, 3, 30, 15, 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, 29, 1, 0, 0, 0, 1566, 1564, 1, 0, 0, 0, 1567, 1569, 3, 314, 157, 0, 1568, 1570, 3, 168, 84, 0, 1569, 1568, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1572, 1, 0, 0, 0, 1571, 1573, 5, 20, 0, 0, 1572, 1571, 1, 0, 0, 0, 1572, 1573, 1, 0, 0, 0, 1573, 1574, 1, 0, 0, 0, 1574, 1575, 5, 2, 0, 0, 1575, 1576, 3, 12, 6, 0, 1576, 1577, 5, 3, 0, 0, 1577, 31, 1, 0, 0, 0, 1578, 1579, 5, 332, 0, 0, 1579, 1580, 3, 198, 99, 0, 1580, 33, 1, 0, 0, 0, 1581, 1582, 5, 207, 0, 0, 1582, 1598, 3, 46, 23, 0, 1583, 1584, 5, 218, 0, 0, 1584, 1585, 5, 31, 0, 0, 1585, 1598, 3, 212, 106, 0, 1586, 1598, 3, 10, 5, 0, 1587, 1598, 3, 8, 4, 0, 1588, 1598, 3, 194, 97, 0, 1589, 1598, 3, 54, 27, 0, 1590, 1591, 5, 170, 0, 0, 1591, 1598, 3, 328, 164, 0, 1592, 1593, 5, 51, 0, 0, 1593, 1598, 3, 328, 164, 0, 1594, 1595, 5, 297, 0, 0, 1595, 1598, 3, 38, 19, 0, 1596, 1598, 3, 36, 18, 0, 1597, 1581, 1, 0, 0, 0, 1597, 1583, 1, 0, 0, 0, 1597, 1586, 1, 0, 0, 0, 1597, 1587, 1, 0, 0, 0, 1597, 1588, 1, 0, 0, 0, 1597, 1589, 1, 0, 0, 0, 1597, 1590, 1, 0, 0, 0, 1597, 1592, 1, 0, 0, 0, 1597, 1594, 1, 0, 0, 0, 1597, 1596, 1, 0, 0, 0, 1598, 1601, 1, 0, 0, 0, 1599, 1597, 1, 0, 0, 0, 1599, 1600, 1, 0, 0, 0, 1600, 35, 1, 0, 0, 0, 1601, 1599, 1, 0, 0, 0, 1602, 1603, 5, 162, 0, 0, 1603, 1604, 5, 382, 0, 0, 1604, 37, 1, 0, 0, 0, 1605, 1606, 5, 2, 0, 0, 1606, 1611, 3, 40, 20, 0, 1607, 1608, 5, 4, 0, 0, 1608, 1610, 3, 40, 20, 0, 1609, 1607, 1, 0, 0, 0, 1610, 1613, 1, 0, 0, 0, 1611, 1609, 1, 0, 0, 0, 1611, 1612, 1, 0, 0, 0, 1612, 1614, 1, 0, 0, 0, 1613, 1611, 1, 0, 0, 0, 1614, 1615, 5, 3, 0, 0, 1615, 39, 1, 0, 0, 0, 1616, 1621, 3, 42, 21, 0, 1617, 1619, 5, 352, 0, 0, 1618, 1617, 1, 0, 0, 0, 1618, 1619, 1, 0, 0, 0, 1619, 1620, 1, 0, 0, 0, 1620, 1622, 3, 44, 22, 0, 1621, 1618, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1622, 41, 1, 0, 0, 0, 1623, 1628, 3, 318, 159, 0, 1624, 1625, 5, 5, 0, 0, 1625, 1627, 3, 318, 159, 0, 1626, 1624, 1, 0, 0, 0, 1627, 1630, 1, 0, 0, 0, 1628, 1626, 1, 0, 0, 0, 1628, 1629, 1, 0, 0, 0, 1629, 1633, 1, 0, 0, 0, 1630, 1628, 1, 0, 0, 0, 1631, 1633, 3, 328, 164, 0, 1632, 1623, 1, 0, 0, 0, 1632, 1631, 1, 0, 0, 0, 1633, 43, 1, 0, 0, 0, 1634, 1639, 5, 382, 0, 0, 1635, 1639, 5, 384, 0, 0, 1636, 1639, 3, 248, 124, 0, 1637, 1639, 3, 328, 164, 0, 1638, 1634, 1, 0, 0, 0, 1638, 1635, 1, 0, 0, 0, 1638, 1636, 1, 0, 0, 0, 1638, 1637, 1, 0, 0, 0, 1639, 45, 1, 0, 0, 0, 1640, 1641, 5, 2, 0, 0, 1641, 1646, 3, 48, 24, 0, 1642, 1643, 5, 4, 0, 0, 1643, 1645, 3, 48, 24, 0, 1644, 1642, 1, 0, 0, 0, 1645, 1648, 1, 0, 0, 0, 1646, 1644, 1, 0, 0, 0, 1646, 1647, 1, 0, 0, 0, 1647, 1649, 1, 0, 0, 0, 1648, 1646, 1, 0, 0, 0, 1649, 1650, 5, 3, 0, 0, 1650, 47, 1, 0, 0, 0, 1651, 1656, 3, 42, 21, 0, 1652, 1654, 5, 352, 0, 0, 1653, 1652, 1, 0, 0, 0, 1653, 1654, 1, 0, 0, 0, 1654, 1655, 1, 0, 0, 0, 1655, 1657, 3, 220, 110, 0, 1656, 1653, 1, 0, 0, 0, 1656, 1657, 1, 0, 0, 0, 1657, 49, 1, 0, 0, 0, 1658, 1659, 5, 2, 0, 0, 1659, 1664, 3, 240, 120, 0, 1660, 1661, 5, 4, 0, 0, 1661, 1663, 3, 240, 120, 0, 1662, 1660, 1, 0, 0, 0, 1663, 1666, 1, 0, 0, 0, 1664, 1662, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1667, 1, 0, 0, 0, 1666, 1664, 1, 0, 0, 0, 1667, 1668, 5, 3, 0, 0, 1668, 51, 1, 0, 0, 0, 1669, 1670, 5, 2, 0, 0, 1670, 1675, 3, 50, 25, 0, 1671, 1672, 5, 4, 0, 0, 1672, 1674, 3, 50, 25, 0, 1673, 1671, 1, 0, 0, 0, 1674, 1677, 1, 0, 0, 0, 1675, 1673, 1, 0, 0, 0, 1675, 1676, 1, 0, 0, 0, 1676, 1678, 1, 0, 0, 0, 1677, 1675, 1, 0, 0, 0, 1678, 1679, 5, 3, 0, 0, 1679, 53, 1, 0, 0, 0, 1680, 1681, 5, 283, 0, 0, 1681, 1682, 5, 20, 0, 0, 1682, 1687, 3, 56, 28, 0, 1683, 1684, 5, 283, 0, 0, 1684, 1685, 5, 31, 0, 0, 1685, 1687, 3, 58, 29, 0, 1686, 1680, 1, 0, 0, 0, 1686, 1683, 1, 0, 0, 0, 1687, 55, 1, 0, 0, 0, 1688, 1689, 5, 146, 0, 0, 1689, 1690, 3, 328, 164, 0, 1690, 1691, 5, 212, 0, 0, 1691, 1692, 3, 328, 164, 0, 1692, 1695, 1, 0, 0, 0, 1693, 1695, 3, 318, 159, 0, 1694, 1688, 1, 0, 0, 0, 1694, 1693, 1, 0, 0, 0, 1695, 57, 1, 0, 0, 0, 1696, 1700, 3, 328, 164, 0, 1697, 1698, 5, 346, 0, 0, 1698, 1699, 5, 267, 0, 0, 1699, 1701, 3, 38, 19, 0, 1700, 1697, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 59, 1, 0, 0, 0, 1702, 1703, 3, 14, 7, 0, 1703, 1704, 3, 12, 6, 0, 1704, 1761, 1, 0, 0, 0, 1705, 1709, 3, 120, 60, 0, 1706, 1707, 3, 14, 7, 0, 1707, 1708, 3, 90, 45, 0, 1708, 1710, 1, 0, 0, 0, 1709, 1706, 1, 0, 0, 0, 1710, 1711, 1, 0, 0, 0, 1711, 1709, 1, 0, 0, 0, 1711, 1712, 1, 0, 0, 0, 1712, 1761, 1, 0, 0, 0, 1713, 1714, 5, 84, 0, 0, 1714, 1715, 5, 123, 0, 0, 1715, 1716, 3, 68, 34, 0, 1716, 1718, 3, 192, 96, 0, 1717, 1719, 3, 112, 56, 0, 1718, 1717, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 1761, 1, 0, 0, 0, 1720, 1721, 5, 329, 0, 0, 1721, 1722, 3, 68, 34, 0, 1722, 1723, 3, 192, 96, 0, 1723, 1725, 3, 98, 49, 0, 1724, 1726, 3, 112, 56, 0, 1725, 1724, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 1761, 1, 0, 0, 0, 1727, 1728, 5, 179, 0, 0, 1728, 1729, 5, 152, 0, 0, 1729, 1730, 3, 68, 34, 0, 1730, 1731, 3, 192, 96, 0, 1731, 1737, 5, 332, 0, 0, 1732, 1738, 3, 80, 40, 0, 1733, 1734, 5, 2, 0, 0, 1734, 1735, 3, 12, 6, 0, 1735, 1736, 5, 3, 0, 0, 1736, 1738, 1, 0, 0, 0, 1737, 1732, 1, 0, 0, 0, 1737, 1733, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 1740, 3, 192, 96, 0, 1740, 1741, 5, 203, 0, 0, 1741, 1745, 3, 228, 114, 0, 1742, 1744, 3, 100, 50, 0, 1743, 1742, 1, 0, 0, 0, 1744, 1747, 1, 0, 0, 0, 1745, 1743, 1, 0, 0, 0, 1745, 1746, 1, 0, 0, 0, 1746, 1751, 1, 0, 0, 0, 1747, 1745, 1, 0, 0, 0, 1748, 1750, 3, 102, 51, 0, 1749, 1748, 1, 0, 0, 0, 1750, 1753, 1, 0, 0, 0, 1751, 1749, 1, 0, 0, 0, 1751, 1752, 1, 0, 0, 0, 1752, 1757, 1, 0, 0, 0, 1753, 1751, 1, 0, 0, 0, 1754, 1756, 3, 104, 52, 0, 1755, 1754, 1, 0, 0, 0, 1756, 1759, 1, 0, 0, 0, 1757, 1755, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1761, 1, 0, 0, 0, 1759, 1757, 1, 0, 0, 0, 1760, 1702, 1, 0, 0, 0, 1760, 1705, 1, 0, 0, 0, 1760, 1713, 1, 0, 0, 0, 1760, 1720, 1, 0, 0, 0, 1760, 1727, 1, 0, 0, 0, 1761, 61, 1, 0, 0, 0, 1762, 1763, 3, 80, 40, 0, 1763, 63, 1, 0, 0, 0, 1764, 1765, 3, 80, 40, 0, 1765, 65, 1, 0, 0, 0, 1766, 1767, 3, 204, 102, 0, 1767, 67, 1, 0, 0, 0, 1768, 1769, 3, 204, 102, 0, 1769, 69, 1, 0, 0, 0, 1770, 1771, 3, 206, 103, 0, 1771, 71, 1, 0, 0, 0, 1772, 1773, 3, 206, 103, 0, 1773, 73, 1, 0, 0, 0, 1774, 1777, 3, 198, 99, 0, 1775, 1777, 4, 37, 0, 0, 1776, 1774, 1, 0, 0, 0, 1776, 1775, 1, 0, 0, 0, 1777, 75, 1, 0, 0, 0, 1778, 1783, 3, 74, 37, 0, 1779, 1780, 5, 4, 0, 0, 1780, 1782, 3, 74, 37, 0, 1781, 1779, 1, 0, 0, 0, 1782, 1785, 1, 0, 0, 0, 1783, 1781, 1, 0, 0, 0, 1783, 1784, 1, 0, 0, 0, 1784, 77, 1, 0, 0, 0, 1785, 1783, 1, 0, 0, 0, 1786, 1787, 3, 314, 157, 0, 1787, 79, 1, 0, 0, 0, 1788, 1789, 5, 136, 0, 0, 1789, 1790, 5, 2, 0, 0, 1790, 1791, 3, 220, 110, 0, 1791, 1792, 5, 3, 0, 0, 1792, 1795, 1, 0, 0, 0, 1793, 1795, 3, 198, 99, 0, 1794, 1788, 1, 0, 0, 0, 1794, 1793, 1, 0, 0, 0, 1795, 81, 1, 0, 0, 0, 1796, 1797, 5, 209, 0, 0, 1797, 1798, 5, 31, 0, 0, 1798, 1803, 3, 88, 44, 0, 1799, 1800, 5, 4, 0, 0, 1800, 1802, 3, 88, 44, 0, 1801, 1799, 1, 0, 0, 0, 1802, 1805, 1, 0, 0, 0, 1803, 1801, 1, 0, 0, 0, 1803, 1804, 1, 0, 0, 0, 1804, 1807, 1, 0, 0, 0, 1805, 1803, 1, 0, 0, 0, 1806, 1796, 1, 0, 0, 0, 1806, 1807, 1, 0, 0, 0, 1807, 1818, 1, 0, 0, 0, 1808, 1809, 5, 44, 0, 0, 1809, 1810, 5, 31, 0, 0, 1810, 1815, 3, 220, 110, 0, 1811, 1812, 5, 4, 0, 0, 1812, 1814, 3, 220, 110, 0, 1813, 1811, 1, 0, 0, 0, 1814, 1817, 1, 0, 0, 0, 1815, 1813, 1, 0, 0, 0, 1815, 1816, 1, 0, 0, 0, 1816, 1819, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1818, 1808, 1, 0, 0, 0, 1818, 1819, 1, 0, 0, 0, 1819, 1830, 1, 0, 0, 0, 1820, 1821, 5, 93, 0, 0, 1821, 1822, 5, 31, 0, 0, 1822, 1827, 3, 220, 110, 0, 1823, 1824, 5, 4, 0, 0, 1824, 1826, 3, 220, 110, 0, 1825, 1823, 1, 0, 0, 0, 1826, 1829, 1, 0, 0, 0, 1827, 1825, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1831, 1, 0, 0, 0, 1829, 1827, 1, 0, 0, 0, 1830, 1820, 1, 0, 0, 0, 1830, 1831, 1, 0, 0, 0, 1831, 1842, 1, 0, 0, 0, 1832, 1833, 5, 278, 0, 0, 1833, 1834, 5, 31, 0, 0, 1834, 1839, 3, 88, 44, 0, 1835, 1836, 5, 4, 0, 0, 1836, 1838, 3, 88, 44, 0, 1837, 1835, 1, 0, 0, 0, 1838, 1841, 1, 0, 0, 0, 1839, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1843, 1, 0, 0, 0, 1841, 1839, 1, 0, 0, 0, 1842, 1832, 1, 0, 0, 0, 1842, 1843, 1, 0, 0, 0, 1843, 1845, 1, 0, 0, 0, 1844, 1846, 3, 298, 149, 0, 1845, 1844, 1, 0, 0, 0, 1845, 1846, 1, 0, 0, 0, 1846, 1852, 1, 0, 0, 0, 1847, 1850, 5, 165, 0, 0, 1848, 1851, 5, 10, 0, 0, 1849, 1851, 3, 220, 110, 0, 1850, 1848, 1, 0, 0, 0, 1850, 1849, 1, 0, 0, 0, 1851, 1853, 1, 0, 0, 0, 1852, 1847, 1, 0, 0, 0, 1852, 1853, 1, 0, 0, 0, 1853, 1856, 1, 0, 0, 0, 1854, 1855, 5, 202, 0, 0, 1855, 1857, 3, 220, 110, 0, 1856, 1854, 1, 0, 0, 0, 1856, 1857, 1, 0, 0, 0, 1857, 83, 1, 0, 0, 0, 1858, 1859, 6, 42, -1, 0, 1859, 1860, 3, 86, 43, 0, 1860, 1881, 1, 0, 0, 0, 1861, 1862, 10, 3, 0, 0, 1862, 1864, 7, 23, 0, 0, 1863, 1865, 3, 154, 77, 0, 1864, 1863, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1880, 3, 84, 42, 4, 1867, 1868, 10, 2, 0, 0, 1868, 1870, 5, 148, 0, 0, 1869, 1871, 3, 154, 77, 0, 1870, 1869, 1, 0, 0, 0, 1870, 1871, 1, 0, 0, 0, 1871, 1872, 1, 0, 0, 0, 1872, 1880, 3, 84, 42, 3, 1873, 1874, 10, 1, 0, 0, 1874, 1876, 7, 24, 0, 0, 1875, 1877, 3, 154, 77, 0, 1876, 1875, 1, 0, 0, 0, 1876, 1877, 1, 0, 0, 0, 1877, 1878, 1, 0, 0, 0, 1878, 1880, 3, 84, 42, 2, 1879, 1861, 1, 0, 0, 0, 1879, 1867, 1, 0, 0, 0, 1879, 1873, 1, 0, 0, 0, 1880, 1883, 1, 0, 0, 0, 1881, 1879, 1, 0, 0, 0, 1881, 1882, 1, 0, 0, 0, 1882, 85, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1884, 1909, 3, 92, 46, 0, 1885, 1887, 3, 120, 60, 0, 1886, 1888, 3, 90, 45, 0, 1887, 1886, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 1887, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1909, 1, 0, 0, 0, 1891, 1892, 5, 293, 0, 0, 1892, 1909, 3, 68, 34, 0, 1893, 1894, 5, 333, 0, 0, 1894, 1899, 3, 220, 110, 0, 1895, 1896, 5, 4, 0, 0, 1896, 1898, 3, 220, 110, 0, 1897, 1895, 1, 0, 0, 0, 1898, 1901, 1, 0, 0, 0, 1899, 1897, 1, 0, 0, 0, 1899, 1900, 1, 0, 0, 0, 1900, 1902, 1, 0, 0, 0, 1901, 1899, 1, 0, 0, 0, 1902, 1903, 3, 192, 96, 0, 1903, 1909, 1, 0, 0, 0, 1904, 1905, 5, 2, 0, 0, 1905, 1906, 3, 12, 6, 0, 1906, 1907, 5, 3, 0, 0, 1907, 1909, 1, 0, 0, 0, 1908, 1884, 1, 0, 0, 0, 1908, 1885, 1, 0, 0, 0, 1908, 1891, 1, 0, 0, 0, 1908, 1893, 1, 0, 0, 0, 1908, 1904, 1, 0, 0, 0, 1909, 87, 1, 0, 0, 0, 1910, 1913, 3, 74, 37, 0, 1911, 1913, 3, 220, 110, 0, 1912, 1910, 1, 0, 0, 0, 1912, 1911, 1, 0, 0, 0, 1913, 1915, 1, 0, 0, 0, 1914, 1916, 7, 25, 0, 0, 1915, 1914, 1, 0, 0, 0, 1915, 1916, 1, 0, 0, 0, 1916, 1919, 1, 0, 0, 0, 1917, 1918, 5, 199, 0, 0, 1918, 1920, 7, 26, 0, 0, 1919, 1917, 1, 0, 0, 0, 1919, 1920, 1, 0, 0, 0, 1920, 89, 1, 0, 0, 0, 1921, 1923, 3, 94, 47, 0, 1922, 1924, 3, 112, 56, 0, 1923, 1922, 1, 0, 0, 0, 1923, 1924, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 1926, 3, 82, 41, 0, 1926, 1949, 1, 0, 0, 0, 1927, 1931, 3, 96, 48, 0, 1928, 1930, 3, 152, 76, 0, 1929, 1928, 1, 0, 0, 0, 1930, 1933, 1, 0, 0, 0, 1931, 1929, 1, 0, 0, 0, 1931, 1932, 1, 0, 0, 0, 1932, 1935, 1, 0, 0, 0, 1933, 1931, 1, 0, 0, 0, 1934, 1936, 3, 112, 56, 0, 1935, 1934, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 1938, 1, 0, 0, 0, 1937, 1939, 3, 124, 62, 0, 1938, 1937, 1, 0, 0, 0, 1938, 1939, 1, 0, 0, 0, 1939, 1941, 1, 0, 0, 0, 1940, 1942, 3, 114, 57, 0, 1941, 1940, 1, 0, 0, 0, 1941, 1942, 1, 0, 0, 0, 1942, 1944, 1, 0, 0, 0, 1943, 1945, 3, 298, 149, 0, 1944, 1943, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1947, 3, 82, 41, 0, 1947, 1949, 1, 0, 0, 0, 1948, 1921, 1, 0, 0, 0, 1948, 1927, 1, 0, 0, 0, 1949, 91, 1, 0, 0, 0, 1950, 1952, 3, 94, 47, 0, 1951, 1953, 3, 120, 60, 0, 1952, 1951, 1, 0, 0, 0, 1952, 1953, 1, 0, 0, 0, 1953, 1957, 1, 0, 0, 0, 1954, 1956, 3, 152, 76, 0, 1955, 1954, 1, 0, 0, 0, 1956, 1959, 1, 0, 0, 0, 1957, 1955, 1, 0, 0, 0, 1957, 1958, 1, 0, 0, 0, 1958, 1961, 1, 0, 0, 0, 1959, 1957, 1, 0, 0, 0, 1960, 1962, 3, 112, 56, 0, 1961, 1960, 1, 0, 0, 0, 1961, 1962, 1, 0, 0, 0, 1962, 1964, 1, 0, 0, 0, 1963, 1965, 3, 124, 62, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1967, 1, 0, 0, 0, 1966, 1968, 3, 114, 57, 0, 1967, 1966, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 1, 0, 0, 0, 1969, 1971, 3, 298, 149, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 1995, 1, 0, 0, 0, 1972, 1974, 3, 96, 48, 0, 1973, 1975, 3, 120, 60, 0, 1974, 1973, 1, 0, 0, 0, 1974, 1975, 1, 0, 0, 0, 1975, 1979, 1, 0, 0, 0, 1976, 1978, 3, 152, 76, 0, 1977, 1976, 1, 0, 0, 0, 1978, 1981, 1, 0, 0, 0, 1979, 1977, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 1983, 1, 0, 0, 0, 1981, 1979, 1, 0, 0, 0, 1982, 1984, 3, 112, 56, 0, 1983, 1982, 1, 0, 0, 0, 1983, 1984, 1, 0, 0, 0, 1984, 1986, 1, 0, 0, 0, 1985, 1987, 3, 124, 62, 0, 1986, 1985, 1, 0, 0, 0, 1986, 1987, 1, 0, 0, 0, 1987, 1989, 1, 0, 0, 0, 1988, 1990, 3, 114, 57, 0, 1989, 1988, 1, 0, 0, 0, 1989, 1990, 1, 0, 0, 0, 1990, 1992, 1, 0, 0, 0, 1991, 1993, 3, 298, 149, 0, 1992, 1991, 1, 0, 0, 0, 1992, 1993, 1, 0, 0, 0, 1993, 1995, 1, 0, 0, 0, 1994, 1950, 1, 0, 0, 0, 1994, 1972, 1, 0, 0, 0, 1995, 93, 1, 0, 0, 0, 1996, 1997, 5, 263, 0, 0, 1997, 1998, 5, 314, 0, 0, 1998, 2000, 5, 2, 0, 0, 1999, 2001, 3, 154, 77, 0, 2000, 1999, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 2002, 1, 0, 0, 0, 2002, 2003, 3, 226, 113, 0, 2003, 2004, 5, 3, 0, 0, 2004, 2016, 1, 0, 0, 0, 2005, 2007, 5, 177, 0, 0, 2006, 2008, 3, 154, 77, 0, 2007, 2006, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 2009, 1, 0, 0, 0, 2009, 2016, 3, 226, 113, 0, 2010, 2012, 5, 238, 0, 0, 2011, 2013, 3, 154, 77, 0, 2012, 2011, 1, 0, 0, 0, 2012, 2013, 1, 0, 0, 0, 2013, 2014, 1, 0, 0, 0, 2014, 2016, 3, 226, 113, 0, 2015, 1996, 1, 0, 0, 0, 2015, 2005, 1, 0, 0, 0, 2015, 2010, 1, 0, 0, 0, 2016, 2018, 1, 0, 0, 0, 2017, 2019, 3, 194, 97, 0, 2018, 2017, 1, 0, 0, 0, 2018, 2019, 1, 0, 0, 0, 2019, 2022, 1, 0, 0, 0, 2020, 2021, 5, 236, 0, 0, 2021, 2023, 3, 328, 164, 0, 2022, 2020, 1, 0, 0, 0, 2022, 2023, 1, 0, 0, 0, 2023, 2024, 1, 0, 0, 0, 2024, 2025, 5, 332, 0, 0, 2025, 2038, 3, 328, 164, 0, 2026, 2036, 5, 20, 0, 0, 2027, 2037, 3, 170, 85, 0, 2028, 2037, 3, 284, 142, 0, 2029, 2032, 5, 2, 0, 0, 2030, 2033, 3, 170, 85, 0, 2031, 2033, 3, 284, 142, 0, 2032, 2030, 1, 0, 0, 0, 2032, 2031, 1, 0, 0, 0, 2033, 2034, 1, 0, 0, 0, 2034, 2035, 5, 3, 0, 0, 2035, 2037, 1, 0, 0, 0, 2036, 2027, 1, 0, 0, 0, 2036, 2028, 1, 0, 0, 0, 2036, 2029, 1, 0, 0, 0, 2037, 2039, 1, 0, 0, 0, 2038, 2026, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 2041, 1, 0, 0, 0, 2040, 2042, 3, 194, 97, 0, 2041, 2040, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2045, 1, 0, 0, 0, 2043, 2044, 5, 235, 0, 0, 2044, 2046, 3, 328, 164, 0, 2045, 2043, 1, 0, 0, 0, 2045, 2046, 1, 0, 0, 0, 2046, 95, 1, 0, 0, 0, 2047, 2051, 5, 263, 0, 0, 2048, 2050, 3, 116, 58, 0, 2049, 2048, 1, 0, 0, 0, 2050, 2053, 1, 0, 0, 0, 2051, 2049, 1, 0, 0, 0, 2051, 2052, 1, 0, 0, 0, 2052, 2055, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2054, 2056, 3, 154, 77, 0, 2055, 2054, 1, 0, 0, 0, 2055, 2056, 1, 0, 0, 0, 2056, 2057, 1, 0, 0, 0, 2057, 2058, 3, 210, 105, 0, 2058, 97, 1, 0, 0, 0, 2059, 2060, 5, 269, 0, 0, 2060, 2061, 3, 108, 54, 0, 2061, 99, 1, 0, 0, 0, 2062, 2063, 5, 343, 0, 0, 2063, 2066, 5, 178, 0, 0, 2064, 2065, 5, 14, 0, 0, 2065, 2067, 3, 228, 114, 0, 2066, 2064, 1, 0, 0, 0, 2066, 2067, 1, 0, 0, 0, 2067, 2068, 1, 0, 0, 0, 2068, 2076, 5, 300, 0, 0, 2069, 2077, 5, 84, 0, 0, 2070, 2071, 5, 329, 0, 0, 2071, 2074, 5, 269, 0, 0, 2072, 2075, 5, 363, 0, 0, 2073, 2075, 3, 108, 54, 0, 2074, 2072, 1, 0, 0, 0, 2074, 2073, 1, 0, 0, 0, 2075, 2077, 1, 0, 0, 0, 2076, 2069, 1, 0, 0, 0, 2076, 2070, 1, 0, 0, 0, 2077, 101, 1, 0, 0, 0, 2078, 2079, 5, 343, 0, 0, 2079, 2080, 5, 197, 0, 0, 2080, 2083, 5, 178, 0, 0, 2081, 2082, 5, 31, 0, 0, 2082, 2084, 5, 296, 0, 0, 2083, 2081, 1, 0, 0, 0, 2083, 2084, 1, 0, 0, 0, 2084, 2087, 1, 0, 0, 0, 2085, 2086, 5, 14, 0, 0, 2086, 2088, 3, 228, 114, 0, 2087, 2085, 1, 0, 0, 0, 2087, 2088, 1, 0, 0, 0, 2088, 2089, 1, 0, 0, 0, 2089, 2090, 5, 300, 0, 0, 2090, 2091, 3, 106, 53, 0, 2091, 103, 1, 0, 0, 0, 2092, 2093, 5, 343, 0, 0, 2093, 2094, 5, 197, 0, 0, 2094, 2095, 5, 178, 0, 0, 2095, 2096, 5, 31, 0, 0, 2096, 2099, 5, 280, 0, 0, 2097, 2098, 5, 14, 0, 0, 2098, 2100, 3, 228, 114, 0, 2099, 2097, 1, 0, 0, 0, 2099, 2100, 1, 0, 0, 0, 2100, 2101, 1, 0, 0, 0, 2101, 2106, 5, 300, 0, 0, 2102, 2107, 5, 84, 0, 0, 2103, 2104, 5, 329, 0, 0, 2104, 2105, 5, 269, 0, 0, 2105, 2107, 3, 108, 54, 0, 2106, 2102, 1, 0, 0, 0, 2106, 2103, 1, 0, 0, 0, 2107, 105, 1, 0, 0, 0, 2108, 2109, 5, 147, 0, 0, 2109, 2127, 5, 363, 0, 0, 2110, 2111, 5, 147, 0, 0, 2111, 2112, 5, 2, 0, 0, 2112, 2113, 3, 196, 98, 0, 2113, 2114, 5, 3, 0, 0, 2114, 2115, 5, 333, 0, 0, 2115, 2116, 5, 2, 0, 0, 2116, 2121, 3, 220, 110, 0, 2117, 2118, 5, 4, 0, 0, 2118, 2120, 3, 220, 110, 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, 2124, 1, 0, 0, 0, 2123, 2121, 1, 0, 0, 0, 2124, 2125, 5, 3, 0, 0, 2125, 2127, 1, 0, 0, 0, 2126, 2108, 1, 0, 0, 0, 2126, 2110, 1, 0, 0, 0, 2127, 107, 1, 0, 0, 0, 2128, 2133, 3, 110, 55, 0, 2129, 2130, 5, 4, 0, 0, 2130, 2132, 3, 110, 55, 0, 2131, 2129, 1, 0, 0, 0, 2132, 2135, 1, 0, 0, 0, 2133, 2131, 1, 0, 0, 0, 2133, 2134, 1, 0, 0, 0, 2134, 109, 1, 0, 0, 0, 2135, 2133, 1, 0, 0, 0, 2136, 2137, 3, 198, 99, 0, 2137, 2138, 5, 352, 0, 0, 2138, 2139, 3, 220, 110, 0, 2139, 111, 1, 0, 0, 0, 2140, 2141, 5, 344, 0, 0, 2141, 2142, 3, 228, 114, 0, 2142, 113, 1, 0, 0, 0, 2143, 2144, 5, 132, 0, 0, 2144, 2145, 3, 228, 114, 0, 2145, 115, 1, 0, 0, 0, 2146, 2147, 5, 374, 0, 0, 2147, 2154, 3, 118, 59, 0, 2148, 2150, 5, 4, 0, 0, 2149, 2148, 1, 0, 0, 0, 2149, 2150, 1, 0, 0, 0, 2150, 2151, 1, 0, 0, 0, 2151, 2153, 3, 118, 59, 0, 2152, 2149, 1, 0, 0, 0, 2153, 2156, 1, 0, 0, 0, 2154, 2152, 1, 0, 0, 0, 2154, 2155, 1, 0, 0, 0, 2155, 2157, 1, 0, 0, 0, 2156, 2154, 1, 0, 0, 0, 2157, 2158, 5, 375, 0, 0, 2158, 117, 1, 0, 0, 0, 2159, 2173, 3, 318, 159, 0, 2160, 2161, 3, 318, 159, 0, 2161, 2162, 5, 2, 0, 0, 2162, 2167, 3, 236, 118, 0, 2163, 2164, 5, 4, 0, 0, 2164, 2166, 3, 236, 118, 0, 2165, 2163, 1, 0, 0, 0, 2166, 2169, 1, 0, 0, 0, 2167, 2165, 1, 0, 0, 0, 2167, 2168, 1, 0, 0, 0, 2168, 2170, 1, 0, 0, 0, 2169, 2167, 1, 0, 0, 0, 2170, 2171, 5, 3, 0, 0, 2171, 2173, 1, 0, 0, 0, 2172, 2159, 1, 0, 0, 0, 2172, 2160, 1, 0, 0, 0, 2173, 119, 1, 0, 0, 0, 2174, 2175, 5, 123, 0, 0, 2175, 2180, 3, 156, 78, 0, 2176, 2177, 5, 4, 0, 0, 2177, 2179, 3, 156, 78, 0, 2178, 2176, 1, 0, 0, 0, 2179, 2182, 1, 0, 0, 0, 2180, 2178, 1, 0, 0, 0, 2180, 2181, 1, 0, 0, 0, 2181, 2186, 1, 0, 0, 0, 2182, 2180, 1, 0, 0, 0, 2183, 2185, 3, 152, 76, 0, 2184, 2183, 1, 0, 0, 0, 2185, 2188, 1, 0, 0, 0, 2186, 2184, 1, 0, 0, 0, 2186, 2187, 1, 0, 0, 0, 2187, 2190, 1, 0, 0, 0, 2188, 2186, 1, 0, 0, 0, 2189, 2191, 3, 132, 66, 0, 2190, 2189, 1, 0, 0, 0, 2190, 2191, 1, 0, 0, 0, 2191, 2193, 1, 0, 0, 0, 2192, 2194, 3, 138, 69, 0, 2193, 2192, 1, 0, 0, 0, 2193, 2194, 1, 0, 0, 0, 2194, 121, 1, 0, 0, 0, 2195, 2197, 5, 119, 0, 0, 2196, 2195, 1, 0, 0, 0, 2196, 2197, 1, 0, 0, 0, 2197, 2198, 1, 0, 0, 0, 2198, 2199, 7, 27, 0, 0, 2199, 2200, 5, 20, 0, 0, 2200, 2203, 5, 201, 0, 0, 2201, 2204, 5, 382, 0, 0, 2202, 2204, 3, 328, 164, 0, 2203, 2201, 1, 0, 0, 0, 2203, 2202, 1, 0, 0, 0, 2204, 2213, 1, 0, 0, 0, 2205, 2207, 5, 119, 0, 0, 2206, 2205, 1, 0, 0, 0, 2206, 2207, 1, 0, 0, 0, 2207, 2208, 1, 0, 0, 0, 2208, 2209, 7, 28, 0, 0, 2209, 2210, 5, 20, 0, 0, 2210, 2211, 5, 201, 0, 0, 2211, 2213, 3, 232, 116, 0, 2212, 2196, 1, 0, 0, 0, 2212, 2206, 1, 0, 0, 0, 2213, 123, 1, 0, 0, 0, 2214, 2215, 5, 130, 0, 0, 2215, 2216, 5, 31, 0, 0, 2216, 2221, 3, 126, 63, 0, 2217, 2218, 5, 4, 0, 0, 2218, 2220, 3, 126, 63, 0, 2219, 2217, 1, 0, 0, 0, 2220, 2223, 1, 0, 0, 0, 2221, 2219, 1, 0, 0, 0, 2221, 2222, 1, 0, 0, 0, 2222, 2254, 1, 0, 0, 0, 2223, 2221, 1, 0, 0, 0, 2224, 2225, 5, 130, 0, 0, 2225, 2226, 5, 31, 0, 0, 2226, 2231, 3, 220, 110, 0, 2227, 2228, 5, 4, 0, 0, 2228, 2230, 3, 220, 110, 0, 2229, 2227, 1, 0, 0, 0, 2230, 2233, 1, 0, 0, 0, 2231, 2229, 1, 0, 0, 0, 2231, 2232, 1, 0, 0, 0, 2232, 2251, 1, 0, 0, 0, 2233, 2231, 1, 0, 0, 0, 2234, 2235, 5, 346, 0, 0, 2235, 2252, 5, 256, 0, 0, 2236, 2237, 5, 346, 0, 0, 2237, 2252, 5, 61, 0, 0, 2238, 2239, 5, 131, 0, 0, 2239, 2240, 5, 271, 0, 0, 2240, 2241, 5, 2, 0, 0, 2241, 2246, 3, 130, 65, 0, 2242, 2243, 5, 4, 0, 0, 2243, 2245, 3, 130, 65, 0, 2244, 2242, 1, 0, 0, 0, 2245, 2248, 1, 0, 0, 0, 2246, 2244, 1, 0, 0, 0, 2246, 2247, 1, 0, 0, 0, 2247, 2249, 1, 0, 0, 0, 2248, 2246, 1, 0, 0, 0, 2249, 2250, 5, 3, 0, 0, 2250, 2252, 1, 0, 0, 0, 2251, 2234, 1, 0, 0, 0, 2251, 2236, 1, 0, 0, 0, 2251, 2238, 1, 0, 0, 0, 2251, 2252, 1, 0, 0, 0, 2252, 2254, 1, 0, 0, 0, 2253, 2214, 1, 0, 0, 0, 2253, 2224, 1, 0, 0, 0, 2254, 125, 1, 0, 0, 0, 2255, 2259, 3, 74, 37, 0, 2256, 2259, 3, 128, 64, 0, 2257, 2259, 3, 220, 110, 0, 2258, 2255, 1, 0, 0, 0, 2258, 2256, 1, 0, 0, 0, 2258, 2257, 1, 0, 0, 0, 2259, 127, 1, 0, 0, 0, 2260, 2261, 7, 29, 0, 0, 2261, 2262, 5, 2, 0, 0, 2262, 2267, 3, 130, 65, 0, 2263, 2264, 5, 4, 0, 0, 2264, 2266, 3, 130, 65, 0, 2265, 2263, 1, 0, 0, 0, 2266, 2269, 1, 0, 0, 0, 2267, 2265, 1, 0, 0, 0, 2267, 2268, 1, 0, 0, 0, 2268, 2270, 1, 0, 0, 0, 2269, 2267, 1, 0, 0, 0, 2270, 2271, 5, 3, 0, 0, 2271, 2292, 1, 0, 0, 0, 2272, 2273, 5, 131, 0, 0, 2273, 2274, 5, 271, 0, 0, 2274, 2277, 5, 2, 0, 0, 2275, 2278, 3, 128, 64, 0, 2276, 2278, 3, 130, 65, 0, 2277, 2275, 1, 0, 0, 0, 2277, 2276, 1, 0, 0, 0, 2278, 2286, 1, 0, 0, 0, 2279, 2282, 5, 4, 0, 0, 2280, 2283, 3, 128, 64, 0, 2281, 2283, 3, 130, 65, 0, 2282, 2280, 1, 0, 0, 0, 2282, 2281, 1, 0, 0, 0, 2283, 2285, 1, 0, 0, 0, 2284, 2279, 1, 0, 0, 0, 2285, 2288, 1, 0, 0, 0, 2286, 2284, 1, 0, 0, 0, 2286, 2287, 1, 0, 0, 0, 2287, 2289, 1, 0, 0, 0, 2288, 2286, 1, 0, 0, 0, 2289, 2290, 5, 3, 0, 0, 2290, 2292, 1, 0, 0, 0, 2291, 2260, 1, 0, 0, 0, 2291, 2272, 1, 0, 0, 0, 2292, 129, 1, 0, 0, 0, 2293, 2314, 3, 74, 37, 0, 2294, 2314, 3, 220, 110, 0, 2295, 2310, 5, 2, 0, 0, 2296, 2299, 3, 74, 37, 0, 2297, 2299, 3, 220, 110, 0, 2298, 2296, 1, 0, 0, 0, 2298, 2297, 1, 0, 0, 0, 2299, 2307, 1, 0, 0, 0, 2300, 2303, 5, 4, 0, 0, 2301, 2304, 3, 74, 37, 0, 2302, 2304, 3, 220, 110, 0, 2303, 2301, 1, 0, 0, 0, 2303, 2302, 1, 0, 0, 0, 2304, 2306, 1, 0, 0, 0, 2305, 2300, 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, 2298, 1, 0, 0, 0, 2310, 2311, 1, 0, 0, 0, 2311, 2312, 1, 0, 0, 0, 2312, 2314, 5, 3, 0, 0, 2313, 2293, 1, 0, 0, 0, 2313, 2294, 1, 0, 0, 0, 2313, 2295, 1, 0, 0, 0, 2314, 131, 1, 0, 0, 0, 2315, 2316, 5, 223, 0, 0, 2316, 2317, 5, 2, 0, 0, 2317, 2318, 3, 210, 105, 0, 2318, 2319, 5, 119, 0, 0, 2319, 2320, 3, 134, 67, 0, 2320, 2321, 5, 140, 0, 0, 2321, 2322, 5, 2, 0, 0, 2322, 2327, 3, 136, 68, 0, 2323, 2324, 5, 4, 0, 0, 2324, 2326, 3, 136, 68, 0, 2325, 2323, 1, 0, 0, 0, 2326, 2329, 1, 0, 0, 0, 2327, 2325, 1, 0, 0, 0, 2327, 2328, 1, 0, 0, 0, 2328, 2330, 1, 0, 0, 0, 2329, 2327, 1, 0, 0, 0, 2330, 2331, 5, 3, 0, 0, 2331, 2332, 5, 3, 0, 0, 2332, 133, 1, 0, 0, 0, 2333, 2346, 3, 318, 159, 0, 2334, 2335, 5, 2, 0, 0, 2335, 2340, 3, 318, 159, 0, 2336, 2337, 5, 4, 0, 0, 2337, 2339, 3, 318, 159, 0, 2338, 2336, 1, 0, 0, 0, 2339, 2342, 1, 0, 0, 0, 2340, 2338, 1, 0, 0, 0, 2340, 2341, 1, 0, 0, 0, 2341, 2343, 1, 0, 0, 0, 2342, 2340, 1, 0, 0, 0, 2343, 2344, 5, 3, 0, 0, 2344, 2346, 1, 0, 0, 0, 2345, 2333, 1, 0, 0, 0, 2345, 2334, 1, 0, 0, 0, 2346, 135, 1, 0, 0, 0, 2347, 2352, 3, 220, 110, 0, 2348, 2350, 5, 20, 0, 0, 2349, 2348, 1, 0, 0, 0, 2349, 2350, 1, 0, 0, 0, 2350, 2351, 1, 0, 0, 0, 2351, 2353, 3, 318, 159, 0, 2352, 2349, 1, 0, 0, 0, 2352, 2353, 1, 0, 0, 0, 2353, 137, 1, 0, 0, 0, 2354, 2357, 5, 327, 0, 0, 2355, 2356, 7, 30, 0, 0, 2356, 2358, 5, 199, 0, 0, 2357, 2355, 1, 0, 0, 0, 2357, 2358, 1, 0, 0, 0, 2358, 2359, 1, 0, 0, 0, 2359, 2362, 5, 2, 0, 0, 2360, 2363, 3, 140, 70, 0, 2361, 2363, 3, 142, 71, 0, 2362, 2360, 1, 0, 0, 0, 2362, 2361, 1, 0, 0, 0, 2363, 2364, 1, 0, 0, 0, 2364, 2369, 5, 3, 0, 0, 2365, 2367, 5, 20, 0, 0, 2366, 2365, 1, 0, 0, 0, 2366, 2367, 1, 0, 0, 0, 2367, 2368, 1, 0, 0, 0, 2368, 2370, 3, 318, 159, 0, 2369, 2366, 1, 0, 0, 0, 2369, 2370, 1, 0, 0, 0, 2370, 139, 1, 0, 0, 0, 2371, 2372, 3, 318, 159, 0, 2372, 2373, 5, 119, 0, 0, 2373, 2374, 3, 318, 159, 0, 2374, 2375, 5, 140, 0, 0, 2375, 2376, 5, 2, 0, 0, 2376, 2381, 3, 146, 73, 0, 2377, 2378, 5, 4, 0, 0, 2378, 2380, 3, 146, 73, 0, 2379, 2377, 1, 0, 0, 0, 2380, 2383, 1, 0, 0, 0, 2381, 2379, 1, 0, 0, 0, 2381, 2382, 1, 0, 0, 0, 2382, 2384, 1, 0, 0, 0, 2383, 2381, 1, 0, 0, 0, 2384, 2385, 5, 3, 0, 0, 2385, 141, 1, 0, 0, 0, 2386, 2387, 5, 2, 0, 0, 2387, 2392, 3, 318, 159, 0, 2388, 2389, 5, 4, 0, 0, 2389, 2391, 3, 318, 159, 0, 2390, 2388, 1, 0, 0, 0, 2391, 2394, 1, 0, 0, 0, 2392, 2390, 1, 0, 0, 0, 2392, 2393, 1, 0, 0, 0, 2393, 2395, 1, 0, 0, 0, 2394, 2392, 1, 0, 0, 0, 2395, 2396, 5, 3, 0, 0, 2396, 2397, 5, 119, 0, 0, 2397, 2398, 3, 318, 159, 0, 2398, 2399, 5, 140, 0, 0, 2399, 2400, 5, 2, 0, 0, 2400, 2405, 3, 144, 72, 0, 2401, 2402, 5, 4, 0, 0, 2402, 2404, 3, 144, 72, 0, 2403, 2401, 1, 0, 0, 0, 2404, 2407, 1, 0, 0, 0, 2405, 2403, 1, 0, 0, 0, 2405, 2406, 1, 0, 0, 0, 2406, 2408, 1, 0, 0, 0, 2407, 2405, 1, 0, 0, 0, 2408, 2409, 5, 3, 0, 0, 2409, 143, 1, 0, 0, 0, 2410, 2411, 5, 2, 0, 0, 2411, 2416, 3, 198, 99, 0, 2412, 2413, 5, 4, 0, 0, 2413, 2415, 3, 198, 99, 0, 2414, 2412, 1, 0, 0, 0, 2415, 2418, 1, 0, 0, 0, 2416, 2414, 1, 0, 0, 0, 2416, 2417, 1, 0, 0, 0, 2417, 2419, 1, 0, 0, 0, 2418, 2416, 1, 0, 0, 0, 2419, 2424, 5, 3, 0, 0, 2420, 2422, 5, 20, 0, 0, 2421, 2420, 1, 0, 0, 0, 2421, 2422, 1, 0, 0, 0, 2422, 2423, 1, 0, 0, 0, 2423, 2425, 3, 318, 159, 0, 2424, 2421, 1, 0, 0, 0, 2424, 2425, 1, 0, 0, 0, 2425, 145, 1, 0, 0, 0, 2426, 2431, 3, 198, 99, 0, 2427, 2429, 5, 20, 0, 0, 2428, 2427, 1, 0, 0, 0, 2428, 2429, 1, 0, 0, 0, 2429, 2430, 1, 0, 0, 0, 2430, 2432, 3, 318, 159, 0, 2431, 2428, 1, 0, 0, 0, 2431, 2432, 1, 0, 0, 0, 2432, 147, 1, 0, 0, 0, 2433, 2434, 5, 137, 0, 0, 2434, 2435, 5, 197, 0, 0, 2435, 2436, 5, 105, 0, 0, 2436, 149, 1, 0, 0, 0, 2437, 2438, 5, 137, 0, 0, 2438, 2439, 5, 105, 0, 0, 2439, 151, 1, 0, 0, 0, 2440, 2441, 5, 158, 0, 0, 2441, 2443, 5, 338, 0, 0, 2442, 2444, 5, 211, 0, 0, 2443, 2442, 1, 0, 0, 0, 2443, 2444, 1, 0, 0, 0, 2444, 2445, 1, 0, 0, 0, 2445, 2446, 3, 72, 36, 0, 2446, 2455, 5, 2, 0, 0, 2447, 2452, 3, 220, 110, 0, 2448, 2449, 5, 4, 0, 0, 2449, 2451, 3, 220, 110, 0, 2450, 2448, 1, 0, 0, 0, 2451, 2454, 1, 0, 0, 0, 2452, 2450, 1, 0, 0, 0, 2452, 2453, 1, 0, 0, 0, 2453, 2456, 1, 0, 0, 0, 2454, 2452, 1, 0, 0, 0, 2455, 2447, 1, 0, 0, 0, 2455, 2456, 1, 0, 0, 0, 2456, 2457, 1, 0, 0, 0, 2457, 2458, 5, 3, 0, 0, 2458, 2470, 3, 192, 96, 0, 2459, 2461, 5, 20, 0, 0, 2460, 2459, 1, 0, 0, 0, 2460, 2461, 1, 0, 0, 0, 2461, 2462, 1, 0, 0, 0, 2462, 2467, 3, 318, 159, 0, 2463, 2464, 5, 4, 0, 0, 2464, 2466, 3, 318, 159, 0, 2465, 2463, 1, 0, 0, 0, 2466, 2469, 1, 0, 0, 0, 2467, 2465, 1, 0, 0, 0, 2467, 2468, 1, 0, 0, 0, 2468, 2471, 1, 0, 0, 0, 2469, 2467, 1, 0, 0, 0, 2470, 2460, 1, 0, 0, 0, 2470, 2471, 1, 0, 0, 0, 2471, 153, 1, 0, 0, 0, 2472, 2473, 7, 31, 0, 0, 2473, 155, 1, 0, 0, 0, 2474, 2488, 3, 68, 34, 0, 2475, 2477, 5, 158, 0, 0, 2476, 2475, 1, 0, 0, 0, 2476, 2477, 1, 0, 0, 0, 2477, 2478, 1, 0, 0, 0, 2478, 2484, 3, 180, 90, 0, 2479, 2483, 3, 158, 79, 0, 2480, 2483, 3, 132, 66, 0, 2481, 2483, 3, 138, 69, 0, 2482, 2479, 1, 0, 0, 0, 2482, 2480, 1, 0, 0, 0, 2482, 2481, 1, 0, 0, 0, 2483, 2486, 1, 0, 0, 0, 2484, 2482, 1, 0, 0, 0, 2484, 2485, 1, 0, 0, 0, 2485, 2488, 1, 0, 0, 0, 2486, 2484, 1, 0, 0, 0, 2487, 2474, 1, 0, 0, 0, 2487, 2476, 1, 0, 0, 0, 2488, 157, 1, 0, 0, 0, 2489, 2490, 3, 160, 80, 0, 2490, 2492, 5, 155, 0, 0, 2491, 2493, 5, 158, 0, 0, 2492, 2491, 1, 0, 0, 0, 2492, 2493, 1, 0, 0, 0, 2493, 2494, 1, 0, 0, 0, 2494, 2496, 3, 180, 90, 0, 2495, 2497, 3, 162, 81, 0, 2496, 2495, 1, 0, 0, 0, 2496, 2497, 1, 0, 0, 0, 2497, 2507, 1, 0, 0, 0, 2498, 2499, 5, 194, 0, 0, 2499, 2500, 3, 160, 80, 0, 2500, 2502, 5, 155, 0, 0, 2501, 2503, 5, 158, 0, 0, 2502, 2501, 1, 0, 0, 0, 2502, 2503, 1, 0, 0, 0, 2503, 2504, 1, 0, 0, 0, 2504, 2505, 3, 180, 90, 0, 2505, 2507, 1, 0, 0, 0, 2506, 2489, 1, 0, 0, 0, 2506, 2498, 1, 0, 0, 0, 2507, 159, 1, 0, 0, 0, 2508, 2510, 5, 144, 0, 0, 2509, 2508, 1, 0, 0, 0, 2509, 2510, 1, 0, 0, 0, 2510, 2525, 1, 0, 0, 0, 2511, 2525, 5, 60, 0, 0, 2512, 2514, 5, 161, 0, 0, 2513, 2515, 5, 211, 0, 0, 2514, 2513, 1, 0, 0, 0, 2514, 2515, 1, 0, 0, 0, 2515, 2525, 1, 0, 0, 0, 2516, 2518, 5, 161, 0, 0, 2517, 2516, 1, 0, 0, 0, 2517, 2518, 1, 0, 0, 0, 2518, 2519, 1, 0, 0, 0, 2519, 2525, 7, 32, 0, 0, 2520, 2522, 7, 33, 0, 0, 2521, 2523, 5, 211, 0, 0, 2522, 2521, 1, 0, 0, 0, 2522, 2523, 1, 0, 0, 0, 2523, 2525, 1, 0, 0, 0, 2524, 2509, 1, 0, 0, 0, 2524, 2511, 1, 0, 0, 0, 2524, 2512, 1, 0, 0, 0, 2524, 2517, 1, 0, 0, 0, 2524, 2520, 1, 0, 0, 0, 2525, 161, 1, 0, 0, 0, 2526, 2527, 5, 203, 0, 0, 2527, 2531, 3, 228, 114, 0, 2528, 2529, 5, 332, 0, 0, 2529, 2531, 3, 168, 84, 0, 2530, 2526, 1, 0, 0, 0, 2530, 2528, 1, 0, 0, 0, 2531, 163, 1, 0, 0, 0, 2532, 2533, 5, 295, 0, 0, 2533, 2535, 5, 2, 0, 0, 2534, 2536, 3, 166, 83, 0, 2535, 2534, 1, 0, 0, 0, 2535, 2536, 1, 0, 0, 0, 2536, 2537, 1, 0, 0, 0, 2537, 2542, 5, 3, 0, 0, 2538, 2539, 5, 243, 0, 0, 2539, 2540, 5, 2, 0, 0, 2540, 2541, 5, 382, 0, 0, 2541, 2543, 5, 3, 0, 0, 2542, 2538, 1, 0, 0, 0, 2542, 2543, 1, 0, 0, 0, 2543, 165, 1, 0, 0, 0, 2544, 2546, 5, 362, 0, 0, 2545, 2544, 1, 0, 0, 0, 2545, 2546, 1, 0, 0, 0, 2546, 2547, 1, 0, 0, 0, 2547, 2548, 7, 34, 0, 0, 2548, 2569, 5, 222, 0, 0, 2549, 2550, 3, 220, 110, 0, 2550, 2551, 5, 258, 0, 0, 2551, 2569, 1, 0, 0, 0, 2552, 2553, 5, 29, 0, 0, 2553, 2554, 5, 382, 0, 0, 2554, 2555, 5, 210, 0, 0, 2555, 2556, 5, 201, 0, 0, 2556, 2565, 5, 382, 0, 0, 2557, 2563, 5, 203, 0, 0, 2558, 2564, 3, 318, 159, 0, 2559, 2560, 3, 312, 156, 0, 2560, 2561, 5, 2, 0, 0, 2561, 2562, 5, 3, 0, 0, 2562, 2564, 1, 0, 0, 0, 2563, 2558, 1, 0, 0, 0, 2563, 2559, 1, 0, 0, 0, 2564, 2566, 1, 0, 0, 0, 2565, 2557, 1, 0, 0, 0, 2565, 2566, 1, 0, 0, 0, 2566, 2569, 1, 0, 0, 0, 2567, 2569, 3, 220, 110, 0, 2568, 2545, 1, 0, 0, 0, 2568, 2549, 1, 0, 0, 0, 2568, 2552, 1, 0, 0, 0, 2568, 2567, 1, 0, 0, 0, 2569, 167, 1, 0, 0, 0, 2570, 2571, 5, 2, 0, 0, 2571, 2572, 3, 170, 85, 0, 2572, 2573, 5, 3, 0, 0, 2573, 169, 1, 0, 0, 0, 2574, 2579, 3, 314, 157, 0, 2575, 2576, 5, 4, 0, 0, 2576, 2578, 3, 314, 157, 0, 2577, 2575, 1, 0, 0, 0, 2578, 2581, 1, 0, 0, 0, 2579, 2577, 1, 0, 0, 0, 2579, 2580, 1, 0, 0, 0, 2580, 171, 1, 0, 0, 0, 2581, 2579, 1, 0, 0, 0, 2582, 2583, 5, 2, 0, 0, 2583, 2588, 3, 174, 87, 0, 2584, 2585, 5, 4, 0, 0, 2585, 2587, 3, 174, 87, 0, 2586, 2584, 1, 0, 0, 0, 2587, 2590, 1, 0, 0, 0, 2588, 2586, 1, 0, 0, 0, 2588, 2589, 1, 0, 0, 0, 2589, 2591, 1, 0, 0, 0, 2590, 2588, 1, 0, 0, 0, 2591, 2592, 5, 3, 0, 0, 2592, 173, 1, 0, 0, 0, 2593, 2595, 3, 314, 157, 0, 2594, 2596, 7, 25, 0, 0, 2595, 2594, 1, 0, 0, 0, 2595, 2596, 1, 0, 0, 0, 2596, 175, 1, 0, 0, 0, 2597, 2598, 5, 2, 0, 0, 2598, 2603, 3, 178, 89, 0, 2599, 2600, 5, 4, 0, 0, 2600, 2602, 3, 178, 89, 0, 2601, 2599, 1, 0, 0, 0, 2602, 2605, 1, 0, 0, 0, 2603, 2601, 1, 0, 0, 0, 2603, 2604, 1, 0, 0, 0, 2604, 2606, 1, 0, 0, 0, 2605, 2603, 1, 0, 0, 0, 2606, 2607, 5, 3, 0, 0, 2607, 177, 1, 0, 0, 0, 2608, 2611, 3, 78, 39, 0, 2609, 2610, 5, 51, 0, 0, 2610, 2612, 3, 328, 164, 0, 2611, 2609, 1, 0, 0, 0, 2611, 2612, 1, 0, 0, 0, 2612, 179, 1, 0, 0, 0, 2613, 2617, 3, 68, 34, 0, 2614, 2617, 3, 72, 36, 0, 2615, 2617, 3, 80, 40, 0, 2616, 2613, 1, 0, 0, 0, 2616, 2614, 1, 0, 0, 0, 2616, 2615, 1, 0, 0, 0, 2617, 2619, 1, 0, 0, 0, 2618, 2620, 3, 122, 61, 0, 2619, 2618, 1, 0, 0, 0, 2619, 2620, 1, 0, 0, 0, 2620, 2622, 1, 0, 0, 0, 2621, 2623, 3, 164, 82, 0, 2622, 2621, 1, 0, 0, 0, 2622, 2623, 1, 0, 0, 0, 2623, 2624, 1, 0, 0, 0, 2624, 2625, 3, 192, 96, 0, 2625, 2669, 1, 0, 0, 0, 2626, 2627, 5, 2, 0, 0, 2627, 2628, 3, 12, 6, 0, 2628, 2630, 5, 3, 0, 0, 2629, 2631, 3, 164, 82, 0, 2630, 2629, 1, 0, 0, 0, 2630, 2631, 1, 0, 0, 0, 2631, 2632, 1, 0, 0, 0, 2632, 2633, 3, 192, 96, 0, 2633, 2669, 1, 0, 0, 0, 2634, 2635, 5, 2, 0, 0, 2635, 2636, 3, 156, 78, 0, 2636, 2638, 5, 3, 0, 0, 2637, 2639, 3, 164, 82, 0, 2638, 2637, 1, 0, 0, 0, 2638, 2639, 1, 0, 0, 0, 2639, 2640, 1, 0, 0, 0, 2640, 2641, 3, 192, 96, 0, 2641, 2669, 1, 0, 0, 0, 2642, 2643, 5, 333, 0, 0, 2643, 2648, 3, 220, 110, 0, 2644, 2645, 5, 4, 0, 0, 2645, 2647, 3, 220, 110, 0, 2646, 2644, 1, 0, 0, 0, 2647, 2650, 1, 0, 0, 0, 2648, 2646, 1, 0, 0, 0, 2648, 2649, 1, 0, 0, 0, 2649, 2651, 1, 0, 0, 0, 2650, 2648, 1, 0, 0, 0, 2651, 2652, 3, 192, 96, 0, 2652, 2669, 1, 0, 0, 0, 2653, 2654, 3, 308, 154, 0, 2654, 2663, 5, 2, 0, 0, 2655, 2660, 3, 190, 95, 0, 2656, 2657, 5, 4, 0, 0, 2657, 2659, 3, 190, 95, 0, 2658, 2656, 1, 0, 0, 0, 2659, 2662, 1, 0, 0, 0, 2660, 2658, 1, 0, 0, 0, 2660, 2661, 1, 0, 0, 0, 2661, 2664, 1, 0, 0, 0, 2662, 2660, 1, 0, 0, 0, 2663, 2655, 1, 0, 0, 0, 2663, 2664, 1, 0, 0, 0, 2664, 2665, 1, 0, 0, 0, 2665, 2666, 5, 3, 0, 0, 2666, 2667, 3, 192, 96, 0, 2667, 2669, 1, 0, 0, 0, 2668, 2616, 1, 0, 0, 0, 2668, 2626, 1, 0, 0, 0, 2668, 2634, 1, 0, 0, 0, 2668, 2642, 1, 0, 0, 0, 2668, 2653, 1, 0, 0, 0, 2669, 181, 1, 0, 0, 0, 2670, 2671, 5, 293, 0, 0, 2671, 2673, 3, 68, 34, 0, 2672, 2674, 3, 184, 92, 0, 2673, 2672, 1, 0, 0, 0, 2673, 2674, 1, 0, 0, 0, 2674, 2690, 1, 0, 0, 0, 2675, 2676, 5, 293, 0, 0, 2676, 2677, 5, 2, 0, 0, 2677, 2678, 3, 68, 34, 0, 2678, 2680, 5, 3, 0, 0, 2679, 2681, 3, 184, 92, 0, 2680, 2679, 1, 0, 0, 0, 2680, 2681, 1, 0, 0, 0, 2681, 2690, 1, 0, 0, 0, 2682, 2683, 5, 293, 0, 0, 2683, 2684, 5, 2, 0, 0, 2684, 2685, 3, 12, 6, 0, 2685, 2687, 5, 3, 0, 0, 2686, 2688, 3, 184, 92, 0, 2687, 2686, 1, 0, 0, 0, 2687, 2688, 1, 0, 0, 0, 2688, 2690, 1, 0, 0, 0, 2689, 2670, 1, 0, 0, 0, 2689, 2675, 1, 0, 0, 0, 2689, 2682, 1, 0, 0, 0, 2690, 183, 1, 0, 0, 0, 2691, 2692, 5, 346, 0, 0, 2692, 2693, 5, 274, 0, 0, 2693, 2711, 5, 217, 0, 0, 2694, 2695, 7, 35, 0, 0, 2695, 2708, 5, 31, 0, 0, 2696, 2697, 5, 2, 0, 0, 2697, 2702, 3, 220, 110, 0, 2698, 2699, 5, 4, 0, 0, 2699, 2701, 3, 220, 110, 0, 2700, 2698, 1, 0, 0, 0, 2701, 2704, 1, 0, 0, 0, 2702, 2700, 1, 0, 0, 0, 2702, 2703, 1, 0, 0, 0, 2703, 2705, 1, 0, 0, 0, 2704, 2702, 1, 0, 0, 0, 2705, 2706, 5, 3, 0, 0, 2706, 2709, 1, 0, 0, 0, 2707, 2709, 3, 220, 110, 0, 2708, 2696, 1, 0, 0, 0, 2708, 2707, 1, 0, 0, 0, 2709, 2711, 1, 0, 0, 0, 2710, 2691, 1, 0, 0, 0, 2710, 2694, 1, 0, 0, 0, 2711, 2728, 1, 0, 0, 0, 2712, 2713, 7, 36, 0, 0, 2713, 2726, 5, 31, 0, 0, 2714, 2715, 5, 2, 0, 0, 2715, 2720, 3, 88, 44, 0, 2716, 2717, 5, 4, 0, 0, 2717, 2719, 3, 88, 44, 0, 2718, 2716, 1, 0, 0, 0, 2719, 2722, 1, 0, 0, 0, 2720, 2718, 1, 0, 0, 0, 2720, 2721, 1, 0, 0, 0, 2721, 2723, 1, 0, 0, 0, 2722, 2720, 1, 0, 0, 0, 2723, 2724, 5, 3, 0, 0, 2724, 2727, 1, 0, 0, 0, 2725, 2727, 3, 88, 44, 0, 2726, 2714, 1, 0, 0, 0, 2726, 2725, 1, 0, 0, 0, 2727, 2729, 1, 0, 0, 0, 2728, 2712, 1, 0, 0, 0, 2728, 2729, 1, 0, 0, 0, 2729, 185, 1, 0, 0, 0, 2730, 2731, 3, 318, 159, 0, 2731, 2732, 5, 373, 0, 0, 2732, 2733, 3, 182, 91, 0, 2733, 187, 1, 0, 0, 0, 2734, 2737, 3, 182, 91, 0, 2735, 2737, 3, 186, 93, 0, 2736, 2734, 1, 0, 0, 0, 2736, 2735, 1, 0, 0, 0, 2737, 189, 1, 0, 0, 0, 2738, 2741, 3, 188, 94, 0, 2739, 2741, 3, 224, 112, 0, 2740, 2738, 1, 0, 0, 0, 2740, 2739, 1, 0, 0, 0, 2741, 191, 1, 0, 0, 0, 2742, 2744, 5, 20, 0, 0, 2743, 2742, 1, 0, 0, 0, 2743, 2744, 1, 0, 0, 0, 2744, 2745, 1, 0, 0, 0, 2745, 2747, 3, 320, 160, 0, 2746, 2748, 3, 168, 84, 0, 2747, 2746, 1, 0, 0, 0, 2747, 2748, 1, 0, 0, 0, 2748, 2750, 1, 0, 0, 0, 2749, 2743, 1, 0, 0, 0, 2749, 2750, 1, 0, 0, 0, 2750, 193, 1, 0, 0, 0, 2751, 2752, 5, 257, 0, 0, 2752, 2753, 5, 121, 0, 0, 2753, 2754, 5, 266, 0, 0, 2754, 2758, 3, 328, 164, 0, 2755, 2756, 5, 346, 0, 0, 2756, 2757, 5, 267, 0, 0, 2757, 2759, 3, 38, 19, 0, 2758, 2755, 1, 0, 0, 0, 2758, 2759, 1, 0, 0, 0, 2759, 2801, 1, 0, 0, 0, 2760, 2761, 5, 257, 0, 0, 2761, 2762, 5, 121, 0, 0, 2762, 2772, 5, 85, 0, 0, 2763, 2764, 5, 113, 0, 0, 2764, 2765, 5, 299, 0, 0, 2765, 2766, 5, 31, 0, 0, 2766, 2770, 3, 328, 164, 0, 2767, 2768, 5, 101, 0, 0, 2768, 2769, 5, 31, 0, 0, 2769, 2771, 3, 328, 164, 0, 2770, 2767, 1, 0, 0, 0, 2770, 2771, 1, 0, 0, 0, 2771, 2773, 1, 0, 0, 0, 2772, 2763, 1, 0, 0, 0, 2772, 2773, 1, 0, 0, 0, 2773, 2779, 1, 0, 0, 0, 2774, 2775, 5, 48, 0, 0, 2775, 2776, 5, 154, 0, 0, 2776, 2777, 5, 299, 0, 0, 2777, 2778, 5, 31, 0, 0, 2778, 2780, 3, 328, 164, 0, 2779, 2774, 1, 0, 0, 0, 2779, 2780, 1, 0, 0, 0, 2780, 2786, 1, 0, 0, 0, 2781, 2782, 5, 177, 0, 0, 2782, 2783, 5, 156, 0, 0, 2783, 2784, 5, 299, 0, 0, 2784, 2785, 5, 31, 0, 0, 2785, 2787, 3, 328, 164, 0, 2786, 2781, 1, 0, 0, 0, 2786, 2787, 1, 0, 0, 0, 2787, 2792, 1, 0, 0, 0, 2788, 2789, 5, 166, 0, 0, 2789, 2790, 5, 299, 0, 0, 2790, 2791, 5, 31, 0, 0, 2791, 2793, 3, 328, 164, 0, 2792, 2788, 1, 0, 0, 0, 2792, 2793, 1, 0, 0, 0, 2793, 2798, 1, 0, 0, 0, 2794, 2795, 5, 198, 0, 0, 2795, 2796, 5, 83, 0, 0, 2796, 2797, 5, 20, 0, 0, 2797, 2799, 3, 328, 164, 0, 2798, 2794, 1, 0, 0, 0, 2798, 2799, 1, 0, 0, 0, 2799, 2801, 1, 0, 0, 0, 2800, 2751, 1, 0, 0, 0, 2800, 2760, 1, 0, 0, 0, 2801, 195, 1, 0, 0, 0, 2802, 2807, 3, 198, 99, 0, 2803, 2804, 5, 4, 0, 0, 2804, 2806, 3, 198, 99, 0, 2805, 2803, 1, 0, 0, 0, 2806, 2809, 1, 0, 0, 0, 2807, 2805, 1, 0, 0, 0, 2807, 2808, 1, 0, 0, 0, 2808, 197, 1, 0, 0, 0, 2809, 2807, 1, 0, 0, 0, 2810, 2815, 3, 314, 157, 0, 2811, 2812, 5, 5, 0, 0, 2812, 2814, 3, 314, 157, 0, 2813, 2811, 1, 0, 0, 0, 2814, 2817, 1, 0, 0, 0, 2815, 2813, 1, 0, 0, 0, 2815, 2816, 1, 0, 0, 0, 2816, 199, 1, 0, 0, 0, 2817, 2815, 1, 0, 0, 0, 2818, 2823, 3, 202, 101, 0, 2819, 2820, 5, 4, 0, 0, 2820, 2822, 3, 202, 101, 0, 2821, 2819, 1, 0, 0, 0, 2822, 2825, 1, 0, 0, 0, 2823, 2821, 1, 0, 0, 0, 2823, 2824, 1, 0, 0, 0, 2824, 201, 1, 0, 0, 0, 2825, 2823, 1, 0, 0, 0, 2826, 2829, 3, 198, 99, 0, 2827, 2828, 5, 207, 0, 0, 2828, 2830, 3, 38, 19, 0, 2829, 2827, 1, 0, 0, 0, 2829, 2830, 1, 0, 0, 0, 2830, 203, 1, 0, 0, 0, 2831, 2832, 3, 314, 157, 0, 2832, 2833, 5, 5, 0, 0, 2833, 2835, 1, 0, 0, 0, 2834, 2831, 1, 0, 0, 0, 2834, 2835, 1, 0, 0, 0, 2835, 2836, 1, 0, 0, 0, 2836, 2837, 3, 314, 157, 0, 2837, 205, 1, 0, 0, 0, 2838, 2839, 3, 314, 157, 0, 2839, 2840, 5, 5, 0, 0, 2840, 2842, 1, 0, 0, 0, 2841, 2838, 1, 0, 0, 0, 2841, 2842, 1, 0, 0, 0, 2842, 2843, 1, 0, 0, 0, 2843, 2844, 3, 314, 157, 0, 2844, 207, 1, 0, 0, 0, 2845, 2848, 3, 74, 37, 0, 2846, 2848, 3, 220, 110, 0, 2847, 2845, 1, 0, 0, 0, 2847, 2846, 1, 0, 0, 0, 2848, 2856, 1, 0, 0, 0, 2849, 2851, 5, 20, 0, 0, 2850, 2849, 1, 0, 0, 0, 2850, 2851, 1, 0, 0, 0, 2851, 2854, 1, 0, 0, 0, 2852, 2855, 3, 314, 157, 0, 2853, 2855, 3, 168, 84, 0, 2854, 2852, 1, 0, 0, 0, 2854, 2853, 1, 0, 0, 0, 2855, 2857, 1, 0, 0, 0, 2856, 2850, 1, 0, 0, 0, 2856, 2857, 1, 0, 0, 0, 2857, 209, 1, 0, 0, 0, 2858, 2863, 3, 208, 104, 0, 2859, 2860, 5, 4, 0, 0, 2860, 2862, 3, 208, 104, 0, 2861, 2859, 1, 0, 0, 0, 2862, 2865, 1, 0, 0, 0, 2863, 2861, 1, 0, 0, 0, 2863, 2864, 1, 0, 0, 0, 2864, 211, 1, 0, 0, 0, 2865, 2863, 1, 0, 0, 0, 2866, 2867, 5, 2, 0, 0, 2867, 2872, 3, 214, 107, 0, 2868, 2869, 5, 4, 0, 0, 2869, 2871, 3, 214, 107, 0, 2870, 2868, 1, 0, 0, 0, 2871, 2874, 1, 0, 0, 0, 2872, 2870, 1, 0, 0, 0, 2872, 2873, 1, 0, 0, 0, 2873, 2875, 1, 0, 0, 0, 2874, 2872, 1, 0, 0, 0, 2875, 2876, 5, 3, 0, 0, 2876, 213, 1, 0, 0, 0, 2877, 2880, 3, 216, 108, 0, 2878, 2880, 3, 286, 143, 0, 2879, 2877, 1, 0, 0, 0, 2879, 2878, 1, 0, 0, 0, 2880, 215, 1, 0, 0, 0, 2881, 2895, 3, 312, 156, 0, 2882, 2883, 3, 318, 159, 0, 2883, 2884, 5, 2, 0, 0, 2884, 2889, 3, 218, 109, 0, 2885, 2886, 5, 4, 0, 0, 2886, 2888, 3, 218, 109, 0, 2887, 2885, 1, 0, 0, 0, 2888, 2891, 1, 0, 0, 0, 2889, 2887, 1, 0, 0, 0, 2889, 2890, 1, 0, 0, 0, 2890, 2892, 1, 0, 0, 0, 2891, 2889, 1, 0, 0, 0, 2892, 2893, 5, 3, 0, 0, 2893, 2895, 1, 0, 0, 0, 2894, 2881, 1, 0, 0, 0, 2894, 2882, 1, 0, 0, 0, 2895, 217, 1, 0, 0, 0, 2896, 2899, 3, 312, 156, 0, 2897, 2899, 3, 240, 120, 0, 2898, 2896, 1, 0, 0, 0, 2898, 2897, 1, 0, 0, 0, 2899, 219, 1, 0, 0, 0, 2900, 2901, 3, 228, 114, 0, 2901, 221, 1, 0, 0, 0, 2902, 2903, 3, 318, 159, 0, 2903, 2904, 5, 373, 0, 0, 2904, 2905, 3, 220, 110, 0, 2905, 223, 1, 0, 0, 0, 2906, 2909, 3, 220, 110, 0, 2907, 2909, 3, 222, 111, 0, 2908, 2906, 1, 0, 0, 0, 2908, 2907, 1, 0, 0, 0, 2909, 225, 1, 0, 0, 0, 2910, 2915, 3, 220, 110, 0, 2911, 2912, 5, 4, 0, 0, 2912, 2914, 3, 220, 110, 0, 2913, 2911, 1, 0, 0, 0, 2914, 2917, 1, 0, 0, 0, 2915, 2913, 1, 0, 0, 0, 2915, 2916, 1, 0, 0, 0, 2916, 227, 1, 0, 0, 0, 2917, 2915, 1, 0, 0, 0, 2918, 2919, 6, 114, -1, 0, 2919, 2920, 7, 37, 0, 0, 2920, 2931, 3, 228, 114, 5, 2921, 2922, 5, 105, 0, 0, 2922, 2923, 5, 2, 0, 0, 2923, 2924, 3, 12, 6, 0, 2924, 2925, 5, 3, 0, 0, 2925, 2931, 1, 0, 0, 0, 2926, 2928, 3, 232, 116, 0, 2927, 2929, 3, 230, 115, 0, 2928, 2927, 1, 0, 0, 0, 2928, 2929, 1, 0, 0, 0, 2929, 2931, 1, 0, 0, 0, 2930, 2918, 1, 0, 0, 0, 2930, 2921, 1, 0, 0, 0, 2930, 2926, 1, 0, 0, 0, 2931, 2940, 1, 0, 0, 0, 2932, 2933, 10, 2, 0, 0, 2933, 2934, 5, 14, 0, 0, 2934, 2939, 3, 228, 114, 3, 2935, 2936, 10, 1, 0, 0, 2936, 2937, 5, 208, 0, 0, 2937, 2939, 3, 228, 114, 2, 2938, 2932, 1, 0, 0, 0, 2938, 2935, 1, 0, 0, 0, 2939, 2942, 1, 0, 0, 0, 2940, 2938, 1, 0, 0, 0, 2940, 2941, 1, 0, 0, 0, 2941, 229, 1, 0, 0, 0, 2942, 2940, 1, 0, 0, 0, 2943, 2945, 5, 197, 0, 0, 2944, 2943, 1, 0, 0, 0, 2944, 2945, 1, 0, 0, 0, 2945, 2946, 1, 0, 0, 0, 2946, 2947, 5, 24, 0, 0, 2947, 2948, 3, 232, 116, 0, 2948, 2949, 5, 14, 0, 0, 2949, 2950, 3, 232, 116, 0, 2950, 3026, 1, 0, 0, 0, 2951, 2953, 5, 197, 0, 0, 2952, 2951, 1, 0, 0, 0, 2952, 2953, 1, 0, 0, 0, 2953, 2954, 1, 0, 0, 0, 2954, 2955, 5, 140, 0, 0, 2955, 2956, 5, 2, 0, 0, 2956, 2961, 3, 220, 110, 0, 2957, 2958, 5, 4, 0, 0, 2958, 2960, 3, 220, 110, 0, 2959, 2957, 1, 0, 0, 0, 2960, 2963, 1, 0, 0, 0, 2961, 2959, 1, 0, 0, 0, 2961, 2962, 1, 0, 0, 0, 2962, 2964, 1, 0, 0, 0, 2963, 2961, 1, 0, 0, 0, 2964, 2965, 5, 3, 0, 0, 2965, 3026, 1, 0, 0, 0, 2966, 2968, 5, 197, 0, 0, 2967, 2966, 1, 0, 0, 0, 2967, 2968, 1, 0, 0, 0, 2968, 2969, 1, 0, 0, 0, 2969, 2970, 5, 140, 0, 0, 2970, 2971, 5, 2, 0, 0, 2971, 2972, 3, 12, 6, 0, 2972, 2973, 5, 3, 0, 0, 2973, 3026, 1, 0, 0, 0, 2974, 2976, 5, 197, 0, 0, 2975, 2974, 1, 0, 0, 0, 2975, 2976, 1, 0, 0, 0, 2976, 2977, 1, 0, 0, 0, 2977, 2978, 7, 38, 0, 0, 2978, 3026, 3, 232, 116, 0, 2979, 2981, 5, 197, 0, 0, 2980, 2979, 1, 0, 0, 0, 2980, 2981, 1, 0, 0, 0, 2981, 2982, 1, 0, 0, 0, 2982, 2983, 7, 39, 0, 0, 2983, 2997, 7, 40, 0, 0, 2984, 2985, 5, 2, 0, 0, 2985, 2998, 5, 3, 0, 0, 2986, 2987, 5, 2, 0, 0, 2987, 2992, 3, 220, 110, 0, 2988, 2989, 5, 4, 0, 0, 2989, 2991, 3, 220, 110, 0, 2990, 2988, 1, 0, 0, 0, 2991, 2994, 1, 0, 0, 0, 2992, 2990, 1, 0, 0, 0, 2992, 2993, 1, 0, 0, 0, 2993, 2995, 1, 0, 0, 0, 2994, 2992, 1, 0, 0, 0, 2995, 2996, 5, 3, 0, 0, 2996, 2998, 1, 0, 0, 0, 2997, 2984, 1, 0, 0, 0, 2997, 2986, 1, 0, 0, 0, 2998, 3026, 1, 0, 0, 0, 2999, 3001, 5, 197, 0, 0, 3000, 2999, 1, 0, 0, 0, 3000, 3001, 1, 0, 0, 0, 3001, 3002, 1, 0, 0, 0, 3002, 3003, 7, 39, 0, 0, 3003, 3006, 3, 232, 116, 0, 3004, 3005, 5, 100, 0, 0, 3005, 3007, 3, 328, 164, 0, 3006, 3004, 1, 0, 0, 0, 3006, 3007, 1, 0, 0, 0, 3007, 3026, 1, 0, 0, 0, 3008, 3010, 5, 153, 0, 0, 3009, 3011, 5, 197, 0, 0, 3010, 3009, 1, 0, 0, 0, 3010, 3011, 1, 0, 0, 0, 3011, 3012, 1, 0, 0, 0, 3012, 3026, 5, 198, 0, 0, 3013, 3015, 5, 153, 0, 0, 3014, 3016, 5, 197, 0, 0, 3015, 3014, 1, 0, 0, 0, 3015, 3016, 1, 0, 0, 0, 3016, 3017, 1, 0, 0, 0, 3017, 3026, 7, 41, 0, 0, 3018, 3020, 5, 153, 0, 0, 3019, 3021, 5, 197, 0, 0, 3020, 3019, 1, 0, 0, 0, 3020, 3021, 1, 0, 0, 0, 3021, 3022, 1, 0, 0, 0, 3022, 3023, 5, 92, 0, 0, 3023, 3024, 5, 123, 0, 0, 3024, 3026, 3, 232, 116, 0, 3025, 2944, 1, 0, 0, 0, 3025, 2952, 1, 0, 0, 0, 3025, 2967, 1, 0, 0, 0, 3025, 2975, 1, 0, 0, 0, 3025, 2980, 1, 0, 0, 0, 3025, 3000, 1, 0, 0, 0, 3025, 3008, 1, 0, 0, 0, 3025, 3013, 1, 0, 0, 0, 3025, 3018, 1, 0, 0, 0, 3026, 231, 1, 0, 0, 0, 3027, 3028, 6, 116, -1, 0, 3028, 3032, 3, 236, 118, 0, 3029, 3030, 7, 42, 0, 0, 3030, 3032, 3, 232, 116, 7, 3031, 3027, 1, 0, 0, 0, 3031, 3029, 1, 0, 0, 0, 3032, 3054, 1, 0, 0, 0, 3033, 3034, 10, 6, 0, 0, 3034, 3035, 7, 43, 0, 0, 3035, 3053, 3, 232, 116, 7, 3036, 3037, 10, 5, 0, 0, 3037, 3038, 7, 44, 0, 0, 3038, 3053, 3, 232, 116, 6, 3039, 3040, 10, 4, 0, 0, 3040, 3041, 5, 367, 0, 0, 3041, 3053, 3, 232, 116, 5, 3042, 3043, 10, 3, 0, 0, 3043, 3044, 5, 370, 0, 0, 3044, 3053, 3, 232, 116, 4, 3045, 3046, 10, 2, 0, 0, 3046, 3047, 5, 368, 0, 0, 3047, 3053, 3, 232, 116, 3, 3048, 3049, 10, 1, 0, 0, 3049, 3050, 3, 242, 121, 0, 3050, 3051, 3, 232, 116, 2, 3051, 3053, 1, 0, 0, 0, 3052, 3033, 1, 0, 0, 0, 3052, 3036, 1, 0, 0, 0, 3052, 3039, 1, 0, 0, 0, 3052, 3042, 1, 0, 0, 0, 3052, 3045, 1, 0, 0, 0, 3052, 3048, 1, 0, 0, 0, 3053, 3056, 1, 0, 0, 0, 3054, 3052, 1, 0, 0, 0, 3054, 3055, 1, 0, 0, 0, 3055, 233, 1, 0, 0, 0, 3056, 3054, 1, 0, 0, 0, 3057, 3058, 7, 45, 0, 0, 3058, 235, 1, 0, 0, 0, 3059, 3060, 6, 118, -1, 0, 3060, 3309, 7, 46, 0, 0, 3061, 3062, 7, 47, 0, 0, 3062, 3065, 5, 2, 0, 0, 3063, 3066, 3, 234, 117, 0, 3064, 3066, 3, 328, 164, 0, 3065, 3063, 1, 0, 0, 0, 3065, 3064, 1, 0, 0, 0, 3066, 3067, 1, 0, 0, 0, 3067, 3068, 5, 4, 0, 0, 3068, 3069, 3, 232, 116, 0, 3069, 3070, 5, 4, 0, 0, 3070, 3071, 3, 232, 116, 0, 3071, 3072, 5, 3, 0, 0, 3072, 3309, 1, 0, 0, 0, 3073, 3074, 7, 48, 0, 0, 3074, 3077, 5, 2, 0, 0, 3075, 3078, 3, 234, 117, 0, 3076, 3078, 3, 328, 164, 0, 3077, 3075, 1, 0, 0, 0, 3077, 3076, 1, 0, 0, 0, 3078, 3079, 1, 0, 0, 0, 3079, 3080, 5, 4, 0, 0, 3080, 3081, 3, 232, 116, 0, 3081, 3082, 5, 4, 0, 0, 3082, 3083, 3, 232, 116, 0, 3083, 3084, 5, 3, 0, 0, 3084, 3309, 1, 0, 0, 0, 3085, 3087, 5, 35, 0, 0, 3086, 3088, 3, 296, 148, 0, 3087, 3086, 1, 0, 0, 0, 3088, 3089, 1, 0, 0, 0, 3089, 3087, 1, 0, 0, 0, 3089, 3090, 1, 0, 0, 0, 3090, 3093, 1, 0, 0, 0, 3091, 3092, 5, 97, 0, 0, 3092, 3094, 3, 220, 110, 0, 3093, 3091, 1, 0, 0, 0, 3093, 3094, 1, 0, 0, 0, 3094, 3095, 1, 0, 0, 0, 3095, 3096, 5, 99, 0, 0, 3096, 3309, 1, 0, 0, 0, 3097, 3098, 5, 35, 0, 0, 3098, 3100, 3, 220, 110, 0, 3099, 3101, 3, 296, 148, 0, 3100, 3099, 1, 0, 0, 0, 3101, 3102, 1, 0, 0, 0, 3102, 3100, 1, 0, 0, 0, 3102, 3103, 1, 0, 0, 0, 3103, 3106, 1, 0, 0, 0, 3104, 3105, 5, 97, 0, 0, 3105, 3107, 3, 220, 110, 0, 3106, 3104, 1, 0, 0, 0, 3106, 3107, 1, 0, 0, 0, 3107, 3108, 1, 0, 0, 0, 3108, 3109, 5, 99, 0, 0, 3109, 3309, 1, 0, 0, 0, 3110, 3111, 7, 49, 0, 0, 3111, 3112, 5, 2, 0, 0, 3112, 3113, 3, 220, 110, 0, 3113, 3114, 5, 20, 0, 0, 3114, 3115, 3, 270, 135, 0, 3115, 3116, 5, 3, 0, 0, 3116, 3309, 1, 0, 0, 0, 3117, 3118, 5, 286, 0, 0, 3118, 3127, 5, 2, 0, 0, 3119, 3124, 3, 208, 104, 0, 3120, 3121, 5, 4, 0, 0, 3121, 3123, 3, 208, 104, 0, 3122, 3120, 1, 0, 0, 0, 3123, 3126, 1, 0, 0, 0, 3124, 3122, 1, 0, 0, 0, 3124, 3125, 1, 0, 0, 0, 3125, 3128, 1, 0, 0, 0, 3126, 3124, 1, 0, 0, 0, 3127, 3119, 1, 0, 0, 0, 3127, 3128, 1, 0, 0, 0, 3128, 3129, 1, 0, 0, 0, 3129, 3309, 5, 3, 0, 0, 3130, 3131, 5, 116, 0, 0, 3131, 3132, 5, 2, 0, 0, 3132, 3135, 3, 220, 110, 0, 3133, 3134, 5, 138, 0, 0, 3134, 3136, 5, 199, 0, 0, 3135, 3133, 1, 0, 0, 0, 3135, 3136, 1, 0, 0, 0, 3136, 3137, 1, 0, 0, 0, 3137, 3138, 5, 3, 0, 0, 3138, 3309, 1, 0, 0, 0, 3139, 3140, 5, 17, 0, 0, 3140, 3141, 5, 2, 0, 0, 3141, 3144, 3, 220, 110, 0, 3142, 3143, 5, 138, 0, 0, 3143, 3145, 5, 199, 0, 0, 3144, 3142, 1, 0, 0, 0, 3144, 3145, 1, 0, 0, 0, 3145, 3146, 1, 0, 0, 0, 3146, 3147, 5, 3, 0, 0, 3147, 3309, 1, 0, 0, 0, 3148, 3149, 5, 157, 0, 0, 3149, 3150, 5, 2, 0, 0, 3150, 3153, 3, 220, 110, 0, 3151, 3152, 5, 138, 0, 0, 3152, 3154, 5, 199, 0, 0, 3153, 3151, 1, 0, 0, 0, 3153, 3154, 1, 0, 0, 0, 3154, 3155, 1, 0, 0, 0, 3155, 3156, 5, 3, 0, 0, 3156, 3309, 1, 0, 0, 0, 3157, 3158, 5, 225, 0, 0, 3158, 3159, 5, 2, 0, 0, 3159, 3160, 3, 232, 116, 0, 3160, 3161, 5, 140, 0, 0, 3161, 3162, 3, 232, 116, 0, 3162, 3163, 5, 3, 0, 0, 3163, 3309, 1, 0, 0, 0, 3164, 3309, 3, 240, 120, 0, 3165, 3309, 5, 363, 0, 0, 3166, 3167, 3, 312, 156, 0, 3167, 3168, 5, 5, 0, 0, 3168, 3169, 5, 363, 0, 0, 3169, 3309, 1, 0, 0, 0, 3170, 3171, 5, 2, 0, 0, 3171, 3174, 3, 208, 104, 0, 3172, 3173, 5, 4, 0, 0, 3173, 3175, 3, 208, 104, 0, 3174, 3172, 1, 0, 0, 0, 3175, 3176, 1, 0, 0, 0, 3176, 3174, 1, 0, 0, 0, 3176, 3177, 1, 0, 0, 0, 3177, 3178, 1, 0, 0, 0, 3178, 3179, 5, 3, 0, 0, 3179, 3309, 1, 0, 0, 0, 3180, 3181, 5, 2, 0, 0, 3181, 3182, 3, 12, 6, 0, 3182, 3183, 5, 3, 0, 0, 3183, 3309, 1, 0, 0, 0, 3184, 3185, 5, 136, 0, 0, 3185, 3186, 5, 2, 0, 0, 3186, 3187, 3, 220, 110, 0, 3187, 3188, 5, 3, 0, 0, 3188, 3309, 1, 0, 0, 0, 3189, 3190, 3, 308, 154, 0, 3190, 3202, 5, 2, 0, 0, 3191, 3193, 3, 154, 77, 0, 3192, 3191, 1, 0, 0, 0, 3192, 3193, 1, 0, 0, 0, 3193, 3194, 1, 0, 0, 0, 3194, 3199, 3, 224, 112, 0, 3195, 3196, 5, 4, 0, 0, 3196, 3198, 3, 224, 112, 0, 3197, 3195, 1, 0, 0, 0, 3198, 3201, 1, 0, 0, 0, 3199, 3197, 1, 0, 0, 0, 3199, 3200, 1, 0, 0, 0, 3200, 3203, 1, 0, 0, 0, 3201, 3199, 1, 0, 0, 0, 3202, 3192, 1, 0, 0, 0, 3202, 3203, 1, 0, 0, 0, 3203, 3204, 1, 0, 0, 0, 3204, 3211, 5, 3, 0, 0, 3205, 3206, 5, 114, 0, 0, 3206, 3207, 5, 2, 0, 0, 3207, 3208, 5, 344, 0, 0, 3208, 3209, 3, 228, 114, 0, 3209, 3210, 5, 3, 0, 0, 3210, 3212, 1, 0, 0, 0, 3211, 3205, 1, 0, 0, 0, 3211, 3212, 1, 0, 0, 0, 3212, 3215, 1, 0, 0, 0, 3213, 3214, 7, 50, 0, 0, 3214, 3216, 5, 199, 0, 0, 3215, 3213, 1, 0, 0, 0, 3215, 3216, 1, 0, 0, 0, 3216, 3219, 1, 0, 0, 0, 3217, 3218, 5, 213, 0, 0, 3218, 3220, 3, 300, 150, 0, 3219, 3217, 1, 0, 0, 0, 3219, 3220, 1, 0, 0, 0, 3220, 3309, 1, 0, 0, 0, 3221, 3222, 3, 318, 159, 0, 3222, 3223, 5, 372, 0, 0, 3223, 3224, 3, 220, 110, 0, 3224, 3309, 1, 0, 0, 0, 3225, 3226, 5, 2, 0, 0, 3226, 3229, 3, 318, 159, 0, 3227, 3228, 5, 4, 0, 0, 3228, 3230, 3, 318, 159, 0, 3229, 3227, 1, 0, 0, 0, 3230, 3231, 1, 0, 0, 0, 3231, 3229, 1, 0, 0, 0, 3231, 3232, 1, 0, 0, 0, 3232, 3233, 1, 0, 0, 0, 3233, 3234, 5, 3, 0, 0, 3234, 3235, 5, 372, 0, 0, 3235, 3236, 3, 220, 110, 0, 3236, 3309, 1, 0, 0, 0, 3237, 3309, 3, 318, 159, 0, 3238, 3239, 5, 2, 0, 0, 3239, 3240, 3, 220, 110, 0, 3240, 3241, 5, 3, 0, 0, 3241, 3309, 1, 0, 0, 0, 3242, 3243, 5, 110, 0, 0, 3243, 3244, 5, 2, 0, 0, 3244, 3245, 3, 318, 159, 0, 3245, 3246, 5, 123, 0, 0, 3246, 3247, 3, 232, 116, 0, 3247, 3248, 5, 3, 0, 0, 3248, 3309, 1, 0, 0, 0, 3249, 3250, 7, 51, 0, 0, 3250, 3251, 5, 2, 0, 0, 3251, 3252, 3, 232, 116, 0, 3252, 3253, 7, 52, 0, 0, 3253, 3256, 3, 232, 116, 0, 3254, 3255, 7, 53, 0, 0, 3255, 3257, 3, 232, 116, 0, 3256, 3254, 1, 0, 0, 0, 3256, 3257, 1, 0, 0, 0, 3257, 3258, 1, 0, 0, 0, 3258, 3259, 5, 3, 0, 0, 3259, 3309, 1, 0, 0, 0, 3260, 3261, 5, 315, 0, 0, 3261, 3263, 5, 2, 0, 0, 3262, 3264, 7, 54, 0, 0, 3263, 3262, 1, 0, 0, 0, 3263, 3264, 1, 0, 0, 0, 3264, 3266, 1, 0, 0, 0, 3265, 3267, 3, 232, 116, 0, 3266, 3265, 1, 0, 0, 0, 3266, 3267, 1, 0, 0, 0, 3267, 3268, 1, 0, 0, 0, 3268, 3269, 5, 123, 0, 0, 3269, 3270, 3, 232, 116, 0, 3270, 3271, 5, 3, 0, 0, 3271, 3309, 1, 0, 0, 0, 3272, 3273, 5, 215, 0, 0, 3273, 3274, 5, 2, 0, 0, 3274, 3275, 3, 232, 116, 0, 3275, 3276, 5, 224, 0, 0, 3276, 3277, 3, 232, 116, 0, 3277, 3278, 5, 123, 0, 0, 3278, 3281, 3, 232, 116, 0, 3279, 3280, 5, 119, 0, 0, 3280, 3282, 3, 232, 116, 0, 3281, 3279, 1, 0, 0, 0, 3281, 3282, 1, 0, 0, 0, 3282, 3283, 1, 0, 0, 0, 3283, 3284, 5, 3, 0, 0, 3284, 3309, 1, 0, 0, 0, 3285, 3286, 7, 55, 0, 0, 3286, 3287, 5, 2, 0, 0, 3287, 3288, 3, 232, 116, 0, 3288, 3289, 5, 3, 0, 0, 3289, 3290, 5, 347, 0, 0, 3290, 3291, 5, 130, 0, 0, 3291, 3292, 5, 2, 0, 0, 3292, 3293, 5, 209, 0, 0, 3293, 3294, 5, 31, 0, 0, 3294, 3295, 3, 88, 44, 0, 3295, 3302, 5, 3, 0, 0, 3296, 3297, 5, 114, 0, 0, 3297, 3298, 5, 2, 0, 0, 3298, 3299, 5, 344, 0, 0, 3299, 3300, 3, 228, 114, 0, 3300, 3301, 5, 3, 0, 0, 3301, 3303, 1, 0, 0, 0, 3302, 3296, 1, 0, 0, 0, 3302, 3303, 1, 0, 0, 0, 3303, 3306, 1, 0, 0, 0, 3304, 3305, 5, 213, 0, 0, 3305, 3307, 3, 300, 150, 0, 3306, 3304, 1, 0, 0, 0, 3306, 3307, 1, 0, 0, 0, 3307, 3309, 1, 0, 0, 0, 3308, 3059, 1, 0, 0, 0, 3308, 3061, 1, 0, 0, 0, 3308, 3073, 1, 0, 0, 0, 3308, 3085, 1, 0, 0, 0, 3308, 3097, 1, 0, 0, 0, 3308, 3110, 1, 0, 0, 0, 3308, 3117, 1, 0, 0, 0, 3308, 3130, 1, 0, 0, 0, 3308, 3139, 1, 0, 0, 0, 3308, 3148, 1, 0, 0, 0, 3308, 3157, 1, 0, 0, 0, 3308, 3164, 1, 0, 0, 0, 3308, 3165, 1, 0, 0, 0, 3308, 3166, 1, 0, 0, 0, 3308, 3170, 1, 0, 0, 0, 3308, 3180, 1, 0, 0, 0, 3308, 3184, 1, 0, 0, 0, 3308, 3189, 1, 0, 0, 0, 3308, 3221, 1, 0, 0, 0, 3308, 3225, 1, 0, 0, 0, 3308, 3237, 1, 0, 0, 0, 3308, 3238, 1, 0, 0, 0, 3308, 3242, 1, 0, 0, 0, 3308, 3249, 1, 0, 0, 0, 3308, 3260, 1, 0, 0, 0, 3308, 3272, 1, 0, 0, 0, 3308, 3285, 1, 0, 0, 0, 3309, 3320, 1, 0, 0, 0, 3310, 3311, 10, 9, 0, 0, 3311, 3312, 5, 6, 0, 0, 3312, 3313, 3, 232, 116, 0, 3313, 3314, 5, 7, 0, 0, 3314, 3319, 1, 0, 0, 0, 3315, 3316, 10, 7, 0, 0, 3316, 3317, 5, 5, 0, 0, 3317, 3319, 3, 318, 159, 0, 3318, 3310, 1, 0, 0, 0, 3318, 3315, 1, 0, 0, 0, 3319, 3322, 1, 0, 0, 0, 3320, 3318, 1, 0, 0, 0, 3320, 3321, 1, 0, 0, 0, 3321, 237, 1, 0, 0, 0, 3322, 3320, 1, 0, 0, 0, 3323, 3331, 5, 71, 0, 0, 3324, 3331, 5, 303, 0, 0, 3325, 3331, 5, 304, 0, 0, 3326, 3331, 5, 305, 0, 0, 3327, 3331, 5, 149, 0, 0, 3328, 3331, 5, 133, 0, 0, 3329, 3331, 3, 318, 159, 0, 3330, 3323, 1, 0, 0, 0, 3330, 3324, 1, 0, 0, 0, 3330, 3325, 1, 0, 0, 0, 3330, 3326, 1, 0, 0, 0, 3330, 3327, 1, 0, 0, 0, 3330, 3328, 1, 0, 0, 0, 3330, 3329, 1, 0, 0, 0, 3331, 239, 1, 0, 0, 0, 3332, 3348, 5, 198, 0, 0, 3333, 3348, 5, 376, 0, 0, 3334, 3335, 5, 371, 0, 0, 3335, 3348, 3, 318, 159, 0, 3336, 3348, 3, 250, 125, 0, 3337, 3338, 3, 238, 119, 0, 3338, 3339, 3, 328, 164, 0, 3339, 3348, 1, 0, 0, 0, 3340, 3348, 3, 324, 162, 0, 3341, 3348, 3, 248, 124, 0, 3342, 3344, 3, 328, 164, 0, 3343, 3342, 1, 0, 0, 0, 3344, 3345, 1, 0, 0, 0, 3345, 3343, 1, 0, 0, 0, 3345, 3346, 1, 0, 0, 0, 3346, 3348, 1, 0, 0, 0, 3347, 3332, 1, 0, 0, 0, 3347, 3333, 1, 0, 0, 0, 3347, 3334, 1, 0, 0, 0, 3347, 3336, 1, 0, 0, 0, 3347, 3337, 1, 0, 0, 0, 3347, 3340, 1, 0, 0, 0, 3347, 3341, 1, 0, 0, 0, 3347, 3343, 1, 0, 0, 0, 3348, 241, 1, 0, 0, 0, 3349, 3350, 7, 56, 0, 0, 3350, 243, 1, 0, 0, 0, 3351, 3352, 7, 57, 0, 0, 3352, 245, 1, 0, 0, 0, 3353, 3354, 7, 58, 0, 0, 3354, 247, 1, 0, 0, 0, 3355, 3356, 7, 59, 0, 0, 3356, 249, 1, 0, 0, 0, 3357, 3360, 5, 149, 0, 0, 3358, 3361, 3, 252, 126, 0, 3359, 3361, 3, 256, 128, 0, 3360, 3358, 1, 0, 0, 0, 3360, 3359, 1, 0, 0, 0, 3361, 251, 1, 0, 0, 0, 3362, 3364, 3, 254, 127, 0, 3363, 3365, 3, 258, 129, 0, 3364, 3363, 1, 0, 0, 0, 3364, 3365, 1, 0, 0, 0, 3365, 253, 1, 0, 0, 0, 3366, 3367, 3, 260, 130, 0, 3367, 3368, 3, 262, 131, 0, 3368, 3370, 1, 0, 0, 0, 3369, 3366, 1, 0, 0, 0, 3370, 3371, 1, 0, 0, 0, 3371, 3369, 1, 0, 0, 0, 3371, 3372, 1, 0, 0, 0, 3372, 255, 1, 0, 0, 0, 3373, 3376, 3, 258, 129, 0, 3374, 3377, 3, 254, 127, 0, 3375, 3377, 3, 258, 129, 0, 3376, 3374, 1, 0, 0, 0, 3376, 3375, 1, 0, 0, 0, 3376, 3377, 1, 0, 0, 0, 3377, 257, 1, 0, 0, 0, 3378, 3379, 3, 260, 130, 0, 3379, 3380, 3, 264, 132, 0, 3380, 3381, 5, 309, 0, 0, 3381, 3382, 3, 264, 132, 0, 3382, 259, 1, 0, 0, 0, 3383, 3385, 7, 60, 0, 0, 3384, 3383, 1, 0, 0, 0, 3384, 3385, 1, 0, 0, 0, 3385, 3389, 1, 0, 0, 0, 3386, 3390, 5, 382, 0, 0, 3387, 3390, 5, 384, 0, 0, 3388, 3390, 3, 328, 164, 0, 3389, 3386, 1, 0, 0, 0, 3389, 3387, 1, 0, 0, 0, 3389, 3388, 1, 0, 0, 0, 3390, 261, 1, 0, 0, 0, 3391, 3392, 7, 61, 0, 0, 3392, 263, 1, 0, 0, 0, 3393, 3394, 7, 62, 0, 0, 3394, 265, 1, 0, 0, 0, 3395, 3399, 5, 116, 0, 0, 3396, 3397, 5, 9, 0, 0, 3397, 3399, 3, 314, 157, 0, 3398, 3395, 1, 0, 0, 0, 3398, 3396, 1, 0, 0, 0, 3399, 267, 1, 0, 0, 0, 3400, 3431, 5, 27, 0, 0, 3401, 3431, 5, 308, 0, 0, 3402, 3431, 5, 32, 0, 0, 3403, 3431, 5, 276, 0, 0, 3404, 3431, 5, 272, 0, 0, 3405, 3431, 5, 150, 0, 0, 3406, 3431, 5, 151, 0, 0, 3407, 3431, 5, 25, 0, 0, 3408, 3431, 5, 174, 0, 0, 3409, 3431, 5, 117, 0, 0, 3410, 3431, 5, 234, 0, 0, 3411, 3431, 5, 95, 0, 0, 3412, 3431, 5, 71, 0, 0, 3413, 3431, 5, 303, 0, 0, 3414, 3431, 5, 305, 0, 0, 3415, 3431, 5, 304, 0, 0, 3416, 3431, 5, 285, 0, 0, 3417, 3431, 5, 41, 0, 0, 3418, 3431, 5, 40, 0, 0, 3419, 3431, 5, 334, 0, 0, 3420, 3431, 5, 26, 0, 0, 3421, 3431, 5, 80, 0, 0, 3422, 3431, 5, 79, 0, 0, 3423, 3431, 5, 200, 0, 0, 3424, 3431, 5, 340, 0, 0, 3425, 3431, 5, 149, 0, 0, 3426, 3431, 5, 19, 0, 0, 3427, 3431, 5, 286, 0, 0, 3428, 3431, 5, 177, 0, 0, 3429, 3431, 3, 318, 159, 0, 3430, 3400, 1, 0, 0, 0, 3430, 3401, 1, 0, 0, 0, 3430, 3402, 1, 0, 0, 0, 3430, 3403, 1, 0, 0, 0, 3430, 3404, 1, 0, 0, 0, 3430, 3405, 1, 0, 0, 0, 3430, 3406, 1, 0, 0, 0, 3430, 3407, 1, 0, 0, 0, 3430, 3408, 1, 0, 0, 0, 3430, 3409, 1, 0, 0, 0, 3430, 3410, 1, 0, 0, 0, 3430, 3411, 1, 0, 0, 0, 3430, 3412, 1, 0, 0, 0, 3430, 3413, 1, 0, 0, 0, 3430, 3414, 1, 0, 0, 0, 3430, 3415, 1, 0, 0, 0, 3430, 3416, 1, 0, 0, 0, 3430, 3417, 1, 0, 0, 0, 3430, 3418, 1, 0, 0, 0, 3430, 3419, 1, 0, 0, 0, 3430, 3420, 1, 0, 0, 0, 3430, 3421, 1, 0, 0, 0, 3430, 3422, 1, 0, 0, 0, 3430, 3423, 1, 0, 0, 0, 3430, 3424, 1, 0, 0, 0, 3430, 3425, 1, 0, 0, 0, 3430, 3426, 1, 0, 0, 0, 3430, 3427, 1, 0, 0, 0, 3430, 3428, 1, 0, 0, 0, 3430, 3429, 1, 0, 0, 0, 3431, 269, 1, 0, 0, 0, 3432, 3433, 5, 19, 0, 0, 3433, 3434, 5, 356, 0, 0, 3434, 3435, 3, 270, 135, 0, 3435, 3436, 5, 358, 0, 0, 3436, 3486, 1, 0, 0, 0, 3437, 3438, 5, 177, 0, 0, 3438, 3439, 5, 356, 0, 0, 3439, 3440, 3, 270, 135, 0, 3440, 3441, 5, 4, 0, 0, 3441, 3442, 3, 270, 135, 0, 3442, 3443, 5, 358, 0, 0, 3443, 3486, 1, 0, 0, 0, 3444, 3458, 5, 286, 0, 0, 3445, 3454, 5, 356, 0, 0, 3446, 3451, 3, 294, 147, 0, 3447, 3448, 5, 4, 0, 0, 3448, 3450, 3, 294, 147, 0, 3449, 3447, 1, 0, 0, 0, 3450, 3453, 1, 0, 0, 0, 3451, 3449, 1, 0, 0, 0, 3451, 3452, 1, 0, 0, 0, 3452, 3455, 1, 0, 0, 0, 3453, 3451, 1, 0, 0, 0, 3454, 3446, 1, 0, 0, 0, 3454, 3455, 1, 0, 0, 0, 3455, 3456, 1, 0, 0, 0, 3456, 3459, 5, 358, 0, 0, 3457, 3459, 5, 354, 0, 0, 3458, 3445, 1, 0, 0, 0, 3458, 3457, 1, 0, 0, 0, 3459, 3486, 1, 0, 0, 0, 3460, 3461, 5, 149, 0, 0, 3461, 3464, 7, 63, 0, 0, 3462, 3463, 5, 309, 0, 0, 3463, 3465, 5, 186, 0, 0, 3464, 3462, 1, 0, 0, 0, 3464, 3465, 1, 0, 0, 0, 3465, 3486, 1, 0, 0, 0, 3466, 3467, 5, 149, 0, 0, 3467, 3470, 7, 64, 0, 0, 3468, 3469, 5, 309, 0, 0, 3469, 3471, 7, 65, 0, 0, 3470, 3468, 1, 0, 0, 0, 3470, 3471, 1, 0, 0, 0, 3471, 3486, 1, 0, 0, 0, 3472, 3483, 3, 268, 134, 0, 3473, 3474, 5, 2, 0, 0, 3474, 3479, 5, 382, 0, 0, 3475, 3476, 5, 4, 0, 0, 3476, 3478, 5, 382, 0, 0, 3477, 3475, 1, 0, 0, 0, 3478, 3481, 1, 0, 0, 0, 3479, 3477, 1, 0, 0, 0, 3479, 3480, 1, 0, 0, 0, 3480, 3482, 1, 0, 0, 0, 3481, 3479, 1, 0, 0, 0, 3482, 3484, 5, 3, 0, 0, 3483, 3473, 1, 0, 0, 0, 3483, 3484, 1, 0, 0, 0, 3484, 3486, 1, 0, 0, 0, 3485, 3432, 1, 0, 0, 0, 3485, 3437, 1, 0, 0, 0, 3485, 3444, 1, 0, 0, 0, 3485, 3460, 1, 0, 0, 0, 3485, 3466, 1, 0, 0, 0, 3485, 3472, 1, 0, 0, 0, 3486, 271, 1, 0, 0, 0, 3487, 3492, 3, 274, 137, 0, 3488, 3489, 5, 4, 0, 0, 3489, 3491, 3, 274, 137, 0, 3490, 3488, 1, 0, 0, 0, 3491, 3494, 1, 0, 0, 0, 3492, 3490, 1, 0, 0, 0, 3492, 3493, 1, 0, 0, 0, 3493, 273, 1, 0, 0, 0, 3494, 3492, 1, 0, 0, 0, 3495, 3496, 3, 78, 39, 0, 3496, 3500, 3, 270, 135, 0, 3497, 3499, 3, 280, 140, 0, 3498, 3497, 1, 0, 0, 0, 3499, 3502, 1, 0, 0, 0, 3500, 3498, 1, 0, 0, 0, 3500, 3501, 1, 0, 0, 0, 3501, 275, 1, 0, 0, 0, 3502, 3500, 1, 0, 0, 0, 3503, 3508, 3, 278, 139, 0, 3504, 3505, 5, 4, 0, 0, 3505, 3507, 3, 278, 139, 0, 3506, 3504, 1, 0, 0, 0, 3507, 3510, 1, 0, 0, 0, 3508, 3506, 1, 0, 0, 0, 3508, 3509, 1, 0, 0, 0, 3509, 277, 1, 0, 0, 0, 3510, 3508, 1, 0, 0, 0, 3511, 3512, 3, 74, 37, 0, 3512, 3516, 3, 270, 135, 0, 3513, 3515, 3, 280, 140, 0, 3514, 3513, 1, 0, 0, 0, 3515, 3518, 1, 0, 0, 0, 3516, 3514, 1, 0, 0, 0, 3516, 3517, 1, 0, 0, 0, 3517, 279, 1, 0, 0, 0, 3518, 3516, 1, 0, 0, 0, 3519, 3520, 5, 197, 0, 0, 3520, 3527, 5, 198, 0, 0, 3521, 3522, 5, 82, 0, 0, 3522, 3527, 3, 220, 110, 0, 3523, 3524, 5, 51, 0, 0, 3524, 3527, 3, 328, 164, 0, 3525, 3527, 3, 266, 133, 0, 3526, 3519, 1, 0, 0, 0, 3526, 3521, 1, 0, 0, 0, 3526, 3523, 1, 0, 0, 0, 3526, 3525, 1, 0, 0, 0, 3527, 281, 1, 0, 0, 0, 3528, 3529, 7, 66, 0, 0, 3529, 3530, 3, 220, 110, 0, 3530, 283, 1, 0, 0, 0, 3531, 3536, 3, 286, 143, 0, 3532, 3533, 5, 4, 0, 0, 3533, 3535, 3, 286, 143, 0, 3534, 3532, 1, 0, 0, 0, 3535, 3538, 1, 0, 0, 0, 3536, 3534, 1, 0, 0, 0, 3536, 3537, 1, 0, 0, 0, 3537, 285, 1, 0, 0, 0, 3538, 3536, 1, 0, 0, 0, 3539, 3540, 3, 314, 157, 0, 3540, 3543, 3, 270, 135, 0, 3541, 3542, 5, 197, 0, 0, 3542, 3544, 5, 198, 0, 0, 3543, 3541, 1, 0, 0, 0, 3543, 3544, 1, 0, 0, 0, 3544, 3547, 1, 0, 0, 0, 3545, 3546, 5, 51, 0, 0, 3546, 3548, 3, 328, 164, 0, 3547, 3545, 1, 0, 0, 0, 3547, 3548, 1, 0, 0, 0, 3548, 287, 1, 0, 0, 0, 3549, 3554, 3, 290, 145, 0, 3550, 3551, 5, 4, 0, 0, 3551, 3553, 3, 290, 145, 0, 3552, 3550, 1, 0, 0, 0, 3553, 3556, 1, 0, 0, 0, 3554, 3552, 1, 0, 0, 0, 3554, 3555, 1, 0, 0, 0, 3555, 289, 1, 0, 0, 0, 3556, 3554, 1, 0, 0, 0, 3557, 3558, 3, 78, 39, 0, 3558, 3562, 3, 270, 135, 0, 3559, 3561, 3, 292, 146, 0, 3560, 3559, 1, 0, 0, 0, 3561, 3564, 1, 0, 0, 0, 3562, 3560, 1, 0, 0, 0, 3562, 3563, 1, 0, 0, 0, 3563, 291, 1, 0, 0, 0, 3564, 3562, 1, 0, 0, 0, 3565, 3566, 5, 197, 0, 0, 3566, 3579, 5, 198, 0, 0, 3567, 3568, 5, 82, 0, 0, 3568, 3579, 3, 220, 110, 0, 3569, 3570, 5, 127, 0, 0, 3570, 3571, 5, 12, 0, 0, 3571, 3572, 5, 20, 0, 0, 3572, 3573, 5, 2, 0, 0, 3573, 3574, 3, 220, 110, 0, 3574, 3575, 5, 3, 0, 0, 3575, 3579, 1, 0, 0, 0, 3576, 3577, 5, 51, 0, 0, 3577, 3579, 3, 328, 164, 0, 3578, 3565, 1, 0, 0, 0, 3578, 3567, 1, 0, 0, 0, 3578, 3569, 1, 0, 0, 0, 3578, 3576, 1, 0, 0, 0, 3579, 293, 1, 0, 0, 0, 3580, 3582, 3, 318, 159, 0, 3581, 3583, 5, 371, 0, 0, 3582, 3581, 1, 0, 0, 0, 3582, 3583, 1, 0, 0, 0, 3583, 3584, 1, 0, 0, 0, 3584, 3587, 3, 270, 135, 0, 3585, 3586, 5, 197, 0, 0, 3586, 3588, 5, 198, 0, 0, 3587, 3585, 1, 0, 0, 0, 3587, 3588, 1, 0, 0, 0, 3588, 3591, 1, 0, 0, 0, 3589, 3590, 5, 51, 0, 0, 3590, 3592, 3, 328, 164, 0, 3591, 3589, 1, 0, 0, 0, 3591, 3592, 1, 0, 0, 0, 3592, 295, 1, 0, 0, 0, 3593, 3594, 5, 343, 0, 0, 3594, 3595, 3, 220, 110, 0, 3595, 3596, 5, 300, 0, 0, 3596, 3597, 3, 220, 110, 0, 3597, 297, 1, 0, 0, 0, 3598, 3599, 5, 345, 0, 0, 3599, 3600, 3, 314, 157, 0, 3600, 3601, 5, 20, 0, 0, 3601, 3609, 3, 300, 150, 0, 3602, 3603, 5, 4, 0, 0, 3603, 3604, 3, 314, 157, 0, 3604, 3605, 5, 20, 0, 0, 3605, 3606, 3, 300, 150, 0, 3606, 3608, 1, 0, 0, 0, 3607, 3602, 1, 0, 0, 0, 3608, 3611, 1, 0, 0, 0, 3609, 3607, 1, 0, 0, 0, 3609, 3610, 1, 0, 0, 0, 3610, 299, 1, 0, 0, 0, 3611, 3609, 1, 0, 0, 0, 3612, 3659, 3, 314, 157, 0, 3613, 3614, 5, 2, 0, 0, 3614, 3615, 3, 314, 157, 0, 3615, 3616, 5, 3, 0, 0, 3616, 3659, 1, 0, 0, 0, 3617, 3652, 5, 2, 0, 0, 3618, 3619, 5, 44, 0, 0, 3619, 3620, 5, 31, 0, 0, 3620, 3625, 3, 220, 110, 0, 3621, 3622, 5, 4, 0, 0, 3622, 3624, 3, 220, 110, 0, 3623, 3621, 1, 0, 0, 0, 3624, 3627, 1, 0, 0, 0, 3625, 3623, 1, 0, 0, 0, 3625, 3626, 1, 0, 0, 0, 3626, 3653, 1, 0, 0, 0, 3627, 3625, 1, 0, 0, 0, 3628, 3629, 7, 35, 0, 0, 3629, 3630, 5, 31, 0, 0, 3630, 3635, 3, 220, 110, 0, 3631, 3632, 5, 4, 0, 0, 3632, 3634, 3, 220, 110, 0, 3633, 3631, 1, 0, 0, 0, 3634, 3637, 1, 0, 0, 0, 3635, 3633, 1, 0, 0, 0, 3635, 3636, 1, 0, 0, 0, 3636, 3639, 1, 0, 0, 0, 3637, 3635, 1, 0, 0, 0, 3638, 3628, 1, 0, 0, 0, 3638, 3639, 1, 0, 0, 0, 3639, 3650, 1, 0, 0, 0, 3640, 3641, 7, 36, 0, 0, 3641, 3642, 5, 31, 0, 0, 3642, 3647, 3, 88, 44, 0, 3643, 3644, 5, 4, 0, 0, 3644, 3646, 3, 88, 44, 0, 3645, 3643, 1, 0, 0, 0, 3646, 3649, 1, 0, 0, 0, 3647, 3645, 1, 0, 0, 0, 3647, 3648, 1, 0, 0, 0, 3648, 3651, 1, 0, 0, 0, 3649, 3647, 1, 0, 0, 0, 3650, 3640, 1, 0, 0, 0, 3650, 3651, 1, 0, 0, 0, 3651, 3653, 1, 0, 0, 0, 3652, 3618, 1, 0, 0, 0, 3652, 3638, 1, 0, 0, 0, 3653, 3655, 1, 0, 0, 0, 3654, 3656, 3, 302, 151, 0, 3655, 3654, 1, 0, 0, 0, 3655, 3656, 1, 0, 0, 0, 3656, 3657, 1, 0, 0, 0, 3657, 3659, 5, 3, 0, 0, 3658, 3612, 1, 0, 0, 0, 3658, 3613, 1, 0, 0, 0, 3658, 3617, 1, 0, 0, 0, 3659, 301, 1, 0, 0, 0, 3660, 3661, 7, 67, 0, 0, 3661, 3669, 3, 304, 152, 0, 3662, 3663, 7, 67, 0, 0, 3663, 3664, 5, 24, 0, 0, 3664, 3665, 3, 304, 152, 0, 3665, 3666, 5, 14, 0, 0, 3666, 3667, 3, 304, 152, 0, 3667, 3669, 1, 0, 0, 0, 3668, 3660, 1, 0, 0, 0, 3668, 3662, 1, 0, 0, 0, 3669, 303, 1, 0, 0, 0, 3670, 3671, 5, 321, 0, 0, 3671, 3678, 7, 68, 0, 0, 3672, 3673, 5, 62, 0, 0, 3673, 3678, 5, 257, 0, 0, 3674, 3675, 3, 220, 110, 0, 3675, 3676, 7, 68, 0, 0, 3676, 3678, 1, 0, 0, 0, 3677, 3670, 1, 0, 0, 0, 3677, 3672, 1, 0, 0, 0, 3677, 3674, 1, 0, 0, 0, 3678, 305, 1, 0, 0, 0, 3679, 3684, 3, 312, 156, 0, 3680, 3681, 5, 4, 0, 0, 3681, 3683, 3, 312, 156, 0, 3682, 3680, 1, 0, 0, 0, 3683, 3686, 1, 0, 0, 0, 3684, 3682, 1, 0, 0, 0, 3684, 3685, 1, 0, 0, 0, 3685, 307, 1, 0, 0, 0, 3686, 3684, 1, 0, 0, 0, 3687, 3688, 5, 136, 0, 0, 3688, 3689, 5, 2, 0, 0, 3689, 3690, 3, 220, 110, 0, 3690, 3691, 5, 3, 0, 0, 3691, 3697, 1, 0, 0, 0, 3692, 3697, 3, 312, 156, 0, 3693, 3697, 5, 114, 0, 0, 3694, 3697, 5, 161, 0, 0, 3695, 3697, 5, 250, 0, 0, 3696, 3687, 1, 0, 0, 0, 3696, 3692, 1, 0, 0, 0, 3696, 3693, 1, 0, 0, 0, 3696, 3694, 1, 0, 0, 0, 3696, 3695, 1, 0, 0, 0, 3697, 309, 1, 0, 0, 0, 3698, 3699, 3, 312, 156, 0, 3699, 311, 1, 0, 0, 0, 3700, 3705, 3, 318, 159, 0, 3701, 3702, 5, 5, 0, 0, 3702, 3704, 3, 318, 159, 0, 3703, 3701, 1, 0, 0, 0, 3704, 3707, 1, 0, 0, 0, 3705, 3703, 1, 0, 0, 0, 3705, 3706, 1, 0, 0, 0, 3706, 313, 1, 0, 0, 0, 3707, 3705, 1, 0, 0, 0, 3708, 3709, 3, 318, 159, 0, 3709, 3710, 3, 316, 158, 0, 3710, 315, 1, 0, 0, 0, 3711, 3712, 5, 362, 0, 0, 3712, 3714, 3, 318, 159, 0, 3713, 3711, 1, 0, 0, 0, 3714, 3715, 1, 0, 0, 0, 3715, 3713, 1, 0, 0, 0, 3715, 3716, 1, 0, 0, 0, 3716, 3719, 1, 0, 0, 0, 3717, 3719, 1, 0, 0, 0, 3718, 3713, 1, 0, 0, 0, 3718, 3717, 1, 0, 0, 0, 3719, 317, 1, 0, 0, 0, 3720, 3723, 3, 320, 160, 0, 3721, 3723, 3, 332, 166, 0, 3722, 3720, 1, 0, 0, 0, 3722, 3721, 1, 0, 0, 0, 3723, 319, 1, 0, 0, 0, 3724, 3729, 5, 388, 0, 0, 3725, 3729, 3, 322, 161, 0, 3726, 3729, 3, 330, 165, 0, 3727, 3729, 3, 334, 167, 0, 3728, 3724, 1, 0, 0, 0, 3728, 3725, 1, 0, 0, 0, 3728, 3726, 1, 0, 0, 0, 3728, 3727, 1, 0, 0, 0, 3729, 321, 1, 0, 0, 0, 3730, 3731, 7, 69, 0, 0, 3731, 323, 1, 0, 0, 0, 3732, 3734, 5, 362, 0, 0, 3733, 3732, 1, 0, 0, 0, 3733, 3734, 1, 0, 0, 0, 3734, 3735, 1, 0, 0, 0, 3735, 3736, 7, 70, 0, 0, 3736, 325, 1, 0, 0, 0, 3737, 3738, 5, 319, 0, 0, 3738, 3751, 3, 270, 135, 0, 3739, 3740, 5, 51, 0, 0, 3740, 3751, 3, 328, 164, 0, 3741, 3751, 3, 266, 133, 0, 3742, 3743, 7, 71, 0, 0, 3743, 3744, 5, 197, 0, 0, 3744, 3751, 5, 198, 0, 0, 3745, 3746, 5, 269, 0, 0, 3746, 3747, 5, 82, 0, 0, 3747, 3751, 3, 220, 110, 0, 3748, 3749, 5, 96, 0, 0, 3749, 3751, 5, 82, 0, 0, 3750, 3737, 1, 0, 0, 0, 3750, 3739, 1, 0, 0, 0, 3750, 3741, 1, 0, 0, 0, 3750, 3742, 1, 0, 0, 0, 3750, 3745, 1, 0, 0, 0, 3750, 3748, 1, 0, 0, 0, 3751, 327, 1, 0, 0, 0, 3752, 3753, 7, 72, 0, 0, 3753, 329, 1, 0, 0, 0, 3754, 3755, 7, 73, 0, 0, 3755, 331, 1, 0, 0, 0, 3756, 3757, 7, 74, 0, 0, 3757, 333, 1, 0, 0, 0, 3758, 3759, 7, 75, 0, 0, 3759, 335, 1, 0, 0, 0, 508, 339, 346, 350, 355, 362, 367, 377, 379, 399, 403, 409, 412, 415, 419, 422, 426, 433, 436, 440, 443, 448, 461, 463, 468, 477, 480, 484, 487, 493, 504, 510, 515, 548, 558, 569, 580, 591, 596, 605, 609, 615, 619, 624, 630, 642, 650, 656, 667, 671, 676, 691, 695, 702, 706, 712, 742, 746, 751, 758, 764, 767, 770, 774, 778, 787, 789, 798, 801, 810, 815, 821, 828, 831, 835, 850, 853, 859, 863, 880, 882, 890, 894, 900, 903, 907, 910, 916, 921, 925, 932, 935, 938, 945, 950, 959, 967, 973, 976, 979, 985, 989, 994, 997, 1001, 1003, 1011, 1019, 1022, 1029, 1032, 1035, 1044, 1049, 1055, 1060, 1063, 1067, 1070, 1074, 1084, 1089, 1102, 1105, 1113, 1119, 1122, 1125, 1130, 1138, 1143, 1149, 1155, 1158, 1165, 1172, 1180, 1192, 1200, 1227, 1230, 1236, 1245, 1254, 1260, 1265, 1270, 1277, 1282, 1287, 1294, 1304, 1307, 1313, 1320, 1324, 1387, 1395, 1402, 1410, 1422, 1427, 1430, 1438, 1443, 1445, 1453, 1458, 1462, 1465, 1473, 1478, 1487, 1492, 1495, 1500, 1504, 1509, 1511, 1516, 1525, 1533, 1539, 1548, 1555, 1564, 1569, 1572, 1597, 1599, 1611, 1618, 1621, 1628, 1632, 1638, 1646, 1653, 1656, 1664, 1675, 1686, 1694, 1700, 1711, 1718, 1725, 1737, 1745, 1751, 1757, 1760, 1776, 1783, 1794, 1803, 1806, 1815, 1818, 1827, 1830, 1839, 1842, 1845, 1850, 1852, 1856, 1864, 1870, 1876, 1879, 1881, 1889, 1899, 1908, 1912, 1915, 1919, 1923, 1931, 1935, 1938, 1941, 1944, 1948, 1952, 1957, 1961, 1964, 1967, 1970, 1974, 1979, 1983, 1986, 1989, 1992, 1994, 2000, 2007, 2012, 2015, 2018, 2022, 2032, 2036, 2038, 2041, 2045, 2051, 2055, 2066, 2074, 2076, 2083, 2087, 2099, 2106, 2121, 2126, 2133, 2149, 2154, 2167, 2172, 2180, 2186, 2190, 2193, 2196, 2203, 2206, 2212, 2221, 2231, 2246, 2251, 2253, 2258, 2267, 2277, 2282, 2286, 2291, 2298, 2303, 2307, 2310, 2313, 2327, 2340, 2345, 2349, 2352, 2357, 2362, 2366, 2369, 2381, 2392, 2405, 2416, 2421, 2424, 2428, 2431, 2443, 2452, 2455, 2460, 2467, 2470, 2476, 2482, 2484, 2487, 2492, 2496, 2502, 2506, 2509, 2514, 2517, 2522, 2524, 2530, 2535, 2542, 2545, 2563, 2565, 2568, 2579, 2588, 2595, 2603, 2611, 2616, 2619, 2622, 2630, 2638, 2648, 2660, 2663, 2668, 2673, 2680, 2687, 2689, 2702, 2708, 2710, 2720, 2726, 2728, 2736, 2740, 2743, 2747, 2749, 2758, 2770, 2772, 2779, 2786, 2792, 2798, 2800, 2807, 2815, 2823, 2829, 2834, 2841, 2847, 2850, 2854, 2856, 2863, 2872, 2879, 2889, 2894, 2898, 2908, 2915, 2928, 2930, 2938, 2940, 2944, 2952, 2961, 2967, 2975, 2980, 2992, 2997, 3000, 3006, 3010, 3015, 3020, 3025, 3031, 3052, 3054, 3065, 3077, 3089, 3093, 3102, 3106, 3124, 3127, 3135, 3144, 3153, 3176, 3192, 3199, 3202, 3211, 3215, 3219, 3231, 3256, 3263, 3266, 3281, 3302, 3306, 3308, 3318, 3320, 3330, 3345, 3347, 3360, 3364, 3371, 3376, 3384, 3389, 3398, 3430, 3451, 3454, 3458, 3464, 3470, 3479, 3483, 3485, 3492, 3500, 3508, 3516, 3526, 3536, 3543, 3547, 3554, 3562, 3578, 3582, 3587, 3591, 3609, 3625, 3635, 3638, 3647, 3650, 3652, 3655, 3658, 3668, 3677, 3684, 3696, 3705, 3715, 3718, 3722, 3728, 3733, 3750] \ No newline at end of file diff --git a/src/lib/spark/SparkSqlParser.ts b/src/lib/spark/SparkSqlParser.ts index f842a2f50..1f361ec73 100644 --- a/src/lib/spark/SparkSqlParser.ts +++ b/src/lib/spark/SparkSqlParser.ts @@ -413,203 +413,171 @@ export class SparkSqlParser extends SQLParserBase { public static readonly RULE_program = 0; public static readonly RULE_singleStatement = 1; public static readonly RULE_statement = 2; - public static readonly RULE_timezone = 3; - public static readonly RULE_configKey = 4; - public static readonly RULE_configValue = 5; - public static readonly RULE_unsupportedHiveNativeCommands = 6; - public static readonly RULE_createTableHeader = 7; - public static readonly RULE_replaceTableHeader = 8; - public static readonly RULE_bucketSpec = 9; - public static readonly RULE_skewSpec = 10; - public static readonly RULE_locationSpec = 11; - public static readonly RULE_commentSpec = 12; - public static readonly RULE_query = 13; - public static readonly RULE_insertInto = 14; - public static readonly RULE_partitionSpecLocation = 15; - public static readonly RULE_partitionSpec = 16; - public static readonly RULE_partitionVal = 17; - public static readonly RULE_namespace = 18; - public static readonly RULE_namespaces = 19; - public static readonly RULE_describeFuncName = 20; - public static readonly RULE_describeColName = 21; - public static readonly RULE_ctes = 22; - public static readonly RULE_namedQuery = 23; - public static readonly RULE_tableProvider = 24; - public static readonly RULE_createTableClauses = 25; - public static readonly RULE_tableLifecycle = 26; - public static readonly RULE_propertyList = 27; - public static readonly RULE_property = 28; - public static readonly RULE_propertyKey = 29; - public static readonly RULE_propertyValue = 30; - public static readonly RULE_expressionPropertyList = 31; - public static readonly RULE_expressionProperty = 32; - public static readonly RULE_constantList = 33; - public static readonly RULE_nestedConstantList = 34; - public static readonly RULE_createFileFormat = 35; - public static readonly RULE_fileFormat = 36; - public static readonly RULE_storageHandler = 37; - public static readonly RULE_resource = 38; - public static readonly RULE_dmlStatementNoWith = 39; - public static readonly RULE_namespaceName = 40; - public static readonly RULE_namespaceNameCreate = 41; - public static readonly RULE_tableNameCreate = 42; - public static readonly RULE_tableName = 43; - public static readonly RULE_viewNameCreate = 44; - public static readonly RULE_viewName = 45; - public static readonly RULE_columnName = 46; - public static readonly RULE_columnNameSeq = 47; - public static readonly RULE_columnNameCreate = 48; - public static readonly RULE_identifierReference = 49; - public static readonly RULE_queryOrganization = 50; - public static readonly RULE_multiInsertQueryBody = 51; - public static readonly RULE_queryTerm = 52; - public static readonly RULE_queryPrimary = 53; - public static readonly RULE_sortItem = 54; - public static readonly RULE_fromStatement = 55; - public static readonly RULE_fromStatementBody = 56; - public static readonly RULE_querySpecification = 57; - public static readonly RULE_transformClause = 58; - public static readonly RULE_selectClause = 59; - public static readonly RULE_setClause = 60; - public static readonly RULE_matchedClause = 61; - public static readonly RULE_notMatchedClause = 62; - public static readonly RULE_notMatchedBySourceClause = 63; - public static readonly RULE_matchedAction = 64; - public static readonly RULE_notMatchedAction = 65; - public static readonly RULE_notMatchedBySourceAction = 66; - public static readonly RULE_assignmentList = 67; - public static readonly RULE_assignment = 68; - public static readonly RULE_whereClause = 69; - public static readonly RULE_havingClause = 70; - public static readonly RULE_hint = 71; - public static readonly RULE_hintStatement = 72; - public static readonly RULE_fromClause = 73; - public static readonly RULE_functionKind = 74; - public static readonly RULE_temporalClause = 75; - public static readonly RULE_aggregationClause = 76; - public static readonly RULE_groupByClause = 77; - public static readonly RULE_groupingAnalytics = 78; - public static readonly RULE_groupingElement = 79; - public static readonly RULE_groupingSet = 80; - public static readonly RULE_pivotClause = 81; - public static readonly RULE_pivotColumn = 82; - public static readonly RULE_pivotValue = 83; - public static readonly RULE_unpivotClause = 84; - public static readonly RULE_unpivotNullClause = 85; - public static readonly RULE_unpivotOperator = 86; - public static readonly RULE_unpivotSingleValueColumnClause = 87; - public static readonly RULE_unpivotMultiValueColumnClause = 88; - public static readonly RULE_unpivotColumnSet = 89; - public static readonly RULE_unpivotValueColumn = 90; - public static readonly RULE_unpivotNameColumn = 91; - public static readonly RULE_unpivotColumnAndAlias = 92; - public static readonly RULE_unpivotColumn = 93; - public static readonly RULE_unpivotAlias = 94; - public static readonly RULE_ifNotExists = 95; - public static readonly RULE_ifExists = 96; - public static readonly RULE_lateralView = 97; - public static readonly RULE_setQuantifier = 98; - public static readonly RULE_relation = 99; - public static readonly RULE_relationExtension = 100; - public static readonly RULE_joinRelation = 101; - public static readonly RULE_joinType = 102; - public static readonly RULE_joinCriteria = 103; - public static readonly RULE_sample = 104; - public static readonly RULE_sampleMethod = 105; - public static readonly RULE_identifierList = 106; - public static readonly RULE_identifierSeq = 107; - public static readonly RULE_orderedIdentifierList = 108; - public static readonly RULE_orderedIdentifier = 109; - public static readonly RULE_identifierCommentList = 110; - public static readonly RULE_identifierComment = 111; - public static readonly RULE_relationPrimary = 112; - public static readonly RULE_inlineTable = 113; - public static readonly RULE_functionTableSubqueryArgument = 114; - public static readonly RULE_tableArgumentPartitioning = 115; - public static readonly RULE_functionTableNamedArgumentExpression = 116; - public static readonly RULE_functionTableReferenceArgument = 117; - public static readonly RULE_functionTableArgument = 118; - public static readonly RULE_functionTable = 119; - public static readonly RULE_tableAlias = 120; - public static readonly RULE_rowFormat = 121; - public static readonly RULE_multipartIdentifierList = 122; - public static readonly RULE_multipartIdentifier = 123; - public static readonly RULE_multipartIdentifierPropertyList = 124; - public static readonly RULE_multipartIdentifierProperty = 125; - public static readonly RULE_tableIdentifier = 126; - public static readonly RULE_viewIdentifier = 127; - public static readonly RULE_namedExpression = 128; - public static readonly RULE_namedExpressionSeq = 129; - public static readonly RULE_partitionFieldList = 130; - public static readonly RULE_partitionField = 131; - public static readonly RULE_transform = 132; - public static readonly RULE_transformArgument = 133; - public static readonly RULE_expression = 134; - public static readonly RULE_namedArgumentExpression = 135; - public static readonly RULE_functionArgument = 136; - public static readonly RULE_expressionSeq = 137; - public static readonly RULE_booleanExpression = 138; - public static readonly RULE_predicate = 139; - public static readonly RULE_valueExpression = 140; - public static readonly RULE_datetimeUnit = 141; - public static readonly RULE_primaryExpression = 142; - public static readonly RULE_literalType = 143; - public static readonly RULE_constant = 144; - public static readonly RULE_comparisonOperator = 145; - public static readonly RULE_arithmeticOperator = 146; - public static readonly RULE_predicateOperator = 147; - public static readonly RULE_booleanValue = 148; - public static readonly RULE_interval = 149; - public static readonly RULE_errorCapturingMultiUnitsInterval = 150; - public static readonly RULE_multiUnitsInterval = 151; - public static readonly RULE_errorCapturingUnitToUnitInterval = 152; - public static readonly RULE_unitToUnitInterval = 153; - public static readonly RULE_intervalValue = 154; - public static readonly RULE_unitInMultiUnits = 155; - public static readonly RULE_unitInUnitToUnit = 156; - public static readonly RULE_colPosition = 157; - public static readonly RULE_type = 158; - public static readonly RULE_dataType = 159; - public static readonly RULE_qualifiedColTypeWithPositionSeqForAdd = 160; - public static readonly RULE_qualifiedColTypeWithPositionForAdd = 161; - public static readonly RULE_qualifiedColTypeWithPositionSeqForReplace = 162; - public static readonly RULE_qualifiedColTypeWithPositionForReplace = 163; - public static readonly RULE_colDefinitionDescriptorWithPosition = 164; - public static readonly RULE_defaultExpression = 165; - public static readonly RULE_variableDefaultExpression = 166; - public static readonly RULE_colTypeList = 167; - public static readonly RULE_colType = 168; - public static readonly RULE_createOrReplaceTableColTypeList = 169; - public static readonly RULE_createOrReplaceTableColType = 170; - public static readonly RULE_colDefinitionOption = 171; - public static readonly RULE_generationExpression = 172; - public static readonly RULE_complexColTypeList = 173; - public static readonly RULE_complexColType = 174; - public static readonly RULE_whenClause = 175; - public static readonly RULE_windowClause = 176; - public static readonly RULE_zorderClause = 177; - public static readonly RULE_namedWindow = 178; - public static readonly RULE_windowSpec = 179; - public static readonly RULE_windowFrame = 180; - public static readonly RULE_frameBound = 181; - public static readonly RULE_qualifiedNameList = 182; - public static readonly RULE_functionName = 183; - public static readonly RULE_functionNameCreate = 184; - public static readonly RULE_qualifiedName = 185; - public static readonly RULE_errorCapturingIdentifier = 186; - public static readonly RULE_errorCapturingIdentifierExtra = 187; - public static readonly RULE_identifier = 188; - public static readonly RULE_strictIdentifier = 189; - public static readonly RULE_quotedIdentifier = 190; - public static readonly RULE_backQuotedIdentifier = 191; - public static readonly RULE_number = 192; - public static readonly RULE_alterColumnAction = 193; - public static readonly RULE_stringLit = 194; - public static readonly RULE_comment = 195; - public static readonly RULE_version = 196; - public static readonly RULE_ansiNonReserved = 197; - public static readonly RULE_strictNonReserved = 198; - public static readonly RULE_nonReserved = 199; + public static readonly RULE_unsupportedHiveNativeCommands = 3; + public static readonly RULE_bucketSpec = 4; + public static readonly RULE_skewSpec = 5; + public static readonly RULE_query = 6; + public static readonly RULE_insertInto = 7; + public static readonly RULE_partitionSpecLocation = 8; + public static readonly RULE_partitionSpec = 9; + public static readonly RULE_partitionVal = 10; + public static readonly RULE_namespace = 11; + public static readonly RULE_describeFuncName = 12; + public static readonly RULE_describeColName = 13; + public static readonly RULE_ctes = 14; + public static readonly RULE_namedQuery = 15; + public static readonly RULE_tableProvider = 16; + public static readonly RULE_createTableClauses = 17; + public static readonly RULE_tableLifecycle = 18; + public static readonly RULE_propertyList = 19; + public static readonly RULE_property = 20; + public static readonly RULE_propertyKey = 21; + public static readonly RULE_propertyValue = 22; + public static readonly RULE_expressionPropertyList = 23; + public static readonly RULE_expressionProperty = 24; + public static readonly RULE_constantList = 25; + public static readonly RULE_nestedConstantList = 26; + public static readonly RULE_createFileFormat = 27; + public static readonly RULE_fileFormat = 28; + public static readonly RULE_storageHandler = 29; + public static readonly RULE_dmlStatementNoWith = 30; + public static readonly RULE_namespaceName = 31; + public static readonly RULE_namespaceNameCreate = 32; + public static readonly RULE_tableNameCreate = 33; + public static readonly RULE_tableName = 34; + public static readonly RULE_viewNameCreate = 35; + public static readonly RULE_viewName = 36; + public static readonly RULE_columnName = 37; + public static readonly RULE_columnNameSeq = 38; + public static readonly RULE_columnNameCreate = 39; + public static readonly RULE_identifierReference = 40; + public static readonly RULE_queryOrganization = 41; + public static readonly RULE_queryTerm = 42; + public static readonly RULE_queryPrimary = 43; + public static readonly RULE_sortItem = 44; + public static readonly RULE_fromStatementBody = 45; + public static readonly RULE_querySpecification = 46; + public static readonly RULE_transformClause = 47; + public static readonly RULE_selectClause = 48; + public static readonly RULE_setClause = 49; + public static readonly RULE_matchedClause = 50; + public static readonly RULE_notMatchedClause = 51; + public static readonly RULE_notMatchedBySourceClause = 52; + public static readonly RULE_notMatchedAction = 53; + public static readonly RULE_assignmentList = 54; + public static readonly RULE_assignment = 55; + public static readonly RULE_whereClause = 56; + public static readonly RULE_havingClause = 57; + public static readonly RULE_hint = 58; + public static readonly RULE_hintStatement = 59; + public static readonly RULE_fromClause = 60; + public static readonly RULE_temporalClause = 61; + public static readonly RULE_aggregationClause = 62; + public static readonly RULE_groupByClause = 63; + public static readonly RULE_groupingAnalytics = 64; + public static readonly RULE_groupingSet = 65; + public static readonly RULE_pivotClause = 66; + public static readonly RULE_pivotColumn = 67; + public static readonly RULE_pivotValue = 68; + public static readonly RULE_unpivotClause = 69; + public static readonly RULE_unpivotSingleValueColumnClause = 70; + public static readonly RULE_unpivotMultiValueColumnClause = 71; + public static readonly RULE_unpivotColumnSet = 72; + public static readonly RULE_unpivotColumnAndAlias = 73; + public static readonly RULE_ifNotExists = 74; + public static readonly RULE_ifExists = 75; + public static readonly RULE_lateralView = 76; + public static readonly RULE_setQuantifier = 77; + public static readonly RULE_relation = 78; + public static readonly RULE_joinRelation = 79; + public static readonly RULE_joinType = 80; + public static readonly RULE_joinCriteria = 81; + public static readonly RULE_sample = 82; + public static readonly RULE_sampleMethod = 83; + public static readonly RULE_identifierList = 84; + public static readonly RULE_identifierSeq = 85; + public static readonly RULE_orderedIdentifierList = 86; + public static readonly RULE_orderedIdentifier = 87; + public static readonly RULE_identifierCommentList = 88; + public static readonly RULE_identifierComment = 89; + public static readonly RULE_relationPrimary = 90; + public static readonly RULE_functionTableSubqueryArgument = 91; + public static readonly RULE_tableArgumentPartitioning = 92; + public static readonly RULE_functionTableNamedArgumentExpression = 93; + public static readonly RULE_functionTableReferenceArgument = 94; + public static readonly RULE_functionTableArgument = 95; + public static readonly RULE_tableAlias = 96; + public static readonly RULE_rowFormat = 97; + public static readonly RULE_multipartIdentifierList = 98; + public static readonly RULE_multipartIdentifier = 99; + public static readonly RULE_multipartIdentifierPropertyList = 100; + public static readonly RULE_multipartIdentifierProperty = 101; + public static readonly RULE_tableIdentifier = 102; + public static readonly RULE_viewIdentifier = 103; + public static readonly RULE_namedExpression = 104; + public static readonly RULE_namedExpressionSeq = 105; + public static readonly RULE_partitionFieldList = 106; + public static readonly RULE_partitionField = 107; + public static readonly RULE_transform = 108; + public static readonly RULE_transformArgument = 109; + public static readonly RULE_expression = 110; + public static readonly RULE_namedArgumentExpression = 111; + public static readonly RULE_functionArgument = 112; + public static readonly RULE_expressionSeq = 113; + public static readonly RULE_booleanExpression = 114; + public static readonly RULE_predicate = 115; + public static readonly RULE_valueExpression = 116; + public static readonly RULE_datetimeUnit = 117; + public static readonly RULE_primaryExpression = 118; + public static readonly RULE_literalType = 119; + public static readonly RULE_constant = 120; + public static readonly RULE_comparisonOperator = 121; + public static readonly RULE_arithmeticOperator = 122; + public static readonly RULE_predicateOperator = 123; + public static readonly RULE_booleanValue = 124; + public static readonly RULE_interval = 125; + public static readonly RULE_errorCapturingMultiUnitsInterval = 126; + public static readonly RULE_multiUnitsInterval = 127; + public static readonly RULE_errorCapturingUnitToUnitInterval = 128; + public static readonly RULE_unitToUnitInterval = 129; + public static readonly RULE_intervalValue = 130; + public static readonly RULE_unitInMultiUnits = 131; + public static readonly RULE_unitInUnitToUnit = 132; + public static readonly RULE_colPosition = 133; + public static readonly RULE_type = 134; + public static readonly RULE_dataType = 135; + public static readonly RULE_qualifiedColTypeWithPositionSeqForAdd = 136; + public static readonly RULE_qualifiedColTypeWithPositionForAdd = 137; + public static readonly RULE_qualifiedColTypeWithPositionSeqForReplace = 138; + public static readonly RULE_qualifiedColTypeWithPositionForReplace = 139; + public static readonly RULE_colDefinitionDescriptorWithPosition = 140; + public static readonly RULE_variableDefaultExpression = 141; + public static readonly RULE_colTypeList = 142; + public static readonly RULE_columnType = 143; + public static readonly RULE_createOrReplaceTableColTypeList = 144; + public static readonly RULE_createOrReplaceTableColType = 145; + public static readonly RULE_colDefinitionOption = 146; + public static readonly RULE_complexColType = 147; + public static readonly RULE_whenClause = 148; + public static readonly RULE_windowClause = 149; + public static readonly RULE_windowSpec = 150; + public static readonly RULE_windowFrame = 151; + public static readonly RULE_frameBound = 152; + public static readonly RULE_qualifiedNameList = 153; + public static readonly RULE_functionName = 154; + public static readonly RULE_functionNameCreate = 155; + public static readonly RULE_qualifiedName = 156; + public static readonly RULE_errorCapturingIdentifier = 157; + public static readonly RULE_errorCapturingIdentifierExtra = 158; + public static readonly RULE_identifier = 159; + public static readonly RULE_strictIdentifier = 160; + public static readonly RULE_quotedIdentifier = 161; + public static readonly RULE_number = 162; + public static readonly RULE_alterColumnAction = 163; + public static readonly RULE_stringLit = 164; + public static readonly RULE_ansiNonReserved = 165; + public static readonly RULE_strictNonReserved = 166; + public static readonly RULE_nonReserved = 167; public static readonly literalNames = [ null, "';'", "'('", "')'", "','", "'.'", "'['", "']'", "'ADD'", @@ -759,59 +727,50 @@ export class SparkSqlParser extends SQLParserBase { "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" ]; public static readonly ruleNames = [ - "program", "singleStatement", "statement", "timezone", "configKey", - "configValue", "unsupportedHiveNativeCommands", "createTableHeader", - "replaceTableHeader", "bucketSpec", "skewSpec", "locationSpec", - "commentSpec", "query", "insertInto", "partitionSpecLocation", "partitionSpec", - "partitionVal", "namespace", "namespaces", "describeFuncName", "describeColName", - "ctes", "namedQuery", "tableProvider", "createTableClauses", "tableLifecycle", - "propertyList", "property", "propertyKey", "propertyValue", "expressionPropertyList", - "expressionProperty", "constantList", "nestedConstantList", "createFileFormat", - "fileFormat", "storageHandler", "resource", "dmlStatementNoWith", - "namespaceName", "namespaceNameCreate", "tableNameCreate", "tableName", - "viewNameCreate", "viewName", "columnName", "columnNameSeq", "columnNameCreate", - "identifierReference", "queryOrganization", "multiInsertQueryBody", - "queryTerm", "queryPrimary", "sortItem", "fromStatement", "fromStatementBody", - "querySpecification", "transformClause", "selectClause", "setClause", - "matchedClause", "notMatchedClause", "notMatchedBySourceClause", - "matchedAction", "notMatchedAction", "notMatchedBySourceAction", + "program", "singleStatement", "statement", "unsupportedHiveNativeCommands", + "bucketSpec", "skewSpec", "query", "insertInto", "partitionSpecLocation", + "partitionSpec", "partitionVal", "namespace", "describeFuncName", + "describeColName", "ctes", "namedQuery", "tableProvider", "createTableClauses", + "tableLifecycle", "propertyList", "property", "propertyKey", "propertyValue", + "expressionPropertyList", "expressionProperty", "constantList", + "nestedConstantList", "createFileFormat", "fileFormat", "storageHandler", + "dmlStatementNoWith", "namespaceName", "namespaceNameCreate", "tableNameCreate", + "tableName", "viewNameCreate", "viewName", "columnName", "columnNameSeq", + "columnNameCreate", "identifierReference", "queryOrganization", + "queryTerm", "queryPrimary", "sortItem", "fromStatementBody", "querySpecification", + "transformClause", "selectClause", "setClause", "matchedClause", + "notMatchedClause", "notMatchedBySourceClause", "notMatchedAction", "assignmentList", "assignment", "whereClause", "havingClause", "hint", - "hintStatement", "fromClause", "functionKind", "temporalClause", - "aggregationClause", "groupByClause", "groupingAnalytics", "groupingElement", - "groupingSet", "pivotClause", "pivotColumn", "pivotValue", "unpivotClause", - "unpivotNullClause", "unpivotOperator", "unpivotSingleValueColumnClause", - "unpivotMultiValueColumnClause", "unpivotColumnSet", "unpivotValueColumn", - "unpivotNameColumn", "unpivotColumnAndAlias", "unpivotColumn", "unpivotAlias", + "hintStatement", "fromClause", "temporalClause", "aggregationClause", + "groupByClause", "groupingAnalytics", "groupingSet", "pivotClause", + "pivotColumn", "pivotValue", "unpivotClause", "unpivotSingleValueColumnClause", + "unpivotMultiValueColumnClause", "unpivotColumnSet", "unpivotColumnAndAlias", "ifNotExists", "ifExists", "lateralView", "setQuantifier", "relation", - "relationExtension", "joinRelation", "joinType", "joinCriteria", - "sample", "sampleMethod", "identifierList", "identifierSeq", "orderedIdentifierList", - "orderedIdentifier", "identifierCommentList", "identifierComment", - "relationPrimary", "inlineTable", "functionTableSubqueryArgument", - "tableArgumentPartitioning", "functionTableNamedArgumentExpression", - "functionTableReferenceArgument", "functionTableArgument", "functionTable", - "tableAlias", "rowFormat", "multipartIdentifierList", "multipartIdentifier", - "multipartIdentifierPropertyList", "multipartIdentifierProperty", - "tableIdentifier", "viewIdentifier", "namedExpression", "namedExpressionSeq", - "partitionFieldList", "partitionField", "transform", "transformArgument", - "expression", "namedArgumentExpression", "functionArgument", "expressionSeq", - "booleanExpression", "predicate", "valueExpression", "datetimeUnit", - "primaryExpression", "literalType", "constant", "comparisonOperator", - "arithmeticOperator", "predicateOperator", "booleanValue", "interval", - "errorCapturingMultiUnitsInterval", "multiUnitsInterval", "errorCapturingUnitToUnitInterval", - "unitToUnitInterval", "intervalValue", "unitInMultiUnits", "unitInUnitToUnit", - "colPosition", "type", "dataType", "qualifiedColTypeWithPositionSeqForAdd", - "qualifiedColTypeWithPositionForAdd", "qualifiedColTypeWithPositionSeqForReplace", - "qualifiedColTypeWithPositionForReplace", "colDefinitionDescriptorWithPosition", - "defaultExpression", "variableDefaultExpression", "colTypeList", - "colType", "createOrReplaceTableColTypeList", "createOrReplaceTableColType", - "colDefinitionOption", "generationExpression", "complexColTypeList", - "complexColType", "whenClause", "windowClause", "zorderClause", - "namedWindow", "windowSpec", "windowFrame", "frameBound", "qualifiedNameList", - "functionName", "functionNameCreate", "qualifiedName", "errorCapturingIdentifier", - "errorCapturingIdentifierExtra", "identifier", "strictIdentifier", - "quotedIdentifier", "backQuotedIdentifier", "number", "alterColumnAction", - "stringLit", "comment", "version", "ansiNonReserved", "strictNonReserved", - "nonReserved", + "joinRelation", "joinType", "joinCriteria", "sample", "sampleMethod", + "identifierList", "identifierSeq", "orderedIdentifierList", "orderedIdentifier", + "identifierCommentList", "identifierComment", "relationPrimary", + "functionTableSubqueryArgument", "tableArgumentPartitioning", "functionTableNamedArgumentExpression", + "functionTableReferenceArgument", "functionTableArgument", "tableAlias", + "rowFormat", "multipartIdentifierList", "multipartIdentifier", "multipartIdentifierPropertyList", + "multipartIdentifierProperty", "tableIdentifier", "viewIdentifier", + "namedExpression", "namedExpressionSeq", "partitionFieldList", "partitionField", + "transform", "transformArgument", "expression", "namedArgumentExpression", + "functionArgument", "expressionSeq", "booleanExpression", "predicate", + "valueExpression", "datetimeUnit", "primaryExpression", "literalType", + "constant", "comparisonOperator", "arithmeticOperator", "predicateOperator", + "booleanValue", "interval", "errorCapturingMultiUnitsInterval", + "multiUnitsInterval", "errorCapturingUnitToUnitInterval", "unitToUnitInterval", + "intervalValue", "unitInMultiUnits", "unitInUnitToUnit", "colPosition", + "type", "dataType", "qualifiedColTypeWithPositionSeqForAdd", "qualifiedColTypeWithPositionForAdd", + "qualifiedColTypeWithPositionSeqForReplace", "qualifiedColTypeWithPositionForReplace", + "colDefinitionDescriptorWithPosition", "variableDefaultExpression", + "colTypeList", "columnType", "createOrReplaceTableColTypeList", + "createOrReplaceTableColType", "colDefinitionOption", "complexColType", + "whenClause", "windowClause", "windowSpec", "windowFrame", "frameBound", + "qualifiedNameList", "functionName", "functionNameCreate", "qualifiedName", + "errorCapturingIdentifier", "errorCapturingIdentifierExtra", "identifier", + "strictIdentifier", "quotedIdentifier", "number", "alterColumnAction", + "stringLit", "ansiNonReserved", "strictNonReserved", "nonReserved", ]; public get grammarFileName(): string { return "SparkSqlParser.g4"; } @@ -835,21 +794,21 @@ export class SparkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 403; + this.state = 339; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 10500) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & 67896321) !== 0) || ((((_la - 81)) & ~0x1F) === 0 && ((1 << (_la - 81)) & 100696297) !== 0) || ((((_la - 123)) & ~0x1F) === 0 && ((1 << (_la - 123)) & 16842817) !== 0) || ((((_la - 167)) & ~0x1F) === 0 && ((1 << (_la - 167)) & 2102291) !== 0) || _la === 205 || ((((_la - 238)) & ~0x1F) === 0 && ((1 << (_la - 238)) & 2181171413) !== 0) || ((((_la - 273)) & ~0x1F) === 0 && ((1 << (_la - 273)) & 1048833) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 536949281) !== 0)) { { { - this.state = 400; + this.state = 336; this.singleStatement(); } } - this.state = 405; + this.state = 341; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 406; + this.state = 342; this.match(SparkSqlParser.EOF); } } @@ -874,14 +833,14 @@ export class SparkSqlParser extends SQLParserBase { try { this.enterOuterAlt(localContext, 1); { - this.state = 408; + this.state = 344; this.statement(); - this.state = 410; + this.state = 346; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 1) { { - this.state = 409; + this.state = 345; this.match(SparkSqlParser.SEMICOLON); } } @@ -908,14 +867,14 @@ export class SparkSqlParser extends SQLParserBase { let _la: number; try { let alternative: number; - this.state = 1337; + this.state = 1307; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 144, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 151, this.context) ) { case 1: localContext = new StatementDefaultContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 412; + this.state = 348; this.query(); } break; @@ -923,17 +882,17 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DmlStatementContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 414; + this.state = 350; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 346) { { - this.state = 413; + this.state = 349; this.ctes(); } } - this.state = 416; + this.state = 352; this.dmlStatementNoWith(); } break; @@ -941,19 +900,19 @@ export class SparkSqlParser extends SQLParserBase { localContext = new UseNamespaceContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 417; + this.state = 353; this.match(SparkSqlParser.KW_USE); - this.state = 419; + this.state = 355; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) { case 1: { - this.state = 418; + this.state = 354; this.namespace(); } break; } - this.state = 421; + this.state = 357; this.namespaceName(); } break; @@ -961,22 +920,22 @@ export class SparkSqlParser extends SQLParserBase { localContext = new SetCatalogContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 422; + this.state = 358; this.match(SparkSqlParser.KW_SET); - this.state = 423; + this.state = 359; this.match(SparkSqlParser.KW_CATALOG); - this.state = 426; + this.state = 362; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 4, this.context) ) { case 1: { - this.state = 424; + this.state = 360; this.identifier(); } break; case 2: { - this.state = 425; + this.state = 361; this.stringLit(); } break; @@ -987,49 +946,57 @@ export class SparkSqlParser extends SQLParserBase { localContext = new CreateNamespaceContext(localContext); this.enterOuterAlt(localContext, 5); { - this.state = 428; + this.state = 364; this.match(SparkSqlParser.KW_CREATE); - this.state = 429; + this.state = 365; this.namespace(); - this.state = 431; + this.state = 367; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 5, this.context) ) { case 1: { - this.state = 430; + this.state = 366; this.ifNotExists(); } break; } - this.state = 433; + this.state = 369; this.namespaceNameCreate(); - this.state = 441; + this.state = 379; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 7, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { - this.state = 439; + this.state = 377; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_COMMENT: { - this.state = 434; - this.commentSpec(); + { + this.state = 370; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 371; + (localContext as CreateNamespaceContext)._comment = this.stringLit(); + } } break; case SparkSqlParser.KW_LOCATION: { - this.state = 435; - this.locationSpec(); + { + this.state = 372; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 373; + this.stringLit(); + } } break; case SparkSqlParser.KW_WITH: { { - this.state = 436; + this.state = 374; this.match(SparkSqlParser.KW_WITH); - this.state = 437; + this.state = 375; _la = this.tokenStream.LA(1); if(!(_la === 78 || _la === 229)) { this.errorHandler.recoverInline(this); @@ -1038,7 +1005,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 438; + this.state = 376; this.propertyList(); } } @@ -1048,7 +1015,7 @@ export class SparkSqlParser extends SQLParserBase { } } } - this.state = 443; + this.state = 381; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 7, this.context); } @@ -1058,15 +1025,15 @@ export class SparkSqlParser extends SQLParserBase { localContext = new SetNamespacePropertiesContext(localContext); this.enterOuterAlt(localContext, 6); { - this.state = 444; + this.state = 382; this.match(SparkSqlParser.KW_ALTER); - this.state = 445; + this.state = 383; this.namespace(); - this.state = 446; + this.state = 384; this.namespaceName(); - this.state = 447; + this.state = 385; this.match(SparkSqlParser.KW_SET); - this.state = 448; + this.state = 386; _la = this.tokenStream.LA(1); if(!(_la === 78 || _la === 229)) { this.errorHandler.recoverInline(this); @@ -1075,7 +1042,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 449; + this.state = 387; this.propertyList(); } break; @@ -1083,44 +1050,46 @@ export class SparkSqlParser extends SQLParserBase { localContext = new SetNamespaceLocationContext(localContext); this.enterOuterAlt(localContext, 7); { - this.state = 451; + this.state = 389; this.match(SparkSqlParser.KW_ALTER); - this.state = 452; + this.state = 390; this.namespace(); - this.state = 453; + this.state = 391; this.namespaceName(); - this.state = 454; + this.state = 392; this.match(SparkSqlParser.KW_SET); - this.state = 455; - this.locationSpec(); + this.state = 393; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 394; + this.stringLit(); } break; case 8: localContext = new DropNamespaceContext(localContext); this.enterOuterAlt(localContext, 8); { - this.state = 457; + this.state = 396; this.match(SparkSqlParser.KW_DROP); - this.state = 458; + this.state = 397; this.namespace(); - this.state = 460; + this.state = 399; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 8, this.context) ) { case 1: { - this.state = 459; + this.state = 398; this.ifExists(); } break; } - this.state = 462; + this.state = 401; this.namespaceName(); - this.state = 464; + this.state = 403; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 34 || _la === 247) { { - this.state = 463; + this.state = 402; _la = this.tokenStream.LA(1); if(!(_la === 34 || _la === 247)) { this.errorHandler.recoverInline(this); @@ -1138,16 +1107,23 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowNamespacesContext(localContext); this.enterOuterAlt(localContext, 9); { - this.state = 466; + this.state = 405; this.match(SparkSqlParser.KW_SHOW); - this.state = 467; - this.namespaces(); - this.state = 470; + this.state = 406; + _la = this.tokenStream.LA(1); + if(!(_la === 73 || _la === 191 || _la === 262)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 409; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 10, this.context) ) { case 1: { - this.state = 468; + this.state = 407; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -1156,27 +1132,27 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 469; + this.state = 408; this.multipartIdentifier(); } break; } - this.state = 476; + this.state = 415; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163 || _la === 377 || _la === 378) { { - this.state = 473; + this.state = 412; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163) { { - this.state = 472; + this.state = 411; this.match(SparkSqlParser.KW_LIKE); } } - this.state = 475; + this.state = 414; (localContext as ShowNamespacesContext)._pattern = this.stringLit(); } } @@ -1187,50 +1163,84 @@ export class SparkSqlParser extends SQLParserBase { localContext = new CreateTableContext(localContext); this.enterOuterAlt(localContext, 10); { - this.state = 478; - this.createTableHeader(); - this.state = 483; + this.state = 417; + this.match(SparkSqlParser.KW_CREATE); + this.state = 419; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 298) { + { + this.state = 418; + this.match(SparkSqlParser.KW_TEMPORARY); + } + } + + this.state = 422; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 109) { + { + this.state = 421; + this.match(SparkSqlParser.KW_EXTERNAL); + } + } + + this.state = 424; + this.match(SparkSqlParser.KW_TABLE); + this.state = 426; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 13, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 15, this.context) ) { case 1: { - this.state = 479; + this.state = 425; + this.ifNotExists(); + } + break; + } + this.state = 428; + this.tableNameCreate(); + this.state = 433; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 16, this.context) ) { + case 1: + { + this.state = 429; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 480; + this.state = 430; this.createOrReplaceTableColTypeList(); - this.state = 481; + this.state = 431; this.match(SparkSqlParser.RIGHT_PAREN); } break; } - this.state = 486; + this.state = 436; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 332) { { - this.state = 485; + this.state = 435; this.tableProvider(); } } - this.state = 488; + this.state = 438; this.createTableClauses(); - this.state = 493; + this.state = 443; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 16, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 19, this.context) ) { case 1: { - this.state = 490; + this.state = 440; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 489; + this.state = 439; this.match(SparkSqlParser.KW_AS); } } - this.state = 492; + this.state = 442; this.query(); } break; @@ -1241,71 +1251,75 @@ export class SparkSqlParser extends SQLParserBase { localContext = new CreateTableLikeContext(localContext); this.enterOuterAlt(localContext, 11); { - this.state = 495; + this.state = 445; this.match(SparkSqlParser.KW_CREATE); - this.state = 496; + this.state = 446; this.match(SparkSqlParser.KW_TABLE); - this.state = 498; + this.state = 448; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 17, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 20, this.context) ) { case 1: { - this.state = 497; + this.state = 447; this.ifNotExists(); } break; } - this.state = 500; + this.state = 450; (localContext as CreateTableLikeContext)._target = this.tableNameCreate(); - this.state = 501; + this.state = 451; this.match(SparkSqlParser.KW_LIKE); - this.state = 502; + this.state = 452; (localContext as CreateTableLikeContext)._source = this.tableName(); - this.state = 512; + this.state = 463; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 162 || _la === 170 || _la === 257 || _la === 283 || _la === 297 || _la === 332) { { - this.state = 510; + this.state = 461; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_USING: { - this.state = 503; + this.state = 453; this.tableProvider(); } break; case SparkSqlParser.KW_ROW: { - this.state = 504; + this.state = 454; this.rowFormat(); } break; case SparkSqlParser.KW_STORED: { - this.state = 505; + this.state = 455; this.createFileFormat(); } break; case SparkSqlParser.KW_LOCATION: { - this.state = 506; - this.locationSpec(); + { + this.state = 456; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 457; + this.stringLit(); + } } break; case SparkSqlParser.KW_TBLPROPERTIES: { { - this.state = 507; + this.state = 458; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 508; + this.state = 459; (localContext as CreateTableLikeContext)._tableProps = this.propertyList(); } } break; case SparkSqlParser.KW_LIFECYCLE: { - this.state = 509; + this.state = 460; this.tableLifecycle(); } break; @@ -1313,7 +1327,7 @@ export class SparkSqlParser extends SQLParserBase { throw new antlr.NoViableAltException(this); } } - this.state = 514; + this.state = 465; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -1323,50 +1337,66 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ReplaceTableContext(localContext); this.enterOuterAlt(localContext, 12); { - this.state = 515; - this.replaceTableHeader(); - this.state = 520; + this.state = 468; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 20, this.context) ) { + _la = this.tokenStream.LA(1); + if (_la === 59) { + { + this.state = 466; + this.match(SparkSqlParser.KW_CREATE); + this.state = 467; + this.match(SparkSqlParser.KW_OR); + } + } + + this.state = 470; + this.match(SparkSqlParser.KW_REPLACE); + this.state = 471; + this.match(SparkSqlParser.KW_TABLE); + this.state = 472; + this.tableNameCreate(); + this.state = 477; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 24, this.context) ) { case 1: { - this.state = 516; + this.state = 473; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 517; + this.state = 474; this.createOrReplaceTableColTypeList(); - this.state = 518; + this.state = 475; this.match(SparkSqlParser.RIGHT_PAREN); } break; } - this.state = 523; + this.state = 480; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 332) { { - this.state = 522; + this.state = 479; this.tableProvider(); } } - this.state = 525; + this.state = 482; this.createTableClauses(); - this.state = 530; + this.state = 487; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 23, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 27, this.context) ) { case 1: { - this.state = 527; + this.state = 484; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 526; + this.state = 483; this.match(SparkSqlParser.KW_AS); } } - this.state = 529; + this.state = 486; this.query(); } break; @@ -1377,52 +1407,52 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AnalyzeContext(localContext); this.enterOuterAlt(localContext, 13); { - this.state = 532; + this.state = 489; this.match(SparkSqlParser.KW_ANALYZE); - this.state = 533; + this.state = 490; this.match(SparkSqlParser.KW_TABLE); - this.state = 534; + this.state = 491; this.tableName(); - this.state = 536; + this.state = 493; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 535; + this.state = 492; this.partitionSpec(); } } - this.state = 538; + this.state = 495; this.match(SparkSqlParser.KW_COMPUTE); - this.state = 539; + this.state = 496; this.match(SparkSqlParser.KW_STATISTICS); - this.state = 547; + this.state = 504; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 25, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 29, this.context) ) { case 1: { - this.state = 540; + this.state = 497; this.match(SparkSqlParser.KW_NOSCAN); } break; case 2: { - this.state = 541; + this.state = 498; this.match(SparkSqlParser.KW_FOR); - this.state = 542; + this.state = 499; this.match(SparkSqlParser.KW_COLUMNS); - this.state = 543; + this.state = 500; this.columnNameSeq(); } break; case 3: { - this.state = 544; + this.state = 501; this.match(SparkSqlParser.KW_FOR); - this.state = 545; + this.state = 502; this.match(SparkSqlParser.KW_ALL); - this.state = 546; + this.state = 503; this.match(SparkSqlParser.KW_COLUMNS); } break; @@ -1433,16 +1463,16 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AnalyzeTablesContext(localContext); this.enterOuterAlt(localContext, 14); { - this.state = 549; + this.state = 506; this.match(SparkSqlParser.KW_ANALYZE); - this.state = 550; + this.state = 507; this.match(SparkSqlParser.KW_TABLES); - this.state = 553; + this.state = 510; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 123 || _la === 140) { { - this.state = 551; + this.state = 508; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -1451,21 +1481,21 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 552; + this.state = 509; this.namespaceName(); } } - this.state = 555; + this.state = 512; this.match(SparkSqlParser.KW_COMPUTE); - this.state = 556; + this.state = 513; this.match(SparkSqlParser.KW_STATISTICS); - this.state = 558; + this.state = 515; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 196) { { - this.state = 557; + this.state = 514; this.match(SparkSqlParser.KW_NOSCAN); } } @@ -1476,17 +1506,17 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AlterTableAddColumnContext(localContext); this.enterOuterAlt(localContext, 15); { - this.state = 560; + this.state = 517; this.match(SparkSqlParser.KW_ALTER); - this.state = 561; + this.state = 518; this.match(SparkSqlParser.KW_TABLE); - this.state = 562; + this.state = 519; this.tableName(); - this.state = 563; + this.state = 520; this.match(SparkSqlParser.KW_ADD); - this.state = 564; + this.state = 521; this.match(SparkSqlParser.KW_COLUMN); - this.state = 565; + this.state = 522; this.qualifiedColTypeWithPositionForAdd(); } break; @@ -1494,21 +1524,21 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AlterTableAddColumnsContext(localContext); this.enterOuterAlt(localContext, 16); { - this.state = 567; + this.state = 524; this.match(SparkSqlParser.KW_ALTER); - this.state = 568; + this.state = 525; this.match(SparkSqlParser.KW_TABLE); - this.state = 569; + this.state = 526; this.tableName(); - this.state = 570; + this.state = 527; this.match(SparkSqlParser.KW_ADD); - this.state = 571; + this.state = 528; this.match(SparkSqlParser.KW_COLUMNS); - this.state = 572; + this.state = 529; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 573; + this.state = 530; this.qualifiedColTypeWithPositionSeqForAdd(); - this.state = 574; + this.state = 531; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -1516,21 +1546,21 @@ export class SparkSqlParser extends SQLParserBase { localContext = new RenameTableColumnContext(localContext); this.enterOuterAlt(localContext, 17); { - this.state = 576; + this.state = 533; this.match(SparkSqlParser.KW_ALTER); - this.state = 577; + this.state = 534; this.match(SparkSqlParser.KW_TABLE); - this.state = 578; + this.state = 535; (localContext as RenameTableColumnContext)._table = this.tableName(); - this.state = 579; + this.state = 536; this.match(SparkSqlParser.KW_RENAME); - this.state = 580; + this.state = 537; this.match(SparkSqlParser.KW_COLUMN); - this.state = 581; + this.state = 538; this.columnName(); - this.state = 582; + this.state = 539; this.match(SparkSqlParser.KW_TO); - this.state = 583; + this.state = 540; this.columnNameCreate(); } break; @@ -1538,27 +1568,27 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AlterTableDropColumnContext(localContext); this.enterOuterAlt(localContext, 18); { - this.state = 585; + this.state = 542; this.match(SparkSqlParser.KW_ALTER); - this.state = 586; + this.state = 543; this.match(SparkSqlParser.KW_TABLE); - this.state = 587; + this.state = 544; this.tableName(); - this.state = 588; + this.state = 545; this.match(SparkSqlParser.KW_DROP); - this.state = 589; + this.state = 546; this.match(SparkSqlParser.KW_COLUMN); - this.state = 591; + this.state = 548; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 28, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 32, this.context) ) { case 1: { - this.state = 590; + this.state = 547; this.ifExists(); } break; } - this.state = 593; + this.state = 550; this.columnName(); } break; @@ -1566,31 +1596,31 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DropTableColumnsContext(localContext); this.enterOuterAlt(localContext, 19); { - this.state = 595; + this.state = 552; this.match(SparkSqlParser.KW_ALTER); - this.state = 596; + this.state = 553; this.match(SparkSqlParser.KW_TABLE); - this.state = 597; + this.state = 554; this.tableName(); - this.state = 598; + this.state = 555; this.match(SparkSqlParser.KW_DROP); - this.state = 599; + this.state = 556; this.match(SparkSqlParser.KW_COLUMNS); - this.state = 601; + this.state = 558; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 137) { { - this.state = 600; + this.state = 557; this.ifExists(); } } - this.state = 603; + this.state = 560; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 604; + this.state = 561; this.columnNameSeq(); - this.state = 605; + this.state = 562; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -1598,35 +1628,35 @@ export class SparkSqlParser extends SQLParserBase { localContext = new RenameTableContext(localContext); this.enterOuterAlt(localContext, 20); { - this.state = 607; + this.state = 564; this.match(SparkSqlParser.KW_ALTER); - this.state = 612; + this.state = 569; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_TABLE: { - this.state = 608; + this.state = 565; this.match(SparkSqlParser.KW_TABLE); - this.state = 609; + this.state = 566; this.tableName(); } break; case SparkSqlParser.KW_VIEW: { - this.state = 610; + this.state = 567; this.match(SparkSqlParser.KW_VIEW); - this.state = 611; + this.state = 568; this.viewName(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 614; + this.state = 571; this.match(SparkSqlParser.KW_RENAME); - this.state = 615; + this.state = 572; this.match(SparkSqlParser.KW_TO); - this.state = 616; + this.state = 573; this.multipartIdentifier(); } break; @@ -1634,35 +1664,35 @@ export class SparkSqlParser extends SQLParserBase { localContext = new SetTablePropertiesContext(localContext); this.enterOuterAlt(localContext, 21); { - this.state = 618; + this.state = 575; this.match(SparkSqlParser.KW_ALTER); - this.state = 623; + this.state = 580; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_TABLE: { - this.state = 619; + this.state = 576; this.match(SparkSqlParser.KW_TABLE); - this.state = 620; + this.state = 577; this.tableName(); } break; case SparkSqlParser.KW_VIEW: { - this.state = 621; + this.state = 578; this.match(SparkSqlParser.KW_VIEW); - this.state = 622; + this.state = 579; this.viewName(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 625; + this.state = 582; this.match(SparkSqlParser.KW_SET); - this.state = 626; + this.state = 583; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 627; + this.state = 584; this.propertyList(); } break; @@ -1670,45 +1700,45 @@ export class SparkSqlParser extends SQLParserBase { localContext = new UnsetTablePropertiesContext(localContext); this.enterOuterAlt(localContext, 22); { - this.state = 629; + this.state = 586; this.match(SparkSqlParser.KW_ALTER); - this.state = 634; + this.state = 591; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_TABLE: { - this.state = 630; + this.state = 587; this.match(SparkSqlParser.KW_TABLE); - this.state = 631; + this.state = 588; this.tableName(); } break; case SparkSqlParser.KW_VIEW: { - this.state = 632; + this.state = 589; this.match(SparkSqlParser.KW_VIEW); - this.state = 633; + this.state = 590; this.viewName(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 636; + this.state = 593; this.match(SparkSqlParser.KW_UNSET); - this.state = 637; + this.state = 594; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 639; + this.state = 596; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 137) { { - this.state = 638; + this.state = 595; this.ifExists(); } } - this.state = 641; + this.state = 598; this.propertyList(); } break; @@ -1716,13 +1746,13 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AlterTableAlterColumnContext(localContext); this.enterOuterAlt(localContext, 23); { - this.state = 643; + this.state = 600; this.match(SparkSqlParser.KW_ALTER); - this.state = 644; + this.state = 601; this.match(SparkSqlParser.KW_TABLE); - this.state = 645; + this.state = 602; (localContext as AlterTableAlterColumnContext)._table = this.tableName(); - this.state = 646; + this.state = 603; _la = this.tokenStream.LA(1); if(!(_la === 11 || _la === 39)) { this.errorHandler.recoverInline(this); @@ -1731,24 +1761,24 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 648; + this.state = 605; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 34, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 38, this.context) ) { case 1: { - this.state = 647; + this.state = 604; this.match(SparkSqlParser.KW_COLUMN); } break; } - this.state = 650; + this.state = 607; (localContext as AlterTableAlterColumnContext)._column = this.columnName(); - this.state = 652; + this.state = 609; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 35, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 39, this.context) ) { case 1: { - this.state = 651; + this.state = 608; this.alterColumnAction(); } break; @@ -1759,44 +1789,44 @@ export class SparkSqlParser extends SQLParserBase { localContext = new HiveChangeColumnContext(localContext); this.enterOuterAlt(localContext, 24); { - this.state = 654; + this.state = 611; this.match(SparkSqlParser.KW_ALTER); - this.state = 655; + this.state = 612; this.match(SparkSqlParser.KW_TABLE); - this.state = 656; + this.state = 613; (localContext as HiveChangeColumnContext)._table = this.tableName(); - this.state = 658; + this.state = 615; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 657; + this.state = 614; this.partitionSpec(); } } - this.state = 660; + this.state = 617; this.match(SparkSqlParser.KW_CHANGE); - this.state = 662; + this.state = 619; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 37, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 41, this.context) ) { case 1: { - this.state = 661; + this.state = 618; this.match(SparkSqlParser.KW_COLUMN); } break; } - this.state = 664; + this.state = 621; (localContext as HiveChangeColumnContext)._colName = this.columnName(); - this.state = 665; - this.colType(); - this.state = 667; + this.state = 622; + this.columnType(); + this.state = 624; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 9 || _la === 116) { { - this.state = 666; + this.state = 623; this.colPosition(); } } @@ -1807,31 +1837,31 @@ export class SparkSqlParser extends SQLParserBase { localContext = new HiveReplaceColumnsContext(localContext); this.enterOuterAlt(localContext, 25); { - this.state = 669; + this.state = 626; this.match(SparkSqlParser.KW_ALTER); - this.state = 670; + this.state = 627; this.match(SparkSqlParser.KW_TABLE); - this.state = 671; + this.state = 628; (localContext as HiveReplaceColumnsContext)._table = this.tableName(); - this.state = 673; + this.state = 630; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 672; + this.state = 629; this.partitionSpec(); } } - this.state = 675; + this.state = 632; this.match(SparkSqlParser.KW_REPLACE); - this.state = 676; + this.state = 633; this.match(SparkSqlParser.KW_COLUMNS); - this.state = 677; + this.state = 634; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 678; + this.state = 635; this.qualifiedColTypeWithPositionSeqForReplace(); - this.state = 679; + this.state = 636; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -1839,38 +1869,38 @@ export class SparkSqlParser extends SQLParserBase { localContext = new SetTableSerDeContext(localContext); this.enterOuterAlt(localContext, 26); { - this.state = 681; + this.state = 638; this.match(SparkSqlParser.KW_ALTER); - this.state = 682; + this.state = 639; this.match(SparkSqlParser.KW_TABLE); - this.state = 683; + this.state = 640; this.tableName(); - this.state = 685; + this.state = 642; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 684; + this.state = 641; this.partitionSpec(); } } - this.state = 687; + this.state = 644; this.match(SparkSqlParser.KW_SET); - this.state = 688; + this.state = 645; this.match(SparkSqlParser.KW_SERDE); - this.state = 689; + this.state = 646; this.stringLit(); - this.state = 693; + this.state = 650; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 41, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 45, this.context) ) { case 1: { - this.state = 690; + this.state = 647; this.match(SparkSqlParser.KW_WITH); - this.state = 691; + this.state = 648; this.match(SparkSqlParser.KW_SERDEPROPERTIES); - this.state = 692; + this.state = 649; this.propertyList(); } break; @@ -1881,27 +1911,27 @@ export class SparkSqlParser extends SQLParserBase { localContext = new SetTableSerDePropertiesContext(localContext); this.enterOuterAlt(localContext, 27); { - this.state = 695; + this.state = 652; this.match(SparkSqlParser.KW_ALTER); - this.state = 696; + this.state = 653; this.match(SparkSqlParser.KW_TABLE); - this.state = 697; + this.state = 654; this.tableName(); - this.state = 699; + this.state = 656; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 698; + this.state = 655; this.partitionSpec(); } } - this.state = 701; + this.state = 658; this.match(SparkSqlParser.KW_SET); - this.state = 702; + this.state = 659; this.match(SparkSqlParser.KW_SERDEPROPERTIES); - this.state = 703; + this.state = 660; this.propertyList(); } break; @@ -1909,53 +1939,53 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AddTablePartitionContext(localContext); this.enterOuterAlt(localContext, 28); { - this.state = 705; + this.state = 662; this.match(SparkSqlParser.KW_ALTER); - this.state = 710; + this.state = 667; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_TABLE: { - this.state = 706; + this.state = 663; this.match(SparkSqlParser.KW_TABLE); - this.state = 707; + this.state = 664; this.tableName(); } break; case SparkSqlParser.KW_VIEW: { - this.state = 708; + this.state = 665; this.match(SparkSqlParser.KW_VIEW); - this.state = 709; + this.state = 666; this.viewName(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 712; + this.state = 669; this.match(SparkSqlParser.KW_ADD); - this.state = 714; + this.state = 671; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 137) { { - this.state = 713; + this.state = 670; this.ifNotExists(); } } - this.state = 717; + this.state = 674; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 716; + this.state = 673; this.partitionSpecLocation(); } } - this.state = 719; + this.state = 676; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 217); @@ -1965,19 +1995,19 @@ export class SparkSqlParser extends SQLParserBase { localContext = new RenameTablePartitionContext(localContext); this.enterOuterAlt(localContext, 29); { - this.state = 721; + this.state = 678; this.match(SparkSqlParser.KW_ALTER); - this.state = 722; + this.state = 679; this.match(SparkSqlParser.KW_TABLE); - this.state = 723; + this.state = 680; this.tableName(); - this.state = 724; + this.state = 681; this.partitionSpec(); - this.state = 725; + this.state = 682; this.match(SparkSqlParser.KW_RENAME); - this.state = 726; + this.state = 683; this.match(SparkSqlParser.KW_TO); - this.state = 727; + this.state = 684; this.partitionSpec(); } break; @@ -1985,66 +2015,66 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DropTablePartitionsContext(localContext); this.enterOuterAlt(localContext, 30); { - this.state = 729; + this.state = 686; this.match(SparkSqlParser.KW_ALTER); - this.state = 734; + this.state = 691; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_TABLE: { - this.state = 730; + this.state = 687; this.match(SparkSqlParser.KW_TABLE); - this.state = 731; + this.state = 688; this.tableName(); } break; case SparkSqlParser.KW_VIEW: { - this.state = 732; + this.state = 689; this.match(SparkSqlParser.KW_VIEW); - this.state = 733; + this.state = 690; this.viewName(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 736; + this.state = 693; this.match(SparkSqlParser.KW_DROP); - this.state = 738; + this.state = 695; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 137) { { - this.state = 737; + this.state = 694; this.ifExists(); } } - this.state = 740; + this.state = 697; this.partitionSpec(); - this.state = 745; + this.state = 702; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 741; + this.state = 698; this.match(SparkSqlParser.COMMA); - this.state = 742; + this.state = 699; this.partitionSpec(); } } - this.state = 747; + this.state = 704; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 749; + this.state = 706; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 230) { { - this.state = 748; + this.state = 705; this.match(SparkSqlParser.KW_PURGE); } } @@ -2055,41 +2085,43 @@ export class SparkSqlParser extends SQLParserBase { localContext = new SetTableLocationContext(localContext); this.enterOuterAlt(localContext, 31); { - this.state = 751; + this.state = 708; this.match(SparkSqlParser.KW_ALTER); - this.state = 752; + this.state = 709; this.match(SparkSqlParser.KW_TABLE); - this.state = 753; + this.state = 710; this.tableName(); - this.state = 755; + this.state = 712; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 754; + this.state = 711; this.partitionSpec(); } } - this.state = 757; + this.state = 714; this.match(SparkSqlParser.KW_SET); - this.state = 758; - this.locationSpec(); + this.state = 715; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 716; + this.stringLit(); } break; case 32: localContext = new RecoverPartitionsContext(localContext); this.enterOuterAlt(localContext, 32); { - this.state = 760; + this.state = 718; this.match(SparkSqlParser.KW_ALTER); - this.state = 761; + this.state = 719; this.match(SparkSqlParser.KW_TABLE); - this.state = 762; + this.state = 720; this.tableName(); - this.state = 763; + this.state = 721; this.match(SparkSqlParser.KW_RECOVER); - this.state = 764; + this.state = 722; this.match(SparkSqlParser.KW_PARTITIONS); } break; @@ -2097,15 +2129,15 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AlterMaterializedViewRewriteContext(localContext); this.enterOuterAlt(localContext, 33); { - this.state = 766; + this.state = 724; this.match(SparkSqlParser.KW_ALTER); - this.state = 767; + this.state = 725; this.match(SparkSqlParser.KW_MATERIALIZED); - this.state = 768; + this.state = 726; this.match(SparkSqlParser.KW_VIEW); - this.state = 769; + this.state = 727; this.viewName(); - this.state = 770; + this.state = 728; _la = this.tokenStream.LA(1); if(!(_la === 91 || _la === 98)) { this.errorHandler.recoverInline(this); @@ -2114,7 +2146,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 771; + this.state = 729; this.match(SparkSqlParser.KW_REWRITE); } break; @@ -2122,19 +2154,19 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AlterMaterializedViewPropertiesContext(localContext); this.enterOuterAlt(localContext, 34); { - this.state = 773; + this.state = 731; this.match(SparkSqlParser.KW_ALTER); - this.state = 774; + this.state = 732; this.match(SparkSqlParser.KW_MATERIALIZED); - this.state = 775; + this.state = 733; this.match(SparkSqlParser.KW_VIEW); - this.state = 776; + this.state = 734; this.viewName(); - this.state = 777; + this.state = 735; this.match(SparkSqlParser.KW_SET); - this.state = 778; + this.state = 736; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 779; + this.state = 737; this.propertyList(); } break; @@ -2142,28 +2174,28 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DropTableContext(localContext); this.enterOuterAlt(localContext, 35); { - this.state = 781; + this.state = 739; this.match(SparkSqlParser.KW_DROP); - this.state = 782; + this.state = 740; this.match(SparkSqlParser.KW_TABLE); - this.state = 784; + this.state = 742; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 51, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 55, this.context) ) { case 1: { - this.state = 783; + this.state = 741; this.ifExists(); } break; } - this.state = 786; + this.state = 744; this.tableName(); - this.state = 788; + this.state = 746; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 230) { { - this.state = 787; + this.state = 745; this.match(SparkSqlParser.KW_PURGE); } } @@ -2174,21 +2206,21 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DropViewContext(localContext); this.enterOuterAlt(localContext, 36); { - this.state = 790; + this.state = 748; this.match(SparkSqlParser.KW_DROP); - this.state = 791; + this.state = 749; this.match(SparkSqlParser.KW_VIEW); - this.state = 793; + this.state = 751; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 53, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 57, this.context) ) { case 1: { - this.state = 792; + this.state = 750; this.ifExists(); } break; } - this.state = 795; + this.state = 753; this.viewName(); } break; @@ -2196,23 +2228,23 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DropMaterializedViewContext(localContext); this.enterOuterAlt(localContext, 37); { - this.state = 796; + this.state = 754; this.match(SparkSqlParser.KW_DROP); - this.state = 797; + this.state = 755; this.match(SparkSqlParser.KW_MATERIALIZED); - this.state = 798; + this.state = 756; this.match(SparkSqlParser.KW_VIEW); - this.state = 800; + this.state = 758; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 54, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 58, this.context) ) { case 1: { - this.state = 799; + this.state = 757; this.ifExists(); } break; } - this.state = 802; + this.state = 760; this.viewName(); } break; @@ -2220,86 +2252,90 @@ export class SparkSqlParser extends SQLParserBase { localContext = new CreateViewContext(localContext); this.enterOuterAlt(localContext, 38); { - this.state = 803; + this.state = 761; this.match(SparkSqlParser.KW_CREATE); - this.state = 806; + this.state = 764; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 208) { { - this.state = 804; + this.state = 762; this.match(SparkSqlParser.KW_OR); - this.state = 805; + this.state = 763; this.match(SparkSqlParser.KW_REPLACE); } } - this.state = 812; + this.state = 770; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 128 || _la === 298) { { - this.state = 809; + this.state = 767; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 128) { { - this.state = 808; + this.state = 766; this.match(SparkSqlParser.KW_GLOBAL); } } - this.state = 811; + this.state = 769; this.match(SparkSqlParser.KW_TEMPORARY); } } - this.state = 814; + this.state = 772; this.match(SparkSqlParser.KW_VIEW); - this.state = 816; + this.state = 774; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 58, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 62, this.context) ) { case 1: { - this.state = 815; + this.state = 773; this.ifNotExists(); } break; } - this.state = 818; + this.state = 776; this.viewNameCreate(); - this.state = 820; + this.state = 778; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2) { { - this.state = 819; + this.state = 777; this.identifierCommentList(); } } - this.state = 830; + this.state = 789; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 51 || _la === 218 || _la === 297) { { - this.state = 828; + this.state = 787; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_COMMENT: { - this.state = 822; - this.commentSpec(); + { + this.state = 780; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 781; + (localContext as CreateViewContext)._comment = this.stringLit(); + } } break; case SparkSqlParser.KW_PARTITIONED: { { - this.state = 823; + this.state = 782; this.match(SparkSqlParser.KW_PARTITIONED); - this.state = 824; + this.state = 783; this.match(SparkSqlParser.KW_ON); - this.state = 825; + this.state = 784; this.identifierList(); } } @@ -2307,9 +2343,9 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_TBLPROPERTIES: { { - this.state = 826; + this.state = 785; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 827; + this.state = 786; this.propertyList(); } } @@ -2318,13 +2354,13 @@ export class SparkSqlParser extends SQLParserBase { throw new antlr.NoViableAltException(this); } } - this.state = 832; + this.state = 791; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 833; + this.state = 792; this.match(SparkSqlParser.KW_AS); - this.state = 834; + this.state = 793; this.query(); } break; @@ -2332,60 +2368,60 @@ export class SparkSqlParser extends SQLParserBase { localContext = new CreateTempViewUsingContext(localContext); this.enterOuterAlt(localContext, 39); { - this.state = 836; + this.state = 795; this.match(SparkSqlParser.KW_CREATE); - this.state = 839; + this.state = 798; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 208) { { - this.state = 837; + this.state = 796; this.match(SparkSqlParser.KW_OR); - this.state = 838; + this.state = 797; this.match(SparkSqlParser.KW_REPLACE); } } - this.state = 842; + this.state = 801; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 128) { { - this.state = 841; + this.state = 800; this.match(SparkSqlParser.KW_GLOBAL); } } - this.state = 844; + this.state = 803; this.match(SparkSqlParser.KW_TEMPORARY); - this.state = 845; + this.state = 804; this.match(SparkSqlParser.KW_VIEW); - this.state = 846; + this.state = 805; this.viewNameCreate(); - this.state = 851; + this.state = 810; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 2) { { - this.state = 847; + this.state = 806; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 848; + this.state = 807; this.colTypeList(); - this.state = 849; + this.state = 808; this.match(SparkSqlParser.RIGHT_PAREN); } } - this.state = 853; + this.state = 812; this.tableProvider(); - this.state = 856; + this.state = 815; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 207) { { - this.state = 854; + this.state = 813; this.match(SparkSqlParser.KW_OPTIONS); - this.state = 855; + this.state = 814; this.propertyList(); } } @@ -2396,23 +2432,23 @@ export class SparkSqlParser extends SQLParserBase { localContext = new AlterViewQueryContext(localContext); this.enterOuterAlt(localContext, 40); { - this.state = 858; + this.state = 817; this.match(SparkSqlParser.KW_ALTER); - this.state = 859; + this.state = 818; this.match(SparkSqlParser.KW_VIEW); - this.state = 860; + this.state = 819; this.viewName(); - this.state = 862; + this.state = 821; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 861; + this.state = 820; this.match(SparkSqlParser.KW_AS); } } - this.state = 864; + this.state = 823; this.query(); } break; @@ -2420,70 +2456,78 @@ export class SparkSqlParser extends SQLParserBase { localContext = new CreateFunctionContext(localContext); this.enterOuterAlt(localContext, 41); { - this.state = 866; + this.state = 825; this.match(SparkSqlParser.KW_CREATE); - this.state = 869; + this.state = 828; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 208) { { - this.state = 867; + this.state = 826; this.match(SparkSqlParser.KW_OR); - this.state = 868; + this.state = 827; this.match(SparkSqlParser.KW_REPLACE); } } - this.state = 872; + this.state = 831; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 298) { { - this.state = 871; + this.state = 830; this.match(SparkSqlParser.KW_TEMPORARY); } } - this.state = 874; + this.state = 833; this.match(SparkSqlParser.KW_FUNCTION); - this.state = 876; + this.state = 835; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 69, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 73, this.context) ) { case 1: { - this.state = 875; + this.state = 834; this.ifNotExists(); } break; } - this.state = 878; + this.state = 837; this.functionNameCreate(); - this.state = 879; + this.state = 838; this.match(SparkSqlParser.KW_AS); - this.state = 880; + this.state = 839; (localContext as CreateFunctionContext)._className = this.stringLit(); - this.state = 890; + this.state = 853; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 332) { { - this.state = 881; + this.state = 840; this.match(SparkSqlParser.KW_USING); - this.state = 882; - this.resource(); - this.state = 887; + { + this.state = 841; + this.identifier(); + this.state = 842; + this.stringLit(); + } + this.state = 850; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 883; + this.state = 844; this.match(SparkSqlParser.COMMA); - this.state = 884; - this.resource(); + { + this.state = 845; + this.identifier(); + this.state = 846; + this.stringLit(); } } - this.state = 889; + } + this.state = 852; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -2496,48 +2540,48 @@ export class SparkSqlParser extends SQLParserBase { localContext = new CreateMaterializedViewContext(localContext); this.enterOuterAlt(localContext, 42); { - this.state = 892; + this.state = 855; this.match(SparkSqlParser.KW_CREATE); - this.state = 893; + this.state = 856; this.match(SparkSqlParser.KW_MATERIALIZED); - this.state = 894; + this.state = 857; this.match(SparkSqlParser.KW_VIEW); - this.state = 896; + this.state = 859; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 72, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 76, this.context) ) { case 1: { - this.state = 895; + this.state = 858; this.ifNotExists(); } break; } - this.state = 898; + this.state = 861; this.viewNameCreate(); - this.state = 900; + this.state = 863; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 332) { { - this.state = 899; + this.state = 862; this.tableProvider(); } } - this.state = 917; + this.state = 882; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 45 || _la === 51 || _la === 170 || _la === 207 || _la === 218 || ((((_la - 257)) & ~0x1F) === 0 && ((1 << (_la - 257)) & 67371009) !== 0) || _la === 297) { { - this.state = 915; + this.state = 880; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_OPTIONS: { { - this.state = 902; + this.state = 865; this.match(SparkSqlParser.KW_OPTIONS); - this.state = 903; + this.state = 866; (localContext as CreateMaterializedViewContext)._options = this.propertyList(); } } @@ -2545,57 +2589,65 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_PARTITIONED: { { - this.state = 904; + this.state = 867; this.match(SparkSqlParser.KW_PARTITIONED); - this.state = 905; + this.state = 868; this.match(SparkSqlParser.KW_BY); - this.state = 906; + this.state = 869; (localContext as CreateMaterializedViewContext)._partitioning = this.partitionFieldList(); } } break; case SparkSqlParser.KW_SKEWED: { - this.state = 907; + this.state = 870; this.skewSpec(); } break; case SparkSqlParser.KW_CLUSTERED: { - this.state = 908; + this.state = 871; this.bucketSpec(); } break; case SparkSqlParser.KW_ROW: { - this.state = 909; + this.state = 872; this.rowFormat(); } break; case SparkSqlParser.KW_STORED: { - this.state = 910; + this.state = 873; this.createFileFormat(); } break; case SparkSqlParser.KW_LOCATION: { - this.state = 911; - this.locationSpec(); + { + this.state = 874; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 875; + this.stringLit(); + } } break; case SparkSqlParser.KW_COMMENT: { - this.state = 912; - this.commentSpec(); + { + this.state = 876; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 877; + (localContext as CreateMaterializedViewContext)._comment = this.stringLit(); + } } break; case SparkSqlParser.KW_TBLPROPERTIES: { { - this.state = 913; + this.state = 878; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 914; + this.state = 879; (localContext as CreateMaterializedViewContext)._tableProps = this.propertyList(); } } @@ -2604,13 +2656,13 @@ export class SparkSqlParser extends SQLParserBase { throw new antlr.NoViableAltException(this); } } - this.state = 919; + this.state = 884; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 920; + this.state = 885; this.match(SparkSqlParser.KW_AS); - this.state = 921; + this.state = 886; this.query(); } break; @@ -2618,31 +2670,31 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DropFunctionContext(localContext); this.enterOuterAlt(localContext, 43); { - this.state = 923; + this.state = 888; this.match(SparkSqlParser.KW_DROP); - this.state = 925; + this.state = 890; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 298) { { - this.state = 924; + this.state = 889; this.match(SparkSqlParser.KW_TEMPORARY); } } - this.state = 927; + this.state = 892; this.match(SparkSqlParser.KW_FUNCTION); - this.state = 929; + this.state = 894; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 77, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 81, this.context) ) { case 1: { - this.state = 928; + this.state = 893; this.ifExists(); } break; } - this.state = 931; + this.state = 896; this.functionName(); } break; @@ -2650,48 +2702,48 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DeclareVariableContext(localContext); this.enterOuterAlt(localContext, 44); { - this.state = 932; + this.state = 897; this.match(SparkSqlParser.KW_DECLARE); - this.state = 935; + this.state = 900; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 78, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 82, this.context) ) { case 1: { - this.state = 933; + this.state = 898; this.match(SparkSqlParser.KW_OR); - this.state = 934; + this.state = 899; this.match(SparkSqlParser.KW_REPLACE); } break; } - this.state = 938; + this.state = 903; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 79, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 83, this.context) ) { case 1: { - this.state = 937; + this.state = 902; this.match(SparkSqlParser.KW_VARIABLE); } break; } - this.state = 940; + this.state = 905; this.functionName(); - this.state = 942; + this.state = 907; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 80, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 84, this.context) ) { case 1: { - this.state = 941; + this.state = 906; this.dataType(); } break; } - this.state = 945; + this.state = 910; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 82 || _la === 352) { { - this.state = 944; + this.state = 909; this.variableDefaultExpression(); } } @@ -2702,40 +2754,40 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DropVariableContext(localContext); this.enterOuterAlt(localContext, 45); { - this.state = 947; + this.state = 912; this.match(SparkSqlParser.KW_DROP); - this.state = 948; + this.state = 913; this.match(SparkSqlParser.KW_TEMPORARY); - this.state = 949; + this.state = 914; this.match(SparkSqlParser.KW_VARIABLE); - this.state = 951; + this.state = 916; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 82, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 86, this.context) ) { case 1: { - this.state = 950; + this.state = 915; this.ifExists(); } break; } - this.state = 956; + this.state = 921; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 83, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 87, this.context) ) { case 1: { - this.state = 953; + this.state = 918; this.tableName(); } break; case 2: { - this.state = 954; + this.state = 919; this.viewName(); } break; case 3: { - this.state = 955; + this.state = 920; this.functionName(); } break; @@ -2746,14 +2798,14 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ExplainStatementContext(localContext); this.enterOuterAlt(localContext, 46); { - this.state = 958; + this.state = 923; this.match(SparkSqlParser.KW_EXPLAIN); - this.state = 960; + this.state = 925; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 46 || _la === 58 || _la === 108 || _la === 122 || _la === 173) { { - this.state = 959; + this.state = 924; _la = this.tokenStream.LA(1); if(!(_la === 46 || _la === 58 || _la === 108 || _la === 122 || _la === 173)) { this.errorHandler.recoverInline(this); @@ -2765,7 +2817,7 @@ export class SparkSqlParser extends SQLParserBase { } } - this.state = 962; + this.state = 927; this.statement(); } break; @@ -2773,16 +2825,16 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowTablesContext(localContext); this.enterOuterAlt(localContext, 47); { - this.state = 963; + this.state = 928; this.match(SparkSqlParser.KW_SHOW); - this.state = 964; + this.state = 929; this.match(SparkSqlParser.KW_TABLES); - this.state = 967; + this.state = 932; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 85, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 89, this.context) ) { case 1: { - this.state = 965; + this.state = 930; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -2791,27 +2843,27 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 966; + this.state = 931; this.namespaceName(); } break; } - this.state = 973; + this.state = 938; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163 || _la === 377 || _la === 378) { { - this.state = 970; + this.state = 935; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163) { { - this.state = 969; + this.state = 934; this.match(SparkSqlParser.KW_LIKE); } } - this.state = 972; + this.state = 937; (localContext as ShowTablesContext)._pattern = this.stringLit(); } } @@ -2822,18 +2874,18 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowTableExtendedContext(localContext); this.enterOuterAlt(localContext, 48); { - this.state = 975; + this.state = 940; this.match(SparkSqlParser.KW_SHOW); - this.state = 976; + this.state = 941; this.match(SparkSqlParser.KW_TABLE); - this.state = 977; + this.state = 942; this.match(SparkSqlParser.KW_EXTENDED); - this.state = 980; + this.state = 945; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 123 || _la === 140) { { - this.state = 978; + this.state = 943; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -2842,21 +2894,21 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 979; + this.state = 944; (localContext as ShowTableExtendedContext)._ns = this.namespaceName(); } } - this.state = 982; + this.state = 947; this.match(SparkSqlParser.KW_LIKE); - this.state = 983; + this.state = 948; (localContext as ShowTableExtendedContext)._pattern = this.stringLit(); - this.state = 985; + this.state = 950; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 984; + this.state = 949; this.partitionSpec(); } } @@ -2867,22 +2919,22 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowTblPropertiesContext(localContext); this.enterOuterAlt(localContext, 49); { - this.state = 987; + this.state = 952; this.match(SparkSqlParser.KW_SHOW); - this.state = 988; + this.state = 953; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 989; + this.state = 954; (localContext as ShowTblPropertiesContext)._table = this.tableName(); - this.state = 994; + this.state = 959; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 90, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 94, this.context) ) { case 1: { - this.state = 990; + this.state = 955; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 991; + this.state = 956; (localContext as ShowTblPropertiesContext)._key = this.propertyKey(); - this.state = 992; + this.state = 957; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -2893,11 +2945,11 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowColumnsContext(localContext); this.enterOuterAlt(localContext, 50); { - this.state = 996; + this.state = 961; this.match(SparkSqlParser.KW_SHOW); - this.state = 997; + this.state = 962; this.match(SparkSqlParser.KW_COLUMNS); - this.state = 998; + this.state = 963; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -2906,14 +2958,14 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 999; + this.state = 964; (localContext as ShowColumnsContext)._table = this.tableName(); - this.state = 1002; + this.state = 967; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 91, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 95, this.context) ) { case 1: { - this.state = 1000; + this.state = 965; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -2922,7 +2974,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1001; + this.state = 966; this.namespaceName(); } break; @@ -2933,16 +2985,16 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowViewsContext(localContext); this.enterOuterAlt(localContext, 51); { - this.state = 1004; + this.state = 969; this.match(SparkSqlParser.KW_SHOW); - this.state = 1005; + this.state = 970; this.match(SparkSqlParser.KW_VIEWS); - this.state = 1008; + this.state = 973; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 92, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 96, this.context) ) { case 1: { - this.state = 1006; + this.state = 971; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -2951,27 +3003,27 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1007; + this.state = 972; this.namespaceName(); } break; } - this.state = 1014; + this.state = 979; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163 || _la === 377 || _la === 378) { { - this.state = 1011; + this.state = 976; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163) { { - this.state = 1010; + this.state = 975; this.match(SparkSqlParser.KW_LIKE); } } - this.state = 1013; + this.state = 978; (localContext as ShowViewsContext)._pattern = this.stringLit(); } } @@ -2982,18 +3034,18 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowPartitionsContext(localContext); this.enterOuterAlt(localContext, 52); { - this.state = 1016; + this.state = 981; this.match(SparkSqlParser.KW_SHOW); - this.state = 1017; + this.state = 982; this.match(SparkSqlParser.KW_PARTITIONS); - this.state = 1018; + this.state = 983; this.tableName(); - this.state = 1020; + this.state = 985; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 1019; + this.state = 984; this.partitionSpec(); } } @@ -3004,26 +3056,33 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowFunctionsContext(localContext); this.enterOuterAlt(localContext, 53); { - this.state = 1022; + this.state = 987; this.match(SparkSqlParser.KW_SHOW); - this.state = 1024; + this.state = 989; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 10 || _la === 290 || _la === 331) { { - this.state = 1023; - this.functionKind(); + this.state = 988; + _la = this.tokenStream.LA(1); + if(!(_la === 10 || _la === 290 || _la === 331)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } } } - this.state = 1026; + this.state = 991; this.match(SparkSqlParser.KW_FUNCTIONS); - this.state = 1029; + this.state = 994; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 97, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 101, this.context) ) { case 1: { - this.state = 1027; + this.state = 992; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -3032,38 +3091,38 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1028; + this.state = 993; (localContext as ShowFunctionsContext)._ns = this.namespaceName(); } break; } - this.state = 1038; + this.state = 1003; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 100, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 104, this.context) ) { case 1: { - this.state = 1032; + this.state = 997; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 98, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 102, this.context) ) { case 1: { - this.state = 1031; + this.state = 996; this.match(SparkSqlParser.KW_LIKE); } break; } - this.state = 1036; + this.state = 1001; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 99, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 103, this.context) ) { case 1: { - this.state = 1034; + this.state = 999; (localContext as ShowFunctionsContext)._legacy = this.multipartIdentifier(); } break; case 2: { - this.state = 1035; + this.state = 1000; (localContext as ShowFunctionsContext)._pattern = this.stringLit(); } break; @@ -3077,22 +3136,22 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowCreateTableContext(localContext); this.enterOuterAlt(localContext, 54); { - this.state = 1040; + this.state = 1005; this.match(SparkSqlParser.KW_SHOW); - this.state = 1041; + this.state = 1006; this.match(SparkSqlParser.KW_CREATE); - this.state = 1042; + this.state = 1007; this.match(SparkSqlParser.KW_TABLE); - this.state = 1043; + this.state = 1008; this.tableName(); - this.state = 1046; + this.state = 1011; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 1044; + this.state = 1009; this.match(SparkSqlParser.KW_AS); - this.state = 1045; + this.state = 1010; this.match(SparkSqlParser.KW_SERDE); } } @@ -3103,11 +3162,11 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowCurrentNamespaceContext(localContext); this.enterOuterAlt(localContext, 55); { - this.state = 1048; + this.state = 1013; this.match(SparkSqlParser.KW_SHOW); - this.state = 1049; + this.state = 1014; this.match(SparkSqlParser.KW_CURRENT); - this.state = 1050; + this.state = 1015; this.namespace(); } break; @@ -3115,26 +3174,26 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowCatalogsContext(localContext); this.enterOuterAlt(localContext, 56); { - this.state = 1051; + this.state = 1016; this.match(SparkSqlParser.KW_SHOW); - this.state = 1052; + this.state = 1017; this.match(SparkSqlParser.KW_CATALOGS); - this.state = 1057; + this.state = 1022; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163 || _la === 377 || _la === 378) { { - this.state = 1054; + this.state = 1019; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163) { { - this.state = 1053; + this.state = 1018; this.match(SparkSqlParser.KW_LIKE); } } - this.state = 1056; + this.state = 1021; (localContext as ShowCatalogsContext)._pattern = this.stringLit(); } } @@ -3145,18 +3204,18 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowMaterializedViewsContext(localContext); this.enterOuterAlt(localContext, 57); { - this.state = 1059; + this.state = 1024; this.match(SparkSqlParser.KW_SHOW); - this.state = 1060; + this.state = 1025; this.match(SparkSqlParser.KW_MATERIALIZED); - this.state = 1061; + this.state = 1026; this.match(SparkSqlParser.KW_VIEWS); - this.state = 1064; + this.state = 1029; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 104, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 108, this.context) ) { case 1: { - this.state = 1062; + this.state = 1027; _la = this.tokenStream.LA(1); if(!(_la === 123 || _la === 140)) { this.errorHandler.recoverInline(this); @@ -3165,27 +3224,27 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1063; + this.state = 1028; (localContext as ShowMaterializedViewsContext)._db_name = this.namespaceName(); } break; } - this.state = 1070; + this.state = 1035; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163 || _la === 377 || _la === 378) { { - this.state = 1067; + this.state = 1032; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 163) { { - this.state = 1066; + this.state = 1031; this.match(SparkSqlParser.KW_LIKE); } } - this.state = 1069; + this.state = 1034; (localContext as ShowMaterializedViewsContext)._pattern = this.stringLit(); } } @@ -3196,24 +3255,24 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ShowCreateMaterializedViewContext(localContext); this.enterOuterAlt(localContext, 58); { - this.state = 1072; + this.state = 1037; this.match(SparkSqlParser.KW_SHOW); - this.state = 1073; + this.state = 1038; this.match(SparkSqlParser.KW_CREATE); - this.state = 1074; + this.state = 1039; this.match(SparkSqlParser.KW_MATERIALIZED); - this.state = 1075; + this.state = 1040; this.match(SparkSqlParser.KW_VIEW); - this.state = 1076; + this.state = 1041; this.viewName(); - this.state = 1079; + this.state = 1044; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 1077; + this.state = 1042; this.match(SparkSqlParser.KW_AS); - this.state = 1078; + this.state = 1043; this.match(SparkSqlParser.KW_SERDE); } } @@ -3224,7 +3283,7 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DescribeFunctionContext(localContext); this.enterOuterAlt(localContext, 59); { - this.state = 1081; + this.state = 1046; _la = this.tokenStream.LA(1); if(!(_la === 86 || _la === 87)) { this.errorHandler.recoverInline(this); @@ -3233,19 +3292,19 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1082; + this.state = 1047; this.match(SparkSqlParser.KW_FUNCTION); - this.state = 1084; + this.state = 1049; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 108, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 112, this.context) ) { case 1: { - this.state = 1083; + this.state = 1048; this.match(SparkSqlParser.KW_EXTENDED); } break; } - this.state = 1086; + this.state = 1051; this.describeFuncName(); } break; @@ -3253,7 +3312,7 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DescribeNamespaceContext(localContext); this.enterOuterAlt(localContext, 60); { - this.state = 1087; + this.state = 1052; _la = this.tokenStream.LA(1); if(!(_la === 86 || _la === 87)) { this.errorHandler.recoverInline(this); @@ -3262,19 +3321,19 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1088; + this.state = 1053; this.match(SparkSqlParser.KW_DATABASE); - this.state = 1090; + this.state = 1055; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 109, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 113, this.context) ) { case 1: { - this.state = 1089; + this.state = 1054; this.match(SparkSqlParser.KW_EXTENDED); } break; } - this.state = 1092; + this.state = 1057; this.namespaceName(); } break; @@ -3282,7 +3341,7 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DescribeRelationContext(localContext); this.enterOuterAlt(localContext, 61); { - this.state = 1093; + this.state = 1058; _la = this.tokenStream.LA(1); if(!(_la === 86 || _la === 87)) { this.errorHandler.recoverInline(this); @@ -3291,22 +3350,22 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1095; + this.state = 1060; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 293) { { - this.state = 1094; + this.state = 1059; this.match(SparkSqlParser.KW_TABLE); } } - this.state = 1098; + this.state = 1063; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 111, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 115, this.context) ) { case 1: { - this.state = 1097; + this.state = 1062; (localContext as DescribeRelationContext)._option = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 108 || _la === 122)) { @@ -3319,24 +3378,24 @@ export class SparkSqlParser extends SQLParserBase { } break; } - this.state = 1100; + this.state = 1065; this.tableName(); - this.state = 1102; + this.state = 1067; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 112, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 116, this.context) ) { case 1: { - this.state = 1101; + this.state = 1066; this.partitionSpec(); } break; } - this.state = 1105; + this.state = 1070; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 113, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 117, this.context) ) { case 1: { - this.state = 1104; + this.state = 1069; this.describeColName(); } break; @@ -3347,7 +3406,7 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DescribeQueryContext(localContext); this.enterOuterAlt(localContext, 62); { - this.state = 1107; + this.state = 1072; _la = this.tokenStream.LA(1); if(!(_la === 86 || _la === 87)) { this.errorHandler.recoverInline(this); @@ -3356,316 +3415,339 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1109; + this.state = 1074; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 232) { { - this.state = 1108; + this.state = 1073; this.match(SparkSqlParser.KW_QUERY); } } - this.state = 1111; + this.state = 1076; this.query(); } break; case 63: - localContext = new CommentNamespaceContext(localContext); + localContext = new CommentTableContext(localContext); this.enterOuterAlt(localContext, 63); { - this.state = 1112; + this.state = 1077; this.match(SparkSqlParser.KW_COMMENT); - this.state = 1113; + this.state = 1078; this.match(SparkSqlParser.KW_ON); - this.state = 1114; - this.namespace(); - this.state = 1115; - this.namespaceName(); - this.state = 1116; - this.match(SparkSqlParser.KW_IS); - this.state = 1117; - this.comment(); + this.state = 1084; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.KW_DATABASE: + case SparkSqlParser.KW_NAMESPACE: + case SparkSqlParser.KW_SCHEMA: + { + { + this.state = 1079; + this.namespace(); + this.state = 1080; + this.namespaceName(); + } + } + break; + case SparkSqlParser.KW_TABLE: + { + { + this.state = 1082; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1083; + this.tableName(); + } + } + break; + default: + throw new antlr.NoViableAltException(this); } - break; - case 64: - localContext = new CommentTableContext(localContext); - this.enterOuterAlt(localContext, 64); - { - this.state = 1119; - this.match(SparkSqlParser.KW_COMMENT); - this.state = 1120; - this.match(SparkSqlParser.KW_ON); - this.state = 1121; - this.match(SparkSqlParser.KW_TABLE); - this.state = 1122; - this.tableName(); - this.state = 1123; + this.state = 1086; this.match(SparkSqlParser.KW_IS); - this.state = 1124; - this.comment(); + this.state = 1089; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.STRING_LITERAL: + case SparkSqlParser.DOUBLEQUOTED_STRING: + { + this.state = 1087; + this.stringLit(); + } + break; + case SparkSqlParser.KW_NULL: + { + this.state = 1088; + this.match(SparkSqlParser.KW_NULL); + } + break; + default: + throw new antlr.NoViableAltException(this); + } } break; - case 65: + case 64: localContext = new RefreshTableContext(localContext); - this.enterOuterAlt(localContext, 65); + this.enterOuterAlt(localContext, 64); { - this.state = 1126; + this.state = 1091; this.match(SparkSqlParser.KW_REFRESH); - this.state = 1127; + this.state = 1092; this.match(SparkSqlParser.KW_TABLE); - this.state = 1128; + this.state = 1093; this.tableName(); } break; - case 66: + case 65: localContext = new RefreshFunctionContext(localContext); - this.enterOuterAlt(localContext, 66); + this.enterOuterAlt(localContext, 65); { - this.state = 1129; + this.state = 1094; this.match(SparkSqlParser.KW_REFRESH); - this.state = 1130; + this.state = 1095; this.match(SparkSqlParser.KW_FUNCTION); - this.state = 1131; + this.state = 1096; this.functionName(); } break; - case 67: + case 66: localContext = new RefreshResourceContext(localContext); - this.enterOuterAlt(localContext, 67); + this.enterOuterAlt(localContext, 66); { - this.state = 1132; + this.state = 1097; this.match(SparkSqlParser.KW_REFRESH); - this.state = 1140; + this.state = 1105; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 116, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 122, this.context) ) { case 1: { - this.state = 1133; + this.state = 1098; this.stringLit(); } break; case 2: { - this.state = 1137; + this.state = 1102; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 115, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 121, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1134; + this.state = 1099; this.matchWildcard(); } } } - this.state = 1139; + this.state = 1104; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 115, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 121, this.context); } } break; } } break; - case 68: + case 67: localContext = new RefreshMaterializedViewContext(localContext); - this.enterOuterAlt(localContext, 68); + this.enterOuterAlt(localContext, 67); { - this.state = 1142; + this.state = 1107; this.match(SparkSqlParser.KW_REFRESH); - this.state = 1143; + this.state = 1108; this.match(SparkSqlParser.KW_MATERIALIZED); - this.state = 1144; + this.state = 1109; this.match(SparkSqlParser.KW_VIEW); - this.state = 1145; + this.state = 1110; this.viewName(); } break; - case 69: + case 68: localContext = new CacheTableContext(localContext); - this.enterOuterAlt(localContext, 69); + this.enterOuterAlt(localContext, 68); { - this.state = 1146; + this.state = 1111; this.match(SparkSqlParser.KW_CACHE); - this.state = 1148; + this.state = 1113; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 159) { { - this.state = 1147; + this.state = 1112; this.match(SparkSqlParser.KW_LAZY); } } - this.state = 1150; + this.state = 1115; this.match(SparkSqlParser.KW_TABLE); - this.state = 1151; + this.state = 1116; this.tableName(); - this.state = 1154; + this.state = 1119; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 207) { { - this.state = 1152; + this.state = 1117; this.match(SparkSqlParser.KW_OPTIONS); - this.state = 1153; + this.state = 1118; (localContext as CacheTableContext)._options = this.propertyList(); } } - this.state = 1160; + this.state = 1125; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 120, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 126, this.context) ) { case 1: { - this.state = 1157; + this.state = 1122; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 1156; + this.state = 1121; this.match(SparkSqlParser.KW_AS); } } - this.state = 1159; + this.state = 1124; this.query(); } break; } } break; - case 70: + case 69: localContext = new UnCacheTableContext(localContext); - this.enterOuterAlt(localContext, 70); + this.enterOuterAlt(localContext, 69); { - this.state = 1162; + this.state = 1127; this.match(SparkSqlParser.KW_UNCACHE); - this.state = 1163; + this.state = 1128; this.match(SparkSqlParser.KW_TABLE); - this.state = 1165; + this.state = 1130; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 121, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 127, this.context) ) { case 1: { - this.state = 1164; + this.state = 1129; this.ifExists(); } break; } - this.state = 1167; + this.state = 1132; this.tableName(); } break; - case 71: + case 70: localContext = new ClearCacheContext(localContext); - this.enterOuterAlt(localContext, 71); + this.enterOuterAlt(localContext, 70); { - this.state = 1168; + this.state = 1133; this.match(SparkSqlParser.KW_CLEAR); - this.state = 1169; + this.state = 1134; this.match(SparkSqlParser.KW_CACHE); } break; - case 72: + case 71: localContext = new LoadDataContext(localContext); - this.enterOuterAlt(localContext, 72); + this.enterOuterAlt(localContext, 71); { - this.state = 1170; + this.state = 1135; this.match(SparkSqlParser.KW_LOAD); - this.state = 1171; + this.state = 1136; this.match(SparkSqlParser.KW_DATA); - this.state = 1173; + this.state = 1138; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 169) { { - this.state = 1172; + this.state = 1137; this.match(SparkSqlParser.KW_LOCAL); } } - this.state = 1175; + this.state = 1140; this.match(SparkSqlParser.KW_INPATH); - this.state = 1176; + this.state = 1141; (localContext as LoadDataContext)._path = this.stringLit(); - this.state = 1178; + this.state = 1143; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 216) { { - this.state = 1177; + this.state = 1142; this.match(SparkSqlParser.KW_OVERWRITE); } } - this.state = 1180; + this.state = 1145; this.match(SparkSqlParser.KW_INTO); - this.state = 1181; + this.state = 1146; this.match(SparkSqlParser.KW_TABLE); - this.state = 1182; + this.state = 1147; this.tableName(); - this.state = 1184; + this.state = 1149; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 1183; + this.state = 1148; this.partitionSpec(); } } } break; - case 73: + case 72: localContext = new TruncateTableContext(localContext); - this.enterOuterAlt(localContext, 73); + this.enterOuterAlt(localContext, 72); { - this.state = 1186; + this.state = 1151; this.match(SparkSqlParser.KW_TRUNCATE); - this.state = 1187; + this.state = 1152; this.match(SparkSqlParser.KW_TABLE); - this.state = 1188; + this.state = 1153; this.tableName(); - this.state = 1190; + this.state = 1155; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 1189; + this.state = 1154; this.partitionSpec(); } } } break; - case 74: + case 73: localContext = new RepairTableContext(localContext); - this.enterOuterAlt(localContext, 74); + this.enterOuterAlt(localContext, 73); { - this.state = 1193; + this.state = 1158; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 188) { { - this.state = 1192; + this.state = 1157; this.match(SparkSqlParser.KW_MSCK); } } - this.state = 1195; + this.state = 1160; this.match(SparkSqlParser.KW_REPAIR); - this.state = 1196; + this.state = 1161; this.match(SparkSqlParser.KW_TABLE); - this.state = 1197; + this.state = 1162; this.tableName(); - this.state = 1200; + this.state = 1165; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 127, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 133, this.context) ) { case 1: { - this.state = 1198; + this.state = 1163; (localContext as RepairTableContext)._option = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 8 || _la === 96 || _la === 289)) { @@ -3675,18 +3757,18 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1199; + this.state = 1164; this.match(SparkSqlParser.KW_PARTITIONS); } break; } } break; - case 75: + case 74: localContext = new ManageResourceContext(localContext); - this.enterOuterAlt(localContext, 75); + this.enterOuterAlt(localContext, 74); { - this.state = 1202; + this.state = 1167; (localContext as ManageResourceContext)._op = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 8 || _la === 167)) { @@ -3696,115 +3778,132 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1203; + this.state = 1168; this.identifier(); - this.state = 1207; + this.state = 1172; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 128, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 134, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1204; + this.state = 1169; this.matchWildcard(); } } } - this.state = 1209; + this.state = 1174; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 128, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 134, this.context); } } break; - case 76: + case 75: localContext = new FailNativeCommandContext(localContext); - this.enterOuterAlt(localContext, 76); + this.enterOuterAlt(localContext, 75); { - this.state = 1210; + this.state = 1175; this.match(SparkSqlParser.KW_SET); - this.state = 1211; + this.state = 1176; this.match(SparkSqlParser.KW_ROLE); - this.state = 1215; + this.state = 1180; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 129, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 135, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1212; + this.state = 1177; this.matchWildcard(); } } } - this.state = 1217; + this.state = 1182; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 129, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 135, this.context); } } break; - case 77: + case 76: localContext = new SetTimeZoneIntervalContext(localContext); - this.enterOuterAlt(localContext, 77); + this.enterOuterAlt(localContext, 76); { - this.state = 1218; + this.state = 1183; this.match(SparkSqlParser.KW_SET); - this.state = 1219; + this.state = 1184; this.match(SparkSqlParser.KW_TIME); - this.state = 1220; + this.state = 1185; this.match(SparkSqlParser.KW_ZONE); - this.state = 1221; + this.state = 1186; this.interval(); } break; - case 78: + case 77: localContext = new SetTimeZoneContext(localContext); - this.enterOuterAlt(localContext, 78); + this.enterOuterAlt(localContext, 77); { - this.state = 1222; + this.state = 1187; this.match(SparkSqlParser.KW_SET); - this.state = 1223; + this.state = 1188; this.match(SparkSqlParser.KW_TIME); - this.state = 1224; + this.state = 1189; this.match(SparkSqlParser.KW_ZONE); - this.state = 1225; - this.timezone(); + this.state = 1192; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.STRING_LITERAL: + case SparkSqlParser.DOUBLEQUOTED_STRING: + { + this.state = 1190; + this.stringLit(); + } + break; + case SparkSqlParser.KW_LOCAL: + { + this.state = 1191; + this.match(SparkSqlParser.KW_LOCAL); + } + break; + default: + throw new antlr.NoViableAltException(this); + } } break; - case 79: + case 78: localContext = new SetTimeZoneAnyContext(localContext); - this.enterOuterAlt(localContext, 79); + this.enterOuterAlt(localContext, 78); { - this.state = 1226; + this.state = 1194; this.match(SparkSqlParser.KW_SET); - this.state = 1227; + this.state = 1195; this.match(SparkSqlParser.KW_TIME); - this.state = 1228; + this.state = 1196; this.match(SparkSqlParser.KW_ZONE); - this.state = 1232; + this.state = 1200; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 130, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 137, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1229; + this.state = 1197; this.matchWildcard(); } } } - this.state = 1234; + this.state = 1202; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 130, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 137, this.context); } } break; - case 80: + case 79: localContext = new SetVariableAssignmentContext(localContext); - this.enterOuterAlt(localContext, 80); + this.enterOuterAlt(localContext, 79); { - this.state = 1235; + this.state = 1203; this.match(SparkSqlParser.KW_SET); - this.state = 1236; + this.state = 1204; _la = this.tokenStream.LA(1); if(!(_la === 335 || _la === 336)) { this.errorHandler.recoverInline(this); @@ -3813,17 +3912,17 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1237; + this.state = 1205; this.assignmentList(); } break; - case 81: + case 80: localContext = new SetVariableMultiAssignmentContext(localContext); - this.enterOuterAlt(localContext, 81); + this.enterOuterAlt(localContext, 80); { - this.state = 1238; + this.state = 1206; this.match(SparkSqlParser.KW_SET); - this.state = 1239; + this.state = 1207; _la = this.tokenStream.LA(1); if(!(_la === 335 || _la === 336)) { this.errorHandler.recoverInline(this); @@ -3832,394 +3931,310 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 1240; + this.state = 1208; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1241; + this.state = 1209; this.multipartIdentifierList(); - this.state = 1242; + this.state = 1210; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 1243; + this.state = 1211; this.match(SparkSqlParser.EQ); - this.state = 1244; + this.state = 1212; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1245; + this.state = 1213; this.query(); - this.state = 1246; + this.state = 1214; this.match(SparkSqlParser.RIGHT_PAREN); } break; - case 82: + case 81: localContext = new SetConfigContext(localContext); - this.enterOuterAlt(localContext, 82); + this.enterOuterAlt(localContext, 81); { - this.state = 1248; + this.state = 1216; this.match(SparkSqlParser.KW_SET); - this.state = 1249; - this.configKey(); - this.state = 1250; + this.state = 1217; + this.quotedIdentifier(); + this.state = 1218; this.match(SparkSqlParser.EQ); - this.state = 1251; - this.configValue(); + this.state = 1219; + this.match(SparkSqlParser.BACKQUOTED_IDENTIFIER); } break; - case 83: + case 82: localContext = new SetConfigAndValueContext(localContext); - this.enterOuterAlt(localContext, 83); + this.enterOuterAlt(localContext, 82); { - this.state = 1253; + this.state = 1221; this.match(SparkSqlParser.KW_SET); - this.state = 1254; - this.configKey(); - this.state = 1262; + this.state = 1222; + this.quotedIdentifier(); + this.state = 1230; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 352) { { - this.state = 1255; + this.state = 1223; this.match(SparkSqlParser.EQ); - this.state = 1259; + this.state = 1227; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 131, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 138, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1256; + this.state = 1224; this.matchWildcard(); } } } - this.state = 1261; + this.state = 1229; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 131, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 138, this.context); } } } } break; - case 84: + case 83: localContext = new SetConfigAnyKeyContext(localContext); - this.enterOuterAlt(localContext, 84); + this.enterOuterAlt(localContext, 83); { - this.state = 1264; + this.state = 1232; this.match(SparkSqlParser.KW_SET); - this.state = 1268; + this.state = 1236; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 133, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 140, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1265; + this.state = 1233; this.matchWildcard(); } } } - this.state = 1270; + this.state = 1238; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 133, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 140, this.context); } - this.state = 1271; + this.state = 1239; this.match(SparkSqlParser.EQ); - this.state = 1272; - this.configValue(); + this.state = 1240; + this.match(SparkSqlParser.BACKQUOTED_IDENTIFIER); } break; - case 85: + case 84: localContext = new SetAnyContext(localContext); - this.enterOuterAlt(localContext, 85); + this.enterOuterAlt(localContext, 84); { - this.state = 1273; + this.state = 1241; this.match(SparkSqlParser.KW_SET); - this.state = 1277; + this.state = 1245; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 134, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 141, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1274; + this.state = 1242; this.matchWildcard(); } } } - this.state = 1279; + this.state = 1247; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 134, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 141, this.context); } } break; - case 86: + case 85: localContext = new ResetConfigContext(localContext); - this.enterOuterAlt(localContext, 86); + this.enterOuterAlt(localContext, 85); { - this.state = 1280; + this.state = 1248; this.match(SparkSqlParser.KW_RESET); - this.state = 1281; - this.configKey(); + this.state = 1249; + this.quotedIdentifier(); } break; - case 87: + case 86: localContext = new ResetAnyContext(localContext); - this.enterOuterAlt(localContext, 87); + this.enterOuterAlt(localContext, 86); { - this.state = 1282; + this.state = 1250; this.match(SparkSqlParser.KW_RESET); - this.state = 1286; + this.state = 1254; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 135, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 142, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1283; + this.state = 1251; this.matchWildcard(); } } } - this.state = 1288; + this.state = 1256; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 135, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 142, this.context); } } break; - case 88: + case 87: localContext = new CreateIndexContext(localContext); - this.enterOuterAlt(localContext, 88); + this.enterOuterAlt(localContext, 87); { - this.state = 1289; + this.state = 1257; this.match(SparkSqlParser.KW_CREATE); - this.state = 1290; + this.state = 1258; this.match(SparkSqlParser.KW_INDEX); - this.state = 1292; + this.state = 1260; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 136, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 143, this.context) ) { case 1: { - this.state = 1291; + this.state = 1259; this.ifNotExists(); } break; } - this.state = 1294; + this.state = 1262; this.identifier(); - this.state = 1295; + this.state = 1263; this.match(SparkSqlParser.KW_ON); - this.state = 1297; + this.state = 1265; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 293) { { - this.state = 1296; + this.state = 1264; this.match(SparkSqlParser.KW_TABLE); } } - this.state = 1299; + this.state = 1267; this.tableName(); - this.state = 1302; + this.state = 1270; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 332) { { - this.state = 1300; + this.state = 1268; this.match(SparkSqlParser.KW_USING); - this.state = 1301; + this.state = 1269; (localContext as CreateIndexContext)._indexType = this.identifier(); } } - this.state = 1304; + this.state = 1272; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1305; + this.state = 1273; this.multipartIdentifierPropertyList(); - this.state = 1306; + this.state = 1274; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 1309; + this.state = 1277; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 207) { { - this.state = 1307; + this.state = 1275; this.match(SparkSqlParser.KW_OPTIONS); - this.state = 1308; + this.state = 1276; (localContext as CreateIndexContext)._options = this.propertyList(); } } } break; - case 89: + case 88: localContext = new DropIndexContext(localContext); - this.enterOuterAlt(localContext, 89); + this.enterOuterAlt(localContext, 88); { - this.state = 1311; + this.state = 1279; this.match(SparkSqlParser.KW_DROP); - this.state = 1312; + this.state = 1280; this.match(SparkSqlParser.KW_INDEX); - this.state = 1314; + this.state = 1282; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 140, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 147, this.context) ) { case 1: { - this.state = 1313; + this.state = 1281; this.ifExists(); } break; } - this.state = 1316; + this.state = 1284; this.identifier(); - this.state = 1317; + this.state = 1285; this.match(SparkSqlParser.KW_ON); - this.state = 1319; + this.state = 1287; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 293) { { - this.state = 1318; + this.state = 1286; this.match(SparkSqlParser.KW_TABLE); } } - this.state = 1321; + this.state = 1289; this.tableName(); } break; - case 90: + case 89: localContext = new OptimizeTableContext(localContext); - this.enterOuterAlt(localContext, 90); + this.enterOuterAlt(localContext, 89); { - this.state = 1323; + this.state = 1291; this.match(SparkSqlParser.KW_OPTIMIZE); - this.state = 1324; + this.state = 1292; this.tableName(); - this.state = 1326; + this.state = 1294; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 344) { { - this.state = 1325; + this.state = 1293; this.whereClause(); } } - this.state = 1328; - this.zorderClause(); + this.state = 1296; + this.match(SparkSqlParser.KW_ZORDER); + this.state = 1297; + this.match(SparkSqlParser.KW_BY); + this.state = 1298; + this.columnNameSeq(); } break; - case 91: + case 90: localContext = new UnsupportHiveCommandsContext(localContext); - this.enterOuterAlt(localContext, 91); + this.enterOuterAlt(localContext, 90); { - this.state = 1330; + this.state = 1300; this.unsupportedHiveNativeCommands(); - this.state = 1334; + this.state = 1304; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 143, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 150, this.context); while (alternative !== 1 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1 + 1) { { { - this.state = 1331; + this.state = 1301; this.matchWildcard(); } } } - this.state = 1336; + this.state = 1306; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 143, this.context); - } - } - break; - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public timezone(): TimezoneContext { - let localContext = new TimezoneContext(this.context, this.state); - this.enterRule(localContext, 6, SparkSqlParser.RULE_timezone); - try { - this.state = 1341; - this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case SparkSqlParser.STRING_LITERAL: - case SparkSqlParser.DOUBLEQUOTED_STRING: - this.enterOuterAlt(localContext, 1); - { - this.state = 1339; - this.stringLit(); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 150, this.context); } - break; - case SparkSqlParser.KW_LOCAL: - this.enterOuterAlt(localContext, 2); - { - this.state = 1340; - this.match(SparkSqlParser.KW_LOCAL); } break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public configKey(): ConfigKeyContext { - let localContext = new ConfigKeyContext(this.context, this.state); - this.enterRule(localContext, 8, SparkSqlParser.RULE_configKey); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1343; - this.quotedIdentifier(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public configValue(): ConfigValueContext { - let localContext = new ConfigValueContext(this.context, this.state); - this.enterRule(localContext, 10, SparkSqlParser.RULE_configValue); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1345; - this.backQuotedIdentifier(); } } catch (re) { @@ -4238,59 +4253,85 @@ export class SparkSqlParser extends SQLParserBase { } public unsupportedHiveNativeCommands(): UnsupportedHiveNativeCommandsContext { let localContext = new UnsupportedHiveNativeCommandsContext(this.context, this.state); - this.enterRule(localContext, 12, SparkSqlParser.RULE_unsupportedHiveNativeCommands); + this.enterRule(localContext, 6, SparkSqlParser.RULE_unsupportedHiveNativeCommands); let _la: number; try { - this.state = 1515; + this.state = 1402; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 153, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 157, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1347; - localContext._kw1 = this.match(SparkSqlParser.KW_CREATE); - this.state = 1348; + this.state = 1309; + localContext._kw1 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 59 || _la === 96)) { + localContext._kw1 = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1310; localContext._kw2 = this.match(SparkSqlParser.KW_ROLE); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1349; - localContext._kw1 = this.match(SparkSqlParser.KW_DROP); - this.state = 1350; - localContext._kw2 = this.match(SparkSqlParser.KW_ROLE); + this.state = 1311; + localContext._kw1 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 129 || _la === 249)) { + localContext._kw1 = this.errorHandler.recoverInline(this); } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 1351; - localContext._kw1 = this.match(SparkSqlParser.KW_GRANT); - this.state = 1353; + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1313; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 146, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 152, this.context) ) { case 1: { - this.state = 1352; + this.state = 1312; localContext._kw2 = this.match(SparkSqlParser.KW_ROLE); } break; } } break; + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 1315; + localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1316; + localContext._kw2 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 54 || _la === 129 || _la === 143 || _la === 172 || _la === 228 || _la === 313)) { + localContext._kw2 = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + } + break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1355; - localContext._kw1 = this.match(SparkSqlParser.KW_REVOKE); - this.state = 1357; + this.state = 1317; + localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1318; + localContext._kw2 = this.match(SparkSqlParser.KW_ROLE); + this.state = 1320; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 147, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 153, this.context) ) { case 1: { - this.state = 1356; - localContext._kw2 = this.match(SparkSqlParser.KW_ROLE); + this.state = 1319; + localContext._kw3 = this.match(SparkSqlParser.KW_GRANT); } break; } @@ -4299,502 +4340,322 @@ export class SparkSqlParser extends SQLParserBase { case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1359; + this.state = 1322; localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1360; - localContext._kw2 = this.match(SparkSqlParser.KW_GRANT); + this.state = 1324; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 62) { + { + this.state = 1323; + this.match(SparkSqlParser.KW_CURRENT); + } + } + + this.state = 1326; + this.match(SparkSqlParser.KW_ROLES); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 1361; + this.state = 1327; localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1362; - localContext._kw2 = this.match(SparkSqlParser.KW_ROLE); - this.state = 1364; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 148, this.context) ) { - case 1: - { - this.state = 1363; - localContext._kw3 = this.match(SparkSqlParser.KW_GRANT); - } - break; - } + this.state = 1328; + localContext._kw2 = this.match(SparkSqlParser.KW_CREATE); + this.state = 1329; + localContext._kw3 = this.match(SparkSqlParser.KW_TABLE); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 1366; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1367; - localContext._kw2 = this.match(SparkSqlParser.KW_PRINCIPALS); + this.state = 1330; + localContext._kw1 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 11 || _la === 59 || _la === 96)) { + localContext._kw1 = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1331; + localContext._kw2 = this.match(SparkSqlParser.KW_INDEX); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 1368; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1369; - localContext._kw2 = this.match(SparkSqlParser.KW_ROLES); + this.state = 1332; + localContext._kw1 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 107 || _la === 139 || _la === 171 || _la === 326)) { + localContext._kw1 = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1333; + localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 1370; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1371; - localContext._kw2 = this.match(SparkSqlParser.KW_CURRENT); - this.state = 1372; - localContext._kw3 = this.match(SparkSqlParser.KW_ROLES); + this.state = 1334; + localContext._kw1 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 171 || _la === 326)) { + localContext._kw1 = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1335; + localContext._kw2 = this.match(SparkSqlParser.KW_DATABASE); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 1373; - localContext._kw1 = this.match(SparkSqlParser.KW_EXPORT); - this.state = 1374; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - } - break; - case 11: - this.enterOuterAlt(localContext, 11); - { - this.state = 1375; - localContext._kw1 = this.match(SparkSqlParser.KW_IMPORT); - this.state = 1376; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - } - break; - case 12: - this.enterOuterAlt(localContext, 12); - { - this.state = 1377; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1378; - localContext._kw2 = this.match(SparkSqlParser.KW_COMPACTIONS); - } - break; - case 13: - this.enterOuterAlt(localContext, 13); - { - this.state = 1379; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1380; - localContext._kw2 = this.match(SparkSqlParser.KW_CREATE); - this.state = 1381; - localContext._kw3 = this.match(SparkSqlParser.KW_TABLE); - } - break; - case 14: - this.enterOuterAlt(localContext, 14); - { - this.state = 1382; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1383; - localContext._kw2 = this.match(SparkSqlParser.KW_TRANSACTIONS); - } - break; - case 15: - this.enterOuterAlt(localContext, 15); - { - this.state = 1384; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1385; - localContext._kw2 = this.match(SparkSqlParser.KW_INDEXES); - } - break; - case 16: - this.enterOuterAlt(localContext, 16); - { - this.state = 1386; - localContext._kw1 = this.match(SparkSqlParser.KW_SHOW); - this.state = 1387; - localContext._kw2 = this.match(SparkSqlParser.KW_LOCKS); - } - break; - case 17: - this.enterOuterAlt(localContext, 17); - { - this.state = 1388; - localContext._kw1 = this.match(SparkSqlParser.KW_CREATE); - this.state = 1389; - localContext._kw2 = this.match(SparkSqlParser.KW_INDEX); - } - break; - case 18: - this.enterOuterAlt(localContext, 18); - { - this.state = 1390; - localContext._kw1 = this.match(SparkSqlParser.KW_DROP); - this.state = 1391; - localContext._kw2 = this.match(SparkSqlParser.KW_INDEX); - } - break; - case 19: - this.enterOuterAlt(localContext, 19); - { - this.state = 1392; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1393; - localContext._kw2 = this.match(SparkSqlParser.KW_INDEX); - } - break; - case 20: - this.enterOuterAlt(localContext, 20); - { - this.state = 1394; - localContext._kw1 = this.match(SparkSqlParser.KW_LOCK); - this.state = 1395; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - } - break; - case 21: - this.enterOuterAlt(localContext, 21); - { - this.state = 1396; - localContext._kw1 = this.match(SparkSqlParser.KW_LOCK); - this.state = 1397; - localContext._kw2 = this.match(SparkSqlParser.KW_DATABASE); - } - break; - case 22: - this.enterOuterAlt(localContext, 22); - { - this.state = 1398; - localContext._kw1 = this.match(SparkSqlParser.KW_UNLOCK); - this.state = 1399; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - } - break; - case 23: - this.enterOuterAlt(localContext, 23); - { - this.state = 1400; - localContext._kw1 = this.match(SparkSqlParser.KW_UNLOCK); - this.state = 1401; - localContext._kw2 = this.match(SparkSqlParser.KW_DATABASE); + this.state = 1336; + localContext._kw1 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 59 || _la === 96)) { + localContext._kw1 = this.errorHandler.recoverInline(this); } - break; - case 24: - this.enterOuterAlt(localContext, 24); - { - this.state = 1402; - localContext._kw1 = this.match(SparkSqlParser.KW_CREATE); - this.state = 1403; - localContext._kw2 = this.match(SparkSqlParser.KW_TEMPORARY); - this.state = 1404; - localContext._kw3 = this.match(SparkSqlParser.KW_MACRO); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 25: - this.enterOuterAlt(localContext, 25); - { - this.state = 1405; - localContext._kw1 = this.match(SparkSqlParser.KW_DROP); - this.state = 1406; + this.state = 1337; localContext._kw2 = this.match(SparkSqlParser.KW_TEMPORARY); - this.state = 1407; + this.state = 1338; localContext._kw3 = this.match(SparkSqlParser.KW_MACRO); } break; - case 26: - this.enterOuterAlt(localContext, 26); + case 11: + this.enterOuterAlt(localContext, 11); { - this.state = 1408; + this.state = 1339; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1409; + this.state = 1340; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1410; + this.state = 1341; this.tableName(); - this.state = 1411; + this.state = 1342; localContext._kw3 = this.match(SparkSqlParser.KW_NOT); - this.state = 1412; - localContext._kw4 = this.match(SparkSqlParser.KW_CLUSTERED); + this.state = 1343; + localContext._kw4 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 45 || _la === 275 || _la === 279)) { + localContext._kw4 = this.errorHandler.recoverInline(this); } - break; - case 27: - this.enterOuterAlt(localContext, 27); - { - this.state = 1414; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1415; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1416; - this.tableName(); - this.state = 1417; - localContext._kw3 = this.match(SparkSqlParser.KW_CLUSTERED); - this.state = 1418; - localContext._kw4 = this.match(SparkSqlParser.KW_BY); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 28: - this.enterOuterAlt(localContext, 28); - { - this.state = 1420; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1421; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1422; - this.tableName(); - this.state = 1423; - localContext._kw3 = this.match(SparkSqlParser.KW_NOT); - this.state = 1424; - localContext._kw4 = this.match(SparkSqlParser.KW_SORTED); } break; - case 29: - this.enterOuterAlt(localContext, 29); + case 12: + this.enterOuterAlt(localContext, 12); { - this.state = 1426; + this.state = 1345; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1427; + this.state = 1346; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1428; + this.state = 1347; this.tableName(); - this.state = 1429; - localContext._kw3 = this.match(SparkSqlParser.KW_SKEWED); - this.state = 1430; + this.state = 1348; + localContext._kw3 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 45 || _la === 275)) { + localContext._kw3 = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 1349; localContext._kw4 = this.match(SparkSqlParser.KW_BY); } break; - case 30: - this.enterOuterAlt(localContext, 30); + case 13: + this.enterOuterAlt(localContext, 13); { - this.state = 1432; + this.state = 1351; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1433; + this.state = 1352; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1434; + this.state = 1353; this.tableName(); - this.state = 1435; - localContext._kw3 = this.match(SparkSqlParser.KW_NOT); - this.state = 1436; - localContext._kw4 = this.match(SparkSqlParser.KW_SKEWED); + this.state = 1354; + localContext._kw3 = this.match(SparkSqlParser.KW_SKEWED); + this.state = 1355; + localContext._kw4 = this.match(SparkSqlParser.KW_BY); } break; - case 31: - this.enterOuterAlt(localContext, 31); + case 14: + this.enterOuterAlt(localContext, 14); { - this.state = 1438; + this.state = 1357; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1439; + this.state = 1358; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1440; + this.state = 1359; this.tableName(); - this.state = 1441; + this.state = 1360; localContext._kw3 = this.match(SparkSqlParser.KW_NOT); - this.state = 1442; + this.state = 1361; localContext._kw4 = this.match(SparkSqlParser.KW_STORED); - this.state = 1443; + this.state = 1362; localContext._kw5 = this.match(SparkSqlParser.KW_AS); - this.state = 1444; + this.state = 1363; localContext._kw6 = this.match(SparkSqlParser.KW_DIRECTORIES); } break; - case 32: - this.enterOuterAlt(localContext, 32); + case 15: + this.enterOuterAlt(localContext, 15); { - this.state = 1446; + this.state = 1365; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1447; + this.state = 1366; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1448; + this.state = 1367; this.tableName(); - this.state = 1449; + this.state = 1368; localContext._kw3 = this.match(SparkSqlParser.KW_SET); - this.state = 1450; + this.state = 1369; localContext._kw4 = this.match(SparkSqlParser.KW_SKEWED); - this.state = 1451; + this.state = 1370; localContext._kw5 = this.match(SparkSqlParser.KW_LOCATION); } break; - case 33: - this.enterOuterAlt(localContext, 33); + case 16: + this.enterOuterAlt(localContext, 16); { - this.state = 1453; + this.state = 1372; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1454; + this.state = 1373; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1455; + this.state = 1374; this.tableName(); - this.state = 1456; - localContext._kw3 = this.match(SparkSqlParser.KW_EXCHANGE); - this.state = 1457; - localContext._kw4 = this.match(SparkSqlParser.KW_PARTITION); + this.state = 1375; + localContext._kw3 = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 18 || _la === 103 || _la === 320)) { + localContext._kw3 = this.errorHandler.recoverInline(this); } - break; - case 34: - this.enterOuterAlt(localContext, 34); - { - this.state = 1459; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1460; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1461; - this.tableName(); - this.state = 1462; - localContext._kw3 = this.match(SparkSqlParser.KW_ARCHIVE); - this.state = 1463; - localContext._kw4 = this.match(SparkSqlParser.KW_PARTITION); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 35: - this.enterOuterAlt(localContext, 35); - { - this.state = 1465; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1466; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1467; - this.tableName(); - this.state = 1468; - localContext._kw3 = this.match(SparkSqlParser.KW_UNARCHIVE); - this.state = 1469; + this.state = 1376; localContext._kw4 = this.match(SparkSqlParser.KW_PARTITION); } break; - case 36: - this.enterOuterAlt(localContext, 36); + case 17: + this.enterOuterAlt(localContext, 17); { - this.state = 1471; + this.state = 1378; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1472; + this.state = 1379; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1473; + this.state = 1380; this.tableName(); - this.state = 1474; + this.state = 1381; localContext._kw3 = this.match(SparkSqlParser.KW_TOUCH); } break; - case 37: - this.enterOuterAlt(localContext, 37); + case 18: + this.enterOuterAlt(localContext, 18); { - this.state = 1476; + this.state = 1383; localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1477; + this.state = 1384; localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1478; + this.state = 1385; this.tableName(); - this.state = 1480; + this.state = 1387; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 1479; + this.state = 1386; this.partitionSpec(); } } - this.state = 1482; - localContext._kw3 = this.match(SparkSqlParser.KW_COMPACT); - } - break; - case 38: - this.enterOuterAlt(localContext, 38); - { - this.state = 1484; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1485; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1486; - this.tableName(); - this.state = 1488; + this.state = 1395; this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 217) { + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.KW_COMPACT: { - this.state = 1487; - this.partitionSpec(); + this.state = 1389; + this.match(SparkSqlParser.KW_COMPACT); } - } - - this.state = 1490; - localContext._kw3 = this.match(SparkSqlParser.KW_CONCATENATE); - } - break; - case 39: - this.enterOuterAlt(localContext, 39); - { - this.state = 1492; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1493; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1494; - this.tableName(); - this.state = 1496; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 217) { + break; + case SparkSqlParser.KW_CONCATENATE: { - this.state = 1495; - this.partitionSpec(); + this.state = 1390; + this.match(SparkSqlParser.KW_CONCATENATE); } - } - - this.state = 1498; - localContext._kw3 = this.match(SparkSqlParser.KW_SET); - this.state = 1499; - localContext._kw4 = this.match(SparkSqlParser.KW_FILEFORMAT); - } - break; - case 40: - this.enterOuterAlt(localContext, 40); - { - this.state = 1501; - localContext._kw1 = this.match(SparkSqlParser.KW_ALTER); - this.state = 1502; - localContext._kw2 = this.match(SparkSqlParser.KW_TABLE); - this.state = 1503; - this.tableName(); - this.state = 1505; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 217) { + break; + case SparkSqlParser.KW_SET: { - this.state = 1504; - this.partitionSpec(); + { + this.state = 1391; + this.match(SparkSqlParser.KW_SET); + this.state = 1392; + this.match(SparkSqlParser.KW_FILEFORMAT); + } + } + break; + case SparkSqlParser.KW_REPLACE: + { + { + this.state = 1393; + this.match(SparkSqlParser.KW_REPLACE); + this.state = 1394; + this.match(SparkSqlParser.KW_COLUMNS); + } } + break; + default: + throw new antlr.NoViableAltException(this); } - - this.state = 1507; - localContext._kw3 = this.match(SparkSqlParser.KW_REPLACE); - this.state = 1508; - localContext._kw4 = this.match(SparkSqlParser.KW_COLUMNS); } break; - case 41: - this.enterOuterAlt(localContext, 41); + case 19: + this.enterOuterAlt(localContext, 19); { - this.state = 1510; + this.state = 1397; localContext._kw1 = this.match(SparkSqlParser.KW_START); - this.state = 1511; + this.state = 1398; localContext._kw2 = this.match(SparkSqlParser.KW_TRANSACTION); } break; - case 42: - this.enterOuterAlt(localContext, 42); + case 20: + this.enterOuterAlt(localContext, 20); { - this.state = 1512; + this.state = 1399; localContext._kw1 = this.match(SparkSqlParser.KW_COMMIT); } break; - case 43: - this.enterOuterAlt(localContext, 43); + case 21: + this.enterOuterAlt(localContext, 21); { - this.state = 1513; + this.state = 1400; localContext._kw1 = this.match(SparkSqlParser.KW_ROLLBACK); } break; - case 44: - this.enterOuterAlt(localContext, 44); + case 22: + this.enterOuterAlt(localContext, 22); { - this.state = 1514; + this.state = 1401; localContext._kw1 = this.match(SparkSqlParser.KW_DFS); } break; @@ -4814,138 +4675,38 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public createTableHeader(): CreateTableHeaderContext { - let localContext = new CreateTableHeaderContext(this.context, this.state); - this.enterRule(localContext, 14, SparkSqlParser.RULE_createTableHeader); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1517; - this.match(SparkSqlParser.KW_CREATE); - this.state = 1519; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 298) { - { - this.state = 1518; - this.match(SparkSqlParser.KW_TEMPORARY); - } - } - - this.state = 1522; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 109) { - { - this.state = 1521; - this.match(SparkSqlParser.KW_EXTERNAL); - } - } - - this.state = 1524; - this.match(SparkSqlParser.KW_TABLE); - this.state = 1526; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 156, this.context) ) { - case 1: - { - this.state = 1525; - this.ifNotExists(); - } - break; - } - this.state = 1528; - this.tableNameCreate(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public replaceTableHeader(): ReplaceTableHeaderContext { - let localContext = new ReplaceTableHeaderContext(this.context, this.state); - this.enterRule(localContext, 16, SparkSqlParser.RULE_replaceTableHeader); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1532; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 59) { - { - this.state = 1530; - this.match(SparkSqlParser.KW_CREATE); - this.state = 1531; - this.match(SparkSqlParser.KW_OR); - } - } - - this.state = 1534; - this.match(SparkSqlParser.KW_REPLACE); - this.state = 1535; - this.match(SparkSqlParser.KW_TABLE); - this.state = 1536; - this.tableNameCreate(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public bucketSpec(): BucketSpecContext { let localContext = new BucketSpecContext(this.context, this.state); - this.enterRule(localContext, 18, SparkSqlParser.RULE_bucketSpec); + this.enterRule(localContext, 8, SparkSqlParser.RULE_bucketSpec); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1538; + this.state = 1404; this.match(SparkSqlParser.KW_CLUSTERED); - this.state = 1539; + this.state = 1405; this.match(SparkSqlParser.KW_BY); - this.state = 1540; + this.state = 1406; this.identifierList(); - this.state = 1544; + this.state = 1410; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 279) { { - this.state = 1541; + this.state = 1407; this.match(SparkSqlParser.KW_SORTED); - this.state = 1542; + this.state = 1408; this.match(SparkSqlParser.KW_BY); - this.state = 1543; + this.state = 1409; this.orderedIdentifierList(); } } - this.state = 1546; + this.state = 1412; this.match(SparkSqlParser.KW_INTO); - this.state = 1547; + this.state = 1413; this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 1548; + this.state = 1414; this.match(SparkSqlParser.KW_BUCKETS); } } @@ -4965,44 +4726,44 @@ export class SparkSqlParser extends SQLParserBase { } public skewSpec(): SkewSpecContext { let localContext = new SkewSpecContext(this.context, this.state); - this.enterRule(localContext, 20, SparkSqlParser.RULE_skewSpec); + this.enterRule(localContext, 10, SparkSqlParser.RULE_skewSpec); try { this.enterOuterAlt(localContext, 1); { - this.state = 1550; + this.state = 1416; this.match(SparkSqlParser.KW_SKEWED); - this.state = 1551; + this.state = 1417; this.match(SparkSqlParser.KW_BY); - this.state = 1552; + this.state = 1418; this.identifierList(); - this.state = 1553; + this.state = 1419; this.match(SparkSqlParser.KW_ON); - this.state = 1556; + this.state = 1422; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 159, this.context) ) { case 1: { - this.state = 1554; + this.state = 1420; this.constantList(); } break; case 2: { - this.state = 1555; + this.state = 1421; this.nestedConstantList(); } break; } - this.state = 1561; + this.state = 1427; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 160, this.context) ) { case 1: { - this.state = 1558; + this.state = 1424; this.match(SparkSqlParser.KW_STORED); - this.state = 1559; + this.state = 1425; this.match(SparkSqlParser.KW_AS); - this.state = 1560; + this.state = 1426; this.match(SparkSqlParser.KW_DIRECTORIES); } break; @@ -5023,79 +4784,27 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public locationSpec(): LocationSpecContext { - let localContext = new LocationSpecContext(this.context, this.state); - this.enterRule(localContext, 22, SparkSqlParser.RULE_locationSpec); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1563; - this.match(SparkSqlParser.KW_LOCATION); - this.state = 1564; - this.stringLit(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public commentSpec(): CommentSpecContext { - let localContext = new CommentSpecContext(this.context, this.state); - this.enterRule(localContext, 24, SparkSqlParser.RULE_commentSpec); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1566; - this.match(SparkSqlParser.KW_COMMENT); - this.state = 1567; - this.stringLit(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - 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, 26, SparkSqlParser.RULE_query); + this.enterRule(localContext, 12, SparkSqlParser.RULE_query); let _la: number; try { localContext = new QueryStatementContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 1570; + this.state = 1430; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 346) { { - this.state = 1569; + this.state = 1429; this.ctes(); } } - this.state = 1572; + this.state = 1432; this.queryTerm(0); - this.state = 1573; + this.state = 1433; this.queryOrganization(); } } @@ -5115,44 +4824,44 @@ export class SparkSqlParser extends SQLParserBase { } public insertInto(): InsertIntoContext { let localContext = new InsertIntoContext(this.context, this.state); - this.enterRule(localContext, 28, SparkSqlParser.RULE_insertInto); + this.enterRule(localContext, 14, SparkSqlParser.RULE_insertInto); let _la: number; try { - this.state = 1651; + this.state = 1511; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 177, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1575; + this.state = 1435; this.match(SparkSqlParser.KW_INSERT); - this.state = 1576; + this.state = 1436; this.match(SparkSqlParser.KW_OVERWRITE); - this.state = 1578; + this.state = 1438; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 293) { { - this.state = 1577; + this.state = 1437; this.match(SparkSqlParser.KW_TABLE); } } - this.state = 1580; + this.state = 1440; this.tableName(); - this.state = 1585; + this.state = 1445; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 1581; + this.state = 1441; this.partitionSpec(); - this.state = 1583; + this.state = 1443; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 137) { { - this.state = 1582; + this.state = 1442; this.ifNotExists(); } } @@ -5160,15 +4869,15 @@ export class SparkSqlParser extends SQLParserBase { } } - this.state = 1593; + this.state = 1453; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 165, this.context) ) { case 1: { { - this.state = 1587; + this.state = 1447; this.match(SparkSqlParser.KW_BY); - this.state = 1588; + this.state = 1448; this.match(SparkSqlParser.KW_NAME); } } @@ -5176,11 +4885,11 @@ export class SparkSqlParser extends SQLParserBase { case 2: { { - this.state = 1589; + this.state = 1449; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1590; + this.state = 1450; this.columnNameSeq(); - this.state = 1591; + this.state = 1451; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -5191,51 +4900,51 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1595; + this.state = 1455; this.match(SparkSqlParser.KW_INSERT); - this.state = 1596; + this.state = 1456; this.match(SparkSqlParser.KW_INTO); - this.state = 1598; + this.state = 1458; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 293) { { - this.state = 1597; + this.state = 1457; this.match(SparkSqlParser.KW_TABLE); } } - this.state = 1600; + this.state = 1460; this.tableName(); - this.state = 1602; + this.state = 1462; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 217) { { - this.state = 1601; + this.state = 1461; this.partitionSpec(); } } - this.state = 1605; + this.state = 1465; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 137) { { - this.state = 1604; + this.state = 1464; this.ifNotExists(); } } - this.state = 1613; + this.state = 1473; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 169, this.context) ) { case 1: { { - this.state = 1607; + this.state = 1467; this.match(SparkSqlParser.KW_BY); - this.state = 1608; + this.state = 1468; this.match(SparkSqlParser.KW_NAME); } } @@ -5243,11 +4952,11 @@ export class SparkSqlParser extends SQLParserBase { case 2: { { - this.state = 1609; + this.state = 1469; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1610; + this.state = 1470; this.columnNameSeq(); - this.state = 1611; + this.state = 1471; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -5258,65 +4967,65 @@ export class SparkSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1615; + this.state = 1475; this.match(SparkSqlParser.KW_INSERT); - this.state = 1616; + this.state = 1476; this.match(SparkSqlParser.KW_INTO); - this.state = 1618; + this.state = 1478; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 293) { { - this.state = 1617; + this.state = 1477; this.match(SparkSqlParser.KW_TABLE); } } - this.state = 1620; + this.state = 1480; this.tableName(); - this.state = 1621; + this.state = 1481; this.match(SparkSqlParser.KW_REPLACE); - this.state = 1622; + this.state = 1482; this.whereClause(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1624; + this.state = 1484; this.match(SparkSqlParser.KW_INSERT); - this.state = 1625; + this.state = 1485; this.match(SparkSqlParser.KW_OVERWRITE); - this.state = 1627; + this.state = 1487; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 169) { { - this.state = 1626; + this.state = 1486; this.match(SparkSqlParser.KW_LOCAL); } } - this.state = 1629; + this.state = 1489; this.match(SparkSqlParser.KW_DIRECTORY); - this.state = 1630; + this.state = 1490; localContext._path = this.stringLit(); - this.state = 1632; + this.state = 1492; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 257) { { - this.state = 1631; + this.state = 1491; this.rowFormat(); } } - this.state = 1635; + this.state = 1495; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 283) { { - this.state = 1634; + this.state = 1494; this.createFileFormat(); } } @@ -5326,42 +5035,42 @@ export class SparkSqlParser extends SQLParserBase { case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1637; + this.state = 1497; this.match(SparkSqlParser.KW_INSERT); - this.state = 1638; + this.state = 1498; this.match(SparkSqlParser.KW_OVERWRITE); - this.state = 1640; + this.state = 1500; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 169) { { - this.state = 1639; + this.state = 1499; this.match(SparkSqlParser.KW_LOCAL); } } - this.state = 1642; + this.state = 1502; this.match(SparkSqlParser.KW_DIRECTORY); - this.state = 1644; + this.state = 1504; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 377 || _la === 378) { { - this.state = 1643; + this.state = 1503; localContext._path = this.stringLit(); } } - this.state = 1646; + this.state = 1506; this.tableProvider(); - this.state = 1649; + this.state = 1509; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 207) { { - this.state = 1647; + this.state = 1507; this.match(SparkSqlParser.KW_OPTIONS); - this.state = 1648; + this.state = 1508; localContext._options = this.propertyList(); } } @@ -5386,20 +5095,22 @@ export class SparkSqlParser extends SQLParserBase { } public partitionSpecLocation(): PartitionSpecLocationContext { let localContext = new PartitionSpecLocationContext(this.context, this.state); - this.enterRule(localContext, 30, SparkSqlParser.RULE_partitionSpecLocation); + this.enterRule(localContext, 16, SparkSqlParser.RULE_partitionSpecLocation); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1653; + this.state = 1513; this.partitionSpec(); - this.state = 1655; + this.state = 1516; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 170) { { - this.state = 1654; - this.locationSpec(); + this.state = 1514; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 1515; + this.stringLit(); } } @@ -5421,34 +5132,34 @@ export class SparkSqlParser extends SQLParserBase { } public partitionSpec(): PartitionSpecContext { let localContext = new PartitionSpecContext(this.context, this.state); - this.enterRule(localContext, 32, SparkSqlParser.RULE_partitionSpec); + this.enterRule(localContext, 18, SparkSqlParser.RULE_partitionSpec); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1657; + this.state = 1518; this.match(SparkSqlParser.KW_PARTITION); - this.state = 1658; + this.state = 1519; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1659; + this.state = 1520; this.partitionVal(); - this.state = 1664; + this.state = 1525; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 1660; + this.state = 1521; this.match(SparkSqlParser.COMMA); - this.state = 1661; + this.state = 1522; this.partitionVal(); } } - this.state = 1666; + this.state = 1527; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1667; + this.state = 1528; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -5468,25 +5179,25 @@ export class SparkSqlParser extends SQLParserBase { } public partitionVal(): PartitionValContext { let localContext = new PartitionValContext(this.context, this.state); - this.enterRule(localContext, 34, SparkSqlParser.RULE_partitionVal); + this.enterRule(localContext, 20, SparkSqlParser.RULE_partitionVal); let _la: number; try { - this.state = 1678; + this.state = 1539; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 181, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1669; + this.state = 1530; this.identifier(); - this.state = 1672; + this.state = 1533; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 352) { { - this.state = 1670; + this.state = 1531; this.match(SparkSqlParser.EQ); - this.state = 1671; + this.state = 1532; this.constant(); } } @@ -5496,11 +5207,11 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1674; + this.state = 1535; this.identifier(); - this.state = 1675; + this.state = 1536; this.match(SparkSqlParser.EQ); - this.state = 1676; + this.state = 1537; this.match(SparkSqlParser.KW_DEFAULT); } break; @@ -5522,12 +5233,12 @@ export class SparkSqlParser extends SQLParserBase { } public namespace(): NamespaceContext { let localContext = new NamespaceContext(this.context, this.state); - this.enterRule(localContext, 36, SparkSqlParser.RULE_namespace); + this.enterRule(localContext, 22, SparkSqlParser.RULE_namespace); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1680; + this.state = 1541; _la = this.tokenStream.LA(1); if(!(_la === 72 || _la === 190 || _la === 261)) { this.errorHandler.recoverInline(this); @@ -5552,77 +5263,45 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public namespaces(): NamespacesContext { - let localContext = new NamespacesContext(this.context, this.state); - this.enterRule(localContext, 38, SparkSqlParser.RULE_namespaces); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1682; - _la = this.tokenStream.LA(1); - if(!(_la === 73 || _la === 191 || _la === 262)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public describeFuncName(): DescribeFuncNameContext { let localContext = new DescribeFuncNameContext(this.context, this.state); - this.enterRule(localContext, 40, SparkSqlParser.RULE_describeFuncName); + this.enterRule(localContext, 24, SparkSqlParser.RULE_describeFuncName); try { - this.state = 1689; + this.state = 1548; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 182, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1684; + this.state = 1543; this.identifierReference(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1685; + this.state = 1544; this.stringLit(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 1686; + this.state = 1545; this.comparisonOperator(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 1687; + this.state = 1546; this.arithmeticOperator(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 1688; + this.state = 1547; this.predicateOperator(); } break; @@ -5644,28 +5323,28 @@ export class SparkSqlParser extends SQLParserBase { } public describeColName(): DescribeColNameContext { let localContext = new DescribeColNameContext(this.context, this.state); - this.enterRule(localContext, 42, SparkSqlParser.RULE_describeColName); + this.enterRule(localContext, 26, SparkSqlParser.RULE_describeColName); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1691; + this.state = 1550; localContext._identifier = this.identifier(); localContext._nameParts.push(localContext._identifier); - this.state = 1696; + this.state = 1555; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 5) { { { - this.state = 1692; + this.state = 1551; this.match(SparkSqlParser.DOT); - this.state = 1693; + this.state = 1552; localContext._identifier = this.identifier(); localContext._nameParts.push(localContext._identifier); } } - this.state = 1698; + this.state = 1557; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -5687,28 +5366,28 @@ export class SparkSqlParser extends SQLParserBase { } public ctes(): CtesContext { let localContext = new CtesContext(this.context, this.state); - this.enterRule(localContext, 44, SparkSqlParser.RULE_ctes); + this.enterRule(localContext, 28, SparkSqlParser.RULE_ctes); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1699; + this.state = 1558; this.match(SparkSqlParser.KW_WITH); - this.state = 1700; + this.state = 1559; this.namedQuery(); - this.state = 1705; + this.state = 1564; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 1701; + this.state = 1560; this.match(SparkSqlParser.COMMA); - this.state = 1702; + this.state = 1561; this.namedQuery(); } } - this.state = 1707; + this.state = 1566; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -5730,38 +5409,38 @@ export class SparkSqlParser extends SQLParserBase { } public namedQuery(): NamedQueryContext { let localContext = new NamedQueryContext(this.context, this.state); - this.enterRule(localContext, 46, SparkSqlParser.RULE_namedQuery); + this.enterRule(localContext, 30, SparkSqlParser.RULE_namedQuery); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1708; + this.state = 1567; localContext._name = this.errorCapturingIdentifier(); - this.state = 1710; + this.state = 1569; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 185, this.context) ) { case 1: { - this.state = 1709; + this.state = 1568; localContext._columnAliases = this.identifierList(); } break; } - this.state = 1713; + this.state = 1572; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 20) { { - this.state = 1712; + this.state = 1571; this.match(SparkSqlParser.KW_AS); } } - this.state = 1715; + this.state = 1574; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1716; + this.state = 1575; this.query(); - this.state = 1717; + this.state = 1576; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -5781,13 +5460,13 @@ export class SparkSqlParser extends SQLParserBase { } public tableProvider(): TableProviderContext { let localContext = new TableProviderContext(this.context, this.state); - this.enterRule(localContext, 48, SparkSqlParser.RULE_tableProvider); + this.enterRule(localContext, 32, SparkSqlParser.RULE_tableProvider); try { this.enterOuterAlt(localContext, 1); { - this.state = 1719; + this.state = 1578; this.match(SparkSqlParser.KW_USING); - this.state = 1720; + this.state = 1579; this.multipartIdentifier(); } } @@ -5807,26 +5486,26 @@ export class SparkSqlParser extends SQLParserBase { } public createTableClauses(): CreateTableClausesContext { let localContext = new CreateTableClausesContext(this.context, this.state); - this.enterRule(localContext, 50, SparkSqlParser.RULE_createTableClauses); + this.enterRule(localContext, 34, SparkSqlParser.RULE_createTableClauses); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1738; + this.state = 1599; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 188, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { - this.state = 1736; + this.state = 1597; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_OPTIONS: { { - this.state = 1722; + this.state = 1581; this.match(SparkSqlParser.KW_OPTIONS); - this.state = 1723; + this.state = 1582; localContext._options = this.expressionPropertyList(); } } @@ -5834,64 +5513,68 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_PARTITIONED: { { - this.state = 1724; + this.state = 1583; this.match(SparkSqlParser.KW_PARTITIONED); - this.state = 1725; + this.state = 1584; this.match(SparkSqlParser.KW_BY); - this.state = 1726; + this.state = 1585; localContext._partitioning = this.partitionFieldList(); } } break; case SparkSqlParser.KW_SKEWED: { - this.state = 1727; + this.state = 1586; this.skewSpec(); } break; case SparkSqlParser.KW_CLUSTERED: { - this.state = 1728; + this.state = 1587; this.bucketSpec(); } break; case SparkSqlParser.KW_ROW: { - this.state = 1729; + this.state = 1588; this.rowFormat(); } break; case SparkSqlParser.KW_STORED: { - this.state = 1730; + this.state = 1589; this.createFileFormat(); } break; case SparkSqlParser.KW_LOCATION: { - this.state = 1731; - this.locationSpec(); + this.state = 1590; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 1591; + this.stringLit(); } break; case SparkSqlParser.KW_COMMENT: { - this.state = 1732; - this.commentSpec(); + this.state = 1592; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 1593; + localContext._comment = this.stringLit(); } break; case SparkSqlParser.KW_TBLPROPERTIES: { { - this.state = 1733; + this.state = 1594; this.match(SparkSqlParser.KW_TBLPROPERTIES); - this.state = 1734; + this.state = 1595; localContext._tableProps = this.propertyList(); } } break; case SparkSqlParser.KW_LIFECYCLE: { - this.state = 1735; + this.state = 1596; this.tableLifecycle(); } break; @@ -5900,7 +5583,7 @@ export class SparkSqlParser extends SQLParserBase { } } } - this.state = 1740; + this.state = 1601; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 188, this.context); } @@ -5922,13 +5605,13 @@ export class SparkSqlParser extends SQLParserBase { } public tableLifecycle(): TableLifecycleContext { let localContext = new TableLifecycleContext(this.context, this.state); - this.enterRule(localContext, 52, SparkSqlParser.RULE_tableLifecycle); + this.enterRule(localContext, 36, SparkSqlParser.RULE_tableLifecycle); try { this.enterOuterAlt(localContext, 1); { - this.state = 1741; + this.state = 1602; this.match(SparkSqlParser.KW_LIFECYCLE); - this.state = 1742; + this.state = 1603; this.match(SparkSqlParser.INTEGER_VALUE); } } @@ -5948,32 +5631,32 @@ export class SparkSqlParser extends SQLParserBase { } public propertyList(): PropertyListContext { let localContext = new PropertyListContext(this.context, this.state); - this.enterRule(localContext, 54, SparkSqlParser.RULE_propertyList); + this.enterRule(localContext, 38, SparkSqlParser.RULE_propertyList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1744; + this.state = 1605; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1745; + this.state = 1606; this.property(); - this.state = 1750; + this.state = 1611; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 1746; + this.state = 1607; this.match(SparkSqlParser.COMMA); - this.state = 1747; + this.state = 1608; this.property(); } } - this.state = 1752; + this.state = 1613; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1753; + this.state = 1614; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -5993,29 +5676,29 @@ export class SparkSqlParser extends SQLParserBase { } public property(): PropertyContext { let localContext = new PropertyContext(this.context, this.state); - this.enterRule(localContext, 56, SparkSqlParser.RULE_property); + this.enterRule(localContext, 40, SparkSqlParser.RULE_property); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1755; + this.state = 1616; localContext._key = this.propertyKey(); - this.state = 1760; + this.state = 1621; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 111 || _la === 316 || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 1174405121) !== 0) || _la === 384) { { - this.state = 1757; + this.state = 1618; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 352) { { - this.state = 1756; + this.state = 1617; this.match(SparkSqlParser.EQ); } } - this.state = 1759; + this.state = 1620; localContext._value = this.propertyValue(); } } @@ -6038,30 +5721,30 @@ export class SparkSqlParser extends SQLParserBase { } public propertyKey(): PropertyKeyContext { let localContext = new PropertyKeyContext(this.context, this.state); - this.enterRule(localContext, 58, SparkSqlParser.RULE_propertyKey); + this.enterRule(localContext, 42, SparkSqlParser.RULE_propertyKey); let _la: number; try { - this.state = 1771; + this.state = 1632; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 193, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1762; + this.state = 1623; this.identifier(); - this.state = 1767; + this.state = 1628; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 5) { { { - this.state = 1763; + this.state = 1624; this.match(SparkSqlParser.DOT); - this.state = 1764; + this.state = 1625; this.identifier(); } } - this.state = 1769; + this.state = 1630; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -6070,7 +5753,7 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1770; + this.state = 1631; this.stringLit(); } break; @@ -6092,22 +5775,22 @@ export class SparkSqlParser extends SQLParserBase { } public propertyValue(): PropertyValueContext { let localContext = new PropertyValueContext(this.context, this.state); - this.enterRule(localContext, 60, SparkSqlParser.RULE_propertyValue); + this.enterRule(localContext, 44, SparkSqlParser.RULE_propertyValue); try { - this.state = 1777; + this.state = 1638; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.INTEGER_VALUE: this.enterOuterAlt(localContext, 1); { - this.state = 1773; + this.state = 1634; this.match(SparkSqlParser.INTEGER_VALUE); } break; case SparkSqlParser.DECIMAL_VALUE: this.enterOuterAlt(localContext, 2); { - this.state = 1774; + this.state = 1635; this.match(SparkSqlParser.DECIMAL_VALUE); } break; @@ -6115,7 +5798,7 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_TRUE: this.enterOuterAlt(localContext, 3); { - this.state = 1775; + this.state = 1636; this.booleanValue(); } break; @@ -6123,7 +5806,7 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.DOUBLEQUOTED_STRING: this.enterOuterAlt(localContext, 4); { - this.state = 1776; + this.state = 1637; this.stringLit(); } break; @@ -6147,32 +5830,32 @@ export class SparkSqlParser extends SQLParserBase { } public expressionPropertyList(): ExpressionPropertyListContext { let localContext = new ExpressionPropertyListContext(this.context, this.state); - this.enterRule(localContext, 62, SparkSqlParser.RULE_expressionPropertyList); + this.enterRule(localContext, 46, SparkSqlParser.RULE_expressionPropertyList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1779; + this.state = 1640; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1780; + this.state = 1641; this.expressionProperty(); - this.state = 1785; + this.state = 1646; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 1781; + this.state = 1642; this.match(SparkSqlParser.COMMA); - this.state = 1782; + this.state = 1643; this.expressionProperty(); } } - this.state = 1787; + this.state = 1648; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1788; + this.state = 1649; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -6192,29 +5875,29 @@ export class SparkSqlParser extends SQLParserBase { } public expressionProperty(): ExpressionPropertyContext { let localContext = new ExpressionPropertyContext(this.context, this.state); - this.enterRule(localContext, 64, SparkSqlParser.RULE_expressionProperty); + this.enterRule(localContext, 48, SparkSqlParser.RULE_expressionProperty); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1790; + this.state = 1651; localContext._key = this.propertyKey(); - this.state = 1795; + this.state = 1656; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (((((_la - 2)) & ~0x1F) === 0 && ((1 << (_la - 2)) & 4294967233) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 4294967295) !== 0) || ((((_la - 66)) & ~0x1F) === 0 && ((1 << (_la - 66)) & 4294967295) !== 0) || ((((_la - 98)) & ~0x1F) === 0 && ((1 << (_la - 98)) & 4261412863) !== 0) || ((((_la - 130)) & ~0x1F) === 0 && ((1 << (_la - 130)) & 4294967295) !== 0) || ((((_la - 162)) & ~0x1F) === 0 && ((1 << (_la - 162)) & 4294967295) !== 0) || ((((_la - 194)) & ~0x1F) === 0 && ((1 << (_la - 194)) & 4294967291) !== 0) || ((((_la - 226)) & ~0x1F) === 0 && ((1 << (_la - 226)) & 4294967295) !== 0) || ((((_la - 258)) & ~0x1F) === 0 && ((1 << (_la - 258)) & 4294967263) !== 0) || ((((_la - 290)) & ~0x1F) === 0 && ((1 << (_la - 290)) & 4294967287) !== 0) || ((((_la - 322)) & ~0x1F) === 0 && ((1 << (_la - 322)) & 2147483647) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 1073678415) !== 0)) { { - this.state = 1792; + this.state = 1653; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 352) { { - this.state = 1791; + this.state = 1652; this.match(SparkSqlParser.EQ); } } - this.state = 1794; + this.state = 1655; localContext._value = this.expression(); } } @@ -6237,32 +5920,32 @@ export class SparkSqlParser extends SQLParserBase { } public constantList(): ConstantListContext { let localContext = new ConstantListContext(this.context, this.state); - this.enterRule(localContext, 66, SparkSqlParser.RULE_constantList); + this.enterRule(localContext, 50, SparkSqlParser.RULE_constantList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1797; + this.state = 1658; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1798; + this.state = 1659; this.constant(); - this.state = 1803; + this.state = 1664; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 1799; + this.state = 1660; this.match(SparkSqlParser.COMMA); - this.state = 1800; + this.state = 1661; this.constant(); } } - this.state = 1805; + this.state = 1666; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1806; + this.state = 1667; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -6282,32 +5965,32 @@ export class SparkSqlParser extends SQLParserBase { } public nestedConstantList(): NestedConstantListContext { let localContext = new NestedConstantListContext(this.context, this.state); - this.enterRule(localContext, 68, SparkSqlParser.RULE_nestedConstantList); + this.enterRule(localContext, 52, SparkSqlParser.RULE_nestedConstantList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1808; + this.state = 1669; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1809; + this.state = 1670; this.constantList(); - this.state = 1814; + this.state = 1675; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 1810; + this.state = 1671; this.match(SparkSqlParser.COMMA); - this.state = 1811; + this.state = 1672; this.constantList(); } } - this.state = 1816; + this.state = 1677; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 1817; + this.state = 1678; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -6327,30 +6010,30 @@ export class SparkSqlParser extends SQLParserBase { } public createFileFormat(): CreateFileFormatContext { let localContext = new CreateFileFormatContext(this.context, this.state); - this.enterRule(localContext, 70, SparkSqlParser.RULE_createFileFormat); + this.enterRule(localContext, 54, SparkSqlParser.RULE_createFileFormat); try { - this.state = 1825; + this.state = 1686; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 200, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1819; + this.state = 1680; this.match(SparkSqlParser.KW_STORED); - this.state = 1820; + this.state = 1681; this.match(SparkSqlParser.KW_AS); - this.state = 1821; + this.state = 1682; this.fileFormat(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1822; + this.state = 1683; this.match(SparkSqlParser.KW_STORED); - this.state = 1823; + this.state = 1684; this.match(SparkSqlParser.KW_BY); - this.state = 1824; + this.state = 1685; this.storageHandler(); } break; @@ -6372,28 +6055,28 @@ export class SparkSqlParser extends SQLParserBase { } public fileFormat(): FileFormatContext { let localContext = new FileFormatContext(this.context, this.state); - this.enterRule(localContext, 72, SparkSqlParser.RULE_fileFormat); + this.enterRule(localContext, 56, SparkSqlParser.RULE_fileFormat); try { - this.state = 1833; + this.state = 1694; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 201, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1827; + this.state = 1688; this.match(SparkSqlParser.KW_INPUTFORMAT); - this.state = 1828; + this.state = 1689; localContext._inFmt = this.stringLit(); - this.state = 1829; + this.state = 1690; this.match(SparkSqlParser.KW_OUTPUTFORMAT); - this.state = 1830; + this.state = 1691; localContext._outFmt = this.stringLit(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1832; + this.state = 1693; this.identifier(); } break; @@ -6415,22 +6098,22 @@ export class SparkSqlParser extends SQLParserBase { } public storageHandler(): StorageHandlerContext { let localContext = new StorageHandlerContext(this.context, this.state); - this.enterRule(localContext, 74, SparkSqlParser.RULE_storageHandler); + this.enterRule(localContext, 58, SparkSqlParser.RULE_storageHandler); try { this.enterOuterAlt(localContext, 1); { - this.state = 1835; + this.state = 1696; this.stringLit(); - this.state = 1839; + this.state = 1700; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 202, this.context) ) { case 1: { - this.state = 1836; + this.state = 1697; this.match(SparkSqlParser.KW_WITH); - this.state = 1837; + this.state = 1698; this.match(SparkSqlParser.KW_SERDEPROPERTIES); - this.state = 1838; + this.state = 1699; this.propertyList(); } break; @@ -6451,48 +6134,22 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public resource(): ResourceContext { - let localContext = new ResourceContext(this.context, this.state); - this.enterRule(localContext, 76, SparkSqlParser.RULE_resource); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1841; - this.identifier(); - this.state = 1842; - this.stringLit(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public dmlStatementNoWith(): DmlStatementNoWithContext { let localContext = new DmlStatementNoWithContext(this.context, this.state); - this.enterRule(localContext, 78, SparkSqlParser.RULE_dmlStatementNoWith); + this.enterRule(localContext, 60, SparkSqlParser.RULE_dmlStatementNoWith); let _la: number; try { let alternative: number; - this.state = 1900; + this.state = 1760; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_INSERT: localContext = new InsertFromQueryContext(localContext); this.enterOuterAlt(localContext, 1); { - this.state = 1844; + this.state = 1702; this.insertInto(); - this.state = 1845; + this.state = 1703; this.query(); } break; @@ -6500,9 +6157,9 @@ export class SparkSqlParser extends SQLParserBase { localContext = new MultipleInsertContext(localContext); this.enterOuterAlt(localContext, 2); { - this.state = 1847; + this.state = 1705; this.fromClause(); - this.state = 1849; + this.state = 1709; this.errorHandler.sync(this); alternative = 1; do { @@ -6510,15 +6167,17 @@ export class SparkSqlParser extends SQLParserBase { case 1: { { - this.state = 1848; - this.multiInsertQueryBody(); + this.state = 1706; + this.insertInto(); + this.state = 1707; + this.fromStatementBody(); } } break; default: throw new antlr.NoViableAltException(this); } - this.state = 1851; + this.state = 1711; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 203, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); @@ -6528,20 +6187,20 @@ export class SparkSqlParser extends SQLParserBase { localContext = new DeleteFromTableContext(localContext); this.enterOuterAlt(localContext, 3); { - this.state = 1853; + this.state = 1713; this.match(SparkSqlParser.KW_DELETE); - this.state = 1854; + this.state = 1714; this.match(SparkSqlParser.KW_FROM); - this.state = 1855; + this.state = 1715; this.tableName(); - this.state = 1856; + this.state = 1716; this.tableAlias(); - this.state = 1858; + this.state = 1718; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 344) { { - this.state = 1857; + this.state = 1717; this.whereClause(); } } @@ -6552,20 +6211,20 @@ export class SparkSqlParser extends SQLParserBase { localContext = new UpdateTableContext(localContext); this.enterOuterAlt(localContext, 4); { - this.state = 1860; + this.state = 1720; this.match(SparkSqlParser.KW_UPDATE); - this.state = 1861; + this.state = 1721; this.tableName(); - this.state = 1862; + this.state = 1722; this.tableAlias(); - this.state = 1863; + this.state = 1723; this.setClause(); - this.state = 1865; + this.state = 1725; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 344) { { - this.state = 1864; + this.state = 1724; this.whereClause(); } } @@ -6576,17 +6235,17 @@ export class SparkSqlParser extends SQLParserBase { localContext = new MergeIntoTableContext(localContext); this.enterOuterAlt(localContext, 5); { - this.state = 1867; + this.state = 1727; this.match(SparkSqlParser.KW_MERGE); - this.state = 1868; + this.state = 1728; this.match(SparkSqlParser.KW_INTO); - this.state = 1869; + this.state = 1729; (localContext as MergeIntoTableContext)._target = this.tableName(); - this.state = 1870; + this.state = 1730; (localContext as MergeIntoTableContext)._targetAlias = this.tableAlias(); - this.state = 1871; + this.state = 1731; this.match(SparkSqlParser.KW_USING); - this.state = 1877; + this.state = 1737; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_ADD: @@ -6933,72 +6592,72 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.IDENTIFIER: case SparkSqlParser.BACKQUOTED_IDENTIFIER: { - this.state = 1872; + this.state = 1732; (localContext as MergeIntoTableContext)._source = this.identifierReference(); } break; case SparkSqlParser.LEFT_PAREN: { - this.state = 1873; + this.state = 1733; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1874; + this.state = 1734; (localContext as MergeIntoTableContext)._sourceQuery = this.query(); - this.state = 1875; + this.state = 1735; this.match(SparkSqlParser.RIGHT_PAREN); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 1879; + this.state = 1739; (localContext as MergeIntoTableContext)._sourceAlias = this.tableAlias(); - this.state = 1880; + this.state = 1740; this.match(SparkSqlParser.KW_ON); - this.state = 1881; + this.state = 1741; (localContext as MergeIntoTableContext)._mergeCondition = this.booleanExpression(0); - this.state = 1885; + this.state = 1745; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 207, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1882; + this.state = 1742; this.matchedClause(); } } } - this.state = 1887; + this.state = 1747; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 207, this.context); } - this.state = 1891; + this.state = 1751; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 208, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1888; + this.state = 1748; this.notMatchedClause(); } } } - this.state = 1893; + this.state = 1753; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 208, this.context); } - this.state = 1897; + this.state = 1757; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 343) { { { - this.state = 1894; + this.state = 1754; this.notMatchedBySourceClause(); } } - this.state = 1899; + this.state = 1759; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -7024,11 +6683,11 @@ export class SparkSqlParser extends SQLParserBase { } public namespaceName(): NamespaceNameContext { let localContext = new NamespaceNameContext(this.context, this.state); - this.enterRule(localContext, 80, SparkSqlParser.RULE_namespaceName); + this.enterRule(localContext, 62, SparkSqlParser.RULE_namespaceName); try { this.enterOuterAlt(localContext, 1); { - this.state = 1902; + this.state = 1762; this.identifierReference(); } } @@ -7048,11 +6707,11 @@ export class SparkSqlParser extends SQLParserBase { } public namespaceNameCreate(): NamespaceNameCreateContext { let localContext = new NamespaceNameCreateContext(this.context, this.state); - this.enterRule(localContext, 82, SparkSqlParser.RULE_namespaceNameCreate); + this.enterRule(localContext, 64, SparkSqlParser.RULE_namespaceNameCreate); try { this.enterOuterAlt(localContext, 1); { - this.state = 1904; + this.state = 1764; this.identifierReference(); } } @@ -7072,11 +6731,11 @@ export class SparkSqlParser extends SQLParserBase { } public tableNameCreate(): TableNameCreateContext { let localContext = new TableNameCreateContext(this.context, this.state); - this.enterRule(localContext, 84, SparkSqlParser.RULE_tableNameCreate); + this.enterRule(localContext, 66, SparkSqlParser.RULE_tableNameCreate); try { this.enterOuterAlt(localContext, 1); { - this.state = 1906; + this.state = 1766; this.tableIdentifier(); } } @@ -7096,11 +6755,11 @@ export class SparkSqlParser extends SQLParserBase { } public tableName(): TableNameContext { let localContext = new TableNameContext(this.context, this.state); - this.enterRule(localContext, 86, SparkSqlParser.RULE_tableName); + this.enterRule(localContext, 68, SparkSqlParser.RULE_tableName); try { this.enterOuterAlt(localContext, 1); { - this.state = 1908; + this.state = 1768; this.tableIdentifier(); } } @@ -7120,11 +6779,11 @@ export class SparkSqlParser extends SQLParserBase { } public viewNameCreate(): ViewNameCreateContext { let localContext = new ViewNameCreateContext(this.context, this.state); - this.enterRule(localContext, 88, SparkSqlParser.RULE_viewNameCreate); + this.enterRule(localContext, 70, SparkSqlParser.RULE_viewNameCreate); try { this.enterOuterAlt(localContext, 1); { - this.state = 1910; + this.state = 1770; this.viewIdentifier(); } } @@ -7144,11 +6803,11 @@ export class SparkSqlParser extends SQLParserBase { } public viewName(): ViewNameContext { let localContext = new ViewNameContext(this.context, this.state); - this.enterRule(localContext, 90, SparkSqlParser.RULE_viewName); + this.enterRule(localContext, 72, SparkSqlParser.RULE_viewName); try { this.enterOuterAlt(localContext, 1); { - this.state = 1912; + this.state = 1772; this.viewIdentifier(); } } @@ -7168,22 +6827,22 @@ export class SparkSqlParser extends SQLParserBase { } public columnName(): ColumnNameContext { let localContext = new ColumnNameContext(this.context, this.state); - this.enterRule(localContext, 92, SparkSqlParser.RULE_columnName); + this.enterRule(localContext, 74, SparkSqlParser.RULE_columnName); try { - this.state = 1916; + this.state = 1776; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 211, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1914; + this.state = 1774; this.multipartIdentifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1915; + this.state = 1775; if (!(this.shouldMatchEmpty())) { throw this.createFailedPredicateException("this.shouldMatchEmpty()"); } @@ -7207,26 +6866,26 @@ export class SparkSqlParser extends SQLParserBase { } public columnNameSeq(): ColumnNameSeqContext { let localContext = new ColumnNameSeqContext(this.context, this.state); - this.enterRule(localContext, 94, SparkSqlParser.RULE_columnNameSeq); + this.enterRule(localContext, 76, SparkSqlParser.RULE_columnNameSeq); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 1918; + this.state = 1778; this.columnName(); - this.state = 1923; + this.state = 1783; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 1919; + this.state = 1779; this.match(SparkSqlParser.COMMA); - this.state = 1920; + this.state = 1780; this.columnName(); } } - this.state = 1925; + this.state = 1785; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -7248,11 +6907,11 @@ export class SparkSqlParser extends SQLParserBase { } public columnNameCreate(): ColumnNameCreateContext { let localContext = new ColumnNameCreateContext(this.context, this.state); - this.enterRule(localContext, 96, SparkSqlParser.RULE_columnNameCreate); + this.enterRule(localContext, 78, SparkSqlParser.RULE_columnNameCreate); try { this.enterOuterAlt(localContext, 1); { - this.state = 1926; + this.state = 1786; this.errorCapturingIdentifier(); } } @@ -7272,28 +6931,28 @@ export class SparkSqlParser extends SQLParserBase { } public identifierReference(): IdentifierReferenceContext { let localContext = new IdentifierReferenceContext(this.context, this.state); - this.enterRule(localContext, 98, SparkSqlParser.RULE_identifierReference); + this.enterRule(localContext, 80, SparkSqlParser.RULE_identifierReference); try { - this.state = 1934; + this.state = 1794; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 213, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 1928; + this.state = 1788; this.match(SparkSqlParser.KW_IDENTIFIER); - this.state = 1929; + this.state = 1789; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 1930; + this.state = 1790; this.expression(); - this.state = 1931; + this.state = 1791; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 1933; + this.state = 1793; this.multipartIdentifier(); } break; @@ -7315,176 +6974,176 @@ export class SparkSqlParser extends SQLParserBase { } public queryOrganization(): QueryOrganizationContext { let localContext = new QueryOrganizationContext(this.context, this.state); - this.enterRule(localContext, 100, SparkSqlParser.RULE_queryOrganization); + this.enterRule(localContext, 82, SparkSqlParser.RULE_queryOrganization); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 1946; + this.state = 1806; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 215, this.context) ) { case 1: { - this.state = 1936; + this.state = 1796; this.match(SparkSqlParser.KW_ORDER); - this.state = 1937; + this.state = 1797; this.match(SparkSqlParser.KW_BY); - this.state = 1938; + this.state = 1798; localContext._sortItem = this.sortItem(); localContext._order.push(localContext._sortItem); - this.state = 1943; + this.state = 1803; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 214, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1939; + this.state = 1799; this.match(SparkSqlParser.COMMA); - this.state = 1940; + this.state = 1800; localContext._sortItem = this.sortItem(); localContext._order.push(localContext._sortItem); } } } - this.state = 1945; + this.state = 1805; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 214, this.context); } } break; } - this.state = 1958; + this.state = 1818; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 217, this.context) ) { case 1: { - this.state = 1948; + this.state = 1808; this.match(SparkSqlParser.KW_CLUSTER); - this.state = 1949; + this.state = 1809; this.match(SparkSqlParser.KW_BY); - this.state = 1950; + this.state = 1810; localContext._expression = this.expression(); localContext._clusterBy.push(localContext._expression); - this.state = 1955; + this.state = 1815; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 216, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1951; + this.state = 1811; this.match(SparkSqlParser.COMMA); - this.state = 1952; + this.state = 1812; localContext._expression = this.expression(); localContext._clusterBy.push(localContext._expression); } } } - this.state = 1957; + this.state = 1817; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 216, this.context); } } break; } - this.state = 1970; + this.state = 1830; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 219, this.context) ) { case 1: { - this.state = 1960; + this.state = 1820; this.match(SparkSqlParser.KW_DISTRIBUTE); - this.state = 1961; + this.state = 1821; this.match(SparkSqlParser.KW_BY); - this.state = 1962; + this.state = 1822; localContext._expression = this.expression(); localContext._distributeBy.push(localContext._expression); - this.state = 1967; + this.state = 1827; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 218, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1963; + this.state = 1823; this.match(SparkSqlParser.COMMA); - this.state = 1964; + this.state = 1824; localContext._expression = this.expression(); localContext._distributeBy.push(localContext._expression); } } } - this.state = 1969; + this.state = 1829; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 218, this.context); } } break; } - this.state = 1982; + this.state = 1842; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 221, this.context) ) { case 1: { - this.state = 1972; + this.state = 1832; this.match(SparkSqlParser.KW_SORT); - this.state = 1973; + this.state = 1833; this.match(SparkSqlParser.KW_BY); - this.state = 1974; + this.state = 1834; localContext._sortItem = this.sortItem(); localContext._sort.push(localContext._sortItem); - this.state = 1979; + this.state = 1839; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 220, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 1975; + this.state = 1835; this.match(SparkSqlParser.COMMA); - this.state = 1976; + this.state = 1836; localContext._sortItem = this.sortItem(); localContext._sort.push(localContext._sortItem); } } } - this.state = 1981; + this.state = 1841; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 220, this.context); } } break; } - this.state = 1985; + this.state = 1845; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 222, this.context) ) { case 1: { - this.state = 1984; + this.state = 1844; this.windowClause(); } break; } - this.state = 1992; + this.state = 1852; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 224, this.context) ) { case 1: { - this.state = 1987; + this.state = 1847; this.match(SparkSqlParser.KW_LIMIT); - this.state = 1990; + this.state = 1850; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 223, this.context) ) { case 1: { - this.state = 1988; + this.state = 1848; this.match(SparkSqlParser.KW_ALL); } break; case 2: { - this.state = 1989; + this.state = 1849; localContext._limit = this.expression(); } break; @@ -7492,14 +7151,14 @@ export class SparkSqlParser extends SQLParserBase { } break; } - this.state = 1996; + this.state = 1856; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 225, this.context) ) { case 1: { - this.state = 1994; + this.state = 1854; this.match(SparkSqlParser.KW_OFFSET); - this.state = 1995; + this.state = 1855; localContext._offset = this.expression(); } break; @@ -7520,32 +7179,6 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public multiInsertQueryBody(): MultiInsertQueryBodyContext { - let localContext = new MultiInsertQueryBodyContext(this.context, this.state); - this.enterRule(localContext, 102, SparkSqlParser.RULE_multiInsertQueryBody); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 1998; - this.insertInto(); - this.state = 1999; - this.fromStatementBody(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - 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; @@ -7558,19 +7191,19 @@ export class SparkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new QueryTermContext(this.context, parentState); let previousContext = localContext; - let _startState = 104; - this.enterRecursionRule(localContext, 104, SparkSqlParser.RULE_queryTerm, _p); + let _startState = 84; + this.enterRecursionRule(localContext, 84, SparkSqlParser.RULE_queryTerm, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { { - this.state = 2002; + this.state = 1859; this.queryPrimary(); } this.context!.stop = this.tokenStream.LT(-1); - this.state = 2024; + this.state = 1881; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 230, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { @@ -7580,7 +7213,7 @@ export class SparkSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 2022; + this.state = 1879; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 229, this.context) ) { case 1: @@ -7588,11 +7221,11 @@ export class SparkSqlParser extends SQLParserBase { localContext = new QueryTermContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_queryTerm); - this.state = 2004; + this.state = 1861; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 2005; + this.state = 1862; localContext._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 102 || _la === 148 || _la === 270 || _la === 323)) { @@ -7602,17 +7235,17 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2007; + this.state = 1864; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 10 || _la === 92) { { - this.state = 2006; + this.state = 1863; this.setQuantifier(); } } - this.state = 2009; + this.state = 1866; localContext._right = this.queryTerm(4); } break; @@ -7621,23 +7254,23 @@ export class SparkSqlParser extends SQLParserBase { localContext = new QueryTermContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_queryTerm); - this.state = 2010; + this.state = 1867; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 2011; + this.state = 1868; localContext._operator = this.match(SparkSqlParser.KW_INTERSECT); - this.state = 2013; + this.state = 1870; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 10 || _la === 92) { { - this.state = 2012; + this.state = 1869; this.setQuantifier(); } } - this.state = 2015; + this.state = 1872; localContext._right = this.queryTerm(3); } break; @@ -7646,11 +7279,11 @@ export class SparkSqlParser extends SQLParserBase { localContext = new QueryTermContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_queryTerm); - this.state = 2016; + this.state = 1873; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 2017; + this.state = 1874; localContext._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 102 || _la === 270 || _la === 323)) { @@ -7660,24 +7293,24 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2019; + this.state = 1876; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 10 || _la === 92) { { - this.state = 2018; + this.state = 1875; this.setQuantifier(); } } - this.state = 2021; + this.state = 1878; localContext._right = this.queryTerm(2); } break; } } } - this.state = 2026; + this.state = 1883; this.errorHandler.sync(this); alternative = this.interpreter.adaptivePredict(this.tokenStream, 230, this.context); } @@ -7699,9 +7332,10 @@ export class SparkSqlParser extends SQLParserBase { } public queryPrimary(): QueryPrimaryContext { let localContext = new QueryPrimaryContext(this.context, this.state); - this.enterRule(localContext, 106, SparkSqlParser.RULE_queryPrimary); + this.enterRule(localContext, 86, SparkSqlParser.RULE_queryPrimary); try { - this.state = 2036; + let alternative: number; + this.state = 1908; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_MAP: @@ -7709,41 +7343,83 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_SELECT: this.enterOuterAlt(localContext, 1); { - this.state = 2027; + this.state = 1884; this.querySpecification(); } break; case SparkSqlParser.KW_FROM: this.enterOuterAlt(localContext, 2); { - this.state = 2028; - this.fromStatement(); + this.state = 1885; + this.fromClause(); + this.state = 1887; + this.errorHandler.sync(this); + alternative = 1; + do { + switch (alternative) { + case 1: + { + { + this.state = 1886; + this.fromStatementBody(); + } + } + break; + default: + throw new antlr.NoViableAltException(this); + } + this.state = 1889; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 231, this.context); + } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } break; case SparkSqlParser.KW_TABLE: this.enterOuterAlt(localContext, 3); { - this.state = 2029; + this.state = 1891; this.match(SparkSqlParser.KW_TABLE); - this.state = 2030; + this.state = 1892; this.tableName(); } break; case SparkSqlParser.KW_VALUES: this.enterOuterAlt(localContext, 4); { - this.state = 2031; - this.inlineTable(); + this.state = 1893; + this.match(SparkSqlParser.KW_VALUES); + this.state = 1894; + this.expression(); + this.state = 1899; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 232, this.context); + while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { + if (alternative === 1) { + { + { + this.state = 1895; + this.match(SparkSqlParser.COMMA); + this.state = 1896; + this.expression(); + } + } + } + this.state = 1901; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 232, this.context); + } + this.state = 1902; + this.tableAlias(); } break; case SparkSqlParser.LEFT_PAREN: this.enterOuterAlt(localContext, 5); { - this.state = 2032; + this.state = 1904; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2033; + this.state = 1905; this.query(); - this.state = 2034; + this.state = 1906; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -7767,33 +7443,33 @@ export class SparkSqlParser extends SQLParserBase { } public sortItem(): SortItemContext { let localContext = new SortItemContext(this.context, this.state); - this.enterRule(localContext, 108, SparkSqlParser.RULE_sortItem); + this.enterRule(localContext, 88, SparkSqlParser.RULE_sortItem); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2040; + this.state = 1912; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 232, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 234, this.context) ) { case 1: { - this.state = 2038; + this.state = 1910; this.columnName(); } break; case 2: { - this.state = 2039; + this.state = 1911; this.expression(); } break; } - this.state = 2043; + this.state = 1915; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 233, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 235, this.context) ) { case 1: { - this.state = 2042; + this.state = 1914; localContext._ordering = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 21 || _la === 86)) { @@ -7806,14 +7482,14 @@ export class SparkSqlParser extends SQLParserBase { } break; } - this.state = 2047; + this.state = 1919; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 234, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 236, this.context) ) { case 1: { - this.state = 2045; + this.state = 1917; this.match(SparkSqlParser.KW_NULLS); - this.state = 2046; + this.state = 1918; localContext._nullOrder = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 116 || _la === 157)) { @@ -7842,140 +7518,95 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public fromStatement(): FromStatementContext { - let localContext = new FromStatementContext(this.context, this.state); - this.enterRule(localContext, 110, SparkSqlParser.RULE_fromStatement); - try { - let alternative: number; - this.enterOuterAlt(localContext, 1); - { - this.state = 2049; - this.fromClause(); - this.state = 2051; - this.errorHandler.sync(this); - alternative = 1; - do { - switch (alternative) { - case 1: - { - { - this.state = 2050; - this.fromStatementBody(); - } - } - break; - default: - throw new antlr.NoViableAltException(this); - } - this.state = 2053; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 235, this.context); - } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public fromStatementBody(): FromStatementBodyContext { let localContext = new FromStatementBodyContext(this.context, this.state); - this.enterRule(localContext, 112, SparkSqlParser.RULE_fromStatementBody); + this.enterRule(localContext, 90, SparkSqlParser.RULE_fromStatementBody); try { let alternative: number; - this.state = 2082; + this.state = 1948; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 242, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 243, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2055; + this.state = 1921; this.transformClause(); - this.state = 2057; + this.state = 1923; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 236, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 237, this.context) ) { case 1: { - this.state = 2056; + this.state = 1922; this.whereClause(); } break; } - this.state = 2059; + this.state = 1925; this.queryOrganization(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2061; + this.state = 1927; this.selectClause(); - this.state = 2065; + this.state = 1931; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 237, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 238, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2062; + this.state = 1928; this.lateralView(); } } } - this.state = 2067; + this.state = 1933; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 237, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 238, this.context); } - this.state = 2069; + this.state = 1935; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 238, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 239, this.context) ) { case 1: { - this.state = 2068; + this.state = 1934; this.whereClause(); } break; } - this.state = 2072; + this.state = 1938; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 239, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 240, this.context) ) { case 1: { - this.state = 2071; + this.state = 1937; this.aggregationClause(); } break; } - this.state = 2075; + this.state = 1941; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 240, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 241, this.context) ) { case 1: { - this.state = 2074; + this.state = 1940; this.havingClause(); } break; } - this.state = 2078; + this.state = 1944; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 241, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 242, this.context) ) { case 1: { - this.state = 2077; + this.state = 1943; this.windowClause(); } break; } - this.state = 2080; + this.state = 1946; this.queryOrganization(); } break; @@ -7997,79 +7628,79 @@ export class SparkSqlParser extends SQLParserBase { } public querySpecification(): QuerySpecificationContext { let localContext = new QuerySpecificationContext(this.context, this.state); - this.enterRule(localContext, 114, SparkSqlParser.RULE_querySpecification); + this.enterRule(localContext, 92, SparkSqlParser.RULE_querySpecification); try { let alternative: number; - this.state = 2128; + this.state = 1994; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 255, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 256, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2084; + this.state = 1950; this.transformClause(); - this.state = 2086; + this.state = 1952; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 243, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 244, this.context) ) { case 1: { - this.state = 2085; + this.state = 1951; this.fromClause(); } break; } - this.state = 2091; + this.state = 1957; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 244, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 245, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2088; + this.state = 1954; this.lateralView(); } } } - this.state = 2093; + this.state = 1959; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 244, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 245, this.context); } - this.state = 2095; + this.state = 1961; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 245, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 246, this.context) ) { case 1: { - this.state = 2094; + this.state = 1960; this.whereClause(); } break; } - this.state = 2098; + this.state = 1964; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 246, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 247, this.context) ) { case 1: { - this.state = 2097; + this.state = 1963; this.aggregationClause(); } break; } - this.state = 2101; + this.state = 1967; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 247, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 248, this.context) ) { case 1: { - this.state = 2100; + this.state = 1966; this.havingClause(); } break; } - this.state = 2104; + this.state = 1970; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 248, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 249, this.context) ) { case 1: { - this.state = 2103; + this.state = 1969; this.windowClause(); } break; @@ -8079,70 +7710,70 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2106; + this.state = 1972; this.selectClause(); - this.state = 2108; + this.state = 1974; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 249, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 250, this.context) ) { case 1: { - this.state = 2107; + this.state = 1973; this.fromClause(); } break; } - this.state = 2113; + this.state = 1979; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 250, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 251, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2110; + this.state = 1976; this.lateralView(); } } } - this.state = 2115; + this.state = 1981; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 250, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 251, this.context); } - this.state = 2117; + this.state = 1983; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 251, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 252, this.context) ) { case 1: { - this.state = 2116; + this.state = 1982; this.whereClause(); } break; } - this.state = 2120; + this.state = 1986; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 252, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 253, this.context) ) { case 1: { - this.state = 2119; + this.state = 1985; this.aggregationClause(); } break; } - this.state = 2123; + this.state = 1989; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 253, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 254, this.context) ) { case 1: { - this.state = 2122; + this.state = 1988; this.havingClause(); } break; } - this.state = 2126; + this.state = 1992; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 254, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 255, this.context) ) { case 1: { - this.state = 2125; + this.state = 1991; this.windowClause(); } break; @@ -8167,147 +7798,147 @@ export class SparkSqlParser extends SQLParserBase { } public transformClause(): TransformClauseContext { let localContext = new TransformClauseContext(this.context, this.state); - this.enterRule(localContext, 116, SparkSqlParser.RULE_transformClause); + this.enterRule(localContext, 94, SparkSqlParser.RULE_transformClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2149; + this.state = 2015; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_SELECT: { - this.state = 2130; + this.state = 1996; this.match(SparkSqlParser.KW_SELECT); - this.state = 2131; + this.state = 1997; localContext._kind = this.match(SparkSqlParser.KW_TRANSFORM); - this.state = 2132; + this.state = 1998; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2134; + this.state = 2000; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 256, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 257, this.context) ) { case 1: { - this.state = 2133; + this.state = 1999; this.setQuantifier(); } break; } - this.state = 2136; + this.state = 2002; this.expressionSeq(); - this.state = 2137; + this.state = 2003; this.match(SparkSqlParser.RIGHT_PAREN); } break; case SparkSqlParser.KW_MAP: { - this.state = 2139; + this.state = 2005; localContext._kind = this.match(SparkSqlParser.KW_MAP); - this.state = 2141; + this.state = 2007; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 257, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 258, this.context) ) { case 1: { - this.state = 2140; + this.state = 2006; this.setQuantifier(); } break; } - this.state = 2143; + this.state = 2009; this.expressionSeq(); } break; case SparkSqlParser.KW_REDUCE: { - this.state = 2144; + this.state = 2010; localContext._kind = this.match(SparkSqlParser.KW_REDUCE); - this.state = 2146; + this.state = 2012; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 258, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 259, this.context) ) { case 1: { - this.state = 2145; + this.state = 2011; this.setQuantifier(); } break; } - this.state = 2148; + this.state = 2014; this.expressionSeq(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 2152; + this.state = 2018; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 257) { { - this.state = 2151; + this.state = 2017; localContext._inRowFormat = this.rowFormat(); } } - this.state = 2156; + this.state = 2022; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 236) { { - this.state = 2154; + this.state = 2020; this.match(SparkSqlParser.KW_RECORDWRITER); - this.state = 2155; + this.state = 2021; localContext._recordWriter = this.stringLit(); } } - this.state = 2158; + this.state = 2024; this.match(SparkSqlParser.KW_USING); - this.state = 2159; + this.state = 2025; localContext._script = this.stringLit(); - this.state = 2172; + this.state = 2038; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 264, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 265, this.context) ) { case 1: { - this.state = 2160; + this.state = 2026; this.match(SparkSqlParser.KW_AS); - this.state = 2170; + this.state = 2036; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 263, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 264, this.context) ) { case 1: { - this.state = 2161; + this.state = 2027; this.identifierSeq(); } break; case 2: { - this.state = 2162; + this.state = 2028; this.colTypeList(); } break; case 3: { { - this.state = 2163; + this.state = 2029; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2166; + this.state = 2032; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 262, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 263, this.context) ) { case 1: { - this.state = 2164; + this.state = 2030; this.identifierSeq(); } break; case 2: { - this.state = 2165; + this.state = 2031; this.colTypeList(); } break; } - this.state = 2168; + this.state = 2034; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -8316,24 +7947,24 @@ export class SparkSqlParser extends SQLParserBase { } break; } - this.state = 2175; + this.state = 2041; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 265, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 266, this.context) ) { case 1: { - this.state = 2174; + this.state = 2040; localContext._outRowFormat = this.rowFormat(); } break; } - this.state = 2179; + this.state = 2045; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 266, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 267, this.context) ) { case 1: { - this.state = 2177; + this.state = 2043; this.match(SparkSqlParser.KW_RECORDREADER); - this.state = 2178; + this.state = 2044; localContext._recordReader = this.stringLit(); } break; @@ -8356,111 +7987,489 @@ export class SparkSqlParser extends SQLParserBase { } public selectClause(): SelectClauseContext { let localContext = new SelectClauseContext(this.context, this.state); - this.enterRule(localContext, 118, SparkSqlParser.RULE_selectClause); + this.enterRule(localContext, 96, SparkSqlParser.RULE_selectClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2181; + this.state = 2047; this.match(SparkSqlParser.KW_SELECT); - this.state = 2185; + this.state = 2051; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 267, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 268, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2182; - localContext._hint = this.hint(); - localContext._hints.push(localContext._hint); - } + this.state = 2048; + localContext._hint = this.hint(); + localContext._hints.push(localContext._hint); + } + } + } + this.state = 2053; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 268, this.context); + } + this.state = 2055; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 269, this.context) ) { + case 1: + { + this.state = 2054; + this.setQuantifier(); + } + break; + } + this.state = 2057; + this.namedExpressionSeq(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public setClause(): SetClauseContext { + let localContext = new SetClauseContext(this.context, this.state); + this.enterRule(localContext, 98, SparkSqlParser.RULE_setClause); + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2059; + this.match(SparkSqlParser.KW_SET); + this.state = 2060; + this.assignmentList(); + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public matchedClause(): MatchedClauseContext { + let localContext = new MatchedClauseContext(this.context, this.state); + this.enterRule(localContext, 100, SparkSqlParser.RULE_matchedClause); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 2062; + this.match(SparkSqlParser.KW_WHEN); + this.state = 2063; + this.match(SparkSqlParser.KW_MATCHED); + this.state = 2066; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if (_la === 14) { + { + this.state = 2064; + this.match(SparkSqlParser.KW_AND); + this.state = 2065; + localContext._matchedCond = this.booleanExpression(0); + } + } + + this.state = 2068; + this.match(SparkSqlParser.KW_THEN); + this.state = 2076; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.KW_DELETE: + { + this.state = 2069; + this.match(SparkSqlParser.KW_DELETE); + } + break; + case SparkSqlParser.KW_UPDATE: + { + this.state = 2070; + this.match(SparkSqlParser.KW_UPDATE); + this.state = 2071; + this.match(SparkSqlParser.KW_SET); + this.state = 2074; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.ASTERISK: + { + this.state = 2072; + this.match(SparkSqlParser.ASTERISK); + } + break; + case SparkSqlParser.KW_ADD: + case SparkSqlParser.KW_AFTER: + case SparkSqlParser.KW_ALL: + case SparkSqlParser.KW_ALTER: + case SparkSqlParser.KW_ALWAYS: + case SparkSqlParser.KW_ANALYZE: + case SparkSqlParser.KW_AND: + case SparkSqlParser.KW_ANTI: + case SparkSqlParser.KW_ANY: + case SparkSqlParser.KW_ANY_VALUE: + case SparkSqlParser.KW_ARCHIVE: + case SparkSqlParser.KW_ARRAY: + case SparkSqlParser.KW_AS: + case SparkSqlParser.KW_ASC: + case SparkSqlParser.KW_AT: + case SparkSqlParser.KW_AUTHORIZATION: + case SparkSqlParser.KW_BETWEEN: + case SparkSqlParser.KW_BIGINT: + case SparkSqlParser.KW_BINARY: + case SparkSqlParser.KW_BOOLEAN: + case SparkSqlParser.KW_BOTH: + case SparkSqlParser.KW_BUCKET: + case SparkSqlParser.KW_BUCKETS: + case SparkSqlParser.KW_BY: + case SparkSqlParser.KW_BYTE: + case SparkSqlParser.KW_CACHE: + case SparkSqlParser.KW_CASCADE: + case SparkSqlParser.KW_CASE: + case SparkSqlParser.KW_CAST: + case SparkSqlParser.KW_CATALOG: + case SparkSqlParser.KW_CATALOGS: + case SparkSqlParser.KW_CHANGE: + case SparkSqlParser.KW_CHAR: + case SparkSqlParser.KW_CHARACTER: + case SparkSqlParser.KW_CHECK: + case SparkSqlParser.KW_CLEAR: + case SparkSqlParser.KW_CLUSTER: + case SparkSqlParser.KW_CLUSTERED: + case SparkSqlParser.KW_CODEGEN: + case SparkSqlParser.KW_COLLATE: + case SparkSqlParser.KW_COLLECTION: + case SparkSqlParser.KW_COLUMN: + case SparkSqlParser.KW_COLUMNS: + case SparkSqlParser.KW_COMMENT: + case SparkSqlParser.KW_COMMIT: + case SparkSqlParser.KW_COMPACT: + case SparkSqlParser.KW_COMPACTIONS: + case SparkSqlParser.KW_COMPUTE: + case SparkSqlParser.KW_CONCATENATE: + case SparkSqlParser.KW_CONSTRAINT: + case SparkSqlParser.KW_COST: + case SparkSqlParser.KW_CREATE: + case SparkSqlParser.KW_CROSS: + case SparkSqlParser.KW_CUBE: + case SparkSqlParser.KW_CURRENT: + case SparkSqlParser.KW_CURRENT_DATE: + case SparkSqlParser.KW_CURRENT_TIME: + case SparkSqlParser.KW_CURRENT_TIMESTAMP: + case SparkSqlParser.KW_CURRENT_USER: + case SparkSqlParser.KW_DAY: + case SparkSqlParser.KW_DAYS: + case SparkSqlParser.KW_DAYOFYEAR: + case SparkSqlParser.KW_DATA: + case SparkSqlParser.KW_DATE: + case SparkSqlParser.KW_DATABASE: + case SparkSqlParser.KW_DATABASES: + case SparkSqlParser.KW_DATEADD: + case SparkSqlParser.KW_DATE_ADD: + case SparkSqlParser.KW_DATEDIFF: + case SparkSqlParser.KW_DATE_DIFF: + case SparkSqlParser.KW_DBPROPERTIES: + case SparkSqlParser.KW_DEC: + case SparkSqlParser.KW_DECIMAL: + case SparkSqlParser.KW_DECLARE: + case SparkSqlParser.KW_DEFAULT: + case SparkSqlParser.KW_DEFINED: + case SparkSqlParser.KW_DELETE: + case SparkSqlParser.KW_DELIMITED: + case SparkSqlParser.KW_DESC: + case SparkSqlParser.KW_DESCRIBE: + case SparkSqlParser.KW_DFS: + case SparkSqlParser.KW_DIRECTORIES: + case SparkSqlParser.KW_DIRECTORY: + case SparkSqlParser.KW_DISABLE: + case SparkSqlParser.KW_DISTINCT: + case SparkSqlParser.KW_DISTRIBUTE: + case SparkSqlParser.KW_DIV: + case SparkSqlParser.KW_DOUBLE: + case SparkSqlParser.KW_DROP: + case SparkSqlParser.KW_ELSE: + case SparkSqlParser.KW_ENABLE: + case SparkSqlParser.KW_END: + case SparkSqlParser.KW_ESCAPE: + case SparkSqlParser.KW_ESCAPED: + case SparkSqlParser.KW_EXCEPT: + case SparkSqlParser.KW_EXCHANGE: + case SparkSqlParser.KW_EXCLUDE: + case SparkSqlParser.KW_EXISTS: + case SparkSqlParser.KW_EXPLAIN: + case SparkSqlParser.KW_EXPORT: + case SparkSqlParser.KW_EXTENDED: + case SparkSqlParser.KW_EXTERNAL: + case SparkSqlParser.KW_EXTRACT: + case SparkSqlParser.KW_FALSE: + case SparkSqlParser.KW_FETCH: + case SparkSqlParser.KW_FIELDS: + case SparkSqlParser.KW_FILTER: + case SparkSqlParser.KW_FILEFORMAT: + case SparkSqlParser.KW_FIRST: + case SparkSqlParser.KW_FLOAT: + case SparkSqlParser.KW_FOLLOWING: + case SparkSqlParser.KW_FOR: + case SparkSqlParser.KW_FOREIGN: + case SparkSqlParser.KW_FORMAT: + case SparkSqlParser.KW_FORMATTED: + case SparkSqlParser.KW_FULL: + case SparkSqlParser.KW_FUNCTION: + case SparkSqlParser.KW_FUNCTIONS: + case SparkSqlParser.KW_GENERATED: + case SparkSqlParser.KW_GLOBAL: + case SparkSqlParser.KW_GRANT: + case SparkSqlParser.KW_GROUP: + case SparkSqlParser.KW_GROUPING: + case SparkSqlParser.KW_HAVING: + case SparkSqlParser.KW_BINARY_HEX: + case SparkSqlParser.KW_HOUR: + case SparkSqlParser.KW_HOURS: + case SparkSqlParser.KW_IDENTIFIER: + case SparkSqlParser.KW_IF: + case SparkSqlParser.KW_IGNORE: + case SparkSqlParser.KW_IMPORT: + case SparkSqlParser.KW_IN: + case SparkSqlParser.KW_INCLUDE: + case SparkSqlParser.KW_INDEX: + case SparkSqlParser.KW_INDEXES: + case SparkSqlParser.KW_INNER: + case SparkSqlParser.KW_INPATH: + case SparkSqlParser.KW_INPUTFORMAT: + case SparkSqlParser.KW_INSERT: + case SparkSqlParser.KW_INTERSECT: + case SparkSqlParser.KW_INTERVAL: + case SparkSqlParser.KW_INT: + case SparkSqlParser.KW_INTEGER: + case SparkSqlParser.KW_INTO: + case SparkSqlParser.KW_IS: + case SparkSqlParser.KW_ITEMS: + case SparkSqlParser.KW_JOIN: + case SparkSqlParser.KW_KEYS: + case SparkSqlParser.KW_LAST: + case SparkSqlParser.KW_LATERAL: + case SparkSqlParser.KW_LAZY: + case SparkSqlParser.KW_LEADING: + case SparkSqlParser.KW_LEFT: + case SparkSqlParser.KW_LIFECYCLE: + case SparkSqlParser.KW_LIKE: + case SparkSqlParser.KW_ILIKE: + case SparkSqlParser.KW_LIMIT: + case SparkSqlParser.KW_LINES: + case SparkSqlParser.KW_LIST: + case SparkSqlParser.KW_LOAD: + case SparkSqlParser.KW_LOCAL: + case SparkSqlParser.KW_LOCATION: + case SparkSqlParser.KW_LOCK: + case SparkSqlParser.KW_LOCKS: + case SparkSqlParser.KW_LOGICAL: + case SparkSqlParser.KW_LONG: + case SparkSqlParser.KW_MACRO: + case SparkSqlParser.KW_MATERIALIZED: + case SparkSqlParser.KW_MAP: + case SparkSqlParser.KW_MATCHED: + case SparkSqlParser.KW_MERGE: + case SparkSqlParser.KW_MICROSECOND: + case SparkSqlParser.KW_MICROSECONDS: + case SparkSqlParser.KW_MILLISECOND: + case SparkSqlParser.KW_MILLISECONDS: + case SparkSqlParser.KW_MINUTE: + case SparkSqlParser.KW_MINUTES: + case SparkSqlParser.KW_MONTH: + case SparkSqlParser.KW_MONTHS: + case SparkSqlParser.KW_MSCK: + case SparkSqlParser.KW_NAME: + case SparkSqlParser.KW_NAMESPACE: + case SparkSqlParser.KW_NAMESPACES: + case SparkSqlParser.KW_NANOSECOND: + case SparkSqlParser.KW_NANOSECONDS: + case SparkSqlParser.KW_NATURAL: + case SparkSqlParser.KW_NO: + case SparkSqlParser.KW_NOT: + case SparkSqlParser.KW_NULL: + case SparkSqlParser.KW_NULLS: + case SparkSqlParser.KW_NUMERIC: + case SparkSqlParser.KW_OF: + case SparkSqlParser.KW_OFFSET: + case SparkSqlParser.KW_ON: + case SparkSqlParser.KW_ONLY: + case SparkSqlParser.KW_OPTIMIZE: + case SparkSqlParser.KW_OPTION: + case SparkSqlParser.KW_OPTIONS: + case SparkSqlParser.KW_OR: + case SparkSqlParser.KW_ORDER: + case SparkSqlParser.KW_OUT: + case SparkSqlParser.KW_OUTER: + case SparkSqlParser.KW_OUTPUTFORMAT: + case SparkSqlParser.KW_OVER: + case SparkSqlParser.KW_OVERLAPS: + case SparkSqlParser.KW_OVERLAY: + case SparkSqlParser.KW_OVERWRITE: + case SparkSqlParser.KW_PARTITION: + case SparkSqlParser.KW_PARTITIONED: + case SparkSqlParser.KW_PARTITIONS: + case SparkSqlParser.KW_PERCENTILE_CONT: + case SparkSqlParser.KW_PERCENTILE_DISC: + case SparkSqlParser.KW_PERCENTLIT: + case SparkSqlParser.KW_PIVOT: + case SparkSqlParser.KW_PLACING: + case SparkSqlParser.KW_POSITION: + case SparkSqlParser.KW_PRECEDING: + case SparkSqlParser.KW_PRIMARY: + case SparkSqlParser.KW_PRINCIPALS: + case SparkSqlParser.KW_PROPERTIES: + case SparkSqlParser.KW_PURGE: + case SparkSqlParser.KW_QUARTER: + case SparkSqlParser.KW_QUERY: + case SparkSqlParser.KW_RANGE: + case SparkSqlParser.KW_REAL: + case SparkSqlParser.KW_RECORDREADER: + case SparkSqlParser.KW_RECORDWRITER: + case SparkSqlParser.KW_RECOVER: + case SparkSqlParser.KW_REDUCE: + case SparkSqlParser.KW_REFERENCES: + case SparkSqlParser.KW_REFRESH: + case SparkSqlParser.KW_RENAME: + case SparkSqlParser.KW_REPAIR: + case SparkSqlParser.KW_REPEATABLE: + case SparkSqlParser.KW_REPLACE: + case SparkSqlParser.KW_RESET: + case SparkSqlParser.KW_RESPECT: + case SparkSqlParser.KW_RESTRICT: + case SparkSqlParser.KW_REWRITE: + case SparkSqlParser.KW_REVOKE: + case SparkSqlParser.KW_RIGHT: + case SparkSqlParser.KW_RLIKE: + case SparkSqlParser.KW_REGEXP: + case SparkSqlParser.KW_ROLE: + case SparkSqlParser.KW_ROLES: + case SparkSqlParser.KW_ROLLBACK: + case SparkSqlParser.KW_ROLLUP: + case SparkSqlParser.KW_ROW: + case SparkSqlParser.KW_ROWS: + case SparkSqlParser.KW_SECOND: + case SparkSqlParser.KW_SECONDS: + case SparkSqlParser.KW_SCHEMA: + case SparkSqlParser.KW_SCHEMAS: + case SparkSqlParser.KW_SEMI: + case SparkSqlParser.KW_SEPARATED: + case SparkSqlParser.KW_SERDE: + case SparkSqlParser.KW_SERDEPROPERTIES: + case SparkSqlParser.KW_SESSION_USER: + case SparkSqlParser.KW_SET: + case SparkSqlParser.KW_MINUS: + case SparkSqlParser.KW_SETS: + case SparkSqlParser.KW_SHORT: + case SparkSqlParser.KW_SHOW: + case SparkSqlParser.KW_SINGLE: + case SparkSqlParser.KW_SKEWED: + case SparkSqlParser.KW_SMALLINT: + case SparkSqlParser.KW_SOME: + case SparkSqlParser.KW_SORT: + case SparkSqlParser.KW_SORTED: + case SparkSqlParser.KW_SOURCE: + case SparkSqlParser.KW_START: + case SparkSqlParser.KW_STATISTICS: + case SparkSqlParser.KW_STORED: + case SparkSqlParser.KW_STRATIFY: + case SparkSqlParser.KW_STRING: + case SparkSqlParser.KW_STRUCT: + case SparkSqlParser.KW_SUBSTR: + case SparkSqlParser.KW_SUBSTRING: + case SparkSqlParser.KW_SYNC: + case SparkSqlParser.KW_SYSTEM: + case SparkSqlParser.KW_SYSTEM_TIME: + case SparkSqlParser.KW_SYSTEM_VERSION: + case SparkSqlParser.KW_TABLES: + case SparkSqlParser.KW_TABLESAMPLE: + case SparkSqlParser.KW_TARGET: + case SparkSqlParser.KW_TBLPROPERTIES: + case SparkSqlParser.KW_TEMPORARY: + case SparkSqlParser.KW_TERMINATED: + case SparkSqlParser.KW_THEN: + case SparkSqlParser.KW_TIME: + case SparkSqlParser.KW_TIMEDIFF: + case SparkSqlParser.KW_TIMESTAMP: + case SparkSqlParser.KW_TIMESTAMP_LTZ: + case SparkSqlParser.KW_TIMESTAMP_NTZ: + case SparkSqlParser.KW_TIMESTAMPADD: + case SparkSqlParser.KW_TIMESTAMPDIFF: + case SparkSqlParser.KW_TINYINT: + case SparkSqlParser.KW_TO: + case SparkSqlParser.KW_TOUCH: + case SparkSqlParser.KW_TRAILING: + case SparkSqlParser.KW_TRANSACTION: + case SparkSqlParser.KW_TRANSACTIONS: + case SparkSqlParser.KW_TRANSFORM: + case SparkSqlParser.KW_TRIM: + case SparkSqlParser.KW_TRUE: + case SparkSqlParser.KW_TRUNCATE: + case SparkSqlParser.KW_TRY_CAST: + case SparkSqlParser.KW_TYPE: + case SparkSqlParser.KW_UNARCHIVE: + case SparkSqlParser.KW_UNBOUNDED: + case SparkSqlParser.KW_UNCACHE: + case SparkSqlParser.KW_UNION: + case SparkSqlParser.KW_UNIQUE: + case SparkSqlParser.KW_UNKNOWN: + case SparkSqlParser.KW_UNLOCK: + case SparkSqlParser.KW_UNPIVOT: + case SparkSqlParser.KW_UNSET: + case SparkSqlParser.KW_UPDATE: + case SparkSqlParser.KW_USE: + case SparkSqlParser.KW_USER: + case SparkSqlParser.KW_USING: + case SparkSqlParser.KW_VALUES: + case SparkSqlParser.KW_VARCHAR: + case SparkSqlParser.KW_VAR: + case SparkSqlParser.KW_VARIABLE: + case SparkSqlParser.KW_VERSION: + case SparkSqlParser.KW_VIEW: + case SparkSqlParser.KW_VIEWS: + case SparkSqlParser.KW_VOID: + case SparkSqlParser.KW_WEEK: + case SparkSqlParser.KW_WEEKS: + case SparkSqlParser.KW_WHEN: + case SparkSqlParser.KW_WHERE: + case SparkSqlParser.KW_WINDOW: + case SparkSqlParser.KW_WITH: + case SparkSqlParser.KW_WITHIN: + case SparkSqlParser.KW_YEAR: + case SparkSqlParser.KW_YEARS: + case SparkSqlParser.KW_ZONE: + case SparkSqlParser.KW_ZORDER: + case SparkSqlParser.DOUBLEQUOTED_STRING: + case SparkSqlParser.IDENTIFIER: + case SparkSqlParser.BACKQUOTED_IDENTIFIER: + { + this.state = 2073; + this.assignmentList(); } + break; + default: + throw new antlr.NoViableAltException(this); } - this.state = 2187; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 267, this.context); - } - this.state = 2189; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 268, this.context) ) { - case 1: - { - this.state = 2188; - this.setQuantifier(); } break; + default: + throw new antlr.NoViableAltException(this); } - this.state = 2191; - this.namedExpressionSeq(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public setClause(): SetClauseContext { - let localContext = new SetClauseContext(this.context, this.state); - this.enterRule(localContext, 120, SparkSqlParser.RULE_setClause); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2193; - this.match(SparkSqlParser.KW_SET); - this.state = 2194; - this.assignmentList(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public matchedClause(): MatchedClauseContext { - let localContext = new MatchedClauseContext(this.context, this.state); - this.enterRule(localContext, 122, SparkSqlParser.RULE_matchedClause); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2196; - this.match(SparkSqlParser.KW_WHEN); - this.state = 2197; - this.match(SparkSqlParser.KW_MATCHED); - this.state = 2200; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 14) { - { - this.state = 2198; - this.match(SparkSqlParser.KW_AND); - this.state = 2199; - localContext._matchedCond = this.booleanExpression(0); - } - } - - this.state = 2202; - this.match(SparkSqlParser.KW_THEN); - this.state = 2203; - this.matchedAction(); } } catch (re) { @@ -8479,44 +8488,44 @@ export class SparkSqlParser extends SQLParserBase { } public notMatchedClause(): NotMatchedClauseContext { let localContext = new NotMatchedClauseContext(this.context, this.state); - this.enterRule(localContext, 124, SparkSqlParser.RULE_notMatchedClause); + this.enterRule(localContext, 102, SparkSqlParser.RULE_notMatchedClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2205; + this.state = 2078; this.match(SparkSqlParser.KW_WHEN); - this.state = 2206; + this.state = 2079; this.match(SparkSqlParser.KW_NOT); - this.state = 2207; + this.state = 2080; this.match(SparkSqlParser.KW_MATCHED); - this.state = 2210; + this.state = 2083; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 31) { { - this.state = 2208; + this.state = 2081; this.match(SparkSqlParser.KW_BY); - this.state = 2209; + this.state = 2082; this.match(SparkSqlParser.KW_TARGET); } } - this.state = 2214; + this.state = 2087; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14) { { - this.state = 2212; + this.state = 2085; this.match(SparkSqlParser.KW_AND); - this.state = 2213; + this.state = 2086; localContext._notMatchedCond = this.booleanExpression(0); } } - this.state = 2216; + this.state = 2089; this.match(SparkSqlParser.KW_THEN); - this.state = 2217; + this.state = 2090; this.notMatchedAction(); } } @@ -8536,89 +8545,57 @@ export class SparkSqlParser extends SQLParserBase { } public notMatchedBySourceClause(): NotMatchedBySourceClauseContext { let localContext = new NotMatchedBySourceClauseContext(this.context, this.state); - this.enterRule(localContext, 126, SparkSqlParser.RULE_notMatchedBySourceClause); + this.enterRule(localContext, 104, SparkSqlParser.RULE_notMatchedBySourceClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2219; + this.state = 2092; this.match(SparkSqlParser.KW_WHEN); - this.state = 2220; + this.state = 2093; this.match(SparkSqlParser.KW_NOT); - this.state = 2221; + this.state = 2094; this.match(SparkSqlParser.KW_MATCHED); - this.state = 2222; + this.state = 2095; this.match(SparkSqlParser.KW_BY); - this.state = 2223; + this.state = 2096; this.match(SparkSqlParser.KW_SOURCE); - this.state = 2226; + this.state = 2099; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 14) { { - this.state = 2224; + this.state = 2097; this.match(SparkSqlParser.KW_AND); - this.state = 2225; + this.state = 2098; localContext._notMatchedBySourceCond = this.booleanExpression(0); } } - this.state = 2228; + this.state = 2101; this.match(SparkSqlParser.KW_THEN); - this.state = 2229; - this.notMatchedBySourceAction(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public matchedAction(): MatchedActionContext { - let localContext = new MatchedActionContext(this.context, this.state); - this.enterRule(localContext, 128, SparkSqlParser.RULE_matchedAction); - try { - this.state = 2238; + this.state = 2106; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 273, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.KW_DELETE: { - this.state = 2231; + this.state = 2102; this.match(SparkSqlParser.KW_DELETE); } break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 2232; - this.match(SparkSqlParser.KW_UPDATE); - this.state = 2233; - this.match(SparkSqlParser.KW_SET); - this.state = 2234; - this.match(SparkSqlParser.ASTERISK); - } - break; - case 3: - this.enterOuterAlt(localContext, 3); + case SparkSqlParser.KW_UPDATE: { - this.state = 2235; + this.state = 2103; this.match(SparkSqlParser.KW_UPDATE); - this.state = 2236; + this.state = 2104; this.match(SparkSqlParser.KW_SET); - this.state = 2237; + this.state = 2105; this.assignmentList(); } break; + default: + throw new antlr.NoViableAltException(this); + } } } catch (re) { @@ -8637,55 +8614,55 @@ export class SparkSqlParser extends SQLParserBase { } public notMatchedAction(): NotMatchedActionContext { let localContext = new NotMatchedActionContext(this.context, this.state); - this.enterRule(localContext, 130, SparkSqlParser.RULE_notMatchedAction); + this.enterRule(localContext, 106, SparkSqlParser.RULE_notMatchedAction); let _la: number; try { - this.state = 2258; + this.state = 2126; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 275, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 278, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2240; + this.state = 2108; this.match(SparkSqlParser.KW_INSERT); - this.state = 2241; + this.state = 2109; this.match(SparkSqlParser.ASTERISK); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2242; + this.state = 2110; this.match(SparkSqlParser.KW_INSERT); - this.state = 2243; + this.state = 2111; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2244; + this.state = 2112; this.multipartIdentifierList(); - this.state = 2245; + this.state = 2113; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2246; + this.state = 2114; this.match(SparkSqlParser.KW_VALUES); - this.state = 2247; + this.state = 2115; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2248; + this.state = 2116; this.expression(); - this.state = 2253; + this.state = 2121; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2249; + this.state = 2117; this.match(SparkSqlParser.COMMA); - this.state = 2250; + this.state = 2118; this.expression(); } } - this.state = 2255; + this.state = 2123; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2256; + this.state = 2124; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -8705,71 +8682,28 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public notMatchedBySourceAction(): NotMatchedBySourceActionContext { - let localContext = new NotMatchedBySourceActionContext(this.context, this.state); - this.enterRule(localContext, 132, SparkSqlParser.RULE_notMatchedBySourceAction); - try { - this.state = 2264; - this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case SparkSqlParser.KW_DELETE: - this.enterOuterAlt(localContext, 1); - { - this.state = 2260; - this.match(SparkSqlParser.KW_DELETE); - } - break; - case SparkSqlParser.KW_UPDATE: - this.enterOuterAlt(localContext, 2); - { - this.state = 2261; - this.match(SparkSqlParser.KW_UPDATE); - this.state = 2262; - this.match(SparkSqlParser.KW_SET); - this.state = 2263; - this.assignmentList(); - } - break; - default: - throw new antlr.NoViableAltException(this); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public assignmentList(): AssignmentListContext { let localContext = new AssignmentListContext(this.context, this.state); - this.enterRule(localContext, 134, SparkSqlParser.RULE_assignmentList); + this.enterRule(localContext, 108, SparkSqlParser.RULE_assignmentList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2266; + this.state = 2128; this.assignment(); - this.state = 2271; + this.state = 2133; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2267; + this.state = 2129; this.match(SparkSqlParser.COMMA); - this.state = 2268; + this.state = 2130; this.assignment(); } } - this.state = 2273; + this.state = 2135; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -8791,15 +8725,15 @@ export class SparkSqlParser extends SQLParserBase { } public assignment(): AssignmentContext { let localContext = new AssignmentContext(this.context, this.state); - this.enterRule(localContext, 136, SparkSqlParser.RULE_assignment); + this.enterRule(localContext, 110, SparkSqlParser.RULE_assignment); try { this.enterOuterAlt(localContext, 1); { - this.state = 2274; + this.state = 2136; localContext._key = this.multipartIdentifier(); - this.state = 2275; + this.state = 2137; this.match(SparkSqlParser.EQ); - this.state = 2276; + this.state = 2138; localContext._value = this.expression(); } } @@ -8819,13 +8753,13 @@ export class SparkSqlParser extends SQLParserBase { } public whereClause(): WhereClauseContext { let localContext = new WhereClauseContext(this.context, this.state); - this.enterRule(localContext, 138, SparkSqlParser.RULE_whereClause); + this.enterRule(localContext, 112, SparkSqlParser.RULE_whereClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 2278; + this.state = 2140; this.match(SparkSqlParser.KW_WHERE); - this.state = 2279; + this.state = 2141; this.booleanExpression(0); } } @@ -8845,13 +8779,13 @@ export class SparkSqlParser extends SQLParserBase { } public havingClause(): HavingClauseContext { let localContext = new HavingClauseContext(this.context, this.state); - this.enterRule(localContext, 140, SparkSqlParser.RULE_havingClause); + this.enterRule(localContext, 114, SparkSqlParser.RULE_havingClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 2281; + this.state = 2143; this.match(SparkSqlParser.KW_HAVING); - this.state = 2282; + this.state = 2144; this.booleanExpression(0); } } @@ -8871,42 +8805,42 @@ export class SparkSqlParser extends SQLParserBase { } public hint(): HintContext { let localContext = new HintContext(this.context, this.state); - this.enterRule(localContext, 142, SparkSqlParser.RULE_hint); + this.enterRule(localContext, 116, SparkSqlParser.RULE_hint); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2284; + this.state = 2146; this.match(SparkSqlParser.HENT_START); - this.state = 2285; + this.state = 2147; localContext._hintStatement = this.hintStatement(); localContext._hintStatements.push(localContext._hintStatement); - this.state = 2292; + this.state = 2154; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967056) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 3073) !== 0)) { { { - this.state = 2287; + this.state = 2149; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 4) { { - this.state = 2286; + this.state = 2148; this.match(SparkSqlParser.COMMA); } } - this.state = 2289; + this.state = 2151; localContext._hintStatement = this.hintStatement(); localContext._hintStatements.push(localContext._hintStatement); } } - this.state = 2294; + this.state = 2156; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2295; + this.state = 2157; this.match(SparkSqlParser.HENT_END); } } @@ -8926,47 +8860,47 @@ export class SparkSqlParser extends SQLParserBase { } public hintStatement(): HintStatementContext { let localContext = new HintStatementContext(this.context, this.state); - this.enterRule(localContext, 144, SparkSqlParser.RULE_hintStatement); + this.enterRule(localContext, 118, SparkSqlParser.RULE_hintStatement); let _la: number; try { - this.state = 2310; + this.state = 2172; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 281, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 283, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2297; + this.state = 2159; localContext._hintName = this.identifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2298; + this.state = 2160; localContext._hintName = this.identifier(); - this.state = 2299; + this.state = 2161; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2300; + this.state = 2162; localContext._primaryExpression = this.primaryExpression(0); localContext._parameters.push(localContext._primaryExpression); - this.state = 2305; + this.state = 2167; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2301; + this.state = 2163; this.match(SparkSqlParser.COMMA); - this.state = 2302; + this.state = 2164; localContext._primaryExpression = this.primaryExpression(0); localContext._parameters.push(localContext._primaryExpression); } } - this.state = 2307; + this.state = 2169; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2308; + this.state = 2170; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -8988,65 +8922,65 @@ export class SparkSqlParser extends SQLParserBase { } public fromClause(): FromClauseContext { let localContext = new FromClauseContext(this.context, this.state); - this.enterRule(localContext, 146, SparkSqlParser.RULE_fromClause); + this.enterRule(localContext, 120, SparkSqlParser.RULE_fromClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2312; + this.state = 2174; this.match(SparkSqlParser.KW_FROM); - this.state = 2313; + this.state = 2175; this.relation(); - this.state = 2318; + this.state = 2180; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 282, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 284, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2314; + this.state = 2176; this.match(SparkSqlParser.COMMA); - this.state = 2315; + this.state = 2177; this.relation(); } } } - this.state = 2320; + this.state = 2182; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 282, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 284, this.context); } - this.state = 2324; + this.state = 2186; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 283, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 285, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2321; + this.state = 2183; this.lateralView(); } } } - this.state = 2326; + this.state = 2188; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 283, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 285, this.context); } - this.state = 2328; + this.state = 2190; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 284, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 286, this.context) ) { case 1: { - this.state = 2327; + this.state = 2189; this.pivotClause(); } break; } - this.state = 2331; + this.state = 2193; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 285, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 287, this.context) ) { case 1: { - this.state = 2330; + this.state = 2192; this.unpivotClause(); } break; @@ -9067,60 +9001,28 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public functionKind(): FunctionKindContext { - let localContext = new FunctionKindContext(this.context, this.state); - this.enterRule(localContext, 148, SparkSqlParser.RULE_functionKind); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2333; - _la = this.tokenStream.LA(1); - if(!(_la === 10 || _la === 290 || _la === 331)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public temporalClause(): TemporalClauseContext { let localContext = new TemporalClauseContext(this.context, this.state); - this.enterRule(localContext, 150, SparkSqlParser.RULE_temporalClause); + this.enterRule(localContext, 122, SparkSqlParser.RULE_temporalClause); let _la: number; try { - this.state = 2349; + this.state = 2212; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 288, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 291, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2336; + this.state = 2196; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 119) { { - this.state = 2335; + this.state = 2195; this.match(SparkSqlParser.KW_FOR); } } - this.state = 2338; + this.state = 2198; _la = this.tokenStream.LA(1); if(!(_la === 292 || _la === 337)) { this.errorHandler.recoverInline(this); @@ -9129,28 +9031,45 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2339; + this.state = 2199; this.match(SparkSqlParser.KW_AS); - this.state = 2340; + this.state = 2200; this.match(SparkSqlParser.KW_OF); - this.state = 2341; - this.version(); + this.state = 2203; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.INTEGER_VALUE: + { + this.state = 2201; + this.match(SparkSqlParser.INTEGER_VALUE); + } + break; + case SparkSqlParser.STRING_LITERAL: + case SparkSqlParser.DOUBLEQUOTED_STRING: + { + this.state = 2202; + this.stringLit(); + } + break; + default: + throw new antlr.NoViableAltException(this); + } } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2343; + this.state = 2206; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 119) { { - this.state = 2342; + this.state = 2205; this.match(SparkSqlParser.KW_FOR); } } - this.state = 2345; + this.state = 2208; _la = this.tokenStream.LA(1); if(!(_la === 291 || _la === 303)) { this.errorHandler.recoverInline(this); @@ -9159,11 +9078,11 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2346; + this.state = 2209; this.match(SparkSqlParser.KW_AS); - this.state = 2347; + this.state = 2210; this.match(SparkSqlParser.KW_OF); - this.state = 2348; + this.state = 2211; localContext._timestamp = this.valueExpression(0); } break; @@ -9185,119 +9104,119 @@ export class SparkSqlParser extends SQLParserBase { } public aggregationClause(): AggregationClauseContext { let localContext = new AggregationClauseContext(this.context, this.state); - this.enterRule(localContext, 152, SparkSqlParser.RULE_aggregationClause); + this.enterRule(localContext, 124, SparkSqlParser.RULE_aggregationClause); let _la: number; try { let alternative: number; - this.state = 2390; + this.state = 2253; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 293, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 296, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2351; + this.state = 2214; this.match(SparkSqlParser.KW_GROUP); - this.state = 2352; + this.state = 2215; this.match(SparkSqlParser.KW_BY); - this.state = 2353; + this.state = 2216; localContext._groupByClause = this.groupByClause(); localContext._groupingExpressionsWithGroupingAnalytics.push(localContext._groupByClause); - this.state = 2358; + this.state = 2221; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 289, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 292, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2354; + this.state = 2217; this.match(SparkSqlParser.COMMA); - this.state = 2355; + this.state = 2218; localContext._groupByClause = this.groupByClause(); localContext._groupingExpressionsWithGroupingAnalytics.push(localContext._groupByClause); } } } - this.state = 2360; + this.state = 2223; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 289, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 292, this.context); } } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2361; + this.state = 2224; this.match(SparkSqlParser.KW_GROUP); - this.state = 2362; + this.state = 2225; this.match(SparkSqlParser.KW_BY); - this.state = 2363; + this.state = 2226; localContext._expression = this.expression(); localContext._groupingExpressions.push(localContext._expression); - this.state = 2368; + this.state = 2231; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 290, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 293, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2364; + this.state = 2227; this.match(SparkSqlParser.COMMA); - this.state = 2365; + this.state = 2228; localContext._expression = this.expression(); localContext._groupingExpressions.push(localContext._expression); } } } - this.state = 2370; + this.state = 2233; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 290, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 293, this.context); } - this.state = 2388; + this.state = 2251; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 292, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 295, this.context) ) { case 1: { - this.state = 2371; + this.state = 2234; this.match(SparkSqlParser.KW_WITH); - this.state = 2372; + this.state = 2235; localContext._kind = this.match(SparkSqlParser.KW_ROLLUP); } break; case 2: { - this.state = 2373; + this.state = 2236; this.match(SparkSqlParser.KW_WITH); - this.state = 2374; + this.state = 2237; localContext._kind = this.match(SparkSqlParser.KW_CUBE); } break; case 3: { - this.state = 2375; + this.state = 2238; localContext._kind = this.match(SparkSqlParser.KW_GROUPING); - this.state = 2376; + this.state = 2239; this.match(SparkSqlParser.KW_SETS); - this.state = 2377; + this.state = 2240; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2378; + this.state = 2241; this.groupingSet(); - this.state = 2383; + this.state = 2246; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2379; + this.state = 2242; this.match(SparkSqlParser.COMMA); - this.state = 2380; + this.state = 2243; this.groupingSet(); } } - this.state = 2385; + this.state = 2248; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2386; + this.state = 2249; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -9322,29 +9241,29 @@ export class SparkSqlParser extends SQLParserBase { } public groupByClause(): GroupByClauseContext { let localContext = new GroupByClauseContext(this.context, this.state); - this.enterRule(localContext, 154, SparkSqlParser.RULE_groupByClause); + this.enterRule(localContext, 126, SparkSqlParser.RULE_groupByClause); try { - this.state = 2395; + this.state = 2258; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 294, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 297, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2392; + this.state = 2255; this.columnName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2393; + this.state = 2256; this.groupingAnalytics(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2394; + this.state = 2257; this.expression(); } break; @@ -9366,17 +9285,17 @@ export class SparkSqlParser extends SQLParserBase { } public groupingAnalytics(): GroupingAnalyticsContext { let localContext = new GroupingAnalyticsContext(this.context, this.state); - this.enterRule(localContext, 156, SparkSqlParser.RULE_groupingAnalytics); + this.enterRule(localContext, 128, SparkSqlParser.RULE_groupingAnalytics); let _la: number; try { - this.state = 2422; + this.state = 2291; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_CUBE: case SparkSqlParser.KW_ROLLUP: this.enterOuterAlt(localContext, 1); { - this.state = 2397; + this.state = 2260; _la = this.tokenStream.LA(1); if(!(_la === 61 || _la === 256)) { this.errorHandler.recoverInline(this); @@ -9385,58 +9304,86 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2398; + this.state = 2261; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2399; + this.state = 2262; this.groupingSet(); - this.state = 2404; + this.state = 2267; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2400; + this.state = 2263; this.match(SparkSqlParser.COMMA); - this.state = 2401; + this.state = 2264; this.groupingSet(); } } - this.state = 2406; + this.state = 2269; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2407; + this.state = 2270; this.match(SparkSqlParser.RIGHT_PAREN); } break; case SparkSqlParser.KW_GROUPING: this.enterOuterAlt(localContext, 2); { - this.state = 2409; + this.state = 2272; this.match(SparkSqlParser.KW_GROUPING); - this.state = 2410; + this.state = 2273; this.match(SparkSqlParser.KW_SETS); - this.state = 2411; + this.state = 2274; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2412; - this.groupingElement(); - this.state = 2417; + this.state = 2277; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 299, this.context) ) { + case 1: + { + this.state = 2275; + this.groupingAnalytics(); + } + break; + case 2: + { + this.state = 2276; + this.groupingSet(); + } + break; + } + this.state = 2286; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2413; + this.state = 2279; this.match(SparkSqlParser.COMMA); - this.state = 2414; - this.groupingElement(); + this.state = 2282; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 300, this.context) ) { + case 1: + { + this.state = 2280; + this.groupingAnalytics(); + } + break; + case 2: + { + this.state = 2281; + this.groupingSet(); + } + break; } } - this.state = 2419; + } + this.state = 2288; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2420; + this.state = 2289; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -9458,125 +9405,88 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public groupingElement(): GroupingElementContext { - let localContext = new GroupingElementContext(this.context, this.state); - this.enterRule(localContext, 158, SparkSqlParser.RULE_groupingElement); - try { - this.state = 2426; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 298, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); - { - this.state = 2424; - this.groupingAnalytics(); - } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 2425; - this.groupingSet(); - } - break; - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - 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, 160, SparkSqlParser.RULE_groupingSet); + this.enterRule(localContext, 130, SparkSqlParser.RULE_groupingSet); let _la: number; try { - this.state = 2448; + this.state = 2313; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 303, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 307, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2428; + this.state = 2293; this.columnName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2429; + this.state = 2294; this.expression(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2430; + this.state = 2295; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2445; + this.state = 2310; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 302, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 306, this.context) ) { case 1: { - this.state = 2433; + this.state = 2298; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 299, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 303, this.context) ) { case 1: { - this.state = 2431; + this.state = 2296; this.columnName(); } break; case 2: { - this.state = 2432; + this.state = 2297; this.expression(); } break; } - this.state = 2442; + this.state = 2307; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2435; + this.state = 2300; this.match(SparkSqlParser.COMMA); - this.state = 2438; + this.state = 2303; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 300, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 304, this.context) ) { case 1: { - this.state = 2436; + this.state = 2301; this.columnName(); } break; case 2: { - this.state = 2437; + this.state = 2302; this.expression(); } break; } } } - this.state = 2444; + this.state = 2309; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } break; } - this.state = 2447; + this.state = 2312; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -9598,48 +9508,48 @@ export class SparkSqlParser extends SQLParserBase { } public pivotClause(): PivotClauseContext { let localContext = new PivotClauseContext(this.context, this.state); - this.enterRule(localContext, 162, SparkSqlParser.RULE_pivotClause); + this.enterRule(localContext, 132, SparkSqlParser.RULE_pivotClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2450; + this.state = 2315; this.match(SparkSqlParser.KW_PIVOT); - this.state = 2451; + this.state = 2316; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2452; + this.state = 2317; localContext._aggregates = this.namedExpressionSeq(); - this.state = 2453; + this.state = 2318; this.match(SparkSqlParser.KW_FOR); - this.state = 2454; + this.state = 2319; this.pivotColumn(); - this.state = 2455; + this.state = 2320; this.match(SparkSqlParser.KW_IN); - this.state = 2456; + this.state = 2321; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2457; + this.state = 2322; localContext._pivotValue = this.pivotValue(); localContext._pivotValues.push(localContext._pivotValue); - this.state = 2462; + this.state = 2327; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2458; + this.state = 2323; this.match(SparkSqlParser.COMMA); - this.state = 2459; + this.state = 2324; localContext._pivotValue = this.pivotValue(); localContext._pivotValues.push(localContext._pivotValue); } } - this.state = 2464; + this.state = 2329; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2465; + this.state = 2330; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2466; + this.state = 2331; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -9659,10 +9569,10 @@ export class SparkSqlParser extends SQLParserBase { } public pivotColumn(): PivotColumnContext { let localContext = new PivotColumnContext(this.context, this.state); - this.enterRule(localContext, 164, SparkSqlParser.RULE_pivotColumn); + this.enterRule(localContext, 134, SparkSqlParser.RULE_pivotColumn); let _la: number; try { - this.state = 2480; + this.state = 2345; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_ADD: @@ -10010,7 +9920,7 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.BACKQUOTED_IDENTIFIER: this.enterOuterAlt(localContext, 1); { - this.state = 2468; + this.state = 2333; localContext._identifier = this.identifier(); localContext._identifiers.push(localContext._identifier); } @@ -10018,29 +9928,29 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.LEFT_PAREN: this.enterOuterAlt(localContext, 2); { - this.state = 2469; + this.state = 2334; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2470; + this.state = 2335; localContext._identifier = this.identifier(); localContext._identifiers.push(localContext._identifier); - this.state = 2475; + this.state = 2340; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2471; + this.state = 2336; this.match(SparkSqlParser.COMMA); - this.state = 2472; + this.state = 2337; localContext._identifier = this.identifier(); localContext._identifiers.push(localContext._identifier); } } - this.state = 2477; + this.state = 2342; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2478; + this.state = 2343; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -10064,29 +9974,29 @@ export class SparkSqlParser extends SQLParserBase { } public pivotValue(): PivotValueContext { let localContext = new PivotValueContext(this.context, this.state); - this.enterRule(localContext, 166, SparkSqlParser.RULE_pivotValue); + this.enterRule(localContext, 136, SparkSqlParser.RULE_pivotValue); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2482; + this.state = 2347; this.expression(); - this.state = 2487; + this.state = 2352; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967040) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 3073) !== 0)) { { - this.state = 2484; + this.state = 2349; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 307, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 311, this.context) ) { case 1: { - this.state = 2483; + this.state = 2348; this.match(SparkSqlParser.KW_AS); } break; } - this.state = 2486; + this.state = 2351; this.identifier(); } } @@ -10109,106 +10019,35 @@ export class SparkSqlParser extends SQLParserBase { } public unpivotClause(): UnpivotClauseContext { let localContext = new UnpivotClauseContext(this.context, this.state); - this.enterRule(localContext, 168, SparkSqlParser.RULE_unpivotClause); + this.enterRule(localContext, 138, SparkSqlParser.RULE_unpivotClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2489; + this.state = 2354; this.match(SparkSqlParser.KW_UNPIVOT); - this.state = 2491; + this.state = 2357; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 104 || _la === 141) { { - this.state = 2490; - localContext._nullOperator = this.unpivotNullClause(); + this.state = 2355; + _la = this.tokenStream.LA(1); + if(!(_la === 104 || _la === 141)) { + this.errorHandler.recoverInline(this); } - } - - this.state = 2493; - this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2494; - localContext._operator = this.unpivotOperator(); - this.state = 2495; - this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2500; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 311, this.context) ) { - case 1: - { - this.state = 2497; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 310, this.context) ) { - case 1: - { - this.state = 2496; - this.match(SparkSqlParser.KW_AS); - } - break; + else { + this.errorHandler.reportMatch(this); + this.consume(); } - this.state = 2499; - this.identifier(); + this.state = 2356; + this.match(SparkSqlParser.KW_NULLS); } - break; - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public unpivotNullClause(): UnpivotNullClauseContext { - let localContext = new UnpivotNullClauseContext(this.context, this.state); - this.enterRule(localContext, 170, SparkSqlParser.RULE_unpivotNullClause); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2502; - _la = this.tokenStream.LA(1); - if(!(_la === 104 || _la === 141)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - this.state = 2503; - this.match(SparkSqlParser.KW_NULLS); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; } - } - finally { - this.exitRule(); - } - return localContext; - } - public unpivotOperator(): UnpivotOperatorContext { - let localContext = new UnpivotOperatorContext(this.context, this.state); - this.enterRule(localContext, 172, SparkSqlParser.RULE_unpivotOperator); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2507; + + this.state = 2359; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2362; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_ADD: @@ -10555,19 +10394,41 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.IDENTIFIER: case SparkSqlParser.BACKQUOTED_IDENTIFIER: { - this.state = 2505; + this.state = 2360; this.unpivotSingleValueColumnClause(); } break; case SparkSqlParser.LEFT_PAREN: { - this.state = 2506; + this.state = 2361; this.unpivotMultiValueColumnClause(); } break; default: throw new antlr.NoViableAltException(this); } + this.state = 2364; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2369; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 316, this.context) ) { + case 1: + { + this.state = 2366; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 315, this.context) ) { + case 1: + { + this.state = 2365; + this.match(SparkSqlParser.KW_AS); + } + break; + } + this.state = 2368; + this.identifier(); + } + break; + } } } catch (re) { @@ -10586,42 +10447,42 @@ export class SparkSqlParser extends SQLParserBase { } public unpivotSingleValueColumnClause(): UnpivotSingleValueColumnClauseContext { let localContext = new UnpivotSingleValueColumnClauseContext(this.context, this.state); - this.enterRule(localContext, 174, SparkSqlParser.RULE_unpivotSingleValueColumnClause); + this.enterRule(localContext, 140, SparkSqlParser.RULE_unpivotSingleValueColumnClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2509; - this.unpivotValueColumn(); - this.state = 2510; + this.state = 2371; + this.identifier(); + this.state = 2372; this.match(SparkSqlParser.KW_FOR); - this.state = 2511; - this.unpivotNameColumn(); - this.state = 2512; + this.state = 2373; + this.identifier(); + this.state = 2374; this.match(SparkSqlParser.KW_IN); - this.state = 2513; + this.state = 2375; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2514; + this.state = 2376; localContext._unpivotColumnAndAlias = this.unpivotColumnAndAlias(); localContext._unpivotColumns.push(localContext._unpivotColumnAndAlias); - this.state = 2519; + this.state = 2381; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2515; + this.state = 2377; this.match(SparkSqlParser.COMMA); - this.state = 2516; + this.state = 2378; localContext._unpivotColumnAndAlias = this.unpivotColumnAndAlias(); localContext._unpivotColumns.push(localContext._unpivotColumnAndAlias); } } - this.state = 2521; + this.state = 2383; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2522; + this.state = 2384; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -10641,64 +10502,64 @@ export class SparkSqlParser extends SQLParserBase { } public unpivotMultiValueColumnClause(): UnpivotMultiValueColumnClauseContext { let localContext = new UnpivotMultiValueColumnClauseContext(this.context, this.state); - this.enterRule(localContext, 176, SparkSqlParser.RULE_unpivotMultiValueColumnClause); + this.enterRule(localContext, 142, SparkSqlParser.RULE_unpivotMultiValueColumnClause); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2524; + this.state = 2386; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2525; - localContext._unpivotValueColumn = this.unpivotValueColumn(); - localContext._unpivotValueColumns.push(localContext._unpivotValueColumn); - this.state = 2530; + this.state = 2387; + localContext._identifier = this.identifier(); + localContext._unpivotValueColumns.push(localContext._identifier); + this.state = 2392; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2526; + this.state = 2388; this.match(SparkSqlParser.COMMA); - this.state = 2527; - localContext._unpivotValueColumn = this.unpivotValueColumn(); - localContext._unpivotValueColumns.push(localContext._unpivotValueColumn); + this.state = 2389; + localContext._identifier = this.identifier(); + localContext._unpivotValueColumns.push(localContext._identifier); } } - this.state = 2532; + this.state = 2394; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2533; + this.state = 2395; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2534; + this.state = 2396; this.match(SparkSqlParser.KW_FOR); - this.state = 2535; - this.unpivotNameColumn(); - this.state = 2536; + this.state = 2397; + this.identifier(); + this.state = 2398; this.match(SparkSqlParser.KW_IN); - this.state = 2537; + this.state = 2399; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2538; + this.state = 2400; localContext._unpivotColumnSet = this.unpivotColumnSet(); localContext._unpivotColumnSets.push(localContext._unpivotColumnSet); - this.state = 2543; + this.state = 2405; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2539; + this.state = 2401; this.match(SparkSqlParser.COMMA); - this.state = 2540; + this.state = 2402; localContext._unpivotColumnSet = this.unpivotColumnSet(); localContext._unpivotColumnSets.push(localContext._unpivotColumnSet); } } - this.state = 2545; + this.state = 2407; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2546; + this.state = 2408; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -10718,125 +10579,52 @@ export class SparkSqlParser extends SQLParserBase { } public unpivotColumnSet(): UnpivotColumnSetContext { let localContext = new UnpivotColumnSetContext(this.context, this.state); - this.enterRule(localContext, 178, SparkSqlParser.RULE_unpivotColumnSet); + this.enterRule(localContext, 144, SparkSqlParser.RULE_unpivotColumnSet); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2548; + this.state = 2410; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2549; - localContext._unpivotColumn = this.unpivotColumn(); - localContext._unpivotColumns.push(localContext._unpivotColumn); - this.state = 2554; + this.state = 2411; + localContext._multipartIdentifier = this.multipartIdentifier(); + localContext._unpivotColumns.push(localContext._multipartIdentifier); + this.state = 2416; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2550; + this.state = 2412; this.match(SparkSqlParser.COMMA); - this.state = 2551; - localContext._unpivotColumn = this.unpivotColumn(); - localContext._unpivotColumns.push(localContext._unpivotColumn); + this.state = 2413; + localContext._multipartIdentifier = this.multipartIdentifier(); + localContext._unpivotColumns.push(localContext._multipartIdentifier); } } - this.state = 2556; + this.state = 2418; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2557; + this.state = 2419; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2559; + this.state = 2424; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967040) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 3073) !== 0)) { { - this.state = 2558; - this.unpivotAlias(); + this.state = 2421; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 321, this.context) ) { + case 1: + { + this.state = 2420; + this.match(SparkSqlParser.KW_AS); + } + break; } - } - - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public unpivotValueColumn(): UnpivotValueColumnContext { - let localContext = new UnpivotValueColumnContext(this.context, this.state); - this.enterRule(localContext, 180, SparkSqlParser.RULE_unpivotValueColumn); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2561; - this.identifier(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public unpivotNameColumn(): UnpivotNameColumnContext { - let localContext = new UnpivotNameColumnContext(this.context, this.state); - this.enterRule(localContext, 182, SparkSqlParser.RULE_unpivotNameColumn); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2563; - this.identifier(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public unpivotColumnAndAlias(): UnpivotColumnAndAliasContext { - let localContext = new UnpivotColumnAndAliasContext(this.context, this.state); - this.enterRule(localContext, 184, SparkSqlParser.RULE_unpivotColumnAndAlias); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2565; - this.unpivotColumn(); - this.state = 2567; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967040) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 3073) !== 0)) { - { - this.state = 2566; - this.unpivotAlias(); + this.state = 2423; + this.identifier(); } } @@ -10856,48 +10644,35 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public unpivotColumn(): UnpivotColumnContext { - let localContext = new UnpivotColumnContext(this.context, this.state); - this.enterRule(localContext, 186, SparkSqlParser.RULE_unpivotColumn); + public unpivotColumnAndAlias(): UnpivotColumnAndAliasContext { + let localContext = new UnpivotColumnAndAliasContext(this.context, this.state); + this.enterRule(localContext, 146, SparkSqlParser.RULE_unpivotColumnAndAlias); + let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2569; + this.state = 2426; this.multipartIdentifier(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public unpivotAlias(): UnpivotAliasContext { - let localContext = new UnpivotAliasContext(this.context, this.state); - this.enterRule(localContext, 188, SparkSqlParser.RULE_unpivotAlias); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2572; + this.state = 2431; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 319, this.context) ) { - case 1: + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967040) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 3073) !== 0)) { { - this.state = 2571; - this.match(SparkSqlParser.KW_AS); + this.state = 2428; + this.errorHandler.sync(this); + switch (this.interpreter.adaptivePredict(this.tokenStream, 323, this.context) ) { + case 1: + { + this.state = 2427; + this.match(SparkSqlParser.KW_AS); + } + break; + } + this.state = 2430; + this.identifier(); } - break; } - this.state = 2574; - this.identifier(); + } } catch (re) { @@ -10916,15 +10691,15 @@ export class SparkSqlParser extends SQLParserBase { } public ifNotExists(): IfNotExistsContext { let localContext = new IfNotExistsContext(this.context, this.state); - this.enterRule(localContext, 190, SparkSqlParser.RULE_ifNotExists); + this.enterRule(localContext, 148, SparkSqlParser.RULE_ifNotExists); try { this.enterOuterAlt(localContext, 1); { - this.state = 2576; + this.state = 2433; this.match(SparkSqlParser.KW_IF); - this.state = 2577; + this.state = 2434; this.match(SparkSqlParser.KW_NOT); - this.state = 2578; + this.state = 2435; this.match(SparkSqlParser.KW_EXISTS); } } @@ -10944,13 +10719,13 @@ export class SparkSqlParser extends SQLParserBase { } public ifExists(): IfExistsContext { let localContext = new IfExistsContext(this.context, this.state); - this.enterRule(localContext, 192, SparkSqlParser.RULE_ifExists); + this.enterRule(localContext, 150, SparkSqlParser.RULE_ifExists); try { this.enterOuterAlt(localContext, 1); { - this.state = 2580; + this.state = 2437; this.match(SparkSqlParser.KW_IF); - this.state = 2581; + this.state = 2438; this.match(SparkSqlParser.KW_EXISTS); } } @@ -10970,96 +10745,96 @@ export class SparkSqlParser extends SQLParserBase { } public lateralView(): LateralViewContext { let localContext = new LateralViewContext(this.context, this.state); - this.enterRule(localContext, 194, SparkSqlParser.RULE_lateralView); + this.enterRule(localContext, 152, SparkSqlParser.RULE_lateralView); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2583; + this.state = 2440; this.match(SparkSqlParser.KW_LATERAL); - this.state = 2584; + this.state = 2441; this.match(SparkSqlParser.KW_VIEW); - this.state = 2586; + this.state = 2443; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 320, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 325, this.context) ) { case 1: { - this.state = 2585; + this.state = 2442; this.match(SparkSqlParser.KW_OUTER); } break; } - this.state = 2588; + this.state = 2445; this.viewName(); - this.state = 2589; + this.state = 2446; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2598; + this.state = 2455; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 1073678415) !== 0)) { { - this.state = 2590; + this.state = 2447; this.expression(); - this.state = 2595; + this.state = 2452; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2591; + this.state = 2448; this.match(SparkSqlParser.COMMA); - this.state = 2592; + this.state = 2449; this.expression(); } } - this.state = 2597; + this.state = 2454; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 2600; + this.state = 2457; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2601; + this.state = 2458; this.tableAlias(); - this.state = 2613; + this.state = 2470; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 325, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 330, this.context) ) { case 1: { - this.state = 2603; + this.state = 2460; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 323, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 328, this.context) ) { case 1: { - this.state = 2602; + this.state = 2459; this.match(SparkSqlParser.KW_AS); } break; } - this.state = 2605; + this.state = 2462; localContext._identifier = this.identifier(); localContext._colName.push(localContext._identifier); - this.state = 2610; + this.state = 2467; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 324, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 329, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2606; + this.state = 2463; this.match(SparkSqlParser.COMMA); - this.state = 2607; + this.state = 2464; localContext._identifier = this.identifier(); localContext._colName.push(localContext._identifier); } } } - this.state = 2612; + this.state = 2469; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 324, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 329, this.context); } } break; @@ -11082,12 +10857,12 @@ export class SparkSqlParser extends SQLParserBase { } public setQuantifier(): SetQuantifierContext { let localContext = new SetQuantifierContext(this.context, this.state); - this.enterRule(localContext, 196, SparkSqlParser.RULE_setQuantifier); + this.enterRule(localContext, 154, SparkSqlParser.RULE_setQuantifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2615; + this.state = 2472; _la = this.tokenStream.LA(1); if(!(_la === 10 || _la === 92)) { this.errorHandler.recoverInline(this); @@ -11114,106 +10889,80 @@ export class SparkSqlParser extends SQLParserBase { } public relation(): RelationContext { let localContext = new RelationContext(this.context, this.state); - this.enterRule(localContext, 198, SparkSqlParser.RULE_relation); + this.enterRule(localContext, 156, SparkSqlParser.RULE_relation); try { let alternative: number; - this.state = 2628; + this.state = 2487; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 328, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 334, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2617; + this.state = 2474; this.tableName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2619; + this.state = 2476; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 326, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 331, this.context) ) { case 1: { - this.state = 2618; + this.state = 2475; this.match(SparkSqlParser.KW_LATERAL); } break; } - this.state = 2621; + this.state = 2478; this.relationPrimary(); - this.state = 2625; + this.state = 2484; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 327, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 333, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { - { - this.state = 2622; - this.relationExtension(); + this.state = 2482; + this.errorHandler.sync(this); + switch (this.tokenStream.LA(1)) { + case SparkSqlParser.KW_ANTI: + case SparkSqlParser.KW_CROSS: + case SparkSqlParser.KW_FULL: + case SparkSqlParser.KW_INNER: + case SparkSqlParser.KW_JOIN: + case SparkSqlParser.KW_LEFT: + case SparkSqlParser.KW_NATURAL: + case SparkSqlParser.KW_RIGHT: + case SparkSqlParser.KW_SEMI: + { + this.state = 2479; + this.joinRelation(); + } + break; + case SparkSqlParser.KW_PIVOT: + { + this.state = 2480; + this.pivotClause(); + } + break; + case SparkSqlParser.KW_UNPIVOT: + { + this.state = 2481; + this.unpivotClause(); + } + break; + default: + throw new antlr.NoViableAltException(this); } } } - this.state = 2627; + this.state = 2486; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 327, this.context); - } - } - break; - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public relationExtension(): RelationExtensionContext { - let localContext = new RelationExtensionContext(this.context, this.state); - this.enterRule(localContext, 200, SparkSqlParser.RULE_relationExtension); - try { - this.state = 2633; - this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case SparkSqlParser.KW_ANTI: - case SparkSqlParser.KW_CROSS: - case SparkSqlParser.KW_FULL: - case SparkSqlParser.KW_INNER: - case SparkSqlParser.KW_JOIN: - case SparkSqlParser.KW_LEFT: - case SparkSqlParser.KW_NATURAL: - case SparkSqlParser.KW_RIGHT: - case SparkSqlParser.KW_SEMI: - this.enterOuterAlt(localContext, 1); - { - this.state = 2630; - this.joinRelation(); - } - break; - case SparkSqlParser.KW_PIVOT: - this.enterOuterAlt(localContext, 2); - { - this.state = 2631; - this.pivotClause(); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 333, this.context); } - break; - case SparkSqlParser.KW_UNPIVOT: - this.enterOuterAlt(localContext, 3); - { - this.state = 2632; - this.unpivotClause(); } break; - default: - throw new antlr.NoViableAltException(this); } } catch (re) { @@ -11232,9 +10981,9 @@ export class SparkSqlParser extends SQLParserBase { } public joinRelation(): JoinRelationContext { let localContext = new JoinRelationContext(this.context, this.state); - this.enterRule(localContext, 202, SparkSqlParser.RULE_joinRelation); + this.enterRule(localContext, 158, SparkSqlParser.RULE_joinRelation); try { - this.state = 2652; + this.state = 2506; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_ANTI: @@ -11248,29 +10997,29 @@ export class SparkSqlParser extends SQLParserBase { this.enterOuterAlt(localContext, 1); { { - this.state = 2635; + this.state = 2489; this.joinType(); } - this.state = 2636; + this.state = 2490; this.match(SparkSqlParser.KW_JOIN); - this.state = 2638; + this.state = 2492; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 330, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 335, this.context) ) { case 1: { - this.state = 2637; + this.state = 2491; this.match(SparkSqlParser.KW_LATERAL); } break; } - this.state = 2640; + this.state = 2494; localContext._right = this.relationPrimary(); - this.state = 2642; + this.state = 2496; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 331, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 336, this.context) ) { case 1: { - this.state = 2641; + this.state = 2495; this.joinCriteria(); } break; @@ -11280,23 +11029,23 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_NATURAL: this.enterOuterAlt(localContext, 2); { - this.state = 2644; + this.state = 2498; this.match(SparkSqlParser.KW_NATURAL); - this.state = 2645; + this.state = 2499; this.joinType(); - this.state = 2646; + this.state = 2500; this.match(SparkSqlParser.KW_JOIN); - this.state = 2648; + this.state = 2502; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 332, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 337, this.context) ) { case 1: { - this.state = 2647; + this.state = 2501; this.match(SparkSqlParser.KW_LATERAL); } break; } - this.state = 2650; + this.state = 2504; localContext._right = this.relationPrimary(); } break; @@ -11320,21 +11069,21 @@ export class SparkSqlParser extends SQLParserBase { } public joinType(): JoinTypeContext { let localContext = new JoinTypeContext(this.context, this.state); - this.enterRule(localContext, 204, SparkSqlParser.RULE_joinType); + this.enterRule(localContext, 160, SparkSqlParser.RULE_joinType); let _la: number; try { - this.state = 2678; + this.state = 2524; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 340, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 343, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2655; + this.state = 2509; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 144) { { - this.state = 2654; + this.state = 2508; this.match(SparkSqlParser.KW_INNER); } } @@ -11344,21 +11093,21 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2657; + this.state = 2511; this.match(SparkSqlParser.KW_CROSS); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2658; + this.state = 2512; this.match(SparkSqlParser.KW_LEFT); - this.state = 2660; + this.state = 2514; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 211) { { - this.state = 2659; + this.state = 2513; this.match(SparkSqlParser.KW_OUTER); } } @@ -11368,69 +11117,49 @@ export class SparkSqlParser extends SQLParserBase { case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2663; + this.state = 2517; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 161) { { - this.state = 2662; + this.state = 2516; this.match(SparkSqlParser.KW_LEFT); } } - this.state = 2665; - this.match(SparkSqlParser.KW_SEMI); + this.state = 2519; + _la = this.tokenStream.LA(1); + if(!(_la === 15 || _la === 264)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 2666; - this.match(SparkSqlParser.KW_RIGHT); - this.state = 2668; - this.errorHandler.sync(this); + this.state = 2520; _la = this.tokenStream.LA(1); - if (_la === 211) { - { - this.state = 2667; - this.match(SparkSqlParser.KW_OUTER); - } + if(!(_la === 124 || _la === 250)) { + this.errorHandler.recoverInline(this); } - + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 6: - this.enterOuterAlt(localContext, 6); - { - this.state = 2670; - this.match(SparkSqlParser.KW_FULL); - this.state = 2672; + this.state = 2522; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 211) { { - this.state = 2671; + this.state = 2521; this.match(SparkSqlParser.KW_OUTER); } } - } - break; - case 7: - this.enterOuterAlt(localContext, 7); - { - this.state = 2675; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 161) { - { - this.state = 2674; - this.match(SparkSqlParser.KW_LEFT); - } - } - - this.state = 2677; - this.match(SparkSqlParser.KW_ANTI); } break; } @@ -11451,26 +11180,26 @@ export class SparkSqlParser extends SQLParserBase { } public joinCriteria(): JoinCriteriaContext { let localContext = new JoinCriteriaContext(this.context, this.state); - this.enterRule(localContext, 206, SparkSqlParser.RULE_joinCriteria); + this.enterRule(localContext, 162, SparkSqlParser.RULE_joinCriteria); try { - this.state = 2684; + this.state = 2530; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_ON: this.enterOuterAlt(localContext, 1); { - this.state = 2680; + this.state = 2526; this.match(SparkSqlParser.KW_ON); - this.state = 2681; + this.state = 2527; this.booleanExpression(0); } break; case SparkSqlParser.KW_USING: this.enterOuterAlt(localContext, 2); { - this.state = 2682; + this.state = 2528; this.match(SparkSqlParser.KW_USING); - this.state = 2683; + this.state = 2529; this.identifierList(); } break; @@ -11494,39 +11223,39 @@ export class SparkSqlParser extends SQLParserBase { } public sample(): SampleContext { let localContext = new SampleContext(this.context, this.state); - this.enterRule(localContext, 208, SparkSqlParser.RULE_sample); + this.enterRule(localContext, 164, SparkSqlParser.RULE_sample); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2686; + this.state = 2532; this.match(SparkSqlParser.KW_TABLESAMPLE); - this.state = 2687; + this.state = 2533; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2689; + this.state = 2535; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 1073678415) !== 0)) { { - this.state = 2688; + this.state = 2534; this.sampleMethod(); } } - this.state = 2691; + this.state = 2537; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2696; + this.state = 2542; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 343, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 346, this.context) ) { case 1: { - this.state = 2692; + this.state = 2538; this.match(SparkSqlParser.KW_REPEATABLE); - this.state = 2693; + this.state = 2539; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2694; + this.state = 2540; localContext._seed = this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 2695; + this.state = 2541; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -11549,26 +11278,26 @@ export class SparkSqlParser extends SQLParserBase { } public sampleMethod(): SampleMethodContext { let localContext = new SampleMethodContext(this.context, this.state); - this.enterRule(localContext, 210, SparkSqlParser.RULE_sampleMethod); + this.enterRule(localContext, 166, SparkSqlParser.RULE_sampleMethod); let _la: number; try { - this.state = 2722; + this.state = 2568; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 347, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 350, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2699; + this.state = 2545; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 362) { { - this.state = 2698; + this.state = 2544; localContext._negativeSign = this.match(SparkSqlParser.MINUS); } } - this.state = 2701; + this.state = 2547; localContext._percentage = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 382 || _la === 384)) { @@ -11578,55 +11307,55 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2702; + this.state = 2548; this.match(SparkSqlParser.KW_PERCENTLIT); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2703; + this.state = 2549; this.expression(); - this.state = 2704; + this.state = 2550; this.match(SparkSqlParser.KW_ROWS); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2706; + this.state = 2552; localContext._sampleType = this.match(SparkSqlParser.KW_BUCKET); - this.state = 2707; + this.state = 2553; localContext._numerator = this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 2708; + this.state = 2554; this.match(SparkSqlParser.KW_OUT); - this.state = 2709; + this.state = 2555; this.match(SparkSqlParser.KW_OF); - this.state = 2710; + this.state = 2556; localContext._denominator = this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 2719; + this.state = 2565; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 203) { { - this.state = 2711; + this.state = 2557; this.match(SparkSqlParser.KW_ON); - this.state = 2717; + this.state = 2563; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 345, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 348, this.context) ) { case 1: { - this.state = 2712; + this.state = 2558; this.identifier(); } break; case 2: { - this.state = 2713; + this.state = 2559; this.qualifiedName(); - this.state = 2714; + this.state = 2560; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2715; + this.state = 2561; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -11639,7 +11368,7 @@ export class SparkSqlParser extends SQLParserBase { case 4: this.enterOuterAlt(localContext, 4); { - this.state = 2721; + this.state = 2567; localContext._bytes = this.expression(); } break; @@ -11661,15 +11390,15 @@ export class SparkSqlParser extends SQLParserBase { } public identifierList(): IdentifierListContext { let localContext = new IdentifierListContext(this.context, this.state); - this.enterRule(localContext, 212, SparkSqlParser.RULE_identifierList); + this.enterRule(localContext, 168, SparkSqlParser.RULE_identifierList); try { this.enterOuterAlt(localContext, 1); { - this.state = 2724; + this.state = 2570; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2725; + this.state = 2571; this.identifierSeq(); - this.state = 2726; + this.state = 2572; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -11689,32 +11418,32 @@ export class SparkSqlParser extends SQLParserBase { } public identifierSeq(): IdentifierSeqContext { let localContext = new IdentifierSeqContext(this.context, this.state); - this.enterRule(localContext, 214, SparkSqlParser.RULE_identifierSeq); + this.enterRule(localContext, 170, SparkSqlParser.RULE_identifierSeq); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2728; + this.state = 2574; localContext._errorCapturingIdentifier = this.errorCapturingIdentifier(); localContext._ident.push(localContext._errorCapturingIdentifier); - this.state = 2733; + this.state = 2579; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 348, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 351, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2729; + this.state = 2575; this.match(SparkSqlParser.COMMA); - this.state = 2730; + this.state = 2576; localContext._errorCapturingIdentifier = this.errorCapturingIdentifier(); localContext._ident.push(localContext._errorCapturingIdentifier); } } } - this.state = 2735; + this.state = 2581; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 348, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 351, this.context); } } } @@ -11734,32 +11463,32 @@ export class SparkSqlParser extends SQLParserBase { } public orderedIdentifierList(): OrderedIdentifierListContext { let localContext = new OrderedIdentifierListContext(this.context, this.state); - this.enterRule(localContext, 216, SparkSqlParser.RULE_orderedIdentifierList); + this.enterRule(localContext, 172, SparkSqlParser.RULE_orderedIdentifierList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2736; + this.state = 2582; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2737; + this.state = 2583; this.orderedIdentifier(); - this.state = 2742; + this.state = 2588; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2738; + this.state = 2584; this.match(SparkSqlParser.COMMA); - this.state = 2739; + this.state = 2585; this.orderedIdentifier(); } } - this.state = 2744; + this.state = 2590; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2745; + this.state = 2591; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -11779,19 +11508,19 @@ export class SparkSqlParser extends SQLParserBase { } public orderedIdentifier(): OrderedIdentifierContext { let localContext = new OrderedIdentifierContext(this.context, this.state); - this.enterRule(localContext, 218, SparkSqlParser.RULE_orderedIdentifier); + this.enterRule(localContext, 174, SparkSqlParser.RULE_orderedIdentifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2747; + this.state = 2593; localContext._ident = this.errorCapturingIdentifier(); - this.state = 2749; + this.state = 2595; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 21 || _la === 86) { { - this.state = 2748; + this.state = 2594; localContext._ordering = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 21 || _la === 86)) { @@ -11822,32 +11551,32 @@ export class SparkSqlParser extends SQLParserBase { } public identifierCommentList(): IdentifierCommentListContext { let localContext = new IdentifierCommentListContext(this.context, this.state); - this.enterRule(localContext, 220, SparkSqlParser.RULE_identifierCommentList); + this.enterRule(localContext, 176, SparkSqlParser.RULE_identifierCommentList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2751; + this.state = 2597; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2752; + this.state = 2598; this.identifierComment(); - this.state = 2757; + this.state = 2603; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2753; + this.state = 2599; this.match(SparkSqlParser.COMMA); - this.state = 2754; + this.state = 2600; this.identifierComment(); } } - this.state = 2759; + this.state = 2605; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2760; + this.state = 2606; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -11867,20 +11596,22 @@ export class SparkSqlParser extends SQLParserBase { } public identifierComment(): IdentifierCommentContext { let localContext = new IdentifierCommentContext(this.context, this.state); - this.enterRule(localContext, 222, SparkSqlParser.RULE_identifierComment); + this.enterRule(localContext, 178, SparkSqlParser.RULE_identifierComment); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2762; + this.state = 2608; this.columnNameCreate(); - this.state = 2764; + this.state = 2611; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 51) { { - this.state = 2763; - this.commentSpec(); + this.state = 2609; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 2610; + localContext._comment = this.stringLit(); } } @@ -11902,167 +11633,176 @@ export class SparkSqlParser extends SQLParserBase { } public relationPrimary(): RelationPrimaryContext { let localContext = new RelationPrimaryContext(this.context, this.state); - this.enterRule(localContext, 224, SparkSqlParser.RULE_relationPrimary); + this.enterRule(localContext, 180, SparkSqlParser.RULE_relationPrimary); + let _la: number; try { - this.state = 2797; + let alternative: number; + this.state = 2668; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 358, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 364, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2769; + this.state = 2616; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 353, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 356, this.context) ) { case 1: { - this.state = 2766; + this.state = 2613; this.tableName(); } break; case 2: { - this.state = 2767; + this.state = 2614; this.viewName(); } break; case 3: { - this.state = 2768; + this.state = 2615; this.identifierReference(); } break; } - this.state = 2772; + this.state = 2619; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 354, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 357, this.context) ) { case 1: { - this.state = 2771; + this.state = 2618; this.temporalClause(); } break; } - this.state = 2775; + this.state = 2622; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 355, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 358, this.context) ) { case 1: { - this.state = 2774; + this.state = 2621; this.sample(); } break; } - this.state = 2777; + this.state = 2624; this.tableAlias(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2779; + this.state = 2626; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2780; + this.state = 2627; this.query(); - this.state = 2781; + this.state = 2628; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2783; + this.state = 2630; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 356, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 359, this.context) ) { case 1: { - this.state = 2782; + this.state = 2629; this.sample(); } break; } - this.state = 2785; + this.state = 2632; this.tableAlias(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2787; + this.state = 2634; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2788; + this.state = 2635; this.relation(); - this.state = 2789; + this.state = 2636; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2791; + this.state = 2638; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 357, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 360, this.context) ) { case 1: { - this.state = 2790; + this.state = 2637; this.sample(); } - break; + break; + } + this.state = 2640; + this.tableAlias(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 2642; + this.match(SparkSqlParser.KW_VALUES); + this.state = 2643; + this.expression(); + this.state = 2648; + 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) { + { + { + this.state = 2644; + this.match(SparkSqlParser.COMMA); + this.state = 2645; + this.expression(); + } + } + } + this.state = 2650; + this.errorHandler.sync(this); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 361, this.context); } - this.state = 2793; + this.state = 2651; this.tableAlias(); } break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 2795; - this.inlineTable(); - } - break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 2796; - this.functionTable(); - } - break; - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public inlineTable(): InlineTableContext { - let localContext = new InlineTableContext(this.context, this.state); - this.enterRule(localContext, 226, SparkSqlParser.RULE_inlineTable); - try { - let alternative: number; - this.enterOuterAlt(localContext, 1); - { - this.state = 2799; - this.match(SparkSqlParser.KW_VALUES); - this.state = 2800; - this.expression(); - this.state = 2805; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 359, this.context); - while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { - if (alternative === 1) { - { + this.state = 2653; + this.functionName(); + this.state = 2654; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2663; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967295) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 1073678415) !== 0)) { { - this.state = 2801; - this.match(SparkSqlParser.COMMA); - this.state = 2802; - this.expression(); + this.state = 2655; + this.functionTableArgument(); + this.state = 2660; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 4) { + { + { + this.state = 2656; + this.match(SparkSqlParser.COMMA); + this.state = 2657; + this.functionTableArgument(); + } + } + this.state = 2662; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); } } } - this.state = 2807; - this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 359, this.context); - } - this.state = 2808; - this.tableAlias(); + + this.state = 2665; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2666; + this.tableAlias(); + } + break; } } catch (re) { @@ -12081,25 +11821,25 @@ export class SparkSqlParser extends SQLParserBase { } public functionTableSubqueryArgument(): FunctionTableSubqueryArgumentContext { let localContext = new FunctionTableSubqueryArgumentContext(this.context, this.state); - this.enterRule(localContext, 228, SparkSqlParser.RULE_functionTableSubqueryArgument); + this.enterRule(localContext, 182, SparkSqlParser.RULE_functionTableSubqueryArgument); let _la: number; try { - this.state = 2829; + this.state = 2689; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 363, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 368, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2810; + this.state = 2670; this.match(SparkSqlParser.KW_TABLE); - this.state = 2811; + this.state = 2671; this.tableName(); - this.state = 2813; + this.state = 2673; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93 || _la === 217 || _la === 346) { { - this.state = 2812; + this.state = 2672; this.tableArgumentPartitioning(); } } @@ -12109,20 +11849,20 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2815; + this.state = 2675; this.match(SparkSqlParser.KW_TABLE); - this.state = 2816; + this.state = 2676; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2817; + this.state = 2677; this.tableName(); - this.state = 2818; + this.state = 2678; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2820; + this.state = 2680; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93 || _la === 217 || _la === 346) { { - this.state = 2819; + this.state = 2679; this.tableArgumentPartitioning(); } } @@ -12132,20 +11872,20 @@ export class SparkSqlParser extends SQLParserBase { case 3: this.enterOuterAlt(localContext, 3); { - this.state = 2822; + this.state = 2682; this.match(SparkSqlParser.KW_TABLE); - this.state = 2823; + this.state = 2683; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2824; + this.state = 2684; this.query(); - this.state = 2825; + this.state = 2685; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2827; + this.state = 2687; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93 || _la === 217 || _la === 346) { { - this.state = 2826; + this.state = 2686; this.tableArgumentPartitioning(); } } @@ -12170,22 +11910,22 @@ export class SparkSqlParser extends SQLParserBase { } public tableArgumentPartitioning(): TableArgumentPartitioningContext { let localContext = new TableArgumentPartitioningContext(this.context, this.state); - this.enterRule(localContext, 230, SparkSqlParser.RULE_tableArgumentPartitioning); + this.enterRule(localContext, 184, SparkSqlParser.RULE_tableArgumentPartitioning); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2850; + this.state = 2710; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_WITH: { { - this.state = 2831; + this.state = 2691; this.match(SparkSqlParser.KW_WITH); - this.state = 2832; + this.state = 2692; this.match(SparkSqlParser.KW_SINGLE); - this.state = 2833; + this.state = 2693; this.match(SparkSqlParser.KW_PARTITION); } } @@ -12194,7 +11934,7 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_PARTITION: { { - this.state = 2834; + this.state = 2694; _la = this.tokenStream.LA(1); if(!(_la === 93 || _la === 217)) { this.errorHandler.recoverInline(this); @@ -12203,38 +11943,38 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2835; + this.state = 2695; this.match(SparkSqlParser.KW_BY); - this.state = 2848; + this.state = 2708; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 365, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 370, this.context) ) { case 1: { { { - this.state = 2836; + this.state = 2696; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2837; + this.state = 2697; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); - this.state = 2842; + this.state = 2702; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2838; + this.state = 2698; this.match(SparkSqlParser.COMMA); - this.state = 2839; + this.state = 2699; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); } } - this.state = 2844; + this.state = 2704; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2845; + this.state = 2705; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -12242,7 +11982,7 @@ export class SparkSqlParser extends SQLParserBase { break; case 2: { - this.state = 2847; + this.state = 2707; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); } @@ -12254,12 +11994,12 @@ export class SparkSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 2868; + this.state = 2728; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 209 || _la === 278) { { - this.state = 2852; + this.state = 2712; _la = this.tokenStream.LA(1); if(!(_la === 209 || _la === 278)) { this.errorHandler.recoverInline(this); @@ -12268,43 +12008,43 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 2853; + this.state = 2713; this.match(SparkSqlParser.KW_BY); { - this.state = 2866; + this.state = 2726; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 368, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 373, this.context) ) { case 1: { { - this.state = 2854; + this.state = 2714; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2855; + this.state = 2715; this.sortItem(); - this.state = 2860; + this.state = 2720; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2856; + this.state = 2716; this.match(SparkSqlParser.COMMA); - this.state = 2857; + this.state = 2717; this.sortItem(); } } - this.state = 2862; + this.state = 2722; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 2863; + this.state = 2723; this.match(SparkSqlParser.RIGHT_PAREN); } } break; case 2: { - this.state = 2865; + this.state = 2725; this.sortItem(); } break; @@ -12331,15 +12071,15 @@ export class SparkSqlParser extends SQLParserBase { } public functionTableNamedArgumentExpression(): FunctionTableNamedArgumentExpressionContext { let localContext = new FunctionTableNamedArgumentExpressionContext(this.context, this.state); - this.enterRule(localContext, 232, SparkSqlParser.RULE_functionTableNamedArgumentExpression); + this.enterRule(localContext, 186, SparkSqlParser.RULE_functionTableNamedArgumentExpression); try { this.enterOuterAlt(localContext, 1); { - this.state = 2870; + this.state = 2730; localContext._key = this.identifier(); - this.state = 2871; + this.state = 2731; this.match(SparkSqlParser.FAT_ARROW); - this.state = 2872; + this.state = 2732; localContext._table = this.functionTableSubqueryArgument(); } } @@ -12359,15 +12099,15 @@ export class SparkSqlParser extends SQLParserBase { } public functionTableReferenceArgument(): FunctionTableReferenceArgumentContext { let localContext = new FunctionTableReferenceArgumentContext(this.context, this.state); - this.enterRule(localContext, 234, SparkSqlParser.RULE_functionTableReferenceArgument); + this.enterRule(localContext, 188, SparkSqlParser.RULE_functionTableReferenceArgument); try { - this.state = 2876; + this.state = 2736; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_TABLE: this.enterOuterAlt(localContext, 1); { - this.state = 2874; + this.state = 2734; this.functionTableSubqueryArgument(); } break; @@ -12716,7 +12456,7 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.BACKQUOTED_IDENTIFIER: this.enterOuterAlt(localContext, 2); { - this.state = 2875; + this.state = 2735; this.functionTableNamedArgumentExpression(); } break; @@ -12740,22 +12480,22 @@ export class SparkSqlParser extends SQLParserBase { } public functionTableArgument(): FunctionTableArgumentContext { let localContext = new FunctionTableArgumentContext(this.context, this.state); - this.enterRule(localContext, 236, SparkSqlParser.RULE_functionTableArgument); + this.enterRule(localContext, 190, SparkSqlParser.RULE_functionTableArgument); try { - this.state = 2880; + this.state = 2740; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 371, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 376, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2878; + this.state = 2738; this.functionTableReferenceArgument(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2879; + this.state = 2739; this.functionArgument(); } break; @@ -12775,92 +12515,35 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public functionTable(): FunctionTableContext { - let localContext = new FunctionTableContext(this.context, this.state); - this.enterRule(localContext, 238, SparkSqlParser.RULE_functionTable); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 2882; - this.functionName(); - this.state = 2883; - this.match(SparkSqlParser.LEFT_PAREN); - this.state = 2892; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967295) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 1073678415) !== 0)) { - { - this.state = 2884; - this.functionTableArgument(); - this.state = 2889; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 4) { - { - { - this.state = 2885; - this.match(SparkSqlParser.COMMA); - this.state = 2886; - this.functionTableArgument(); - } - } - this.state = 2891; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - - this.state = 2894; - this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 2895; - this.tableAlias(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public tableAlias(): TableAliasContext { let localContext = new TableAliasContext(this.context, this.state); - this.enterRule(localContext, 240, SparkSqlParser.RULE_tableAlias); + this.enterRule(localContext, 192, SparkSqlParser.RULE_tableAlias); try { this.enterOuterAlt(localContext, 1); { - this.state = 2904; + this.state = 2749; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 376, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 379, this.context) ) { case 1: { - this.state = 2898; + this.state = 2743; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 374, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 377, this.context) ) { case 1: { - this.state = 2897; + this.state = 2742; this.match(SparkSqlParser.KW_AS); } break; } - this.state = 2900; - this.strictIdentifier(); - this.state = 2902; + this.state = 2745; + localContext._alias = this.strictIdentifier(); + this.state = 2747; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 375, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 378, this.context) ) { case 1: { - this.state = 2901; + this.state = 2746; this.identifierList(); } break; @@ -12886,32 +12569,32 @@ export class SparkSqlParser extends SQLParserBase { } public rowFormat(): RowFormatContext { let localContext = new RowFormatContext(this.context, this.state); - this.enterRule(localContext, 242, SparkSqlParser.RULE_rowFormat); + this.enterRule(localContext, 194, SparkSqlParser.RULE_rowFormat); try { - this.state = 2955; + this.state = 2800; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 384, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 387, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 2906; + this.state = 2751; this.match(SparkSqlParser.KW_ROW); - this.state = 2907; + this.state = 2752; this.match(SparkSqlParser.KW_FORMAT); - this.state = 2908; + this.state = 2753; this.match(SparkSqlParser.KW_SERDE); - this.state = 2909; + this.state = 2754; localContext._name = this.stringLit(); - this.state = 2913; + this.state = 2758; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 377, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 380, this.context) ) { case 1: { - this.state = 2910; + this.state = 2755; this.match(SparkSqlParser.KW_WITH); - this.state = 2911; + this.state = 2756; this.match(SparkSqlParser.KW_SERDEPROPERTIES); - this.state = 2912; + this.state = 2757; localContext._props = this.propertyList(); } break; @@ -12921,35 +12604,35 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 2915; + this.state = 2760; this.match(SparkSqlParser.KW_ROW); - this.state = 2916; + this.state = 2761; this.match(SparkSqlParser.KW_FORMAT); - this.state = 2917; + this.state = 2762; this.match(SparkSqlParser.KW_DELIMITED); - this.state = 2927; + this.state = 2772; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 379, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 382, this.context) ) { case 1: { - this.state = 2918; + this.state = 2763; this.match(SparkSqlParser.KW_FIELDS); - this.state = 2919; + this.state = 2764; this.match(SparkSqlParser.KW_TERMINATED); - this.state = 2920; + this.state = 2765; this.match(SparkSqlParser.KW_BY); - this.state = 2921; + this.state = 2766; localContext._fieldsTerminatedBy = this.stringLit(); - this.state = 2925; + this.state = 2770; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 378, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 381, this.context) ) { case 1: { - this.state = 2922; + this.state = 2767; this.match(SparkSqlParser.KW_ESCAPED); - this.state = 2923; + this.state = 2768; this.match(SparkSqlParser.KW_BY); - this.state = 2924; + this.state = 2769; localContext._escapedBy = this.stringLit(); } break; @@ -12957,70 +12640,70 @@ export class SparkSqlParser extends SQLParserBase { } break; } - this.state = 2934; + this.state = 2779; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 380, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 383, this.context) ) { case 1: { - this.state = 2929; + this.state = 2774; this.match(SparkSqlParser.KW_COLLECTION); - this.state = 2930; + this.state = 2775; this.match(SparkSqlParser.KW_ITEMS); - this.state = 2931; + this.state = 2776; this.match(SparkSqlParser.KW_TERMINATED); - this.state = 2932; + this.state = 2777; this.match(SparkSqlParser.KW_BY); - this.state = 2933; + this.state = 2778; localContext._collectionItemsTerminatedBy = this.stringLit(); } break; } - this.state = 2941; + this.state = 2786; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 381, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 384, this.context) ) { case 1: { - this.state = 2936; + this.state = 2781; this.match(SparkSqlParser.KW_MAP); - this.state = 2937; + this.state = 2782; this.match(SparkSqlParser.KW_KEYS); - this.state = 2938; + this.state = 2783; this.match(SparkSqlParser.KW_TERMINATED); - this.state = 2939; + this.state = 2784; this.match(SparkSqlParser.KW_BY); - this.state = 2940; + this.state = 2785; localContext._keysTerminatedBy = this.stringLit(); } break; } - this.state = 2947; + this.state = 2792; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 382, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 385, this.context) ) { case 1: { - this.state = 2943; + this.state = 2788; this.match(SparkSqlParser.KW_LINES); - this.state = 2944; + this.state = 2789; this.match(SparkSqlParser.KW_TERMINATED); - this.state = 2945; + this.state = 2790; this.match(SparkSqlParser.KW_BY); - this.state = 2946; + this.state = 2791; localContext._linesSeparatedBy = this.stringLit(); } break; } - this.state = 2953; + this.state = 2798; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 383, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 386, this.context) ) { case 1: { - this.state = 2949; + this.state = 2794; this.match(SparkSqlParser.KW_NULL); - this.state = 2950; + this.state = 2795; this.match(SparkSqlParser.KW_DEFINED); - this.state = 2951; + this.state = 2796; this.match(SparkSqlParser.KW_AS); - this.state = 2952; + this.state = 2797; localContext._nullDefinedAs = this.stringLit(); } break; @@ -13045,26 +12728,26 @@ export class SparkSqlParser extends SQLParserBase { } public multipartIdentifierList(): MultipartIdentifierListContext { let localContext = new MultipartIdentifierListContext(this.context, this.state); - this.enterRule(localContext, 244, SparkSqlParser.RULE_multipartIdentifierList); + this.enterRule(localContext, 196, SparkSqlParser.RULE_multipartIdentifierList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2957; + this.state = 2802; this.multipartIdentifier(); - this.state = 2962; + this.state = 2807; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2958; + this.state = 2803; this.match(SparkSqlParser.COMMA); - this.state = 2959; + this.state = 2804; this.multipartIdentifier(); } } - this.state = 2964; + this.state = 2809; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -13086,32 +12769,32 @@ export class SparkSqlParser extends SQLParserBase { } public multipartIdentifier(): MultipartIdentifierContext { let localContext = new MultipartIdentifierContext(this.context, this.state); - this.enterRule(localContext, 246, SparkSqlParser.RULE_multipartIdentifier); + this.enterRule(localContext, 198, SparkSqlParser.RULE_multipartIdentifier); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 2965; + this.state = 2810; localContext._errorCapturingIdentifier = this.errorCapturingIdentifier(); localContext._parts.push(localContext._errorCapturingIdentifier); - this.state = 2970; + this.state = 2815; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 386, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 389, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 2966; + this.state = 2811; this.match(SparkSqlParser.DOT); - this.state = 2967; + this.state = 2812; localContext._errorCapturingIdentifier = this.errorCapturingIdentifier(); localContext._parts.push(localContext._errorCapturingIdentifier); } } } - this.state = 2972; + this.state = 2817; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 386, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 389, this.context); } } } @@ -13131,26 +12814,26 @@ export class SparkSqlParser extends SQLParserBase { } public multipartIdentifierPropertyList(): MultipartIdentifierPropertyListContext { let localContext = new MultipartIdentifierPropertyListContext(this.context, this.state); - this.enterRule(localContext, 248, SparkSqlParser.RULE_multipartIdentifierPropertyList); + this.enterRule(localContext, 200, SparkSqlParser.RULE_multipartIdentifierPropertyList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2973; + this.state = 2818; this.multipartIdentifierProperty(); - this.state = 2978; + this.state = 2823; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 2974; + this.state = 2819; this.match(SparkSqlParser.COMMA); - this.state = 2975; + this.state = 2820; this.multipartIdentifierProperty(); } } - this.state = 2980; + this.state = 2825; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -13172,21 +12855,21 @@ export class SparkSqlParser extends SQLParserBase { } public multipartIdentifierProperty(): MultipartIdentifierPropertyContext { let localContext = new MultipartIdentifierPropertyContext(this.context, this.state); - this.enterRule(localContext, 250, SparkSqlParser.RULE_multipartIdentifierProperty); + this.enterRule(localContext, 202, SparkSqlParser.RULE_multipartIdentifierProperty); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 2981; + this.state = 2826; this.multipartIdentifier(); - this.state = 2984; + this.state = 2829; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 207) { { - this.state = 2982; + this.state = 2827; this.match(SparkSqlParser.KW_OPTIONS); - this.state = 2983; + this.state = 2828; localContext._options = this.propertyList(); } } @@ -13209,23 +12892,23 @@ export class SparkSqlParser extends SQLParserBase { } public tableIdentifier(): TableIdentifierContext { let localContext = new TableIdentifierContext(this.context, this.state); - this.enterRule(localContext, 252, SparkSqlParser.RULE_tableIdentifier); + this.enterRule(localContext, 204, SparkSqlParser.RULE_tableIdentifier); try { this.enterOuterAlt(localContext, 1); { - this.state = 2989; + this.state = 2834; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 389, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 392, this.context) ) { case 1: { - this.state = 2986; + this.state = 2831; localContext._db = this.errorCapturingIdentifier(); - this.state = 2987; + this.state = 2832; this.match(SparkSqlParser.DOT); } break; } - this.state = 2991; + this.state = 2836; localContext._table = this.errorCapturingIdentifier(); } } @@ -13245,23 +12928,23 @@ export class SparkSqlParser extends SQLParserBase { } public viewIdentifier(): ViewIdentifierContext { let localContext = new ViewIdentifierContext(this.context, this.state); - this.enterRule(localContext, 254, SparkSqlParser.RULE_viewIdentifier); + this.enterRule(localContext, 206, SparkSqlParser.RULE_viewIdentifier); try { this.enterOuterAlt(localContext, 1); { - this.state = 2996; + this.state = 2841; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 390, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 393, this.context) ) { case 1: { - this.state = 2993; + this.state = 2838; localContext._db = this.errorCapturingIdentifier(); - this.state = 2994; + this.state = 2839; this.match(SparkSqlParser.DOT); } break; } - this.state = 2998; + this.state = 2843; localContext._view = this.errorCapturingIdentifier(); } } @@ -13281,42 +12964,42 @@ export class SparkSqlParser extends SQLParserBase { } public namedExpression(): NamedExpressionContext { let localContext = new NamedExpressionContext(this.context, this.state); - this.enterRule(localContext, 256, SparkSqlParser.RULE_namedExpression); + this.enterRule(localContext, 208, SparkSqlParser.RULE_namedExpression); try { this.enterOuterAlt(localContext, 1); { - this.state = 3002; + this.state = 2847; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 391, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 394, this.context) ) { case 1: { - this.state = 3000; + this.state = 2845; this.columnName(); } break; case 2: { - this.state = 3001; + this.state = 2846; this.expression(); } break; } - this.state = 3011; + this.state = 2856; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 394, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 397, this.context) ) { case 1: { - this.state = 3005; + this.state = 2850; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 392, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 395, this.context) ) { case 1: { - this.state = 3004; + this.state = 2849; this.match(SparkSqlParser.KW_AS); } break; } - this.state = 3009; + this.state = 2854; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_ADD: @@ -13663,13 +13346,13 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.IDENTIFIER: case SparkSqlParser.BACKQUOTED_IDENTIFIER: { - this.state = 3007; + this.state = 2852; localContext._name = this.errorCapturingIdentifier(); } break; case SparkSqlParser.LEFT_PAREN: { - this.state = 3008; + this.state = 2853; this.identifierList(); } break; @@ -13697,30 +13380,30 @@ export class SparkSqlParser extends SQLParserBase { } public namedExpressionSeq(): NamedExpressionSeqContext { let localContext = new NamedExpressionSeqContext(this.context, this.state); - this.enterRule(localContext, 258, SparkSqlParser.RULE_namedExpressionSeq); + this.enterRule(localContext, 210, SparkSqlParser.RULE_namedExpressionSeq); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3013; + this.state = 2858; this.namedExpression(); - this.state = 3018; + this.state = 2863; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 395, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 398, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 3014; + this.state = 2859; this.match(SparkSqlParser.COMMA); - this.state = 3015; + this.state = 2860; this.namedExpression(); } } } - this.state = 3020; + this.state = 2865; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 395, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 398, this.context); } } } @@ -13740,34 +13423,34 @@ export class SparkSqlParser extends SQLParserBase { } public partitionFieldList(): PartitionFieldListContext { let localContext = new PartitionFieldListContext(this.context, this.state); - this.enterRule(localContext, 260, SparkSqlParser.RULE_partitionFieldList); + this.enterRule(localContext, 212, SparkSqlParser.RULE_partitionFieldList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3021; + this.state = 2866; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3022; + this.state = 2867; localContext._partitionField = this.partitionField(); localContext._fields.push(localContext._partitionField); - this.state = 3027; + this.state = 2872; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3023; + this.state = 2868; this.match(SparkSqlParser.COMMA); - this.state = 3024; + this.state = 2869; localContext._partitionField = this.partitionField(); localContext._fields.push(localContext._partitionField); } } - this.state = 3029; + this.state = 2874; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 3030; + this.state = 2875; this.match(SparkSqlParser.RIGHT_PAREN); } } @@ -13787,23 +13470,23 @@ export class SparkSqlParser extends SQLParserBase { } public partitionField(): PartitionFieldContext { let localContext = new PartitionFieldContext(this.context, this.state); - this.enterRule(localContext, 262, SparkSqlParser.RULE_partitionField); + this.enterRule(localContext, 214, SparkSqlParser.RULE_partitionField); try { - this.state = 3034; + this.state = 2879; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 397, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 400, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3032; + this.state = 2877; this.transform(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3033; - this.colType(); + this.state = 2878; + this.columnType(); } break; } @@ -13824,45 +13507,45 @@ export class SparkSqlParser extends SQLParserBase { } public transform(): TransformContext { let localContext = new TransformContext(this.context, this.state); - this.enterRule(localContext, 264, SparkSqlParser.RULE_transform); + this.enterRule(localContext, 216, SparkSqlParser.RULE_transform); let _la: number; try { - this.state = 3049; + this.state = 2894; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 399, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 402, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3036; + this.state = 2881; this.qualifiedName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3037; + this.state = 2882; localContext._transformName = this.identifier(); - this.state = 3038; + this.state = 2883; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3039; + this.state = 2884; this.transformArgument(); - this.state = 3044; + this.state = 2889; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3040; + this.state = 2885; this.match(SparkSqlParser.COMMA); - this.state = 3041; + this.state = 2886; this.transformArgument(); } } - this.state = 3046; + this.state = 2891; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 3047; + this.state = 2892; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -13884,22 +13567,22 @@ export class SparkSqlParser extends SQLParserBase { } public transformArgument(): TransformArgumentContext { let localContext = new TransformArgumentContext(this.context, this.state); - this.enterRule(localContext, 266, SparkSqlParser.RULE_transformArgument); + this.enterRule(localContext, 218, SparkSqlParser.RULE_transformArgument); try { - this.state = 3053; + this.state = 2898; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 400, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 403, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3051; + this.state = 2896; this.qualifiedName(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3052; + this.state = 2897; this.constant(); } break; @@ -13921,11 +13604,11 @@ export class SparkSqlParser extends SQLParserBase { } public expression(): ExpressionContext { let localContext = new ExpressionContext(this.context, this.state); - this.enterRule(localContext, 268, SparkSqlParser.RULE_expression); + this.enterRule(localContext, 220, SparkSqlParser.RULE_expression); try { this.enterOuterAlt(localContext, 1); { - this.state = 3055; + this.state = 2900; this.booleanExpression(0); } } @@ -13945,15 +13628,15 @@ export class SparkSqlParser extends SQLParserBase { } public namedArgumentExpression(): NamedArgumentExpressionContext { let localContext = new NamedArgumentExpressionContext(this.context, this.state); - this.enterRule(localContext, 270, SparkSqlParser.RULE_namedArgumentExpression); + this.enterRule(localContext, 222, SparkSqlParser.RULE_namedArgumentExpression); try { this.enterOuterAlt(localContext, 1); { - this.state = 3057; + this.state = 2902; localContext._key = this.identifier(); - this.state = 3058; + this.state = 2903; this.match(SparkSqlParser.FAT_ARROW); - this.state = 3059; + this.state = 2904; localContext._value = this.expression(); } } @@ -13973,22 +13656,22 @@ export class SparkSqlParser extends SQLParserBase { } public functionArgument(): FunctionArgumentContext { let localContext = new FunctionArgumentContext(this.context, this.state); - this.enterRule(localContext, 272, SparkSqlParser.RULE_functionArgument); + this.enterRule(localContext, 224, SparkSqlParser.RULE_functionArgument); try { - this.state = 3063; + this.state = 2908; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 401, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 404, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3061; + this.state = 2906; this.expression(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3062; + this.state = 2907; this.namedArgumentExpression(); } break; @@ -14010,26 +13693,26 @@ export class SparkSqlParser extends SQLParserBase { } public expressionSeq(): ExpressionSeqContext { let localContext = new ExpressionSeqContext(this.context, this.state); - this.enterRule(localContext, 274, SparkSqlParser.RULE_expressionSeq); + this.enterRule(localContext, 226, SparkSqlParser.RULE_expressionSeq); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3065; + this.state = 2910; this.expression(); - this.state = 3070; + this.state = 2915; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3066; + this.state = 2911; this.match(SparkSqlParser.COMMA); - this.state = 3067; + this.state = 2912; this.expression(); } } - this.state = 3072; + this.state = 2917; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -14061,19 +13744,19 @@ export class SparkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new BooleanExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 276; - this.enterRecursionRule(localContext, 276, SparkSqlParser.RULE_booleanExpression, _p); + let _startState = 228; + this.enterRecursionRule(localContext, 228, SparkSqlParser.RULE_booleanExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3085; + this.state = 2930; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 404, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 407, this.context) ) { case 1: { - this.state = 3074; + this.state = 2919; _la = this.tokenStream.LA(1); if(!(_la === 197 || _la === 360)) { this.errorHandler.recoverInline(this); @@ -14082,32 +13765,32 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3075; + this.state = 2920; this.booleanExpression(5); } break; case 2: { - this.state = 3076; + this.state = 2921; this.match(SparkSqlParser.KW_EXISTS); - this.state = 3077; + this.state = 2922; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3078; + this.state = 2923; this.query(); - this.state = 3079; + this.state = 2924; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 3: { - this.state = 3081; + this.state = 2926; this.valueExpression(0); - this.state = 3083; + this.state = 2928; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 403, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 406, this.context) ) { case 1: { - this.state = 3082; + this.state = 2927; this.predicate(); } break; @@ -14116,9 +13799,9 @@ export class SparkSqlParser extends SQLParserBase { break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 3095; + this.state = 2940; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 406, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 409, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -14126,21 +13809,21 @@ export class SparkSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 3093; + this.state = 2938; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 405, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 408, this.context) ) { case 1: { localContext = new BooleanExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_booleanExpression); - this.state = 3087; + this.state = 2932; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 3088; + this.state = 2933; localContext._operator = this.match(SparkSqlParser.KW_AND); - this.state = 3089; + this.state = 2934; localContext._right = this.booleanExpression(3); } break; @@ -14149,22 +13832,22 @@ export class SparkSqlParser extends SQLParserBase { localContext = new BooleanExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_booleanExpression); - this.state = 3090; + this.state = 2935; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 3091; + this.state = 2936; localContext._operator = this.match(SparkSqlParser.KW_OR); - this.state = 3092; + this.state = 2937; localContext._right = this.booleanExpression(2); } break; } } } - this.state = 3097; + this.state = 2942; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 406, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 409, this.context); } } } @@ -14184,111 +13867,111 @@ export class SparkSqlParser extends SQLParserBase { } public predicate(): PredicateContext { let localContext = new PredicateContext(this.context, this.state); - this.enterRule(localContext, 278, SparkSqlParser.RULE_predicate); + this.enterRule(localContext, 230, SparkSqlParser.RULE_predicate); let _la: number; try { - this.state = 3180; + this.state = 3025; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 420, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 423, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3099; + this.state = 2944; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3098; + this.state = 2943; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3101; + this.state = 2946; localContext._kind = this.match(SparkSqlParser.KW_BETWEEN); - this.state = 3102; + this.state = 2947; localContext._lower = this.valueExpression(0); - this.state = 3103; + this.state = 2948; this.match(SparkSqlParser.KW_AND); - this.state = 3104; + this.state = 2949; localContext._upper = this.valueExpression(0); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3107; + this.state = 2952; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3106; + this.state = 2951; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3109; + this.state = 2954; localContext._kind = this.match(SparkSqlParser.KW_IN); - this.state = 3110; + this.state = 2955; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3111; + this.state = 2956; this.expression(); - this.state = 3116; + this.state = 2961; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3112; + this.state = 2957; this.match(SparkSqlParser.COMMA); - this.state = 3113; + this.state = 2958; this.expression(); } } - this.state = 3118; + this.state = 2963; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 3119; + this.state = 2964; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3122; + this.state = 2967; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3121; + this.state = 2966; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3124; + this.state = 2969; localContext._kind = this.match(SparkSqlParser.KW_IN); - this.state = 3125; + this.state = 2970; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3126; + this.state = 2971; this.query(); - this.state = 3127; + this.state = 2972; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 3130; + this.state = 2975; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3129; + this.state = 2974; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3132; + this.state = 2977; localContext._kind = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 251 || _la === 252)) { @@ -14298,24 +13981,24 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3133; + this.state = 2978; localContext._pattern = this.valueExpression(0); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 3135; + this.state = 2980; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3134; + this.state = 2979; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3137; + this.state = 2982; localContext._kind = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 163 || _la === 164)) { @@ -14325,7 +14008,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3138; + this.state = 2983; localContext._quantifier = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 10 || _la === 16 || _la === 277)) { @@ -14335,40 +14018,40 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3152; + this.state = 2997; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 414, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 417, this.context) ) { case 1: { - this.state = 3139; + this.state = 2984; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3140; + this.state = 2985; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 2: { - this.state = 3141; + this.state = 2986; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3142; + this.state = 2987; this.expression(); - this.state = 3147; + this.state = 2992; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3143; + this.state = 2988; this.match(SparkSqlParser.COMMA); - this.state = 3144; + this.state = 2989; this.expression(); } } - this.state = 3149; + this.state = 2994; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 3150; + this.state = 2995; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -14378,17 +14061,17 @@ export class SparkSqlParser extends SQLParserBase { case 6: this.enterOuterAlt(localContext, 6); { - this.state = 3155; + this.state = 3000; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3154; + this.state = 2999; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3157; + this.state = 3002; localContext._kind = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 163 || _la === 164)) { @@ -14398,16 +14081,16 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3158; + this.state = 3003; localContext._pattern = this.valueExpression(0); - this.state = 3161; + this.state = 3006; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 416, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 419, this.context) ) { case 1: { - this.state = 3159; + this.state = 3004; this.match(SparkSqlParser.KW_ESCAPE); - this.state = 3160; + this.state = 3005; localContext._escapeChar = this.stringLit(); } break; @@ -14417,38 +14100,38 @@ export class SparkSqlParser extends SQLParserBase { case 7: this.enterOuterAlt(localContext, 7); { - this.state = 3163; + this.state = 3008; this.match(SparkSqlParser.KW_IS); - this.state = 3165; + this.state = 3010; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3164; + this.state = 3009; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3167; + this.state = 3012; localContext._kind = this.match(SparkSqlParser.KW_NULL); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 3168; + this.state = 3013; this.match(SparkSqlParser.KW_IS); - this.state = 3170; + this.state = 3015; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3169; + this.state = 3014; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3172; + this.state = 3017; localContext._kind = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 111 || _la === 316 || _la === 325)) { @@ -14463,23 +14146,23 @@ export class SparkSqlParser extends SQLParserBase { case 9: this.enterOuterAlt(localContext, 9); { - this.state = 3173; + this.state = 3018; this.match(SparkSqlParser.KW_IS); - this.state = 3175; + this.state = 3020; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3174; + this.state = 3019; this.match(SparkSqlParser.KW_NOT); } } - this.state = 3177; + this.state = 3022; localContext._kind = this.match(SparkSqlParser.KW_DISTINCT); - this.state = 3178; + this.state = 3023; this.match(SparkSqlParser.KW_FROM); - this.state = 3179; + this.state = 3024; localContext._right = this.valueExpression(0); } break; @@ -14511,25 +14194,25 @@ export class SparkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new ValueExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 280; - this.enterRecursionRule(localContext, 280, SparkSqlParser.RULE_valueExpression, _p); + let _startState = 232; + this.enterRecursionRule(localContext, 232, SparkSqlParser.RULE_valueExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3186; + this.state = 3031; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 421, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 424, this.context) ) { case 1: { - this.state = 3183; + this.state = 3028; this.primaryExpression(0); } break; case 2: { - this.state = 3184; + this.state = 3029; localContext._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 361)) & ~0x1F) === 0 && ((1 << (_la - 361)) & 35) !== 0))) { @@ -14539,15 +14222,15 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3185; + this.state = 3030; this.valueExpression(7); } break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 3209; + this.state = 3054; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 423, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 426, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -14555,19 +14238,19 @@ export class SparkSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 3207; + this.state = 3052; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 422, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 425, this.context) ) { case 1: { localContext = new ValueExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 3188; + this.state = 3033; if (!(this.precpred(this.context, 6))) { throw this.createFailedPredicateException("this.precpred(this.context, 6)"); } - this.state = 3189; + this.state = 3034; localContext._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 94 || ((((_la - 363)) & ~0x1F) === 0 && ((1 << (_la - 363)) & 7) !== 0))) { @@ -14577,7 +14260,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3190; + this.state = 3035; localContext._right = this.valueExpression(7); } break; @@ -14586,11 +14269,11 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ValueExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 3191; + this.state = 3036; if (!(this.precpred(this.context, 5))) { throw this.createFailedPredicateException("this.precpred(this.context, 5)"); } - this.state = 3192; + this.state = 3037; localContext._operator = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 361)) & ~0x1F) === 0 && ((1 << (_la - 361)) & 259) !== 0))) { @@ -14600,7 +14283,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3193; + this.state = 3038; localContext._right = this.valueExpression(6); } break; @@ -14609,13 +14292,13 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ValueExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 3194; + this.state = 3039; if (!(this.precpred(this.context, 4))) { throw this.createFailedPredicateException("this.precpred(this.context, 4)"); } - this.state = 3195; + this.state = 3040; localContext._operator = this.match(SparkSqlParser.AMPERSAND); - this.state = 3196; + this.state = 3041; localContext._right = this.valueExpression(5); } break; @@ -14624,13 +14307,13 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ValueExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 3197; + this.state = 3042; if (!(this.precpred(this.context, 3))) { throw this.createFailedPredicateException("this.precpred(this.context, 3)"); } - this.state = 3198; + this.state = 3043; localContext._operator = this.match(SparkSqlParser.HAT); - this.state = 3199; + this.state = 3044; localContext._right = this.valueExpression(4); } break; @@ -14639,13 +14322,13 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ValueExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 3200; + this.state = 3045; if (!(this.precpred(this.context, 2))) { throw this.createFailedPredicateException("this.precpred(this.context, 2)"); } - this.state = 3201; + this.state = 3046; localContext._operator = this.match(SparkSqlParser.PIPE); - this.state = 3202; + this.state = 3047; localContext._right = this.valueExpression(3); } break; @@ -14654,22 +14337,22 @@ export class SparkSqlParser extends SQLParserBase { localContext = new ValueExpressionContext(parentContext, parentState); localContext._left = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 3203; + this.state = 3048; if (!(this.precpred(this.context, 1))) { throw this.createFailedPredicateException("this.precpred(this.context, 1)"); } - this.state = 3204; + this.state = 3049; this.comparisonOperator(); - this.state = 3205; + this.state = 3050; localContext._right = this.valueExpression(2); } break; } } } - this.state = 3211; + this.state = 3056; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 423, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 426, this.context); } } } @@ -14689,12 +14372,12 @@ export class SparkSqlParser extends SQLParserBase { } public datetimeUnit(): DatetimeUnitContext { let localContext = new DatetimeUnitContext(this.context, this.state); - this.enterRule(localContext, 282, SparkSqlParser.RULE_datetimeUnit); + this.enterRule(localContext, 234, SparkSqlParser.RULE_datetimeUnit); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3212; + this.state = 3057; _la = this.tokenStream.LA(1); if(!(_la === 67 || _la === 69 || _la === 134 || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 85) !== 0) || _la === 231 || _la === 259 || _la === 341 || _la === 348)) { this.errorHandler.recoverInline(this); @@ -14731,19 +14414,19 @@ export class SparkSqlParser extends SQLParserBase { let parentState = this.state; let localContext = new PrimaryExpressionContext(this.context, parentState); let previousContext = localContext; - let _startState = 284; - this.enterRecursionRule(localContext, 284, SparkSqlParser.RULE_primaryExpression, _p); + let _startState = 236; + this.enterRecursionRule(localContext, 236, SparkSqlParser.RULE_primaryExpression, _p); let _la: number; try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3463; + this.state = 3308; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 449, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 452, this.context) ) { case 1: { - this.state = 3215; + this.state = 3060; localContext._name = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(((((_la - 63)) & ~0x1F) === 0 && ((1 << (_la - 63)) & 13) !== 0) || _la === 268 || _la === 331)) { @@ -14757,7 +14440,7 @@ export class SparkSqlParser extends SQLParserBase { break; case 2: { - this.state = 3216; + this.state = 3061; localContext._name = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 74 || _la === 75 || _la === 306)) { @@ -14767,9 +14450,9 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3217; + this.state = 3062; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3220; + this.state = 3065; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_DAY: @@ -14784,35 +14467,35 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_WEEK: case SparkSqlParser.KW_YEAR: { - this.state = 3218; + this.state = 3063; localContext._unit = this.datetimeUnit(); } break; case SparkSqlParser.STRING_LITERAL: case SparkSqlParser.DOUBLEQUOTED_STRING: { - this.state = 3219; + this.state = 3064; localContext._invalidUnit = this.stringLit(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 3222; + this.state = 3067; this.match(SparkSqlParser.COMMA); - this.state = 3223; + this.state = 3068; localContext._unitsAmount = this.valueExpression(0); - this.state = 3224; + this.state = 3069; this.match(SparkSqlParser.COMMA); - this.state = 3225; + this.state = 3070; localContext._timestamp = this.valueExpression(0); - this.state = 3226; + this.state = 3071; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 3: { - this.state = 3228; + this.state = 3073; localContext._name = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 76 || _la === 77 || _la === 302 || _la === 307)) { @@ -14822,9 +14505,9 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3229; + this.state = 3074; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3232; + this.state = 3077; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_DAY: @@ -14839,105 +14522,105 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_WEEK: case SparkSqlParser.KW_YEAR: { - this.state = 3230; + this.state = 3075; localContext._unit = this.datetimeUnit(); } break; case SparkSqlParser.STRING_LITERAL: case SparkSqlParser.DOUBLEQUOTED_STRING: { - this.state = 3231; + this.state = 3076; localContext._invalidUnit = this.stringLit(); } break; default: throw new antlr.NoViableAltException(this); } - this.state = 3234; + this.state = 3079; this.match(SparkSqlParser.COMMA); - this.state = 3235; + this.state = 3080; localContext._startTimestamp = this.valueExpression(0); - this.state = 3236; + this.state = 3081; this.match(SparkSqlParser.COMMA); - this.state = 3237; + this.state = 3082; localContext._endTimestamp = this.valueExpression(0); - this.state = 3238; + this.state = 3083; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 4: { - this.state = 3240; + this.state = 3085; this.match(SparkSqlParser.KW_CASE); - this.state = 3242; + this.state = 3087; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 3241; + this.state = 3086; this.whenClause(); } } - this.state = 3244; + this.state = 3089; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 343); - this.state = 3248; + this.state = 3093; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 3246; + this.state = 3091; this.match(SparkSqlParser.KW_ELSE); - this.state = 3247; + this.state = 3092; localContext._elseExpression = this.expression(); } } - this.state = 3250; + this.state = 3095; this.match(SparkSqlParser.KW_END); } break; case 5: { - this.state = 3252; + this.state = 3097; this.match(SparkSqlParser.KW_CASE); - this.state = 3253; + this.state = 3098; this.expression(); - this.state = 3255; + this.state = 3100; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 3254; + this.state = 3099; this.whenClause(); } } - this.state = 3257; + this.state = 3102; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 343); - this.state = 3261; + this.state = 3106; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 97) { { - this.state = 3259; + this.state = 3104; this.match(SparkSqlParser.KW_ELSE); - this.state = 3260; + this.state = 3105; localContext._elseExpression = this.expression(); } } - this.state = 3263; + this.state = 3108; this.match(SparkSqlParser.KW_END); } break; case 6: { - this.state = 3265; + this.state = 3110; localContext._name = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 36 || _la === 318)) { @@ -14947,280 +14630,280 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3266; + this.state = 3111; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3267; + this.state = 3112; this.expression(); - this.state = 3268; + this.state = 3113; this.match(SparkSqlParser.KW_AS); - this.state = 3269; + this.state = 3114; this.dataType(); - this.state = 3270; + this.state = 3115; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 7: { - this.state = 3272; + this.state = 3117; this.match(SparkSqlParser.KW_STRUCT); - this.state = 3273; + this.state = 3118; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3282; + this.state = 3127; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 431, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 434, this.context) ) { case 1: { - this.state = 3274; + this.state = 3119; this.namedExpression(); - this.state = 3279; + this.state = 3124; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3275; + this.state = 3120; this.match(SparkSqlParser.COMMA); - this.state = 3276; + this.state = 3121; this.namedExpression(); } } - this.state = 3281; + this.state = 3126; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } break; } - this.state = 3284; + this.state = 3129; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 8: { - this.state = 3285; + this.state = 3130; this.match(SparkSqlParser.KW_FIRST); - this.state = 3286; + this.state = 3131; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3287; + this.state = 3132; this.expression(); - this.state = 3290; + this.state = 3135; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 138) { { - this.state = 3288; + this.state = 3133; this.match(SparkSqlParser.KW_IGNORE); - this.state = 3289; + this.state = 3134; this.match(SparkSqlParser.KW_NULLS); } } - this.state = 3292; + this.state = 3137; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 9: { - this.state = 3294; + this.state = 3139; this.match(SparkSqlParser.KW_ANY_VALUE); - this.state = 3295; + this.state = 3140; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3296; + this.state = 3141; this.expression(); - this.state = 3299; + this.state = 3144; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 138) { { - this.state = 3297; + this.state = 3142; this.match(SparkSqlParser.KW_IGNORE); - this.state = 3298; + this.state = 3143; this.match(SparkSqlParser.KW_NULLS); } } - this.state = 3301; + this.state = 3146; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 10: { - this.state = 3303; + this.state = 3148; this.match(SparkSqlParser.KW_LAST); - this.state = 3304; + this.state = 3149; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3305; + this.state = 3150; this.expression(); - this.state = 3308; + this.state = 3153; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 138) { { - this.state = 3306; + this.state = 3151; this.match(SparkSqlParser.KW_IGNORE); - this.state = 3307; + this.state = 3152; this.match(SparkSqlParser.KW_NULLS); } } - this.state = 3310; + this.state = 3155; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 11: { - this.state = 3312; + this.state = 3157; this.match(SparkSqlParser.KW_POSITION); - this.state = 3313; + this.state = 3158; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3314; + this.state = 3159; localContext._substr = this.valueExpression(0); - this.state = 3315; + this.state = 3160; this.match(SparkSqlParser.KW_IN); - this.state = 3316; + this.state = 3161; localContext._str = this.valueExpression(0); - this.state = 3317; + this.state = 3162; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 12: { - this.state = 3319; + this.state = 3164; this.constant(); } break; case 13: { - this.state = 3320; + this.state = 3165; this.match(SparkSqlParser.ASTERISK); } break; case 14: { - this.state = 3321; + this.state = 3166; this.qualifiedName(); - this.state = 3322; + this.state = 3167; this.match(SparkSqlParser.DOT); - this.state = 3323; + this.state = 3168; this.match(SparkSqlParser.ASTERISK); } break; case 15: { - this.state = 3325; + this.state = 3170; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3326; + this.state = 3171; this.namedExpression(); - this.state = 3329; + this.state = 3174; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 3327; + this.state = 3172; this.match(SparkSqlParser.COMMA); - this.state = 3328; + this.state = 3173; this.namedExpression(); } } - this.state = 3331; + this.state = 3176; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 4); - this.state = 3333; + this.state = 3178; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 16: { - this.state = 3335; + this.state = 3180; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3336; + this.state = 3181; this.query(); - this.state = 3337; + this.state = 3182; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 17: { - this.state = 3339; + this.state = 3184; this.match(SparkSqlParser.KW_IDENTIFIER); - this.state = 3340; + this.state = 3185; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3341; + this.state = 3186; this.expression(); - this.state = 3342; + this.state = 3187; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 18: { - this.state = 3344; + this.state = 3189; this.functionName(); - this.state = 3345; + this.state = 3190; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3357; + this.state = 3202; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 360)) & ~0x1F) === 0 && ((1 << (_la - 360)) & 1073678415) !== 0)) { { - this.state = 3347; + this.state = 3192; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 436, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 439, this.context) ) { case 1: { - this.state = 3346; + this.state = 3191; this.setQuantifier(); } break; } - this.state = 3349; + this.state = 3194; this.functionArgument(); - this.state = 3354; + this.state = 3199; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3350; + this.state = 3195; this.match(SparkSqlParser.COMMA); - this.state = 3351; + this.state = 3196; this.functionArgument(); } } - this.state = 3356; + this.state = 3201; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 3359; + this.state = 3204; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 3366; + this.state = 3211; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 439, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 442, this.context) ) { case 1: { - this.state = 3360; + this.state = 3205; this.match(SparkSqlParser.KW_FILTER); - this.state = 3361; + this.state = 3206; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3362; + this.state = 3207; this.match(SparkSqlParser.KW_WHERE); - this.state = 3363; + this.state = 3208; localContext._where = this.booleanExpression(0); - this.state = 3364; + this.state = 3209; this.match(SparkSqlParser.RIGHT_PAREN); } break; } - this.state = 3370; + this.state = 3215; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 440, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 443, this.context) ) { case 1: { - this.state = 3368; + this.state = 3213; localContext._nullsOption = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 138 || _la === 246)) { @@ -15230,19 +14913,19 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3369; + this.state = 3214; this.match(SparkSqlParser.KW_NULLS); } break; } - this.state = 3374; + this.state = 3219; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 441, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 444, this.context) ) { case 1: { - this.state = 3372; + this.state = 3217; this.match(SparkSqlParser.KW_OVER); - this.state = 3373; + this.state = 3218; this.windowSpec(); } break; @@ -15251,79 +14934,79 @@ export class SparkSqlParser extends SQLParserBase { break; case 19: { - this.state = 3376; + this.state = 3221; this.identifier(); - this.state = 3377; + this.state = 3222; this.match(SparkSqlParser.ARROW); - this.state = 3378; + this.state = 3223; this.expression(); } break; case 20: { - this.state = 3380; + this.state = 3225; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3381; + this.state = 3226; this.identifier(); - this.state = 3384; + this.state = 3229; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); do { { { - this.state = 3382; + this.state = 3227; this.match(SparkSqlParser.COMMA); - this.state = 3383; + this.state = 3228; this.identifier(); } } - this.state = 3386; + this.state = 3231; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } while (_la === 4); - this.state = 3388; + this.state = 3233; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 3389; + this.state = 3234; this.match(SparkSqlParser.ARROW); - this.state = 3390; + this.state = 3235; this.expression(); } break; case 21: { - this.state = 3392; + this.state = 3237; this.identifier(); } break; case 22: { - this.state = 3393; + this.state = 3238; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3394; + this.state = 3239; this.expression(); - this.state = 3395; + this.state = 3240; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 23: { - this.state = 3397; + this.state = 3242; this.match(SparkSqlParser.KW_EXTRACT); - this.state = 3398; + this.state = 3243; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3399; + this.state = 3244; localContext._field = this.identifier(); - this.state = 3400; + this.state = 3245; this.match(SparkSqlParser.KW_FROM); - this.state = 3401; + this.state = 3246; localContext._source = this.valueExpression(0); - this.state = 3402; + this.state = 3247; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 24: { - this.state = 3404; + this.state = 3249; _la = this.tokenStream.LA(1); if(!(_la === 287 || _la === 288)) { this.errorHandler.recoverInline(this); @@ -15332,11 +15015,11 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3405; + this.state = 3250; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3406; + this.state = 3251; localContext._str = this.valueExpression(0); - this.state = 3407; + this.state = 3252; _la = this.tokenStream.LA(1); if(!(_la === 4 || _la === 123)) { this.errorHandler.recoverInline(this); @@ -15345,14 +15028,14 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3408; + this.state = 3253; localContext._pos = this.valueExpression(0); - this.state = 3411; + this.state = 3256; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 4 || _la === 119) { { - this.state = 3409; + this.state = 3254; _la = this.tokenStream.LA(1); if(!(_la === 4 || _la === 119)) { this.errorHandler.recoverInline(this); @@ -15361,27 +15044,27 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3410; + this.state = 3255; localContext._len = this.valueExpression(0); } } - this.state = 3413; + this.state = 3258; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 25: { - this.state = 3415; + this.state = 3260; this.match(SparkSqlParser.KW_TRIM); - this.state = 3416; + this.state = 3261; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3418; + this.state = 3263; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 444, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 447, this.context) ) { case 1: { - this.state = 3417; + this.state = 3262; localContext._trimOption = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 28 || _la === 160 || _la === 311)) { @@ -15394,59 +15077,59 @@ export class SparkSqlParser extends SQLParserBase { } break; } - this.state = 3421; + this.state = 3266; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967044) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 361)) & ~0x1F) === 0 && ((1 << (_la - 361)) & 536839207) !== 0)) { { - this.state = 3420; + this.state = 3265; localContext._trimStr = this.valueExpression(0); } } - this.state = 3423; + this.state = 3268; this.match(SparkSqlParser.KW_FROM); - this.state = 3424; + this.state = 3269; localContext._srcStr = this.valueExpression(0); - this.state = 3425; + this.state = 3270; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 26: { - this.state = 3427; + this.state = 3272; this.match(SparkSqlParser.KW_OVERLAY); - this.state = 3428; + this.state = 3273; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3429; + this.state = 3274; localContext._input = this.valueExpression(0); - this.state = 3430; + this.state = 3275; this.match(SparkSqlParser.KW_PLACING); - this.state = 3431; + this.state = 3276; localContext._replace = this.valueExpression(0); - this.state = 3432; + this.state = 3277; this.match(SparkSqlParser.KW_FROM); - this.state = 3433; + this.state = 3278; localContext._position = this.valueExpression(0); - this.state = 3436; + this.state = 3281; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 119) { { - this.state = 3434; + this.state = 3279; this.match(SparkSqlParser.KW_FOR); - this.state = 3435; + this.state = 3280; localContext._length = this.valueExpression(0); } } - this.state = 3438; + this.state = 3283; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 27: { - this.state = 3440; + this.state = 3285; localContext._name = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 220 || _la === 221)) { @@ -15456,52 +15139,52 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3441; + this.state = 3286; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3442; + this.state = 3287; localContext._percentage = this.valueExpression(0); - this.state = 3443; + this.state = 3288; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 3444; + this.state = 3289; this.match(SparkSqlParser.KW_WITHIN); - this.state = 3445; + this.state = 3290; this.match(SparkSqlParser.KW_GROUP); - this.state = 3446; + this.state = 3291; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3447; + this.state = 3292; this.match(SparkSqlParser.KW_ORDER); - this.state = 3448; + this.state = 3293; this.match(SparkSqlParser.KW_BY); - this.state = 3449; + this.state = 3294; this.sortItem(); - this.state = 3450; + this.state = 3295; this.match(SparkSqlParser.RIGHT_PAREN); - this.state = 3457; + this.state = 3302; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 447, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 450, this.context) ) { case 1: { - this.state = 3451; + this.state = 3296; this.match(SparkSqlParser.KW_FILTER); - this.state = 3452; + this.state = 3297; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3453; + this.state = 3298; this.match(SparkSqlParser.KW_WHERE); - this.state = 3454; + this.state = 3299; localContext._where = this.booleanExpression(0); - this.state = 3455; + this.state = 3300; this.match(SparkSqlParser.RIGHT_PAREN); } break; } - this.state = 3461; + this.state = 3306; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 448, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 451, this.context) ) { case 1: { - this.state = 3459; + this.state = 3304; this.match(SparkSqlParser.KW_OVER); - this.state = 3460; + this.state = 3305; this.windowSpec(); } break; @@ -15510,9 +15193,9 @@ export class SparkSqlParser extends SQLParserBase { break; } this.context!.stop = this.tokenStream.LT(-1); - this.state = 3475; + this.state = 3320; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 451, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 454, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { if (this._parseListeners != null) { @@ -15520,23 +15203,23 @@ export class SparkSqlParser extends SQLParserBase { } previousContext = localContext; { - this.state = 3473; + this.state = 3318; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 450, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 453, this.context) ) { case 1: { localContext = new PrimaryExpressionContext(parentContext, parentState); localContext._value = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_primaryExpression); - this.state = 3465; + this.state = 3310; if (!(this.precpred(this.context, 9))) { throw this.createFailedPredicateException("this.precpred(this.context, 9)"); } - this.state = 3466; + this.state = 3311; this.match(SparkSqlParser.LEFT_BRACKET); - this.state = 3467; + this.state = 3312; localContext._index = this.valueExpression(0); - this.state = 3468; + this.state = 3313; this.match(SparkSqlParser.RIGHT_BRACKET); } break; @@ -15545,22 +15228,22 @@ export class SparkSqlParser extends SQLParserBase { localContext = new PrimaryExpressionContext(parentContext, parentState); localContext._base = previousContext; this.pushNewRecursionContext(localContext, _startState, SparkSqlParser.RULE_primaryExpression); - this.state = 3470; + this.state = 3315; if (!(this.precpred(this.context, 7))) { throw this.createFailedPredicateException("this.precpred(this.context, 7)"); } - this.state = 3471; + this.state = 3316; this.match(SparkSqlParser.DOT); - this.state = 3472; + this.state = 3317; localContext._fieldName = this.identifier(); } break; } } } - this.state = 3477; + this.state = 3322; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 451, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 454, this.context); } } } @@ -15580,57 +15263,57 @@ export class SparkSqlParser extends SQLParserBase { } public literalType(): LiteralTypeContext { let localContext = new LiteralTypeContext(this.context, this.state); - this.enterRule(localContext, 286, SparkSqlParser.RULE_literalType); + this.enterRule(localContext, 238, SparkSqlParser.RULE_literalType); try { - this.state = 3485; + this.state = 3330; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 452, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 455, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3478; + this.state = 3323; this.match(SparkSqlParser.KW_DATE); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3479; + this.state = 3324; this.match(SparkSqlParser.KW_TIMESTAMP); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3480; + this.state = 3325; this.match(SparkSqlParser.KW_TIMESTAMP_LTZ); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 3481; + this.state = 3326; this.match(SparkSqlParser.KW_TIMESTAMP_NTZ); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 3482; + this.state = 3327; this.match(SparkSqlParser.KW_INTERVAL); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 3483; + this.state = 3328; this.match(SparkSqlParser.KW_BINARY_HEX); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 3484; + this.state = 3329; localContext._unsupportedType = this.identifier(); } break; @@ -15652,69 +15335,69 @@ export class SparkSqlParser extends SQLParserBase { } public constant(): ConstantContext { let localContext = new ConstantContext(this.context, this.state); - this.enterRule(localContext, 288, SparkSqlParser.RULE_constant); + this.enterRule(localContext, 240, SparkSqlParser.RULE_constant); try { let alternative: number; - this.state = 3502; + this.state = 3347; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 454, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 457, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3487; + this.state = 3332; this.match(SparkSqlParser.KW_NULL); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3488; + this.state = 3333; this.match(SparkSqlParser.QUESTION); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3489; + this.state = 3334; this.match(SparkSqlParser.COLON); - this.state = 3490; + this.state = 3335; this.identifier(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 3491; + this.state = 3336; this.interval(); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 3492; + this.state = 3337; this.literalType(); - this.state = 3493; + this.state = 3338; this.stringLit(); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 3495; + this.state = 3340; this.number_(); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 3496; + this.state = 3341; this.booleanValue(); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 3498; + this.state = 3343; this.errorHandler.sync(this); alternative = 1; do { @@ -15722,7 +15405,7 @@ export class SparkSqlParser extends SQLParserBase { case 1: { { - this.state = 3497; + this.state = 3342; this.stringLit(); } } @@ -15730,9 +15413,9 @@ export class SparkSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 3500; + this.state = 3345; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 453, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 456, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } break; @@ -15754,12 +15437,12 @@ export class SparkSqlParser extends SQLParserBase { } public comparisonOperator(): ComparisonOperatorContext { let localContext = new ComparisonOperatorContext(this.context, this.state); - this.enterRule(localContext, 290, SparkSqlParser.RULE_comparisonOperator); + this.enterRule(localContext, 242, SparkSqlParser.RULE_comparisonOperator); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3504; + this.state = 3349; _la = this.tokenStream.LA(1); if(!(((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 255) !== 0))) { this.errorHandler.recoverInline(this); @@ -15786,12 +15469,12 @@ export class SparkSqlParser extends SQLParserBase { } public arithmeticOperator(): ArithmeticOperatorContext { let localContext = new ArithmeticOperatorContext(this.context, this.state); - this.enterRule(localContext, 292, SparkSqlParser.RULE_arithmeticOperator); + this.enterRule(localContext, 244, SparkSqlParser.RULE_arithmeticOperator); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3506; + this.state = 3351; _la = this.tokenStream.LA(1); if(!(_la === 94 || ((((_la - 361)) & ~0x1F) === 0 && ((1 << (_la - 361)) & 1023) !== 0))) { this.errorHandler.recoverInline(this); @@ -15818,12 +15501,12 @@ export class SparkSqlParser extends SQLParserBase { } public predicateOperator(): PredicateOperatorContext { let localContext = new PredicateOperatorContext(this.context, this.state); - this.enterRule(localContext, 294, SparkSqlParser.RULE_predicateOperator); + this.enterRule(localContext, 246, SparkSqlParser.RULE_predicateOperator); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3508; + this.state = 3353; _la = this.tokenStream.LA(1); if(!(_la === 14 || _la === 140 || _la === 197 || _la === 208)) { this.errorHandler.recoverInline(this); @@ -15850,12 +15533,12 @@ export class SparkSqlParser extends SQLParserBase { } public booleanValue(): BooleanValueContext { let localContext = new BooleanValueContext(this.context, this.state); - this.enterRule(localContext, 296, SparkSqlParser.RULE_booleanValue); + this.enterRule(localContext, 248, SparkSqlParser.RULE_booleanValue); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3510; + this.state = 3355; _la = this.tokenStream.LA(1); if(!(_la === 111 || _la === 316)) { this.errorHandler.recoverInline(this); @@ -15882,24 +15565,24 @@ export class SparkSqlParser extends SQLParserBase { } public interval(): IntervalContext { let localContext = new IntervalContext(this.context, this.state); - this.enterRule(localContext, 298, SparkSqlParser.RULE_interval); + this.enterRule(localContext, 250, SparkSqlParser.RULE_interval); try { this.enterOuterAlt(localContext, 1); { - this.state = 3512; + this.state = 3357; this.match(SparkSqlParser.KW_INTERVAL); - this.state = 3515; + this.state = 3360; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 455, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 458, this.context) ) { case 1: { - this.state = 3513; + this.state = 3358; this.errorCapturingMultiUnitsInterval(); } break; case 2: { - this.state = 3514; + this.state = 3359; this.errorCapturingUnitToUnitInterval(); } break; @@ -15922,18 +15605,18 @@ export class SparkSqlParser extends SQLParserBase { } public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { let localContext = new ErrorCapturingMultiUnitsIntervalContext(this.context, this.state); - this.enterRule(localContext, 300, SparkSqlParser.RULE_errorCapturingMultiUnitsInterval); + this.enterRule(localContext, 252, SparkSqlParser.RULE_errorCapturingMultiUnitsInterval); try { this.enterOuterAlt(localContext, 1); { - this.state = 3517; + this.state = 3362; localContext._body = this.multiUnitsInterval(); - this.state = 3519; + this.state = 3364; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 456, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 459, this.context) ) { case 1: { - this.state = 3518; + this.state = 3363; this.unitToUnitInterval(); } break; @@ -15956,12 +15639,12 @@ export class SparkSqlParser extends SQLParserBase { } public multiUnitsInterval(): MultiUnitsIntervalContext { let localContext = new MultiUnitsIntervalContext(this.context, this.state); - this.enterRule(localContext, 302, SparkSqlParser.RULE_multiUnitsInterval); + this.enterRule(localContext, 254, SparkSqlParser.RULE_multiUnitsInterval); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3524; + this.state = 3369; this.errorHandler.sync(this); alternative = 1; do { @@ -15969,9 +15652,9 @@ export class SparkSqlParser extends SQLParserBase { case 1: { { - this.state = 3521; + this.state = 3366; this.intervalValue(); - this.state = 3522; + this.state = 3367; localContext._unitInMultiUnits = this.unitInMultiUnits(); localContext._unit.push(localContext._unitInMultiUnits); } @@ -15980,9 +15663,9 @@ export class SparkSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 3526; + this.state = 3371; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 457, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 460, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } } @@ -16002,24 +15685,24 @@ export class SparkSqlParser extends SQLParserBase { } public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext { let localContext = new ErrorCapturingUnitToUnitIntervalContext(this.context, this.state); - this.enterRule(localContext, 304, SparkSqlParser.RULE_errorCapturingUnitToUnitInterval); + this.enterRule(localContext, 256, SparkSqlParser.RULE_errorCapturingUnitToUnitInterval); try { this.enterOuterAlt(localContext, 1); { - this.state = 3528; + this.state = 3373; localContext._body = this.unitToUnitInterval(); - this.state = 3531; + this.state = 3376; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 458, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 461, this.context) ) { case 1: { - this.state = 3529; + this.state = 3374; localContext._error1 = this.multiUnitsInterval(); } break; case 2: { - this.state = 3530; + this.state = 3375; localContext._error2 = this.unitToUnitInterval(); } break; @@ -16042,17 +15725,17 @@ export class SparkSqlParser extends SQLParserBase { } public unitToUnitInterval(): UnitToUnitIntervalContext { let localContext = new UnitToUnitIntervalContext(this.context, this.state); - this.enterRule(localContext, 306, SparkSqlParser.RULE_unitToUnitInterval); + this.enterRule(localContext, 258, SparkSqlParser.RULE_unitToUnitInterval); try { this.enterOuterAlt(localContext, 1); { - this.state = 3533; + this.state = 3378; localContext._value = this.intervalValue(); - this.state = 3534; + this.state = 3379; this.unitInUnitToUnit(); - this.state = 3535; + this.state = 3380; this.match(SparkSqlParser.KW_TO); - this.state = 3536; + this.state = 3381; this.unitInUnitToUnit(); } } @@ -16072,17 +15755,17 @@ export class SparkSqlParser extends SQLParserBase { } public intervalValue(): IntervalValueContext { let localContext = new IntervalValueContext(this.context, this.state); - this.enterRule(localContext, 308, SparkSqlParser.RULE_intervalValue); + this.enterRule(localContext, 260, SparkSqlParser.RULE_intervalValue); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3539; + this.state = 3384; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 361 || _la === 362) { { - this.state = 3538; + this.state = 3383; _la = this.tokenStream.LA(1); if(!(_la === 361 || _la === 362)) { this.errorHandler.recoverInline(this); @@ -16094,25 +15777,25 @@ export class SparkSqlParser extends SQLParserBase { } } - this.state = 3544; + this.state = 3389; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.INTEGER_VALUE: { - this.state = 3541; + this.state = 3386; this.match(SparkSqlParser.INTEGER_VALUE); } break; case SparkSqlParser.DECIMAL_VALUE: { - this.state = 3542; + this.state = 3387; this.match(SparkSqlParser.DECIMAL_VALUE); } break; case SparkSqlParser.STRING_LITERAL: case SparkSqlParser.DOUBLEQUOTED_STRING: { - this.state = 3543; + this.state = 3388; this.stringLit(); } break; @@ -16137,12 +15820,12 @@ export class SparkSqlParser extends SQLParserBase { } public unitInMultiUnits(): UnitInMultiUnitsContext { let localContext = new UnitInMultiUnitsContext(this.context, this.state); - this.enterRule(localContext, 310, SparkSqlParser.RULE_unitInMultiUnits); + this.enterRule(localContext, 262, SparkSqlParser.RULE_unitInMultiUnits); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3546; + this.state = 3391; _la = this.tokenStream.LA(1); if(!(_la === 67 || _la === 68 || _la === 134 || _la === 135 || ((((_la - 180)) & ~0x1F) === 0 && ((1 << (_la - 180)) & 12543) !== 0) || _la === 259 || _la === 260 || ((((_la - 341)) & ~0x1F) === 0 && ((1 << (_la - 341)) & 387) !== 0))) { this.errorHandler.recoverInline(this); @@ -16169,12 +15852,12 @@ export class SparkSqlParser extends SQLParserBase { } public unitInUnitToUnit(): UnitInUnitToUnitContext { let localContext = new UnitInUnitToUnitContext(this.context, this.state); - this.enterRule(localContext, 312, SparkSqlParser.RULE_unitInUnitToUnit); + this.enterRule(localContext, 264, SparkSqlParser.RULE_unitInUnitToUnit); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3548; + this.state = 3393; _la = this.tokenStream.LA(1); if(!(_la === 67 || _la === 134 || _la === 184 || _la === 186 || _la === 259 || _la === 348)) { this.errorHandler.recoverInline(this); @@ -16201,24 +15884,24 @@ export class SparkSqlParser extends SQLParserBase { } public colPosition(): ColPositionContext { let localContext = new ColPositionContext(this.context, this.state); - this.enterRule(localContext, 314, SparkSqlParser.RULE_colPosition); + this.enterRule(localContext, 266, SparkSqlParser.RULE_colPosition); try { - this.state = 3553; + this.state = 3398; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_FIRST: this.enterOuterAlt(localContext, 1); { - this.state = 3550; + this.state = 3395; localContext._position = this.match(SparkSqlParser.KW_FIRST); } break; case SparkSqlParser.KW_AFTER: this.enterOuterAlt(localContext, 2); { - this.state = 3551; + this.state = 3396; localContext._position = this.match(SparkSqlParser.KW_AFTER); - this.state = 3552; + this.state = 3397; localContext._afterCol = this.errorCapturingIdentifier(); } break; @@ -16242,218 +15925,218 @@ export class SparkSqlParser extends SQLParserBase { } public type_(): TypeContext { let localContext = new TypeContext(this.context, this.state); - this.enterRule(localContext, 316, SparkSqlParser.RULE_type); + this.enterRule(localContext, 268, SparkSqlParser.RULE_type); try { - this.state = 3585; + this.state = 3430; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 462, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 465, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3555; + this.state = 3400; this.match(SparkSqlParser.KW_BOOLEAN); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3556; + this.state = 3401; this.match(SparkSqlParser.KW_TINYINT); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3557; + this.state = 3402; this.match(SparkSqlParser.KW_BYTE); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 3558; + this.state = 3403; this.match(SparkSqlParser.KW_SMALLINT); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 3559; + this.state = 3404; this.match(SparkSqlParser.KW_SHORT); } break; case 6: this.enterOuterAlt(localContext, 6); { - this.state = 3560; + this.state = 3405; this.match(SparkSqlParser.KW_INT); } break; case 7: this.enterOuterAlt(localContext, 7); { - this.state = 3561; + this.state = 3406; this.match(SparkSqlParser.KW_INTEGER); } break; case 8: this.enterOuterAlt(localContext, 8); { - this.state = 3562; + this.state = 3407; this.match(SparkSqlParser.KW_BIGINT); } break; case 9: this.enterOuterAlt(localContext, 9); { - this.state = 3563; + this.state = 3408; this.match(SparkSqlParser.KW_LONG); } break; case 10: this.enterOuterAlt(localContext, 10); { - this.state = 3564; + this.state = 3409; this.match(SparkSqlParser.KW_FLOAT); } break; case 11: this.enterOuterAlt(localContext, 11); { - this.state = 3565; + this.state = 3410; this.match(SparkSqlParser.KW_REAL); } break; case 12: this.enterOuterAlt(localContext, 12); { - this.state = 3566; + this.state = 3411; this.match(SparkSqlParser.KW_DOUBLE); } break; case 13: this.enterOuterAlt(localContext, 13); { - this.state = 3567; + this.state = 3412; this.match(SparkSqlParser.KW_DATE); } break; case 14: this.enterOuterAlt(localContext, 14); { - this.state = 3568; + this.state = 3413; this.match(SparkSqlParser.KW_TIMESTAMP); } break; case 15: this.enterOuterAlt(localContext, 15); { - this.state = 3569; + this.state = 3414; this.match(SparkSqlParser.KW_TIMESTAMP_NTZ); } break; case 16: this.enterOuterAlt(localContext, 16); { - this.state = 3570; + this.state = 3415; this.match(SparkSqlParser.KW_TIMESTAMP_LTZ); } break; case 17: this.enterOuterAlt(localContext, 17); { - this.state = 3571; + this.state = 3416; this.match(SparkSqlParser.KW_STRING); } break; case 18: this.enterOuterAlt(localContext, 18); { - this.state = 3572; + this.state = 3417; this.match(SparkSqlParser.KW_CHARACTER); } break; case 19: this.enterOuterAlt(localContext, 19); { - this.state = 3573; + this.state = 3418; this.match(SparkSqlParser.KW_CHAR); } break; case 20: this.enterOuterAlt(localContext, 20); { - this.state = 3574; + this.state = 3419; this.match(SparkSqlParser.KW_VARCHAR); } break; case 21: this.enterOuterAlt(localContext, 21); { - this.state = 3575; + this.state = 3420; this.match(SparkSqlParser.KW_BINARY); } break; case 22: this.enterOuterAlt(localContext, 22); { - this.state = 3576; + this.state = 3421; this.match(SparkSqlParser.KW_DECIMAL); } break; case 23: this.enterOuterAlt(localContext, 23); { - this.state = 3577; + this.state = 3422; this.match(SparkSqlParser.KW_DEC); } break; case 24: this.enterOuterAlt(localContext, 24); { - this.state = 3578; + this.state = 3423; this.match(SparkSqlParser.KW_NUMERIC); } break; case 25: this.enterOuterAlt(localContext, 25); { - this.state = 3579; + this.state = 3424; this.match(SparkSqlParser.KW_VOID); } break; case 26: this.enterOuterAlt(localContext, 26); { - this.state = 3580; + this.state = 3425; this.match(SparkSqlParser.KW_INTERVAL); } break; case 27: this.enterOuterAlt(localContext, 27); { - this.state = 3581; + this.state = 3426; this.match(SparkSqlParser.KW_ARRAY); } break; case 28: this.enterOuterAlt(localContext, 28); { - this.state = 3582; + this.state = 3427; this.match(SparkSqlParser.KW_STRUCT); } break; case 29: this.enterOuterAlt(localContext, 29); { - this.state = 3583; + this.state = 3428; this.match(SparkSqlParser.KW_MAP); } break; case 30: this.enterOuterAlt(localContext, 30); { - this.state = 3584; + this.state = 3429; localContext._unsupportedType = this.identifier(); } break; @@ -16475,71 +16158,87 @@ export class SparkSqlParser extends SQLParserBase { } public dataType(): DataTypeContext { let localContext = new DataTypeContext(this.context, this.state); - this.enterRule(localContext, 318, SparkSqlParser.RULE_dataType); + this.enterRule(localContext, 270, SparkSqlParser.RULE_dataType); let _la: number; try { - this.state = 3633; + this.state = 3485; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 469, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 473, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3587; + this.state = 3432; localContext._complex = this.match(SparkSqlParser.KW_ARRAY); - this.state = 3588; + this.state = 3433; this.match(SparkSqlParser.LT); - this.state = 3589; + this.state = 3434; this.dataType(); - this.state = 3590; + this.state = 3435; this.match(SparkSqlParser.GT); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3592; + this.state = 3437; localContext._complex = this.match(SparkSqlParser.KW_MAP); - this.state = 3593; + this.state = 3438; this.match(SparkSqlParser.LT); - this.state = 3594; + this.state = 3439; this.dataType(); - this.state = 3595; + this.state = 3440; this.match(SparkSqlParser.COMMA); - this.state = 3596; + this.state = 3441; this.dataType(); - this.state = 3597; + this.state = 3442; this.match(SparkSqlParser.GT); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3599; + this.state = 3444; localContext._complex = this.match(SparkSqlParser.KW_STRUCT); - this.state = 3606; + this.state = 3458; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.LT: { - this.state = 3600; + this.state = 3445; this.match(SparkSqlParser.LT); - this.state = 3602; + this.state = 3454; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967040) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4160749567) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967279) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967167) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 3073) !== 0)) { { - this.state = 3601; - this.complexColTypeList(); + this.state = 3446; + this.complexColType(); + this.state = 3451; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + while (_la === 4) { + { + { + this.state = 3447; + this.match(SparkSqlParser.COMMA); + this.state = 3448; + this.complexColType(); + } + } + this.state = 3453; + this.errorHandler.sync(this); + _la = this.tokenStream.LA(1); + } } } - this.state = 3604; + this.state = 3456; this.match(SparkSqlParser.GT); } break; case SparkSqlParser.NEQ: { - this.state = 3605; + this.state = 3457; this.match(SparkSqlParser.NEQ); } break; @@ -16551,9 +16250,9 @@ export class SparkSqlParser extends SQLParserBase { case 4: this.enterOuterAlt(localContext, 4); { - this.state = 3608; + this.state = 3460; this.match(SparkSqlParser.KW_INTERVAL); - this.state = 3609; + this.state = 3461; _la = this.tokenStream.LA(1); if(!(_la === 186 || _la === 348)) { this.errorHandler.recoverInline(this); @@ -16562,14 +16261,14 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3612; + this.state = 3464; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 465, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 469, this.context) ) { case 1: { - this.state = 3610; + this.state = 3462; this.match(SparkSqlParser.KW_TO); - this.state = 3611; + this.state = 3463; this.match(SparkSqlParser.KW_MONTH); } break; @@ -16579,9 +16278,9 @@ export class SparkSqlParser extends SQLParserBase { case 5: this.enterOuterAlt(localContext, 5); { - this.state = 3614; + this.state = 3466; this.match(SparkSqlParser.KW_INTERVAL); - this.state = 3615; + this.state = 3467; _la = this.tokenStream.LA(1); if(!(_la === 67 || _la === 134 || _la === 184 || _la === 259)) { this.errorHandler.recoverInline(this); @@ -16590,14 +16289,14 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3618; + this.state = 3470; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 466, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 470, this.context) ) { case 1: { - this.state = 3616; + this.state = 3468; this.match(SparkSqlParser.KW_TO); - this.state = 3617; + this.state = 3469; _la = this.tokenStream.LA(1); if(!(_la === 134 || _la === 184 || _la === 259)) { this.errorHandler.recoverInline(this); @@ -16614,34 +16313,34 @@ export class SparkSqlParser extends SQLParserBase { case 6: this.enterOuterAlt(localContext, 6); { - this.state = 3620; + this.state = 3472; this.type_(); - this.state = 3631; + this.state = 3483; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 468, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 472, this.context) ) { case 1: { - this.state = 3621; + this.state = 3473; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3622; + this.state = 3474; this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 3627; + this.state = 3479; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3623; + this.state = 3475; this.match(SparkSqlParser.COMMA); - this.state = 3624; + this.state = 3476; this.match(SparkSqlParser.INTEGER_VALUE); } } - this.state = 3629; + this.state = 3481; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } - this.state = 3630; + this.state = 3482; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -16666,26 +16365,26 @@ export class SparkSqlParser extends SQLParserBase { } public qualifiedColTypeWithPositionSeqForAdd(): QualifiedColTypeWithPositionSeqForAddContext { let localContext = new QualifiedColTypeWithPositionSeqForAddContext(this.context, this.state); - this.enterRule(localContext, 320, SparkSqlParser.RULE_qualifiedColTypeWithPositionSeqForAdd); + this.enterRule(localContext, 272, SparkSqlParser.RULE_qualifiedColTypeWithPositionSeqForAdd); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3635; + this.state = 3487; this.qualifiedColTypeWithPositionForAdd(); - this.state = 3640; + this.state = 3492; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3636; + this.state = 3488; this.match(SparkSqlParser.COMMA); - this.state = 3637; + this.state = 3489; this.qualifiedColTypeWithPositionForAdd(); } } - this.state = 3642; + this.state = 3494; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -16707,30 +16406,30 @@ export class SparkSqlParser extends SQLParserBase { } public qualifiedColTypeWithPositionForAdd(): QualifiedColTypeWithPositionForAddContext { let localContext = new QualifiedColTypeWithPositionForAddContext(this.context, this.state); - this.enterRule(localContext, 322, SparkSqlParser.RULE_qualifiedColTypeWithPositionForAdd); + this.enterRule(localContext, 274, SparkSqlParser.RULE_qualifiedColTypeWithPositionForAdd); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3643; + this.state = 3495; localContext._name = this.columnNameCreate(); - this.state = 3644; + this.state = 3496; this.dataType(); - this.state = 3648; + this.state = 3500; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 471, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 475, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 3645; + this.state = 3497; this.colDefinitionDescriptorWithPosition(); } } } - this.state = 3650; + this.state = 3502; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 471, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 475, this.context); } } } @@ -16750,26 +16449,26 @@ export class SparkSqlParser extends SQLParserBase { } public qualifiedColTypeWithPositionSeqForReplace(): QualifiedColTypeWithPositionSeqForReplaceContext { let localContext = new QualifiedColTypeWithPositionSeqForReplaceContext(this.context, this.state); - this.enterRule(localContext, 324, SparkSqlParser.RULE_qualifiedColTypeWithPositionSeqForReplace); + this.enterRule(localContext, 276, SparkSqlParser.RULE_qualifiedColTypeWithPositionSeqForReplace); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3651; + this.state = 3503; this.qualifiedColTypeWithPositionForReplace(); - this.state = 3656; + this.state = 3508; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3652; + this.state = 3504; this.match(SparkSqlParser.COMMA); - this.state = 3653; + this.state = 3505; this.qualifiedColTypeWithPositionForReplace(); } } - this.state = 3658; + this.state = 3510; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -16791,26 +16490,26 @@ export class SparkSqlParser extends SQLParserBase { } public qualifiedColTypeWithPositionForReplace(): QualifiedColTypeWithPositionForReplaceContext { let localContext = new QualifiedColTypeWithPositionForReplaceContext(this.context, this.state); - this.enterRule(localContext, 326, SparkSqlParser.RULE_qualifiedColTypeWithPositionForReplace); + this.enterRule(localContext, 278, SparkSqlParser.RULE_qualifiedColTypeWithPositionForReplace); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3659; + this.state = 3511; localContext._name = this.columnName(); - this.state = 3660; + this.state = 3512; this.dataType(); - this.state = 3664; + this.state = 3516; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 9 || _la === 51 || _la === 82 || _la === 116 || _la === 197) { { { - this.state = 3661; + this.state = 3513; this.colDefinitionDescriptorWithPosition(); } } - this.state = 3666; + this.state = 3518; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -16832,39 +16531,43 @@ export class SparkSqlParser extends SQLParserBase { } public colDefinitionDescriptorWithPosition(): ColDefinitionDescriptorWithPositionContext { let localContext = new ColDefinitionDescriptorWithPositionContext(this.context, this.state); - this.enterRule(localContext, 328, SparkSqlParser.RULE_colDefinitionDescriptorWithPosition); + this.enterRule(localContext, 280, SparkSqlParser.RULE_colDefinitionDescriptorWithPosition); try { - this.state = 3672; + this.state = 3526; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_NOT: this.enterOuterAlt(localContext, 1); { - this.state = 3667; + this.state = 3519; this.match(SparkSqlParser.KW_NOT); - this.state = 3668; + this.state = 3520; this.match(SparkSqlParser.KW_NULL); } break; case SparkSqlParser.KW_DEFAULT: this.enterOuterAlt(localContext, 2); { - this.state = 3669; - this.defaultExpression(); + this.state = 3521; + this.match(SparkSqlParser.KW_DEFAULT); + this.state = 3522; + this.expression(); } break; case SparkSqlParser.KW_COMMENT: this.enterOuterAlt(localContext, 3); { - this.state = 3670; - this.commentSpec(); + this.state = 3523; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 3524; + localContext._comment = this.stringLit(); } break; case SparkSqlParser.KW_AFTER: case SparkSqlParser.KW_FIRST: this.enterOuterAlt(localContext, 4); { - this.state = 3671; + this.state = 3525; this.colPosition(); } break; @@ -16886,40 +16589,14 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public defaultExpression(): DefaultExpressionContext { - let localContext = new DefaultExpressionContext(this.context, this.state); - this.enterRule(localContext, 330, SparkSqlParser.RULE_defaultExpression); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 3674; - this.match(SparkSqlParser.KW_DEFAULT); - this.state = 3675; - this.expression(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public variableDefaultExpression(): VariableDefaultExpressionContext { let localContext = new VariableDefaultExpressionContext(this.context, this.state); - this.enterRule(localContext, 332, SparkSqlParser.RULE_variableDefaultExpression); + this.enterRule(localContext, 282, SparkSqlParser.RULE_variableDefaultExpression); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3677; + this.state = 3528; _la = this.tokenStream.LA(1); if(!(_la === 82 || _la === 352)) { this.errorHandler.recoverInline(this); @@ -16928,7 +16605,7 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3678; + this.state = 3529; this.expression(); } } @@ -16948,30 +16625,30 @@ export class SparkSqlParser extends SQLParserBase { } public colTypeList(): ColTypeListContext { let localContext = new ColTypeListContext(this.context, this.state); - this.enterRule(localContext, 334, SparkSqlParser.RULE_colTypeList); + this.enterRule(localContext, 284, SparkSqlParser.RULE_colTypeList); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3680; - this.colType(); - this.state = 3685; + this.state = 3531; + this.columnType(); + this.state = 3536; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 475, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 479, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 3681; + this.state = 3532; this.match(SparkSqlParser.COMMA); - this.state = 3682; - this.colType(); + this.state = 3533; + this.columnType(); } } } - this.state = 3687; + this.state = 3538; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 475, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 479, this.context); } } } @@ -16989,35 +16666,37 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public colType(): ColTypeContext { - let localContext = new ColTypeContext(this.context, this.state); - this.enterRule(localContext, 336, SparkSqlParser.RULE_colType); + public columnType(): ColumnTypeContext { + let localContext = new ColumnTypeContext(this.context, this.state); + this.enterRule(localContext, 286, SparkSqlParser.RULE_columnType); try { this.enterOuterAlt(localContext, 1); { - this.state = 3688; + this.state = 3539; localContext._colName = this.errorCapturingIdentifier(); - this.state = 3689; + this.state = 3540; this.dataType(); - this.state = 3692; + this.state = 3543; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 476, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 480, this.context) ) { case 1: { - this.state = 3690; + this.state = 3541; this.match(SparkSqlParser.KW_NOT); - this.state = 3691; + this.state = 3542; this.match(SparkSqlParser.KW_NULL); } break; } - this.state = 3695; + this.state = 3547; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 477, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 481, this.context) ) { case 1: { - this.state = 3694; - this.commentSpec(); + this.state = 3545; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 3546; + localContext._comment = this.stringLit(); } break; } @@ -17039,26 +16718,26 @@ export class SparkSqlParser extends SQLParserBase { } public createOrReplaceTableColTypeList(): CreateOrReplaceTableColTypeListContext { let localContext = new CreateOrReplaceTableColTypeListContext(this.context, this.state); - this.enterRule(localContext, 338, SparkSqlParser.RULE_createOrReplaceTableColTypeList); + this.enterRule(localContext, 288, SparkSqlParser.RULE_createOrReplaceTableColTypeList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3697; + this.state = 3549; this.createOrReplaceTableColType(); - this.state = 3702; + this.state = 3554; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3698; + this.state = 3550; this.match(SparkSqlParser.COMMA); - this.state = 3699; + this.state = 3551; this.createOrReplaceTableColType(); } } - this.state = 3704; + this.state = 3556; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -17080,26 +16759,26 @@ export class SparkSqlParser extends SQLParserBase { } public createOrReplaceTableColType(): CreateOrReplaceTableColTypeContext { let localContext = new CreateOrReplaceTableColTypeContext(this.context, this.state); - this.enterRule(localContext, 340, SparkSqlParser.RULE_createOrReplaceTableColType); + this.enterRule(localContext, 290, SparkSqlParser.RULE_createOrReplaceTableColType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3705; + this.state = 3557; localContext._colName = this.columnNameCreate(); - this.state = 3706; - this.dataType(); - this.state = 3710; + this.state = 3558; + localContext._colType = this.dataType(); + this.state = 3562; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 51 || _la === 82 || _la === 127 || _la === 197) { { { - this.state = 3707; + this.state = 3559; this.colDefinitionOption(); } } - this.state = 3712; + this.state = 3564; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -17121,39 +16800,53 @@ export class SparkSqlParser extends SQLParserBase { } public colDefinitionOption(): ColDefinitionOptionContext { let localContext = new ColDefinitionOptionContext(this.context, this.state); - this.enterRule(localContext, 342, SparkSqlParser.RULE_colDefinitionOption); + this.enterRule(localContext, 292, SparkSqlParser.RULE_colDefinitionOption); try { - this.state = 3718; + this.state = 3578; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_NOT: this.enterOuterAlt(localContext, 1); { - this.state = 3713; + this.state = 3565; this.match(SparkSqlParser.KW_NOT); - this.state = 3714; + this.state = 3566; this.match(SparkSqlParser.KW_NULL); } break; case SparkSqlParser.KW_DEFAULT: this.enterOuterAlt(localContext, 2); { - this.state = 3715; - this.defaultExpression(); + this.state = 3567; + this.match(SparkSqlParser.KW_DEFAULT); + this.state = 3568; + this.expression(); } break; case SparkSqlParser.KW_GENERATED: this.enterOuterAlt(localContext, 3); { - this.state = 3716; - this.generationExpression(); + this.state = 3569; + this.match(SparkSqlParser.KW_GENERATED); + this.state = 3570; + this.match(SparkSqlParser.KW_ALWAYS); + this.state = 3571; + this.match(SparkSqlParser.KW_AS); + this.state = 3572; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3573; + this.expression(); + this.state = 3574; + this.match(SparkSqlParser.RIGHT_PAREN); } break; case SparkSqlParser.KW_COMMENT: this.enterOuterAlt(localContext, 4); { - this.state = 3717; - this.commentSpec(); + this.state = 3576; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 3577; + localContext._comment = this.stringLit(); } break; default: @@ -17174,121 +16867,48 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public generationExpression(): GenerationExpressionContext { - let localContext = new GenerationExpressionContext(this.context, this.state); - this.enterRule(localContext, 344, SparkSqlParser.RULE_generationExpression); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 3720; - this.match(SparkSqlParser.KW_GENERATED); - this.state = 3721; - this.match(SparkSqlParser.KW_ALWAYS); - this.state = 3722; - this.match(SparkSqlParser.KW_AS); - this.state = 3723; - this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3724; - this.expression(); - this.state = 3725; - this.match(SparkSqlParser.RIGHT_PAREN); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public complexColTypeList(): ComplexColTypeListContext { - let localContext = new ComplexColTypeListContext(this.context, this.state); - this.enterRule(localContext, 346, SparkSqlParser.RULE_complexColTypeList); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 3727; - this.complexColType(); - this.state = 3732; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - while (_la === 4) { - { - { - this.state = 3728; - this.match(SparkSqlParser.COMMA); - this.state = 3729; - this.complexColType(); - } - } - this.state = 3734; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } public complexColType(): ComplexColTypeContext { let localContext = new ComplexColTypeContext(this.context, this.state); - this.enterRule(localContext, 348, SparkSqlParser.RULE_complexColType); + this.enterRule(localContext, 294, SparkSqlParser.RULE_complexColType); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3735; + this.state = 3580; this.identifier(); - this.state = 3737; + this.state = 3582; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 371) { { - this.state = 3736; + this.state = 3581; this.match(SparkSqlParser.COLON); } } - this.state = 3739; + this.state = 3584; this.dataType(); - this.state = 3742; + this.state = 3587; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 197) { { - this.state = 3740; + this.state = 3585; this.match(SparkSqlParser.KW_NOT); - this.state = 3741; + this.state = 3586; this.match(SparkSqlParser.KW_NULL); } } - this.state = 3745; + this.state = 3591; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 51) { { - this.state = 3744; - this.commentSpec(); + this.state = 3589; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 3590; + localContext._comment = this.stringLit(); } } @@ -17310,17 +16930,17 @@ export class SparkSqlParser extends SQLParserBase { } public whenClause(): WhenClauseContext { let localContext = new WhenClauseContext(this.context, this.state); - this.enterRule(localContext, 350, SparkSqlParser.RULE_whenClause); + this.enterRule(localContext, 296, SparkSqlParser.RULE_whenClause); try { this.enterOuterAlt(localContext, 1); { - this.state = 3747; + this.state = 3593; this.match(SparkSqlParser.KW_WHEN); - this.state = 3748; + this.state = 3594; localContext._condition = this.expression(); - this.state = 3749; + this.state = 3595; this.match(SparkSqlParser.KW_THEN); - this.state = 3750; + this.state = 3596; localContext._result = this.expression(); } } @@ -17340,89 +16960,41 @@ export class SparkSqlParser extends SQLParserBase { } public windowClause(): WindowClauseContext { let localContext = new WindowClauseContext(this.context, this.state); - this.enterRule(localContext, 352, SparkSqlParser.RULE_windowClause); + this.enterRule(localContext, 298, SparkSqlParser.RULE_windowClause); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3752; + this.state = 3598; this.match(SparkSqlParser.KW_WINDOW); - this.state = 3753; - this.namedWindow(); - this.state = 3758; + this.state = 3599; + localContext._name = this.errorCapturingIdentifier(); + this.state = 3600; + this.match(SparkSqlParser.KW_AS); + this.state = 3601; + this.windowSpec(); + this.state = 3609; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 485, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 488, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 3754; + this.state = 3602; this.match(SparkSqlParser.COMMA); - this.state = 3755; - this.namedWindow(); + this.state = 3603; + localContext._name = this.errorCapturingIdentifier(); + this.state = 3604; + this.match(SparkSqlParser.KW_AS); + this.state = 3605; + this.windowSpec(); } } } - this.state = 3760; + this.state = 3611; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 485, this.context); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public zorderClause(): ZorderClauseContext { - let localContext = new ZorderClauseContext(this.context, this.state); - this.enterRule(localContext, 354, SparkSqlParser.RULE_zorderClause); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 3761; - this.match(SparkSqlParser.KW_ZORDER); - this.state = 3762; - this.match(SparkSqlParser.KW_BY); - this.state = 3763; - this.columnNameSeq(); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; + alternative = this.interpreter.adaptivePredict(this.tokenStream, 488, this.context); } - } - finally { - this.exitRule(); - } - return localContext; - } - public namedWindow(): NamedWindowContext { - let localContext = new NamedWindowContext(this.context, this.state); - this.enterRule(localContext, 356, SparkSqlParser.RULE_namedWindow); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 3765; - localContext._name = this.errorCapturingIdentifier(); - this.state = 3766; - this.match(SparkSqlParser.KW_AS); - this.state = 3767; - this.windowSpec(); } } catch (re) { @@ -17441,61 +17013,61 @@ export class SparkSqlParser extends SQLParserBase { } public windowSpec(): WindowSpecContext { let localContext = new WindowSpecContext(this.context, this.state); - this.enterRule(localContext, 358, SparkSqlParser.RULE_windowSpec); + this.enterRule(localContext, 300, SparkSqlParser.RULE_windowSpec); let _la: number; try { - this.state = 3815; + this.state = 3658; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 493, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 496, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3769; + this.state = 3612; localContext._name = this.errorCapturingIdentifier(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3770; + this.state = 3613; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3771; + this.state = 3614; localContext._name = this.errorCapturingIdentifier(); - this.state = 3772; + this.state = 3615; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3774; + this.state = 3617; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3809; + this.state = 3652; this.errorHandler.sync(this); switch (this.tokenStream.LA(1)) { case SparkSqlParser.KW_CLUSTER: { - this.state = 3775; + this.state = 3618; this.match(SparkSqlParser.KW_CLUSTER); - this.state = 3776; + this.state = 3619; this.match(SparkSqlParser.KW_BY); - this.state = 3777; + this.state = 3620; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); - this.state = 3782; + this.state = 3625; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3778; + this.state = 3621; this.match(SparkSqlParser.COMMA); - this.state = 3779; + this.state = 3622; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); } } - this.state = 3784; + this.state = 3627; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -17509,12 +17081,12 @@ export class SparkSqlParser extends SQLParserBase { case SparkSqlParser.KW_ROWS: case SparkSqlParser.KW_SORT: { - this.state = 3795; + this.state = 3638; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 93 || _la === 217) { { - this.state = 3785; + this.state = 3628; _la = this.tokenStream.LA(1); if(!(_la === 93 || _la === 217)) { this.errorHandler.recoverInline(this); @@ -17523,37 +17095,37 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3786; + this.state = 3629; this.match(SparkSqlParser.KW_BY); - this.state = 3787; + this.state = 3630; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); - this.state = 3792; + this.state = 3635; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3788; + this.state = 3631; this.match(SparkSqlParser.COMMA); - this.state = 3789; + this.state = 3632; localContext._expression = this.expression(); localContext._partition.push(localContext._expression); } } - this.state = 3794; + this.state = 3637; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } } } - this.state = 3807; + this.state = 3650; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 209 || _la === 278) { { - this.state = 3797; + this.state = 3640; _la = this.tokenStream.LA(1); if(!(_la === 209 || _la === 278)) { this.errorHandler.recoverInline(this); @@ -17562,23 +17134,23 @@ export class SparkSqlParser extends SQLParserBase { this.errorHandler.reportMatch(this); this.consume(); } - this.state = 3798; + this.state = 3641; this.match(SparkSqlParser.KW_BY); - this.state = 3799; + this.state = 3642; this.sortItem(); - this.state = 3804; + this.state = 3647; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3800; + this.state = 3643; this.match(SparkSqlParser.COMMA); - this.state = 3801; + this.state = 3644; this.sortItem(); } } - this.state = 3806; + this.state = 3649; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -17590,17 +17162,17 @@ export class SparkSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 3812; + this.state = 3655; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); if (_la === 233 || _la === 258) { { - this.state = 3811; + this.state = 3654; this.windowFrame(); } } - this.state = 3814; + this.state = 3657; this.match(SparkSqlParser.RIGHT_PAREN); } break; @@ -17622,56 +17194,49 @@ export class SparkSqlParser extends SQLParserBase { } public windowFrame(): WindowFrameContext { let localContext = new WindowFrameContext(this.context, this.state); - this.enterRule(localContext, 360, SparkSqlParser.RULE_windowFrame); + this.enterRule(localContext, 302, SparkSqlParser.RULE_windowFrame); + let _la: number; try { - this.state = 3833; + this.state = 3668; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 494, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 497, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3817; - localContext._frameType = this.match(SparkSqlParser.KW_RANGE); - this.state = 3818; + this.state = 3660; + localContext._frameType = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 233 || _la === 258)) { + localContext._frameType = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 3661; localContext._start_ = this.frameBound(); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3819; - localContext._frameType = this.match(SparkSqlParser.KW_ROWS); - this.state = 3820; - localContext._start_ = this.frameBound(); + this.state = 3662; + localContext._frameType = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 233 || _la === 258)) { + localContext._frameType = this.errorHandler.recoverInline(this); } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 3821; - localContext._frameType = this.match(SparkSqlParser.KW_RANGE); - this.state = 3822; - this.match(SparkSqlParser.KW_BETWEEN); - this.state = 3823; - localContext._start_ = this.frameBound(); - this.state = 3824; - this.match(SparkSqlParser.KW_AND); - this.state = 3825; - localContext._end = this.frameBound(); + else { + this.errorHandler.reportMatch(this); + this.consume(); } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 3827; - localContext._frameType = this.match(SparkSqlParser.KW_ROWS); - this.state = 3828; + this.state = 3663; this.match(SparkSqlParser.KW_BETWEEN); - this.state = 3829; + this.state = 3664; localContext._start_ = this.frameBound(); - this.state = 3830; + this.state = 3665; this.match(SparkSqlParser.KW_AND); - this.state = 3831; + this.state = 3666; localContext._end = this.frameBound(); } break; @@ -17693,18 +17258,18 @@ export class SparkSqlParser extends SQLParserBase { } public frameBound(): FrameBoundContext { let localContext = new FrameBoundContext(this.context, this.state); - this.enterRule(localContext, 362, SparkSqlParser.RULE_frameBound); + this.enterRule(localContext, 304, SparkSqlParser.RULE_frameBound); let _la: number; try { - this.state = 3842; + this.state = 3677; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 495, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 498, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3835; + this.state = 3670; this.match(SparkSqlParser.KW_UNBOUNDED); - this.state = 3836; + this.state = 3671; localContext._boundType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 118 || _la === 226)) { @@ -17719,18 +17284,18 @@ export class SparkSqlParser extends SQLParserBase { case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3837; + this.state = 3672; localContext._boundType = this.match(SparkSqlParser.KW_CURRENT); - this.state = 3838; + this.state = 3673; this.match(SparkSqlParser.KW_ROW); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3839; + this.state = 3674; this.expression(); - this.state = 3840; + this.state = 3675; localContext._boundType = this.tokenStream.LT(1); _la = this.tokenStream.LA(1); if(!(_la === 118 || _la === 226)) { @@ -17760,26 +17325,26 @@ export class SparkSqlParser extends SQLParserBase { } public qualifiedNameList(): QualifiedNameListContext { let localContext = new QualifiedNameListContext(this.context, this.state); - this.enterRule(localContext, 364, SparkSqlParser.RULE_qualifiedNameList); + this.enterRule(localContext, 306, SparkSqlParser.RULE_qualifiedNameList); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3844; + this.state = 3679; this.qualifiedName(); - this.state = 3849; + this.state = 3684; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); while (_la === 4) { { { - this.state = 3845; + this.state = 3680; this.match(SparkSqlParser.COMMA); - this.state = 3846; + this.state = 3681; this.qualifiedName(); } } - this.state = 3851; + this.state = 3686; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); } @@ -17801,49 +17366,49 @@ export class SparkSqlParser extends SQLParserBase { } public functionName(): FunctionNameContext { let localContext = new FunctionNameContext(this.context, this.state); - this.enterRule(localContext, 366, SparkSqlParser.RULE_functionName); + this.enterRule(localContext, 308, SparkSqlParser.RULE_functionName); try { - this.state = 3861; + this.state = 3696; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 497, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 500, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3852; + this.state = 3687; this.match(SparkSqlParser.KW_IDENTIFIER); - this.state = 3853; + this.state = 3688; this.match(SparkSqlParser.LEFT_PAREN); - this.state = 3854; + this.state = 3689; this.expression(); - this.state = 3855; + this.state = 3690; this.match(SparkSqlParser.RIGHT_PAREN); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3857; + this.state = 3692; this.qualifiedName(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3858; + this.state = 3693; this.match(SparkSqlParser.KW_FILTER); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 3859; + this.state = 3694; this.match(SparkSqlParser.KW_LEFT); } break; case 5: this.enterOuterAlt(localContext, 5); { - this.state = 3860; + this.state = 3695; this.match(SparkSqlParser.KW_RIGHT); } break; @@ -17865,11 +17430,11 @@ export class SparkSqlParser extends SQLParserBase { } public functionNameCreate(): FunctionNameCreateContext { let localContext = new FunctionNameCreateContext(this.context, this.state); - this.enterRule(localContext, 368, SparkSqlParser.RULE_functionNameCreate); + this.enterRule(localContext, 310, SparkSqlParser.RULE_functionNameCreate); try { this.enterOuterAlt(localContext, 1); { - this.state = 3863; + this.state = 3698; this.qualifiedName(); } } @@ -17889,30 +17454,30 @@ export class SparkSqlParser extends SQLParserBase { } public qualifiedName(): QualifiedNameContext { let localContext = new QualifiedNameContext(this.context, this.state); - this.enterRule(localContext, 370, SparkSqlParser.RULE_qualifiedName); + this.enterRule(localContext, 312, SparkSqlParser.RULE_qualifiedName); try { let alternative: number; this.enterOuterAlt(localContext, 1); { - this.state = 3865; + this.state = 3700; this.identifier(); - this.state = 3870; + this.state = 3705; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 498, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 501, this.context); while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) { if (alternative === 1) { { { - this.state = 3866; + this.state = 3701; this.match(SparkSqlParser.DOT); - this.state = 3867; + this.state = 3702; this.identifier(); } } } - this.state = 3872; + this.state = 3707; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 498, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 501, this.context); } } } @@ -17932,13 +17497,13 @@ export class SparkSqlParser extends SQLParserBase { } public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { let localContext = new ErrorCapturingIdentifierContext(this.context, this.state); - this.enterRule(localContext, 372, SparkSqlParser.RULE_errorCapturingIdentifier); + this.enterRule(localContext, 314, SparkSqlParser.RULE_errorCapturingIdentifier); try { this.enterOuterAlt(localContext, 1); { - this.state = 3873; + this.state = 3708; this.identifier(); - this.state = 3874; + this.state = 3709; this.errorCapturingIdentifierExtra(); } } @@ -17958,16 +17523,16 @@ export class SparkSqlParser extends SQLParserBase { } public errorCapturingIdentifierExtra(): ErrorCapturingIdentifierExtraContext { let localContext = new ErrorCapturingIdentifierExtraContext(this.context, this.state); - this.enterRule(localContext, 374, SparkSqlParser.RULE_errorCapturingIdentifierExtra); + this.enterRule(localContext, 316, SparkSqlParser.RULE_errorCapturingIdentifierExtra); try { let alternative: number; - this.state = 3883; + this.state = 3718; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 500, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 503, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3878; + this.state = 3713; this.errorHandler.sync(this); alternative = 1; do { @@ -17975,9 +17540,9 @@ export class SparkSqlParser extends SQLParserBase { case 1: { { - this.state = 3876; + this.state = 3711; this.match(SparkSqlParser.MINUS); - this.state = 3877; + this.state = 3712; this.identifier(); } } @@ -17985,9 +17550,9 @@ export class SparkSqlParser extends SQLParserBase { default: throw new antlr.NoViableAltException(this); } - this.state = 3880; + this.state = 3715; this.errorHandler.sync(this); - alternative = this.interpreter.adaptivePredict(this.tokenStream, 499, this.context); + alternative = this.interpreter.adaptivePredict(this.tokenStream, 502, this.context); } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER); } break; @@ -18015,331 +17580,23 @@ export class SparkSqlParser extends SQLParserBase { } public identifier(): IdentifierContext { let localContext = new IdentifierContext(this.context, this.state); - this.enterRule(localContext, 376, SparkSqlParser.RULE_identifier); + this.enterRule(localContext, 318, SparkSqlParser.RULE_identifier); try { - this.state = 3887; + this.state = 3722; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 501, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 504, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3885; + this.state = 3720; this.strictIdentifier(); } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 3886; - this.strictNonReserved(); - } - break; - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public strictIdentifier(): StrictIdentifierContext { - let localContext = new StrictIdentifierContext(this.context, this.state); - this.enterRule(localContext, 378, SparkSqlParser.RULE_strictIdentifier); - try { - this.state = 3893; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 502, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); - { - this.state = 3889; - this.match(SparkSqlParser.IDENTIFIER); - } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 3890; - this.quotedIdentifier(); - } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 3891; - this.ansiNonReserved(); - } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 3892; - this.nonReserved(); - } - break; - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public quotedIdentifier(): QuotedIdentifierContext { - let localContext = new QuotedIdentifierContext(this.context, this.state); - this.enterRule(localContext, 380, SparkSqlParser.RULE_quotedIdentifier); - let _la: number; - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 3895; - _la = this.tokenStream.LA(1); - if(!(_la === 378 || _la === 389)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - this.errorHandler.reportError(this, re); - this.errorHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localContext; - } - public backQuotedIdentifier(): BackQuotedIdentifierContext { - let localContext = new BackQuotedIdentifierContext(this.context, this.state); - this.enterRule(localContext, 382, SparkSqlParser.RULE_backQuotedIdentifier); - try { - this.enterOuterAlt(localContext, 1); - { - this.state = 3897; - this.match(SparkSqlParser.BACKQUOTED_IDENTIFIER); - } - } - catch (re) { - if (re instanceof antlr.RecognitionException) { - localContext.exception = re; - 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, 384, SparkSqlParser.RULE_number); - let _la: number; - try { - this.state = 3939; - this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 513, this.context) ) { - case 1: - this.enterOuterAlt(localContext, 1); - { - this.state = 3900; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3899; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3902; - this.match(SparkSqlParser.EXPONENT_VALUE); - } - break; - case 2: - this.enterOuterAlt(localContext, 2); - { - this.state = 3904; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3903; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3906; - this.match(SparkSqlParser.DECIMAL_VALUE); - } - break; - case 3: - this.enterOuterAlt(localContext, 3); - { - this.state = 3908; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3907; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3910; - _la = this.tokenStream.LA(1); - if(!(_la === 383 || _la === 384)) { - this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - } - break; - case 4: - this.enterOuterAlt(localContext, 4); - { - this.state = 3912; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3911; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3914; - this.match(SparkSqlParser.INTEGER_VALUE); - } - break; - case 5: - this.enterOuterAlt(localContext, 5); - { - this.state = 3916; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3915; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3918; - this.match(SparkSqlParser.BIGINT_LITERAL); - } - break; - case 6: - this.enterOuterAlt(localContext, 6); - { - this.state = 3920; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3919; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3922; - this.match(SparkSqlParser.SMALLINT_LITERAL); - } - break; - case 7: - this.enterOuterAlt(localContext, 7); - { - this.state = 3924; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3923; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3926; - this.match(SparkSqlParser.TINYINT_LITERAL); - } - break; - case 8: - this.enterOuterAlt(localContext, 8); - { - this.state = 3928; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3927; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3930; - this.match(SparkSqlParser.DOUBLE_LITERAL); - } - break; - case 9: - this.enterOuterAlt(localContext, 9); - { - this.state = 3932; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3931; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3934; - this.match(SparkSqlParser.FLOAT_LITERAL); - } - break; - case 10: - this.enterOuterAlt(localContext, 10); - { - this.state = 3936; - this.errorHandler.sync(this); - _la = this.tokenStream.LA(1); - if (_la === 362) { - { - this.state = 3935; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3938; - this.match(SparkSqlParser.BIGDECIMAL_LITERAL); + break; + case 2: + this.enterOuterAlt(localContext, 2); + { + this.state = 3721; + this.strictNonReserved(); } break; } @@ -18358,72 +17615,39 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public alterColumnAction(): AlterColumnActionContext { - let localContext = new AlterColumnActionContext(this.context, this.state); - this.enterRule(localContext, 386, SparkSqlParser.RULE_alterColumnAction); - let _la: number; + public strictIdentifier(): StrictIdentifierContext { + let localContext = new StrictIdentifierContext(this.context, this.state); + this.enterRule(localContext, 320, SparkSqlParser.RULE_strictIdentifier); try { - this.state = 3952; + this.state = 3728; this.errorHandler.sync(this); - switch (this.interpreter.adaptivePredict(this.tokenStream, 514, this.context) ) { + switch (this.interpreter.adaptivePredict(this.tokenStream, 505, this.context) ) { case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3941; - this.match(SparkSqlParser.KW_TYPE); - this.state = 3942; - this.dataType(); + this.state = 3724; + this.match(SparkSqlParser.IDENTIFIER); } break; case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3943; - this.commentSpec(); + this.state = 3725; + this.quotedIdentifier(); } break; case 3: this.enterOuterAlt(localContext, 3); { - this.state = 3944; - this.colPosition(); + this.state = 3726; + this.ansiNonReserved(); } break; case 4: this.enterOuterAlt(localContext, 4); { - this.state = 3945; - localContext._setOrDrop = this.tokenStream.LT(1); - _la = this.tokenStream.LA(1); - if(!(_la === 96 || _la === 269)) { - localContext._setOrDrop = this.errorHandler.recoverInline(this); - } - else { - this.errorHandler.reportMatch(this); - this.consume(); - } - this.state = 3946; - this.match(SparkSqlParser.KW_NOT); - this.state = 3947; - this.match(SparkSqlParser.KW_NULL); - } - break; - case 5: - this.enterOuterAlt(localContext, 5); - { - this.state = 3948; - this.match(SparkSqlParser.KW_SET); - this.state = 3949; - this.defaultExpression(); - } - break; - case 6: - this.enterOuterAlt(localContext, 6); - { - this.state = 3950; - localContext._dropDefault = this.match(SparkSqlParser.KW_DROP); - this.state = 3951; - this.match(SparkSqlParser.KW_DEFAULT); + this.state = 3727; + this.nonReserved(); } break; } @@ -18442,16 +17666,16 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public stringLit(): StringLitContext { - let localContext = new StringLitContext(this.context, this.state); - this.enterRule(localContext, 388, SparkSqlParser.RULE_stringLit); + public quotedIdentifier(): QuotedIdentifierContext { + let localContext = new QuotedIdentifierContext(this.context, this.state); + this.enterRule(localContext, 322, SparkSqlParser.RULE_quotedIdentifier); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3954; + this.state = 3730; _la = this.tokenStream.LA(1); - if(!(_la === 377 || _la === 378)) { + if(!(_la === 378 || _la === 389)) { this.errorHandler.recoverInline(this); } else { @@ -18474,30 +17698,32 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public comment(): CommentContext { - let localContext = new CommentContext(this.context, this.state); - this.enterRule(localContext, 390, SparkSqlParser.RULE_comment); + public number_(): NumberContext { + let localContext = new NumberContext(this.context, this.state); + this.enterRule(localContext, 324, SparkSqlParser.RULE_number); + let _la: number; try { - this.state = 3958; + this.enterOuterAlt(localContext, 1); + { + this.state = 3733; this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case SparkSqlParser.STRING_LITERAL: - case SparkSqlParser.DOUBLEQUOTED_STRING: - this.enterOuterAlt(localContext, 1); - { - this.state = 3956; - this.stringLit(); - } - break; - case SparkSqlParser.KW_NULL: - this.enterOuterAlt(localContext, 2); + _la = this.tokenStream.LA(1); + if (_la === 362) { { - this.state = 3957; - this.match(SparkSqlParser.KW_NULL); + this.state = 3732; + this.match(SparkSqlParser.MINUS); } - break; - default: - throw new antlr.NoViableAltException(this); + } + + this.state = 3735; + _la = this.tokenStream.LA(1); + if(!(((((_la - 379)) & ~0x1F) === 0 && ((1 << (_la - 379)) & 511) !== 0))) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } } } catch (re) { @@ -18514,30 +17740,110 @@ export class SparkSqlParser extends SQLParserBase { } return localContext; } - public version(): VersionContext { - let localContext = new VersionContext(this.context, this.state); - this.enterRule(localContext, 392, SparkSqlParser.RULE_version); + public alterColumnAction(): AlterColumnActionContext { + let localContext = new AlterColumnActionContext(this.context, this.state); + this.enterRule(localContext, 326, SparkSqlParser.RULE_alterColumnAction); + let _la: number; try { - this.state = 3962; + this.state = 3750; this.errorHandler.sync(this); - switch (this.tokenStream.LA(1)) { - case SparkSqlParser.INTEGER_VALUE: + switch (this.interpreter.adaptivePredict(this.tokenStream, 507, this.context) ) { + case 1: this.enterOuterAlt(localContext, 1); { - this.state = 3960; - this.match(SparkSqlParser.INTEGER_VALUE); + this.state = 3737; + this.match(SparkSqlParser.KW_TYPE); + this.state = 3738; + this.dataType(); } break; - case SparkSqlParser.STRING_LITERAL: - case SparkSqlParser.DOUBLEQUOTED_STRING: + case 2: this.enterOuterAlt(localContext, 2); { - this.state = 3961; - this.stringLit(); + this.state = 3739; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 3740; + localContext._comment = this.stringLit(); } break; - default: - throw new antlr.NoViableAltException(this); + case 3: + this.enterOuterAlt(localContext, 3); + { + this.state = 3741; + this.colPosition(); + } + break; + case 4: + this.enterOuterAlt(localContext, 4); + { + this.state = 3742; + localContext._setOrDrop = this.tokenStream.LT(1); + _la = this.tokenStream.LA(1); + if(!(_la === 96 || _la === 269)) { + localContext._setOrDrop = this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } + this.state = 3743; + this.match(SparkSqlParser.KW_NOT); + this.state = 3744; + this.match(SparkSqlParser.KW_NULL); + } + break; + case 5: + this.enterOuterAlt(localContext, 5); + { + this.state = 3745; + this.match(SparkSqlParser.KW_SET); + this.state = 3746; + this.match(SparkSqlParser.KW_DEFAULT); + this.state = 3747; + this.expression(); + } + break; + case 6: + this.enterOuterAlt(localContext, 6); + { + this.state = 3748; + localContext._dropDefault = this.match(SparkSqlParser.KW_DROP); + this.state = 3749; + this.match(SparkSqlParser.KW_DEFAULT); + } + break; + } + } + catch (re) { + if (re instanceof antlr.RecognitionException) { + localContext.exception = re; + this.errorHandler.reportError(this, re); + this.errorHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localContext; + } + public stringLit(): StringLitContext { + let localContext = new StringLitContext(this.context, this.state); + this.enterRule(localContext, 328, SparkSqlParser.RULE_stringLit); + let _la: number; + try { + this.enterOuterAlt(localContext, 1); + { + this.state = 3752; + _la = this.tokenStream.LA(1); + if(!(_la === 377 || _la === 378)) { + this.errorHandler.recoverInline(this); + } + else { + this.errorHandler.reportMatch(this); + this.consume(); + } } } catch (re) { @@ -18556,12 +17862,12 @@ export class SparkSqlParser extends SQLParserBase { } public ansiNonReserved(): AnsiNonReservedContext { let localContext = new AnsiNonReservedContext(this.context, this.state); - this.enterRule(localContext, 394, SparkSqlParser.RULE_ansiNonReserved); + this.enterRule(localContext, 330, SparkSqlParser.RULE_ansiNonReserved); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3964; + this.state = 3754; _la = this.tokenStream.LA(1); if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 4017011456) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 1711111143) !== 0) || ((((_la - 67)) & ~0x1F) === 0 && ((1 << (_la - 67)) & 3187671039) !== 0) || ((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & 1328796669) !== 0) || ((((_la - 133)) & ~0x1F) === 0 && ((1 << (_la - 133)) & 3316086655) !== 0) || ((((_la - 165)) & ~0x1F) === 0 && ((1 << (_la - 165)) & 1610612735) !== 0) || ((((_la - 199)) & ~0x1F) === 0 && ((1 << (_la - 199)) & 4020201927) !== 0) || ((((_la - 231)) & ~0x1F) === 0 && ((1 << (_la - 231)) & 4294442751) !== 0) || ((((_la - 264)) & ~0x1F) === 0 && ((1 << (_la - 264)) & 3758088175) !== 0) || ((((_la - 296)) & ~0x1F) === 0 && ((1 << (_la - 296)) & 3355402191) !== 0) || ((((_la - 328)) & ~0x1F) === 0 && ((1 << (_la - 328)) & 15892455) !== 0))) { this.errorHandler.recoverInline(this); @@ -18588,12 +17894,12 @@ export class SparkSqlParser extends SQLParserBase { } public strictNonReserved(): StrictNonReservedContext { let localContext = new StrictNonReservedContext(this.context, this.state); - this.enterRule(localContext, 396, SparkSqlParser.RULE_strictNonReserved); + this.enterRule(localContext, 332, SparkSqlParser.RULE_strictNonReserved); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3966; + this.state = 3756; _la = this.tokenStream.LA(1); if(!(_la === 15 || _la === 60 || _la === 102 || _la === 124 || ((((_la - 144)) & ~0x1F) === 0 && ((1 << (_la - 144)) & 149521) !== 0) || _la === 194 || _la === 203 || ((((_la - 250)) & ~0x1F) === 0 && ((1 << (_la - 250)) & 1064961) !== 0) || _la === 323 || _la === 332)) { this.errorHandler.recoverInline(this); @@ -18620,12 +17926,12 @@ export class SparkSqlParser extends SQLParserBase { } public nonReserved(): NonReservedContext { let localContext = new NonReservedContext(this.context, this.state); - this.enterRule(localContext, 398, SparkSqlParser.RULE_nonReserved); + this.enterRule(localContext, 334, SparkSqlParser.RULE_nonReserved); let _la: number; try { this.enterOuterAlt(localContext, 1); { - this.state = 3968; + this.state = 3758; _la = this.tokenStream.LA(1); if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294934272) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4026531839) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 3892314047) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 3085893631) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967293) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294965227) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4227858431) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294950527) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967263) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294963191) !== 0))) { this.errorHandler.recoverInline(this); @@ -18653,15 +17959,15 @@ export class SparkSqlParser extends SQLParserBase { public override sempred(localContext: antlr.RuleContext | null, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 46: + case 37: return this.columnName_sempred(localContext as ColumnNameContext, predIndex); - case 52: + case 42: return this.queryTerm_sempred(localContext as QueryTermContext, predIndex); - case 138: + case 114: return this.booleanExpression_sempred(localContext as BooleanExpressionContext, predIndex); - case 140: + case 116: return this.valueExpression_sempred(localContext as ValueExpressionContext, predIndex); - case 142: + case 118: return this.primaryExpression_sempred(localContext as PrimaryExpressionContext, predIndex); } return true; @@ -18721,7 +18027,7 @@ export class SparkSqlParser extends SQLParserBase { } public static readonly _serializedATN: number[] = [ - 4,1,393,3971,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, + 4,1,393,3761,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, @@ -18748,1719 +18054,1630 @@ export class SparkSqlParser extends SQLParserBase { 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,1,0,5,0,402,8,0,10,0,12,0,405,9,0, - 1,0,1,0,1,1,1,1,3,1,411,8,1,1,2,1,2,3,2,415,8,2,1,2,1,2,1,2,3,2, - 420,8,2,1,2,1,2,1,2,1,2,1,2,3,2,427,8,2,1,2,1,2,1,2,3,2,432,8,2, - 1,2,1,2,1,2,1,2,1,2,1,2,5,2,440,8,2,10,2,12,2,443,9,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,461,8, - 2,1,2,1,2,3,2,465,8,2,1,2,1,2,1,2,1,2,3,2,471,8,2,1,2,3,2,474,8, - 2,1,2,3,2,477,8,2,1,2,1,2,1,2,1,2,1,2,3,2,484,8,2,1,2,3,2,487,8, - 2,1,2,1,2,3,2,491,8,2,1,2,3,2,494,8,2,1,2,1,2,1,2,3,2,499,8,2,1, - 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,511,8,2,10,2,12,2,514, - 9,2,1,2,1,2,1,2,1,2,1,2,3,2,521,8,2,1,2,3,2,524,8,2,1,2,1,2,3,2, - 528,8,2,1,2,3,2,531,8,2,1,2,1,2,1,2,1,2,3,2,537,8,2,1,2,1,2,1,2, - 1,2,1,2,1,2,1,2,1,2,1,2,3,2,548,8,2,1,2,1,2,1,2,1,2,3,2,554,8,2, - 1,2,1,2,1,2,3,2,559,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, + 7,164,2,165,7,165,2,166,7,166,2,167,7,167,1,0,5,0,338,8,0,10,0,12, + 0,341,9,0,1,0,1,0,1,1,1,1,3,1,347,8,1,1,2,1,2,3,2,351,8,2,1,2,1, + 2,1,2,3,2,356,8,2,1,2,1,2,1,2,1,2,1,2,3,2,363,8,2,1,2,1,2,1,2,3, + 2,368,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,378,8,2,10,2,12,2, + 381,9,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,400,8,2,1,2,1,2,3,2,404,8,2,1,2,1,2,1,2,1,2,3,2, + 410,8,2,1,2,3,2,413,8,2,1,2,3,2,416,8,2,1,2,1,2,3,2,420,8,2,1,2, + 3,2,423,8,2,1,2,1,2,3,2,427,8,2,1,2,1,2,1,2,1,2,1,2,3,2,434,8,2, + 1,2,3,2,437,8,2,1,2,1,2,3,2,441,8,2,1,2,3,2,444,8,2,1,2,1,2,1,2, + 3,2,449,8,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,462, + 8,2,10,2,12,2,465,9,2,1,2,1,2,3,2,469,8,2,1,2,1,2,1,2,1,2,1,2,1, + 2,1,2,3,2,478,8,2,1,2,3,2,481,8,2,1,2,1,2,3,2,485,8,2,1,2,3,2,488, + 8,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, + 1,2,3,2,505,8,2,1,2,1,2,1,2,1,2,3,2,511,8,2,1,2,1,2,1,2,3,2,516, + 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,1,2,1,2,1,2,1,2,3,2,592,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, - 3,2,602,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,613,8,2,1,2, - 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,624,8,2,1,2,1,2,1,2,1,2,1,2, - 1,2,1,2,1,2,1,2,3,2,635,8,2,1,2,1,2,1,2,3,2,640,8,2,1,2,1,2,1,2, - 1,2,1,2,1,2,1,2,3,2,649,8,2,1,2,1,2,3,2,653,8,2,1,2,1,2,1,2,1,2, - 3,2,659,8,2,1,2,1,2,3,2,663,8,2,1,2,1,2,1,2,3,2,668,8,2,1,2,1,2, - 1,2,1,2,3,2,674,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2, - 686,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,694,8,2,1,2,1,2,1,2,1,2,3,2, - 700,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,711,8,2,1,2,1,2, - 3,2,715,8,2,1,2,4,2,718,8,2,11,2,12,2,719,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,735,8,2,1,2,1,2,3,2,739,8,2,1, - 2,1,2,1,2,5,2,744,8,2,10,2,12,2,747,9,2,1,2,3,2,750,8,2,1,2,1,2, - 1,2,1,2,3,2,756,8,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,549,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,559,8,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,570,8,2,1,2,1,2,1,2,1,2,1,2,1,2, + 1,2,1,2,1,2,3,2,581,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2, + 592,8,2,1,2,1,2,1,2,3,2,597,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2, + 606,8,2,1,2,1,2,3,2,610,8,2,1,2,1,2,1,2,1,2,3,2,616,8,2,1,2,1,2, + 3,2,620,8,2,1,2,1,2,1,2,3,2,625,8,2,1,2,1,2,1,2,1,2,3,2,631,8,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,643,8,2,1,2,1,2,1,2, + 1,2,1,2,1,2,3,2,651,8,2,1,2,1,2,1,2,1,2,3,2,657,8,2,1,2,1,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,3,2,668,8,2,1,2,1,2,3,2,672,8,2,1,2,4,2, + 675,8,2,11,2,12,2,676,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,692,8,2,1,2,1,2,3,2,696,8,2,1,2,1,2,1,2,5,2,701,8, + 2,10,2,12,2,704,9,2,1,2,3,2,707,8,2,1,2,1,2,1,2,1,2,3,2,713,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, - 3,2,785,8,2,1,2,1,2,3,2,789,8,2,1,2,1,2,1,2,3,2,794,8,2,1,2,1,2, - 1,2,1,2,1,2,3,2,801,8,2,1,2,1,2,1,2,1,2,3,2,807,8,2,1,2,3,2,810, - 8,2,1,2,3,2,813,8,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,5,2,829,8,2,10,2,12,2,832,9,2,1,2,1,2,1,2,1, - 2,1,2,1,2,3,2,840,8,2,1,2,3,2,843,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1, - 2,3,2,852,8,2,1,2,1,2,1,2,3,2,857,8,2,1,2,1,2,1,2,1,2,3,2,863,8, - 2,1,2,1,2,1,2,1,2,1,2,3,2,870,8,2,1,2,3,2,873,8,2,1,2,1,2,3,2,877, - 8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,886,8,2,10,2,12,2,889,9,2,3, - 2,891,8,2,1,2,1,2,1,2,1,2,3,2,897,8,2,1,2,1,2,3,2,901,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,5,2,916,8,2,10,2,12, - 2,919,9,2,1,2,1,2,1,2,1,2,1,2,3,2,926,8,2,1,2,1,2,3,2,930,8,2,1, - 2,1,2,1,2,1,2,3,2,936,8,2,1,2,3,2,939,8,2,1,2,1,2,3,2,943,8,2,1, - 2,3,2,946,8,2,1,2,1,2,1,2,1,2,3,2,952,8,2,1,2,1,2,1,2,3,2,957,8, - 2,1,2,1,2,3,2,961,8,2,1,2,1,2,1,2,1,2,1,2,3,2,968,8,2,1,2,3,2,971, - 8,2,1,2,3,2,974,8,2,1,2,1,2,1,2,1,2,1,2,3,2,981,8,2,1,2,1,2,1,2, - 3,2,986,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,995,8,2,1,2,1,2,1,2, - 1,2,1,2,1,2,3,2,1003,8,2,1,2,1,2,1,2,1,2,3,2,1009,8,2,1,2,3,2,1012, - 8,2,1,2,3,2,1015,8,2,1,2,1,2,1,2,1,2,3,2,1021,8,2,1,2,1,2,3,2,1025, - 8,2,1,2,1,2,1,2,3,2,1030,8,2,1,2,3,2,1033,8,2,1,2,1,2,3,2,1037,8, - 2,3,2,1039,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1047,8,2,1,2,1,2,1,2, - 1,2,1,2,1,2,3,2,1055,8,2,1,2,3,2,1058,8,2,1,2,1,2,1,2,1,2,1,2,3, - 2,1065,8,2,1,2,3,2,1068,8,2,1,2,3,2,1071,8,2,1,2,1,2,1,2,1,2,1,2, - 1,2,1,2,3,2,1080,8,2,1,2,1,2,1,2,3,2,1085,8,2,1,2,1,2,1,2,1,2,3, - 2,1091,8,2,1,2,1,2,1,2,3,2,1096,8,2,1,2,3,2,1099,8,2,1,2,1,2,3,2, - 1103,8,2,1,2,3,2,1106,8,2,1,2,1,2,3,2,1110,8,2,1,2,1,2,1,2,1,2,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,3,2,743,8,2,1,2, + 1,2,3,2,747,8,2,1,2,1,2,1,2,3,2,752,8,2,1,2,1,2,1,2,1,2,1,2,3,2, + 759,8,2,1,2,1,2,1,2,1,2,3,2,765,8,2,1,2,3,2,768,8,2,1,2,3,2,771, + 8,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,1,2, + 1,2,1,2,5,2,788,8,2,10,2,12,2,791,9,2,1,2,1,2,1,2,1,2,1,2,1,2,3, + 2,799,8,2,1,2,3,2,802,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,811,8, + 2,1,2,1,2,1,2,3,2,816,8,2,1,2,1,2,1,2,1,2,3,2,822,8,2,1,2,1,2,1, + 2,1,2,1,2,3,2,829,8,2,1,2,3,2,832,8,2,1,2,1,2,3,2,836,8,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,849,8,2,10,2,12,2,852, + 9,2,3,2,854,8,2,1,2,1,2,1,2,1,2,3,2,860,8,2,1,2,1,2,3,2,864,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,5,2, + 881,8,2,10,2,12,2,884,9,2,1,2,1,2,1,2,1,2,1,2,3,2,891,8,2,1,2,1, + 2,3,2,895,8,2,1,2,1,2,1,2,1,2,3,2,901,8,2,1,2,3,2,904,8,2,1,2,1, + 2,3,2,908,8,2,1,2,3,2,911,8,2,1,2,1,2,1,2,1,2,3,2,917,8,2,1,2,1, + 2,1,2,3,2,922,8,2,1,2,1,2,3,2,926,8,2,1,2,1,2,1,2,1,2,1,2,3,2,933, + 8,2,1,2,3,2,936,8,2,1,2,3,2,939,8,2,1,2,1,2,1,2,1,2,1,2,3,2,946, + 8,2,1,2,1,2,1,2,3,2,951,8,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,960, + 8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,968,8,2,1,2,1,2,1,2,1,2,3,2,974, + 8,2,1,2,3,2,977,8,2,1,2,3,2,980,8,2,1,2,1,2,1,2,1,2,3,2,986,8,2, + 1,2,1,2,3,2,990,8,2,1,2,1,2,1,2,3,2,995,8,2,1,2,3,2,998,8,2,1,2, + 1,2,3,2,1002,8,2,3,2,1004,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1012,8, + 2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1020,8,2,1,2,3,2,1023,8,2,1,2,1,2, + 1,2,1,2,1,2,3,2,1030,8,2,1,2,3,2,1033,8,2,1,2,3,2,1036,8,2,1,2,1, + 2,1,2,1,2,1,2,1,2,1,2,3,2,1045,8,2,1,2,1,2,1,2,3,2,1050,8,2,1,2, + 1,2,1,2,1,2,3,2,1056,8,2,1,2,1,2,1,2,3,2,1061,8,2,1,2,3,2,1064,8, + 2,1,2,1,2,3,2,1068,8,2,1,2,3,2,1071,8,2,1,2,1,2,3,2,1075,8,2,1,2, + 1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1085,8,2,1,2,1,2,1,2,3,2,1090,8, + 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,1101,8,2,10,2,12,2,1104, + 9,2,3,2,1106,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1114,8,2,1,2,1,2,1, + 2,1,2,3,2,1120,8,2,1,2,3,2,1123,8,2,1,2,3,2,1126,8,2,1,2,1,2,1,2, + 3,2,1131,8,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1139,8,2,1,2,1,2,1,2,3, + 2,1144,8,2,1,2,1,2,1,2,1,2,3,2,1150,8,2,1,2,1,2,1,2,1,2,3,2,1156, + 8,2,1,2,3,2,1159,8,2,1,2,1,2,1,2,1,2,1,2,3,2,1166,8,2,1,2,1,2,1, + 2,5,2,1171,8,2,10,2,12,2,1174,9,2,1,2,1,2,1,2,5,2,1179,8,2,10,2, + 12,2,1182,9,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,1193,8,2,1, + 2,1,2,1,2,1,2,5,2,1199,8,2,10,2,12,2,1202,9,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,1136,8,2,10,2,12,2,1139,9,2,3,2,1141,8,2,1,2,1, - 2,1,2,1,2,1,2,1,2,3,2,1149,8,2,1,2,1,2,1,2,1,2,3,2,1155,8,2,1,2, - 3,2,1158,8,2,1,2,3,2,1161,8,2,1,2,1,2,1,2,3,2,1166,8,2,1,2,1,2,1, - 2,1,2,1,2,1,2,3,2,1174,8,2,1,2,1,2,1,2,3,2,1179,8,2,1,2,1,2,1,2, - 1,2,3,2,1185,8,2,1,2,1,2,1,2,1,2,3,2,1191,8,2,1,2,3,2,1194,8,2,1, - 2,1,2,1,2,1,2,1,2,3,2,1201,8,2,1,2,1,2,1,2,5,2,1206,8,2,10,2,12, - 2,1209,9,2,1,2,1,2,1,2,5,2,1214,8,2,10,2,12,2,1217,9,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,1231,8,2,10,2,12,2,1234, - 9,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,1258,8,2,10,2,12,2,1261,9,2,3,2, - 1263,8,2,1,2,1,2,5,2,1267,8,2,10,2,12,2,1270,9,2,1,2,1,2,1,2,1,2, - 5,2,1276,8,2,10,2,12,2,1279,9,2,1,2,1,2,1,2,1,2,5,2,1285,8,2,10, - 2,12,2,1288,9,2,1,2,1,2,1,2,3,2,1293,8,2,1,2,1,2,1,2,3,2,1298,8, - 2,1,2,1,2,1,2,3,2,1303,8,2,1,2,1,2,1,2,1,2,1,2,3,2,1310,8,2,1,2, - 1,2,1,2,3,2,1315,8,2,1,2,1,2,1,2,3,2,1320,8,2,1,2,1,2,1,2,1,2,1, - 2,3,2,1327,8,2,1,2,1,2,1,2,1,2,5,2,1333,8,2,10,2,12,2,1336,9,2,3, - 2,1338,8,2,1,3,1,3,3,3,1342,8,3,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,6, - 1,6,1,6,3,6,1354,8,6,1,6,1,6,3,6,1358,8,6,1,6,1,6,1,6,1,6,1,6,3, - 6,1365,8,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, - 6,1,6,1,6,1,6,1,6,3,6,1481,8,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,1489, - 8,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,1497,8,6,1,6,1,6,1,6,1,6,1,6,1,6, - 1,6,3,6,1506,8,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,3,6,1516,8,6,1, - 7,1,7,3,7,1520,8,7,1,7,3,7,1523,8,7,1,7,1,7,3,7,1527,8,7,1,7,1,7, - 1,8,1,8,3,8,1533,8,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,3,9, - 1545,8,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,3,10,1557, - 8,10,1,10,1,10,1,10,3,10,1562,8,10,1,11,1,11,1,11,1,12,1,12,1,12, - 1,13,3,13,1571,8,13,1,13,1,13,1,13,1,14,1,14,1,14,3,14,1579,8,14, - 1,14,1,14,1,14,3,14,1584,8,14,3,14,1586,8,14,1,14,1,14,1,14,1,14, - 1,14,1,14,3,14,1594,8,14,1,14,1,14,1,14,3,14,1599,8,14,1,14,1,14, - 3,14,1603,8,14,1,14,3,14,1606,8,14,1,14,1,14,1,14,1,14,1,14,1,14, - 3,14,1614,8,14,1,14,1,14,1,14,3,14,1619,8,14,1,14,1,14,1,14,1,14, - 1,14,1,14,1,14,3,14,1628,8,14,1,14,1,14,1,14,3,14,1633,8,14,1,14, - 3,14,1636,8,14,1,14,1,14,1,14,3,14,1641,8,14,1,14,1,14,3,14,1645, - 8,14,1,14,1,14,1,14,3,14,1650,8,14,3,14,1652,8,14,1,15,1,15,3,15, - 1656,8,15,1,16,1,16,1,16,1,16,1,16,5,16,1663,8,16,10,16,12,16,1666, - 9,16,1,16,1,16,1,17,1,17,1,17,3,17,1673,8,17,1,17,1,17,1,17,1,17, - 3,17,1679,8,17,1,18,1,18,1,19,1,19,1,20,1,20,1,20,1,20,1,20,3,20, - 1690,8,20,1,21,1,21,1,21,5,21,1695,8,21,10,21,12,21,1698,9,21,1, - 22,1,22,1,22,1,22,5,22,1704,8,22,10,22,12,22,1707,9,22,1,23,1,23, - 3,23,1711,8,23,1,23,3,23,1714,8,23,1,23,1,23,1,23,1,23,1,24,1,24, - 1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25, - 1,25,1,25,5,25,1737,8,25,10,25,12,25,1740,9,25,1,26,1,26,1,26,1, - 27,1,27,1,27,1,27,5,27,1749,8,27,10,27,12,27,1752,9,27,1,27,1,27, - 1,28,1,28,3,28,1758,8,28,1,28,3,28,1761,8,28,1,29,1,29,1,29,5,29, - 1766,8,29,10,29,12,29,1769,9,29,1,29,3,29,1772,8,29,1,30,1,30,1, - 30,1,30,3,30,1778,8,30,1,31,1,31,1,31,1,31,5,31,1784,8,31,10,31, - 12,31,1787,9,31,1,31,1,31,1,32,1,32,3,32,1793,8,32,1,32,3,32,1796, - 8,32,1,33,1,33,1,33,1,33,5,33,1802,8,33,10,33,12,33,1805,9,33,1, - 33,1,33,1,34,1,34,1,34,1,34,5,34,1813,8,34,10,34,12,34,1816,9,34, - 1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,3,35,1826,8,35,1,36,1,36, - 1,36,1,36,1,36,1,36,3,36,1834,8,36,1,37,1,37,1,37,1,37,3,37,1840, - 8,37,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,4,39,1850,8,39,11,39, - 12,39,1851,1,39,1,39,1,39,1,39,1,39,3,39,1859,8,39,1,39,1,39,1,39, - 1,39,1,39,3,39,1866,8,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39, - 1,39,1,39,3,39,1878,8,39,1,39,1,39,1,39,1,39,5,39,1884,8,39,10,39, - 12,39,1887,9,39,1,39,5,39,1890,8,39,10,39,12,39,1893,9,39,1,39,5, - 39,1896,8,39,10,39,12,39,1899,9,39,3,39,1901,8,39,1,40,1,40,1,41, - 1,41,1,42,1,42,1,43,1,43,1,44,1,44,1,45,1,45,1,46,1,46,3,46,1917, - 8,46,1,47,1,47,1,47,5,47,1922,8,47,10,47,12,47,1925,9,47,1,48,1, - 48,1,49,1,49,1,49,1,49,1,49,1,49,3,49,1935,8,49,1,50,1,50,1,50,1, - 50,1,50,5,50,1942,8,50,10,50,12,50,1945,9,50,3,50,1947,8,50,1,50, - 1,50,1,50,1,50,1,50,5,50,1954,8,50,10,50,12,50,1957,9,50,3,50,1959, - 8,50,1,50,1,50,1,50,1,50,1,50,5,50,1966,8,50,10,50,12,50,1969,9, - 50,3,50,1971,8,50,1,50,1,50,1,50,1,50,1,50,5,50,1978,8,50,10,50, - 12,50,1981,9,50,3,50,1983,8,50,1,50,3,50,1986,8,50,1,50,1,50,1,50, - 3,50,1991,8,50,3,50,1993,8,50,1,50,1,50,3,50,1997,8,50,1,51,1,51, - 1,51,1,52,1,52,1,52,1,52,1,52,1,52,3,52,2008,8,52,1,52,1,52,1,52, - 1,52,3,52,2014,8,52,1,52,1,52,1,52,1,52,3,52,2020,8,52,1,52,5,52, - 2023,8,52,10,52,12,52,2026,9,52,1,53,1,53,1,53,1,53,1,53,1,53,1, - 53,1,53,1,53,3,53,2037,8,53,1,54,1,54,3,54,2041,8,54,1,54,3,54,2044, - 8,54,1,54,1,54,3,54,2048,8,54,1,55,1,55,4,55,2052,8,55,11,55,12, - 55,2053,1,56,1,56,3,56,2058,8,56,1,56,1,56,1,56,1,56,5,56,2064,8, - 56,10,56,12,56,2067,9,56,1,56,3,56,2070,8,56,1,56,3,56,2073,8,56, - 1,56,3,56,2076,8,56,1,56,3,56,2079,8,56,1,56,1,56,3,56,2083,8,56, - 1,57,1,57,3,57,2087,8,57,1,57,5,57,2090,8,57,10,57,12,57,2093,9, - 57,1,57,3,57,2096,8,57,1,57,3,57,2099,8,57,1,57,3,57,2102,8,57,1, - 57,3,57,2105,8,57,1,57,1,57,3,57,2109,8,57,1,57,5,57,2112,8,57,10, - 57,12,57,2115,9,57,1,57,3,57,2118,8,57,1,57,3,57,2121,8,57,1,57, - 3,57,2124,8,57,1,57,3,57,2127,8,57,3,57,2129,8,57,1,58,1,58,1,58, - 1,58,3,58,2135,8,58,1,58,1,58,1,58,1,58,1,58,3,58,2142,8,58,1,58, - 1,58,1,58,3,58,2147,8,58,1,58,3,58,2150,8,58,1,58,3,58,2153,8,58, - 1,58,1,58,3,58,2157,8,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,58, - 3,58,2167,8,58,1,58,1,58,3,58,2171,8,58,3,58,2173,8,58,1,58,3,58, - 2176,8,58,1,58,1,58,3,58,2180,8,58,1,59,1,59,5,59,2184,8,59,10,59, - 12,59,2187,9,59,1,59,3,59,2190,8,59,1,59,1,59,1,60,1,60,1,60,1,61, - 1,61,1,61,1,61,3,61,2201,8,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62, - 1,62,3,62,2211,8,62,1,62,1,62,3,62,2215,8,62,1,62,1,62,1,62,1,63, - 1,63,1,63,1,63,1,63,1,63,1,63,3,63,2227,8,63,1,63,1,63,1,63,1,64, - 1,64,1,64,1,64,1,64,1,64,1,64,3,64,2239,8,64,1,65,1,65,1,65,1,65, - 1,65,1,65,1,65,1,65,1,65,1,65,1,65,5,65,2252,8,65,10,65,12,65,2255, - 9,65,1,65,1,65,3,65,2259,8,65,1,66,1,66,1,66,1,66,3,66,2265,8,66, - 1,67,1,67,1,67,5,67,2270,8,67,10,67,12,67,2273,9,67,1,68,1,68,1, - 68,1,68,1,69,1,69,1,69,1,70,1,70,1,70,1,71,1,71,1,71,3,71,2288,8, - 71,1,71,5,71,2291,8,71,10,71,12,71,2294,9,71,1,71,1,71,1,72,1,72, - 1,72,1,72,1,72,1,72,5,72,2304,8,72,10,72,12,72,2307,9,72,1,72,1, - 72,3,72,2311,8,72,1,73,1,73,1,73,1,73,5,73,2317,8,73,10,73,12,73, - 2320,9,73,1,73,5,73,2323,8,73,10,73,12,73,2326,9,73,1,73,3,73,2329, - 8,73,1,73,3,73,2332,8,73,1,74,1,74,1,75,3,75,2337,8,75,1,75,1,75, - 1,75,1,75,1,75,3,75,2344,8,75,1,75,1,75,1,75,1,75,3,75,2350,8,75, - 1,76,1,76,1,76,1,76,1,76,5,76,2357,8,76,10,76,12,76,2360,9,76,1, - 76,1,76,1,76,1,76,1,76,5,76,2367,8,76,10,76,12,76,2370,9,76,1,76, - 1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,5,76,2382,8,76,10,76, - 12,76,2385,9,76,1,76,1,76,3,76,2389,8,76,3,76,2391,8,76,1,77,1,77, - 1,77,3,77,2396,8,77,1,78,1,78,1,78,1,78,1,78,5,78,2403,8,78,10,78, - 12,78,2406,9,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,5,78,2416, - 8,78,10,78,12,78,2419,9,78,1,78,1,78,3,78,2423,8,78,1,79,1,79,3, - 79,2427,8,79,1,80,1,80,1,80,1,80,1,80,3,80,2434,8,80,1,80,1,80,1, - 80,3,80,2439,8,80,5,80,2441,8,80,10,80,12,80,2444,9,80,3,80,2446, - 8,80,1,80,3,80,2449,8,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,81, - 1,81,1,81,5,81,2461,8,81,10,81,12,81,2464,9,81,1,81,1,81,1,81,1, - 82,1,82,1,82,1,82,1,82,5,82,2474,8,82,10,82,12,82,2477,9,82,1,82, - 1,82,3,82,2481,8,82,1,83,1,83,3,83,2485,8,83,1,83,3,83,2488,8,83, - 1,84,1,84,3,84,2492,8,84,1,84,1,84,1,84,1,84,3,84,2498,8,84,1,84, - 3,84,2501,8,84,1,85,1,85,1,85,1,86,1,86,3,86,2508,8,86,1,87,1,87, - 1,87,1,87,1,87,1,87,1,87,1,87,5,87,2518,8,87,10,87,12,87,2521,9, - 87,1,87,1,87,1,88,1,88,1,88,1,88,5,88,2529,8,88,10,88,12,88,2532, - 9,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,5,88,2542,8,88,10,88, - 12,88,2545,9,88,1,88,1,88,1,89,1,89,1,89,1,89,5,89,2553,8,89,10, - 89,12,89,2556,9,89,1,89,1,89,3,89,2560,8,89,1,90,1,90,1,91,1,91, - 1,92,1,92,3,92,2568,8,92,1,93,1,93,1,94,3,94,2573,8,94,1,94,1,94, - 1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,97,1,97,1,97,3,97,2587,8,97, - 1,97,1,97,1,97,1,97,1,97,5,97,2594,8,97,10,97,12,97,2597,9,97,3, - 97,2599,8,97,1,97,1,97,1,97,3,97,2604,8,97,1,97,1,97,1,97,5,97,2609, - 8,97,10,97,12,97,2612,9,97,3,97,2614,8,97,1,98,1,98,1,99,1,99,3, - 99,2620,8,99,1,99,1,99,5,99,2624,8,99,10,99,12,99,2627,9,99,3,99, - 2629,8,99,1,100,1,100,1,100,3,100,2634,8,100,1,101,1,101,1,101,3, - 101,2639,8,101,1,101,1,101,3,101,2643,8,101,1,101,1,101,1,101,1, - 101,3,101,2649,8,101,1,101,1,101,3,101,2653,8,101,1,102,3,102,2656, - 8,102,1,102,1,102,1,102,3,102,2661,8,102,1,102,3,102,2664,8,102, - 1,102,1,102,1,102,3,102,2669,8,102,1,102,1,102,3,102,2673,8,102, - 1,102,3,102,2676,8,102,1,102,3,102,2679,8,102,1,103,1,103,1,103, - 1,103,3,103,2685,8,103,1,104,1,104,1,104,3,104,2690,8,104,1,104, - 1,104,1,104,1,104,1,104,3,104,2697,8,104,1,105,3,105,2700,8,105, - 1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105,1,105, - 1,105,1,105,1,105,1,105,1,105,3,105,2718,8,105,3,105,2720,8,105, - 1,105,3,105,2723,8,105,1,106,1,106,1,106,1,106,1,107,1,107,1,107, - 5,107,2732,8,107,10,107,12,107,2735,9,107,1,108,1,108,1,108,1,108, - 5,108,2741,8,108,10,108,12,108,2744,9,108,1,108,1,108,1,109,1,109, - 3,109,2750,8,109,1,110,1,110,1,110,1,110,5,110,2756,8,110,10,110, - 12,110,2759,9,110,1,110,1,110,1,111,1,111,3,111,2765,8,111,1,112, - 1,112,1,112,3,112,2770,8,112,1,112,3,112,2773,8,112,1,112,3,112, - 2776,8,112,1,112,1,112,1,112,1,112,1,112,1,112,3,112,2784,8,112, - 1,112,1,112,1,112,1,112,1,112,1,112,3,112,2792,8,112,1,112,1,112, - 1,112,1,112,3,112,2798,8,112,1,113,1,113,1,113,1,113,5,113,2804, - 8,113,10,113,12,113,2807,9,113,1,113,1,113,1,114,1,114,1,114,3,114, - 2814,8,114,1,114,1,114,1,114,1,114,1,114,3,114,2821,8,114,1,114, - 1,114,1,114,1,114,1,114,3,114,2828,8,114,3,114,2830,8,114,1,115, - 1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,5,115,2841,8,115, - 10,115,12,115,2844,9,115,1,115,1,115,1,115,3,115,2849,8,115,3,115, - 2851,8,115,1,115,1,115,1,115,1,115,1,115,1,115,5,115,2859,8,115, - 10,115,12,115,2862,9,115,1,115,1,115,1,115,3,115,2867,8,115,3,115, - 2869,8,115,1,116,1,116,1,116,1,116,1,117,1,117,3,117,2877,8,117, - 1,118,1,118,3,118,2881,8,118,1,119,1,119,1,119,1,119,1,119,5,119, - 2888,8,119,10,119,12,119,2891,9,119,3,119,2893,8,119,1,119,1,119, - 1,119,1,120,3,120,2899,8,120,1,120,1,120,3,120,2903,8,120,3,120, - 2905,8,120,1,121,1,121,1,121,1,121,1,121,1,121,1,121,3,121,2914, - 8,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121,1,121, - 3,121,2926,8,121,3,121,2928,8,121,1,121,1,121,1,121,1,121,1,121, - 3,121,2935,8,121,1,121,1,121,1,121,1,121,1,121,3,121,2942,8,121, - 1,121,1,121,1,121,1,121,3,121,2948,8,121,1,121,1,121,1,121,1,121, - 3,121,2954,8,121,3,121,2956,8,121,1,122,1,122,1,122,5,122,2961,8, - 122,10,122,12,122,2964,9,122,1,123,1,123,1,123,5,123,2969,8,123, - 10,123,12,123,2972,9,123,1,124,1,124,1,124,5,124,2977,8,124,10,124, - 12,124,2980,9,124,1,125,1,125,1,125,3,125,2985,8,125,1,126,1,126, - 1,126,3,126,2990,8,126,1,126,1,126,1,127,1,127,1,127,3,127,2997, - 8,127,1,127,1,127,1,128,1,128,3,128,3003,8,128,1,128,3,128,3006, - 8,128,1,128,1,128,3,128,3010,8,128,3,128,3012,8,128,1,129,1,129, - 1,129,5,129,3017,8,129,10,129,12,129,3020,9,129,1,130,1,130,1,130, - 1,130,5,130,3026,8,130,10,130,12,130,3029,9,130,1,130,1,130,1,131, - 1,131,3,131,3035,8,131,1,132,1,132,1,132,1,132,1,132,1,132,5,132, - 3043,8,132,10,132,12,132,3046,9,132,1,132,1,132,3,132,3050,8,132, - 1,133,1,133,3,133,3054,8,133,1,134,1,134,1,135,1,135,1,135,1,135, - 1,136,1,136,3,136,3064,8,136,1,137,1,137,1,137,5,137,3069,8,137, - 10,137,12,137,3072,9,137,1,138,1,138,1,138,1,138,1,138,1,138,1,138, - 1,138,1,138,1,138,3,138,3084,8,138,3,138,3086,8,138,1,138,1,138, - 1,138,1,138,1,138,1,138,5,138,3094,8,138,10,138,12,138,3097,9,138, - 1,139,3,139,3100,8,139,1,139,1,139,1,139,1,139,1,139,1,139,3,139, - 3108,8,139,1,139,1,139,1,139,1,139,1,139,5,139,3115,8,139,10,139, - 12,139,3118,9,139,1,139,1,139,1,139,3,139,3123,8,139,1,139,1,139, - 1,139,1,139,1,139,1,139,3,139,3131,8,139,1,139,1,139,1,139,3,139, - 3136,8,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,5,139, - 3146,8,139,10,139,12,139,3149,9,139,1,139,1,139,3,139,3153,8,139, - 1,139,3,139,3156,8,139,1,139,1,139,1,139,1,139,3,139,3162,8,139, - 1,139,1,139,3,139,3166,8,139,1,139,1,139,1,139,3,139,3171,8,139, - 1,139,1,139,1,139,3,139,3176,8,139,1,139,1,139,1,139,3,139,3181, - 8,139,1,140,1,140,1,140,1,140,3,140,3187,8,140,1,140,1,140,1,140, - 1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140, - 1,140,1,140,1,140,1,140,1,140,5,140,3208,8,140,10,140,12,140,3211, - 9,140,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,3,142,3221, - 8,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 3,142,3233,8,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 4,142,3243,8,142,11,142,12,142,3244,1,142,1,142,3,142,3249,8,142, - 1,142,1,142,1,142,1,142,1,142,4,142,3256,8,142,11,142,12,142,3257, - 1,142,1,142,3,142,3262,8,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,5,142,3278,8,142, - 10,142,12,142,3281,9,142,3,142,3283,8,142,1,142,1,142,1,142,1,142, - 1,142,1,142,3,142,3291,8,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,142,3,142,3300,8,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 3,142,3309,8,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 4,142,3330,8,142,11,142,12,142,3331,1,142,1,142,1,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,3,142,3348, - 8,142,1,142,1,142,1,142,5,142,3353,8,142,10,142,12,142,3356,9,142, - 3,142,3358,8,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,3,142, - 3367,8,142,1,142,1,142,3,142,3371,8,142,1,142,1,142,3,142,3375,8, - 142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,4,142,3385,8, - 142,11,142,12,142,3386,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,3,142,3412,8,142,1,142,1,142,1,142, - 1,142,1,142,3,142,3419,8,142,1,142,3,142,3422,8,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 3,142,3437,8,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142, - 3,142,3458,8,142,1,142,1,142,3,142,3462,8,142,3,142,3464,8,142,1, - 142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,5,142,3474,8,142,10, - 142,12,142,3477,9,142,1,143,1,143,1,143,1,143,1,143,1,143,1,143, - 3,143,3486,8,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144, - 1,144,1,144,1,144,4,144,3499,8,144,11,144,12,144,3500,3,144,3503, - 8,144,1,145,1,145,1,146,1,146,1,147,1,147,1,148,1,148,1,149,1,149, - 1,149,3,149,3516,8,149,1,150,1,150,3,150,3520,8,150,1,151,1,151, - 1,151,4,151,3525,8,151,11,151,12,151,3526,1,152,1,152,1,152,3,152, - 3532,8,152,1,153,1,153,1,153,1,153,1,153,1,154,3,154,3540,8,154, - 1,154,1,154,1,154,3,154,3545,8,154,1,155,1,155,1,156,1,156,1,157, - 1,157,1,157,3,157,3554,8,157,1,158,1,158,1,158,1,158,1,158,1,158, - 1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, - 1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1,158, - 1,158,1,158,3,158,3586,8,158,1,159,1,159,1,159,1,159,1,159,1,159, - 1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,1,159,3,159,3603, - 8,159,1,159,1,159,3,159,3607,8,159,1,159,1,159,1,159,1,159,3,159, - 3613,8,159,1,159,1,159,1,159,1,159,3,159,3619,8,159,1,159,1,159, - 1,159,1,159,1,159,5,159,3626,8,159,10,159,12,159,3629,9,159,1,159, - 3,159,3632,8,159,3,159,3634,8,159,1,160,1,160,1,160,5,160,3639,8, - 160,10,160,12,160,3642,9,160,1,161,1,161,1,161,5,161,3647,8,161, - 10,161,12,161,3650,9,161,1,162,1,162,1,162,5,162,3655,8,162,10,162, - 12,162,3658,9,162,1,163,1,163,1,163,5,163,3663,8,163,10,163,12,163, - 3666,9,163,1,164,1,164,1,164,1,164,1,164,3,164,3673,8,164,1,165, - 1,165,1,165,1,166,1,166,1,166,1,167,1,167,1,167,5,167,3684,8,167, - 10,167,12,167,3687,9,167,1,168,1,168,1,168,1,168,3,168,3693,8,168, - 1,168,3,168,3696,8,168,1,169,1,169,1,169,5,169,3701,8,169,10,169, - 12,169,3704,9,169,1,170,1,170,1,170,5,170,3709,8,170,10,170,12,170, - 3712,9,170,1,171,1,171,1,171,1,171,1,171,3,171,3719,8,171,1,172, - 1,172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173,5,173,3731, - 8,173,10,173,12,173,3734,9,173,1,174,1,174,3,174,3738,8,174,1,174, - 1,174,1,174,3,174,3743,8,174,1,174,3,174,3746,8,174,1,175,1,175, - 1,175,1,175,1,175,1,176,1,176,1,176,1,176,5,176,3757,8,176,10,176, - 12,176,3760,9,176,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178, - 1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179,1,179, - 5,179,3781,8,179,10,179,12,179,3784,9,179,1,179,1,179,1,179,1,179, - 1,179,5,179,3791,8,179,10,179,12,179,3794,9,179,3,179,3796,8,179, - 1,179,1,179,1,179,1,179,1,179,5,179,3803,8,179,10,179,12,179,3806, - 9,179,3,179,3808,8,179,3,179,3810,8,179,1,179,3,179,3813,8,179,1, - 179,3,179,3816,8,179,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1, - 180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,3,180,3834,8, - 180,1,181,1,181,1,181,1,181,1,181,1,181,1,181,3,181,3843,8,181,1, - 182,1,182,1,182,5,182,3848,8,182,10,182,12,182,3851,9,182,1,183, - 1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,3,183,3862,8,183, - 1,184,1,184,1,185,1,185,1,185,5,185,3869,8,185,10,185,12,185,3872, - 9,185,1,186,1,186,1,186,1,187,1,187,4,187,3879,8,187,11,187,12,187, - 3880,1,187,3,187,3884,8,187,1,188,1,188,3,188,3888,8,188,1,189,1, - 189,1,189,1,189,3,189,3894,8,189,1,190,1,190,1,191,1,191,1,192,3, - 192,3901,8,192,1,192,1,192,3,192,3905,8,192,1,192,1,192,3,192,3909, - 8,192,1,192,1,192,3,192,3913,8,192,1,192,1,192,3,192,3917,8,192, - 1,192,1,192,3,192,3921,8,192,1,192,1,192,3,192,3925,8,192,1,192, - 1,192,3,192,3929,8,192,1,192,1,192,3,192,3933,8,192,1,192,1,192, - 3,192,3937,8,192,1,192,3,192,3940,8,192,1,193,1,193,1,193,1,193, - 1,193,1,193,1,193,1,193,1,193,1,193,1,193,3,193,3953,8,193,1,194, - 1,194,1,195,1,195,3,195,3959,8,195,1,196,1,196,3,196,3963,8,196, - 1,197,1,197,1,198,1,198,1,199,1,199,1,199,9,1137,1207,1215,1232, - 1259,1268,1277,1286,1334,4,104,276,280,284,200,0,2,4,6,8,10,12,14, - 16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58, - 60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100, - 102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132, - 134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164, - 166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196, - 198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228, - 230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260, - 262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292, - 294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324, - 326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356, - 358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388, - 390,392,394,396,398,0,64,2,0,78,78,229,229,2,0,34,34,247,247,2,0, - 123,123,140,140,2,0,11,11,39,39,2,0,91,91,98,98,5,0,46,46,58,58, - 108,108,122,122,173,173,1,0,86,87,2,0,108,108,122,122,3,0,8,8,96, - 96,289,289,2,0,8,8,167,167,1,0,335,336,3,0,72,72,190,190,261,261, - 3,0,73,73,191,191,262,262,4,0,102,102,148,148,270,270,323,323,3, - 0,102,102,270,270,323,323,2,0,21,21,86,86,2,0,116,116,157,157,3, - 0,10,10,290,290,331,331,2,0,292,292,337,337,2,0,291,291,303,303, - 2,0,61,61,256,256,2,0,104,104,141,141,2,0,10,10,92,92,2,0,382,382, - 384,384,2,0,93,93,217,217,2,0,209,209,278,278,2,0,197,197,360,360, - 1,0,251,252,1,0,163,164,3,0,10,10,16,16,277,277,3,0,111,111,316, - 316,325,325,2,0,361,362,366,366,2,0,94,94,363,365,2,0,361,362,369, - 369,11,0,67,67,69,69,134,134,180,180,182,182,184,184,186,186,231, - 231,259,259,341,341,348,348,4,0,63,63,65,66,268,268,331,331,2,0, - 74,75,306,306,3,0,76,77,302,302,307,307,2,0,36,36,318,318,2,0,138, - 138,246,246,1,0,287,288,2,0,4,4,123,123,2,0,4,4,119,119,3,0,28,28, - 160,160,311,311,1,0,220,221,1,0,352,359,2,0,94,94,361,370,4,0,14, - 14,140,140,197,197,208,208,2,0,111,111,316,316,1,0,361,362,7,0,67, - 68,134,135,180,187,192,193,259,260,341,342,348,349,6,0,67,67,134, - 134,184,184,186,186,259,259,348,348,2,0,186,186,348,348,4,0,67,67, - 134,134,184,184,259,259,3,0,134,134,184,184,259,259,2,0,82,82,352, - 352,2,0,118,118,226,226,2,0,378,378,389,389,1,0,383,384,2,0,96,96, - 269,269,1,0,377,378,52,0,8,9,11,13,15,15,17,19,21,22,24,27,29,34, - 37,41,43,46,48,48,50,56,58,58,61,62,67,91,93,96,98,98,101,101,103, - 110,113,113,115,118,121,122,125,128,131,131,133,139,141,143,145, - 147,149,151,154,154,156,157,159,159,163,193,195,195,199,201,205, - 207,210,210,212,213,215,219,222,226,228,238,240,249,251,262,264, - 267,269,276,278,292,294,299,302,308,310,310,312,322,326,330,333, - 342,345,345,348,351,16,0,15,15,60,60,102,102,124,124,144,144,148, - 148,155,155,158,158,161,161,194,194,203,203,250,250,264,264,270, - 270,323,323,332,332,19,0,8,14,16,59,61,101,103,122,125,143,145,147, - 149,154,156,157,159,160,162,193,195,195,197,202,204,249,251,262, - 265,269,271,292,294,322,324,331,333,351,4586,0,403,1,0,0,0,2,408, - 1,0,0,0,4,1337,1,0,0,0,6,1341,1,0,0,0,8,1343,1,0,0,0,10,1345,1,0, - 0,0,12,1515,1,0,0,0,14,1517,1,0,0,0,16,1532,1,0,0,0,18,1538,1,0, - 0,0,20,1550,1,0,0,0,22,1563,1,0,0,0,24,1566,1,0,0,0,26,1570,1,0, - 0,0,28,1651,1,0,0,0,30,1653,1,0,0,0,32,1657,1,0,0,0,34,1678,1,0, - 0,0,36,1680,1,0,0,0,38,1682,1,0,0,0,40,1689,1,0,0,0,42,1691,1,0, - 0,0,44,1699,1,0,0,0,46,1708,1,0,0,0,48,1719,1,0,0,0,50,1738,1,0, - 0,0,52,1741,1,0,0,0,54,1744,1,0,0,0,56,1755,1,0,0,0,58,1771,1,0, - 0,0,60,1777,1,0,0,0,62,1779,1,0,0,0,64,1790,1,0,0,0,66,1797,1,0, - 0,0,68,1808,1,0,0,0,70,1825,1,0,0,0,72,1833,1,0,0,0,74,1835,1,0, - 0,0,76,1841,1,0,0,0,78,1900,1,0,0,0,80,1902,1,0,0,0,82,1904,1,0, - 0,0,84,1906,1,0,0,0,86,1908,1,0,0,0,88,1910,1,0,0,0,90,1912,1,0, - 0,0,92,1916,1,0,0,0,94,1918,1,0,0,0,96,1926,1,0,0,0,98,1934,1,0, - 0,0,100,1946,1,0,0,0,102,1998,1,0,0,0,104,2001,1,0,0,0,106,2036, - 1,0,0,0,108,2040,1,0,0,0,110,2049,1,0,0,0,112,2082,1,0,0,0,114,2128, - 1,0,0,0,116,2149,1,0,0,0,118,2181,1,0,0,0,120,2193,1,0,0,0,122,2196, - 1,0,0,0,124,2205,1,0,0,0,126,2219,1,0,0,0,128,2238,1,0,0,0,130,2258, - 1,0,0,0,132,2264,1,0,0,0,134,2266,1,0,0,0,136,2274,1,0,0,0,138,2278, - 1,0,0,0,140,2281,1,0,0,0,142,2284,1,0,0,0,144,2310,1,0,0,0,146,2312, - 1,0,0,0,148,2333,1,0,0,0,150,2349,1,0,0,0,152,2390,1,0,0,0,154,2395, - 1,0,0,0,156,2422,1,0,0,0,158,2426,1,0,0,0,160,2448,1,0,0,0,162,2450, - 1,0,0,0,164,2480,1,0,0,0,166,2482,1,0,0,0,168,2489,1,0,0,0,170,2502, - 1,0,0,0,172,2507,1,0,0,0,174,2509,1,0,0,0,176,2524,1,0,0,0,178,2548, - 1,0,0,0,180,2561,1,0,0,0,182,2563,1,0,0,0,184,2565,1,0,0,0,186,2569, - 1,0,0,0,188,2572,1,0,0,0,190,2576,1,0,0,0,192,2580,1,0,0,0,194,2583, - 1,0,0,0,196,2615,1,0,0,0,198,2628,1,0,0,0,200,2633,1,0,0,0,202,2652, - 1,0,0,0,204,2678,1,0,0,0,206,2684,1,0,0,0,208,2686,1,0,0,0,210,2722, - 1,0,0,0,212,2724,1,0,0,0,214,2728,1,0,0,0,216,2736,1,0,0,0,218,2747, - 1,0,0,0,220,2751,1,0,0,0,222,2762,1,0,0,0,224,2797,1,0,0,0,226,2799, - 1,0,0,0,228,2829,1,0,0,0,230,2850,1,0,0,0,232,2870,1,0,0,0,234,2876, - 1,0,0,0,236,2880,1,0,0,0,238,2882,1,0,0,0,240,2904,1,0,0,0,242,2955, - 1,0,0,0,244,2957,1,0,0,0,246,2965,1,0,0,0,248,2973,1,0,0,0,250,2981, - 1,0,0,0,252,2989,1,0,0,0,254,2996,1,0,0,0,256,3002,1,0,0,0,258,3013, - 1,0,0,0,260,3021,1,0,0,0,262,3034,1,0,0,0,264,3049,1,0,0,0,266,3053, - 1,0,0,0,268,3055,1,0,0,0,270,3057,1,0,0,0,272,3063,1,0,0,0,274,3065, - 1,0,0,0,276,3085,1,0,0,0,278,3180,1,0,0,0,280,3186,1,0,0,0,282,3212, - 1,0,0,0,284,3463,1,0,0,0,286,3485,1,0,0,0,288,3502,1,0,0,0,290,3504, - 1,0,0,0,292,3506,1,0,0,0,294,3508,1,0,0,0,296,3510,1,0,0,0,298,3512, - 1,0,0,0,300,3517,1,0,0,0,302,3524,1,0,0,0,304,3528,1,0,0,0,306,3533, - 1,0,0,0,308,3539,1,0,0,0,310,3546,1,0,0,0,312,3548,1,0,0,0,314,3553, - 1,0,0,0,316,3585,1,0,0,0,318,3633,1,0,0,0,320,3635,1,0,0,0,322,3643, - 1,0,0,0,324,3651,1,0,0,0,326,3659,1,0,0,0,328,3672,1,0,0,0,330,3674, - 1,0,0,0,332,3677,1,0,0,0,334,3680,1,0,0,0,336,3688,1,0,0,0,338,3697, - 1,0,0,0,340,3705,1,0,0,0,342,3718,1,0,0,0,344,3720,1,0,0,0,346,3727, - 1,0,0,0,348,3735,1,0,0,0,350,3747,1,0,0,0,352,3752,1,0,0,0,354,3761, - 1,0,0,0,356,3765,1,0,0,0,358,3815,1,0,0,0,360,3833,1,0,0,0,362,3842, - 1,0,0,0,364,3844,1,0,0,0,366,3861,1,0,0,0,368,3863,1,0,0,0,370,3865, - 1,0,0,0,372,3873,1,0,0,0,374,3883,1,0,0,0,376,3887,1,0,0,0,378,3893, - 1,0,0,0,380,3895,1,0,0,0,382,3897,1,0,0,0,384,3939,1,0,0,0,386,3952, - 1,0,0,0,388,3954,1,0,0,0,390,3958,1,0,0,0,392,3962,1,0,0,0,394,3964, - 1,0,0,0,396,3966,1,0,0,0,398,3968,1,0,0,0,400,402,3,2,1,0,401,400, - 1,0,0,0,402,405,1,0,0,0,403,401,1,0,0,0,403,404,1,0,0,0,404,406, - 1,0,0,0,405,403,1,0,0,0,406,407,5,0,0,1,407,1,1,0,0,0,408,410,3, - 4,2,0,409,411,5,1,0,0,410,409,1,0,0,0,410,411,1,0,0,0,411,3,1,0, - 0,0,412,1338,3,26,13,0,413,415,3,44,22,0,414,413,1,0,0,0,414,415, - 1,0,0,0,415,416,1,0,0,0,416,1338,3,78,39,0,417,419,5,330,0,0,418, - 420,3,36,18,0,419,418,1,0,0,0,419,420,1,0,0,0,420,421,1,0,0,0,421, - 1338,3,80,40,0,422,423,5,269,0,0,423,426,5,37,0,0,424,427,3,376, - 188,0,425,427,3,388,194,0,426,424,1,0,0,0,426,425,1,0,0,0,427,1338, - 1,0,0,0,428,429,5,59,0,0,429,431,3,36,18,0,430,432,3,190,95,0,431, - 430,1,0,0,0,431,432,1,0,0,0,432,433,1,0,0,0,433,441,3,82,41,0,434, - 440,3,24,12,0,435,440,3,22,11,0,436,437,5,346,0,0,437,438,7,0,0, - 0,438,440,3,54,27,0,439,434,1,0,0,0,439,435,1,0,0,0,439,436,1,0, - 0,0,440,443,1,0,0,0,441,439,1,0,0,0,441,442,1,0,0,0,442,1338,1,0, - 0,0,443,441,1,0,0,0,444,445,5,11,0,0,445,446,3,36,18,0,446,447,3, - 80,40,0,447,448,5,269,0,0,448,449,7,0,0,0,449,450,3,54,27,0,450, - 1338,1,0,0,0,451,452,5,11,0,0,452,453,3,36,18,0,453,454,3,80,40, - 0,454,455,5,269,0,0,455,456,3,22,11,0,456,1338,1,0,0,0,457,458,5, - 96,0,0,458,460,3,36,18,0,459,461,3,192,96,0,460,459,1,0,0,0,460, - 461,1,0,0,0,461,462,1,0,0,0,462,464,3,80,40,0,463,465,7,1,0,0,464, - 463,1,0,0,0,464,465,1,0,0,0,465,1338,1,0,0,0,466,467,5,273,0,0,467, - 470,3,38,19,0,468,469,7,2,0,0,469,471,3,246,123,0,470,468,1,0,0, - 0,470,471,1,0,0,0,471,476,1,0,0,0,472,474,5,163,0,0,473,472,1,0, - 0,0,473,474,1,0,0,0,474,475,1,0,0,0,475,477,3,388,194,0,476,473, - 1,0,0,0,476,477,1,0,0,0,477,1338,1,0,0,0,478,483,3,14,7,0,479,480, - 5,2,0,0,480,481,3,338,169,0,481,482,5,3,0,0,482,484,1,0,0,0,483, - 479,1,0,0,0,483,484,1,0,0,0,484,486,1,0,0,0,485,487,3,48,24,0,486, - 485,1,0,0,0,486,487,1,0,0,0,487,488,1,0,0,0,488,493,3,50,25,0,489, - 491,5,20,0,0,490,489,1,0,0,0,490,491,1,0,0,0,491,492,1,0,0,0,492, - 494,3,26,13,0,493,490,1,0,0,0,493,494,1,0,0,0,494,1338,1,0,0,0,495, - 496,5,59,0,0,496,498,5,293,0,0,497,499,3,190,95,0,498,497,1,0,0, - 0,498,499,1,0,0,0,499,500,1,0,0,0,500,501,3,84,42,0,501,502,5,163, - 0,0,502,512,3,86,43,0,503,511,3,48,24,0,504,511,3,242,121,0,505, - 511,3,70,35,0,506,511,3,22,11,0,507,508,5,297,0,0,508,511,3,54,27, - 0,509,511,3,52,26,0,510,503,1,0,0,0,510,504,1,0,0,0,510,505,1,0, - 0,0,510,506,1,0,0,0,510,507,1,0,0,0,510,509,1,0,0,0,511,514,1,0, - 0,0,512,510,1,0,0,0,512,513,1,0,0,0,513,1338,1,0,0,0,514,512,1,0, - 0,0,515,520,3,16,8,0,516,517,5,2,0,0,517,518,3,338,169,0,518,519, - 5,3,0,0,519,521,1,0,0,0,520,516,1,0,0,0,520,521,1,0,0,0,521,523, - 1,0,0,0,522,524,3,48,24,0,523,522,1,0,0,0,523,524,1,0,0,0,524,525, - 1,0,0,0,525,530,3,50,25,0,526,528,5,20,0,0,527,526,1,0,0,0,527,528, - 1,0,0,0,528,529,1,0,0,0,529,531,3,26,13,0,530,527,1,0,0,0,530,531, - 1,0,0,0,531,1338,1,0,0,0,532,533,5,13,0,0,533,534,5,293,0,0,534, - 536,3,86,43,0,535,537,3,32,16,0,536,535,1,0,0,0,536,537,1,0,0,0, - 537,538,1,0,0,0,538,539,5,55,0,0,539,547,5,282,0,0,540,548,5,196, - 0,0,541,542,5,119,0,0,542,543,5,50,0,0,543,548,3,94,47,0,544,545, - 5,119,0,0,545,546,5,10,0,0,546,548,5,50,0,0,547,540,1,0,0,0,547, - 541,1,0,0,0,547,544,1,0,0,0,547,548,1,0,0,0,548,1338,1,0,0,0,549, - 550,5,13,0,0,550,553,5,294,0,0,551,552,7,2,0,0,552,554,3,80,40,0, - 553,551,1,0,0,0,553,554,1,0,0,0,554,555,1,0,0,0,555,556,5,55,0,0, - 556,558,5,282,0,0,557,559,5,196,0,0,558,557,1,0,0,0,558,559,1,0, - 0,0,559,1338,1,0,0,0,560,561,5,11,0,0,561,562,5,293,0,0,562,563, - 3,86,43,0,563,564,5,8,0,0,564,565,5,49,0,0,565,566,3,322,161,0,566, - 1338,1,0,0,0,567,568,5,11,0,0,568,569,5,293,0,0,569,570,3,86,43, - 0,570,571,5,8,0,0,571,572,5,50,0,0,572,573,5,2,0,0,573,574,3,320, - 160,0,574,575,5,3,0,0,575,1338,1,0,0,0,576,577,5,11,0,0,577,578, - 5,293,0,0,578,579,3,86,43,0,579,580,5,241,0,0,580,581,5,49,0,0,581, - 582,3,92,46,0,582,583,5,309,0,0,583,584,3,96,48,0,584,1338,1,0,0, - 0,585,586,5,11,0,0,586,587,5,293,0,0,587,588,3,86,43,0,588,589,5, - 96,0,0,589,591,5,49,0,0,590,592,3,192,96,0,591,590,1,0,0,0,591,592, - 1,0,0,0,592,593,1,0,0,0,593,594,3,92,46,0,594,1338,1,0,0,0,595,596, - 5,11,0,0,596,597,5,293,0,0,597,598,3,86,43,0,598,599,5,96,0,0,599, - 601,5,50,0,0,600,602,3,192,96,0,601,600,1,0,0,0,601,602,1,0,0,0, - 602,603,1,0,0,0,603,604,5,2,0,0,604,605,3,94,47,0,605,606,5,3,0, - 0,606,1338,1,0,0,0,607,612,5,11,0,0,608,609,5,293,0,0,609,613,3, - 86,43,0,610,611,5,338,0,0,611,613,3,90,45,0,612,608,1,0,0,0,612, - 610,1,0,0,0,613,614,1,0,0,0,614,615,5,241,0,0,615,616,5,309,0,0, - 616,617,3,246,123,0,617,1338,1,0,0,0,618,623,5,11,0,0,619,620,5, - 293,0,0,620,624,3,86,43,0,621,622,5,338,0,0,622,624,3,90,45,0,623, - 619,1,0,0,0,623,621,1,0,0,0,624,625,1,0,0,0,625,626,5,269,0,0,626, - 627,5,297,0,0,627,628,3,54,27,0,628,1338,1,0,0,0,629,634,5,11,0, - 0,630,631,5,293,0,0,631,635,3,86,43,0,632,633,5,338,0,0,633,635, - 3,90,45,0,634,630,1,0,0,0,634,632,1,0,0,0,635,636,1,0,0,0,636,637, - 5,328,0,0,637,639,5,297,0,0,638,640,3,192,96,0,639,638,1,0,0,0,639, - 640,1,0,0,0,640,641,1,0,0,0,641,642,3,54,27,0,642,1338,1,0,0,0,643, - 644,5,11,0,0,644,645,5,293,0,0,645,646,3,86,43,0,646,648,7,3,0,0, - 647,649,5,49,0,0,648,647,1,0,0,0,648,649,1,0,0,0,649,650,1,0,0,0, - 650,652,3,92,46,0,651,653,3,386,193,0,652,651,1,0,0,0,652,653,1, - 0,0,0,653,1338,1,0,0,0,654,655,5,11,0,0,655,656,5,293,0,0,656,658, - 3,86,43,0,657,659,3,32,16,0,658,657,1,0,0,0,658,659,1,0,0,0,659, - 660,1,0,0,0,660,662,5,39,0,0,661,663,5,49,0,0,662,661,1,0,0,0,662, - 663,1,0,0,0,663,664,1,0,0,0,664,665,3,92,46,0,665,667,3,336,168, - 0,666,668,3,314,157,0,667,666,1,0,0,0,667,668,1,0,0,0,668,1338,1, - 0,0,0,669,670,5,11,0,0,670,671,5,293,0,0,671,673,3,86,43,0,672,674, - 3,32,16,0,673,672,1,0,0,0,673,674,1,0,0,0,674,675,1,0,0,0,675,676, - 5,244,0,0,676,677,5,50,0,0,677,678,5,2,0,0,678,679,3,324,162,0,679, - 680,5,3,0,0,680,1338,1,0,0,0,681,682,5,11,0,0,682,683,5,293,0,0, - 683,685,3,86,43,0,684,686,3,32,16,0,685,684,1,0,0,0,685,686,1,0, - 0,0,686,687,1,0,0,0,687,688,5,269,0,0,688,689,5,266,0,0,689,693, - 3,388,194,0,690,691,5,346,0,0,691,692,5,267,0,0,692,694,3,54,27, - 0,693,690,1,0,0,0,693,694,1,0,0,0,694,1338,1,0,0,0,695,696,5,11, - 0,0,696,697,5,293,0,0,697,699,3,86,43,0,698,700,3,32,16,0,699,698, - 1,0,0,0,699,700,1,0,0,0,700,701,1,0,0,0,701,702,5,269,0,0,702,703, - 5,267,0,0,703,704,3,54,27,0,704,1338,1,0,0,0,705,710,5,11,0,0,706, - 707,5,293,0,0,707,711,3,86,43,0,708,709,5,338,0,0,709,711,3,90,45, - 0,710,706,1,0,0,0,710,708,1,0,0,0,711,712,1,0,0,0,712,714,5,8,0, - 0,713,715,3,190,95,0,714,713,1,0,0,0,714,715,1,0,0,0,715,717,1,0, - 0,0,716,718,3,30,15,0,717,716,1,0,0,0,718,719,1,0,0,0,719,717,1, - 0,0,0,719,720,1,0,0,0,720,1338,1,0,0,0,721,722,5,11,0,0,722,723, - 5,293,0,0,723,724,3,86,43,0,724,725,3,32,16,0,725,726,5,241,0,0, - 726,727,5,309,0,0,727,728,3,32,16,0,728,1338,1,0,0,0,729,734,5,11, - 0,0,730,731,5,293,0,0,731,735,3,86,43,0,732,733,5,338,0,0,733,735, - 3,90,45,0,734,730,1,0,0,0,734,732,1,0,0,0,735,736,1,0,0,0,736,738, - 5,96,0,0,737,739,3,192,96,0,738,737,1,0,0,0,738,739,1,0,0,0,739, - 740,1,0,0,0,740,745,3,32,16,0,741,742,5,4,0,0,742,744,3,32,16,0, - 743,741,1,0,0,0,744,747,1,0,0,0,745,743,1,0,0,0,745,746,1,0,0,0, - 746,749,1,0,0,0,747,745,1,0,0,0,748,750,5,230,0,0,749,748,1,0,0, - 0,749,750,1,0,0,0,750,1338,1,0,0,0,751,752,5,11,0,0,752,753,5,293, - 0,0,753,755,3,86,43,0,754,756,3,32,16,0,755,754,1,0,0,0,755,756, - 1,0,0,0,756,757,1,0,0,0,757,758,5,269,0,0,758,759,3,22,11,0,759, - 1338,1,0,0,0,760,761,5,11,0,0,761,762,5,293,0,0,762,763,3,86,43, - 0,763,764,5,237,0,0,764,765,5,219,0,0,765,1338,1,0,0,0,766,767,5, - 11,0,0,767,768,5,176,0,0,768,769,5,338,0,0,769,770,3,90,45,0,770, - 771,7,4,0,0,771,772,5,248,0,0,772,1338,1,0,0,0,773,774,5,11,0,0, - 774,775,5,176,0,0,775,776,5,338,0,0,776,777,3,90,45,0,777,778,5, - 269,0,0,778,779,5,297,0,0,779,780,3,54,27,0,780,1338,1,0,0,0,781, - 782,5,96,0,0,782,784,5,293,0,0,783,785,3,192,96,0,784,783,1,0,0, - 0,784,785,1,0,0,0,785,786,1,0,0,0,786,788,3,86,43,0,787,789,5,230, - 0,0,788,787,1,0,0,0,788,789,1,0,0,0,789,1338,1,0,0,0,790,791,5,96, - 0,0,791,793,5,338,0,0,792,794,3,192,96,0,793,792,1,0,0,0,793,794, - 1,0,0,0,794,795,1,0,0,0,795,1338,3,90,45,0,796,797,5,96,0,0,797, - 798,5,176,0,0,798,800,5,338,0,0,799,801,3,192,96,0,800,799,1,0,0, - 0,800,801,1,0,0,0,801,802,1,0,0,0,802,1338,3,90,45,0,803,806,5,59, - 0,0,804,805,5,208,0,0,805,807,5,244,0,0,806,804,1,0,0,0,806,807, - 1,0,0,0,807,812,1,0,0,0,808,810,5,128,0,0,809,808,1,0,0,0,809,810, - 1,0,0,0,810,811,1,0,0,0,811,813,5,298,0,0,812,809,1,0,0,0,812,813, - 1,0,0,0,813,814,1,0,0,0,814,816,5,338,0,0,815,817,3,190,95,0,816, - 815,1,0,0,0,816,817,1,0,0,0,817,818,1,0,0,0,818,820,3,88,44,0,819, - 821,3,220,110,0,820,819,1,0,0,0,820,821,1,0,0,0,821,830,1,0,0,0, - 822,829,3,24,12,0,823,824,5,218,0,0,824,825,5,203,0,0,825,829,3, - 212,106,0,826,827,5,297,0,0,827,829,3,54,27,0,828,822,1,0,0,0,828, - 823,1,0,0,0,828,826,1,0,0,0,829,832,1,0,0,0,830,828,1,0,0,0,830, - 831,1,0,0,0,831,833,1,0,0,0,832,830,1,0,0,0,833,834,5,20,0,0,834, - 835,3,26,13,0,835,1338,1,0,0,0,836,839,5,59,0,0,837,838,5,208,0, - 0,838,840,5,244,0,0,839,837,1,0,0,0,839,840,1,0,0,0,840,842,1,0, - 0,0,841,843,5,128,0,0,842,841,1,0,0,0,842,843,1,0,0,0,843,844,1, - 0,0,0,844,845,5,298,0,0,845,846,5,338,0,0,846,851,3,88,44,0,847, - 848,5,2,0,0,848,849,3,334,167,0,849,850,5,3,0,0,850,852,1,0,0,0, - 851,847,1,0,0,0,851,852,1,0,0,0,852,853,1,0,0,0,853,856,3,48,24, - 0,854,855,5,207,0,0,855,857,3,54,27,0,856,854,1,0,0,0,856,857,1, - 0,0,0,857,1338,1,0,0,0,858,859,5,11,0,0,859,860,5,338,0,0,860,862, - 3,90,45,0,861,863,5,20,0,0,862,861,1,0,0,0,862,863,1,0,0,0,863,864, - 1,0,0,0,864,865,3,26,13,0,865,1338,1,0,0,0,866,869,5,59,0,0,867, - 868,5,208,0,0,868,870,5,244,0,0,869,867,1,0,0,0,869,870,1,0,0,0, - 870,872,1,0,0,0,871,873,5,298,0,0,872,871,1,0,0,0,872,873,1,0,0, - 0,873,874,1,0,0,0,874,876,5,125,0,0,875,877,3,190,95,0,876,875,1, - 0,0,0,876,877,1,0,0,0,877,878,1,0,0,0,878,879,3,368,184,0,879,880, - 5,20,0,0,880,890,3,388,194,0,881,882,5,332,0,0,882,887,3,76,38,0, - 883,884,5,4,0,0,884,886,3,76,38,0,885,883,1,0,0,0,886,889,1,0,0, - 0,887,885,1,0,0,0,887,888,1,0,0,0,888,891,1,0,0,0,889,887,1,0,0, - 0,890,881,1,0,0,0,890,891,1,0,0,0,891,1338,1,0,0,0,892,893,5,59, - 0,0,893,894,5,176,0,0,894,896,5,338,0,0,895,897,3,190,95,0,896,895, - 1,0,0,0,896,897,1,0,0,0,897,898,1,0,0,0,898,900,3,88,44,0,899,901, - 3,48,24,0,900,899,1,0,0,0,900,901,1,0,0,0,901,917,1,0,0,0,902,903, - 5,207,0,0,903,916,3,54,27,0,904,905,5,218,0,0,905,906,5,31,0,0,906, - 916,3,260,130,0,907,916,3,20,10,0,908,916,3,18,9,0,909,916,3,242, - 121,0,910,916,3,70,35,0,911,916,3,22,11,0,912,916,3,24,12,0,913, - 914,5,297,0,0,914,916,3,54,27,0,915,902,1,0,0,0,915,904,1,0,0,0, - 915,907,1,0,0,0,915,908,1,0,0,0,915,909,1,0,0,0,915,910,1,0,0,0, - 915,911,1,0,0,0,915,912,1,0,0,0,915,913,1,0,0,0,916,919,1,0,0,0, - 917,915,1,0,0,0,917,918,1,0,0,0,918,920,1,0,0,0,919,917,1,0,0,0, - 920,921,5,20,0,0,921,922,3,26,13,0,922,1338,1,0,0,0,923,925,5,96, - 0,0,924,926,5,298,0,0,925,924,1,0,0,0,925,926,1,0,0,0,926,927,1, - 0,0,0,927,929,5,125,0,0,928,930,3,192,96,0,929,928,1,0,0,0,929,930, - 1,0,0,0,930,931,1,0,0,0,931,1338,3,366,183,0,932,935,5,81,0,0,933, - 934,5,208,0,0,934,936,5,244,0,0,935,933,1,0,0,0,935,936,1,0,0,0, - 936,938,1,0,0,0,937,939,5,336,0,0,938,937,1,0,0,0,938,939,1,0,0, - 0,939,940,1,0,0,0,940,942,3,366,183,0,941,943,3,318,159,0,942,941, - 1,0,0,0,942,943,1,0,0,0,943,945,1,0,0,0,944,946,3,332,166,0,945, - 944,1,0,0,0,945,946,1,0,0,0,946,1338,1,0,0,0,947,948,5,96,0,0,948, - 949,5,298,0,0,949,951,5,336,0,0,950,952,3,192,96,0,951,950,1,0,0, - 0,951,952,1,0,0,0,952,956,1,0,0,0,953,957,3,86,43,0,954,957,3,90, - 45,0,955,957,3,366,183,0,956,953,1,0,0,0,956,954,1,0,0,0,956,955, - 1,0,0,0,957,1338,1,0,0,0,958,960,5,106,0,0,959,961,7,5,0,0,960,959, - 1,0,0,0,960,961,1,0,0,0,961,962,1,0,0,0,962,1338,3,4,2,0,963,964, - 5,273,0,0,964,967,5,294,0,0,965,966,7,2,0,0,966,968,3,80,40,0,967, - 965,1,0,0,0,967,968,1,0,0,0,968,973,1,0,0,0,969,971,5,163,0,0,970, - 969,1,0,0,0,970,971,1,0,0,0,971,972,1,0,0,0,972,974,3,388,194,0, - 973,970,1,0,0,0,973,974,1,0,0,0,974,1338,1,0,0,0,975,976,5,273,0, - 0,976,977,5,293,0,0,977,980,5,108,0,0,978,979,7,2,0,0,979,981,3, - 80,40,0,980,978,1,0,0,0,980,981,1,0,0,0,981,982,1,0,0,0,982,983, - 5,163,0,0,983,985,3,388,194,0,984,986,3,32,16,0,985,984,1,0,0,0, - 985,986,1,0,0,0,986,1338,1,0,0,0,987,988,5,273,0,0,988,989,5,297, - 0,0,989,994,3,86,43,0,990,991,5,2,0,0,991,992,3,58,29,0,992,993, - 5,3,0,0,993,995,1,0,0,0,994,990,1,0,0,0,994,995,1,0,0,0,995,1338, - 1,0,0,0,996,997,5,273,0,0,997,998,5,50,0,0,998,999,7,2,0,0,999,1002, - 3,86,43,0,1000,1001,7,2,0,0,1001,1003,3,80,40,0,1002,1000,1,0,0, - 0,1002,1003,1,0,0,0,1003,1338,1,0,0,0,1004,1005,5,273,0,0,1005,1008, - 5,339,0,0,1006,1007,7,2,0,0,1007,1009,3,80,40,0,1008,1006,1,0,0, - 0,1008,1009,1,0,0,0,1009,1014,1,0,0,0,1010,1012,5,163,0,0,1011,1010, - 1,0,0,0,1011,1012,1,0,0,0,1012,1013,1,0,0,0,1013,1015,3,388,194, - 0,1014,1011,1,0,0,0,1014,1015,1,0,0,0,1015,1338,1,0,0,0,1016,1017, - 5,273,0,0,1017,1018,5,219,0,0,1018,1020,3,86,43,0,1019,1021,3,32, - 16,0,1020,1019,1,0,0,0,1020,1021,1,0,0,0,1021,1338,1,0,0,0,1022, - 1024,5,273,0,0,1023,1025,3,148,74,0,1024,1023,1,0,0,0,1024,1025, - 1,0,0,0,1025,1026,1,0,0,0,1026,1029,5,126,0,0,1027,1028,7,2,0,0, - 1028,1030,3,80,40,0,1029,1027,1,0,0,0,1029,1030,1,0,0,0,1030,1038, - 1,0,0,0,1031,1033,5,163,0,0,1032,1031,1,0,0,0,1032,1033,1,0,0,0, - 1033,1036,1,0,0,0,1034,1037,3,246,123,0,1035,1037,3,388,194,0,1036, - 1034,1,0,0,0,1036,1035,1,0,0,0,1037,1039,1,0,0,0,1038,1032,1,0,0, - 0,1038,1039,1,0,0,0,1039,1338,1,0,0,0,1040,1041,5,273,0,0,1041,1042, - 5,59,0,0,1042,1043,5,293,0,0,1043,1046,3,86,43,0,1044,1045,5,20, - 0,0,1045,1047,5,266,0,0,1046,1044,1,0,0,0,1046,1047,1,0,0,0,1047, - 1338,1,0,0,0,1048,1049,5,273,0,0,1049,1050,5,62,0,0,1050,1338,3, - 36,18,0,1051,1052,5,273,0,0,1052,1057,5,38,0,0,1053,1055,5,163,0, - 0,1054,1053,1,0,0,0,1054,1055,1,0,0,0,1055,1056,1,0,0,0,1056,1058, - 3,388,194,0,1057,1054,1,0,0,0,1057,1058,1,0,0,0,1058,1338,1,0,0, - 0,1059,1060,5,273,0,0,1060,1061,5,176,0,0,1061,1064,5,339,0,0,1062, - 1063,7,2,0,0,1063,1065,3,80,40,0,1064,1062,1,0,0,0,1064,1065,1,0, - 0,0,1065,1070,1,0,0,0,1066,1068,5,163,0,0,1067,1066,1,0,0,0,1067, - 1068,1,0,0,0,1068,1069,1,0,0,0,1069,1071,3,388,194,0,1070,1067,1, - 0,0,0,1070,1071,1,0,0,0,1071,1338,1,0,0,0,1072,1073,5,273,0,0,1073, - 1074,5,59,0,0,1074,1075,5,176,0,0,1075,1076,5,338,0,0,1076,1079, - 3,90,45,0,1077,1078,5,20,0,0,1078,1080,5,266,0,0,1079,1077,1,0,0, - 0,1079,1080,1,0,0,0,1080,1338,1,0,0,0,1081,1082,7,6,0,0,1082,1084, - 5,125,0,0,1083,1085,5,108,0,0,1084,1083,1,0,0,0,1084,1085,1,0,0, - 0,1085,1086,1,0,0,0,1086,1338,3,40,20,0,1087,1088,7,6,0,0,1088,1090, - 5,72,0,0,1089,1091,5,108,0,0,1090,1089,1,0,0,0,1090,1091,1,0,0,0, - 1091,1092,1,0,0,0,1092,1338,3,80,40,0,1093,1095,7,6,0,0,1094,1096, - 5,293,0,0,1095,1094,1,0,0,0,1095,1096,1,0,0,0,1096,1098,1,0,0,0, - 1097,1099,7,7,0,0,1098,1097,1,0,0,0,1098,1099,1,0,0,0,1099,1100, - 1,0,0,0,1100,1102,3,86,43,0,1101,1103,3,32,16,0,1102,1101,1,0,0, - 0,1102,1103,1,0,0,0,1103,1105,1,0,0,0,1104,1106,3,42,21,0,1105,1104, - 1,0,0,0,1105,1106,1,0,0,0,1106,1338,1,0,0,0,1107,1109,7,6,0,0,1108, - 1110,5,232,0,0,1109,1108,1,0,0,0,1109,1110,1,0,0,0,1110,1111,1,0, - 0,0,1111,1338,3,26,13,0,1112,1113,5,51,0,0,1113,1114,5,203,0,0,1114, - 1115,3,36,18,0,1115,1116,3,80,40,0,1116,1117,5,153,0,0,1117,1118, - 3,390,195,0,1118,1338,1,0,0,0,1119,1120,5,51,0,0,1120,1121,5,203, - 0,0,1121,1122,5,293,0,0,1122,1123,3,86,43,0,1123,1124,5,153,0,0, - 1124,1125,3,390,195,0,1125,1338,1,0,0,0,1126,1127,5,240,0,0,1127, - 1128,5,293,0,0,1128,1338,3,86,43,0,1129,1130,5,240,0,0,1130,1131, - 5,125,0,0,1131,1338,3,366,183,0,1132,1140,5,240,0,0,1133,1141,3, - 388,194,0,1134,1136,9,0,0,0,1135,1134,1,0,0,0,1136,1139,1,0,0,0, - 1137,1138,1,0,0,0,1137,1135,1,0,0,0,1138,1141,1,0,0,0,1139,1137, - 1,0,0,0,1140,1133,1,0,0,0,1140,1137,1,0,0,0,1141,1338,1,0,0,0,1142, - 1143,5,240,0,0,1143,1144,5,176,0,0,1144,1145,5,338,0,0,1145,1338, - 3,90,45,0,1146,1148,5,33,0,0,1147,1149,5,159,0,0,1148,1147,1,0,0, - 0,1148,1149,1,0,0,0,1149,1150,1,0,0,0,1150,1151,5,293,0,0,1151,1154, - 3,86,43,0,1152,1153,5,207,0,0,1153,1155,3,54,27,0,1154,1152,1,0, - 0,0,1154,1155,1,0,0,0,1155,1160,1,0,0,0,1156,1158,5,20,0,0,1157, - 1156,1,0,0,0,1157,1158,1,0,0,0,1158,1159,1,0,0,0,1159,1161,3,26, - 13,0,1160,1157,1,0,0,0,1160,1161,1,0,0,0,1161,1338,1,0,0,0,1162, - 1163,5,322,0,0,1163,1165,5,293,0,0,1164,1166,3,192,96,0,1165,1164, - 1,0,0,0,1165,1166,1,0,0,0,1166,1167,1,0,0,0,1167,1338,3,86,43,0, - 1168,1169,5,43,0,0,1169,1338,5,33,0,0,1170,1171,5,168,0,0,1171,1173, - 5,70,0,0,1172,1174,5,169,0,0,1173,1172,1,0,0,0,1173,1174,1,0,0,0, - 1174,1175,1,0,0,0,1175,1176,5,145,0,0,1176,1178,3,388,194,0,1177, - 1179,5,216,0,0,1178,1177,1,0,0,0,1178,1179,1,0,0,0,1179,1180,1,0, - 0,0,1180,1181,5,152,0,0,1181,1182,5,293,0,0,1182,1184,3,86,43,0, - 1183,1185,3,32,16,0,1184,1183,1,0,0,0,1184,1185,1,0,0,0,1185,1338, - 1,0,0,0,1186,1187,5,317,0,0,1187,1188,5,293,0,0,1188,1190,3,86,43, - 0,1189,1191,3,32,16,0,1190,1189,1,0,0,0,1190,1191,1,0,0,0,1191,1338, - 1,0,0,0,1192,1194,5,188,0,0,1193,1192,1,0,0,0,1193,1194,1,0,0,0, - 1194,1195,1,0,0,0,1195,1196,5,242,0,0,1196,1197,5,293,0,0,1197,1200, - 3,86,43,0,1198,1199,7,8,0,0,1199,1201,5,219,0,0,1200,1198,1,0,0, - 0,1200,1201,1,0,0,0,1201,1338,1,0,0,0,1202,1203,7,9,0,0,1203,1207, - 3,376,188,0,1204,1206,9,0,0,0,1205,1204,1,0,0,0,1206,1209,1,0,0, - 0,1207,1208,1,0,0,0,1207,1205,1,0,0,0,1208,1338,1,0,0,0,1209,1207, - 1,0,0,0,1210,1211,5,269,0,0,1211,1215,5,253,0,0,1212,1214,9,0,0, - 0,1213,1212,1,0,0,0,1214,1217,1,0,0,0,1215,1216,1,0,0,0,1215,1213, - 1,0,0,0,1216,1338,1,0,0,0,1217,1215,1,0,0,0,1218,1219,5,269,0,0, - 1219,1220,5,301,0,0,1220,1221,5,350,0,0,1221,1338,3,298,149,0,1222, - 1223,5,269,0,0,1223,1224,5,301,0,0,1224,1225,5,350,0,0,1225,1338, - 3,6,3,0,1226,1227,5,269,0,0,1227,1228,5,301,0,0,1228,1232,5,350, - 0,0,1229,1231,9,0,0,0,1230,1229,1,0,0,0,1231,1234,1,0,0,0,1232,1233, - 1,0,0,0,1232,1230,1,0,0,0,1233,1338,1,0,0,0,1234,1232,1,0,0,0,1235, - 1236,5,269,0,0,1236,1237,7,10,0,0,1237,1338,3,134,67,0,1238,1239, - 5,269,0,0,1239,1240,7,10,0,0,1240,1241,5,2,0,0,1241,1242,3,244,122, - 0,1242,1243,5,3,0,0,1243,1244,5,352,0,0,1244,1245,5,2,0,0,1245,1246, - 3,26,13,0,1246,1247,5,3,0,0,1247,1338,1,0,0,0,1248,1249,5,269,0, - 0,1249,1250,3,8,4,0,1250,1251,5,352,0,0,1251,1252,3,10,5,0,1252, - 1338,1,0,0,0,1253,1254,5,269,0,0,1254,1262,3,8,4,0,1255,1259,5,352, - 0,0,1256,1258,9,0,0,0,1257,1256,1,0,0,0,1258,1261,1,0,0,0,1259,1260, - 1,0,0,0,1259,1257,1,0,0,0,1260,1263,1,0,0,0,1261,1259,1,0,0,0,1262, - 1255,1,0,0,0,1262,1263,1,0,0,0,1263,1338,1,0,0,0,1264,1268,5,269, - 0,0,1265,1267,9,0,0,0,1266,1265,1,0,0,0,1267,1270,1,0,0,0,1268,1269, - 1,0,0,0,1268,1266,1,0,0,0,1269,1271,1,0,0,0,1270,1268,1,0,0,0,1271, - 1272,5,352,0,0,1272,1338,3,10,5,0,1273,1277,5,269,0,0,1274,1276, - 9,0,0,0,1275,1274,1,0,0,0,1276,1279,1,0,0,0,1277,1278,1,0,0,0,1277, - 1275,1,0,0,0,1278,1338,1,0,0,0,1279,1277,1,0,0,0,1280,1281,5,245, - 0,0,1281,1338,3,8,4,0,1282,1286,5,245,0,0,1283,1285,9,0,0,0,1284, - 1283,1,0,0,0,1285,1288,1,0,0,0,1286,1287,1,0,0,0,1286,1284,1,0,0, - 0,1287,1338,1,0,0,0,1288,1286,1,0,0,0,1289,1290,5,59,0,0,1290,1292, - 5,142,0,0,1291,1293,3,190,95,0,1292,1291,1,0,0,0,1292,1293,1,0,0, - 0,1293,1294,1,0,0,0,1294,1295,3,376,188,0,1295,1297,5,203,0,0,1296, - 1298,5,293,0,0,1297,1296,1,0,0,0,1297,1298,1,0,0,0,1298,1299,1,0, - 0,0,1299,1302,3,86,43,0,1300,1301,5,332,0,0,1301,1303,3,376,188, - 0,1302,1300,1,0,0,0,1302,1303,1,0,0,0,1303,1304,1,0,0,0,1304,1305, - 5,2,0,0,1305,1306,3,248,124,0,1306,1309,5,3,0,0,1307,1308,5,207, - 0,0,1308,1310,3,54,27,0,1309,1307,1,0,0,0,1309,1310,1,0,0,0,1310, - 1338,1,0,0,0,1311,1312,5,96,0,0,1312,1314,5,142,0,0,1313,1315,3, - 192,96,0,1314,1313,1,0,0,0,1314,1315,1,0,0,0,1315,1316,1,0,0,0,1316, - 1317,3,376,188,0,1317,1319,5,203,0,0,1318,1320,5,293,0,0,1319,1318, - 1,0,0,0,1319,1320,1,0,0,0,1320,1321,1,0,0,0,1321,1322,3,86,43,0, - 1322,1338,1,0,0,0,1323,1324,5,205,0,0,1324,1326,3,86,43,0,1325,1327, - 3,138,69,0,1326,1325,1,0,0,0,1326,1327,1,0,0,0,1327,1328,1,0,0,0, - 1328,1329,3,354,177,0,1329,1338,1,0,0,0,1330,1334,3,12,6,0,1331, - 1333,9,0,0,0,1332,1331,1,0,0,0,1333,1336,1,0,0,0,1334,1335,1,0,0, - 0,1334,1332,1,0,0,0,1335,1338,1,0,0,0,1336,1334,1,0,0,0,1337,412, - 1,0,0,0,1337,414,1,0,0,0,1337,417,1,0,0,0,1337,422,1,0,0,0,1337, - 428,1,0,0,0,1337,444,1,0,0,0,1337,451,1,0,0,0,1337,457,1,0,0,0,1337, - 466,1,0,0,0,1337,478,1,0,0,0,1337,495,1,0,0,0,1337,515,1,0,0,0,1337, - 532,1,0,0,0,1337,549,1,0,0,0,1337,560,1,0,0,0,1337,567,1,0,0,0,1337, - 576,1,0,0,0,1337,585,1,0,0,0,1337,595,1,0,0,0,1337,607,1,0,0,0,1337, - 618,1,0,0,0,1337,629,1,0,0,0,1337,643,1,0,0,0,1337,654,1,0,0,0,1337, - 669,1,0,0,0,1337,681,1,0,0,0,1337,695,1,0,0,0,1337,705,1,0,0,0,1337, - 721,1,0,0,0,1337,729,1,0,0,0,1337,751,1,0,0,0,1337,760,1,0,0,0,1337, - 766,1,0,0,0,1337,773,1,0,0,0,1337,781,1,0,0,0,1337,790,1,0,0,0,1337, - 796,1,0,0,0,1337,803,1,0,0,0,1337,836,1,0,0,0,1337,858,1,0,0,0,1337, - 866,1,0,0,0,1337,892,1,0,0,0,1337,923,1,0,0,0,1337,932,1,0,0,0,1337, - 947,1,0,0,0,1337,958,1,0,0,0,1337,963,1,0,0,0,1337,975,1,0,0,0,1337, - 987,1,0,0,0,1337,996,1,0,0,0,1337,1004,1,0,0,0,1337,1016,1,0,0,0, - 1337,1022,1,0,0,0,1337,1040,1,0,0,0,1337,1048,1,0,0,0,1337,1051, - 1,0,0,0,1337,1059,1,0,0,0,1337,1072,1,0,0,0,1337,1081,1,0,0,0,1337, - 1087,1,0,0,0,1337,1093,1,0,0,0,1337,1107,1,0,0,0,1337,1112,1,0,0, - 0,1337,1119,1,0,0,0,1337,1126,1,0,0,0,1337,1129,1,0,0,0,1337,1132, - 1,0,0,0,1337,1142,1,0,0,0,1337,1146,1,0,0,0,1337,1162,1,0,0,0,1337, - 1168,1,0,0,0,1337,1170,1,0,0,0,1337,1186,1,0,0,0,1337,1193,1,0,0, - 0,1337,1202,1,0,0,0,1337,1210,1,0,0,0,1337,1218,1,0,0,0,1337,1222, - 1,0,0,0,1337,1226,1,0,0,0,1337,1235,1,0,0,0,1337,1238,1,0,0,0,1337, - 1248,1,0,0,0,1337,1253,1,0,0,0,1337,1264,1,0,0,0,1337,1273,1,0,0, - 0,1337,1280,1,0,0,0,1337,1282,1,0,0,0,1337,1289,1,0,0,0,1337,1311, - 1,0,0,0,1337,1323,1,0,0,0,1337,1330,1,0,0,0,1338,5,1,0,0,0,1339, - 1342,3,388,194,0,1340,1342,5,169,0,0,1341,1339,1,0,0,0,1341,1340, - 1,0,0,0,1342,7,1,0,0,0,1343,1344,3,380,190,0,1344,9,1,0,0,0,1345, - 1346,3,382,191,0,1346,11,1,0,0,0,1347,1348,5,59,0,0,1348,1516,5, - 253,0,0,1349,1350,5,96,0,0,1350,1516,5,253,0,0,1351,1353,5,129,0, - 0,1352,1354,5,253,0,0,1353,1352,1,0,0,0,1353,1354,1,0,0,0,1354,1516, - 1,0,0,0,1355,1357,5,249,0,0,1356,1358,5,253,0,0,1357,1356,1,0,0, - 0,1357,1358,1,0,0,0,1358,1516,1,0,0,0,1359,1360,5,273,0,0,1360,1516, - 5,129,0,0,1361,1362,5,273,0,0,1362,1364,5,253,0,0,1363,1365,5,129, - 0,0,1364,1363,1,0,0,0,1364,1365,1,0,0,0,1365,1516,1,0,0,0,1366,1367, - 5,273,0,0,1367,1516,5,228,0,0,1368,1369,5,273,0,0,1369,1516,5,254, - 0,0,1370,1371,5,273,0,0,1371,1372,5,62,0,0,1372,1516,5,254,0,0,1373, - 1374,5,107,0,0,1374,1516,5,293,0,0,1375,1376,5,139,0,0,1376,1516, - 5,293,0,0,1377,1378,5,273,0,0,1378,1516,5,54,0,0,1379,1380,5,273, - 0,0,1380,1381,5,59,0,0,1381,1516,5,293,0,0,1382,1383,5,273,0,0,1383, - 1516,5,313,0,0,1384,1385,5,273,0,0,1385,1516,5,143,0,0,1386,1387, - 5,273,0,0,1387,1516,5,172,0,0,1388,1389,5,59,0,0,1389,1516,5,142, - 0,0,1390,1391,5,96,0,0,1391,1516,5,142,0,0,1392,1393,5,11,0,0,1393, - 1516,5,142,0,0,1394,1395,5,171,0,0,1395,1516,5,293,0,0,1396,1397, - 5,171,0,0,1397,1516,5,72,0,0,1398,1399,5,326,0,0,1399,1516,5,293, - 0,0,1400,1401,5,326,0,0,1401,1516,5,72,0,0,1402,1403,5,59,0,0,1403, - 1404,5,298,0,0,1404,1516,5,175,0,0,1405,1406,5,96,0,0,1406,1407, - 5,298,0,0,1407,1516,5,175,0,0,1408,1409,5,11,0,0,1409,1410,5,293, - 0,0,1410,1411,3,86,43,0,1411,1412,5,197,0,0,1412,1413,5,45,0,0,1413, - 1516,1,0,0,0,1414,1415,5,11,0,0,1415,1416,5,293,0,0,1416,1417,3, - 86,43,0,1417,1418,5,45,0,0,1418,1419,5,31,0,0,1419,1516,1,0,0,0, - 1420,1421,5,11,0,0,1421,1422,5,293,0,0,1422,1423,3,86,43,0,1423, - 1424,5,197,0,0,1424,1425,5,279,0,0,1425,1516,1,0,0,0,1426,1427,5, - 11,0,0,1427,1428,5,293,0,0,1428,1429,3,86,43,0,1429,1430,5,275,0, - 0,1430,1431,5,31,0,0,1431,1516,1,0,0,0,1432,1433,5,11,0,0,1433,1434, - 5,293,0,0,1434,1435,3,86,43,0,1435,1436,5,197,0,0,1436,1437,5,275, - 0,0,1437,1516,1,0,0,0,1438,1439,5,11,0,0,1439,1440,5,293,0,0,1440, - 1441,3,86,43,0,1441,1442,5,197,0,0,1442,1443,5,283,0,0,1443,1444, - 5,20,0,0,1444,1445,5,89,0,0,1445,1516,1,0,0,0,1446,1447,5,11,0,0, - 1447,1448,5,293,0,0,1448,1449,3,86,43,0,1449,1450,5,269,0,0,1450, - 1451,5,275,0,0,1451,1452,5,170,0,0,1452,1516,1,0,0,0,1453,1454,5, - 11,0,0,1454,1455,5,293,0,0,1455,1456,3,86,43,0,1456,1457,5,103,0, - 0,1457,1458,5,217,0,0,1458,1516,1,0,0,0,1459,1460,5,11,0,0,1460, - 1461,5,293,0,0,1461,1462,3,86,43,0,1462,1463,5,18,0,0,1463,1464, - 5,217,0,0,1464,1516,1,0,0,0,1465,1466,5,11,0,0,1466,1467,5,293,0, - 0,1467,1468,3,86,43,0,1468,1469,5,320,0,0,1469,1470,5,217,0,0,1470, - 1516,1,0,0,0,1471,1472,5,11,0,0,1472,1473,5,293,0,0,1473,1474,3, - 86,43,0,1474,1475,5,310,0,0,1475,1516,1,0,0,0,1476,1477,5,11,0,0, - 1477,1478,5,293,0,0,1478,1480,3,86,43,0,1479,1481,3,32,16,0,1480, - 1479,1,0,0,0,1480,1481,1,0,0,0,1481,1482,1,0,0,0,1482,1483,5,53, - 0,0,1483,1516,1,0,0,0,1484,1485,5,11,0,0,1485,1486,5,293,0,0,1486, - 1488,3,86,43,0,1487,1489,3,32,16,0,1488,1487,1,0,0,0,1488,1489,1, - 0,0,0,1489,1490,1,0,0,0,1490,1491,5,56,0,0,1491,1516,1,0,0,0,1492, - 1493,5,11,0,0,1493,1494,5,293,0,0,1494,1496,3,86,43,0,1495,1497, - 3,32,16,0,1496,1495,1,0,0,0,1496,1497,1,0,0,0,1497,1498,1,0,0,0, - 1498,1499,5,269,0,0,1499,1500,5,115,0,0,1500,1516,1,0,0,0,1501,1502, - 5,11,0,0,1502,1503,5,293,0,0,1503,1505,3,86,43,0,1504,1506,3,32, - 16,0,1505,1504,1,0,0,0,1505,1506,1,0,0,0,1506,1507,1,0,0,0,1507, - 1508,5,244,0,0,1508,1509,5,50,0,0,1509,1516,1,0,0,0,1510,1511,5, - 281,0,0,1511,1516,5,312,0,0,1512,1516,5,52,0,0,1513,1516,5,255,0, - 0,1514,1516,5,88,0,0,1515,1347,1,0,0,0,1515,1349,1,0,0,0,1515,1351, - 1,0,0,0,1515,1355,1,0,0,0,1515,1359,1,0,0,0,1515,1361,1,0,0,0,1515, - 1366,1,0,0,0,1515,1368,1,0,0,0,1515,1370,1,0,0,0,1515,1373,1,0,0, - 0,1515,1375,1,0,0,0,1515,1377,1,0,0,0,1515,1379,1,0,0,0,1515,1382, - 1,0,0,0,1515,1384,1,0,0,0,1515,1386,1,0,0,0,1515,1388,1,0,0,0,1515, - 1390,1,0,0,0,1515,1392,1,0,0,0,1515,1394,1,0,0,0,1515,1396,1,0,0, - 0,1515,1398,1,0,0,0,1515,1400,1,0,0,0,1515,1402,1,0,0,0,1515,1405, - 1,0,0,0,1515,1408,1,0,0,0,1515,1414,1,0,0,0,1515,1420,1,0,0,0,1515, - 1426,1,0,0,0,1515,1432,1,0,0,0,1515,1438,1,0,0,0,1515,1446,1,0,0, - 0,1515,1453,1,0,0,0,1515,1459,1,0,0,0,1515,1465,1,0,0,0,1515,1471, - 1,0,0,0,1515,1476,1,0,0,0,1515,1484,1,0,0,0,1515,1492,1,0,0,0,1515, - 1501,1,0,0,0,1515,1510,1,0,0,0,1515,1512,1,0,0,0,1515,1513,1,0,0, - 0,1515,1514,1,0,0,0,1516,13,1,0,0,0,1517,1519,5,59,0,0,1518,1520, - 5,298,0,0,1519,1518,1,0,0,0,1519,1520,1,0,0,0,1520,1522,1,0,0,0, - 1521,1523,5,109,0,0,1522,1521,1,0,0,0,1522,1523,1,0,0,0,1523,1524, - 1,0,0,0,1524,1526,5,293,0,0,1525,1527,3,190,95,0,1526,1525,1,0,0, - 0,1526,1527,1,0,0,0,1527,1528,1,0,0,0,1528,1529,3,84,42,0,1529,15, - 1,0,0,0,1530,1531,5,59,0,0,1531,1533,5,208,0,0,1532,1530,1,0,0,0, - 1532,1533,1,0,0,0,1533,1534,1,0,0,0,1534,1535,5,244,0,0,1535,1536, - 5,293,0,0,1536,1537,3,84,42,0,1537,17,1,0,0,0,1538,1539,5,45,0,0, - 1539,1540,5,31,0,0,1540,1544,3,212,106,0,1541,1542,5,279,0,0,1542, - 1543,5,31,0,0,1543,1545,3,216,108,0,1544,1541,1,0,0,0,1544,1545, - 1,0,0,0,1545,1546,1,0,0,0,1546,1547,5,152,0,0,1547,1548,5,382,0, - 0,1548,1549,5,30,0,0,1549,19,1,0,0,0,1550,1551,5,275,0,0,1551,1552, - 5,31,0,0,1552,1553,3,212,106,0,1553,1556,5,203,0,0,1554,1557,3,66, - 33,0,1555,1557,3,68,34,0,1556,1554,1,0,0,0,1556,1555,1,0,0,0,1557, - 1561,1,0,0,0,1558,1559,5,283,0,0,1559,1560,5,20,0,0,1560,1562,5, - 89,0,0,1561,1558,1,0,0,0,1561,1562,1,0,0,0,1562,21,1,0,0,0,1563, - 1564,5,170,0,0,1564,1565,3,388,194,0,1565,23,1,0,0,0,1566,1567,5, - 51,0,0,1567,1568,3,388,194,0,1568,25,1,0,0,0,1569,1571,3,44,22,0, - 1570,1569,1,0,0,0,1570,1571,1,0,0,0,1571,1572,1,0,0,0,1572,1573, - 3,104,52,0,1573,1574,3,100,50,0,1574,27,1,0,0,0,1575,1576,5,147, - 0,0,1576,1578,5,216,0,0,1577,1579,5,293,0,0,1578,1577,1,0,0,0,1578, - 1579,1,0,0,0,1579,1580,1,0,0,0,1580,1585,3,86,43,0,1581,1583,3,32, - 16,0,1582,1584,3,190,95,0,1583,1582,1,0,0,0,1583,1584,1,0,0,0,1584, - 1586,1,0,0,0,1585,1581,1,0,0,0,1585,1586,1,0,0,0,1586,1593,1,0,0, - 0,1587,1588,5,31,0,0,1588,1594,5,189,0,0,1589,1590,5,2,0,0,1590, - 1591,3,94,47,0,1591,1592,5,3,0,0,1592,1594,1,0,0,0,1593,1587,1,0, - 0,0,1593,1589,1,0,0,0,1593,1594,1,0,0,0,1594,1652,1,0,0,0,1595,1596, - 5,147,0,0,1596,1598,5,152,0,0,1597,1599,5,293,0,0,1598,1597,1,0, - 0,0,1598,1599,1,0,0,0,1599,1600,1,0,0,0,1600,1602,3,86,43,0,1601, - 1603,3,32,16,0,1602,1601,1,0,0,0,1602,1603,1,0,0,0,1603,1605,1,0, - 0,0,1604,1606,3,190,95,0,1605,1604,1,0,0,0,1605,1606,1,0,0,0,1606, - 1613,1,0,0,0,1607,1608,5,31,0,0,1608,1614,5,189,0,0,1609,1610,5, - 2,0,0,1610,1611,3,94,47,0,1611,1612,5,3,0,0,1612,1614,1,0,0,0,1613, - 1607,1,0,0,0,1613,1609,1,0,0,0,1613,1614,1,0,0,0,1614,1652,1,0,0, - 0,1615,1616,5,147,0,0,1616,1618,5,152,0,0,1617,1619,5,293,0,0,1618, - 1617,1,0,0,0,1618,1619,1,0,0,0,1619,1620,1,0,0,0,1620,1621,3,86, - 43,0,1621,1622,5,244,0,0,1622,1623,3,138,69,0,1623,1652,1,0,0,0, - 1624,1625,5,147,0,0,1625,1627,5,216,0,0,1626,1628,5,169,0,0,1627, - 1626,1,0,0,0,1627,1628,1,0,0,0,1628,1629,1,0,0,0,1629,1630,5,90, - 0,0,1630,1632,3,388,194,0,1631,1633,3,242,121,0,1632,1631,1,0,0, - 0,1632,1633,1,0,0,0,1633,1635,1,0,0,0,1634,1636,3,70,35,0,1635,1634, - 1,0,0,0,1635,1636,1,0,0,0,1636,1652,1,0,0,0,1637,1638,5,147,0,0, - 1638,1640,5,216,0,0,1639,1641,5,169,0,0,1640,1639,1,0,0,0,1640,1641, - 1,0,0,0,1641,1642,1,0,0,0,1642,1644,5,90,0,0,1643,1645,3,388,194, - 0,1644,1643,1,0,0,0,1644,1645,1,0,0,0,1645,1646,1,0,0,0,1646,1649, - 3,48,24,0,1647,1648,5,207,0,0,1648,1650,3,54,27,0,1649,1647,1,0, - 0,0,1649,1650,1,0,0,0,1650,1652,1,0,0,0,1651,1575,1,0,0,0,1651,1595, - 1,0,0,0,1651,1615,1,0,0,0,1651,1624,1,0,0,0,1651,1637,1,0,0,0,1652, - 29,1,0,0,0,1653,1655,3,32,16,0,1654,1656,3,22,11,0,1655,1654,1,0, - 0,0,1655,1656,1,0,0,0,1656,31,1,0,0,0,1657,1658,5,217,0,0,1658,1659, - 5,2,0,0,1659,1664,3,34,17,0,1660,1661,5,4,0,0,1661,1663,3,34,17, - 0,1662,1660,1,0,0,0,1663,1666,1,0,0,0,1664,1662,1,0,0,0,1664,1665, - 1,0,0,0,1665,1667,1,0,0,0,1666,1664,1,0,0,0,1667,1668,5,3,0,0,1668, - 33,1,0,0,0,1669,1672,3,376,188,0,1670,1671,5,352,0,0,1671,1673,3, - 288,144,0,1672,1670,1,0,0,0,1672,1673,1,0,0,0,1673,1679,1,0,0,0, - 1674,1675,3,376,188,0,1675,1676,5,352,0,0,1676,1677,5,82,0,0,1677, - 1679,1,0,0,0,1678,1669,1,0,0,0,1678,1674,1,0,0,0,1679,35,1,0,0,0, - 1680,1681,7,11,0,0,1681,37,1,0,0,0,1682,1683,7,12,0,0,1683,39,1, - 0,0,0,1684,1690,3,98,49,0,1685,1690,3,388,194,0,1686,1690,3,290, - 145,0,1687,1690,3,292,146,0,1688,1690,3,294,147,0,1689,1684,1,0, - 0,0,1689,1685,1,0,0,0,1689,1686,1,0,0,0,1689,1687,1,0,0,0,1689,1688, - 1,0,0,0,1690,41,1,0,0,0,1691,1696,3,376,188,0,1692,1693,5,5,0,0, - 1693,1695,3,376,188,0,1694,1692,1,0,0,0,1695,1698,1,0,0,0,1696,1694, - 1,0,0,0,1696,1697,1,0,0,0,1697,43,1,0,0,0,1698,1696,1,0,0,0,1699, - 1700,5,346,0,0,1700,1705,3,46,23,0,1701,1702,5,4,0,0,1702,1704,3, - 46,23,0,1703,1701,1,0,0,0,1704,1707,1,0,0,0,1705,1703,1,0,0,0,1705, - 1706,1,0,0,0,1706,45,1,0,0,0,1707,1705,1,0,0,0,1708,1710,3,372,186, - 0,1709,1711,3,212,106,0,1710,1709,1,0,0,0,1710,1711,1,0,0,0,1711, - 1713,1,0,0,0,1712,1714,5,20,0,0,1713,1712,1,0,0,0,1713,1714,1,0, - 0,0,1714,1715,1,0,0,0,1715,1716,5,2,0,0,1716,1717,3,26,13,0,1717, - 1718,5,3,0,0,1718,47,1,0,0,0,1719,1720,5,332,0,0,1720,1721,3,246, - 123,0,1721,49,1,0,0,0,1722,1723,5,207,0,0,1723,1737,3,62,31,0,1724, - 1725,5,218,0,0,1725,1726,5,31,0,0,1726,1737,3,260,130,0,1727,1737, - 3,20,10,0,1728,1737,3,18,9,0,1729,1737,3,242,121,0,1730,1737,3,70, - 35,0,1731,1737,3,22,11,0,1732,1737,3,24,12,0,1733,1734,5,297,0,0, - 1734,1737,3,54,27,0,1735,1737,3,52,26,0,1736,1722,1,0,0,0,1736,1724, - 1,0,0,0,1736,1727,1,0,0,0,1736,1728,1,0,0,0,1736,1729,1,0,0,0,1736, - 1730,1,0,0,0,1736,1731,1,0,0,0,1736,1732,1,0,0,0,1736,1733,1,0,0, - 0,1736,1735,1,0,0,0,1737,1740,1,0,0,0,1738,1736,1,0,0,0,1738,1739, - 1,0,0,0,1739,51,1,0,0,0,1740,1738,1,0,0,0,1741,1742,5,162,0,0,1742, - 1743,5,382,0,0,1743,53,1,0,0,0,1744,1745,5,2,0,0,1745,1750,3,56, - 28,0,1746,1747,5,4,0,0,1747,1749,3,56,28,0,1748,1746,1,0,0,0,1749, - 1752,1,0,0,0,1750,1748,1,0,0,0,1750,1751,1,0,0,0,1751,1753,1,0,0, - 0,1752,1750,1,0,0,0,1753,1754,5,3,0,0,1754,55,1,0,0,0,1755,1760, - 3,58,29,0,1756,1758,5,352,0,0,1757,1756,1,0,0,0,1757,1758,1,0,0, - 0,1758,1759,1,0,0,0,1759,1761,3,60,30,0,1760,1757,1,0,0,0,1760,1761, - 1,0,0,0,1761,57,1,0,0,0,1762,1767,3,376,188,0,1763,1764,5,5,0,0, - 1764,1766,3,376,188,0,1765,1763,1,0,0,0,1766,1769,1,0,0,0,1767,1765, - 1,0,0,0,1767,1768,1,0,0,0,1768,1772,1,0,0,0,1769,1767,1,0,0,0,1770, - 1772,3,388,194,0,1771,1762,1,0,0,0,1771,1770,1,0,0,0,1772,59,1,0, - 0,0,1773,1778,5,382,0,0,1774,1778,5,384,0,0,1775,1778,3,296,148, - 0,1776,1778,3,388,194,0,1777,1773,1,0,0,0,1777,1774,1,0,0,0,1777, - 1775,1,0,0,0,1777,1776,1,0,0,0,1778,61,1,0,0,0,1779,1780,5,2,0,0, - 1780,1785,3,64,32,0,1781,1782,5,4,0,0,1782,1784,3,64,32,0,1783,1781, - 1,0,0,0,1784,1787,1,0,0,0,1785,1783,1,0,0,0,1785,1786,1,0,0,0,1786, - 1788,1,0,0,0,1787,1785,1,0,0,0,1788,1789,5,3,0,0,1789,63,1,0,0,0, - 1790,1795,3,58,29,0,1791,1793,5,352,0,0,1792,1791,1,0,0,0,1792,1793, - 1,0,0,0,1793,1794,1,0,0,0,1794,1796,3,268,134,0,1795,1792,1,0,0, - 0,1795,1796,1,0,0,0,1796,65,1,0,0,0,1797,1798,5,2,0,0,1798,1803, - 3,288,144,0,1799,1800,5,4,0,0,1800,1802,3,288,144,0,1801,1799,1, + 2,1,2,5,2,1226,8,2,10,2,12,2,1229,9,2,3,2,1231,8,2,1,2,1,2,5,2,1235, + 8,2,10,2,12,2,1238,9,2,1,2,1,2,1,2,1,2,5,2,1244,8,2,10,2,12,2,1247, + 9,2,1,2,1,2,1,2,1,2,5,2,1253,8,2,10,2,12,2,1256,9,2,1,2,1,2,1,2, + 3,2,1261,8,2,1,2,1,2,1,2,3,2,1266,8,2,1,2,1,2,1,2,3,2,1271,8,2,1, + 2,1,2,1,2,1,2,1,2,3,2,1278,8,2,1,2,1,2,1,2,3,2,1283,8,2,1,2,1,2, + 1,2,3,2,1288,8,2,1,2,1,2,1,2,1,2,1,2,3,2,1295,8,2,1,2,1,2,1,2,1, + 2,1,2,1,2,5,2,1303,8,2,10,2,12,2,1306,9,2,3,2,1308,8,2,1,3,1,3,1, + 3,1,3,3,3,1314,8,3,1,3,1,3,1,3,1,3,1,3,3,3,1321,8,3,1,3,1,3,3,3, + 1325,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3, + 1388,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,1396,8,3,1,3,1,3,1,3,1,3,1, + 3,3,3,1403,8,3,1,4,1,4,1,4,1,4,1,4,1,4,3,4,1411,8,4,1,4,1,4,1,4, + 1,4,1,5,1,5,1,5,1,5,1,5,1,5,3,5,1423,8,5,1,5,1,5,1,5,3,5,1428,8, + 5,1,6,3,6,1431,8,6,1,6,1,6,1,6,1,7,1,7,1,7,3,7,1439,8,7,1,7,1,7, + 1,7,3,7,1444,8,7,3,7,1446,8,7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,1454,8, + 7,1,7,1,7,1,7,3,7,1459,8,7,1,7,1,7,3,7,1463,8,7,1,7,3,7,1466,8,7, + 1,7,1,7,1,7,1,7,1,7,1,7,3,7,1474,8,7,1,7,1,7,1,7,3,7,1479,8,7,1, + 7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,1488,8,7,1,7,1,7,1,7,3,7,1493,8,7, + 1,7,3,7,1496,8,7,1,7,1,7,1,7,3,7,1501,8,7,1,7,1,7,3,7,1505,8,7,1, + 7,1,7,1,7,3,7,1510,8,7,3,7,1512,8,7,1,8,1,8,1,8,3,8,1517,8,8,1,9, + 1,9,1,9,1,9,1,9,5,9,1524,8,9,10,9,12,9,1527,9,9,1,9,1,9,1,10,1,10, + 1,10,3,10,1534,8,10,1,10,1,10,1,10,1,10,3,10,1540,8,10,1,11,1,11, + 1,12,1,12,1,12,1,12,1,12,3,12,1549,8,12,1,13,1,13,1,13,5,13,1554, + 8,13,10,13,12,13,1557,9,13,1,14,1,14,1,14,1,14,5,14,1563,8,14,10, + 14,12,14,1566,9,14,1,15,1,15,3,15,1570,8,15,1,15,3,15,1573,8,15, + 1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17, + 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,17,5,17,1598,8,17, + 10,17,12,17,1601,9,17,1,18,1,18,1,18,1,19,1,19,1,19,1,19,5,19,1610, + 8,19,10,19,12,19,1613,9,19,1,19,1,19,1,20,1,20,3,20,1619,8,20,1, + 20,3,20,1622,8,20,1,21,1,21,1,21,5,21,1627,8,21,10,21,12,21,1630, + 9,21,1,21,3,21,1633,8,21,1,22,1,22,1,22,1,22,3,22,1639,8,22,1,23, + 1,23,1,23,1,23,5,23,1645,8,23,10,23,12,23,1648,9,23,1,23,1,23,1, + 24,1,24,3,24,1654,8,24,1,24,3,24,1657,8,24,1,25,1,25,1,25,1,25,5, + 25,1663,8,25,10,25,12,25,1666,9,25,1,25,1,25,1,26,1,26,1,26,1,26, + 5,26,1674,8,26,10,26,12,26,1677,9,26,1,26,1,26,1,27,1,27,1,27,1, + 27,1,27,1,27,3,27,1687,8,27,1,28,1,28,1,28,1,28,1,28,1,28,3,28,1695, + 8,28,1,29,1,29,1,29,1,29,3,29,1701,8,29,1,30,1,30,1,30,1,30,1,30, + 1,30,1,30,4,30,1710,8,30,11,30,12,30,1711,1,30,1,30,1,30,1,30,1, + 30,3,30,1719,8,30,1,30,1,30,1,30,1,30,1,30,3,30,1726,8,30,1,30,1, + 30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,3,30,1738,8,30,1,30,1, + 30,1,30,1,30,5,30,1744,8,30,10,30,12,30,1747,9,30,1,30,5,30,1750, + 8,30,10,30,12,30,1753,9,30,1,30,5,30,1756,8,30,10,30,12,30,1759, + 9,30,3,30,1761,8,30,1,31,1,31,1,32,1,32,1,33,1,33,1,34,1,34,1,35, + 1,35,1,36,1,36,1,37,1,37,3,37,1777,8,37,1,38,1,38,1,38,5,38,1782, + 8,38,10,38,12,38,1785,9,38,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1, + 40,3,40,1795,8,40,1,41,1,41,1,41,1,41,1,41,5,41,1802,8,41,10,41, + 12,41,1805,9,41,3,41,1807,8,41,1,41,1,41,1,41,1,41,1,41,5,41,1814, + 8,41,10,41,12,41,1817,9,41,3,41,1819,8,41,1,41,1,41,1,41,1,41,1, + 41,5,41,1826,8,41,10,41,12,41,1829,9,41,3,41,1831,8,41,1,41,1,41, + 1,41,1,41,1,41,5,41,1838,8,41,10,41,12,41,1841,9,41,3,41,1843,8, + 41,1,41,3,41,1846,8,41,1,41,1,41,1,41,3,41,1851,8,41,3,41,1853,8, + 41,1,41,1,41,3,41,1857,8,41,1,42,1,42,1,42,1,42,1,42,1,42,3,42,1865, + 8,42,1,42,1,42,1,42,1,42,3,42,1871,8,42,1,42,1,42,1,42,1,42,3,42, + 1877,8,42,1,42,5,42,1880,8,42,10,42,12,42,1883,9,42,1,43,1,43,1, + 43,4,43,1888,8,43,11,43,12,43,1889,1,43,1,43,1,43,1,43,1,43,1,43, + 5,43,1898,8,43,10,43,12,43,1901,9,43,1,43,1,43,1,43,1,43,1,43,1, + 43,3,43,1909,8,43,1,44,1,44,3,44,1913,8,44,1,44,3,44,1916,8,44,1, + 44,1,44,3,44,1920,8,44,1,45,1,45,3,45,1924,8,45,1,45,1,45,1,45,1, + 45,5,45,1930,8,45,10,45,12,45,1933,9,45,1,45,3,45,1936,8,45,1,45, + 3,45,1939,8,45,1,45,3,45,1942,8,45,1,45,3,45,1945,8,45,1,45,1,45, + 3,45,1949,8,45,1,46,1,46,3,46,1953,8,46,1,46,5,46,1956,8,46,10,46, + 12,46,1959,9,46,1,46,3,46,1962,8,46,1,46,3,46,1965,8,46,1,46,3,46, + 1968,8,46,1,46,3,46,1971,8,46,1,46,1,46,3,46,1975,8,46,1,46,5,46, + 1978,8,46,10,46,12,46,1981,9,46,1,46,3,46,1984,8,46,1,46,3,46,1987, + 8,46,1,46,3,46,1990,8,46,1,46,3,46,1993,8,46,3,46,1995,8,46,1,47, + 1,47,1,47,1,47,3,47,2001,8,47,1,47,1,47,1,47,1,47,1,47,3,47,2008, + 8,47,1,47,1,47,1,47,3,47,2013,8,47,1,47,3,47,2016,8,47,1,47,3,47, + 2019,8,47,1,47,1,47,3,47,2023,8,47,1,47,1,47,1,47,1,47,1,47,1,47, + 1,47,1,47,3,47,2033,8,47,1,47,1,47,3,47,2037,8,47,3,47,2039,8,47, + 1,47,3,47,2042,8,47,1,47,1,47,3,47,2046,8,47,1,48,1,48,5,48,2050, + 8,48,10,48,12,48,2053,9,48,1,48,3,48,2056,8,48,1,48,1,48,1,49,1, + 49,1,49,1,50,1,50,1,50,1,50,3,50,2067,8,50,1,50,1,50,1,50,1,50,1, + 50,1,50,3,50,2075,8,50,3,50,2077,8,50,1,51,1,51,1,51,1,51,1,51,3, + 51,2084,8,51,1,51,1,51,3,51,2088,8,51,1,51,1,51,1,51,1,52,1,52,1, + 52,1,52,1,52,1,52,1,52,3,52,2100,8,52,1,52,1,52,1,52,1,52,1,52,3, + 52,2107,8,52,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1, + 53,5,53,2120,8,53,10,53,12,53,2123,9,53,1,53,1,53,3,53,2127,8,53, + 1,54,1,54,1,54,5,54,2132,8,54,10,54,12,54,2135,9,54,1,55,1,55,1, + 55,1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,3,58,2150,8, + 58,1,58,5,58,2153,8,58,10,58,12,58,2156,9,58,1,58,1,58,1,59,1,59, + 1,59,1,59,1,59,1,59,5,59,2166,8,59,10,59,12,59,2169,9,59,1,59,1, + 59,3,59,2173,8,59,1,60,1,60,1,60,1,60,5,60,2179,8,60,10,60,12,60, + 2182,9,60,1,60,5,60,2185,8,60,10,60,12,60,2188,9,60,1,60,3,60,2191, + 8,60,1,60,3,60,2194,8,60,1,61,3,61,2197,8,61,1,61,1,61,1,61,1,61, + 1,61,3,61,2204,8,61,1,61,3,61,2207,8,61,1,61,1,61,1,61,1,61,3,61, + 2213,8,61,1,62,1,62,1,62,1,62,1,62,5,62,2220,8,62,10,62,12,62,2223, + 9,62,1,62,1,62,1,62,1,62,1,62,5,62,2230,8,62,10,62,12,62,2233,9, + 62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,5,62,2245,8, + 62,10,62,12,62,2248,9,62,1,62,1,62,3,62,2252,8,62,3,62,2254,8,62, + 1,63,1,63,1,63,3,63,2259,8,63,1,64,1,64,1,64,1,64,1,64,5,64,2266, + 8,64,10,64,12,64,2269,9,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3, + 64,2278,8,64,1,64,1,64,1,64,3,64,2283,8,64,5,64,2285,8,64,10,64, + 12,64,2288,9,64,1,64,1,64,3,64,2292,8,64,1,65,1,65,1,65,1,65,1,65, + 3,65,2299,8,65,1,65,1,65,1,65,3,65,2304,8,65,5,65,2306,8,65,10,65, + 12,65,2309,9,65,3,65,2311,8,65,1,65,3,65,2314,8,65,1,66,1,66,1,66, + 1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,2326,8,66,10,66,12,66,2329, + 9,66,1,66,1,66,1,66,1,67,1,67,1,67,1,67,1,67,5,67,2339,8,67,10,67, + 12,67,2342,9,67,1,67,1,67,3,67,2346,8,67,1,68,1,68,3,68,2350,8,68, + 1,68,3,68,2353,8,68,1,69,1,69,1,69,3,69,2358,8,69,1,69,1,69,1,69, + 3,69,2363,8,69,1,69,1,69,3,69,2367,8,69,1,69,3,69,2370,8,69,1,70, + 1,70,1,70,1,70,1,70,1,70,1,70,1,70,5,70,2380,8,70,10,70,12,70,2383, + 9,70,1,70,1,70,1,71,1,71,1,71,1,71,5,71,2391,8,71,10,71,12,71,2394, + 9,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,5,71,2404,8,71,10,71, + 12,71,2407,9,71,1,71,1,71,1,72,1,72,1,72,1,72,5,72,2415,8,72,10, + 72,12,72,2418,9,72,1,72,1,72,3,72,2422,8,72,1,72,3,72,2425,8,72, + 1,73,1,73,3,73,2429,8,73,1,73,3,73,2432,8,73,1,74,1,74,1,74,1,74, + 1,75,1,75,1,75,1,76,1,76,1,76,3,76,2444,8,76,1,76,1,76,1,76,1,76, + 1,76,5,76,2451,8,76,10,76,12,76,2454,9,76,3,76,2456,8,76,1,76,1, + 76,1,76,3,76,2461,8,76,1,76,1,76,1,76,5,76,2466,8,76,10,76,12,76, + 2469,9,76,3,76,2471,8,76,1,77,1,77,1,78,1,78,3,78,2477,8,78,1,78, + 1,78,1,78,1,78,5,78,2483,8,78,10,78,12,78,2486,9,78,3,78,2488,8, + 78,1,79,1,79,1,79,3,79,2493,8,79,1,79,1,79,3,79,2497,8,79,1,79,1, + 79,1,79,1,79,3,79,2503,8,79,1,79,1,79,3,79,2507,8,79,1,80,3,80,2510, + 8,80,1,80,1,80,1,80,3,80,2515,8,80,1,80,3,80,2518,8,80,1,80,1,80, + 1,80,3,80,2523,8,80,3,80,2525,8,80,1,81,1,81,1,81,1,81,3,81,2531, + 8,81,1,82,1,82,1,82,3,82,2536,8,82,1,82,1,82,1,82,1,82,1,82,3,82, + 2543,8,82,1,83,3,83,2546,8,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83, + 1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,3,83,2564,8,83,3,83, + 2566,8,83,1,83,3,83,2569,8,83,1,84,1,84,1,84,1,84,1,85,1,85,1,85, + 5,85,2578,8,85,10,85,12,85,2581,9,85,1,86,1,86,1,86,1,86,5,86,2587, + 8,86,10,86,12,86,2590,9,86,1,86,1,86,1,87,1,87,3,87,2596,8,87,1, + 88,1,88,1,88,1,88,5,88,2602,8,88,10,88,12,88,2605,9,88,1,88,1,88, + 1,89,1,89,1,89,3,89,2612,8,89,1,90,1,90,1,90,3,90,2617,8,90,1,90, + 3,90,2620,8,90,1,90,3,90,2623,8,90,1,90,1,90,1,90,1,90,1,90,1,90, + 3,90,2631,8,90,1,90,1,90,1,90,1,90,1,90,1,90,3,90,2639,8,90,1,90, + 1,90,1,90,1,90,1,90,1,90,5,90,2647,8,90,10,90,12,90,2650,9,90,1, + 90,1,90,1,90,1,90,1,90,1,90,1,90,5,90,2659,8,90,10,90,12,90,2662, + 9,90,3,90,2664,8,90,1,90,1,90,1,90,3,90,2669,8,90,1,91,1,91,1,91, + 3,91,2674,8,91,1,91,1,91,1,91,1,91,1,91,3,91,2681,8,91,1,91,1,91, + 1,91,1,91,1,91,3,91,2688,8,91,3,91,2690,8,91,1,92,1,92,1,92,1,92, + 1,92,1,92,1,92,1,92,1,92,5,92,2701,8,92,10,92,12,92,2704,9,92,1, + 92,1,92,1,92,3,92,2709,8,92,3,92,2711,8,92,1,92,1,92,1,92,1,92,1, + 92,1,92,5,92,2719,8,92,10,92,12,92,2722,9,92,1,92,1,92,1,92,3,92, + 2727,8,92,3,92,2729,8,92,1,93,1,93,1,93,1,93,1,94,1,94,3,94,2737, + 8,94,1,95,1,95,3,95,2741,8,95,1,96,3,96,2744,8,96,1,96,1,96,3,96, + 2748,8,96,3,96,2750,8,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,3,97, + 2759,8,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,97,3,97, + 2771,8,97,3,97,2773,8,97,1,97,1,97,1,97,1,97,1,97,3,97,2780,8,97, + 1,97,1,97,1,97,1,97,1,97,3,97,2787,8,97,1,97,1,97,1,97,1,97,3,97, + 2793,8,97,1,97,1,97,1,97,1,97,3,97,2799,8,97,3,97,2801,8,97,1,98, + 1,98,1,98,5,98,2806,8,98,10,98,12,98,2809,9,98,1,99,1,99,1,99,5, + 99,2814,8,99,10,99,12,99,2817,9,99,1,100,1,100,1,100,5,100,2822, + 8,100,10,100,12,100,2825,9,100,1,101,1,101,1,101,3,101,2830,8,101, + 1,102,1,102,1,102,3,102,2835,8,102,1,102,1,102,1,103,1,103,1,103, + 3,103,2842,8,103,1,103,1,103,1,104,1,104,3,104,2848,8,104,1,104, + 3,104,2851,8,104,1,104,1,104,3,104,2855,8,104,3,104,2857,8,104,1, + 105,1,105,1,105,5,105,2862,8,105,10,105,12,105,2865,9,105,1,106, + 1,106,1,106,1,106,5,106,2871,8,106,10,106,12,106,2874,9,106,1,106, + 1,106,1,107,1,107,3,107,2880,8,107,1,108,1,108,1,108,1,108,1,108, + 1,108,5,108,2888,8,108,10,108,12,108,2891,9,108,1,108,1,108,3,108, + 2895,8,108,1,109,1,109,3,109,2899,8,109,1,110,1,110,1,111,1,111, + 1,111,1,111,1,112,1,112,3,112,2909,8,112,1,113,1,113,1,113,5,113, + 2914,8,113,10,113,12,113,2917,9,113,1,114,1,114,1,114,1,114,1,114, + 1,114,1,114,1,114,1,114,1,114,3,114,2929,8,114,3,114,2931,8,114, + 1,114,1,114,1,114,1,114,1,114,1,114,5,114,2939,8,114,10,114,12,114, + 2942,9,114,1,115,3,115,2945,8,115,1,115,1,115,1,115,1,115,1,115, + 1,115,3,115,2953,8,115,1,115,1,115,1,115,1,115,1,115,5,115,2960, + 8,115,10,115,12,115,2963,9,115,1,115,1,115,1,115,3,115,2968,8,115, + 1,115,1,115,1,115,1,115,1,115,1,115,3,115,2976,8,115,1,115,1,115, + 1,115,3,115,2981,8,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 1,115,5,115,2991,8,115,10,115,12,115,2994,9,115,1,115,1,115,3,115, + 2998,8,115,1,115,3,115,3001,8,115,1,115,1,115,1,115,1,115,3,115, + 3007,8,115,1,115,1,115,3,115,3011,8,115,1,115,1,115,1,115,3,115, + 3016,8,115,1,115,1,115,1,115,3,115,3021,8,115,1,115,1,115,1,115, + 3,115,3026,8,115,1,116,1,116,1,116,1,116,3,116,3032,8,116,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116, + 1,116,1,116,1,116,1,116,1,116,1,116,1,116,5,116,3053,8,116,10,116, + 12,116,3056,9,116,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1,118, + 3,118,3066,8,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,3,118,3078,8,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,4,118,3088,8,118,11,118,12,118,3089,1,118,1,118,3,118, + 3094,8,118,1,118,1,118,1,118,1,118,1,118,4,118,3101,8,118,11,118, + 12,118,3102,1,118,1,118,3,118,3107,8,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,5,118, + 3123,8,118,10,118,12,118,3126,9,118,3,118,3128,8,118,1,118,1,118, + 1,118,1,118,1,118,1,118,3,118,3136,8,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,118,3,118,3145,8,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,3,118,3154,8,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,4,118,3175,8,118,11,118,12,118,3176,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 3,118,3193,8,118,1,118,1,118,1,118,5,118,3198,8,118,10,118,12,118, + 3201,9,118,3,118,3203,8,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,3,118,3212,8,118,1,118,1,118,3,118,3216,8,118,1,118,1,118, + 3,118,3220,8,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 4,118,3230,8,118,11,118,12,118,3231,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,3,118,3257,8,118,1,118, + 1,118,1,118,1,118,1,118,3,118,3264,8,118,1,118,3,118,3267,8,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,3,118,3282,8,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118, + 1,118,1,118,3,118,3303,8,118,1,118,1,118,3,118,3307,8,118,3,118, + 3309,8,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,5,118, + 3319,8,118,10,118,12,118,3322,9,118,1,119,1,119,1,119,1,119,1,119, + 1,119,1,119,3,119,3331,8,119,1,120,1,120,1,120,1,120,1,120,1,120, + 1,120,1,120,1,120,1,120,1,120,4,120,3344,8,120,11,120,12,120,3345, + 3,120,3348,8,120,1,121,1,121,1,122,1,122,1,123,1,123,1,124,1,124, + 1,125,1,125,1,125,3,125,3361,8,125,1,126,1,126,3,126,3365,8,126, + 1,127,1,127,1,127,4,127,3370,8,127,11,127,12,127,3371,1,128,1,128, + 1,128,3,128,3377,8,128,1,129,1,129,1,129,1,129,1,129,1,130,3,130, + 3385,8,130,1,130,1,130,1,130,3,130,3390,8,130,1,131,1,131,1,132, + 1,132,1,133,1,133,1,133,3,133,3399,8,133,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,3,134,3431,8,134,1,135,1,135,1,135,1,135, + 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, + 1,135,1,135,5,135,3450,8,135,10,135,12,135,3453,9,135,3,135,3455, + 8,135,1,135,1,135,3,135,3459,8,135,1,135,1,135,1,135,1,135,3,135, + 3465,8,135,1,135,1,135,1,135,1,135,3,135,3471,8,135,1,135,1,135, + 1,135,1,135,1,135,5,135,3478,8,135,10,135,12,135,3481,9,135,1,135, + 3,135,3484,8,135,3,135,3486,8,135,1,136,1,136,1,136,5,136,3491,8, + 136,10,136,12,136,3494,9,136,1,137,1,137,1,137,5,137,3499,8,137, + 10,137,12,137,3502,9,137,1,138,1,138,1,138,5,138,3507,8,138,10,138, + 12,138,3510,9,138,1,139,1,139,1,139,5,139,3515,8,139,10,139,12,139, + 3518,9,139,1,140,1,140,1,140,1,140,1,140,1,140,1,140,3,140,3527, + 8,140,1,141,1,141,1,141,1,142,1,142,1,142,5,142,3535,8,142,10,142, + 12,142,3538,9,142,1,143,1,143,1,143,1,143,3,143,3544,8,143,1,143, + 1,143,3,143,3548,8,143,1,144,1,144,1,144,5,144,3553,8,144,10,144, + 12,144,3556,9,144,1,145,1,145,1,145,5,145,3561,8,145,10,145,12,145, + 3564,9,145,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146, + 1,146,1,146,1,146,1,146,3,146,3579,8,146,1,147,1,147,3,147,3583, + 8,147,1,147,1,147,1,147,3,147,3588,8,147,1,147,1,147,3,147,3592, + 8,147,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,5,149,3608,8,149,10,149,12,149,3611,9,149, + 1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150, + 5,150,3624,8,150,10,150,12,150,3627,9,150,1,150,1,150,1,150,1,150, + 1,150,5,150,3634,8,150,10,150,12,150,3637,9,150,3,150,3639,8,150, + 1,150,1,150,1,150,1,150,1,150,5,150,3646,8,150,10,150,12,150,3649, + 9,150,3,150,3651,8,150,3,150,3653,8,150,1,150,3,150,3656,8,150,1, + 150,3,150,3659,8,150,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1, + 151,3,151,3669,8,151,1,152,1,152,1,152,1,152,1,152,1,152,1,152,3, + 152,3678,8,152,1,153,1,153,1,153,5,153,3683,8,153,10,153,12,153, + 3686,9,153,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154, + 3,154,3697,8,154,1,155,1,155,1,156,1,156,1,156,5,156,3704,8,156, + 10,156,12,156,3707,9,156,1,157,1,157,1,157,1,158,1,158,4,158,3714, + 8,158,11,158,12,158,3715,1,158,3,158,3719,8,158,1,159,1,159,3,159, + 3723,8,159,1,160,1,160,1,160,1,160,3,160,3729,8,160,1,161,1,161, + 1,162,3,162,3734,8,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,163,1,163,1,163,3,163,3751,8,163, + 1,164,1,164,1,165,1,165,1,166,1,166,1,167,1,167,1,167,9,1102,1172, + 1180,1200,1227,1236,1245,1254,1304,4,84,228,232,236,168,0,2,4,6, + 8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50, + 52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94, + 96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128, + 130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160, + 162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192, + 194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224, + 226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256, + 258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288, + 290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320, + 322,324,326,328,330,332,334,0,76,2,0,78,78,229,229,2,0,34,34,247, + 247,3,0,73,73,191,191,262,262,2,0,123,123,140,140,2,0,11,11,39,39, + 2,0,91,91,98,98,5,0,46,46,58,58,108,108,122,122,173,173,3,0,10,10, + 290,290,331,331,1,0,86,87,2,0,108,108,122,122,3,0,8,8,96,96,289, + 289,2,0,8,8,167,167,1,0,335,336,2,0,59,59,96,96,2,0,129,129,249, + 249,6,0,54,54,129,129,143,143,172,172,228,228,313,313,3,0,11,11, + 59,59,96,96,4,0,107,107,139,139,171,171,326,326,2,0,171,171,326, + 326,3,0,45,45,275,275,279,279,2,0,45,45,275,275,3,0,18,18,103,103, + 320,320,3,0,72,72,190,190,261,261,4,0,102,102,148,148,270,270,323, + 323,3,0,102,102,270,270,323,323,2,0,21,21,86,86,2,0,116,116,157, + 157,2,0,292,292,337,337,2,0,291,291,303,303,2,0,61,61,256,256,2, + 0,104,104,141,141,2,0,10,10,92,92,2,0,15,15,264,264,2,0,124,124, + 250,250,2,0,382,382,384,384,2,0,93,93,217,217,2,0,209,209,278,278, + 2,0,197,197,360,360,1,0,251,252,1,0,163,164,3,0,10,10,16,16,277, + 277,3,0,111,111,316,316,325,325,2,0,361,362,366,366,2,0,94,94,363, + 365,2,0,361,362,369,369,11,0,67,67,69,69,134,134,180,180,182,182, + 184,184,186,186,231,231,259,259,341,341,348,348,4,0,63,63,65,66, + 268,268,331,331,2,0,74,75,306,306,3,0,76,77,302,302,307,307,2,0, + 36,36,318,318,2,0,138,138,246,246,1,0,287,288,2,0,4,4,123,123,2, + 0,4,4,119,119,3,0,28,28,160,160,311,311,1,0,220,221,1,0,352,359, + 2,0,94,94,361,370,4,0,14,14,140,140,197,197,208,208,2,0,111,111, + 316,316,1,0,361,362,7,0,67,68,134,135,180,187,192,193,259,260,341, + 342,348,349,6,0,67,67,134,134,184,184,186,186,259,259,348,348,2, + 0,186,186,348,348,4,0,67,67,134,134,184,184,259,259,3,0,134,134, + 184,184,259,259,2,0,82,82,352,352,2,0,233,233,258,258,2,0,118,118, + 226,226,2,0,378,378,389,389,1,0,379,387,2,0,96,96,269,269,1,0,377, + 378,52,0,8,9,11,13,15,15,17,19,21,22,24,27,29,34,37,41,43,46,48, + 48,50,56,58,58,61,62,67,91,93,96,98,98,101,101,103,110,113,113,115, + 118,121,122,125,128,131,131,133,139,141,143,145,147,149,151,154, + 154,156,157,159,159,163,193,195,195,199,201,205,207,210,210,212, + 213,215,219,222,226,228,238,240,249,251,262,264,267,269,276,278, + 292,294,299,302,308,310,310,312,322,326,330,333,342,345,345,348, + 351,16,0,15,15,60,60,102,102,124,124,144,144,148,148,155,155,158, + 158,161,161,194,194,203,203,250,250,264,264,270,270,323,323,332, + 332,19,0,8,14,16,59,61,101,103,122,125,143,145,147,149,154,156,157, + 159,160,162,193,195,195,197,202,204,249,251,262,265,269,271,292, + 294,322,324,331,333,351,4365,0,339,1,0,0,0,2,344,1,0,0,0,4,1307, + 1,0,0,0,6,1402,1,0,0,0,8,1404,1,0,0,0,10,1416,1,0,0,0,12,1430,1, + 0,0,0,14,1511,1,0,0,0,16,1513,1,0,0,0,18,1518,1,0,0,0,20,1539,1, + 0,0,0,22,1541,1,0,0,0,24,1548,1,0,0,0,26,1550,1,0,0,0,28,1558,1, + 0,0,0,30,1567,1,0,0,0,32,1578,1,0,0,0,34,1599,1,0,0,0,36,1602,1, + 0,0,0,38,1605,1,0,0,0,40,1616,1,0,0,0,42,1632,1,0,0,0,44,1638,1, + 0,0,0,46,1640,1,0,0,0,48,1651,1,0,0,0,50,1658,1,0,0,0,52,1669,1, + 0,0,0,54,1686,1,0,0,0,56,1694,1,0,0,0,58,1696,1,0,0,0,60,1760,1, + 0,0,0,62,1762,1,0,0,0,64,1764,1,0,0,0,66,1766,1,0,0,0,68,1768,1, + 0,0,0,70,1770,1,0,0,0,72,1772,1,0,0,0,74,1776,1,0,0,0,76,1778,1, + 0,0,0,78,1786,1,0,0,0,80,1794,1,0,0,0,82,1806,1,0,0,0,84,1858,1, + 0,0,0,86,1908,1,0,0,0,88,1912,1,0,0,0,90,1948,1,0,0,0,92,1994,1, + 0,0,0,94,2015,1,0,0,0,96,2047,1,0,0,0,98,2059,1,0,0,0,100,2062,1, + 0,0,0,102,2078,1,0,0,0,104,2092,1,0,0,0,106,2126,1,0,0,0,108,2128, + 1,0,0,0,110,2136,1,0,0,0,112,2140,1,0,0,0,114,2143,1,0,0,0,116,2146, + 1,0,0,0,118,2172,1,0,0,0,120,2174,1,0,0,0,122,2212,1,0,0,0,124,2253, + 1,0,0,0,126,2258,1,0,0,0,128,2291,1,0,0,0,130,2313,1,0,0,0,132,2315, + 1,0,0,0,134,2345,1,0,0,0,136,2347,1,0,0,0,138,2354,1,0,0,0,140,2371, + 1,0,0,0,142,2386,1,0,0,0,144,2410,1,0,0,0,146,2426,1,0,0,0,148,2433, + 1,0,0,0,150,2437,1,0,0,0,152,2440,1,0,0,0,154,2472,1,0,0,0,156,2487, + 1,0,0,0,158,2506,1,0,0,0,160,2524,1,0,0,0,162,2530,1,0,0,0,164,2532, + 1,0,0,0,166,2568,1,0,0,0,168,2570,1,0,0,0,170,2574,1,0,0,0,172,2582, + 1,0,0,0,174,2593,1,0,0,0,176,2597,1,0,0,0,178,2608,1,0,0,0,180,2668, + 1,0,0,0,182,2689,1,0,0,0,184,2710,1,0,0,0,186,2730,1,0,0,0,188,2736, + 1,0,0,0,190,2740,1,0,0,0,192,2749,1,0,0,0,194,2800,1,0,0,0,196,2802, + 1,0,0,0,198,2810,1,0,0,0,200,2818,1,0,0,0,202,2826,1,0,0,0,204,2834, + 1,0,0,0,206,2841,1,0,0,0,208,2847,1,0,0,0,210,2858,1,0,0,0,212,2866, + 1,0,0,0,214,2879,1,0,0,0,216,2894,1,0,0,0,218,2898,1,0,0,0,220,2900, + 1,0,0,0,222,2902,1,0,0,0,224,2908,1,0,0,0,226,2910,1,0,0,0,228,2930, + 1,0,0,0,230,3025,1,0,0,0,232,3031,1,0,0,0,234,3057,1,0,0,0,236,3308, + 1,0,0,0,238,3330,1,0,0,0,240,3347,1,0,0,0,242,3349,1,0,0,0,244,3351, + 1,0,0,0,246,3353,1,0,0,0,248,3355,1,0,0,0,250,3357,1,0,0,0,252,3362, + 1,0,0,0,254,3369,1,0,0,0,256,3373,1,0,0,0,258,3378,1,0,0,0,260,3384, + 1,0,0,0,262,3391,1,0,0,0,264,3393,1,0,0,0,266,3398,1,0,0,0,268,3430, + 1,0,0,0,270,3485,1,0,0,0,272,3487,1,0,0,0,274,3495,1,0,0,0,276,3503, + 1,0,0,0,278,3511,1,0,0,0,280,3526,1,0,0,0,282,3528,1,0,0,0,284,3531, + 1,0,0,0,286,3539,1,0,0,0,288,3549,1,0,0,0,290,3557,1,0,0,0,292,3578, + 1,0,0,0,294,3580,1,0,0,0,296,3593,1,0,0,0,298,3598,1,0,0,0,300,3658, + 1,0,0,0,302,3668,1,0,0,0,304,3677,1,0,0,0,306,3679,1,0,0,0,308,3696, + 1,0,0,0,310,3698,1,0,0,0,312,3700,1,0,0,0,314,3708,1,0,0,0,316,3718, + 1,0,0,0,318,3722,1,0,0,0,320,3728,1,0,0,0,322,3730,1,0,0,0,324,3733, + 1,0,0,0,326,3750,1,0,0,0,328,3752,1,0,0,0,330,3754,1,0,0,0,332,3756, + 1,0,0,0,334,3758,1,0,0,0,336,338,3,2,1,0,337,336,1,0,0,0,338,341, + 1,0,0,0,339,337,1,0,0,0,339,340,1,0,0,0,340,342,1,0,0,0,341,339, + 1,0,0,0,342,343,5,0,0,1,343,1,1,0,0,0,344,346,3,4,2,0,345,347,5, + 1,0,0,346,345,1,0,0,0,346,347,1,0,0,0,347,3,1,0,0,0,348,1308,3,12, + 6,0,349,351,3,28,14,0,350,349,1,0,0,0,350,351,1,0,0,0,351,352,1, + 0,0,0,352,1308,3,60,30,0,353,355,5,330,0,0,354,356,3,22,11,0,355, + 354,1,0,0,0,355,356,1,0,0,0,356,357,1,0,0,0,357,1308,3,62,31,0,358, + 359,5,269,0,0,359,362,5,37,0,0,360,363,3,318,159,0,361,363,3,328, + 164,0,362,360,1,0,0,0,362,361,1,0,0,0,363,1308,1,0,0,0,364,365,5, + 59,0,0,365,367,3,22,11,0,366,368,3,148,74,0,367,366,1,0,0,0,367, + 368,1,0,0,0,368,369,1,0,0,0,369,379,3,64,32,0,370,371,5,51,0,0,371, + 378,3,328,164,0,372,373,5,170,0,0,373,378,3,328,164,0,374,375,5, + 346,0,0,375,376,7,0,0,0,376,378,3,38,19,0,377,370,1,0,0,0,377,372, + 1,0,0,0,377,374,1,0,0,0,378,381,1,0,0,0,379,377,1,0,0,0,379,380, + 1,0,0,0,380,1308,1,0,0,0,381,379,1,0,0,0,382,383,5,11,0,0,383,384, + 3,22,11,0,384,385,3,62,31,0,385,386,5,269,0,0,386,387,7,0,0,0,387, + 388,3,38,19,0,388,1308,1,0,0,0,389,390,5,11,0,0,390,391,3,22,11, + 0,391,392,3,62,31,0,392,393,5,269,0,0,393,394,5,170,0,0,394,395, + 3,328,164,0,395,1308,1,0,0,0,396,397,5,96,0,0,397,399,3,22,11,0, + 398,400,3,150,75,0,399,398,1,0,0,0,399,400,1,0,0,0,400,401,1,0,0, + 0,401,403,3,62,31,0,402,404,7,1,0,0,403,402,1,0,0,0,403,404,1,0, + 0,0,404,1308,1,0,0,0,405,406,5,273,0,0,406,409,7,2,0,0,407,408,7, + 3,0,0,408,410,3,198,99,0,409,407,1,0,0,0,409,410,1,0,0,0,410,415, + 1,0,0,0,411,413,5,163,0,0,412,411,1,0,0,0,412,413,1,0,0,0,413,414, + 1,0,0,0,414,416,3,328,164,0,415,412,1,0,0,0,415,416,1,0,0,0,416, + 1308,1,0,0,0,417,419,5,59,0,0,418,420,5,298,0,0,419,418,1,0,0,0, + 419,420,1,0,0,0,420,422,1,0,0,0,421,423,5,109,0,0,422,421,1,0,0, + 0,422,423,1,0,0,0,423,424,1,0,0,0,424,426,5,293,0,0,425,427,3,148, + 74,0,426,425,1,0,0,0,426,427,1,0,0,0,427,428,1,0,0,0,428,433,3,66, + 33,0,429,430,5,2,0,0,430,431,3,288,144,0,431,432,5,3,0,0,432,434, + 1,0,0,0,433,429,1,0,0,0,433,434,1,0,0,0,434,436,1,0,0,0,435,437, + 3,32,16,0,436,435,1,0,0,0,436,437,1,0,0,0,437,438,1,0,0,0,438,443, + 3,34,17,0,439,441,5,20,0,0,440,439,1,0,0,0,440,441,1,0,0,0,441,442, + 1,0,0,0,442,444,3,12,6,0,443,440,1,0,0,0,443,444,1,0,0,0,444,1308, + 1,0,0,0,445,446,5,59,0,0,446,448,5,293,0,0,447,449,3,148,74,0,448, + 447,1,0,0,0,448,449,1,0,0,0,449,450,1,0,0,0,450,451,3,66,33,0,451, + 452,5,163,0,0,452,463,3,68,34,0,453,462,3,32,16,0,454,462,3,194, + 97,0,455,462,3,54,27,0,456,457,5,170,0,0,457,462,3,328,164,0,458, + 459,5,297,0,0,459,462,3,38,19,0,460,462,3,36,18,0,461,453,1,0,0, + 0,461,454,1,0,0,0,461,455,1,0,0,0,461,456,1,0,0,0,461,458,1,0,0, + 0,461,460,1,0,0,0,462,465,1,0,0,0,463,461,1,0,0,0,463,464,1,0,0, + 0,464,1308,1,0,0,0,465,463,1,0,0,0,466,467,5,59,0,0,467,469,5,208, + 0,0,468,466,1,0,0,0,468,469,1,0,0,0,469,470,1,0,0,0,470,471,5,244, + 0,0,471,472,5,293,0,0,472,477,3,66,33,0,473,474,5,2,0,0,474,475, + 3,288,144,0,475,476,5,3,0,0,476,478,1,0,0,0,477,473,1,0,0,0,477, + 478,1,0,0,0,478,480,1,0,0,0,479,481,3,32,16,0,480,479,1,0,0,0,480, + 481,1,0,0,0,481,482,1,0,0,0,482,487,3,34,17,0,483,485,5,20,0,0,484, + 483,1,0,0,0,484,485,1,0,0,0,485,486,1,0,0,0,486,488,3,12,6,0,487, + 484,1,0,0,0,487,488,1,0,0,0,488,1308,1,0,0,0,489,490,5,13,0,0,490, + 491,5,293,0,0,491,493,3,68,34,0,492,494,3,18,9,0,493,492,1,0,0,0, + 493,494,1,0,0,0,494,495,1,0,0,0,495,496,5,55,0,0,496,504,5,282,0, + 0,497,505,5,196,0,0,498,499,5,119,0,0,499,500,5,50,0,0,500,505,3, + 76,38,0,501,502,5,119,0,0,502,503,5,10,0,0,503,505,5,50,0,0,504, + 497,1,0,0,0,504,498,1,0,0,0,504,501,1,0,0,0,504,505,1,0,0,0,505, + 1308,1,0,0,0,506,507,5,13,0,0,507,510,5,294,0,0,508,509,7,3,0,0, + 509,511,3,62,31,0,510,508,1,0,0,0,510,511,1,0,0,0,511,512,1,0,0, + 0,512,513,5,55,0,0,513,515,5,282,0,0,514,516,5,196,0,0,515,514,1, + 0,0,0,515,516,1,0,0,0,516,1308,1,0,0,0,517,518,5,11,0,0,518,519, + 5,293,0,0,519,520,3,68,34,0,520,521,5,8,0,0,521,522,5,49,0,0,522, + 523,3,274,137,0,523,1308,1,0,0,0,524,525,5,11,0,0,525,526,5,293, + 0,0,526,527,3,68,34,0,527,528,5,8,0,0,528,529,5,50,0,0,529,530,5, + 2,0,0,530,531,3,272,136,0,531,532,5,3,0,0,532,1308,1,0,0,0,533,534, + 5,11,0,0,534,535,5,293,0,0,535,536,3,68,34,0,536,537,5,241,0,0,537, + 538,5,49,0,0,538,539,3,74,37,0,539,540,5,309,0,0,540,541,3,78,39, + 0,541,1308,1,0,0,0,542,543,5,11,0,0,543,544,5,293,0,0,544,545,3, + 68,34,0,545,546,5,96,0,0,546,548,5,49,0,0,547,549,3,150,75,0,548, + 547,1,0,0,0,548,549,1,0,0,0,549,550,1,0,0,0,550,551,3,74,37,0,551, + 1308,1,0,0,0,552,553,5,11,0,0,553,554,5,293,0,0,554,555,3,68,34, + 0,555,556,5,96,0,0,556,558,5,50,0,0,557,559,3,150,75,0,558,557,1, + 0,0,0,558,559,1,0,0,0,559,560,1,0,0,0,560,561,5,2,0,0,561,562,3, + 76,38,0,562,563,5,3,0,0,563,1308,1,0,0,0,564,569,5,11,0,0,565,566, + 5,293,0,0,566,570,3,68,34,0,567,568,5,338,0,0,568,570,3,72,36,0, + 569,565,1,0,0,0,569,567,1,0,0,0,570,571,1,0,0,0,571,572,5,241,0, + 0,572,573,5,309,0,0,573,574,3,198,99,0,574,1308,1,0,0,0,575,580, + 5,11,0,0,576,577,5,293,0,0,577,581,3,68,34,0,578,579,5,338,0,0,579, + 581,3,72,36,0,580,576,1,0,0,0,580,578,1,0,0,0,581,582,1,0,0,0,582, + 583,5,269,0,0,583,584,5,297,0,0,584,585,3,38,19,0,585,1308,1,0,0, + 0,586,591,5,11,0,0,587,588,5,293,0,0,588,592,3,68,34,0,589,590,5, + 338,0,0,590,592,3,72,36,0,591,587,1,0,0,0,591,589,1,0,0,0,592,593, + 1,0,0,0,593,594,5,328,0,0,594,596,5,297,0,0,595,597,3,150,75,0,596, + 595,1,0,0,0,596,597,1,0,0,0,597,598,1,0,0,0,598,599,3,38,19,0,599, + 1308,1,0,0,0,600,601,5,11,0,0,601,602,5,293,0,0,602,603,3,68,34, + 0,603,605,7,4,0,0,604,606,5,49,0,0,605,604,1,0,0,0,605,606,1,0,0, + 0,606,607,1,0,0,0,607,609,3,74,37,0,608,610,3,326,163,0,609,608, + 1,0,0,0,609,610,1,0,0,0,610,1308,1,0,0,0,611,612,5,11,0,0,612,613, + 5,293,0,0,613,615,3,68,34,0,614,616,3,18,9,0,615,614,1,0,0,0,615, + 616,1,0,0,0,616,617,1,0,0,0,617,619,5,39,0,0,618,620,5,49,0,0,619, + 618,1,0,0,0,619,620,1,0,0,0,620,621,1,0,0,0,621,622,3,74,37,0,622, + 624,3,286,143,0,623,625,3,266,133,0,624,623,1,0,0,0,624,625,1,0, + 0,0,625,1308,1,0,0,0,626,627,5,11,0,0,627,628,5,293,0,0,628,630, + 3,68,34,0,629,631,3,18,9,0,630,629,1,0,0,0,630,631,1,0,0,0,631,632, + 1,0,0,0,632,633,5,244,0,0,633,634,5,50,0,0,634,635,5,2,0,0,635,636, + 3,276,138,0,636,637,5,3,0,0,637,1308,1,0,0,0,638,639,5,11,0,0,639, + 640,5,293,0,0,640,642,3,68,34,0,641,643,3,18,9,0,642,641,1,0,0,0, + 642,643,1,0,0,0,643,644,1,0,0,0,644,645,5,269,0,0,645,646,5,266, + 0,0,646,650,3,328,164,0,647,648,5,346,0,0,648,649,5,267,0,0,649, + 651,3,38,19,0,650,647,1,0,0,0,650,651,1,0,0,0,651,1308,1,0,0,0,652, + 653,5,11,0,0,653,654,5,293,0,0,654,656,3,68,34,0,655,657,3,18,9, + 0,656,655,1,0,0,0,656,657,1,0,0,0,657,658,1,0,0,0,658,659,5,269, + 0,0,659,660,5,267,0,0,660,661,3,38,19,0,661,1308,1,0,0,0,662,667, + 5,11,0,0,663,664,5,293,0,0,664,668,3,68,34,0,665,666,5,338,0,0,666, + 668,3,72,36,0,667,663,1,0,0,0,667,665,1,0,0,0,668,669,1,0,0,0,669, + 671,5,8,0,0,670,672,3,148,74,0,671,670,1,0,0,0,671,672,1,0,0,0,672, + 674,1,0,0,0,673,675,3,16,8,0,674,673,1,0,0,0,675,676,1,0,0,0,676, + 674,1,0,0,0,676,677,1,0,0,0,677,1308,1,0,0,0,678,679,5,11,0,0,679, + 680,5,293,0,0,680,681,3,68,34,0,681,682,3,18,9,0,682,683,5,241,0, + 0,683,684,5,309,0,0,684,685,3,18,9,0,685,1308,1,0,0,0,686,691,5, + 11,0,0,687,688,5,293,0,0,688,692,3,68,34,0,689,690,5,338,0,0,690, + 692,3,72,36,0,691,687,1,0,0,0,691,689,1,0,0,0,692,693,1,0,0,0,693, + 695,5,96,0,0,694,696,3,150,75,0,695,694,1,0,0,0,695,696,1,0,0,0, + 696,697,1,0,0,0,697,702,3,18,9,0,698,699,5,4,0,0,699,701,3,18,9, + 0,700,698,1,0,0,0,701,704,1,0,0,0,702,700,1,0,0,0,702,703,1,0,0, + 0,703,706,1,0,0,0,704,702,1,0,0,0,705,707,5,230,0,0,706,705,1,0, + 0,0,706,707,1,0,0,0,707,1308,1,0,0,0,708,709,5,11,0,0,709,710,5, + 293,0,0,710,712,3,68,34,0,711,713,3,18,9,0,712,711,1,0,0,0,712,713, + 1,0,0,0,713,714,1,0,0,0,714,715,5,269,0,0,715,716,5,170,0,0,716, + 717,3,328,164,0,717,1308,1,0,0,0,718,719,5,11,0,0,719,720,5,293, + 0,0,720,721,3,68,34,0,721,722,5,237,0,0,722,723,5,219,0,0,723,1308, + 1,0,0,0,724,725,5,11,0,0,725,726,5,176,0,0,726,727,5,338,0,0,727, + 728,3,72,36,0,728,729,7,5,0,0,729,730,5,248,0,0,730,1308,1,0,0,0, + 731,732,5,11,0,0,732,733,5,176,0,0,733,734,5,338,0,0,734,735,3,72, + 36,0,735,736,5,269,0,0,736,737,5,297,0,0,737,738,3,38,19,0,738,1308, + 1,0,0,0,739,740,5,96,0,0,740,742,5,293,0,0,741,743,3,150,75,0,742, + 741,1,0,0,0,742,743,1,0,0,0,743,744,1,0,0,0,744,746,3,68,34,0,745, + 747,5,230,0,0,746,745,1,0,0,0,746,747,1,0,0,0,747,1308,1,0,0,0,748, + 749,5,96,0,0,749,751,5,338,0,0,750,752,3,150,75,0,751,750,1,0,0, + 0,751,752,1,0,0,0,752,753,1,0,0,0,753,1308,3,72,36,0,754,755,5,96, + 0,0,755,756,5,176,0,0,756,758,5,338,0,0,757,759,3,150,75,0,758,757, + 1,0,0,0,758,759,1,0,0,0,759,760,1,0,0,0,760,1308,3,72,36,0,761,764, + 5,59,0,0,762,763,5,208,0,0,763,765,5,244,0,0,764,762,1,0,0,0,764, + 765,1,0,0,0,765,770,1,0,0,0,766,768,5,128,0,0,767,766,1,0,0,0,767, + 768,1,0,0,0,768,769,1,0,0,0,769,771,5,298,0,0,770,767,1,0,0,0,770, + 771,1,0,0,0,771,772,1,0,0,0,772,774,5,338,0,0,773,775,3,148,74,0, + 774,773,1,0,0,0,774,775,1,0,0,0,775,776,1,0,0,0,776,778,3,70,35, + 0,777,779,3,176,88,0,778,777,1,0,0,0,778,779,1,0,0,0,779,789,1,0, + 0,0,780,781,5,51,0,0,781,788,3,328,164,0,782,783,5,218,0,0,783,784, + 5,203,0,0,784,788,3,168,84,0,785,786,5,297,0,0,786,788,3,38,19,0, + 787,780,1,0,0,0,787,782,1,0,0,0,787,785,1,0,0,0,788,791,1,0,0,0, + 789,787,1,0,0,0,789,790,1,0,0,0,790,792,1,0,0,0,791,789,1,0,0,0, + 792,793,5,20,0,0,793,794,3,12,6,0,794,1308,1,0,0,0,795,798,5,59, + 0,0,796,797,5,208,0,0,797,799,5,244,0,0,798,796,1,0,0,0,798,799, + 1,0,0,0,799,801,1,0,0,0,800,802,5,128,0,0,801,800,1,0,0,0,801,802, + 1,0,0,0,802,803,1,0,0,0,803,804,5,298,0,0,804,805,5,338,0,0,805, + 810,3,70,35,0,806,807,5,2,0,0,807,808,3,284,142,0,808,809,5,3,0, + 0,809,811,1,0,0,0,810,806,1,0,0,0,810,811,1,0,0,0,811,812,1,0,0, + 0,812,815,3,32,16,0,813,814,5,207,0,0,814,816,3,38,19,0,815,813, + 1,0,0,0,815,816,1,0,0,0,816,1308,1,0,0,0,817,818,5,11,0,0,818,819, + 5,338,0,0,819,821,3,72,36,0,820,822,5,20,0,0,821,820,1,0,0,0,821, + 822,1,0,0,0,822,823,1,0,0,0,823,824,3,12,6,0,824,1308,1,0,0,0,825, + 828,5,59,0,0,826,827,5,208,0,0,827,829,5,244,0,0,828,826,1,0,0,0, + 828,829,1,0,0,0,829,831,1,0,0,0,830,832,5,298,0,0,831,830,1,0,0, + 0,831,832,1,0,0,0,832,833,1,0,0,0,833,835,5,125,0,0,834,836,3,148, + 74,0,835,834,1,0,0,0,835,836,1,0,0,0,836,837,1,0,0,0,837,838,3,310, + 155,0,838,839,5,20,0,0,839,853,3,328,164,0,840,841,5,332,0,0,841, + 842,3,318,159,0,842,843,3,328,164,0,843,850,1,0,0,0,844,845,5,4, + 0,0,845,846,3,318,159,0,846,847,3,328,164,0,847,849,1,0,0,0,848, + 844,1,0,0,0,849,852,1,0,0,0,850,848,1,0,0,0,850,851,1,0,0,0,851, + 854,1,0,0,0,852,850,1,0,0,0,853,840,1,0,0,0,853,854,1,0,0,0,854, + 1308,1,0,0,0,855,856,5,59,0,0,856,857,5,176,0,0,857,859,5,338,0, + 0,858,860,3,148,74,0,859,858,1,0,0,0,859,860,1,0,0,0,860,861,1,0, + 0,0,861,863,3,70,35,0,862,864,3,32,16,0,863,862,1,0,0,0,863,864, + 1,0,0,0,864,882,1,0,0,0,865,866,5,207,0,0,866,881,3,38,19,0,867, + 868,5,218,0,0,868,869,5,31,0,0,869,881,3,212,106,0,870,881,3,10, + 5,0,871,881,3,8,4,0,872,881,3,194,97,0,873,881,3,54,27,0,874,875, + 5,170,0,0,875,881,3,328,164,0,876,877,5,51,0,0,877,881,3,328,164, + 0,878,879,5,297,0,0,879,881,3,38,19,0,880,865,1,0,0,0,880,867,1, + 0,0,0,880,870,1,0,0,0,880,871,1,0,0,0,880,872,1,0,0,0,880,873,1, + 0,0,0,880,874,1,0,0,0,880,876,1,0,0,0,880,878,1,0,0,0,881,884,1, + 0,0,0,882,880,1,0,0,0,882,883,1,0,0,0,883,885,1,0,0,0,884,882,1, + 0,0,0,885,886,5,20,0,0,886,887,3,12,6,0,887,1308,1,0,0,0,888,890, + 5,96,0,0,889,891,5,298,0,0,890,889,1,0,0,0,890,891,1,0,0,0,891,892, + 1,0,0,0,892,894,5,125,0,0,893,895,3,150,75,0,894,893,1,0,0,0,894, + 895,1,0,0,0,895,896,1,0,0,0,896,1308,3,308,154,0,897,900,5,81,0, + 0,898,899,5,208,0,0,899,901,5,244,0,0,900,898,1,0,0,0,900,901,1, + 0,0,0,901,903,1,0,0,0,902,904,5,336,0,0,903,902,1,0,0,0,903,904, + 1,0,0,0,904,905,1,0,0,0,905,907,3,308,154,0,906,908,3,270,135,0, + 907,906,1,0,0,0,907,908,1,0,0,0,908,910,1,0,0,0,909,911,3,282,141, + 0,910,909,1,0,0,0,910,911,1,0,0,0,911,1308,1,0,0,0,912,913,5,96, + 0,0,913,914,5,298,0,0,914,916,5,336,0,0,915,917,3,150,75,0,916,915, + 1,0,0,0,916,917,1,0,0,0,917,921,1,0,0,0,918,922,3,68,34,0,919,922, + 3,72,36,0,920,922,3,308,154,0,921,918,1,0,0,0,921,919,1,0,0,0,921, + 920,1,0,0,0,922,1308,1,0,0,0,923,925,5,106,0,0,924,926,7,6,0,0,925, + 924,1,0,0,0,925,926,1,0,0,0,926,927,1,0,0,0,927,1308,3,4,2,0,928, + 929,5,273,0,0,929,932,5,294,0,0,930,931,7,3,0,0,931,933,3,62,31, + 0,932,930,1,0,0,0,932,933,1,0,0,0,933,938,1,0,0,0,934,936,5,163, + 0,0,935,934,1,0,0,0,935,936,1,0,0,0,936,937,1,0,0,0,937,939,3,328, + 164,0,938,935,1,0,0,0,938,939,1,0,0,0,939,1308,1,0,0,0,940,941,5, + 273,0,0,941,942,5,293,0,0,942,945,5,108,0,0,943,944,7,3,0,0,944, + 946,3,62,31,0,945,943,1,0,0,0,945,946,1,0,0,0,946,947,1,0,0,0,947, + 948,5,163,0,0,948,950,3,328,164,0,949,951,3,18,9,0,950,949,1,0,0, + 0,950,951,1,0,0,0,951,1308,1,0,0,0,952,953,5,273,0,0,953,954,5,297, + 0,0,954,959,3,68,34,0,955,956,5,2,0,0,956,957,3,42,21,0,957,958, + 5,3,0,0,958,960,1,0,0,0,959,955,1,0,0,0,959,960,1,0,0,0,960,1308, + 1,0,0,0,961,962,5,273,0,0,962,963,5,50,0,0,963,964,7,3,0,0,964,967, + 3,68,34,0,965,966,7,3,0,0,966,968,3,62,31,0,967,965,1,0,0,0,967, + 968,1,0,0,0,968,1308,1,0,0,0,969,970,5,273,0,0,970,973,5,339,0,0, + 971,972,7,3,0,0,972,974,3,62,31,0,973,971,1,0,0,0,973,974,1,0,0, + 0,974,979,1,0,0,0,975,977,5,163,0,0,976,975,1,0,0,0,976,977,1,0, + 0,0,977,978,1,0,0,0,978,980,3,328,164,0,979,976,1,0,0,0,979,980, + 1,0,0,0,980,1308,1,0,0,0,981,982,5,273,0,0,982,983,5,219,0,0,983, + 985,3,68,34,0,984,986,3,18,9,0,985,984,1,0,0,0,985,986,1,0,0,0,986, + 1308,1,0,0,0,987,989,5,273,0,0,988,990,7,7,0,0,989,988,1,0,0,0,989, + 990,1,0,0,0,990,991,1,0,0,0,991,994,5,126,0,0,992,993,7,3,0,0,993, + 995,3,62,31,0,994,992,1,0,0,0,994,995,1,0,0,0,995,1003,1,0,0,0,996, + 998,5,163,0,0,997,996,1,0,0,0,997,998,1,0,0,0,998,1001,1,0,0,0,999, + 1002,3,198,99,0,1000,1002,3,328,164,0,1001,999,1,0,0,0,1001,1000, + 1,0,0,0,1002,1004,1,0,0,0,1003,997,1,0,0,0,1003,1004,1,0,0,0,1004, + 1308,1,0,0,0,1005,1006,5,273,0,0,1006,1007,5,59,0,0,1007,1008,5, + 293,0,0,1008,1011,3,68,34,0,1009,1010,5,20,0,0,1010,1012,5,266,0, + 0,1011,1009,1,0,0,0,1011,1012,1,0,0,0,1012,1308,1,0,0,0,1013,1014, + 5,273,0,0,1014,1015,5,62,0,0,1015,1308,3,22,11,0,1016,1017,5,273, + 0,0,1017,1022,5,38,0,0,1018,1020,5,163,0,0,1019,1018,1,0,0,0,1019, + 1020,1,0,0,0,1020,1021,1,0,0,0,1021,1023,3,328,164,0,1022,1019,1, + 0,0,0,1022,1023,1,0,0,0,1023,1308,1,0,0,0,1024,1025,5,273,0,0,1025, + 1026,5,176,0,0,1026,1029,5,339,0,0,1027,1028,7,3,0,0,1028,1030,3, + 62,31,0,1029,1027,1,0,0,0,1029,1030,1,0,0,0,1030,1035,1,0,0,0,1031, + 1033,5,163,0,0,1032,1031,1,0,0,0,1032,1033,1,0,0,0,1033,1034,1,0, + 0,0,1034,1036,3,328,164,0,1035,1032,1,0,0,0,1035,1036,1,0,0,0,1036, + 1308,1,0,0,0,1037,1038,5,273,0,0,1038,1039,5,59,0,0,1039,1040,5, + 176,0,0,1040,1041,5,338,0,0,1041,1044,3,72,36,0,1042,1043,5,20,0, + 0,1043,1045,5,266,0,0,1044,1042,1,0,0,0,1044,1045,1,0,0,0,1045,1308, + 1,0,0,0,1046,1047,7,8,0,0,1047,1049,5,125,0,0,1048,1050,5,108,0, + 0,1049,1048,1,0,0,0,1049,1050,1,0,0,0,1050,1051,1,0,0,0,1051,1308, + 3,24,12,0,1052,1053,7,8,0,0,1053,1055,5,72,0,0,1054,1056,5,108,0, + 0,1055,1054,1,0,0,0,1055,1056,1,0,0,0,1056,1057,1,0,0,0,1057,1308, + 3,62,31,0,1058,1060,7,8,0,0,1059,1061,5,293,0,0,1060,1059,1,0,0, + 0,1060,1061,1,0,0,0,1061,1063,1,0,0,0,1062,1064,7,9,0,0,1063,1062, + 1,0,0,0,1063,1064,1,0,0,0,1064,1065,1,0,0,0,1065,1067,3,68,34,0, + 1066,1068,3,18,9,0,1067,1066,1,0,0,0,1067,1068,1,0,0,0,1068,1070, + 1,0,0,0,1069,1071,3,26,13,0,1070,1069,1,0,0,0,1070,1071,1,0,0,0, + 1071,1308,1,0,0,0,1072,1074,7,8,0,0,1073,1075,5,232,0,0,1074,1073, + 1,0,0,0,1074,1075,1,0,0,0,1075,1076,1,0,0,0,1076,1308,3,12,6,0,1077, + 1078,5,51,0,0,1078,1084,5,203,0,0,1079,1080,3,22,11,0,1080,1081, + 3,62,31,0,1081,1085,1,0,0,0,1082,1083,5,293,0,0,1083,1085,3,68,34, + 0,1084,1079,1,0,0,0,1084,1082,1,0,0,0,1085,1086,1,0,0,0,1086,1089, + 5,153,0,0,1087,1090,3,328,164,0,1088,1090,5,198,0,0,1089,1087,1, + 0,0,0,1089,1088,1,0,0,0,1090,1308,1,0,0,0,1091,1092,5,240,0,0,1092, + 1093,5,293,0,0,1093,1308,3,68,34,0,1094,1095,5,240,0,0,1095,1096, + 5,125,0,0,1096,1308,3,308,154,0,1097,1105,5,240,0,0,1098,1106,3, + 328,164,0,1099,1101,9,0,0,0,1100,1099,1,0,0,0,1101,1104,1,0,0,0, + 1102,1103,1,0,0,0,1102,1100,1,0,0,0,1103,1106,1,0,0,0,1104,1102, + 1,0,0,0,1105,1098,1,0,0,0,1105,1102,1,0,0,0,1106,1308,1,0,0,0,1107, + 1108,5,240,0,0,1108,1109,5,176,0,0,1109,1110,5,338,0,0,1110,1308, + 3,72,36,0,1111,1113,5,33,0,0,1112,1114,5,159,0,0,1113,1112,1,0,0, + 0,1113,1114,1,0,0,0,1114,1115,1,0,0,0,1115,1116,5,293,0,0,1116,1119, + 3,68,34,0,1117,1118,5,207,0,0,1118,1120,3,38,19,0,1119,1117,1,0, + 0,0,1119,1120,1,0,0,0,1120,1125,1,0,0,0,1121,1123,5,20,0,0,1122, + 1121,1,0,0,0,1122,1123,1,0,0,0,1123,1124,1,0,0,0,1124,1126,3,12, + 6,0,1125,1122,1,0,0,0,1125,1126,1,0,0,0,1126,1308,1,0,0,0,1127,1128, + 5,322,0,0,1128,1130,5,293,0,0,1129,1131,3,150,75,0,1130,1129,1,0, + 0,0,1130,1131,1,0,0,0,1131,1132,1,0,0,0,1132,1308,3,68,34,0,1133, + 1134,5,43,0,0,1134,1308,5,33,0,0,1135,1136,5,168,0,0,1136,1138,5, + 70,0,0,1137,1139,5,169,0,0,1138,1137,1,0,0,0,1138,1139,1,0,0,0,1139, + 1140,1,0,0,0,1140,1141,5,145,0,0,1141,1143,3,328,164,0,1142,1144, + 5,216,0,0,1143,1142,1,0,0,0,1143,1144,1,0,0,0,1144,1145,1,0,0,0, + 1145,1146,5,152,0,0,1146,1147,5,293,0,0,1147,1149,3,68,34,0,1148, + 1150,3,18,9,0,1149,1148,1,0,0,0,1149,1150,1,0,0,0,1150,1308,1,0, + 0,0,1151,1152,5,317,0,0,1152,1153,5,293,0,0,1153,1155,3,68,34,0, + 1154,1156,3,18,9,0,1155,1154,1,0,0,0,1155,1156,1,0,0,0,1156,1308, + 1,0,0,0,1157,1159,5,188,0,0,1158,1157,1,0,0,0,1158,1159,1,0,0,0, + 1159,1160,1,0,0,0,1160,1161,5,242,0,0,1161,1162,5,293,0,0,1162,1165, + 3,68,34,0,1163,1164,7,10,0,0,1164,1166,5,219,0,0,1165,1163,1,0,0, + 0,1165,1166,1,0,0,0,1166,1308,1,0,0,0,1167,1168,7,11,0,0,1168,1172, + 3,318,159,0,1169,1171,9,0,0,0,1170,1169,1,0,0,0,1171,1174,1,0,0, + 0,1172,1173,1,0,0,0,1172,1170,1,0,0,0,1173,1308,1,0,0,0,1174,1172, + 1,0,0,0,1175,1176,5,269,0,0,1176,1180,5,253,0,0,1177,1179,9,0,0, + 0,1178,1177,1,0,0,0,1179,1182,1,0,0,0,1180,1181,1,0,0,0,1180,1178, + 1,0,0,0,1181,1308,1,0,0,0,1182,1180,1,0,0,0,1183,1184,5,269,0,0, + 1184,1185,5,301,0,0,1185,1186,5,350,0,0,1186,1308,3,250,125,0,1187, + 1188,5,269,0,0,1188,1189,5,301,0,0,1189,1192,5,350,0,0,1190,1193, + 3,328,164,0,1191,1193,5,169,0,0,1192,1190,1,0,0,0,1192,1191,1,0, + 0,0,1193,1308,1,0,0,0,1194,1195,5,269,0,0,1195,1196,5,301,0,0,1196, + 1200,5,350,0,0,1197,1199,9,0,0,0,1198,1197,1,0,0,0,1199,1202,1,0, + 0,0,1200,1201,1,0,0,0,1200,1198,1,0,0,0,1201,1308,1,0,0,0,1202,1200, + 1,0,0,0,1203,1204,5,269,0,0,1204,1205,7,12,0,0,1205,1308,3,108,54, + 0,1206,1207,5,269,0,0,1207,1208,7,12,0,0,1208,1209,5,2,0,0,1209, + 1210,3,196,98,0,1210,1211,5,3,0,0,1211,1212,5,352,0,0,1212,1213, + 5,2,0,0,1213,1214,3,12,6,0,1214,1215,5,3,0,0,1215,1308,1,0,0,0,1216, + 1217,5,269,0,0,1217,1218,3,322,161,0,1218,1219,5,352,0,0,1219,1220, + 5,389,0,0,1220,1308,1,0,0,0,1221,1222,5,269,0,0,1222,1230,3,322, + 161,0,1223,1227,5,352,0,0,1224,1226,9,0,0,0,1225,1224,1,0,0,0,1226, + 1229,1,0,0,0,1227,1228,1,0,0,0,1227,1225,1,0,0,0,1228,1231,1,0,0, + 0,1229,1227,1,0,0,0,1230,1223,1,0,0,0,1230,1231,1,0,0,0,1231,1308, + 1,0,0,0,1232,1236,5,269,0,0,1233,1235,9,0,0,0,1234,1233,1,0,0,0, + 1235,1238,1,0,0,0,1236,1237,1,0,0,0,1236,1234,1,0,0,0,1237,1239, + 1,0,0,0,1238,1236,1,0,0,0,1239,1240,5,352,0,0,1240,1308,5,389,0, + 0,1241,1245,5,269,0,0,1242,1244,9,0,0,0,1243,1242,1,0,0,0,1244,1247, + 1,0,0,0,1245,1246,1,0,0,0,1245,1243,1,0,0,0,1246,1308,1,0,0,0,1247, + 1245,1,0,0,0,1248,1249,5,245,0,0,1249,1308,3,322,161,0,1250,1254, + 5,245,0,0,1251,1253,9,0,0,0,1252,1251,1,0,0,0,1253,1256,1,0,0,0, + 1254,1255,1,0,0,0,1254,1252,1,0,0,0,1255,1308,1,0,0,0,1256,1254, + 1,0,0,0,1257,1258,5,59,0,0,1258,1260,5,142,0,0,1259,1261,3,148,74, + 0,1260,1259,1,0,0,0,1260,1261,1,0,0,0,1261,1262,1,0,0,0,1262,1263, + 3,318,159,0,1263,1265,5,203,0,0,1264,1266,5,293,0,0,1265,1264,1, + 0,0,0,1265,1266,1,0,0,0,1266,1267,1,0,0,0,1267,1270,3,68,34,0,1268, + 1269,5,332,0,0,1269,1271,3,318,159,0,1270,1268,1,0,0,0,1270,1271, + 1,0,0,0,1271,1272,1,0,0,0,1272,1273,5,2,0,0,1273,1274,3,200,100, + 0,1274,1277,5,3,0,0,1275,1276,5,207,0,0,1276,1278,3,38,19,0,1277, + 1275,1,0,0,0,1277,1278,1,0,0,0,1278,1308,1,0,0,0,1279,1280,5,96, + 0,0,1280,1282,5,142,0,0,1281,1283,3,150,75,0,1282,1281,1,0,0,0,1282, + 1283,1,0,0,0,1283,1284,1,0,0,0,1284,1285,3,318,159,0,1285,1287,5, + 203,0,0,1286,1288,5,293,0,0,1287,1286,1,0,0,0,1287,1288,1,0,0,0, + 1288,1289,1,0,0,0,1289,1290,3,68,34,0,1290,1308,1,0,0,0,1291,1292, + 5,205,0,0,1292,1294,3,68,34,0,1293,1295,3,112,56,0,1294,1293,1,0, + 0,0,1294,1295,1,0,0,0,1295,1296,1,0,0,0,1296,1297,5,351,0,0,1297, + 1298,5,31,0,0,1298,1299,3,76,38,0,1299,1308,1,0,0,0,1300,1304,3, + 6,3,0,1301,1303,9,0,0,0,1302,1301,1,0,0,0,1303,1306,1,0,0,0,1304, + 1305,1,0,0,0,1304,1302,1,0,0,0,1305,1308,1,0,0,0,1306,1304,1,0,0, + 0,1307,348,1,0,0,0,1307,350,1,0,0,0,1307,353,1,0,0,0,1307,358,1, + 0,0,0,1307,364,1,0,0,0,1307,382,1,0,0,0,1307,389,1,0,0,0,1307,396, + 1,0,0,0,1307,405,1,0,0,0,1307,417,1,0,0,0,1307,445,1,0,0,0,1307, + 468,1,0,0,0,1307,489,1,0,0,0,1307,506,1,0,0,0,1307,517,1,0,0,0,1307, + 524,1,0,0,0,1307,533,1,0,0,0,1307,542,1,0,0,0,1307,552,1,0,0,0,1307, + 564,1,0,0,0,1307,575,1,0,0,0,1307,586,1,0,0,0,1307,600,1,0,0,0,1307, + 611,1,0,0,0,1307,626,1,0,0,0,1307,638,1,0,0,0,1307,652,1,0,0,0,1307, + 662,1,0,0,0,1307,678,1,0,0,0,1307,686,1,0,0,0,1307,708,1,0,0,0,1307, + 718,1,0,0,0,1307,724,1,0,0,0,1307,731,1,0,0,0,1307,739,1,0,0,0,1307, + 748,1,0,0,0,1307,754,1,0,0,0,1307,761,1,0,0,0,1307,795,1,0,0,0,1307, + 817,1,0,0,0,1307,825,1,0,0,0,1307,855,1,0,0,0,1307,888,1,0,0,0,1307, + 897,1,0,0,0,1307,912,1,0,0,0,1307,923,1,0,0,0,1307,928,1,0,0,0,1307, + 940,1,0,0,0,1307,952,1,0,0,0,1307,961,1,0,0,0,1307,969,1,0,0,0,1307, + 981,1,0,0,0,1307,987,1,0,0,0,1307,1005,1,0,0,0,1307,1013,1,0,0,0, + 1307,1016,1,0,0,0,1307,1024,1,0,0,0,1307,1037,1,0,0,0,1307,1046, + 1,0,0,0,1307,1052,1,0,0,0,1307,1058,1,0,0,0,1307,1072,1,0,0,0,1307, + 1077,1,0,0,0,1307,1091,1,0,0,0,1307,1094,1,0,0,0,1307,1097,1,0,0, + 0,1307,1107,1,0,0,0,1307,1111,1,0,0,0,1307,1127,1,0,0,0,1307,1133, + 1,0,0,0,1307,1135,1,0,0,0,1307,1151,1,0,0,0,1307,1158,1,0,0,0,1307, + 1167,1,0,0,0,1307,1175,1,0,0,0,1307,1183,1,0,0,0,1307,1187,1,0,0, + 0,1307,1194,1,0,0,0,1307,1203,1,0,0,0,1307,1206,1,0,0,0,1307,1216, + 1,0,0,0,1307,1221,1,0,0,0,1307,1232,1,0,0,0,1307,1241,1,0,0,0,1307, + 1248,1,0,0,0,1307,1250,1,0,0,0,1307,1257,1,0,0,0,1307,1279,1,0,0, + 0,1307,1291,1,0,0,0,1307,1300,1,0,0,0,1308,5,1,0,0,0,1309,1310,7, + 13,0,0,1310,1403,5,253,0,0,1311,1313,7,14,0,0,1312,1314,5,253,0, + 0,1313,1312,1,0,0,0,1313,1314,1,0,0,0,1314,1403,1,0,0,0,1315,1316, + 5,273,0,0,1316,1403,7,15,0,0,1317,1318,5,273,0,0,1318,1320,5,253, + 0,0,1319,1321,5,129,0,0,1320,1319,1,0,0,0,1320,1321,1,0,0,0,1321, + 1403,1,0,0,0,1322,1324,5,273,0,0,1323,1325,5,62,0,0,1324,1323,1, + 0,0,0,1324,1325,1,0,0,0,1325,1326,1,0,0,0,1326,1403,5,254,0,0,1327, + 1328,5,273,0,0,1328,1329,5,59,0,0,1329,1403,5,293,0,0,1330,1331, + 7,16,0,0,1331,1403,5,142,0,0,1332,1333,7,17,0,0,1333,1403,5,293, + 0,0,1334,1335,7,18,0,0,1335,1403,5,72,0,0,1336,1337,7,13,0,0,1337, + 1338,5,298,0,0,1338,1403,5,175,0,0,1339,1340,5,11,0,0,1340,1341, + 5,293,0,0,1341,1342,3,68,34,0,1342,1343,5,197,0,0,1343,1344,7,19, + 0,0,1344,1403,1,0,0,0,1345,1346,5,11,0,0,1346,1347,5,293,0,0,1347, + 1348,3,68,34,0,1348,1349,7,20,0,0,1349,1350,5,31,0,0,1350,1403,1, + 0,0,0,1351,1352,5,11,0,0,1352,1353,5,293,0,0,1353,1354,3,68,34,0, + 1354,1355,5,275,0,0,1355,1356,5,31,0,0,1356,1403,1,0,0,0,1357,1358, + 5,11,0,0,1358,1359,5,293,0,0,1359,1360,3,68,34,0,1360,1361,5,197, + 0,0,1361,1362,5,283,0,0,1362,1363,5,20,0,0,1363,1364,5,89,0,0,1364, + 1403,1,0,0,0,1365,1366,5,11,0,0,1366,1367,5,293,0,0,1367,1368,3, + 68,34,0,1368,1369,5,269,0,0,1369,1370,5,275,0,0,1370,1371,5,170, + 0,0,1371,1403,1,0,0,0,1372,1373,5,11,0,0,1373,1374,5,293,0,0,1374, + 1375,3,68,34,0,1375,1376,7,21,0,0,1376,1377,5,217,0,0,1377,1403, + 1,0,0,0,1378,1379,5,11,0,0,1379,1380,5,293,0,0,1380,1381,3,68,34, + 0,1381,1382,5,310,0,0,1382,1403,1,0,0,0,1383,1384,5,11,0,0,1384, + 1385,5,293,0,0,1385,1387,3,68,34,0,1386,1388,3,18,9,0,1387,1386, + 1,0,0,0,1387,1388,1,0,0,0,1388,1395,1,0,0,0,1389,1396,5,53,0,0,1390, + 1396,5,56,0,0,1391,1392,5,269,0,0,1392,1396,5,115,0,0,1393,1394, + 5,244,0,0,1394,1396,5,50,0,0,1395,1389,1,0,0,0,1395,1390,1,0,0,0, + 1395,1391,1,0,0,0,1395,1393,1,0,0,0,1396,1403,1,0,0,0,1397,1398, + 5,281,0,0,1398,1403,5,312,0,0,1399,1403,5,52,0,0,1400,1403,5,255, + 0,0,1401,1403,5,88,0,0,1402,1309,1,0,0,0,1402,1311,1,0,0,0,1402, + 1315,1,0,0,0,1402,1317,1,0,0,0,1402,1322,1,0,0,0,1402,1327,1,0,0, + 0,1402,1330,1,0,0,0,1402,1332,1,0,0,0,1402,1334,1,0,0,0,1402,1336, + 1,0,0,0,1402,1339,1,0,0,0,1402,1345,1,0,0,0,1402,1351,1,0,0,0,1402, + 1357,1,0,0,0,1402,1365,1,0,0,0,1402,1372,1,0,0,0,1402,1378,1,0,0, + 0,1402,1383,1,0,0,0,1402,1397,1,0,0,0,1402,1399,1,0,0,0,1402,1400, + 1,0,0,0,1402,1401,1,0,0,0,1403,7,1,0,0,0,1404,1405,5,45,0,0,1405, + 1406,5,31,0,0,1406,1410,3,168,84,0,1407,1408,5,279,0,0,1408,1409, + 5,31,0,0,1409,1411,3,172,86,0,1410,1407,1,0,0,0,1410,1411,1,0,0, + 0,1411,1412,1,0,0,0,1412,1413,5,152,0,0,1413,1414,5,382,0,0,1414, + 1415,5,30,0,0,1415,9,1,0,0,0,1416,1417,5,275,0,0,1417,1418,5,31, + 0,0,1418,1419,3,168,84,0,1419,1422,5,203,0,0,1420,1423,3,50,25,0, + 1421,1423,3,52,26,0,1422,1420,1,0,0,0,1422,1421,1,0,0,0,1423,1427, + 1,0,0,0,1424,1425,5,283,0,0,1425,1426,5,20,0,0,1426,1428,5,89,0, + 0,1427,1424,1,0,0,0,1427,1428,1,0,0,0,1428,11,1,0,0,0,1429,1431, + 3,28,14,0,1430,1429,1,0,0,0,1430,1431,1,0,0,0,1431,1432,1,0,0,0, + 1432,1433,3,84,42,0,1433,1434,3,82,41,0,1434,13,1,0,0,0,1435,1436, + 5,147,0,0,1436,1438,5,216,0,0,1437,1439,5,293,0,0,1438,1437,1,0, + 0,0,1438,1439,1,0,0,0,1439,1440,1,0,0,0,1440,1445,3,68,34,0,1441, + 1443,3,18,9,0,1442,1444,3,148,74,0,1443,1442,1,0,0,0,1443,1444,1, + 0,0,0,1444,1446,1,0,0,0,1445,1441,1,0,0,0,1445,1446,1,0,0,0,1446, + 1453,1,0,0,0,1447,1448,5,31,0,0,1448,1454,5,189,0,0,1449,1450,5, + 2,0,0,1450,1451,3,76,38,0,1451,1452,5,3,0,0,1452,1454,1,0,0,0,1453, + 1447,1,0,0,0,1453,1449,1,0,0,0,1453,1454,1,0,0,0,1454,1512,1,0,0, + 0,1455,1456,5,147,0,0,1456,1458,5,152,0,0,1457,1459,5,293,0,0,1458, + 1457,1,0,0,0,1458,1459,1,0,0,0,1459,1460,1,0,0,0,1460,1462,3,68, + 34,0,1461,1463,3,18,9,0,1462,1461,1,0,0,0,1462,1463,1,0,0,0,1463, + 1465,1,0,0,0,1464,1466,3,148,74,0,1465,1464,1,0,0,0,1465,1466,1, + 0,0,0,1466,1473,1,0,0,0,1467,1468,5,31,0,0,1468,1474,5,189,0,0,1469, + 1470,5,2,0,0,1470,1471,3,76,38,0,1471,1472,5,3,0,0,1472,1474,1,0, + 0,0,1473,1467,1,0,0,0,1473,1469,1,0,0,0,1473,1474,1,0,0,0,1474,1512, + 1,0,0,0,1475,1476,5,147,0,0,1476,1478,5,152,0,0,1477,1479,5,293, + 0,0,1478,1477,1,0,0,0,1478,1479,1,0,0,0,1479,1480,1,0,0,0,1480,1481, + 3,68,34,0,1481,1482,5,244,0,0,1482,1483,3,112,56,0,1483,1512,1,0, + 0,0,1484,1485,5,147,0,0,1485,1487,5,216,0,0,1486,1488,5,169,0,0, + 1487,1486,1,0,0,0,1487,1488,1,0,0,0,1488,1489,1,0,0,0,1489,1490, + 5,90,0,0,1490,1492,3,328,164,0,1491,1493,3,194,97,0,1492,1491,1, + 0,0,0,1492,1493,1,0,0,0,1493,1495,1,0,0,0,1494,1496,3,54,27,0,1495, + 1494,1,0,0,0,1495,1496,1,0,0,0,1496,1512,1,0,0,0,1497,1498,5,147, + 0,0,1498,1500,5,216,0,0,1499,1501,5,169,0,0,1500,1499,1,0,0,0,1500, + 1501,1,0,0,0,1501,1502,1,0,0,0,1502,1504,5,90,0,0,1503,1505,3,328, + 164,0,1504,1503,1,0,0,0,1504,1505,1,0,0,0,1505,1506,1,0,0,0,1506, + 1509,3,32,16,0,1507,1508,5,207,0,0,1508,1510,3,38,19,0,1509,1507, + 1,0,0,0,1509,1510,1,0,0,0,1510,1512,1,0,0,0,1511,1435,1,0,0,0,1511, + 1455,1,0,0,0,1511,1475,1,0,0,0,1511,1484,1,0,0,0,1511,1497,1,0,0, + 0,1512,15,1,0,0,0,1513,1516,3,18,9,0,1514,1515,5,170,0,0,1515,1517, + 3,328,164,0,1516,1514,1,0,0,0,1516,1517,1,0,0,0,1517,17,1,0,0,0, + 1518,1519,5,217,0,0,1519,1520,5,2,0,0,1520,1525,3,20,10,0,1521,1522, + 5,4,0,0,1522,1524,3,20,10,0,1523,1521,1,0,0,0,1524,1527,1,0,0,0, + 1525,1523,1,0,0,0,1525,1526,1,0,0,0,1526,1528,1,0,0,0,1527,1525, + 1,0,0,0,1528,1529,5,3,0,0,1529,19,1,0,0,0,1530,1533,3,318,159,0, + 1531,1532,5,352,0,0,1532,1534,3,240,120,0,1533,1531,1,0,0,0,1533, + 1534,1,0,0,0,1534,1540,1,0,0,0,1535,1536,3,318,159,0,1536,1537,5, + 352,0,0,1537,1538,5,82,0,0,1538,1540,1,0,0,0,1539,1530,1,0,0,0,1539, + 1535,1,0,0,0,1540,21,1,0,0,0,1541,1542,7,22,0,0,1542,23,1,0,0,0, + 1543,1549,3,80,40,0,1544,1549,3,328,164,0,1545,1549,3,242,121,0, + 1546,1549,3,244,122,0,1547,1549,3,246,123,0,1548,1543,1,0,0,0,1548, + 1544,1,0,0,0,1548,1545,1,0,0,0,1548,1546,1,0,0,0,1548,1547,1,0,0, + 0,1549,25,1,0,0,0,1550,1555,3,318,159,0,1551,1552,5,5,0,0,1552,1554, + 3,318,159,0,1553,1551,1,0,0,0,1554,1557,1,0,0,0,1555,1553,1,0,0, + 0,1555,1556,1,0,0,0,1556,27,1,0,0,0,1557,1555,1,0,0,0,1558,1559, + 5,346,0,0,1559,1564,3,30,15,0,1560,1561,5,4,0,0,1561,1563,3,30,15, + 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,29,1,0,0,0,1566,1564,1,0,0,0,1567,1569,3,314,157,0, + 1568,1570,3,168,84,0,1569,1568,1,0,0,0,1569,1570,1,0,0,0,1570,1572, + 1,0,0,0,1571,1573,5,20,0,0,1572,1571,1,0,0,0,1572,1573,1,0,0,0,1573, + 1574,1,0,0,0,1574,1575,5,2,0,0,1575,1576,3,12,6,0,1576,1577,5,3, + 0,0,1577,31,1,0,0,0,1578,1579,5,332,0,0,1579,1580,3,198,99,0,1580, + 33,1,0,0,0,1581,1582,5,207,0,0,1582,1598,3,46,23,0,1583,1584,5,218, + 0,0,1584,1585,5,31,0,0,1585,1598,3,212,106,0,1586,1598,3,10,5,0, + 1587,1598,3,8,4,0,1588,1598,3,194,97,0,1589,1598,3,54,27,0,1590, + 1591,5,170,0,0,1591,1598,3,328,164,0,1592,1593,5,51,0,0,1593,1598, + 3,328,164,0,1594,1595,5,297,0,0,1595,1598,3,38,19,0,1596,1598,3, + 36,18,0,1597,1581,1,0,0,0,1597,1583,1,0,0,0,1597,1586,1,0,0,0,1597, + 1587,1,0,0,0,1597,1588,1,0,0,0,1597,1589,1,0,0,0,1597,1590,1,0,0, + 0,1597,1592,1,0,0,0,1597,1594,1,0,0,0,1597,1596,1,0,0,0,1598,1601, + 1,0,0,0,1599,1597,1,0,0,0,1599,1600,1,0,0,0,1600,35,1,0,0,0,1601, + 1599,1,0,0,0,1602,1603,5,162,0,0,1603,1604,5,382,0,0,1604,37,1,0, + 0,0,1605,1606,5,2,0,0,1606,1611,3,40,20,0,1607,1608,5,4,0,0,1608, + 1610,3,40,20,0,1609,1607,1,0,0,0,1610,1613,1,0,0,0,1611,1609,1,0, + 0,0,1611,1612,1,0,0,0,1612,1614,1,0,0,0,1613,1611,1,0,0,0,1614,1615, + 5,3,0,0,1615,39,1,0,0,0,1616,1621,3,42,21,0,1617,1619,5,352,0,0, + 1618,1617,1,0,0,0,1618,1619,1,0,0,0,1619,1620,1,0,0,0,1620,1622, + 3,44,22,0,1621,1618,1,0,0,0,1621,1622,1,0,0,0,1622,41,1,0,0,0,1623, + 1628,3,318,159,0,1624,1625,5,5,0,0,1625,1627,3,318,159,0,1626,1624, + 1,0,0,0,1627,1630,1,0,0,0,1628,1626,1,0,0,0,1628,1629,1,0,0,0,1629, + 1633,1,0,0,0,1630,1628,1,0,0,0,1631,1633,3,328,164,0,1632,1623,1, + 0,0,0,1632,1631,1,0,0,0,1633,43,1,0,0,0,1634,1639,5,382,0,0,1635, + 1639,5,384,0,0,1636,1639,3,248,124,0,1637,1639,3,328,164,0,1638, + 1634,1,0,0,0,1638,1635,1,0,0,0,1638,1636,1,0,0,0,1638,1637,1,0,0, + 0,1639,45,1,0,0,0,1640,1641,5,2,0,0,1641,1646,3,48,24,0,1642,1643, + 5,4,0,0,1643,1645,3,48,24,0,1644,1642,1,0,0,0,1645,1648,1,0,0,0, + 1646,1644,1,0,0,0,1646,1647,1,0,0,0,1647,1649,1,0,0,0,1648,1646, + 1,0,0,0,1649,1650,5,3,0,0,1650,47,1,0,0,0,1651,1656,3,42,21,0,1652, + 1654,5,352,0,0,1653,1652,1,0,0,0,1653,1654,1,0,0,0,1654,1655,1,0, + 0,0,1655,1657,3,220,110,0,1656,1653,1,0,0,0,1656,1657,1,0,0,0,1657, + 49,1,0,0,0,1658,1659,5,2,0,0,1659,1664,3,240,120,0,1660,1661,5,4, + 0,0,1661,1663,3,240,120,0,1662,1660,1,0,0,0,1663,1666,1,0,0,0,1664, + 1662,1,0,0,0,1664,1665,1,0,0,0,1665,1667,1,0,0,0,1666,1664,1,0,0, + 0,1667,1668,5,3,0,0,1668,51,1,0,0,0,1669,1670,5,2,0,0,1670,1675, + 3,50,25,0,1671,1672,5,4,0,0,1672,1674,3,50,25,0,1673,1671,1,0,0, + 0,1674,1677,1,0,0,0,1675,1673,1,0,0,0,1675,1676,1,0,0,0,1676,1678, + 1,0,0,0,1677,1675,1,0,0,0,1678,1679,5,3,0,0,1679,53,1,0,0,0,1680, + 1681,5,283,0,0,1681,1682,5,20,0,0,1682,1687,3,56,28,0,1683,1684, + 5,283,0,0,1684,1685,5,31,0,0,1685,1687,3,58,29,0,1686,1680,1,0,0, + 0,1686,1683,1,0,0,0,1687,55,1,0,0,0,1688,1689,5,146,0,0,1689,1690, + 3,328,164,0,1690,1691,5,212,0,0,1691,1692,3,328,164,0,1692,1695, + 1,0,0,0,1693,1695,3,318,159,0,1694,1688,1,0,0,0,1694,1693,1,0,0, + 0,1695,57,1,0,0,0,1696,1700,3,328,164,0,1697,1698,5,346,0,0,1698, + 1699,5,267,0,0,1699,1701,3,38,19,0,1700,1697,1,0,0,0,1700,1701,1, + 0,0,0,1701,59,1,0,0,0,1702,1703,3,14,7,0,1703,1704,3,12,6,0,1704, + 1761,1,0,0,0,1705,1709,3,120,60,0,1706,1707,3,14,7,0,1707,1708,3, + 90,45,0,1708,1710,1,0,0,0,1709,1706,1,0,0,0,1710,1711,1,0,0,0,1711, + 1709,1,0,0,0,1711,1712,1,0,0,0,1712,1761,1,0,0,0,1713,1714,5,84, + 0,0,1714,1715,5,123,0,0,1715,1716,3,68,34,0,1716,1718,3,192,96,0, + 1717,1719,3,112,56,0,1718,1717,1,0,0,0,1718,1719,1,0,0,0,1719,1761, + 1,0,0,0,1720,1721,5,329,0,0,1721,1722,3,68,34,0,1722,1723,3,192, + 96,0,1723,1725,3,98,49,0,1724,1726,3,112,56,0,1725,1724,1,0,0,0, + 1725,1726,1,0,0,0,1726,1761,1,0,0,0,1727,1728,5,179,0,0,1728,1729, + 5,152,0,0,1729,1730,3,68,34,0,1730,1731,3,192,96,0,1731,1737,5,332, + 0,0,1732,1738,3,80,40,0,1733,1734,5,2,0,0,1734,1735,3,12,6,0,1735, + 1736,5,3,0,0,1736,1738,1,0,0,0,1737,1732,1,0,0,0,1737,1733,1,0,0, + 0,1738,1739,1,0,0,0,1739,1740,3,192,96,0,1740,1741,5,203,0,0,1741, + 1745,3,228,114,0,1742,1744,3,100,50,0,1743,1742,1,0,0,0,1744,1747, + 1,0,0,0,1745,1743,1,0,0,0,1745,1746,1,0,0,0,1746,1751,1,0,0,0,1747, + 1745,1,0,0,0,1748,1750,3,102,51,0,1749,1748,1,0,0,0,1750,1753,1, + 0,0,0,1751,1749,1,0,0,0,1751,1752,1,0,0,0,1752,1757,1,0,0,0,1753, + 1751,1,0,0,0,1754,1756,3,104,52,0,1755,1754,1,0,0,0,1756,1759,1, + 0,0,0,1757,1755,1,0,0,0,1757,1758,1,0,0,0,1758,1761,1,0,0,0,1759, + 1757,1,0,0,0,1760,1702,1,0,0,0,1760,1705,1,0,0,0,1760,1713,1,0,0, + 0,1760,1720,1,0,0,0,1760,1727,1,0,0,0,1761,61,1,0,0,0,1762,1763, + 3,80,40,0,1763,63,1,0,0,0,1764,1765,3,80,40,0,1765,65,1,0,0,0,1766, + 1767,3,204,102,0,1767,67,1,0,0,0,1768,1769,3,204,102,0,1769,69,1, + 0,0,0,1770,1771,3,206,103,0,1771,71,1,0,0,0,1772,1773,3,206,103, + 0,1773,73,1,0,0,0,1774,1777,3,198,99,0,1775,1777,4,37,0,0,1776,1774, + 1,0,0,0,1776,1775,1,0,0,0,1777,75,1,0,0,0,1778,1783,3,74,37,0,1779, + 1780,5,4,0,0,1780,1782,3,74,37,0,1781,1779,1,0,0,0,1782,1785,1,0, + 0,0,1783,1781,1,0,0,0,1783,1784,1,0,0,0,1784,77,1,0,0,0,1785,1783, + 1,0,0,0,1786,1787,3,314,157,0,1787,79,1,0,0,0,1788,1789,5,136,0, + 0,1789,1790,5,2,0,0,1790,1791,3,220,110,0,1791,1792,5,3,0,0,1792, + 1795,1,0,0,0,1793,1795,3,198,99,0,1794,1788,1,0,0,0,1794,1793,1, + 0,0,0,1795,81,1,0,0,0,1796,1797,5,209,0,0,1797,1798,5,31,0,0,1798, + 1803,3,88,44,0,1799,1800,5,4,0,0,1800,1802,3,88,44,0,1801,1799,1, 0,0,0,1802,1805,1,0,0,0,1803,1801,1,0,0,0,1803,1804,1,0,0,0,1804, - 1806,1,0,0,0,1805,1803,1,0,0,0,1806,1807,5,3,0,0,1807,67,1,0,0,0, - 1808,1809,5,2,0,0,1809,1814,3,66,33,0,1810,1811,5,4,0,0,1811,1813, - 3,66,33,0,1812,1810,1,0,0,0,1813,1816,1,0,0,0,1814,1812,1,0,0,0, - 1814,1815,1,0,0,0,1815,1817,1,0,0,0,1816,1814,1,0,0,0,1817,1818, - 5,3,0,0,1818,69,1,0,0,0,1819,1820,5,283,0,0,1820,1821,5,20,0,0,1821, - 1826,3,72,36,0,1822,1823,5,283,0,0,1823,1824,5,31,0,0,1824,1826, - 3,74,37,0,1825,1819,1,0,0,0,1825,1822,1,0,0,0,1826,71,1,0,0,0,1827, - 1828,5,146,0,0,1828,1829,3,388,194,0,1829,1830,5,212,0,0,1830,1831, - 3,388,194,0,1831,1834,1,0,0,0,1832,1834,3,376,188,0,1833,1827,1, - 0,0,0,1833,1832,1,0,0,0,1834,73,1,0,0,0,1835,1839,3,388,194,0,1836, - 1837,5,346,0,0,1837,1838,5,267,0,0,1838,1840,3,54,27,0,1839,1836, - 1,0,0,0,1839,1840,1,0,0,0,1840,75,1,0,0,0,1841,1842,3,376,188,0, - 1842,1843,3,388,194,0,1843,77,1,0,0,0,1844,1845,3,28,14,0,1845,1846, - 3,26,13,0,1846,1901,1,0,0,0,1847,1849,3,146,73,0,1848,1850,3,102, - 51,0,1849,1848,1,0,0,0,1850,1851,1,0,0,0,1851,1849,1,0,0,0,1851, - 1852,1,0,0,0,1852,1901,1,0,0,0,1853,1854,5,84,0,0,1854,1855,5,123, - 0,0,1855,1856,3,86,43,0,1856,1858,3,240,120,0,1857,1859,3,138,69, - 0,1858,1857,1,0,0,0,1858,1859,1,0,0,0,1859,1901,1,0,0,0,1860,1861, - 5,329,0,0,1861,1862,3,86,43,0,1862,1863,3,240,120,0,1863,1865,3, - 120,60,0,1864,1866,3,138,69,0,1865,1864,1,0,0,0,1865,1866,1,0,0, - 0,1866,1901,1,0,0,0,1867,1868,5,179,0,0,1868,1869,5,152,0,0,1869, - 1870,3,86,43,0,1870,1871,3,240,120,0,1871,1877,5,332,0,0,1872,1878, - 3,98,49,0,1873,1874,5,2,0,0,1874,1875,3,26,13,0,1875,1876,5,3,0, - 0,1876,1878,1,0,0,0,1877,1872,1,0,0,0,1877,1873,1,0,0,0,1878,1879, - 1,0,0,0,1879,1880,3,240,120,0,1880,1881,5,203,0,0,1881,1885,3,276, - 138,0,1882,1884,3,122,61,0,1883,1882,1,0,0,0,1884,1887,1,0,0,0,1885, - 1883,1,0,0,0,1885,1886,1,0,0,0,1886,1891,1,0,0,0,1887,1885,1,0,0, - 0,1888,1890,3,124,62,0,1889,1888,1,0,0,0,1890,1893,1,0,0,0,1891, - 1889,1,0,0,0,1891,1892,1,0,0,0,1892,1897,1,0,0,0,1893,1891,1,0,0, - 0,1894,1896,3,126,63,0,1895,1894,1,0,0,0,1896,1899,1,0,0,0,1897, - 1895,1,0,0,0,1897,1898,1,0,0,0,1898,1901,1,0,0,0,1899,1897,1,0,0, - 0,1900,1844,1,0,0,0,1900,1847,1,0,0,0,1900,1853,1,0,0,0,1900,1860, - 1,0,0,0,1900,1867,1,0,0,0,1901,79,1,0,0,0,1902,1903,3,98,49,0,1903, - 81,1,0,0,0,1904,1905,3,98,49,0,1905,83,1,0,0,0,1906,1907,3,252,126, - 0,1907,85,1,0,0,0,1908,1909,3,252,126,0,1909,87,1,0,0,0,1910,1911, - 3,254,127,0,1911,89,1,0,0,0,1912,1913,3,254,127,0,1913,91,1,0,0, - 0,1914,1917,3,246,123,0,1915,1917,4,46,0,0,1916,1914,1,0,0,0,1916, - 1915,1,0,0,0,1917,93,1,0,0,0,1918,1923,3,92,46,0,1919,1920,5,4,0, - 0,1920,1922,3,92,46,0,1921,1919,1,0,0,0,1922,1925,1,0,0,0,1923,1921, - 1,0,0,0,1923,1924,1,0,0,0,1924,95,1,0,0,0,1925,1923,1,0,0,0,1926, - 1927,3,372,186,0,1927,97,1,0,0,0,1928,1929,5,136,0,0,1929,1930,5, - 2,0,0,1930,1931,3,268,134,0,1931,1932,5,3,0,0,1932,1935,1,0,0,0, - 1933,1935,3,246,123,0,1934,1928,1,0,0,0,1934,1933,1,0,0,0,1935,99, - 1,0,0,0,1936,1937,5,209,0,0,1937,1938,5,31,0,0,1938,1943,3,108,54, - 0,1939,1940,5,4,0,0,1940,1942,3,108,54,0,1941,1939,1,0,0,0,1942, - 1945,1,0,0,0,1943,1941,1,0,0,0,1943,1944,1,0,0,0,1944,1947,1,0,0, - 0,1945,1943,1,0,0,0,1946,1936,1,0,0,0,1946,1947,1,0,0,0,1947,1958, - 1,0,0,0,1948,1949,5,44,0,0,1949,1950,5,31,0,0,1950,1955,3,268,134, - 0,1951,1952,5,4,0,0,1952,1954,3,268,134,0,1953,1951,1,0,0,0,1954, - 1957,1,0,0,0,1955,1953,1,0,0,0,1955,1956,1,0,0,0,1956,1959,1,0,0, - 0,1957,1955,1,0,0,0,1958,1948,1,0,0,0,1958,1959,1,0,0,0,1959,1970, - 1,0,0,0,1960,1961,5,93,0,0,1961,1962,5,31,0,0,1962,1967,3,268,134, - 0,1963,1964,5,4,0,0,1964,1966,3,268,134,0,1965,1963,1,0,0,0,1966, - 1969,1,0,0,0,1967,1965,1,0,0,0,1967,1968,1,0,0,0,1968,1971,1,0,0, - 0,1969,1967,1,0,0,0,1970,1960,1,0,0,0,1970,1971,1,0,0,0,1971,1982, - 1,0,0,0,1972,1973,5,278,0,0,1973,1974,5,31,0,0,1974,1979,3,108,54, - 0,1975,1976,5,4,0,0,1976,1978,3,108,54,0,1977,1975,1,0,0,0,1978, - 1981,1,0,0,0,1979,1977,1,0,0,0,1979,1980,1,0,0,0,1980,1983,1,0,0, - 0,1981,1979,1,0,0,0,1982,1972,1,0,0,0,1982,1983,1,0,0,0,1983,1985, - 1,0,0,0,1984,1986,3,352,176,0,1985,1984,1,0,0,0,1985,1986,1,0,0, - 0,1986,1992,1,0,0,0,1987,1990,5,165,0,0,1988,1991,5,10,0,0,1989, - 1991,3,268,134,0,1990,1988,1,0,0,0,1990,1989,1,0,0,0,1991,1993,1, - 0,0,0,1992,1987,1,0,0,0,1992,1993,1,0,0,0,1993,1996,1,0,0,0,1994, - 1995,5,202,0,0,1995,1997,3,268,134,0,1996,1994,1,0,0,0,1996,1997, - 1,0,0,0,1997,101,1,0,0,0,1998,1999,3,28,14,0,1999,2000,3,112,56, - 0,2000,103,1,0,0,0,2001,2002,6,52,-1,0,2002,2003,3,106,53,0,2003, - 2024,1,0,0,0,2004,2005,10,3,0,0,2005,2007,7,13,0,0,2006,2008,3,196, - 98,0,2007,2006,1,0,0,0,2007,2008,1,0,0,0,2008,2009,1,0,0,0,2009, - 2023,3,104,52,4,2010,2011,10,2,0,0,2011,2013,5,148,0,0,2012,2014, - 3,196,98,0,2013,2012,1,0,0,0,2013,2014,1,0,0,0,2014,2015,1,0,0,0, - 2015,2023,3,104,52,3,2016,2017,10,1,0,0,2017,2019,7,14,0,0,2018, - 2020,3,196,98,0,2019,2018,1,0,0,0,2019,2020,1,0,0,0,2020,2021,1, - 0,0,0,2021,2023,3,104,52,2,2022,2004,1,0,0,0,2022,2010,1,0,0,0,2022, - 2016,1,0,0,0,2023,2026,1,0,0,0,2024,2022,1,0,0,0,2024,2025,1,0,0, - 0,2025,105,1,0,0,0,2026,2024,1,0,0,0,2027,2037,3,114,57,0,2028,2037, - 3,110,55,0,2029,2030,5,293,0,0,2030,2037,3,86,43,0,2031,2037,3,226, - 113,0,2032,2033,5,2,0,0,2033,2034,3,26,13,0,2034,2035,5,3,0,0,2035, - 2037,1,0,0,0,2036,2027,1,0,0,0,2036,2028,1,0,0,0,2036,2029,1,0,0, - 0,2036,2031,1,0,0,0,2036,2032,1,0,0,0,2037,107,1,0,0,0,2038,2041, - 3,92,46,0,2039,2041,3,268,134,0,2040,2038,1,0,0,0,2040,2039,1,0, - 0,0,2041,2043,1,0,0,0,2042,2044,7,15,0,0,2043,2042,1,0,0,0,2043, - 2044,1,0,0,0,2044,2047,1,0,0,0,2045,2046,5,199,0,0,2046,2048,7,16, - 0,0,2047,2045,1,0,0,0,2047,2048,1,0,0,0,2048,109,1,0,0,0,2049,2051, - 3,146,73,0,2050,2052,3,112,56,0,2051,2050,1,0,0,0,2052,2053,1,0, - 0,0,2053,2051,1,0,0,0,2053,2054,1,0,0,0,2054,111,1,0,0,0,2055,2057, - 3,116,58,0,2056,2058,3,138,69,0,2057,2056,1,0,0,0,2057,2058,1,0, - 0,0,2058,2059,1,0,0,0,2059,2060,3,100,50,0,2060,2083,1,0,0,0,2061, - 2065,3,118,59,0,2062,2064,3,194,97,0,2063,2062,1,0,0,0,2064,2067, - 1,0,0,0,2065,2063,1,0,0,0,2065,2066,1,0,0,0,2066,2069,1,0,0,0,2067, - 2065,1,0,0,0,2068,2070,3,138,69,0,2069,2068,1,0,0,0,2069,2070,1, - 0,0,0,2070,2072,1,0,0,0,2071,2073,3,152,76,0,2072,2071,1,0,0,0,2072, - 2073,1,0,0,0,2073,2075,1,0,0,0,2074,2076,3,140,70,0,2075,2074,1, - 0,0,0,2075,2076,1,0,0,0,2076,2078,1,0,0,0,2077,2079,3,352,176,0, - 2078,2077,1,0,0,0,2078,2079,1,0,0,0,2079,2080,1,0,0,0,2080,2081, - 3,100,50,0,2081,2083,1,0,0,0,2082,2055,1,0,0,0,2082,2061,1,0,0,0, - 2083,113,1,0,0,0,2084,2086,3,116,58,0,2085,2087,3,146,73,0,2086, - 2085,1,0,0,0,2086,2087,1,0,0,0,2087,2091,1,0,0,0,2088,2090,3,194, - 97,0,2089,2088,1,0,0,0,2090,2093,1,0,0,0,2091,2089,1,0,0,0,2091, - 2092,1,0,0,0,2092,2095,1,0,0,0,2093,2091,1,0,0,0,2094,2096,3,138, - 69,0,2095,2094,1,0,0,0,2095,2096,1,0,0,0,2096,2098,1,0,0,0,2097, - 2099,3,152,76,0,2098,2097,1,0,0,0,2098,2099,1,0,0,0,2099,2101,1, - 0,0,0,2100,2102,3,140,70,0,2101,2100,1,0,0,0,2101,2102,1,0,0,0,2102, - 2104,1,0,0,0,2103,2105,3,352,176,0,2104,2103,1,0,0,0,2104,2105,1, - 0,0,0,2105,2129,1,0,0,0,2106,2108,3,118,59,0,2107,2109,3,146,73, - 0,2108,2107,1,0,0,0,2108,2109,1,0,0,0,2109,2113,1,0,0,0,2110,2112, - 3,194,97,0,2111,2110,1,0,0,0,2112,2115,1,0,0,0,2113,2111,1,0,0,0, - 2113,2114,1,0,0,0,2114,2117,1,0,0,0,2115,2113,1,0,0,0,2116,2118, - 3,138,69,0,2117,2116,1,0,0,0,2117,2118,1,0,0,0,2118,2120,1,0,0,0, - 2119,2121,3,152,76,0,2120,2119,1,0,0,0,2120,2121,1,0,0,0,2121,2123, - 1,0,0,0,2122,2124,3,140,70,0,2123,2122,1,0,0,0,2123,2124,1,0,0,0, - 2124,2126,1,0,0,0,2125,2127,3,352,176,0,2126,2125,1,0,0,0,2126,2127, - 1,0,0,0,2127,2129,1,0,0,0,2128,2084,1,0,0,0,2128,2106,1,0,0,0,2129, - 115,1,0,0,0,2130,2131,5,263,0,0,2131,2132,5,314,0,0,2132,2134,5, - 2,0,0,2133,2135,3,196,98,0,2134,2133,1,0,0,0,2134,2135,1,0,0,0,2135, - 2136,1,0,0,0,2136,2137,3,274,137,0,2137,2138,5,3,0,0,2138,2150,1, - 0,0,0,2139,2141,5,177,0,0,2140,2142,3,196,98,0,2141,2140,1,0,0,0, - 2141,2142,1,0,0,0,2142,2143,1,0,0,0,2143,2150,3,274,137,0,2144,2146, - 5,238,0,0,2145,2147,3,196,98,0,2146,2145,1,0,0,0,2146,2147,1,0,0, - 0,2147,2148,1,0,0,0,2148,2150,3,274,137,0,2149,2130,1,0,0,0,2149, - 2139,1,0,0,0,2149,2144,1,0,0,0,2150,2152,1,0,0,0,2151,2153,3,242, - 121,0,2152,2151,1,0,0,0,2152,2153,1,0,0,0,2153,2156,1,0,0,0,2154, - 2155,5,236,0,0,2155,2157,3,388,194,0,2156,2154,1,0,0,0,2156,2157, - 1,0,0,0,2157,2158,1,0,0,0,2158,2159,5,332,0,0,2159,2172,3,388,194, - 0,2160,2170,5,20,0,0,2161,2171,3,214,107,0,2162,2171,3,334,167,0, - 2163,2166,5,2,0,0,2164,2167,3,214,107,0,2165,2167,3,334,167,0,2166, - 2164,1,0,0,0,2166,2165,1,0,0,0,2167,2168,1,0,0,0,2168,2169,5,3,0, - 0,2169,2171,1,0,0,0,2170,2161,1,0,0,0,2170,2162,1,0,0,0,2170,2163, - 1,0,0,0,2171,2173,1,0,0,0,2172,2160,1,0,0,0,2172,2173,1,0,0,0,2173, - 2175,1,0,0,0,2174,2176,3,242,121,0,2175,2174,1,0,0,0,2175,2176,1, - 0,0,0,2176,2179,1,0,0,0,2177,2178,5,235,0,0,2178,2180,3,388,194, - 0,2179,2177,1,0,0,0,2179,2180,1,0,0,0,2180,117,1,0,0,0,2181,2185, - 5,263,0,0,2182,2184,3,142,71,0,2183,2182,1,0,0,0,2184,2187,1,0,0, - 0,2185,2183,1,0,0,0,2185,2186,1,0,0,0,2186,2189,1,0,0,0,2187,2185, - 1,0,0,0,2188,2190,3,196,98,0,2189,2188,1,0,0,0,2189,2190,1,0,0,0, - 2190,2191,1,0,0,0,2191,2192,3,258,129,0,2192,119,1,0,0,0,2193,2194, - 5,269,0,0,2194,2195,3,134,67,0,2195,121,1,0,0,0,2196,2197,5,343, - 0,0,2197,2200,5,178,0,0,2198,2199,5,14,0,0,2199,2201,3,276,138,0, - 2200,2198,1,0,0,0,2200,2201,1,0,0,0,2201,2202,1,0,0,0,2202,2203, - 5,300,0,0,2203,2204,3,128,64,0,2204,123,1,0,0,0,2205,2206,5,343, - 0,0,2206,2207,5,197,0,0,2207,2210,5,178,0,0,2208,2209,5,31,0,0,2209, - 2211,5,296,0,0,2210,2208,1,0,0,0,2210,2211,1,0,0,0,2211,2214,1,0, - 0,0,2212,2213,5,14,0,0,2213,2215,3,276,138,0,2214,2212,1,0,0,0,2214, - 2215,1,0,0,0,2215,2216,1,0,0,0,2216,2217,5,300,0,0,2217,2218,3,130, - 65,0,2218,125,1,0,0,0,2219,2220,5,343,0,0,2220,2221,5,197,0,0,2221, - 2222,5,178,0,0,2222,2223,5,31,0,0,2223,2226,5,280,0,0,2224,2225, - 5,14,0,0,2225,2227,3,276,138,0,2226,2224,1,0,0,0,2226,2227,1,0,0, - 0,2227,2228,1,0,0,0,2228,2229,5,300,0,0,2229,2230,3,132,66,0,2230, - 127,1,0,0,0,2231,2239,5,84,0,0,2232,2233,5,329,0,0,2233,2234,5,269, - 0,0,2234,2239,5,363,0,0,2235,2236,5,329,0,0,2236,2237,5,269,0,0, - 2237,2239,3,134,67,0,2238,2231,1,0,0,0,2238,2232,1,0,0,0,2238,2235, - 1,0,0,0,2239,129,1,0,0,0,2240,2241,5,147,0,0,2241,2259,5,363,0,0, - 2242,2243,5,147,0,0,2243,2244,5,2,0,0,2244,2245,3,244,122,0,2245, - 2246,5,3,0,0,2246,2247,5,333,0,0,2247,2248,5,2,0,0,2248,2253,3,268, - 134,0,2249,2250,5,4,0,0,2250,2252,3,268,134,0,2251,2249,1,0,0,0, - 2252,2255,1,0,0,0,2253,2251,1,0,0,0,2253,2254,1,0,0,0,2254,2256, - 1,0,0,0,2255,2253,1,0,0,0,2256,2257,5,3,0,0,2257,2259,1,0,0,0,2258, - 2240,1,0,0,0,2258,2242,1,0,0,0,2259,131,1,0,0,0,2260,2265,5,84,0, - 0,2261,2262,5,329,0,0,2262,2263,5,269,0,0,2263,2265,3,134,67,0,2264, - 2260,1,0,0,0,2264,2261,1,0,0,0,2265,133,1,0,0,0,2266,2271,3,136, - 68,0,2267,2268,5,4,0,0,2268,2270,3,136,68,0,2269,2267,1,0,0,0,2270, - 2273,1,0,0,0,2271,2269,1,0,0,0,2271,2272,1,0,0,0,2272,135,1,0,0, - 0,2273,2271,1,0,0,0,2274,2275,3,246,123,0,2275,2276,5,352,0,0,2276, - 2277,3,268,134,0,2277,137,1,0,0,0,2278,2279,5,344,0,0,2279,2280, - 3,276,138,0,2280,139,1,0,0,0,2281,2282,5,132,0,0,2282,2283,3,276, - 138,0,2283,141,1,0,0,0,2284,2285,5,374,0,0,2285,2292,3,144,72,0, - 2286,2288,5,4,0,0,2287,2286,1,0,0,0,2287,2288,1,0,0,0,2288,2289, - 1,0,0,0,2289,2291,3,144,72,0,2290,2287,1,0,0,0,2291,2294,1,0,0,0, - 2292,2290,1,0,0,0,2292,2293,1,0,0,0,2293,2295,1,0,0,0,2294,2292, - 1,0,0,0,2295,2296,5,375,0,0,2296,143,1,0,0,0,2297,2311,3,376,188, - 0,2298,2299,3,376,188,0,2299,2300,5,2,0,0,2300,2305,3,284,142,0, - 2301,2302,5,4,0,0,2302,2304,3,284,142,0,2303,2301,1,0,0,0,2304,2307, - 1,0,0,0,2305,2303,1,0,0,0,2305,2306,1,0,0,0,2306,2308,1,0,0,0,2307, - 2305,1,0,0,0,2308,2309,5,3,0,0,2309,2311,1,0,0,0,2310,2297,1,0,0, - 0,2310,2298,1,0,0,0,2311,145,1,0,0,0,2312,2313,5,123,0,0,2313,2318, - 3,198,99,0,2314,2315,5,4,0,0,2315,2317,3,198,99,0,2316,2314,1,0, - 0,0,2317,2320,1,0,0,0,2318,2316,1,0,0,0,2318,2319,1,0,0,0,2319,2324, - 1,0,0,0,2320,2318,1,0,0,0,2321,2323,3,194,97,0,2322,2321,1,0,0,0, - 2323,2326,1,0,0,0,2324,2322,1,0,0,0,2324,2325,1,0,0,0,2325,2328, - 1,0,0,0,2326,2324,1,0,0,0,2327,2329,3,162,81,0,2328,2327,1,0,0,0, - 2328,2329,1,0,0,0,2329,2331,1,0,0,0,2330,2332,3,168,84,0,2331,2330, - 1,0,0,0,2331,2332,1,0,0,0,2332,147,1,0,0,0,2333,2334,7,17,0,0,2334, - 149,1,0,0,0,2335,2337,5,119,0,0,2336,2335,1,0,0,0,2336,2337,1,0, - 0,0,2337,2338,1,0,0,0,2338,2339,7,18,0,0,2339,2340,5,20,0,0,2340, - 2341,5,201,0,0,2341,2350,3,392,196,0,2342,2344,5,119,0,0,2343,2342, - 1,0,0,0,2343,2344,1,0,0,0,2344,2345,1,0,0,0,2345,2346,7,19,0,0,2346, - 2347,5,20,0,0,2347,2348,5,201,0,0,2348,2350,3,280,140,0,2349,2336, - 1,0,0,0,2349,2343,1,0,0,0,2350,151,1,0,0,0,2351,2352,5,130,0,0,2352, - 2353,5,31,0,0,2353,2358,3,154,77,0,2354,2355,5,4,0,0,2355,2357,3, - 154,77,0,2356,2354,1,0,0,0,2357,2360,1,0,0,0,2358,2356,1,0,0,0,2358, - 2359,1,0,0,0,2359,2391,1,0,0,0,2360,2358,1,0,0,0,2361,2362,5,130, - 0,0,2362,2363,5,31,0,0,2363,2368,3,268,134,0,2364,2365,5,4,0,0,2365, - 2367,3,268,134,0,2366,2364,1,0,0,0,2367,2370,1,0,0,0,2368,2366,1, - 0,0,0,2368,2369,1,0,0,0,2369,2388,1,0,0,0,2370,2368,1,0,0,0,2371, - 2372,5,346,0,0,2372,2389,5,256,0,0,2373,2374,5,346,0,0,2374,2389, - 5,61,0,0,2375,2376,5,131,0,0,2376,2377,5,271,0,0,2377,2378,5,2,0, - 0,2378,2383,3,160,80,0,2379,2380,5,4,0,0,2380,2382,3,160,80,0,2381, - 2379,1,0,0,0,2382,2385,1,0,0,0,2383,2381,1,0,0,0,2383,2384,1,0,0, - 0,2384,2386,1,0,0,0,2385,2383,1,0,0,0,2386,2387,5,3,0,0,2387,2389, - 1,0,0,0,2388,2371,1,0,0,0,2388,2373,1,0,0,0,2388,2375,1,0,0,0,2388, - 2389,1,0,0,0,2389,2391,1,0,0,0,2390,2351,1,0,0,0,2390,2361,1,0,0, - 0,2391,153,1,0,0,0,2392,2396,3,92,46,0,2393,2396,3,156,78,0,2394, - 2396,3,268,134,0,2395,2392,1,0,0,0,2395,2393,1,0,0,0,2395,2394,1, - 0,0,0,2396,155,1,0,0,0,2397,2398,7,20,0,0,2398,2399,5,2,0,0,2399, - 2404,3,160,80,0,2400,2401,5,4,0,0,2401,2403,3,160,80,0,2402,2400, - 1,0,0,0,2403,2406,1,0,0,0,2404,2402,1,0,0,0,2404,2405,1,0,0,0,2405, - 2407,1,0,0,0,2406,2404,1,0,0,0,2407,2408,5,3,0,0,2408,2423,1,0,0, - 0,2409,2410,5,131,0,0,2410,2411,5,271,0,0,2411,2412,5,2,0,0,2412, - 2417,3,158,79,0,2413,2414,5,4,0,0,2414,2416,3,158,79,0,2415,2413, - 1,0,0,0,2416,2419,1,0,0,0,2417,2415,1,0,0,0,2417,2418,1,0,0,0,2418, - 2420,1,0,0,0,2419,2417,1,0,0,0,2420,2421,5,3,0,0,2421,2423,1,0,0, - 0,2422,2397,1,0,0,0,2422,2409,1,0,0,0,2423,157,1,0,0,0,2424,2427, - 3,156,78,0,2425,2427,3,160,80,0,2426,2424,1,0,0,0,2426,2425,1,0, - 0,0,2427,159,1,0,0,0,2428,2449,3,92,46,0,2429,2449,3,268,134,0,2430, - 2445,5,2,0,0,2431,2434,3,92,46,0,2432,2434,3,268,134,0,2433,2431, - 1,0,0,0,2433,2432,1,0,0,0,2434,2442,1,0,0,0,2435,2438,5,4,0,0,2436, - 2439,3,92,46,0,2437,2439,3,268,134,0,2438,2436,1,0,0,0,2438,2437, - 1,0,0,0,2439,2441,1,0,0,0,2440,2435,1,0,0,0,2441,2444,1,0,0,0,2442, - 2440,1,0,0,0,2442,2443,1,0,0,0,2443,2446,1,0,0,0,2444,2442,1,0,0, - 0,2445,2433,1,0,0,0,2445,2446,1,0,0,0,2446,2447,1,0,0,0,2447,2449, - 5,3,0,0,2448,2428,1,0,0,0,2448,2429,1,0,0,0,2448,2430,1,0,0,0,2449, - 161,1,0,0,0,2450,2451,5,223,0,0,2451,2452,5,2,0,0,2452,2453,3,258, - 129,0,2453,2454,5,119,0,0,2454,2455,3,164,82,0,2455,2456,5,140,0, - 0,2456,2457,5,2,0,0,2457,2462,3,166,83,0,2458,2459,5,4,0,0,2459, - 2461,3,166,83,0,2460,2458,1,0,0,0,2461,2464,1,0,0,0,2462,2460,1, - 0,0,0,2462,2463,1,0,0,0,2463,2465,1,0,0,0,2464,2462,1,0,0,0,2465, - 2466,5,3,0,0,2466,2467,5,3,0,0,2467,163,1,0,0,0,2468,2481,3,376, - 188,0,2469,2470,5,2,0,0,2470,2475,3,376,188,0,2471,2472,5,4,0,0, - 2472,2474,3,376,188,0,2473,2471,1,0,0,0,2474,2477,1,0,0,0,2475,2473, - 1,0,0,0,2475,2476,1,0,0,0,2476,2478,1,0,0,0,2477,2475,1,0,0,0,2478, - 2479,5,3,0,0,2479,2481,1,0,0,0,2480,2468,1,0,0,0,2480,2469,1,0,0, - 0,2481,165,1,0,0,0,2482,2487,3,268,134,0,2483,2485,5,20,0,0,2484, - 2483,1,0,0,0,2484,2485,1,0,0,0,2485,2486,1,0,0,0,2486,2488,3,376, - 188,0,2487,2484,1,0,0,0,2487,2488,1,0,0,0,2488,167,1,0,0,0,2489, - 2491,5,327,0,0,2490,2492,3,170,85,0,2491,2490,1,0,0,0,2491,2492, - 1,0,0,0,2492,2493,1,0,0,0,2493,2494,5,2,0,0,2494,2495,3,172,86,0, - 2495,2500,5,3,0,0,2496,2498,5,20,0,0,2497,2496,1,0,0,0,2497,2498, - 1,0,0,0,2498,2499,1,0,0,0,2499,2501,3,376,188,0,2500,2497,1,0,0, - 0,2500,2501,1,0,0,0,2501,169,1,0,0,0,2502,2503,7,21,0,0,2503,2504, - 5,199,0,0,2504,171,1,0,0,0,2505,2508,3,174,87,0,2506,2508,3,176, - 88,0,2507,2505,1,0,0,0,2507,2506,1,0,0,0,2508,173,1,0,0,0,2509,2510, - 3,180,90,0,2510,2511,5,119,0,0,2511,2512,3,182,91,0,2512,2513,5, - 140,0,0,2513,2514,5,2,0,0,2514,2519,3,184,92,0,2515,2516,5,4,0,0, - 2516,2518,3,184,92,0,2517,2515,1,0,0,0,2518,2521,1,0,0,0,2519,2517, - 1,0,0,0,2519,2520,1,0,0,0,2520,2522,1,0,0,0,2521,2519,1,0,0,0,2522, - 2523,5,3,0,0,2523,175,1,0,0,0,2524,2525,5,2,0,0,2525,2530,3,180, - 90,0,2526,2527,5,4,0,0,2527,2529,3,180,90,0,2528,2526,1,0,0,0,2529, - 2532,1,0,0,0,2530,2528,1,0,0,0,2530,2531,1,0,0,0,2531,2533,1,0,0, - 0,2532,2530,1,0,0,0,2533,2534,5,3,0,0,2534,2535,5,119,0,0,2535,2536, - 3,182,91,0,2536,2537,5,140,0,0,2537,2538,5,2,0,0,2538,2543,3,178, - 89,0,2539,2540,5,4,0,0,2540,2542,3,178,89,0,2541,2539,1,0,0,0,2542, - 2545,1,0,0,0,2543,2541,1,0,0,0,2543,2544,1,0,0,0,2544,2546,1,0,0, - 0,2545,2543,1,0,0,0,2546,2547,5,3,0,0,2547,177,1,0,0,0,2548,2549, - 5,2,0,0,2549,2554,3,186,93,0,2550,2551,5,4,0,0,2551,2553,3,186,93, - 0,2552,2550,1,0,0,0,2553,2556,1,0,0,0,2554,2552,1,0,0,0,2554,2555, - 1,0,0,0,2555,2557,1,0,0,0,2556,2554,1,0,0,0,2557,2559,5,3,0,0,2558, - 2560,3,188,94,0,2559,2558,1,0,0,0,2559,2560,1,0,0,0,2560,179,1,0, - 0,0,2561,2562,3,376,188,0,2562,181,1,0,0,0,2563,2564,3,376,188,0, - 2564,183,1,0,0,0,2565,2567,3,186,93,0,2566,2568,3,188,94,0,2567, - 2566,1,0,0,0,2567,2568,1,0,0,0,2568,185,1,0,0,0,2569,2570,3,246, - 123,0,2570,187,1,0,0,0,2571,2573,5,20,0,0,2572,2571,1,0,0,0,2572, - 2573,1,0,0,0,2573,2574,1,0,0,0,2574,2575,3,376,188,0,2575,189,1, - 0,0,0,2576,2577,5,137,0,0,2577,2578,5,197,0,0,2578,2579,5,105,0, - 0,2579,191,1,0,0,0,2580,2581,5,137,0,0,2581,2582,5,105,0,0,2582, - 193,1,0,0,0,2583,2584,5,158,0,0,2584,2586,5,338,0,0,2585,2587,5, - 211,0,0,2586,2585,1,0,0,0,2586,2587,1,0,0,0,2587,2588,1,0,0,0,2588, - 2589,3,90,45,0,2589,2598,5,2,0,0,2590,2595,3,268,134,0,2591,2592, - 5,4,0,0,2592,2594,3,268,134,0,2593,2591,1,0,0,0,2594,2597,1,0,0, - 0,2595,2593,1,0,0,0,2595,2596,1,0,0,0,2596,2599,1,0,0,0,2597,2595, - 1,0,0,0,2598,2590,1,0,0,0,2598,2599,1,0,0,0,2599,2600,1,0,0,0,2600, - 2601,5,3,0,0,2601,2613,3,240,120,0,2602,2604,5,20,0,0,2603,2602, - 1,0,0,0,2603,2604,1,0,0,0,2604,2605,1,0,0,0,2605,2610,3,376,188, - 0,2606,2607,5,4,0,0,2607,2609,3,376,188,0,2608,2606,1,0,0,0,2609, - 2612,1,0,0,0,2610,2608,1,0,0,0,2610,2611,1,0,0,0,2611,2614,1,0,0, - 0,2612,2610,1,0,0,0,2613,2603,1,0,0,0,2613,2614,1,0,0,0,2614,195, - 1,0,0,0,2615,2616,7,22,0,0,2616,197,1,0,0,0,2617,2629,3,86,43,0, - 2618,2620,5,158,0,0,2619,2618,1,0,0,0,2619,2620,1,0,0,0,2620,2621, - 1,0,0,0,2621,2625,3,224,112,0,2622,2624,3,200,100,0,2623,2622,1, - 0,0,0,2624,2627,1,0,0,0,2625,2623,1,0,0,0,2625,2626,1,0,0,0,2626, - 2629,1,0,0,0,2627,2625,1,0,0,0,2628,2617,1,0,0,0,2628,2619,1,0,0, - 0,2629,199,1,0,0,0,2630,2634,3,202,101,0,2631,2634,3,162,81,0,2632, - 2634,3,168,84,0,2633,2630,1,0,0,0,2633,2631,1,0,0,0,2633,2632,1, - 0,0,0,2634,201,1,0,0,0,2635,2636,3,204,102,0,2636,2638,5,155,0,0, - 2637,2639,5,158,0,0,2638,2637,1,0,0,0,2638,2639,1,0,0,0,2639,2640, - 1,0,0,0,2640,2642,3,224,112,0,2641,2643,3,206,103,0,2642,2641,1, - 0,0,0,2642,2643,1,0,0,0,2643,2653,1,0,0,0,2644,2645,5,194,0,0,2645, - 2646,3,204,102,0,2646,2648,5,155,0,0,2647,2649,5,158,0,0,2648,2647, - 1,0,0,0,2648,2649,1,0,0,0,2649,2650,1,0,0,0,2650,2651,3,224,112, - 0,2651,2653,1,0,0,0,2652,2635,1,0,0,0,2652,2644,1,0,0,0,2653,203, - 1,0,0,0,2654,2656,5,144,0,0,2655,2654,1,0,0,0,2655,2656,1,0,0,0, - 2656,2679,1,0,0,0,2657,2679,5,60,0,0,2658,2660,5,161,0,0,2659,2661, - 5,211,0,0,2660,2659,1,0,0,0,2660,2661,1,0,0,0,2661,2679,1,0,0,0, - 2662,2664,5,161,0,0,2663,2662,1,0,0,0,2663,2664,1,0,0,0,2664,2665, - 1,0,0,0,2665,2679,5,264,0,0,2666,2668,5,250,0,0,2667,2669,5,211, - 0,0,2668,2667,1,0,0,0,2668,2669,1,0,0,0,2669,2679,1,0,0,0,2670,2672, - 5,124,0,0,2671,2673,5,211,0,0,2672,2671,1,0,0,0,2672,2673,1,0,0, - 0,2673,2679,1,0,0,0,2674,2676,5,161,0,0,2675,2674,1,0,0,0,2675,2676, - 1,0,0,0,2676,2677,1,0,0,0,2677,2679,5,15,0,0,2678,2655,1,0,0,0,2678, - 2657,1,0,0,0,2678,2658,1,0,0,0,2678,2663,1,0,0,0,2678,2666,1,0,0, - 0,2678,2670,1,0,0,0,2678,2675,1,0,0,0,2679,205,1,0,0,0,2680,2681, - 5,203,0,0,2681,2685,3,276,138,0,2682,2683,5,332,0,0,2683,2685,3, - 212,106,0,2684,2680,1,0,0,0,2684,2682,1,0,0,0,2685,207,1,0,0,0,2686, - 2687,5,295,0,0,2687,2689,5,2,0,0,2688,2690,3,210,105,0,2689,2688, - 1,0,0,0,2689,2690,1,0,0,0,2690,2691,1,0,0,0,2691,2696,5,3,0,0,2692, - 2693,5,243,0,0,2693,2694,5,2,0,0,2694,2695,5,382,0,0,2695,2697,5, - 3,0,0,2696,2692,1,0,0,0,2696,2697,1,0,0,0,2697,209,1,0,0,0,2698, - 2700,5,362,0,0,2699,2698,1,0,0,0,2699,2700,1,0,0,0,2700,2701,1,0, - 0,0,2701,2702,7,23,0,0,2702,2723,5,222,0,0,2703,2704,3,268,134,0, - 2704,2705,5,258,0,0,2705,2723,1,0,0,0,2706,2707,5,29,0,0,2707,2708, - 5,382,0,0,2708,2709,5,210,0,0,2709,2710,5,201,0,0,2710,2719,5,382, - 0,0,2711,2717,5,203,0,0,2712,2718,3,376,188,0,2713,2714,3,370,185, - 0,2714,2715,5,2,0,0,2715,2716,5,3,0,0,2716,2718,1,0,0,0,2717,2712, - 1,0,0,0,2717,2713,1,0,0,0,2718,2720,1,0,0,0,2719,2711,1,0,0,0,2719, - 2720,1,0,0,0,2720,2723,1,0,0,0,2721,2723,3,268,134,0,2722,2699,1, - 0,0,0,2722,2703,1,0,0,0,2722,2706,1,0,0,0,2722,2721,1,0,0,0,2723, - 211,1,0,0,0,2724,2725,5,2,0,0,2725,2726,3,214,107,0,2726,2727,5, - 3,0,0,2727,213,1,0,0,0,2728,2733,3,372,186,0,2729,2730,5,4,0,0,2730, - 2732,3,372,186,0,2731,2729,1,0,0,0,2732,2735,1,0,0,0,2733,2731,1, - 0,0,0,2733,2734,1,0,0,0,2734,215,1,0,0,0,2735,2733,1,0,0,0,2736, - 2737,5,2,0,0,2737,2742,3,218,109,0,2738,2739,5,4,0,0,2739,2741,3, - 218,109,0,2740,2738,1,0,0,0,2741,2744,1,0,0,0,2742,2740,1,0,0,0, - 2742,2743,1,0,0,0,2743,2745,1,0,0,0,2744,2742,1,0,0,0,2745,2746, - 5,3,0,0,2746,217,1,0,0,0,2747,2749,3,372,186,0,2748,2750,7,15,0, - 0,2749,2748,1,0,0,0,2749,2750,1,0,0,0,2750,219,1,0,0,0,2751,2752, - 5,2,0,0,2752,2757,3,222,111,0,2753,2754,5,4,0,0,2754,2756,3,222, - 111,0,2755,2753,1,0,0,0,2756,2759,1,0,0,0,2757,2755,1,0,0,0,2757, - 2758,1,0,0,0,2758,2760,1,0,0,0,2759,2757,1,0,0,0,2760,2761,5,3,0, - 0,2761,221,1,0,0,0,2762,2764,3,96,48,0,2763,2765,3,24,12,0,2764, - 2763,1,0,0,0,2764,2765,1,0,0,0,2765,223,1,0,0,0,2766,2770,3,86,43, - 0,2767,2770,3,90,45,0,2768,2770,3,98,49,0,2769,2766,1,0,0,0,2769, - 2767,1,0,0,0,2769,2768,1,0,0,0,2770,2772,1,0,0,0,2771,2773,3,150, - 75,0,2772,2771,1,0,0,0,2772,2773,1,0,0,0,2773,2775,1,0,0,0,2774, - 2776,3,208,104,0,2775,2774,1,0,0,0,2775,2776,1,0,0,0,2776,2777,1, - 0,0,0,2777,2778,3,240,120,0,2778,2798,1,0,0,0,2779,2780,5,2,0,0, - 2780,2781,3,26,13,0,2781,2783,5,3,0,0,2782,2784,3,208,104,0,2783, - 2782,1,0,0,0,2783,2784,1,0,0,0,2784,2785,1,0,0,0,2785,2786,3,240, - 120,0,2786,2798,1,0,0,0,2787,2788,5,2,0,0,2788,2789,3,198,99,0,2789, - 2791,5,3,0,0,2790,2792,3,208,104,0,2791,2790,1,0,0,0,2791,2792,1, - 0,0,0,2792,2793,1,0,0,0,2793,2794,3,240,120,0,2794,2798,1,0,0,0, - 2795,2798,3,226,113,0,2796,2798,3,238,119,0,2797,2769,1,0,0,0,2797, - 2779,1,0,0,0,2797,2787,1,0,0,0,2797,2795,1,0,0,0,2797,2796,1,0,0, - 0,2798,225,1,0,0,0,2799,2800,5,333,0,0,2800,2805,3,268,134,0,2801, - 2802,5,4,0,0,2802,2804,3,268,134,0,2803,2801,1,0,0,0,2804,2807,1, - 0,0,0,2805,2803,1,0,0,0,2805,2806,1,0,0,0,2806,2808,1,0,0,0,2807, - 2805,1,0,0,0,2808,2809,3,240,120,0,2809,227,1,0,0,0,2810,2811,5, - 293,0,0,2811,2813,3,86,43,0,2812,2814,3,230,115,0,2813,2812,1,0, - 0,0,2813,2814,1,0,0,0,2814,2830,1,0,0,0,2815,2816,5,293,0,0,2816, - 2817,5,2,0,0,2817,2818,3,86,43,0,2818,2820,5,3,0,0,2819,2821,3,230, - 115,0,2820,2819,1,0,0,0,2820,2821,1,0,0,0,2821,2830,1,0,0,0,2822, - 2823,5,293,0,0,2823,2824,5,2,0,0,2824,2825,3,26,13,0,2825,2827,5, - 3,0,0,2826,2828,3,230,115,0,2827,2826,1,0,0,0,2827,2828,1,0,0,0, - 2828,2830,1,0,0,0,2829,2810,1,0,0,0,2829,2815,1,0,0,0,2829,2822, - 1,0,0,0,2830,229,1,0,0,0,2831,2832,5,346,0,0,2832,2833,5,274,0,0, - 2833,2851,5,217,0,0,2834,2835,7,24,0,0,2835,2848,5,31,0,0,2836,2837, - 5,2,0,0,2837,2842,3,268,134,0,2838,2839,5,4,0,0,2839,2841,3,268, - 134,0,2840,2838,1,0,0,0,2841,2844,1,0,0,0,2842,2840,1,0,0,0,2842, - 2843,1,0,0,0,2843,2845,1,0,0,0,2844,2842,1,0,0,0,2845,2846,5,3,0, - 0,2846,2849,1,0,0,0,2847,2849,3,268,134,0,2848,2836,1,0,0,0,2848, - 2847,1,0,0,0,2849,2851,1,0,0,0,2850,2831,1,0,0,0,2850,2834,1,0,0, - 0,2851,2868,1,0,0,0,2852,2853,7,25,0,0,2853,2866,5,31,0,0,2854,2855, - 5,2,0,0,2855,2860,3,108,54,0,2856,2857,5,4,0,0,2857,2859,3,108,54, - 0,2858,2856,1,0,0,0,2859,2862,1,0,0,0,2860,2858,1,0,0,0,2860,2861, - 1,0,0,0,2861,2863,1,0,0,0,2862,2860,1,0,0,0,2863,2864,5,3,0,0,2864, - 2867,1,0,0,0,2865,2867,3,108,54,0,2866,2854,1,0,0,0,2866,2865,1, - 0,0,0,2867,2869,1,0,0,0,2868,2852,1,0,0,0,2868,2869,1,0,0,0,2869, - 231,1,0,0,0,2870,2871,3,376,188,0,2871,2872,5,373,0,0,2872,2873, - 3,228,114,0,2873,233,1,0,0,0,2874,2877,3,228,114,0,2875,2877,3,232, - 116,0,2876,2874,1,0,0,0,2876,2875,1,0,0,0,2877,235,1,0,0,0,2878, - 2881,3,234,117,0,2879,2881,3,272,136,0,2880,2878,1,0,0,0,2880,2879, - 1,0,0,0,2881,237,1,0,0,0,2882,2883,3,366,183,0,2883,2892,5,2,0,0, - 2884,2889,3,236,118,0,2885,2886,5,4,0,0,2886,2888,3,236,118,0,2887, - 2885,1,0,0,0,2888,2891,1,0,0,0,2889,2887,1,0,0,0,2889,2890,1,0,0, - 0,2890,2893,1,0,0,0,2891,2889,1,0,0,0,2892,2884,1,0,0,0,2892,2893, - 1,0,0,0,2893,2894,1,0,0,0,2894,2895,5,3,0,0,2895,2896,3,240,120, - 0,2896,239,1,0,0,0,2897,2899,5,20,0,0,2898,2897,1,0,0,0,2898,2899, - 1,0,0,0,2899,2900,1,0,0,0,2900,2902,3,378,189,0,2901,2903,3,212, - 106,0,2902,2901,1,0,0,0,2902,2903,1,0,0,0,2903,2905,1,0,0,0,2904, - 2898,1,0,0,0,2904,2905,1,0,0,0,2905,241,1,0,0,0,2906,2907,5,257, - 0,0,2907,2908,5,121,0,0,2908,2909,5,266,0,0,2909,2913,3,388,194, - 0,2910,2911,5,346,0,0,2911,2912,5,267,0,0,2912,2914,3,54,27,0,2913, - 2910,1,0,0,0,2913,2914,1,0,0,0,2914,2956,1,0,0,0,2915,2916,5,257, - 0,0,2916,2917,5,121,0,0,2917,2927,5,85,0,0,2918,2919,5,113,0,0,2919, - 2920,5,299,0,0,2920,2921,5,31,0,0,2921,2925,3,388,194,0,2922,2923, - 5,101,0,0,2923,2924,5,31,0,0,2924,2926,3,388,194,0,2925,2922,1,0, - 0,0,2925,2926,1,0,0,0,2926,2928,1,0,0,0,2927,2918,1,0,0,0,2927,2928, - 1,0,0,0,2928,2934,1,0,0,0,2929,2930,5,48,0,0,2930,2931,5,154,0,0, - 2931,2932,5,299,0,0,2932,2933,5,31,0,0,2933,2935,3,388,194,0,2934, - 2929,1,0,0,0,2934,2935,1,0,0,0,2935,2941,1,0,0,0,2936,2937,5,177, - 0,0,2937,2938,5,156,0,0,2938,2939,5,299,0,0,2939,2940,5,31,0,0,2940, - 2942,3,388,194,0,2941,2936,1,0,0,0,2941,2942,1,0,0,0,2942,2947,1, - 0,0,0,2943,2944,5,166,0,0,2944,2945,5,299,0,0,2945,2946,5,31,0,0, - 2946,2948,3,388,194,0,2947,2943,1,0,0,0,2947,2948,1,0,0,0,2948,2953, - 1,0,0,0,2949,2950,5,198,0,0,2950,2951,5,83,0,0,2951,2952,5,20,0, - 0,2952,2954,3,388,194,0,2953,2949,1,0,0,0,2953,2954,1,0,0,0,2954, - 2956,1,0,0,0,2955,2906,1,0,0,0,2955,2915,1,0,0,0,2956,243,1,0,0, - 0,2957,2962,3,246,123,0,2958,2959,5,4,0,0,2959,2961,3,246,123,0, - 2960,2958,1,0,0,0,2961,2964,1,0,0,0,2962,2960,1,0,0,0,2962,2963, - 1,0,0,0,2963,245,1,0,0,0,2964,2962,1,0,0,0,2965,2970,3,372,186,0, - 2966,2967,5,5,0,0,2967,2969,3,372,186,0,2968,2966,1,0,0,0,2969,2972, - 1,0,0,0,2970,2968,1,0,0,0,2970,2971,1,0,0,0,2971,247,1,0,0,0,2972, - 2970,1,0,0,0,2973,2978,3,250,125,0,2974,2975,5,4,0,0,2975,2977,3, - 250,125,0,2976,2974,1,0,0,0,2977,2980,1,0,0,0,2978,2976,1,0,0,0, - 2978,2979,1,0,0,0,2979,249,1,0,0,0,2980,2978,1,0,0,0,2981,2984,3, - 246,123,0,2982,2983,5,207,0,0,2983,2985,3,54,27,0,2984,2982,1,0, - 0,0,2984,2985,1,0,0,0,2985,251,1,0,0,0,2986,2987,3,372,186,0,2987, - 2988,5,5,0,0,2988,2990,1,0,0,0,2989,2986,1,0,0,0,2989,2990,1,0,0, - 0,2990,2991,1,0,0,0,2991,2992,3,372,186,0,2992,253,1,0,0,0,2993, - 2994,3,372,186,0,2994,2995,5,5,0,0,2995,2997,1,0,0,0,2996,2993,1, - 0,0,0,2996,2997,1,0,0,0,2997,2998,1,0,0,0,2998,2999,3,372,186,0, - 2999,255,1,0,0,0,3000,3003,3,92,46,0,3001,3003,3,268,134,0,3002, - 3000,1,0,0,0,3002,3001,1,0,0,0,3003,3011,1,0,0,0,3004,3006,5,20, - 0,0,3005,3004,1,0,0,0,3005,3006,1,0,0,0,3006,3009,1,0,0,0,3007,3010, - 3,372,186,0,3008,3010,3,212,106,0,3009,3007,1,0,0,0,3009,3008,1, - 0,0,0,3010,3012,1,0,0,0,3011,3005,1,0,0,0,3011,3012,1,0,0,0,3012, - 257,1,0,0,0,3013,3018,3,256,128,0,3014,3015,5,4,0,0,3015,3017,3, - 256,128,0,3016,3014,1,0,0,0,3017,3020,1,0,0,0,3018,3016,1,0,0,0, - 3018,3019,1,0,0,0,3019,259,1,0,0,0,3020,3018,1,0,0,0,3021,3022,5, - 2,0,0,3022,3027,3,262,131,0,3023,3024,5,4,0,0,3024,3026,3,262,131, - 0,3025,3023,1,0,0,0,3026,3029,1,0,0,0,3027,3025,1,0,0,0,3027,3028, - 1,0,0,0,3028,3030,1,0,0,0,3029,3027,1,0,0,0,3030,3031,5,3,0,0,3031, - 261,1,0,0,0,3032,3035,3,264,132,0,3033,3035,3,336,168,0,3034,3032, - 1,0,0,0,3034,3033,1,0,0,0,3035,263,1,0,0,0,3036,3050,3,370,185,0, - 3037,3038,3,376,188,0,3038,3039,5,2,0,0,3039,3044,3,266,133,0,3040, - 3041,5,4,0,0,3041,3043,3,266,133,0,3042,3040,1,0,0,0,3043,3046,1, - 0,0,0,3044,3042,1,0,0,0,3044,3045,1,0,0,0,3045,3047,1,0,0,0,3046, - 3044,1,0,0,0,3047,3048,5,3,0,0,3048,3050,1,0,0,0,3049,3036,1,0,0, - 0,3049,3037,1,0,0,0,3050,265,1,0,0,0,3051,3054,3,370,185,0,3052, - 3054,3,288,144,0,3053,3051,1,0,0,0,3053,3052,1,0,0,0,3054,267,1, - 0,0,0,3055,3056,3,276,138,0,3056,269,1,0,0,0,3057,3058,3,376,188, - 0,3058,3059,5,373,0,0,3059,3060,3,268,134,0,3060,271,1,0,0,0,3061, - 3064,3,268,134,0,3062,3064,3,270,135,0,3063,3061,1,0,0,0,3063,3062, - 1,0,0,0,3064,273,1,0,0,0,3065,3070,3,268,134,0,3066,3067,5,4,0,0, - 3067,3069,3,268,134,0,3068,3066,1,0,0,0,3069,3072,1,0,0,0,3070,3068, - 1,0,0,0,3070,3071,1,0,0,0,3071,275,1,0,0,0,3072,3070,1,0,0,0,3073, - 3074,6,138,-1,0,3074,3075,7,26,0,0,3075,3086,3,276,138,5,3076,3077, - 5,105,0,0,3077,3078,5,2,0,0,3078,3079,3,26,13,0,3079,3080,5,3,0, - 0,3080,3086,1,0,0,0,3081,3083,3,280,140,0,3082,3084,3,278,139,0, - 3083,3082,1,0,0,0,3083,3084,1,0,0,0,3084,3086,1,0,0,0,3085,3073, - 1,0,0,0,3085,3076,1,0,0,0,3085,3081,1,0,0,0,3086,3095,1,0,0,0,3087, - 3088,10,2,0,0,3088,3089,5,14,0,0,3089,3094,3,276,138,3,3090,3091, - 10,1,0,0,3091,3092,5,208,0,0,3092,3094,3,276,138,2,3093,3087,1,0, - 0,0,3093,3090,1,0,0,0,3094,3097,1,0,0,0,3095,3093,1,0,0,0,3095,3096, - 1,0,0,0,3096,277,1,0,0,0,3097,3095,1,0,0,0,3098,3100,5,197,0,0,3099, - 3098,1,0,0,0,3099,3100,1,0,0,0,3100,3101,1,0,0,0,3101,3102,5,24, - 0,0,3102,3103,3,280,140,0,3103,3104,5,14,0,0,3104,3105,3,280,140, - 0,3105,3181,1,0,0,0,3106,3108,5,197,0,0,3107,3106,1,0,0,0,3107,3108, - 1,0,0,0,3108,3109,1,0,0,0,3109,3110,5,140,0,0,3110,3111,5,2,0,0, - 3111,3116,3,268,134,0,3112,3113,5,4,0,0,3113,3115,3,268,134,0,3114, - 3112,1,0,0,0,3115,3118,1,0,0,0,3116,3114,1,0,0,0,3116,3117,1,0,0, - 0,3117,3119,1,0,0,0,3118,3116,1,0,0,0,3119,3120,5,3,0,0,3120,3181, - 1,0,0,0,3121,3123,5,197,0,0,3122,3121,1,0,0,0,3122,3123,1,0,0,0, - 3123,3124,1,0,0,0,3124,3125,5,140,0,0,3125,3126,5,2,0,0,3126,3127, - 3,26,13,0,3127,3128,5,3,0,0,3128,3181,1,0,0,0,3129,3131,5,197,0, - 0,3130,3129,1,0,0,0,3130,3131,1,0,0,0,3131,3132,1,0,0,0,3132,3133, - 7,27,0,0,3133,3181,3,280,140,0,3134,3136,5,197,0,0,3135,3134,1,0, - 0,0,3135,3136,1,0,0,0,3136,3137,1,0,0,0,3137,3138,7,28,0,0,3138, - 3152,7,29,0,0,3139,3140,5,2,0,0,3140,3153,5,3,0,0,3141,3142,5,2, - 0,0,3142,3147,3,268,134,0,3143,3144,5,4,0,0,3144,3146,3,268,134, - 0,3145,3143,1,0,0,0,3146,3149,1,0,0,0,3147,3145,1,0,0,0,3147,3148, - 1,0,0,0,3148,3150,1,0,0,0,3149,3147,1,0,0,0,3150,3151,5,3,0,0,3151, - 3153,1,0,0,0,3152,3139,1,0,0,0,3152,3141,1,0,0,0,3153,3181,1,0,0, - 0,3154,3156,5,197,0,0,3155,3154,1,0,0,0,3155,3156,1,0,0,0,3156,3157, - 1,0,0,0,3157,3158,7,28,0,0,3158,3161,3,280,140,0,3159,3160,5,100, - 0,0,3160,3162,3,388,194,0,3161,3159,1,0,0,0,3161,3162,1,0,0,0,3162, - 3181,1,0,0,0,3163,3165,5,153,0,0,3164,3166,5,197,0,0,3165,3164,1, - 0,0,0,3165,3166,1,0,0,0,3166,3167,1,0,0,0,3167,3181,5,198,0,0,3168, - 3170,5,153,0,0,3169,3171,5,197,0,0,3170,3169,1,0,0,0,3170,3171,1, - 0,0,0,3171,3172,1,0,0,0,3172,3181,7,30,0,0,3173,3175,5,153,0,0,3174, - 3176,5,197,0,0,3175,3174,1,0,0,0,3175,3176,1,0,0,0,3176,3177,1,0, - 0,0,3177,3178,5,92,0,0,3178,3179,5,123,0,0,3179,3181,3,280,140,0, - 3180,3099,1,0,0,0,3180,3107,1,0,0,0,3180,3122,1,0,0,0,3180,3130, - 1,0,0,0,3180,3135,1,0,0,0,3180,3155,1,0,0,0,3180,3163,1,0,0,0,3180, - 3168,1,0,0,0,3180,3173,1,0,0,0,3181,279,1,0,0,0,3182,3183,6,140, - -1,0,3183,3187,3,284,142,0,3184,3185,7,31,0,0,3185,3187,3,280,140, - 7,3186,3182,1,0,0,0,3186,3184,1,0,0,0,3187,3209,1,0,0,0,3188,3189, - 10,6,0,0,3189,3190,7,32,0,0,3190,3208,3,280,140,7,3191,3192,10,5, - 0,0,3192,3193,7,33,0,0,3193,3208,3,280,140,6,3194,3195,10,4,0,0, - 3195,3196,5,367,0,0,3196,3208,3,280,140,5,3197,3198,10,3,0,0,3198, - 3199,5,370,0,0,3199,3208,3,280,140,4,3200,3201,10,2,0,0,3201,3202, - 5,368,0,0,3202,3208,3,280,140,3,3203,3204,10,1,0,0,3204,3205,3,290, - 145,0,3205,3206,3,280,140,2,3206,3208,1,0,0,0,3207,3188,1,0,0,0, - 3207,3191,1,0,0,0,3207,3194,1,0,0,0,3207,3197,1,0,0,0,3207,3200, - 1,0,0,0,3207,3203,1,0,0,0,3208,3211,1,0,0,0,3209,3207,1,0,0,0,3209, - 3210,1,0,0,0,3210,281,1,0,0,0,3211,3209,1,0,0,0,3212,3213,7,34,0, - 0,3213,283,1,0,0,0,3214,3215,6,142,-1,0,3215,3464,7,35,0,0,3216, - 3217,7,36,0,0,3217,3220,5,2,0,0,3218,3221,3,282,141,0,3219,3221, - 3,388,194,0,3220,3218,1,0,0,0,3220,3219,1,0,0,0,3221,3222,1,0,0, - 0,3222,3223,5,4,0,0,3223,3224,3,280,140,0,3224,3225,5,4,0,0,3225, - 3226,3,280,140,0,3226,3227,5,3,0,0,3227,3464,1,0,0,0,3228,3229,7, - 37,0,0,3229,3232,5,2,0,0,3230,3233,3,282,141,0,3231,3233,3,388,194, - 0,3232,3230,1,0,0,0,3232,3231,1,0,0,0,3233,3234,1,0,0,0,3234,3235, - 5,4,0,0,3235,3236,3,280,140,0,3236,3237,5,4,0,0,3237,3238,3,280, - 140,0,3238,3239,5,3,0,0,3239,3464,1,0,0,0,3240,3242,5,35,0,0,3241, - 3243,3,350,175,0,3242,3241,1,0,0,0,3243,3244,1,0,0,0,3244,3242,1, - 0,0,0,3244,3245,1,0,0,0,3245,3248,1,0,0,0,3246,3247,5,97,0,0,3247, - 3249,3,268,134,0,3248,3246,1,0,0,0,3248,3249,1,0,0,0,3249,3250,1, - 0,0,0,3250,3251,5,99,0,0,3251,3464,1,0,0,0,3252,3253,5,35,0,0,3253, - 3255,3,268,134,0,3254,3256,3,350,175,0,3255,3254,1,0,0,0,3256,3257, - 1,0,0,0,3257,3255,1,0,0,0,3257,3258,1,0,0,0,3258,3261,1,0,0,0,3259, - 3260,5,97,0,0,3260,3262,3,268,134,0,3261,3259,1,0,0,0,3261,3262, - 1,0,0,0,3262,3263,1,0,0,0,3263,3264,5,99,0,0,3264,3464,1,0,0,0,3265, - 3266,7,38,0,0,3266,3267,5,2,0,0,3267,3268,3,268,134,0,3268,3269, - 5,20,0,0,3269,3270,3,318,159,0,3270,3271,5,3,0,0,3271,3464,1,0,0, - 0,3272,3273,5,286,0,0,3273,3282,5,2,0,0,3274,3279,3,256,128,0,3275, - 3276,5,4,0,0,3276,3278,3,256,128,0,3277,3275,1,0,0,0,3278,3281,1, - 0,0,0,3279,3277,1,0,0,0,3279,3280,1,0,0,0,3280,3283,1,0,0,0,3281, - 3279,1,0,0,0,3282,3274,1,0,0,0,3282,3283,1,0,0,0,3283,3284,1,0,0, - 0,3284,3464,5,3,0,0,3285,3286,5,116,0,0,3286,3287,5,2,0,0,3287,3290, - 3,268,134,0,3288,3289,5,138,0,0,3289,3291,5,199,0,0,3290,3288,1, - 0,0,0,3290,3291,1,0,0,0,3291,3292,1,0,0,0,3292,3293,5,3,0,0,3293, - 3464,1,0,0,0,3294,3295,5,17,0,0,3295,3296,5,2,0,0,3296,3299,3,268, - 134,0,3297,3298,5,138,0,0,3298,3300,5,199,0,0,3299,3297,1,0,0,0, - 3299,3300,1,0,0,0,3300,3301,1,0,0,0,3301,3302,5,3,0,0,3302,3464, - 1,0,0,0,3303,3304,5,157,0,0,3304,3305,5,2,0,0,3305,3308,3,268,134, - 0,3306,3307,5,138,0,0,3307,3309,5,199,0,0,3308,3306,1,0,0,0,3308, - 3309,1,0,0,0,3309,3310,1,0,0,0,3310,3311,5,3,0,0,3311,3464,1,0,0, - 0,3312,3313,5,225,0,0,3313,3314,5,2,0,0,3314,3315,3,280,140,0,3315, - 3316,5,140,0,0,3316,3317,3,280,140,0,3317,3318,5,3,0,0,3318,3464, - 1,0,0,0,3319,3464,3,288,144,0,3320,3464,5,363,0,0,3321,3322,3,370, - 185,0,3322,3323,5,5,0,0,3323,3324,5,363,0,0,3324,3464,1,0,0,0,3325, - 3326,5,2,0,0,3326,3329,3,256,128,0,3327,3328,5,4,0,0,3328,3330,3, - 256,128,0,3329,3327,1,0,0,0,3330,3331,1,0,0,0,3331,3329,1,0,0,0, - 3331,3332,1,0,0,0,3332,3333,1,0,0,0,3333,3334,5,3,0,0,3334,3464, - 1,0,0,0,3335,3336,5,2,0,0,3336,3337,3,26,13,0,3337,3338,5,3,0,0, - 3338,3464,1,0,0,0,3339,3340,5,136,0,0,3340,3341,5,2,0,0,3341,3342, - 3,268,134,0,3342,3343,5,3,0,0,3343,3464,1,0,0,0,3344,3345,3,366, - 183,0,3345,3357,5,2,0,0,3346,3348,3,196,98,0,3347,3346,1,0,0,0,3347, - 3348,1,0,0,0,3348,3349,1,0,0,0,3349,3354,3,272,136,0,3350,3351,5, - 4,0,0,3351,3353,3,272,136,0,3352,3350,1,0,0,0,3353,3356,1,0,0,0, - 3354,3352,1,0,0,0,3354,3355,1,0,0,0,3355,3358,1,0,0,0,3356,3354, - 1,0,0,0,3357,3347,1,0,0,0,3357,3358,1,0,0,0,3358,3359,1,0,0,0,3359, - 3366,5,3,0,0,3360,3361,5,114,0,0,3361,3362,5,2,0,0,3362,3363,5,344, - 0,0,3363,3364,3,276,138,0,3364,3365,5,3,0,0,3365,3367,1,0,0,0,3366, - 3360,1,0,0,0,3366,3367,1,0,0,0,3367,3370,1,0,0,0,3368,3369,7,39, - 0,0,3369,3371,5,199,0,0,3370,3368,1,0,0,0,3370,3371,1,0,0,0,3371, - 3374,1,0,0,0,3372,3373,5,213,0,0,3373,3375,3,358,179,0,3374,3372, - 1,0,0,0,3374,3375,1,0,0,0,3375,3464,1,0,0,0,3376,3377,3,376,188, - 0,3377,3378,5,372,0,0,3378,3379,3,268,134,0,3379,3464,1,0,0,0,3380, - 3381,5,2,0,0,3381,3384,3,376,188,0,3382,3383,5,4,0,0,3383,3385,3, - 376,188,0,3384,3382,1,0,0,0,3385,3386,1,0,0,0,3386,3384,1,0,0,0, - 3386,3387,1,0,0,0,3387,3388,1,0,0,0,3388,3389,5,3,0,0,3389,3390, - 5,372,0,0,3390,3391,3,268,134,0,3391,3464,1,0,0,0,3392,3464,3,376, - 188,0,3393,3394,5,2,0,0,3394,3395,3,268,134,0,3395,3396,5,3,0,0, - 3396,3464,1,0,0,0,3397,3398,5,110,0,0,3398,3399,5,2,0,0,3399,3400, - 3,376,188,0,3400,3401,5,123,0,0,3401,3402,3,280,140,0,3402,3403, - 5,3,0,0,3403,3464,1,0,0,0,3404,3405,7,40,0,0,3405,3406,5,2,0,0,3406, - 3407,3,280,140,0,3407,3408,7,41,0,0,3408,3411,3,280,140,0,3409,3410, - 7,42,0,0,3410,3412,3,280,140,0,3411,3409,1,0,0,0,3411,3412,1,0,0, - 0,3412,3413,1,0,0,0,3413,3414,5,3,0,0,3414,3464,1,0,0,0,3415,3416, - 5,315,0,0,3416,3418,5,2,0,0,3417,3419,7,43,0,0,3418,3417,1,0,0,0, - 3418,3419,1,0,0,0,3419,3421,1,0,0,0,3420,3422,3,280,140,0,3421,3420, - 1,0,0,0,3421,3422,1,0,0,0,3422,3423,1,0,0,0,3423,3424,5,123,0,0, - 3424,3425,3,280,140,0,3425,3426,5,3,0,0,3426,3464,1,0,0,0,3427,3428, - 5,215,0,0,3428,3429,5,2,0,0,3429,3430,3,280,140,0,3430,3431,5,224, - 0,0,3431,3432,3,280,140,0,3432,3433,5,123,0,0,3433,3436,3,280,140, - 0,3434,3435,5,119,0,0,3435,3437,3,280,140,0,3436,3434,1,0,0,0,3436, - 3437,1,0,0,0,3437,3438,1,0,0,0,3438,3439,5,3,0,0,3439,3464,1,0,0, - 0,3440,3441,7,44,0,0,3441,3442,5,2,0,0,3442,3443,3,280,140,0,3443, - 3444,5,3,0,0,3444,3445,5,347,0,0,3445,3446,5,130,0,0,3446,3447,5, - 2,0,0,3447,3448,5,209,0,0,3448,3449,5,31,0,0,3449,3450,3,108,54, - 0,3450,3457,5,3,0,0,3451,3452,5,114,0,0,3452,3453,5,2,0,0,3453,3454, - 5,344,0,0,3454,3455,3,276,138,0,3455,3456,5,3,0,0,3456,3458,1,0, - 0,0,3457,3451,1,0,0,0,3457,3458,1,0,0,0,3458,3461,1,0,0,0,3459,3460, - 5,213,0,0,3460,3462,3,358,179,0,3461,3459,1,0,0,0,3461,3462,1,0, - 0,0,3462,3464,1,0,0,0,3463,3214,1,0,0,0,3463,3216,1,0,0,0,3463,3228, - 1,0,0,0,3463,3240,1,0,0,0,3463,3252,1,0,0,0,3463,3265,1,0,0,0,3463, - 3272,1,0,0,0,3463,3285,1,0,0,0,3463,3294,1,0,0,0,3463,3303,1,0,0, - 0,3463,3312,1,0,0,0,3463,3319,1,0,0,0,3463,3320,1,0,0,0,3463,3321, - 1,0,0,0,3463,3325,1,0,0,0,3463,3335,1,0,0,0,3463,3339,1,0,0,0,3463, - 3344,1,0,0,0,3463,3376,1,0,0,0,3463,3380,1,0,0,0,3463,3392,1,0,0, - 0,3463,3393,1,0,0,0,3463,3397,1,0,0,0,3463,3404,1,0,0,0,3463,3415, - 1,0,0,0,3463,3427,1,0,0,0,3463,3440,1,0,0,0,3464,3475,1,0,0,0,3465, - 3466,10,9,0,0,3466,3467,5,6,0,0,3467,3468,3,280,140,0,3468,3469, - 5,7,0,0,3469,3474,1,0,0,0,3470,3471,10,7,0,0,3471,3472,5,5,0,0,3472, - 3474,3,376,188,0,3473,3465,1,0,0,0,3473,3470,1,0,0,0,3474,3477,1, - 0,0,0,3475,3473,1,0,0,0,3475,3476,1,0,0,0,3476,285,1,0,0,0,3477, - 3475,1,0,0,0,3478,3486,5,71,0,0,3479,3486,5,303,0,0,3480,3486,5, - 304,0,0,3481,3486,5,305,0,0,3482,3486,5,149,0,0,3483,3486,5,133, - 0,0,3484,3486,3,376,188,0,3485,3478,1,0,0,0,3485,3479,1,0,0,0,3485, - 3480,1,0,0,0,3485,3481,1,0,0,0,3485,3482,1,0,0,0,3485,3483,1,0,0, - 0,3485,3484,1,0,0,0,3486,287,1,0,0,0,3487,3503,5,198,0,0,3488,3503, - 5,376,0,0,3489,3490,5,371,0,0,3490,3503,3,376,188,0,3491,3503,3, - 298,149,0,3492,3493,3,286,143,0,3493,3494,3,388,194,0,3494,3503, - 1,0,0,0,3495,3503,3,384,192,0,3496,3503,3,296,148,0,3497,3499,3, - 388,194,0,3498,3497,1,0,0,0,3499,3500,1,0,0,0,3500,3498,1,0,0,0, - 3500,3501,1,0,0,0,3501,3503,1,0,0,0,3502,3487,1,0,0,0,3502,3488, - 1,0,0,0,3502,3489,1,0,0,0,3502,3491,1,0,0,0,3502,3492,1,0,0,0,3502, - 3495,1,0,0,0,3502,3496,1,0,0,0,3502,3498,1,0,0,0,3503,289,1,0,0, - 0,3504,3505,7,45,0,0,3505,291,1,0,0,0,3506,3507,7,46,0,0,3507,293, - 1,0,0,0,3508,3509,7,47,0,0,3509,295,1,0,0,0,3510,3511,7,48,0,0,3511, - 297,1,0,0,0,3512,3515,5,149,0,0,3513,3516,3,300,150,0,3514,3516, - 3,304,152,0,3515,3513,1,0,0,0,3515,3514,1,0,0,0,3516,299,1,0,0,0, - 3517,3519,3,302,151,0,3518,3520,3,306,153,0,3519,3518,1,0,0,0,3519, - 3520,1,0,0,0,3520,301,1,0,0,0,3521,3522,3,308,154,0,3522,3523,3, - 310,155,0,3523,3525,1,0,0,0,3524,3521,1,0,0,0,3525,3526,1,0,0,0, - 3526,3524,1,0,0,0,3526,3527,1,0,0,0,3527,303,1,0,0,0,3528,3531,3, - 306,153,0,3529,3532,3,302,151,0,3530,3532,3,306,153,0,3531,3529, - 1,0,0,0,3531,3530,1,0,0,0,3531,3532,1,0,0,0,3532,305,1,0,0,0,3533, - 3534,3,308,154,0,3534,3535,3,312,156,0,3535,3536,5,309,0,0,3536, - 3537,3,312,156,0,3537,307,1,0,0,0,3538,3540,7,49,0,0,3539,3538,1, - 0,0,0,3539,3540,1,0,0,0,3540,3544,1,0,0,0,3541,3545,5,382,0,0,3542, - 3545,5,384,0,0,3543,3545,3,388,194,0,3544,3541,1,0,0,0,3544,3542, - 1,0,0,0,3544,3543,1,0,0,0,3545,309,1,0,0,0,3546,3547,7,50,0,0,3547, - 311,1,0,0,0,3548,3549,7,51,0,0,3549,313,1,0,0,0,3550,3554,5,116, - 0,0,3551,3552,5,9,0,0,3552,3554,3,372,186,0,3553,3550,1,0,0,0,3553, - 3551,1,0,0,0,3554,315,1,0,0,0,3555,3586,5,27,0,0,3556,3586,5,308, - 0,0,3557,3586,5,32,0,0,3558,3586,5,276,0,0,3559,3586,5,272,0,0,3560, - 3586,5,150,0,0,3561,3586,5,151,0,0,3562,3586,5,25,0,0,3563,3586, - 5,174,0,0,3564,3586,5,117,0,0,3565,3586,5,234,0,0,3566,3586,5,95, - 0,0,3567,3586,5,71,0,0,3568,3586,5,303,0,0,3569,3586,5,305,0,0,3570, - 3586,5,304,0,0,3571,3586,5,285,0,0,3572,3586,5,41,0,0,3573,3586, - 5,40,0,0,3574,3586,5,334,0,0,3575,3586,5,26,0,0,3576,3586,5,80,0, - 0,3577,3586,5,79,0,0,3578,3586,5,200,0,0,3579,3586,5,340,0,0,3580, - 3586,5,149,0,0,3581,3586,5,19,0,0,3582,3586,5,286,0,0,3583,3586, - 5,177,0,0,3584,3586,3,376,188,0,3585,3555,1,0,0,0,3585,3556,1,0, - 0,0,3585,3557,1,0,0,0,3585,3558,1,0,0,0,3585,3559,1,0,0,0,3585,3560, - 1,0,0,0,3585,3561,1,0,0,0,3585,3562,1,0,0,0,3585,3563,1,0,0,0,3585, - 3564,1,0,0,0,3585,3565,1,0,0,0,3585,3566,1,0,0,0,3585,3567,1,0,0, - 0,3585,3568,1,0,0,0,3585,3569,1,0,0,0,3585,3570,1,0,0,0,3585,3571, - 1,0,0,0,3585,3572,1,0,0,0,3585,3573,1,0,0,0,3585,3574,1,0,0,0,3585, - 3575,1,0,0,0,3585,3576,1,0,0,0,3585,3577,1,0,0,0,3585,3578,1,0,0, - 0,3585,3579,1,0,0,0,3585,3580,1,0,0,0,3585,3581,1,0,0,0,3585,3582, - 1,0,0,0,3585,3583,1,0,0,0,3585,3584,1,0,0,0,3586,317,1,0,0,0,3587, - 3588,5,19,0,0,3588,3589,5,356,0,0,3589,3590,3,318,159,0,3590,3591, - 5,358,0,0,3591,3634,1,0,0,0,3592,3593,5,177,0,0,3593,3594,5,356, - 0,0,3594,3595,3,318,159,0,3595,3596,5,4,0,0,3596,3597,3,318,159, - 0,3597,3598,5,358,0,0,3598,3634,1,0,0,0,3599,3606,5,286,0,0,3600, - 3602,5,356,0,0,3601,3603,3,346,173,0,3602,3601,1,0,0,0,3602,3603, - 1,0,0,0,3603,3604,1,0,0,0,3604,3607,5,358,0,0,3605,3607,5,354,0, - 0,3606,3600,1,0,0,0,3606,3605,1,0,0,0,3607,3634,1,0,0,0,3608,3609, - 5,149,0,0,3609,3612,7,52,0,0,3610,3611,5,309,0,0,3611,3613,5,186, - 0,0,3612,3610,1,0,0,0,3612,3613,1,0,0,0,3613,3634,1,0,0,0,3614,3615, - 5,149,0,0,3615,3618,7,53,0,0,3616,3617,5,309,0,0,3617,3619,7,54, - 0,0,3618,3616,1,0,0,0,3618,3619,1,0,0,0,3619,3634,1,0,0,0,3620,3631, - 3,316,158,0,3621,3622,5,2,0,0,3622,3627,5,382,0,0,3623,3624,5,4, - 0,0,3624,3626,5,382,0,0,3625,3623,1,0,0,0,3626,3629,1,0,0,0,3627, - 3625,1,0,0,0,3627,3628,1,0,0,0,3628,3630,1,0,0,0,3629,3627,1,0,0, - 0,3630,3632,5,3,0,0,3631,3621,1,0,0,0,3631,3632,1,0,0,0,3632,3634, - 1,0,0,0,3633,3587,1,0,0,0,3633,3592,1,0,0,0,3633,3599,1,0,0,0,3633, - 3608,1,0,0,0,3633,3614,1,0,0,0,3633,3620,1,0,0,0,3634,319,1,0,0, - 0,3635,3640,3,322,161,0,3636,3637,5,4,0,0,3637,3639,3,322,161,0, - 3638,3636,1,0,0,0,3639,3642,1,0,0,0,3640,3638,1,0,0,0,3640,3641, - 1,0,0,0,3641,321,1,0,0,0,3642,3640,1,0,0,0,3643,3644,3,96,48,0,3644, - 3648,3,318,159,0,3645,3647,3,328,164,0,3646,3645,1,0,0,0,3647,3650, - 1,0,0,0,3648,3646,1,0,0,0,3648,3649,1,0,0,0,3649,323,1,0,0,0,3650, - 3648,1,0,0,0,3651,3656,3,326,163,0,3652,3653,5,4,0,0,3653,3655,3, - 326,163,0,3654,3652,1,0,0,0,3655,3658,1,0,0,0,3656,3654,1,0,0,0, - 3656,3657,1,0,0,0,3657,325,1,0,0,0,3658,3656,1,0,0,0,3659,3660,3, - 92,46,0,3660,3664,3,318,159,0,3661,3663,3,328,164,0,3662,3661,1, - 0,0,0,3663,3666,1,0,0,0,3664,3662,1,0,0,0,3664,3665,1,0,0,0,3665, - 327,1,0,0,0,3666,3664,1,0,0,0,3667,3668,5,197,0,0,3668,3673,5,198, - 0,0,3669,3673,3,330,165,0,3670,3673,3,24,12,0,3671,3673,3,314,157, - 0,3672,3667,1,0,0,0,3672,3669,1,0,0,0,3672,3670,1,0,0,0,3672,3671, - 1,0,0,0,3673,329,1,0,0,0,3674,3675,5,82,0,0,3675,3676,3,268,134, - 0,3676,331,1,0,0,0,3677,3678,7,55,0,0,3678,3679,3,268,134,0,3679, - 333,1,0,0,0,3680,3685,3,336,168,0,3681,3682,5,4,0,0,3682,3684,3, - 336,168,0,3683,3681,1,0,0,0,3684,3687,1,0,0,0,3685,3683,1,0,0,0, - 3685,3686,1,0,0,0,3686,335,1,0,0,0,3687,3685,1,0,0,0,3688,3689,3, - 372,186,0,3689,3692,3,318,159,0,3690,3691,5,197,0,0,3691,3693,5, - 198,0,0,3692,3690,1,0,0,0,3692,3693,1,0,0,0,3693,3695,1,0,0,0,3694, - 3696,3,24,12,0,3695,3694,1,0,0,0,3695,3696,1,0,0,0,3696,337,1,0, - 0,0,3697,3702,3,340,170,0,3698,3699,5,4,0,0,3699,3701,3,340,170, - 0,3700,3698,1,0,0,0,3701,3704,1,0,0,0,3702,3700,1,0,0,0,3702,3703, - 1,0,0,0,3703,339,1,0,0,0,3704,3702,1,0,0,0,3705,3706,3,96,48,0,3706, - 3710,3,318,159,0,3707,3709,3,342,171,0,3708,3707,1,0,0,0,3709,3712, - 1,0,0,0,3710,3708,1,0,0,0,3710,3711,1,0,0,0,3711,341,1,0,0,0,3712, - 3710,1,0,0,0,3713,3714,5,197,0,0,3714,3719,5,198,0,0,3715,3719,3, - 330,165,0,3716,3719,3,344,172,0,3717,3719,3,24,12,0,3718,3713,1, - 0,0,0,3718,3715,1,0,0,0,3718,3716,1,0,0,0,3718,3717,1,0,0,0,3719, - 343,1,0,0,0,3720,3721,5,127,0,0,3721,3722,5,12,0,0,3722,3723,5,20, - 0,0,3723,3724,5,2,0,0,3724,3725,3,268,134,0,3725,3726,5,3,0,0,3726, - 345,1,0,0,0,3727,3732,3,348,174,0,3728,3729,5,4,0,0,3729,3731,3, - 348,174,0,3730,3728,1,0,0,0,3731,3734,1,0,0,0,3732,3730,1,0,0,0, - 3732,3733,1,0,0,0,3733,347,1,0,0,0,3734,3732,1,0,0,0,3735,3737,3, - 376,188,0,3736,3738,5,371,0,0,3737,3736,1,0,0,0,3737,3738,1,0,0, - 0,3738,3739,1,0,0,0,3739,3742,3,318,159,0,3740,3741,5,197,0,0,3741, - 3743,5,198,0,0,3742,3740,1,0,0,0,3742,3743,1,0,0,0,3743,3745,1,0, - 0,0,3744,3746,3,24,12,0,3745,3744,1,0,0,0,3745,3746,1,0,0,0,3746, - 349,1,0,0,0,3747,3748,5,343,0,0,3748,3749,3,268,134,0,3749,3750, - 5,300,0,0,3750,3751,3,268,134,0,3751,351,1,0,0,0,3752,3753,5,345, - 0,0,3753,3758,3,356,178,0,3754,3755,5,4,0,0,3755,3757,3,356,178, - 0,3756,3754,1,0,0,0,3757,3760,1,0,0,0,3758,3756,1,0,0,0,3758,3759, - 1,0,0,0,3759,353,1,0,0,0,3760,3758,1,0,0,0,3761,3762,5,351,0,0,3762, - 3763,5,31,0,0,3763,3764,3,94,47,0,3764,355,1,0,0,0,3765,3766,3,372, - 186,0,3766,3767,5,20,0,0,3767,3768,3,358,179,0,3768,357,1,0,0,0, - 3769,3816,3,372,186,0,3770,3771,5,2,0,0,3771,3772,3,372,186,0,3772, - 3773,5,3,0,0,3773,3816,1,0,0,0,3774,3809,5,2,0,0,3775,3776,5,44, - 0,0,3776,3777,5,31,0,0,3777,3782,3,268,134,0,3778,3779,5,4,0,0,3779, - 3781,3,268,134,0,3780,3778,1,0,0,0,3781,3784,1,0,0,0,3782,3780,1, - 0,0,0,3782,3783,1,0,0,0,3783,3810,1,0,0,0,3784,3782,1,0,0,0,3785, - 3786,7,24,0,0,3786,3787,5,31,0,0,3787,3792,3,268,134,0,3788,3789, - 5,4,0,0,3789,3791,3,268,134,0,3790,3788,1,0,0,0,3791,3794,1,0,0, - 0,3792,3790,1,0,0,0,3792,3793,1,0,0,0,3793,3796,1,0,0,0,3794,3792, - 1,0,0,0,3795,3785,1,0,0,0,3795,3796,1,0,0,0,3796,3807,1,0,0,0,3797, - 3798,7,25,0,0,3798,3799,5,31,0,0,3799,3804,3,108,54,0,3800,3801, - 5,4,0,0,3801,3803,3,108,54,0,3802,3800,1,0,0,0,3803,3806,1,0,0,0, - 3804,3802,1,0,0,0,3804,3805,1,0,0,0,3805,3808,1,0,0,0,3806,3804, - 1,0,0,0,3807,3797,1,0,0,0,3807,3808,1,0,0,0,3808,3810,1,0,0,0,3809, - 3775,1,0,0,0,3809,3795,1,0,0,0,3810,3812,1,0,0,0,3811,3813,3,360, - 180,0,3812,3811,1,0,0,0,3812,3813,1,0,0,0,3813,3814,1,0,0,0,3814, - 3816,5,3,0,0,3815,3769,1,0,0,0,3815,3770,1,0,0,0,3815,3774,1,0,0, - 0,3816,359,1,0,0,0,3817,3818,5,233,0,0,3818,3834,3,362,181,0,3819, - 3820,5,258,0,0,3820,3834,3,362,181,0,3821,3822,5,233,0,0,3822,3823, - 5,24,0,0,3823,3824,3,362,181,0,3824,3825,5,14,0,0,3825,3826,3,362, - 181,0,3826,3834,1,0,0,0,3827,3828,5,258,0,0,3828,3829,5,24,0,0,3829, - 3830,3,362,181,0,3830,3831,5,14,0,0,3831,3832,3,362,181,0,3832,3834, - 1,0,0,0,3833,3817,1,0,0,0,3833,3819,1,0,0,0,3833,3821,1,0,0,0,3833, - 3827,1,0,0,0,3834,361,1,0,0,0,3835,3836,5,321,0,0,3836,3843,7,56, - 0,0,3837,3838,5,62,0,0,3838,3843,5,257,0,0,3839,3840,3,268,134,0, - 3840,3841,7,56,0,0,3841,3843,1,0,0,0,3842,3835,1,0,0,0,3842,3837, - 1,0,0,0,3842,3839,1,0,0,0,3843,363,1,0,0,0,3844,3849,3,370,185,0, - 3845,3846,5,4,0,0,3846,3848,3,370,185,0,3847,3845,1,0,0,0,3848,3851, - 1,0,0,0,3849,3847,1,0,0,0,3849,3850,1,0,0,0,3850,365,1,0,0,0,3851, - 3849,1,0,0,0,3852,3853,5,136,0,0,3853,3854,5,2,0,0,3854,3855,3,268, - 134,0,3855,3856,5,3,0,0,3856,3862,1,0,0,0,3857,3862,3,370,185,0, - 3858,3862,5,114,0,0,3859,3862,5,161,0,0,3860,3862,5,250,0,0,3861, - 3852,1,0,0,0,3861,3857,1,0,0,0,3861,3858,1,0,0,0,3861,3859,1,0,0, - 0,3861,3860,1,0,0,0,3862,367,1,0,0,0,3863,3864,3,370,185,0,3864, - 369,1,0,0,0,3865,3870,3,376,188,0,3866,3867,5,5,0,0,3867,3869,3, - 376,188,0,3868,3866,1,0,0,0,3869,3872,1,0,0,0,3870,3868,1,0,0,0, - 3870,3871,1,0,0,0,3871,371,1,0,0,0,3872,3870,1,0,0,0,3873,3874,3, - 376,188,0,3874,3875,3,374,187,0,3875,373,1,0,0,0,3876,3877,5,362, - 0,0,3877,3879,3,376,188,0,3878,3876,1,0,0,0,3879,3880,1,0,0,0,3880, - 3878,1,0,0,0,3880,3881,1,0,0,0,3881,3884,1,0,0,0,3882,3884,1,0,0, - 0,3883,3878,1,0,0,0,3883,3882,1,0,0,0,3884,375,1,0,0,0,3885,3888, - 3,378,189,0,3886,3888,3,396,198,0,3887,3885,1,0,0,0,3887,3886,1, - 0,0,0,3888,377,1,0,0,0,3889,3894,5,388,0,0,3890,3894,3,380,190,0, - 3891,3894,3,394,197,0,3892,3894,3,398,199,0,3893,3889,1,0,0,0,3893, - 3890,1,0,0,0,3893,3891,1,0,0,0,3893,3892,1,0,0,0,3894,379,1,0,0, - 0,3895,3896,7,57,0,0,3896,381,1,0,0,0,3897,3898,5,389,0,0,3898,383, - 1,0,0,0,3899,3901,5,362,0,0,3900,3899,1,0,0,0,3900,3901,1,0,0,0, - 3901,3902,1,0,0,0,3902,3940,5,383,0,0,3903,3905,5,362,0,0,3904,3903, - 1,0,0,0,3904,3905,1,0,0,0,3905,3906,1,0,0,0,3906,3940,5,384,0,0, - 3907,3909,5,362,0,0,3908,3907,1,0,0,0,3908,3909,1,0,0,0,3909,3910, - 1,0,0,0,3910,3940,7,58,0,0,3911,3913,5,362,0,0,3912,3911,1,0,0,0, - 3912,3913,1,0,0,0,3913,3914,1,0,0,0,3914,3940,5,382,0,0,3915,3917, - 5,362,0,0,3916,3915,1,0,0,0,3916,3917,1,0,0,0,3917,3918,1,0,0,0, - 3918,3940,5,379,0,0,3919,3921,5,362,0,0,3920,3919,1,0,0,0,3920,3921, - 1,0,0,0,3921,3922,1,0,0,0,3922,3940,5,380,0,0,3923,3925,5,362,0, - 0,3924,3923,1,0,0,0,3924,3925,1,0,0,0,3925,3926,1,0,0,0,3926,3940, - 5,381,0,0,3927,3929,5,362,0,0,3928,3927,1,0,0,0,3928,3929,1,0,0, - 0,3929,3930,1,0,0,0,3930,3940,5,386,0,0,3931,3933,5,362,0,0,3932, - 3931,1,0,0,0,3932,3933,1,0,0,0,3933,3934,1,0,0,0,3934,3940,5,385, - 0,0,3935,3937,5,362,0,0,3936,3935,1,0,0,0,3936,3937,1,0,0,0,3937, - 3938,1,0,0,0,3938,3940,5,387,0,0,3939,3900,1,0,0,0,3939,3904,1,0, - 0,0,3939,3908,1,0,0,0,3939,3912,1,0,0,0,3939,3916,1,0,0,0,3939,3920, - 1,0,0,0,3939,3924,1,0,0,0,3939,3928,1,0,0,0,3939,3932,1,0,0,0,3939, - 3936,1,0,0,0,3940,385,1,0,0,0,3941,3942,5,319,0,0,3942,3953,3,318, - 159,0,3943,3953,3,24,12,0,3944,3953,3,314,157,0,3945,3946,7,59,0, - 0,3946,3947,5,197,0,0,3947,3953,5,198,0,0,3948,3949,5,269,0,0,3949, - 3953,3,330,165,0,3950,3951,5,96,0,0,3951,3953,5,82,0,0,3952,3941, - 1,0,0,0,3952,3943,1,0,0,0,3952,3944,1,0,0,0,3952,3945,1,0,0,0,3952, - 3948,1,0,0,0,3952,3950,1,0,0,0,3953,387,1,0,0,0,3954,3955,7,60,0, - 0,3955,389,1,0,0,0,3956,3959,3,388,194,0,3957,3959,5,198,0,0,3958, - 3956,1,0,0,0,3958,3957,1,0,0,0,3959,391,1,0,0,0,3960,3963,5,382, - 0,0,3961,3963,3,388,194,0,3962,3960,1,0,0,0,3962,3961,1,0,0,0,3963, - 393,1,0,0,0,3964,3965,7,61,0,0,3965,395,1,0,0,0,3966,3967,7,62,0, - 0,3967,397,1,0,0,0,3968,3969,7,63,0,0,3969,399,1,0,0,0,517,403,410, - 414,419,426,431,439,441,460,464,470,473,476,483,486,490,493,498, - 510,512,520,523,527,530,536,547,553,558,591,601,612,623,634,639, - 648,652,658,662,667,673,685,693,699,710,714,719,734,738,745,749, - 755,784,788,793,800,806,809,812,816,820,828,830,839,842,851,856, - 862,869,872,876,887,890,896,900,915,917,925,929,935,938,942,945, - 951,956,960,967,970,973,980,985,994,1002,1008,1011,1014,1020,1024, - 1029,1032,1036,1038,1046,1054,1057,1064,1067,1070,1079,1084,1090, - 1095,1098,1102,1105,1109,1137,1140,1148,1154,1157,1160,1165,1173, - 1178,1184,1190,1193,1200,1207,1215,1232,1259,1262,1268,1277,1286, - 1292,1297,1302,1309,1314,1319,1326,1334,1337,1341,1353,1357,1364, - 1480,1488,1496,1505,1515,1519,1522,1526,1532,1544,1556,1561,1570, - 1578,1583,1585,1593,1598,1602,1605,1613,1618,1627,1632,1635,1640, - 1644,1649,1651,1655,1664,1672,1678,1689,1696,1705,1710,1713,1736, - 1738,1750,1757,1760,1767,1771,1777,1785,1792,1795,1803,1814,1825, - 1833,1839,1851,1858,1865,1877,1885,1891,1897,1900,1916,1923,1934, - 1943,1946,1955,1958,1967,1970,1979,1982,1985,1990,1992,1996,2007, - 2013,2019,2022,2024,2036,2040,2043,2047,2053,2057,2065,2069,2072, - 2075,2078,2082,2086,2091,2095,2098,2101,2104,2108,2113,2117,2120, - 2123,2126,2128,2134,2141,2146,2149,2152,2156,2166,2170,2172,2175, - 2179,2185,2189,2200,2210,2214,2226,2238,2253,2258,2264,2271,2287, - 2292,2305,2310,2318,2324,2328,2331,2336,2343,2349,2358,2368,2383, - 2388,2390,2395,2404,2417,2422,2426,2433,2438,2442,2445,2448,2462, - 2475,2480,2484,2487,2491,2497,2500,2507,2519,2530,2543,2554,2559, - 2567,2572,2586,2595,2598,2603,2610,2613,2619,2625,2628,2633,2638, - 2642,2648,2652,2655,2660,2663,2668,2672,2675,2678,2684,2689,2696, - 2699,2717,2719,2722,2733,2742,2749,2757,2764,2769,2772,2775,2783, - 2791,2797,2805,2813,2820,2827,2829,2842,2848,2850,2860,2866,2868, - 2876,2880,2889,2892,2898,2902,2904,2913,2925,2927,2934,2941,2947, - 2953,2955,2962,2970,2978,2984,2989,2996,3002,3005,3009,3011,3018, - 3027,3034,3044,3049,3053,3063,3070,3083,3085,3093,3095,3099,3107, - 3116,3122,3130,3135,3147,3152,3155,3161,3165,3170,3175,3180,3186, - 3207,3209,3220,3232,3244,3248,3257,3261,3279,3282,3290,3299,3308, - 3331,3347,3354,3357,3366,3370,3374,3386,3411,3418,3421,3436,3457, - 3461,3463,3473,3475,3485,3500,3502,3515,3519,3526,3531,3539,3544, - 3553,3585,3602,3606,3612,3618,3627,3631,3633,3640,3648,3656,3664, - 3672,3685,3692,3695,3702,3710,3718,3732,3737,3742,3745,3758,3782, - 3792,3795,3804,3807,3809,3812,3815,3833,3842,3849,3861,3870,3880, - 3883,3887,3893,3900,3904,3908,3912,3916,3920,3924,3928,3932,3936, - 3939,3952,3958,3962 + 1807,1,0,0,0,1805,1803,1,0,0,0,1806,1796,1,0,0,0,1806,1807,1,0,0, + 0,1807,1818,1,0,0,0,1808,1809,5,44,0,0,1809,1810,5,31,0,0,1810,1815, + 3,220,110,0,1811,1812,5,4,0,0,1812,1814,3,220,110,0,1813,1811,1, + 0,0,0,1814,1817,1,0,0,0,1815,1813,1,0,0,0,1815,1816,1,0,0,0,1816, + 1819,1,0,0,0,1817,1815,1,0,0,0,1818,1808,1,0,0,0,1818,1819,1,0,0, + 0,1819,1830,1,0,0,0,1820,1821,5,93,0,0,1821,1822,5,31,0,0,1822,1827, + 3,220,110,0,1823,1824,5,4,0,0,1824,1826,3,220,110,0,1825,1823,1, + 0,0,0,1826,1829,1,0,0,0,1827,1825,1,0,0,0,1827,1828,1,0,0,0,1828, + 1831,1,0,0,0,1829,1827,1,0,0,0,1830,1820,1,0,0,0,1830,1831,1,0,0, + 0,1831,1842,1,0,0,0,1832,1833,5,278,0,0,1833,1834,5,31,0,0,1834, + 1839,3,88,44,0,1835,1836,5,4,0,0,1836,1838,3,88,44,0,1837,1835,1, + 0,0,0,1838,1841,1,0,0,0,1839,1837,1,0,0,0,1839,1840,1,0,0,0,1840, + 1843,1,0,0,0,1841,1839,1,0,0,0,1842,1832,1,0,0,0,1842,1843,1,0,0, + 0,1843,1845,1,0,0,0,1844,1846,3,298,149,0,1845,1844,1,0,0,0,1845, + 1846,1,0,0,0,1846,1852,1,0,0,0,1847,1850,5,165,0,0,1848,1851,5,10, + 0,0,1849,1851,3,220,110,0,1850,1848,1,0,0,0,1850,1849,1,0,0,0,1851, + 1853,1,0,0,0,1852,1847,1,0,0,0,1852,1853,1,0,0,0,1853,1856,1,0,0, + 0,1854,1855,5,202,0,0,1855,1857,3,220,110,0,1856,1854,1,0,0,0,1856, + 1857,1,0,0,0,1857,83,1,0,0,0,1858,1859,6,42,-1,0,1859,1860,3,86, + 43,0,1860,1881,1,0,0,0,1861,1862,10,3,0,0,1862,1864,7,23,0,0,1863, + 1865,3,154,77,0,1864,1863,1,0,0,0,1864,1865,1,0,0,0,1865,1866,1, + 0,0,0,1866,1880,3,84,42,4,1867,1868,10,2,0,0,1868,1870,5,148,0,0, + 1869,1871,3,154,77,0,1870,1869,1,0,0,0,1870,1871,1,0,0,0,1871,1872, + 1,0,0,0,1872,1880,3,84,42,3,1873,1874,10,1,0,0,1874,1876,7,24,0, + 0,1875,1877,3,154,77,0,1876,1875,1,0,0,0,1876,1877,1,0,0,0,1877, + 1878,1,0,0,0,1878,1880,3,84,42,2,1879,1861,1,0,0,0,1879,1867,1,0, + 0,0,1879,1873,1,0,0,0,1880,1883,1,0,0,0,1881,1879,1,0,0,0,1881,1882, + 1,0,0,0,1882,85,1,0,0,0,1883,1881,1,0,0,0,1884,1909,3,92,46,0,1885, + 1887,3,120,60,0,1886,1888,3,90,45,0,1887,1886,1,0,0,0,1888,1889, + 1,0,0,0,1889,1887,1,0,0,0,1889,1890,1,0,0,0,1890,1909,1,0,0,0,1891, + 1892,5,293,0,0,1892,1909,3,68,34,0,1893,1894,5,333,0,0,1894,1899, + 3,220,110,0,1895,1896,5,4,0,0,1896,1898,3,220,110,0,1897,1895,1, + 0,0,0,1898,1901,1,0,0,0,1899,1897,1,0,0,0,1899,1900,1,0,0,0,1900, + 1902,1,0,0,0,1901,1899,1,0,0,0,1902,1903,3,192,96,0,1903,1909,1, + 0,0,0,1904,1905,5,2,0,0,1905,1906,3,12,6,0,1906,1907,5,3,0,0,1907, + 1909,1,0,0,0,1908,1884,1,0,0,0,1908,1885,1,0,0,0,1908,1891,1,0,0, + 0,1908,1893,1,0,0,0,1908,1904,1,0,0,0,1909,87,1,0,0,0,1910,1913, + 3,74,37,0,1911,1913,3,220,110,0,1912,1910,1,0,0,0,1912,1911,1,0, + 0,0,1913,1915,1,0,0,0,1914,1916,7,25,0,0,1915,1914,1,0,0,0,1915, + 1916,1,0,0,0,1916,1919,1,0,0,0,1917,1918,5,199,0,0,1918,1920,7,26, + 0,0,1919,1917,1,0,0,0,1919,1920,1,0,0,0,1920,89,1,0,0,0,1921,1923, + 3,94,47,0,1922,1924,3,112,56,0,1923,1922,1,0,0,0,1923,1924,1,0,0, + 0,1924,1925,1,0,0,0,1925,1926,3,82,41,0,1926,1949,1,0,0,0,1927,1931, + 3,96,48,0,1928,1930,3,152,76,0,1929,1928,1,0,0,0,1930,1933,1,0,0, + 0,1931,1929,1,0,0,0,1931,1932,1,0,0,0,1932,1935,1,0,0,0,1933,1931, + 1,0,0,0,1934,1936,3,112,56,0,1935,1934,1,0,0,0,1935,1936,1,0,0,0, + 1936,1938,1,0,0,0,1937,1939,3,124,62,0,1938,1937,1,0,0,0,1938,1939, + 1,0,0,0,1939,1941,1,0,0,0,1940,1942,3,114,57,0,1941,1940,1,0,0,0, + 1941,1942,1,0,0,0,1942,1944,1,0,0,0,1943,1945,3,298,149,0,1944,1943, + 1,0,0,0,1944,1945,1,0,0,0,1945,1946,1,0,0,0,1946,1947,3,82,41,0, + 1947,1949,1,0,0,0,1948,1921,1,0,0,0,1948,1927,1,0,0,0,1949,91,1, + 0,0,0,1950,1952,3,94,47,0,1951,1953,3,120,60,0,1952,1951,1,0,0,0, + 1952,1953,1,0,0,0,1953,1957,1,0,0,0,1954,1956,3,152,76,0,1955,1954, + 1,0,0,0,1956,1959,1,0,0,0,1957,1955,1,0,0,0,1957,1958,1,0,0,0,1958, + 1961,1,0,0,0,1959,1957,1,0,0,0,1960,1962,3,112,56,0,1961,1960,1, + 0,0,0,1961,1962,1,0,0,0,1962,1964,1,0,0,0,1963,1965,3,124,62,0,1964, + 1963,1,0,0,0,1964,1965,1,0,0,0,1965,1967,1,0,0,0,1966,1968,3,114, + 57,0,1967,1966,1,0,0,0,1967,1968,1,0,0,0,1968,1970,1,0,0,0,1969, + 1971,3,298,149,0,1970,1969,1,0,0,0,1970,1971,1,0,0,0,1971,1995,1, + 0,0,0,1972,1974,3,96,48,0,1973,1975,3,120,60,0,1974,1973,1,0,0,0, + 1974,1975,1,0,0,0,1975,1979,1,0,0,0,1976,1978,3,152,76,0,1977,1976, + 1,0,0,0,1978,1981,1,0,0,0,1979,1977,1,0,0,0,1979,1980,1,0,0,0,1980, + 1983,1,0,0,0,1981,1979,1,0,0,0,1982,1984,3,112,56,0,1983,1982,1, + 0,0,0,1983,1984,1,0,0,0,1984,1986,1,0,0,0,1985,1987,3,124,62,0,1986, + 1985,1,0,0,0,1986,1987,1,0,0,0,1987,1989,1,0,0,0,1988,1990,3,114, + 57,0,1989,1988,1,0,0,0,1989,1990,1,0,0,0,1990,1992,1,0,0,0,1991, + 1993,3,298,149,0,1992,1991,1,0,0,0,1992,1993,1,0,0,0,1993,1995,1, + 0,0,0,1994,1950,1,0,0,0,1994,1972,1,0,0,0,1995,93,1,0,0,0,1996,1997, + 5,263,0,0,1997,1998,5,314,0,0,1998,2000,5,2,0,0,1999,2001,3,154, + 77,0,2000,1999,1,0,0,0,2000,2001,1,0,0,0,2001,2002,1,0,0,0,2002, + 2003,3,226,113,0,2003,2004,5,3,0,0,2004,2016,1,0,0,0,2005,2007,5, + 177,0,0,2006,2008,3,154,77,0,2007,2006,1,0,0,0,2007,2008,1,0,0,0, + 2008,2009,1,0,0,0,2009,2016,3,226,113,0,2010,2012,5,238,0,0,2011, + 2013,3,154,77,0,2012,2011,1,0,0,0,2012,2013,1,0,0,0,2013,2014,1, + 0,0,0,2014,2016,3,226,113,0,2015,1996,1,0,0,0,2015,2005,1,0,0,0, + 2015,2010,1,0,0,0,2016,2018,1,0,0,0,2017,2019,3,194,97,0,2018,2017, + 1,0,0,0,2018,2019,1,0,0,0,2019,2022,1,0,0,0,2020,2021,5,236,0,0, + 2021,2023,3,328,164,0,2022,2020,1,0,0,0,2022,2023,1,0,0,0,2023,2024, + 1,0,0,0,2024,2025,5,332,0,0,2025,2038,3,328,164,0,2026,2036,5,20, + 0,0,2027,2037,3,170,85,0,2028,2037,3,284,142,0,2029,2032,5,2,0,0, + 2030,2033,3,170,85,0,2031,2033,3,284,142,0,2032,2030,1,0,0,0,2032, + 2031,1,0,0,0,2033,2034,1,0,0,0,2034,2035,5,3,0,0,2035,2037,1,0,0, + 0,2036,2027,1,0,0,0,2036,2028,1,0,0,0,2036,2029,1,0,0,0,2037,2039, + 1,0,0,0,2038,2026,1,0,0,0,2038,2039,1,0,0,0,2039,2041,1,0,0,0,2040, + 2042,3,194,97,0,2041,2040,1,0,0,0,2041,2042,1,0,0,0,2042,2045,1, + 0,0,0,2043,2044,5,235,0,0,2044,2046,3,328,164,0,2045,2043,1,0,0, + 0,2045,2046,1,0,0,0,2046,95,1,0,0,0,2047,2051,5,263,0,0,2048,2050, + 3,116,58,0,2049,2048,1,0,0,0,2050,2053,1,0,0,0,2051,2049,1,0,0,0, + 2051,2052,1,0,0,0,2052,2055,1,0,0,0,2053,2051,1,0,0,0,2054,2056, + 3,154,77,0,2055,2054,1,0,0,0,2055,2056,1,0,0,0,2056,2057,1,0,0,0, + 2057,2058,3,210,105,0,2058,97,1,0,0,0,2059,2060,5,269,0,0,2060,2061, + 3,108,54,0,2061,99,1,0,0,0,2062,2063,5,343,0,0,2063,2066,5,178,0, + 0,2064,2065,5,14,0,0,2065,2067,3,228,114,0,2066,2064,1,0,0,0,2066, + 2067,1,0,0,0,2067,2068,1,0,0,0,2068,2076,5,300,0,0,2069,2077,5,84, + 0,0,2070,2071,5,329,0,0,2071,2074,5,269,0,0,2072,2075,5,363,0,0, + 2073,2075,3,108,54,0,2074,2072,1,0,0,0,2074,2073,1,0,0,0,2075,2077, + 1,0,0,0,2076,2069,1,0,0,0,2076,2070,1,0,0,0,2077,101,1,0,0,0,2078, + 2079,5,343,0,0,2079,2080,5,197,0,0,2080,2083,5,178,0,0,2081,2082, + 5,31,0,0,2082,2084,5,296,0,0,2083,2081,1,0,0,0,2083,2084,1,0,0,0, + 2084,2087,1,0,0,0,2085,2086,5,14,0,0,2086,2088,3,228,114,0,2087, + 2085,1,0,0,0,2087,2088,1,0,0,0,2088,2089,1,0,0,0,2089,2090,5,300, + 0,0,2090,2091,3,106,53,0,2091,103,1,0,0,0,2092,2093,5,343,0,0,2093, + 2094,5,197,0,0,2094,2095,5,178,0,0,2095,2096,5,31,0,0,2096,2099, + 5,280,0,0,2097,2098,5,14,0,0,2098,2100,3,228,114,0,2099,2097,1,0, + 0,0,2099,2100,1,0,0,0,2100,2101,1,0,0,0,2101,2106,5,300,0,0,2102, + 2107,5,84,0,0,2103,2104,5,329,0,0,2104,2105,5,269,0,0,2105,2107, + 3,108,54,0,2106,2102,1,0,0,0,2106,2103,1,0,0,0,2107,105,1,0,0,0, + 2108,2109,5,147,0,0,2109,2127,5,363,0,0,2110,2111,5,147,0,0,2111, + 2112,5,2,0,0,2112,2113,3,196,98,0,2113,2114,5,3,0,0,2114,2115,5, + 333,0,0,2115,2116,5,2,0,0,2116,2121,3,220,110,0,2117,2118,5,4,0, + 0,2118,2120,3,220,110,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,2124,1,0,0,0,2123,2121,1,0,0, + 0,2124,2125,5,3,0,0,2125,2127,1,0,0,0,2126,2108,1,0,0,0,2126,2110, + 1,0,0,0,2127,107,1,0,0,0,2128,2133,3,110,55,0,2129,2130,5,4,0,0, + 2130,2132,3,110,55,0,2131,2129,1,0,0,0,2132,2135,1,0,0,0,2133,2131, + 1,0,0,0,2133,2134,1,0,0,0,2134,109,1,0,0,0,2135,2133,1,0,0,0,2136, + 2137,3,198,99,0,2137,2138,5,352,0,0,2138,2139,3,220,110,0,2139,111, + 1,0,0,0,2140,2141,5,344,0,0,2141,2142,3,228,114,0,2142,113,1,0,0, + 0,2143,2144,5,132,0,0,2144,2145,3,228,114,0,2145,115,1,0,0,0,2146, + 2147,5,374,0,0,2147,2154,3,118,59,0,2148,2150,5,4,0,0,2149,2148, + 1,0,0,0,2149,2150,1,0,0,0,2150,2151,1,0,0,0,2151,2153,3,118,59,0, + 2152,2149,1,0,0,0,2153,2156,1,0,0,0,2154,2152,1,0,0,0,2154,2155, + 1,0,0,0,2155,2157,1,0,0,0,2156,2154,1,0,0,0,2157,2158,5,375,0,0, + 2158,117,1,0,0,0,2159,2173,3,318,159,0,2160,2161,3,318,159,0,2161, + 2162,5,2,0,0,2162,2167,3,236,118,0,2163,2164,5,4,0,0,2164,2166,3, + 236,118,0,2165,2163,1,0,0,0,2166,2169,1,0,0,0,2167,2165,1,0,0,0, + 2167,2168,1,0,0,0,2168,2170,1,0,0,0,2169,2167,1,0,0,0,2170,2171, + 5,3,0,0,2171,2173,1,0,0,0,2172,2159,1,0,0,0,2172,2160,1,0,0,0,2173, + 119,1,0,0,0,2174,2175,5,123,0,0,2175,2180,3,156,78,0,2176,2177,5, + 4,0,0,2177,2179,3,156,78,0,2178,2176,1,0,0,0,2179,2182,1,0,0,0,2180, + 2178,1,0,0,0,2180,2181,1,0,0,0,2181,2186,1,0,0,0,2182,2180,1,0,0, + 0,2183,2185,3,152,76,0,2184,2183,1,0,0,0,2185,2188,1,0,0,0,2186, + 2184,1,0,0,0,2186,2187,1,0,0,0,2187,2190,1,0,0,0,2188,2186,1,0,0, + 0,2189,2191,3,132,66,0,2190,2189,1,0,0,0,2190,2191,1,0,0,0,2191, + 2193,1,0,0,0,2192,2194,3,138,69,0,2193,2192,1,0,0,0,2193,2194,1, + 0,0,0,2194,121,1,0,0,0,2195,2197,5,119,0,0,2196,2195,1,0,0,0,2196, + 2197,1,0,0,0,2197,2198,1,0,0,0,2198,2199,7,27,0,0,2199,2200,5,20, + 0,0,2200,2203,5,201,0,0,2201,2204,5,382,0,0,2202,2204,3,328,164, + 0,2203,2201,1,0,0,0,2203,2202,1,0,0,0,2204,2213,1,0,0,0,2205,2207, + 5,119,0,0,2206,2205,1,0,0,0,2206,2207,1,0,0,0,2207,2208,1,0,0,0, + 2208,2209,7,28,0,0,2209,2210,5,20,0,0,2210,2211,5,201,0,0,2211,2213, + 3,232,116,0,2212,2196,1,0,0,0,2212,2206,1,0,0,0,2213,123,1,0,0,0, + 2214,2215,5,130,0,0,2215,2216,5,31,0,0,2216,2221,3,126,63,0,2217, + 2218,5,4,0,0,2218,2220,3,126,63,0,2219,2217,1,0,0,0,2220,2223,1, + 0,0,0,2221,2219,1,0,0,0,2221,2222,1,0,0,0,2222,2254,1,0,0,0,2223, + 2221,1,0,0,0,2224,2225,5,130,0,0,2225,2226,5,31,0,0,2226,2231,3, + 220,110,0,2227,2228,5,4,0,0,2228,2230,3,220,110,0,2229,2227,1,0, + 0,0,2230,2233,1,0,0,0,2231,2229,1,0,0,0,2231,2232,1,0,0,0,2232,2251, + 1,0,0,0,2233,2231,1,0,0,0,2234,2235,5,346,0,0,2235,2252,5,256,0, + 0,2236,2237,5,346,0,0,2237,2252,5,61,0,0,2238,2239,5,131,0,0,2239, + 2240,5,271,0,0,2240,2241,5,2,0,0,2241,2246,3,130,65,0,2242,2243, + 5,4,0,0,2243,2245,3,130,65,0,2244,2242,1,0,0,0,2245,2248,1,0,0,0, + 2246,2244,1,0,0,0,2246,2247,1,0,0,0,2247,2249,1,0,0,0,2248,2246, + 1,0,0,0,2249,2250,5,3,0,0,2250,2252,1,0,0,0,2251,2234,1,0,0,0,2251, + 2236,1,0,0,0,2251,2238,1,0,0,0,2251,2252,1,0,0,0,2252,2254,1,0,0, + 0,2253,2214,1,0,0,0,2253,2224,1,0,0,0,2254,125,1,0,0,0,2255,2259, + 3,74,37,0,2256,2259,3,128,64,0,2257,2259,3,220,110,0,2258,2255,1, + 0,0,0,2258,2256,1,0,0,0,2258,2257,1,0,0,0,2259,127,1,0,0,0,2260, + 2261,7,29,0,0,2261,2262,5,2,0,0,2262,2267,3,130,65,0,2263,2264,5, + 4,0,0,2264,2266,3,130,65,0,2265,2263,1,0,0,0,2266,2269,1,0,0,0,2267, + 2265,1,0,0,0,2267,2268,1,0,0,0,2268,2270,1,0,0,0,2269,2267,1,0,0, + 0,2270,2271,5,3,0,0,2271,2292,1,0,0,0,2272,2273,5,131,0,0,2273,2274, + 5,271,0,0,2274,2277,5,2,0,0,2275,2278,3,128,64,0,2276,2278,3,130, + 65,0,2277,2275,1,0,0,0,2277,2276,1,0,0,0,2278,2286,1,0,0,0,2279, + 2282,5,4,0,0,2280,2283,3,128,64,0,2281,2283,3,130,65,0,2282,2280, + 1,0,0,0,2282,2281,1,0,0,0,2283,2285,1,0,0,0,2284,2279,1,0,0,0,2285, + 2288,1,0,0,0,2286,2284,1,0,0,0,2286,2287,1,0,0,0,2287,2289,1,0,0, + 0,2288,2286,1,0,0,0,2289,2290,5,3,0,0,2290,2292,1,0,0,0,2291,2260, + 1,0,0,0,2291,2272,1,0,0,0,2292,129,1,0,0,0,2293,2314,3,74,37,0,2294, + 2314,3,220,110,0,2295,2310,5,2,0,0,2296,2299,3,74,37,0,2297,2299, + 3,220,110,0,2298,2296,1,0,0,0,2298,2297,1,0,0,0,2299,2307,1,0,0, + 0,2300,2303,5,4,0,0,2301,2304,3,74,37,0,2302,2304,3,220,110,0,2303, + 2301,1,0,0,0,2303,2302,1,0,0,0,2304,2306,1,0,0,0,2305,2300,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,2298,1,0,0,0,2310,2311,1,0,0,0,2311, + 2312,1,0,0,0,2312,2314,5,3,0,0,2313,2293,1,0,0,0,2313,2294,1,0,0, + 0,2313,2295,1,0,0,0,2314,131,1,0,0,0,2315,2316,5,223,0,0,2316,2317, + 5,2,0,0,2317,2318,3,210,105,0,2318,2319,5,119,0,0,2319,2320,3,134, + 67,0,2320,2321,5,140,0,0,2321,2322,5,2,0,0,2322,2327,3,136,68,0, + 2323,2324,5,4,0,0,2324,2326,3,136,68,0,2325,2323,1,0,0,0,2326,2329, + 1,0,0,0,2327,2325,1,0,0,0,2327,2328,1,0,0,0,2328,2330,1,0,0,0,2329, + 2327,1,0,0,0,2330,2331,5,3,0,0,2331,2332,5,3,0,0,2332,133,1,0,0, + 0,2333,2346,3,318,159,0,2334,2335,5,2,0,0,2335,2340,3,318,159,0, + 2336,2337,5,4,0,0,2337,2339,3,318,159,0,2338,2336,1,0,0,0,2339,2342, + 1,0,0,0,2340,2338,1,0,0,0,2340,2341,1,0,0,0,2341,2343,1,0,0,0,2342, + 2340,1,0,0,0,2343,2344,5,3,0,0,2344,2346,1,0,0,0,2345,2333,1,0,0, + 0,2345,2334,1,0,0,0,2346,135,1,0,0,0,2347,2352,3,220,110,0,2348, + 2350,5,20,0,0,2349,2348,1,0,0,0,2349,2350,1,0,0,0,2350,2351,1,0, + 0,0,2351,2353,3,318,159,0,2352,2349,1,0,0,0,2352,2353,1,0,0,0,2353, + 137,1,0,0,0,2354,2357,5,327,0,0,2355,2356,7,30,0,0,2356,2358,5,199, + 0,0,2357,2355,1,0,0,0,2357,2358,1,0,0,0,2358,2359,1,0,0,0,2359,2362, + 5,2,0,0,2360,2363,3,140,70,0,2361,2363,3,142,71,0,2362,2360,1,0, + 0,0,2362,2361,1,0,0,0,2363,2364,1,0,0,0,2364,2369,5,3,0,0,2365,2367, + 5,20,0,0,2366,2365,1,0,0,0,2366,2367,1,0,0,0,2367,2368,1,0,0,0,2368, + 2370,3,318,159,0,2369,2366,1,0,0,0,2369,2370,1,0,0,0,2370,139,1, + 0,0,0,2371,2372,3,318,159,0,2372,2373,5,119,0,0,2373,2374,3,318, + 159,0,2374,2375,5,140,0,0,2375,2376,5,2,0,0,2376,2381,3,146,73,0, + 2377,2378,5,4,0,0,2378,2380,3,146,73,0,2379,2377,1,0,0,0,2380,2383, + 1,0,0,0,2381,2379,1,0,0,0,2381,2382,1,0,0,0,2382,2384,1,0,0,0,2383, + 2381,1,0,0,0,2384,2385,5,3,0,0,2385,141,1,0,0,0,2386,2387,5,2,0, + 0,2387,2392,3,318,159,0,2388,2389,5,4,0,0,2389,2391,3,318,159,0, + 2390,2388,1,0,0,0,2391,2394,1,0,0,0,2392,2390,1,0,0,0,2392,2393, + 1,0,0,0,2393,2395,1,0,0,0,2394,2392,1,0,0,0,2395,2396,5,3,0,0,2396, + 2397,5,119,0,0,2397,2398,3,318,159,0,2398,2399,5,140,0,0,2399,2400, + 5,2,0,0,2400,2405,3,144,72,0,2401,2402,5,4,0,0,2402,2404,3,144,72, + 0,2403,2401,1,0,0,0,2404,2407,1,0,0,0,2405,2403,1,0,0,0,2405,2406, + 1,0,0,0,2406,2408,1,0,0,0,2407,2405,1,0,0,0,2408,2409,5,3,0,0,2409, + 143,1,0,0,0,2410,2411,5,2,0,0,2411,2416,3,198,99,0,2412,2413,5,4, + 0,0,2413,2415,3,198,99,0,2414,2412,1,0,0,0,2415,2418,1,0,0,0,2416, + 2414,1,0,0,0,2416,2417,1,0,0,0,2417,2419,1,0,0,0,2418,2416,1,0,0, + 0,2419,2424,5,3,0,0,2420,2422,5,20,0,0,2421,2420,1,0,0,0,2421,2422, + 1,0,0,0,2422,2423,1,0,0,0,2423,2425,3,318,159,0,2424,2421,1,0,0, + 0,2424,2425,1,0,0,0,2425,145,1,0,0,0,2426,2431,3,198,99,0,2427,2429, + 5,20,0,0,2428,2427,1,0,0,0,2428,2429,1,0,0,0,2429,2430,1,0,0,0,2430, + 2432,3,318,159,0,2431,2428,1,0,0,0,2431,2432,1,0,0,0,2432,147,1, + 0,0,0,2433,2434,5,137,0,0,2434,2435,5,197,0,0,2435,2436,5,105,0, + 0,2436,149,1,0,0,0,2437,2438,5,137,0,0,2438,2439,5,105,0,0,2439, + 151,1,0,0,0,2440,2441,5,158,0,0,2441,2443,5,338,0,0,2442,2444,5, + 211,0,0,2443,2442,1,0,0,0,2443,2444,1,0,0,0,2444,2445,1,0,0,0,2445, + 2446,3,72,36,0,2446,2455,5,2,0,0,2447,2452,3,220,110,0,2448,2449, + 5,4,0,0,2449,2451,3,220,110,0,2450,2448,1,0,0,0,2451,2454,1,0,0, + 0,2452,2450,1,0,0,0,2452,2453,1,0,0,0,2453,2456,1,0,0,0,2454,2452, + 1,0,0,0,2455,2447,1,0,0,0,2455,2456,1,0,0,0,2456,2457,1,0,0,0,2457, + 2458,5,3,0,0,2458,2470,3,192,96,0,2459,2461,5,20,0,0,2460,2459,1, + 0,0,0,2460,2461,1,0,0,0,2461,2462,1,0,0,0,2462,2467,3,318,159,0, + 2463,2464,5,4,0,0,2464,2466,3,318,159,0,2465,2463,1,0,0,0,2466,2469, + 1,0,0,0,2467,2465,1,0,0,0,2467,2468,1,0,0,0,2468,2471,1,0,0,0,2469, + 2467,1,0,0,0,2470,2460,1,0,0,0,2470,2471,1,0,0,0,2471,153,1,0,0, + 0,2472,2473,7,31,0,0,2473,155,1,0,0,0,2474,2488,3,68,34,0,2475,2477, + 5,158,0,0,2476,2475,1,0,0,0,2476,2477,1,0,0,0,2477,2478,1,0,0,0, + 2478,2484,3,180,90,0,2479,2483,3,158,79,0,2480,2483,3,132,66,0,2481, + 2483,3,138,69,0,2482,2479,1,0,0,0,2482,2480,1,0,0,0,2482,2481,1, + 0,0,0,2483,2486,1,0,0,0,2484,2482,1,0,0,0,2484,2485,1,0,0,0,2485, + 2488,1,0,0,0,2486,2484,1,0,0,0,2487,2474,1,0,0,0,2487,2476,1,0,0, + 0,2488,157,1,0,0,0,2489,2490,3,160,80,0,2490,2492,5,155,0,0,2491, + 2493,5,158,0,0,2492,2491,1,0,0,0,2492,2493,1,0,0,0,2493,2494,1,0, + 0,0,2494,2496,3,180,90,0,2495,2497,3,162,81,0,2496,2495,1,0,0,0, + 2496,2497,1,0,0,0,2497,2507,1,0,0,0,2498,2499,5,194,0,0,2499,2500, + 3,160,80,0,2500,2502,5,155,0,0,2501,2503,5,158,0,0,2502,2501,1,0, + 0,0,2502,2503,1,0,0,0,2503,2504,1,0,0,0,2504,2505,3,180,90,0,2505, + 2507,1,0,0,0,2506,2489,1,0,0,0,2506,2498,1,0,0,0,2507,159,1,0,0, + 0,2508,2510,5,144,0,0,2509,2508,1,0,0,0,2509,2510,1,0,0,0,2510,2525, + 1,0,0,0,2511,2525,5,60,0,0,2512,2514,5,161,0,0,2513,2515,5,211,0, + 0,2514,2513,1,0,0,0,2514,2515,1,0,0,0,2515,2525,1,0,0,0,2516,2518, + 5,161,0,0,2517,2516,1,0,0,0,2517,2518,1,0,0,0,2518,2519,1,0,0,0, + 2519,2525,7,32,0,0,2520,2522,7,33,0,0,2521,2523,5,211,0,0,2522,2521, + 1,0,0,0,2522,2523,1,0,0,0,2523,2525,1,0,0,0,2524,2509,1,0,0,0,2524, + 2511,1,0,0,0,2524,2512,1,0,0,0,2524,2517,1,0,0,0,2524,2520,1,0,0, + 0,2525,161,1,0,0,0,2526,2527,5,203,0,0,2527,2531,3,228,114,0,2528, + 2529,5,332,0,0,2529,2531,3,168,84,0,2530,2526,1,0,0,0,2530,2528, + 1,0,0,0,2531,163,1,0,0,0,2532,2533,5,295,0,0,2533,2535,5,2,0,0,2534, + 2536,3,166,83,0,2535,2534,1,0,0,0,2535,2536,1,0,0,0,2536,2537,1, + 0,0,0,2537,2542,5,3,0,0,2538,2539,5,243,0,0,2539,2540,5,2,0,0,2540, + 2541,5,382,0,0,2541,2543,5,3,0,0,2542,2538,1,0,0,0,2542,2543,1,0, + 0,0,2543,165,1,0,0,0,2544,2546,5,362,0,0,2545,2544,1,0,0,0,2545, + 2546,1,0,0,0,2546,2547,1,0,0,0,2547,2548,7,34,0,0,2548,2569,5,222, + 0,0,2549,2550,3,220,110,0,2550,2551,5,258,0,0,2551,2569,1,0,0,0, + 2552,2553,5,29,0,0,2553,2554,5,382,0,0,2554,2555,5,210,0,0,2555, + 2556,5,201,0,0,2556,2565,5,382,0,0,2557,2563,5,203,0,0,2558,2564, + 3,318,159,0,2559,2560,3,312,156,0,2560,2561,5,2,0,0,2561,2562,5, + 3,0,0,2562,2564,1,0,0,0,2563,2558,1,0,0,0,2563,2559,1,0,0,0,2564, + 2566,1,0,0,0,2565,2557,1,0,0,0,2565,2566,1,0,0,0,2566,2569,1,0,0, + 0,2567,2569,3,220,110,0,2568,2545,1,0,0,0,2568,2549,1,0,0,0,2568, + 2552,1,0,0,0,2568,2567,1,0,0,0,2569,167,1,0,0,0,2570,2571,5,2,0, + 0,2571,2572,3,170,85,0,2572,2573,5,3,0,0,2573,169,1,0,0,0,2574,2579, + 3,314,157,0,2575,2576,5,4,0,0,2576,2578,3,314,157,0,2577,2575,1, + 0,0,0,2578,2581,1,0,0,0,2579,2577,1,0,0,0,2579,2580,1,0,0,0,2580, + 171,1,0,0,0,2581,2579,1,0,0,0,2582,2583,5,2,0,0,2583,2588,3,174, + 87,0,2584,2585,5,4,0,0,2585,2587,3,174,87,0,2586,2584,1,0,0,0,2587, + 2590,1,0,0,0,2588,2586,1,0,0,0,2588,2589,1,0,0,0,2589,2591,1,0,0, + 0,2590,2588,1,0,0,0,2591,2592,5,3,0,0,2592,173,1,0,0,0,2593,2595, + 3,314,157,0,2594,2596,7,25,0,0,2595,2594,1,0,0,0,2595,2596,1,0,0, + 0,2596,175,1,0,0,0,2597,2598,5,2,0,0,2598,2603,3,178,89,0,2599,2600, + 5,4,0,0,2600,2602,3,178,89,0,2601,2599,1,0,0,0,2602,2605,1,0,0,0, + 2603,2601,1,0,0,0,2603,2604,1,0,0,0,2604,2606,1,0,0,0,2605,2603, + 1,0,0,0,2606,2607,5,3,0,0,2607,177,1,0,0,0,2608,2611,3,78,39,0,2609, + 2610,5,51,0,0,2610,2612,3,328,164,0,2611,2609,1,0,0,0,2611,2612, + 1,0,0,0,2612,179,1,0,0,0,2613,2617,3,68,34,0,2614,2617,3,72,36,0, + 2615,2617,3,80,40,0,2616,2613,1,0,0,0,2616,2614,1,0,0,0,2616,2615, + 1,0,0,0,2617,2619,1,0,0,0,2618,2620,3,122,61,0,2619,2618,1,0,0,0, + 2619,2620,1,0,0,0,2620,2622,1,0,0,0,2621,2623,3,164,82,0,2622,2621, + 1,0,0,0,2622,2623,1,0,0,0,2623,2624,1,0,0,0,2624,2625,3,192,96,0, + 2625,2669,1,0,0,0,2626,2627,5,2,0,0,2627,2628,3,12,6,0,2628,2630, + 5,3,0,0,2629,2631,3,164,82,0,2630,2629,1,0,0,0,2630,2631,1,0,0,0, + 2631,2632,1,0,0,0,2632,2633,3,192,96,0,2633,2669,1,0,0,0,2634,2635, + 5,2,0,0,2635,2636,3,156,78,0,2636,2638,5,3,0,0,2637,2639,3,164,82, + 0,2638,2637,1,0,0,0,2638,2639,1,0,0,0,2639,2640,1,0,0,0,2640,2641, + 3,192,96,0,2641,2669,1,0,0,0,2642,2643,5,333,0,0,2643,2648,3,220, + 110,0,2644,2645,5,4,0,0,2645,2647,3,220,110,0,2646,2644,1,0,0,0, + 2647,2650,1,0,0,0,2648,2646,1,0,0,0,2648,2649,1,0,0,0,2649,2651, + 1,0,0,0,2650,2648,1,0,0,0,2651,2652,3,192,96,0,2652,2669,1,0,0,0, + 2653,2654,3,308,154,0,2654,2663,5,2,0,0,2655,2660,3,190,95,0,2656, + 2657,5,4,0,0,2657,2659,3,190,95,0,2658,2656,1,0,0,0,2659,2662,1, + 0,0,0,2660,2658,1,0,0,0,2660,2661,1,0,0,0,2661,2664,1,0,0,0,2662, + 2660,1,0,0,0,2663,2655,1,0,0,0,2663,2664,1,0,0,0,2664,2665,1,0,0, + 0,2665,2666,5,3,0,0,2666,2667,3,192,96,0,2667,2669,1,0,0,0,2668, + 2616,1,0,0,0,2668,2626,1,0,0,0,2668,2634,1,0,0,0,2668,2642,1,0,0, + 0,2668,2653,1,0,0,0,2669,181,1,0,0,0,2670,2671,5,293,0,0,2671,2673, + 3,68,34,0,2672,2674,3,184,92,0,2673,2672,1,0,0,0,2673,2674,1,0,0, + 0,2674,2690,1,0,0,0,2675,2676,5,293,0,0,2676,2677,5,2,0,0,2677,2678, + 3,68,34,0,2678,2680,5,3,0,0,2679,2681,3,184,92,0,2680,2679,1,0,0, + 0,2680,2681,1,0,0,0,2681,2690,1,0,0,0,2682,2683,5,293,0,0,2683,2684, + 5,2,0,0,2684,2685,3,12,6,0,2685,2687,5,3,0,0,2686,2688,3,184,92, + 0,2687,2686,1,0,0,0,2687,2688,1,0,0,0,2688,2690,1,0,0,0,2689,2670, + 1,0,0,0,2689,2675,1,0,0,0,2689,2682,1,0,0,0,2690,183,1,0,0,0,2691, + 2692,5,346,0,0,2692,2693,5,274,0,0,2693,2711,5,217,0,0,2694,2695, + 7,35,0,0,2695,2708,5,31,0,0,2696,2697,5,2,0,0,2697,2702,3,220,110, + 0,2698,2699,5,4,0,0,2699,2701,3,220,110,0,2700,2698,1,0,0,0,2701, + 2704,1,0,0,0,2702,2700,1,0,0,0,2702,2703,1,0,0,0,2703,2705,1,0,0, + 0,2704,2702,1,0,0,0,2705,2706,5,3,0,0,2706,2709,1,0,0,0,2707,2709, + 3,220,110,0,2708,2696,1,0,0,0,2708,2707,1,0,0,0,2709,2711,1,0,0, + 0,2710,2691,1,0,0,0,2710,2694,1,0,0,0,2711,2728,1,0,0,0,2712,2713, + 7,36,0,0,2713,2726,5,31,0,0,2714,2715,5,2,0,0,2715,2720,3,88,44, + 0,2716,2717,5,4,0,0,2717,2719,3,88,44,0,2718,2716,1,0,0,0,2719,2722, + 1,0,0,0,2720,2718,1,0,0,0,2720,2721,1,0,0,0,2721,2723,1,0,0,0,2722, + 2720,1,0,0,0,2723,2724,5,3,0,0,2724,2727,1,0,0,0,2725,2727,3,88, + 44,0,2726,2714,1,0,0,0,2726,2725,1,0,0,0,2727,2729,1,0,0,0,2728, + 2712,1,0,0,0,2728,2729,1,0,0,0,2729,185,1,0,0,0,2730,2731,3,318, + 159,0,2731,2732,5,373,0,0,2732,2733,3,182,91,0,2733,187,1,0,0,0, + 2734,2737,3,182,91,0,2735,2737,3,186,93,0,2736,2734,1,0,0,0,2736, + 2735,1,0,0,0,2737,189,1,0,0,0,2738,2741,3,188,94,0,2739,2741,3,224, + 112,0,2740,2738,1,0,0,0,2740,2739,1,0,0,0,2741,191,1,0,0,0,2742, + 2744,5,20,0,0,2743,2742,1,0,0,0,2743,2744,1,0,0,0,2744,2745,1,0, + 0,0,2745,2747,3,320,160,0,2746,2748,3,168,84,0,2747,2746,1,0,0,0, + 2747,2748,1,0,0,0,2748,2750,1,0,0,0,2749,2743,1,0,0,0,2749,2750, + 1,0,0,0,2750,193,1,0,0,0,2751,2752,5,257,0,0,2752,2753,5,121,0,0, + 2753,2754,5,266,0,0,2754,2758,3,328,164,0,2755,2756,5,346,0,0,2756, + 2757,5,267,0,0,2757,2759,3,38,19,0,2758,2755,1,0,0,0,2758,2759,1, + 0,0,0,2759,2801,1,0,0,0,2760,2761,5,257,0,0,2761,2762,5,121,0,0, + 2762,2772,5,85,0,0,2763,2764,5,113,0,0,2764,2765,5,299,0,0,2765, + 2766,5,31,0,0,2766,2770,3,328,164,0,2767,2768,5,101,0,0,2768,2769, + 5,31,0,0,2769,2771,3,328,164,0,2770,2767,1,0,0,0,2770,2771,1,0,0, + 0,2771,2773,1,0,0,0,2772,2763,1,0,0,0,2772,2773,1,0,0,0,2773,2779, + 1,0,0,0,2774,2775,5,48,0,0,2775,2776,5,154,0,0,2776,2777,5,299,0, + 0,2777,2778,5,31,0,0,2778,2780,3,328,164,0,2779,2774,1,0,0,0,2779, + 2780,1,0,0,0,2780,2786,1,0,0,0,2781,2782,5,177,0,0,2782,2783,5,156, + 0,0,2783,2784,5,299,0,0,2784,2785,5,31,0,0,2785,2787,3,328,164,0, + 2786,2781,1,0,0,0,2786,2787,1,0,0,0,2787,2792,1,0,0,0,2788,2789, + 5,166,0,0,2789,2790,5,299,0,0,2790,2791,5,31,0,0,2791,2793,3,328, + 164,0,2792,2788,1,0,0,0,2792,2793,1,0,0,0,2793,2798,1,0,0,0,2794, + 2795,5,198,0,0,2795,2796,5,83,0,0,2796,2797,5,20,0,0,2797,2799,3, + 328,164,0,2798,2794,1,0,0,0,2798,2799,1,0,0,0,2799,2801,1,0,0,0, + 2800,2751,1,0,0,0,2800,2760,1,0,0,0,2801,195,1,0,0,0,2802,2807,3, + 198,99,0,2803,2804,5,4,0,0,2804,2806,3,198,99,0,2805,2803,1,0,0, + 0,2806,2809,1,0,0,0,2807,2805,1,0,0,0,2807,2808,1,0,0,0,2808,197, + 1,0,0,0,2809,2807,1,0,0,0,2810,2815,3,314,157,0,2811,2812,5,5,0, + 0,2812,2814,3,314,157,0,2813,2811,1,0,0,0,2814,2817,1,0,0,0,2815, + 2813,1,0,0,0,2815,2816,1,0,0,0,2816,199,1,0,0,0,2817,2815,1,0,0, + 0,2818,2823,3,202,101,0,2819,2820,5,4,0,0,2820,2822,3,202,101,0, + 2821,2819,1,0,0,0,2822,2825,1,0,0,0,2823,2821,1,0,0,0,2823,2824, + 1,0,0,0,2824,201,1,0,0,0,2825,2823,1,0,0,0,2826,2829,3,198,99,0, + 2827,2828,5,207,0,0,2828,2830,3,38,19,0,2829,2827,1,0,0,0,2829,2830, + 1,0,0,0,2830,203,1,0,0,0,2831,2832,3,314,157,0,2832,2833,5,5,0,0, + 2833,2835,1,0,0,0,2834,2831,1,0,0,0,2834,2835,1,0,0,0,2835,2836, + 1,0,0,0,2836,2837,3,314,157,0,2837,205,1,0,0,0,2838,2839,3,314,157, + 0,2839,2840,5,5,0,0,2840,2842,1,0,0,0,2841,2838,1,0,0,0,2841,2842, + 1,0,0,0,2842,2843,1,0,0,0,2843,2844,3,314,157,0,2844,207,1,0,0,0, + 2845,2848,3,74,37,0,2846,2848,3,220,110,0,2847,2845,1,0,0,0,2847, + 2846,1,0,0,0,2848,2856,1,0,0,0,2849,2851,5,20,0,0,2850,2849,1,0, + 0,0,2850,2851,1,0,0,0,2851,2854,1,0,0,0,2852,2855,3,314,157,0,2853, + 2855,3,168,84,0,2854,2852,1,0,0,0,2854,2853,1,0,0,0,2855,2857,1, + 0,0,0,2856,2850,1,0,0,0,2856,2857,1,0,0,0,2857,209,1,0,0,0,2858, + 2863,3,208,104,0,2859,2860,5,4,0,0,2860,2862,3,208,104,0,2861,2859, + 1,0,0,0,2862,2865,1,0,0,0,2863,2861,1,0,0,0,2863,2864,1,0,0,0,2864, + 211,1,0,0,0,2865,2863,1,0,0,0,2866,2867,5,2,0,0,2867,2872,3,214, + 107,0,2868,2869,5,4,0,0,2869,2871,3,214,107,0,2870,2868,1,0,0,0, + 2871,2874,1,0,0,0,2872,2870,1,0,0,0,2872,2873,1,0,0,0,2873,2875, + 1,0,0,0,2874,2872,1,0,0,0,2875,2876,5,3,0,0,2876,213,1,0,0,0,2877, + 2880,3,216,108,0,2878,2880,3,286,143,0,2879,2877,1,0,0,0,2879,2878, + 1,0,0,0,2880,215,1,0,0,0,2881,2895,3,312,156,0,2882,2883,3,318,159, + 0,2883,2884,5,2,0,0,2884,2889,3,218,109,0,2885,2886,5,4,0,0,2886, + 2888,3,218,109,0,2887,2885,1,0,0,0,2888,2891,1,0,0,0,2889,2887,1, + 0,0,0,2889,2890,1,0,0,0,2890,2892,1,0,0,0,2891,2889,1,0,0,0,2892, + 2893,5,3,0,0,2893,2895,1,0,0,0,2894,2881,1,0,0,0,2894,2882,1,0,0, + 0,2895,217,1,0,0,0,2896,2899,3,312,156,0,2897,2899,3,240,120,0,2898, + 2896,1,0,0,0,2898,2897,1,0,0,0,2899,219,1,0,0,0,2900,2901,3,228, + 114,0,2901,221,1,0,0,0,2902,2903,3,318,159,0,2903,2904,5,373,0,0, + 2904,2905,3,220,110,0,2905,223,1,0,0,0,2906,2909,3,220,110,0,2907, + 2909,3,222,111,0,2908,2906,1,0,0,0,2908,2907,1,0,0,0,2909,225,1, + 0,0,0,2910,2915,3,220,110,0,2911,2912,5,4,0,0,2912,2914,3,220,110, + 0,2913,2911,1,0,0,0,2914,2917,1,0,0,0,2915,2913,1,0,0,0,2915,2916, + 1,0,0,0,2916,227,1,0,0,0,2917,2915,1,0,0,0,2918,2919,6,114,-1,0, + 2919,2920,7,37,0,0,2920,2931,3,228,114,5,2921,2922,5,105,0,0,2922, + 2923,5,2,0,0,2923,2924,3,12,6,0,2924,2925,5,3,0,0,2925,2931,1,0, + 0,0,2926,2928,3,232,116,0,2927,2929,3,230,115,0,2928,2927,1,0,0, + 0,2928,2929,1,0,0,0,2929,2931,1,0,0,0,2930,2918,1,0,0,0,2930,2921, + 1,0,0,0,2930,2926,1,0,0,0,2931,2940,1,0,0,0,2932,2933,10,2,0,0,2933, + 2934,5,14,0,0,2934,2939,3,228,114,3,2935,2936,10,1,0,0,2936,2937, + 5,208,0,0,2937,2939,3,228,114,2,2938,2932,1,0,0,0,2938,2935,1,0, + 0,0,2939,2942,1,0,0,0,2940,2938,1,0,0,0,2940,2941,1,0,0,0,2941,229, + 1,0,0,0,2942,2940,1,0,0,0,2943,2945,5,197,0,0,2944,2943,1,0,0,0, + 2944,2945,1,0,0,0,2945,2946,1,0,0,0,2946,2947,5,24,0,0,2947,2948, + 3,232,116,0,2948,2949,5,14,0,0,2949,2950,3,232,116,0,2950,3026,1, + 0,0,0,2951,2953,5,197,0,0,2952,2951,1,0,0,0,2952,2953,1,0,0,0,2953, + 2954,1,0,0,0,2954,2955,5,140,0,0,2955,2956,5,2,0,0,2956,2961,3,220, + 110,0,2957,2958,5,4,0,0,2958,2960,3,220,110,0,2959,2957,1,0,0,0, + 2960,2963,1,0,0,0,2961,2959,1,0,0,0,2961,2962,1,0,0,0,2962,2964, + 1,0,0,0,2963,2961,1,0,0,0,2964,2965,5,3,0,0,2965,3026,1,0,0,0,2966, + 2968,5,197,0,0,2967,2966,1,0,0,0,2967,2968,1,0,0,0,2968,2969,1,0, + 0,0,2969,2970,5,140,0,0,2970,2971,5,2,0,0,2971,2972,3,12,6,0,2972, + 2973,5,3,0,0,2973,3026,1,0,0,0,2974,2976,5,197,0,0,2975,2974,1,0, + 0,0,2975,2976,1,0,0,0,2976,2977,1,0,0,0,2977,2978,7,38,0,0,2978, + 3026,3,232,116,0,2979,2981,5,197,0,0,2980,2979,1,0,0,0,2980,2981, + 1,0,0,0,2981,2982,1,0,0,0,2982,2983,7,39,0,0,2983,2997,7,40,0,0, + 2984,2985,5,2,0,0,2985,2998,5,3,0,0,2986,2987,5,2,0,0,2987,2992, + 3,220,110,0,2988,2989,5,4,0,0,2989,2991,3,220,110,0,2990,2988,1, + 0,0,0,2991,2994,1,0,0,0,2992,2990,1,0,0,0,2992,2993,1,0,0,0,2993, + 2995,1,0,0,0,2994,2992,1,0,0,0,2995,2996,5,3,0,0,2996,2998,1,0,0, + 0,2997,2984,1,0,0,0,2997,2986,1,0,0,0,2998,3026,1,0,0,0,2999,3001, + 5,197,0,0,3000,2999,1,0,0,0,3000,3001,1,0,0,0,3001,3002,1,0,0,0, + 3002,3003,7,39,0,0,3003,3006,3,232,116,0,3004,3005,5,100,0,0,3005, + 3007,3,328,164,0,3006,3004,1,0,0,0,3006,3007,1,0,0,0,3007,3026,1, + 0,0,0,3008,3010,5,153,0,0,3009,3011,5,197,0,0,3010,3009,1,0,0,0, + 3010,3011,1,0,0,0,3011,3012,1,0,0,0,3012,3026,5,198,0,0,3013,3015, + 5,153,0,0,3014,3016,5,197,0,0,3015,3014,1,0,0,0,3015,3016,1,0,0, + 0,3016,3017,1,0,0,0,3017,3026,7,41,0,0,3018,3020,5,153,0,0,3019, + 3021,5,197,0,0,3020,3019,1,0,0,0,3020,3021,1,0,0,0,3021,3022,1,0, + 0,0,3022,3023,5,92,0,0,3023,3024,5,123,0,0,3024,3026,3,232,116,0, + 3025,2944,1,0,0,0,3025,2952,1,0,0,0,3025,2967,1,0,0,0,3025,2975, + 1,0,0,0,3025,2980,1,0,0,0,3025,3000,1,0,0,0,3025,3008,1,0,0,0,3025, + 3013,1,0,0,0,3025,3018,1,0,0,0,3026,231,1,0,0,0,3027,3028,6,116, + -1,0,3028,3032,3,236,118,0,3029,3030,7,42,0,0,3030,3032,3,232,116, + 7,3031,3027,1,0,0,0,3031,3029,1,0,0,0,3032,3054,1,0,0,0,3033,3034, + 10,6,0,0,3034,3035,7,43,0,0,3035,3053,3,232,116,7,3036,3037,10,5, + 0,0,3037,3038,7,44,0,0,3038,3053,3,232,116,6,3039,3040,10,4,0,0, + 3040,3041,5,367,0,0,3041,3053,3,232,116,5,3042,3043,10,3,0,0,3043, + 3044,5,370,0,0,3044,3053,3,232,116,4,3045,3046,10,2,0,0,3046,3047, + 5,368,0,0,3047,3053,3,232,116,3,3048,3049,10,1,0,0,3049,3050,3,242, + 121,0,3050,3051,3,232,116,2,3051,3053,1,0,0,0,3052,3033,1,0,0,0, + 3052,3036,1,0,0,0,3052,3039,1,0,0,0,3052,3042,1,0,0,0,3052,3045, + 1,0,0,0,3052,3048,1,0,0,0,3053,3056,1,0,0,0,3054,3052,1,0,0,0,3054, + 3055,1,0,0,0,3055,233,1,0,0,0,3056,3054,1,0,0,0,3057,3058,7,45,0, + 0,3058,235,1,0,0,0,3059,3060,6,118,-1,0,3060,3309,7,46,0,0,3061, + 3062,7,47,0,0,3062,3065,5,2,0,0,3063,3066,3,234,117,0,3064,3066, + 3,328,164,0,3065,3063,1,0,0,0,3065,3064,1,0,0,0,3066,3067,1,0,0, + 0,3067,3068,5,4,0,0,3068,3069,3,232,116,0,3069,3070,5,4,0,0,3070, + 3071,3,232,116,0,3071,3072,5,3,0,0,3072,3309,1,0,0,0,3073,3074,7, + 48,0,0,3074,3077,5,2,0,0,3075,3078,3,234,117,0,3076,3078,3,328,164, + 0,3077,3075,1,0,0,0,3077,3076,1,0,0,0,3078,3079,1,0,0,0,3079,3080, + 5,4,0,0,3080,3081,3,232,116,0,3081,3082,5,4,0,0,3082,3083,3,232, + 116,0,3083,3084,5,3,0,0,3084,3309,1,0,0,0,3085,3087,5,35,0,0,3086, + 3088,3,296,148,0,3087,3086,1,0,0,0,3088,3089,1,0,0,0,3089,3087,1, + 0,0,0,3089,3090,1,0,0,0,3090,3093,1,0,0,0,3091,3092,5,97,0,0,3092, + 3094,3,220,110,0,3093,3091,1,0,0,0,3093,3094,1,0,0,0,3094,3095,1, + 0,0,0,3095,3096,5,99,0,0,3096,3309,1,0,0,0,3097,3098,5,35,0,0,3098, + 3100,3,220,110,0,3099,3101,3,296,148,0,3100,3099,1,0,0,0,3101,3102, + 1,0,0,0,3102,3100,1,0,0,0,3102,3103,1,0,0,0,3103,3106,1,0,0,0,3104, + 3105,5,97,0,0,3105,3107,3,220,110,0,3106,3104,1,0,0,0,3106,3107, + 1,0,0,0,3107,3108,1,0,0,0,3108,3109,5,99,0,0,3109,3309,1,0,0,0,3110, + 3111,7,49,0,0,3111,3112,5,2,0,0,3112,3113,3,220,110,0,3113,3114, + 5,20,0,0,3114,3115,3,270,135,0,3115,3116,5,3,0,0,3116,3309,1,0,0, + 0,3117,3118,5,286,0,0,3118,3127,5,2,0,0,3119,3124,3,208,104,0,3120, + 3121,5,4,0,0,3121,3123,3,208,104,0,3122,3120,1,0,0,0,3123,3126,1, + 0,0,0,3124,3122,1,0,0,0,3124,3125,1,0,0,0,3125,3128,1,0,0,0,3126, + 3124,1,0,0,0,3127,3119,1,0,0,0,3127,3128,1,0,0,0,3128,3129,1,0,0, + 0,3129,3309,5,3,0,0,3130,3131,5,116,0,0,3131,3132,5,2,0,0,3132,3135, + 3,220,110,0,3133,3134,5,138,0,0,3134,3136,5,199,0,0,3135,3133,1, + 0,0,0,3135,3136,1,0,0,0,3136,3137,1,0,0,0,3137,3138,5,3,0,0,3138, + 3309,1,0,0,0,3139,3140,5,17,0,0,3140,3141,5,2,0,0,3141,3144,3,220, + 110,0,3142,3143,5,138,0,0,3143,3145,5,199,0,0,3144,3142,1,0,0,0, + 3144,3145,1,0,0,0,3145,3146,1,0,0,0,3146,3147,5,3,0,0,3147,3309, + 1,0,0,0,3148,3149,5,157,0,0,3149,3150,5,2,0,0,3150,3153,3,220,110, + 0,3151,3152,5,138,0,0,3152,3154,5,199,0,0,3153,3151,1,0,0,0,3153, + 3154,1,0,0,0,3154,3155,1,0,0,0,3155,3156,5,3,0,0,3156,3309,1,0,0, + 0,3157,3158,5,225,0,0,3158,3159,5,2,0,0,3159,3160,3,232,116,0,3160, + 3161,5,140,0,0,3161,3162,3,232,116,0,3162,3163,5,3,0,0,3163,3309, + 1,0,0,0,3164,3309,3,240,120,0,3165,3309,5,363,0,0,3166,3167,3,312, + 156,0,3167,3168,5,5,0,0,3168,3169,5,363,0,0,3169,3309,1,0,0,0,3170, + 3171,5,2,0,0,3171,3174,3,208,104,0,3172,3173,5,4,0,0,3173,3175,3, + 208,104,0,3174,3172,1,0,0,0,3175,3176,1,0,0,0,3176,3174,1,0,0,0, + 3176,3177,1,0,0,0,3177,3178,1,0,0,0,3178,3179,5,3,0,0,3179,3309, + 1,0,0,0,3180,3181,5,2,0,0,3181,3182,3,12,6,0,3182,3183,5,3,0,0,3183, + 3309,1,0,0,0,3184,3185,5,136,0,0,3185,3186,5,2,0,0,3186,3187,3,220, + 110,0,3187,3188,5,3,0,0,3188,3309,1,0,0,0,3189,3190,3,308,154,0, + 3190,3202,5,2,0,0,3191,3193,3,154,77,0,3192,3191,1,0,0,0,3192,3193, + 1,0,0,0,3193,3194,1,0,0,0,3194,3199,3,224,112,0,3195,3196,5,4,0, + 0,3196,3198,3,224,112,0,3197,3195,1,0,0,0,3198,3201,1,0,0,0,3199, + 3197,1,0,0,0,3199,3200,1,0,0,0,3200,3203,1,0,0,0,3201,3199,1,0,0, + 0,3202,3192,1,0,0,0,3202,3203,1,0,0,0,3203,3204,1,0,0,0,3204,3211, + 5,3,0,0,3205,3206,5,114,0,0,3206,3207,5,2,0,0,3207,3208,5,344,0, + 0,3208,3209,3,228,114,0,3209,3210,5,3,0,0,3210,3212,1,0,0,0,3211, + 3205,1,0,0,0,3211,3212,1,0,0,0,3212,3215,1,0,0,0,3213,3214,7,50, + 0,0,3214,3216,5,199,0,0,3215,3213,1,0,0,0,3215,3216,1,0,0,0,3216, + 3219,1,0,0,0,3217,3218,5,213,0,0,3218,3220,3,300,150,0,3219,3217, + 1,0,0,0,3219,3220,1,0,0,0,3220,3309,1,0,0,0,3221,3222,3,318,159, + 0,3222,3223,5,372,0,0,3223,3224,3,220,110,0,3224,3309,1,0,0,0,3225, + 3226,5,2,0,0,3226,3229,3,318,159,0,3227,3228,5,4,0,0,3228,3230,3, + 318,159,0,3229,3227,1,0,0,0,3230,3231,1,0,0,0,3231,3229,1,0,0,0, + 3231,3232,1,0,0,0,3232,3233,1,0,0,0,3233,3234,5,3,0,0,3234,3235, + 5,372,0,0,3235,3236,3,220,110,0,3236,3309,1,0,0,0,3237,3309,3,318, + 159,0,3238,3239,5,2,0,0,3239,3240,3,220,110,0,3240,3241,5,3,0,0, + 3241,3309,1,0,0,0,3242,3243,5,110,0,0,3243,3244,5,2,0,0,3244,3245, + 3,318,159,0,3245,3246,5,123,0,0,3246,3247,3,232,116,0,3247,3248, + 5,3,0,0,3248,3309,1,0,0,0,3249,3250,7,51,0,0,3250,3251,5,2,0,0,3251, + 3252,3,232,116,0,3252,3253,7,52,0,0,3253,3256,3,232,116,0,3254,3255, + 7,53,0,0,3255,3257,3,232,116,0,3256,3254,1,0,0,0,3256,3257,1,0,0, + 0,3257,3258,1,0,0,0,3258,3259,5,3,0,0,3259,3309,1,0,0,0,3260,3261, + 5,315,0,0,3261,3263,5,2,0,0,3262,3264,7,54,0,0,3263,3262,1,0,0,0, + 3263,3264,1,0,0,0,3264,3266,1,0,0,0,3265,3267,3,232,116,0,3266,3265, + 1,0,0,0,3266,3267,1,0,0,0,3267,3268,1,0,0,0,3268,3269,5,123,0,0, + 3269,3270,3,232,116,0,3270,3271,5,3,0,0,3271,3309,1,0,0,0,3272,3273, + 5,215,0,0,3273,3274,5,2,0,0,3274,3275,3,232,116,0,3275,3276,5,224, + 0,0,3276,3277,3,232,116,0,3277,3278,5,123,0,0,3278,3281,3,232,116, + 0,3279,3280,5,119,0,0,3280,3282,3,232,116,0,3281,3279,1,0,0,0,3281, + 3282,1,0,0,0,3282,3283,1,0,0,0,3283,3284,5,3,0,0,3284,3309,1,0,0, + 0,3285,3286,7,55,0,0,3286,3287,5,2,0,0,3287,3288,3,232,116,0,3288, + 3289,5,3,0,0,3289,3290,5,347,0,0,3290,3291,5,130,0,0,3291,3292,5, + 2,0,0,3292,3293,5,209,0,0,3293,3294,5,31,0,0,3294,3295,3,88,44,0, + 3295,3302,5,3,0,0,3296,3297,5,114,0,0,3297,3298,5,2,0,0,3298,3299, + 5,344,0,0,3299,3300,3,228,114,0,3300,3301,5,3,0,0,3301,3303,1,0, + 0,0,3302,3296,1,0,0,0,3302,3303,1,0,0,0,3303,3306,1,0,0,0,3304,3305, + 5,213,0,0,3305,3307,3,300,150,0,3306,3304,1,0,0,0,3306,3307,1,0, + 0,0,3307,3309,1,0,0,0,3308,3059,1,0,0,0,3308,3061,1,0,0,0,3308,3073, + 1,0,0,0,3308,3085,1,0,0,0,3308,3097,1,0,0,0,3308,3110,1,0,0,0,3308, + 3117,1,0,0,0,3308,3130,1,0,0,0,3308,3139,1,0,0,0,3308,3148,1,0,0, + 0,3308,3157,1,0,0,0,3308,3164,1,0,0,0,3308,3165,1,0,0,0,3308,3166, + 1,0,0,0,3308,3170,1,0,0,0,3308,3180,1,0,0,0,3308,3184,1,0,0,0,3308, + 3189,1,0,0,0,3308,3221,1,0,0,0,3308,3225,1,0,0,0,3308,3237,1,0,0, + 0,3308,3238,1,0,0,0,3308,3242,1,0,0,0,3308,3249,1,0,0,0,3308,3260, + 1,0,0,0,3308,3272,1,0,0,0,3308,3285,1,0,0,0,3309,3320,1,0,0,0,3310, + 3311,10,9,0,0,3311,3312,5,6,0,0,3312,3313,3,232,116,0,3313,3314, + 5,7,0,0,3314,3319,1,0,0,0,3315,3316,10,7,0,0,3316,3317,5,5,0,0,3317, + 3319,3,318,159,0,3318,3310,1,0,0,0,3318,3315,1,0,0,0,3319,3322,1, + 0,0,0,3320,3318,1,0,0,0,3320,3321,1,0,0,0,3321,237,1,0,0,0,3322, + 3320,1,0,0,0,3323,3331,5,71,0,0,3324,3331,5,303,0,0,3325,3331,5, + 304,0,0,3326,3331,5,305,0,0,3327,3331,5,149,0,0,3328,3331,5,133, + 0,0,3329,3331,3,318,159,0,3330,3323,1,0,0,0,3330,3324,1,0,0,0,3330, + 3325,1,0,0,0,3330,3326,1,0,0,0,3330,3327,1,0,0,0,3330,3328,1,0,0, + 0,3330,3329,1,0,0,0,3331,239,1,0,0,0,3332,3348,5,198,0,0,3333,3348, + 5,376,0,0,3334,3335,5,371,0,0,3335,3348,3,318,159,0,3336,3348,3, + 250,125,0,3337,3338,3,238,119,0,3338,3339,3,328,164,0,3339,3348, + 1,0,0,0,3340,3348,3,324,162,0,3341,3348,3,248,124,0,3342,3344,3, + 328,164,0,3343,3342,1,0,0,0,3344,3345,1,0,0,0,3345,3343,1,0,0,0, + 3345,3346,1,0,0,0,3346,3348,1,0,0,0,3347,3332,1,0,0,0,3347,3333, + 1,0,0,0,3347,3334,1,0,0,0,3347,3336,1,0,0,0,3347,3337,1,0,0,0,3347, + 3340,1,0,0,0,3347,3341,1,0,0,0,3347,3343,1,0,0,0,3348,241,1,0,0, + 0,3349,3350,7,56,0,0,3350,243,1,0,0,0,3351,3352,7,57,0,0,3352,245, + 1,0,0,0,3353,3354,7,58,0,0,3354,247,1,0,0,0,3355,3356,7,59,0,0,3356, + 249,1,0,0,0,3357,3360,5,149,0,0,3358,3361,3,252,126,0,3359,3361, + 3,256,128,0,3360,3358,1,0,0,0,3360,3359,1,0,0,0,3361,251,1,0,0,0, + 3362,3364,3,254,127,0,3363,3365,3,258,129,0,3364,3363,1,0,0,0,3364, + 3365,1,0,0,0,3365,253,1,0,0,0,3366,3367,3,260,130,0,3367,3368,3, + 262,131,0,3368,3370,1,0,0,0,3369,3366,1,0,0,0,3370,3371,1,0,0,0, + 3371,3369,1,0,0,0,3371,3372,1,0,0,0,3372,255,1,0,0,0,3373,3376,3, + 258,129,0,3374,3377,3,254,127,0,3375,3377,3,258,129,0,3376,3374, + 1,0,0,0,3376,3375,1,0,0,0,3376,3377,1,0,0,0,3377,257,1,0,0,0,3378, + 3379,3,260,130,0,3379,3380,3,264,132,0,3380,3381,5,309,0,0,3381, + 3382,3,264,132,0,3382,259,1,0,0,0,3383,3385,7,60,0,0,3384,3383,1, + 0,0,0,3384,3385,1,0,0,0,3385,3389,1,0,0,0,3386,3390,5,382,0,0,3387, + 3390,5,384,0,0,3388,3390,3,328,164,0,3389,3386,1,0,0,0,3389,3387, + 1,0,0,0,3389,3388,1,0,0,0,3390,261,1,0,0,0,3391,3392,7,61,0,0,3392, + 263,1,0,0,0,3393,3394,7,62,0,0,3394,265,1,0,0,0,3395,3399,5,116, + 0,0,3396,3397,5,9,0,0,3397,3399,3,314,157,0,3398,3395,1,0,0,0,3398, + 3396,1,0,0,0,3399,267,1,0,0,0,3400,3431,5,27,0,0,3401,3431,5,308, + 0,0,3402,3431,5,32,0,0,3403,3431,5,276,0,0,3404,3431,5,272,0,0,3405, + 3431,5,150,0,0,3406,3431,5,151,0,0,3407,3431,5,25,0,0,3408,3431, + 5,174,0,0,3409,3431,5,117,0,0,3410,3431,5,234,0,0,3411,3431,5,95, + 0,0,3412,3431,5,71,0,0,3413,3431,5,303,0,0,3414,3431,5,305,0,0,3415, + 3431,5,304,0,0,3416,3431,5,285,0,0,3417,3431,5,41,0,0,3418,3431, + 5,40,0,0,3419,3431,5,334,0,0,3420,3431,5,26,0,0,3421,3431,5,80,0, + 0,3422,3431,5,79,0,0,3423,3431,5,200,0,0,3424,3431,5,340,0,0,3425, + 3431,5,149,0,0,3426,3431,5,19,0,0,3427,3431,5,286,0,0,3428,3431, + 5,177,0,0,3429,3431,3,318,159,0,3430,3400,1,0,0,0,3430,3401,1,0, + 0,0,3430,3402,1,0,0,0,3430,3403,1,0,0,0,3430,3404,1,0,0,0,3430,3405, + 1,0,0,0,3430,3406,1,0,0,0,3430,3407,1,0,0,0,3430,3408,1,0,0,0,3430, + 3409,1,0,0,0,3430,3410,1,0,0,0,3430,3411,1,0,0,0,3430,3412,1,0,0, + 0,3430,3413,1,0,0,0,3430,3414,1,0,0,0,3430,3415,1,0,0,0,3430,3416, + 1,0,0,0,3430,3417,1,0,0,0,3430,3418,1,0,0,0,3430,3419,1,0,0,0,3430, + 3420,1,0,0,0,3430,3421,1,0,0,0,3430,3422,1,0,0,0,3430,3423,1,0,0, + 0,3430,3424,1,0,0,0,3430,3425,1,0,0,0,3430,3426,1,0,0,0,3430,3427, + 1,0,0,0,3430,3428,1,0,0,0,3430,3429,1,0,0,0,3431,269,1,0,0,0,3432, + 3433,5,19,0,0,3433,3434,5,356,0,0,3434,3435,3,270,135,0,3435,3436, + 5,358,0,0,3436,3486,1,0,0,0,3437,3438,5,177,0,0,3438,3439,5,356, + 0,0,3439,3440,3,270,135,0,3440,3441,5,4,0,0,3441,3442,3,270,135, + 0,3442,3443,5,358,0,0,3443,3486,1,0,0,0,3444,3458,5,286,0,0,3445, + 3454,5,356,0,0,3446,3451,3,294,147,0,3447,3448,5,4,0,0,3448,3450, + 3,294,147,0,3449,3447,1,0,0,0,3450,3453,1,0,0,0,3451,3449,1,0,0, + 0,3451,3452,1,0,0,0,3452,3455,1,0,0,0,3453,3451,1,0,0,0,3454,3446, + 1,0,0,0,3454,3455,1,0,0,0,3455,3456,1,0,0,0,3456,3459,5,358,0,0, + 3457,3459,5,354,0,0,3458,3445,1,0,0,0,3458,3457,1,0,0,0,3459,3486, + 1,0,0,0,3460,3461,5,149,0,0,3461,3464,7,63,0,0,3462,3463,5,309,0, + 0,3463,3465,5,186,0,0,3464,3462,1,0,0,0,3464,3465,1,0,0,0,3465,3486, + 1,0,0,0,3466,3467,5,149,0,0,3467,3470,7,64,0,0,3468,3469,5,309,0, + 0,3469,3471,7,65,0,0,3470,3468,1,0,0,0,3470,3471,1,0,0,0,3471,3486, + 1,0,0,0,3472,3483,3,268,134,0,3473,3474,5,2,0,0,3474,3479,5,382, + 0,0,3475,3476,5,4,0,0,3476,3478,5,382,0,0,3477,3475,1,0,0,0,3478, + 3481,1,0,0,0,3479,3477,1,0,0,0,3479,3480,1,0,0,0,3480,3482,1,0,0, + 0,3481,3479,1,0,0,0,3482,3484,5,3,0,0,3483,3473,1,0,0,0,3483,3484, + 1,0,0,0,3484,3486,1,0,0,0,3485,3432,1,0,0,0,3485,3437,1,0,0,0,3485, + 3444,1,0,0,0,3485,3460,1,0,0,0,3485,3466,1,0,0,0,3485,3472,1,0,0, + 0,3486,271,1,0,0,0,3487,3492,3,274,137,0,3488,3489,5,4,0,0,3489, + 3491,3,274,137,0,3490,3488,1,0,0,0,3491,3494,1,0,0,0,3492,3490,1, + 0,0,0,3492,3493,1,0,0,0,3493,273,1,0,0,0,3494,3492,1,0,0,0,3495, + 3496,3,78,39,0,3496,3500,3,270,135,0,3497,3499,3,280,140,0,3498, + 3497,1,0,0,0,3499,3502,1,0,0,0,3500,3498,1,0,0,0,3500,3501,1,0,0, + 0,3501,275,1,0,0,0,3502,3500,1,0,0,0,3503,3508,3,278,139,0,3504, + 3505,5,4,0,0,3505,3507,3,278,139,0,3506,3504,1,0,0,0,3507,3510,1, + 0,0,0,3508,3506,1,0,0,0,3508,3509,1,0,0,0,3509,277,1,0,0,0,3510, + 3508,1,0,0,0,3511,3512,3,74,37,0,3512,3516,3,270,135,0,3513,3515, + 3,280,140,0,3514,3513,1,0,0,0,3515,3518,1,0,0,0,3516,3514,1,0,0, + 0,3516,3517,1,0,0,0,3517,279,1,0,0,0,3518,3516,1,0,0,0,3519,3520, + 5,197,0,0,3520,3527,5,198,0,0,3521,3522,5,82,0,0,3522,3527,3,220, + 110,0,3523,3524,5,51,0,0,3524,3527,3,328,164,0,3525,3527,3,266,133, + 0,3526,3519,1,0,0,0,3526,3521,1,0,0,0,3526,3523,1,0,0,0,3526,3525, + 1,0,0,0,3527,281,1,0,0,0,3528,3529,7,66,0,0,3529,3530,3,220,110, + 0,3530,283,1,0,0,0,3531,3536,3,286,143,0,3532,3533,5,4,0,0,3533, + 3535,3,286,143,0,3534,3532,1,0,0,0,3535,3538,1,0,0,0,3536,3534,1, + 0,0,0,3536,3537,1,0,0,0,3537,285,1,0,0,0,3538,3536,1,0,0,0,3539, + 3540,3,314,157,0,3540,3543,3,270,135,0,3541,3542,5,197,0,0,3542, + 3544,5,198,0,0,3543,3541,1,0,0,0,3543,3544,1,0,0,0,3544,3547,1,0, + 0,0,3545,3546,5,51,0,0,3546,3548,3,328,164,0,3547,3545,1,0,0,0,3547, + 3548,1,0,0,0,3548,287,1,0,0,0,3549,3554,3,290,145,0,3550,3551,5, + 4,0,0,3551,3553,3,290,145,0,3552,3550,1,0,0,0,3553,3556,1,0,0,0, + 3554,3552,1,0,0,0,3554,3555,1,0,0,0,3555,289,1,0,0,0,3556,3554,1, + 0,0,0,3557,3558,3,78,39,0,3558,3562,3,270,135,0,3559,3561,3,292, + 146,0,3560,3559,1,0,0,0,3561,3564,1,0,0,0,3562,3560,1,0,0,0,3562, + 3563,1,0,0,0,3563,291,1,0,0,0,3564,3562,1,0,0,0,3565,3566,5,197, + 0,0,3566,3579,5,198,0,0,3567,3568,5,82,0,0,3568,3579,3,220,110,0, + 3569,3570,5,127,0,0,3570,3571,5,12,0,0,3571,3572,5,20,0,0,3572,3573, + 5,2,0,0,3573,3574,3,220,110,0,3574,3575,5,3,0,0,3575,3579,1,0,0, + 0,3576,3577,5,51,0,0,3577,3579,3,328,164,0,3578,3565,1,0,0,0,3578, + 3567,1,0,0,0,3578,3569,1,0,0,0,3578,3576,1,0,0,0,3579,293,1,0,0, + 0,3580,3582,3,318,159,0,3581,3583,5,371,0,0,3582,3581,1,0,0,0,3582, + 3583,1,0,0,0,3583,3584,1,0,0,0,3584,3587,3,270,135,0,3585,3586,5, + 197,0,0,3586,3588,5,198,0,0,3587,3585,1,0,0,0,3587,3588,1,0,0,0, + 3588,3591,1,0,0,0,3589,3590,5,51,0,0,3590,3592,3,328,164,0,3591, + 3589,1,0,0,0,3591,3592,1,0,0,0,3592,295,1,0,0,0,3593,3594,5,343, + 0,0,3594,3595,3,220,110,0,3595,3596,5,300,0,0,3596,3597,3,220,110, + 0,3597,297,1,0,0,0,3598,3599,5,345,0,0,3599,3600,3,314,157,0,3600, + 3601,5,20,0,0,3601,3609,3,300,150,0,3602,3603,5,4,0,0,3603,3604, + 3,314,157,0,3604,3605,5,20,0,0,3605,3606,3,300,150,0,3606,3608,1, + 0,0,0,3607,3602,1,0,0,0,3608,3611,1,0,0,0,3609,3607,1,0,0,0,3609, + 3610,1,0,0,0,3610,299,1,0,0,0,3611,3609,1,0,0,0,3612,3659,3,314, + 157,0,3613,3614,5,2,0,0,3614,3615,3,314,157,0,3615,3616,5,3,0,0, + 3616,3659,1,0,0,0,3617,3652,5,2,0,0,3618,3619,5,44,0,0,3619,3620, + 5,31,0,0,3620,3625,3,220,110,0,3621,3622,5,4,0,0,3622,3624,3,220, + 110,0,3623,3621,1,0,0,0,3624,3627,1,0,0,0,3625,3623,1,0,0,0,3625, + 3626,1,0,0,0,3626,3653,1,0,0,0,3627,3625,1,0,0,0,3628,3629,7,35, + 0,0,3629,3630,5,31,0,0,3630,3635,3,220,110,0,3631,3632,5,4,0,0,3632, + 3634,3,220,110,0,3633,3631,1,0,0,0,3634,3637,1,0,0,0,3635,3633,1, + 0,0,0,3635,3636,1,0,0,0,3636,3639,1,0,0,0,3637,3635,1,0,0,0,3638, + 3628,1,0,0,0,3638,3639,1,0,0,0,3639,3650,1,0,0,0,3640,3641,7,36, + 0,0,3641,3642,5,31,0,0,3642,3647,3,88,44,0,3643,3644,5,4,0,0,3644, + 3646,3,88,44,0,3645,3643,1,0,0,0,3646,3649,1,0,0,0,3647,3645,1,0, + 0,0,3647,3648,1,0,0,0,3648,3651,1,0,0,0,3649,3647,1,0,0,0,3650,3640, + 1,0,0,0,3650,3651,1,0,0,0,3651,3653,1,0,0,0,3652,3618,1,0,0,0,3652, + 3638,1,0,0,0,3653,3655,1,0,0,0,3654,3656,3,302,151,0,3655,3654,1, + 0,0,0,3655,3656,1,0,0,0,3656,3657,1,0,0,0,3657,3659,5,3,0,0,3658, + 3612,1,0,0,0,3658,3613,1,0,0,0,3658,3617,1,0,0,0,3659,301,1,0,0, + 0,3660,3661,7,67,0,0,3661,3669,3,304,152,0,3662,3663,7,67,0,0,3663, + 3664,5,24,0,0,3664,3665,3,304,152,0,3665,3666,5,14,0,0,3666,3667, + 3,304,152,0,3667,3669,1,0,0,0,3668,3660,1,0,0,0,3668,3662,1,0,0, + 0,3669,303,1,0,0,0,3670,3671,5,321,0,0,3671,3678,7,68,0,0,3672,3673, + 5,62,0,0,3673,3678,5,257,0,0,3674,3675,3,220,110,0,3675,3676,7,68, + 0,0,3676,3678,1,0,0,0,3677,3670,1,0,0,0,3677,3672,1,0,0,0,3677,3674, + 1,0,0,0,3678,305,1,0,0,0,3679,3684,3,312,156,0,3680,3681,5,4,0,0, + 3681,3683,3,312,156,0,3682,3680,1,0,0,0,3683,3686,1,0,0,0,3684,3682, + 1,0,0,0,3684,3685,1,0,0,0,3685,307,1,0,0,0,3686,3684,1,0,0,0,3687, + 3688,5,136,0,0,3688,3689,5,2,0,0,3689,3690,3,220,110,0,3690,3691, + 5,3,0,0,3691,3697,1,0,0,0,3692,3697,3,312,156,0,3693,3697,5,114, + 0,0,3694,3697,5,161,0,0,3695,3697,5,250,0,0,3696,3687,1,0,0,0,3696, + 3692,1,0,0,0,3696,3693,1,0,0,0,3696,3694,1,0,0,0,3696,3695,1,0,0, + 0,3697,309,1,0,0,0,3698,3699,3,312,156,0,3699,311,1,0,0,0,3700,3705, + 3,318,159,0,3701,3702,5,5,0,0,3702,3704,3,318,159,0,3703,3701,1, + 0,0,0,3704,3707,1,0,0,0,3705,3703,1,0,0,0,3705,3706,1,0,0,0,3706, + 313,1,0,0,0,3707,3705,1,0,0,0,3708,3709,3,318,159,0,3709,3710,3, + 316,158,0,3710,315,1,0,0,0,3711,3712,5,362,0,0,3712,3714,3,318,159, + 0,3713,3711,1,0,0,0,3714,3715,1,0,0,0,3715,3713,1,0,0,0,3715,3716, + 1,0,0,0,3716,3719,1,0,0,0,3717,3719,1,0,0,0,3718,3713,1,0,0,0,3718, + 3717,1,0,0,0,3719,317,1,0,0,0,3720,3723,3,320,160,0,3721,3723,3, + 332,166,0,3722,3720,1,0,0,0,3722,3721,1,0,0,0,3723,319,1,0,0,0,3724, + 3729,5,388,0,0,3725,3729,3,322,161,0,3726,3729,3,330,165,0,3727, + 3729,3,334,167,0,3728,3724,1,0,0,0,3728,3725,1,0,0,0,3728,3726,1, + 0,0,0,3728,3727,1,0,0,0,3729,321,1,0,0,0,3730,3731,7,69,0,0,3731, + 323,1,0,0,0,3732,3734,5,362,0,0,3733,3732,1,0,0,0,3733,3734,1,0, + 0,0,3734,3735,1,0,0,0,3735,3736,7,70,0,0,3736,325,1,0,0,0,3737,3738, + 5,319,0,0,3738,3751,3,270,135,0,3739,3740,5,51,0,0,3740,3751,3,328, + 164,0,3741,3751,3,266,133,0,3742,3743,7,71,0,0,3743,3744,5,197,0, + 0,3744,3751,5,198,0,0,3745,3746,5,269,0,0,3746,3747,5,82,0,0,3747, + 3751,3,220,110,0,3748,3749,5,96,0,0,3749,3751,5,82,0,0,3750,3737, + 1,0,0,0,3750,3739,1,0,0,0,3750,3741,1,0,0,0,3750,3742,1,0,0,0,3750, + 3745,1,0,0,0,3750,3748,1,0,0,0,3751,327,1,0,0,0,3752,3753,7,72,0, + 0,3753,329,1,0,0,0,3754,3755,7,73,0,0,3755,331,1,0,0,0,3756,3757, + 7,74,0,0,3757,333,1,0,0,0,3758,3759,7,75,0,0,3759,335,1,0,0,0,508, + 339,346,350,355,362,367,377,379,399,403,409,412,415,419,422,426, + 433,436,440,443,448,461,463,468,477,480,484,487,493,504,510,515, + 548,558,569,580,591,596,605,609,615,619,624,630,642,650,656,667, + 671,676,691,695,702,706,712,742,746,751,758,764,767,770,774,778, + 787,789,798,801,810,815,821,828,831,835,850,853,859,863,880,882, + 890,894,900,903,907,910,916,921,925,932,935,938,945,950,959,967, + 973,976,979,985,989,994,997,1001,1003,1011,1019,1022,1029,1032,1035, + 1044,1049,1055,1060,1063,1067,1070,1074,1084,1089,1102,1105,1113, + 1119,1122,1125,1130,1138,1143,1149,1155,1158,1165,1172,1180,1192, + 1200,1227,1230,1236,1245,1254,1260,1265,1270,1277,1282,1287,1294, + 1304,1307,1313,1320,1324,1387,1395,1402,1410,1422,1427,1430,1438, + 1443,1445,1453,1458,1462,1465,1473,1478,1487,1492,1495,1500,1504, + 1509,1511,1516,1525,1533,1539,1548,1555,1564,1569,1572,1597,1599, + 1611,1618,1621,1628,1632,1638,1646,1653,1656,1664,1675,1686,1694, + 1700,1711,1718,1725,1737,1745,1751,1757,1760,1776,1783,1794,1803, + 1806,1815,1818,1827,1830,1839,1842,1845,1850,1852,1856,1864,1870, + 1876,1879,1881,1889,1899,1908,1912,1915,1919,1923,1931,1935,1938, + 1941,1944,1948,1952,1957,1961,1964,1967,1970,1974,1979,1983,1986, + 1989,1992,1994,2000,2007,2012,2015,2018,2022,2032,2036,2038,2041, + 2045,2051,2055,2066,2074,2076,2083,2087,2099,2106,2121,2126,2133, + 2149,2154,2167,2172,2180,2186,2190,2193,2196,2203,2206,2212,2221, + 2231,2246,2251,2253,2258,2267,2277,2282,2286,2291,2298,2303,2307, + 2310,2313,2327,2340,2345,2349,2352,2357,2362,2366,2369,2381,2392, + 2405,2416,2421,2424,2428,2431,2443,2452,2455,2460,2467,2470,2476, + 2482,2484,2487,2492,2496,2502,2506,2509,2514,2517,2522,2524,2530, + 2535,2542,2545,2563,2565,2568,2579,2588,2595,2603,2611,2616,2619, + 2622,2630,2638,2648,2660,2663,2668,2673,2680,2687,2689,2702,2708, + 2710,2720,2726,2728,2736,2740,2743,2747,2749,2758,2770,2772,2779, + 2786,2792,2798,2800,2807,2815,2823,2829,2834,2841,2847,2850,2854, + 2856,2863,2872,2879,2889,2894,2898,2908,2915,2928,2930,2938,2940, + 2944,2952,2961,2967,2975,2980,2992,2997,3000,3006,3010,3015,3020, + 3025,3031,3052,3054,3065,3077,3089,3093,3102,3106,3124,3127,3135, + 3144,3153,3176,3192,3199,3202,3211,3215,3219,3231,3256,3263,3266, + 3281,3302,3306,3308,3318,3320,3330,3345,3347,3360,3364,3371,3376, + 3384,3389,3398,3430,3451,3454,3458,3464,3470,3479,3483,3485,3492, + 3500,3508,3516,3526,3536,3543,3547,3554,3562,3578,3582,3587,3591, + 3609,3625,3635,3638,3647,3650,3652,3655,3658,3668,3677,3684,3696, + 3705,3715,3718,3722,3728,3733,3750 ]; private static __ATN: antlr.ATN; @@ -21516,8 +20733,14 @@ export class ShowNamespacesContext extends StatementContext { public KW_SHOW(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_SHOW, 0)!; } - public namespaces(): NamespacesContext { - return this.getRuleContext(0, NamespacesContext)!; + public KW_NAMESPACES(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_NAMESPACES, 0); + } + public KW_DATABASES(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_DATABASES, 0); + } + public KW_SCHEMAS(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_SCHEMAS, 0); } public multipartIdentifier(): MultipartIdentifierContext | null { return this.getRuleContext(0, MultipartIdentifierContext); @@ -21611,12 +20834,24 @@ export class ReplaceTableContext extends StatementContext { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public replaceTableHeader(): ReplaceTableHeaderContext { - return this.getRuleContext(0, ReplaceTableHeaderContext)!; + public KW_REPLACE(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_REPLACE, 0)!; + } + public KW_TABLE(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_TABLE, 0)!; + } + public tableNameCreate(): TableNameCreateContext { + return this.getRuleContext(0, TableNameCreateContext)!; } public createTableClauses(): CreateTableClausesContext { return this.getRuleContext(0, CreateTableClausesContext)!; } + public KW_CREATE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_CREATE, 0); + } + public KW_OR(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_OR, 0); + } public LEFT_PAREN(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } @@ -21770,8 +21005,11 @@ export class SetNamespaceLocationContext extends StatementContext { public KW_SET(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_SET, 0)!; } - public locationSpec(): LocationSpecContext { - return this.getRuleContext(0, LocationSpecContext)!; + public KW_LOCATION(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_LOCATION, 0)!; + } + public stringLit(): StringLitContext { + return this.getRuleContext(0, StringLitContext)!; } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterSetNamespaceLocation) { @@ -21857,8 +21095,8 @@ export class ResetConfigContext extends StatementContext { public KW_RESET(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_RESET, 0)!; } - public configKey(): ConfigKeyContext { - return this.getRuleContext(0, ConfigKeyContext)!; + public quotedIdentifier(): QuotedIdentifierContext { + return this.getRuleContext(0, QuotedIdentifierContext)!; } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterResetConfig) { @@ -21889,8 +21127,8 @@ export class SetConfigAnyKeyContext extends StatementContext { public EQ(): antlr.TerminalNode { return this.getToken(SparkSqlParser.EQ, 0)!; } - public configValue(): ConfigValueContext { - return this.getRuleContext(0, ConfigValueContext)!; + public BACKQUOTED_IDENTIFIER(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.BACKQUOTED_IDENTIFIER, 0)!; } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterSetConfigAnyKey) { @@ -22105,8 +21343,14 @@ export class CreateFunctionContext extends StatementContext { public KW_AS(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_AS, 0)!; } - public stringLit(): StringLitContext { - return this.getRuleContext(0, StringLitContext)!; + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext | null; + public stringLit(i?: number): StringLitContext[] | StringLitContext | null { + if (i === undefined) { + return this.getRuleContexts(StringLitContext); + } + + return this.getRuleContext(i, StringLitContext); } public KW_OR(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_OR, 0); @@ -22123,14 +21367,14 @@ export class CreateFunctionContext extends StatementContext { public KW_USING(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_USING, 0); } - public resource(): ResourceContext[]; - public resource(i: number): ResourceContext | null; - public resource(i?: number): ResourceContext[] | ResourceContext | null { + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { if (i === undefined) { - return this.getRuleContexts(ResourceContext); + return this.getRuleContexts(IdentifierContext); } - return this.getRuleContext(i, ResourceContext); + return this.getRuleContext(i, IdentifierContext); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -22306,69 +21550,28 @@ export class AlterTableAddColumnContext extends StatementContext { public tableName(): TableNameContext { return this.getRuleContext(0, TableNameContext)!; } - public KW_ADD(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_ADD, 0)!; - } - public KW_COLUMN(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_COLUMN, 0)!; - } - public qualifiedColTypeWithPositionForAdd(): QualifiedColTypeWithPositionForAddContext { - return this.getRuleContext(0, QualifiedColTypeWithPositionForAddContext)!; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterAlterTableAddColumn) { - listener.enterAlterTableAddColumn(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitAlterTableAddColumn) { - listener.exitAlterTableAddColumn(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitAlterTableAddColumn) { - return visitor.visitAlterTableAddColumn(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class CommentNamespaceContext extends StatementContext { - public constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); - } - public KW_COMMENT(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_COMMENT, 0)!; - } - public KW_ON(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_ON, 0)!; - } - public namespace(): NamespaceContext { - return this.getRuleContext(0, NamespaceContext)!; - } - public namespaceName(): NamespaceNameContext { - return this.getRuleContext(0, NamespaceNameContext)!; - } - public KW_IS(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_IS, 0)!; + public KW_ADD(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_ADD, 0)!; } - public comment(): CommentContext { - return this.getRuleContext(0, CommentContext)!; + public KW_COLUMN(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_COLUMN, 0)!; + } + public qualifiedColTypeWithPositionForAdd(): QualifiedColTypeWithPositionForAddContext { + return this.getRuleContext(0, QualifiedColTypeWithPositionForAddContext)!; } public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterCommentNamespace) { - listener.enterCommentNamespace(this); + if(listener.enterAlterTableAddColumn) { + listener.enterAlterTableAddColumn(this); } } public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitCommentNamespace) { - listener.exitCommentNamespace(this); + if(listener.exitAlterTableAddColumn) { + listener.exitAlterTableAddColumn(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitCommentNamespace) { - return visitor.visitCommentNamespace(this); + if (visitor.visitAlterTableAddColumn) { + return visitor.visitAlterTableAddColumn(this); } else { return visitor.visitChildren(this); } @@ -22379,12 +21582,27 @@ export class CreateTableContext extends StatementContext { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); } - public createTableHeader(): CreateTableHeaderContext { - return this.getRuleContext(0, CreateTableHeaderContext)!; + public KW_CREATE(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_CREATE, 0)!; + } + public KW_TABLE(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_TABLE, 0)!; + } + public tableNameCreate(): TableNameCreateContext { + return this.getRuleContext(0, TableNameCreateContext)!; } public createTableClauses(): CreateTableClausesContext { return this.getRuleContext(0, CreateTableClausesContext)!; } + public KW_TEMPORARY(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_TEMPORARY, 0); + } + public KW_EXTERNAL(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_EXTERNAL, 0); + } + public ifNotExists(): IfNotExistsContext | null { + return this.getRuleContext(0, IfNotExistsContext); + } public LEFT_PAREN(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } @@ -22547,15 +21765,6 @@ export class CreateTableLikeContext extends StatementContext { return this.getRuleContext(i, CreateFileFormatContext); } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext | null; - public locationSpec(i?: number): LocationSpecContext[] | LocationSpecContext | null { - if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); - } - - return this.getRuleContext(i, LocationSpecContext); - } public tableLifecycle(): TableLifecycleContext[]; public tableLifecycle(i: number): TableLifecycleContext | null; public tableLifecycle(i?: number): TableLifecycleContext[] | TableLifecycleContext | null { @@ -22565,6 +21774,24 @@ export class CreateTableLikeContext extends StatementContext { return this.getRuleContext(i, TableLifecycleContext); } + public KW_LOCATION(): antlr.TerminalNode[]; + public KW_LOCATION(i: number): antlr.TerminalNode | null; + public KW_LOCATION(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_LOCATION); + } else { + return this.getToken(SparkSqlParser.KW_LOCATION, i); + } + } + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext | null; + public stringLit(i?: number): StringLitContext[] | StringLitContext | null { + if (i === undefined) { + return this.getRuleContexts(StringLitContext); + } + + return this.getRuleContext(i, StringLitContext); + } public KW_TBLPROPERTIES(): antlr.TerminalNode[]; public KW_TBLPROPERTIES(i: number): antlr.TerminalNode | null; public KW_TBLPROPERTIES(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -22929,14 +22156,14 @@ export class SetConfigContext extends StatementContext { public KW_SET(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_SET, 0)!; } - public configKey(): ConfigKeyContext { - return this.getRuleContext(0, ConfigKeyContext)!; + public quotedIdentifier(): QuotedIdentifierContext { + return this.getRuleContext(0, QuotedIdentifierContext)!; } public EQ(): antlr.TerminalNode { return this.getToken(SparkSqlParser.EQ, 0)!; } - public configValue(): ConfigValueContext { - return this.getRuleContext(0, ConfigValueContext)!; + public BACKQUOTED_IDENTIFIER(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.BACKQUOTED_IDENTIFIER, 0)!; } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterSetConfig) { @@ -23024,8 +22251,8 @@ export class HiveChangeColumnContext extends StatementContext { public KW_CHANGE(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_CHANGE, 0)!; } - public colType(): ColTypeContext { - return this.getRuleContext(0, ColTypeContext)!; + public columnType(): ColumnTypeContext { + return this.getRuleContext(0, ColumnTypeContext)!; } public tableName(): TableNameContext { return this.getRuleContext(0, TableNameContext)!; @@ -23071,8 +22298,14 @@ export class OptimizeTableContext extends StatementContext { public tableName(): TableNameContext { return this.getRuleContext(0, TableNameContext)!; } - public zorderClause(): ZorderClauseContext { - return this.getRuleContext(0, ZorderClauseContext)!; + public KW_ZORDER(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_ZORDER, 0)!; + } + public KW_BY(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_BY, 0)!; + } + public columnNameSeq(): ColumnNameSeqContext { + return this.getRuleContext(0, ColumnNameSeqContext)!; } public whereClause(): WhereClauseContext | null { return this.getRuleContext(0, WhereClauseContext); @@ -23109,8 +22342,11 @@ export class SetTimeZoneContext extends StatementContext { public KW_ZONE(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_ZONE, 0)!; } - public timezone(): TimezoneContext { - return this.getRuleContext(0, TimezoneContext)!; + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); + } + public KW_LOCAL(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_LOCAL, 0); } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterSetTimeZone) { @@ -23208,8 +22444,8 @@ export class SetConfigAndValueContext extends StatementContext { public KW_SET(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_SET, 0)!; } - public configKey(): ConfigKeyContext { - return this.getRuleContext(0, ConfigKeyContext)!; + public quotedIdentifier(): QuotedIdentifierContext { + return this.getRuleContext(0, QuotedIdentifierContext)!; } public EQ(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.EQ, 0); @@ -23235,6 +22471,7 @@ export class SetConfigAndValueContext extends StatementContext { export class CreateMaterializedViewContext extends StatementContext { public _options?: PropertyListContext; public _partitioning?: PartitionFieldListContext; + public _comment?: StringLitContext; public _tableProps?: PropertyListContext; public constructor(ctx: StatementContext) { super(ctx.parent, ctx.invokingState); @@ -23300,24 +22537,6 @@ export class CreateMaterializedViewContext extends StatementContext { return this.getRuleContext(i, CreateFileFormatContext); } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext | null; - public locationSpec(i?: number): LocationSpecContext[] | LocationSpecContext | null { - if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); - } - - return this.getRuleContext(i, LocationSpecContext); - } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext | null; - public commentSpec(i?: number): CommentSpecContext[] | CommentSpecContext | null { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } - - return this.getRuleContext(i, CommentSpecContext); - } public KW_OPTIONS(): antlr.TerminalNode[]; public KW_OPTIONS(i: number): antlr.TerminalNode | null; public KW_OPTIONS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -23345,6 +22564,33 @@ export class CreateMaterializedViewContext extends StatementContext { return this.getToken(SparkSqlParser.KW_BY, i); } } + public KW_LOCATION(): antlr.TerminalNode[]; + public KW_LOCATION(i: number): antlr.TerminalNode | null; + public KW_LOCATION(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_LOCATION); + } else { + return this.getToken(SparkSqlParser.KW_LOCATION, i); + } + } + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext | null; + public stringLit(i?: number): StringLitContext[] | StringLitContext | null { + if (i === undefined) { + return this.getRuleContexts(StringLitContext); + } + + return this.getRuleContext(i, StringLitContext); + } + public KW_COMMENT(): antlr.TerminalNode[]; + public KW_COMMENT(i: number): antlr.TerminalNode | null; + public KW_COMMENT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_COMMENT); + } else { + return this.getToken(SparkSqlParser.KW_COMMENT, i); + } + } public KW_TBLPROPERTIES(): antlr.TerminalNode[]; public KW_TBLPROPERTIES(i: number): antlr.TerminalNode | null; public KW_TBLPROPERTIES(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -23444,6 +22690,7 @@ export class SetTableSerDeContext extends StatementContext { } } export class CreateViewContext extends StatementContext { + public _comment?: StringLitContext; public constructor(ctx: StatementContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -23478,14 +22725,14 @@ export class CreateViewContext extends StatementContext { public identifierCommentList(): IdentifierCommentListContext | null { return this.getRuleContext(0, IdentifierCommentListContext); } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext | null; - public commentSpec(i?: number): CommentSpecContext[] | CommentSpecContext | null { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } - - return this.getRuleContext(i, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode[]; + public KW_COMMENT(i: number): antlr.TerminalNode | null; + public KW_COMMENT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_COMMENT); + } else { + return this.getToken(SparkSqlParser.KW_COMMENT, i); + } } public KW_PARTITIONED(): antlr.TerminalNode[]; public KW_PARTITIONED(i: number): antlr.TerminalNode | null; @@ -23535,6 +22782,15 @@ export class CreateViewContext extends StatementContext { public KW_GLOBAL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_GLOBAL, 0); } + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext | null; + public stringLit(i?: number): StringLitContext[] | StringLitContext | null { + if (i === undefined) { + return this.getRuleContexts(StringLitContext); + } + + return this.getRuleContext(i, StringLitContext); + } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterCreateView) { listener.enterCreateView(this); @@ -23873,17 +23129,26 @@ export class CommentTableContext extends StatementContext { public KW_ON(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_ON, 0)!; } - public KW_TABLE(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_TABLE, 0)!; - } - public tableName(): TableNameContext { - return this.getRuleContext(0, TableNameContext)!; - } public KW_IS(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_IS, 0)!; } - public comment(): CommentContext { - return this.getRuleContext(0, CommentContext)!; + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); + } + public KW_NULL(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_NULL, 0); + } + public namespace(): NamespaceContext | null { + return this.getRuleContext(0, NamespaceContext); + } + public namespaceName(): NamespaceNameContext | null { + return this.getRuleContext(0, NamespaceNameContext); + } + public KW_TABLE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_TABLE, 0); + } + public tableName(): TableNameContext | null { + return this.getRuleContext(0, TableNameContext); } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterCommentTable) { @@ -24099,6 +23364,7 @@ export class DropVariableContext extends StatementContext { } } export class CreateNamespaceContext extends StatementContext { + public _comment?: StringLitContext; public constructor(ctx: StatementContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -24115,23 +23381,32 @@ export class CreateNamespaceContext extends StatementContext { public ifNotExists(): IfNotExistsContext | null { return this.getRuleContext(0, IfNotExistsContext); } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext | null; - public commentSpec(i?: number): CommentSpecContext[] | CommentSpecContext | null { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } - - return this.getRuleContext(i, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode[]; + public KW_COMMENT(i: number): antlr.TerminalNode | null; + public KW_COMMENT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_COMMENT); + } else { + return this.getToken(SparkSqlParser.KW_COMMENT, i); + } + } + public KW_LOCATION(): antlr.TerminalNode[]; + public KW_LOCATION(i: number): antlr.TerminalNode | null; + public KW_LOCATION(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_LOCATION); + } else { + return this.getToken(SparkSqlParser.KW_LOCATION, i); + } } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext | null; - public locationSpec(i?: number): LocationSpecContext[] | LocationSpecContext | null { + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext | null; + public stringLit(i?: number): StringLitContext[] | StringLitContext | null { if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); + return this.getRuleContexts(StringLitContext); } - return this.getRuleContext(i, LocationSpecContext); + return this.getRuleContext(i, StringLitContext); } public KW_WITH(): antlr.TerminalNode[]; public KW_WITH(i: number): antlr.TerminalNode | null; @@ -24420,8 +23695,11 @@ export class SetTableLocationContext extends StatementContext { public KW_SET(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_SET, 0)!; } - public locationSpec(): LocationSpecContext { - return this.getRuleContext(0, LocationSpecContext)!; + public KW_LOCATION(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_LOCATION, 0)!; + } + public stringLit(): StringLitContext { + return this.getRuleContext(0, StringLitContext)!; } public partitionSpec(): PartitionSpecContext | null { return this.getRuleContext(0, PartitionSpecContext); @@ -24553,8 +23831,14 @@ export class ShowFunctionsContext extends StatementContext { public KW_FUNCTIONS(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_FUNCTIONS, 0)!; } - public functionKind(): FunctionKindContext | null { - return this.getRuleContext(0, FunctionKindContext); + public KW_USER(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_USER, 0); + } + public KW_SYSTEM(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_SYSTEM, 0); + } + public KW_ALL(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_ALL, 0); } public KW_FROM(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_FROM, 0); @@ -24629,152 +23913,59 @@ export class CacheTableContext extends StatementContext { } public override exitRule(listener: SparkSqlParserListener): void { if(listener.exitCacheTable) { - listener.exitCacheTable(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitCacheTable) { - return visitor.visitCacheTable(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class SetTablePropertiesContext extends StatementContext { - public constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - super.copyFrom(ctx); - } - public KW_ALTER(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_ALTER, 0)!; - } - public KW_SET(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_SET, 0)!; - } - public KW_TBLPROPERTIES(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_TBLPROPERTIES, 0)!; - } - public propertyList(): PropertyListContext { - return this.getRuleContext(0, PropertyListContext)!; - } - public KW_TABLE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_TABLE, 0); - } - public tableName(): TableNameContext | null { - return this.getRuleContext(0, TableNameContext); - } - public KW_VIEW(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_VIEW, 0); - } - public viewName(): ViewNameContext | null { - return this.getRuleContext(0, ViewNameContext); - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterSetTableProperties) { - listener.enterSetTableProperties(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitSetTableProperties) { - listener.exitSetTableProperties(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitSetTableProperties) { - return visitor.visitSetTableProperties(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TimezoneContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public stringLit(): StringLitContext | null { - return this.getRuleContext(0, StringLitContext); - } - public KW_LOCAL(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_LOCAL, 0); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_timezone; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterTimezone) { - listener.enterTimezone(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitTimezone) { - listener.exitTimezone(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitTimezone) { - return visitor.visitTimezone(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ConfigKeyContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public quotedIdentifier(): QuotedIdentifierContext { - return this.getRuleContext(0, QuotedIdentifierContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_configKey; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterConfigKey) { - listener.enterConfigKey(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitConfigKey) { - listener.exitConfigKey(this); + listener.exitCacheTable(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitConfigKey) { - return visitor.visitConfigKey(this); + if (visitor.visitCacheTable) { + return visitor.visitCacheTable(this); } else { return visitor.visitChildren(this); } } } - - -export class ConfigValueContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); +export class SetTablePropertiesContext extends StatementContext { + public constructor(ctx: StatementContext) { + super(ctx.parent, ctx.invokingState); + super.copyFrom(ctx); } - public backQuotedIdentifier(): BackQuotedIdentifierContext { - return this.getRuleContext(0, BackQuotedIdentifierContext)!; + public KW_ALTER(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_ALTER, 0)!; } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_configValue; + public KW_SET(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_SET, 0)!; + } + public KW_TBLPROPERTIES(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_TBLPROPERTIES, 0)!; + } + public propertyList(): PropertyListContext { + return this.getRuleContext(0, PropertyListContext)!; + } + public KW_TABLE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_TABLE, 0); + } + public tableName(): TableNameContext | null { + return this.getRuleContext(0, TableNameContext); + } + public KW_VIEW(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_VIEW, 0); + } + public viewName(): ViewNameContext | null { + return this.getRuleContext(0, ViewNameContext); } public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterConfigValue) { - listener.enterConfigValue(this); + if(listener.enterSetTableProperties) { + listener.enterSetTableProperties(this); } } public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitConfigValue) { - listener.exitConfigValue(this); + if(listener.exitSetTableProperties) { + listener.exitSetTableProperties(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitConfigValue) { - return visitor.visitConfigValue(this); + if (visitor.visitSetTableProperties) { + return visitor.visitSetTableProperties(this); } else { return visitor.visitChildren(this); } @@ -24792,12 +23983,12 @@ export class UnsupportedHiveNativeCommandsContext extends antlr.ParserRuleContex public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public KW_CREATE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_CREATE, 0); - } public KW_ROLE(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_ROLE, 0); } + public KW_CREATE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_CREATE, 0); + } public KW_DROP(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_DROP, 0); } @@ -24813,21 +24004,6 @@ export class UnsupportedHiveNativeCommandsContext extends antlr.ParserRuleContex public KW_PRINCIPALS(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_PRINCIPALS, 0); } - public KW_ROLES(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_ROLES, 0); - } - public KW_CURRENT(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_CURRENT, 0); - } - public KW_EXPORT(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_EXPORT, 0); - } - public KW_TABLE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_TABLE, 0); - } - public KW_IMPORT(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_IMPORT, 0); - } public KW_COMPACTIONS(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_COMPACTIONS, 0); } @@ -24840,21 +24016,36 @@ export class UnsupportedHiveNativeCommandsContext extends antlr.ParserRuleContex public KW_LOCKS(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_LOCKS, 0); } + public KW_ROLES(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_ROLES, 0); + } + public KW_CURRENT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_CURRENT, 0); + } + public KW_TABLE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_TABLE, 0); + } public KW_INDEX(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_INDEX, 0); } public KW_ALTER(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_ALTER, 0); } + public KW_EXPORT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_EXPORT, 0); + } + public KW_IMPORT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_IMPORT, 0); + } public KW_LOCK(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_LOCK, 0); } - public KW_DATABASE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_DATABASE, 0); - } public KW_UNLOCK(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_UNLOCK, 0); } + public KW_DATABASE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_DATABASE, 0); + } public KW_TEMPORARY(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_TEMPORARY, 0); } @@ -24870,15 +24061,15 @@ export class UnsupportedHiveNativeCommandsContext extends antlr.ParserRuleContex public KW_CLUSTERED(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_CLUSTERED, 0); } - public KW_BY(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_BY, 0); - } public KW_SORTED(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_SORTED, 0); } public KW_SKEWED(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_SKEWED, 0); } + public KW_BY(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_BY, 0); + } public KW_STORED(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_STORED, 0); } @@ -24894,12 +24085,12 @@ export class UnsupportedHiveNativeCommandsContext extends antlr.ParserRuleContex public KW_LOCATION(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_LOCATION, 0); } - public KW_EXCHANGE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_EXCHANGE, 0); - } public KW_PARTITION(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_PARTITION, 0); } + public KW_EXCHANGE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_EXCHANGE, 0); + } public KW_ARCHIVE(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_ARCHIVE, 0); } @@ -24912,12 +24103,12 @@ export class UnsupportedHiveNativeCommandsContext extends antlr.ParserRuleContex public KW_COMPACT(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_COMPACT, 0); } - public partitionSpec(): PartitionSpecContext | null { - return this.getRuleContext(0, PartitionSpecContext); - } public KW_CONCATENATE(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_CONCATENATE, 0); } + public partitionSpec(): PartitionSpecContext | null { + return this.getRuleContext(0, PartitionSpecContext); + } public KW_FILEFORMAT(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_FILEFORMAT, 0); } @@ -24965,93 +24156,6 @@ export class UnsupportedHiveNativeCommandsContext extends antlr.ParserRuleContex } -export class CreateTableHeaderContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_CREATE(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_CREATE, 0)!; - } - public KW_TABLE(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_TABLE, 0)!; - } - public tableNameCreate(): TableNameCreateContext { - return this.getRuleContext(0, TableNameCreateContext)!; - } - public KW_TEMPORARY(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_TEMPORARY, 0); - } - public KW_EXTERNAL(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_EXTERNAL, 0); - } - public ifNotExists(): IfNotExistsContext | null { - return this.getRuleContext(0, IfNotExistsContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_createTableHeader; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterCreateTableHeader) { - listener.enterCreateTableHeader(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitCreateTableHeader) { - listener.exitCreateTableHeader(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitCreateTableHeader) { - return visitor.visitCreateTableHeader(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ReplaceTableHeaderContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_REPLACE(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_REPLACE, 0)!; - } - public KW_TABLE(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_TABLE, 0)!; - } - public tableNameCreate(): TableNameCreateContext { - return this.getRuleContext(0, TableNameCreateContext)!; - } - public KW_CREATE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_CREATE, 0); - } - public KW_OR(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_OR, 0); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_replaceTableHeader; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterReplaceTableHeader) { - listener.enterReplaceTableHeader(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitReplaceTableHeader) { - listener.exitReplaceTableHeader(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitReplaceTableHeader) { - return visitor.visitReplaceTableHeader(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class BucketSpecContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -25163,72 +24267,6 @@ export class SkewSpecContext extends antlr.ParserRuleContext { } -export class LocationSpecContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_LOCATION(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_LOCATION, 0)!; - } - public stringLit(): StringLitContext { - return this.getRuleContext(0, StringLitContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_locationSpec; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterLocationSpec) { - listener.enterLocationSpec(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitLocationSpec) { - listener.exitLocationSpec(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitLocationSpec) { - return visitor.visitLocationSpec(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class CommentSpecContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_COMMENT(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_COMMENT, 0)!; - } - public stringLit(): StringLitContext { - return this.getRuleContext(0, StringLitContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_commentSpec; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterCommentSpec) { - listener.enterCommentSpec(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitCommentSpec) { - listener.exitCommentSpec(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitCommentSpec) { - return visitor.visitCommentSpec(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class QueryContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -25376,8 +24414,11 @@ export class PartitionSpecLocationContext extends antlr.ParserRuleContext { public partitionSpec(): PartitionSpecContext { return this.getRuleContext(0, PartitionSpecContext)!; } - public locationSpec(): LocationSpecContext | null { - return this.getRuleContext(0, LocationSpecContext); + public KW_LOCATION(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_LOCATION, 0); + } + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); } public override get ruleIndex(): number { return SparkSqlParser.RULE_partitionSpecLocation; @@ -25531,42 +24572,6 @@ export class NamespaceContext extends antlr.ParserRuleContext { } -export class NamespacesContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_NAMESPACES(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_NAMESPACES, 0); - } - public KW_DATABASES(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_DATABASES, 0); - } - public KW_SCHEMAS(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_SCHEMAS, 0); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_namespaces; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterNamespaces) { - listener.enterNamespaces(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitNamespaces) { - listener.exitNamespaces(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitNamespaces) { - return visitor.visitNamespaces(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class DescribeFuncNameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -25787,6 +24792,7 @@ export class TableProviderContext extends antlr.ParserRuleContext { export class CreateTableClausesContext extends antlr.ParserRuleContext { public _options?: ExpressionPropertyListContext; public _partitioning?: PartitionFieldListContext; + public _comment?: StringLitContext; public _tableProps?: PropertyListContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -25827,23 +24833,32 @@ export class CreateTableClausesContext extends antlr.ParserRuleContext { return this.getRuleContext(i, CreateFileFormatContext); } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext | null; - public locationSpec(i?: number): LocationSpecContext[] | LocationSpecContext | null { + public KW_LOCATION(): antlr.TerminalNode[]; + public KW_LOCATION(i: number): antlr.TerminalNode | null; + public KW_LOCATION(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_LOCATION); + } else { + return this.getToken(SparkSqlParser.KW_LOCATION, i); + } + } + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext | null; + public stringLit(i?: number): StringLitContext[] | StringLitContext | null { if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); + return this.getRuleContexts(StringLitContext); } - return this.getRuleContext(i, LocationSpecContext); + return this.getRuleContext(i, StringLitContext); } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext | null; - public commentSpec(i?: number): CommentSpecContext[] | CommentSpecContext | null { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } - - return this.getRuleContext(i, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode[]; + public KW_COMMENT(i: number): antlr.TerminalNode | null; + public KW_COMMENT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_COMMENT); + } else { + return this.getToken(SparkSqlParser.KW_COMMENT, i); + } } public tableLifecycle(): TableLifecycleContext[]; public tableLifecycle(i: number): TableLifecycleContext | null; @@ -26468,39 +25483,6 @@ export class StorageHandlerContext extends antlr.ParserRuleContext { } -export class ResourceContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext)!; - } - public stringLit(): StringLitContext { - return this.getRuleContext(0, StringLitContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_resource; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterResource) { - listener.enterResource(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitResource) { - listener.exitResource(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitResource) { - return visitor.visitResource(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class DmlStatementNoWithContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -26558,14 +25540,23 @@ export class MultipleInsertContext extends DmlStatementNoWithContext { public fromClause(): FromClauseContext { return this.getRuleContext(0, FromClauseContext)!; } - public multiInsertQueryBody(): MultiInsertQueryBodyContext[]; - public multiInsertQueryBody(i: number): MultiInsertQueryBodyContext | null; - public multiInsertQueryBody(i?: number): MultiInsertQueryBodyContext[] | MultiInsertQueryBodyContext | null { + public insertInto(): InsertIntoContext[]; + public insertInto(i: number): InsertIntoContext | null; + public insertInto(i?: number): InsertIntoContext[] | InsertIntoContext | null { + if (i === undefined) { + return this.getRuleContexts(InsertIntoContext); + } + + return this.getRuleContext(i, InsertIntoContext); + } + public fromStatementBody(): FromStatementBodyContext[]; + public fromStatementBody(i: number): FromStatementBodyContext | null; + public fromStatementBody(i?: number): FromStatementBodyContext[] | FromStatementBodyContext | null { if (i === undefined) { - return this.getRuleContexts(MultiInsertQueryBodyContext); + return this.getRuleContexts(FromStatementBodyContext); } - return this.getRuleContext(i, MultiInsertQueryBodyContext); + return this.getRuleContext(i, FromStatementBodyContext); } public override enterRule(listener: SparkSqlParserListener): void { if(listener.enterMultipleInsert) { @@ -27171,39 +26162,6 @@ export class QueryOrganizationContext extends antlr.ParserRuleContext { } -export class MultiInsertQueryBodyContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public insertInto(): InsertIntoContext { - return this.getRuleContext(0, InsertIntoContext)!; - } - public fromStatementBody(): FromStatementBodyContext { - return this.getRuleContext(0, FromStatementBodyContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_multiInsertQueryBody; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterMultiInsertQueryBody) { - listener.enterMultiInsertQueryBody(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitMultiInsertQueryBody) { - listener.exitMultiInsertQueryBody(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitMultiInsertQueryBody) { - return visitor.visitMultiInsertQueryBody(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class QueryTermContext extends antlr.ParserRuleContext { public _left?: QueryTermContext; public _operator?: Token | null; @@ -27268,8 +26226,17 @@ export class QueryPrimaryContext extends antlr.ParserRuleContext { public querySpecification(): QuerySpecificationContext | null { return this.getRuleContext(0, QuerySpecificationContext); } - public fromStatement(): FromStatementContext | null { - return this.getRuleContext(0, FromStatementContext); + public fromClause(): FromClauseContext | null { + return this.getRuleContext(0, FromClauseContext); + } + public fromStatementBody(): FromStatementBodyContext[]; + public fromStatementBody(i: number): FromStatementBodyContext | null; + public fromStatementBody(i?: number): FromStatementBodyContext[] | FromStatementBodyContext | null { + if (i === undefined) { + return this.getRuleContexts(FromStatementBodyContext); + } + + return this.getRuleContext(i, FromStatementBodyContext); } public KW_TABLE(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_TABLE, 0); @@ -27277,8 +26244,29 @@ export class QueryPrimaryContext extends antlr.ParserRuleContext { public tableName(): TableNameContext | null { return this.getRuleContext(0, TableNameContext); } - public inlineTable(): InlineTableContext | null { - return this.getRuleContext(0, InlineTableContext); + public KW_VALUES(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_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 tableAlias(): TableAliasContext | null { + return this.getRuleContext(0, TableAliasContext); + } + 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(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } public LEFT_PAREN(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); @@ -27362,45 +26350,6 @@ export class SortItemContext extends antlr.ParserRuleContext { } -export class FromStatementContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public fromClause(): FromClauseContext { - return this.getRuleContext(0, FromClauseContext)!; - } - public fromStatementBody(): FromStatementBodyContext[]; - public fromStatementBody(i: number): FromStatementBodyContext | null; - public fromStatementBody(i?: number): FromStatementBodyContext[] | FromStatementBodyContext | null { - if (i === undefined) { - return this.getRuleContexts(FromStatementBodyContext); - } - - return this.getRuleContext(i, FromStatementBodyContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_fromStatement; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterFromStatement) { - listener.enterFromStatement(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitFromStatement) { - listener.exitFromStatement(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitFromStatement) { - return visitor.visitFromStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class FromStatementBodyContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -27714,8 +26663,14 @@ export class MatchedClauseContext extends antlr.ParserRuleContext { public KW_THEN(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_THEN, 0)!; } - public matchedAction(): MatchedActionContext { - return this.getRuleContext(0, MatchedActionContext)!; + public KW_DELETE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_DELETE, 0); + } + public KW_UPDATE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_UPDATE, 0); + } + public KW_SET(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_SET, 0); } public KW_AND(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_AND, 0); @@ -27723,6 +26678,12 @@ export class MatchedClauseContext extends antlr.ParserRuleContext { public booleanExpression(): BooleanExpressionContext | null { return this.getRuleContext(0, BooleanExpressionContext); } + public ASTERISK(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.ASTERISK, 0); + } + public assignmentList(): AssignmentListContext | null { + return this.getRuleContext(0, AssignmentListContext); + } public override get ruleIndex(): number { return SparkSqlParser.RULE_matchedClause; } @@ -27824,8 +26785,17 @@ export class NotMatchedBySourceClauseContext extends antlr.ParserRuleContext { public KW_THEN(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_THEN, 0)!; } - public notMatchedBySourceAction(): NotMatchedBySourceActionContext { - return this.getRuleContext(0, NotMatchedBySourceActionContext)!; + public KW_DELETE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_DELETE, 0); + } + public KW_UPDATE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_UPDATE, 0); + } + public KW_SET(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_SET, 0); + } + public assignmentList(): AssignmentListContext | null { + return this.getRuleContext(0, AssignmentListContext); } public KW_AND(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_AND, 0); @@ -27856,48 +26826,6 @@ export class NotMatchedBySourceClauseContext extends antlr.ParserRuleContext { } -export class MatchedActionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_DELETE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_DELETE, 0); - } - public KW_UPDATE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_UPDATE, 0); - } - public KW_SET(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_SET, 0); - } - public ASTERISK(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.ASTERISK, 0); - } - public assignmentList(): AssignmentListContext | null { - return this.getRuleContext(0, AssignmentListContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_matchedAction; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterMatchedAction) { - listener.enterMatchedAction(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitMatchedAction) { - listener.exitMatchedAction(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitMatchedAction) { - return visitor.visitMatchedAction(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class NotMatchedActionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -27973,45 +26901,6 @@ export class NotMatchedActionContext extends antlr.ParserRuleContext { } -export class NotMatchedBySourceActionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_DELETE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_DELETE, 0); - } - public KW_UPDATE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_UPDATE, 0); - } - public KW_SET(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_SET, 0); - } - public assignmentList(): AssignmentListContext | null { - return this.getRuleContext(0, AssignmentListContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_notMatchedBySourceAction; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterNotMatchedBySourceAction) { - listener.enterNotMatchedBySourceAction(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitNotMatchedBySourceAction) { - listener.exitNotMatchedBySourceAction(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitNotMatchedBySourceAction) { - return visitor.visitNotMatchedBySourceAction(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class AssignmentListContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -28325,44 +27214,8 @@ export class FromClauseContext extends antlr.ParserRuleContext { } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitFromClause) { - return visitor.visitFromClause(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class FunctionKindContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_USER(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_USER, 0); - } - public KW_SYSTEM(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_SYSTEM, 0); - } - public KW_ALL(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_ALL, 0); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_functionKind; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterFunctionKind) { - listener.enterFunctionKind(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitFunctionKind) { - listener.exitFunctionKind(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitFunctionKind) { - return visitor.visitFunctionKind(this); + if (visitor.visitFromClause) { + return visitor.visitFromClause(this); } else { return visitor.visitChildren(this); } @@ -28381,15 +27234,18 @@ export class TemporalClauseContext extends antlr.ParserRuleContext { public KW_OF(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_OF, 0)!; } - public version(): VersionContext | null { - return this.getRuleContext(0, VersionContext); - } public KW_SYSTEM_VERSION(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_SYSTEM_VERSION, 0); } public KW_VERSION(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_VERSION, 0); } + public INTEGER_VALUE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.INTEGER_VALUE, 0); + } + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); + } public KW_FOR(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_FOR, 0); } @@ -28596,14 +27452,14 @@ export class GroupingAnalyticsContext extends antlr.ParserRuleContext { public KW_SETS(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_SETS, 0); } - public groupingElement(): GroupingElementContext[]; - public groupingElement(i: number): GroupingElementContext | null; - public groupingElement(i?: number): GroupingElementContext[] | GroupingElementContext | null { + public groupingAnalytics(): GroupingAnalyticsContext[]; + public groupingAnalytics(i: number): GroupingAnalyticsContext | null; + public groupingAnalytics(i?: number): GroupingAnalyticsContext[] | GroupingAnalyticsContext | null { if (i === undefined) { - return this.getRuleContexts(GroupingElementContext); + return this.getRuleContexts(GroupingAnalyticsContext); } - return this.getRuleContext(i, GroupingElementContext); + return this.getRuleContext(i, GroupingAnalyticsContext); } public override get ruleIndex(): number { return SparkSqlParser.RULE_groupingAnalytics; @@ -28628,39 +27484,6 @@ export class GroupingAnalyticsContext extends antlr.ParserRuleContext { } -export class GroupingElementContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public groupingAnalytics(): GroupingAnalyticsContext | null { - return this.getRuleContext(0, GroupingAnalyticsContext); - } - public groupingSet(): GroupingSetContext | null { - return this.getRuleContext(0, GroupingSetContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_groupingElement; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterGroupingElement) { - listener.enterGroupingElement(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitGroupingElement) { - listener.exitGroupingElement(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitGroupingElement) { - return visitor.visitGroupingElement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class GroupingSetContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -28892,8 +27715,6 @@ export class PivotValueContext extends antlr.ParserRuleContext { export class UnpivotClauseContext extends antlr.ParserRuleContext { - public _nullOperator?: UnpivotNullClauseContext; - public _operator?: UnpivotOperatorContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -28906,14 +27727,23 @@ export class UnpivotClauseContext extends antlr.ParserRuleContext { public RIGHT_PAREN(): antlr.TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0)!; } - public unpivotOperator(): UnpivotOperatorContext { - return this.getRuleContext(0, UnpivotOperatorContext)!; + public unpivotSingleValueColumnClause(): UnpivotSingleValueColumnClauseContext | null { + return this.getRuleContext(0, UnpivotSingleValueColumnClauseContext); + } + public unpivotMultiValueColumnClause(): UnpivotMultiValueColumnClauseContext | null { + return this.getRuleContext(0, UnpivotMultiValueColumnClauseContext); + } + public KW_NULLS(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_NULLS, 0); } public identifier(): IdentifierContext | null { return this.getRuleContext(0, IdentifierContext); } - public unpivotNullClause(): UnpivotNullClauseContext | null { - return this.getRuleContext(0, UnpivotNullClauseContext); + public KW_INCLUDE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_INCLUDE, 0); + } + public KW_EXCLUDE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_EXCLUDE, 0); } public KW_AS(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_AS, 0); @@ -28941,90 +27771,24 @@ export class UnpivotClauseContext extends antlr.ParserRuleContext { } -export class UnpivotNullClauseContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_NULLS(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_NULLS, 0)!; - } - public KW_INCLUDE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_INCLUDE, 0); - } - public KW_EXCLUDE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_EXCLUDE, 0); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_unpivotNullClause; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterUnpivotNullClause) { - listener.enterUnpivotNullClause(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitUnpivotNullClause) { - listener.exitUnpivotNullClause(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitUnpivotNullClause) { - return visitor.visitUnpivotNullClause(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class UnpivotOperatorContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public unpivotSingleValueColumnClause(): UnpivotSingleValueColumnClauseContext | null { - return this.getRuleContext(0, UnpivotSingleValueColumnClauseContext); - } - public unpivotMultiValueColumnClause(): UnpivotMultiValueColumnClauseContext | null { - return this.getRuleContext(0, UnpivotMultiValueColumnClauseContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_unpivotOperator; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterUnpivotOperator) { - listener.enterUnpivotOperator(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitUnpivotOperator) { - listener.exitUnpivotOperator(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitUnpivotOperator) { - return visitor.visitUnpivotOperator(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class UnpivotSingleValueColumnClauseContext extends antlr.ParserRuleContext { public _unpivotColumnAndAlias?: UnpivotColumnAndAliasContext; public _unpivotColumns: UnpivotColumnAndAliasContext[] = []; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public unpivotValueColumn(): UnpivotValueColumnContext { - return this.getRuleContext(0, UnpivotValueColumnContext)!; + 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 KW_FOR(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_FOR, 0)!; } - public unpivotNameColumn(): UnpivotNameColumnContext { - return this.getRuleContext(0, UnpivotNameColumnContext)!; - } public KW_IN(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_IN, 0)!; } @@ -29076,8 +27840,8 @@ export class UnpivotSingleValueColumnClauseContext extends antlr.ParserRuleConte export class UnpivotMultiValueColumnClauseContext extends antlr.ParserRuleContext { - public _unpivotValueColumn?: UnpivotValueColumnContext; - public _unpivotValueColumns: UnpivotValueColumnContext[] = []; + public _identifier?: IdentifierContext; + public _unpivotValueColumns: IdentifierContext[] = []; public _unpivotColumnSet?: UnpivotColumnSetContext; public _unpivotColumnSets: UnpivotColumnSetContext[] = []; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { @@ -29104,20 +27868,17 @@ export class UnpivotMultiValueColumnClauseContext extends antlr.ParserRuleContex public KW_FOR(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_FOR, 0)!; } - public unpivotNameColumn(): UnpivotNameColumnContext { - return this.getRuleContext(0, UnpivotNameColumnContext)!; - } - public KW_IN(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_IN, 0)!; - } - public unpivotValueColumn(): UnpivotValueColumnContext[]; - public unpivotValueColumn(i: number): UnpivotValueColumnContext | null; - public unpivotValueColumn(i?: number): UnpivotValueColumnContext[] | UnpivotValueColumnContext | null { + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext | null; + public identifier(i?: number): IdentifierContext[] | IdentifierContext | null { if (i === undefined) { - return this.getRuleContexts(UnpivotValueColumnContext); + return this.getRuleContexts(IdentifierContext); } - return this.getRuleContext(i, UnpivotValueColumnContext); + return this.getRuleContext(i, IdentifierContext); + } + public KW_IN(): antlr.TerminalNode { + return this.getToken(SparkSqlParser.KW_IN, 0)!; } public unpivotColumnSet(): UnpivotColumnSetContext[]; public unpivotColumnSet(i: number): UnpivotColumnSetContext | null; @@ -29161,8 +27922,8 @@ export class UnpivotMultiValueColumnClauseContext extends antlr.ParserRuleContex export class UnpivotColumnSetContext extends antlr.ParserRuleContext { - public _unpivotColumn?: UnpivotColumnContext; - public _unpivotColumns: UnpivotColumnContext[] = []; + public _multipartIdentifier?: MultipartIdentifierContext; + public _unpivotColumns: MultipartIdentifierContext[] = []; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -29172,14 +27933,14 @@ export class UnpivotColumnSetContext extends antlr.ParserRuleContext { public RIGHT_PAREN(): antlr.TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0)!; } - public unpivotColumn(): UnpivotColumnContext[]; - public unpivotColumn(i: number): UnpivotColumnContext | null; - public unpivotColumn(i?: number): UnpivotColumnContext[] | UnpivotColumnContext | null { + public multipartIdentifier(): MultipartIdentifierContext[]; + public multipartIdentifier(i: number): MultipartIdentifierContext | null; + public multipartIdentifier(i?: number): MultipartIdentifierContext[] | MultipartIdentifierContext | null { if (i === undefined) { - return this.getRuleContexts(UnpivotColumnContext); + return this.getRuleContexts(MultipartIdentifierContext); } - return this.getRuleContext(i, UnpivotColumnContext); + return this.getRuleContext(i, MultipartIdentifierContext); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -29190,8 +27951,11 @@ export class UnpivotColumnSetContext extends antlr.ParserRuleContext { return this.getToken(SparkSqlParser.COMMA, i); } } - public unpivotAlias(): UnpivotAliasContext | null { - return this.getRuleContext(0, UnpivotAliasContext); + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); + } + public KW_AS(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_AS, 0); } public override get ruleIndex(): number { return SparkSqlParser.RULE_unpivotColumnSet; @@ -29216,75 +27980,18 @@ export class UnpivotColumnSetContext extends antlr.ParserRuleContext { } -export class UnpivotValueColumnContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_unpivotValueColumn; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterUnpivotValueColumn) { - listener.enterUnpivotValueColumn(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitUnpivotValueColumn) { - listener.exitUnpivotValueColumn(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitUnpivotValueColumn) { - return visitor.visitUnpivotValueColumn(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class UnpivotNameColumnContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_unpivotNameColumn; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterUnpivotNameColumn) { - listener.enterUnpivotNameColumn(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitUnpivotNameColumn) { - listener.exitUnpivotNameColumn(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitUnpivotNameColumn) { - return visitor.visitUnpivotNameColumn(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class UnpivotColumnAndAliasContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public unpivotColumn(): UnpivotColumnContext { - return this.getRuleContext(0, UnpivotColumnContext)!; + public multipartIdentifier(): MultipartIdentifierContext { + return this.getRuleContext(0, MultipartIdentifierContext)!; + } + public identifier(): IdentifierContext | null { + return this.getRuleContext(0, IdentifierContext); } - public unpivotAlias(): UnpivotAliasContext | null { - return this.getRuleContext(0, UnpivotAliasContext); + public KW_AS(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_AS, 0); } public override get ruleIndex(): number { return SparkSqlParser.RULE_unpivotColumnAndAlias; @@ -29309,69 +28016,6 @@ export class UnpivotColumnAndAliasContext extends antlr.ParserRuleContext { } -export class UnpivotColumnContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_unpivotColumn; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterUnpivotColumn) { - listener.enterUnpivotColumn(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitUnpivotColumn) { - listener.exitUnpivotColumn(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitUnpivotColumn) { - return visitor.visitUnpivotColumn(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class UnpivotAliasContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext)!; - } - public KW_AS(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_AS, 0); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_unpivotAlias; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterUnpivotAlias) { - listener.enterUnpivotAlias(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitUnpivotAlias) { - listener.exitUnpivotAlias(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitUnpivotAlias) { - return visitor.visitUnpivotAlias(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class IfNotExistsContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -29567,67 +28211,49 @@ export class RelationContext extends antlr.ParserRuleContext { public KW_LATERAL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_LATERAL, 0); } - public relationExtension(): RelationExtensionContext[]; - public relationExtension(i: number): RelationExtensionContext | null; - public relationExtension(i?: number): RelationExtensionContext[] | RelationExtensionContext | null { + public joinRelation(): JoinRelationContext[]; + public joinRelation(i: number): JoinRelationContext | null; + public joinRelation(i?: number): JoinRelationContext[] | JoinRelationContext | null { if (i === undefined) { - return this.getRuleContexts(RelationExtensionContext); - } - - return this.getRuleContext(i, RelationExtensionContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_relation; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterRelation) { - listener.enterRelation(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitRelation) { - listener.exitRelation(this); + return this.getRuleContexts(JoinRelationContext); } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitRelation) { - return visitor.visitRelation(this); - } else { - return visitor.visitChildren(this); - } - } -} - -export class RelationExtensionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); + return this.getRuleContext(i, JoinRelationContext); } - public joinRelation(): JoinRelationContext | null { - return this.getRuleContext(0, JoinRelationContext); - } - public pivotClause(): PivotClauseContext | null { - return this.getRuleContext(0, PivotClauseContext); + public pivotClause(): PivotClauseContext[]; + public pivotClause(i: number): PivotClauseContext | null; + public pivotClause(i?: number): PivotClauseContext[] | PivotClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(PivotClauseContext); + } + + return this.getRuleContext(i, PivotClauseContext); } - public unpivotClause(): UnpivotClauseContext | null { - return this.getRuleContext(0, UnpivotClauseContext); + public unpivotClause(): UnpivotClauseContext[]; + public unpivotClause(i: number): UnpivotClauseContext | null; + public unpivotClause(i?: number): UnpivotClauseContext[] | UnpivotClauseContext | null { + if (i === undefined) { + return this.getRuleContexts(UnpivotClauseContext); + } + + return this.getRuleContext(i, UnpivotClauseContext); } public override get ruleIndex(): number { - return SparkSqlParser.RULE_relationExtension; + return SparkSqlParser.RULE_relation; } public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterRelationExtension) { - listener.enterRelationExtension(this); + if(listener.enterRelation) { + listener.enterRelation(this); } } public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitRelationExtension) { - listener.exitRelationExtension(this); + if(listener.exitRelation) { + listener.exitRelation(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitRelationExtension) { - return visitor.visitRelationExtension(this); + if (visitor.visitRelation) { + return visitor.visitRelation(this); } else { return visitor.visitChildren(this); } @@ -29700,15 +28326,15 @@ export class JoinTypeContext extends antlr.ParserRuleContext { public KW_SEMI(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_SEMI, 0); } + public KW_ANTI(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_ANTI, 0); + } public KW_RIGHT(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_RIGHT, 0); } public KW_FULL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_FULL, 0); } - public KW_ANTI(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_ANTI, 0); - } public override get ruleIndex(): number { return SparkSqlParser.RULE_joinType; } @@ -30134,14 +28760,18 @@ export class IdentifierCommentListContext extends antlr.ParserRuleContext { export class IdentifierCommentContext extends antlr.ParserRuleContext { + public _comment?: StringLitContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } public columnNameCreate(): ColumnNameCreateContext { return this.getRuleContext(0, ColumnNameCreateContext)!; } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_COMMENT, 0); + } + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); } public override get ruleIndex(): number { return SparkSqlParser.RULE_identifierComment; @@ -30170,8 +28800,8 @@ export class RelationPrimaryContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public tableAlias(): TableAliasContext | null { - return this.getRuleContext(0, TableAliasContext); + public tableAlias(): TableAliasContext { + return this.getRuleContext(0, TableAliasContext)!; } public tableName(): TableNameContext | null { return this.getRuleContext(0, TableNameContext); @@ -30200,41 +28830,8 @@ export class RelationPrimaryContext extends antlr.ParserRuleContext { public relation(): RelationContext | null { return this.getRuleContext(0, RelationContext); } - public inlineTable(): InlineTableContext | null { - return this.getRuleContext(0, InlineTableContext); - } - public functionTable(): FunctionTableContext | null { - return this.getRuleContext(0, FunctionTableContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_relationPrimary; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterRelationPrimary) { - listener.enterRelationPrimary(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitRelationPrimary) { - listener.exitRelationPrimary(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitRelationPrimary) { - return visitor.visitRelationPrimary(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class InlineTableContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_VALUES(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_VALUES, 0)!; + public KW_VALUES(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_VALUES, 0); } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext | null; @@ -30245,9 +28842,6 @@ export class InlineTableContext extends antlr.ParserRuleContext { return this.getRuleContext(i, ExpressionContext); } - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext)!; - } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -30257,22 +28851,34 @@ export class InlineTableContext extends antlr.ParserRuleContext { return this.getToken(SparkSqlParser.COMMA, i); } } + public functionName(): FunctionNameContext | null { + return this.getRuleContext(0, FunctionNameContext); + } + public functionTableArgument(): FunctionTableArgumentContext[]; + public functionTableArgument(i: number): FunctionTableArgumentContext | null; + public functionTableArgument(i?: number): FunctionTableArgumentContext[] | FunctionTableArgumentContext | null { + if (i === undefined) { + return this.getRuleContexts(FunctionTableArgumentContext); + } + + return this.getRuleContext(i, FunctionTableArgumentContext); + } public override get ruleIndex(): number { - return SparkSqlParser.RULE_inlineTable; + return SparkSqlParser.RULE_relationPrimary; } public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterInlineTable) { - listener.enterInlineTable(this); + if(listener.enterRelationPrimary) { + listener.enterRelationPrimary(this); } } public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitInlineTable) { - listener.exitInlineTable(this); + if(listener.exitRelationPrimary) { + listener.exitRelationPrimary(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitInlineTable) { - return visitor.visitInlineTable(this); + if (visitor.visitRelationPrimary) { + return visitor.visitRelationPrimary(this); } else { return visitor.visitChildren(this); } @@ -30530,64 +29136,8 @@ export class FunctionTableArgumentContext extends antlr.ParserRuleContext { } -export class FunctionTableContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public functionName(): FunctionNameContext { - return this.getRuleContext(0, FunctionNameContext)!; - } - public LEFT_PAREN(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.LEFT_PAREN, 0)!; - } - public RIGHT_PAREN(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.RIGHT_PAREN, 0)!; - } - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext)!; - } - public functionTableArgument(): FunctionTableArgumentContext[]; - public functionTableArgument(i: number): FunctionTableArgumentContext | null; - public functionTableArgument(i?: number): FunctionTableArgumentContext[] | FunctionTableArgumentContext | null { - if (i === undefined) { - return this.getRuleContexts(FunctionTableArgumentContext); - } - - return this.getRuleContext(i, FunctionTableArgumentContext); - } - 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(SparkSqlParser.COMMA); - } else { - return this.getToken(SparkSqlParser.COMMA, i); - } - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_functionTable; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterFunctionTable) { - listener.enterFunctionTable(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitFunctionTable) { - listener.exitFunctionTable(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitFunctionTable) { - return visitor.visitFunctionTable(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class TableAliasContext extends antlr.ParserRuleContext { + public _alias?: StrictIdentifierContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -31140,8 +29690,8 @@ export class PartitionFieldContext extends antlr.ParserRuleContext { public transform(): TransformContext | null { return this.getRuleContext(0, TransformContext); } - public colType(): ColTypeContext | null { - return this.getRuleContext(0, ColTypeContext); + public columnType(): ColumnTypeContext | null { + return this.getRuleContext(0, ColumnTypeContext); } public override get ruleIndex(): number { return SparkSqlParser.RULE_partitionField; @@ -32936,8 +31486,14 @@ export class DataTypeContext extends antlr.ParserRuleContext { public NEQ(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.NEQ, 0); } - public complexColTypeList(): ComplexColTypeListContext | null { - return this.getRuleContext(0, ComplexColTypeListContext); + public complexColType(): ComplexColTypeContext[]; + public complexColType(i: number): ComplexColTypeContext | null; + public complexColType(i?: number): ComplexColTypeContext[] | ComplexColTypeContext | null { + if (i === undefined) { + return this.getRuleContexts(ComplexColTypeContext); + } + + return this.getRuleContext(i, ComplexColTypeContext); } public KW_INTERVAL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_INTERVAL, 0); @@ -33205,6 +31761,7 @@ export class QualifiedColTypeWithPositionForReplaceContext extends antlr.ParserR export class ColDefinitionDescriptorWithPositionContext extends antlr.ParserRuleContext { + public _comment?: StringLitContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -33214,11 +31771,17 @@ export class ColDefinitionDescriptorWithPositionContext extends antlr.ParserRule public KW_NULL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_NULL, 0); } - public defaultExpression(): DefaultExpressionContext | null { - return this.getRuleContext(0, DefaultExpressionContext); + public KW_DEFAULT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_DEFAULT, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_COMMENT, 0); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); } public colPosition(): ColPositionContext | null { return this.getRuleContext(0, ColPositionContext); @@ -33246,39 +31809,6 @@ export class ColDefinitionDescriptorWithPositionContext extends antlr.ParserRule } -export class DefaultExpressionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_DEFAULT(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_DEFAULT, 0)!; - } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_defaultExpression; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterDefaultExpression) { - listener.enterDefaultExpression(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitDefaultExpression) { - listener.exitDefaultExpression(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitDefaultExpression) { - return visitor.visitDefaultExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class VariableDefaultExpressionContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -33319,14 +31849,14 @@ export class ColTypeListContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public colType(): ColTypeContext[]; - public colType(i: number): ColTypeContext | null; - public colType(i?: number): ColTypeContext[] | ColTypeContext | null { + public columnType(): ColumnTypeContext[]; + public columnType(i: number): ColumnTypeContext | null; + public columnType(i?: number): ColumnTypeContext[] | ColumnTypeContext | null { if (i === undefined) { - return this.getRuleContexts(ColTypeContext); + return this.getRuleContexts(ColumnTypeContext); } - return this.getRuleContext(i, ColTypeContext); + return this.getRuleContext(i, ColumnTypeContext); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -33360,8 +31890,9 @@ export class ColTypeListContext extends antlr.ParserRuleContext { } -export class ColTypeContext extends antlr.ParserRuleContext { +export class ColumnTypeContext extends antlr.ParserRuleContext { public _colName?: ErrorCapturingIdentifierContext; + public _comment?: StringLitContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -33377,25 +31908,28 @@ export class ColTypeContext extends antlr.ParserRuleContext { public KW_NULL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_NULL, 0); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_COMMENT, 0); + } + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); } public override get ruleIndex(): number { - return SparkSqlParser.RULE_colType; + return SparkSqlParser.RULE_columnType; } public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterColType) { - listener.enterColType(this); + if(listener.enterColumnType) { + listener.enterColumnType(this); } } public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitColType) { - listener.exitColType(this); + if(listener.exitColumnType) { + listener.exitColumnType(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitColType) { - return visitor.visitColType(this); + if (visitor.visitColumnType) { + return visitor.visitColumnType(this); } else { return visitor.visitChildren(this); } @@ -33440,92 +31974,7 @@ export class CreateOrReplaceTableColTypeListContext extends antlr.ParserRuleCont } public override accept(visitor: SparkSqlParserVisitor): Result | null { if (visitor.visitCreateOrReplaceTableColTypeList) { - return visitor.visitCreateOrReplaceTableColTypeList(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class CreateOrReplaceTableColTypeContext extends antlr.ParserRuleContext { - public _colName?: ColumnNameCreateContext; - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public dataType(): DataTypeContext { - return this.getRuleContext(0, DataTypeContext)!; - } - public columnNameCreate(): ColumnNameCreateContext { - return this.getRuleContext(0, ColumnNameCreateContext)!; - } - public colDefinitionOption(): ColDefinitionOptionContext[]; - public colDefinitionOption(i: number): ColDefinitionOptionContext | null; - public colDefinitionOption(i?: number): ColDefinitionOptionContext[] | ColDefinitionOptionContext | null { - if (i === undefined) { - return this.getRuleContexts(ColDefinitionOptionContext); - } - - return this.getRuleContext(i, ColDefinitionOptionContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_createOrReplaceTableColType; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterCreateOrReplaceTableColType) { - listener.enterCreateOrReplaceTableColType(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitCreateOrReplaceTableColType) { - listener.exitCreateOrReplaceTableColType(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitCreateOrReplaceTableColType) { - return visitor.visitCreateOrReplaceTableColType(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ColDefinitionOptionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_NOT(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_NOT, 0); - } - public KW_NULL(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_NULL, 0); - } - public defaultExpression(): DefaultExpressionContext | null { - return this.getRuleContext(0, DefaultExpressionContext); - } - public generationExpression(): GenerationExpressionContext | null { - return this.getRuleContext(0, GenerationExpressionContext); - } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_colDefinitionOption; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterColDefinitionOption) { - listener.enterColDefinitionOption(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitColDefinitionOption) { - listener.exitColDefinitionOption(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitColDefinitionOption) { - return visitor.visitColDefinitionOption(this); + return visitor.visitCreateOrReplaceTableColTypeList(this); } else { return visitor.visitChildren(this); } @@ -33533,44 +31982,43 @@ export class ColDefinitionOptionContext extends antlr.ParserRuleContext { } -export class GenerationExpressionContext extends antlr.ParserRuleContext { +export class CreateOrReplaceTableColTypeContext extends antlr.ParserRuleContext { + public _colName?: ColumnNameCreateContext; + public _colType?: DataTypeContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public KW_GENERATED(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_GENERATED, 0)!; - } - public KW_ALWAYS(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_ALWAYS, 0)!; - } - public KW_AS(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_AS, 0)!; - } - public LEFT_PAREN(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.LEFT_PAREN, 0)!; + public columnNameCreate(): ColumnNameCreateContext { + return this.getRuleContext(0, ColumnNameCreateContext)!; } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext)!; + public dataType(): DataTypeContext { + return this.getRuleContext(0, DataTypeContext)!; } - public RIGHT_PAREN(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.RIGHT_PAREN, 0)!; + public colDefinitionOption(): ColDefinitionOptionContext[]; + public colDefinitionOption(i: number): ColDefinitionOptionContext | null; + public colDefinitionOption(i?: number): ColDefinitionOptionContext[] | ColDefinitionOptionContext | null { + if (i === undefined) { + return this.getRuleContexts(ColDefinitionOptionContext); + } + + return this.getRuleContext(i, ColDefinitionOptionContext); } public override get ruleIndex(): number { - return SparkSqlParser.RULE_generationExpression; + return SparkSqlParser.RULE_createOrReplaceTableColType; } public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterGenerationExpression) { - listener.enterGenerationExpression(this); + if(listener.enterCreateOrReplaceTableColType) { + listener.enterCreateOrReplaceTableColType(this); } } public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitGenerationExpression) { - listener.exitGenerationExpression(this); + if(listener.exitCreateOrReplaceTableColType) { + listener.exitCreateOrReplaceTableColType(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitGenerationExpression) { - return visitor.visitGenerationExpression(this); + if (visitor.visitCreateOrReplaceTableColType) { + return visitor.visitCreateOrReplaceTableColType(this); } else { return visitor.visitChildren(this); } @@ -33578,44 +32026,60 @@ export class GenerationExpressionContext extends antlr.ParserRuleContext { } -export class ComplexColTypeListContext extends antlr.ParserRuleContext { +export class ColDefinitionOptionContext extends antlr.ParserRuleContext { + public _comment?: StringLitContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public complexColType(): ComplexColTypeContext[]; - public complexColType(i: number): ComplexColTypeContext | null; - public complexColType(i?: number): ComplexColTypeContext[] | ComplexColTypeContext | null { - if (i === undefined) { - return this.getRuleContexts(ComplexColTypeContext); - } - - return this.getRuleContext(i, ComplexColTypeContext); + public KW_NOT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_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(SparkSqlParser.COMMA); - } else { - return this.getToken(SparkSqlParser.COMMA, i); - } + public KW_NULL(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_NULL, 0); + } + public KW_DEFAULT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_DEFAULT, 0); + } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } + public KW_GENERATED(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_GENERATED, 0); + } + public KW_ALWAYS(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_ALWAYS, 0); + } + public KW_AS(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_AS, 0); + } + public LEFT_PAREN(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.LEFT_PAREN, 0); + } + public RIGHT_PAREN(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); + } + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_COMMENT, 0); + } + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); } public override get ruleIndex(): number { - return SparkSqlParser.RULE_complexColTypeList; + return SparkSqlParser.RULE_colDefinitionOption; } public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterComplexColTypeList) { - listener.enterComplexColTypeList(this); + if(listener.enterColDefinitionOption) { + listener.enterColDefinitionOption(this); } } public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitComplexColTypeList) { - listener.exitComplexColTypeList(this); + if(listener.exitColDefinitionOption) { + listener.exitColDefinitionOption(this); } } public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitComplexColTypeList) { - return visitor.visitComplexColTypeList(this); + if (visitor.visitColDefinitionOption) { + return visitor.visitColDefinitionOption(this); } else { return visitor.visitChildren(this); } @@ -33624,6 +32088,7 @@ export class ComplexColTypeListContext extends antlr.ParserRuleContext { export class ComplexColTypeContext extends antlr.ParserRuleContext { + public _comment?: StringLitContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -33642,8 +32107,11 @@ export class ComplexColTypeContext extends antlr.ParserRuleContext { public KW_NULL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_NULL, 0); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_COMMENT, 0); + } + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); } public override get ruleIndex(): number { return SparkSqlParser.RULE_complexColType; @@ -33713,20 +32181,39 @@ export class WhenClauseContext extends antlr.ParserRuleContext { export class WindowClauseContext extends antlr.ParserRuleContext { + public _name?: ErrorCapturingIdentifierContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } public KW_WINDOW(): antlr.TerminalNode { return this.getToken(SparkSqlParser.KW_WINDOW, 0)!; } - public namedWindow(): NamedWindowContext[]; - public namedWindow(i: number): NamedWindowContext | null; - public namedWindow(i?: number): NamedWindowContext[] | NamedWindowContext | null { + public KW_AS(): antlr.TerminalNode[]; + public KW_AS(i: number): antlr.TerminalNode | null; + public KW_AS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_AS); + } else { + return this.getToken(SparkSqlParser.KW_AS, i); + } + } + public windowSpec(): WindowSpecContext[]; + public windowSpec(i: number): WindowSpecContext | null; + public windowSpec(i?: number): WindowSpecContext[] | WindowSpecContext | null { + if (i === undefined) { + return this.getRuleContexts(WindowSpecContext); + } + + return this.getRuleContext(i, WindowSpecContext); + } + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext[]; + public errorCapturingIdentifier(i: number): ErrorCapturingIdentifierContext | null; + public errorCapturingIdentifier(i?: number): ErrorCapturingIdentifierContext[] | ErrorCapturingIdentifierContext | null { if (i === undefined) { - return this.getRuleContexts(NamedWindowContext); + return this.getRuleContexts(ErrorCapturingIdentifierContext); } - return this.getRuleContext(i, NamedWindowContext); + return this.getRuleContext(i, ErrorCapturingIdentifierContext); } public COMMA(): antlr.TerminalNode[]; public COMMA(i: number): antlr.TerminalNode | null; @@ -33760,79 +32247,6 @@ export class WindowClauseContext extends antlr.ParserRuleContext { } -export class ZorderClauseContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_ZORDER(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_ZORDER, 0)!; - } - public KW_BY(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_BY, 0)!; - } - public columnNameSeq(): ColumnNameSeqContext { - return this.getRuleContext(0, ColumnNameSeqContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_zorderClause; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterZorderClause) { - listener.enterZorderClause(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitZorderClause) { - listener.exitZorderClause(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitZorderClause) { - return visitor.visitZorderClause(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class NamedWindowContext extends antlr.ParserRuleContext { - public _name?: ErrorCapturingIdentifierContext; - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public KW_AS(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.KW_AS, 0)!; - } - public windowSpec(): WindowSpecContext { - return this.getRuleContext(0, WindowSpecContext)!; - } - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { - return this.getRuleContext(0, ErrorCapturingIdentifierContext)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_namedWindow; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterNamedWindow) { - listener.enterNamedWindow(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitNamedWindow) { - listener.exitNamedWindow(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitNamedWindow) { - return visitor.visitNamedWindow(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class WindowSpecContext extends antlr.ParserRuleContext { public _name?: ErrorCapturingIdentifierContext; public _expression?: ExpressionContext; @@ -33933,9 +32347,6 @@ export class WindowFrameContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } - public KW_RANGE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_RANGE, 0); - } public frameBound(): FrameBoundContext[]; public frameBound(i: number): FrameBoundContext | null; public frameBound(i?: number): FrameBoundContext[] | FrameBoundContext | null { @@ -33945,6 +32356,9 @@ export class WindowFrameContext extends antlr.ParserRuleContext { return this.getRuleContext(i, FrameBoundContext); } + public KW_RANGE(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_RANGE, 0); + } public KW_ROWS(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_ROWS, 0); } @@ -34377,36 +32791,6 @@ export class QuotedIdentifierContext extends antlr.ParserRuleContext { } -export class BackQuotedIdentifierContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public BACKQUOTED_IDENTIFIER(): antlr.TerminalNode { - return this.getToken(SparkSqlParser.BACKQUOTED_IDENTIFIER, 0)!; - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_backQuotedIdentifier; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterBackQuotedIdentifier) { - listener.enterBackQuotedIdentifier(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitBackQuotedIdentifier) { - listener.exitBackQuotedIdentifier(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitBackQuotedIdentifier) { - return visitor.visitBackQuotedIdentifier(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class NumberContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); @@ -34414,9 +32798,6 @@ export class NumberContext extends antlr.ParserRuleContext { public EXPONENT_VALUE(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.EXPONENT_VALUE, 0); } - public MINUS(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.MINUS, 0); - } public DECIMAL_VALUE(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.DECIMAL_VALUE, 0); } @@ -34441,6 +32822,9 @@ export class NumberContext extends antlr.ParserRuleContext { public BIGDECIMAL_LITERAL(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.BIGDECIMAL_LITERAL, 0); } + public MINUS(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.MINUS, 0); + } public override get ruleIndex(): number { return SparkSqlParser.RULE_number; } @@ -34465,6 +32849,7 @@ export class NumberContext extends antlr.ParserRuleContext { export class AlterColumnActionContext extends antlr.ParserRuleContext { + public _comment?: StringLitContext; public _setOrDrop?: Token | null; public _dropDefault?: Token | null; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { @@ -34476,8 +32861,11 @@ export class AlterColumnActionContext extends antlr.ParserRuleContext { public dataType(): DataTypeContext | null { return this.getRuleContext(0, DataTypeContext); } - public commentSpec(): CommentSpecContext | null { - return this.getRuleContext(0, CommentSpecContext); + public KW_COMMENT(): antlr.TerminalNode | null { + return this.getToken(SparkSqlParser.KW_COMMENT, 0); + } + public stringLit(): StringLitContext | null { + return this.getRuleContext(0, StringLitContext); } public colPosition(): ColPositionContext | null { return this.getRuleContext(0, ColPositionContext); @@ -34494,12 +32882,12 @@ export class AlterColumnActionContext extends antlr.ParserRuleContext { public KW_DROP(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_DROP, 0); } - public defaultExpression(): DefaultExpressionContext | null { - return this.getRuleContext(0, DefaultExpressionContext); - } public KW_DEFAULT(): antlr.TerminalNode | null { return this.getToken(SparkSqlParser.KW_DEFAULT, 0); } + public expression(): ExpressionContext | null { + return this.getRuleContext(0, ExpressionContext); + } public override get ruleIndex(): number { return SparkSqlParser.RULE_alterColumnAction; } @@ -34556,72 +32944,6 @@ export class StringLitContext extends antlr.ParserRuleContext { } -export class CommentContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public stringLit(): StringLitContext | null { - return this.getRuleContext(0, StringLitContext); - } - public KW_NULL(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.KW_NULL, 0); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_comment; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterComment) { - listener.enterComment(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitComment) { - listener.exitComment(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitComment) { - return visitor.visitComment(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class VersionContext extends antlr.ParserRuleContext { - public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { - super(parent, invokingState); - } - public INTEGER_VALUE(): antlr.TerminalNode | null { - return this.getToken(SparkSqlParser.INTEGER_VALUE, 0); - } - public stringLit(): StringLitContext | null { - return this.getRuleContext(0, StringLitContext); - } - public override get ruleIndex(): number { - return SparkSqlParser.RULE_version; - } - public override enterRule(listener: SparkSqlParserListener): void { - if(listener.enterVersion) { - listener.enterVersion(this); - } - } - public override exitRule(listener: SparkSqlParserListener): void { - if(listener.exitVersion) { - listener.exitVersion(this); - } - } - public override accept(visitor: SparkSqlParserVisitor): Result | null { - if (visitor.visitVersion) { - return visitor.visitVersion(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class AnsiNonReservedContext extends antlr.ParserRuleContext { public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); diff --git a/src/lib/spark/SparkSqlParserListener.ts b/src/lib/spark/SparkSqlParserListener.ts index a304ff65f..d6699132f 100644 --- a/src/lib/spark/SparkSqlParserListener.ts +++ b/src/lib/spark/SparkSqlParserListener.ts @@ -72,7 +72,6 @@ import { DescribeFunctionContext } from "./SparkSqlParser.js"; import { DescribeNamespaceContext } from "./SparkSqlParser.js"; import { DescribeRelationContext } from "./SparkSqlParser.js"; import { DescribeQueryContext } from "./SparkSqlParser.js"; -import { CommentNamespaceContext } from "./SparkSqlParser.js"; import { CommentTableContext } from "./SparkSqlParser.js"; import { RefreshTableContext } from "./SparkSqlParser.js"; import { RefreshFunctionContext } from "./SparkSqlParser.js"; @@ -101,23 +100,15 @@ import { CreateIndexContext } from "./SparkSqlParser.js"; import { DropIndexContext } from "./SparkSqlParser.js"; import { OptimizeTableContext } from "./SparkSqlParser.js"; import { UnsupportHiveCommandsContext } from "./SparkSqlParser.js"; -import { TimezoneContext } from "./SparkSqlParser.js"; -import { ConfigKeyContext } from "./SparkSqlParser.js"; -import { ConfigValueContext } from "./SparkSqlParser.js"; import { UnsupportedHiveNativeCommandsContext } from "./SparkSqlParser.js"; -import { CreateTableHeaderContext } from "./SparkSqlParser.js"; -import { ReplaceTableHeaderContext } from "./SparkSqlParser.js"; import { BucketSpecContext } from "./SparkSqlParser.js"; import { SkewSpecContext } from "./SparkSqlParser.js"; -import { LocationSpecContext } from "./SparkSqlParser.js"; -import { CommentSpecContext } from "./SparkSqlParser.js"; import { QueryStatementContext } from "./SparkSqlParser.js"; import { InsertIntoContext } from "./SparkSqlParser.js"; import { PartitionSpecLocationContext } from "./SparkSqlParser.js"; import { PartitionSpecContext } from "./SparkSqlParser.js"; import { PartitionValContext } from "./SparkSqlParser.js"; import { NamespaceContext } from "./SparkSqlParser.js"; -import { NamespacesContext } from "./SparkSqlParser.js"; import { DescribeFuncNameContext } from "./SparkSqlParser.js"; import { DescribeColNameContext } from "./SparkSqlParser.js"; import { CtesContext } from "./SparkSqlParser.js"; @@ -136,7 +127,6 @@ import { NestedConstantListContext } from "./SparkSqlParser.js"; import { CreateFileFormatContext } from "./SparkSqlParser.js"; import { FileFormatContext } from "./SparkSqlParser.js"; import { StorageHandlerContext } from "./SparkSqlParser.js"; -import { ResourceContext } from "./SparkSqlParser.js"; import { InsertFromQueryContext } from "./SparkSqlParser.js"; import { MultipleInsertContext } from "./SparkSqlParser.js"; import { DeleteFromTableContext } from "./SparkSqlParser.js"; @@ -153,11 +143,9 @@ import { ColumnNameSeqContext } from "./SparkSqlParser.js"; import { ColumnNameCreateContext } from "./SparkSqlParser.js"; import { IdentifierReferenceContext } from "./SparkSqlParser.js"; import { QueryOrganizationContext } from "./SparkSqlParser.js"; -import { MultiInsertQueryBodyContext } from "./SparkSqlParser.js"; import { QueryTermContext } from "./SparkSqlParser.js"; import { QueryPrimaryContext } from "./SparkSqlParser.js"; import { SortItemContext } from "./SparkSqlParser.js"; -import { FromStatementContext } from "./SparkSqlParser.js"; import { FromStatementBodyContext } from "./SparkSqlParser.js"; import { QuerySpecificationContext } from "./SparkSqlParser.js"; import { TransformClauseContext } from "./SparkSqlParser.js"; @@ -166,9 +154,7 @@ import { SetClauseContext } from "./SparkSqlParser.js"; import { MatchedClauseContext } from "./SparkSqlParser.js"; import { NotMatchedClauseContext } from "./SparkSqlParser.js"; import { NotMatchedBySourceClauseContext } from "./SparkSqlParser.js"; -import { MatchedActionContext } from "./SparkSqlParser.js"; import { NotMatchedActionContext } from "./SparkSqlParser.js"; -import { NotMatchedBySourceActionContext } from "./SparkSqlParser.js"; import { AssignmentListContext } from "./SparkSqlParser.js"; import { AssignmentContext } from "./SparkSqlParser.js"; import { WhereClauseContext } from "./SparkSqlParser.js"; @@ -176,33 +162,24 @@ import { HavingClauseContext } from "./SparkSqlParser.js"; import { HintContext } from "./SparkSqlParser.js"; import { HintStatementContext } from "./SparkSqlParser.js"; import { FromClauseContext } from "./SparkSqlParser.js"; -import { FunctionKindContext } from "./SparkSqlParser.js"; import { TemporalClauseContext } from "./SparkSqlParser.js"; import { AggregationClauseContext } from "./SparkSqlParser.js"; import { GroupByClauseContext } from "./SparkSqlParser.js"; import { GroupingAnalyticsContext } from "./SparkSqlParser.js"; -import { GroupingElementContext } from "./SparkSqlParser.js"; import { GroupingSetContext } from "./SparkSqlParser.js"; import { PivotClauseContext } from "./SparkSqlParser.js"; import { PivotColumnContext } from "./SparkSqlParser.js"; import { PivotValueContext } from "./SparkSqlParser.js"; import { UnpivotClauseContext } from "./SparkSqlParser.js"; -import { UnpivotNullClauseContext } from "./SparkSqlParser.js"; -import { UnpivotOperatorContext } from "./SparkSqlParser.js"; import { UnpivotSingleValueColumnClauseContext } from "./SparkSqlParser.js"; import { UnpivotMultiValueColumnClauseContext } from "./SparkSqlParser.js"; import { UnpivotColumnSetContext } from "./SparkSqlParser.js"; -import { UnpivotValueColumnContext } from "./SparkSqlParser.js"; -import { UnpivotNameColumnContext } from "./SparkSqlParser.js"; import { UnpivotColumnAndAliasContext } from "./SparkSqlParser.js"; -import { UnpivotColumnContext } from "./SparkSqlParser.js"; -import { UnpivotAliasContext } from "./SparkSqlParser.js"; import { IfNotExistsContext } from "./SparkSqlParser.js"; import { IfExistsContext } from "./SparkSqlParser.js"; import { LateralViewContext } from "./SparkSqlParser.js"; import { SetQuantifierContext } from "./SparkSqlParser.js"; import { RelationContext } from "./SparkSqlParser.js"; -import { RelationExtensionContext } from "./SparkSqlParser.js"; import { JoinRelationContext } from "./SparkSqlParser.js"; import { JoinTypeContext } from "./SparkSqlParser.js"; import { JoinCriteriaContext } from "./SparkSqlParser.js"; @@ -215,13 +192,11 @@ import { OrderedIdentifierContext } from "./SparkSqlParser.js"; import { IdentifierCommentListContext } from "./SparkSqlParser.js"; import { IdentifierCommentContext } from "./SparkSqlParser.js"; import { RelationPrimaryContext } from "./SparkSqlParser.js"; -import { InlineTableContext } from "./SparkSqlParser.js"; import { FunctionTableSubqueryArgumentContext } from "./SparkSqlParser.js"; import { TableArgumentPartitioningContext } from "./SparkSqlParser.js"; import { FunctionTableNamedArgumentExpressionContext } from "./SparkSqlParser.js"; import { FunctionTableReferenceArgumentContext } from "./SparkSqlParser.js"; import { FunctionTableArgumentContext } from "./SparkSqlParser.js"; -import { FunctionTableContext } from "./SparkSqlParser.js"; import { TableAliasContext } from "./SparkSqlParser.js"; import { RowFormatContext } from "./SparkSqlParser.js"; import { MultipartIdentifierListContext } from "./SparkSqlParser.js"; @@ -267,20 +242,15 @@ import { QualifiedColTypeWithPositionForAddContext } from "./SparkSqlParser.js"; import { QualifiedColTypeWithPositionSeqForReplaceContext } from "./SparkSqlParser.js"; import { QualifiedColTypeWithPositionForReplaceContext } from "./SparkSqlParser.js"; import { ColDefinitionDescriptorWithPositionContext } from "./SparkSqlParser.js"; -import { DefaultExpressionContext } from "./SparkSqlParser.js"; import { VariableDefaultExpressionContext } from "./SparkSqlParser.js"; import { ColTypeListContext } from "./SparkSqlParser.js"; -import { ColTypeContext } from "./SparkSqlParser.js"; +import { ColumnTypeContext } from "./SparkSqlParser.js"; import { CreateOrReplaceTableColTypeListContext } from "./SparkSqlParser.js"; import { CreateOrReplaceTableColTypeContext } from "./SparkSqlParser.js"; import { ColDefinitionOptionContext } from "./SparkSqlParser.js"; -import { GenerationExpressionContext } from "./SparkSqlParser.js"; -import { ComplexColTypeListContext } from "./SparkSqlParser.js"; import { ComplexColTypeContext } from "./SparkSqlParser.js"; import { WhenClauseContext } from "./SparkSqlParser.js"; import { WindowClauseContext } from "./SparkSqlParser.js"; -import { ZorderClauseContext } from "./SparkSqlParser.js"; -import { NamedWindowContext } from "./SparkSqlParser.js"; import { WindowSpecContext } from "./SparkSqlParser.js"; import { WindowFrameContext } from "./SparkSqlParser.js"; import { FrameBoundContext } from "./SparkSqlParser.js"; @@ -293,12 +263,9 @@ import { ErrorCapturingIdentifierExtraContext } from "./SparkSqlParser.js"; import { IdentifierContext } from "./SparkSqlParser.js"; import { StrictIdentifierContext } from "./SparkSqlParser.js"; import { QuotedIdentifierContext } from "./SparkSqlParser.js"; -import { BackQuotedIdentifierContext } from "./SparkSqlParser.js"; import { NumberContext } from "./SparkSqlParser.js"; import { AlterColumnActionContext } from "./SparkSqlParser.js"; import { StringLitContext } from "./SparkSqlParser.js"; -import { CommentContext } from "./SparkSqlParser.js"; -import { VersionContext } from "./SparkSqlParser.js"; import { AnsiNonReservedContext } from "./SparkSqlParser.js"; import { StrictNonReservedContext } from "./SparkSqlParser.js"; import { NonReservedContext } from "./SparkSqlParser.js"; @@ -1073,18 +1040,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitDescribeQuery?: (ctx: DescribeQueryContext) => void; - /** - * Enter a parse tree produced by the `commentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCommentNamespace?: (ctx: CommentNamespaceContext) => void; - /** - * Exit a parse tree produced by the `commentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCommentNamespace?: (ctx: CommentNamespaceContext) => void; /** * Enter a parse tree produced by the `commentTable` * labeled alternative in `SparkSqlParser.statement`. @@ -1421,36 +1376,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitUnsupportHiveCommands?: (ctx: UnsupportHiveCommandsContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.timezone`. - * @param ctx the parse tree - */ - enterTimezone?: (ctx: TimezoneContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.timezone`. - * @param ctx the parse tree - */ - exitTimezone?: (ctx: TimezoneContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.configKey`. - * @param ctx the parse tree - */ - enterConfigKey?: (ctx: ConfigKeyContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.configKey`. - * @param ctx the parse tree - */ - exitConfigKey?: (ctx: ConfigKeyContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.configValue`. - * @param ctx the parse tree - */ - enterConfigValue?: (ctx: ConfigValueContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.configValue`. - * @param ctx the parse tree - */ - exitConfigValue?: (ctx: ConfigValueContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. * @param ctx the parse tree @@ -1461,26 +1386,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.createTableHeader`. - * @param ctx the parse tree - */ - enterCreateTableHeader?: (ctx: CreateTableHeaderContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.createTableHeader`. - * @param ctx the parse tree - */ - exitCreateTableHeader?: (ctx: CreateTableHeaderContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.replaceTableHeader`. - * @param ctx the parse tree - */ - enterReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.replaceTableHeader`. - * @param ctx the parse tree - */ - exitReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.bucketSpec`. * @param ctx the parse tree @@ -1501,26 +1406,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitSkewSpec?: (ctx: SkewSpecContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.locationSpec`. - * @param ctx the parse tree - */ - enterLocationSpec?: (ctx: LocationSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.locationSpec`. - * @param ctx the parse tree - */ - exitLocationSpec?: (ctx: LocationSpecContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.commentSpec`. - * @param ctx the parse tree - */ - enterCommentSpec?: (ctx: CommentSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.commentSpec`. - * @param ctx the parse tree - */ - exitCommentSpec?: (ctx: CommentSpecContext) => void; /** * Enter a parse tree produced by the `queryStatement` * labeled alternative in `SparkSqlParser.query`. @@ -1583,16 +1468,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitNamespace?: (ctx: NamespaceContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.namespaces`. - * @param ctx the parse tree - */ - enterNamespaces?: (ctx: NamespacesContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.namespaces`. - * @param ctx the parse tree - */ - exitNamespaces?: (ctx: NamespacesContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.describeFuncName`. * @param ctx the parse tree @@ -1773,16 +1648,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitStorageHandler?: (ctx: StorageHandlerContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.resource`. - * @param ctx the parse tree - */ - enterResource?: (ctx: ResourceContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.resource`. - * @param ctx the parse tree - */ - exitResource?: (ctx: ResourceContext) => void; /** * Enter a parse tree produced by the `insertFromQuery` * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. @@ -1953,16 +1818,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitQueryOrganization?: (ctx: QueryOrganizationContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. - * @param ctx the parse tree - */ - enterMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. - * @param ctx the parse tree - */ - exitMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.queryTerm`. * @param ctx the parse tree @@ -1993,16 +1848,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitSortItem?: (ctx: SortItemContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.fromStatement`. - * @param ctx the parse tree - */ - enterFromStatement?: (ctx: FromStatementContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.fromStatement`. - * @param ctx the parse tree - */ - exitFromStatement?: (ctx: FromStatementContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.fromStatementBody`. * @param ctx the parse tree @@ -2083,16 +1928,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitNotMatchedBySourceClause?: (ctx: NotMatchedBySourceClauseContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.matchedAction`. - * @param ctx the parse tree - */ - enterMatchedAction?: (ctx: MatchedActionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.matchedAction`. - * @param ctx the parse tree - */ - exitMatchedAction?: (ctx: MatchedActionContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.notMatchedAction`. * @param ctx the parse tree @@ -2103,16 +1938,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitNotMatchedAction?: (ctx: NotMatchedActionContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.notMatchedBySourceAction`. - * @param ctx the parse tree - */ - enterNotMatchedBySourceAction?: (ctx: NotMatchedBySourceActionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.notMatchedBySourceAction`. - * @param ctx the parse tree - */ - exitNotMatchedBySourceAction?: (ctx: NotMatchedBySourceActionContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.assignmentList`. * @param ctx the parse tree @@ -2183,16 +2008,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitFromClause?: (ctx: FromClauseContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.functionKind`. - * @param ctx the parse tree - */ - enterFunctionKind?: (ctx: FunctionKindContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.functionKind`. - * @param ctx the parse tree - */ - exitFunctionKind?: (ctx: FunctionKindContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.temporalClause`. * @param ctx the parse tree @@ -2233,16 +2048,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitGroupingAnalytics?: (ctx: GroupingAnalyticsContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.groupingElement`. - * @param ctx the parse tree - */ - enterGroupingElement?: (ctx: GroupingElementContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.groupingElement`. - * @param ctx the parse tree - */ - exitGroupingElement?: (ctx: GroupingElementContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.groupingSet`. * @param ctx the parse tree @@ -2293,26 +2098,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitUnpivotClause?: (ctx: UnpivotClauseContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.unpivotNullClause`. - * @param ctx the parse tree - */ - enterUnpivotNullClause?: (ctx: UnpivotNullClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unpivotNullClause`. - * @param ctx the parse tree - */ - exitUnpivotNullClause?: (ctx: UnpivotNullClauseContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.unpivotOperator`. - * @param ctx the parse tree - */ - enterUnpivotOperator?: (ctx: UnpivotOperatorContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unpivotOperator`. - * @param ctx the parse tree - */ - exitUnpivotOperator?: (ctx: UnpivotOperatorContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.unpivotSingleValueColumnClause`. * @param ctx the parse tree @@ -2343,26 +2128,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitUnpivotColumnSet?: (ctx: UnpivotColumnSetContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.unpivotValueColumn`. - * @param ctx the parse tree - */ - enterUnpivotValueColumn?: (ctx: UnpivotValueColumnContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unpivotValueColumn`. - * @param ctx the parse tree - */ - exitUnpivotValueColumn?: (ctx: UnpivotValueColumnContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.unpivotNameColumn`. - * @param ctx the parse tree - */ - enterUnpivotNameColumn?: (ctx: UnpivotNameColumnContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unpivotNameColumn`. - * @param ctx the parse tree - */ - exitUnpivotNameColumn?: (ctx: UnpivotNameColumnContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.unpivotColumnAndAlias`. * @param ctx the parse tree @@ -2373,26 +2138,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitUnpivotColumnAndAlias?: (ctx: UnpivotColumnAndAliasContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.unpivotColumn`. - * @param ctx the parse tree - */ - enterUnpivotColumn?: (ctx: UnpivotColumnContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unpivotColumn`. - * @param ctx the parse tree - */ - exitUnpivotColumn?: (ctx: UnpivotColumnContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.unpivotAlias`. - * @param ctx the parse tree - */ - enterUnpivotAlias?: (ctx: UnpivotAliasContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unpivotAlias`. - * @param ctx the parse tree - */ - exitUnpivotAlias?: (ctx: UnpivotAliasContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.ifNotExists`. * @param ctx the parse tree @@ -2443,16 +2188,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitRelation?: (ctx: RelationContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.relationExtension`. - * @param ctx the parse tree - */ - enterRelationExtension?: (ctx: RelationExtensionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.relationExtension`. - * @param ctx the parse tree - */ - exitRelationExtension?: (ctx: RelationExtensionContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.joinRelation`. * @param ctx the parse tree @@ -2573,16 +2308,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitRelationPrimary?: (ctx: RelationPrimaryContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.inlineTable`. - * @param ctx the parse tree - */ - enterInlineTable?: (ctx: InlineTableContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.inlineTable`. - * @param ctx the parse tree - */ - exitInlineTable?: (ctx: InlineTableContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.functionTableSubqueryArgument`. * @param ctx the parse tree @@ -2633,16 +2358,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitFunctionTableArgument?: (ctx: FunctionTableArgumentContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.functionTable`. - * @param ctx the parse tree - */ - enterFunctionTable?: (ctx: FunctionTableContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.functionTable`. - * @param ctx the parse tree - */ - exitFunctionTable?: (ctx: FunctionTableContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.tableAlias`. * @param ctx the parse tree @@ -3093,16 +2808,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitColDefinitionDescriptorWithPosition?: (ctx: ColDefinitionDescriptorWithPositionContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.defaultExpression`. - * @param ctx the parse tree - */ - enterDefaultExpression?: (ctx: DefaultExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.defaultExpression`. - * @param ctx the parse tree - */ - exitDefaultExpression?: (ctx: DefaultExpressionContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.variableDefaultExpression`. * @param ctx the parse tree @@ -3124,15 +2829,15 @@ export class SparkSqlParserListener implements ParseTreeListener { */ exitColTypeList?: (ctx: ColTypeListContext) => void; /** - * Enter a parse tree produced by `SparkSqlParser.colType`. + * Enter a parse tree produced by `SparkSqlParser.columnType`. * @param ctx the parse tree */ - enterColType?: (ctx: ColTypeContext) => void; + enterColumnType?: (ctx: ColumnTypeContext) => void; /** - * Exit a parse tree produced by `SparkSqlParser.colType`. + * Exit a parse tree produced by `SparkSqlParser.columnType`. * @param ctx the parse tree */ - exitColType?: (ctx: ColTypeContext) => void; + exitColumnType?: (ctx: ColumnTypeContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.createOrReplaceTableColTypeList`. * @param ctx the parse tree @@ -3163,26 +2868,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitColDefinitionOption?: (ctx: ColDefinitionOptionContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.generationExpression`. - * @param ctx the parse tree - */ - enterGenerationExpression?: (ctx: GenerationExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.generationExpression`. - * @param ctx the parse tree - */ - exitGenerationExpression?: (ctx: GenerationExpressionContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.complexColTypeList`. - * @param ctx the parse tree - */ - enterComplexColTypeList?: (ctx: ComplexColTypeListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.complexColTypeList`. - * @param ctx the parse tree - */ - exitComplexColTypeList?: (ctx: ComplexColTypeListContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.complexColType`. * @param ctx the parse tree @@ -3213,26 +2898,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitWindowClause?: (ctx: WindowClauseContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.zorderClause`. - * @param ctx the parse tree - */ - enterZorderClause?: (ctx: ZorderClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.zorderClause`. - * @param ctx the parse tree - */ - exitZorderClause?: (ctx: ZorderClauseContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.namedWindow`. - * @param ctx the parse tree - */ - enterNamedWindow?: (ctx: NamedWindowContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.namedWindow`. - * @param ctx the parse tree - */ - exitNamedWindow?: (ctx: NamedWindowContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.windowSpec`. * @param ctx the parse tree @@ -3353,16 +3018,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.backQuotedIdentifier`. - * @param ctx the parse tree - */ - enterBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.backQuotedIdentifier`. - * @param ctx the parse tree - */ - exitBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.number`. * @param ctx the parse tree @@ -3393,26 +3048,6 @@ export class SparkSqlParserListener implements ParseTreeListener { * @param ctx the parse tree */ exitStringLit?: (ctx: StringLitContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.comment`. - * @param ctx the parse tree - */ - enterComment?: (ctx: CommentContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.comment`. - * @param ctx the parse tree - */ - exitComment?: (ctx: CommentContext) => void; - /** - * Enter a parse tree produced by `SparkSqlParser.version`. - * @param ctx the parse tree - */ - enterVersion?: (ctx: VersionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.version`. - * @param ctx the parse tree - */ - exitVersion?: (ctx: VersionContext) => void; /** * Enter a parse tree produced by `SparkSqlParser.ansiNonReserved`. * @param ctx the parse tree diff --git a/src/lib/spark/SparkSqlParserVisitor.ts b/src/lib/spark/SparkSqlParserVisitor.ts index cec7c43a2..b8108f00a 100644 --- a/src/lib/spark/SparkSqlParserVisitor.ts +++ b/src/lib/spark/SparkSqlParserVisitor.ts @@ -72,7 +72,6 @@ import { DescribeFunctionContext } from "./SparkSqlParser.js"; import { DescribeNamespaceContext } from "./SparkSqlParser.js"; import { DescribeRelationContext } from "./SparkSqlParser.js"; import { DescribeQueryContext } from "./SparkSqlParser.js"; -import { CommentNamespaceContext } from "./SparkSqlParser.js"; import { CommentTableContext } from "./SparkSqlParser.js"; import { RefreshTableContext } from "./SparkSqlParser.js"; import { RefreshFunctionContext } from "./SparkSqlParser.js"; @@ -101,23 +100,15 @@ import { CreateIndexContext } from "./SparkSqlParser.js"; import { DropIndexContext } from "./SparkSqlParser.js"; import { OptimizeTableContext } from "./SparkSqlParser.js"; import { UnsupportHiveCommandsContext } from "./SparkSqlParser.js"; -import { TimezoneContext } from "./SparkSqlParser.js"; -import { ConfigKeyContext } from "./SparkSqlParser.js"; -import { ConfigValueContext } from "./SparkSqlParser.js"; import { UnsupportedHiveNativeCommandsContext } from "./SparkSqlParser.js"; -import { CreateTableHeaderContext } from "./SparkSqlParser.js"; -import { ReplaceTableHeaderContext } from "./SparkSqlParser.js"; import { BucketSpecContext } from "./SparkSqlParser.js"; import { SkewSpecContext } from "./SparkSqlParser.js"; -import { LocationSpecContext } from "./SparkSqlParser.js"; -import { CommentSpecContext } from "./SparkSqlParser.js"; import { QueryStatementContext } from "./SparkSqlParser.js"; import { InsertIntoContext } from "./SparkSqlParser.js"; import { PartitionSpecLocationContext } from "./SparkSqlParser.js"; import { PartitionSpecContext } from "./SparkSqlParser.js"; import { PartitionValContext } from "./SparkSqlParser.js"; import { NamespaceContext } from "./SparkSqlParser.js"; -import { NamespacesContext } from "./SparkSqlParser.js"; import { DescribeFuncNameContext } from "./SparkSqlParser.js"; import { DescribeColNameContext } from "./SparkSqlParser.js"; import { CtesContext } from "./SparkSqlParser.js"; @@ -136,7 +127,6 @@ import { NestedConstantListContext } from "./SparkSqlParser.js"; import { CreateFileFormatContext } from "./SparkSqlParser.js"; import { FileFormatContext } from "./SparkSqlParser.js"; import { StorageHandlerContext } from "./SparkSqlParser.js"; -import { ResourceContext } from "./SparkSqlParser.js"; import { InsertFromQueryContext } from "./SparkSqlParser.js"; import { MultipleInsertContext } from "./SparkSqlParser.js"; import { DeleteFromTableContext } from "./SparkSqlParser.js"; @@ -153,11 +143,9 @@ import { ColumnNameSeqContext } from "./SparkSqlParser.js"; import { ColumnNameCreateContext } from "./SparkSqlParser.js"; import { IdentifierReferenceContext } from "./SparkSqlParser.js"; import { QueryOrganizationContext } from "./SparkSqlParser.js"; -import { MultiInsertQueryBodyContext } from "./SparkSqlParser.js"; import { QueryTermContext } from "./SparkSqlParser.js"; import { QueryPrimaryContext } from "./SparkSqlParser.js"; import { SortItemContext } from "./SparkSqlParser.js"; -import { FromStatementContext } from "./SparkSqlParser.js"; import { FromStatementBodyContext } from "./SparkSqlParser.js"; import { QuerySpecificationContext } from "./SparkSqlParser.js"; import { TransformClauseContext } from "./SparkSqlParser.js"; @@ -166,9 +154,7 @@ import { SetClauseContext } from "./SparkSqlParser.js"; import { MatchedClauseContext } from "./SparkSqlParser.js"; import { NotMatchedClauseContext } from "./SparkSqlParser.js"; import { NotMatchedBySourceClauseContext } from "./SparkSqlParser.js"; -import { MatchedActionContext } from "./SparkSqlParser.js"; import { NotMatchedActionContext } from "./SparkSqlParser.js"; -import { NotMatchedBySourceActionContext } from "./SparkSqlParser.js"; import { AssignmentListContext } from "./SparkSqlParser.js"; import { AssignmentContext } from "./SparkSqlParser.js"; import { WhereClauseContext } from "./SparkSqlParser.js"; @@ -176,33 +162,24 @@ import { HavingClauseContext } from "./SparkSqlParser.js"; import { HintContext } from "./SparkSqlParser.js"; import { HintStatementContext } from "./SparkSqlParser.js"; import { FromClauseContext } from "./SparkSqlParser.js"; -import { FunctionKindContext } from "./SparkSqlParser.js"; import { TemporalClauseContext } from "./SparkSqlParser.js"; import { AggregationClauseContext } from "./SparkSqlParser.js"; import { GroupByClauseContext } from "./SparkSqlParser.js"; import { GroupingAnalyticsContext } from "./SparkSqlParser.js"; -import { GroupingElementContext } from "./SparkSqlParser.js"; import { GroupingSetContext } from "./SparkSqlParser.js"; import { PivotClauseContext } from "./SparkSqlParser.js"; import { PivotColumnContext } from "./SparkSqlParser.js"; import { PivotValueContext } from "./SparkSqlParser.js"; import { UnpivotClauseContext } from "./SparkSqlParser.js"; -import { UnpivotNullClauseContext } from "./SparkSqlParser.js"; -import { UnpivotOperatorContext } from "./SparkSqlParser.js"; import { UnpivotSingleValueColumnClauseContext } from "./SparkSqlParser.js"; import { UnpivotMultiValueColumnClauseContext } from "./SparkSqlParser.js"; import { UnpivotColumnSetContext } from "./SparkSqlParser.js"; -import { UnpivotValueColumnContext } from "./SparkSqlParser.js"; -import { UnpivotNameColumnContext } from "./SparkSqlParser.js"; import { UnpivotColumnAndAliasContext } from "./SparkSqlParser.js"; -import { UnpivotColumnContext } from "./SparkSqlParser.js"; -import { UnpivotAliasContext } from "./SparkSqlParser.js"; import { IfNotExistsContext } from "./SparkSqlParser.js"; import { IfExistsContext } from "./SparkSqlParser.js"; import { LateralViewContext } from "./SparkSqlParser.js"; import { SetQuantifierContext } from "./SparkSqlParser.js"; import { RelationContext } from "./SparkSqlParser.js"; -import { RelationExtensionContext } from "./SparkSqlParser.js"; import { JoinRelationContext } from "./SparkSqlParser.js"; import { JoinTypeContext } from "./SparkSqlParser.js"; import { JoinCriteriaContext } from "./SparkSqlParser.js"; @@ -215,13 +192,11 @@ import { OrderedIdentifierContext } from "./SparkSqlParser.js"; import { IdentifierCommentListContext } from "./SparkSqlParser.js"; import { IdentifierCommentContext } from "./SparkSqlParser.js"; import { RelationPrimaryContext } from "./SparkSqlParser.js"; -import { InlineTableContext } from "./SparkSqlParser.js"; import { FunctionTableSubqueryArgumentContext } from "./SparkSqlParser.js"; import { TableArgumentPartitioningContext } from "./SparkSqlParser.js"; import { FunctionTableNamedArgumentExpressionContext } from "./SparkSqlParser.js"; import { FunctionTableReferenceArgumentContext } from "./SparkSqlParser.js"; import { FunctionTableArgumentContext } from "./SparkSqlParser.js"; -import { FunctionTableContext } from "./SparkSqlParser.js"; import { TableAliasContext } from "./SparkSqlParser.js"; import { RowFormatContext } from "./SparkSqlParser.js"; import { MultipartIdentifierListContext } from "./SparkSqlParser.js"; @@ -267,20 +242,15 @@ import { QualifiedColTypeWithPositionForAddContext } from "./SparkSqlParser.js"; import { QualifiedColTypeWithPositionSeqForReplaceContext } from "./SparkSqlParser.js"; import { QualifiedColTypeWithPositionForReplaceContext } from "./SparkSqlParser.js"; import { ColDefinitionDescriptorWithPositionContext } from "./SparkSqlParser.js"; -import { DefaultExpressionContext } from "./SparkSqlParser.js"; import { VariableDefaultExpressionContext } from "./SparkSqlParser.js"; import { ColTypeListContext } from "./SparkSqlParser.js"; -import { ColTypeContext } from "./SparkSqlParser.js"; +import { ColumnTypeContext } from "./SparkSqlParser.js"; import { CreateOrReplaceTableColTypeListContext } from "./SparkSqlParser.js"; import { CreateOrReplaceTableColTypeContext } from "./SparkSqlParser.js"; import { ColDefinitionOptionContext } from "./SparkSqlParser.js"; -import { GenerationExpressionContext } from "./SparkSqlParser.js"; -import { ComplexColTypeListContext } from "./SparkSqlParser.js"; import { ComplexColTypeContext } from "./SparkSqlParser.js"; import { WhenClauseContext } from "./SparkSqlParser.js"; import { WindowClauseContext } from "./SparkSqlParser.js"; -import { ZorderClauseContext } from "./SparkSqlParser.js"; -import { NamedWindowContext } from "./SparkSqlParser.js"; import { WindowSpecContext } from "./SparkSqlParser.js"; import { WindowFrameContext } from "./SparkSqlParser.js"; import { FrameBoundContext } from "./SparkSqlParser.js"; @@ -293,12 +263,9 @@ import { ErrorCapturingIdentifierExtraContext } from "./SparkSqlParser.js"; import { IdentifierContext } from "./SparkSqlParser.js"; import { StrictIdentifierContext } from "./SparkSqlParser.js"; import { QuotedIdentifierContext } from "./SparkSqlParser.js"; -import { BackQuotedIdentifierContext } from "./SparkSqlParser.js"; import { NumberContext } from "./SparkSqlParser.js"; import { AlterColumnActionContext } from "./SparkSqlParser.js"; import { StringLitContext } from "./SparkSqlParser.js"; -import { CommentContext } from "./SparkSqlParser.js"; -import { VersionContext } from "./SparkSqlParser.js"; import { AnsiNonReservedContext } from "./SparkSqlParser.js"; import { StrictNonReservedContext } from "./SparkSqlParser.js"; import { NonReservedContext } from "./SparkSqlParser.js"; @@ -758,13 +725,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by the `commentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCommentNamespace?: (ctx: CommentNamespaceContext) => Result; /** * Visit a parse tree produced by the `commentTable` * labeled alternative in `SparkSqlParser.statement`. @@ -961,42 +921,12 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.timezone`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTimezone?: (ctx: TimezoneContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.configKey`. - * @param ctx the parse tree - * @return the visitor result - */ - visitConfigKey?: (ctx: ConfigKeyContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.configValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitConfigValue?: (ctx: ConfigValueContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. * @param ctx the parse tree * @return the visitor result */ visitUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.createTableHeader`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateTableHeader?: (ctx: CreateTableHeaderContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.replaceTableHeader`. - * @param ctx the parse tree - * @return the visitor result - */ - visitReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.bucketSpec`. * @param ctx the parse tree @@ -1009,18 +939,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.locationSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLocationSpec?: (ctx: LocationSpecContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.commentSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCommentSpec?: (ctx: CommentSpecContext) => Result; /** * Visit a parse tree produced by the `queryStatement` * labeled alternative in `SparkSqlParser.query`. @@ -1058,12 +976,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.namespaces`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNamespaces?: (ctx: NamespacesContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.describeFuncName`. * @param ctx the parse tree @@ -1172,12 +1084,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.resource`. - * @param ctx the parse tree - * @return the visitor result - */ - visitResource?: (ctx: ResourceContext) => Result; /** * Visit a parse tree produced by the `insertFromQuery` * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. @@ -1279,12 +1185,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.queryTerm`. * @param ctx the parse tree @@ -1303,12 +1203,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.fromStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFromStatement?: (ctx: FromStatementContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.fromStatementBody`. * @param ctx the parse tree @@ -1357,24 +1251,12 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.matchedAction`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMatchedAction?: (ctx: MatchedActionContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.notMatchedAction`. * @param ctx the parse tree * @return the visitor result */ visitNotMatchedAction?: (ctx: NotMatchedActionContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.notMatchedBySourceAction`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNotMatchedBySourceAction?: (ctx: NotMatchedBySourceActionContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.assignmentList`. * @param ctx the parse tree @@ -1417,12 +1299,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.functionKind`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionKind?: (ctx: FunctionKindContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.temporalClause`. * @param ctx the parse tree @@ -1447,12 +1323,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.groupingElement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitGroupingElement?: (ctx: GroupingElementContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.groupingSet`. * @param ctx the parse tree @@ -1483,18 +1353,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.unpivotNullClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnpivotNullClause?: (ctx: UnpivotNullClauseContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.unpivotOperator`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnpivotOperator?: (ctx: UnpivotOperatorContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.unpivotSingleValueColumnClause`. * @param ctx the parse tree @@ -1513,36 +1371,12 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.unpivotValueColumn`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnpivotValueColumn?: (ctx: UnpivotValueColumnContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.unpivotNameColumn`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnpivotNameColumn?: (ctx: UnpivotNameColumnContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.unpivotColumnAndAlias`. * @param ctx the parse tree * @return the visitor result */ visitUnpivotColumnAndAlias?: (ctx: UnpivotColumnAndAliasContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.unpivotColumn`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnpivotColumn?: (ctx: UnpivotColumnContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.unpivotAlias`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnpivotAlias?: (ctx: UnpivotAliasContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.ifNotExists`. * @param ctx the parse tree @@ -1573,12 +1407,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.relationExtension`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRelationExtension?: (ctx: RelationExtensionContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.joinRelation`. * @param ctx the parse tree @@ -1651,12 +1479,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.inlineTable`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInlineTable?: (ctx: InlineTableContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.functionTableSubqueryArgument`. * @param ctx the parse tree @@ -1687,12 +1509,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.functionTable`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionTable?: (ctx: FunctionTableContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.tableAlias`. * @param ctx the parse tree @@ -1963,12 +1779,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.defaultExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDefaultExpression?: (ctx: DefaultExpressionContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.variableDefaultExpression`. * @param ctx the parse tree @@ -1982,11 +1792,11 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; /** - * Visit a parse tree produced by `SparkSqlParser.colType`. + * Visit a parse tree produced by `SparkSqlParser.columnType`. * @param ctx the parse tree * @return the visitor result */ - visitColType?: (ctx: ColTypeContext) => Result; + visitColumnType?: (ctx: ColumnTypeContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.createOrReplaceTableColTypeList`. * @param ctx the parse tree @@ -2005,18 +1815,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.generationExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitGenerationExpression?: (ctx: GenerationExpressionContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.complexColTypeList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitComplexColTypeList?: (ctx: ComplexColTypeListContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.complexColType`. * @param ctx the parse tree @@ -2035,18 +1833,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.zorderClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitZorderClause?: (ctx: ZorderClauseContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.namedWindow`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNamedWindow?: (ctx: NamedWindowContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.windowSpec`. * @param ctx the parse tree @@ -2119,12 +1905,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.backQuotedIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.number`. * @param ctx the parse tree @@ -2143,18 +1923,6 @@ export class SparkSqlParserVisitor extends AbstractParseTreeVisitor Result; - /** - * Visit a parse tree produced by `SparkSqlParser.comment`. - * @param ctx the parse tree - * @return the visitor result - */ - visitComment?: (ctx: CommentContext) => Result; - /** - * Visit a parse tree produced by `SparkSqlParser.version`. - * @param ctx the parse tree - * @return the visitor result - */ - visitVersion?: (ctx: VersionContext) => Result; /** * Visit a parse tree produced by `SparkSqlParser.ansiNonReserved`. * @param ctx the parse tree diff --git a/src/lib/trino/TrinoSqlParser.ts b/src/lib/trino/TrinoSqlParser.ts index cf3b11ec7..705af90fe 100644 --- a/src/lib/trino/TrinoSqlParser.ts +++ b/src/lib/trino/TrinoSqlParser.ts @@ -1264,7 +1264,7 @@ export class TrinoSqlParser extends SQLParserBase { this.state = 425; this.match(TrinoSqlParser.KW_COMMENT); this.state = 426; - this.string_(); + (localContext as CreateTableAsSelectContext)._comment = this.string_(); } } @@ -1392,7 +1392,7 @@ export class TrinoSqlParser extends SQLParserBase { this.state = 470; this.match(TrinoSqlParser.KW_COMMENT); this.state = 471; - this.string_(); + (localContext as CreateTableContext)._comment = this.string_(); } break; } @@ -2019,7 +2019,7 @@ export class TrinoSqlParser extends SQLParserBase { this.state = 679; this.match(TrinoSqlParser.KW_COMMENT); this.state = 680; - this.string_(); + (localContext as CreateMaterializedViewContext)._comment = this.string_(); } } @@ -2071,7 +2071,7 @@ export class TrinoSqlParser extends SQLParserBase { this.state = 697; this.match(TrinoSqlParser.KW_COMMENT); this.state = 698; - this.string_(); + (localContext as CreateViewContext)._comment = this.string_(); } } @@ -4229,7 +4229,7 @@ export class TrinoSqlParser extends SQLParserBase { this.state = 1270; this.columnNameCreate(); this.state = 1271; - this.type_(0); + localContext._colType = this.type_(0); this.state = 1274; this.errorHandler.sync(this); _la = this.tokenStream.LA(1); @@ -4250,7 +4250,7 @@ export class TrinoSqlParser extends SQLParserBase { this.state = 1276; this.match(TrinoSqlParser.KW_COMMENT); this.state = 1277; - this.string_(); + localContext._comment = this.string_(); } break; } @@ -5718,7 +5718,7 @@ export class TrinoSqlParser extends SQLParserBase { } this.state = 1573; - this.identifier(); + (localContext as SelectSingleContext)._alias = this.identifier(); } break; } @@ -6836,7 +6836,7 @@ export class TrinoSqlParser extends SQLParserBase { } this.state = 1825; - this.identifier(); + localContext._alias = this.identifier(); this.state = 1827; this.errorHandler.sync(this); switch (this.interpreter.adaptivePredict(this.tokenStream, 223, this.context) ) { @@ -20429,6 +20429,7 @@ export class ShowColumnCommentContext extends StatementContext { } } export class CreateTableContext extends StatementContext { + public _comment?: StringContext; public constructor(ctx: StatementContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -20469,15 +20470,15 @@ export class CreateTableContext extends StatementContext { public KW_COMMENT(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_COMMENT, 0); } - public string(): StringContext | null { - return this.getRuleContext(0, StringContext); - } public KW_WITH(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_WITH, 0); } public properties(): PropertiesContext | null { return this.getRuleContext(0, PropertiesContext); } + public string(): StringContext | null { + return this.getRuleContext(0, StringContext); + } public override enterRule(listener: TrinoSqlListener): void { if(listener.enterCreateTable) { listener.enterCreateTable(this); @@ -20600,6 +20601,7 @@ export class StartTransactionContext extends StatementContext { } } export class CreateTableAsSelectContext extends StatementContext { + public _comment?: StringContext; public constructor(ctx: StatementContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -20640,9 +20642,6 @@ export class CreateTableAsSelectContext extends StatementContext { public KW_COMMENT(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_COMMENT, 0); } - public string(): StringContext | null { - return this.getRuleContext(0, StringContext); - } public KW_WITH(): antlr.TerminalNode[]; public KW_WITH(i: number): antlr.TerminalNode | null; public KW_WITH(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] { @@ -20658,6 +20657,9 @@ export class CreateTableAsSelectContext extends StatementContext { public KW_DATA(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_DATA, 0); } + public string(): StringContext | null { + return this.getRuleContext(0, StringContext); + } public KW_NO(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_NO, 0); } @@ -21264,6 +21266,7 @@ export class TruncateTableContext extends StatementContext { } } export class CreateMaterializedViewContext extends StatementContext { + public _comment?: StringContext; public constructor(ctx: StatementContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -21313,15 +21316,15 @@ export class CreateMaterializedViewContext extends StatementContext { public KW_COMMENT(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_COMMENT, 0); } - public string(): StringContext | null { - return this.getRuleContext(0, StringContext); - } public KW_WITH(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_WITH, 0); } public properties(): PropertiesContext | null { return this.getRuleContext(0, PropertiesContext); } + public string(): StringContext | null { + return this.getRuleContext(0, StringContext); + } public override enterRule(listener: TrinoSqlListener): void { if(listener.enterCreateMaterializedView) { listener.enterCreateMaterializedView(this); @@ -21379,6 +21382,7 @@ export class SetSessionContext extends StatementContext { } } export class CreateViewContext extends StatementContext { + public _comment?: StringContext; public constructor(ctx: StatementContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -21407,9 +21411,6 @@ export class CreateViewContext extends StatementContext { public KW_COMMENT(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_COMMENT, 0); } - public string(): StringContext | null { - return this.getRuleContext(0, StringContext); - } public KW_SECURITY(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_SECURITY, 0); } @@ -21419,6 +21420,9 @@ export class CreateViewContext extends StatementContext { public properties(): PropertiesContext | null { return this.getRuleContext(0, PropertiesContext); } + public string(): StringContext | null { + return this.getRuleContext(0, StringContext); + } public KW_DEFINER(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_DEFINER, 0); } @@ -22392,6 +22396,8 @@ export class TableElementContext extends antlr.ParserRuleContext { export class ColumnDefinitionContext extends antlr.ParserRuleContext { + public _colType?: TypeContext; + public _comment?: StringContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } @@ -22410,15 +22416,15 @@ export class ColumnDefinitionContext extends antlr.ParserRuleContext { public KW_COMMENT(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_COMMENT, 0); } - public string(): StringContext | null { - return this.getRuleContext(0, StringContext); - } public KW_WITH(): antlr.TerminalNode | null { return this.getToken(TrinoSqlParser.KW_WITH, 0); } public properties(): PropertiesContext | null { return this.getRuleContext(0, PropertiesContext); } + public string(): StringContext | null { + return this.getRuleContext(0, StringContext); + } public override get ruleIndex(): number { return TrinoSqlParser.RULE_columnDefinition; } @@ -23658,6 +23664,7 @@ export class SelectAllContext extends SelectItemContext { } } export class SelectSingleContext extends SelectItemContext { + public _alias?: IdentifierContext; public constructor(ctx: SelectItemContext) { super(ctx.parent, ctx.invokingState); super.copyFrom(ctx); @@ -24453,6 +24460,7 @@ export class VariableDefinitionContext extends antlr.ParserRuleContext { export class AliasedRelationContext extends antlr.ParserRuleContext { + public _alias?: IdentifierContext; public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) { super(parent, invokingState); } diff --git a/src/locale/locale.ts b/src/locale/locale.ts new file mode 100644 index 000000000..4f993acf6 --- /dev/null +++ b/src/locale/locale.ts @@ -0,0 +1,46 @@ +const zh_CN = { + stmtInComplete: '语句不完整', + noValidPosition: '在此位置无效', + expecting: ',期望', + unfinishedMultilineComment: '未完成的多行注释', + unfinishedDoubleQuoted: '未完成的双引号字符串字变量', + unfinishedSingleQuoted: '未完成的单引号字符串字变量', + unfinishedTickQuoted: '未完成的反引号引用字符串字变量', + noValidInput: '没有有效的输入', + newObj: '一个新的对象', + existingObj: '一个存在的对象', + new: '一个新的', + existing: '一个存在的', + orKeyword: '或者一个关键字', + keyword: '一个关键字', + missing: '缺少', + at: '在', + or: '或者', +}; + +const en_US: typeof zh_CN = { + stmtInComplete: 'Statement is incomplete', + noValidPosition: 'is not valid at this position', + expecting: ', expecting ', + unfinishedMultilineComment: 'Unfinished multiline comment', + unfinishedDoubleQuoted: 'Unfinished double quoted string literal', + unfinishedSingleQuoted: 'Unfinished single quoted string literal', + unfinishedTickQuoted: 'Unfinished back tick quoted string literal', + noValidInput: 'is no valid input at all', + newObj: 'a new object', + existingObj: 'an existing object', + new: 'a new ', + existing: 'an existing ', + orKeyword: ' or a keyword', + keyword: 'a keyword', + missing: 'missing ', + at: ' at ', + or: ' or ', +}; + +const i18n = { + zh_CN, + en_US, +}; + +export { i18n }; diff --git a/src/parser/common/basicSQL.ts b/src/parser/common/basicSQL.ts index f513e6a4e..2cc236d99 100644 --- a/src/parser/common/basicSQL.ts +++ b/src/parser/common/basicSQL.ts @@ -8,17 +8,25 @@ import { ParseTreeWalker, ParseTreeListener, PredictionMode, + ANTLRErrorListener, } from 'antlr4ng'; import { CandidatesCollection, CodeCompletionCore } from 'antlr4-c3'; import { SQLParserBase } from '../../lib/SQLParserBase'; import { findCaretTokenIndex } from './findCaretTokenIndex'; import { ctxToText, tokenToWord, WordRange, TextSlice } from './textAndWord'; -import { CaretPosition, Suggestions, SyntaxSuggestion } from './types'; -import { ParseError, ErrorListener, ParseErrorListener } from './parseErrorListener'; +import { + CaretPosition, + LOCALE_TYPE, + SemanticCollectOptions, + Suggestions, + SyntaxSuggestion, +} from './types'; +import { ParseError, ErrorListener } from './parseErrorListener'; import { ErrorStrategy } from './errorStrategy'; import type { SplitListener } from './splitListener'; import type { EntityCollector } from './entityCollector'; import { EntityContext } from './entityCollector'; +import SemanticContextCollector from './semanticContextCollector'; /** * Basic SQL class, every sql needs extends it. @@ -78,6 +86,11 @@ export abstract class BasicSQL< */ protected abstract get splitListener(): SplitListener; + /** + * Get a new errorListener instance. + */ + protected abstract createErrorListener(errorListener: ErrorListener): ANTLRErrorListener; + /** * Get a new entityCollector instance. */ @@ -87,6 +100,18 @@ export abstract class BasicSQL< caretTokenIndex?: number ): EntityCollector; + public locale: LOCALE_TYPE = 'en_US'; + + /** + * Get a new semanticContextCollector instance. + */ + protected abstract createSemanticContextCollector( + input: string, + caretPosition: CaretPosition, + allTokens: Token[], + options?: SemanticCollectOptions + ): SemanticContextCollector; + /** * Create an antlr4 lexer from input. * @param input string @@ -96,7 +121,7 @@ export abstract class BasicSQL< const lexer = this.createLexerFromCharStream(charStreams); if (errorListener) { lexer.removeErrorListeners(); - lexer.addErrorListener(new ParseErrorListener(errorListener)); + lexer.addErrorListener(this.createErrorListener(errorListener)); } return lexer; } @@ -112,7 +137,7 @@ export abstract class BasicSQL< parser.interpreter.predictionMode = PredictionMode.SLL; if (errorListener) { parser.removeErrorListeners(); - parser.addErrorListener(new ParseErrorListener(errorListener)); + parser.addErrorListener(this.createErrorListener(errorListener)); } return parser; @@ -143,7 +168,7 @@ export abstract class BasicSQL< this._lexer = this.createLexerFromCharStream(this._charStreams); this._lexer.removeErrorListeners(); - this._lexer.addErrorListener(new ParseErrorListener(this._errorListener)); + this._lexer.addErrorListener(this.createErrorListener(this._errorListener)); this._tokenStream = new CommonTokenStream(this._lexer); /** @@ -179,7 +204,7 @@ export abstract class BasicSQL< this._parsedInput = input; parser.removeErrorListeners(); - parser.addErrorListener(new ParseErrorListener(this._errorListener)); + parser.addErrorListener(this.createErrorListener(this._errorListener)); this._parseTree = parser.program(); @@ -196,6 +221,13 @@ export abstract class BasicSQL< return this._parseErrors; } + /** + * Get the input string that has been parsed. + */ + public getParsedInput(): string { + return this._parsedInput; + } + /** * Get all Tokens of input string,'' is not included. * @param input source string @@ -245,35 +277,35 @@ export abstract class BasicSQL< } /** - * Get suggestions of syntax and token at caretPosition - * @param input source string - * @param caretPosition caret position, such as cursor position - * @returns suggestion + * Get a minimum boundary parser near tokenIndex. + * @param input source string. + * @param tokenIndex start from which index to minimize the boundary. + * @param originParseTree the parse tree need to be minimized, default value is the result of parsing `input`. + * @returns minimum parser info */ - public getSuggestionAtCaretPosition( + public getMinimumParserInfo( input: string, - caretPosition: CaretPosition - ): Suggestions | null { - const splitListener = this.splitListener; - - this.parseWithCache(input); - if (!this._parseTree) return null; - - let sqlParserIns = this._parser; - const allTokens = this.getAllTokens(input); - let caretTokenIndex = findCaretTokenIndex(caretPosition, allTokens); - let c3Context: ParserRuleContext = this._parseTree; - let tokenIndexOffset: number = 0; + tokenIndex: number, + originParseTree?: ParserRuleContext | null + ) { + if (arguments.length <= 2) { + this.parseWithCache(input); + originParseTree = this._parseTree; + } - if (!caretTokenIndex && caretTokenIndex !== 0) return null; + if (!originParseTree || !input?.length) return null; + const splitListener = this.splitListener; /** * Split sql by statement. * Try to collect candidates in as small a range as possible. */ - this.listen(splitListener, this._parseTree); + this.listen(splitListener, originParseTree); const statementCount = splitListener.statementsContext?.length; const statementsContext = splitListener.statementsContext; + let tokenIndexOffset = 0; + let sqlParserIns = this._parser; + let parseTree = originParseTree; // If there are multiple statements. if (statementCount > 1) { @@ -298,14 +330,14 @@ export abstract class BasicSQL< const isNextCtxValid = index === statementCount - 1 || !statementsContext[index + 1]?.exception; - if (ctx.stop && ctx.stop.tokenIndex < caretTokenIndex && isPrevCtxValid) { + if (ctx.stop && ctx.stop.tokenIndex < tokenIndex && isPrevCtxValid) { startStatement = ctx; } if ( ctx.start && !stopStatement && - ctx.start.tokenIndex > caretTokenIndex && + ctx.start.tokenIndex > tokenIndex && isNextCtxValid ) { stopStatement = ctx; @@ -322,7 +354,7 @@ export abstract class BasicSQL< * compared to the tokenIndex in the whole input */ tokenIndexOffset = startStatement?.start?.tokenIndex ?? 0; - caretTokenIndex = caretTokenIndex - tokenIndexOffset; + tokenIndex = tokenIndex - tokenIndexOffset; /** * Reparse the input fragment, @@ -342,17 +374,54 @@ export abstract class BasicSQL< parser.errorHandler = new ErrorStrategy(); sqlParserIns = parser; - c3Context = parser.program(); + parseTree = parser.program(); } + return { + parser: sqlParserIns, + parseTree, + tokenIndexOffset, + newTokenIndex: tokenIndex, + }; + } + + /** + * Get suggestions of syntax and token at caretPosition + * @param input source string + * @param caretPosition caret position, such as cursor position + * @returns suggestion + */ + public getSuggestionAtCaretPosition( + input: string, + caretPosition: CaretPosition + ): Suggestions | null { + this.parseWithCache(input); + + if (!this._parseTree) return null; + + const allTokens = this.getAllTokens(input); + let caretTokenIndex = findCaretTokenIndex(caretPosition, allTokens); + + if (!caretTokenIndex && caretTokenIndex !== 0) return null; + + const minimumParser = this.getMinimumParserInfo(input, caretTokenIndex); + + if (!minimumParser) return null; + + const { + parser: sqlParserIns, + tokenIndexOffset, + newTokenIndex, + parseTree: c3Context, + } = minimumParser; const core = new CodeCompletionCore(sqlParserIns); core.preferredRules = this.preferredRules; - const candidates = core.collectCandidates(caretTokenIndex, c3Context); + const candidates = core.collectCandidates(newTokenIndex, c3Context); const originalSuggestions = this.processCandidates( candidates, allTokens, - caretTokenIndex, + newTokenIndex, tokenIndexOffset ); @@ -400,4 +469,29 @@ export abstract class BasicSQL< return collectListener.getEntities(); } + + /** + * Get semantic context infos + * @param input source string + * @param caretPosition caret position, such as cursor position + * @param options semantic context options + * @returns analyzed semantic context + */ + public getSemanticContextAtCaretPosition( + input: string, + caretPosition: CaretPosition, + options?: SemanticCollectOptions + ) { + const allTokens = this.getAllTokens(input); + const parseTree = this.parseWithCache(input); + const statementContextListener = this.createSemanticContextCollector( + input, + caretPosition, + allTokens, + options + ); + this.listen(statementContextListener, parseTree); + + return statementContextListener.semanticContext; + } } diff --git a/src/parser/common/entityCollector.ts b/src/parser/common/entityCollector.ts index 088a47be9..6fb28820f 100644 --- a/src/parser/common/entityCollector.ts +++ b/src/parser/common/entityCollector.ts @@ -1,8 +1,16 @@ -import { ParserRuleContext, Token } from 'antlr4ng'; -import { EntityContextType } from './types'; -import { WordPosition, TextPosition } from './textAndWord'; -import { ctxToText, ctxToWord } from './textAndWord'; +import { isToken, ParserRuleContext, Token } from 'antlr4ng'; + import { SimpleStack } from './simpleStack'; +import { + ctxToText, + isWordRange, + TextPosition, + TextSlice, + tokenToWord, + WordPosition, + WordRange, +} from './textAndWord'; +import { EntityContextType } from './types'; /** * TODO: more stmt type should be supported. @@ -48,25 +56,80 @@ export function toStmtContext( }; } -export interface BaseAliasContext { - readonly isAlias: boolean; - alias?: string | EntityContext | null; - origin?: string | EntityContext | StmtContext | null; +/** + * entity's attribute + * @key comment: entity's comment attribute + * @key colType: column entity's type attribute + * @key alias: entity's alias attribute + * */ +export enum AttrName { + comment = '_comment', + colType = '_colType', + alias = '_alias', } - -const baseAlias: BaseAliasContext = { - isAlias: false, - origin: null, - alias: null, +/** + * ParserRuleContext with custom attributes + * */ +type ParserRuleContextWithAttr = ParserRuleContext & { + [K in AttrName]?: Token; }; -export interface EntityContext extends BaseAliasContext { +/** + * Function's arguments + * */ +export interface Argument { + argMode?: WordRange; + argName?: WordRange; + argType: WordRange; +} +export interface BaseEntityContext { readonly entityContextType: EntityContextType; readonly text: string; readonly position: WordPosition; readonly belongStmt: StmtContext; - relatedEntities: EntityContext[] | null; - columns: EntityContext[] | null; + reference?: string | EntityContext; // reference entity + [AttrName.comment]: WordRange | null; + [AttrName.alias]?: WordRange | null; // alias token +} + +export interface CommonEntityContext extends BaseEntityContext { + relatedEntities: CommonEntityContext[] | null; + columns?: ColumnEntityContext[]; +} + +export interface ColumnEntityContext extends BaseEntityContext { + [AttrName.colType]: WordRange | null; +} + +export interface FuncEntityContext extends BaseEntityContext { + relatedEntities: CommonEntityContext[] | null; + arguments: Argument[] | null; // function arguments + returns?: Argument; // function return value +} + +export type EntityContext = CommonEntityContext | FuncEntityContext | ColumnEntityContext; + +export function isCommonEntityContext(entity: EntityContext): entity is CommonEntityContext { + if (!entity) return false; + return 'relatedEntities' in entity && !('arguments' in entity); +} + +export function isFuncEntityContext(entity: EntityContext): entity is FuncEntityContext { + if (!entity) return false; + return 'arguments' in entity; +} + +export function isColumnEntityContext(entity: EntityContext): entity is ColumnEntityContext { + if (!entity) return false; + return AttrName.colType in entity; +} + +/** + * what we need when collect attribute information + * */ +interface AttrInfo { + attrName: AttrName; + endContextList: string[]; } export function toEntityContext( @@ -74,23 +137,113 @@ export function toEntityContext( type: EntityContextType, input: string, belongStmt: StmtContext, - alias?: BaseAliasContext + attrInfo?: AttrInfo[] ): EntityContext | null { - const word = ctxToWord(ctx, input); + const word = ctxToText(ctx, input); if (!word) return null; - const { text, ...position } = word; - const finalAlias = Object.assign({}, baseAlias, alias ?? {}); - return { + const { text, startLine, endLine, ...rest } = word; + const position = { + ...rest, + line: startLine, + }; + let entityInfo = { entityContextType: type, text, position, belongStmt, - relatedEntities: null, - columns: null, - ...finalAlias, + [AttrName.comment]: null, }; + switch (entityInfo.entityContextType) { + case EntityContextType.FUNCTION: + case EntityContextType.FUNCTION_CREATE: { + (entityInfo as FuncEntityContext).relatedEntities = null; + (entityInfo as FuncEntityContext).arguments = null; + break; + } + case EntityContextType.COLUMN: + case EntityContextType.COLUMN_CREATE: + (entityInfo as ColumnEntityContext)[AttrName.colType] = null; + break; + default: + (entityInfo as CommonEntityContext).relatedEntities = null; + break; + } + if (attrInfo) { + for (let k = 0; k < attrInfo.length; k++) { + const attributeName: AttrName = attrInfo[k]?.attrName; + const attrToken = findAttribute(ctx, attributeName, attrInfo[k]?.endContextList); + if (attrToken) { + const attrVal: WordRange | TextSlice | null = isToken(attrToken) + ? tokenToWord(attrToken, input) + : ctxToText(attrToken, input); + if (attrVal) { + if (isWordRange(attrVal)) { + entityInfo = Object.assign(entityInfo, { + [attributeName]: attrVal, + }); + } else { + const { startIndex, endIndex, startColumn, endColumn, text, ...rest } = + attrVal; + entityInfo = Object.assign(entityInfo, { + [attributeName]: { + startIndex, + endIndex, + startColumn, + endColumn, + text, + line: rest?.startLine, + }, + }); + } + } + } + } + } + return entityInfo; +} + +export function findAttribute( + ctx: ParserRuleContextWithAttr | null, + keyName: AttrName, + endContextNameList: string[] +): Token | null { + const parent: ParserRuleContextWithAttr | null = ctx?.parent || null; + let attrVal: Token | null = null; + if (parent?.[keyName]) { + attrVal = parent?.[keyName] || null; + return attrVal; + } else { + if (parent?.constructor?.name && !endContextNameList.includes(parent?.constructor?.name)) { + attrVal = findAttribute(parent, keyName, endContextNameList); + } + if (!attrVal) { + if (parent?.children) { + attrVal = findAttributeChildren(parent, keyName); + } + } + } + return attrVal; } +function findAttributeChildren( + ctx: ParserRuleContextWithAttr | null, + keyName: AttrName +): Token | null { + const visitChildren = ctx?.children || []; + let attrVal: Token | null = null; + if (visitChildren.length) { + for (let i = 0; i < visitChildren.length; i++) { + const child = visitChildren[i] || null; + if (child?.[keyName]) { + attrVal = child?.[keyName] || null; + return attrVal; + } else { + attrVal = findAttributeChildren(child, keyName); + } + } + } + return attrVal; +} /** * @todo: Handle alias, includes column alias, table alias, query as alias and so on. * @todo: [may be need] Combine the entities in each clause. @@ -127,8 +280,12 @@ export abstract class EntityCollector { exitEveryRule() {} + getRootStmt() { + return this._rootStmt; + } + getEntities() { - return Array.from(this._entitiesSet); + return Array.from(this._entitiesSet) as EntityContext[]; } enterProgram() { @@ -196,17 +353,13 @@ export abstract class EntityCollector { return stmtContext; } - protected pushEntity( - ctx: ParserRuleContext, - type: EntityContextType, - alias?: BaseAliasContext - ) { + protected pushEntity(ctx: ParserRuleContext, type: EntityContextType, attrInfo?: AttrInfo[]) { const entityContext = toEntityContext( ctx, type, this._input, this._stmtStack.peek(), - alias + attrInfo ); if (entityContext) { if (this._stmtStack.isEmpty()) { @@ -292,13 +445,20 @@ export abstract class EntityCollector { } return result; }, [] as EntityContext[]); - if (mainEntity && columns.length) { - (mainEntity as EntityContext).columns = columns; + if (isCommonEntityContext(mainEntity)) { + mainEntity = Object.assign(mainEntity, { + columns, + }); + } } if (mainEntity && relatedEntities.length) { - (mainEntity as EntityContext).relatedEntities = relatedEntities; + if (isCommonEntityContext(mainEntity) || isFuncEntityContext(mainEntity)) { + mainEntity = Object.assign(mainEntity, { + relatedEntities, + }); + } } return finalEntities; diff --git a/src/parser/common/parseErrorListener.ts b/src/parser/common/parseErrorListener.ts index 0a1295bc4..f2b92b720 100644 --- a/src/parser/common/parseErrorListener.ts +++ b/src/parser/common/parseErrorListener.ts @@ -4,7 +4,14 @@ import { ANTLRErrorListener, RecognitionException, ATNSimulator, + LexerNoViableAltException, + Lexer, + Parser, + InputMismatchException, + NoViableAltException, } from 'antlr4ng'; +import { transform } from './transform'; +import { BasicSQL } from './basicSQL'; /** * Converted from {@link SyntaxError}. @@ -39,10 +46,21 @@ export interface SyntaxError { */ export type ErrorListener = (parseError: ParseError, originalError: SyntaxError) => void; -export class ParseErrorListener implements ANTLRErrorListener { +export abstract class ParseErrorListener implements ANTLRErrorListener { private _errorListener: ErrorListener; + protected preferredRules: Set; + protected get locale() { + return this.parserContext.locale; + } + protected parserContext: BasicSQL; - constructor(errorListener: ErrorListener) { + constructor( + errorListener: ErrorListener, + parserContext: BasicSQL, + preferredRules: Set + ) { + this.parserContext = parserContext; + this.preferredRules = preferredRules; this._errorListener = errorListener; } @@ -52,6 +70,8 @@ export class ParseErrorListener implements ANTLRErrorListener { reportContextSensitivity() {} + protected abstract getExpectedText(parser: Parser, token: Token): string; + syntaxError( recognizer: Recognizer, offendingSymbol: Token | null, @@ -60,6 +80,87 @@ export class ParseErrorListener implements ANTLRErrorListener { msg: string, e: RecognitionException ) { + let message = ''; + // If not undefined then offendingSymbol is of type Token. + if (offendingSymbol) { + let token = offendingSymbol as Token; + const parser = recognizer as Parser; + + // judge token is EOF + const isEof = token.type === Token.EOF; + if (isEof) { + token = parser.tokenStream.get(token.tokenIndex - 1); + } + const wrongText = token.text ?? ''; + + const isInComplete = isEof && wrongText !== ' '; + + const expectedText = isInComplete ? '' : this.getExpectedText(parser, token); + + if (!e) { + // handle missing or unwanted tokens. + message = msg; + if (msg.includes('extraneous')) { + message = `'${wrongText}' {noValidPosition}${ + expectedText.length ? `{expecting}${expectedText}` : '' + }`; + } + if (msg.includes('missing')) { + const regex = /missing\s+'([^']+)'/; + const match = msg.match(regex); + message = `{missing}`; + if (match) { + const missKeyword = match[1]; + message += `'${missKeyword}'`; + } else { + message += `{keyword}`; + } + message += `{at}'${wrongText}'`; + } + } else { + // handle mismatch exception or no viable alt exception + if (e instanceof InputMismatchException || e instanceof NoViableAltException) { + if (isEof) { + message = `{stmtInComplete}`; + } else { + message = `'${wrongText}' {noValidPosition}`; + } + if (expectedText.length > 0) { + message += `{expecting}${expectedText}`; + } + } else { + message = msg; + } + } + } else { + // No offending symbol, which indicates this is a lexer error. + if (e instanceof LexerNoViableAltException) { + const lexer = recognizer as Lexer; + const input = lexer.inputStream; + let text = lexer.getErrorDisplay( + input.getText(lexer._tokenStartCharIndex, input.index) + ); + switch (text[0]) { + case '/': + message = '{unfinishedMultilineComment}'; + break; + case '"': + message = '{unfinishedDoubleQuoted}'; + break; + case "'": + message = '{unfinishedSingleQuoted}'; + break; + case '`': + message = '{unfinishedTickQuoted}'; + break; + + default: + message = '"' + text + '" {noValidInput}'; + break; + } + } + } + message = transform(message, this.locale); let endCol = charPositionInLine + 1; if (offendingSymbol && offendingSymbol.text !== null) { endCol = charPositionInLine + offendingSymbol.text.length; @@ -71,7 +172,7 @@ export class ParseErrorListener implements ANTLRErrorListener { endLine: line, startColumn: charPositionInLine + 1, endColumn: endCol + 1, - message: msg, + message, }, { e, diff --git a/src/parser/common/semanticContextCollector.ts b/src/parser/common/semanticContextCollector.ts new file mode 100644 index 000000000..23e109bda --- /dev/null +++ b/src/parser/common/semanticContextCollector.ts @@ -0,0 +1,268 @@ +import { ErrorNode, ParserRuleContext, TerminalNode, Token } from 'antlr4ng'; +import { findCaretTokenIndex } from '../common/findCaretTokenIndex'; +import { + CaretPosition, + SemanticCollectOptions, + SemanticContext, + SqlSplitStrategy, +} from '../common/types'; + +export const SQL_SPLIT_SYMBOL_TEXT = ';'; + +abstract class SemanticContextCollector { + constructor( + _input: string, + caretPosition: CaretPosition, + allTokens: Token[], + options?: SemanticCollectOptions + ) { + // If caretPosition token is whiteSpace, tokenIndex may be undefined. + const tokenIndex = findCaretTokenIndex(caretPosition, allTokens); + + if (tokenIndex !== undefined) { + this._tokenIndex = tokenIndex; + } + this._allTokens = allTokens; + this.options = { + ...this.options, + ...options, + }; + + if (allTokens?.length) { + let i = tokenIndex ? tokenIndex - 1 : allTokens.length - 1; + /** + * Link to @case4 and @case5 + * Find the previous unhidden token. + * If can't find tokenIndex or current token is whiteSpace at caretPosition, + * prevTokenIndex is useful to help us determine if it is beginning of statement. + */ + while (i >= 0) { + if ( + allTokens[i].channel !== Token.HIDDEN_CHANNEL && + (allTokens[i].line < caretPosition.lineNumber || + (allTokens[i].line === caretPosition.lineNumber && + allTokens[i].column < caretPosition.column)) + ) { + this._prevTokenIndex = allTokens[i].tokenIndex; + break; + } + i--; + } + + /** + * We can directly conclude beginning of statement semantics when current token is + * the first token of tokenStream or the previous token is semicolon + */ + if ( + tokenIndex === 0 || + i === -1 || + (this._prevTokenIndex && + this._allTokens[this._prevTokenIndex].text === SQL_SPLIT_SYMBOL_TEXT) + ) { + this._isStatementBeginning = true; + } + } + } + + public readonly options: SemanticCollectOptions = { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + }; + + private _tokenIndex: number; + private _allTokens: Token[] = []; + + /** + * If current caret position is in a beginning of statement semantics, it needs to follow some cases: + * @case1 there is no statement node with an error before the current statement in the parse tree; + * + * @case2 if it is an uncomplete keyword, it will be parsed as an `ErrorNode` + * and need be a direct child node of `program`; + * + * @case3 if it is a complete keyword, the parsed TerminalNode or ErrorNode should be + * the first leaf node of current statement rule; + * + * @case4 if it is whiteSpace in caret position, we can't visit it in antlr4 listener, + * so we find the first unhidden token before the whiteSpace token, and the unhidden token + * should be the last leaf node of statement its belongs to; + * + * @case5 if the previous token is split symbol like `;`, ignore case1 and forcefully judged as beginning of statement. + */ + private _isStatementBeginning: boolean = false; + + /** + * Prev tokenIndex that not white space before current tokenIndex or caret position + */ + private _prevTokenIndex: number; + + public get semanticContext(): SemanticContext { + return { + isStatementBeginning: this._isStatementBeginning, + }; + } + + abstract getWhiteSpaceRuleType(): number; + + abstract getStatementRuleType(): number; + + private prevStatementHasError(node: TerminalNode | ErrorNode | ParserRuleContext) { + let parent = node.parent as ParserRuleContext; + if (!parent) return false; + + const currentNodeIndex = parent.children!.findIndex((child) => child === node); + if (currentNodeIndex <= 0) return false; + + for (let i = currentNodeIndex - 1; i >= 0; i--) { + const prevNode = parent.children![i]; + if ( + prevNode instanceof ErrorNode || + (prevNode instanceof ParserRuleContext && prevNode.exception !== null) + ) + return true; + } + + return false; + } + + /** + * Most root rule is `program`. + */ + private isRootRule(node: TerminalNode | ErrorNode | ParserRuleContext) { + return node instanceof ParserRuleContext && node?.parent === null; + } + + /** + * link to @case4 + * It should be called in each language's own `enterStatement`. + */ + protected visitStatement(ctx: ParserRuleContext) { + if (this.options.sqlSplitStrategy === SqlSplitStrategy.STRICT) return; + + const isWhiteSpaceToken = + this._tokenIndex === undefined || + this._allTokens[this._tokenIndex]?.type === this.getWhiteSpaceRuleType() || + // PostgreSQL whiteSpace not inlcudes '\n' symbol + this._allTokens[this._tokenIndex]?.text === '\n'; + + const isPrevTokenEndOfStatement = + this._prevTokenIndex && ctx.stop?.tokenIndex === this._prevTokenIndex; + + if (isWhiteSpaceToken && isPrevTokenEndOfStatement && ctx.exception === null) { + this._isStatementBeginning = !this.prevStatementHasError(ctx) + ? true + : this._isStatementBeginning; + } + } + + /** + * Uncomplete keyword will be error node + */ + visitErrorNode(node: ErrorNode): void { + if ( + node.symbol.tokenIndex !== this._tokenIndex || + this._isStatementBeginning || + this.options.sqlSplitStrategy === SqlSplitStrategy.STRICT + ) + return; + + let parent: ParserRuleContext | null = node.parent as ParserRuleContext; + let currentNode: TerminalNode | ParserRuleContext = node; + + /** + * Link to @case2 + * The error node is a direct child node of the program node + */ + if (this.isRootRule(parent)) { + this._isStatementBeginning = !this.prevStatementHasError(currentNode); + return; + } + + /** + * Link to @case3 + * Error node must be the first leaf node of the statement parse tree. + **/ + while (parent !== null && parent.ruleIndex !== this.getStatementRuleType()) { + if (parent.children?.[0] !== currentNode) { + this._isStatementBeginning = false; + return; + } + + currentNode = parent; + parent = currentNode.parent; + } + + let isStatementBeginning = true; + + /** + * Link to @case1 + * Previous statement must have no exception + */ + if (parent?.ruleIndex === this.getStatementRuleType()) { + const programRule = parent.parent; + const currentStatementRuleIndex = + programRule?.children?.findIndex((node) => node === parent) || -1; + if (currentStatementRuleIndex > 0) { + /** + * When you typed a keyword and doesn't match any rule, you will get a EOF error, + * For example, just typed 'CREATE', 'INSERT'. + */ + const isStatementEOF = parent.exception?.offendingToken?.text === ''; + isStatementBeginning = + this.prevStatementHasError(parent) && !isStatementEOF + ? false + : isStatementBeginning; + } + } + + this._isStatementBeginning = isStatementBeginning; + } + + visitTerminal(node: TerminalNode): void { + if ( + node.symbol.tokenIndex !== this._tokenIndex || + this._isStatementBeginning || + this.options.sqlSplitStrategy === SqlSplitStrategy.STRICT + ) + return; + + let currentNode: TerminalNode | ParserRuleContext = node; + let parent = node.parent as ParserRuleContext | null; + + /** + * Link to @case3 + * Current terminal node must be the first leaf node of the statement parse tree. + **/ + while (parent !== null && parent.ruleIndex !== this.getStatementRuleType()) { + if (parent.children?.[0] !== currentNode) { + this._isStatementBeginning = false; + return; + } + + currentNode = parent; + parent = currentNode.parent!; + } + + let isStatementBeginning = true; + + /** + * Link to @case1 + * Previous statement must have no exception + */ + if (parent?.ruleIndex === this.getStatementRuleType()) { + const programRule = parent.parent; + const currentStatementRuleIndex = + programRule?.children?.findIndex((node) => node === parent) || -1; + if (currentStatementRuleIndex > 0) { + isStatementBeginning = this.prevStatementHasError(parent) + ? false + : isStatementBeginning; + } + } + + this._isStatementBeginning = isStatementBeginning; + } + + enterEveryRule(_node: ParserRuleContext): void {} + exitEveryRule(_node: ParserRuleContext): void {} +} + +export default SemanticContextCollector; diff --git a/src/parser/common/textAndWord.ts b/src/parser/common/textAndWord.ts index df3066cae..a7217adc8 100644 --- a/src/parser/common/textAndWord.ts +++ b/src/parser/common/textAndWord.ts @@ -40,7 +40,7 @@ export interface TextSlice extends TextPosition { /** * Convert Token to Word */ -export function tokenToWord(token: Token, input: string): WordPosition & { text: string } { +export function tokenToWord(token: Token, input: string): WordRange { const startIndex = token.start; const endIndex = token.stop; const text = token.text ?? ''; @@ -54,29 +54,6 @@ export function tokenToWord(token: Token, input: string): WordPosition & { text: }; } -/** - * Convert ParserRuleContext to Word - */ -export function ctxToWord( - ctx: ParserRuleContext, - input: string -): (WordPosition & { text: string }) | null { - if (!ctx.start || !ctx.stop) { - return null; - } - const startIndex = ctx.start.start; - const endIndex = ctx.stop.stop; - const text = input.slice(startIndex, endIndex + 1); - return { - text, - line: ctx.start.line, - startIndex, - endIndex, - startColumn: ctx.start.column + 1, - endColumn: ctx.stop.column + 1 + (ctx.stop.text?.length ?? 0), - }; -} - /** * Convert ParserRuleContext to Text */ @@ -100,3 +77,12 @@ export function ctxToText( endColumn: ctx.stop.column + 1 + (ctx.stop.text?.length ?? 0), }; } + +/** + * judge whether the context is a WordRange + * @param textOrWord TextSlice or WordRange object + * */ +export function isWordRange(textOrWord: TextSlice | WordRange): textOrWord is WordRange { + if (!textOrWord) return false; + return 'line' in textOrWord; +} diff --git a/src/parser/common/tokenUtils.ts b/src/parser/common/tokenUtils.ts new file mode 100644 index 000000000..2f9394da3 --- /dev/null +++ b/src/parser/common/tokenUtils.ts @@ -0,0 +1,52 @@ +/** + * Utility function for processing SQL tokens and generating keyword suggestions + */ + +import { Parser } from 'antlr4ng'; +import { CandidatesCollection } from 'antlr4-c3'; + +/** + * Process token candidates and generate a list of keyword suggestions + * @param parser SQL parser instance + * @param tokens token candidates + * @returns list of keyword suggestions + */ +export function processTokenCandidates( + parser: Parser, + tokens: CandidatesCollection['tokens'] +): string[] { + const keywords: string[] = []; + + const cleanDisplayName = (displayName: string | null): string => { + return displayName && displayName.startsWith("'") && displayName.endsWith("'") + ? displayName.slice(1, -1) + : displayName || ''; + }; + + const isKeywordToken = (token: number): boolean => { + const symbolicName = parser.vocabulary.getSymbolicName(token); + return Boolean(symbolicName?.startsWith('KW_')); + }; + + for (const [token, followSets] of tokens) { + const displayName = parser.vocabulary.getDisplayName(token); + + if (!displayName || !isKeywordToken(token)) continue; + + const keyword = cleanDisplayName(displayName); + keywords.push(keyword); + + if (followSets.length && followSets.every((s) => isKeywordToken(s))) { + const followKeywords = followSets + .map((s) => cleanDisplayName(parser.vocabulary.getDisplayName(s))) + .filter(Boolean); + + if (followKeywords.length) { + const combinedKeyword = [keyword, ...followKeywords].join(' '); + keywords.push(combinedKeyword); + } + } + } + + return keywords; +} diff --git a/src/parser/common/transform.ts b/src/parser/common/transform.ts new file mode 100644 index 000000000..f4e52317f --- /dev/null +++ b/src/parser/common/transform.ts @@ -0,0 +1,17 @@ +import { LOCALE_TYPE } from './types'; +import { i18n } from '../../locale/locale'; + +/** + * transform message to locale language + * @param message error msg + * @param locale language setting + */ +function transform(message: string, locale: LOCALE_TYPE) { + const regex = /{([^}]+)}/g; + return message.replace( + regex, + (_, key: keyof (typeof i18n)[typeof locale]) => i18n[locale][key] || '' + ); +} + +export { transform }; diff --git a/src/parser/common/types.ts b/src/parser/common/types.ts index 853673ce5..a248abf41 100644 --- a/src/parser/common/types.ts +++ b/src/parser/common/types.ts @@ -44,6 +44,10 @@ export enum EntityContextType { COLUMN = 'column', /** column name that will be created */ COLUMN_CREATE = 'columnCreate', + /** table property key when creating table*/ + TABLE_PROPERTY_KEY = 'tablePropertyKey', + /** table property value when creating table*/ + TABLE_PROPERTY_VALUE = 'tablePropertyValue', } /** @@ -67,3 +71,33 @@ export interface Suggestions { */ readonly keywords: string[]; } + +export type LOCALE_TYPE = 'zh_CN' | 'en_US'; + +export interface SemanticContext { + isStatementBeginning: boolean; +} + +export enum SqlSplitStrategy { + /** Only end the statement with semicolon symbol */ + STRICT, + /** Based on parse tree to split statements */ + LOOSE, +} + +export interface SemanticCollectOptions { + /** + * `sqlSplitStrategy` will affects the result of `isStatementBeginning`; + * + * For example: + * + * The sql is "select id from t1 create\" + * + * - `SqlSplitStrategy.STRICT`: split symbol `;` is missing after select statement so that it considerd as one statement, and `isStatementBeginning` is false + * + * - `SqlSplitStrategy.LOOSE`: in parse tree, it will parse to "select id from t1" and "create" two single statement, so `isStatementBeginning` is true + * + * @default SqlSplitStrategy.STRICT + */ + sqlSplitStrategy?: SqlSplitStrategy; +} diff --git a/src/parser/flink/flinkEntityCollector.ts b/src/parser/flink/flinkEntityCollector.ts index ea4017197..7c0d7faf5 100644 --- a/src/parser/flink/flinkEntityCollector.ts +++ b/src/parser/flink/flinkEntityCollector.ts @@ -1,4 +1,3 @@ -import { EntityContextType } from '../common/types'; import { CatalogPathContext, CatalogPathCreateContext, @@ -12,15 +11,18 @@ import { DatabasePathCreateContext, FunctionNameCreateContext, InsertStatementContext, + PhysicalColumnDefinitionContext, QueryStatementContext, SqlStatementContext, TablePathContext, TablePathCreateContext, + TableReferenceContext, ViewPathContext, ViewPathCreateContext, } from '../../lib/flink/FlinkSqlParser'; import { FlinkSqlParserListener } from '../../lib/flink/FlinkSqlParserListener'; -import { StmtContextType, EntityCollector } from '../common/entityCollector'; +import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector'; +import { EntityContextType } from '../common/types'; export class FlinkEntityCollector extends EntityCollector implements FlinkSqlParserListener { /** ====== Entity Begin */ @@ -33,7 +35,12 @@ export class FlinkEntityCollector extends EntityCollector implements FlinkSqlPar } exitDatabasePathCreate(ctx: DatabasePathCreateContext) { - this.pushEntity(ctx, EntityContextType.DATABASE_CREATE); + this.pushEntity(ctx, EntityContextType.DATABASE_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [CreateDatabaseContext.name], + }, + ]); } exitDatabasePath(ctx: DatabasePathContext) { @@ -41,11 +48,28 @@ export class FlinkEntityCollector extends EntityCollector implements FlinkSqlPar } exitTablePath(ctx: TablePathContext) { - this.pushEntity(ctx, EntityContextType.TABLE); + const needCollectAttr = this.getRootStmt()?.stmtContextType === StmtContextType.SELECT_STMT; + this.pushEntity( + ctx, + EntityContextType.TABLE, + needCollectAttr + ? [ + { + attrName: AttrName.alias, + endContextList: [TableReferenceContext.name], + }, + ] + : undefined + ); } exitTablePathCreate(ctx: TablePathCreateContext) { - this.pushEntity(ctx, EntityContextType.TABLE_CREATE); + this.pushEntity(ctx, EntityContextType.TABLE_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [CreateTableContext.name], + }, + ]); } exitViewPath(ctx: ViewPathContext) { @@ -53,11 +77,25 @@ export class FlinkEntityCollector extends EntityCollector implements FlinkSqlPar } exitViewPathCreate(ctx: ViewPathCreateContext) { - this.pushEntity(ctx, EntityContextType.VIEW_CREATE); + this.pushEntity(ctx, EntityContextType.VIEW_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [CreateViewContext.name], + }, + ]); } exitColumnNameCreate(ctx: ColumnNameCreateContext) { - this.pushEntity(ctx, EntityContextType.COLUMN_CREATE); + this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [PhysicalColumnDefinitionContext.name], + }, + { + attrName: AttrName.colType, + endContextList: [PhysicalColumnDefinitionContext.name], + }, + ]); } exitFunctionNameCreate(ctx: FunctionNameCreateContext) { diff --git a/src/parser/flink/flinkErrorListener.ts b/src/parser/flink/flinkErrorListener.ts new file mode 100644 index 000000000..bc068aa23 --- /dev/null +++ b/src/parser/flink/flinkErrorListener.ts @@ -0,0 +1,85 @@ +import { CodeCompletionCore } from 'antlr4-c3'; +import { ParseErrorListener } from '../common/parseErrorListener'; +import { Parser, Token } from 'antlr4ng'; +import { FlinkSqlParser } from '../../lib/flink/FlinkSqlParser'; + +export class FlinkErrorListener extends ParseErrorListener { + private objectNames: Map = new Map([ + [FlinkSqlParser.RULE_catalogPath, 'catalog'], + [FlinkSqlParser.RULE_catalogPathCreate, 'catalog'], + [FlinkSqlParser.RULE_databasePath, 'database'], + [FlinkSqlParser.RULE_databasePathCreate, 'database'], + [FlinkSqlParser.RULE_tablePath, 'table'], + [FlinkSqlParser.RULE_tablePathCreate, 'table'], + [FlinkSqlParser.RULE_viewPath, 'view'], + [FlinkSqlParser.RULE_viewPathCreate, 'view'], + [FlinkSqlParser.RULE_functionName, 'function'], + [FlinkSqlParser.RULE_functionNameCreate, 'function'], + [FlinkSqlParser.RULE_columnName, 'column'], + [FlinkSqlParser.RULE_columnNameCreate, 'column'], + ]); + + public getExpectedText(parser: Parser, token: Token) { + let expectedText = ''; + const input = this.parserContext.getParsedInput(); + + /** + * Get the program context. + * When called error listener, `this._parseTree` is still `undefined`, + * so we can't use cached parseTree in `getMinimumParserInfo` + */ + let currentContext = parser.context ?? undefined; + while (currentContext?.parent) { + currentContext = currentContext.parent; + } + + const parserInfo = this.parserContext.getMinimumParserInfo( + input, + token.tokenIndex, + currentContext + ); + + if (!parserInfo) return ''; + + const { parser: c3Parser, newTokenIndex, parseTree: c3Context } = parserInfo; + + const core = new CodeCompletionCore(c3Parser); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(newTokenIndex, c3Context); + + if (candidates.rules.size) { + const result: string[] = []; + // get expectedText as collect rules first + for (const candidate of candidates.rules) { + const [ruleType] = candidate; + const name = this.objectNames.get(ruleType); + switch (ruleType) { + case FlinkSqlParser.RULE_databasePath: + case FlinkSqlParser.RULE_tablePath: + case FlinkSqlParser.RULE_viewPath: + case FlinkSqlParser.RULE_functionName: + case FlinkSqlParser.RULE_columnName: + case FlinkSqlParser.RULE_catalogPath: { + result.push(`{existing}${name}`); + break; + } + case FlinkSqlParser.RULE_databasePathCreate: + case FlinkSqlParser.RULE_tablePathCreate: + case FlinkSqlParser.RULE_functionNameCreate: + case FlinkSqlParser.RULE_viewPathCreate: + case FlinkSqlParser.RULE_columnNameCreate: + case FlinkSqlParser.RULE_catalogPathCreate: { + result.push(`{new}${name}`); + break; + } + } + } + expectedText = result.join('{or}'); + } + if (candidates.tokens.size) { + expectedText += expectedText ? '{orKeyword}' : '{keyword}'; + } + return expectedText; + } +} diff --git a/src/parser/flink/flinkSemanticContextCollector.ts b/src/parser/flink/flinkSemanticContextCollector.ts new file mode 100644 index 000000000..2a73c14fe --- /dev/null +++ b/src/parser/flink/flinkSemanticContextCollector.ts @@ -0,0 +1,20 @@ +import { FlinkSqlParserListener } from '../../lib'; +import { FlinkSqlParser, SingleStatementContext } from '../../lib/flink/FlinkSqlParser'; +import SemanticContextCollector from '../common/semanticContextCollector'; + +class FlinkSemanticContextCollector + extends SemanticContextCollector + implements FlinkSqlParserListener +{ + override getWhiteSpaceRuleType(): number { + return FlinkSqlParser.SPACE; + } + override getStatementRuleType(): number { + return FlinkSqlParser.RULE_singleStatement; + } + enterSingleStatement(ctx: SingleStatementContext) { + this.visitStatement(ctx); + } +} + +export { FlinkSemanticContextCollector }; diff --git a/src/parser/flink/index.ts b/src/parser/flink/index.ts index c4319e4fb..e846a4b8c 100644 --- a/src/parser/flink/index.ts +++ b/src/parser/flink/index.ts @@ -1,14 +1,24 @@ -import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; import { CandidatesCollection } from 'antlr4-c3'; +import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; +import { processTokenCandidates } from '../common/tokenUtils'; import { FlinkSqlLexer } from '../../lib/flink/FlinkSqlLexer'; import { FlinkSqlParser, ProgramContext } from '../../lib/flink/FlinkSqlParser'; -import { EntityContextType, Suggestions, SyntaxSuggestion } from '../common/types'; +import { + CaretPosition, + EntityContextType, + SemanticCollectOptions, + Suggestions, + SyntaxSuggestion, +} from '../common/types'; import { BasicSQL } from '../common/basicSQL'; import { StmtContextType } from '../common/entityCollector'; -import { FlinkSqlSplitListener } from './flinkSplitListener'; +import { ErrorListener } from '../common/parseErrorListener'; import { FlinkEntityCollector } from './flinkEntityCollector'; +import { FlinkErrorListener } from './flinkErrorListener'; +import { FlinkSqlSplitListener } from './flinkSplitListener'; +import { FlinkSemanticContextCollector } from './flinkSemanticContextCollector'; -export { FlinkSqlSplitListener, FlinkEntityCollector }; +export { FlinkEntityCollector, FlinkSqlSplitListener }; export class FlinkSQL extends BasicSQL { protected createLexerFromCharStream(charStreams: CharStream) { @@ -28,19 +38,37 @@ export class FlinkSQL extends BasicSQL = new Map([ + [HiveSqlParser.RULE_dbSchemaName, 'database'], + [HiveSqlParser.RULE_dbSchemaNameCreate, 'database'], + [HiveSqlParser.RULE_tableName, 'table'], + [HiveSqlParser.RULE_tableNameCreate, 'table'], + [HiveSqlParser.RULE_viewName, 'view'], + [HiveSqlParser.RULE_viewNameCreate, 'view'], + [HiveSqlParser.RULE_functionNameForDDL, 'function'], + [HiveSqlParser.RULE_functionNameForInvoke, 'function'], + [HiveSqlParser.RULE_functionNameCreate, 'function'], + [HiveSqlParser.RULE_columnName, 'column'], + [HiveSqlParser.RULE_columnNameCreate, 'column'], + ]); + + public getExpectedText(parser: Parser, token: Token) { + let expectedText = ''; + const input = this.parserContext.getParsedInput(); + + /** + * Get the program context. + * When called error listener, `this._parseTree` is still `undefined`, + * so we can't use cached parseTree in `getMinimumParserInfo` + */ + let currentContext = parser.context ?? undefined; + while (currentContext?.parent) { + currentContext = currentContext.parent; + } + + const parserInfo = this.parserContext.getMinimumParserInfo( + input, + token.tokenIndex, + currentContext + ); + + if (!parserInfo) return ''; + + const { parser: c3Parser, newTokenIndex, parseTree: c3Context } = parserInfo; + + const core = new CodeCompletionCore(c3Parser); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(newTokenIndex, c3Context); + + if (candidates.rules.size) { + const result: string[] = []; + // get expectedText as collect rules first + for (const candidate of candidates.rules) { + const [ruleType] = candidate; + const name = this.objectNames.get(ruleType); + switch (ruleType) { + case HiveSqlParser.RULE_dbSchemaName: + case HiveSqlParser.RULE_tableName: + case HiveSqlParser.RULE_viewName: + case HiveSqlParser.RULE_functionNameForDDL: + case HiveSqlParser.RULE_functionNameForInvoke: + case HiveSqlParser.RULE_columnName: { + result.push(`{existing}${name}`); + break; + } + case HiveSqlParser.RULE_dbSchemaNameCreate: + case HiveSqlParser.RULE_tableNameCreate: + case HiveSqlParser.RULE_functionNameCreate: + case HiveSqlParser.RULE_viewNameCreate: + case HiveSqlParser.RULE_columnNameCreate: { + result.push(`{new}${name}`); + break; + } + } + } + expectedText = result.join('{or}'); + } + if (candidates.tokens.size) { + expectedText += expectedText ? '{orKeyword}' : '{keyword}'; + } + return expectedText; + } +} diff --git a/src/parser/hive/hiveSemanticContextCollector.ts b/src/parser/hive/hiveSemanticContextCollector.ts new file mode 100644 index 000000000..994dc2ccd --- /dev/null +++ b/src/parser/hive/hiveSemanticContextCollector.ts @@ -0,0 +1,20 @@ +import { HiveSqlParserListener } from '../../lib'; +import { HiveSqlParser, StatementContext } from '../../lib/hive/HiveSqlParser'; +import SemanticContextCollector from '../common/semanticContextCollector'; + +class HiveSemanticContextCollector + extends SemanticContextCollector + implements HiveSqlParserListener +{ + override getWhiteSpaceRuleType(): number { + return HiveSqlParser.WHITE_SPACE; + } + override getStatementRuleType(): number { + return HiveSqlParser.RULE_statement; + } + enterStatement(ctx: StatementContext) { + this.visitStatement(ctx); + } +} + +export { HiveSemanticContextCollector }; diff --git a/src/parser/hive/index.ts b/src/parser/hive/index.ts index 6356e5d6b..c10b950a9 100644 --- a/src/parser/hive/index.ts +++ b/src/parser/hive/index.ts @@ -1,13 +1,23 @@ -import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; import { CandidatesCollection } from 'antlr4-c3'; +import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; +import { processTokenCandidates } from '../common/tokenUtils'; import { HiveSqlLexer } from '../../lib/hive/HiveSqlLexer'; import { HiveSqlParser, ProgramContext } from '../../lib/hive/HiveSqlParser'; import { BasicSQL } from '../common/basicSQL'; -import { EntityContextType, Suggestions, SyntaxSuggestion } from '../common/types'; +import { + CaretPosition, + EntityContextType, + SemanticCollectOptions, + Suggestions, + SyntaxSuggestion, +} from '../common/types'; import { StmtContextType } from '../common/entityCollector'; -import { HiveSqlSplitListener } from './hiveSplitListener'; +import { ErrorListener } from '../common/parseErrorListener'; import { HiveEntityCollector } from './hiveEntityCollector'; +import { HiveErrorListener } from './hiveErrorListener'; +import { HiveSqlSplitListener } from './hiveSplitListener'; +import { HiveSemanticContextCollector } from './hiveSemanticContextCollector'; export { HiveEntityCollector, HiveSqlSplitListener }; @@ -38,10 +48,23 @@ export class HiveSQL extends BasicSQL = new Map([ + [ImpalaSqlParser.RULE_databaseNamePath, 'database'], + [ImpalaSqlParser.RULE_databaseNameCreate, 'database'], + [ImpalaSqlParser.RULE_tableNamePath, 'table'], + [ImpalaSqlParser.RULE_tableNameCreate, 'table'], + [ImpalaSqlParser.RULE_viewNamePath, 'view'], + [ImpalaSqlParser.RULE_viewNameCreate, 'view'], + [ImpalaSqlParser.RULE_functionNamePath, 'function'], + [ImpalaSqlParser.RULE_functionNameCreate, 'function'], + [ImpalaSqlParser.RULE_columnNamePath, 'column'], + [ImpalaSqlParser.RULE_columnNamePathCreate, 'column'], + ]); + + public getExpectedText(parser: Parser, token: Token) { + let expectedText = ''; + const input = this.parserContext.getParsedInput(); + + /** + * Get the program context. + * When called error listener, `this._parseTree` is still `undefined`, + * so we can't use cached parseTree in `getMinimumParserInfo` + */ + let currentContext = parser.context ?? undefined; + while (currentContext?.parent) { + currentContext = currentContext.parent; + } + + const parserInfo = this.parserContext.getMinimumParserInfo( + input, + token.tokenIndex, + currentContext + ); + + if (!parserInfo) return ''; + + const { parser: c3Parser, newTokenIndex, parseTree: c3Context } = parserInfo; + + const core = new CodeCompletionCore(c3Parser); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(newTokenIndex, c3Context); + + if (candidates.rules.size) { + const result: string[] = []; + // get expectedText as collect rules first + for (const candidate of candidates.rules) { + const [ruleType] = candidate; + const name = this.objectNames.get(ruleType); + switch (ruleType) { + case ImpalaSqlParser.RULE_databaseNamePath: + case ImpalaSqlParser.RULE_tableNamePath: + case ImpalaSqlParser.RULE_functionNamePath: + case ImpalaSqlParser.RULE_viewNamePath: + case ImpalaSqlParser.RULE_columnNamePath: { + result.push(`{existing}${name}`); + break; + } + case ImpalaSqlParser.RULE_databaseNameCreate: + case ImpalaSqlParser.RULE_tableNameCreate: + case ImpalaSqlParser.RULE_functionNameCreate: + case ImpalaSqlParser.RULE_viewNameCreate: + case ImpalaSqlParser.RULE_columnNamePathCreate: { + result.push(`{new}${name}`); + break; + } + } + } + expectedText = result.join(`{or}`); + } + if (candidates.tokens.size) { + expectedText += expectedText ? '{orKeyword}' : '{keyword}'; + } + return expectedText; + } +} diff --git a/src/parser/impala/impalaEntityCollector.ts b/src/parser/impala/impalaEntityCollector.ts index 3644afbc4..0bf4cd0b6 100644 --- a/src/parser/impala/impalaEntityCollector.ts +++ b/src/parser/impala/impalaEntityCollector.ts @@ -1,5 +1,6 @@ import { ImpalaSqlParserListener } from '../../lib'; import { + ColumnDefinitionContext, ColumnNamePathCreateContext, CreateAggregateFunctionContext, CreateFunctionContext, @@ -12,32 +13,77 @@ import { DatabaseNamePathContext, FunctionNameCreateContext, InsertStatementContext, + KuduTableElementContext, QueryStatementContext, + SampledRelationContext, SingleStatementContext, TableNameCreateContext, TableNamePathContext, + ViewColumnItemContext, ViewNameCreateContext, ViewNamePathContext, } from '../../lib/impala/ImpalaSqlParser'; +import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector'; import { EntityContextType } from '../common/types'; -import { StmtContextType, EntityCollector } from '../common/entityCollector'; export class ImpalaEntityCollector extends EntityCollector implements ImpalaSqlParserListener { /** ===== Entity begin */ exitTableNameCreate(ctx: TableNameCreateContext) { - this.pushEntity(ctx, EntityContextType.TABLE_CREATE); + this.pushEntity(ctx, EntityContextType.TABLE_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [ + CreateTableSelectContext.name, + CreateKuduTableAsSelectContext.name, + ], + }, + ]); } exitTableNamePath(ctx: TableNamePathContext) { - this.pushEntity(ctx, EntityContextType.TABLE); + const needCollectAttr = this.getRootStmt()?.stmtContextType === StmtContextType.SELECT_STMT; + this.pushEntity( + ctx, + EntityContextType.TABLE, + needCollectAttr + ? [ + { + attrName: AttrName.alias, + endContextList: [SampledRelationContext.name], + }, + ] + : undefined + ); } exitColumnNamePathCreate(ctx: ColumnNamePathCreateContext) { - this.pushEntity(ctx, EntityContextType.COLUMN_CREATE); + this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [ + ColumnDefinitionContext.name, + KuduTableElementContext.name, + ViewColumnItemContext.name, + ], + }, + { + attrName: AttrName.colType, + endContextList: [ + ColumnDefinitionContext.name, + KuduTableElementContext.name, + ViewColumnItemContext.name, + ], + }, + ]); } exitViewNameCreate(ctx: ViewNameCreateContext) { - this.pushEntity(ctx, EntityContextType.VIEW_CREATE); + this.pushEntity(ctx, EntityContextType.VIEW_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [CreateViewContext.name], + }, + ]); } exitViewNamePath(ctx: ViewNamePathContext) { @@ -49,7 +95,12 @@ export class ImpalaEntityCollector extends EntityCollector implements ImpalaSqlP } exitDatabaseNameCreate(ctx: DatabaseNameCreateContext) { - this.pushEntity(ctx, EntityContextType.DATABASE_CREATE); + this.pushEntity(ctx, EntityContextType.DATABASE_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [CreateSchemaContext.name], + }, + ]); } exitFunctionNameCreate(ctx: FunctionNameCreateContext) { diff --git a/src/parser/impala/impalaSemanticContextCollector.ts b/src/parser/impala/impalaSemanticContextCollector.ts new file mode 100644 index 000000000..2d3ab8d26 --- /dev/null +++ b/src/parser/impala/impalaSemanticContextCollector.ts @@ -0,0 +1,20 @@ +import { ImpalaSqlParserListener } from '../../lib'; +import { ImpalaSqlParser, SingleStatementContext } from '../../lib/impala/ImpalaSqlParser'; +import SemanticContextCollector from '../common/semanticContextCollector'; + +class ImpalaSemanticContextCollector + extends SemanticContextCollector + implements ImpalaSqlParserListener +{ + override getWhiteSpaceRuleType(): number { + return ImpalaSqlParser.WS; + } + override getStatementRuleType(): number { + return ImpalaSqlParser.RULE_singleStatement; + } + enterSingleStatement(ctx: SingleStatementContext) { + this.visitStatement(ctx); + } +} + +export { ImpalaSemanticContextCollector }; diff --git a/src/parser/impala/index.ts b/src/parser/impala/index.ts index 8ff054a4d..aae8f5e33 100644 --- a/src/parser/impala/index.ts +++ b/src/parser/impala/index.ts @@ -1,12 +1,22 @@ -import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; import { CandidatesCollection } from 'antlr4-c3'; +import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; +import { processTokenCandidates } from '../common/tokenUtils'; import { ImpalaSqlLexer } from '../../lib/impala/ImpalaSqlLexer'; import { ImpalaSqlParser, ProgramContext } from '../../lib/impala/ImpalaSqlParser'; import { BasicSQL } from '../common/basicSQL'; -import { EntityContextType, Suggestions, SyntaxSuggestion } from '../common/types'; +import { + CaretPosition, + EntityContextType, + SemanticCollectOptions, + Suggestions, + SyntaxSuggestion, +} from '../common/types'; import { StmtContextType } from '../common/entityCollector'; -import { ImpalaSqlSplitListener } from './impalaSplitListener'; +import { ErrorListener } from '../common/parseErrorListener'; import { ImpalaEntityCollector } from './impalaEntityCollector'; +import { ImpalaErrorListener } from './ImpalaErrorListener'; +import { ImpalaSqlSplitListener } from './impalaSplitListener'; +import { ImpalaSemanticContextCollector } from './impalaSemanticContextCollector'; export { ImpalaEntityCollector, ImpalaSqlSplitListener }; @@ -36,10 +46,23 @@ export class ImpalaSQL extends BasicSQL { return new MysqlSplitListener(); } + protected createErrorListener(_errorListener: ErrorListener): MysqlErrorListener { + const parserContext = this; + return new MysqlErrorListener(_errorListener, parserContext, this.preferredRules); + } protected createEntityCollector(input: string, allTokens?: Token[], caretTokenIndex?: number) { return new MySqlEntityCollector(input, allTokens, caretTokenIndex); } + protected createSemanticContextCollector( + input: string, + caretPosition: CaretPosition, + allTokens: Token[], + options?: SemanticCollectOptions + ) { + return new MySqlSemanticContextCollector(input, caretPosition, allTokens, options); + } + protected processCandidates( candidates: CandidatesCollection, allTokens: Token[], @@ -111,17 +134,8 @@ export class MySQL extends BasicSQL { } } - for (const candidate of candidates.tokens) { - const symbolicName = this._parser.vocabulary.getSymbolicName(candidate[0]); - const displayName = this._parser.vocabulary.getDisplayName(candidate[0]); - if (displayName && symbolicName && symbolicName.startsWith('KW_')) { - const keyword = - displayName.startsWith("'") && displayName.endsWith("'") - ? displayName.slice(1, -1) - : displayName; - keywords.push(keyword); - } - } + const processedKeywords = processTokenCandidates(this._parser, candidates.tokens); + keywords.push(...processedKeywords); return { syntax: originalSyntaxSuggestions, diff --git a/src/parser/mysql/mysqlEntityCollector.ts b/src/parser/mysql/mysqlEntityCollector.ts index 36ffc9bb1..92b5bd0d4 100644 --- a/src/parser/mysql/mysqlEntityCollector.ts +++ b/src/parser/mysql/mysqlEntityCollector.ts @@ -1,8 +1,9 @@ -import type { +import { ColumnCreateTableContext, ColumnNameCreateContext, CopyCreateTableContext, CreateDatabaseContext, + CreateDefinitionContext, CreateFunctionContext, CreateFunctionLoadableContext, CreateViewContext, @@ -15,12 +16,13 @@ import type { SingleStatementContext, TableNameContext, TableNameCreateContext, + TableSourceContext, ViewNameContext, ViewNameCreateContext, } from '../../lib/mysql/MySqlParser'; import type { MySqlParserListener } from '../../lib/mysql/MySqlParserListener'; +import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector'; import { EntityContextType } from '../common/types'; -import { StmtContextType, EntityCollector } from '../common/entityCollector'; export class MySqlEntityCollector extends EntityCollector implements MySqlParserListener { /** ====== Entity Begin */ @@ -33,11 +35,28 @@ export class MySqlEntityCollector extends EntityCollector implements MySqlParser } exitTableName(ctx: TableNameContext) { - this.pushEntity(ctx, EntityContextType.TABLE); + const needCollectAttr = this.getRootStmt()?.stmtContextType === StmtContextType.SELECT_STMT; + this.pushEntity( + ctx, + EntityContextType.TABLE, + needCollectAttr + ? [ + { + attrName: AttrName.alias, + endContextList: [TableSourceContext.name], + }, + ] + : undefined + ); } exitTableNameCreate(ctx: TableNameCreateContext) { - this.pushEntity(ctx, EntityContextType.TABLE_CREATE); + this.pushEntity(ctx, EntityContextType.TABLE_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [ColumnCreateTableContext.name], + }, + ]); } exitViewName(ctx: ViewNameContext) { @@ -49,11 +68,25 @@ export class MySqlEntityCollector extends EntityCollector implements MySqlParser } exitFunctionNameCreate(ctx: FunctionNameCreateContext) { - this.pushEntity(ctx, EntityContextType.FUNCTION_CREATE); + this.pushEntity(ctx, EntityContextType.FUNCTION_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [CreateFunctionContext.name], + }, + ]); } exitColumnNameCreate(ctx: ColumnNameCreateContext) { - this.pushEntity(ctx, EntityContextType.COLUMN_CREATE); + this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [ + { + attrName: AttrName.comment, + endContextList: [CreateDefinitionContext.name], + }, + { + attrName: AttrName.colType, + endContextList: [CreateDefinitionContext.name], + }, + ]); } /** ===== Statement begin */ diff --git a/src/parser/mysql/mysqlErrorListener.ts b/src/parser/mysql/mysqlErrorListener.ts new file mode 100644 index 000000000..c015ee5a0 --- /dev/null +++ b/src/parser/mysql/mysqlErrorListener.ts @@ -0,0 +1,81 @@ +import { CodeCompletionCore } from 'antlr4-c3'; +import { ParseErrorListener } from '../common/parseErrorListener'; +import { Parser, Token } from 'antlr4ng'; +import { MySqlParser } from '../../lib/mysql/MySqlParser'; + +export class MysqlErrorListener extends ParseErrorListener { + private objectNames: Map = new Map([ + [MySqlParser.RULE_databaseName, 'database'], + [MySqlParser.RULE_databaseNameCreate, 'database'], + [MySqlParser.RULE_tableName, 'table'], + [MySqlParser.RULE_tableNameCreate, 'table'], + [MySqlParser.RULE_viewName, 'view'], + [MySqlParser.RULE_viewNameCreate, 'view'], + [MySqlParser.RULE_functionName, 'function'], + [MySqlParser.RULE_functionNameCreate, 'function'], + [MySqlParser.RULE_columnName, 'column'], + [MySqlParser.RULE_columnNameCreate, 'column'], + ]); + + public getExpectedText(parser: Parser, token: Token) { + let expectedText = ''; + const input = this.parserContext.getParsedInput(); + + /** + * Get the program context. + * When called error listener, `this._parseTree` is still `undefined`, + * so we can't use cached parseTree in `getMinimumParserInfo` + */ + let currentContext = parser.context ?? undefined; + while (currentContext?.parent) { + currentContext = currentContext.parent; + } + + const parserInfo = this.parserContext.getMinimumParserInfo( + input, + token.tokenIndex, + currentContext + ); + + if (!parserInfo) return ''; + + const { parser: c3Parser, newTokenIndex, parseTree: c3Context } = parserInfo; + + const core = new CodeCompletionCore(c3Parser); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(newTokenIndex, c3Context); + + if (candidates.rules.size) { + const result: string[] = []; + // get expectedText as collect rules first + for (const candidate of candidates.rules) { + const [ruleType] = candidate; + const name = this.objectNames.get(ruleType); + switch (ruleType) { + case MySqlParser.RULE_databaseName: + case MySqlParser.RULE_tableName: + case MySqlParser.RULE_functionName: + case MySqlParser.RULE_viewName: + case MySqlParser.RULE_columnName: { + result.push(`{existing}${name}`); + break; + } + case MySqlParser.RULE_databaseNameCreate: + case MySqlParser.RULE_tableNameCreate: + case MySqlParser.RULE_functionNameCreate: + case MySqlParser.RULE_viewNameCreate: + case MySqlParser.RULE_columnNameCreate: { + result.push(`{new}${name}`); + break; + } + } + } + expectedText = result.join(`{or}`); + } + if (candidates.tokens.size) { + expectedText += expectedText ? '{orKeyword}' : '{keyword}'; + } + return expectedText; + } +} diff --git a/src/parser/mysql/mysqlSemanticContextCollector.ts b/src/parser/mysql/mysqlSemanticContextCollector.ts new file mode 100644 index 000000000..27b3a9ec9 --- /dev/null +++ b/src/parser/mysql/mysqlSemanticContextCollector.ts @@ -0,0 +1,20 @@ +import { MySqlParserListener } from '../../lib'; +import { MySqlParser, SingleStatementContext } from '../../lib/mysql/MySqlParser'; +import SemanticContextCollector from '../common/semanticContextCollector'; + +class MySqlSemanticContextCollector + extends SemanticContextCollector + implements MySqlParserListener +{ + override getWhiteSpaceRuleType(): number { + return MySqlParser.SPACE; + } + override getStatementRuleType(): number { + return MySqlParser.RULE_singleStatement; + } + enterSingleStatement(ctx: SingleStatementContext) { + this.visitStatement(ctx); + } +} + +export { MySqlSemanticContextCollector }; diff --git a/src/parser/postgresql/index.ts b/src/parser/postgresql/index.ts index 97fe9c085..03fc659fd 100644 --- a/src/parser/postgresql/index.ts +++ b/src/parser/postgresql/index.ts @@ -1,13 +1,23 @@ import { CandidatesCollection } from 'antlr4-c3'; import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; +import { processTokenCandidates } from '../common/tokenUtils'; import { PostgreSqlLexer } from '../../lib/postgresql/PostgreSqlLexer'; import { PostgreSqlParser, ProgramContext } from '../../lib/postgresql/PostgreSqlParser'; -import { EntityContextType, Suggestions, SyntaxSuggestion } from '../common/types'; +import { + CaretPosition, + EntityContextType, + SemanticCollectOptions, + Suggestions, + SyntaxSuggestion, +} from '../common/types'; import { BasicSQL } from '../common/basicSQL'; import { StmtContextType } from '../common/entityCollector'; +import { ErrorListener } from '../common/parseErrorListener'; import { PostgreSqlEntityCollector } from './postgreEntityCollector'; +import { PostgreSqlErrorListener } from './postgreErrorListener'; import { PostgreSqlSplitListener } from './postgreSplitListener'; +import { PostgreSemanticContextCollector } from './postgreSemanticContextCollector'; export { PostgreSqlEntityCollector, PostgreSqlSplitListener }; @@ -41,10 +51,23 @@ export class PostgreSQL extends BasicSQL = new Map([ + [PostgreSqlParser.RULE_database_name, 'database'], + [PostgreSqlParser.RULE_database_name_create, 'database'], + [PostgreSqlParser.RULE_table_name, 'table'], + [PostgreSqlParser.RULE_table_name_create, 'table'], + [PostgreSqlParser.RULE_view_name, 'view'], + [PostgreSqlParser.RULE_view_name_create, 'view'], + [PostgreSqlParser.RULE_function_name, 'function'], + [PostgreSqlParser.RULE_function_name_create, 'function'], + [PostgreSqlParser.RULE_column_name, 'column'], + [PostgreSqlParser.RULE_column_name_create, 'column'], + [PostgreSqlParser.RULE_schema_name_create, 'schema'], + [PostgreSqlParser.RULE_schema_name, 'schema'], + [PostgreSqlParser.RULE_procedure_name_create, 'procedure'], + [PostgreSqlParser.RULE_procedure_name, 'procedure'], + ]); + + public getExpectedText(parser: Parser, token: Token) { + let expectedText = ''; + const input = this.parserContext.getParsedInput(); + + /** + * Get the program context. + * When called error listener, `this._parseTree` is still `undefined`, + * so we can't use cached parseTree in `getMinimumParserInfo` + */ + let currentContext = parser.context ?? undefined; + while (currentContext?.parent) { + currentContext = currentContext.parent; + } + + const parserInfo = this.parserContext.getMinimumParserInfo( + input, + token.tokenIndex, + currentContext + ); + + if (!parserInfo) return ''; + + const { parser: c3Parser, newTokenIndex, parseTree: c3Context } = parserInfo; + + const core = new CodeCompletionCore(c3Parser); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(newTokenIndex, c3Context); + + if (candidates.rules.size) { + const result: string[] = []; + // get expectedText as collect rules first + for (const candidate of candidates.rules) { + const [ruleType] = candidate; + const name = this.objectNames.get(ruleType); + switch (ruleType) { + case PostgreSqlParser.RULE_table_name: + case PostgreSqlParser.RULE_function_name: + case PostgreSqlParser.RULE_schema_name: + case PostgreSqlParser.RULE_view_name: + case PostgreSqlParser.RULE_database_name: + case PostgreSqlParser.RULE_procedure_name: + case PostgreSqlParser.RULE_column_name: { + result.push(`{existing}${name}`); + break; + } + case PostgreSqlParser.RULE_table_name_create: + case PostgreSqlParser.RULE_function_name_create: + case PostgreSqlParser.RULE_schema_name_create: + case PostgreSqlParser.RULE_view_name_create: + case PostgreSqlParser.RULE_database_name_create: + case PostgreSqlParser.RULE_procedure_name_create: + case PostgreSqlParser.RULE_column_name_create: { + result.push(`{new}${name}`); + break; + } + } + } + expectedText = result.join('{or}'); + } + if (candidates.tokens.size) { + expectedText += expectedText ? '{orKeyword}' : '{keyword}'; + } + return expectedText; + } +} diff --git a/src/parser/postgresql/postgreSemanticContextCollector.ts b/src/parser/postgresql/postgreSemanticContextCollector.ts new file mode 100644 index 000000000..e371da74f --- /dev/null +++ b/src/parser/postgresql/postgreSemanticContextCollector.ts @@ -0,0 +1,21 @@ +import { PostgreSqlParserListener } from '../../lib'; +import { PostgreSqlParser, SingleStmtContext } from '../../lib/postgresql/PostgreSqlParser'; +import SemanticContextCollector from '../common/semanticContextCollector'; + +class PostgreSemanticContextCollector + extends SemanticContextCollector + implements PostgreSqlParserListener +{ + override getWhiteSpaceRuleType(): number { + return PostgreSqlParser.Whitespace; + } + override getStatementRuleType(): number { + return PostgreSqlParser.RULE_singleStmt; + } + + enterSingleStmt(ctx: SingleStmtContext) { + this.visitStatement(ctx); + } +} + +export { PostgreSemanticContextCollector }; diff --git a/src/parser/spark/index.ts b/src/parser/spark/index.ts index 25fcf1da3..f3b163036 100644 --- a/src/parser/spark/index.ts +++ b/src/parser/spark/index.ts @@ -1,14 +1,24 @@ -import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; import { CandidatesCollection } from 'antlr4-c3'; +import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; +import { processTokenCandidates } from '../common/tokenUtils'; import { SparkSqlLexer } from '../../lib/spark/SparkSqlLexer'; -import { SparkSqlParser, ProgramContext } from '../../lib/spark/SparkSqlParser'; +import { ProgramContext, SparkSqlParser } from '../../lib/spark/SparkSqlParser'; import { BasicSQL } from '../common/basicSQL'; -import { Suggestions, EntityContextType, SyntaxSuggestion } from '../common/types'; +import { + Suggestions, + EntityContextType, + SyntaxSuggestion, + CaretPosition, + SemanticCollectOptions, +} from '../common/types'; import { StmtContextType } from '../common/entityCollector'; -import { SparkSqlSplitListener } from './sparkSplitListener'; +import { ErrorListener } from '../common/parseErrorListener'; import { SparkEntityCollector } from './sparkEntityCollector'; +import { SparkErrorListener } from './sparkErrorListener'; +import { SparkSqlSplitListener } from './sparkSplitListener'; +import { SparkSemanticContextCollector } from './sparkSemanticContextCollector'; -export { SparkSqlSplitListener, SparkEntityCollector }; +export { SparkEntityCollector, SparkSqlSplitListener }; export class SparkSQL extends BasicSQL { protected createLexerFromCharStream(charStreams: CharStream) { @@ -36,10 +46,23 @@ export class SparkSQL extends BasicSQL = new Map([ + [SparkSqlParser.RULE_namespaceName, 'namespace'], + [SparkSqlParser.RULE_namespaceNameCreate, 'namespace'], + [SparkSqlParser.RULE_tableName, 'table'], + [SparkSqlParser.RULE_tableNameCreate, 'table'], + [SparkSqlParser.RULE_viewName, 'view'], + [SparkSqlParser.RULE_viewNameCreate, 'view'], + [SparkSqlParser.RULE_functionName, 'function'], + [SparkSqlParser.RULE_functionNameCreate, 'function'], + [SparkSqlParser.RULE_columnName, 'column'], + [SparkSqlParser.RULE_columnNameCreate, 'column'], + ]); + + public getExpectedText(parser: Parser, token: Token) { + let expectedText = ''; + const input = this.parserContext.getParsedInput(); + + /** + * Get the program context. + * When called error listener, `this._parseTree` is still `undefined`, + * so we can't use cached parseTree in `getMinimumParserInfo` + */ + let currentContext = parser.context ?? undefined; + while (currentContext?.parent) { + currentContext = currentContext.parent; + } + + const parserInfo = this.parserContext.getMinimumParserInfo( + input, + token.tokenIndex, + currentContext + ); + + if (!parserInfo) return ''; + + const { parser: c3Parser, newTokenIndex, parseTree: c3Context } = parserInfo; + + const core = new CodeCompletionCore(c3Parser); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(newTokenIndex, c3Context); + if (candidates.rules.size) { + const result = []; + // get expectedText as collect rules first + for (const candidate of candidates.rules) { + const [ruleType] = candidate; + const name = this.objectNames.get(ruleType); + switch (ruleType) { + case SparkSqlParser.RULE_namespaceName: + case SparkSqlParser.RULE_tableName: + case SparkSqlParser.RULE_viewName: + case SparkSqlParser.RULE_functionName: + case SparkSqlParser.RULE_columnName: { + result.push(`{existing}${name}`); + break; + } + case SparkSqlParser.RULE_namespaceNameCreate: + case SparkSqlParser.RULE_tableNameCreate: + case SparkSqlParser.RULE_functionNameCreate: + case SparkSqlParser.RULE_viewNameCreate: + case SparkSqlParser.RULE_columnNameCreate: { + result.push(`{new}${name}`); + break; + } + } + } + expectedText = result.join('{or}'); + } + if (candidates.tokens.size) { + expectedText += expectedText ? '{orKeyword}' : '{keyword}'; + } + return expectedText; + } +} diff --git a/src/parser/spark/sparkSemanticContextCollector.ts b/src/parser/spark/sparkSemanticContextCollector.ts new file mode 100644 index 000000000..6f0c14617 --- /dev/null +++ b/src/parser/spark/sparkSemanticContextCollector.ts @@ -0,0 +1,20 @@ +import { SparkSqlParserListener } from '../../lib'; +import { SingleStatementContext, SparkSqlParser } from '../../lib/spark/SparkSqlParser'; +import SemanticContextCollector from '../common/semanticContextCollector'; + +class SparkSemanticContextCollector + extends SemanticContextCollector + implements SparkSqlParserListener +{ + override getWhiteSpaceRuleType(): number { + return SparkSqlParser.WS; + } + override getStatementRuleType(): number { + return SparkSqlParser.RULE_singleStatement; + } + enterSingleStatement(ctx: SingleStatementContext) { + this.visitStatement(ctx); + } +} + +export { SparkSemanticContextCollector }; diff --git a/src/parser/trino/index.ts b/src/parser/trino/index.ts index ee3fe12a2..7faba805d 100644 --- a/src/parser/trino/index.ts +++ b/src/parser/trino/index.ts @@ -1,14 +1,24 @@ -import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; import { CandidatesCollection } from 'antlr4-c3'; +import { CharStream, CommonTokenStream, Token } from 'antlr4ng'; +import { processTokenCandidates } from '../common/tokenUtils'; import { TrinoSqlLexer } from '../../lib/trino/TrinoSqlLexer'; -import { TrinoSqlParser, ProgramContext } from '../../lib/trino/TrinoSqlParser'; +import { ProgramContext, TrinoSqlParser } from '../../lib/trino/TrinoSqlParser'; import { BasicSQL } from '../common/basicSQL'; -import { Suggestions, EntityContextType, SyntaxSuggestion } from '../common/types'; +import { + Suggestions, + EntityContextType, + SyntaxSuggestion, + CaretPosition, + SemanticCollectOptions, +} from '../common/types'; import { StmtContextType } from '../common/entityCollector'; -import { TrinoSqlSplitListener } from './trinoSplitListener'; +import { ErrorListener } from '../common/parseErrorListener'; import { TrinoEntityCollector } from './trinoEntityCollector'; +import { TrinoErrorListener } from './trinoErrorListener'; +import { TrinoSqlSplitListener } from './trinoSplitListener'; +import { TrinoSemanticContextCollector } from './trinoSemanticContextCollector'; -export { TrinoSqlSplitListener, TrinoEntityCollector }; +export { TrinoEntityCollector, TrinoSqlSplitListener }; export class TrinoSQL extends BasicSQL { protected createLexerFromCharStream(charStreams: CharStream) { @@ -23,10 +33,23 @@ export class TrinoSQL extends BasicSQL = new Set([ TrinoSqlParser.RULE_catalogRef, TrinoSqlParser.RULE_catalogNameCreate, @@ -121,17 +144,9 @@ export class TrinoSQL extends BasicSQL = new Map([ + [TrinoSqlParser.RULE_catalogRef, 'catalog'], + [TrinoSqlParser.RULE_catalogNameCreate, 'catalog'], + [TrinoSqlParser.RULE_tableRef, 'table'], + [TrinoSqlParser.RULE_tableNameCreate, 'table'], + [TrinoSqlParser.RULE_viewRef, 'view'], + [TrinoSqlParser.RULE_viewNameCreate, 'view'], + [TrinoSqlParser.RULE_schemaRef, 'schema'], + [TrinoSqlParser.RULE_schemaNameCreate, 'schema'], + [TrinoSqlParser.RULE_functionName, 'function'], + [TrinoSqlParser.RULE_columnRef, 'column'], + [TrinoSqlParser.RULE_columnNameCreate, 'column'], + ]); + + public getExpectedText(parser: Parser, token: Token) { + let expectedText = ''; + const input = this.parserContext.getParsedInput(); + + /** + * Get the program context. + * When called error listener, `this._parseTree` is still `undefined`, + * so we can't use cached parseTree in `getMinimumParserInfo` + */ + let currentContext = parser.context ?? undefined; + while (currentContext?.parent) { + currentContext = currentContext.parent; + } + + const parserInfo = this.parserContext.getMinimumParserInfo( + input, + token.tokenIndex, + currentContext + ); + + if (!parserInfo) return ''; + + const { parser: c3Parser, newTokenIndex, parseTree: c3Context } = parserInfo; + + const core = new CodeCompletionCore(c3Parser); + core.preferredRules = this.preferredRules; + + const candidates = core.collectCandidates(newTokenIndex, c3Context); + + if (candidates.rules.size) { + const result: string[] = []; + // get expectedText as collect rules first + for (const candidate of candidates.rules) { + const [ruleType] = candidate; + const name = this.objectNames.get(ruleType); + switch (ruleType) { + case TrinoSqlParser.RULE_catalogRef: + case TrinoSqlParser.RULE_schemaRef: + case TrinoSqlParser.RULE_tableRef: + case TrinoSqlParser.RULE_viewRef: + case TrinoSqlParser.RULE_functionName: + case TrinoSqlParser.RULE_columnRef: { + result.push(`{existing}${name}`); + break; + } + case TrinoSqlParser.RULE_catalogNameCreate: + case TrinoSqlParser.RULE_tableNameCreate: + case TrinoSqlParser.RULE_schemaNameCreate: + case TrinoSqlParser.RULE_viewNameCreate: + case TrinoSqlParser.RULE_tableNameCreate: { + result.push(`{new}${name}`); + break; + } + } + } + expectedText = result.join('{or}'); + } + if (candidates.tokens.size) { + expectedText += expectedText ? '{orKeyword}' : '{keyword}'; + } + return expectedText; + } +} diff --git a/src/parser/trino/trinoSemanticContextCollector.ts b/src/parser/trino/trinoSemanticContextCollector.ts new file mode 100644 index 000000000..3ba9cb5ff --- /dev/null +++ b/src/parser/trino/trinoSemanticContextCollector.ts @@ -0,0 +1,17 @@ +import { TrinoSqlListener } from '../../lib'; +import { StatementsContext, TrinoSqlParser } from '../../lib/trino/TrinoSqlParser'; +import SemanticContextCollector from '../common/semanticContextCollector'; + +class TrinoSemanticContextCollector extends SemanticContextCollector implements TrinoSqlListener { + override getWhiteSpaceRuleType(): number { + return TrinoSqlParser.WS; + } + override getStatementRuleType(): number { + return TrinoSqlParser.RULE_statements; + } + enterStatements(ctx: StatementsContext) { + this.visitStatement(ctx); + } +} + +export { TrinoSemanticContextCollector }; diff --git a/test/helper.ts b/test/helper.ts index 146bdc362..05868f4f9 100644 --- a/test/helper.ts +++ b/test/helper.ts @@ -32,6 +32,67 @@ export const readSQL = (dirname: string, fileName: string) => { return result; }; +/** + * Read a sql string with special range + * @param range line and column start from 1 + */ +export const readSQLByRange = ( + sqlSource: { + dirname?: string; + fileName?: string; + sql?: string; + }, + range: { startLine: number; endLine: number; startColumn?: number; endColumn?: number } +) => { + const { dirname, fileName, sql } = sqlSource; + const { startLine, endLine, startColumn, endColumn } = range; + + if (endLine < startLine) throw new RangeError('endLine must greater or equal than startLine!'); + if (!sql && (!dirname || !fileName)) + throw new Error('A sql input or file info params is required!'); + + const content = + sql !== undefined + ? sql + : fs.readFileSync(path.join(dirname, 'fixtures', fileName), 'utf-8'); + let index = 0; + let middleText = ''; + let startLineText = ''; + let endLineText = ''; + let currLine = 1; + + while (index < content.length && currLine <= endLine) { + const char = content[index]; + if (char === '\n') { + currLine++; + } + + if (currLine === startLine) { + // The line break at the beginning needs to be discarded. + if (!(char === '\n' && startLineText === '')) { + startLineText += char; + } + } else if ( + currLine > startLine && + (currLine < endLine || (currLine === endLine && char === '\n')) + ) { + middleText += char; + } else if (currLine === endLine && startLine !== endLine) { + endLineText += char; + } + + index++; + } + + startLineText = startLineText.slice( + startColumn !== undefined ? startColumn - 1 : 0, + endLine === startLine && endColumn !== undefined ? endColumn - 1 : undefined + ); + endLineText = endLineText.slice(0, endColumn !== undefined ? endColumn - 1 : undefined); + + return startLineText + middleText + endLineText; +}; + export function commentOtherLine(sqlContent: string, line: number) { const slices = sqlContent.split('\n').map((item, index) => { if (index !== line - 1) { diff --git a/test/jest.d.ts b/test/jest.d.ts index 56a6dcae7..ee98c31dd 100644 --- a/test/jest.d.ts +++ b/test/jest.d.ts @@ -9,9 +9,9 @@ namespace jest { * Every item must be primitive type, like string, number, etc. * * @example - * expect(['a', 'b']).toMatchUnorderedArrary(['b', 'a']) // pass - * expect(['b', 'a']).toMatchUnorderedArrary(['c', 'b', 'a']) // not pass, missing item 'c' + * expect(['a', 'b']).toMatchUnorderedArray(['b', 'a']) // pass + * expect(['b', 'a']).toMatchUnorderedArray(['c', 'b', 'a']) // not pass, missing item 'c' */ - toMatchUnorderedArrary(expected: unknown[]): R; + toMatchUnorderedArray(expected: unknown[]): R; } } diff --git a/test/matchers.ts b/test/matchers.ts index 66cb5d81f..c37ade478 100644 --- a/test/matchers.ts +++ b/test/matchers.ts @@ -1,4 +1,4 @@ -export const toMatchUnorderedArrary: jest.CustomMatcher = function ( +export const toMatchUnorderedArray: jest.CustomMatcher = function ( actual: Array, expected: Array ) { diff --git a/test/parser/flink/contextCollect/entityCollector.test.ts b/test/parser/flink/contextCollect/entityCollector.test.ts index 8f412c9f5..622565a39 100644 --- a/test/parser/flink/contextCollect/entityCollector.test.ts +++ b/test/parser/flink/contextCollect/entityCollector.test.ts @@ -1,10 +1,15 @@ +import { ParseTreeListener } from 'antlr4ng'; import fs from 'fs'; import path from 'path'; -import { ParseTreeListener } from 'antlr4ng'; -import { FlinkSQL, FlinkEntityCollector, FlinkSqlSplitListener } from 'src/parser/flink'; import { FlinkSqlParserListener } from 'src/lib/flink/FlinkSqlParserListener'; +import { + AttrName, + isCommonEntityContext, + isFuncEntityContext, + StmtContextType, +} from 'src/parser/common/entityCollector'; import { EntityContextType } from 'src/parser/common/types'; -import { StmtContextType } from 'src/parser/common/entityCollector'; +import { FlinkEntityCollector, FlinkSQL, FlinkSqlSplitListener } from 'src/parser/flink'; const commonSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'common.sql'), 'utf-8'); @@ -49,23 +54,60 @@ describe('Flink entity collector tests', () => { ); expect(tableCreateEntity.belongStmt.position).toEqual({ startIndex: 0, - endIndex: 85, + endIndex: 180, startLine: 1, endLine: 1, startColumn: 1, - endColumn: 87, + endColumn: 182, }); - expect(tableCreateEntity.relatedEntities).toBeNull(); - - expect(tableCreateEntity.columns.length).toBe(2); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'test table comment ABC.'", + startIndex: 78, + endIndex: 102, + line: 1, + startColumn: 79, + endColumn: 104, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).toBeNull(); + + expect(tableCreateEntity.columns?.length).toBe(2); + tableCreateEntity.columns?.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0][AttrName.comment]).toEqual({ + text: "'col1'", + startIndex: 47, + endIndex: 52, + line: 1, + startColumn: 48, + endColumn: 54, + }); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'BIGINT', + startIndex: 32, + endIndex: 37, + line: 1, + startColumn: 33, + endColumn: 39, + }); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'STRING', + startIndex: 62, + endIndex: 67, + line: 1, + startColumn: 63, + endColumn: 69, + }); + } }); test('create table as select', () => { @@ -83,8 +125,8 @@ describe('Flink entity collector tests', () => { expect(tableCreateEntity.entityContextType).toBe(EntityContextType.TABLE_CREATE); expect(tableCreateEntity.text).toBe('my_ctas_table'); expect(tableCreateEntity.position).toEqual({ - startIndex: 102, - endIndex: 114, + startIndex: 197, + endIndex: 209, line: 3, startColumn: 14, endColumn: 27, @@ -94,27 +136,26 @@ describe('Flink entity collector tests', () => { StmtContextType.CREATE_TABLE_STMT ); expect(tableCreateEntity.belongStmt.position).toEqual({ - startIndex: 89, - endIndex: 228, + startIndex: 184, + endIndex: 323, startLine: 3, endLine: 11, startColumn: 1, endColumn: 20, }); - - expect(tableCreateEntity.columns).toBeNull(); - - expect(tableCreateEntity.relatedEntities.length).toBe(1); - tableCreateEntity.relatedEntities.forEach((relatedEntity) => { - expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); - }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities.length).toBe(1); + tableCreateEntity.relatedEntities.forEach((relatedEntity) => { + expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); + }); + } expect(allEntities[1].text).toBe('source_table'); expect(allEntities[1].belongStmt.rootStmt).toBe(allEntities[0].belongStmt); expect(allEntities[1].position).toEqual({ - startIndex: 191, - endIndex: 202, + startIndex: 286, + endIndex: 297, line: 9, startColumn: 5, endColumn: 17, @@ -140,14 +181,15 @@ describe('Flink entity collector tests', () => { StmtContextType.CREATE_TABLE_STMT ); - expect(tableCreateEntity.columns.length).toBe(1); - expect(tableCreateEntity.columns[0].text).toBe('id'); - expect(tableCreateEntity.columns[0].entityContextType).toBe( - EntityContextType.COLUMN_CREATE - ); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); - + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns.length).toBe(1); + expect(tableCreateEntity.columns[0].text).toBe('id'); + expect(tableCreateEntity.columns[0].entityContextType).toBe( + EntityContextType.COLUMN_CREATE + ); + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + } expect(originTableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(originTableEntity.text).toBe('Orders_in_file'); expect(originTableEntity.belongStmt).toBe(tableCreateEntity.belongStmt); @@ -160,16 +202,41 @@ describe('Flink entity collector tests', () => { const allEntities = collectListener.getEntities(); - expect(allEntities.length).toBe(1); + expect(allEntities.length).toBe(2); const tableEntity = allEntities[0]; - + const tableEntity1 = allEntities[1]; expect(tableEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(tableEntity.text).toBe('Orders'); - expect(tableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(tableEntity.text).toBe('Order1'); + expect(tableEntity[AttrName.alias]).toEqual({ + text: 'o1', + startIndex: 616, + endIndex: 617, + line: 23, + startColumn: 54, + endColumn: 56, + }); - expect(tableEntity.columns).toBeNull(); - expect(tableEntity.relatedEntities).toBeNull(); + expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } + expect(tableEntity1.entityContextType).toBe(EntityContextType.TABLE); + expect(tableEntity1.text).toBe('Order2'); + expect(tableEntity1[AttrName.alias]).toEqual({ + text: 't2', + startIndex: 634, + endIndex: 635, + line: 23, + startColumn: 72, + endColumn: 74, + }); + expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } }); test('select from table join', () => { @@ -187,16 +254,18 @@ describe('Flink entity collector tests', () => { expect(tableEntity1.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity1.text).toBe('Orders'); expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity1.columns).toBeNull(); - expect(tableEntity1.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity2.text).toBe('Product'); expect(tableEntity2.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity2.columns).toBeNull(); - expect(tableEntity2.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity2)) { + expect(tableEntity2.columns).toBeUndefined(); + expect(tableEntity2.relatedEntities).toBeNull(); + } expect(tableEntity1.belongStmt).toBe(tableEntity2.belongStmt); }); @@ -216,16 +285,17 @@ describe('Flink entity collector tests', () => { expect(tableEntity1.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity1.text).toBe('t1'); expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity1.columns).toBeNull(); - expect(tableEntity1.relatedEntities).toBeNull(); - + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity2.text).toBe('t2'); expect(tableEntity2.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity2.columns).toBeNull(); - expect(tableEntity2.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity2)) { + expect(tableEntity2.columns).toBeUndefined(); + expect(tableEntity2.relatedEntities).toBeNull(); + } expect(tableEntity1.belongStmt.rootStmt).toBe(tableEntity2.belongStmt.rootStmt); }); @@ -244,9 +314,10 @@ describe('Flink entity collector tests', () => { expect(tableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity.text).toBe('country_page_view'); expect(tableEntity.belongStmt.stmtContextType).toBe(StmtContextType.INSERT_STMT); - - expect(tableEntity.columns).toBeNull(); - expect(tableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity)) { + expect(tableEntity.columns).toBeUndefined(); + expect(tableEntity.relatedEntities).toBeNull(); + } }); test('insert into table select', () => { @@ -307,11 +378,18 @@ describe('Flink entity collector tests', () => { flink.listen(collectListener as ParseTreeListener, insertTableContext); const allEntities = collectListener.getEntities(); - expect(allEntities.length).toBe(2); expect(allEntities[0].entityContextType).toBe(EntityContextType.VIEW_CREATE); expect(allEntities[0].text).toBe('view1'); + expect(allEntities[0][AttrName.comment]).toEqual({ + text: "'this is a view'", + startIndex: 1254, + endIndex: 1269, + line: 42, + startColumn: 39, + endColumn: 55, + }); expect(allEntities[0].belongStmt.stmtContextType).toBe(StmtContextType.CREATE_VIEW_STMT); expect(allEntities[1].entityContextType).toBe(EntityContextType.TABLE); @@ -333,26 +411,35 @@ describe('Flink entity collector tests', () => { expect(dbEntity.entityContextType).toBe(EntityContextType.DATABASE_CREATE); expect(dbEntity.text).toBe('db1'); + expect(dbEntity[AttrName.comment]).toEqual({ + text: "'this is a created database'", + startIndex: 1345, + endIndex: 1372, + line: 44, + startColumn: 43, + endColumn: 71, + }); expect(dbEntity.position).toEqual({ endColumn: 34, - endIndex: 1160, + endIndex: 1335, line: 44, startColumn: 31, - startIndex: 1158, + startIndex: 1333, }); expect(dbEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_DATABASE_STMT); expect(dbEntity.belongStmt.position).toEqual({ - endColumn: 82, - endIndex: 1208, + endColumn: 119, + endIndex: 1420, endLine: 44, startColumn: 1, - startIndex: 1128, + startIndex: 1303, startLine: 44, }); - - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('create function', () => { @@ -371,10 +458,10 @@ describe('Flink entity collector tests', () => { expect(functionEntity.text).toBe('tempFunction'); expect(functionEntity.position).toEqual({ endColumn: 43, - endIndex: 1253, + endIndex: 1465, line: 46, startColumn: 31, - startIndex: 1242, + startIndex: 1454, }); expect(functionEntity.belongStmt.stmtContextType).toBe( @@ -382,14 +469,15 @@ describe('Flink entity collector tests', () => { ); expect(functionEntity.belongStmt.position).toEqual({ endColumn: 58, - endIndex: 1268, + endIndex: 1480, endLine: 46, startColumn: 1, - startIndex: 1212, + startIndex: 1424, startLine: 46, }); - - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity?.arguments)?.toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } }); }); diff --git a/test/parser/flink/contextCollect/fixtures/common.sql b/test/parser/flink/contextCollect/fixtures/common.sql index db3f9ccf8..3dc20d592 100644 --- a/test/parser/flink/contextCollect/fixtures/common.sql +++ b/test/parser/flink/contextCollect/fixtures/common.sql @@ -1,4 +1,4 @@ -CREATE TABLE MyTable ('user_id' BIGINT, 'name' STRING) WITH ('connector' = 'oracle-x'); +CREATE TABLE MyTable ('user_id' BIGINT COMMENT 'col1', 'name' STRING) COMMENT 'test table comment ABC.' PARTITIONED BY (a, h) WITH ('connector' = 'kafka','kafka.topic' = 'log.test'); CREATE TABLE my_ctas_table WITH ('connector' = 'kafka') AS SELECT @@ -20,7 +20,7 @@ CREATE TABLE Orders_with_watermark ( INCLUDING GENERATED ); -SELECT order_id, price + tax FROM Orders; +SELECT order_id, price + tax AS total FROM Order1 AS o1 JOIN Order2 AS t2 ON t1.id = t2.user_id; SELECT * FROM Orders LEFT JOIN Product ON Orders.product_id = Product.id; @@ -39,8 +39,8 @@ EXECUTE STATEMENT SET BEGIN ('Amercian', 'georage', 22); END; -CREATE VIEW view1(col1, col2) AS SELECT col3, col4 FROM tbl; +CREATE VIEW view1(col1, col2) COMMENT 'this is a view' AS SELECT col3, col4 FROM tbl; -CREATE DATABASE IF NOT EXISTS db1 WITH ('key1' = 'value1', 'key2.a' = 'value2.a'); +CREATE DATABASE IF NOT EXISTS db1 COMMENT 'this is a created database' WITH ('key1' = 'value1', 'key2.a' = 'value2.a'); CREATE FUNCTION IF NOT EXISTS tempFunction AS 'SimpleUdf'; \ No newline at end of file diff --git a/test/parser/flink/contextCollect/fixtures/semantic.sql b/test/parser/flink/contextCollect/fixtures/semantic.sql new file mode 100644 index 000000000..233da1b8e --- /dev/null +++ b/test/parser/flink/contextCollect/fixtures/semantic.sql @@ -0,0 +1,35 @@ +CREA + +CREATE + +INSERT INTO t1 SEL + +INSERT INTO t1 SELECT + +INSERT + +SELECT id FROM t1; +CRE + +SELECT id FROM t2; + + +CREATE TABLE t1 ( + id INT, +) WITH ( + 'connector' = 'kafka', +) +SEL + +CREATE; SEL + +CREATE TABLE a1(id INT) WITH ('connector' = 'kafka'); +SEL +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) WITH ('connector' = 'kafka'); +CREATE TABLE +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) WITH ('connector' = 'kafka') +CREATE \ No newline at end of file diff --git a/test/parser/flink/contextCollect/semanticContextCollector.test.ts b/test/parser/flink/contextCollect/semanticContextCollector.test.ts new file mode 100644 index 000000000..e02e8c8ae --- /dev/null +++ b/test/parser/flink/contextCollect/semanticContextCollector.test.ts @@ -0,0 +1,146 @@ +import fs from 'fs'; +import path from 'path'; +import { SqlSplitStrategy } from 'src/parser/common/types'; +import { FlinkSQL } from 'src/parser/flink'; +import { readSQLByRange } from 'test/helper'; + +describe('Flink semantic context collector tests', () => { + const flinkSql = new FlinkSQL(); + const text = fs.readFileSync(path.join(__dirname, 'fixtures', 'semantic.sql'), 'utf-8'); + + test('beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 1, endLine: 1 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 5, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 3, endLine: 3 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 7, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 5, endLine: 5 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 22, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 7, endLine: 7 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 22, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement if type white space after keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 9, endLine: 9 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 8, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement after an exists statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 11, endLine: 12 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement after an exists statement and typed white space', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 14, endLine: 15 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 2, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement if previous statement exists error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 17, endLine: 22 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 6, + column: 4, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement if previous token text is semicolon even if has error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 24, endLine: 24 }); + // typed keyword + const ctx1 = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 13, + }); + expect(ctx1.isStatementBeginning).toBeTruthy(); + + // typed white space + const ctx2 = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 9, + }); + expect(ctx2.isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 26, endLine: 28 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 30, endLine: 32 }); + const { isStatementBeginning } = flinkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 13, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('test sqlSplitStrategy', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 34, endLine: 35 }); + const { isStatementBeginning: isStatementBeginning1 } = + flinkSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.LOOSE, + } + ); + expect(isStatementBeginning1).toBeTruthy(); + + const { isStatementBeginning: isStatementBeginning2 } = + flinkSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + } + ); + expect(isStatementBeginning2).toBeFalsy(); + }); +}); diff --git a/test/parser/flink/errorListener.test.ts b/test/parser/flink/errorListener.test.ts new file mode 100644 index 000000000..1a82a9b39 --- /dev/null +++ b/test/parser/flink/errorListener.test.ts @@ -0,0 +1,100 @@ +import { FlinkSQL } from 'src/parser/flink'; + +const randomText = `dhsdansdnkla ndjnsla ndnalks`; +const sql1 = `SHOW CREATE TABLE`; +const sql2 = `SELECT * FROM `; +const sql3 = `DROP VIEW IF EXIsST aaa aaa`; +const sql4 = `SELECT * froma aaa`; +const sql5 = `CREATE VIEW `; +const sql6 = `DROP CATALOG `; + +describe('FlinkSQL validate invalid sql and test msg', () => { + const flink = new FlinkSQL(); + + test('validate random text', () => { + const errors = flink.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'dhsdansdnkla' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql1', () => { + const errors = flink.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete'); + }); + + test('validate unComplete sql2', () => { + const errors = flink.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + 'Statement is incomplete, expecting an existing table or an existing view or a keyword' + ); + }); + + test('validate unComplete sql3', () => { + const errors = flink.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`missing 'EXISTS' at 'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' is not valid at this position`); + }); + + test('validate unComplete sql4', () => { + const errors = flink.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'aaa' is not valid at this position, expecting an existing column or a keyword` + ); + }); + + test('validate unComplete sql5', () => { + const errors = flink.validate(sql5); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `Statement is incomplete, expecting a new view or a keyword` + ); + }); + + test('validate unComplete sql6', () => { + const errors = flink.validate(sql6); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `Statement is incomplete, expecting an existing catalog or a keyword` + ); + }); + + test('validate random text cn', () => { + flink.locale = 'zh_CN'; + const errors = flink.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'dhsdansdnkla' 在此位置无效,期望一个关键字`); + }); + + test('validate unComplete sql1 cn', () => { + const errors = flink.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('语句不完整'); + }); + + test('validate unComplete sql2 cn', () => { + const errors = flink.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + '语句不完整,期望一个存在的table或者一个存在的view或者一个关键字' + ); + }); + + test('validate unComplete sql3 cn', () => { + const errors = flink.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`缺少'EXISTS'在'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' 在此位置无效`); + }); + + test('validate unComplete sql4 cn', () => { + const errors = flink.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'aaa' 在此位置无效,期望一个存在的column或者一个关键字`); + }); +}); diff --git a/test/parser/flink/suggestion/fixtures/tokenSuggestion.sql b/test/parser/flink/suggestion/fixtures/tokenSuggestion.sql index b8c7ef553..dff1eb6ce 100644 --- a/test/parser/flink/suggestion/fixtures/tokenSuggestion.sql +++ b/test/parser/flink/suggestion/fixtures/tokenSuggestion.sql @@ -1,7 +1,9 @@ SELECT * FROM aa.bb; -USE +USE ; CREATE ; -SHOW \ No newline at end of file +SHOW + +CREATE TABLE tmp_table (col INT) WITH ('connector'='kafka'); diff --git a/test/parser/flink/suggestion/tokenSuggestion.test.ts b/test/parser/flink/suggestion/tokenSuggestion.test.ts index e527d6b82..59af2e286 100644 --- a/test/parser/flink/suggestion/tokenSuggestion.test.ts +++ b/test/parser/flink/suggestion/tokenSuggestion.test.ts @@ -1,7 +1,7 @@ import fs from 'fs'; import path from 'path'; import { FlinkSQL } from 'src/parser/flink'; -import { CaretPosition } from 'src/parser/common/types'; +import { CaretPosition, EntityContextType } from 'src/parser/common/types'; import { commentOtherLine } from 'test/helper'; const tokenSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'tokenSuggestion.sql'), 'utf-8'); @@ -19,7 +19,7 @@ describe('Flink SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['MODULES', 'CATALOG']); + expect(suggestion).toMatchUnorderedArray(['MODULES', 'CATALOG']); }); test('Create Statement ', () => { @@ -32,7 +32,7 @@ describe('Flink SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'CATALOG', 'FUNCTION', 'TEMPORARY', @@ -52,7 +52,7 @@ describe('Flink SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'MODULES', 'FULL', 'FUNCTIONS', @@ -67,4 +67,60 @@ describe('Flink SQL Token Suggestion', () => { 'JARS', ]); }); + + test('Create Statement table properties', () => { + const scenarios = [ + { + caretPosition: { + lineNumber: 9, + column: 45, + }, + entityContextType: EntityContextType.TABLE_PROPERTY_KEY, + }, + { + caretPosition: { + lineNumber: 9, + column: 55, + }, + entityContextType: EntityContextType.TABLE_PROPERTY_VALUE, + }, + ]; + + scenarios.forEach((scenario) => { + const suggestion = flink.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, scenario.caretPosition.lineNumber), + scenario.caretPosition + )?.syntax; + + expect(suggestion[0].syntaxContextType).toBe(scenario.entityContextType); + }); + }); + + test('Create Statement table properties', () => { + const scenarios = [ + { + caretPosition: { + lineNumber: 9, + column: 45, + }, + entityContextType: EntityContextType.TABLE_PROPERTY_KEY, + }, + { + caretPosition: { + lineNumber: 9, + column: 55, + }, + entityContextType: EntityContextType.TABLE_PROPERTY_VALUE, + }, + ]; + + scenarios.forEach((scenario) => { + const suggestion = flink.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, scenario.caretPosition.lineNumber), + scenario.caretPosition + )?.syntax; + + expect(suggestion[0].syntaxContextType).toBe(scenario.entityContextType); + }); + }); }); diff --git a/test/parser/flink/syntax/fixtures/createTable.sql b/test/parser/flink/syntax/fixtures/createTable.sql index 6cf490d4d..85fb0eeb7 100644 --- a/test/parser/flink/syntax/fixtures/createTable.sql +++ b/test/parser/flink/syntax/fixtures/createTable.sql @@ -301,4 +301,35 @@ CREATE TABLE dt_catalog.dt_db.users ( age INT NULL ) WITH ( 'connector' = 'faker' -); \ No newline at end of file +); + +CREATE TABLE retail_order ( + message ROW < + after ROW ( + pk_id varchar, + id varchar, + wid varchar, + order_id varchar, + cardNo varchar, + billDate varchar, + orderType varchar, + saleChannel varchar, + createTime timestamp, + refno varchar, + ts varchar, + source varchar + ) +>, + proc_time AS PROCTIME () +) +WITH + ( + -- 'properties.bootstrap.servers'='192.168.201.114:9092', + 'properties.bootstrap.servers' = '192.168.201.238:9092,192.168.201.239:9092,192.168.201.240:9092', + 'connector' = 'kafka-x', + 'scan.parallelism' = '1', + 'properties.group.id' = 'test_flink_custom_clue_create_clue', + 'format' = 'json', + 'topic' = 'jnby_retail_order_history', + 'scan.startup.mode' = 'latest-offset' + ); \ No newline at end of file diff --git a/test/parser/flink/syntax/fixtures/createView.sql b/test/parser/flink/syntax/fixtures/createView.sql index bf26db07f..903337b05 100644 --- a/test/parser/flink/syntax/fixtures/createView.sql +++ b/test/parser/flink/syntax/fixtures/createView.sql @@ -53,4 +53,33 @@ SELECT FROM server_logs GROUP BY - TUMBLE(log_time, INTERVAL '1' MINUTE); \ No newline at end of file + TUMBLE(log_time, INTERVAL '1' MINUTE); + + create view v_search_product as +select + * +from + ( + select + request_id, + click_time, + date_format (click_time, 'yyyy-MM-dd') as click_date, + cast(wid as bigint) as wid, + query, + row_number() over ( + partition by + wid, + date_format (click_time, 'yyyy-MM-dd') + order by + click_time + ) as ranks + from + search_product + where + wid is not null + and wid <> 'None' + and date_format (click_time, 'yyyy-MM-dd') >= to_date ('2024-12-04', 'yyyy-MM-dd') + ) t +where + ranks = 1 + and wid > 0; \ No newline at end of file diff --git a/test/parser/flink/syntax/fixtures/select.sql b/test/parser/flink/syntax/fixtures/select.sql index d457567e4..5cd8b9caa 100644 --- a/test/parser/flink/syntax/fixtures/select.sql +++ b/test/parser/flink/syntax/fixtures/select.sql @@ -19,3 +19,35 @@ SELECT * FROM Orders ORDER BY orderTime LIMIT 3; SELECT * FROM catalog1.db1.table1; SELECT DATE_FORMAT(LOCALTIMESTAMP, "yyyy"), DATE_FORMAT(LOCALTIME, 'yyyy'), DATE_FORMAT(CURRENT_DATE, 'yyyy'), DATE_FORMAT(CURRENT_TIME, 'yyyy'), DATE_FORMAT(CURRENT_TIMESTAMP, 'yyyy') FROM Orders; + +select + request_id, + click_time, + date_format (click_time, 'yyyy-MM-dd') as click_date, + cast(wid as bigint) as wid, + query, + row_number() over ( + partition by + wid, + date_format (click_time, 'yyyy-MM-dd') + order by + click_time + ) as ranks + from + search_product + where + wid is not null + and wid <> 'None' + and date_format (click_time, 'yyyy-MM-dd') >= to_date ('2024-12-04', 'yyyy-MM-dd'); + +SELECT + LOCALTIMESTAMP, + CURRENT_TIME, + CURRENT_DATE, + CURRENT_TIMESTAMP, + LOCALTIME, + DATE '2019-12-23' as time1, + TIMESTAMP '2019-12-23 09:00:00' as time2, + INTERVAL '10 00:00:00.004' DAY TO SECOND as time3 +from + MyTable; diff --git a/test/parser/hive/contextCollect/entityCollector.test.ts b/test/parser/hive/contextCollect/entityCollector.test.ts index 3b4785f53..726dd5ecd 100644 --- a/test/parser/hive/contextCollect/entityCollector.test.ts +++ b/test/parser/hive/contextCollect/entityCollector.test.ts @@ -2,10 +2,15 @@ import { ParseTreeListener } from 'antlr4ng'; import fs from 'fs'; import path from 'path'; import { HiveSqlParserListener } from 'src/lib/hive/HiveSqlParserListener'; +import { + AttrName, + isCommonEntityContext, + isFuncEntityContext, + StmtContextType, +} from 'src/parser/common/entityCollector'; import { EntityContextType } from 'src/parser/common/types'; -import { HiveSQL, HiveEntityCollector } from 'src/parser/hive'; +import { HiveEntityCollector, HiveSQL } from 'src/parser/hive'; import { HiveSqlSplitListener } from 'src/parser/hive/hiveSplitListener'; -import { StmtContextType } from 'src/parser/common/entityCollector'; const commonSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'common.sql'), 'utf-8'); @@ -20,7 +25,7 @@ describe('Hive entity collector tests', () => { }); test('split results', () => { - expect(splitListener.statementsContext.length).toBe(18); + expect(splitListener.statementsContext.length).toBe(21); }); test('create table by like', () => { @@ -58,9 +63,11 @@ describe('Hive entity collector tests', () => { startColumn: 1, }); - expect(tableCreateEntity.relatedEntities).not.toBeNull(); - expect(tableCreateEntity.relatedEntities[0]).toEqual(tableLikeEntity); - expect(tableCreateEntity.columns).toBeNull(); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).not.toBeNull(); + expect(tableCreateEntity.relatedEntities[0]).toEqual(tableLikeEntity); + expect(tableCreateEntity.columns).toBeUndefined(); + } expect(tableLikeEntity.entityContextType).toBe(EntityContextType.TABLE); expect(tableLikeEntity.text).toBe('origin_table'); @@ -100,17 +107,21 @@ describe('Hive entity collector tests', () => { startIndex: 68, startLine: 3, }); - - expect(tableCreateEntity.relatedEntities).toBeNull(); - expect(tableCreateEntity.columns).not.toBeNull(); - expect(tableCreateEntity.columns.length).toBe(3); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).toBeNull(); + expect(tableCreateEntity.columns).not.toBeNull(); + expect(tableCreateEntity.columns.length).toBe(3); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + } }); test('create table by select', () => { @@ -147,11 +158,11 @@ describe('Hive entity collector tests', () => { startIndex: 202, startLine: 5, }); - - expect(tableCreateEntity.relatedEntities).not.toBeNull(); - expect(tableCreateEntity.relatedEntities[0]).toBe(tableFromEntity); - expect(tableCreateEntity.columns).toBeNull(); - + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).not.toBeNull(); + expect(tableCreateEntity.relatedEntities[0]).toBe(tableFromEntity); + expect(tableCreateEntity.columns).toBeUndefined(); + } expect(tableFromEntity.entityContextType).toBe(EntityContextType.TABLE); expect(tableFromEntity.text).toBe('origin_table'); expect(tableFromEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); @@ -189,11 +200,11 @@ describe('Hive entity collector tests', () => { startIndex: 283, startLine: 11, }); - - expect(viewCreateEntity.relatedEntities).not.toBeNull(); - expect(viewCreateEntity.relatedEntities[0]).toBe(viewSelectEntity); - expect(viewCreateEntity.columns).toBeNull(); - + if (isCommonEntityContext(viewCreateEntity)) { + expect(viewCreateEntity.relatedEntities).not.toBeNull(); + expect(viewCreateEntity.relatedEntities[0]).toBe(viewSelectEntity); + expect(viewCreateEntity.columns).toBeUndefined(); + } expect(viewSelectEntity.entityContextType).toBe(EntityContextType.TABLE); expect(viewSelectEntity.text).toBe('mydb.sale_tbl'); expect(viewSelectEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); @@ -232,17 +243,54 @@ describe('Hive entity collector tests', () => { startLine: 14, }); - expect(viewCreateEntity.relatedEntities).not.toBeNull(); - expect(viewCreateEntity.relatedEntities[0]).toBe(viewSelectEntity); - expect(viewCreateEntity.columns).not.toBeNull(); - expect(viewCreateEntity.columns.length).toBe(3); - viewCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(viewCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); + expect(viewCreateEntity[AttrName.comment]).toEqual({ + text: "'一个任务信息视图'", + endColumn: 19, + line: 19, + startColumn: 9, + startIndex: 470, + endIndex: 479, + }); + if (isCommonEntityContext(viewCreateEntity)) { + expect(viewCreateEntity.relatedEntities).not.toBeNull(); + expect(viewCreateEntity.relatedEntities[0]).toBe(viewSelectEntity); + expect(viewCreateEntity.columns).not.toBeNull(); + expect(viewCreateEntity.columns.length).toBe(3); + viewCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(viewCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(viewCreateEntity.columns[0][AttrName.comment]).toEqual({ + text: "'任务id'", + endColumn: 26, + line: 15, + startColumn: 20, + startIndex: 390, + endIndex: 395, + }); + expect(viewCreateEntity.columns[1][AttrName.comment]).toEqual({ + text: "'任务名称'", + endColumn: 28, + line: 16, + startColumn: 22, + startIndex: 419, + endIndex: 424, + }); + expect(viewCreateEntity.columns[2][AttrName.comment]).toEqual({ + text: "'任务运行时长'", + endColumn: 33, + line: 17, + startColumn: 25, + startIndex: 451, + endIndex: 458, + }); + } expect(viewSelectEntity.entityContextType).toBe(EntityContextType.TABLE); expect(viewSelectEntity.text).toBe('task_tbl'); @@ -281,11 +329,19 @@ describe('Hive entity collector tests', () => { startIndex: 600, startLine: 27, }); - - expect(viewCreateEntity.relatedEntities).not.toBeNull(); - expect(viewCreateEntity.relatedEntities[0]).toBe(viewSelectEntity); - expect(viewCreateEntity.columns).toBeNull(); - + expect(viewCreateEntity[AttrName.comment]).toEqual({ + text: "'一个测试视图'", + endColumn: 17, + line: 29, + startColumn: 9, + startIndex: 677, + endIndex: 684, + }); + if (isCommonEntityContext(viewCreateEntity)) { + expect(viewCreateEntity.relatedEntities).not.toBeNull(); + expect(viewCreateEntity.relatedEntities[0]).toBe(viewSelectEntity); + expect(viewCreateEntity.columns).toBeUndefined(); + } expect(viewSelectEntity.entityContextType).toBe(EntityContextType.TABLE); expect(viewSelectEntity.text).toBe('mydb.sale_tbl'); expect(viewSelectEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); @@ -322,9 +378,10 @@ describe('Hive entity collector tests', () => { startIndex: 719, startLine: 32, }); - - expect(selectTableEntity.columns).toBeNull(); - expect(selectTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(selectTableEntity)) { + expect(selectTableEntity.columns).toBeUndefined(); + expect(selectTableEntity.relatedEntities).toBeNull(); + } }); test('select table with join', () => { @@ -359,14 +416,17 @@ describe('Hive entity collector tests', () => { startIndex: 757, startLine: 34, }); - - expect(selectTableEntity.columns).toBeNull(); - expect(selectTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(selectTableEntity)) { + expect(selectTableEntity.columns).toBeUndefined(); + expect(selectTableEntity.relatedEntities).toBeNull(); + } expect(selectTableEntity.belongStmt).toEqual(joinTableEntity.belongStmt); expect(joinTableEntity.text).toBe('b'); - expect(joinTableEntity.columns).toBeNull(); - expect(joinTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(joinTableEntity)) { + expect(joinTableEntity.columns).toBeUndefined(); + expect(joinTableEntity.relatedEntities).toBeNull(); + } }); test('from select table', () => { @@ -400,9 +460,10 @@ describe('Hive entity collector tests', () => { startIndex: 833, startLine: 36, }); - - expect(selectTableEntity.columns).toBeNull(); - expect(selectTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(selectTableEntity)) { + expect(selectTableEntity?.columns)?.toBeUndefined(); + expect(selectTableEntity.relatedEntities).toBeNull(); + } }); test('from select table with join', () => { @@ -437,14 +498,16 @@ describe('Hive entity collector tests', () => { startIndex: 871, startLine: 38, }); - - expect(selectTableEntity.columns).toBeNull(); - expect(selectTableEntity.relatedEntities).toBeNull(); - + if (isCommonEntityContext(selectTableEntity)) { + expect(selectTableEntity.columns).toBeUndefined(); + expect(selectTableEntity.relatedEntities).toBeNull(); + } expect(selectTableEntity.belongStmt).toEqual(joinTableEntity.belongStmt); expect(joinTableEntity.text).toBe('b'); - expect(joinTableEntity.columns).toBeNull(); - expect(joinTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(joinTableEntity)) { + expect(joinTableEntity.columns).toBeUndefined(); + expect(joinTableEntity.relatedEntities).toBeNull(); + } }); test('insert table with values', () => { @@ -478,9 +541,10 @@ describe('Hive entity collector tests', () => { startIndex: 947, startLine: 40, }); - - expect(insertTableEntity.columns).toBeNull(); - expect(insertTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(insertTableEntity)) { + expect(insertTableEntity.columns).toBeUndefined(); + expect(insertTableEntity.relatedEntities).toBeNull(); + } }); test('insert table use select', () => { @@ -515,9 +579,10 @@ describe('Hive entity collector tests', () => { startIndex: 1049, startLine: 43, }); - - expect(insertTableEntity.columns).toBeNull(); - expect(insertTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(insertTableEntity)) { + expect(insertTableEntity.columns).toBeUndefined(); + expect(insertTableEntity.relatedEntities).toBeNull(); + } expect(fromTableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); expect(fromTableEntity.text).toBe('source_table'); @@ -557,9 +622,10 @@ describe('Hive entity collector tests', () => { startIndex: 1187, startLine: 48, }); - - expect(insertTableEntity.columns).toBeNull(); - expect(insertTableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(insertTableEntity)) { + expect(insertTableEntity.columns).toBeUndefined(); + expect(insertTableEntity.relatedEntities).toBeNull(); + } expect(fromTableEntity.belongStmt.stmtContextType).toBe(StmtContextType.INSERT_STMT); expect(fromTableEntity.text).toBe('page_view_stg'); @@ -597,9 +663,10 @@ describe('Hive entity collector tests', () => { startIndex: 1374, startLine: 52, }); - - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('create remote db', () => { @@ -634,8 +701,10 @@ describe('Hive entity collector tests', () => { startLine: 54, }); - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('show locks db', () => { @@ -670,8 +739,10 @@ describe('Hive entity collector tests', () => { startLine: 56, }); - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('create function', () => { @@ -708,8 +779,10 @@ describe('Hive entity collector tests', () => { startLine: 58, }); - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } }); test('create temporary function', () => { @@ -745,8 +818,205 @@ describe('Hive entity collector tests', () => { startIndex: 1537, startLine: 60, }); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } + }); + test('create table by columns with attributes', () => { + const columnCreateTableContext = splitListener.statementsContext[18]; + + const collectListener = new HiveEntityCollector(commonSql); + hiveSql.listen(collectListener as ParseTreeListener, columnCreateTableContext); + + const allEntities = collectListener.getEntities(); + + expect(allEntities.length).toBe(1); + + const tableCreateEntity = allEntities[0]; + + expect(tableCreateEntity.entityContextType).toBe(EntityContextType.TABLE_CREATE); + expect(tableCreateEntity.text).toBe('test_change'); + expect(tableCreateEntity.position).toEqual({ + endColumn: 25, + endIndex: 1604, + line: 62, + startColumn: 14, + startIndex: 1594, + }); + + expect(tableCreateEntity.belongStmt.stmtContextType).toBe( + StmtContextType.CREATE_TABLE_STMT + ); + expect(tableCreateEntity.belongStmt.position).toEqual({ + endColumn: 104, + endIndex: 1683, + endLine: 62, + startColumn: 1, + startIndex: 1581, + startLine: 62, + }); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'table test comment'", + endColumn: 104, + line: 62, + startColumn: 84, + startIndex: 1664, + endIndex: 1683, + }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).toBeNull(); + expect(tableCreateEntity.columns).not.toBeNull(); + expect(tableCreateEntity.columns.length).toBe(3); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0].text).toBe('a'); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'int', + startIndex: 1609, + endIndex: 1611, + line: 62, + startColumn: 29, + endColumn: 32, + }); + expect(tableCreateEntity.columns[1].text).toBe('b'); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'varchar(255)', + startIndex: 1616, + endIndex: 1627, + line: 62, + startColumn: 36, + endColumn: 48, + }); + expect(tableCreateEntity.columns[1][AttrName.comment]).toEqual({ + text: "'column 2'", + startIndex: 1637, + endIndex: 1646, + line: 62, + startColumn: 57, + endColumn: 67, + }); + expect(tableCreateEntity.columns[2].text).toBe('c'); + expect(tableCreateEntity.columns[2][AttrName.colType]).toEqual({ + text: 'int', + startIndex: 1651, + endIndex: 1653, + line: 62, + startColumn: 71, + endColumn: 74, + }); + } + }); + test('create db with comment', () => { + const columnCreateTableContext = splitListener.statementsContext[19]; + + const collectListener = new HiveEntityCollector(commonSql); + hiveSql.listen(collectListener as ParseTreeListener, columnCreateTableContext); - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + const allEntities = collectListener.getEntities(); + + expect(allEntities.length).toBe(1); + + const dbEntity = allEntities[0]; + + expect(dbEntity.entityContextType).toBe(EntityContextType.DATABASE_CREATE); + expect(dbEntity.text).toBe('testdb'); + expect(dbEntity.position).toEqual({ + endColumn: 23, + endIndex: 1708, + line: 64, + startColumn: 17, + startIndex: 1703, + }); + + expect(dbEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_DATABASE_STMT); + expect(dbEntity.belongStmt.position).toEqual({ + endColumn: 69, + endIndex: 1754, + endLine: 64, + startColumn: 1, + startIndex: 1687, + startLine: 64, + }); + expect(dbEntity[AttrName.comment]).toEqual({ + text: "'test database'", + endColumn: 47, + endIndex: 1732, + line: 64, + startColumn: 32, + startIndex: 1718, + }); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } + }); + test('select table with join with alias', () => { + const columnCreateTableContext = splitListener.statementsContext[20]; + + const collectListener = new HiveEntityCollector(commonSql); + hiveSql.listen(collectListener as ParseTreeListener, columnCreateTableContext); + + const allEntities = collectListener.getEntities(); + + expect(allEntities.length).toBe(2); + + const selectTableEntity = allEntities[0]; + const joinTableEntity = allEntities[1]; + + expect(selectTableEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(selectTableEntity.text).toBe('table_busi'); + expect(selectTableEntity.position).toEqual({ + endColumn: 27, + endIndex: 1783, + line: 66, + startColumn: 17, + startIndex: 1774, + }); + + expect(selectTableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(selectTableEntity.belongStmt.position).toEqual({ + endColumn: 97, + endIndex: 1853, + endLine: 66, + startColumn: 1, + startIndex: 1758, + startLine: 66, + }); + expect(selectTableEntity[AttrName.alias]).toEqual({ + text: 'a', + endColumn: 29, + endIndex: 1785, + line: 66, + startColumn: 28, + startIndex: 1785, + }); + if (isCommonEntityContext(selectTableEntity)) { + expect(selectTableEntity.columns).toBeUndefined(); + expect(selectTableEntity.relatedEntities).toBeNull(); + } + + expect(selectTableEntity.belongStmt).toEqual(joinTableEntity.belongStmt); + expect(joinTableEntity.text).toBe('table_issue'); + expect(joinTableEntity[AttrName.alias]).toEqual({ + text: 'b', + endColumn: 48, + endIndex: 1804, + line: 66, + startColumn: 47, + startIndex: 1804, + }); + if (isCommonEntityContext(joinTableEntity)) { + expect(joinTableEntity.columns).toBeUndefined(); + expect(joinTableEntity.relatedEntities).toBeNull(); + } }); }); diff --git a/test/parser/hive/contextCollect/fixtures/common.sql b/test/parser/hive/contextCollect/fixtures/common.sql index c7c706144..2f779521a 100644 --- a/test/parser/hive/contextCollect/fixtures/common.sql +++ b/test/parser/hive/contextCollect/fixtures/common.sql @@ -57,4 +57,10 @@ SHOW LOCKS DATABASE db1; CREATE FUNCTION base_analizer AS 'com.udf.BaseFieldUDF'; -CREATE TEMPORARY FUNCTION flat_analizer AS 'com.udtf.EventJsonUDTF'; \ No newline at end of file +CREATE TEMPORARY FUNCTION flat_analizer AS 'com.udtf.EventJsonUDTF'; + +CREATE TABLE test_change (a int, b varchar(255) COMMENT 'column 2', c int) COMMENT 'table test comment'; + +CREATE DATABASE testdb COMMENT 'test database' LOCATION '/test/path'; + +SELECT a.* FROM table_busi a JOIN table_issue b ON (a.id = b.id AND a.department = b.department); \ No newline at end of file diff --git a/test/parser/hive/contextCollect/fixtures/semantic.sql b/test/parser/hive/contextCollect/fixtures/semantic.sql new file mode 100644 index 000000000..f75cfb8e3 --- /dev/null +++ b/test/parser/hive/contextCollect/fixtures/semantic.sql @@ -0,0 +1,31 @@ +CREA + +CREATE + +CREATE TABLE a A + +CREATE TABLE a AS + +INSERT + +SELECT id FROM t1; +CRE + +SELECT id FROM t2; + + +CREATE TABLE IF NOT EXISTS a1(id INT, ) +SEL + +CREATE; SEL + +CREATE TABLE a1(id INT); +SEL +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT); +CREATE VIEW +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) +CREATE VIEW diff --git a/test/parser/hive/contextCollect/semanticContextCollector.test.ts b/test/parser/hive/contextCollect/semanticContextCollector.test.ts new file mode 100644 index 000000000..5c2854444 --- /dev/null +++ b/test/parser/hive/contextCollect/semanticContextCollector.test.ts @@ -0,0 +1,146 @@ +import fs from 'fs'; +import path from 'path'; +import { SqlSplitStrategy } from 'src/parser/common/types'; +import { HiveSQL } from 'src/parser/hive'; +import { readSQLByRange } from 'test/helper'; + +describe('Hive semantic context collector tests', () => { + const hiveSql = new HiveSQL(); + const text = fs.readFileSync(path.join(__dirname, 'fixtures', 'semantic.sql'), 'utf-8'); + + test('beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 1, endLine: 1 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 5, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 3, endLine: 3 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 7, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 5, endLine: 5 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 22, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 7, endLine: 7 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 18, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement if type white space after keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 9, endLine: 9 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 8, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement after an exists statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 11, endLine: 12 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement after an exists statement and typed white space', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 14, endLine: 15 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 2, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement if previous statement exists error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 17, endLine: 18 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement if previous token text is semicolon even if has error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 20, endLine: 20 }); + // typed keyword + const ctx1 = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 13, + }); + expect(ctx1.isStatementBeginning).toBeTruthy(); + + // typed white space + const ctx2 = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 9, + }); + expect(ctx2.isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 22, endLine: 24 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 26, endLine: 28 }); + const { isStatementBeginning } = hiveSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 12, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('test sqlSplitStrategy', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 30, endLine: 31 }); + const { isStatementBeginning: isStatementBeginning1 } = + hiveSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.LOOSE, + } + ); + expect(isStatementBeginning1).toBeTruthy(); + + const { isStatementBeginning: isStatementBeginning2 } = + hiveSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + } + ); + expect(isStatementBeginning2).toBeFalsy(); + }); +}); diff --git a/test/parser/hive/errorListener.test.ts b/test/parser/hive/errorListener.test.ts new file mode 100644 index 000000000..1bc9b6a1b --- /dev/null +++ b/test/parser/hive/errorListener.test.ts @@ -0,0 +1,91 @@ +import { HiveSQL } from 'src/parser/hive'; + +const randomText = `dhsdansdnkla ndjnsla ndnalks`; +const sql1 = `SHOW CREATE TABLE`; +const sql2 = `SELECT * FROM `; +const sql3 = `DROP VIEW IF EXIsST aaa aaa`; +const sql4 = `SELECT * froma aaa`; +const sql5 = `CREATE TABLE `; + +describe('HiveSQL validate invalid sql and test msg', () => { + const hive = new HiveSQL(); + + test('validate random text', () => { + const errors = hive.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'dhsdansdnkla' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql1', () => { + const errors = hive.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete'); + }); + + test('validate unComplete sql2', () => { + const errors = hive.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + 'Statement is incomplete, expecting an existing table or an existing view or a keyword' + ); + }); + + test('validate unComplete sql3', () => { + const errors = hive.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`missing 'EXISTS' at 'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' is not valid at this position`); + }); + + test('validate unComplete sql4', () => { + const errors = hive.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'froma' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql5', () => { + const errors = hive.validate(sql5); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `Statement is incomplete, expecting a new table or a keyword` + ); + }); + + test('validate random text cn', () => { + hive.locale = 'zh_CN'; + const errors = hive.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'dhsdansdnkla' 在此位置无效,期望一个关键字`); + }); + + test('validate unComplete sql1 cn', () => { + const errors = hive.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('语句不完整'); + }); + + test('validate unComplete sql2 cn', () => { + const errors = hive.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + '语句不完整,期望一个存在的table或者一个存在的view或者一个关键字' + ); + }); + + test('validate unComplete sql3 cn', () => { + const errors = hive.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`缺少'EXISTS'在'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' 在此位置无效`); + }); + + test('validate unComplete sql4 cn', () => { + const errors = hive.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'froma' 在此位置无效,期望一个关键字`); + }); +}); diff --git a/test/parser/hive/suggestion/fixtures/tokenSuggestion.sql b/test/parser/hive/suggestion/fixtures/tokenSuggestion.sql index 87d3c7f49..ab341189a 100644 --- a/test/parser/hive/suggestion/fixtures/tokenSuggestion.sql +++ b/test/parser/hive/suggestion/fixtures/tokenSuggestion.sql @@ -18,3 +18,5 @@ LOAD ; SHOW ; +CREATE TABLE IF NOT EXISTS +; diff --git a/test/parser/hive/suggestion/tokenSuggestion.test.ts b/test/parser/hive/suggestion/tokenSuggestion.test.ts index 106d3ff91..d74068e24 100644 --- a/test/parser/hive/suggestion/tokenSuggestion.test.ts +++ b/test/parser/hive/suggestion/tokenSuggestion.test.ts @@ -18,7 +18,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'APPLICATION', 'GROUP', 'USER', @@ -33,6 +33,9 @@ describe('Hive SQL Token Suggestion', () => { 'MATERIALIZED', 'VIEW', 'TABLE', + 'RESOURCE PLAN', + 'SCHEDULED QUERY', + 'MATERIALIZED VIEW', ]); }); @@ -45,7 +48,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'CONNECTOR', 'APPLICATION', 'GROUP', @@ -68,6 +71,11 @@ describe('Hive SQL Token Suggestion', () => { 'REMOTE', 'DATABASE', 'SCHEMA', + 'RESOURCE PLAN', + 'SCHEDULED QUERY', + 'MATERIALIZED VIEW', + 'OR REPLACE', + 'MANAGED TABLE', ]); }); @@ -80,7 +88,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['FROM']); + expect(suggestion).toMatchUnorderedArray(['FROM']); }); test('After DESCRIBE', () => { @@ -92,7 +100,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'EXTENDED', 'FORMATTED', 'FUNCTION', @@ -111,7 +119,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'CONNECTOR', 'APPLICATION', 'GROUP', @@ -129,6 +137,9 @@ describe('Hive SQL Token Suggestion', () => { 'TABLE', 'DATABASE', 'SCHEMA', + 'RESOURCE PLAN', + 'MATERIALIZED VIEW', + 'SCHEDULED QUERY', ]); }); @@ -141,7 +152,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['TABLE']); + expect(suggestion).toMatchUnorderedArray(['TABLE']); }); test('After IMPORT', () => { @@ -153,7 +164,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['FROM', 'TABLE', 'EXTERNAL']); + expect(suggestion).toMatchUnorderedArray(['FROM', 'TABLE', 'EXTERNAL']); }); test('After INSERT', () => { @@ -165,7 +176,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['INTO', 'OVERWRITE']); + expect(suggestion).toMatchUnorderedArray(['INTO', 'OVERWRITE']); }); test('After LOAD', () => { @@ -177,7 +188,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['DATA']); + expect(suggestion).toMatchUnorderedArray(['DATA']); }); test('After SHOW', () => { @@ -189,7 +200,7 @@ describe('Hive SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'CURRENT', 'ROLES', 'PRINCIPALS', @@ -217,6 +228,36 @@ describe('Hive SQL Token Suggestion', () => { 'EXTENDED', 'DATABASES', 'SCHEMAS', + 'CURRENT ROLES', + 'ROLE GRANT', + 'TABLE EXTENDED', + 'MATERIALIZED VIEWS', ]); }); + + test('After CREATE TABLE, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 21, + column: 14, + }; + const suggestion = hive.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('IF'); + expect(suggestion).toContain('IF NOT EXISTS'); + }); + + test('After CREATE TABLE IF, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 21, + column: 17, + }; + const suggestion = hive.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('NOT'); + expect(suggestion).toContain('NOT EXISTS'); + }); }); diff --git a/test/parser/hive/syntax/fixtures/setConfigProperties.sql b/test/parser/hive/syntax/fixtures/setConfigProperties.sql index a69d2e271..295c58edf 100644 --- a/test/parser/hive/syntax/fixtures/setConfigProperties.sql +++ b/test/parser/hive/syntax/fixtures/setConfigProperties.sql @@ -654,4 +654,11 @@ set hive.test.mode.prefix = true; set hive.test.mode.samplefreq = true; set hive.test.mode.nosamplelist = true; set hive.exec.submit.local.task.via.child = true; -set hive.xx.select.result.encode.enabled=true; \ No newline at end of file +set hive.xx.select.result.encode.enabled=true; + + +SET hivevar:A = 1; +-- SELECT ${A}; +-- SELECT ${hivevar:A}; +SELECT `_A`; +SELECT `_hivevar:A`; diff --git a/test/parser/impala/contextCollect/entityCollector.test.ts b/test/parser/impala/contextCollect/entityCollector.test.ts index b7cb6d28e..711aa76a4 100644 --- a/test/parser/impala/contextCollect/entityCollector.test.ts +++ b/test/parser/impala/contextCollect/entityCollector.test.ts @@ -1,10 +1,15 @@ +import { ParseTreeListener } from 'antlr4ng'; import fs from 'fs'; import path from 'path'; -import { EntityContextType } from 'src/parser/common/types'; -import { StmtContextType } from 'src/parser/common/entityCollector'; -import { ImpalaSQL, ImpalaEntityCollector, ImpalaSqlSplitListener } from 'src/parser/impala'; import { ImpalaSqlParserListener } from 'src/lib/impala/ImpalaSqlParserListener'; -import { ParseTreeListener } from 'antlr4ng'; +import { + AttrName, + isCommonEntityContext, + isFuncEntityContext, + StmtContextType, +} from 'src/parser/common/entityCollector'; +import { EntityContextType } from 'src/parser/common/types'; +import { ImpalaEntityCollector, ImpalaSQL, ImpalaSqlSplitListener } from 'src/parser/impala'; const commonSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'common.sql'), 'utf-8'); @@ -56,11 +61,11 @@ describe('ImpalaSQL entity collector tests', () => { startIndex: 0, startLine: 1, }); - - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.columns).toBeNull(); - expect(tableCreateEntity.relatedEntities[0]).toBe(likeTableEntity); - + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.columns).toBeUndefined(); + expect(tableCreateEntity.relatedEntities[0]).toBe(likeTableEntity); + } expect(likeTableEntity.text).toBe('old_table'); expect(likeTableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(likeTableEntity.belongStmt).toBe(tableCreateEntity.belongStmt); @@ -92,23 +97,60 @@ describe('ImpalaSQL entity collector tests', () => { StmtContextType.CREATE_TABLE_STMT ); expect(tableCreateEntity.belongStmt.position).toEqual({ - endColumn: 77, - endIndex: 115, + endColumn: 138, + endIndex: 176, endLine: 3, startColumn: 1, startIndex: 40, startLine: 3, }); - - expect(tableCreateEntity.relatedEntities).toBeNull(); - expect(tableCreateEntity.columns.length).toBe(2); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'common census table comment'", + endColumn: 138, + endIndex: 176, + line: 3, + startColumn: 109, + startIndex: 148, }); + + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).toBeNull(); + expect(tableCreateEntity.columns.length).toBe(2); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'string', + endColumn: 33, + endIndex: 71, + line: 3, + startColumn: 27, + startIndex: 66, + }); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'int', + endColumn: 50, + endIndex: 88, + line: 3, + startColumn: 47, + startIndex: 86, + }); + expect(tableCreateEntity.columns[1][AttrName.comment]).toEqual({ + text: "'year comment'", + endColumn: 73, + endIndex: 111, + line: 3, + startColumn: 59, + startIndex: 98, + }); + } }); test('create table by select', () => { @@ -128,10 +170,10 @@ describe('ImpalaSQL entity collector tests', () => { expect(tableCreateEntity.text).toBe('sorted_census_data'); expect(tableCreateEntity.position).toEqual({ endColumn: 32, - endIndex: 149, + endIndex: 210, line: 5, startColumn: 14, - startIndex: 132, + startIndex: 193, }); expect(tableCreateEntity.belongStmt.stmtContextType).toBe( @@ -139,19 +181,21 @@ describe('ImpalaSQL entity collector tests', () => { ); expect(tableCreateEntity.belongStmt.position).toEqual({ endColumn: 30, - endIndex: 278, + endIndex: 339, endLine: 9, startColumn: 1, - startIndex: 119, + startIndex: 180, startLine: 5, }); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.columns).toBeNull(); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.columns).toBeUndefined(); - expect(fromCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - expect(fromCreateEntity.text).toBe('unsorted_census_data'); - expect(tableCreateEntity.relatedEntities[0]).toBe(fromCreateEntity); + expect(fromCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(fromCreateEntity.text).toBe('unsorted_census_data'); + expect(tableCreateEntity.relatedEntities[0]).toBe(fromCreateEntity); + } }); test('create kudu table by select', () => { @@ -171,10 +215,10 @@ describe('ImpalaSQL entity collector tests', () => { expect(tableCreateEntity.text).toBe('ctas_t1'); expect(tableCreateEntity.position).toEqual({ endColumn: 21, - endIndex: 301, + endIndex: 362, line: 11, startColumn: 14, - startIndex: 295, + startIndex: 356, }); expect(tableCreateEntity.belongStmt.stmtContextType).toBe( @@ -182,19 +226,21 @@ describe('ImpalaSQL entity collector tests', () => { ); expect(tableCreateEntity.belongStmt.position).toEqual({ endColumn: 31, - endIndex: 405, + endIndex: 466, endLine: 14, startColumn: 1, - startIndex: 282, + startIndex: 343, startLine: 11, }); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.columns).toBeNull(); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.columns).toBeUndefined(); - expect(fromCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - expect(fromCreateEntity.text).toBe('kudu_t1'); - expect(tableCreateEntity.relatedEntities[0]).toBe(fromCreateEntity); + expect(fromCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(fromCreateEntity.text).toBe('kudu_t1'); + expect(tableCreateEntity.relatedEntities[0]).toBe(fromCreateEntity); + } }); test('create kudu table by columns', () => { @@ -213,10 +259,18 @@ describe('ImpalaSQL entity collector tests', () => { expect(tableCreateEntity.text).toBe('kudu_t3'); expect(tableCreateEntity.position).toEqual({ endColumn: 21, - endIndex: 428, + endIndex: 489, line: 16, startColumn: 14, - startIndex: 422, + startIndex: 483, + }); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'kudu table comment'", + endColumn: 31, + endIndex: 840, + line: 23, + startColumn: 11, + startIndex: 821, }); expect(tableCreateEntity.belongStmt.stmtContextType).toBe( @@ -224,22 +278,67 @@ describe('ImpalaSQL entity collector tests', () => { ); expect(tableCreateEntity.belongStmt.position).toEqual({ endColumn: 17, - endIndex: 705, - endLine: 23, + endIndex: 857, + endLine: 24, startColumn: 1, - startIndex: 409, + startIndex: 470, startLine: 16, }); - expect(tableCreateEntity.relatedEntities).toBeNull(); - expect(tableCreateEntity.columns.length).toBe(4); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).toBeNull(); + expect(tableCreateEntity.columns.length).toBe(4); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'BIGINT', + endColumn: 32, + endIndex: 500, + line: 16, + startColumn: 26, + startIndex: 495, + }); + expect(tableCreateEntity.columns[0][AttrName.comment]).toEqual({ + text: "'id column comment'", + endColumn: 60, + endIndex: 528, + line: 16, + startColumn: 41, + startIndex: 510, + }); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'INT', + endColumn: 70, + endIndex: 538, + line: 16, + startColumn: 67, + startIndex: 536, + }); + expect(tableCreateEntity.columns[2][AttrName.colType]).toEqual({ + text: 'STRING', + endColumn: 80, + endIndex: 548, + line: 16, + startColumn: 74, + startIndex: 543, + }); + expect(tableCreateEntity.columns[2][AttrName.comment]).toEqual({ + text: "'string column comment'", + endColumn: 112, + endIndex: 580, + line: 16, + startColumn: 89, + startIndex: 558, + }); + } }); test('create view', () => { @@ -259,31 +358,61 @@ describe('ImpalaSQL entity collector tests', () => { expect(viewCreateEntity.text).toBe('my_view'); expect(viewCreateEntity.position).toEqual({ endColumn: 20, - endIndex: 727, - line: 25, + endIndex: 879, + line: 26, startColumn: 13, - startIndex: 721, + startIndex: 873, + }); + + expect(viewCreateEntity[AttrName.comment]).toEqual({ + text: "'view comment'", + endColumn: 113, + endIndex: 972, + line: 26, + startColumn: 99, + startIndex: 959, }); expect(viewCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_VIEW_STMT); expect(viewCreateEntity.belongStmt.position).toEqual({ - endColumn: 146, - endIndex: 853, - endLine: 25, + endColumn: 169, + endIndex: 1028, + endLine: 26, startColumn: 1, - startIndex: 709, - startLine: 25, + startIndex: 861, + startLine: 26, }); - expect(viewCreateEntity.relatedEntities[0]).toBe(fromCreateEntity); - expect(viewCreateEntity.columns.length).toBe(2); - viewCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(viewCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); + if (isCommonEntityContext(viewCreateEntity)) { + expect(viewCreateEntity.relatedEntities[0]).toBe(fromCreateEntity); + expect(viewCreateEntity.columns.length).toBe(2); + viewCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(viewCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(viewCreateEntity.columns[0][AttrName.comment]).toEqual({ + text: "'this is number col'", + endColumn: 54, + endIndex: 913, + line: 26, + startColumn: 34, + startIndex: 894, + }); + expect(viewCreateEntity.columns[1][AttrName.comment]).toEqual({ + text: "'this is number age'", + endColumn: 89, + endIndex: 948, + line: 26, + startColumn: 69, + startIndex: 929, + }); + } expect(fromCreateEntity.entityContextType).toBe(EntityContextType.TABLE); expect(fromCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); @@ -307,23 +436,24 @@ describe('ImpalaSQL entity collector tests', () => { expect(tableInsertEntity.text).toBe('t2'); expect(tableInsertEntity.position).toEqual({ endColumn: 15, - endIndex: 870, - line: 27, + endIndex: 1045, + line: 28, startColumn: 13, - startIndex: 869, + startIndex: 1044, }); expect(tableInsertEntity.belongStmt.stmtContextType).toBe(StmtContextType.INSERT_STMT); expect(tableInsertEntity.belongStmt.position).toEqual({ endColumn: 40, - endIndex: 895, - endLine: 27, + endIndex: 1070, + endLine: 28, startColumn: 1, - startIndex: 857, - startLine: 27, + startIndex: 1032, + startLine: 28, }); - - expect(tableInsertEntity.columns).toBeNull(); + if (isCommonEntityContext(tableInsertEntity)) { + expect(tableInsertEntity.columns).toBeUndefined(); + } expect(fromTableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(fromTableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); @@ -347,24 +477,25 @@ describe('ImpalaSQL entity collector tests', () => { expect(tableEntity1.text).toBe('a'); expect(tableEntity1.position).toEqual({ endColumn: 16, - endIndex: 913, - line: 29, + endIndex: 1088, + line: 30, startColumn: 15, - startIndex: 913, + startIndex: 1088, }); expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); expect(tableEntity1.belongStmt.position).toEqual({ endColumn: 16, - endIndex: 913, - endLine: 29, + endIndex: 1088, + endLine: 30, startColumn: 1, - startIndex: 899, - startLine: 29, + startIndex: 1074, + startLine: 30, }); - - expect(tableEntity1.columns).toBeNull(); - expect(tableEntity1.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } }); test('select table join', () => { @@ -381,34 +512,54 @@ describe('ImpalaSQL entity collector tests', () => { const tableEntity2 = allEntities[1]; expect(tableEntity1.entityContextType).toBe(EntityContextType.TABLE); - expect(tableEntity1.text).toBe('t1'); + expect(tableEntity1.text).toBe('table1'); expect(tableEntity1.position).toEqual({ - endColumn: 28, - endIndex: 943, - line: 31, + endColumn: 32, + endIndex: 1122, + line: 32, startColumn: 26, - startIndex: 942, + startIndex: 1117, + }); + expect(tableEntity1[AttrName.alias]).toEqual({ + text: 't1', + endColumn: 38, + endIndex: 1128, + line: 32, + startColumn: 36, + startIndex: 1127, }); expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); expect(tableEntity1.belongStmt.position).toEqual({ endColumn: 20, - endIndex: 1022, - endLine: 33, + endIndex: 1217, + endLine: 34, startColumn: 1, - startIndex: 917, - startLine: 31, + startIndex: 1092, + startLine: 32, }); - - expect(tableEntity1.columns).toBeNull(); - expect(tableEntity1.relatedEntities).toBeNull(); - - expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); - expect(tableEntity2.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - expect(tableEntity2.text).toBe('t2'); - expect(tableEntity2.columns).toBeNull(); - expect(tableEntity2.relatedEntities).toBeNull(); - expect(tableEntity2.belongStmt).toBe(tableEntity1.belongStmt); + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + + expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); + expect(tableEntity2.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(tableEntity2.text).toBe('table2'); + expect(tableEntity2[AttrName.alias]).toEqual({ + text: 't2', + endColumn: 56, + endIndex: 1146, + line: 32, + startColumn: 54, + startIndex: 1145, + }); + } + + if (isCommonEntityContext(tableEntity2)) { + expect(tableEntity2.columns).toBeUndefined(); + expect(tableEntity2.relatedEntities).toBeNull(); + expect(tableEntity2.belongStmt).toBe(tableEntity1.belongStmt); + } }); test('create db', () => { @@ -427,24 +578,35 @@ describe('ImpalaSQL entity collector tests', () => { expect(dbEntity.text).toBe('my_db'); expect(dbEntity.position).toEqual({ endColumn: 22, - endIndex: 1046, - line: 35, + endIndex: 1241, + line: 36, startColumn: 17, - startIndex: 1042, + startIndex: 1237, + }); + + expect(dbEntity[AttrName.comment]).toEqual({ + text: "'my first db'", + endColumn: 44, + endIndex: 1263, + line: 36, + startColumn: 31, + startIndex: 1251, }); expect(dbEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_DATABASE_STMT); expect(dbEntity.belongStmt.position).toEqual({ - endColumn: 52, - endIndex: 1076, - endLine: 35, + endColumn: 74, + endIndex: 1293, + endLine: 36, startColumn: 1, - startIndex: 1026, - startLine: 35, + startIndex: 1221, + startLine: 36, }); - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('create schema', () => { @@ -463,24 +625,33 @@ describe('ImpalaSQL entity collector tests', () => { expect(schemaEntity.text).toBe('my_schema'); expect(schemaEntity.position).toEqual({ endColumn: 38, - endIndex: 1116, - line: 37, + endIndex: 1333, + line: 38, startColumn: 29, - startIndex: 1108, + startIndex: 1325, + }); + expect(schemaEntity[AttrName.comment]).toEqual({ + text: "'my first schema'", + endColumn: 64, + endIndex: 1359, + line: 38, + startColumn: 47, + startIndex: 1343, }); expect(schemaEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_DATABASE_STMT); expect(schemaEntity.belongStmt.position).toEqual({ endColumn: 94, - endIndex: 1172, - endLine: 37, + endIndex: 1389, + endLine: 38, startColumn: 1, - startIndex: 1080, - startLine: 37, + startIndex: 1297, + startLine: 38, }); - - expect(schemaEntity.columns).toBeNull(); - expect(schemaEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(schemaEntity)) { + expect(schemaEntity.columns).toBeUndefined(); + expect(schemaEntity.relatedEntities).toBeNull(); + } }); test('comment dbName', () => { @@ -499,25 +670,27 @@ describe('ImpalaSQL entity collector tests', () => { expect(dbEntity.text).toBe('my_database'); expect(dbEntity.position).toEqual({ endColumn: 32, - endIndex: 1206, - line: 39, + endIndex: 1423, + line: 40, startColumn: 21, - startIndex: 1196, + startIndex: 1413, }); // 由于没有处理 comment 语句,所以当前是处于 COMMON_STMT expect(dbEntity.belongStmt.stmtContextType).toBe(StmtContextType.COMMON_STMT); expect(dbEntity.belongStmt.position).toEqual({ endColumn: 59, - endIndex: 1233, - endLine: 39, + endIndex: 1450, + endLine: 40, startColumn: 1, - startIndex: 1176, - startLine: 39, + startIndex: 1393, + startLine: 40, }); - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('create aggregate function', () => { @@ -536,10 +709,10 @@ describe('ImpalaSQL entity collector tests', () => { expect(functionEntity.text).toBe('function_name'); expect(functionEntity.position).toEqual({ endColumn: 40, - endIndex: 1274, - line: 41, + endIndex: 1491, + line: 42, startColumn: 27, - startIndex: 1262, + startIndex: 1479, }); expect(functionEntity.belongStmt.stmtContextType).toBe( @@ -547,15 +720,17 @@ describe('ImpalaSQL entity collector tests', () => { ); expect(functionEntity.belongStmt.position).toEqual({ endColumn: 26, - endIndex: 1391, - endLine: 45, + endIndex: 1608, + endLine: 46, startColumn: 1, - startIndex: 1236, - startLine: 41, + startIndex: 1453, + startLine: 42, }); - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } }); test('create function', () => { @@ -574,10 +749,10 @@ describe('ImpalaSQL entity collector tests', () => { expect(functionEntity.text).toBe('function_name'); expect(functionEntity.position).toEqual({ endColumn: 30, - endIndex: 1423, - line: 47, + endIndex: 1640, + line: 48, startColumn: 17, - startIndex: 1411, + startIndex: 1628, }); expect(functionEntity.belongStmt.stmtContextType).toBe( @@ -585,14 +760,15 @@ describe('ImpalaSQL entity collector tests', () => { ); expect(functionEntity.belongStmt.position).toEqual({ endColumn: 21, - endIndex: 1517, - endLine: 50, + endIndex: 1734, + endLine: 51, startColumn: 1, - startIndex: 1395, - startLine: 47, + startIndex: 1612, + startLine: 48, }); - - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } }); }); diff --git a/test/parser/impala/contextCollect/fixtures/common.sql b/test/parser/impala/contextCollect/fixtures/common.sql index 84f57a70c..be0847899 100644 --- a/test/parser/impala/contextCollect/fixtures/common.sql +++ b/test/parser/impala/contextCollect/fixtures/common.sql @@ -1,6 +1,6 @@ CREATE TABLE new_Table like old_table; -create table census (name string, census_year int) partitioned by (year int); +create table census (name string, census_year int COMMENT 'year comment') partitioned by (year int) COMMENT 'common census table comment'; CREATE TABLE sorted_census_data SORT BY (last_name, state) @@ -13,26 +13,27 @@ CREATE TABLE ctas_t1 STORED AS KUDU AS SELECT id, s FROM kudu_t1; -CREATE TABLE kudu_t3 (id BIGINT, year INT, s STRING, +CREATE TABLE kudu_t3 (id BIGINT COMMENT 'id column comment', year INT, s STRING COMMENT 'string column comment', b BOOLEAN, PRIMARY KEY (id,year)) PARTITION BY HASH (id) PARTITIONS 20, RANGE (year) (PARTITION 1980 <= VALUES < 1990, PARTITION 1990 <= VALUES < 2000, PARTITION VALUE = 2001, PARTITION 2001 < VALUES < 2003) + COMMENT 'kudu table comment' STORED AS KUDU; -CREATE VIEW my_view (age COMMENT 'this is number col', age1 COMMENT 'this is number col') TBLPROPERTIES ('tblp1' = '1') AS SELECT * FROM my_table; +CREATE VIEW my_view (age COMMENT 'this is number col', age1 COMMENT 'this is number age') COMMENT 'view comment' TBLPROPERTIES ('tblp1' = '1') AS SELECT * FROM my_table; insert into t2 (y, x) select c1 from t1; SELECT * from a; -SELECT t1.c1, t2.c2 FROM t1 JOIN t2 +SELECT t1.c1, t2.c2 FROM table1 AS t1 JOIN table2 AS t2 ON t1.id = t2.id and t1.type_flag = t2.type_flag WHERE t1.c1 > 100; -CREATE DATABASE my_db LOCATION '/path/to/partition'; +CREATE DATABASE my_db COMMENT 'my first db' LOCATION '/path/to/partition'; CREATE SCHEMA IF NOT EXISTS my_schema COMMENT 'my first schema' LOCATION '/path/to/partition'; diff --git a/test/parser/impala/contextCollect/fixtures/semantic.sql b/test/parser/impala/contextCollect/fixtures/semantic.sql new file mode 100644 index 000000000..9dfc27172 --- /dev/null +++ b/test/parser/impala/contextCollect/fixtures/semantic.sql @@ -0,0 +1,31 @@ +CREA + +CREATE + +CREATE TABLE a AS SEL + +CREATE TABLE a AS + +INSERT + +SELECT id FROM t1; +CRE + +SELECT id FROM t2; + + +CREATE TABLE IF NOT EXISTS a1(id INT, ) +SEL + +CREATE; SEL + +CREATE TABLE a1(id INT); +SEL +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT); +CREATE VIEW +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) +CREATE VIEW \ No newline at end of file diff --git a/test/parser/impala/contextCollect/semanticContextCollector.test.ts b/test/parser/impala/contextCollect/semanticContextCollector.test.ts new file mode 100644 index 000000000..ac7a13fd6 --- /dev/null +++ b/test/parser/impala/contextCollect/semanticContextCollector.test.ts @@ -0,0 +1,146 @@ +import fs from 'fs'; +import path from 'path'; +import { SqlSplitStrategy } from 'src/parser/common/types'; +import { ImpalaSQL } from 'src/parser/impala'; +import { readSQLByRange } from 'test/helper'; + +describe('Impala semantic context collector tests', () => { + const impalaSql = new ImpalaSQL(); + const text = fs.readFileSync(path.join(__dirname, 'fixtures', 'semantic.sql'), 'utf-8'); + + test('beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 1, endLine: 1 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 5, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 3, endLine: 3 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 7, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 5, endLine: 5 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 17, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 7, endLine: 7 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 18, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement if type white space after keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 9, endLine: 9 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 8, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement after an exists statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 11, endLine: 12 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement after an exists statement and typed white space', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 14, endLine: 15 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 2, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement if previous statement exists error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 17, endLine: 18 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement if previous token text is semicolon even if has error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 20, endLine: 20 }); + // typed keyword + const ctx1 = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 13, + }); + expect(ctx1.isStatementBeginning).toBeTruthy(); + + // typed white space + const ctx2 = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 9, + }); + expect(ctx2.isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 22, endLine: 24 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 26, endLine: 28 }); + const { isStatementBeginning } = impalaSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 12, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('test sqlSplitStrategy', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 30, endLine: 31 }); + const { isStatementBeginning: isStatementBeginning1 } = + impalaSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.LOOSE, + } + ); + expect(isStatementBeginning1).toBeTruthy(); + + const { isStatementBeginning: isStatementBeginning2 } = + impalaSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + } + ); + expect(isStatementBeginning2).toBeFalsy(); + }); +}); diff --git a/test/parser/impala/errorListener.test.ts b/test/parser/impala/errorListener.test.ts new file mode 100644 index 000000000..36a91b402 --- /dev/null +++ b/test/parser/impala/errorListener.test.ts @@ -0,0 +1,91 @@ +import { ImpalaSQL } from 'src/parser/impala'; + +const randomText = `dhsdansdnkla ndjnsla ndnalks`; +const sql1 = `SHOW CREATE TABLE`; +const sql2 = `SELECT * FROM `; +const sql3 = `DROP VIEW IF EXIsST aaa aaa`; +const sql4 = `SELECT * froma aaa`; +const sql5 = `CREATE VIEW `; + +describe('ImpalaSQL validate invalid sql and test msg', () => { + const impala = new ImpalaSQL(); + + test('validate random text', () => { + const errors = impala.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'dhsdansdnkla' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql1', () => { + const errors = impala.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete'); + }); + + test('validate unComplete sql2', () => { + const errors = impala.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + 'Statement is incomplete, expecting an existing table or an existing view or a keyword' + ); + }); + + test('validate unComplete sql3', () => { + const errors = impala.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`missing 'EXISTS' at 'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' is not valid at this position`); + }); + + test('validate unComplete sql4', () => { + const errors = impala.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'froma' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql5', () => { + const errors = impala.validate(sql5); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `Statement is incomplete, expecting a new view or a keyword` + ); + }); + + test('validate random text cn', () => { + impala.locale = 'zh_CN'; + const errors = impala.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'dhsdansdnkla' 在此位置无效,期望一个关键字`); + }); + + test('validate unComplete sql1 cn', () => { + const errors = impala.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('语句不完整'); + }); + + test('validate unComplete sql2 cn', () => { + const errors = impala.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + '语句不完整,期望一个存在的table或者一个存在的view或者一个关键字' + ); + }); + + test('validate unComplete sql3 cn', () => { + const errors = impala.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`缺少'EXISTS'在'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' 在此位置无效`); + }); + + test('validate unComplete sql4 cn', () => { + const errors = impala.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'froma' 在此位置无效,期望一个关键字`); + }); +}); diff --git a/test/parser/impala/suggestion/fixtures/tokenSuggestion.sql b/test/parser/impala/suggestion/fixtures/tokenSuggestion.sql index 19855565a..156afaea7 100644 --- a/test/parser/impala/suggestion/fixtures/tokenSuggestion.sql +++ b/test/parser/impala/suggestion/fixtures/tokenSuggestion.sql @@ -9,3 +9,5 @@ INSERT ; SHOW ; CREATE TABLE t1 (id ); + +CREATE TABLE IF NOT EXISTS; \ No newline at end of file diff --git a/test/parser/impala/suggestion/tokenSuggestion.test.ts b/test/parser/impala/suggestion/tokenSuggestion.test.ts index 26d565ce0..93249a91e 100644 --- a/test/parser/impala/suggestion/tokenSuggestion.test.ts +++ b/test/parser/impala/suggestion/tokenSuggestion.test.ts @@ -19,7 +19,7 @@ describe('Impala SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['TABLE', 'VIEW', 'DATABASE']); + expect(suggestion).toMatchUnorderedArray(['TABLE', 'VIEW', 'DATABASE']); }); test('After CREATE', () => { @@ -32,7 +32,7 @@ describe('Impala SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'TABLE', 'EXTERNAL', 'VIEW', @@ -54,7 +54,7 @@ describe('Impala SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'DATABASE', 'SCHEMA', 'TABLE', @@ -77,7 +77,7 @@ describe('Impala SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['INTO', 'OVERWRITE']); + expect(suggestion).toMatchUnorderedArray(['INTO', 'OVERWRITE']); }); test('After SHOW', () => { @@ -90,7 +90,7 @@ describe('Impala SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'DATABASES', 'SCHEMAS', 'TABLES', @@ -107,6 +107,10 @@ describe('Impala SQL Token Suggestion', () => { 'ROLE', 'ROLES', 'CURRENT', + 'TABLE STATS', + 'COLUMN STATS', + 'FILES IN', + 'ROLE GRANT GROUP', ]); }); @@ -143,4 +147,30 @@ describe('Impala SQL Token Suggestion', () => { expect(dataTypes.every((dataType) => suggestion.includes(dataType))).toBe(true); }); + + test('After CREATE TABLE, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 13, + column: 14, + }; + const suggestion = impala.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('IF'); + expect(suggestion).toContain('IF NOT EXISTS'); + }); + + test('After CREATE TABLE IF, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 13, + column: 17, + }; + const suggestion = impala.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('NOT'); + expect(suggestion).toContain('NOT EXISTS'); + }); }); diff --git a/test/parser/mysql/contextCollect/entityCollector.test.ts b/test/parser/mysql/contextCollect/entityCollector.test.ts index 78e00046c..4d6c5e578 100644 --- a/test/parser/mysql/contextCollect/entityCollector.test.ts +++ b/test/parser/mysql/contextCollect/entityCollector.test.ts @@ -1,11 +1,15 @@ +import { ParseTreeListener } from 'antlr4ng'; import fs from 'fs'; import path from 'path'; -import { MySQL } from 'src/parser/mysql'; -import { MySqlEntityCollector, MysqlSplitListener } from 'src/parser/mysql'; -import { ParseTreeListener } from 'antlr4ng'; import { MySqlParserListener } from 'src/lib/mysql/MySqlParserListener'; +import { + AttrName, + isCommonEntityContext, + isFuncEntityContext, + StmtContextType, +} from 'src/parser/common/entityCollector'; import { EntityContextType } from 'src/parser/common/types'; -import { StmtContextType } from 'src/parser/common/entityCollector'; +import { MySQL, MySqlEntityCollector, MysqlSplitListener } from 'src/parser/mysql'; const commonSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'common.sql'), 'utf-8'); @@ -44,29 +48,67 @@ describe('MySQL entity collector tests', () => { startColumn: 14, endColumn: 29, }); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'new_tb_with_col comment'", + startIndex: 77, + endIndex: 101, + line: 1, + startColumn: 78, + endColumn: 103, + }); expect(tableCreateEntity.belongStmt.stmtContextType).toBe( StmtContextType.CREATE_TABLE_STMT ); expect(tableCreateEntity.belongStmt.position).toEqual({ startIndex: 0, - endIndex: 45, + endIndex: 101, startLine: 1, endLine: 1, startColumn: 1, - endColumn: 47, - }); - - expect(tableCreateEntity.relatedEntities).toBeNull(); - - expect(tableCreateEntity.columns.length).toBe(2); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); + endColumn: 103, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).toBeNull(); + + expect(tableCreateEntity.columns.length).toBe(2); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0][AttrName.comment]).toEqual({ + text: "'col1'", + startIndex: 45, + endIndex: 50, + line: 1, + startColumn: 46, + endColumn: 52, + }); + + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'int', + startIndex: 33, + endIndex: 35, + line: 1, + startColumn: 34, + endColumn: 37, + }); + expect(tableCreateEntity.columns[1][AttrName.comment]).toBeNull(); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'varchar(3)', + startIndex: 57, + endIndex: 66, + line: 1, + startColumn: 58, + endColumn: 68, + }); + } }); test('create table by select', () => { @@ -84,8 +126,8 @@ describe('MySQL entity collector tests', () => { expect(tableCreateEntity.entityContextType).toBe(EntityContextType.TABLE_CREATE); expect(tableCreateEntity.text).toBe('new_tb_from_old'); expect(tableCreateEntity.position).toEqual({ - startIndex: 62, - endIndex: 76, + startIndex: 118, + endIndex: 132, line: 3, startColumn: 14, endColumn: 29, @@ -95,27 +137,27 @@ describe('MySQL entity collector tests', () => { StmtContextType.CREATE_TABLE_STMT ); expect(tableCreateEntity.belongStmt.position).toEqual({ - startIndex: 49, - endIndex: 265, + startIndex: 105, + endIndex: 321, startLine: 3, endLine: 12, startColumn: 1, endColumn: 34, }); - - expect(tableCreateEntity.columns).toBeNull(); - - expect(tableCreateEntity.relatedEntities.length).toBe(2); - tableCreateEntity.relatedEntities.forEach((relatedEntity) => { - expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); - }); - + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); + + expect(tableCreateEntity.relatedEntities.length).toBe(2); + tableCreateEntity.relatedEntities.forEach((relatedEntity) => { + expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); + }); + } expect(allEntities[1].text).toBe('old_tb1'); expect(allEntities[1].belongStmt.rootStmt).toBe(allEntities[0].belongStmt); expect(allEntities[1].position).toEqual({ - startIndex: 161, - endIndex: 167, + startIndex: 217, + endIndex: 223, line: 8, startColumn: 9, endColumn: 16, @@ -124,8 +166,8 @@ describe('MySQL entity collector tests', () => { expect(allEntities[2].text).toBe('old_tb2'); expect(allEntities[2].belongStmt.rootStmt).toBe(allEntities[0].belongStmt); expect(allEntities[2].position).toEqual({ - startIndex: 187, - endIndex: 193, + startIndex: 243, + endIndex: 249, line: 10, startColumn: 9, endColumn: 16, @@ -150,11 +192,11 @@ describe('MySQL entity collector tests', () => { expect(tableCreateEntity.belongStmt.stmtContextType).toBe( StmtContextType.CREATE_TABLE_STMT ); - - expect(tableCreateEntity.columns).toBeNull(); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); - + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + } expect(originTableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(originTableEntity.text).toBe('old_tb'); expect(originTableEntity.belongStmt).toBe(tableCreateEntity.belongStmt); @@ -174,9 +216,10 @@ describe('MySQL entity collector tests', () => { expect(tableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity.text).toBe('select_tb'); expect(tableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity.columns).toBeNull(); - expect(tableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity)) { + expect(tableEntity.columns).toBeUndefined(); + expect(tableEntity.relatedEntities).toBeNull(); + } }); test('select into from table', () => { @@ -193,9 +236,10 @@ describe('MySQL entity collector tests', () => { expect(tableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity.text).toBe('into_select_tb'); expect(tableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity.columns).toBeNull(); - expect(tableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity)) { + expect(tableEntity.columns).toBeUndefined(); + expect(tableEntity.relatedEntities).toBeNull(); + } }); test('select from table join', () => { @@ -213,16 +257,26 @@ describe('MySQL entity collector tests', () => { expect(tableEntity1.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity1.text).toBe('from_tb'); expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity1.columns).toBeNull(); - expect(tableEntity1.relatedEntities).toBeNull(); + expect(tableEntity1[AttrName.alias]).toEqual({ + text: 'tb1', + startIndex: 476, + endIndex: 478, + line: 21, + startColumn: 26, + endColumn: 29, + }); + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity2.text).toBe('join_tb'); expect(tableEntity2.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - - expect(tableEntity2.columns).toBeNull(); - expect(tableEntity2.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity2)) { + expect(tableEntity2.columns).toBeUndefined(); + expect(tableEntity2.relatedEntities).toBeNull(); + } expect(tableEntity1.belongStmt).toBe(tableEntity2.belongStmt); }); @@ -241,9 +295,10 @@ describe('MySQL entity collector tests', () => { expect(tableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity.text).toBe('insert_tb'); expect(tableEntity.belongStmt.stmtContextType).toBe(StmtContextType.INSERT_STMT); - - expect(tableEntity.columns).toBeNull(); - expect(tableEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity)) { + expect(tableEntity.columns).toBeUndefined(); + expect(tableEntity.relatedEntities).toBeNull(); + } }); test('insert into table select', () => { @@ -289,12 +344,15 @@ describe('MySQL entity collector tests', () => { expect(allEntities[0].entityContextType).toBe(EntityContextType.VIEW_CREATE); expect(allEntities[0].text).toBe('new_view'); expect(allEntities[0].belongStmt.stmtContextType).toBe(StmtContextType.CREATE_VIEW_STMT); - - expect(allEntities[0].columns.length).toBe(2); - expect(allEntities[0].columns[0].text).toBe('col1'); - expect(allEntities[0].columns[1].text).toBe('col2'); - expect(allEntities[0].columns[0].entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(allEntities[0].columns[0].belongStmt).toBe(allEntities[0].belongStmt); + if (isCommonEntityContext(allEntities[0])) { + expect(allEntities[0].columns.length).toBe(2); + expect(allEntities[0].columns[0].text).toBe('col1'); + expect(allEntities[0].columns[1].text).toBe('col2'); + expect(allEntities[0].columns[0].entityContextType).toBe( + EntityContextType.COLUMN_CREATE + ); + expect(allEntities[0].columns[0].belongStmt).toBe(allEntities[0].belongStmt); + } }); test('create view as select table', () => { @@ -327,24 +385,25 @@ describe('MySQL entity collector tests', () => { expect(dbEntity.text).toBe('db_name'); expect(dbEntity.position).toEqual({ endColumn: 24, - endIndex: 778, + endIndex: 841, line: 31, startColumn: 17, - startIndex: 772, + startIndex: 835, }); expect(dbEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_DATABASE_STMT); expect(dbEntity.belongStmt.position).toEqual({ endColumn: 47, - endIndex: 801, + endIndex: 864, endLine: 31, startColumn: 1, - startIndex: 756, + startIndex: 819, startLine: 31, }); - - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('create schema', () => { @@ -363,24 +422,25 @@ describe('MySQL entity collector tests', () => { expect(schemaEntity.text).toBe('db_name'); expect(schemaEntity.position).toEqual({ endColumn: 36, - endIndex: 839, + endIndex: 902, line: 33, startColumn: 29, - startIndex: 833, + startIndex: 896, }); expect(schemaEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_DATABASE_STMT); expect(schemaEntity.belongStmt.position).toEqual({ endColumn: 59, - endIndex: 862, + endIndex: 925, endLine: 33, startColumn: 1, - startIndex: 805, + startIndex: 868, startLine: 33, }); - - expect(schemaEntity.columns).toBeNull(); - expect(schemaEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(schemaEntity)) { + expect(schemaEntity.columns).toBeUndefined(); + expect(schemaEntity.relatedEntities).toBeNull(); + } }); test('show create database', () => { @@ -399,24 +459,25 @@ describe('MySQL entity collector tests', () => { expect(dbEntity.text).toBe('db_name'); expect(dbEntity.position).toEqual({ endColumn: 41, - endIndex: 905, + endIndex: 968, line: 35, startColumn: 34, - startIndex: 899, + startIndex: 962, }); expect(dbEntity.belongStmt.stmtContextType).toBe(StmtContextType.COMMON_STMT); expect(dbEntity.belongStmt.position).toEqual({ endColumn: 42, - endIndex: 906, + endIndex: 969, endLine: 35, startColumn: 1, - startIndex: 866, + startIndex: 929, startLine: 35, }); - - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('drop database', () => { @@ -435,24 +496,25 @@ describe('MySQL entity collector tests', () => { expect(dbEntity.text).toBe('db_name'); expect(dbEntity.position).toEqual({ endColumn: 30, - endIndex: 937, + endIndex: 1000, line: 37, startColumn: 23, - startIndex: 931, + startIndex: 994, }); expect(dbEntity.belongStmt.stmtContextType).toBe(StmtContextType.COMMON_STMT); expect(dbEntity.belongStmt.position).toEqual({ endColumn: 31, - endIndex: 938, + endIndex: 1001, endLine: 37, startColumn: 1, - startIndex: 909, + startIndex: 972, startLine: 37, }); - - expect(dbEntity.columns).toBeNull(); - expect(dbEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(dbEntity)) { + expect(dbEntity.columns).toBeUndefined(); + expect(dbEntity.relatedEntities).toBeNull(); + } }); test('create function', () => { @@ -471,26 +533,36 @@ describe('MySQL entity collector tests', () => { expect(functionEntity.text).toBe('hello'); expect(functionEntity.position).toEqual({ endColumn: 39, - endIndex: 978, + endIndex: 1041, line: 39, startColumn: 34, - startIndex: 974, + startIndex: 1037, + }); + + expect(functionEntity[AttrName.comment]).toEqual({ + text: "'this is a defuner user function'", + endColumn: 125, + endIndex: 1127, + line: 39, + startColumn: 92, + startIndex: 1095, }); expect(functionEntity.belongStmt.stmtContextType).toBe( StmtContextType.CREATE_FUNCTION_STMT ); expect(functionEntity.belongStmt.position).toEqual({ - endColumn: 114, - endIndex: 1053, + endColumn: 156, + endIndex: 1158, endLine: 39, startColumn: 1, - startIndex: 941, + startIndex: 1004, startLine: 39, }); - - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } }); test('create function loadable', () => { @@ -509,10 +581,10 @@ describe('MySQL entity collector tests', () => { expect(functionEntity.text).toBe('my_concat_ws'); expect(functionEntity.position).toEqual({ endColumn: 43, - endIndex: 1098, + endIndex: 1203, line: 41, startColumn: 31, - startIndex: 1087, + startIndex: 1192, }); expect(functionEntity.belongStmt.stmtContextType).toBe( @@ -520,14 +592,14 @@ describe('MySQL entity collector tests', () => { ); expect(functionEntity.belongStmt.position).toEqual({ endColumn: 87, - endIndex: 1142, + endIndex: 1247, endLine: 41, startColumn: 1, - startIndex: 1057, + startIndex: 1162, startLine: 41, }); - - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.relatedEntities).toBeNull(); + } }); }); diff --git a/test/parser/mysql/contextCollect/fixtures/common.sql b/test/parser/mysql/contextCollect/fixtures/common.sql index b54b1bfd5..8ab934480 100644 --- a/test/parser/mysql/contextCollect/fixtures/common.sql +++ b/test/parser/mysql/contextCollect/fixtures/common.sql @@ -1,4 +1,4 @@ -CREATE TABLE new_tb_with_col (id int, age int); +CREATE TABLE new_tb_with_col (id int COMMENT 'col1', age varchar(3)) COMMENT 'new_tb_with_col comment'; CREATE TABLE new_tb_from_old AS SELECT @@ -18,7 +18,7 @@ SELECT * FROM select_tb LIMIT 5,10; SELECT * INTO @my_var FROM into_select_tb; -SELECT * FROM from_tb LEFT JOIN join_tb ON (t1.a = t2.a); +SELECT * FROM from_tb AS tb1 LEFT JOIN join_tb ON (t1.a = t2.a); INSERT INTO insert_tb (a,b,c) VALUES(1,2,3), (4,5,6), (7,8,9); @@ -36,6 +36,6 @@ SHOW CREATE SCHEMA IF NOT EXISTS db_name; DROP SCHEMA IF EXISTS db_name; -CREATE DEFINER = 'user' FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN CONCAT('Hello, ',s,'!'); +CREATE DEFINER = 'user' FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) DETERMINISTIC COMMENT 'this is a defuner user function' RETURN CONCAT('Hello, ',s,'!'); CREATE FUNCTION IF NOT EXISTS my_concat_ws RETURNS STRING SONAME 'udf_my_concat_ws.so'; diff --git a/test/parser/mysql/contextCollect/fixtures/semantic.sql b/test/parser/mysql/contextCollect/fixtures/semantic.sql new file mode 100644 index 000000000..0e255e192 --- /dev/null +++ b/test/parser/mysql/contextCollect/fixtures/semantic.sql @@ -0,0 +1,31 @@ +CREA + +CREATE + +INSERT IN + +CREATE TABLE a AS + +INSERT + +SELECT id FROM t1; +CRE + +SELECT id FROM t2; + + +CREATE TABLE IF NOT EXISTS a1(id INT, ) +SEL + +CREATE; SEL + +CREATE TABLE a1(id INT); +SEL +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT); +CREATE VIEW +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) +CREATE VIEW \ No newline at end of file diff --git a/test/parser/mysql/contextCollect/semanticContextCollector.test.ts b/test/parser/mysql/contextCollect/semanticContextCollector.test.ts new file mode 100644 index 000000000..f281c5b48 --- /dev/null +++ b/test/parser/mysql/contextCollect/semanticContextCollector.test.ts @@ -0,0 +1,146 @@ +import fs from 'fs'; +import path from 'path'; +import { SqlSplitStrategy } from 'src/parser/common/types'; +import { MySQL } from 'src/parser/mysql'; +import { readSQLByRange } from 'test/helper'; + +describe('MySQL semantic context collector tests', () => { + const mySQL = new MySQL(); + const text = fs.readFileSync(path.join(__dirname, 'fixtures', 'semantic.sql'), 'utf-8'); + + test('beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 1, endLine: 1 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 5, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 3, endLine: 3 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 7, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 5, endLine: 5 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 10, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 7, endLine: 7 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 18, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement if type white space after keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 9, endLine: 9 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 8, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement after an exists statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 11, endLine: 12 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement after an exists statement and typed white space', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 14, endLine: 15 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 2, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement if previous statement exists error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 17, endLine: 18 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement if previous token text is semicolon even if has error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 20, endLine: 20 }); + // typed keyword + const ctx1 = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 13, + }); + expect(ctx1.isStatementBeginning).toBeTruthy(); + + // typed white space + const ctx2 = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 9, + }); + expect(ctx2.isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 22, endLine: 24 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 26, endLine: 28 }); + const { isStatementBeginning } = mySQL.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 12, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('test sqlSplitStrategy', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 30, endLine: 31 }); + const { isStatementBeginning: isStatementBeginning1 } = + mySQL.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.LOOSE, + } + ); + expect(isStatementBeginning1).toBeTruthy(); + + const { isStatementBeginning: isStatementBeginning2 } = + mySQL.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + } + ); + expect(isStatementBeginning2).toBeFalsy(); + }); +}); diff --git a/test/parser/mysql/errorListener.test.ts b/test/parser/mysql/errorListener.test.ts new file mode 100644 index 000000000..443666bf8 --- /dev/null +++ b/test/parser/mysql/errorListener.test.ts @@ -0,0 +1,80 @@ +import { MySQL } from 'src/parser/mysql'; + +const randomText = `dhsdansdnkla ndjnsla ndnalks`; +const sql1 = `SHOW CREATE TABLE`; +const sql2 = `CREATE DATABASE `; +const sql3 = `SHOW CREATE DATABASE IF NOT EXIsST aaa aaa`; +const sql4 = `SELECT * froma aaa`; + +describe('MySQL validate invalid sql and test msg', () => { + const mysql = new MySQL(); + + test('validate random text', () => { + const errors = mysql.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'dhsdansdnkla' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql1', () => { + const errors = mysql.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete'); + }); + + test('validate unComplete sql2', () => { + const errors = mysql.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + 'Statement is incomplete, expecting a new database or a keyword' + ); + }); + + test('validate unComplete sql3', () => { + const errors = mysql.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`missing 'EXISTS' at 'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' is not valid at this position`); + }); + + test('validate unComplete sql4', () => { + const errors = mysql.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'froma' is not valid at this position, expecting an existing column or a keyword` + ); + }); + + test('validate random text cn', () => { + mysql.locale = 'zh_CN'; + const errors = mysql.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'dhsdansdnkla' 在此位置无效,期望一个关键字`); + }); + + test('validate unComplete sql1 cn', () => { + const errors = mysql.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('语句不完整'); + }); + + test('validate unComplete sql2 cn', () => { + const errors = mysql.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toEqual('语句不完整,期望一个新的database或者一个关键字'); + }); + + test('validate unComplete sql3 cn', () => { + const errors = mysql.validate(sql3); + expect(errors.length).toBe(2); + expect(errors[0].message).toBe(`缺少'EXISTS'在'EXIsST'`); + expect(errors[1].message).toBe(`'aaa' 在此位置无效`); + }); + + test('validate unComplete sql4 cn', () => { + const errors = mysql.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'froma' 在此位置无效,期望一个存在的column或者一个关键字`); + }); +}); diff --git a/test/parser/mysql/suggestion/fixtures/tokenSuggestion.sql b/test/parser/mysql/suggestion/fixtures/tokenSuggestion.sql index 11f02aba3..0733f7542 100644 --- a/test/parser/mysql/suggestion/fixtures/tokenSuggestion.sql +++ b/test/parser/mysql/suggestion/fixtures/tokenSuggestion.sql @@ -14,3 +14,5 @@ LOAD ; SHOW ; +CREATE TABLE IF NOT EXISTS +; \ No newline at end of file diff --git a/test/parser/mysql/suggestion/tokenSuggestion.test.ts b/test/parser/mysql/suggestion/tokenSuggestion.test.ts index 38ca340b5..9d3ad3301 100644 --- a/test/parser/mysql/suggestion/tokenSuggestion.test.ts +++ b/test/parser/mysql/suggestion/tokenSuggestion.test.ts @@ -19,7 +19,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'RESOURCE', 'USER', 'VIEW', @@ -37,6 +37,10 @@ describe('MySQL Token Suggestion', () => { 'EVENT', 'DATABASE', 'SCHEMA', + 'RESOURCE GROUP', + 'SQL SECURITY', + 'LOGFILE GROUP', + 'INSTANCE ROTATE INNODB MASTER KEY', ]); }); @@ -50,7 +54,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'RESOURCE', 'USER', 'ROLE', @@ -79,6 +83,11 @@ describe('MySQL Token Suggestion', () => { 'EVENT', 'DATABASE', 'SCHEMA', + 'RESOURCE GROUP', + 'SQL SECURITY', + 'OR REPLACE', + 'IF NOT EXISTS', + 'LOGFILE GROUP', ]); }); @@ -92,7 +101,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['FROM', 'IGNORE', 'QUICK', 'LOW_PRIORITY']); + expect(suggestion).toMatchUnorderedArray(['FROM', 'IGNORE', 'QUICK', 'LOW_PRIORITY']); }); test('After DESCRIBE', () => { @@ -105,7 +114,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'ANALYZE', 'SELECT', 'DELETE', @@ -116,6 +125,7 @@ describe('MySQL Token Suggestion', () => { 'FORMAT', 'PARTITIONS', 'EXTENDED', + 'FOR CONNECTION', ]); }); @@ -129,7 +139,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'RESOURCE', 'USER', 'PREPARE', @@ -149,6 +159,9 @@ describe('MySQL Token Suggestion', () => { 'EVENT', 'DATABASE', 'SCHEMA', + 'RESOURCE GROUP', + 'SPATIAL REFERENCE SYSTEM', + 'LOGFILE GROUP', ]); }); @@ -162,7 +175,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'INTO', 'IGNORE', 'DELAYED', @@ -181,7 +194,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['INDEX', 'XML', 'DATA']); + expect(suggestion).toMatchUnorderedArray(['INDEX', 'XML', 'DATA', 'INDEX INTO CACHE']); }); test('After SHOW', () => { @@ -194,7 +207,7 @@ describe('MySQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'REPLICAS', 'REPLICA', 'SLAVE', @@ -240,6 +253,36 @@ describe('MySQL Token Suggestion', () => { 'BINLOG', 'RELAYLOG', 'BINARY', + 'OPEN TABLES', + 'TABLE STATUS', + 'CHARACTER SET', ]); }); + + test('After CREATE TABLE, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 17, + column: 14, + }; + const suggestion = mysql.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + + expect(suggestion).toContain('IF'); + expect(suggestion).toContain('IF NOT EXISTS'); + }); + + test('After CREATE TABLE IF, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 17, + column: 17, + }; + const suggestion = mysql.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('NOT'); + expect(suggestion).toContain('NOT EXISTS'); + }); }); diff --git a/test/parser/postgresql/contextCollect/entityCollector.test.ts b/test/parser/postgresql/contextCollect/entityCollector.test.ts index e0b7b27cd..43ced5669 100644 --- a/test/parser/postgresql/contextCollect/entityCollector.test.ts +++ b/test/parser/postgresql/contextCollect/entityCollector.test.ts @@ -2,8 +2,13 @@ import { ParseTreeListener } from 'antlr4ng'; import fs from 'fs'; import path from 'path'; import { PostgreSqlParserListener } from 'src/lib/postgresql/PostgreSqlParserListener'; +import { + AttrName, + isCommonEntityContext, + isFuncEntityContext, + StmtContextType, +} from 'src/parser/common/entityCollector'; import { EntityContextType } from 'src/parser/common/types'; -import { StmtContextType } from 'src/parser/common/entityCollector'; import { PostgreSQL, PostgreSqlEntityCollector, @@ -23,7 +28,7 @@ describe('PostgreSql entity collector tests', () => { }); test('split results', () => { - expect(splitListener.statementsContext.length).toBe(10); + expect(splitListener.statementsContext.length).toBe(11); }); test('create database', () => { @@ -76,14 +81,15 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 122, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); - expect(tableCreateEntity.columns).toBeNull(); - - expect(tableCreateEntity.relatedEntities.length).toBe(2); - tableCreateEntity.relatedEntities.forEach((relatedEntity) => { - expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); - }); + expect(tableCreateEntity.relatedEntities.length).toBe(2); + tableCreateEntity.relatedEntities.forEach((relatedEntity) => { + expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); + }); + } expect(allEntities[1].text).toBe('films'); expect(allEntities[1].belongStmt.rootStmt).toBe(allEntities[0].belongStmt); @@ -138,15 +144,35 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 2, }); - - expect(tableCreateEntity.columns.length).toBe(2); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns.length).toBe(2); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'integer', + startIndex: 290, + endIndex: 296, + line: 10, + startColumn: 13, + endColumn: 20, + }); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'varchar(40)', + startIndex: 311, + endIndex: 321, + line: 11, + startColumn: 13, + endColumn: 24, + }); + } }); test('create foreign table by columns', () => { @@ -181,15 +207,43 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 19, }); - - expect(tableCreateEntity.columns.length).toBe(6); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns.length).toBe(6); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'char(5)', + startIndex: 426, + endIndex: 432, + line: 16, + startColumn: 17, + endColumn: 24, + }); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'varchar(40)', + startIndex: 460, + endIndex: 470, + line: 17, + startColumn: 17, + endColumn: 28, + }); + expect(tableCreateEntity.columns[3][AttrName.colType]).toEqual({ + text: 'date', + startIndex: 532, + endIndex: 535, + line: 19, + startColumn: 17, + endColumn: 21, + }); + } }); test('create foreign table of partition', () => { @@ -224,15 +278,16 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 21, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); - expect(tableCreateEntity.columns).toBeNull(); + expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - - const relatedEntity = tableCreateEntity.relatedEntities[0]; - expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); - expect(relatedEntity.text).toBe('measurement'); + const relatedEntity = tableCreateEntity.relatedEntities[0]; + expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); + expect(relatedEntity.text).toBe('measurement'); + } }); test('create view by select', () => { @@ -265,15 +320,16 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 26, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); - expect(tableCreateEntity.columns).toBeNull(); - - expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.relatedEntities.length).toBe(1); - const relatedEntity = tableCreateEntity.relatedEntities[0]; - expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); - expect(relatedEntity.text).toBe('films'); + const relatedEntity = tableCreateEntity.relatedEntities[0]; + expect(relatedEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(allEntities.some((en) => relatedEntity === en)).toBeTruthy(); + expect(relatedEntity.text).toBe('films'); + } }); test('create materialized view by columns', () => { @@ -306,16 +362,20 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 17, }); - - expect(tableCreateEntity.columns.length).toBe(2); - - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns.length).toBe(2); + + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + } }); test('select with clause', () => { @@ -348,9 +408,10 @@ describe('PostgreSql entity collector tests', () => { startColumn: 36, endColumn: 67, }); - expect(tableEntity1.columns).toBeNull(); - expect(tableEntity1.relatedEntities).toBeNull(); - + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity2.text).toBe('table_expression1'); expect(tableEntity2.position).toEqual({ @@ -370,8 +431,10 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 111, }); - expect(tableEntity2.columns).toBeNull(); - expect(tableEntity2.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableEntity2)) { + expect(tableEntity2.columns).toBeUndefined(); + expect(tableEntity2.relatedEntities).toBeNull(); + } }); test('insert into table', () => { @@ -404,9 +467,10 @@ describe('PostgreSql entity collector tests', () => { startColumn: 1, endColumn: 55, }); - - expect(tableInsertEntity.columns).toBeNull(); - expect(tableInsertEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableInsertEntity)) { + expect(tableInsertEntity.columns).toBeUndefined(); + expect(tableInsertEntity.relatedEntities).toBeNull(); + } }); test('create function', () => { @@ -441,8 +505,76 @@ describe('PostgreSql entity collector tests', () => { startIndex: 1359, startLine: 47, }); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } + }); + + test('select has table alias with clause', () => { + const testingContext = splitListener.statementsContext[10]; + + const collectListener = new PostgreSqlEntityCollector(commonSql); + postgreSql.listen(collectListener as ParseTreeListener, testingContext); + + const allEntities = collectListener.getEntities(); + expect(allEntities.length).toBe(2); + + const tableEntity1 = allEntities[0]; + const tableEntity2 = allEntities[1]; + expect(tableEntity1.entityContextType).toBe(EntityContextType.TABLE); + expect(tableEntity1.text).toBe('table_expression'); + expect(tableEntity1.position).toEqual({ + startIndex: 1531, + endIndex: 1546, + line: 51, + startColumn: 51, + endColumn: 67, + }); - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(tableEntity1.belongStmt.position).toEqual({ + startIndex: 1516, + endIndex: 1546, + startLine: 51, + endLine: 51, + startColumn: 36, + endColumn: 67, + }); + if (isCommonEntityContext(tableEntity1)) { + expect(tableEntity1.columns).toBeUndefined(); + expect(tableEntity1.relatedEntities).toBeNull(); + } + expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); + expect(tableEntity2.text).toBe('table_expression1'); + expect(tableEntity2.position).toEqual({ + startIndex: 1604, + endIndex: 1620, + line: 52, + startColumn: 55, + endColumn: 72, + }); + + expect(tableEntity2.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(tableEntity2.belongStmt.position).toEqual({ + startIndex: 1481, + endIndex: 1667, + startLine: 51, + endLine: 52, + startColumn: 1, + endColumn: 119, + }); + expect(tableEntity2[AttrName.alias]).toEqual({ + text: 'tb_1', + startIndex: 1625, + endIndex: 1628, + line: 52, + startColumn: 76, + endColumn: 80, + }); + if (isCommonEntityContext(tableEntity2)) { + expect(tableEntity2.columns).toBeUndefined(); + expect(tableEntity2.relatedEntities).toBeNull(); + } }); }); diff --git a/test/parser/postgresql/contextCollect/fixtures/common.sql b/test/parser/postgresql/contextCollect/fixtures/common.sql index ce34d9242..bffb7fa54 100644 --- a/test/parser/postgresql/contextCollect/fixtures/common.sql +++ b/test/parser/postgresql/contextCollect/fixtures/common.sql @@ -46,4 +46,7 @@ INSERT INTO insert_films (code, title, did, date_prod, kind) CREATE FUNCTION get_color_note (rainbow) RETURNS text AS 'SELECT note FROM my_colors WHERE color = $1' - LANGUAGE SQL; \ No newline at end of file + LANGUAGE SQL; + +WITH RECURSIVE query_name (id) AS (SELECT id FROM table_expression) +SELECT DISTINCT ON (col1,col2) random() AS name1 FROM table_expression1 AS tb_1 WHERE name1=name1 GROUP BY DISTINCT id; diff --git a/test/parser/postgresql/contextCollect/fixtures/semantic.sql b/test/parser/postgresql/contextCollect/fixtures/semantic.sql new file mode 100644 index 000000000..279f09b0f --- /dev/null +++ b/test/parser/postgresql/contextCollect/fixtures/semantic.sql @@ -0,0 +1,31 @@ +CREA + +CREATE + +ALTER TAB + +ALTER TABLE + +INSERT + +SELECT id FROM t1; +CRE + +SELECT id FROM t2; + + +CREATE TABLE IF NOT EXISTS a1(id INT, ) +SEL + +CREATE; SEL + +CREATE TABLE a1(id INT); +SEL +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT); +CREATE VIEW +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) +CREATE VIEW \ No newline at end of file diff --git a/test/parser/postgresql/contextCollect/semanticContextCollector.test.ts b/test/parser/postgresql/contextCollect/semanticContextCollector.test.ts new file mode 100644 index 000000000..ff3774e35 --- /dev/null +++ b/test/parser/postgresql/contextCollect/semanticContextCollector.test.ts @@ -0,0 +1,146 @@ +import fs from 'fs'; +import path from 'path'; +import { SqlSplitStrategy } from 'src/parser/common/types'; +import { PostgreSQL } from 'src/parser/postgresql'; +import { readSQLByRange } from 'test/helper'; + +describe('PostgreSQL semantic context collector tests', () => { + const postgreSql = new PostgreSQL(); + const text = fs.readFileSync(path.join(__dirname, 'fixtures', 'semantic.sql'), 'utf-8'); + + test('beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 1, endLine: 1 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 5, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 3, endLine: 3 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 7, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 5, endLine: 5 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 10, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 7, endLine: 7 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 12, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement if type white space after keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 9, endLine: 9 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 8, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement after an exists statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 11, endLine: 12 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement after an exists statement and typed white space', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 14, endLine: 15 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 2, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement if previous statement exists error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 17, endLine: 18 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement if previous token text is semicolon even if has error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 20, endLine: 20 }); + // typed keyword + const ctx1 = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 13, + }); + expect(ctx1.isStatementBeginning).toBeTruthy(); + + // typed white space + const ctx2 = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 9, + }); + expect(ctx2.isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 22, endLine: 24 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 26, endLine: 28 }); + const { isStatementBeginning } = postgreSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 12, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('test sqlSplitStrategy', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 30, endLine: 31 }); + const { isStatementBeginning: isStatementBeginning1 } = + postgreSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.LOOSE, + } + ); + expect(isStatementBeginning1).toBeTruthy(); + + const { isStatementBeginning: isStatementBeginning2 } = + postgreSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + } + ); + expect(isStatementBeginning2).toBeFalsy(); + }); +}); diff --git a/test/parser/postgresql/errorListener.test.ts b/test/parser/postgresql/errorListener.test.ts new file mode 100644 index 000000000..153f31abf --- /dev/null +++ b/test/parser/postgresql/errorListener.test.ts @@ -0,0 +1,80 @@ +import { PostgreSQL } from 'src/parser/postgresql'; + +const randomText = `dhsdansdnkla ndjnsla ndnalks`; +const sql1 = `ALTER EVENT`; +const sql2 = `CREATE FUNCTION `; +const sql3 = `SELECT name, altitude FROM ONLY cities WHERE `; +const sql4 = `DROP PROCEDURE name1 a`; + +describe('PostgreSQL validate invalid sql and test msg', () => { + const pgSQL = new PostgreSQL(); + + test('validate random text', () => { + const errors = pgSQL.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'dhsdansdnkla' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql1', () => { + const errors = pgSQL.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete'); + }); + + test('validate unComplete sql2', () => { + const errors = pgSQL.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete, expecting a new function'); + }); + + test('validate unComplete sql3', () => { + const errors = pgSQL.validate(sql3); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `Statement is incomplete, expecting an existing function or an existing column or a keyword` + ); + }); + + test('validate unComplete sql4', () => { + const errors = pgSQL.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'a' is not valid at this position, expecting an existing procedure or a keyword` + ); + }); + + test('validate random text cn', () => { + pgSQL.locale = 'zh_CN'; + const errors = pgSQL.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'dhsdansdnkla' 在此位置无效,期望一个关键字`); + }); + + test('validate unComplete sql1 cn', () => { + const errors = pgSQL.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('语句不完整'); + }); + + test('validate unComplete sql2 cn', () => { + const errors = pgSQL.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toEqual('语句不完整,期望一个新的function'); + }); + + test('validate unComplete sql3 cn', () => { + const errors = pgSQL.validate(sql3); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `语句不完整,期望一个存在的function或者一个存在的column或者一个关键字` + ); + }); + + test('validate unComplete sql4 cn', () => { + const errors = pgSQL.validate(sql4); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'a' 在此位置无效,期望一个存在的procedure或者一个关键字`); + }); +}); diff --git a/test/parser/postgresql/suggestion/fixtures/tokenSuggestion.sql b/test/parser/postgresql/suggestion/fixtures/tokenSuggestion.sql index 6eaefbcf5..f49facfc2 100644 --- a/test/parser/postgresql/suggestion/fixtures/tokenSuggestion.sql +++ b/test/parser/postgresql/suggestion/fixtures/tokenSuggestion.sql @@ -8,5 +8,4 @@ DELETE ; CREATE ; - - +CREATE TABLE IF NOT EXISTS; \ No newline at end of file diff --git a/test/parser/postgresql/suggestion/tokenSuggestion.test.ts b/test/parser/postgresql/suggestion/tokenSuggestion.test.ts index de51ac993..18625ca0f 100644 --- a/test/parser/postgresql/suggestion/tokenSuggestion.test.ts +++ b/test/parser/postgresql/suggestion/tokenSuggestion.test.ts @@ -17,7 +17,7 @@ describe('Postgres SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'TYPE', 'TEXT', 'STATISTICS', @@ -54,6 +54,10 @@ describe('Postgres SQL Token Suggestion', () => { 'LARGE', 'EXTENSION', 'DEFAULT', + 'TEXT SEARCH', + 'EVENT TRIGGER', + 'LARGE OBJECT', + 'DEFAULT PRIVILEGES', ]); }); @@ -66,7 +70,7 @@ describe('Postgres SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'RECURSIVE', 'VIEW', 'TEMPORARY', @@ -114,6 +118,12 @@ describe('Postgres SQL Token Suggestion', () => { 'CAST', 'ASSERTION', 'ACCESS', + 'RECURSIVE VIEW', + 'TEXT SEARCH', + 'EVENT TRIGGER', + 'TRANSFORM FOR', + 'MATERIALIZED VIEW', + 'ACCESS METHOD', ]); }); @@ -126,7 +136,7 @@ describe('Postgres SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['FROM']); + expect(suggestion).toMatchUnorderedArray(['FROM']); }); test('After DROP', () => { @@ -138,7 +148,7 @@ describe('Postgres SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'OPERATOR', 'ROUTINE', 'PROCEDURE', @@ -176,6 +186,10 @@ describe('Postgres SQL Token Suggestion', () => { 'MATERIALIZED', 'SEQUENCE', 'TABLE', + 'OWNED BY', + 'TEXT SEARCH', + 'EVENT TRIGGER', + 'ACCESS METHOD', ]); }); @@ -188,6 +202,32 @@ describe('Postgres SQL Token Suggestion', () => { commentOtherLine(tokenSql, pos.lineNumber), pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['INTO']); + expect(suggestion).toMatchUnorderedArray(['INTO']); + }); + + test('After CREATE TABLE, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 11, + column: 14, + }; + const suggestion = postgresql.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('IF'); + expect(suggestion).toContain('IF NOT EXISTS'); + }); + + test('After CREATE TABLE IF, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 11, + column: 17, + }; + const suggestion = postgresql.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('NOT'); + expect(suggestion).toContain('NOT EXISTS'); }); }); diff --git a/test/parser/spark/contextCollect/entityCollector.test.ts b/test/parser/spark/contextCollect/entityCollector.test.ts index 3bba48585..eabb9095f 100644 --- a/test/parser/spark/contextCollect/entityCollector.test.ts +++ b/test/parser/spark/contextCollect/entityCollector.test.ts @@ -1,10 +1,15 @@ +import { ParseTreeListener } from 'antlr4ng'; import fs from 'fs'; import path from 'path'; -import { SparkSQL, SparkSqlSplitListener, SparkEntityCollector } from 'src/parser/spark'; -import { ParseTreeListener } from 'antlr4ng'; import { SparkSqlParserListener } from 'src/lib/spark/SparkSqlParserListener'; +import { + AttrName, + isCommonEntityContext, + isFuncEntityContext, + StmtContextType, +} from 'src/parser/common/entityCollector'; import { EntityContextType } from 'src/parser/common/types'; -import { StmtContextType } from 'src/parser/common/entityCollector'; +import { SparkEntityCollector, SparkSQL, SparkSqlSplitListener } from 'src/parser/spark'; const commonSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'common.sql'), 'utf-8'); @@ -55,15 +60,16 @@ describe('SparkSQL entity collector tests', () => { startColumn: 1, endColumn: 52, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities.length).toBe(1); + const beLikedEntity = allEntities[1]; - const beLikedEntity = allEntities[1]; - - expect(tableCreateEntity.relatedEntities[0]).toBe(beLikedEntity); - expect(beLikedEntity.text).toBe('like_old_tb'); - expect(beLikedEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(beLikedEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(tableCreateEntity.relatedEntities[0]).toBe(beLikedEntity); + expect(beLikedEntity.text).toBe('like_old_tb'); + expect(beLikedEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(beLikedEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + } }); test('create hive format table', () => { @@ -87,29 +93,65 @@ describe('SparkSQL entity collector tests', () => { startColumn: 14, endColumn: 21, }); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'this is new_tb2 comment'", + startIndex: 283, + endIndex: 307, + line: 9, + startColumn: 13, + endColumn: 38, + }); expect(tableCreateEntity.belongStmt.stmtContextType).toBe( StmtContextType.CREATE_TABLE_STMT ); expect(tableCreateEntity.belongStmt.position).toEqual({ startIndex: 54, - endIndex: 242, + endIndex: 307, startLine: 3, - endLine: 8, + endLine: 9, startColumn: 1, - endColumn: 22, - }); - - expect(tableCreateEntity.relatedEntities).toBeNull(); - expect(tableCreateEntity.columns.length).toBe(2); - - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); + endColumn: 38, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities).toBeNull(); + expect(tableCreateEntity.columns.length).toBe(2); + + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.columns[0][AttrName.comment]).toEqual({ + text: "'this is new col1'", + startIndex: 97, + endIndex: 114, + line: 3, + startColumn: 44, + endColumn: 62, + }); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'INT', + startIndex: 85, + endIndex: 87, + line: 3, + startColumn: 32, + endColumn: 35, + }); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'STRING', + startIndex: 126, + endIndex: 131, + line: 3, + startColumn: 73, + endColumn: 79, + }); + } }); test('create data source table', () => { @@ -130,11 +172,11 @@ describe('SparkSQL entity collector tests', () => { expect(tableCreateEntity.belongStmt.stmtContextType).toBe( StmtContextType.CREATE_TABLE_STMT ); - - expect(tableCreateEntity.columns).toBeNull(); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); - + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + } expect(originTableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(originTableEntity.text).toBe('student'); expect(originTableEntity.belongStmt.rootStmt).toBe(tableCreateEntity.belongStmt); @@ -156,15 +198,35 @@ describe('SparkSQL entity collector tests', () => { expect(viewEntity.entityContextType).toBe(EntityContextType.VIEW_CREATE); expect(viewEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_VIEW_STMT); expect(viewEntity.text).toBe('new_view1'); - expect(viewEntity.columns.length).toBe(2); - viewEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(viewEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); + expect(viewEntity[AttrName.comment]).toEqual({ + text: "'View for experienced employees'", + startIndex: 455, + endIndex: 486, + line: 14, + startColumn: 9, + endColumn: 41, }); - + if (isCommonEntityContext(viewEntity)) { + expect(viewEntity.columns.length).toBe(2); + viewEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(viewEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(viewEntity.columns[0][AttrName.comment]).toEqual({ + text: "'Unique identification number'", + startIndex: 408, + endIndex: 437, + line: 13, + startColumn: 35, + endColumn: 65, + }); + } expect(tableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); expect(tableEntity.belongStmt.rootStmt).toBe(viewEntity.belongStmt); @@ -187,10 +249,26 @@ describe('SparkSQL entity collector tests', () => { expect(tableEntity1.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity1.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); expect(tableEntity1.text).toBe('employee'); + expect(tableEntity1[AttrName.alias]).toEqual({ + text: 'em', + startIndex: 602, + endIndex: 603, + line: 17, + startColumn: 55, + endColumn: 57, + }); expect(tableEntity2.entityContextType).toBe(EntityContextType.TABLE); expect(tableEntity2.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); expect(tableEntity2.text).toBe('department'); + expect(tableEntity2[AttrName.alias]).toEqual({ + text: 'dept', + startIndex: 630, + endIndex: 633, + line: 17, + startColumn: 83, + endColumn: 87, + }); }); test('insert into table values', () => { @@ -265,6 +343,14 @@ describe('SparkSQL entity collector tests', () => { StmtContextType.CREATE_DATABASE_STMT ); expect(sourceTableEntity.text).toBe('customer_db'); + expect(sourceTableEntity[AttrName.comment]).toEqual({ + text: "'this is database comment'", + startIndex: 928, + endIndex: 953, + line: 25, + startColumn: 51, + endColumn: 77, + }); }); test('use namespace', () => { @@ -299,10 +385,10 @@ describe('SparkSQL entity collector tests', () => { expect(functionEntity.text).toBe('simple_udf'); expect(functionEntity.position).toEqual({ endColumn: 38, - endIndex: 905, - line: 28, + endIndex: 1013, + line: 29, startColumn: 28, - startIndex: 896, + startIndex: 1004, }); expect(functionEntity.belongStmt.stmtContextType).toBe( @@ -310,15 +396,17 @@ describe('SparkSQL entity collector tests', () => { ); expect(functionEntity.belongStmt.position).toEqual({ endColumn: 54, - endIndex: 921, - endLine: 28, + endIndex: 1029, + endLine: 29, startColumn: 1, - startIndex: 869, - startLine: 28, + startIndex: 977, + startLine: 29, }); - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } }); test('create xxx function', () => { @@ -337,10 +425,10 @@ describe('SparkSQL entity collector tests', () => { expect(functionEntity.text).toBe('simple_udf'); expect(functionEntity.position).toEqual({ endColumn: 27, - endIndex: 950, - line: 30, + endIndex: 1058, + line: 31, startColumn: 17, - startIndex: 941, + startIndex: 1049, }); expect(functionEntity.belongStmt.stmtContextType).toBe( @@ -348,14 +436,15 @@ describe('SparkSQL entity collector tests', () => { ); expect(functionEntity.belongStmt.position).toEqual({ endColumn: 43, - endIndex: 966, - endLine: 30, + endIndex: 1074, + endLine: 31, startColumn: 1, - startIndex: 925, - startLine: 30, + startIndex: 1033, + startLine: 31, }); - - expect(functionEntity.columns).toBeNull(); - expect(functionEntity.relatedEntities).toBeNull(); + if (isFuncEntityContext(functionEntity)) { + expect(functionEntity.arguments).toBeNull(); + expect(functionEntity.relatedEntities).toBeNull(); + } }); }); diff --git a/test/parser/spark/contextCollect/fixtures/common.sql b/test/parser/spark/contextCollect/fixtures/common.sql index fc63a4772..e3bbd97b7 100644 --- a/test/parser/spark/contextCollect/fixtures/common.sql +++ b/test/parser/spark/contextCollect/fixtures/common.sql @@ -1,11 +1,12 @@ CREATE TABLE IF NOT EXISTS new_tb1 like like_old_tb; -CREATE TABLE new_tb2 (new_col1 INT, new_col2 STRING) +CREATE TABLE new_tb2 (new_col1 INT COMMENT 'this is new col1', new_col2 STRING) PARTITIONED BY (YEAR STRING) CLUSTERED BY (new_col1, NAME) SORTED BY (new_col1 ASC) INTO 3 BUCKETS - STORED AS PARQUET; + STORED AS PARQUET + COMMENT 'this is new_tb2 comment'; CREATE TABLE student_copy USING CSV AS SELECT * FROM student; @@ -13,7 +14,7 @@ CREATE VIEW new_view1 (ID COMMENT 'Unique identification number', Name) COMMENT 'View for experienced employees' AS SELECT id, name FROM old_tb_1 WHERE working_years > 5; -SELECT id, name, employee.deptno, deptname FROM employee CROSS JOIN department; +SELECT id, name, em.deptno, deptname FROM employee AS em CROSS JOIN department AS dept; INSERT INTO insert_tb (address, name, student_id) VALUES ('Hangzhou, China', 'Kent Yao', 11215016); @@ -21,7 +22,7 @@ INSERT OVERWRITE target_tb TABLE source_tb; INSERT OVERWRITE DIRECTORY '/path/to/output/directory' SELECT * FROM from_tb WHERE condition; -CREATE DATABASE IF NOT EXISTS customer_db; +CREATE DATABASE IF NOT EXISTS customer_db COMMENT 'this is database comment'; USE NAMESPACE ns1; diff --git a/test/parser/spark/contextCollect/fixtures/semantic.sql b/test/parser/spark/contextCollect/fixtures/semantic.sql new file mode 100644 index 000000000..88dbd568f --- /dev/null +++ b/test/parser/spark/contextCollect/fixtures/semantic.sql @@ -0,0 +1,31 @@ +CREA + +CREATE + +CREATE TABLE a A + +CREATE TABLE a AS + +INSERT + +SELECT id FROM t1; +CRE + +SELECT id FROM t2; + + +CREATE TABLE IF NOT EXISTS a1(id INT, ) +SEL + +CREATE; SEL + +CREATE TABLE a1(id INT); +SEL +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT); +CREATE VIEW +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) +CREATE VIEW \ No newline at end of file diff --git a/test/parser/spark/contextCollect/semanticContextCollector.test.ts b/test/parser/spark/contextCollect/semanticContextCollector.test.ts new file mode 100644 index 000000000..ca9878bfb --- /dev/null +++ b/test/parser/spark/contextCollect/semanticContextCollector.test.ts @@ -0,0 +1,146 @@ +import fs from 'fs'; +import path from 'path'; +import { SqlSplitStrategy } from 'src/parser/common/types'; +import { SparkSQL } from 'src/parser/spark'; +import { readSQLByRange } from 'test/helper'; + +describe('Spark semantic context collector tests', () => { + const sparkSql = new SparkSQL(); + const text = fs.readFileSync(path.join(__dirname, 'fixtures', 'semantic.sql'), 'utf-8'); + + test('beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 1, endLine: 1 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 5, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 3, endLine: 3 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 7, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 5, endLine: 5 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 22, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 7, endLine: 7 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 18, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement if type white space after keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 9, endLine: 9 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 8, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement after an exists statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 11, endLine: 12 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement after an exists statement and typed white space', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 14, endLine: 15 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 2, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement if previous statement exists error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 17, endLine: 18 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement if previous token text is semicolon even if has error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 20, endLine: 20 }); + // typed keyword + const ctx1 = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 13, + }); + expect(ctx1.isStatementBeginning).toBeTruthy(); + + // typed white space + const ctx2 = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 9, + }); + expect(ctx2.isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 22, endLine: 24 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 26, endLine: 28 }); + const { isStatementBeginning } = sparkSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 12, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('test sqlSplitStrategy', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 30, endLine: 31 }); + const { isStatementBeginning: isStatementBeginning1 } = + sparkSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.LOOSE, + } + ); + expect(isStatementBeginning1).toBeTruthy(); + + const { isStatementBeginning: isStatementBeginning2 } = + sparkSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + } + ); + expect(isStatementBeginning2).toBeFalsy(); + }); +}); diff --git a/test/parser/spark/errorListener.test.ts b/test/parser/spark/errorListener.test.ts new file mode 100644 index 000000000..bc356160d --- /dev/null +++ b/test/parser/spark/errorListener.test.ts @@ -0,0 +1,67 @@ +import { SparkSQL } from 'src/parser/spark'; + +const randomText = `dhsdansdnkla ndjnsla ndnalks`; +const sql1 = `ALTER VIEW`; +const sql2 = `SELECT * FROM `; +const sql3 = `DROP SCHEMA aaa aaa`; + +describe('SparkSQL validate invalid sql and test msg', () => { + const spark = new SparkSQL(); + + test('validate random text', () => { + const errors = spark.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'dhsdansdnkla' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql1', () => { + const errors = spark.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete'); + }); + + test('validate unComplete sql2', () => { + const errors = spark.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + 'Statement is incomplete, expecting an existing table or an existing view or an existing function or a keyword' + ); + }); + + test('validate unComplete sql3', () => { + const errors = spark.validate(sql3); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'aaa' is not valid at this position, expecting an existing namespace or a keyword` + ); + }); + + test('validate random text cn', () => { + spark.locale = 'zh_CN'; + const errors = spark.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'dhsdansdnkla' 在此位置无效,期望一个关键字`); + }); + + test('validate unComplete sql1 cn', () => { + const errors = spark.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('语句不完整'); + }); + + test('validate unComplete sql2 cn', () => { + const errors = spark.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + '语句不完整,期望一个存在的table或者一个存在的view或者一个存在的function或者一个关键字' + ); + }); + + test('validate unComplete sql3 cn', () => { + const errors = spark.validate(sql3); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'aaa' 在此位置无效,期望一个存在的namespace或者一个关键字`); + }); +}); diff --git a/test/parser/spark/suggestion/fixtures/tokenSuggestion.sql b/test/parser/spark/suggestion/fixtures/tokenSuggestion.sql index 64741647b..cdb60e027 100644 --- a/test/parser/spark/suggestion/fixtures/tokenSuggestion.sql +++ b/test/parser/spark/suggestion/fixtures/tokenSuggestion.sql @@ -16,3 +16,5 @@ SHOW ; EXPORT ; +CREATE TABLE IF NOT EXISTS +; diff --git a/test/parser/spark/suggestion/suggestionWithEntity.test.ts b/test/parser/spark/suggestion/suggestionWithEntity.test.ts index 936889628..dc968a071 100644 --- a/test/parser/spark/suggestion/suggestionWithEntity.test.ts +++ b/test/parser/spark/suggestion/suggestionWithEntity.test.ts @@ -9,7 +9,7 @@ const syntaxSql = fs.readFileSync( 'utf-8' ); -describe('PostgreSql Syntax Suggestion with collect entity', () => { +describe('Spark SQL Syntax Suggestion with collect entity', () => { const spark = new SparkSQL(); test('select with no column', () => { diff --git a/test/parser/spark/suggestion/tokenSuggestion.test.ts b/test/parser/spark/suggestion/tokenSuggestion.test.ts index b3648ddce..f12e647df 100644 --- a/test/parser/spark/suggestion/tokenSuggestion.test.ts +++ b/test/parser/spark/suggestion/tokenSuggestion.test.ts @@ -19,7 +19,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'TABLE', 'INDEX', 'VIEW', @@ -27,6 +27,7 @@ describe('Spark SQL Token Suggestion', () => { 'DATABASE', 'NAMESPACE', 'SCHEMA', + 'MATERIALIZED VIEW', ]); }); @@ -40,7 +41,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'TEMPORARY', 'INDEX', 'ROLE', @@ -54,6 +55,7 @@ describe('Spark SQL Token Suggestion', () => { 'DATABASE', 'NAMESPACE', 'SCHEMA', + 'MATERIALIZED VIEW', ]); }); @@ -67,7 +69,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['FROM']); + expect(suggestion).toMatchUnorderedArray(['FROM']); }); test('After DESCRIBE', () => { @@ -80,7 +82,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'WITH', 'SELECT', 'MAP', @@ -106,7 +108,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'TEMPORARY', 'INDEX', 'ROLE', @@ -117,6 +119,7 @@ describe('Spark SQL Token Suggestion', () => { 'DATABASE', 'NAMESPACE', 'SCHEMA', + 'MATERIALIZED VIEW', ]); }); @@ -130,7 +133,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['OVERWRITE', 'INTO']); + expect(suggestion).toMatchUnorderedArray(['OVERWRITE', 'INTO']); }); test('After LOAD', () => { @@ -143,7 +146,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['DATA']); + expect(suggestion).toMatchUnorderedArray(['DATA']); }); test('After SHOW', () => { @@ -156,7 +159,7 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'LOCKS', 'INDEXES', 'TRANSACTIONS', @@ -182,6 +185,8 @@ describe('Spark SQL Token Suggestion', () => { 'DATABASES', 'NAMESPACES', 'SCHEMAS', + 'MATERIALIZED VIEWS', + 'TABLE EXTENDED', ]); }); @@ -195,6 +200,32 @@ describe('Spark SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['TABLE']); + expect(suggestion).toMatchUnorderedArray(['TABLE']); + }); + + test('After CREATE TABLE, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 19, + column: 14, + }; + const suggestion = spark.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('IF'); + expect(suggestion).toContain('IF NOT EXISTS'); + }); + + test('After CREATE TABLE IF, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 19, + column: 17, + }; + const suggestion = spark.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('NOT'); + expect(suggestion).toContain('NOT EXISTS'); }); }); diff --git a/test/parser/spark/syntax/alter.test.ts b/test/parser/spark/syntax/alter.test.ts index 5aee90cbe..e4f9af9cd 100644 --- a/test/parser/spark/syntax/alter.test.ts +++ b/test/parser/spark/syntax/alter.test.ts @@ -5,7 +5,7 @@ const spark = new SparkSQL(); const features = { alterDatabase: readSQL(__dirname, 'alterDatabase.sql'), - altertTable: readSQL(__dirname, 'alterTable.sql'), + alterTable: readSQL(__dirname, 'alterTable.sql'), alterView: readSQL(__dirname, 'alterView.sql'), alterMaterializedView: readSQL(__dirname, 'alterMaterializedView.sql'), }; diff --git a/test/parser/trino/contextCollect/entityCollector.test.ts b/test/parser/trino/contextCollect/entityCollector.test.ts index d6471701c..61a3defc7 100644 --- a/test/parser/trino/contextCollect/entityCollector.test.ts +++ b/test/parser/trino/contextCollect/entityCollector.test.ts @@ -1,10 +1,14 @@ +import { ParseTreeListener } from 'antlr4ng'; import fs from 'fs'; import path from 'path'; -import { TrinoSQL, TrinoSqlSplitListener, TrinoEntityCollector } from 'src/parser/trino'; -import { ParseTreeListener } from 'antlr4ng'; import { TrinoSqlListener } from 'src/lib/trino/TrinoSqlListener'; +import { + AttrName, + isCommonEntityContext, + StmtContextType, +} from 'src/parser/common/entityCollector'; import { EntityContextType } from 'src/parser/common/types'; -import { StmtContextType } from 'src/parser/common/entityCollector'; +import { TrinoEntityCollector, TrinoSQL, TrinoSqlSplitListener } from 'src/parser/trino'; const commonSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'common.sql'), 'utf-8'); @@ -19,7 +23,7 @@ describe('Trino entity collector tests', () => { }); test('split results', () => { - expect(splitListener.statementsContext.length).toBe(9); + expect(splitListener.statementsContext.length).toBe(11); }); test('create table like', () => { @@ -55,15 +59,16 @@ describe('Trino entity collector tests', () => { startColumn: 1, endColumn: 70, }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - - const beLikedEntity = allEntities[1]; + const beLikedEntity = allEntities[1]; - expect(tableCreateEntity.relatedEntities[0]).toBe(beLikedEntity); - expect(beLikedEntity.text).toBe('like_table'); - expect(beLikedEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(beLikedEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(tableCreateEntity.relatedEntities[0]).toBe(beLikedEntity); + expect(beLikedEntity.text).toBe('like_table'); + expect(beLikedEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(beLikedEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + } }); test('create table as select', () => { @@ -84,21 +89,25 @@ describe('Trino entity collector tests', () => { expect(tableCreateEntity.belongStmt.stmtContextType).toBe( StmtContextType.CREATE_TABLE_STMT ); - - expect(tableCreateEntity.columns.length).toBe(2); - tableCreateEntity.columns.forEach((columEntity) => { - expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); - expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); - expect(columEntity.text).toBe( - commonSql.slice(columEntity.position.startIndex, columEntity.position.endIndex + 1) - ); - }); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); - - expect(originTableEntity.entityContextType).toBe(EntityContextType.TABLE); - expect(originTableEntity.text).toBe('t'); - expect(originTableEntity.belongStmt.rootStmt).toBe(tableCreateEntity.belongStmt); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns.length).toBe(2); + tableCreateEntity.columns.forEach((columEntity) => { + expect(columEntity.entityContextType).toBe(EntityContextType.COLUMN_CREATE); + expect(columEntity.belongStmt).toBe(tableCreateEntity.belongStmt); + expect(columEntity.text).toBe( + commonSql.slice( + columEntity.position.startIndex, + columEntity.position.endIndex + 1 + ) + ); + }); + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + + expect(originTableEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(originTableEntity.text).toBe('t'); + expect(originTableEntity.belongStmt.rootStmt).toBe(tableCreateEntity.belongStmt); + } }); test('create view as select', () => { @@ -117,10 +126,19 @@ describe('Trino entity collector tests', () => { expect(tableCreateEntity.entityContextType).toBe(EntityContextType.VIEW_CREATE); expect(tableCreateEntity.text).toBe('a'); expect(tableCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_VIEW_STMT); - - expect(tableCreateEntity.columns).toBeNull(); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'This is a view comment'", + startIndex: 139, + endIndex: 162, + line: 5, + startColumn: 23, + endColumn: 47, + }); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + } expect(originTableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(originTableEntity.text).toBe('t'); @@ -143,10 +161,20 @@ describe('Trino entity collector tests', () => { expect(tableCreateEntity.entityContextType).toBe(EntityContextType.VIEW_CREATE); expect(tableCreateEntity.text).toBe('a'); expect(tableCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.CREATE_VIEW_STMT); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'This is an MATERIALIZED view comment'", + startIndex: 220, + endIndex: 257, + line: 7, + startColumn: 36, + endColumn: 74, + }); - expect(tableCreateEntity.columns).toBeNull(); - expect(tableCreateEntity.relatedEntities.length).toBe(1); - expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); + expect(tableCreateEntity.relatedEntities.length).toBe(1); + expect(tableCreateEntity.relatedEntities[0]).toBe(originTableEntity); + } expect(originTableEntity.entityContextType).toBe(EntityContextType.TABLE); expect(originTableEntity.text).toBe('t'); @@ -169,8 +197,10 @@ describe('Trino entity collector tests', () => { expect(tableCreateEntity.text).toBe('table1'); expect(tableCreateEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); - expect(tableCreateEntity.columns).toBeNull(); - expect(tableCreateEntity.relatedEntities).toBeNull(); + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns).toBeUndefined(); + expect(tableCreateEntity.relatedEntities).toBeNull(); + } }); test('insert into table as select', () => { @@ -246,4 +276,92 @@ describe('Trino entity collector tests', () => { expect(schemaEntity.belongStmt.stmtContextType).toBe(StmtContextType.COMMON_STMT); expect(schemaEntity.text).toBe('information_schema'); }); + + test('select using alias', () => { + const testingContext = splitListener.statementsContext[9]; + + const collectListener = new TrinoEntityCollector(commonSql); + trino.listen(collectListener as ParseTreeListener, testingContext); + + const allEntities = collectListener.getEntities(); + + expect(allEntities.length).toBe(1); + + const tableEntity = allEntities[0]; + + expect(tableEntity.entityContextType).toBe(EntityContextType.TABLE); + expect(tableEntity.text).toBe('tb'); + expect(tableEntity.belongStmt.stmtContextType).toBe(StmtContextType.SELECT_STMT); + expect(tableEntity[AttrName.alias]).toEqual({ + text: 'tb_alias', + startIndex: 512, + endIndex: 519, + line: 19, + startColumn: 44, + endColumn: 52, + }); + + if (isCommonEntityContext(tableEntity)) { + expect(tableEntity.columns).toBeUndefined(); + expect(tableEntity.relatedEntities).toBeNull(); + } + }); + + test('create table using alias', () => { + const testingContext = splitListener.statementsContext[10]; + + const collectListener = new TrinoEntityCollector(commonSql); + trino.listen(collectListener as ParseTreeListener, testingContext); + + const allEntities = collectListener.getEntities(); + + expect(allEntities.length).toBe(1); + + const tableCreateEntity = allEntities[0]; + + expect(tableCreateEntity.entityContextType).toBe(EntityContextType.TABLE_CREATE); + expect(tableCreateEntity.text).toBe('orders'); + expect(tableCreateEntity.belongStmt.stmtContextType).toBe( + StmtContextType.CREATE_TABLE_STMT + ); + expect(tableCreateEntity[AttrName.comment]).toEqual({ + text: "'This is the orders table'", + startIndex: 619, + endIndex: 644, + line: 25, + startColumn: 9, + endColumn: 35, + }); + + if (isCommonEntityContext(tableCreateEntity)) { + expect(tableCreateEntity.columns?.length).toBe(2); + expect(tableCreateEntity.relatedEntities).toBeNull(); + expect(tableCreateEntity.columns[0].text).toBe('orderkey'); + expect(tableCreateEntity.columns[1].text).toBe('orderstatus'); + expect(tableCreateEntity.columns[0][AttrName.colType]).toEqual({ + text: 'bigint', + startIndex: 556, + endIndex: 561, + line: 22, + startColumn: 12, + endColumn: 18, + }); + expect(tableCreateEntity.columns[1][AttrName.colType]).toEqual({ + text: 'varchar', + startIndex: 578, + endIndex: 584, + line: 23, + startColumn: 15, + endColumn: 22, + }); + expect(tableCreateEntity.columns[1][AttrName.comment]).toEqual({ + text: "'order status'", + startIndex: 594, + endIndex: 607, + line: 23, + startColumn: 31, + endColumn: 45, + }); + } + }); }); diff --git a/test/parser/trino/contextCollect/fixtures/common.sql b/test/parser/trino/contextCollect/fixtures/common.sql index 60b1e0b91..1da9a96e9 100644 --- a/test/parser/trino/contextCollect/fixtures/common.sql +++ b/test/parser/trino/contextCollect/fixtures/common.sql @@ -2,9 +2,9 @@ CREATE TABLE IF NOT EXISTS bar (LIKE like_table INCLUDING PROPERTIES); CREATE TABLE foo(x,y) AS SELECT a,b FROM t; -CREATE VIEW a AS SELECT * FROM t; +CREATE VIEW a COMMENT 'This is a view comment' AS SELECT * FROM t; -CREATE MATERIALIZED VIEW a AS SELECT * FROM t; +CREATE MATERIALIZED VIEW a COMMENT 'This is an MATERIALIZED view comment' AS SELECT * FROM t; SELECT * FROM table1 GROUP BY a; @@ -14,4 +14,13 @@ INSERT INTO cities VALUES (1, 'San Francisco'); CREATE SCHEMA IF NOT EXISTS test; -USE information_schema; \ No newline at end of file +USE information_schema; + +SELECT id AS col1, name AS col2 FROM tb AS tb_alias; + +CREATE TABLE orders ( + orderkey bigint, + orderstatus varchar COMMENT 'order status' +) +COMMENT 'This is the orders table' +WITH (format = 'ORC'); diff --git a/test/parser/trino/contextCollect/fixtures/semantic.sql b/test/parser/trino/contextCollect/fixtures/semantic.sql new file mode 100644 index 000000000..88dbd568f --- /dev/null +++ b/test/parser/trino/contextCollect/fixtures/semantic.sql @@ -0,0 +1,31 @@ +CREA + +CREATE + +CREATE TABLE a A + +CREATE TABLE a AS + +INSERT + +SELECT id FROM t1; +CRE + +SELECT id FROM t2; + + +CREATE TABLE IF NOT EXISTS a1(id INT, ) +SEL + +CREATE; SEL + +CREATE TABLE a1(id INT); +SEL +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT); +CREATE VIEW +INSERT INTO t1 VALUES(1); + +CREATE TABLE a1(id INT) +CREATE VIEW \ No newline at end of file diff --git a/test/parser/trino/contextCollect/semanticContextCollector.test.ts b/test/parser/trino/contextCollect/semanticContextCollector.test.ts new file mode 100644 index 000000000..540a1216a --- /dev/null +++ b/test/parser/trino/contextCollect/semanticContextCollector.test.ts @@ -0,0 +1,146 @@ +import fs from 'fs'; +import path from 'path'; +import { SqlSplitStrategy } from 'src/parser/common/types'; +import { TrinoSQL } from 'src/parser/trino'; +import { readSQLByRange } from 'test/helper'; + +describe('Trino semantic context collector tests', () => { + const trinoSql = new TrinoSQL(); + const text = fs.readFileSync(path.join(__dirname, 'fixtures', 'semantic.sql'), 'utf-8'); + + test('beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 1, endLine: 1 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 5, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 3, endLine: 3 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 7, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement with uncomplete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 5, endLine: 5 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 22, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement with complete keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 7, endLine: 7 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 18, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('not beginning of statement if type white space after keyword', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 9, endLine: 9 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 8, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement after an exists statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 11, endLine: 12 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement after an exists statement and typed white space', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 14, endLine: 15 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 2, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement if previous statement exists error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 17, endLine: 18 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('beginning of statement if previous token text is semicolon even if has error', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 20, endLine: 20 }); + // typed keyword + const ctx1 = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 13, + }); + expect(ctx1.isStatementBeginning).toBeTruthy(); + + // typed white space + const ctx2 = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 1, + column: 9, + }); + expect(ctx2.isStatementBeginning).toBeTruthy(); + }); + + test('beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 22, endLine: 24 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 4, + }); + expect(isStatementBeginning).toBeTruthy(); + }); + + test('not beginning of statement between two statement', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 26, endLine: 28 }); + const { isStatementBeginning } = trinoSql.getSemanticContextAtCaretPosition(sql, { + lineNumber: 2, + column: 12, + }); + expect(isStatementBeginning).toBeFalsy(); + }); + + test('test sqlSplitStrategy', () => { + const sql = readSQLByRange({ sql: text }, { startLine: 30, endLine: 31 }); + const { isStatementBeginning: isStatementBeginning1 } = + trinoSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.LOOSE, + } + ); + expect(isStatementBeginning1).toBeTruthy(); + + const { isStatementBeginning: isStatementBeginning2 } = + trinoSql.getSemanticContextAtCaretPosition( + sql, + { + lineNumber: 2, + column: 7, + }, + { + sqlSplitStrategy: SqlSplitStrategy.STRICT, + } + ); + expect(isStatementBeginning2).toBeFalsy(); + }); +}); diff --git a/test/parser/trino/errorListener.test.ts b/test/parser/trino/errorListener.test.ts new file mode 100644 index 000000000..c4d174d6f --- /dev/null +++ b/test/parser/trino/errorListener.test.ts @@ -0,0 +1,63 @@ +import { TrinoSQL } from 'src/parser/trino'; + +const randomText = `dhsdansdnkla ndjnsla ndnalks`; +const sql1 = `SHOW CREATE TABLE`; +const sql2 = `CREATE VIEW `; +const sql3 = `SHOW CREATE TABLE aaa aaa`; + +describe('TrinoSQL validate invalid sql and test msg', () => { + const trinoSQL = new TrinoSQL(); + + test('validate random text', () => { + const errors = trinoSQL.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'dhsdansdnkla' is not valid at this position, expecting a keyword` + ); + }); + + test('validate unComplete sql1', () => { + const errors = trinoSQL.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete'); + }); + + test('validate unComplete sql2', () => { + const errors = trinoSQL.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('Statement is incomplete, expecting a new view'); + }); + + test('validate unComplete sql3', () => { + const errors = trinoSQL.validate(sql3); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe( + `'aaa' is not valid at this position, expecting an existing table or a keyword` + ); + }); + + test('validate random text cn', () => { + trinoSQL.locale = 'zh_CN'; + const errors = trinoSQL.validate(randomText); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'dhsdansdnkla' 在此位置无效,期望一个关键字`); + }); + + test('validate unComplete sql1 cn', () => { + const errors = trinoSQL.validate(sql1); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe('语句不完整'); + }); + + test('validate unComplete sql2 cn', () => { + const errors = trinoSQL.validate(sql2); + expect(errors.length).toBe(1); + expect(errors[0].message).toEqual('语句不完整,期望一个新的view'); + }); + + test('validate unComplete sql3 cn', () => { + const errors = trinoSQL.validate(sql3); + expect(errors.length).toBe(1); + expect(errors[0].message).toBe(`'aaa' 在此位置无效,期望一个存在的table或者一个关键字`); + }); +}); diff --git a/test/parser/trino/suggestion/fixtures/tokenSuggestion.sql b/test/parser/trino/suggestion/fixtures/tokenSuggestion.sql index 9ff940d72..e1d7328a2 100644 --- a/test/parser/trino/suggestion/fixtures/tokenSuggestion.sql +++ b/test/parser/trino/suggestion/fixtures/tokenSuggestion.sql @@ -11,3 +11,5 @@ DESCRIBE ; DROP ; INSERT ; + +CREATE TABLE IF NOT EXISTS ; \ No newline at end of file diff --git a/test/parser/trino/suggestion/tokenSuggestion.test.ts b/test/parser/trino/suggestion/tokenSuggestion.test.ts index 9c8d7d022..239a4bb13 100644 --- a/test/parser/trino/suggestion/tokenSuggestion.test.ts +++ b/test/parser/trino/suggestion/tokenSuggestion.test.ts @@ -19,7 +19,13 @@ describe('Trino SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['VIEW', 'MATERIALIZED', 'TABLE', 'SCHEMA']); + expect(suggestion).toMatchUnorderedArray([ + 'VIEW', + 'MATERIALIZED', + 'TABLE', + 'SCHEMA', + 'MATERIALIZED VIEW', + ]); }); test('After CREATE', () => { @@ -32,7 +38,7 @@ describe('Trino SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'ROLE', 'FUNCTION', 'OR', @@ -41,6 +47,8 @@ describe('Trino SQL Token Suggestion', () => { 'TABLE', 'SCHEMA', 'CATALOG', + 'OR REPLACE', + 'MATERIALIZED VIEW', ]); }); @@ -54,7 +62,7 @@ describe('Trino SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['PREPARE']); + expect(suggestion).toMatchUnorderedArray(['PREPARE']); }); test('After DELETE', () => { @@ -67,7 +75,7 @@ describe('Trino SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['FROM']); + expect(suggestion).toMatchUnorderedArray(['FROM']); }); test('After DESCRIBE', () => { @@ -101,7 +109,7 @@ describe('Trino SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary([ + expect(suggestion).toMatchUnorderedArray([ 'ROLE', 'FUNCTION', 'VIEW', @@ -109,6 +117,7 @@ describe('Trino SQL Token Suggestion', () => { 'TABLE', 'SCHEMA', 'CATALOG', + 'MATERIALIZED VIEW', ]); }); @@ -122,6 +131,32 @@ describe('Trino SQL Token Suggestion', () => { pos )?.keywords; - expect(suggestion).toMatchUnorderedArrary(['INTO']); + expect(suggestion).toMatchUnorderedArray(['INTO']); + }); + + test('After CREATE TABLE, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 15, + column: 14, + }; + const suggestion = trino.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('IF'); + expect(suggestion).toContain('IF NOT EXISTS'); + }); + + test('After CREATE TABLE IF, show combined keywords', () => { + const pos: CaretPosition = { + lineNumber: 15, + column: 17, + }; + const suggestion = trino.getSuggestionAtCaretPosition( + commentOtherLine(tokenSql, pos.lineNumber), + pos + )?.keywords; + expect(suggestion).toContain('NOT'); + expect(suggestion).toContain('NOT EXISTS'); }); }); diff --git a/test/setupTests.ts b/test/setupTests.ts index 96a90e5e2..30459ab37 100644 --- a/test/setupTests.ts +++ b/test/setupTests.ts @@ -1,3 +1,3 @@ -import { toMatchUnorderedArrary } from './matchers'; +import { toMatchUnorderedArray } from './matchers'; -expect.extend({ toMatchUnorderedArrary }); +expect.extend({ toMatchUnorderedArray }); diff --git a/tsconfig.json b/tsconfig.json index c5e02b393..be8090367 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,8 @@ "noImplicitThis": true, "forceConsistentCasingInFileNames": true, "lib": ["ESNext", "DOM"], + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, "skipLibCheck": true, "types": ["node", "jest"], "typeRoots": ["node", "node_modules/@types"]