From dcb19a192609c2f822cac9565a4f0cf473e06d3a Mon Sep 17 00:00:00 2001 From: Padraig Date: Wed, 26 Jan 2022 23:59:53 -0800 Subject: [PATCH] Migrate SQLite Grammar to maintained version (#1397) --- internal/engine/sqlite/convert.go | 181 +- internal/engine/sqlite/parser/Makefile | 4 +- internal/engine/sqlite/parser/SQLite.g4 | 909 - internal/engine/sqlite/parser/SQLite.interp | 408 - internal/engine/sqlite/parser/SQLite.tokens | 181 - internal/engine/sqlite/parser/SQLiteLexer.g4 | 267 + .../engine/sqlite/parser/SQLiteLexer.interp | 604 +- .../engine/sqlite/parser/SQLiteLexer.tokens | 301 +- internal/engine/sqlite/parser/SQLiteParser.g4 | 904 + .../engine/sqlite/parser/SQLiteParser.interp | 506 + .../engine/sqlite/parser/SQLiteParser.tokens | 216 + .../sqlite/parser/sqlite_base_listener.go | 520 - internal/engine/sqlite/parser/sqlite_lexer.go | 1690 +- .../engine/sqlite/parser/sqlite_parser.go | 25119 ++++++++++------ .../parser/sqliteparser_base_listener.go | 697 + ...e_listener.go => sqliteparser_listener.go} | 480 +- internal/engine/sqlite/utils.go | 14 +- 17 files changed, 19691 insertions(+), 13310 deletions(-) delete mode 100644 internal/engine/sqlite/parser/SQLite.g4 delete mode 100644 internal/engine/sqlite/parser/SQLite.interp delete mode 100644 internal/engine/sqlite/parser/SQLite.tokens create mode 100644 internal/engine/sqlite/parser/SQLiteLexer.g4 create mode 100644 internal/engine/sqlite/parser/SQLiteParser.g4 create mode 100644 internal/engine/sqlite/parser/SQLiteParser.interp create mode 100644 internal/engine/sqlite/parser/SQLiteParser.tokens delete mode 100644 internal/engine/sqlite/parser/sqlite_base_listener.go create mode 100644 internal/engine/sqlite/parser/sqliteparser_base_listener.go rename internal/engine/sqlite/parser/{sqlite_listener.go => sqliteparser_listener.go} (67%) diff --git a/internal/engine/sqlite/convert.go b/internal/engine/sqlite/convert.go index acddf38070..7453d9beed 100644 --- a/internal/engine/sqlite/convert.go +++ b/internal/engine/sqlite/convert.go @@ -20,12 +20,12 @@ func convertAlter_table_stmtContext(c *parser.Alter_table_stmtContext) ast.Node } } - if newCol, ok := c.New_column_name().(*parser.New_column_nameContext); ok { + if newCol, ok := c.GetNew_column_name().(*parser.Column_nameContext); ok { name := newCol.Any_name().GetText() return &ast.RenameColumnStmt{ Table: parseTableName(c), Col: &ast.ColumnRef{ - Name: c.Column_name().GetText(), + Name: c.GetOld_column_name().GetText(), }, NewName: &name, } @@ -54,7 +54,7 @@ func convertAlter_table_stmtContext(c *parser.Alter_table_stmtContext) ast.Node } func convertAttach_stmtContext(c *parser.Attach_stmtContext) ast.Node { - name := c.Database_name().GetText() + name := c.Schema_name().GetText() return &ast.CreateSchemaStmt{ Name: &name, } @@ -63,7 +63,7 @@ func convertAttach_stmtContext(c *parser.Attach_stmtContext) ast.Node { func convertCreate_table_stmtContext(c *parser.Create_table_stmtContext) ast.Node { stmt := &ast.CreateTableStmt{ Name: parseTableName(c), - IfNotExists: c.K_EXISTS() != nil, + IfNotExists: c.EXISTS_() != nil, } for _, idef := range c.AllColumn_def() { if def, ok := idef.(*parser.Column_defContext); ok { @@ -77,10 +77,23 @@ func convertCreate_table_stmtContext(c *parser.Create_table_stmtContext) ast.Nod return stmt } -func convertDrop_table_stmtContext(c *parser.Drop_table_stmtContext) ast.Node { - return &ast.DropTableStmt{ - IfExists: c.K_EXISTS() != nil, - Tables: []*ast.TableName{parseTableName(c)}, +func convertDrop_stmtContext(c *parser.Drop_stmtContext) ast.Node { + // TODO confirm that this logic does what it looks like it should + if tableName, ok := c.TABLE_().(antlr.TerminalNode); ok { + + name := ast.TableName{ + Name: tableName.GetText(), + } + if c.Schema_name() != nil { + name.Schema = c.Schema_name().GetText() + } + + return &ast.DropTableStmt{ + IfExists: c.EXISTS_() != nil, + Tables: []*ast.TableName{&name}, + } + } else { + return &ast.TODO{} } } @@ -88,7 +101,21 @@ func convertExprContext(c *parser.ExprContext) ast.Node { return &ast.TODO{} } -func convertFactored_select_stmtContext(c *parser.Factored_select_stmtContext) ast.Node { +func convertSimpleSelect_stmtContext(c *parser.Simple_select_stmtContext) ast.Node { + if core, ok := c.Select_core().(*parser.Select_coreContext); ok { + cols := getCols(core) + tables := getTables(core) + + return &ast.SelectStmt{ + FromClause: &ast.List{Items: tables}, + TargetList: &ast.List{Items: cols}, + } + } + + return &ast.TODO{} +} + +func convertMultiSelect_stmtContext(c multiselect) ast.Node { var tables []ast.Node var cols []ast.Node for _, icore := range c.AllSelect_core() { @@ -96,50 +123,8 @@ func convertFactored_select_stmtContext(c *parser.Factored_select_stmtContext) a if !ok { continue } - for _, icol := range core.AllResult_column() { - col, ok := icol.(*parser.Result_columnContext) - if !ok { - continue - } - var val ast.Node - iexpr := col.Expr() - switch { - case col.STAR() != nil: - val = &ast.ColumnRef{ - Fields: &ast.List{ - Items: []ast.Node{ - &ast.A_Star{}, - }, - }, - Location: col.GetStart().GetStart(), - } - case iexpr != nil: - val = convert(iexpr) - } - if val == nil { - continue - } - cols = append(cols, &ast.ResTarget{ - Val: val, - Location: col.GetStart().GetStart(), - }) - } - for _, ifrom := range core.AllTable_or_subquery() { - from, ok := ifrom.(*parser.Table_or_subqueryContext) - if !ok { - continue - } - rel := from.Table_name().GetText() - name := ast.RangeVar{ - Relname: &rel, - Location: from.GetStart().GetStart(), - } - if from.Schema_name() != nil { - text := from.Schema_name().GetText() - name.Schemaname = &text - } - tables = append(tables, &name) - } + cols = append(cols, getCols(core)...) + tables = append(cols, getTables(core)...) } return &ast.SelectStmt{ FromClause: &ast.List{Items: tables}, @@ -147,6 +132,60 @@ func convertFactored_select_stmtContext(c *parser.Factored_select_stmtContext) a } } +func getTables(core *parser.Select_coreContext) []ast.Node { + var tables []ast.Node + for _, ifrom := range core.AllTable_or_subquery() { + from, ok := ifrom.(*parser.Table_or_subqueryContext) + if !ok { + continue + } + rel := from.Table_name().GetText() + name := ast.RangeVar{ + Relname: &rel, + Location: from.GetStart().GetStart(), + } + if from.Schema_name() != nil { + text := from.Schema_name().GetText() + name.Schemaname = &text + } + tables = append(tables, &name) + } + return tables +} + +func getCols(core *parser.Select_coreContext) []ast.Node { + var cols []ast.Node + for _, icol := range core.AllResult_column() { + col, ok := icol.(*parser.Result_columnContext) + if !ok { + continue + } + var val ast.Node + iexpr := col.Expr() + switch { + case col.STAR() != nil: + val = &ast.ColumnRef{ + Fields: &ast.List{ + Items: []ast.Node{ + &ast.A_Star{}, + }, + }, + Location: col.GetStart().GetStart(), + } + case iexpr != nil: + val = convert(iexpr) + } + if val == nil { + continue + } + cols = append(cols, &ast.ResTarget{ + Val: val, + Location: col.GetStart().GetStart(), + }) + } + return cols +} + func convertSql_stmtContext(n *parser.Sql_stmtContext) ast.Node { if stmt := n.Alter_table_stmt(); stmt != nil { return convert(stmt) @@ -163,9 +202,6 @@ func convertSql_stmtContext(n *parser.Sql_stmtContext) ast.Node { if stmt := n.Commit_stmt(); stmt != nil { return convert(stmt) } - if stmt := n.Compound_select_stmt(); stmt != nil { - return convert(stmt) - } if stmt := n.Create_index_stmt(); stmt != nil { return convert(stmt) } @@ -190,19 +226,7 @@ func convertSql_stmtContext(n *parser.Sql_stmtContext) ast.Node { if stmt := n.Detach_stmt(); stmt != nil { return convert(stmt) } - if stmt := n.Drop_index_stmt(); stmt != nil { - return convert(stmt) - } - if stmt := n.Drop_table_stmt(); stmt != nil { - return convert(stmt) - } - if stmt := n.Drop_trigger_stmt(); stmt != nil { - return convert(stmt) - } - if stmt := n.Drop_view_stmt(); stmt != nil { - return convert(stmt) - } - if stmt := n.Factored_select_stmt(); stmt != nil { + if stmt := n.Drop_stmt(); stmt != nil { return convert(stmt) } if stmt := n.Insert_stmt(); stmt != nil { @@ -223,9 +247,6 @@ func convertSql_stmtContext(n *parser.Sql_stmtContext) ast.Node { if stmt := n.Savepoint_stmt(); stmt != nil { return convert(stmt) } - if stmt := n.Simple_select_stmt(); stmt != nil { - return convert(stmt) - } if stmt := n.Select_stmt(); stmt != nil { return convert(stmt) } @@ -253,18 +274,28 @@ func convert(node node) ast.Node { case *parser.Create_table_stmtContext: return convertCreate_table_stmtContext(n) - case *parser.Drop_table_stmtContext: - return convertDrop_table_stmtContext(n) + case *parser.Drop_stmtContext: + return convertDrop_stmtContext(n) case *parser.ExprContext: return convertExprContext(n) case *parser.Factored_select_stmtContext: - return convertFactored_select_stmtContext(n) + // TODO: need to handle this + return &ast.TODO{} + + case *parser.Select_stmtContext: + return convertMultiSelect_stmtContext(n) case *parser.Sql_stmtContext: return convertSql_stmtContext(n) + case *parser.Simple_select_stmtContext: + return convertSimpleSelect_stmtContext(n) + + case *parser.Compound_select_stmtContext: + return convertMultiSelect_stmtContext(n) + default: return &ast.TODO{} } diff --git a/internal/engine/sqlite/parser/Makefile b/internal/engine/sqlite/parser/Makefile index c4644188c3..61d12531ed 100644 --- a/internal/engine/sqlite/parser/Makefile +++ b/internal/engine/sqlite/parser/Makefile @@ -1,2 +1,2 @@ -sqlite_parser.go: SQLite.g4 - antlr -Dlanguage=Go SQLite.g4 +sqlite_parser.go: SQLiteLexer.g4 SQLiteParser.g4 + antlr -Dlanguage=Go SQLiteLexer.g4 SQLiteParser.g4 diff --git a/internal/engine/sqlite/parser/SQLite.g4 b/internal/engine/sqlite/parser/SQLite.g4 deleted file mode 100644 index 74426fb8ad..0000000000 --- a/internal/engine/sqlite/parser/SQLite.g4 +++ /dev/null @@ -1,909 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2014 by Bart Kiers - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Project : sqlite-parser; an ANTLR4 grammar for SQLite - * https://github.com/bkiers/sqlite-parser - * Developed by : Bart Kiers, bart@big-o.nl - */ -grammar SQLite; - -parse - : ( sql_stmt_list )* EOF - ; - -sql_stmt_list - : ';'* sql_stmt ( ';'+ sql_stmt )* ';'* - ; - -sql_stmt - : ( K_EXPLAIN ( K_QUERY K_PLAN )? )? ( alter_table_stmt - | analyze_stmt - | attach_stmt - | begin_stmt - | commit_stmt - | compound_select_stmt - | create_index_stmt - | create_table_stmt - | create_trigger_stmt - | create_view_stmt - | create_virtual_table_stmt - | delete_stmt - | delete_stmt_limited - | detach_stmt - | drop_index_stmt - | drop_table_stmt - | drop_trigger_stmt - | drop_view_stmt - | factored_select_stmt - | insert_stmt - | pragma_stmt - | reindex_stmt - | release_stmt - | rollback_stmt - | savepoint_stmt - | simple_select_stmt - | select_stmt - | update_stmt - | update_stmt_limited - | vacuum_stmt ) - ; - -alter_table_stmt - : K_ALTER K_TABLE ( database_name '.' )? table_name - ( K_RENAME K_TO new_table_name - | K_RENAME K_COLUMN? column_name K_TO new_column_name - | K_ADD K_COLUMN? column_def - ) - ; - -analyze_stmt - : K_ANALYZE ( database_name | table_or_index_name | database_name '.' table_or_index_name )? - ; - -attach_stmt - : K_ATTACH K_DATABASE? expr K_AS database_name - ; - -begin_stmt - : K_BEGIN ( K_DEFERRED | K_IMMEDIATE | K_EXCLUSIVE )? ( K_TRANSACTION transaction_name? )? - ; - -commit_stmt - : ( K_COMMIT | K_END ) ( K_TRANSACTION transaction_name? )? - ; - -compound_select_stmt - : with_clause? - select_core ( ( K_UNION K_ALL? | K_INTERSECT | K_EXCEPT ) select_core )+ - ( K_ORDER K_BY ordering_term ( ',' ordering_term )* )? - ( K_LIMIT expr ( ( K_OFFSET | ',' ) expr )? )? - ; - -create_index_stmt - : K_CREATE K_UNIQUE? K_INDEX ( K_IF K_NOT K_EXISTS )? - ( database_name '.' )? index_name K_ON table_name '(' indexed_column ( ',' indexed_column )* ')' - ( K_WHERE expr )? - ; - -create_table_stmt - : K_CREATE ( K_TEMP | K_TEMPORARY )? K_TABLE ( K_IF K_NOT K_EXISTS )? - ( database_name '.' )? table_name - ( '(' column_def ( ',' column_def )*? ( ',' table_constraint )* ')' ( K_WITHOUT IDENTIFIER )? - | K_AS select_stmt - ) - ; - -create_trigger_stmt - : K_CREATE ( K_TEMP | K_TEMPORARY )? K_TRIGGER ( K_IF K_NOT K_EXISTS )? - ( database_name '.' )? trigger_name ( K_BEFORE | K_AFTER | K_INSTEAD K_OF )? - ( K_DELETE | K_INSERT | K_UPDATE ( K_OF column_name ( ',' column_name )* )? ) K_ON ( database_name '.' )? table_name - ( K_FOR K_EACH K_ROW )? ( K_WHEN expr )? - K_BEGIN ( ( update_stmt | insert_stmt | delete_stmt | select_stmt ) ';' )+ K_END - ; - -create_view_stmt - : K_CREATE ( K_TEMP | K_TEMPORARY )? K_VIEW ( K_IF K_NOT K_EXISTS )? - ( database_name '.' )? view_name K_AS select_stmt - ; - -create_virtual_table_stmt - : K_CREATE K_VIRTUAL K_TABLE ( K_IF K_NOT K_EXISTS )? - ( database_name '.' )? table_name - K_USING module_name ( '(' module_argument ( ',' module_argument )* ')' )? - ; - -delete_stmt - : with_clause? K_DELETE K_FROM qualified_table_name - ( K_WHERE expr )? - ; - -delete_stmt_limited - : with_clause? K_DELETE K_FROM qualified_table_name - ( K_WHERE expr )? - ( ( K_ORDER K_BY ordering_term ( ',' ordering_term )* )? - K_LIMIT expr ( ( K_OFFSET | ',' ) expr )? - )? - ; - -detach_stmt - : K_DETACH K_DATABASE? database_name - ; - -drop_index_stmt - : K_DROP K_INDEX ( K_IF K_EXISTS )? ( database_name '.' )? index_name - ; - -drop_table_stmt - : K_DROP K_TABLE ( K_IF K_EXISTS )? ( database_name '.' )? table_name - ; - -drop_trigger_stmt - : K_DROP K_TRIGGER ( K_IF K_EXISTS )? ( database_name '.' )? trigger_name - ; - -drop_view_stmt - : K_DROP K_VIEW ( K_IF K_EXISTS )? ( database_name '.' )? view_name - ; - -factored_select_stmt - : with_clause? - select_core ( compound_operator select_core )* - ( K_ORDER K_BY ordering_term ( ',' ordering_term )* )? - ( K_LIMIT expr ( ( K_OFFSET | ',' ) expr )? )? - ; - -insert_stmt - : with_clause? ( K_INSERT - | K_REPLACE - | K_INSERT K_OR K_REPLACE - | K_INSERT K_OR K_ROLLBACK - | K_INSERT K_OR K_ABORT - | K_INSERT K_OR K_FAIL - | K_INSERT K_OR K_IGNORE ) K_INTO - ( database_name '.' )? table_name ( '(' column_name ( ',' column_name )* ')' )? - ( K_VALUES '(' expr ( ',' expr )* ')' ( ',' '(' expr ( ',' expr )* ')' )* - | select_stmt - | K_DEFAULT K_VALUES - ) - ; - -pragma_stmt - : K_PRAGMA ( database_name '.' )? pragma_name ( '=' pragma_value - | '(' pragma_value ')' )? - ; - -reindex_stmt - : K_REINDEX ( collation_name - | ( database_name '.' )? ( table_name | index_name ) - )? - ; - -release_stmt - : K_RELEASE K_SAVEPOINT? savepoint_name - ; - -rollback_stmt - : K_ROLLBACK ( K_TRANSACTION transaction_name? )? ( K_TO K_SAVEPOINT? savepoint_name )? - ; - -savepoint_stmt - : K_SAVEPOINT savepoint_name - ; - -simple_select_stmt - : with_clause? - select_core ( K_ORDER K_BY ordering_term ( ',' ordering_term )* )? - ( K_LIMIT expr ( ( K_OFFSET | ',' ) expr )? )? - ; - -select_stmt - : with_clause? - select_or_values ( compound_operator select_or_values )* - ( K_ORDER K_BY ordering_term ( ',' ordering_term )* )? - ( K_LIMIT expr ( ( K_OFFSET | ',' ) expr )? )? - ; - -select_or_values - : K_SELECT ( K_DISTINCT | K_ALL )? result_column ( ',' result_column )* - ( K_FROM ( table_or_subquery ( ',' table_or_subquery )* | join_clause ) )? - ( K_WHERE expr )? - ( K_GROUP K_BY expr ( ',' expr )* ( K_HAVING expr )? )? - | K_VALUES '(' expr ( ',' expr )* ')' ( ',' '(' expr ( ',' expr )* ')' )* - ; - -update_stmt - : with_clause? K_UPDATE ( K_OR K_ROLLBACK - | K_OR K_ABORT - | K_OR K_REPLACE - | K_OR K_FAIL - | K_OR K_IGNORE )? qualified_table_name - K_SET column_name '=' expr ( ',' column_name '=' expr )* ( K_WHERE expr )? - ; - -update_stmt_limited - : with_clause? K_UPDATE ( K_OR K_ROLLBACK - | K_OR K_ABORT - | K_OR K_REPLACE - | K_OR K_FAIL - | K_OR K_IGNORE )? qualified_table_name - K_SET column_name '=' expr ( ',' column_name '=' expr )* ( K_WHERE expr )? - ( ( K_ORDER K_BY ordering_term ( ',' ordering_term )* )? - K_LIMIT expr ( ( K_OFFSET | ',' ) expr )? - )? - ; - -vacuum_stmt - : K_VACUUM - ; - -column_def - : column_name type_name? column_constraint* - ; - -type_name - : name+? ( '(' signed_number ')' - | '(' signed_number ',' signed_number ')' )? - ; - -column_constraint - : ( K_CONSTRAINT name )? - ( K_PRIMARY K_KEY ( K_ASC | K_DESC )? conflict_clause K_AUTOINCREMENT? - | K_NOT? K_NULL conflict_clause - | K_UNIQUE conflict_clause - | K_CHECK '(' expr ')' - | K_DEFAULT (signed_number | literal_value | '(' expr ')') - | K_COLLATE collation_name - | foreign_key_clause - ) - ; - -conflict_clause - : ( K_ON K_CONFLICT ( K_ROLLBACK - | K_ABORT - | K_FAIL - | K_IGNORE - | K_REPLACE - ) - )? - ; - -/* - SQLite understands the following binary operators, in order from highest to - lowest precedence: - - || - * / % - + - - << >> & | - < <= > >= - = == != <> IS IS NOT IN LIKE GLOB MATCH REGEXP - AND - OR -*/ -expr - : literal_value - | BIND_PARAMETER - | ( ( database_name '.' )? table_name '.' )? column_name - | unary_operator expr - | expr '||' expr - | expr ( '*' | '/' | '%' ) expr - | expr ( '+' | '-' ) expr - | expr ( '<<' | '>>' | '&' | '|' ) expr - | expr ( '<' | '<=' | '>' | '>=' ) expr - | expr ( '=' | '==' | '!=' | '<>' ) expr - | expr K_NOT? K_IN ( '(' ( select_stmt - | expr ( ',' expr )* - )? - ')' - | ( database_name '.' )? table_name ) - | expr K_AND expr - | expr K_OR expr - | function_name '(' ( K_DISTINCT? expr ( ',' expr )* | '*' )? ')' - | '(' expr ')' - | K_CAST '(' expr K_AS type_name ')' - | expr K_COLLATE collation_name - | expr K_NOT? ( K_LIKE | K_GLOB | K_REGEXP | K_MATCH ) expr ( K_ESCAPE expr )? - | expr ( K_ISNULL | K_NOTNULL | K_NOT K_NULL ) - | expr K_IS K_NOT? expr - | expr K_NOT? K_BETWEEN expr K_AND expr - | ( ( K_NOT )? K_EXISTS )? '(' select_stmt ')' - | K_CASE expr? ( K_WHEN expr K_THEN expr )+ ( K_ELSE expr )? K_END - | raise_function - ; - -foreign_key_clause - : K_REFERENCES foreign_table ( '(' column_name ( ',' column_name )* ')' )? - ( ( K_ON ( K_DELETE | K_UPDATE ) ( K_SET K_NULL - | K_SET K_DEFAULT - | K_CASCADE - | K_RESTRICT - | K_NO K_ACTION ) - | K_MATCH name - ) - )* - ( K_NOT? K_DEFERRABLE ( K_INITIALLY K_DEFERRED | K_INITIALLY K_IMMEDIATE )? )? - ; - -raise_function - : K_RAISE '(' ( K_IGNORE - | ( K_ROLLBACK | K_ABORT | K_FAIL ) ',' error_message ) - ')' - ; - -indexed_column - : column_name ( K_COLLATE collation_name )? ( K_ASC | K_DESC )? - ; - -table_constraint - : ( K_CONSTRAINT name )? - ( ( K_PRIMARY K_KEY | K_UNIQUE ) '(' indexed_column ( ',' indexed_column )* ')' conflict_clause - | K_CHECK '(' expr ')' - | K_FOREIGN K_KEY '(' column_name ( ',' column_name )* ')' foreign_key_clause - ) - ; - -with_clause - : K_WITH K_RECURSIVE? common_table_expression ( ',' common_table_expression )* - ; - -qualified_table_name - : ( database_name '.' )? table_name ( K_INDEXED K_BY index_name - | K_NOT K_INDEXED )? - ; - -ordering_term - : expr ( K_COLLATE collation_name )? ( K_ASC | K_DESC )? - ; - -pragma_value - : signed_number - | name - | STRING_LITERAL - ; - -common_table_expression - : table_name ( '(' column_name ( ',' column_name )* ')' )? K_AS '(' select_stmt ')' - ; - -result_column - : '*' - | table_name '.' '*' - | expr ( K_AS? column_alias )? - ; - -table_or_subquery - : ( schema_name '.' )? table_name ( K_AS? table_alias )? - ( K_INDEXED K_BY index_name - | K_NOT K_INDEXED )? - | ( schema_name '.' )? table_function_name '(' ( expr ( ',' expr )* )? ')' ( K_AS? table_alias )? - | '(' ( table_or_subquery ( ',' table_or_subquery )* - | join_clause ) - ')' - | '(' select_stmt ')' ( K_AS? table_alias )? - ; - -join_clause - : table_or_subquery ( join_operator table_or_subquery join_constraint )* - ; - -join_operator - : ',' - | K_NATURAL? ( K_LEFT K_OUTER? | K_INNER | K_CROSS )? K_JOIN - ; - -join_constraint - : ( K_ON expr - | K_USING '(' column_name ( ',' column_name )* ')' )? - ; - -select_core - : K_SELECT ( K_DISTINCT | K_ALL )? result_column ( ',' result_column )* - ( K_FROM ( table_or_subquery ( ',' table_or_subquery )* | join_clause ) )? - ( K_WHERE expr )? - ( K_GROUP K_BY expr ( ',' expr )* ( K_HAVING expr )? )? - | K_VALUES '(' expr ( ',' expr )* ')' ( ',' '(' expr ( ',' expr )* ')' )* - ; - -compound_operator - : K_UNION - | K_UNION K_ALL - | K_INTERSECT - | K_EXCEPT - ; - -signed_number - : ( '+' | '-' )? NUMERIC_LITERAL - ; - -literal_value - : NUMERIC_LITERAL - | STRING_LITERAL - | BLOB_LITERAL - | K_NULL - | K_CURRENT_TIME - | K_CURRENT_DATE - | K_CURRENT_TIMESTAMP - ; - -unary_operator - : '-' - | '+' - | '~' - | K_NOT - ; - -error_message - : STRING_LITERAL - ; - -module_argument // TODO check what exactly is permitted here - : expr - | column_def - ; - -column_alias - : IDENTIFIER - | STRING_LITERAL - ; - -keyword - : K_ABORT - | K_ACTION - | K_ADD - | K_AFTER - | K_ALL - | K_ALTER - | K_ANALYZE - | K_AND - | K_AS - | K_ASC - | K_ATTACH - | K_AUTOINCREMENT - | K_BEFORE - | K_BEGIN - | K_BETWEEN - | K_BY - | K_CASCADE - | K_CASE - | K_CAST - | K_CHECK - | K_COLLATE - | K_COLUMN - | K_COMMIT - | K_CONFLICT - | K_CONSTRAINT - | K_CREATE - | K_CROSS - | K_CURRENT_DATE - | K_CURRENT_TIME - | K_CURRENT_TIMESTAMP - | K_DATABASE - | K_DEFAULT - | K_DEFERRABLE - | K_DEFERRED - | K_DELETE - | K_DESC - | K_DETACH - | K_DISTINCT - | K_DROP - | K_EACH - | K_ELSE - | K_END - | K_ESCAPE - | K_EXCEPT - | K_EXCLUSIVE - | K_EXISTS - | K_EXPLAIN - | K_FAIL - | K_FOR - | K_FOREIGN - | K_FROM - | K_FULL - | K_GLOB - | K_GROUP - | K_HAVING - | K_IF - | K_IGNORE - | K_IMMEDIATE - | K_IN - | K_INDEX - | K_INDEXED - | K_INITIALLY - | K_INNER - | K_INSERT - | K_INSTEAD - | K_INTERSECT - | K_INTO - | K_IS - | K_ISNULL - | K_JOIN - | K_KEY - | K_LEFT - | K_LIKE - | K_LIMIT - | K_MATCH - | K_NATURAL - | K_NO - | K_NOT - | K_NOTNULL - | K_NULL - | K_OF - | K_OFFSET - | K_ON - | K_OR - | K_ORDER - | K_OUTER - | K_PLAN - | K_PRAGMA - | K_PRIMARY - | K_QUERY - | K_RAISE - | K_RECURSIVE - | K_REFERENCES - | K_REGEXP - | K_REINDEX - | K_RELEASE - | K_RENAME - | K_REPLACE - | K_RESTRICT - | K_RIGHT - | K_ROLLBACK - | K_ROW - | K_SAVEPOINT - | K_SELECT - | K_SET - | K_TABLE - | K_TEMP - | K_TEMPORARY - | K_THEN - | K_TO - | K_TRANSACTION - | K_TRIGGER - | K_UNION - | K_UNIQUE - | K_UPDATE - | K_USING - | K_VACUUM - | K_VALUES - | K_VIEW - | K_VIRTUAL - | K_WHEN - | K_WHERE - | K_WITH - | K_WITHOUT - ; - -// TODO check all names below - -name - : any_name - ; - -function_name - : any_name - ; - -database_name - : any_name - ; - -schema_name - : any_name - ; - -table_function_name - : any_name - ; - -table_name - : any_name - ; - -table_or_index_name - : any_name - ; - -new_table_name - : any_name - ; - -column_name - : any_name - ; - -new_column_name - : any_name - ; - -collation_name - : any_name - ; - -foreign_table - : any_name - ; - -index_name - : any_name - ; - -trigger_name - : any_name - ; - -view_name - : any_name - ; - -module_name - : any_name - ; - -pragma_name - : any_name - ; - -savepoint_name - : any_name - ; - -table_alias - : IDENTIFIER - | STRING_LITERAL - | '(' table_alias ')' - ; - -transaction_name - : any_name - ; - -any_name - : IDENTIFIER - | keyword - | STRING_LITERAL - | '(' any_name ')' - ; - -SCOL : ';'; -DOT : '.'; -OPEN_PAR : '('; -CLOSE_PAR : ')'; -COMMA : ','; -ASSIGN : '='; -STAR : '*'; -PLUS : '+'; -MINUS : '-'; -TILDE : '~'; -PIPE2 : '||'; -DIV : '/'; -MOD : '%'; -LT2 : '<<'; -GT2 : '>>'; -AMP : '&'; -PIPE : '|'; -LT : '<'; -LT_EQ : '<='; -GT : '>'; -GT_EQ : '>='; -EQ : '=='; -NOT_EQ1 : '!='; -NOT_EQ2 : '<>'; - -// http://www.sqlite.org/lang_keywords.html -K_ABORT : A B O R T; -K_ACTION : A C T I O N; -K_ADD : A D D; -K_AFTER : A F T E R; -K_ALL : A L L; -K_ALTER : A L T E R; -K_ANALYZE : A N A L Y Z E; -K_AND : A N D; -K_AS : A S; -K_ASC : A S C; -K_ATTACH : A T T A C H; -K_AUTOINCREMENT : A U T O I N C R E M E N T; -K_BEFORE : B E F O R E; -K_BEGIN : B E G I N; -K_BETWEEN : B E T W E E N; -K_BY : B Y; -K_CASCADE : C A S C A D E; -K_CASE : C A S E; -K_CAST : C A S T; -K_CHECK : C H E C K; -K_COLLATE : C O L L A T E; -K_COLUMN : C O L U M N; -K_COMMIT : C O M M I T; -K_CONFLICT : C O N F L I C T; -K_CONSTRAINT : C O N S T R A I N T; -K_CREATE : C R E A T E; -K_CROSS : C R O S S; -K_CURRENT_DATE : C U R R E N T '_' D A T E; -K_CURRENT_TIME : C U R R E N T '_' T I M E; -K_CURRENT_TIMESTAMP : C U R R E N T '_' T I M E S T A M P; -K_DATABASE : D A T A B A S E; -K_DEFAULT : D E F A U L T; -K_DEFERRABLE : D E F E R R A B L E; -K_DEFERRED : D E F E R R E D; -K_DELETE : D E L E T E; -K_DESC : D E S C; -K_DETACH : D E T A C H; -K_DISTINCT : D I S T I N C T; -K_DROP : D R O P; -K_EACH : E A C H; -K_ELSE : E L S E; -K_END : E N D; -K_ESCAPE : E S C A P E; -K_EXCEPT : E X C E P T; -K_EXCLUSIVE : E X C L U S I V E; -K_EXISTS : E X I S T S; -K_EXPLAIN : E X P L A I N; -K_FAIL : F A I L; -K_FOR : F O R; -K_FOREIGN : F O R E I G N; -K_FROM : F R O M; -K_FULL : F U L L; -K_GLOB : G L O B; -K_GROUP : G R O U P; -K_HAVING : H A V I N G; -K_IF : I F; -K_IGNORE : I G N O R E; -K_IMMEDIATE : I M M E D I A T E; -K_IN : I N; -K_INDEX : I N D E X; -K_INDEXED : I N D E X E D; -K_INITIALLY : I N I T I A L L Y; -K_INNER : I N N E R; -K_INSERT : I N S E R T; -K_INSTEAD : I N S T E A D; -K_INTERSECT : I N T E R S E C T; -K_INTO : I N T O; -K_IS : I S; -K_ISNULL : I S N U L L; -K_JOIN : J O I N; -K_KEY : K E Y; -K_LEFT : L E F T; -K_LIKE : L I K E; -K_LIMIT : L I M I T; -K_MATCH : M A T C H; -K_NATURAL : N A T U R A L; -K_NO : N O; -K_NOT : N O T; -K_NOTNULL : N O T N U L L; -K_NULL : N U L L; -K_OF : O F; -K_OFFSET : O F F S E T; -K_ON : O N; -K_OR : O R; -K_ORDER : O R D E R; -K_OUTER : O U T E R; -K_PLAN : P L A N; -K_PRAGMA : P R A G M A; -K_PRIMARY : P R I M A R Y; -K_QUERY : Q U E R Y; -K_RAISE : R A I S E; -K_RECURSIVE : R E C U R S I V E; -K_REFERENCES : R E F E R E N C E S; -K_REGEXP : R E G E X P; -K_REINDEX : R E I N D E X; -K_RELEASE : R E L E A S E; -K_RENAME : R E N A M E; -K_REPLACE : R E P L A C E; -K_RESTRICT : R E S T R I C T; -K_RIGHT : R I G H T; -K_ROLLBACK : R O L L B A C K; -K_ROW : R O W; -K_SAVEPOINT : S A V E P O I N T; -K_SELECT : S E L E C T; -K_SET : S E T; -K_TABLE : T A B L E; -K_TEMP : T E M P; -K_TEMPORARY : T E M P O R A R Y; -K_THEN : T H E N; -K_TO : T O; -K_TRANSACTION : T R A N S A C T I O N; -K_TRIGGER : T R I G G E R; -K_UNION : U N I O N; -K_UNIQUE : U N I Q U E; -K_UPDATE : U P D A T E; -K_USING : U S I N G; -K_VACUUM : V A C U U M; -K_VALUES : V A L U E S; -K_VIEW : V I E W; -K_VIRTUAL : V I R T U A L; -K_WHEN : W H E N; -K_WHERE : W H E R E; -K_WITH : W I T H; -K_WITHOUT : W I T H O U T; - -IDENTIFIER - : '"' (~'"' | '""')* '"' - | '`' (~'`' | '``')* '`' - | '[' ~']'* ']' - | [a-zA-Z_] [a-zA-Z_0-9]* // TODO check: needs more chars in set - ; - -NUMERIC_LITERAL - : DIGIT+ ( '.' DIGIT* )? ( E [-+]? DIGIT+ )? - | '.' DIGIT+ ( E [-+]? DIGIT+ )? - ; - -BIND_PARAMETER - : '?' DIGIT* - | [:@$] IDENTIFIER - ; - -STRING_LITERAL - : '\'' ( ~'\'' | '\'\'' )* '\'' - ; - -BLOB_LITERAL - : X STRING_LITERAL - ; - -SINGLE_LINE_COMMENT - : '--' ~[\r\n]* -> channel(HIDDEN) - ; - -MULTILINE_COMMENT - : '/*' .*? ( '*/' | EOF ) -> channel(HIDDEN) - ; - -SPACES - : [ \u000B\t\r\n] -> channel(HIDDEN) - ; - -UNEXPECTED_CHAR - : . - ; - -fragment DIGIT : [0-9]; - -fragment A : [aA]; -fragment B : [bB]; -fragment C : [cC]; -fragment D : [dD]; -fragment E : [eE]; -fragment F : [fF]; -fragment G : [gG]; -fragment H : [hH]; -fragment I : [iI]; -fragment J : [jJ]; -fragment K : [kK]; -fragment L : [lL]; -fragment M : [mM]; -fragment N : [nN]; -fragment O : [oO]; -fragment P : [pP]; -fragment Q : [qQ]; -fragment R : [rR]; -fragment S : [sS]; -fragment T : [tT]; -fragment U : [uU]; -fragment V : [vV]; -fragment W : [wW]; -fragment X : [xX]; -fragment Y : [yY]; -fragment Z : [zZ]; diff --git a/internal/engine/sqlite/parser/SQLite.interp b/internal/engine/sqlite/parser/SQLite.interp deleted file mode 100644 index a7cead0848..0000000000 --- a/internal/engine/sqlite/parser/SQLite.interp +++ /dev/null @@ -1,408 +0,0 @@ -token literal names: -null -';' -'.' -'(' -')' -',' -'=' -'*' -'+' -'-' -'~' -'||' -'/' -'%' -'<<' -'>>' -'&' -'|' -'<' -'<=' -'>' -'>=' -'==' -'!=' -'<>' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -SCOL -DOT -OPEN_PAR -CLOSE_PAR -COMMA -ASSIGN -STAR -PLUS -MINUS -TILDE -PIPE2 -DIV -MOD -LT2 -GT2 -AMP -PIPE -LT -LT_EQ -GT -GT_EQ -EQ -NOT_EQ1 -NOT_EQ2 -K_ABORT -K_ACTION -K_ADD -K_AFTER -K_ALL -K_ALTER -K_ANALYZE -K_AND -K_AS -K_ASC -K_ATTACH -K_AUTOINCREMENT -K_BEFORE -K_BEGIN -K_BETWEEN -K_BY -K_CASCADE -K_CASE -K_CAST -K_CHECK -K_COLLATE -K_COLUMN -K_COMMIT -K_CONFLICT -K_CONSTRAINT -K_CREATE -K_CROSS -K_CURRENT_DATE -K_CURRENT_TIME -K_CURRENT_TIMESTAMP -K_DATABASE -K_DEFAULT -K_DEFERRABLE -K_DEFERRED -K_DELETE -K_DESC -K_DETACH -K_DISTINCT -K_DROP -K_EACH -K_ELSE -K_END -K_ESCAPE -K_EXCEPT -K_EXCLUSIVE -K_EXISTS -K_EXPLAIN -K_FAIL -K_FOR -K_FOREIGN -K_FROM -K_FULL -K_GLOB -K_GROUP -K_HAVING -K_IF -K_IGNORE -K_IMMEDIATE -K_IN -K_INDEX -K_INDEXED -K_INITIALLY -K_INNER -K_INSERT -K_INSTEAD -K_INTERSECT -K_INTO -K_IS -K_ISNULL -K_JOIN -K_KEY -K_LEFT -K_LIKE -K_LIMIT -K_MATCH -K_NATURAL -K_NO -K_NOT -K_NOTNULL -K_NULL -K_OF -K_OFFSET -K_ON -K_OR -K_ORDER -K_OUTER -K_PLAN -K_PRAGMA -K_PRIMARY -K_QUERY -K_RAISE -K_RECURSIVE -K_REFERENCES -K_REGEXP -K_REINDEX -K_RELEASE -K_RENAME -K_REPLACE -K_RESTRICT -K_RIGHT -K_ROLLBACK -K_ROW -K_SAVEPOINT -K_SELECT -K_SET -K_TABLE -K_TEMP -K_TEMPORARY -K_THEN -K_TO -K_TRANSACTION -K_TRIGGER -K_UNION -K_UNIQUE -K_UPDATE -K_USING -K_VACUUM -K_VALUES -K_VIEW -K_VIRTUAL -K_WHEN -K_WHERE -K_WITH -K_WITHOUT -IDENTIFIER -NUMERIC_LITERAL -BIND_PARAMETER -STRING_LITERAL -BLOB_LITERAL -SINGLE_LINE_COMMENT -MULTILINE_COMMENT -SPACES -UNEXPECTED_CHAR - -rule names: -parse -sql_stmt_list -sql_stmt -alter_table_stmt -analyze_stmt -attach_stmt -begin_stmt -commit_stmt -compound_select_stmt -create_index_stmt -create_table_stmt -create_trigger_stmt -create_view_stmt -create_virtual_table_stmt -delete_stmt -delete_stmt_limited -detach_stmt -drop_index_stmt -drop_table_stmt -drop_trigger_stmt -drop_view_stmt -factored_select_stmt -insert_stmt -pragma_stmt -reindex_stmt -release_stmt -rollback_stmt -savepoint_stmt -simple_select_stmt -select_stmt -select_or_values -update_stmt -update_stmt_limited -vacuum_stmt -column_def -type_name -column_constraint -conflict_clause -expr -foreign_key_clause -raise_function -indexed_column -table_constraint -with_clause -qualified_table_name -ordering_term -pragma_value -common_table_expression -result_column -table_or_subquery -join_clause -join_operator -join_constraint -select_core -compound_operator -signed_number -literal_value -unary_operator -error_message -module_argument -column_alias -keyword -name -function_name -database_name -schema_name -table_function_name -table_name -table_or_index_name -new_table_name -column_name -new_column_name -collation_name -foreign_table -index_name -trigger_name -view_name -module_name -pragma_name -savepoint_name -table_alias -transaction_name -any_name - - -atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 159, 1691, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 3, 2, 7, 2, 170, 10, 2, 12, 2, 14, 2, 173, 11, 2, 3, 2, 3, 2, 3, 3, 7, 3, 178, 10, 3, 12, 3, 14, 3, 181, 11, 3, 3, 3, 3, 3, 6, 3, 185, 10, 3, 13, 3, 14, 3, 186, 3, 3, 7, 3, 190, 10, 3, 12, 3, 14, 3, 193, 11, 3, 3, 3, 7, 3, 196, 10, 3, 12, 3, 14, 3, 199, 11, 3, 3, 4, 3, 4, 3, 4, 5, 4, 204, 10, 4, 5, 4, 206, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 238, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 245, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 253, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 261, 10, 5, 3, 5, 5, 5, 264, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 273, 10, 6, 3, 7, 3, 7, 5, 7, 277, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 285, 10, 8, 3, 8, 3, 8, 5, 8, 289, 10, 8, 5, 8, 291, 10, 8, 3, 9, 3, 9, 3, 9, 5, 9, 296, 10, 9, 5, 9, 298, 10, 9, 3, 10, 5, 10, 301, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 306, 10, 10, 3, 10, 3, 10, 5, 10, 310, 10, 10, 3, 10, 6, 10, 313, 10, 10, 13, 10, 14, 10, 314, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 322, 10, 10, 12, 10, 14, 10, 325, 11, 10, 5, 10, 327, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 333, 10, 10, 5, 10, 335, 10, 10, 3, 11, 3, 11, 5, 11, 339, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 345, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 350, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 359, 10, 11, 12, 11, 14, 11, 362, 11, 11, 3, 11, 3, 11, 3, 11, 5, 11, 367, 10, 11, 3, 12, 3, 12, 5, 12, 371, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 377, 10, 12, 3, 12, 3, 12, 3, 12, 5, 12, 382, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 389, 10, 12, 12, 12, 14, 12, 392, 11, 12, 3, 12, 3, 12, 7, 12, 396, 10, 12, 12, 12, 14, 12, 399, 11, 12, 3, 12, 3, 12, 3, 12, 5, 12, 404, 10, 12, 3, 12, 3, 12, 5, 12, 408, 10, 12, 3, 13, 3, 13, 5, 13, 412, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 418, 10, 13, 3, 13, 3, 13, 3, 13, 5, 13, 423, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 430, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 439, 10, 13, 12, 13, 14, 13, 442, 11, 13, 5, 13, 444, 10, 13, 5, 13, 446, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 452, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 458, 10, 13, 3, 13, 3, 13, 5, 13, 462, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 469, 10, 13, 3, 13, 3, 13, 6, 13, 473, 10, 13, 13, 13, 14, 13, 474, 3, 13, 3, 13, 3, 14, 3, 14, 5, 14, 481, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 487, 10, 14, 3, 14, 3, 14, 3, 14, 5, 14, 492, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 504, 10, 15, 3, 15, 3, 15, 3, 15, 5, 15, 509, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 518, 10, 15, 12, 15, 14, 15, 521, 11, 15, 3, 15, 3, 15, 5, 15, 525, 10, 15, 3, 16, 5, 16, 528, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 535, 10, 16, 3, 17, 5, 17, 538, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 545, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 552, 10, 17, 12, 17, 14, 17, 555, 11, 17, 5, 17, 557, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 563, 10, 17, 5, 17, 565, 10, 17, 3, 18, 3, 18, 5, 18, 569, 10, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 577, 10, 19, 3, 19, 3, 19, 3, 19, 5, 19, 582, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 590, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 595, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 603, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 608, 10, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 616, 10, 22, 3, 22, 3, 22, 3, 22, 5, 22, 621, 10, 22, 3, 22, 3, 22, 3, 23, 5, 23, 626, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 632, 10, 23, 12, 23, 14, 23, 635, 11, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 642, 10, 23, 12, 23, 14, 23, 645, 11, 23, 5, 23, 647, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 653, 10, 23, 5, 23, 655, 10, 23, 3, 24, 5, 24, 658, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 677, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 683, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 690, 10, 24, 12, 24, 14, 24, 693, 11, 24, 3, 24, 3, 24, 5, 24, 697, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 704, 10, 24, 12, 24, 14, 24, 707, 11, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 715, 10, 24, 12, 24, 14, 24, 718, 11, 24, 3, 24, 3, 24, 7, 24, 722, 10, 24, 12, 24, 14, 24, 725, 11, 24, 3, 24, 3, 24, 3, 24, 5, 24, 730, 10, 24, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 736, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 745, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 752, 10, 26, 3, 26, 3, 26, 5, 26, 756, 10, 26, 5, 26, 758, 10, 26, 3, 27, 3, 27, 5, 27, 762, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 5, 28, 769, 10, 28, 5, 28, 771, 10, 28, 3, 28, 3, 28, 5, 28, 775, 10, 28, 3, 28, 5, 28, 778, 10, 28, 3, 29, 3, 29, 3, 29, 3, 30, 5, 30, 784, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 792, 10, 30, 12, 30, 14, 30, 795, 11, 30, 5, 30, 797, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 803, 10, 30, 5, 30, 805, 10, 30, 3, 31, 5, 31, 808, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 814, 10, 31, 12, 31, 14, 31, 817, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 824, 10, 31, 12, 31, 14, 31, 827, 11, 31, 5, 31, 829, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 835, 10, 31, 5, 31, 837, 10, 31, 3, 32, 3, 32, 5, 32, 841, 10, 32, 3, 32, 3, 32, 3, 32, 7, 32, 846, 10, 32, 12, 32, 14, 32, 849, 11, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 855, 10, 32, 12, 32, 14, 32, 858, 11, 32, 3, 32, 5, 32, 861, 10, 32, 5, 32, 863, 10, 32, 3, 32, 3, 32, 5, 32, 867, 10, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 874, 10, 32, 12, 32, 14, 32, 877, 11, 32, 3, 32, 3, 32, 5, 32, 881, 10, 32, 5, 32, 883, 10, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 890, 10, 32, 12, 32, 14, 32, 893, 11, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 901, 10, 32, 12, 32, 14, 32, 904, 11, 32, 3, 32, 3, 32, 7, 32, 908, 10, 32, 12, 32, 14, 32, 911, 11, 32, 5, 32, 913, 10, 32, 3, 33, 5, 33, 916, 10, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 929, 10, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 7, 33, 941, 10, 33, 12, 33, 14, 33, 944, 11, 33, 3, 33, 3, 33, 5, 33, 948, 10, 33, 3, 34, 5, 34, 951, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 964, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 976, 10, 34, 12, 34, 14, 34, 979, 11, 34, 3, 34, 3, 34, 5, 34, 983, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 990, 10, 34, 12, 34, 14, 34, 993, 11, 34, 5, 34, 995, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1001, 10, 34, 5, 34, 1003, 10, 34, 3, 35, 3, 35, 3, 36, 3, 36, 5, 36, 1009, 10, 36, 3, 36, 7, 36, 1012, 10, 36, 12, 36, 14, 36, 1015, 11, 36, 3, 37, 6, 37, 1018, 10, 37, 13, 37, 14, 37, 1019, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1032, 10, 37, 3, 38, 3, 38, 5, 38, 1036, 10, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1041, 10, 38, 3, 38, 3, 38, 5, 38, 1045, 10, 38, 3, 38, 5, 38, 1048, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1066, 10, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1071, 10, 38, 3, 39, 3, 39, 3, 39, 5, 39, 1076, 10, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1084, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1089, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1098, 10, 40, 3, 40, 3, 40, 3, 40, 7, 40, 1103, 10, 40, 12, 40, 14, 40, 1106, 11, 40, 3, 40, 5, 40, 1109, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1125, 10, 40, 3, 40, 5, 40, 1128, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1136, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 6, 40, 1143, 10, 40, 13, 40, 14, 40, 1144, 3, 40, 3, 40, 5, 40, 1149, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1154, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1183, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1188, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1197, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 1205, 10, 40, 12, 40, 14, 40, 1208, 11, 40, 5, 40, 1210, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1216, 10, 40, 3, 40, 5, 40, 1219, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1226, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1232, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1239, 10, 40, 7, 40, 1241, 10, 40, 12, 40, 14, 40, 1244, 11, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 1252, 10, 41, 12, 41, 14, 41, 1255, 11, 41, 3, 41, 3, 41, 5, 41, 1259, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1271, 10, 41, 3, 41, 3, 41, 5, 41, 1275, 10, 41, 7, 41, 1277, 10, 41, 12, 41, 14, 41, 1280, 11, 41, 3, 41, 5, 41, 1283, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1290, 10, 41, 5, 41, 1292, 10, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1300, 10, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 5, 43, 1307, 10, 43, 3, 43, 5, 43, 1310, 10, 43, 3, 44, 3, 44, 5, 44, 1314, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1319, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1325, 10, 44, 12, 44, 14, 44, 1328, 11, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1344, 10, 44, 12, 44, 14, 44, 1347, 11, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1352, 10, 44, 3, 45, 3, 45, 5, 45, 1356, 10, 45, 3, 45, 3, 45, 3, 45, 7, 45, 1361, 10, 45, 12, 45, 14, 45, 1364, 11, 45, 3, 46, 3, 46, 3, 46, 5, 46, 1369, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 1377, 10, 46, 3, 47, 3, 47, 3, 47, 5, 47, 1382, 10, 47, 3, 47, 5, 47, 1385, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 1390, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 1397, 10, 49, 12, 49, 14, 49, 1400, 11, 49, 3, 49, 3, 49, 5, 49, 1404, 10, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 1418, 10, 50, 3, 50, 5, 50, 1421, 10, 50, 5, 50, 1423, 10, 50, 3, 51, 3, 51, 3, 51, 5, 51, 1428, 10, 51, 3, 51, 3, 51, 5, 51, 1432, 10, 51, 3, 51, 5, 51, 1435, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1442, 10, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1447, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 1454, 10, 51, 12, 51, 14, 51, 1457, 11, 51, 5, 51, 1459, 10, 51, 3, 51, 3, 51, 5, 51, 1463, 10, 51, 3, 51, 5, 51, 1466, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 1472, 10, 51, 12, 51, 14, 51, 1475, 11, 51, 3, 51, 5, 51, 1478, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1486, 10, 51, 3, 51, 5, 51, 1489, 10, 51, 5, 51, 1491, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 1498, 10, 52, 12, 52, 14, 52, 1501, 11, 52, 3, 53, 3, 53, 5, 53, 1505, 10, 53, 3, 53, 3, 53, 5, 53, 1509, 10, 53, 3, 53, 3, 53, 5, 53, 1513, 10, 53, 3, 53, 5, 53, 1516, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 1525, 10, 54, 12, 54, 14, 54, 1528, 11, 54, 3, 54, 3, 54, 5, 54, 1532, 10, 54, 3, 55, 3, 55, 5, 55, 1536, 10, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1541, 10, 55, 12, 55, 14, 55, 1544, 11, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1550, 10, 55, 12, 55, 14, 55, 1553, 11, 55, 3, 55, 5, 55, 1556, 10, 55, 5, 55, 1558, 10, 55, 3, 55, 3, 55, 5, 55, 1562, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1569, 10, 55, 12, 55, 14, 55, 1572, 11, 55, 3, 55, 3, 55, 5, 55, 1576, 10, 55, 5, 55, 1578, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1585, 10, 55, 12, 55, 14, 55, 1588, 11, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1596, 10, 55, 12, 55, 14, 55, 1599, 11, 55, 3, 55, 3, 55, 7, 55, 1603, 10, 55, 12, 55, 14, 55, 1606, 11, 55, 5, 55, 1608, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 1615, 10, 56, 3, 57, 5, 57, 1618, 10, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, 60, 3, 60, 3, 61, 3, 61, 5, 61, 1630, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 1678, 10, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 5, 84, 1689, 10, 84, 3, 84, 4, 390, 1019, 3, 78, 85, 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, 2, 21, 5, 2, 60, 60, 71, 71, 84, 84, 4, 2, 49, 49, 68, 68, 4, 2, 7, 7, 108, 108, 3, 2, 133, 134, 4, 2, 31, 31, 64, 64, 4, 2, 36, 36, 62, 62, 7, 2, 27, 27, 74, 74, 83, 83, 124, 124, 127, 127, 4, 2, 9, 9, 14, 15, 3, 2, 10, 11, 3, 2, 16, 19, 3, 2, 20, 23, 4, 2, 8, 8, 24, 26, 6, 2, 79, 79, 99, 99, 101, 101, 120, 120, 4, 2, 61, 61, 141, 141, 5, 2, 27, 27, 74, 74, 127, 127, 6, 2, 54, 56, 106, 106, 152, 152, 154, 155, 4, 2, 10, 12, 104, 104, 4, 2, 151, 151, 154, 154, 3, 2, 27, 150, 2, 1946, 2, 171, 3, 2, 2, 2, 4, 179, 3, 2, 2, 2, 6, 205, 3, 2, 2, 2, 8, 239, 3, 2, 2, 2, 10, 265, 3, 2, 2, 2, 12, 274, 3, 2, 2, 2, 14, 282, 3, 2, 2, 2, 16, 292, 3, 2, 2, 2, 18, 300, 3, 2, 2, 2, 20, 336, 3, 2, 2, 2, 22, 368, 3, 2, 2, 2, 24, 409, 3, 2, 2, 2, 26, 478, 3, 2, 2, 2, 28, 497, 3, 2, 2, 2, 30, 527, 3, 2, 2, 2, 32, 537, 3, 2, 2, 2, 34, 566, 3, 2, 2, 2, 36, 572, 3, 2, 2, 2, 38, 585, 3, 2, 2, 2, 40, 598, 3, 2, 2, 2, 42, 611, 3, 2, 2, 2, 44, 625, 3, 2, 2, 2, 46, 657, 3, 2, 2, 2, 48, 731, 3, 2, 2, 2, 50, 746, 3, 2, 2, 2, 52, 759, 3, 2, 2, 2, 54, 765, 3, 2, 2, 2, 56, 779, 3, 2, 2, 2, 58, 783, 3, 2, 2, 2, 60, 807, 3, 2, 2, 2, 62, 912, 3, 2, 2, 2, 64, 915, 3, 2, 2, 2, 66, 950, 3, 2, 2, 2, 68, 1004, 3, 2, 2, 2, 70, 1006, 3, 2, 2, 2, 72, 1017, 3, 2, 2, 2, 74, 1035, 3, 2, 2, 2, 76, 1075, 3, 2, 2, 2, 78, 1153, 3, 2, 2, 2, 80, 1245, 3, 2, 2, 2, 82, 1293, 3, 2, 2, 2, 84, 1303, 3, 2, 2, 2, 86, 1313, 3, 2, 2, 2, 88, 1353, 3, 2, 2, 2, 90, 1368, 3, 2, 2, 2, 92, 1378, 3, 2, 2, 2, 94, 1389, 3, 2, 2, 2, 96, 1391, 3, 2, 2, 2, 98, 1422, 3, 2, 2, 2, 100, 1490, 3, 2, 2, 2, 102, 1492, 3, 2, 2, 2, 104, 1515, 3, 2, 2, 2, 106, 1531, 3, 2, 2, 2, 108, 1607, 3, 2, 2, 2, 110, 1614, 3, 2, 2, 2, 112, 1617, 3, 2, 2, 2, 114, 1621, 3, 2, 2, 2, 116, 1623, 3, 2, 2, 2, 118, 1625, 3, 2, 2, 2, 120, 1629, 3, 2, 2, 2, 122, 1631, 3, 2, 2, 2, 124, 1633, 3, 2, 2, 2, 126, 1635, 3, 2, 2, 2, 128, 1637, 3, 2, 2, 2, 130, 1639, 3, 2, 2, 2, 132, 1641, 3, 2, 2, 2, 134, 1643, 3, 2, 2, 2, 136, 1645, 3, 2, 2, 2, 138, 1647, 3, 2, 2, 2, 140, 1649, 3, 2, 2, 2, 142, 1651, 3, 2, 2, 2, 144, 1653, 3, 2, 2, 2, 146, 1655, 3, 2, 2, 2, 148, 1657, 3, 2, 2, 2, 150, 1659, 3, 2, 2, 2, 152, 1661, 3, 2, 2, 2, 154, 1663, 3, 2, 2, 2, 156, 1665, 3, 2, 2, 2, 158, 1667, 3, 2, 2, 2, 160, 1669, 3, 2, 2, 2, 162, 1677, 3, 2, 2, 2, 164, 1679, 3, 2, 2, 2, 166, 1688, 3, 2, 2, 2, 168, 170, 5, 4, 3, 2, 169, 168, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 174, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 175, 7, 2, 2, 3, 175, 3, 3, 2, 2, 2, 176, 178, 7, 3, 2, 2, 177, 176, 3, 2, 2, 2, 178, 181, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 182, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 191, 5, 6, 4, 2, 183, 185, 7, 3, 2, 2, 184, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 190, 5, 6, 4, 2, 189, 184, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 197, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 194, 196, 7, 3, 2, 2, 195, 194, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 5, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, 203, 7, 73, 2, 2, 201, 202, 7, 116, 2, 2, 202, 204, 7, 113, 2, 2, 203, 201, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 206, 3, 2, 2, 2, 205, 200, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 237, 3, 2, 2, 2, 207, 238, 5, 8, 5, 2, 208, 238, 5, 10, 6, 2, 209, 238, 5, 12, 7, 2, 210, 238, 5, 14, 8, 2, 211, 238, 5, 16, 9, 2, 212, 238, 5, 18, 10, 2, 213, 238, 5, 20, 11, 2, 214, 238, 5, 22, 12, 2, 215, 238, 5, 24, 13, 2, 216, 238, 5, 26, 14, 2, 217, 238, 5, 28, 15, 2, 218, 238, 5, 30, 16, 2, 219, 238, 5, 32, 17, 2, 220, 238, 5, 34, 18, 2, 221, 238, 5, 36, 19, 2, 222, 238, 5, 38, 20, 2, 223, 238, 5, 40, 21, 2, 224, 238, 5, 42, 22, 2, 225, 238, 5, 44, 23, 2, 226, 238, 5, 46, 24, 2, 227, 238, 5, 48, 25, 2, 228, 238, 5, 50, 26, 2, 229, 238, 5, 52, 27, 2, 230, 238, 5, 54, 28, 2, 231, 238, 5, 56, 29, 2, 232, 238, 5, 58, 30, 2, 233, 238, 5, 60, 31, 2, 234, 238, 5, 64, 33, 2, 235, 238, 5, 66, 34, 2, 236, 238, 5, 68, 35, 2, 237, 207, 3, 2, 2, 2, 237, 208, 3, 2, 2, 2, 237, 209, 3, 2, 2, 2, 237, 210, 3, 2, 2, 2, 237, 211, 3, 2, 2, 2, 237, 212, 3, 2, 2, 2, 237, 213, 3, 2, 2, 2, 237, 214, 3, 2, 2, 2, 237, 215, 3, 2, 2, 2, 237, 216, 3, 2, 2, 2, 237, 217, 3, 2, 2, 2, 237, 218, 3, 2, 2, 2, 237, 219, 3, 2, 2, 2, 237, 220, 3, 2, 2, 2, 237, 221, 3, 2, 2, 2, 237, 222, 3, 2, 2, 2, 237, 223, 3, 2, 2, 2, 237, 224, 3, 2, 2, 2, 237, 225, 3, 2, 2, 2, 237, 226, 3, 2, 2, 2, 237, 227, 3, 2, 2, 2, 237, 228, 3, 2, 2, 2, 237, 229, 3, 2, 2, 2, 237, 230, 3, 2, 2, 2, 237, 231, 3, 2, 2, 2, 237, 232, 3, 2, 2, 2, 237, 233, 3, 2, 2, 2, 237, 234, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 7, 3, 2, 2, 2, 239, 240, 7, 32, 2, 2, 240, 244, 7, 132, 2, 2, 241, 242, 5, 130, 66, 2, 242, 243, 7, 4, 2, 2, 243, 245, 3, 2, 2, 2, 244, 241, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 263, 5, 136, 69, 2, 247, 248, 7, 123, 2, 2, 248, 249, 7, 136, 2, 2, 249, 264, 5, 140, 71, 2, 250, 252, 7, 123, 2, 2, 251, 253, 7, 48, 2, 2, 252, 251, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 5, 142, 72, 2, 255, 256, 7, 136, 2, 2, 256, 257, 5, 144, 73, 2, 257, 264, 3, 2, 2, 2, 258, 260, 7, 29, 2, 2, 259, 261, 7, 48, 2, 2, 260, 259, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 264, 5, 70, 36, 2, 263, 247, 3, 2, 2, 2, 263, 250, 3, 2, 2, 2, 263, 258, 3, 2, 2, 2, 264, 9, 3, 2, 2, 2, 265, 272, 7, 33, 2, 2, 266, 273, 5, 130, 66, 2, 267, 273, 5, 138, 70, 2, 268, 269, 5, 130, 66, 2, 269, 270, 7, 4, 2, 2, 270, 271, 5, 138, 70, 2, 271, 273, 3, 2, 2, 2, 272, 266, 3, 2, 2, 2, 272, 267, 3, 2, 2, 2, 272, 268, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 11, 3, 2, 2, 2, 274, 276, 7, 37, 2, 2, 275, 277, 7, 57, 2, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 5, 78, 40, 2, 279, 280, 7, 35, 2, 2, 280, 281, 5, 130, 66, 2, 281, 13, 3, 2, 2, 2, 282, 284, 7, 40, 2, 2, 283, 285, 9, 2, 2, 2, 284, 283, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 290, 3, 2, 2, 2, 286, 288, 7, 137, 2, 2, 287, 289, 5, 164, 83, 2, 288, 287, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 291, 3, 2, 2, 2, 290, 286, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 15, 3, 2, 2, 2, 292, 297, 9, 3, 2, 2, 293, 295, 7, 137, 2, 2, 294, 296, 5, 164, 83, 2, 295, 294, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 298, 3, 2, 2, 2, 297, 293, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 17, 3, 2, 2, 2, 299, 301, 5, 88, 45, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 312, 5, 108, 55, 2, 303, 305, 7, 139, 2, 2, 304, 306, 7, 31, 2, 2, 305, 304, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 310, 3, 2, 2, 2, 307, 310, 7, 92, 2, 2, 308, 310, 7, 70, 2, 2, 309, 303, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 313, 5, 108, 55, 2, 312, 309, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 326, 3, 2, 2, 2, 316, 317, 7, 111, 2, 2, 317, 318, 7, 42, 2, 2, 318, 323, 5, 92, 47, 2, 319, 320, 7, 7, 2, 2, 320, 322, 5, 92, 47, 2, 321, 319, 3, 2, 2, 2, 322, 325, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 326, 316, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 334, 3, 2, 2, 2, 328, 329, 7, 100, 2, 2, 329, 332, 5, 78, 40, 2, 330, 331, 9, 4, 2, 2, 331, 333, 5, 78, 40, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 335, 3, 2, 2, 2, 334, 328, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 19, 3, 2, 2, 2, 336, 338, 7, 52, 2, 2, 337, 339, 7, 140, 2, 2, 338, 337, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 344, 7, 86, 2, 2, 341, 342, 7, 82, 2, 2, 342, 343, 7, 104, 2, 2, 343, 345, 7, 72, 2, 2, 344, 341, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 349, 3, 2, 2, 2, 346, 347, 5, 130, 66, 2, 347, 348, 7, 4, 2, 2, 348, 350, 3, 2, 2, 2, 349, 346, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 5, 150, 76, 2, 352, 353, 7, 109, 2, 2, 353, 354, 5, 136, 69, 2, 354, 355, 7, 5, 2, 2, 355, 360, 5, 84, 43, 2, 356, 357, 7, 7, 2, 2, 357, 359, 5, 84, 43, 2, 358, 356, 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 363, 3, 2, 2, 2, 362, 360, 3, 2, 2, 2, 363, 366, 7, 6, 2, 2, 364, 365, 7, 148, 2, 2, 365, 367, 5, 78, 40, 2, 366, 364, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 21, 3, 2, 2, 2, 368, 370, 7, 52, 2, 2, 369, 371, 9, 5, 2, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 376, 7, 132, 2, 2, 373, 374, 7, 82, 2, 2, 374, 375, 7, 104, 2, 2, 375, 377, 7, 72, 2, 2, 376, 373, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 381, 3, 2, 2, 2, 378, 379, 5, 130, 66, 2, 379, 380, 7, 4, 2, 2, 380, 382, 3, 2, 2, 2, 381, 378, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 407, 5, 136, 69, 2, 384, 385, 7, 5, 2, 2, 385, 390, 5, 70, 36, 2, 386, 387, 7, 7, 2, 2, 387, 389, 5, 70, 36, 2, 388, 386, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 391, 397, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 394, 7, 7, 2, 2, 394, 396, 5, 86, 44, 2, 395, 393, 3, 2, 2, 2, 396, 399, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 400, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 400, 403, 7, 6, 2, 2, 401, 402, 7, 150, 2, 2, 402, 404, 7, 151, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 408, 3, 2, 2, 2, 405, 406, 7, 35, 2, 2, 406, 408, 5, 60, 31, 2, 407, 384, 3, 2, 2, 2, 407, 405, 3, 2, 2, 2, 408, 23, 3, 2, 2, 2, 409, 411, 7, 52, 2, 2, 410, 412, 9, 5, 2, 2, 411, 410, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 417, 7, 138, 2, 2, 414, 415, 7, 82, 2, 2, 415, 416, 7, 104, 2, 2, 416, 418, 7, 72, 2, 2, 417, 414, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 422, 3, 2, 2, 2, 419, 420, 5, 130, 66, 2, 420, 421, 7, 4, 2, 2, 421, 423, 3, 2, 2, 2, 422, 419, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 429, 5, 152, 77, 2, 425, 430, 7, 39, 2, 2, 426, 430, 7, 30, 2, 2, 427, 428, 7, 91, 2, 2, 428, 430, 7, 107, 2, 2, 429, 425, 3, 2, 2, 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, 445, 3, 2, 2, 2, 431, 446, 7, 61, 2, 2, 432, 446, 7, 90, 2, 2, 433, 443, 7, 141, 2, 2, 434, 435, 7, 107, 2, 2, 435, 440, 5, 142, 72, 2, 436, 437, 7, 7, 2, 2, 437, 439, 5, 142, 72, 2, 438, 436, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 444, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 434, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 446, 3, 2, 2, 2, 445, 431, 3, 2, 2, 2, 445, 432, 3, 2, 2, 2, 445, 433, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 451, 7, 109, 2, 2, 448, 449, 5, 130, 66, 2, 449, 450, 7, 4, 2, 2, 450, 452, 3, 2, 2, 2, 451, 448, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 457, 5, 136, 69, 2, 454, 455, 7, 75, 2, 2, 455, 456, 7, 66, 2, 2, 456, 458, 7, 128, 2, 2, 457, 454, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 460, 7, 147, 2, 2, 460, 462, 5, 78, 40, 2, 461, 459, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 472, 7, 40, 2, 2, 464, 469, 5, 64, 33, 2, 465, 469, 5, 46, 24, 2, 466, 469, 5, 30, 16, 2, 467, 469, 5, 60, 31, 2, 468, 464, 3, 2, 2, 2, 468, 465, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, 468, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 471, 7, 3, 2, 2, 471, 473, 3, 2, 2, 2, 472, 468, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 472, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 477, 7, 68, 2, 2, 477, 25, 3, 2, 2, 2, 478, 480, 7, 52, 2, 2, 479, 481, 9, 5, 2, 2, 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 486, 7, 145, 2, 2, 483, 484, 7, 82, 2, 2, 484, 485, 7, 104, 2, 2, 485, 487, 7, 72, 2, 2, 486, 483, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 491, 3, 2, 2, 2, 488, 489, 5, 130, 66, 2, 489, 490, 7, 4, 2, 2, 490, 492, 3, 2, 2, 2, 491, 488, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 5, 154, 78, 2, 494, 495, 7, 35, 2, 2, 495, 496, 5, 60, 31, 2, 496, 27, 3, 2, 2, 2, 497, 498, 7, 52, 2, 2, 498, 499, 7, 146, 2, 2, 499, 503, 7, 132, 2, 2, 500, 501, 7, 82, 2, 2, 501, 502, 7, 104, 2, 2, 502, 504, 7, 72, 2, 2, 503, 500, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, 508, 3, 2, 2, 2, 505, 506, 5, 130, 66, 2, 506, 507, 7, 4, 2, 2, 507, 509, 3, 2, 2, 2, 508, 505, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 511, 5, 136, 69, 2, 511, 512, 7, 142, 2, 2, 512, 524, 5, 156, 79, 2, 513, 514, 7, 5, 2, 2, 514, 519, 5, 120, 61, 2, 515, 516, 7, 7, 2, 2, 516, 518, 5, 120, 61, 2, 517, 515, 3, 2, 2, 2, 518, 521, 3, 2, 2, 2, 519, 517, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 522, 3, 2, 2, 2, 521, 519, 3, 2, 2, 2, 522, 523, 7, 6, 2, 2, 523, 525, 3, 2, 2, 2, 524, 513, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 29, 3, 2, 2, 2, 526, 528, 5, 88, 45, 2, 527, 526, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 530, 7, 61, 2, 2, 530, 531, 7, 77, 2, 2, 531, 534, 5, 90, 46, 2, 532, 533, 7, 148, 2, 2, 533, 535, 5, 78, 40, 2, 534, 532, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 31, 3, 2, 2, 2, 536, 538, 5, 88, 45, 2, 537, 536, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 540, 7, 61, 2, 2, 540, 541, 7, 77, 2, 2, 541, 544, 5, 90, 46, 2, 542, 543, 7, 148, 2, 2, 543, 545, 5, 78, 40, 2, 544, 542, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 564, 3, 2, 2, 2, 546, 547, 7, 111, 2, 2, 547, 548, 7, 42, 2, 2, 548, 553, 5, 92, 47, 2, 549, 550, 7, 7, 2, 2, 550, 552, 5, 92, 47, 2, 551, 549, 3, 2, 2, 2, 552, 555, 3, 2, 2, 2, 553, 551, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 557, 3, 2, 2, 2, 555, 553, 3, 2, 2, 2, 556, 546, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 7, 100, 2, 2, 559, 562, 5, 78, 40, 2, 560, 561, 9, 4, 2, 2, 561, 563, 5, 78, 40, 2, 562, 560, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 565, 3, 2, 2, 2, 564, 556, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 33, 3, 2, 2, 2, 566, 568, 7, 63, 2, 2, 567, 569, 7, 57, 2, 2, 568, 567, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 571, 5, 130, 66, 2, 571, 35, 3, 2, 2, 2, 572, 573, 7, 65, 2, 2, 573, 576, 7, 86, 2, 2, 574, 575, 7, 82, 2, 2, 575, 577, 7, 72, 2, 2, 576, 574, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 581, 3, 2, 2, 2, 578, 579, 5, 130, 66, 2, 579, 580, 7, 4, 2, 2, 580, 582, 3, 2, 2, 2, 581, 578, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 5, 150, 76, 2, 584, 37, 3, 2, 2, 2, 585, 586, 7, 65, 2, 2, 586, 589, 7, 132, 2, 2, 587, 588, 7, 82, 2, 2, 588, 590, 7, 72, 2, 2, 589, 587, 3, 2, 2, 2, 589, 590, 3, 2, 2, 2, 590, 594, 3, 2, 2, 2, 591, 592, 5, 130, 66, 2, 592, 593, 7, 4, 2, 2, 593, 595, 3, 2, 2, 2, 594, 591, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 5, 136, 69, 2, 597, 39, 3, 2, 2, 2, 598, 599, 7, 65, 2, 2, 599, 602, 7, 138, 2, 2, 600, 601, 7, 82, 2, 2, 601, 603, 7, 72, 2, 2, 602, 600, 3, 2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 607, 3, 2, 2, 2, 604, 605, 5, 130, 66, 2, 605, 606, 7, 4, 2, 2, 606, 608, 3, 2, 2, 2, 607, 604, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 5, 152, 77, 2, 610, 41, 3, 2, 2, 2, 611, 612, 7, 65, 2, 2, 612, 615, 7, 145, 2, 2, 613, 614, 7, 82, 2, 2, 614, 616, 7, 72, 2, 2, 615, 613, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 620, 3, 2, 2, 2, 617, 618, 5, 130, 66, 2, 618, 619, 7, 4, 2, 2, 619, 621, 3, 2, 2, 2, 620, 617, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 622, 3, 2, 2, 2, 622, 623, 5, 154, 78, 2, 623, 43, 3, 2, 2, 2, 624, 626, 5, 88, 45, 2, 625, 624, 3, 2, 2, 2, 625, 626, 3, 2, 2, 2, 626, 627, 3, 2, 2, 2, 627, 633, 5, 108, 55, 2, 628, 629, 5, 110, 56, 2, 629, 630, 5, 108, 55, 2, 630, 632, 3, 2, 2, 2, 631, 628, 3, 2, 2, 2, 632, 635, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, 633, 634, 3, 2, 2, 2, 634, 646, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 636, 637, 7, 111, 2, 2, 637, 638, 7, 42, 2, 2, 638, 643, 5, 92, 47, 2, 639, 640, 7, 7, 2, 2, 640, 642, 5, 92, 47, 2, 641, 639, 3, 2, 2, 2, 642, 645, 3, 2, 2, 2, 643, 641, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 647, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 646, 636, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 654, 3, 2, 2, 2, 648, 649, 7, 100, 2, 2, 649, 652, 5, 78, 40, 2, 650, 651, 9, 4, 2, 2, 651, 653, 5, 78, 40, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 655, 3, 2, 2, 2, 654, 648, 3, 2, 2, 2, 654, 655, 3, 2, 2, 2, 655, 45, 3, 2, 2, 2, 656, 658, 5, 88, 45, 2, 657, 656, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 676, 3, 2, 2, 2, 659, 677, 7, 90, 2, 2, 660, 677, 7, 124, 2, 2, 661, 662, 7, 90, 2, 2, 662, 663, 7, 110, 2, 2, 663, 677, 7, 124, 2, 2, 664, 665, 7, 90, 2, 2, 665, 666, 7, 110, 2, 2, 666, 677, 7, 127, 2, 2, 667, 668, 7, 90, 2, 2, 668, 669, 7, 110, 2, 2, 669, 677, 7, 27, 2, 2, 670, 671, 7, 90, 2, 2, 671, 672, 7, 110, 2, 2, 672, 677, 7, 74, 2, 2, 673, 674, 7, 90, 2, 2, 674, 675, 7, 110, 2, 2, 675, 677, 7, 83, 2, 2, 676, 659, 3, 2, 2, 2, 676, 660, 3, 2, 2, 2, 676, 661, 3, 2, 2, 2, 676, 664, 3, 2, 2, 2, 676, 667, 3, 2, 2, 2, 676, 670, 3, 2, 2, 2, 676, 673, 3, 2, 2, 2, 677, 678, 3, 2, 2, 2, 678, 682, 7, 93, 2, 2, 679, 680, 5, 130, 66, 2, 680, 681, 7, 4, 2, 2, 681, 683, 3, 2, 2, 2, 682, 679, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 696, 5, 136, 69, 2, 685, 686, 7, 5, 2, 2, 686, 691, 5, 142, 72, 2, 687, 688, 7, 7, 2, 2, 688, 690, 5, 142, 72, 2, 689, 687, 3, 2, 2, 2, 690, 693, 3, 2, 2, 2, 691, 689, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 694, 3, 2, 2, 2, 693, 691, 3, 2, 2, 2, 694, 695, 7, 6, 2, 2, 695, 697, 3, 2, 2, 2, 696, 685, 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 729, 3, 2, 2, 2, 698, 699, 7, 144, 2, 2, 699, 700, 7, 5, 2, 2, 700, 705, 5, 78, 40, 2, 701, 702, 7, 7, 2, 2, 702, 704, 5, 78, 40, 2, 703, 701, 3, 2, 2, 2, 704, 707, 3, 2, 2, 2, 705, 703, 3, 2, 2, 2, 705, 706, 3, 2, 2, 2, 706, 708, 3, 2, 2, 2, 707, 705, 3, 2, 2, 2, 708, 723, 7, 6, 2, 2, 709, 710, 7, 7, 2, 2, 710, 711, 7, 5, 2, 2, 711, 716, 5, 78, 40, 2, 712, 713, 7, 7, 2, 2, 713, 715, 5, 78, 40, 2, 714, 712, 3, 2, 2, 2, 715, 718, 3, 2, 2, 2, 716, 714, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 719, 3, 2, 2, 2, 718, 716, 3, 2, 2, 2, 719, 720, 7, 6, 2, 2, 720, 722, 3, 2, 2, 2, 721, 709, 3, 2, 2, 2, 722, 725, 3, 2, 2, 2, 723, 721, 3, 2, 2, 2, 723, 724, 3, 2, 2, 2, 724, 730, 3, 2, 2, 2, 725, 723, 3, 2, 2, 2, 726, 730, 5, 60, 31, 2, 727, 728, 7, 58, 2, 2, 728, 730, 7, 144, 2, 2, 729, 698, 3, 2, 2, 2, 729, 726, 3, 2, 2, 2, 729, 727, 3, 2, 2, 2, 730, 47, 3, 2, 2, 2, 731, 735, 7, 114, 2, 2, 732, 733, 5, 130, 66, 2, 733, 734, 7, 4, 2, 2, 734, 736, 3, 2, 2, 2, 735, 732, 3, 2, 2, 2, 735, 736, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 744, 5, 158, 80, 2, 738, 739, 7, 8, 2, 2, 739, 745, 5, 94, 48, 2, 740, 741, 7, 5, 2, 2, 741, 742, 5, 94, 48, 2, 742, 743, 7, 6, 2, 2, 743, 745, 3, 2, 2, 2, 744, 738, 3, 2, 2, 2, 744, 740, 3, 2, 2, 2, 744, 745, 3, 2, 2, 2, 745, 49, 3, 2, 2, 2, 746, 757, 7, 121, 2, 2, 747, 758, 5, 146, 74, 2, 748, 749, 5, 130, 66, 2, 749, 750, 7, 4, 2, 2, 750, 752, 3, 2, 2, 2, 751, 748, 3, 2, 2, 2, 751, 752, 3, 2, 2, 2, 752, 755, 3, 2, 2, 2, 753, 756, 5, 136, 69, 2, 754, 756, 5, 150, 76, 2, 755, 753, 3, 2, 2, 2, 755, 754, 3, 2, 2, 2, 756, 758, 3, 2, 2, 2, 757, 747, 3, 2, 2, 2, 757, 751, 3, 2, 2, 2, 757, 758, 3, 2, 2, 2, 758, 51, 3, 2, 2, 2, 759, 761, 7, 122, 2, 2, 760, 762, 7, 129, 2, 2, 761, 760, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 763, 3, 2, 2, 2, 763, 764, 5, 160, 81, 2, 764, 53, 3, 2, 2, 2, 765, 770, 7, 127, 2, 2, 766, 768, 7, 137, 2, 2, 767, 769, 5, 164, 83, 2, 768, 767, 3, 2, 2, 2, 768, 769, 3, 2, 2, 2, 769, 771, 3, 2, 2, 2, 770, 766, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 777, 3, 2, 2, 2, 772, 774, 7, 136, 2, 2, 773, 775, 7, 129, 2, 2, 774, 773, 3, 2, 2, 2, 774, 775, 3, 2, 2, 2, 775, 776, 3, 2, 2, 2, 776, 778, 5, 160, 81, 2, 777, 772, 3, 2, 2, 2, 777, 778, 3, 2, 2, 2, 778, 55, 3, 2, 2, 2, 779, 780, 7, 129, 2, 2, 780, 781, 5, 160, 81, 2, 781, 57, 3, 2, 2, 2, 782, 784, 5, 88, 45, 2, 783, 782, 3, 2, 2, 2, 783, 784, 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 796, 5, 108, 55, 2, 786, 787, 7, 111, 2, 2, 787, 788, 7, 42, 2, 2, 788, 793, 5, 92, 47, 2, 789, 790, 7, 7, 2, 2, 790, 792, 5, 92, 47, 2, 791, 789, 3, 2, 2, 2, 792, 795, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 793, 794, 3, 2, 2, 2, 794, 797, 3, 2, 2, 2, 795, 793, 3, 2, 2, 2, 796, 786, 3, 2, 2, 2, 796, 797, 3, 2, 2, 2, 797, 804, 3, 2, 2, 2, 798, 799, 7, 100, 2, 2, 799, 802, 5, 78, 40, 2, 800, 801, 9, 4, 2, 2, 801, 803, 5, 78, 40, 2, 802, 800, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 805, 3, 2, 2, 2, 804, 798, 3, 2, 2, 2, 804, 805, 3, 2, 2, 2, 805, 59, 3, 2, 2, 2, 806, 808, 5, 88, 45, 2, 807, 806, 3, 2, 2, 2, 807, 808, 3, 2, 2, 2, 808, 809, 3, 2, 2, 2, 809, 815, 5, 62, 32, 2, 810, 811, 5, 110, 56, 2, 811, 812, 5, 62, 32, 2, 812, 814, 3, 2, 2, 2, 813, 810, 3, 2, 2, 2, 814, 817, 3, 2, 2, 2, 815, 813, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 828, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, 818, 819, 7, 111, 2, 2, 819, 820, 7, 42, 2, 2, 820, 825, 5, 92, 47, 2, 821, 822, 7, 7, 2, 2, 822, 824, 5, 92, 47, 2, 823, 821, 3, 2, 2, 2, 824, 827, 3, 2, 2, 2, 825, 823, 3, 2, 2, 2, 825, 826, 3, 2, 2, 2, 826, 829, 3, 2, 2, 2, 827, 825, 3, 2, 2, 2, 828, 818, 3, 2, 2, 2, 828, 829, 3, 2, 2, 2, 829, 836, 3, 2, 2, 2, 830, 831, 7, 100, 2, 2, 831, 834, 5, 78, 40, 2, 832, 833, 9, 4, 2, 2, 833, 835, 5, 78, 40, 2, 834, 832, 3, 2, 2, 2, 834, 835, 3, 2, 2, 2, 835, 837, 3, 2, 2, 2, 836, 830, 3, 2, 2, 2, 836, 837, 3, 2, 2, 2, 837, 61, 3, 2, 2, 2, 838, 840, 7, 130, 2, 2, 839, 841, 9, 6, 2, 2, 840, 839, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 842, 3, 2, 2, 2, 842, 847, 5, 98, 50, 2, 843, 844, 7, 7, 2, 2, 844, 846, 5, 98, 50, 2, 845, 843, 3, 2, 2, 2, 846, 849, 3, 2, 2, 2, 847, 845, 3, 2, 2, 2, 847, 848, 3, 2, 2, 2, 848, 862, 3, 2, 2, 2, 849, 847, 3, 2, 2, 2, 850, 860, 7, 77, 2, 2, 851, 856, 5, 100, 51, 2, 852, 853, 7, 7, 2, 2, 853, 855, 5, 100, 51, 2, 854, 852, 3, 2, 2, 2, 855, 858, 3, 2, 2, 2, 856, 854, 3, 2, 2, 2, 856, 857, 3, 2, 2, 2, 857, 861, 3, 2, 2, 2, 858, 856, 3, 2, 2, 2, 859, 861, 5, 102, 52, 2, 860, 851, 3, 2, 2, 2, 860, 859, 3, 2, 2, 2, 861, 863, 3, 2, 2, 2, 862, 850, 3, 2, 2, 2, 862, 863, 3, 2, 2, 2, 863, 866, 3, 2, 2, 2, 864, 865, 7, 148, 2, 2, 865, 867, 5, 78, 40, 2, 866, 864, 3, 2, 2, 2, 866, 867, 3, 2, 2, 2, 867, 882, 3, 2, 2, 2, 868, 869, 7, 80, 2, 2, 869, 870, 7, 42, 2, 2, 870, 875, 5, 78, 40, 2, 871, 872, 7, 7, 2, 2, 872, 874, 5, 78, 40, 2, 873, 871, 3, 2, 2, 2, 874, 877, 3, 2, 2, 2, 875, 873, 3, 2, 2, 2, 875, 876, 3, 2, 2, 2, 876, 880, 3, 2, 2, 2, 877, 875, 3, 2, 2, 2, 878, 879, 7, 81, 2, 2, 879, 881, 5, 78, 40, 2, 880, 878, 3, 2, 2, 2, 880, 881, 3, 2, 2, 2, 881, 883, 3, 2, 2, 2, 882, 868, 3, 2, 2, 2, 882, 883, 3, 2, 2, 2, 883, 913, 3, 2, 2, 2, 884, 885, 7, 144, 2, 2, 885, 886, 7, 5, 2, 2, 886, 891, 5, 78, 40, 2, 887, 888, 7, 7, 2, 2, 888, 890, 5, 78, 40, 2, 889, 887, 3, 2, 2, 2, 890, 893, 3, 2, 2, 2, 891, 889, 3, 2, 2, 2, 891, 892, 3, 2, 2, 2, 892, 894, 3, 2, 2, 2, 893, 891, 3, 2, 2, 2, 894, 909, 7, 6, 2, 2, 895, 896, 7, 7, 2, 2, 896, 897, 7, 5, 2, 2, 897, 902, 5, 78, 40, 2, 898, 899, 7, 7, 2, 2, 899, 901, 5, 78, 40, 2, 900, 898, 3, 2, 2, 2, 901, 904, 3, 2, 2, 2, 902, 900, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 905, 3, 2, 2, 2, 904, 902, 3, 2, 2, 2, 905, 906, 7, 6, 2, 2, 906, 908, 3, 2, 2, 2, 907, 895, 3, 2, 2, 2, 908, 911, 3, 2, 2, 2, 909, 907, 3, 2, 2, 2, 909, 910, 3, 2, 2, 2, 910, 913, 3, 2, 2, 2, 911, 909, 3, 2, 2, 2, 912, 838, 3, 2, 2, 2, 912, 884, 3, 2, 2, 2, 913, 63, 3, 2, 2, 2, 914, 916, 5, 88, 45, 2, 915, 914, 3, 2, 2, 2, 915, 916, 3, 2, 2, 2, 916, 917, 3, 2, 2, 2, 917, 928, 7, 141, 2, 2, 918, 919, 7, 110, 2, 2, 919, 929, 7, 127, 2, 2, 920, 921, 7, 110, 2, 2, 921, 929, 7, 27, 2, 2, 922, 923, 7, 110, 2, 2, 923, 929, 7, 124, 2, 2, 924, 925, 7, 110, 2, 2, 925, 929, 7, 74, 2, 2, 926, 927, 7, 110, 2, 2, 927, 929, 7, 83, 2, 2, 928, 918, 3, 2, 2, 2, 928, 920, 3, 2, 2, 2, 928, 922, 3, 2, 2, 2, 928, 924, 3, 2, 2, 2, 928, 926, 3, 2, 2, 2, 928, 929, 3, 2, 2, 2, 929, 930, 3, 2, 2, 2, 930, 931, 5, 90, 46, 2, 931, 932, 7, 131, 2, 2, 932, 933, 5, 142, 72, 2, 933, 934, 7, 8, 2, 2, 934, 942, 5, 78, 40, 2, 935, 936, 7, 7, 2, 2, 936, 937, 5, 142, 72, 2, 937, 938, 7, 8, 2, 2, 938, 939, 5, 78, 40, 2, 939, 941, 3, 2, 2, 2, 940, 935, 3, 2, 2, 2, 941, 944, 3, 2, 2, 2, 942, 940, 3, 2, 2, 2, 942, 943, 3, 2, 2, 2, 943, 947, 3, 2, 2, 2, 944, 942, 3, 2, 2, 2, 945, 946, 7, 148, 2, 2, 946, 948, 5, 78, 40, 2, 947, 945, 3, 2, 2, 2, 947, 948, 3, 2, 2, 2, 948, 65, 3, 2, 2, 2, 949, 951, 5, 88, 45, 2, 950, 949, 3, 2, 2, 2, 950, 951, 3, 2, 2, 2, 951, 952, 3, 2, 2, 2, 952, 963, 7, 141, 2, 2, 953, 954, 7, 110, 2, 2, 954, 964, 7, 127, 2, 2, 955, 956, 7, 110, 2, 2, 956, 964, 7, 27, 2, 2, 957, 958, 7, 110, 2, 2, 958, 964, 7, 124, 2, 2, 959, 960, 7, 110, 2, 2, 960, 964, 7, 74, 2, 2, 961, 962, 7, 110, 2, 2, 962, 964, 7, 83, 2, 2, 963, 953, 3, 2, 2, 2, 963, 955, 3, 2, 2, 2, 963, 957, 3, 2, 2, 2, 963, 959, 3, 2, 2, 2, 963, 961, 3, 2, 2, 2, 963, 964, 3, 2, 2, 2, 964, 965, 3, 2, 2, 2, 965, 966, 5, 90, 46, 2, 966, 967, 7, 131, 2, 2, 967, 968, 5, 142, 72, 2, 968, 969, 7, 8, 2, 2, 969, 977, 5, 78, 40, 2, 970, 971, 7, 7, 2, 2, 971, 972, 5, 142, 72, 2, 972, 973, 7, 8, 2, 2, 973, 974, 5, 78, 40, 2, 974, 976, 3, 2, 2, 2, 975, 970, 3, 2, 2, 2, 976, 979, 3, 2, 2, 2, 977, 975, 3, 2, 2, 2, 977, 978, 3, 2, 2, 2, 978, 982, 3, 2, 2, 2, 979, 977, 3, 2, 2, 2, 980, 981, 7, 148, 2, 2, 981, 983, 5, 78, 40, 2, 982, 980, 3, 2, 2, 2, 982, 983, 3, 2, 2, 2, 983, 1002, 3, 2, 2, 2, 984, 985, 7, 111, 2, 2, 985, 986, 7, 42, 2, 2, 986, 991, 5, 92, 47, 2, 987, 988, 7, 7, 2, 2, 988, 990, 5, 92, 47, 2, 989, 987, 3, 2, 2, 2, 990, 993, 3, 2, 2, 2, 991, 989, 3, 2, 2, 2, 991, 992, 3, 2, 2, 2, 992, 995, 3, 2, 2, 2, 993, 991, 3, 2, 2, 2, 994, 984, 3, 2, 2, 2, 994, 995, 3, 2, 2, 2, 995, 996, 3, 2, 2, 2, 996, 997, 7, 100, 2, 2, 997, 1000, 5, 78, 40, 2, 998, 999, 9, 4, 2, 2, 999, 1001, 5, 78, 40, 2, 1000, 998, 3, 2, 2, 2, 1000, 1001, 3, 2, 2, 2, 1001, 1003, 3, 2, 2, 2, 1002, 994, 3, 2, 2, 2, 1002, 1003, 3, 2, 2, 2, 1003, 67, 3, 2, 2, 2, 1004, 1005, 7, 143, 2, 2, 1005, 69, 3, 2, 2, 2, 1006, 1008, 5, 142, 72, 2, 1007, 1009, 5, 72, 37, 2, 1008, 1007, 3, 2, 2, 2, 1008, 1009, 3, 2, 2, 2, 1009, 1013, 3, 2, 2, 2, 1010, 1012, 5, 74, 38, 2, 1011, 1010, 3, 2, 2, 2, 1012, 1015, 3, 2, 2, 2, 1013, 1011, 3, 2, 2, 2, 1013, 1014, 3, 2, 2, 2, 1014, 71, 3, 2, 2, 2, 1015, 1013, 3, 2, 2, 2, 1016, 1018, 5, 126, 64, 2, 1017, 1016, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 1020, 3, 2, 2, 2, 1019, 1017, 3, 2, 2, 2, 1020, 1031, 3, 2, 2, 2, 1021, 1022, 7, 5, 2, 2, 1022, 1023, 5, 112, 57, 2, 1023, 1024, 7, 6, 2, 2, 1024, 1032, 3, 2, 2, 2, 1025, 1026, 7, 5, 2, 2, 1026, 1027, 5, 112, 57, 2, 1027, 1028, 7, 7, 2, 2, 1028, 1029, 5, 112, 57, 2, 1029, 1030, 7, 6, 2, 2, 1030, 1032, 3, 2, 2, 2, 1031, 1021, 3, 2, 2, 2, 1031, 1025, 3, 2, 2, 2, 1031, 1032, 3, 2, 2, 2, 1032, 73, 3, 2, 2, 2, 1033, 1034, 7, 51, 2, 2, 1034, 1036, 5, 126, 64, 2, 1035, 1033, 3, 2, 2, 2, 1035, 1036, 3, 2, 2, 2, 1036, 1070, 3, 2, 2, 2, 1037, 1038, 7, 115, 2, 2, 1038, 1040, 7, 97, 2, 2, 1039, 1041, 9, 7, 2, 2, 1040, 1039, 3, 2, 2, 2, 1040, 1041, 3, 2, 2, 2, 1041, 1042, 3, 2, 2, 2, 1042, 1044, 5, 76, 39, 2, 1043, 1045, 7, 38, 2, 2, 1044, 1043, 3, 2, 2, 2, 1044, 1045, 3, 2, 2, 2, 1045, 1071, 3, 2, 2, 2, 1046, 1048, 7, 104, 2, 2, 1047, 1046, 3, 2, 2, 2, 1047, 1048, 3, 2, 2, 2, 1048, 1049, 3, 2, 2, 2, 1049, 1050, 7, 106, 2, 2, 1050, 1071, 5, 76, 39, 2, 1051, 1052, 7, 140, 2, 2, 1052, 1071, 5, 76, 39, 2, 1053, 1054, 7, 46, 2, 2, 1054, 1055, 7, 5, 2, 2, 1055, 1056, 5, 78, 40, 2, 1056, 1057, 7, 6, 2, 2, 1057, 1071, 3, 2, 2, 2, 1058, 1065, 7, 58, 2, 2, 1059, 1066, 5, 112, 57, 2, 1060, 1066, 5, 114, 58, 2, 1061, 1062, 7, 5, 2, 2, 1062, 1063, 5, 78, 40, 2, 1063, 1064, 7, 6, 2, 2, 1064, 1066, 3, 2, 2, 2, 1065, 1059, 3, 2, 2, 2, 1065, 1060, 3, 2, 2, 2, 1065, 1061, 3, 2, 2, 2, 1066, 1071, 3, 2, 2, 2, 1067, 1068, 7, 47, 2, 2, 1068, 1071, 5, 146, 74, 2, 1069, 1071, 5, 80, 41, 2, 1070, 1037, 3, 2, 2, 2, 1070, 1047, 3, 2, 2, 2, 1070, 1051, 3, 2, 2, 2, 1070, 1053, 3, 2, 2, 2, 1070, 1058, 3, 2, 2, 2, 1070, 1067, 3, 2, 2, 2, 1070, 1069, 3, 2, 2, 2, 1071, 75, 3, 2, 2, 2, 1072, 1073, 7, 109, 2, 2, 1073, 1074, 7, 50, 2, 2, 1074, 1076, 9, 8, 2, 2, 1075, 1072, 3, 2, 2, 2, 1075, 1076, 3, 2, 2, 2, 1076, 77, 3, 2, 2, 2, 1077, 1078, 8, 40, 1, 2, 1078, 1154, 5, 114, 58, 2, 1079, 1154, 7, 153, 2, 2, 1080, 1081, 5, 130, 66, 2, 1081, 1082, 7, 4, 2, 2, 1082, 1084, 3, 2, 2, 2, 1083, 1080, 3, 2, 2, 2, 1083, 1084, 3, 2, 2, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1086, 5, 136, 69, 2, 1086, 1087, 7, 4, 2, 2, 1087, 1089, 3, 2, 2, 2, 1088, 1083, 3, 2, 2, 2, 1088, 1089, 3, 2, 2, 2, 1089, 1090, 3, 2, 2, 2, 1090, 1154, 5, 142, 72, 2, 1091, 1092, 5, 116, 59, 2, 1092, 1093, 5, 78, 40, 23, 1093, 1154, 3, 2, 2, 2, 1094, 1095, 5, 128, 65, 2, 1095, 1108, 7, 5, 2, 2, 1096, 1098, 7, 64, 2, 2, 1097, 1096, 3, 2, 2, 2, 1097, 1098, 3, 2, 2, 2, 1098, 1099, 3, 2, 2, 2, 1099, 1104, 5, 78, 40, 2, 1100, 1101, 7, 7, 2, 2, 1101, 1103, 5, 78, 40, 2, 1102, 1100, 3, 2, 2, 2, 1103, 1106, 3, 2, 2, 2, 1104, 1102, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 1109, 3, 2, 2, 2, 1106, 1104, 3, 2, 2, 2, 1107, 1109, 7, 9, 2, 2, 1108, 1097, 3, 2, 2, 2, 1108, 1107, 3, 2, 2, 2, 1108, 1109, 3, 2, 2, 2, 1109, 1110, 3, 2, 2, 2, 1110, 1111, 7, 6, 2, 2, 1111, 1154, 3, 2, 2, 2, 1112, 1113, 7, 5, 2, 2, 1113, 1114, 5, 78, 40, 2, 1114, 1115, 7, 6, 2, 2, 1115, 1154, 3, 2, 2, 2, 1116, 1117, 7, 45, 2, 2, 1117, 1118, 7, 5, 2, 2, 1118, 1119, 5, 78, 40, 2, 1119, 1120, 7, 35, 2, 2, 1120, 1121, 5, 72, 37, 2, 1121, 1122, 7, 6, 2, 2, 1122, 1154, 3, 2, 2, 2, 1123, 1125, 7, 104, 2, 2, 1124, 1123, 3, 2, 2, 2, 1124, 1125, 3, 2, 2, 2, 1125, 1126, 3, 2, 2, 2, 1126, 1128, 7, 72, 2, 2, 1127, 1124, 3, 2, 2, 2, 1127, 1128, 3, 2, 2, 2, 1128, 1129, 3, 2, 2, 2, 1129, 1130, 7, 5, 2, 2, 1130, 1131, 5, 60, 31, 2, 1131, 1132, 7, 6, 2, 2, 1132, 1154, 3, 2, 2, 2, 1133, 1135, 7, 44, 2, 2, 1134, 1136, 5, 78, 40, 2, 1135, 1134, 3, 2, 2, 2, 1135, 1136, 3, 2, 2, 2, 1136, 1142, 3, 2, 2, 2, 1137, 1138, 7, 147, 2, 2, 1138, 1139, 5, 78, 40, 2, 1139, 1140, 7, 135, 2, 2, 1140, 1141, 5, 78, 40, 2, 1141, 1143, 3, 2, 2, 2, 1142, 1137, 3, 2, 2, 2, 1143, 1144, 3, 2, 2, 2, 1144, 1142, 3, 2, 2, 2, 1144, 1145, 3, 2, 2, 2, 1145, 1148, 3, 2, 2, 2, 1146, 1147, 7, 67, 2, 2, 1147, 1149, 5, 78, 40, 2, 1148, 1146, 3, 2, 2, 2, 1148, 1149, 3, 2, 2, 2, 1149, 1150, 3, 2, 2, 2, 1150, 1151, 7, 68, 2, 2, 1151, 1154, 3, 2, 2, 2, 1152, 1154, 5, 82, 42, 2, 1153, 1077, 3, 2, 2, 2, 1153, 1079, 3, 2, 2, 2, 1153, 1088, 3, 2, 2, 2, 1153, 1091, 3, 2, 2, 2, 1153, 1094, 3, 2, 2, 2, 1153, 1112, 3, 2, 2, 2, 1153, 1116, 3, 2, 2, 2, 1153, 1127, 3, 2, 2, 2, 1153, 1133, 3, 2, 2, 2, 1153, 1152, 3, 2, 2, 2, 1154, 1242, 3, 2, 2, 2, 1155, 1156, 12, 22, 2, 2, 1156, 1157, 7, 13, 2, 2, 1157, 1241, 5, 78, 40, 23, 1158, 1159, 12, 21, 2, 2, 1159, 1160, 9, 9, 2, 2, 1160, 1241, 5, 78, 40, 22, 1161, 1162, 12, 20, 2, 2, 1162, 1163, 9, 10, 2, 2, 1163, 1241, 5, 78, 40, 21, 1164, 1165, 12, 19, 2, 2, 1165, 1166, 9, 11, 2, 2, 1166, 1241, 5, 78, 40, 20, 1167, 1168, 12, 18, 2, 2, 1168, 1169, 9, 12, 2, 2, 1169, 1241, 5, 78, 40, 19, 1170, 1171, 12, 17, 2, 2, 1171, 1172, 9, 13, 2, 2, 1172, 1241, 5, 78, 40, 18, 1173, 1174, 12, 15, 2, 2, 1174, 1175, 7, 34, 2, 2, 1175, 1241, 5, 78, 40, 16, 1176, 1177, 12, 14, 2, 2, 1177, 1178, 7, 110, 2, 2, 1178, 1241, 5, 78, 40, 15, 1179, 1180, 12, 7, 2, 2, 1180, 1182, 7, 94, 2, 2, 1181, 1183, 7, 104, 2, 2, 1182, 1181, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, 2, 1183, 1184, 3, 2, 2, 2, 1184, 1241, 5, 78, 40, 8, 1185, 1187, 12, 6, 2, 2, 1186, 1188, 7, 104, 2, 2, 1187, 1186, 3, 2, 2, 2, 1187, 1188, 3, 2, 2, 2, 1188, 1189, 3, 2, 2, 2, 1189, 1190, 7, 41, 2, 2, 1190, 1191, 5, 78, 40, 2, 1191, 1192, 7, 34, 2, 2, 1192, 1193, 5, 78, 40, 7, 1193, 1241, 3, 2, 2, 2, 1194, 1196, 12, 16, 2, 2, 1195, 1197, 7, 104, 2, 2, 1196, 1195, 3, 2, 2, 2, 1196, 1197, 3, 2, 2, 2, 1197, 1198, 3, 2, 2, 2, 1198, 1218, 7, 85, 2, 2, 1199, 1209, 7, 5, 2, 2, 1200, 1210, 5, 60, 31, 2, 1201, 1206, 5, 78, 40, 2, 1202, 1203, 7, 7, 2, 2, 1203, 1205, 5, 78, 40, 2, 1204, 1202, 3, 2, 2, 2, 1205, 1208, 3, 2, 2, 2, 1206, 1204, 3, 2, 2, 2, 1206, 1207, 3, 2, 2, 2, 1207, 1210, 3, 2, 2, 2, 1208, 1206, 3, 2, 2, 2, 1209, 1200, 3, 2, 2, 2, 1209, 1201, 3, 2, 2, 2, 1209, 1210, 3, 2, 2, 2, 1210, 1211, 3, 2, 2, 2, 1211, 1219, 7, 6, 2, 2, 1212, 1213, 5, 130, 66, 2, 1213, 1214, 7, 4, 2, 2, 1214, 1216, 3, 2, 2, 2, 1215, 1212, 3, 2, 2, 2, 1215, 1216, 3, 2, 2, 2, 1216, 1217, 3, 2, 2, 2, 1217, 1219, 5, 136, 69, 2, 1218, 1199, 3, 2, 2, 2, 1218, 1215, 3, 2, 2, 2, 1219, 1241, 3, 2, 2, 2, 1220, 1221, 12, 10, 2, 2, 1221, 1222, 7, 47, 2, 2, 1222, 1241, 5, 146, 74, 2, 1223, 1225, 12, 9, 2, 2, 1224, 1226, 7, 104, 2, 2, 1225, 1224, 3, 2, 2, 2, 1225, 1226, 3, 2, 2, 2, 1226, 1227, 3, 2, 2, 2, 1227, 1228, 9, 14, 2, 2, 1228, 1231, 5, 78, 40, 2, 1229, 1230, 7, 69, 2, 2, 1230, 1232, 5, 78, 40, 2, 1231, 1229, 3, 2, 2, 2, 1231, 1232, 3, 2, 2, 2, 1232, 1241, 3, 2, 2, 2, 1233, 1238, 12, 8, 2, 2, 1234, 1239, 7, 95, 2, 2, 1235, 1239, 7, 105, 2, 2, 1236, 1237, 7, 104, 2, 2, 1237, 1239, 7, 106, 2, 2, 1238, 1234, 3, 2, 2, 2, 1238, 1235, 3, 2, 2, 2, 1238, 1236, 3, 2, 2, 2, 1239, 1241, 3, 2, 2, 2, 1240, 1155, 3, 2, 2, 2, 1240, 1158, 3, 2, 2, 2, 1240, 1161, 3, 2, 2, 2, 1240, 1164, 3, 2, 2, 2, 1240, 1167, 3, 2, 2, 2, 1240, 1170, 3, 2, 2, 2, 1240, 1173, 3, 2, 2, 2, 1240, 1176, 3, 2, 2, 2, 1240, 1179, 3, 2, 2, 2, 1240, 1185, 3, 2, 2, 2, 1240, 1194, 3, 2, 2, 2, 1240, 1220, 3, 2, 2, 2, 1240, 1223, 3, 2, 2, 2, 1240, 1233, 3, 2, 2, 2, 1241, 1244, 3, 2, 2, 2, 1242, 1240, 3, 2, 2, 2, 1242, 1243, 3, 2, 2, 2, 1243, 79, 3, 2, 2, 2, 1244, 1242, 3, 2, 2, 2, 1245, 1246, 7, 119, 2, 2, 1246, 1258, 5, 148, 75, 2, 1247, 1248, 7, 5, 2, 2, 1248, 1253, 5, 142, 72, 2, 1249, 1250, 7, 7, 2, 2, 1250, 1252, 5, 142, 72, 2, 1251, 1249, 3, 2, 2, 2, 1252, 1255, 3, 2, 2, 2, 1253, 1251, 3, 2, 2, 2, 1253, 1254, 3, 2, 2, 2, 1254, 1256, 3, 2, 2, 2, 1255, 1253, 3, 2, 2, 2, 1256, 1257, 7, 6, 2, 2, 1257, 1259, 3, 2, 2, 2, 1258, 1247, 3, 2, 2, 2, 1258, 1259, 3, 2, 2, 2, 1259, 1278, 3, 2, 2, 2, 1260, 1261, 7, 109, 2, 2, 1261, 1270, 9, 15, 2, 2, 1262, 1263, 7, 131, 2, 2, 1263, 1271, 7, 106, 2, 2, 1264, 1265, 7, 131, 2, 2, 1265, 1271, 7, 58, 2, 2, 1266, 1271, 7, 43, 2, 2, 1267, 1271, 7, 125, 2, 2, 1268, 1269, 7, 103, 2, 2, 1269, 1271, 7, 28, 2, 2, 1270, 1262, 3, 2, 2, 2, 1270, 1264, 3, 2, 2, 2, 1270, 1266, 3, 2, 2, 2, 1270, 1267, 3, 2, 2, 2, 1270, 1268, 3, 2, 2, 2, 1271, 1275, 3, 2, 2, 2, 1272, 1273, 7, 101, 2, 2, 1273, 1275, 5, 126, 64, 2, 1274, 1260, 3, 2, 2, 2, 1274, 1272, 3, 2, 2, 2, 1275, 1277, 3, 2, 2, 2, 1276, 1274, 3, 2, 2, 2, 1277, 1280, 3, 2, 2, 2, 1278, 1276, 3, 2, 2, 2, 1278, 1279, 3, 2, 2, 2, 1279, 1291, 3, 2, 2, 2, 1280, 1278, 3, 2, 2, 2, 1281, 1283, 7, 104, 2, 2, 1282, 1281, 3, 2, 2, 2, 1282, 1283, 3, 2, 2, 2, 1283, 1284, 3, 2, 2, 2, 1284, 1289, 7, 59, 2, 2, 1285, 1286, 7, 88, 2, 2, 1286, 1290, 7, 60, 2, 2, 1287, 1288, 7, 88, 2, 2, 1288, 1290, 7, 84, 2, 2, 1289, 1285, 3, 2, 2, 2, 1289, 1287, 3, 2, 2, 2, 1289, 1290, 3, 2, 2, 2, 1290, 1292, 3, 2, 2, 2, 1291, 1282, 3, 2, 2, 2, 1291, 1292, 3, 2, 2, 2, 1292, 81, 3, 2, 2, 2, 1293, 1294, 7, 117, 2, 2, 1294, 1299, 7, 5, 2, 2, 1295, 1300, 7, 83, 2, 2, 1296, 1297, 9, 16, 2, 2, 1297, 1298, 7, 7, 2, 2, 1298, 1300, 5, 118, 60, 2, 1299, 1295, 3, 2, 2, 2, 1299, 1296, 3, 2, 2, 2, 1300, 1301, 3, 2, 2, 2, 1301, 1302, 7, 6, 2, 2, 1302, 83, 3, 2, 2, 2, 1303, 1306, 5, 142, 72, 2, 1304, 1305, 7, 47, 2, 2, 1305, 1307, 5, 146, 74, 2, 1306, 1304, 3, 2, 2, 2, 1306, 1307, 3, 2, 2, 2, 1307, 1309, 3, 2, 2, 2, 1308, 1310, 9, 7, 2, 2, 1309, 1308, 3, 2, 2, 2, 1309, 1310, 3, 2, 2, 2, 1310, 85, 3, 2, 2, 2, 1311, 1312, 7, 51, 2, 2, 1312, 1314, 5, 126, 64, 2, 1313, 1311, 3, 2, 2, 2, 1313, 1314, 3, 2, 2, 2, 1314, 1351, 3, 2, 2, 2, 1315, 1316, 7, 115, 2, 2, 1316, 1319, 7, 97, 2, 2, 1317, 1319, 7, 140, 2, 2, 1318, 1315, 3, 2, 2, 2, 1318, 1317, 3, 2, 2, 2, 1319, 1320, 3, 2, 2, 2, 1320, 1321, 7, 5, 2, 2, 1321, 1326, 5, 84, 43, 2, 1322, 1323, 7, 7, 2, 2, 1323, 1325, 5, 84, 43, 2, 1324, 1322, 3, 2, 2, 2, 1325, 1328, 3, 2, 2, 2, 1326, 1324, 3, 2, 2, 2, 1326, 1327, 3, 2, 2, 2, 1327, 1329, 3, 2, 2, 2, 1328, 1326, 3, 2, 2, 2, 1329, 1330, 7, 6, 2, 2, 1330, 1331, 5, 76, 39, 2, 1331, 1352, 3, 2, 2, 2, 1332, 1333, 7, 46, 2, 2, 1333, 1334, 7, 5, 2, 2, 1334, 1335, 5, 78, 40, 2, 1335, 1336, 7, 6, 2, 2, 1336, 1352, 3, 2, 2, 2, 1337, 1338, 7, 76, 2, 2, 1338, 1339, 7, 97, 2, 2, 1339, 1340, 7, 5, 2, 2, 1340, 1345, 5, 142, 72, 2, 1341, 1342, 7, 7, 2, 2, 1342, 1344, 5, 142, 72, 2, 1343, 1341, 3, 2, 2, 2, 1344, 1347, 3, 2, 2, 2, 1345, 1343, 3, 2, 2, 2, 1345, 1346, 3, 2, 2, 2, 1346, 1348, 3, 2, 2, 2, 1347, 1345, 3, 2, 2, 2, 1348, 1349, 7, 6, 2, 2, 1349, 1350, 5, 80, 41, 2, 1350, 1352, 3, 2, 2, 2, 1351, 1318, 3, 2, 2, 2, 1351, 1332, 3, 2, 2, 2, 1351, 1337, 3, 2, 2, 2, 1352, 87, 3, 2, 2, 2, 1353, 1355, 7, 149, 2, 2, 1354, 1356, 7, 118, 2, 2, 1355, 1354, 3, 2, 2, 2, 1355, 1356, 3, 2, 2, 2, 1356, 1357, 3, 2, 2, 2, 1357, 1362, 5, 96, 49, 2, 1358, 1359, 7, 7, 2, 2, 1359, 1361, 5, 96, 49, 2, 1360, 1358, 3, 2, 2, 2, 1361, 1364, 3, 2, 2, 2, 1362, 1360, 3, 2, 2, 2, 1362, 1363, 3, 2, 2, 2, 1363, 89, 3, 2, 2, 2, 1364, 1362, 3, 2, 2, 2, 1365, 1366, 5, 130, 66, 2, 1366, 1367, 7, 4, 2, 2, 1367, 1369, 3, 2, 2, 2, 1368, 1365, 3, 2, 2, 2, 1368, 1369, 3, 2, 2, 2, 1369, 1370, 3, 2, 2, 2, 1370, 1376, 5, 136, 69, 2, 1371, 1372, 7, 87, 2, 2, 1372, 1373, 7, 42, 2, 2, 1373, 1377, 5, 150, 76, 2, 1374, 1375, 7, 104, 2, 2, 1375, 1377, 7, 87, 2, 2, 1376, 1371, 3, 2, 2, 2, 1376, 1374, 3, 2, 2, 2, 1376, 1377, 3, 2, 2, 2, 1377, 91, 3, 2, 2, 2, 1378, 1381, 5, 78, 40, 2, 1379, 1380, 7, 47, 2, 2, 1380, 1382, 5, 146, 74, 2, 1381, 1379, 3, 2, 2, 2, 1381, 1382, 3, 2, 2, 2, 1382, 1384, 3, 2, 2, 2, 1383, 1385, 9, 7, 2, 2, 1384, 1383, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 93, 3, 2, 2, 2, 1386, 1390, 5, 112, 57, 2, 1387, 1390, 5, 126, 64, 2, 1388, 1390, 7, 154, 2, 2, 1389, 1386, 3, 2, 2, 2, 1389, 1387, 3, 2, 2, 2, 1389, 1388, 3, 2, 2, 2, 1390, 95, 3, 2, 2, 2, 1391, 1403, 5, 136, 69, 2, 1392, 1393, 7, 5, 2, 2, 1393, 1398, 5, 142, 72, 2, 1394, 1395, 7, 7, 2, 2, 1395, 1397, 5, 142, 72, 2, 1396, 1394, 3, 2, 2, 2, 1397, 1400, 3, 2, 2, 2, 1398, 1396, 3, 2, 2, 2, 1398, 1399, 3, 2, 2, 2, 1399, 1401, 3, 2, 2, 2, 1400, 1398, 3, 2, 2, 2, 1401, 1402, 7, 6, 2, 2, 1402, 1404, 3, 2, 2, 2, 1403, 1392, 3, 2, 2, 2, 1403, 1404, 3, 2, 2, 2, 1404, 1405, 3, 2, 2, 2, 1405, 1406, 7, 35, 2, 2, 1406, 1407, 7, 5, 2, 2, 1407, 1408, 5, 60, 31, 2, 1408, 1409, 7, 6, 2, 2, 1409, 97, 3, 2, 2, 2, 1410, 1423, 7, 9, 2, 2, 1411, 1412, 5, 136, 69, 2, 1412, 1413, 7, 4, 2, 2, 1413, 1414, 7, 9, 2, 2, 1414, 1423, 3, 2, 2, 2, 1415, 1420, 5, 78, 40, 2, 1416, 1418, 7, 35, 2, 2, 1417, 1416, 3, 2, 2, 2, 1417, 1418, 3, 2, 2, 2, 1418, 1419, 3, 2, 2, 2, 1419, 1421, 5, 122, 62, 2, 1420, 1417, 3, 2, 2, 2, 1420, 1421, 3, 2, 2, 2, 1421, 1423, 3, 2, 2, 2, 1422, 1410, 3, 2, 2, 2, 1422, 1411, 3, 2, 2, 2, 1422, 1415, 3, 2, 2, 2, 1423, 99, 3, 2, 2, 2, 1424, 1425, 5, 132, 67, 2, 1425, 1426, 7, 4, 2, 2, 1426, 1428, 3, 2, 2, 2, 1427, 1424, 3, 2, 2, 2, 1427, 1428, 3, 2, 2, 2, 1428, 1429, 3, 2, 2, 2, 1429, 1434, 5, 136, 69, 2, 1430, 1432, 7, 35, 2, 2, 1431, 1430, 3, 2, 2, 2, 1431, 1432, 3, 2, 2, 2, 1432, 1433, 3, 2, 2, 2, 1433, 1435, 5, 162, 82, 2, 1434, 1431, 3, 2, 2, 2, 1434, 1435, 3, 2, 2, 2, 1435, 1441, 3, 2, 2, 2, 1436, 1437, 7, 87, 2, 2, 1437, 1438, 7, 42, 2, 2, 1438, 1442, 5, 150, 76, 2, 1439, 1440, 7, 104, 2, 2, 1440, 1442, 7, 87, 2, 2, 1441, 1436, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1441, 1442, 3, 2, 2, 2, 1442, 1491, 3, 2, 2, 2, 1443, 1444, 5, 132, 67, 2, 1444, 1445, 7, 4, 2, 2, 1445, 1447, 3, 2, 2, 2, 1446, 1443, 3, 2, 2, 2, 1446, 1447, 3, 2, 2, 2, 1447, 1448, 3, 2, 2, 2, 1448, 1449, 5, 134, 68, 2, 1449, 1458, 7, 5, 2, 2, 1450, 1455, 5, 78, 40, 2, 1451, 1452, 7, 7, 2, 2, 1452, 1454, 5, 78, 40, 2, 1453, 1451, 3, 2, 2, 2, 1454, 1457, 3, 2, 2, 2, 1455, 1453, 3, 2, 2, 2, 1455, 1456, 3, 2, 2, 2, 1456, 1459, 3, 2, 2, 2, 1457, 1455, 3, 2, 2, 2, 1458, 1450, 3, 2, 2, 2, 1458, 1459, 3, 2, 2, 2, 1459, 1460, 3, 2, 2, 2, 1460, 1465, 7, 6, 2, 2, 1461, 1463, 7, 35, 2, 2, 1462, 1461, 3, 2, 2, 2, 1462, 1463, 3, 2, 2, 2, 1463, 1464, 3, 2, 2, 2, 1464, 1466, 5, 162, 82, 2, 1465, 1462, 3, 2, 2, 2, 1465, 1466, 3, 2, 2, 2, 1466, 1491, 3, 2, 2, 2, 1467, 1477, 7, 5, 2, 2, 1468, 1473, 5, 100, 51, 2, 1469, 1470, 7, 7, 2, 2, 1470, 1472, 5, 100, 51, 2, 1471, 1469, 3, 2, 2, 2, 1472, 1475, 3, 2, 2, 2, 1473, 1471, 3, 2, 2, 2, 1473, 1474, 3, 2, 2, 2, 1474, 1478, 3, 2, 2, 2, 1475, 1473, 3, 2, 2, 2, 1476, 1478, 5, 102, 52, 2, 1477, 1468, 3, 2, 2, 2, 1477, 1476, 3, 2, 2, 2, 1478, 1479, 3, 2, 2, 2, 1479, 1480, 7, 6, 2, 2, 1480, 1491, 3, 2, 2, 2, 1481, 1482, 7, 5, 2, 2, 1482, 1483, 5, 60, 31, 2, 1483, 1488, 7, 6, 2, 2, 1484, 1486, 7, 35, 2, 2, 1485, 1484, 3, 2, 2, 2, 1485, 1486, 3, 2, 2, 2, 1486, 1487, 3, 2, 2, 2, 1487, 1489, 5, 162, 82, 2, 1488, 1485, 3, 2, 2, 2, 1488, 1489, 3, 2, 2, 2, 1489, 1491, 3, 2, 2, 2, 1490, 1427, 3, 2, 2, 2, 1490, 1446, 3, 2, 2, 2, 1490, 1467, 3, 2, 2, 2, 1490, 1481, 3, 2, 2, 2, 1491, 101, 3, 2, 2, 2, 1492, 1499, 5, 100, 51, 2, 1493, 1494, 5, 104, 53, 2, 1494, 1495, 5, 100, 51, 2, 1495, 1496, 5, 106, 54, 2, 1496, 1498, 3, 2, 2, 2, 1497, 1493, 3, 2, 2, 2, 1498, 1501, 3, 2, 2, 2, 1499, 1497, 3, 2, 2, 2, 1499, 1500, 3, 2, 2, 2, 1500, 103, 3, 2, 2, 2, 1501, 1499, 3, 2, 2, 2, 1502, 1516, 7, 7, 2, 2, 1503, 1505, 7, 102, 2, 2, 1504, 1503, 3, 2, 2, 2, 1504, 1505, 3, 2, 2, 2, 1505, 1512, 3, 2, 2, 2, 1506, 1508, 7, 98, 2, 2, 1507, 1509, 7, 112, 2, 2, 1508, 1507, 3, 2, 2, 2, 1508, 1509, 3, 2, 2, 2, 1509, 1513, 3, 2, 2, 2, 1510, 1513, 7, 89, 2, 2, 1511, 1513, 7, 53, 2, 2, 1512, 1506, 3, 2, 2, 2, 1512, 1510, 3, 2, 2, 2, 1512, 1511, 3, 2, 2, 2, 1512, 1513, 3, 2, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1516, 7, 96, 2, 2, 1515, 1502, 3, 2, 2, 2, 1515, 1504, 3, 2, 2, 2, 1516, 105, 3, 2, 2, 2, 1517, 1518, 7, 109, 2, 2, 1518, 1532, 5, 78, 40, 2, 1519, 1520, 7, 142, 2, 2, 1520, 1521, 7, 5, 2, 2, 1521, 1526, 5, 142, 72, 2, 1522, 1523, 7, 7, 2, 2, 1523, 1525, 5, 142, 72, 2, 1524, 1522, 3, 2, 2, 2, 1525, 1528, 3, 2, 2, 2, 1526, 1524, 3, 2, 2, 2, 1526, 1527, 3, 2, 2, 2, 1527, 1529, 3, 2, 2, 2, 1528, 1526, 3, 2, 2, 2, 1529, 1530, 7, 6, 2, 2, 1530, 1532, 3, 2, 2, 2, 1531, 1517, 3, 2, 2, 2, 1531, 1519, 3, 2, 2, 2, 1531, 1532, 3, 2, 2, 2, 1532, 107, 3, 2, 2, 2, 1533, 1535, 7, 130, 2, 2, 1534, 1536, 9, 6, 2, 2, 1535, 1534, 3, 2, 2, 2, 1535, 1536, 3, 2, 2, 2, 1536, 1537, 3, 2, 2, 2, 1537, 1542, 5, 98, 50, 2, 1538, 1539, 7, 7, 2, 2, 1539, 1541, 5, 98, 50, 2, 1540, 1538, 3, 2, 2, 2, 1541, 1544, 3, 2, 2, 2, 1542, 1540, 3, 2, 2, 2, 1542, 1543, 3, 2, 2, 2, 1543, 1557, 3, 2, 2, 2, 1544, 1542, 3, 2, 2, 2, 1545, 1555, 7, 77, 2, 2, 1546, 1551, 5, 100, 51, 2, 1547, 1548, 7, 7, 2, 2, 1548, 1550, 5, 100, 51, 2, 1549, 1547, 3, 2, 2, 2, 1550, 1553, 3, 2, 2, 2, 1551, 1549, 3, 2, 2, 2, 1551, 1552, 3, 2, 2, 2, 1552, 1556, 3, 2, 2, 2, 1553, 1551, 3, 2, 2, 2, 1554, 1556, 5, 102, 52, 2, 1555, 1546, 3, 2, 2, 2, 1555, 1554, 3, 2, 2, 2, 1556, 1558, 3, 2, 2, 2, 1557, 1545, 3, 2, 2, 2, 1557, 1558, 3, 2, 2, 2, 1558, 1561, 3, 2, 2, 2, 1559, 1560, 7, 148, 2, 2, 1560, 1562, 5, 78, 40, 2, 1561, 1559, 3, 2, 2, 2, 1561, 1562, 3, 2, 2, 2, 1562, 1577, 3, 2, 2, 2, 1563, 1564, 7, 80, 2, 2, 1564, 1565, 7, 42, 2, 2, 1565, 1570, 5, 78, 40, 2, 1566, 1567, 7, 7, 2, 2, 1567, 1569, 5, 78, 40, 2, 1568, 1566, 3, 2, 2, 2, 1569, 1572, 3, 2, 2, 2, 1570, 1568, 3, 2, 2, 2, 1570, 1571, 3, 2, 2, 2, 1571, 1575, 3, 2, 2, 2, 1572, 1570, 3, 2, 2, 2, 1573, 1574, 7, 81, 2, 2, 1574, 1576, 5, 78, 40, 2, 1575, 1573, 3, 2, 2, 2, 1575, 1576, 3, 2, 2, 2, 1576, 1578, 3, 2, 2, 2, 1577, 1563, 3, 2, 2, 2, 1577, 1578, 3, 2, 2, 2, 1578, 1608, 3, 2, 2, 2, 1579, 1580, 7, 144, 2, 2, 1580, 1581, 7, 5, 2, 2, 1581, 1586, 5, 78, 40, 2, 1582, 1583, 7, 7, 2, 2, 1583, 1585, 5, 78, 40, 2, 1584, 1582, 3, 2, 2, 2, 1585, 1588, 3, 2, 2, 2, 1586, 1584, 3, 2, 2, 2, 1586, 1587, 3, 2, 2, 2, 1587, 1589, 3, 2, 2, 2, 1588, 1586, 3, 2, 2, 2, 1589, 1604, 7, 6, 2, 2, 1590, 1591, 7, 7, 2, 2, 1591, 1592, 7, 5, 2, 2, 1592, 1597, 5, 78, 40, 2, 1593, 1594, 7, 7, 2, 2, 1594, 1596, 5, 78, 40, 2, 1595, 1593, 3, 2, 2, 2, 1596, 1599, 3, 2, 2, 2, 1597, 1595, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 1600, 3, 2, 2, 2, 1599, 1597, 3, 2, 2, 2, 1600, 1601, 7, 6, 2, 2, 1601, 1603, 3, 2, 2, 2, 1602, 1590, 3, 2, 2, 2, 1603, 1606, 3, 2, 2, 2, 1604, 1602, 3, 2, 2, 2, 1604, 1605, 3, 2, 2, 2, 1605, 1608, 3, 2, 2, 2, 1606, 1604, 3, 2, 2, 2, 1607, 1533, 3, 2, 2, 2, 1607, 1579, 3, 2, 2, 2, 1608, 109, 3, 2, 2, 2, 1609, 1615, 7, 139, 2, 2, 1610, 1611, 7, 139, 2, 2, 1611, 1615, 7, 31, 2, 2, 1612, 1615, 7, 92, 2, 2, 1613, 1615, 7, 70, 2, 2, 1614, 1609, 3, 2, 2, 2, 1614, 1610, 3, 2, 2, 2, 1614, 1612, 3, 2, 2, 2, 1614, 1613, 3, 2, 2, 2, 1615, 111, 3, 2, 2, 2, 1616, 1618, 9, 10, 2, 2, 1617, 1616, 3, 2, 2, 2, 1617, 1618, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 1620, 7, 152, 2, 2, 1620, 113, 3, 2, 2, 2, 1621, 1622, 9, 17, 2, 2, 1622, 115, 3, 2, 2, 2, 1623, 1624, 9, 18, 2, 2, 1624, 117, 3, 2, 2, 2, 1625, 1626, 7, 154, 2, 2, 1626, 119, 3, 2, 2, 2, 1627, 1630, 5, 78, 40, 2, 1628, 1630, 5, 70, 36, 2, 1629, 1627, 3, 2, 2, 2, 1629, 1628, 3, 2, 2, 2, 1630, 121, 3, 2, 2, 2, 1631, 1632, 9, 19, 2, 2, 1632, 123, 3, 2, 2, 2, 1633, 1634, 9, 20, 2, 2, 1634, 125, 3, 2, 2, 2, 1635, 1636, 5, 166, 84, 2, 1636, 127, 3, 2, 2, 2, 1637, 1638, 5, 166, 84, 2, 1638, 129, 3, 2, 2, 2, 1639, 1640, 5, 166, 84, 2, 1640, 131, 3, 2, 2, 2, 1641, 1642, 5, 166, 84, 2, 1642, 133, 3, 2, 2, 2, 1643, 1644, 5, 166, 84, 2, 1644, 135, 3, 2, 2, 2, 1645, 1646, 5, 166, 84, 2, 1646, 137, 3, 2, 2, 2, 1647, 1648, 5, 166, 84, 2, 1648, 139, 3, 2, 2, 2, 1649, 1650, 5, 166, 84, 2, 1650, 141, 3, 2, 2, 2, 1651, 1652, 5, 166, 84, 2, 1652, 143, 3, 2, 2, 2, 1653, 1654, 5, 166, 84, 2, 1654, 145, 3, 2, 2, 2, 1655, 1656, 5, 166, 84, 2, 1656, 147, 3, 2, 2, 2, 1657, 1658, 5, 166, 84, 2, 1658, 149, 3, 2, 2, 2, 1659, 1660, 5, 166, 84, 2, 1660, 151, 3, 2, 2, 2, 1661, 1662, 5, 166, 84, 2, 1662, 153, 3, 2, 2, 2, 1663, 1664, 5, 166, 84, 2, 1664, 155, 3, 2, 2, 2, 1665, 1666, 5, 166, 84, 2, 1666, 157, 3, 2, 2, 2, 1667, 1668, 5, 166, 84, 2, 1668, 159, 3, 2, 2, 2, 1669, 1670, 5, 166, 84, 2, 1670, 161, 3, 2, 2, 2, 1671, 1678, 7, 151, 2, 2, 1672, 1678, 7, 154, 2, 2, 1673, 1674, 7, 5, 2, 2, 1674, 1675, 5, 162, 82, 2, 1675, 1676, 7, 6, 2, 2, 1676, 1678, 3, 2, 2, 2, 1677, 1671, 3, 2, 2, 2, 1677, 1672, 3, 2, 2, 2, 1677, 1673, 3, 2, 2, 2, 1678, 163, 3, 2, 2, 2, 1679, 1680, 5, 166, 84, 2, 1680, 165, 3, 2, 2, 2, 1681, 1689, 7, 151, 2, 2, 1682, 1689, 5, 124, 63, 2, 1683, 1689, 7, 154, 2, 2, 1684, 1685, 7, 5, 2, 2, 1685, 1686, 5, 166, 84, 2, 1686, 1687, 7, 6, 2, 2, 1687, 1689, 3, 2, 2, 2, 1688, 1681, 3, 2, 2, 2, 1688, 1682, 3, 2, 2, 2, 1688, 1683, 3, 2, 2, 2, 1688, 1684, 3, 2, 2, 2, 1689, 167, 3, 2, 2, 2, 239, 171, 179, 186, 191, 197, 203, 205, 237, 244, 252, 260, 263, 272, 276, 284, 288, 290, 295, 297, 300, 305, 309, 314, 323, 326, 332, 334, 338, 344, 349, 360, 366, 370, 376, 381, 390, 397, 403, 407, 411, 417, 422, 429, 440, 443, 445, 451, 457, 461, 468, 474, 480, 486, 491, 503, 508, 519, 524, 527, 534, 537, 544, 553, 556, 562, 564, 568, 576, 581, 589, 594, 602, 607, 615, 620, 625, 633, 643, 646, 652, 654, 657, 676, 682, 691, 696, 705, 716, 723, 729, 735, 744, 751, 755, 757, 761, 768, 770, 774, 777, 783, 793, 796, 802, 804, 807, 815, 825, 828, 834, 836, 840, 847, 856, 860, 862, 866, 875, 880, 882, 891, 902, 909, 912, 915, 928, 942, 947, 950, 963, 977, 982, 991, 994, 1000, 1002, 1008, 1013, 1019, 1031, 1035, 1040, 1044, 1047, 1065, 1070, 1075, 1083, 1088, 1097, 1104, 1108, 1124, 1127, 1135, 1144, 1148, 1153, 1182, 1187, 1196, 1206, 1209, 1215, 1218, 1225, 1231, 1238, 1240, 1242, 1253, 1258, 1270, 1274, 1278, 1282, 1289, 1291, 1299, 1306, 1309, 1313, 1318, 1326, 1345, 1351, 1355, 1362, 1368, 1376, 1381, 1384, 1389, 1398, 1403, 1417, 1420, 1422, 1427, 1431, 1434, 1441, 1446, 1455, 1458, 1462, 1465, 1473, 1477, 1485, 1488, 1490, 1499, 1504, 1508, 1512, 1515, 1526, 1531, 1535, 1542, 1551, 1555, 1557, 1561, 1570, 1575, 1577, 1586, 1597, 1604, 1607, 1614, 1617, 1629, 1677, 1688] \ No newline at end of file diff --git a/internal/engine/sqlite/parser/SQLite.tokens b/internal/engine/sqlite/parser/SQLite.tokens deleted file mode 100644 index c57b62b5ad..0000000000 --- a/internal/engine/sqlite/parser/SQLite.tokens +++ /dev/null @@ -1,181 +0,0 @@ -SCOL=1 -DOT=2 -OPEN_PAR=3 -CLOSE_PAR=4 -COMMA=5 -ASSIGN=6 -STAR=7 -PLUS=8 -MINUS=9 -TILDE=10 -PIPE2=11 -DIV=12 -MOD=13 -LT2=14 -GT2=15 -AMP=16 -PIPE=17 -LT=18 -LT_EQ=19 -GT=20 -GT_EQ=21 -EQ=22 -NOT_EQ1=23 -NOT_EQ2=24 -K_ABORT=25 -K_ACTION=26 -K_ADD=27 -K_AFTER=28 -K_ALL=29 -K_ALTER=30 -K_ANALYZE=31 -K_AND=32 -K_AS=33 -K_ASC=34 -K_ATTACH=35 -K_AUTOINCREMENT=36 -K_BEFORE=37 -K_BEGIN=38 -K_BETWEEN=39 -K_BY=40 -K_CASCADE=41 -K_CASE=42 -K_CAST=43 -K_CHECK=44 -K_COLLATE=45 -K_COLUMN=46 -K_COMMIT=47 -K_CONFLICT=48 -K_CONSTRAINT=49 -K_CREATE=50 -K_CROSS=51 -K_CURRENT_DATE=52 -K_CURRENT_TIME=53 -K_CURRENT_TIMESTAMP=54 -K_DATABASE=55 -K_DEFAULT=56 -K_DEFERRABLE=57 -K_DEFERRED=58 -K_DELETE=59 -K_DESC=60 -K_DETACH=61 -K_DISTINCT=62 -K_DROP=63 -K_EACH=64 -K_ELSE=65 -K_END=66 -K_ESCAPE=67 -K_EXCEPT=68 -K_EXCLUSIVE=69 -K_EXISTS=70 -K_EXPLAIN=71 -K_FAIL=72 -K_FOR=73 -K_FOREIGN=74 -K_FROM=75 -K_FULL=76 -K_GLOB=77 -K_GROUP=78 -K_HAVING=79 -K_IF=80 -K_IGNORE=81 -K_IMMEDIATE=82 -K_IN=83 -K_INDEX=84 -K_INDEXED=85 -K_INITIALLY=86 -K_INNER=87 -K_INSERT=88 -K_INSTEAD=89 -K_INTERSECT=90 -K_INTO=91 -K_IS=92 -K_ISNULL=93 -K_JOIN=94 -K_KEY=95 -K_LEFT=96 -K_LIKE=97 -K_LIMIT=98 -K_MATCH=99 -K_NATURAL=100 -K_NO=101 -K_NOT=102 -K_NOTNULL=103 -K_NULL=104 -K_OF=105 -K_OFFSET=106 -K_ON=107 -K_OR=108 -K_ORDER=109 -K_OUTER=110 -K_PLAN=111 -K_PRAGMA=112 -K_PRIMARY=113 -K_QUERY=114 -K_RAISE=115 -K_RECURSIVE=116 -K_REFERENCES=117 -K_REGEXP=118 -K_REINDEX=119 -K_RELEASE=120 -K_RENAME=121 -K_REPLACE=122 -K_RESTRICT=123 -K_RIGHT=124 -K_ROLLBACK=125 -K_ROW=126 -K_SAVEPOINT=127 -K_SELECT=128 -K_SET=129 -K_TABLE=130 -K_TEMP=131 -K_TEMPORARY=132 -K_THEN=133 -K_TO=134 -K_TRANSACTION=135 -K_TRIGGER=136 -K_UNION=137 -K_UNIQUE=138 -K_UPDATE=139 -K_USING=140 -K_VACUUM=141 -K_VALUES=142 -K_VIEW=143 -K_VIRTUAL=144 -K_WHEN=145 -K_WHERE=146 -K_WITH=147 -K_WITHOUT=148 -IDENTIFIER=149 -NUMERIC_LITERAL=150 -BIND_PARAMETER=151 -STRING_LITERAL=152 -BLOB_LITERAL=153 -SINGLE_LINE_COMMENT=154 -MULTILINE_COMMENT=155 -SPACES=156 -UNEXPECTED_CHAR=157 -';'=1 -'.'=2 -'('=3 -')'=4 -','=5 -'='=6 -'*'=7 -'+'=8 -'-'=9 -'~'=10 -'||'=11 -'/'=12 -'%'=13 -'<<'=14 -'>>'=15 -'&'=16 -'|'=17 -'<'=18 -'<='=19 -'>'=20 -'>='=21 -'=='=22 -'!='=23 -'<>'=24 diff --git a/internal/engine/sqlite/parser/SQLiteLexer.g4 b/internal/engine/sqlite/parser/SQLiteLexer.g4 new file mode 100644 index 0000000000..0dd1918e58 --- /dev/null +++ b/internal/engine/sqlite/parser/SQLiteLexer.g4 @@ -0,0 +1,267 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020 by Martin Mirchev + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Project : sqlite-parser; an ANTLR4 grammar for SQLite https://github.com/bkiers/sqlite-parser + * Developed by : Bart Kiers, bart@big-o.nl + */ + +// $antlr-format alignTrailingComments on, columnLimit 150, maxEmptyLinesToKeep 1, reflowComments off, useTab off +// $antlr-format allowShortRulesOnASingleLine on, alignSemicolons ownLine + +lexer grammar SQLiteLexer; + +SCOL: ';'; +DOT: '.'; +OPEN_PAR: '('; +CLOSE_PAR: ')'; +COMMA: ','; +ASSIGN: '='; +STAR: '*'; +PLUS: '+'; +MINUS: '-'; +TILDE: '~'; +PIPE2: '||'; +DIV: '/'; +MOD: '%'; +LT2: '<<'; +GT2: '>>'; +AMP: '&'; +PIPE: '|'; +LT: '<'; +LT_EQ: '<='; +GT: '>'; +GT_EQ: '>='; +EQ: '=='; +NOT_EQ1: '!='; +NOT_EQ2: '<>'; + +// http://www.sqlite.org/lang_keywords.html +ABORT_: A B O R T; +ACTION_: A C T I O N; +ADD_: A D D; +AFTER_: A F T E R; +ALL_: A L L; +ALTER_: A L T E R; +ANALYZE_: A N A L Y Z E; +AND_: A N D; +AS_: A S; +ASC_: A S C; +ATTACH_: A T T A C H; +AUTOINCREMENT_: A U T O I N C R E M E N T; +BEFORE_: B E F O R E; +BEGIN_: B E G I N; +BETWEEN_: B E T W E E N; +BY_: B Y; +CASCADE_: C A S C A D E; +CASE_: C A S E; +CAST_: C A S T; +CHECK_: C H E C K; +COLLATE_: C O L L A T E; +COLUMN_: C O L U M N; +COMMIT_: C O M M I T; +CONFLICT_: C O N F L I C T; +CONSTRAINT_: C O N S T R A I N T; +CREATE_: C R E A T E; +CROSS_: C R O S S; +CURRENT_DATE_: C U R R E N T '_' D A T E; +CURRENT_TIME_: C U R R E N T '_' T I M E; +CURRENT_TIMESTAMP_: C U R R E N T '_' T I M E S T A M P; +DATABASE_: D A T A B A S E; +DEFAULT_: D E F A U L T; +DEFERRABLE_: D E F E R R A B L E; +DEFERRED_: D E F E R R E D; +DELETE_: D E L E T E; +DESC_: D E S C; +DETACH_: D E T A C H; +DISTINCT_: D I S T I N C T; +DROP_: D R O P; +EACH_: E A C H; +ELSE_: E L S E; +END_: E N D; +ESCAPE_: E S C A P E; +EXCEPT_: E X C E P T; +EXCLUSIVE_: E X C L U S I V E; +EXISTS_: E X I S T S; +EXPLAIN_: E X P L A I N; +FAIL_: F A I L; +FOR_: F O R; +FOREIGN_: F O R E I G N; +FROM_: F R O M; +FULL_: F U L L; +GLOB_: G L O B; +GROUP_: G R O U P; +HAVING_: H A V I N G; +IF_: I F; +IGNORE_: I G N O R E; +IMMEDIATE_: I M M E D I A T E; +IN_: I N; +INDEX_: I N D E X; +INDEXED_: I N D E X E D; +INITIALLY_: I N I T I A L L Y; +INNER_: I N N E R; +INSERT_: I N S E R T; +INSTEAD_: I N S T E A D; +INTERSECT_: I N T E R S E C T; +INTO_: I N T O; +IS_: I S; +ISNULL_: I S N U L L; +JOIN_: J O I N; +KEY_: K E Y; +LEFT_: L E F T; +LIKE_: L I K E; +LIMIT_: L I M I T; +MATCH_: M A T C H; +NATURAL_: N A T U R A L; +NO_: N O; +NOT_: N O T; +NOTNULL_: N O T N U L L; +NULL_: N U L L; +OF_: O F; +OFFSET_: O F F S E T; +ON_: O N; +OR_: O R; +ORDER_: O R D E R; +OUTER_: O U T E R; +PLAN_: P L A N; +PRAGMA_: P R A G M A; +PRIMARY_: P R I M A R Y; +QUERY_: Q U E R Y; +RAISE_: R A I S E; +RECURSIVE_: R E C U R S I V E; +REFERENCES_: R E F E R E N C E S; +REGEXP_: R E G E X P; +REINDEX_: R E I N D E X; +RELEASE_: R E L E A S E; +RENAME_: R E N A M E; +REPLACE_: R E P L A C E; +RESTRICT_: R E S T R I C T; +RIGHT_: R I G H T; +ROLLBACK_: R O L L B A C K; +ROW_: R O W; +ROWS_: R O W S; +SAVEPOINT_: S A V E P O I N T; +SELECT_: S E L E C T; +SET_: S E T; +TABLE_: T A B L E; +TEMP_: T E M P; +TEMPORARY_: T E M P O R A R Y; +THEN_: T H E N; +TO_: T O; +TRANSACTION_: T R A N S A C T I O N; +TRIGGER_: T R I G G E R; +UNION_: U N I O N; +UNIQUE_: U N I Q U E; +UPDATE_: U P D A T E; +USING_: U S I N G; +VACUUM_: V A C U U M; +VALUES_: V A L U E S; +VIEW_: V I E W; +VIRTUAL_: V I R T U A L; +WHEN_: W H E N; +WHERE_: W H E R E; +WITH_: W I T H; +WITHOUT_: W I T H O U T; +FIRST_VALUE_: F I R S T '_' V A L U E; +OVER_: O V E R; +PARTITION_: P A R T I T I O N; +RANGE_: R A N G E; +PRECEDING_: P R E C E D I N G; +UNBOUNDED_: U N B O U N D E D; +CURRENT_: C U R R E N T; +FOLLOWING_: F O L L O W I N G; +CUME_DIST_: C U M E '_' D I S T; +DENSE_RANK_: D E N S E '_' R A N K; +LAG_: L A G; +LAST_VALUE_: L A S T '_' V A L U E; +LEAD_: L E A D; +NTH_VALUE_: N T H '_' V A L U E; +NTILE_: N T I L E; +PERCENT_RANK_: P E R C E N T '_' R A N K; +RANK_: R A N K; +ROW_NUMBER_: R O W '_' N U M B E R; +GENERATED_: G E N E R A T E D; +ALWAYS_: A L W A Y S; +STORED_: S T O R E D; +TRUE_: T R U E; +FALSE_: F A L S E; +WINDOW_: W I N D O W; +NULLS_: N U L L S; +FIRST_: F I R S T; +LAST_: L A S T; +FILTER_: F I L T E R; +GROUPS_: G R O U P S; +EXCLUDE_: E X C L U D E; +TIES_: T I E S; +OTHERS_: O T H E R S; +DO_: D O; +NOTHING_: N O T H I N G; + +IDENTIFIER: + '"' (~'"' | '""')* '"' + | '`' (~'`' | '``')* '`' + | '[' ~']'* ']' + | [a-zA-Z_] [a-zA-Z_0-9]* +; // TODO check: needs more chars in set + +NUMERIC_LITERAL: ((DIGIT+ ('.' DIGIT*)?) | ('.' DIGIT+)) (E [-+]? DIGIT+)? | '0x' HEX_DIGIT+; + +BIND_PARAMETER: '?' DIGIT* | [:@$] IDENTIFIER; + +STRING_LITERAL: '\'' ( ~'\'' | '\'\'')* '\''; + +BLOB_LITERAL: X STRING_LITERAL; + +SINGLE_LINE_COMMENT: '--' ~[\r\n]* (('\r'? '\n') | EOF) -> channel(HIDDEN); + +MULTILINE_COMMENT: '/*' .*? '*/' -> channel(HIDDEN); + +SPACES: [ \u000B\t\r\n] -> channel(HIDDEN); + +UNEXPECTED_CHAR: .; + +fragment HEX_DIGIT: [0-9a-fA-F]; +fragment DIGIT: [0-9]; + +fragment A: [aA]; +fragment B: [bB]; +fragment C: [cC]; +fragment D: [dD]; +fragment E: [eE]; +fragment F: [fF]; +fragment G: [gG]; +fragment H: [hH]; +fragment I: [iI]; +fragment J: [jJ]; +fragment K: [kK]; +fragment L: [lL]; +fragment M: [mM]; +fragment N: [nN]; +fragment O: [oO]; +fragment P: [pP]; +fragment Q: [qQ]; +fragment R: [rR]; +fragment S: [sS]; +fragment T: [tT]; +fragment U: [uU]; +fragment V: [vV]; +fragment W: [wW]; +fragment X: [xX]; +fragment Y: [yY]; +fragment Z: [zZ]; diff --git a/internal/engine/sqlite/parser/SQLiteLexer.interp b/internal/engine/sqlite/parser/SQLiteLexer.interp index 05582eafb5..fdbe566ea8 100644 --- a/internal/engine/sqlite/parser/SQLiteLexer.interp +++ b/internal/engine/sqlite/parser/SQLiteLexer.interp @@ -157,6 +157,41 @@ null null null null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null token symbolic names: null @@ -184,130 +219,165 @@ GT_EQ EQ NOT_EQ1 NOT_EQ2 -K_ABORT -K_ACTION -K_ADD -K_AFTER -K_ALL -K_ALTER -K_ANALYZE -K_AND -K_AS -K_ASC -K_ATTACH -K_AUTOINCREMENT -K_BEFORE -K_BEGIN -K_BETWEEN -K_BY -K_CASCADE -K_CASE -K_CAST -K_CHECK -K_COLLATE -K_COLUMN -K_COMMIT -K_CONFLICT -K_CONSTRAINT -K_CREATE -K_CROSS -K_CURRENT_DATE -K_CURRENT_TIME -K_CURRENT_TIMESTAMP -K_DATABASE -K_DEFAULT -K_DEFERRABLE -K_DEFERRED -K_DELETE -K_DESC -K_DETACH -K_DISTINCT -K_DROP -K_EACH -K_ELSE -K_END -K_ESCAPE -K_EXCEPT -K_EXCLUSIVE -K_EXISTS -K_EXPLAIN -K_FAIL -K_FOR -K_FOREIGN -K_FROM -K_FULL -K_GLOB -K_GROUP -K_HAVING -K_IF -K_IGNORE -K_IMMEDIATE -K_IN -K_INDEX -K_INDEXED -K_INITIALLY -K_INNER -K_INSERT -K_INSTEAD -K_INTERSECT -K_INTO -K_IS -K_ISNULL -K_JOIN -K_KEY -K_LEFT -K_LIKE -K_LIMIT -K_MATCH -K_NATURAL -K_NO -K_NOT -K_NOTNULL -K_NULL -K_OF -K_OFFSET -K_ON -K_OR -K_ORDER -K_OUTER -K_PLAN -K_PRAGMA -K_PRIMARY -K_QUERY -K_RAISE -K_RECURSIVE -K_REFERENCES -K_REGEXP -K_REINDEX -K_RELEASE -K_RENAME -K_REPLACE -K_RESTRICT -K_RIGHT -K_ROLLBACK -K_ROW -K_SAVEPOINT -K_SELECT -K_SET -K_TABLE -K_TEMP -K_TEMPORARY -K_THEN -K_TO -K_TRANSACTION -K_TRIGGER -K_UNION -K_UNIQUE -K_UPDATE -K_USING -K_VACUUM -K_VALUES -K_VIEW -K_VIRTUAL -K_WHEN -K_WHERE -K_WITH -K_WITHOUT +ABORT_ +ACTION_ +ADD_ +AFTER_ +ALL_ +ALTER_ +ANALYZE_ +AND_ +AS_ +ASC_ +ATTACH_ +AUTOINCREMENT_ +BEFORE_ +BEGIN_ +BETWEEN_ +BY_ +CASCADE_ +CASE_ +CAST_ +CHECK_ +COLLATE_ +COLUMN_ +COMMIT_ +CONFLICT_ +CONSTRAINT_ +CREATE_ +CROSS_ +CURRENT_DATE_ +CURRENT_TIME_ +CURRENT_TIMESTAMP_ +DATABASE_ +DEFAULT_ +DEFERRABLE_ +DEFERRED_ +DELETE_ +DESC_ +DETACH_ +DISTINCT_ +DROP_ +EACH_ +ELSE_ +END_ +ESCAPE_ +EXCEPT_ +EXCLUSIVE_ +EXISTS_ +EXPLAIN_ +FAIL_ +FOR_ +FOREIGN_ +FROM_ +FULL_ +GLOB_ +GROUP_ +HAVING_ +IF_ +IGNORE_ +IMMEDIATE_ +IN_ +INDEX_ +INDEXED_ +INITIALLY_ +INNER_ +INSERT_ +INSTEAD_ +INTERSECT_ +INTO_ +IS_ +ISNULL_ +JOIN_ +KEY_ +LEFT_ +LIKE_ +LIMIT_ +MATCH_ +NATURAL_ +NO_ +NOT_ +NOTNULL_ +NULL_ +OF_ +OFFSET_ +ON_ +OR_ +ORDER_ +OUTER_ +PLAN_ +PRAGMA_ +PRIMARY_ +QUERY_ +RAISE_ +RECURSIVE_ +REFERENCES_ +REGEXP_ +REINDEX_ +RELEASE_ +RENAME_ +REPLACE_ +RESTRICT_ +RIGHT_ +ROLLBACK_ +ROW_ +ROWS_ +SAVEPOINT_ +SELECT_ +SET_ +TABLE_ +TEMP_ +TEMPORARY_ +THEN_ +TO_ +TRANSACTION_ +TRIGGER_ +UNION_ +UNIQUE_ +UPDATE_ +USING_ +VACUUM_ +VALUES_ +VIEW_ +VIRTUAL_ +WHEN_ +WHERE_ +WITH_ +WITHOUT_ +FIRST_VALUE_ +OVER_ +PARTITION_ +RANGE_ +PRECEDING_ +UNBOUNDED_ +CURRENT_ +FOLLOWING_ +CUME_DIST_ +DENSE_RANK_ +LAG_ +LAST_VALUE_ +LEAD_ +NTH_VALUE_ +NTILE_ +PERCENT_RANK_ +RANK_ +ROW_NUMBER_ +GENERATED_ +ALWAYS_ +STORED_ +TRUE_ +FALSE_ +WINDOW_ +NULLS_ +FIRST_ +LAST_ +FILTER_ +GROUPS_ +EXCLUDE_ +TIES_ +OTHERS_ +DO_ +NOTHING_ IDENTIFIER NUMERIC_LITERAL BIND_PARAMETER @@ -343,130 +413,165 @@ GT_EQ EQ NOT_EQ1 NOT_EQ2 -K_ABORT -K_ACTION -K_ADD -K_AFTER -K_ALL -K_ALTER -K_ANALYZE -K_AND -K_AS -K_ASC -K_ATTACH -K_AUTOINCREMENT -K_BEFORE -K_BEGIN -K_BETWEEN -K_BY -K_CASCADE -K_CASE -K_CAST -K_CHECK -K_COLLATE -K_COLUMN -K_COMMIT -K_CONFLICT -K_CONSTRAINT -K_CREATE -K_CROSS -K_CURRENT_DATE -K_CURRENT_TIME -K_CURRENT_TIMESTAMP -K_DATABASE -K_DEFAULT -K_DEFERRABLE -K_DEFERRED -K_DELETE -K_DESC -K_DETACH -K_DISTINCT -K_DROP -K_EACH -K_ELSE -K_END -K_ESCAPE -K_EXCEPT -K_EXCLUSIVE -K_EXISTS -K_EXPLAIN -K_FAIL -K_FOR -K_FOREIGN -K_FROM -K_FULL -K_GLOB -K_GROUP -K_HAVING -K_IF -K_IGNORE -K_IMMEDIATE -K_IN -K_INDEX -K_INDEXED -K_INITIALLY -K_INNER -K_INSERT -K_INSTEAD -K_INTERSECT -K_INTO -K_IS -K_ISNULL -K_JOIN -K_KEY -K_LEFT -K_LIKE -K_LIMIT -K_MATCH -K_NATURAL -K_NO -K_NOT -K_NOTNULL -K_NULL -K_OF -K_OFFSET -K_ON -K_OR -K_ORDER -K_OUTER -K_PLAN -K_PRAGMA -K_PRIMARY -K_QUERY -K_RAISE -K_RECURSIVE -K_REFERENCES -K_REGEXP -K_REINDEX -K_RELEASE -K_RENAME -K_REPLACE -K_RESTRICT -K_RIGHT -K_ROLLBACK -K_ROW -K_SAVEPOINT -K_SELECT -K_SET -K_TABLE -K_TEMP -K_TEMPORARY -K_THEN -K_TO -K_TRANSACTION -K_TRIGGER -K_UNION -K_UNIQUE -K_UPDATE -K_USING -K_VACUUM -K_VALUES -K_VIEW -K_VIRTUAL -K_WHEN -K_WHERE -K_WITH -K_WITHOUT +ABORT_ +ACTION_ +ADD_ +AFTER_ +ALL_ +ALTER_ +ANALYZE_ +AND_ +AS_ +ASC_ +ATTACH_ +AUTOINCREMENT_ +BEFORE_ +BEGIN_ +BETWEEN_ +BY_ +CASCADE_ +CASE_ +CAST_ +CHECK_ +COLLATE_ +COLUMN_ +COMMIT_ +CONFLICT_ +CONSTRAINT_ +CREATE_ +CROSS_ +CURRENT_DATE_ +CURRENT_TIME_ +CURRENT_TIMESTAMP_ +DATABASE_ +DEFAULT_ +DEFERRABLE_ +DEFERRED_ +DELETE_ +DESC_ +DETACH_ +DISTINCT_ +DROP_ +EACH_ +ELSE_ +END_ +ESCAPE_ +EXCEPT_ +EXCLUSIVE_ +EXISTS_ +EXPLAIN_ +FAIL_ +FOR_ +FOREIGN_ +FROM_ +FULL_ +GLOB_ +GROUP_ +HAVING_ +IF_ +IGNORE_ +IMMEDIATE_ +IN_ +INDEX_ +INDEXED_ +INITIALLY_ +INNER_ +INSERT_ +INSTEAD_ +INTERSECT_ +INTO_ +IS_ +ISNULL_ +JOIN_ +KEY_ +LEFT_ +LIKE_ +LIMIT_ +MATCH_ +NATURAL_ +NO_ +NOT_ +NOTNULL_ +NULL_ +OF_ +OFFSET_ +ON_ +OR_ +ORDER_ +OUTER_ +PLAN_ +PRAGMA_ +PRIMARY_ +QUERY_ +RAISE_ +RECURSIVE_ +REFERENCES_ +REGEXP_ +REINDEX_ +RELEASE_ +RENAME_ +REPLACE_ +RESTRICT_ +RIGHT_ +ROLLBACK_ +ROW_ +ROWS_ +SAVEPOINT_ +SELECT_ +SET_ +TABLE_ +TEMP_ +TEMPORARY_ +THEN_ +TO_ +TRANSACTION_ +TRIGGER_ +UNION_ +UNIQUE_ +UPDATE_ +USING_ +VACUUM_ +VALUES_ +VIEW_ +VIRTUAL_ +WHEN_ +WHERE_ +WITH_ +WITHOUT_ +FIRST_VALUE_ +OVER_ +PARTITION_ +RANGE_ +PRECEDING_ +UNBOUNDED_ +CURRENT_ +FOLLOWING_ +CUME_DIST_ +DENSE_RANK_ +LAG_ +LAST_VALUE_ +LEAD_ +NTH_VALUE_ +NTILE_ +PERCENT_RANK_ +RANK_ +ROW_NUMBER_ +GENERATED_ +ALWAYS_ +STORED_ +TRUE_ +FALSE_ +WINDOW_ +NULLS_ +FIRST_ +LAST_ +FILTER_ +GROUPS_ +EXCLUDE_ +TIES_ +OTHERS_ +DO_ +NOTHING_ IDENTIFIER NUMERIC_LITERAL BIND_PARAMETER @@ -476,6 +581,7 @@ SINGLE_LINE_COMMENT MULTILINE_COMMENT SPACES UNEXPECTED_CHAR +HEX_DIGIT DIGIT A B @@ -512,4 +618,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 159, 1454, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 7, 150, 1266, 10, 150, 12, 150, 14, 150, 1269, 11, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 7, 150, 1276, 10, 150, 12, 150, 14, 150, 1279, 11, 150, 3, 150, 3, 150, 3, 150, 7, 150, 1284, 10, 150, 12, 150, 14, 150, 1287, 11, 150, 3, 150, 3, 150, 3, 150, 7, 150, 1292, 10, 150, 12, 150, 14, 150, 1295, 11, 150, 5, 150, 1297, 10, 150, 3, 151, 6, 151, 1300, 10, 151, 13, 151, 14, 151, 1301, 3, 151, 3, 151, 7, 151, 1306, 10, 151, 12, 151, 14, 151, 1309, 11, 151, 5, 151, 1311, 10, 151, 3, 151, 3, 151, 5, 151, 1315, 10, 151, 3, 151, 6, 151, 1318, 10, 151, 13, 151, 14, 151, 1319, 5, 151, 1322, 10, 151, 3, 151, 3, 151, 6, 151, 1326, 10, 151, 13, 151, 14, 151, 1327, 3, 151, 3, 151, 5, 151, 1332, 10, 151, 3, 151, 6, 151, 1335, 10, 151, 13, 151, 14, 151, 1336, 5, 151, 1339, 10, 151, 5, 151, 1341, 10, 151, 3, 152, 3, 152, 7, 152, 1345, 10, 152, 12, 152, 14, 152, 1348, 11, 152, 3, 152, 3, 152, 5, 152, 1352, 10, 152, 3, 153, 3, 153, 3, 153, 3, 153, 7, 153, 1358, 10, 153, 12, 153, 14, 153, 1361, 11, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 7, 155, 1372, 10, 155, 12, 155, 14, 155, 1375, 11, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 7, 156, 1383, 10, 156, 12, 156, 14, 156, 1386, 11, 156, 3, 156, 3, 156, 3, 156, 5, 156, 1391, 10, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 159, 3, 159, 3, 160, 3, 160, 3, 161, 3, 161, 3, 162, 3, 162, 3, 163, 3, 163, 3, 164, 3, 164, 3, 165, 3, 165, 3, 166, 3, 166, 3, 167, 3, 167, 3, 168, 3, 168, 3, 169, 3, 169, 3, 170, 3, 170, 3, 171, 3, 171, 3, 172, 3, 172, 3, 173, 3, 173, 3, 174, 3, 174, 3, 175, 3, 175, 3, 176, 3, 176, 3, 177, 3, 177, 3, 178, 3, 178, 3, 179, 3, 179, 3, 180, 3, 180, 3, 181, 3, 181, 3, 182, 3, 182, 3, 183, 3, 183, 3, 184, 3, 184, 3, 185, 3, 185, 3, 1384, 2, 186, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 107, 213, 108, 215, 109, 217, 110, 219, 111, 221, 112, 223, 113, 225, 114, 227, 115, 229, 116, 231, 117, 233, 118, 235, 119, 237, 120, 239, 121, 241, 122, 243, 123, 245, 124, 247, 125, 249, 126, 251, 127, 253, 128, 255, 129, 257, 130, 259, 131, 261, 132, 263, 133, 265, 134, 267, 135, 269, 136, 271, 137, 273, 138, 275, 139, 277, 140, 279, 141, 281, 142, 283, 143, 285, 144, 287, 145, 289, 146, 291, 147, 293, 148, 295, 149, 297, 150, 299, 151, 301, 152, 303, 153, 305, 154, 307, 155, 309, 156, 311, 157, 313, 158, 315, 159, 317, 2, 319, 2, 321, 2, 323, 2, 325, 2, 327, 2, 329, 2, 331, 2, 333, 2, 335, 2, 337, 2, 339, 2, 341, 2, 343, 2, 345, 2, 347, 2, 349, 2, 351, 2, 353, 2, 355, 2, 357, 2, 359, 2, 361, 2, 363, 2, 365, 2, 367, 2, 369, 2, 3, 2, 39, 3, 2, 36, 36, 3, 2, 98, 98, 3, 2, 95, 95, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 4, 2, 45, 45, 47, 47, 5, 2, 38, 38, 60, 60, 66, 66, 3, 2, 41, 41, 4, 2, 12, 12, 15, 15, 5, 2, 11, 13, 15, 15, 34, 34, 3, 2, 50, 59, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 71, 71, 103, 103, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 1453, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 3, 371, 3, 2, 2, 2, 5, 373, 3, 2, 2, 2, 7, 375, 3, 2, 2, 2, 9, 377, 3, 2, 2, 2, 11, 379, 3, 2, 2, 2, 13, 381, 3, 2, 2, 2, 15, 383, 3, 2, 2, 2, 17, 385, 3, 2, 2, 2, 19, 387, 3, 2, 2, 2, 21, 389, 3, 2, 2, 2, 23, 391, 3, 2, 2, 2, 25, 394, 3, 2, 2, 2, 27, 396, 3, 2, 2, 2, 29, 398, 3, 2, 2, 2, 31, 401, 3, 2, 2, 2, 33, 404, 3, 2, 2, 2, 35, 406, 3, 2, 2, 2, 37, 408, 3, 2, 2, 2, 39, 410, 3, 2, 2, 2, 41, 413, 3, 2, 2, 2, 43, 415, 3, 2, 2, 2, 45, 418, 3, 2, 2, 2, 47, 421, 3, 2, 2, 2, 49, 424, 3, 2, 2, 2, 51, 427, 3, 2, 2, 2, 53, 433, 3, 2, 2, 2, 55, 440, 3, 2, 2, 2, 57, 444, 3, 2, 2, 2, 59, 450, 3, 2, 2, 2, 61, 454, 3, 2, 2, 2, 63, 460, 3, 2, 2, 2, 65, 468, 3, 2, 2, 2, 67, 472, 3, 2, 2, 2, 69, 475, 3, 2, 2, 2, 71, 479, 3, 2, 2, 2, 73, 486, 3, 2, 2, 2, 75, 500, 3, 2, 2, 2, 77, 507, 3, 2, 2, 2, 79, 513, 3, 2, 2, 2, 81, 521, 3, 2, 2, 2, 83, 524, 3, 2, 2, 2, 85, 532, 3, 2, 2, 2, 87, 537, 3, 2, 2, 2, 89, 542, 3, 2, 2, 2, 91, 548, 3, 2, 2, 2, 93, 556, 3, 2, 2, 2, 95, 563, 3, 2, 2, 2, 97, 570, 3, 2, 2, 2, 99, 579, 3, 2, 2, 2, 101, 590, 3, 2, 2, 2, 103, 597, 3, 2, 2, 2, 105, 603, 3, 2, 2, 2, 107, 616, 3, 2, 2, 2, 109, 629, 3, 2, 2, 2, 111, 647, 3, 2, 2, 2, 113, 656, 3, 2, 2, 2, 115, 664, 3, 2, 2, 2, 117, 675, 3, 2, 2, 2, 119, 684, 3, 2, 2, 2, 121, 691, 3, 2, 2, 2, 123, 696, 3, 2, 2, 2, 125, 703, 3, 2, 2, 2, 127, 712, 3, 2, 2, 2, 129, 717, 3, 2, 2, 2, 131, 722, 3, 2, 2, 2, 133, 727, 3, 2, 2, 2, 135, 731, 3, 2, 2, 2, 137, 738, 3, 2, 2, 2, 139, 745, 3, 2, 2, 2, 141, 755, 3, 2, 2, 2, 143, 762, 3, 2, 2, 2, 145, 770, 3, 2, 2, 2, 147, 775, 3, 2, 2, 2, 149, 779, 3, 2, 2, 2, 151, 787, 3, 2, 2, 2, 153, 792, 3, 2, 2, 2, 155, 797, 3, 2, 2, 2, 157, 802, 3, 2, 2, 2, 159, 808, 3, 2, 2, 2, 161, 815, 3, 2, 2, 2, 163, 818, 3, 2, 2, 2, 165, 825, 3, 2, 2, 2, 167, 835, 3, 2, 2, 2, 169, 838, 3, 2, 2, 2, 171, 844, 3, 2, 2, 2, 173, 852, 3, 2, 2, 2, 175, 862, 3, 2, 2, 2, 177, 868, 3, 2, 2, 2, 179, 875, 3, 2, 2, 2, 181, 883, 3, 2, 2, 2, 183, 893, 3, 2, 2, 2, 185, 898, 3, 2, 2, 2, 187, 901, 3, 2, 2, 2, 189, 908, 3, 2, 2, 2, 191, 913, 3, 2, 2, 2, 193, 917, 3, 2, 2, 2, 195, 922, 3, 2, 2, 2, 197, 927, 3, 2, 2, 2, 199, 933, 3, 2, 2, 2, 201, 939, 3, 2, 2, 2, 203, 947, 3, 2, 2, 2, 205, 950, 3, 2, 2, 2, 207, 954, 3, 2, 2, 2, 209, 962, 3, 2, 2, 2, 211, 967, 3, 2, 2, 2, 213, 970, 3, 2, 2, 2, 215, 977, 3, 2, 2, 2, 217, 980, 3, 2, 2, 2, 219, 983, 3, 2, 2, 2, 221, 989, 3, 2, 2, 2, 223, 995, 3, 2, 2, 2, 225, 1000, 3, 2, 2, 2, 227, 1007, 3, 2, 2, 2, 229, 1015, 3, 2, 2, 2, 231, 1021, 3, 2, 2, 2, 233, 1027, 3, 2, 2, 2, 235, 1037, 3, 2, 2, 2, 237, 1048, 3, 2, 2, 2, 239, 1055, 3, 2, 2, 2, 241, 1063, 3, 2, 2, 2, 243, 1071, 3, 2, 2, 2, 245, 1078, 3, 2, 2, 2, 247, 1086, 3, 2, 2, 2, 249, 1095, 3, 2, 2, 2, 251, 1101, 3, 2, 2, 2, 253, 1110, 3, 2, 2, 2, 255, 1114, 3, 2, 2, 2, 257, 1124, 3, 2, 2, 2, 259, 1131, 3, 2, 2, 2, 261, 1135, 3, 2, 2, 2, 263, 1141, 3, 2, 2, 2, 265, 1146, 3, 2, 2, 2, 267, 1156, 3, 2, 2, 2, 269, 1161, 3, 2, 2, 2, 271, 1164, 3, 2, 2, 2, 273, 1176, 3, 2, 2, 2, 275, 1184, 3, 2, 2, 2, 277, 1190, 3, 2, 2, 2, 279, 1197, 3, 2, 2, 2, 281, 1204, 3, 2, 2, 2, 283, 1210, 3, 2, 2, 2, 285, 1217, 3, 2, 2, 2, 287, 1224, 3, 2, 2, 2, 289, 1229, 3, 2, 2, 2, 291, 1237, 3, 2, 2, 2, 293, 1242, 3, 2, 2, 2, 295, 1248, 3, 2, 2, 2, 297, 1253, 3, 2, 2, 2, 299, 1296, 3, 2, 2, 2, 301, 1340, 3, 2, 2, 2, 303, 1351, 3, 2, 2, 2, 305, 1353, 3, 2, 2, 2, 307, 1364, 3, 2, 2, 2, 309, 1367, 3, 2, 2, 2, 311, 1378, 3, 2, 2, 2, 313, 1394, 3, 2, 2, 2, 315, 1398, 3, 2, 2, 2, 317, 1400, 3, 2, 2, 2, 319, 1402, 3, 2, 2, 2, 321, 1404, 3, 2, 2, 2, 323, 1406, 3, 2, 2, 2, 325, 1408, 3, 2, 2, 2, 327, 1410, 3, 2, 2, 2, 329, 1412, 3, 2, 2, 2, 331, 1414, 3, 2, 2, 2, 333, 1416, 3, 2, 2, 2, 335, 1418, 3, 2, 2, 2, 337, 1420, 3, 2, 2, 2, 339, 1422, 3, 2, 2, 2, 341, 1424, 3, 2, 2, 2, 343, 1426, 3, 2, 2, 2, 345, 1428, 3, 2, 2, 2, 347, 1430, 3, 2, 2, 2, 349, 1432, 3, 2, 2, 2, 351, 1434, 3, 2, 2, 2, 353, 1436, 3, 2, 2, 2, 355, 1438, 3, 2, 2, 2, 357, 1440, 3, 2, 2, 2, 359, 1442, 3, 2, 2, 2, 361, 1444, 3, 2, 2, 2, 363, 1446, 3, 2, 2, 2, 365, 1448, 3, 2, 2, 2, 367, 1450, 3, 2, 2, 2, 369, 1452, 3, 2, 2, 2, 371, 372, 7, 61, 2, 2, 372, 4, 3, 2, 2, 2, 373, 374, 7, 48, 2, 2, 374, 6, 3, 2, 2, 2, 375, 376, 7, 42, 2, 2, 376, 8, 3, 2, 2, 2, 377, 378, 7, 43, 2, 2, 378, 10, 3, 2, 2, 2, 379, 380, 7, 46, 2, 2, 380, 12, 3, 2, 2, 2, 381, 382, 7, 63, 2, 2, 382, 14, 3, 2, 2, 2, 383, 384, 7, 44, 2, 2, 384, 16, 3, 2, 2, 2, 385, 386, 7, 45, 2, 2, 386, 18, 3, 2, 2, 2, 387, 388, 7, 47, 2, 2, 388, 20, 3, 2, 2, 2, 389, 390, 7, 128, 2, 2, 390, 22, 3, 2, 2, 2, 391, 392, 7, 126, 2, 2, 392, 393, 7, 126, 2, 2, 393, 24, 3, 2, 2, 2, 394, 395, 7, 49, 2, 2, 395, 26, 3, 2, 2, 2, 396, 397, 7, 39, 2, 2, 397, 28, 3, 2, 2, 2, 398, 399, 7, 62, 2, 2, 399, 400, 7, 62, 2, 2, 400, 30, 3, 2, 2, 2, 401, 402, 7, 64, 2, 2, 402, 403, 7, 64, 2, 2, 403, 32, 3, 2, 2, 2, 404, 405, 7, 40, 2, 2, 405, 34, 3, 2, 2, 2, 406, 407, 7, 126, 2, 2, 407, 36, 3, 2, 2, 2, 408, 409, 7, 62, 2, 2, 409, 38, 3, 2, 2, 2, 410, 411, 7, 62, 2, 2, 411, 412, 7, 63, 2, 2, 412, 40, 3, 2, 2, 2, 413, 414, 7, 64, 2, 2, 414, 42, 3, 2, 2, 2, 415, 416, 7, 64, 2, 2, 416, 417, 7, 63, 2, 2, 417, 44, 3, 2, 2, 2, 418, 419, 7, 63, 2, 2, 419, 420, 7, 63, 2, 2, 420, 46, 3, 2, 2, 2, 421, 422, 7, 35, 2, 2, 422, 423, 7, 63, 2, 2, 423, 48, 3, 2, 2, 2, 424, 425, 7, 62, 2, 2, 425, 426, 7, 64, 2, 2, 426, 50, 3, 2, 2, 2, 427, 428, 5, 319, 160, 2, 428, 429, 5, 321, 161, 2, 429, 430, 5, 347, 174, 2, 430, 431, 5, 353, 177, 2, 431, 432, 5, 357, 179, 2, 432, 52, 3, 2, 2, 2, 433, 434, 5, 319, 160, 2, 434, 435, 5, 323, 162, 2, 435, 436, 5, 357, 179, 2, 436, 437, 5, 335, 168, 2, 437, 438, 5, 347, 174, 2, 438, 439, 5, 345, 173, 2, 439, 54, 3, 2, 2, 2, 440, 441, 5, 319, 160, 2, 441, 442, 5, 325, 163, 2, 442, 443, 5, 325, 163, 2, 443, 56, 3, 2, 2, 2, 444, 445, 5, 319, 160, 2, 445, 446, 5, 329, 165, 2, 446, 447, 5, 357, 179, 2, 447, 448, 5, 327, 164, 2, 448, 449, 5, 353, 177, 2, 449, 58, 3, 2, 2, 2, 450, 451, 5, 319, 160, 2, 451, 452, 5, 341, 171, 2, 452, 453, 5, 341, 171, 2, 453, 60, 3, 2, 2, 2, 454, 455, 5, 319, 160, 2, 455, 456, 5, 341, 171, 2, 456, 457, 5, 357, 179, 2, 457, 458, 5, 327, 164, 2, 458, 459, 5, 353, 177, 2, 459, 62, 3, 2, 2, 2, 460, 461, 5, 319, 160, 2, 461, 462, 5, 345, 173, 2, 462, 463, 5, 319, 160, 2, 463, 464, 5, 341, 171, 2, 464, 465, 5, 367, 184, 2, 465, 466, 5, 369, 185, 2, 466, 467, 5, 327, 164, 2, 467, 64, 3, 2, 2, 2, 468, 469, 5, 319, 160, 2, 469, 470, 5, 345, 173, 2, 470, 471, 5, 325, 163, 2, 471, 66, 3, 2, 2, 2, 472, 473, 5, 319, 160, 2, 473, 474, 5, 355, 178, 2, 474, 68, 3, 2, 2, 2, 475, 476, 5, 319, 160, 2, 476, 477, 5, 355, 178, 2, 477, 478, 5, 323, 162, 2, 478, 70, 3, 2, 2, 2, 479, 480, 5, 319, 160, 2, 480, 481, 5, 357, 179, 2, 481, 482, 5, 357, 179, 2, 482, 483, 5, 319, 160, 2, 483, 484, 5, 323, 162, 2, 484, 485, 5, 333, 167, 2, 485, 72, 3, 2, 2, 2, 486, 487, 5, 319, 160, 2, 487, 488, 5, 359, 180, 2, 488, 489, 5, 357, 179, 2, 489, 490, 5, 347, 174, 2, 490, 491, 5, 335, 168, 2, 491, 492, 5, 345, 173, 2, 492, 493, 5, 323, 162, 2, 493, 494, 5, 353, 177, 2, 494, 495, 5, 327, 164, 2, 495, 496, 5, 343, 172, 2, 496, 497, 5, 327, 164, 2, 497, 498, 5, 345, 173, 2, 498, 499, 5, 357, 179, 2, 499, 74, 3, 2, 2, 2, 500, 501, 5, 321, 161, 2, 501, 502, 5, 327, 164, 2, 502, 503, 5, 329, 165, 2, 503, 504, 5, 347, 174, 2, 504, 505, 5, 353, 177, 2, 505, 506, 5, 327, 164, 2, 506, 76, 3, 2, 2, 2, 507, 508, 5, 321, 161, 2, 508, 509, 5, 327, 164, 2, 509, 510, 5, 331, 166, 2, 510, 511, 5, 335, 168, 2, 511, 512, 5, 345, 173, 2, 512, 78, 3, 2, 2, 2, 513, 514, 5, 321, 161, 2, 514, 515, 5, 327, 164, 2, 515, 516, 5, 357, 179, 2, 516, 517, 5, 363, 182, 2, 517, 518, 5, 327, 164, 2, 518, 519, 5, 327, 164, 2, 519, 520, 5, 345, 173, 2, 520, 80, 3, 2, 2, 2, 521, 522, 5, 321, 161, 2, 522, 523, 5, 367, 184, 2, 523, 82, 3, 2, 2, 2, 524, 525, 5, 323, 162, 2, 525, 526, 5, 319, 160, 2, 526, 527, 5, 355, 178, 2, 527, 528, 5, 323, 162, 2, 528, 529, 5, 319, 160, 2, 529, 530, 5, 325, 163, 2, 530, 531, 5, 327, 164, 2, 531, 84, 3, 2, 2, 2, 532, 533, 5, 323, 162, 2, 533, 534, 5, 319, 160, 2, 534, 535, 5, 355, 178, 2, 535, 536, 5, 327, 164, 2, 536, 86, 3, 2, 2, 2, 537, 538, 5, 323, 162, 2, 538, 539, 5, 319, 160, 2, 539, 540, 5, 355, 178, 2, 540, 541, 5, 357, 179, 2, 541, 88, 3, 2, 2, 2, 542, 543, 5, 323, 162, 2, 543, 544, 5, 333, 167, 2, 544, 545, 5, 327, 164, 2, 545, 546, 5, 323, 162, 2, 546, 547, 5, 339, 170, 2, 547, 90, 3, 2, 2, 2, 548, 549, 5, 323, 162, 2, 549, 550, 5, 347, 174, 2, 550, 551, 5, 341, 171, 2, 551, 552, 5, 341, 171, 2, 552, 553, 5, 319, 160, 2, 553, 554, 5, 357, 179, 2, 554, 555, 5, 327, 164, 2, 555, 92, 3, 2, 2, 2, 556, 557, 5, 323, 162, 2, 557, 558, 5, 347, 174, 2, 558, 559, 5, 341, 171, 2, 559, 560, 5, 359, 180, 2, 560, 561, 5, 343, 172, 2, 561, 562, 5, 345, 173, 2, 562, 94, 3, 2, 2, 2, 563, 564, 5, 323, 162, 2, 564, 565, 5, 347, 174, 2, 565, 566, 5, 343, 172, 2, 566, 567, 5, 343, 172, 2, 567, 568, 5, 335, 168, 2, 568, 569, 5, 357, 179, 2, 569, 96, 3, 2, 2, 2, 570, 571, 5, 323, 162, 2, 571, 572, 5, 347, 174, 2, 572, 573, 5, 345, 173, 2, 573, 574, 5, 329, 165, 2, 574, 575, 5, 341, 171, 2, 575, 576, 5, 335, 168, 2, 576, 577, 5, 323, 162, 2, 577, 578, 5, 357, 179, 2, 578, 98, 3, 2, 2, 2, 579, 580, 5, 323, 162, 2, 580, 581, 5, 347, 174, 2, 581, 582, 5, 345, 173, 2, 582, 583, 5, 355, 178, 2, 583, 584, 5, 357, 179, 2, 584, 585, 5, 353, 177, 2, 585, 586, 5, 319, 160, 2, 586, 587, 5, 335, 168, 2, 587, 588, 5, 345, 173, 2, 588, 589, 5, 357, 179, 2, 589, 100, 3, 2, 2, 2, 590, 591, 5, 323, 162, 2, 591, 592, 5, 353, 177, 2, 592, 593, 5, 327, 164, 2, 593, 594, 5, 319, 160, 2, 594, 595, 5, 357, 179, 2, 595, 596, 5, 327, 164, 2, 596, 102, 3, 2, 2, 2, 597, 598, 5, 323, 162, 2, 598, 599, 5, 353, 177, 2, 599, 600, 5, 347, 174, 2, 600, 601, 5, 355, 178, 2, 601, 602, 5, 355, 178, 2, 602, 104, 3, 2, 2, 2, 603, 604, 5, 323, 162, 2, 604, 605, 5, 359, 180, 2, 605, 606, 5, 353, 177, 2, 606, 607, 5, 353, 177, 2, 607, 608, 5, 327, 164, 2, 608, 609, 5, 345, 173, 2, 609, 610, 5, 357, 179, 2, 610, 611, 7, 97, 2, 2, 611, 612, 5, 325, 163, 2, 612, 613, 5, 319, 160, 2, 613, 614, 5, 357, 179, 2, 614, 615, 5, 327, 164, 2, 615, 106, 3, 2, 2, 2, 616, 617, 5, 323, 162, 2, 617, 618, 5, 359, 180, 2, 618, 619, 5, 353, 177, 2, 619, 620, 5, 353, 177, 2, 620, 621, 5, 327, 164, 2, 621, 622, 5, 345, 173, 2, 622, 623, 5, 357, 179, 2, 623, 624, 7, 97, 2, 2, 624, 625, 5, 357, 179, 2, 625, 626, 5, 335, 168, 2, 626, 627, 5, 343, 172, 2, 627, 628, 5, 327, 164, 2, 628, 108, 3, 2, 2, 2, 629, 630, 5, 323, 162, 2, 630, 631, 5, 359, 180, 2, 631, 632, 5, 353, 177, 2, 632, 633, 5, 353, 177, 2, 633, 634, 5, 327, 164, 2, 634, 635, 5, 345, 173, 2, 635, 636, 5, 357, 179, 2, 636, 637, 7, 97, 2, 2, 637, 638, 5, 357, 179, 2, 638, 639, 5, 335, 168, 2, 639, 640, 5, 343, 172, 2, 640, 641, 5, 327, 164, 2, 641, 642, 5, 355, 178, 2, 642, 643, 5, 357, 179, 2, 643, 644, 5, 319, 160, 2, 644, 645, 5, 343, 172, 2, 645, 646, 5, 349, 175, 2, 646, 110, 3, 2, 2, 2, 647, 648, 5, 325, 163, 2, 648, 649, 5, 319, 160, 2, 649, 650, 5, 357, 179, 2, 650, 651, 5, 319, 160, 2, 651, 652, 5, 321, 161, 2, 652, 653, 5, 319, 160, 2, 653, 654, 5, 355, 178, 2, 654, 655, 5, 327, 164, 2, 655, 112, 3, 2, 2, 2, 656, 657, 5, 325, 163, 2, 657, 658, 5, 327, 164, 2, 658, 659, 5, 329, 165, 2, 659, 660, 5, 319, 160, 2, 660, 661, 5, 359, 180, 2, 661, 662, 5, 341, 171, 2, 662, 663, 5, 357, 179, 2, 663, 114, 3, 2, 2, 2, 664, 665, 5, 325, 163, 2, 665, 666, 5, 327, 164, 2, 666, 667, 5, 329, 165, 2, 667, 668, 5, 327, 164, 2, 668, 669, 5, 353, 177, 2, 669, 670, 5, 353, 177, 2, 670, 671, 5, 319, 160, 2, 671, 672, 5, 321, 161, 2, 672, 673, 5, 341, 171, 2, 673, 674, 5, 327, 164, 2, 674, 116, 3, 2, 2, 2, 675, 676, 5, 325, 163, 2, 676, 677, 5, 327, 164, 2, 677, 678, 5, 329, 165, 2, 678, 679, 5, 327, 164, 2, 679, 680, 5, 353, 177, 2, 680, 681, 5, 353, 177, 2, 681, 682, 5, 327, 164, 2, 682, 683, 5, 325, 163, 2, 683, 118, 3, 2, 2, 2, 684, 685, 5, 325, 163, 2, 685, 686, 5, 327, 164, 2, 686, 687, 5, 341, 171, 2, 687, 688, 5, 327, 164, 2, 688, 689, 5, 357, 179, 2, 689, 690, 5, 327, 164, 2, 690, 120, 3, 2, 2, 2, 691, 692, 5, 325, 163, 2, 692, 693, 5, 327, 164, 2, 693, 694, 5, 355, 178, 2, 694, 695, 5, 323, 162, 2, 695, 122, 3, 2, 2, 2, 696, 697, 5, 325, 163, 2, 697, 698, 5, 327, 164, 2, 698, 699, 5, 357, 179, 2, 699, 700, 5, 319, 160, 2, 700, 701, 5, 323, 162, 2, 701, 702, 5, 333, 167, 2, 702, 124, 3, 2, 2, 2, 703, 704, 5, 325, 163, 2, 704, 705, 5, 335, 168, 2, 705, 706, 5, 355, 178, 2, 706, 707, 5, 357, 179, 2, 707, 708, 5, 335, 168, 2, 708, 709, 5, 345, 173, 2, 709, 710, 5, 323, 162, 2, 710, 711, 5, 357, 179, 2, 711, 126, 3, 2, 2, 2, 712, 713, 5, 325, 163, 2, 713, 714, 5, 353, 177, 2, 714, 715, 5, 347, 174, 2, 715, 716, 5, 349, 175, 2, 716, 128, 3, 2, 2, 2, 717, 718, 5, 327, 164, 2, 718, 719, 5, 319, 160, 2, 719, 720, 5, 323, 162, 2, 720, 721, 5, 333, 167, 2, 721, 130, 3, 2, 2, 2, 722, 723, 5, 327, 164, 2, 723, 724, 5, 341, 171, 2, 724, 725, 5, 355, 178, 2, 725, 726, 5, 327, 164, 2, 726, 132, 3, 2, 2, 2, 727, 728, 5, 327, 164, 2, 728, 729, 5, 345, 173, 2, 729, 730, 5, 325, 163, 2, 730, 134, 3, 2, 2, 2, 731, 732, 5, 327, 164, 2, 732, 733, 5, 355, 178, 2, 733, 734, 5, 323, 162, 2, 734, 735, 5, 319, 160, 2, 735, 736, 5, 349, 175, 2, 736, 737, 5, 327, 164, 2, 737, 136, 3, 2, 2, 2, 738, 739, 5, 327, 164, 2, 739, 740, 5, 365, 183, 2, 740, 741, 5, 323, 162, 2, 741, 742, 5, 327, 164, 2, 742, 743, 5, 349, 175, 2, 743, 744, 5, 357, 179, 2, 744, 138, 3, 2, 2, 2, 745, 746, 5, 327, 164, 2, 746, 747, 5, 365, 183, 2, 747, 748, 5, 323, 162, 2, 748, 749, 5, 341, 171, 2, 749, 750, 5, 359, 180, 2, 750, 751, 5, 355, 178, 2, 751, 752, 5, 335, 168, 2, 752, 753, 5, 361, 181, 2, 753, 754, 5, 327, 164, 2, 754, 140, 3, 2, 2, 2, 755, 756, 5, 327, 164, 2, 756, 757, 5, 365, 183, 2, 757, 758, 5, 335, 168, 2, 758, 759, 5, 355, 178, 2, 759, 760, 5, 357, 179, 2, 760, 761, 5, 355, 178, 2, 761, 142, 3, 2, 2, 2, 762, 763, 5, 327, 164, 2, 763, 764, 5, 365, 183, 2, 764, 765, 5, 349, 175, 2, 765, 766, 5, 341, 171, 2, 766, 767, 5, 319, 160, 2, 767, 768, 5, 335, 168, 2, 768, 769, 5, 345, 173, 2, 769, 144, 3, 2, 2, 2, 770, 771, 5, 329, 165, 2, 771, 772, 5, 319, 160, 2, 772, 773, 5, 335, 168, 2, 773, 774, 5, 341, 171, 2, 774, 146, 3, 2, 2, 2, 775, 776, 5, 329, 165, 2, 776, 777, 5, 347, 174, 2, 777, 778, 5, 353, 177, 2, 778, 148, 3, 2, 2, 2, 779, 780, 5, 329, 165, 2, 780, 781, 5, 347, 174, 2, 781, 782, 5, 353, 177, 2, 782, 783, 5, 327, 164, 2, 783, 784, 5, 335, 168, 2, 784, 785, 5, 331, 166, 2, 785, 786, 5, 345, 173, 2, 786, 150, 3, 2, 2, 2, 787, 788, 5, 329, 165, 2, 788, 789, 5, 353, 177, 2, 789, 790, 5, 347, 174, 2, 790, 791, 5, 343, 172, 2, 791, 152, 3, 2, 2, 2, 792, 793, 5, 329, 165, 2, 793, 794, 5, 359, 180, 2, 794, 795, 5, 341, 171, 2, 795, 796, 5, 341, 171, 2, 796, 154, 3, 2, 2, 2, 797, 798, 5, 331, 166, 2, 798, 799, 5, 341, 171, 2, 799, 800, 5, 347, 174, 2, 800, 801, 5, 321, 161, 2, 801, 156, 3, 2, 2, 2, 802, 803, 5, 331, 166, 2, 803, 804, 5, 353, 177, 2, 804, 805, 5, 347, 174, 2, 805, 806, 5, 359, 180, 2, 806, 807, 5, 349, 175, 2, 807, 158, 3, 2, 2, 2, 808, 809, 5, 333, 167, 2, 809, 810, 5, 319, 160, 2, 810, 811, 5, 361, 181, 2, 811, 812, 5, 335, 168, 2, 812, 813, 5, 345, 173, 2, 813, 814, 5, 331, 166, 2, 814, 160, 3, 2, 2, 2, 815, 816, 5, 335, 168, 2, 816, 817, 5, 329, 165, 2, 817, 162, 3, 2, 2, 2, 818, 819, 5, 335, 168, 2, 819, 820, 5, 331, 166, 2, 820, 821, 5, 345, 173, 2, 821, 822, 5, 347, 174, 2, 822, 823, 5, 353, 177, 2, 823, 824, 5, 327, 164, 2, 824, 164, 3, 2, 2, 2, 825, 826, 5, 335, 168, 2, 826, 827, 5, 343, 172, 2, 827, 828, 5, 343, 172, 2, 828, 829, 5, 327, 164, 2, 829, 830, 5, 325, 163, 2, 830, 831, 5, 335, 168, 2, 831, 832, 5, 319, 160, 2, 832, 833, 5, 357, 179, 2, 833, 834, 5, 327, 164, 2, 834, 166, 3, 2, 2, 2, 835, 836, 5, 335, 168, 2, 836, 837, 5, 345, 173, 2, 837, 168, 3, 2, 2, 2, 838, 839, 5, 335, 168, 2, 839, 840, 5, 345, 173, 2, 840, 841, 5, 325, 163, 2, 841, 842, 5, 327, 164, 2, 842, 843, 5, 365, 183, 2, 843, 170, 3, 2, 2, 2, 844, 845, 5, 335, 168, 2, 845, 846, 5, 345, 173, 2, 846, 847, 5, 325, 163, 2, 847, 848, 5, 327, 164, 2, 848, 849, 5, 365, 183, 2, 849, 850, 5, 327, 164, 2, 850, 851, 5, 325, 163, 2, 851, 172, 3, 2, 2, 2, 852, 853, 5, 335, 168, 2, 853, 854, 5, 345, 173, 2, 854, 855, 5, 335, 168, 2, 855, 856, 5, 357, 179, 2, 856, 857, 5, 335, 168, 2, 857, 858, 5, 319, 160, 2, 858, 859, 5, 341, 171, 2, 859, 860, 5, 341, 171, 2, 860, 861, 5, 367, 184, 2, 861, 174, 3, 2, 2, 2, 862, 863, 5, 335, 168, 2, 863, 864, 5, 345, 173, 2, 864, 865, 5, 345, 173, 2, 865, 866, 5, 327, 164, 2, 866, 867, 5, 353, 177, 2, 867, 176, 3, 2, 2, 2, 868, 869, 5, 335, 168, 2, 869, 870, 5, 345, 173, 2, 870, 871, 5, 355, 178, 2, 871, 872, 5, 327, 164, 2, 872, 873, 5, 353, 177, 2, 873, 874, 5, 357, 179, 2, 874, 178, 3, 2, 2, 2, 875, 876, 5, 335, 168, 2, 876, 877, 5, 345, 173, 2, 877, 878, 5, 355, 178, 2, 878, 879, 5, 357, 179, 2, 879, 880, 5, 327, 164, 2, 880, 881, 5, 319, 160, 2, 881, 882, 5, 325, 163, 2, 882, 180, 3, 2, 2, 2, 883, 884, 5, 335, 168, 2, 884, 885, 5, 345, 173, 2, 885, 886, 5, 357, 179, 2, 886, 887, 5, 327, 164, 2, 887, 888, 5, 353, 177, 2, 888, 889, 5, 355, 178, 2, 889, 890, 5, 327, 164, 2, 890, 891, 5, 323, 162, 2, 891, 892, 5, 357, 179, 2, 892, 182, 3, 2, 2, 2, 893, 894, 5, 335, 168, 2, 894, 895, 5, 345, 173, 2, 895, 896, 5, 357, 179, 2, 896, 897, 5, 347, 174, 2, 897, 184, 3, 2, 2, 2, 898, 899, 5, 335, 168, 2, 899, 900, 5, 355, 178, 2, 900, 186, 3, 2, 2, 2, 901, 902, 5, 335, 168, 2, 902, 903, 5, 355, 178, 2, 903, 904, 5, 345, 173, 2, 904, 905, 5, 359, 180, 2, 905, 906, 5, 341, 171, 2, 906, 907, 5, 341, 171, 2, 907, 188, 3, 2, 2, 2, 908, 909, 5, 337, 169, 2, 909, 910, 5, 347, 174, 2, 910, 911, 5, 335, 168, 2, 911, 912, 5, 345, 173, 2, 912, 190, 3, 2, 2, 2, 913, 914, 5, 339, 170, 2, 914, 915, 5, 327, 164, 2, 915, 916, 5, 367, 184, 2, 916, 192, 3, 2, 2, 2, 917, 918, 5, 341, 171, 2, 918, 919, 5, 327, 164, 2, 919, 920, 5, 329, 165, 2, 920, 921, 5, 357, 179, 2, 921, 194, 3, 2, 2, 2, 922, 923, 5, 341, 171, 2, 923, 924, 5, 335, 168, 2, 924, 925, 5, 339, 170, 2, 925, 926, 5, 327, 164, 2, 926, 196, 3, 2, 2, 2, 927, 928, 5, 341, 171, 2, 928, 929, 5, 335, 168, 2, 929, 930, 5, 343, 172, 2, 930, 931, 5, 335, 168, 2, 931, 932, 5, 357, 179, 2, 932, 198, 3, 2, 2, 2, 933, 934, 5, 343, 172, 2, 934, 935, 5, 319, 160, 2, 935, 936, 5, 357, 179, 2, 936, 937, 5, 323, 162, 2, 937, 938, 5, 333, 167, 2, 938, 200, 3, 2, 2, 2, 939, 940, 5, 345, 173, 2, 940, 941, 5, 319, 160, 2, 941, 942, 5, 357, 179, 2, 942, 943, 5, 359, 180, 2, 943, 944, 5, 353, 177, 2, 944, 945, 5, 319, 160, 2, 945, 946, 5, 341, 171, 2, 946, 202, 3, 2, 2, 2, 947, 948, 5, 345, 173, 2, 948, 949, 5, 347, 174, 2, 949, 204, 3, 2, 2, 2, 950, 951, 5, 345, 173, 2, 951, 952, 5, 347, 174, 2, 952, 953, 5, 357, 179, 2, 953, 206, 3, 2, 2, 2, 954, 955, 5, 345, 173, 2, 955, 956, 5, 347, 174, 2, 956, 957, 5, 357, 179, 2, 957, 958, 5, 345, 173, 2, 958, 959, 5, 359, 180, 2, 959, 960, 5, 341, 171, 2, 960, 961, 5, 341, 171, 2, 961, 208, 3, 2, 2, 2, 962, 963, 5, 345, 173, 2, 963, 964, 5, 359, 180, 2, 964, 965, 5, 341, 171, 2, 965, 966, 5, 341, 171, 2, 966, 210, 3, 2, 2, 2, 967, 968, 5, 347, 174, 2, 968, 969, 5, 329, 165, 2, 969, 212, 3, 2, 2, 2, 970, 971, 5, 347, 174, 2, 971, 972, 5, 329, 165, 2, 972, 973, 5, 329, 165, 2, 973, 974, 5, 355, 178, 2, 974, 975, 5, 327, 164, 2, 975, 976, 5, 357, 179, 2, 976, 214, 3, 2, 2, 2, 977, 978, 5, 347, 174, 2, 978, 979, 5, 345, 173, 2, 979, 216, 3, 2, 2, 2, 980, 981, 5, 347, 174, 2, 981, 982, 5, 353, 177, 2, 982, 218, 3, 2, 2, 2, 983, 984, 5, 347, 174, 2, 984, 985, 5, 353, 177, 2, 985, 986, 5, 325, 163, 2, 986, 987, 5, 327, 164, 2, 987, 988, 5, 353, 177, 2, 988, 220, 3, 2, 2, 2, 989, 990, 5, 347, 174, 2, 990, 991, 5, 359, 180, 2, 991, 992, 5, 357, 179, 2, 992, 993, 5, 327, 164, 2, 993, 994, 5, 353, 177, 2, 994, 222, 3, 2, 2, 2, 995, 996, 5, 349, 175, 2, 996, 997, 5, 341, 171, 2, 997, 998, 5, 319, 160, 2, 998, 999, 5, 345, 173, 2, 999, 224, 3, 2, 2, 2, 1000, 1001, 5, 349, 175, 2, 1001, 1002, 5, 353, 177, 2, 1002, 1003, 5, 319, 160, 2, 1003, 1004, 5, 331, 166, 2, 1004, 1005, 5, 343, 172, 2, 1005, 1006, 5, 319, 160, 2, 1006, 226, 3, 2, 2, 2, 1007, 1008, 5, 349, 175, 2, 1008, 1009, 5, 353, 177, 2, 1009, 1010, 5, 335, 168, 2, 1010, 1011, 5, 343, 172, 2, 1011, 1012, 5, 319, 160, 2, 1012, 1013, 5, 353, 177, 2, 1013, 1014, 5, 367, 184, 2, 1014, 228, 3, 2, 2, 2, 1015, 1016, 5, 351, 176, 2, 1016, 1017, 5, 359, 180, 2, 1017, 1018, 5, 327, 164, 2, 1018, 1019, 5, 353, 177, 2, 1019, 1020, 5, 367, 184, 2, 1020, 230, 3, 2, 2, 2, 1021, 1022, 5, 353, 177, 2, 1022, 1023, 5, 319, 160, 2, 1023, 1024, 5, 335, 168, 2, 1024, 1025, 5, 355, 178, 2, 1025, 1026, 5, 327, 164, 2, 1026, 232, 3, 2, 2, 2, 1027, 1028, 5, 353, 177, 2, 1028, 1029, 5, 327, 164, 2, 1029, 1030, 5, 323, 162, 2, 1030, 1031, 5, 359, 180, 2, 1031, 1032, 5, 353, 177, 2, 1032, 1033, 5, 355, 178, 2, 1033, 1034, 5, 335, 168, 2, 1034, 1035, 5, 361, 181, 2, 1035, 1036, 5, 327, 164, 2, 1036, 234, 3, 2, 2, 2, 1037, 1038, 5, 353, 177, 2, 1038, 1039, 5, 327, 164, 2, 1039, 1040, 5, 329, 165, 2, 1040, 1041, 5, 327, 164, 2, 1041, 1042, 5, 353, 177, 2, 1042, 1043, 5, 327, 164, 2, 1043, 1044, 5, 345, 173, 2, 1044, 1045, 5, 323, 162, 2, 1045, 1046, 5, 327, 164, 2, 1046, 1047, 5, 355, 178, 2, 1047, 236, 3, 2, 2, 2, 1048, 1049, 5, 353, 177, 2, 1049, 1050, 5, 327, 164, 2, 1050, 1051, 5, 331, 166, 2, 1051, 1052, 5, 327, 164, 2, 1052, 1053, 5, 365, 183, 2, 1053, 1054, 5, 349, 175, 2, 1054, 238, 3, 2, 2, 2, 1055, 1056, 5, 353, 177, 2, 1056, 1057, 5, 327, 164, 2, 1057, 1058, 5, 335, 168, 2, 1058, 1059, 5, 345, 173, 2, 1059, 1060, 5, 325, 163, 2, 1060, 1061, 5, 327, 164, 2, 1061, 1062, 5, 365, 183, 2, 1062, 240, 3, 2, 2, 2, 1063, 1064, 5, 353, 177, 2, 1064, 1065, 5, 327, 164, 2, 1065, 1066, 5, 341, 171, 2, 1066, 1067, 5, 327, 164, 2, 1067, 1068, 5, 319, 160, 2, 1068, 1069, 5, 355, 178, 2, 1069, 1070, 5, 327, 164, 2, 1070, 242, 3, 2, 2, 2, 1071, 1072, 5, 353, 177, 2, 1072, 1073, 5, 327, 164, 2, 1073, 1074, 5, 345, 173, 2, 1074, 1075, 5, 319, 160, 2, 1075, 1076, 5, 343, 172, 2, 1076, 1077, 5, 327, 164, 2, 1077, 244, 3, 2, 2, 2, 1078, 1079, 5, 353, 177, 2, 1079, 1080, 5, 327, 164, 2, 1080, 1081, 5, 349, 175, 2, 1081, 1082, 5, 341, 171, 2, 1082, 1083, 5, 319, 160, 2, 1083, 1084, 5, 323, 162, 2, 1084, 1085, 5, 327, 164, 2, 1085, 246, 3, 2, 2, 2, 1086, 1087, 5, 353, 177, 2, 1087, 1088, 5, 327, 164, 2, 1088, 1089, 5, 355, 178, 2, 1089, 1090, 5, 357, 179, 2, 1090, 1091, 5, 353, 177, 2, 1091, 1092, 5, 335, 168, 2, 1092, 1093, 5, 323, 162, 2, 1093, 1094, 5, 357, 179, 2, 1094, 248, 3, 2, 2, 2, 1095, 1096, 5, 353, 177, 2, 1096, 1097, 5, 335, 168, 2, 1097, 1098, 5, 331, 166, 2, 1098, 1099, 5, 333, 167, 2, 1099, 1100, 5, 357, 179, 2, 1100, 250, 3, 2, 2, 2, 1101, 1102, 5, 353, 177, 2, 1102, 1103, 5, 347, 174, 2, 1103, 1104, 5, 341, 171, 2, 1104, 1105, 5, 341, 171, 2, 1105, 1106, 5, 321, 161, 2, 1106, 1107, 5, 319, 160, 2, 1107, 1108, 5, 323, 162, 2, 1108, 1109, 5, 339, 170, 2, 1109, 252, 3, 2, 2, 2, 1110, 1111, 5, 353, 177, 2, 1111, 1112, 5, 347, 174, 2, 1112, 1113, 5, 363, 182, 2, 1113, 254, 3, 2, 2, 2, 1114, 1115, 5, 355, 178, 2, 1115, 1116, 5, 319, 160, 2, 1116, 1117, 5, 361, 181, 2, 1117, 1118, 5, 327, 164, 2, 1118, 1119, 5, 349, 175, 2, 1119, 1120, 5, 347, 174, 2, 1120, 1121, 5, 335, 168, 2, 1121, 1122, 5, 345, 173, 2, 1122, 1123, 5, 357, 179, 2, 1123, 256, 3, 2, 2, 2, 1124, 1125, 5, 355, 178, 2, 1125, 1126, 5, 327, 164, 2, 1126, 1127, 5, 341, 171, 2, 1127, 1128, 5, 327, 164, 2, 1128, 1129, 5, 323, 162, 2, 1129, 1130, 5, 357, 179, 2, 1130, 258, 3, 2, 2, 2, 1131, 1132, 5, 355, 178, 2, 1132, 1133, 5, 327, 164, 2, 1133, 1134, 5, 357, 179, 2, 1134, 260, 3, 2, 2, 2, 1135, 1136, 5, 357, 179, 2, 1136, 1137, 5, 319, 160, 2, 1137, 1138, 5, 321, 161, 2, 1138, 1139, 5, 341, 171, 2, 1139, 1140, 5, 327, 164, 2, 1140, 262, 3, 2, 2, 2, 1141, 1142, 5, 357, 179, 2, 1142, 1143, 5, 327, 164, 2, 1143, 1144, 5, 343, 172, 2, 1144, 1145, 5, 349, 175, 2, 1145, 264, 3, 2, 2, 2, 1146, 1147, 5, 357, 179, 2, 1147, 1148, 5, 327, 164, 2, 1148, 1149, 5, 343, 172, 2, 1149, 1150, 5, 349, 175, 2, 1150, 1151, 5, 347, 174, 2, 1151, 1152, 5, 353, 177, 2, 1152, 1153, 5, 319, 160, 2, 1153, 1154, 5, 353, 177, 2, 1154, 1155, 5, 367, 184, 2, 1155, 266, 3, 2, 2, 2, 1156, 1157, 5, 357, 179, 2, 1157, 1158, 5, 333, 167, 2, 1158, 1159, 5, 327, 164, 2, 1159, 1160, 5, 345, 173, 2, 1160, 268, 3, 2, 2, 2, 1161, 1162, 5, 357, 179, 2, 1162, 1163, 5, 347, 174, 2, 1163, 270, 3, 2, 2, 2, 1164, 1165, 5, 357, 179, 2, 1165, 1166, 5, 353, 177, 2, 1166, 1167, 5, 319, 160, 2, 1167, 1168, 5, 345, 173, 2, 1168, 1169, 5, 355, 178, 2, 1169, 1170, 5, 319, 160, 2, 1170, 1171, 5, 323, 162, 2, 1171, 1172, 5, 357, 179, 2, 1172, 1173, 5, 335, 168, 2, 1173, 1174, 5, 347, 174, 2, 1174, 1175, 5, 345, 173, 2, 1175, 272, 3, 2, 2, 2, 1176, 1177, 5, 357, 179, 2, 1177, 1178, 5, 353, 177, 2, 1178, 1179, 5, 335, 168, 2, 1179, 1180, 5, 331, 166, 2, 1180, 1181, 5, 331, 166, 2, 1181, 1182, 5, 327, 164, 2, 1182, 1183, 5, 353, 177, 2, 1183, 274, 3, 2, 2, 2, 1184, 1185, 5, 359, 180, 2, 1185, 1186, 5, 345, 173, 2, 1186, 1187, 5, 335, 168, 2, 1187, 1188, 5, 347, 174, 2, 1188, 1189, 5, 345, 173, 2, 1189, 276, 3, 2, 2, 2, 1190, 1191, 5, 359, 180, 2, 1191, 1192, 5, 345, 173, 2, 1192, 1193, 5, 335, 168, 2, 1193, 1194, 5, 351, 176, 2, 1194, 1195, 5, 359, 180, 2, 1195, 1196, 5, 327, 164, 2, 1196, 278, 3, 2, 2, 2, 1197, 1198, 5, 359, 180, 2, 1198, 1199, 5, 349, 175, 2, 1199, 1200, 5, 325, 163, 2, 1200, 1201, 5, 319, 160, 2, 1201, 1202, 5, 357, 179, 2, 1202, 1203, 5, 327, 164, 2, 1203, 280, 3, 2, 2, 2, 1204, 1205, 5, 359, 180, 2, 1205, 1206, 5, 355, 178, 2, 1206, 1207, 5, 335, 168, 2, 1207, 1208, 5, 345, 173, 2, 1208, 1209, 5, 331, 166, 2, 1209, 282, 3, 2, 2, 2, 1210, 1211, 5, 361, 181, 2, 1211, 1212, 5, 319, 160, 2, 1212, 1213, 5, 323, 162, 2, 1213, 1214, 5, 359, 180, 2, 1214, 1215, 5, 359, 180, 2, 1215, 1216, 5, 343, 172, 2, 1216, 284, 3, 2, 2, 2, 1217, 1218, 5, 361, 181, 2, 1218, 1219, 5, 319, 160, 2, 1219, 1220, 5, 341, 171, 2, 1220, 1221, 5, 359, 180, 2, 1221, 1222, 5, 327, 164, 2, 1222, 1223, 5, 355, 178, 2, 1223, 286, 3, 2, 2, 2, 1224, 1225, 5, 361, 181, 2, 1225, 1226, 5, 335, 168, 2, 1226, 1227, 5, 327, 164, 2, 1227, 1228, 5, 363, 182, 2, 1228, 288, 3, 2, 2, 2, 1229, 1230, 5, 361, 181, 2, 1230, 1231, 5, 335, 168, 2, 1231, 1232, 5, 353, 177, 2, 1232, 1233, 5, 357, 179, 2, 1233, 1234, 5, 359, 180, 2, 1234, 1235, 5, 319, 160, 2, 1235, 1236, 5, 341, 171, 2, 1236, 290, 3, 2, 2, 2, 1237, 1238, 5, 363, 182, 2, 1238, 1239, 5, 333, 167, 2, 1239, 1240, 5, 327, 164, 2, 1240, 1241, 5, 345, 173, 2, 1241, 292, 3, 2, 2, 2, 1242, 1243, 5, 363, 182, 2, 1243, 1244, 5, 333, 167, 2, 1244, 1245, 5, 327, 164, 2, 1245, 1246, 5, 353, 177, 2, 1246, 1247, 5, 327, 164, 2, 1247, 294, 3, 2, 2, 2, 1248, 1249, 5, 363, 182, 2, 1249, 1250, 5, 335, 168, 2, 1250, 1251, 5, 357, 179, 2, 1251, 1252, 5, 333, 167, 2, 1252, 296, 3, 2, 2, 2, 1253, 1254, 5, 363, 182, 2, 1254, 1255, 5, 335, 168, 2, 1255, 1256, 5, 357, 179, 2, 1256, 1257, 5, 333, 167, 2, 1257, 1258, 5, 347, 174, 2, 1258, 1259, 5, 359, 180, 2, 1259, 1260, 5, 357, 179, 2, 1260, 298, 3, 2, 2, 2, 1261, 1267, 7, 36, 2, 2, 1262, 1266, 10, 2, 2, 2, 1263, 1264, 7, 36, 2, 2, 1264, 1266, 7, 36, 2, 2, 1265, 1262, 3, 2, 2, 2, 1265, 1263, 3, 2, 2, 2, 1266, 1269, 3, 2, 2, 2, 1267, 1265, 3, 2, 2, 2, 1267, 1268, 3, 2, 2, 2, 1268, 1270, 3, 2, 2, 2, 1269, 1267, 3, 2, 2, 2, 1270, 1297, 7, 36, 2, 2, 1271, 1277, 7, 98, 2, 2, 1272, 1276, 10, 3, 2, 2, 1273, 1274, 7, 98, 2, 2, 1274, 1276, 7, 98, 2, 2, 1275, 1272, 3, 2, 2, 2, 1275, 1273, 3, 2, 2, 2, 1276, 1279, 3, 2, 2, 2, 1277, 1275, 3, 2, 2, 2, 1277, 1278, 3, 2, 2, 2, 1278, 1280, 3, 2, 2, 2, 1279, 1277, 3, 2, 2, 2, 1280, 1297, 7, 98, 2, 2, 1281, 1285, 7, 93, 2, 2, 1282, 1284, 10, 4, 2, 2, 1283, 1282, 3, 2, 2, 2, 1284, 1287, 3, 2, 2, 2, 1285, 1283, 3, 2, 2, 2, 1285, 1286, 3, 2, 2, 2, 1286, 1288, 3, 2, 2, 2, 1287, 1285, 3, 2, 2, 2, 1288, 1297, 7, 95, 2, 2, 1289, 1293, 9, 5, 2, 2, 1290, 1292, 9, 6, 2, 2, 1291, 1290, 3, 2, 2, 2, 1292, 1295, 3, 2, 2, 2, 1293, 1291, 3, 2, 2, 2, 1293, 1294, 3, 2, 2, 2, 1294, 1297, 3, 2, 2, 2, 1295, 1293, 3, 2, 2, 2, 1296, 1261, 3, 2, 2, 2, 1296, 1271, 3, 2, 2, 2, 1296, 1281, 3, 2, 2, 2, 1296, 1289, 3, 2, 2, 2, 1297, 300, 3, 2, 2, 2, 1298, 1300, 5, 317, 159, 2, 1299, 1298, 3, 2, 2, 2, 1300, 1301, 3, 2, 2, 2, 1301, 1299, 3, 2, 2, 2, 1301, 1302, 3, 2, 2, 2, 1302, 1310, 3, 2, 2, 2, 1303, 1307, 7, 48, 2, 2, 1304, 1306, 5, 317, 159, 2, 1305, 1304, 3, 2, 2, 2, 1306, 1309, 3, 2, 2, 2, 1307, 1305, 3, 2, 2, 2, 1307, 1308, 3, 2, 2, 2, 1308, 1311, 3, 2, 2, 2, 1309, 1307, 3, 2, 2, 2, 1310, 1303, 3, 2, 2, 2, 1310, 1311, 3, 2, 2, 2, 1311, 1321, 3, 2, 2, 2, 1312, 1314, 5, 327, 164, 2, 1313, 1315, 9, 7, 2, 2, 1314, 1313, 3, 2, 2, 2, 1314, 1315, 3, 2, 2, 2, 1315, 1317, 3, 2, 2, 2, 1316, 1318, 5, 317, 159, 2, 1317, 1316, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 1317, 3, 2, 2, 2, 1319, 1320, 3, 2, 2, 2, 1320, 1322, 3, 2, 2, 2, 1321, 1312, 3, 2, 2, 2, 1321, 1322, 3, 2, 2, 2, 1322, 1341, 3, 2, 2, 2, 1323, 1325, 7, 48, 2, 2, 1324, 1326, 5, 317, 159, 2, 1325, 1324, 3, 2, 2, 2, 1326, 1327, 3, 2, 2, 2, 1327, 1325, 3, 2, 2, 2, 1327, 1328, 3, 2, 2, 2, 1328, 1338, 3, 2, 2, 2, 1329, 1331, 5, 327, 164, 2, 1330, 1332, 9, 7, 2, 2, 1331, 1330, 3, 2, 2, 2, 1331, 1332, 3, 2, 2, 2, 1332, 1334, 3, 2, 2, 2, 1333, 1335, 5, 317, 159, 2, 1334, 1333, 3, 2, 2, 2, 1335, 1336, 3, 2, 2, 2, 1336, 1334, 3, 2, 2, 2, 1336, 1337, 3, 2, 2, 2, 1337, 1339, 3, 2, 2, 2, 1338, 1329, 3, 2, 2, 2, 1338, 1339, 3, 2, 2, 2, 1339, 1341, 3, 2, 2, 2, 1340, 1299, 3, 2, 2, 2, 1340, 1323, 3, 2, 2, 2, 1341, 302, 3, 2, 2, 2, 1342, 1346, 7, 65, 2, 2, 1343, 1345, 5, 317, 159, 2, 1344, 1343, 3, 2, 2, 2, 1345, 1348, 3, 2, 2, 2, 1346, 1344, 3, 2, 2, 2, 1346, 1347, 3, 2, 2, 2, 1347, 1352, 3, 2, 2, 2, 1348, 1346, 3, 2, 2, 2, 1349, 1350, 9, 8, 2, 2, 1350, 1352, 5, 299, 150, 2, 1351, 1342, 3, 2, 2, 2, 1351, 1349, 3, 2, 2, 2, 1352, 304, 3, 2, 2, 2, 1353, 1359, 7, 41, 2, 2, 1354, 1358, 10, 9, 2, 2, 1355, 1356, 7, 41, 2, 2, 1356, 1358, 7, 41, 2, 2, 1357, 1354, 3, 2, 2, 2, 1357, 1355, 3, 2, 2, 2, 1358, 1361, 3, 2, 2, 2, 1359, 1357, 3, 2, 2, 2, 1359, 1360, 3, 2, 2, 2, 1360, 1362, 3, 2, 2, 2, 1361, 1359, 3, 2, 2, 2, 1362, 1363, 7, 41, 2, 2, 1363, 306, 3, 2, 2, 2, 1364, 1365, 5, 365, 183, 2, 1365, 1366, 5, 305, 153, 2, 1366, 308, 3, 2, 2, 2, 1367, 1368, 7, 47, 2, 2, 1368, 1369, 7, 47, 2, 2, 1369, 1373, 3, 2, 2, 2, 1370, 1372, 10, 10, 2, 2, 1371, 1370, 3, 2, 2, 2, 1372, 1375, 3, 2, 2, 2, 1373, 1371, 3, 2, 2, 2, 1373, 1374, 3, 2, 2, 2, 1374, 1376, 3, 2, 2, 2, 1375, 1373, 3, 2, 2, 2, 1376, 1377, 8, 155, 2, 2, 1377, 310, 3, 2, 2, 2, 1378, 1379, 7, 49, 2, 2, 1379, 1380, 7, 44, 2, 2, 1380, 1384, 3, 2, 2, 2, 1381, 1383, 11, 2, 2, 2, 1382, 1381, 3, 2, 2, 2, 1383, 1386, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1384, 1382, 3, 2, 2, 2, 1385, 1390, 3, 2, 2, 2, 1386, 1384, 3, 2, 2, 2, 1387, 1388, 7, 44, 2, 2, 1388, 1391, 7, 49, 2, 2, 1389, 1391, 7, 2, 2, 3, 1390, 1387, 3, 2, 2, 2, 1390, 1389, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, 1393, 8, 156, 2, 2, 1393, 312, 3, 2, 2, 2, 1394, 1395, 9, 11, 2, 2, 1395, 1396, 3, 2, 2, 2, 1396, 1397, 8, 157, 2, 2, 1397, 314, 3, 2, 2, 2, 1398, 1399, 11, 2, 2, 2, 1399, 316, 3, 2, 2, 2, 1400, 1401, 9, 12, 2, 2, 1401, 318, 3, 2, 2, 2, 1402, 1403, 9, 13, 2, 2, 1403, 320, 3, 2, 2, 2, 1404, 1405, 9, 14, 2, 2, 1405, 322, 3, 2, 2, 2, 1406, 1407, 9, 15, 2, 2, 1407, 324, 3, 2, 2, 2, 1408, 1409, 9, 16, 2, 2, 1409, 326, 3, 2, 2, 2, 1410, 1411, 9, 17, 2, 2, 1411, 328, 3, 2, 2, 2, 1412, 1413, 9, 18, 2, 2, 1413, 330, 3, 2, 2, 2, 1414, 1415, 9, 19, 2, 2, 1415, 332, 3, 2, 2, 2, 1416, 1417, 9, 20, 2, 2, 1417, 334, 3, 2, 2, 2, 1418, 1419, 9, 21, 2, 2, 1419, 336, 3, 2, 2, 2, 1420, 1421, 9, 22, 2, 2, 1421, 338, 3, 2, 2, 2, 1422, 1423, 9, 23, 2, 2, 1423, 340, 3, 2, 2, 2, 1424, 1425, 9, 24, 2, 2, 1425, 342, 3, 2, 2, 2, 1426, 1427, 9, 25, 2, 2, 1427, 344, 3, 2, 2, 2, 1428, 1429, 9, 26, 2, 2, 1429, 346, 3, 2, 2, 2, 1430, 1431, 9, 27, 2, 2, 1431, 348, 3, 2, 2, 2, 1432, 1433, 9, 28, 2, 2, 1433, 350, 3, 2, 2, 2, 1434, 1435, 9, 29, 2, 2, 1435, 352, 3, 2, 2, 2, 1436, 1437, 9, 30, 2, 2, 1437, 354, 3, 2, 2, 2, 1438, 1439, 9, 31, 2, 2, 1439, 356, 3, 2, 2, 2, 1440, 1441, 9, 32, 2, 2, 1441, 358, 3, 2, 2, 2, 1442, 1443, 9, 33, 2, 2, 1443, 360, 3, 2, 2, 2, 1444, 1445, 9, 34, 2, 2, 1445, 362, 3, 2, 2, 2, 1446, 1447, 9, 35, 2, 2, 1447, 364, 3, 2, 2, 2, 1448, 1449, 9, 36, 2, 2, 1449, 366, 3, 2, 2, 2, 1450, 1451, 9, 37, 2, 2, 1451, 368, 3, 2, 2, 2, 1452, 1453, 9, 38, 2, 2, 1453, 370, 3, 2, 2, 2, 28, 2, 1265, 1267, 1275, 1277, 1285, 1293, 1296, 1301, 1307, 1310, 1314, 1319, 1321, 1327, 1331, 1336, 1338, 1340, 1346, 1351, 1357, 1359, 1373, 1384, 1390, 3, 2, 3, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 194, 1798, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 7, 185, 1604, 10, 185, 12, 185, 14, 185, 1607, 11, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 7, 185, 1614, 10, 185, 12, 185, 14, 185, 1617, 11, 185, 3, 185, 3, 185, 3, 185, 7, 185, 1622, 10, 185, 12, 185, 14, 185, 1625, 11, 185, 3, 185, 3, 185, 3, 185, 7, 185, 1630, 10, 185, 12, 185, 14, 185, 1633, 11, 185, 5, 185, 1635, 10, 185, 3, 186, 6, 186, 1638, 10, 186, 13, 186, 14, 186, 1639, 3, 186, 3, 186, 7, 186, 1644, 10, 186, 12, 186, 14, 186, 1647, 11, 186, 5, 186, 1649, 10, 186, 3, 186, 3, 186, 6, 186, 1653, 10, 186, 13, 186, 14, 186, 1654, 5, 186, 1657, 10, 186, 3, 186, 3, 186, 5, 186, 1661, 10, 186, 3, 186, 6, 186, 1664, 10, 186, 13, 186, 14, 186, 1665, 5, 186, 1668, 10, 186, 3, 186, 3, 186, 3, 186, 3, 186, 6, 186, 1674, 10, 186, 13, 186, 14, 186, 1675, 5, 186, 1678, 10, 186, 3, 187, 3, 187, 7, 187, 1682, 10, 187, 12, 187, 14, 187, 1685, 11, 187, 3, 187, 3, 187, 5, 187, 1689, 10, 187, 3, 188, 3, 188, 3, 188, 3, 188, 7, 188, 1695, 10, 188, 12, 188, 14, 188, 1698, 11, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 7, 190, 1709, 10, 190, 12, 190, 14, 190, 1712, 11, 190, 3, 190, 5, 190, 1715, 10, 190, 3, 190, 3, 190, 5, 190, 1719, 10, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 7, 191, 1727, 10, 191, 12, 191, 14, 191, 1730, 11, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 194, 3, 194, 3, 195, 3, 195, 3, 196, 3, 196, 3, 197, 3, 197, 3, 198, 3, 198, 3, 199, 3, 199, 3, 200, 3, 200, 3, 201, 3, 201, 3, 202, 3, 202, 3, 203, 3, 203, 3, 204, 3, 204, 3, 205, 3, 205, 3, 206, 3, 206, 3, 207, 3, 207, 3, 208, 3, 208, 3, 209, 3, 209, 3, 210, 3, 210, 3, 211, 3, 211, 3, 212, 3, 212, 3, 213, 3, 213, 3, 214, 3, 214, 3, 215, 3, 215, 3, 216, 3, 216, 3, 217, 3, 217, 3, 218, 3, 218, 3, 219, 3, 219, 3, 220, 3, 220, 3, 221, 3, 221, 3, 1728, 2, 222, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 107, 213, 108, 215, 109, 217, 110, 219, 111, 221, 112, 223, 113, 225, 114, 227, 115, 229, 116, 231, 117, 233, 118, 235, 119, 237, 120, 239, 121, 241, 122, 243, 123, 245, 124, 247, 125, 249, 126, 251, 127, 253, 128, 255, 129, 257, 130, 259, 131, 261, 132, 263, 133, 265, 134, 267, 135, 269, 136, 271, 137, 273, 138, 275, 139, 277, 140, 279, 141, 281, 142, 283, 143, 285, 144, 287, 145, 289, 146, 291, 147, 293, 148, 295, 149, 297, 150, 299, 151, 301, 152, 303, 153, 305, 154, 307, 155, 309, 156, 311, 157, 313, 158, 315, 159, 317, 160, 319, 161, 321, 162, 323, 163, 325, 164, 327, 165, 329, 166, 331, 167, 333, 168, 335, 169, 337, 170, 339, 171, 341, 172, 343, 173, 345, 174, 347, 175, 349, 176, 351, 177, 353, 178, 355, 179, 357, 180, 359, 181, 361, 182, 363, 183, 365, 184, 367, 185, 369, 186, 371, 187, 373, 188, 375, 189, 377, 190, 379, 191, 381, 192, 383, 193, 385, 194, 387, 2, 389, 2, 391, 2, 393, 2, 395, 2, 397, 2, 399, 2, 401, 2, 403, 2, 405, 2, 407, 2, 409, 2, 411, 2, 413, 2, 415, 2, 417, 2, 419, 2, 421, 2, 423, 2, 425, 2, 427, 2, 429, 2, 431, 2, 433, 2, 435, 2, 437, 2, 439, 2, 441, 2, 3, 2, 40, 3, 2, 36, 36, 3, 2, 98, 98, 3, 2, 95, 95, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 4, 2, 45, 45, 47, 47, 5, 2, 38, 38, 60, 60, 66, 66, 3, 2, 41, 41, 4, 2, 12, 12, 15, 15, 5, 2, 11, 13, 15, 15, 34, 34, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 59, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 71, 71, 103, 103, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, 124, 124, 2, 1796, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, 3, 443, 3, 2, 2, 2, 5, 445, 3, 2, 2, 2, 7, 447, 3, 2, 2, 2, 9, 449, 3, 2, 2, 2, 11, 451, 3, 2, 2, 2, 13, 453, 3, 2, 2, 2, 15, 455, 3, 2, 2, 2, 17, 457, 3, 2, 2, 2, 19, 459, 3, 2, 2, 2, 21, 461, 3, 2, 2, 2, 23, 463, 3, 2, 2, 2, 25, 466, 3, 2, 2, 2, 27, 468, 3, 2, 2, 2, 29, 470, 3, 2, 2, 2, 31, 473, 3, 2, 2, 2, 33, 476, 3, 2, 2, 2, 35, 478, 3, 2, 2, 2, 37, 480, 3, 2, 2, 2, 39, 482, 3, 2, 2, 2, 41, 485, 3, 2, 2, 2, 43, 487, 3, 2, 2, 2, 45, 490, 3, 2, 2, 2, 47, 493, 3, 2, 2, 2, 49, 496, 3, 2, 2, 2, 51, 499, 3, 2, 2, 2, 53, 505, 3, 2, 2, 2, 55, 512, 3, 2, 2, 2, 57, 516, 3, 2, 2, 2, 59, 522, 3, 2, 2, 2, 61, 526, 3, 2, 2, 2, 63, 532, 3, 2, 2, 2, 65, 540, 3, 2, 2, 2, 67, 544, 3, 2, 2, 2, 69, 547, 3, 2, 2, 2, 71, 551, 3, 2, 2, 2, 73, 558, 3, 2, 2, 2, 75, 572, 3, 2, 2, 2, 77, 579, 3, 2, 2, 2, 79, 585, 3, 2, 2, 2, 81, 593, 3, 2, 2, 2, 83, 596, 3, 2, 2, 2, 85, 604, 3, 2, 2, 2, 87, 609, 3, 2, 2, 2, 89, 614, 3, 2, 2, 2, 91, 620, 3, 2, 2, 2, 93, 628, 3, 2, 2, 2, 95, 635, 3, 2, 2, 2, 97, 642, 3, 2, 2, 2, 99, 651, 3, 2, 2, 2, 101, 662, 3, 2, 2, 2, 103, 669, 3, 2, 2, 2, 105, 675, 3, 2, 2, 2, 107, 688, 3, 2, 2, 2, 109, 701, 3, 2, 2, 2, 111, 719, 3, 2, 2, 2, 113, 728, 3, 2, 2, 2, 115, 736, 3, 2, 2, 2, 117, 747, 3, 2, 2, 2, 119, 756, 3, 2, 2, 2, 121, 763, 3, 2, 2, 2, 123, 768, 3, 2, 2, 2, 125, 775, 3, 2, 2, 2, 127, 784, 3, 2, 2, 2, 129, 789, 3, 2, 2, 2, 131, 794, 3, 2, 2, 2, 133, 799, 3, 2, 2, 2, 135, 803, 3, 2, 2, 2, 137, 810, 3, 2, 2, 2, 139, 817, 3, 2, 2, 2, 141, 827, 3, 2, 2, 2, 143, 834, 3, 2, 2, 2, 145, 842, 3, 2, 2, 2, 147, 847, 3, 2, 2, 2, 149, 851, 3, 2, 2, 2, 151, 859, 3, 2, 2, 2, 153, 864, 3, 2, 2, 2, 155, 869, 3, 2, 2, 2, 157, 874, 3, 2, 2, 2, 159, 880, 3, 2, 2, 2, 161, 887, 3, 2, 2, 2, 163, 890, 3, 2, 2, 2, 165, 897, 3, 2, 2, 2, 167, 907, 3, 2, 2, 2, 169, 910, 3, 2, 2, 2, 171, 916, 3, 2, 2, 2, 173, 924, 3, 2, 2, 2, 175, 934, 3, 2, 2, 2, 177, 940, 3, 2, 2, 2, 179, 947, 3, 2, 2, 2, 181, 955, 3, 2, 2, 2, 183, 965, 3, 2, 2, 2, 185, 970, 3, 2, 2, 2, 187, 973, 3, 2, 2, 2, 189, 980, 3, 2, 2, 2, 191, 985, 3, 2, 2, 2, 193, 989, 3, 2, 2, 2, 195, 994, 3, 2, 2, 2, 197, 999, 3, 2, 2, 2, 199, 1005, 3, 2, 2, 2, 201, 1011, 3, 2, 2, 2, 203, 1019, 3, 2, 2, 2, 205, 1022, 3, 2, 2, 2, 207, 1026, 3, 2, 2, 2, 209, 1034, 3, 2, 2, 2, 211, 1039, 3, 2, 2, 2, 213, 1042, 3, 2, 2, 2, 215, 1049, 3, 2, 2, 2, 217, 1052, 3, 2, 2, 2, 219, 1055, 3, 2, 2, 2, 221, 1061, 3, 2, 2, 2, 223, 1067, 3, 2, 2, 2, 225, 1072, 3, 2, 2, 2, 227, 1079, 3, 2, 2, 2, 229, 1087, 3, 2, 2, 2, 231, 1093, 3, 2, 2, 2, 233, 1099, 3, 2, 2, 2, 235, 1109, 3, 2, 2, 2, 237, 1120, 3, 2, 2, 2, 239, 1127, 3, 2, 2, 2, 241, 1135, 3, 2, 2, 2, 243, 1143, 3, 2, 2, 2, 245, 1150, 3, 2, 2, 2, 247, 1158, 3, 2, 2, 2, 249, 1167, 3, 2, 2, 2, 251, 1173, 3, 2, 2, 2, 253, 1182, 3, 2, 2, 2, 255, 1186, 3, 2, 2, 2, 257, 1191, 3, 2, 2, 2, 259, 1201, 3, 2, 2, 2, 261, 1208, 3, 2, 2, 2, 263, 1212, 3, 2, 2, 2, 265, 1218, 3, 2, 2, 2, 267, 1223, 3, 2, 2, 2, 269, 1233, 3, 2, 2, 2, 271, 1238, 3, 2, 2, 2, 273, 1241, 3, 2, 2, 2, 275, 1253, 3, 2, 2, 2, 277, 1261, 3, 2, 2, 2, 279, 1267, 3, 2, 2, 2, 281, 1274, 3, 2, 2, 2, 283, 1281, 3, 2, 2, 2, 285, 1287, 3, 2, 2, 2, 287, 1294, 3, 2, 2, 2, 289, 1301, 3, 2, 2, 2, 291, 1306, 3, 2, 2, 2, 293, 1314, 3, 2, 2, 2, 295, 1319, 3, 2, 2, 2, 297, 1325, 3, 2, 2, 2, 299, 1330, 3, 2, 2, 2, 301, 1338, 3, 2, 2, 2, 303, 1350, 3, 2, 2, 2, 305, 1355, 3, 2, 2, 2, 307, 1365, 3, 2, 2, 2, 309, 1371, 3, 2, 2, 2, 311, 1381, 3, 2, 2, 2, 313, 1391, 3, 2, 2, 2, 315, 1399, 3, 2, 2, 2, 317, 1409, 3, 2, 2, 2, 319, 1419, 3, 2, 2, 2, 321, 1430, 3, 2, 2, 2, 323, 1434, 3, 2, 2, 2, 325, 1445, 3, 2, 2, 2, 327, 1450, 3, 2, 2, 2, 329, 1460, 3, 2, 2, 2, 331, 1466, 3, 2, 2, 2, 333, 1479, 3, 2, 2, 2, 335, 1484, 3, 2, 2, 2, 337, 1495, 3, 2, 2, 2, 339, 1505, 3, 2, 2, 2, 341, 1512, 3, 2, 2, 2, 343, 1519, 3, 2, 2, 2, 345, 1524, 3, 2, 2, 2, 347, 1530, 3, 2, 2, 2, 349, 1537, 3, 2, 2, 2, 351, 1543, 3, 2, 2, 2, 353, 1549, 3, 2, 2, 2, 355, 1554, 3, 2, 2, 2, 357, 1561, 3, 2, 2, 2, 359, 1568, 3, 2, 2, 2, 361, 1576, 3, 2, 2, 2, 363, 1581, 3, 2, 2, 2, 365, 1588, 3, 2, 2, 2, 367, 1591, 3, 2, 2, 2, 369, 1634, 3, 2, 2, 2, 371, 1677, 3, 2, 2, 2, 373, 1688, 3, 2, 2, 2, 375, 1690, 3, 2, 2, 2, 377, 1701, 3, 2, 2, 2, 379, 1704, 3, 2, 2, 2, 381, 1722, 3, 2, 2, 2, 383, 1736, 3, 2, 2, 2, 385, 1740, 3, 2, 2, 2, 387, 1742, 3, 2, 2, 2, 389, 1744, 3, 2, 2, 2, 391, 1746, 3, 2, 2, 2, 393, 1748, 3, 2, 2, 2, 395, 1750, 3, 2, 2, 2, 397, 1752, 3, 2, 2, 2, 399, 1754, 3, 2, 2, 2, 401, 1756, 3, 2, 2, 2, 403, 1758, 3, 2, 2, 2, 405, 1760, 3, 2, 2, 2, 407, 1762, 3, 2, 2, 2, 409, 1764, 3, 2, 2, 2, 411, 1766, 3, 2, 2, 2, 413, 1768, 3, 2, 2, 2, 415, 1770, 3, 2, 2, 2, 417, 1772, 3, 2, 2, 2, 419, 1774, 3, 2, 2, 2, 421, 1776, 3, 2, 2, 2, 423, 1778, 3, 2, 2, 2, 425, 1780, 3, 2, 2, 2, 427, 1782, 3, 2, 2, 2, 429, 1784, 3, 2, 2, 2, 431, 1786, 3, 2, 2, 2, 433, 1788, 3, 2, 2, 2, 435, 1790, 3, 2, 2, 2, 437, 1792, 3, 2, 2, 2, 439, 1794, 3, 2, 2, 2, 441, 1796, 3, 2, 2, 2, 443, 444, 7, 61, 2, 2, 444, 4, 3, 2, 2, 2, 445, 446, 7, 48, 2, 2, 446, 6, 3, 2, 2, 2, 447, 448, 7, 42, 2, 2, 448, 8, 3, 2, 2, 2, 449, 450, 7, 43, 2, 2, 450, 10, 3, 2, 2, 2, 451, 452, 7, 46, 2, 2, 452, 12, 3, 2, 2, 2, 453, 454, 7, 63, 2, 2, 454, 14, 3, 2, 2, 2, 455, 456, 7, 44, 2, 2, 456, 16, 3, 2, 2, 2, 457, 458, 7, 45, 2, 2, 458, 18, 3, 2, 2, 2, 459, 460, 7, 47, 2, 2, 460, 20, 3, 2, 2, 2, 461, 462, 7, 128, 2, 2, 462, 22, 3, 2, 2, 2, 463, 464, 7, 126, 2, 2, 464, 465, 7, 126, 2, 2, 465, 24, 3, 2, 2, 2, 466, 467, 7, 49, 2, 2, 467, 26, 3, 2, 2, 2, 468, 469, 7, 39, 2, 2, 469, 28, 3, 2, 2, 2, 470, 471, 7, 62, 2, 2, 471, 472, 7, 62, 2, 2, 472, 30, 3, 2, 2, 2, 473, 474, 7, 64, 2, 2, 474, 475, 7, 64, 2, 2, 475, 32, 3, 2, 2, 2, 476, 477, 7, 40, 2, 2, 477, 34, 3, 2, 2, 2, 478, 479, 7, 126, 2, 2, 479, 36, 3, 2, 2, 2, 480, 481, 7, 62, 2, 2, 481, 38, 3, 2, 2, 2, 482, 483, 7, 62, 2, 2, 483, 484, 7, 63, 2, 2, 484, 40, 3, 2, 2, 2, 485, 486, 7, 64, 2, 2, 486, 42, 3, 2, 2, 2, 487, 488, 7, 64, 2, 2, 488, 489, 7, 63, 2, 2, 489, 44, 3, 2, 2, 2, 490, 491, 7, 63, 2, 2, 491, 492, 7, 63, 2, 2, 492, 46, 3, 2, 2, 2, 493, 494, 7, 35, 2, 2, 494, 495, 7, 63, 2, 2, 495, 48, 3, 2, 2, 2, 496, 497, 7, 62, 2, 2, 497, 498, 7, 64, 2, 2, 498, 50, 3, 2, 2, 2, 499, 500, 5, 391, 196, 2, 500, 501, 5, 393, 197, 2, 501, 502, 5, 419, 210, 2, 502, 503, 5, 425, 213, 2, 503, 504, 5, 429, 215, 2, 504, 52, 3, 2, 2, 2, 505, 506, 5, 391, 196, 2, 506, 507, 5, 395, 198, 2, 507, 508, 5, 429, 215, 2, 508, 509, 5, 407, 204, 2, 509, 510, 5, 419, 210, 2, 510, 511, 5, 417, 209, 2, 511, 54, 3, 2, 2, 2, 512, 513, 5, 391, 196, 2, 513, 514, 5, 397, 199, 2, 514, 515, 5, 397, 199, 2, 515, 56, 3, 2, 2, 2, 516, 517, 5, 391, 196, 2, 517, 518, 5, 401, 201, 2, 518, 519, 5, 429, 215, 2, 519, 520, 5, 399, 200, 2, 520, 521, 5, 425, 213, 2, 521, 58, 3, 2, 2, 2, 522, 523, 5, 391, 196, 2, 523, 524, 5, 413, 207, 2, 524, 525, 5, 413, 207, 2, 525, 60, 3, 2, 2, 2, 526, 527, 5, 391, 196, 2, 527, 528, 5, 413, 207, 2, 528, 529, 5, 429, 215, 2, 529, 530, 5, 399, 200, 2, 530, 531, 5, 425, 213, 2, 531, 62, 3, 2, 2, 2, 532, 533, 5, 391, 196, 2, 533, 534, 5, 417, 209, 2, 534, 535, 5, 391, 196, 2, 535, 536, 5, 413, 207, 2, 536, 537, 5, 439, 220, 2, 537, 538, 5, 441, 221, 2, 538, 539, 5, 399, 200, 2, 539, 64, 3, 2, 2, 2, 540, 541, 5, 391, 196, 2, 541, 542, 5, 417, 209, 2, 542, 543, 5, 397, 199, 2, 543, 66, 3, 2, 2, 2, 544, 545, 5, 391, 196, 2, 545, 546, 5, 427, 214, 2, 546, 68, 3, 2, 2, 2, 547, 548, 5, 391, 196, 2, 548, 549, 5, 427, 214, 2, 549, 550, 5, 395, 198, 2, 550, 70, 3, 2, 2, 2, 551, 552, 5, 391, 196, 2, 552, 553, 5, 429, 215, 2, 553, 554, 5, 429, 215, 2, 554, 555, 5, 391, 196, 2, 555, 556, 5, 395, 198, 2, 556, 557, 5, 405, 203, 2, 557, 72, 3, 2, 2, 2, 558, 559, 5, 391, 196, 2, 559, 560, 5, 431, 216, 2, 560, 561, 5, 429, 215, 2, 561, 562, 5, 419, 210, 2, 562, 563, 5, 407, 204, 2, 563, 564, 5, 417, 209, 2, 564, 565, 5, 395, 198, 2, 565, 566, 5, 425, 213, 2, 566, 567, 5, 399, 200, 2, 567, 568, 5, 415, 208, 2, 568, 569, 5, 399, 200, 2, 569, 570, 5, 417, 209, 2, 570, 571, 5, 429, 215, 2, 571, 74, 3, 2, 2, 2, 572, 573, 5, 393, 197, 2, 573, 574, 5, 399, 200, 2, 574, 575, 5, 401, 201, 2, 575, 576, 5, 419, 210, 2, 576, 577, 5, 425, 213, 2, 577, 578, 5, 399, 200, 2, 578, 76, 3, 2, 2, 2, 579, 580, 5, 393, 197, 2, 580, 581, 5, 399, 200, 2, 581, 582, 5, 403, 202, 2, 582, 583, 5, 407, 204, 2, 583, 584, 5, 417, 209, 2, 584, 78, 3, 2, 2, 2, 585, 586, 5, 393, 197, 2, 586, 587, 5, 399, 200, 2, 587, 588, 5, 429, 215, 2, 588, 589, 5, 435, 218, 2, 589, 590, 5, 399, 200, 2, 590, 591, 5, 399, 200, 2, 591, 592, 5, 417, 209, 2, 592, 80, 3, 2, 2, 2, 593, 594, 5, 393, 197, 2, 594, 595, 5, 439, 220, 2, 595, 82, 3, 2, 2, 2, 596, 597, 5, 395, 198, 2, 597, 598, 5, 391, 196, 2, 598, 599, 5, 427, 214, 2, 599, 600, 5, 395, 198, 2, 600, 601, 5, 391, 196, 2, 601, 602, 5, 397, 199, 2, 602, 603, 5, 399, 200, 2, 603, 84, 3, 2, 2, 2, 604, 605, 5, 395, 198, 2, 605, 606, 5, 391, 196, 2, 606, 607, 5, 427, 214, 2, 607, 608, 5, 399, 200, 2, 608, 86, 3, 2, 2, 2, 609, 610, 5, 395, 198, 2, 610, 611, 5, 391, 196, 2, 611, 612, 5, 427, 214, 2, 612, 613, 5, 429, 215, 2, 613, 88, 3, 2, 2, 2, 614, 615, 5, 395, 198, 2, 615, 616, 5, 405, 203, 2, 616, 617, 5, 399, 200, 2, 617, 618, 5, 395, 198, 2, 618, 619, 5, 411, 206, 2, 619, 90, 3, 2, 2, 2, 620, 621, 5, 395, 198, 2, 621, 622, 5, 419, 210, 2, 622, 623, 5, 413, 207, 2, 623, 624, 5, 413, 207, 2, 624, 625, 5, 391, 196, 2, 625, 626, 5, 429, 215, 2, 626, 627, 5, 399, 200, 2, 627, 92, 3, 2, 2, 2, 628, 629, 5, 395, 198, 2, 629, 630, 5, 419, 210, 2, 630, 631, 5, 413, 207, 2, 631, 632, 5, 431, 216, 2, 632, 633, 5, 415, 208, 2, 633, 634, 5, 417, 209, 2, 634, 94, 3, 2, 2, 2, 635, 636, 5, 395, 198, 2, 636, 637, 5, 419, 210, 2, 637, 638, 5, 415, 208, 2, 638, 639, 5, 415, 208, 2, 639, 640, 5, 407, 204, 2, 640, 641, 5, 429, 215, 2, 641, 96, 3, 2, 2, 2, 642, 643, 5, 395, 198, 2, 643, 644, 5, 419, 210, 2, 644, 645, 5, 417, 209, 2, 645, 646, 5, 401, 201, 2, 646, 647, 5, 413, 207, 2, 647, 648, 5, 407, 204, 2, 648, 649, 5, 395, 198, 2, 649, 650, 5, 429, 215, 2, 650, 98, 3, 2, 2, 2, 651, 652, 5, 395, 198, 2, 652, 653, 5, 419, 210, 2, 653, 654, 5, 417, 209, 2, 654, 655, 5, 427, 214, 2, 655, 656, 5, 429, 215, 2, 656, 657, 5, 425, 213, 2, 657, 658, 5, 391, 196, 2, 658, 659, 5, 407, 204, 2, 659, 660, 5, 417, 209, 2, 660, 661, 5, 429, 215, 2, 661, 100, 3, 2, 2, 2, 662, 663, 5, 395, 198, 2, 663, 664, 5, 425, 213, 2, 664, 665, 5, 399, 200, 2, 665, 666, 5, 391, 196, 2, 666, 667, 5, 429, 215, 2, 667, 668, 5, 399, 200, 2, 668, 102, 3, 2, 2, 2, 669, 670, 5, 395, 198, 2, 670, 671, 5, 425, 213, 2, 671, 672, 5, 419, 210, 2, 672, 673, 5, 427, 214, 2, 673, 674, 5, 427, 214, 2, 674, 104, 3, 2, 2, 2, 675, 676, 5, 395, 198, 2, 676, 677, 5, 431, 216, 2, 677, 678, 5, 425, 213, 2, 678, 679, 5, 425, 213, 2, 679, 680, 5, 399, 200, 2, 680, 681, 5, 417, 209, 2, 681, 682, 5, 429, 215, 2, 682, 683, 7, 97, 2, 2, 683, 684, 5, 397, 199, 2, 684, 685, 5, 391, 196, 2, 685, 686, 5, 429, 215, 2, 686, 687, 5, 399, 200, 2, 687, 106, 3, 2, 2, 2, 688, 689, 5, 395, 198, 2, 689, 690, 5, 431, 216, 2, 690, 691, 5, 425, 213, 2, 691, 692, 5, 425, 213, 2, 692, 693, 5, 399, 200, 2, 693, 694, 5, 417, 209, 2, 694, 695, 5, 429, 215, 2, 695, 696, 7, 97, 2, 2, 696, 697, 5, 429, 215, 2, 697, 698, 5, 407, 204, 2, 698, 699, 5, 415, 208, 2, 699, 700, 5, 399, 200, 2, 700, 108, 3, 2, 2, 2, 701, 702, 5, 395, 198, 2, 702, 703, 5, 431, 216, 2, 703, 704, 5, 425, 213, 2, 704, 705, 5, 425, 213, 2, 705, 706, 5, 399, 200, 2, 706, 707, 5, 417, 209, 2, 707, 708, 5, 429, 215, 2, 708, 709, 7, 97, 2, 2, 709, 710, 5, 429, 215, 2, 710, 711, 5, 407, 204, 2, 711, 712, 5, 415, 208, 2, 712, 713, 5, 399, 200, 2, 713, 714, 5, 427, 214, 2, 714, 715, 5, 429, 215, 2, 715, 716, 5, 391, 196, 2, 716, 717, 5, 415, 208, 2, 717, 718, 5, 421, 211, 2, 718, 110, 3, 2, 2, 2, 719, 720, 5, 397, 199, 2, 720, 721, 5, 391, 196, 2, 721, 722, 5, 429, 215, 2, 722, 723, 5, 391, 196, 2, 723, 724, 5, 393, 197, 2, 724, 725, 5, 391, 196, 2, 725, 726, 5, 427, 214, 2, 726, 727, 5, 399, 200, 2, 727, 112, 3, 2, 2, 2, 728, 729, 5, 397, 199, 2, 729, 730, 5, 399, 200, 2, 730, 731, 5, 401, 201, 2, 731, 732, 5, 391, 196, 2, 732, 733, 5, 431, 216, 2, 733, 734, 5, 413, 207, 2, 734, 735, 5, 429, 215, 2, 735, 114, 3, 2, 2, 2, 736, 737, 5, 397, 199, 2, 737, 738, 5, 399, 200, 2, 738, 739, 5, 401, 201, 2, 739, 740, 5, 399, 200, 2, 740, 741, 5, 425, 213, 2, 741, 742, 5, 425, 213, 2, 742, 743, 5, 391, 196, 2, 743, 744, 5, 393, 197, 2, 744, 745, 5, 413, 207, 2, 745, 746, 5, 399, 200, 2, 746, 116, 3, 2, 2, 2, 747, 748, 5, 397, 199, 2, 748, 749, 5, 399, 200, 2, 749, 750, 5, 401, 201, 2, 750, 751, 5, 399, 200, 2, 751, 752, 5, 425, 213, 2, 752, 753, 5, 425, 213, 2, 753, 754, 5, 399, 200, 2, 754, 755, 5, 397, 199, 2, 755, 118, 3, 2, 2, 2, 756, 757, 5, 397, 199, 2, 757, 758, 5, 399, 200, 2, 758, 759, 5, 413, 207, 2, 759, 760, 5, 399, 200, 2, 760, 761, 5, 429, 215, 2, 761, 762, 5, 399, 200, 2, 762, 120, 3, 2, 2, 2, 763, 764, 5, 397, 199, 2, 764, 765, 5, 399, 200, 2, 765, 766, 5, 427, 214, 2, 766, 767, 5, 395, 198, 2, 767, 122, 3, 2, 2, 2, 768, 769, 5, 397, 199, 2, 769, 770, 5, 399, 200, 2, 770, 771, 5, 429, 215, 2, 771, 772, 5, 391, 196, 2, 772, 773, 5, 395, 198, 2, 773, 774, 5, 405, 203, 2, 774, 124, 3, 2, 2, 2, 775, 776, 5, 397, 199, 2, 776, 777, 5, 407, 204, 2, 777, 778, 5, 427, 214, 2, 778, 779, 5, 429, 215, 2, 779, 780, 5, 407, 204, 2, 780, 781, 5, 417, 209, 2, 781, 782, 5, 395, 198, 2, 782, 783, 5, 429, 215, 2, 783, 126, 3, 2, 2, 2, 784, 785, 5, 397, 199, 2, 785, 786, 5, 425, 213, 2, 786, 787, 5, 419, 210, 2, 787, 788, 5, 421, 211, 2, 788, 128, 3, 2, 2, 2, 789, 790, 5, 399, 200, 2, 790, 791, 5, 391, 196, 2, 791, 792, 5, 395, 198, 2, 792, 793, 5, 405, 203, 2, 793, 130, 3, 2, 2, 2, 794, 795, 5, 399, 200, 2, 795, 796, 5, 413, 207, 2, 796, 797, 5, 427, 214, 2, 797, 798, 5, 399, 200, 2, 798, 132, 3, 2, 2, 2, 799, 800, 5, 399, 200, 2, 800, 801, 5, 417, 209, 2, 801, 802, 5, 397, 199, 2, 802, 134, 3, 2, 2, 2, 803, 804, 5, 399, 200, 2, 804, 805, 5, 427, 214, 2, 805, 806, 5, 395, 198, 2, 806, 807, 5, 391, 196, 2, 807, 808, 5, 421, 211, 2, 808, 809, 5, 399, 200, 2, 809, 136, 3, 2, 2, 2, 810, 811, 5, 399, 200, 2, 811, 812, 5, 437, 219, 2, 812, 813, 5, 395, 198, 2, 813, 814, 5, 399, 200, 2, 814, 815, 5, 421, 211, 2, 815, 816, 5, 429, 215, 2, 816, 138, 3, 2, 2, 2, 817, 818, 5, 399, 200, 2, 818, 819, 5, 437, 219, 2, 819, 820, 5, 395, 198, 2, 820, 821, 5, 413, 207, 2, 821, 822, 5, 431, 216, 2, 822, 823, 5, 427, 214, 2, 823, 824, 5, 407, 204, 2, 824, 825, 5, 433, 217, 2, 825, 826, 5, 399, 200, 2, 826, 140, 3, 2, 2, 2, 827, 828, 5, 399, 200, 2, 828, 829, 5, 437, 219, 2, 829, 830, 5, 407, 204, 2, 830, 831, 5, 427, 214, 2, 831, 832, 5, 429, 215, 2, 832, 833, 5, 427, 214, 2, 833, 142, 3, 2, 2, 2, 834, 835, 5, 399, 200, 2, 835, 836, 5, 437, 219, 2, 836, 837, 5, 421, 211, 2, 837, 838, 5, 413, 207, 2, 838, 839, 5, 391, 196, 2, 839, 840, 5, 407, 204, 2, 840, 841, 5, 417, 209, 2, 841, 144, 3, 2, 2, 2, 842, 843, 5, 401, 201, 2, 843, 844, 5, 391, 196, 2, 844, 845, 5, 407, 204, 2, 845, 846, 5, 413, 207, 2, 846, 146, 3, 2, 2, 2, 847, 848, 5, 401, 201, 2, 848, 849, 5, 419, 210, 2, 849, 850, 5, 425, 213, 2, 850, 148, 3, 2, 2, 2, 851, 852, 5, 401, 201, 2, 852, 853, 5, 419, 210, 2, 853, 854, 5, 425, 213, 2, 854, 855, 5, 399, 200, 2, 855, 856, 5, 407, 204, 2, 856, 857, 5, 403, 202, 2, 857, 858, 5, 417, 209, 2, 858, 150, 3, 2, 2, 2, 859, 860, 5, 401, 201, 2, 860, 861, 5, 425, 213, 2, 861, 862, 5, 419, 210, 2, 862, 863, 5, 415, 208, 2, 863, 152, 3, 2, 2, 2, 864, 865, 5, 401, 201, 2, 865, 866, 5, 431, 216, 2, 866, 867, 5, 413, 207, 2, 867, 868, 5, 413, 207, 2, 868, 154, 3, 2, 2, 2, 869, 870, 5, 403, 202, 2, 870, 871, 5, 413, 207, 2, 871, 872, 5, 419, 210, 2, 872, 873, 5, 393, 197, 2, 873, 156, 3, 2, 2, 2, 874, 875, 5, 403, 202, 2, 875, 876, 5, 425, 213, 2, 876, 877, 5, 419, 210, 2, 877, 878, 5, 431, 216, 2, 878, 879, 5, 421, 211, 2, 879, 158, 3, 2, 2, 2, 880, 881, 5, 405, 203, 2, 881, 882, 5, 391, 196, 2, 882, 883, 5, 433, 217, 2, 883, 884, 5, 407, 204, 2, 884, 885, 5, 417, 209, 2, 885, 886, 5, 403, 202, 2, 886, 160, 3, 2, 2, 2, 887, 888, 5, 407, 204, 2, 888, 889, 5, 401, 201, 2, 889, 162, 3, 2, 2, 2, 890, 891, 5, 407, 204, 2, 891, 892, 5, 403, 202, 2, 892, 893, 5, 417, 209, 2, 893, 894, 5, 419, 210, 2, 894, 895, 5, 425, 213, 2, 895, 896, 5, 399, 200, 2, 896, 164, 3, 2, 2, 2, 897, 898, 5, 407, 204, 2, 898, 899, 5, 415, 208, 2, 899, 900, 5, 415, 208, 2, 900, 901, 5, 399, 200, 2, 901, 902, 5, 397, 199, 2, 902, 903, 5, 407, 204, 2, 903, 904, 5, 391, 196, 2, 904, 905, 5, 429, 215, 2, 905, 906, 5, 399, 200, 2, 906, 166, 3, 2, 2, 2, 907, 908, 5, 407, 204, 2, 908, 909, 5, 417, 209, 2, 909, 168, 3, 2, 2, 2, 910, 911, 5, 407, 204, 2, 911, 912, 5, 417, 209, 2, 912, 913, 5, 397, 199, 2, 913, 914, 5, 399, 200, 2, 914, 915, 5, 437, 219, 2, 915, 170, 3, 2, 2, 2, 916, 917, 5, 407, 204, 2, 917, 918, 5, 417, 209, 2, 918, 919, 5, 397, 199, 2, 919, 920, 5, 399, 200, 2, 920, 921, 5, 437, 219, 2, 921, 922, 5, 399, 200, 2, 922, 923, 5, 397, 199, 2, 923, 172, 3, 2, 2, 2, 924, 925, 5, 407, 204, 2, 925, 926, 5, 417, 209, 2, 926, 927, 5, 407, 204, 2, 927, 928, 5, 429, 215, 2, 928, 929, 5, 407, 204, 2, 929, 930, 5, 391, 196, 2, 930, 931, 5, 413, 207, 2, 931, 932, 5, 413, 207, 2, 932, 933, 5, 439, 220, 2, 933, 174, 3, 2, 2, 2, 934, 935, 5, 407, 204, 2, 935, 936, 5, 417, 209, 2, 936, 937, 5, 417, 209, 2, 937, 938, 5, 399, 200, 2, 938, 939, 5, 425, 213, 2, 939, 176, 3, 2, 2, 2, 940, 941, 5, 407, 204, 2, 941, 942, 5, 417, 209, 2, 942, 943, 5, 427, 214, 2, 943, 944, 5, 399, 200, 2, 944, 945, 5, 425, 213, 2, 945, 946, 5, 429, 215, 2, 946, 178, 3, 2, 2, 2, 947, 948, 5, 407, 204, 2, 948, 949, 5, 417, 209, 2, 949, 950, 5, 427, 214, 2, 950, 951, 5, 429, 215, 2, 951, 952, 5, 399, 200, 2, 952, 953, 5, 391, 196, 2, 953, 954, 5, 397, 199, 2, 954, 180, 3, 2, 2, 2, 955, 956, 5, 407, 204, 2, 956, 957, 5, 417, 209, 2, 957, 958, 5, 429, 215, 2, 958, 959, 5, 399, 200, 2, 959, 960, 5, 425, 213, 2, 960, 961, 5, 427, 214, 2, 961, 962, 5, 399, 200, 2, 962, 963, 5, 395, 198, 2, 963, 964, 5, 429, 215, 2, 964, 182, 3, 2, 2, 2, 965, 966, 5, 407, 204, 2, 966, 967, 5, 417, 209, 2, 967, 968, 5, 429, 215, 2, 968, 969, 5, 419, 210, 2, 969, 184, 3, 2, 2, 2, 970, 971, 5, 407, 204, 2, 971, 972, 5, 427, 214, 2, 972, 186, 3, 2, 2, 2, 973, 974, 5, 407, 204, 2, 974, 975, 5, 427, 214, 2, 975, 976, 5, 417, 209, 2, 976, 977, 5, 431, 216, 2, 977, 978, 5, 413, 207, 2, 978, 979, 5, 413, 207, 2, 979, 188, 3, 2, 2, 2, 980, 981, 5, 409, 205, 2, 981, 982, 5, 419, 210, 2, 982, 983, 5, 407, 204, 2, 983, 984, 5, 417, 209, 2, 984, 190, 3, 2, 2, 2, 985, 986, 5, 411, 206, 2, 986, 987, 5, 399, 200, 2, 987, 988, 5, 439, 220, 2, 988, 192, 3, 2, 2, 2, 989, 990, 5, 413, 207, 2, 990, 991, 5, 399, 200, 2, 991, 992, 5, 401, 201, 2, 992, 993, 5, 429, 215, 2, 993, 194, 3, 2, 2, 2, 994, 995, 5, 413, 207, 2, 995, 996, 5, 407, 204, 2, 996, 997, 5, 411, 206, 2, 997, 998, 5, 399, 200, 2, 998, 196, 3, 2, 2, 2, 999, 1000, 5, 413, 207, 2, 1000, 1001, 5, 407, 204, 2, 1001, 1002, 5, 415, 208, 2, 1002, 1003, 5, 407, 204, 2, 1003, 1004, 5, 429, 215, 2, 1004, 198, 3, 2, 2, 2, 1005, 1006, 5, 415, 208, 2, 1006, 1007, 5, 391, 196, 2, 1007, 1008, 5, 429, 215, 2, 1008, 1009, 5, 395, 198, 2, 1009, 1010, 5, 405, 203, 2, 1010, 200, 3, 2, 2, 2, 1011, 1012, 5, 417, 209, 2, 1012, 1013, 5, 391, 196, 2, 1013, 1014, 5, 429, 215, 2, 1014, 1015, 5, 431, 216, 2, 1015, 1016, 5, 425, 213, 2, 1016, 1017, 5, 391, 196, 2, 1017, 1018, 5, 413, 207, 2, 1018, 202, 3, 2, 2, 2, 1019, 1020, 5, 417, 209, 2, 1020, 1021, 5, 419, 210, 2, 1021, 204, 3, 2, 2, 2, 1022, 1023, 5, 417, 209, 2, 1023, 1024, 5, 419, 210, 2, 1024, 1025, 5, 429, 215, 2, 1025, 206, 3, 2, 2, 2, 1026, 1027, 5, 417, 209, 2, 1027, 1028, 5, 419, 210, 2, 1028, 1029, 5, 429, 215, 2, 1029, 1030, 5, 417, 209, 2, 1030, 1031, 5, 431, 216, 2, 1031, 1032, 5, 413, 207, 2, 1032, 1033, 5, 413, 207, 2, 1033, 208, 3, 2, 2, 2, 1034, 1035, 5, 417, 209, 2, 1035, 1036, 5, 431, 216, 2, 1036, 1037, 5, 413, 207, 2, 1037, 1038, 5, 413, 207, 2, 1038, 210, 3, 2, 2, 2, 1039, 1040, 5, 419, 210, 2, 1040, 1041, 5, 401, 201, 2, 1041, 212, 3, 2, 2, 2, 1042, 1043, 5, 419, 210, 2, 1043, 1044, 5, 401, 201, 2, 1044, 1045, 5, 401, 201, 2, 1045, 1046, 5, 427, 214, 2, 1046, 1047, 5, 399, 200, 2, 1047, 1048, 5, 429, 215, 2, 1048, 214, 3, 2, 2, 2, 1049, 1050, 5, 419, 210, 2, 1050, 1051, 5, 417, 209, 2, 1051, 216, 3, 2, 2, 2, 1052, 1053, 5, 419, 210, 2, 1053, 1054, 5, 425, 213, 2, 1054, 218, 3, 2, 2, 2, 1055, 1056, 5, 419, 210, 2, 1056, 1057, 5, 425, 213, 2, 1057, 1058, 5, 397, 199, 2, 1058, 1059, 5, 399, 200, 2, 1059, 1060, 5, 425, 213, 2, 1060, 220, 3, 2, 2, 2, 1061, 1062, 5, 419, 210, 2, 1062, 1063, 5, 431, 216, 2, 1063, 1064, 5, 429, 215, 2, 1064, 1065, 5, 399, 200, 2, 1065, 1066, 5, 425, 213, 2, 1066, 222, 3, 2, 2, 2, 1067, 1068, 5, 421, 211, 2, 1068, 1069, 5, 413, 207, 2, 1069, 1070, 5, 391, 196, 2, 1070, 1071, 5, 417, 209, 2, 1071, 224, 3, 2, 2, 2, 1072, 1073, 5, 421, 211, 2, 1073, 1074, 5, 425, 213, 2, 1074, 1075, 5, 391, 196, 2, 1075, 1076, 5, 403, 202, 2, 1076, 1077, 5, 415, 208, 2, 1077, 1078, 5, 391, 196, 2, 1078, 226, 3, 2, 2, 2, 1079, 1080, 5, 421, 211, 2, 1080, 1081, 5, 425, 213, 2, 1081, 1082, 5, 407, 204, 2, 1082, 1083, 5, 415, 208, 2, 1083, 1084, 5, 391, 196, 2, 1084, 1085, 5, 425, 213, 2, 1085, 1086, 5, 439, 220, 2, 1086, 228, 3, 2, 2, 2, 1087, 1088, 5, 423, 212, 2, 1088, 1089, 5, 431, 216, 2, 1089, 1090, 5, 399, 200, 2, 1090, 1091, 5, 425, 213, 2, 1091, 1092, 5, 439, 220, 2, 1092, 230, 3, 2, 2, 2, 1093, 1094, 5, 425, 213, 2, 1094, 1095, 5, 391, 196, 2, 1095, 1096, 5, 407, 204, 2, 1096, 1097, 5, 427, 214, 2, 1097, 1098, 5, 399, 200, 2, 1098, 232, 3, 2, 2, 2, 1099, 1100, 5, 425, 213, 2, 1100, 1101, 5, 399, 200, 2, 1101, 1102, 5, 395, 198, 2, 1102, 1103, 5, 431, 216, 2, 1103, 1104, 5, 425, 213, 2, 1104, 1105, 5, 427, 214, 2, 1105, 1106, 5, 407, 204, 2, 1106, 1107, 5, 433, 217, 2, 1107, 1108, 5, 399, 200, 2, 1108, 234, 3, 2, 2, 2, 1109, 1110, 5, 425, 213, 2, 1110, 1111, 5, 399, 200, 2, 1111, 1112, 5, 401, 201, 2, 1112, 1113, 5, 399, 200, 2, 1113, 1114, 5, 425, 213, 2, 1114, 1115, 5, 399, 200, 2, 1115, 1116, 5, 417, 209, 2, 1116, 1117, 5, 395, 198, 2, 1117, 1118, 5, 399, 200, 2, 1118, 1119, 5, 427, 214, 2, 1119, 236, 3, 2, 2, 2, 1120, 1121, 5, 425, 213, 2, 1121, 1122, 5, 399, 200, 2, 1122, 1123, 5, 403, 202, 2, 1123, 1124, 5, 399, 200, 2, 1124, 1125, 5, 437, 219, 2, 1125, 1126, 5, 421, 211, 2, 1126, 238, 3, 2, 2, 2, 1127, 1128, 5, 425, 213, 2, 1128, 1129, 5, 399, 200, 2, 1129, 1130, 5, 407, 204, 2, 1130, 1131, 5, 417, 209, 2, 1131, 1132, 5, 397, 199, 2, 1132, 1133, 5, 399, 200, 2, 1133, 1134, 5, 437, 219, 2, 1134, 240, 3, 2, 2, 2, 1135, 1136, 5, 425, 213, 2, 1136, 1137, 5, 399, 200, 2, 1137, 1138, 5, 413, 207, 2, 1138, 1139, 5, 399, 200, 2, 1139, 1140, 5, 391, 196, 2, 1140, 1141, 5, 427, 214, 2, 1141, 1142, 5, 399, 200, 2, 1142, 242, 3, 2, 2, 2, 1143, 1144, 5, 425, 213, 2, 1144, 1145, 5, 399, 200, 2, 1145, 1146, 5, 417, 209, 2, 1146, 1147, 5, 391, 196, 2, 1147, 1148, 5, 415, 208, 2, 1148, 1149, 5, 399, 200, 2, 1149, 244, 3, 2, 2, 2, 1150, 1151, 5, 425, 213, 2, 1151, 1152, 5, 399, 200, 2, 1152, 1153, 5, 421, 211, 2, 1153, 1154, 5, 413, 207, 2, 1154, 1155, 5, 391, 196, 2, 1155, 1156, 5, 395, 198, 2, 1156, 1157, 5, 399, 200, 2, 1157, 246, 3, 2, 2, 2, 1158, 1159, 5, 425, 213, 2, 1159, 1160, 5, 399, 200, 2, 1160, 1161, 5, 427, 214, 2, 1161, 1162, 5, 429, 215, 2, 1162, 1163, 5, 425, 213, 2, 1163, 1164, 5, 407, 204, 2, 1164, 1165, 5, 395, 198, 2, 1165, 1166, 5, 429, 215, 2, 1166, 248, 3, 2, 2, 2, 1167, 1168, 5, 425, 213, 2, 1168, 1169, 5, 407, 204, 2, 1169, 1170, 5, 403, 202, 2, 1170, 1171, 5, 405, 203, 2, 1171, 1172, 5, 429, 215, 2, 1172, 250, 3, 2, 2, 2, 1173, 1174, 5, 425, 213, 2, 1174, 1175, 5, 419, 210, 2, 1175, 1176, 5, 413, 207, 2, 1176, 1177, 5, 413, 207, 2, 1177, 1178, 5, 393, 197, 2, 1178, 1179, 5, 391, 196, 2, 1179, 1180, 5, 395, 198, 2, 1180, 1181, 5, 411, 206, 2, 1181, 252, 3, 2, 2, 2, 1182, 1183, 5, 425, 213, 2, 1183, 1184, 5, 419, 210, 2, 1184, 1185, 5, 435, 218, 2, 1185, 254, 3, 2, 2, 2, 1186, 1187, 5, 425, 213, 2, 1187, 1188, 5, 419, 210, 2, 1188, 1189, 5, 435, 218, 2, 1189, 1190, 5, 427, 214, 2, 1190, 256, 3, 2, 2, 2, 1191, 1192, 5, 427, 214, 2, 1192, 1193, 5, 391, 196, 2, 1193, 1194, 5, 433, 217, 2, 1194, 1195, 5, 399, 200, 2, 1195, 1196, 5, 421, 211, 2, 1196, 1197, 5, 419, 210, 2, 1197, 1198, 5, 407, 204, 2, 1198, 1199, 5, 417, 209, 2, 1199, 1200, 5, 429, 215, 2, 1200, 258, 3, 2, 2, 2, 1201, 1202, 5, 427, 214, 2, 1202, 1203, 5, 399, 200, 2, 1203, 1204, 5, 413, 207, 2, 1204, 1205, 5, 399, 200, 2, 1205, 1206, 5, 395, 198, 2, 1206, 1207, 5, 429, 215, 2, 1207, 260, 3, 2, 2, 2, 1208, 1209, 5, 427, 214, 2, 1209, 1210, 5, 399, 200, 2, 1210, 1211, 5, 429, 215, 2, 1211, 262, 3, 2, 2, 2, 1212, 1213, 5, 429, 215, 2, 1213, 1214, 5, 391, 196, 2, 1214, 1215, 5, 393, 197, 2, 1215, 1216, 5, 413, 207, 2, 1216, 1217, 5, 399, 200, 2, 1217, 264, 3, 2, 2, 2, 1218, 1219, 5, 429, 215, 2, 1219, 1220, 5, 399, 200, 2, 1220, 1221, 5, 415, 208, 2, 1221, 1222, 5, 421, 211, 2, 1222, 266, 3, 2, 2, 2, 1223, 1224, 5, 429, 215, 2, 1224, 1225, 5, 399, 200, 2, 1225, 1226, 5, 415, 208, 2, 1226, 1227, 5, 421, 211, 2, 1227, 1228, 5, 419, 210, 2, 1228, 1229, 5, 425, 213, 2, 1229, 1230, 5, 391, 196, 2, 1230, 1231, 5, 425, 213, 2, 1231, 1232, 5, 439, 220, 2, 1232, 268, 3, 2, 2, 2, 1233, 1234, 5, 429, 215, 2, 1234, 1235, 5, 405, 203, 2, 1235, 1236, 5, 399, 200, 2, 1236, 1237, 5, 417, 209, 2, 1237, 270, 3, 2, 2, 2, 1238, 1239, 5, 429, 215, 2, 1239, 1240, 5, 419, 210, 2, 1240, 272, 3, 2, 2, 2, 1241, 1242, 5, 429, 215, 2, 1242, 1243, 5, 425, 213, 2, 1243, 1244, 5, 391, 196, 2, 1244, 1245, 5, 417, 209, 2, 1245, 1246, 5, 427, 214, 2, 1246, 1247, 5, 391, 196, 2, 1247, 1248, 5, 395, 198, 2, 1248, 1249, 5, 429, 215, 2, 1249, 1250, 5, 407, 204, 2, 1250, 1251, 5, 419, 210, 2, 1251, 1252, 5, 417, 209, 2, 1252, 274, 3, 2, 2, 2, 1253, 1254, 5, 429, 215, 2, 1254, 1255, 5, 425, 213, 2, 1255, 1256, 5, 407, 204, 2, 1256, 1257, 5, 403, 202, 2, 1257, 1258, 5, 403, 202, 2, 1258, 1259, 5, 399, 200, 2, 1259, 1260, 5, 425, 213, 2, 1260, 276, 3, 2, 2, 2, 1261, 1262, 5, 431, 216, 2, 1262, 1263, 5, 417, 209, 2, 1263, 1264, 5, 407, 204, 2, 1264, 1265, 5, 419, 210, 2, 1265, 1266, 5, 417, 209, 2, 1266, 278, 3, 2, 2, 2, 1267, 1268, 5, 431, 216, 2, 1268, 1269, 5, 417, 209, 2, 1269, 1270, 5, 407, 204, 2, 1270, 1271, 5, 423, 212, 2, 1271, 1272, 5, 431, 216, 2, 1272, 1273, 5, 399, 200, 2, 1273, 280, 3, 2, 2, 2, 1274, 1275, 5, 431, 216, 2, 1275, 1276, 5, 421, 211, 2, 1276, 1277, 5, 397, 199, 2, 1277, 1278, 5, 391, 196, 2, 1278, 1279, 5, 429, 215, 2, 1279, 1280, 5, 399, 200, 2, 1280, 282, 3, 2, 2, 2, 1281, 1282, 5, 431, 216, 2, 1282, 1283, 5, 427, 214, 2, 1283, 1284, 5, 407, 204, 2, 1284, 1285, 5, 417, 209, 2, 1285, 1286, 5, 403, 202, 2, 1286, 284, 3, 2, 2, 2, 1287, 1288, 5, 433, 217, 2, 1288, 1289, 5, 391, 196, 2, 1289, 1290, 5, 395, 198, 2, 1290, 1291, 5, 431, 216, 2, 1291, 1292, 5, 431, 216, 2, 1292, 1293, 5, 415, 208, 2, 1293, 286, 3, 2, 2, 2, 1294, 1295, 5, 433, 217, 2, 1295, 1296, 5, 391, 196, 2, 1296, 1297, 5, 413, 207, 2, 1297, 1298, 5, 431, 216, 2, 1298, 1299, 5, 399, 200, 2, 1299, 1300, 5, 427, 214, 2, 1300, 288, 3, 2, 2, 2, 1301, 1302, 5, 433, 217, 2, 1302, 1303, 5, 407, 204, 2, 1303, 1304, 5, 399, 200, 2, 1304, 1305, 5, 435, 218, 2, 1305, 290, 3, 2, 2, 2, 1306, 1307, 5, 433, 217, 2, 1307, 1308, 5, 407, 204, 2, 1308, 1309, 5, 425, 213, 2, 1309, 1310, 5, 429, 215, 2, 1310, 1311, 5, 431, 216, 2, 1311, 1312, 5, 391, 196, 2, 1312, 1313, 5, 413, 207, 2, 1313, 292, 3, 2, 2, 2, 1314, 1315, 5, 435, 218, 2, 1315, 1316, 5, 405, 203, 2, 1316, 1317, 5, 399, 200, 2, 1317, 1318, 5, 417, 209, 2, 1318, 294, 3, 2, 2, 2, 1319, 1320, 5, 435, 218, 2, 1320, 1321, 5, 405, 203, 2, 1321, 1322, 5, 399, 200, 2, 1322, 1323, 5, 425, 213, 2, 1323, 1324, 5, 399, 200, 2, 1324, 296, 3, 2, 2, 2, 1325, 1326, 5, 435, 218, 2, 1326, 1327, 5, 407, 204, 2, 1327, 1328, 5, 429, 215, 2, 1328, 1329, 5, 405, 203, 2, 1329, 298, 3, 2, 2, 2, 1330, 1331, 5, 435, 218, 2, 1331, 1332, 5, 407, 204, 2, 1332, 1333, 5, 429, 215, 2, 1333, 1334, 5, 405, 203, 2, 1334, 1335, 5, 419, 210, 2, 1335, 1336, 5, 431, 216, 2, 1336, 1337, 5, 429, 215, 2, 1337, 300, 3, 2, 2, 2, 1338, 1339, 5, 401, 201, 2, 1339, 1340, 5, 407, 204, 2, 1340, 1341, 5, 425, 213, 2, 1341, 1342, 5, 427, 214, 2, 1342, 1343, 5, 429, 215, 2, 1343, 1344, 7, 97, 2, 2, 1344, 1345, 5, 433, 217, 2, 1345, 1346, 5, 391, 196, 2, 1346, 1347, 5, 413, 207, 2, 1347, 1348, 5, 431, 216, 2, 1348, 1349, 5, 399, 200, 2, 1349, 302, 3, 2, 2, 2, 1350, 1351, 5, 419, 210, 2, 1351, 1352, 5, 433, 217, 2, 1352, 1353, 5, 399, 200, 2, 1353, 1354, 5, 425, 213, 2, 1354, 304, 3, 2, 2, 2, 1355, 1356, 5, 421, 211, 2, 1356, 1357, 5, 391, 196, 2, 1357, 1358, 5, 425, 213, 2, 1358, 1359, 5, 429, 215, 2, 1359, 1360, 5, 407, 204, 2, 1360, 1361, 5, 429, 215, 2, 1361, 1362, 5, 407, 204, 2, 1362, 1363, 5, 419, 210, 2, 1363, 1364, 5, 417, 209, 2, 1364, 306, 3, 2, 2, 2, 1365, 1366, 5, 425, 213, 2, 1366, 1367, 5, 391, 196, 2, 1367, 1368, 5, 417, 209, 2, 1368, 1369, 5, 403, 202, 2, 1369, 1370, 5, 399, 200, 2, 1370, 308, 3, 2, 2, 2, 1371, 1372, 5, 421, 211, 2, 1372, 1373, 5, 425, 213, 2, 1373, 1374, 5, 399, 200, 2, 1374, 1375, 5, 395, 198, 2, 1375, 1376, 5, 399, 200, 2, 1376, 1377, 5, 397, 199, 2, 1377, 1378, 5, 407, 204, 2, 1378, 1379, 5, 417, 209, 2, 1379, 1380, 5, 403, 202, 2, 1380, 310, 3, 2, 2, 2, 1381, 1382, 5, 431, 216, 2, 1382, 1383, 5, 417, 209, 2, 1383, 1384, 5, 393, 197, 2, 1384, 1385, 5, 419, 210, 2, 1385, 1386, 5, 431, 216, 2, 1386, 1387, 5, 417, 209, 2, 1387, 1388, 5, 397, 199, 2, 1388, 1389, 5, 399, 200, 2, 1389, 1390, 5, 397, 199, 2, 1390, 312, 3, 2, 2, 2, 1391, 1392, 5, 395, 198, 2, 1392, 1393, 5, 431, 216, 2, 1393, 1394, 5, 425, 213, 2, 1394, 1395, 5, 425, 213, 2, 1395, 1396, 5, 399, 200, 2, 1396, 1397, 5, 417, 209, 2, 1397, 1398, 5, 429, 215, 2, 1398, 314, 3, 2, 2, 2, 1399, 1400, 5, 401, 201, 2, 1400, 1401, 5, 419, 210, 2, 1401, 1402, 5, 413, 207, 2, 1402, 1403, 5, 413, 207, 2, 1403, 1404, 5, 419, 210, 2, 1404, 1405, 5, 435, 218, 2, 1405, 1406, 5, 407, 204, 2, 1406, 1407, 5, 417, 209, 2, 1407, 1408, 5, 403, 202, 2, 1408, 316, 3, 2, 2, 2, 1409, 1410, 5, 395, 198, 2, 1410, 1411, 5, 431, 216, 2, 1411, 1412, 5, 415, 208, 2, 1412, 1413, 5, 399, 200, 2, 1413, 1414, 7, 97, 2, 2, 1414, 1415, 5, 397, 199, 2, 1415, 1416, 5, 407, 204, 2, 1416, 1417, 5, 427, 214, 2, 1417, 1418, 5, 429, 215, 2, 1418, 318, 3, 2, 2, 2, 1419, 1420, 5, 397, 199, 2, 1420, 1421, 5, 399, 200, 2, 1421, 1422, 5, 417, 209, 2, 1422, 1423, 5, 427, 214, 2, 1423, 1424, 5, 399, 200, 2, 1424, 1425, 7, 97, 2, 2, 1425, 1426, 5, 425, 213, 2, 1426, 1427, 5, 391, 196, 2, 1427, 1428, 5, 417, 209, 2, 1428, 1429, 5, 411, 206, 2, 1429, 320, 3, 2, 2, 2, 1430, 1431, 5, 413, 207, 2, 1431, 1432, 5, 391, 196, 2, 1432, 1433, 5, 403, 202, 2, 1433, 322, 3, 2, 2, 2, 1434, 1435, 5, 413, 207, 2, 1435, 1436, 5, 391, 196, 2, 1436, 1437, 5, 427, 214, 2, 1437, 1438, 5, 429, 215, 2, 1438, 1439, 7, 97, 2, 2, 1439, 1440, 5, 433, 217, 2, 1440, 1441, 5, 391, 196, 2, 1441, 1442, 5, 413, 207, 2, 1442, 1443, 5, 431, 216, 2, 1443, 1444, 5, 399, 200, 2, 1444, 324, 3, 2, 2, 2, 1445, 1446, 5, 413, 207, 2, 1446, 1447, 5, 399, 200, 2, 1447, 1448, 5, 391, 196, 2, 1448, 1449, 5, 397, 199, 2, 1449, 326, 3, 2, 2, 2, 1450, 1451, 5, 417, 209, 2, 1451, 1452, 5, 429, 215, 2, 1452, 1453, 5, 405, 203, 2, 1453, 1454, 7, 97, 2, 2, 1454, 1455, 5, 433, 217, 2, 1455, 1456, 5, 391, 196, 2, 1456, 1457, 5, 413, 207, 2, 1457, 1458, 5, 431, 216, 2, 1458, 1459, 5, 399, 200, 2, 1459, 328, 3, 2, 2, 2, 1460, 1461, 5, 417, 209, 2, 1461, 1462, 5, 429, 215, 2, 1462, 1463, 5, 407, 204, 2, 1463, 1464, 5, 413, 207, 2, 1464, 1465, 5, 399, 200, 2, 1465, 330, 3, 2, 2, 2, 1466, 1467, 5, 421, 211, 2, 1467, 1468, 5, 399, 200, 2, 1468, 1469, 5, 425, 213, 2, 1469, 1470, 5, 395, 198, 2, 1470, 1471, 5, 399, 200, 2, 1471, 1472, 5, 417, 209, 2, 1472, 1473, 5, 429, 215, 2, 1473, 1474, 7, 97, 2, 2, 1474, 1475, 5, 425, 213, 2, 1475, 1476, 5, 391, 196, 2, 1476, 1477, 5, 417, 209, 2, 1477, 1478, 5, 411, 206, 2, 1478, 332, 3, 2, 2, 2, 1479, 1480, 5, 425, 213, 2, 1480, 1481, 5, 391, 196, 2, 1481, 1482, 5, 417, 209, 2, 1482, 1483, 5, 411, 206, 2, 1483, 334, 3, 2, 2, 2, 1484, 1485, 5, 425, 213, 2, 1485, 1486, 5, 419, 210, 2, 1486, 1487, 5, 435, 218, 2, 1487, 1488, 7, 97, 2, 2, 1488, 1489, 5, 417, 209, 2, 1489, 1490, 5, 431, 216, 2, 1490, 1491, 5, 415, 208, 2, 1491, 1492, 5, 393, 197, 2, 1492, 1493, 5, 399, 200, 2, 1493, 1494, 5, 425, 213, 2, 1494, 336, 3, 2, 2, 2, 1495, 1496, 5, 403, 202, 2, 1496, 1497, 5, 399, 200, 2, 1497, 1498, 5, 417, 209, 2, 1498, 1499, 5, 399, 200, 2, 1499, 1500, 5, 425, 213, 2, 1500, 1501, 5, 391, 196, 2, 1501, 1502, 5, 429, 215, 2, 1502, 1503, 5, 399, 200, 2, 1503, 1504, 5, 397, 199, 2, 1504, 338, 3, 2, 2, 2, 1505, 1506, 5, 391, 196, 2, 1506, 1507, 5, 413, 207, 2, 1507, 1508, 5, 435, 218, 2, 1508, 1509, 5, 391, 196, 2, 1509, 1510, 5, 439, 220, 2, 1510, 1511, 5, 427, 214, 2, 1511, 340, 3, 2, 2, 2, 1512, 1513, 5, 427, 214, 2, 1513, 1514, 5, 429, 215, 2, 1514, 1515, 5, 419, 210, 2, 1515, 1516, 5, 425, 213, 2, 1516, 1517, 5, 399, 200, 2, 1517, 1518, 5, 397, 199, 2, 1518, 342, 3, 2, 2, 2, 1519, 1520, 5, 429, 215, 2, 1520, 1521, 5, 425, 213, 2, 1521, 1522, 5, 431, 216, 2, 1522, 1523, 5, 399, 200, 2, 1523, 344, 3, 2, 2, 2, 1524, 1525, 5, 401, 201, 2, 1525, 1526, 5, 391, 196, 2, 1526, 1527, 5, 413, 207, 2, 1527, 1528, 5, 427, 214, 2, 1528, 1529, 5, 399, 200, 2, 1529, 346, 3, 2, 2, 2, 1530, 1531, 5, 435, 218, 2, 1531, 1532, 5, 407, 204, 2, 1532, 1533, 5, 417, 209, 2, 1533, 1534, 5, 397, 199, 2, 1534, 1535, 5, 419, 210, 2, 1535, 1536, 5, 435, 218, 2, 1536, 348, 3, 2, 2, 2, 1537, 1538, 5, 417, 209, 2, 1538, 1539, 5, 431, 216, 2, 1539, 1540, 5, 413, 207, 2, 1540, 1541, 5, 413, 207, 2, 1541, 1542, 5, 427, 214, 2, 1542, 350, 3, 2, 2, 2, 1543, 1544, 5, 401, 201, 2, 1544, 1545, 5, 407, 204, 2, 1545, 1546, 5, 425, 213, 2, 1546, 1547, 5, 427, 214, 2, 1547, 1548, 5, 429, 215, 2, 1548, 352, 3, 2, 2, 2, 1549, 1550, 5, 413, 207, 2, 1550, 1551, 5, 391, 196, 2, 1551, 1552, 5, 427, 214, 2, 1552, 1553, 5, 429, 215, 2, 1553, 354, 3, 2, 2, 2, 1554, 1555, 5, 401, 201, 2, 1555, 1556, 5, 407, 204, 2, 1556, 1557, 5, 413, 207, 2, 1557, 1558, 5, 429, 215, 2, 1558, 1559, 5, 399, 200, 2, 1559, 1560, 5, 425, 213, 2, 1560, 356, 3, 2, 2, 2, 1561, 1562, 5, 403, 202, 2, 1562, 1563, 5, 425, 213, 2, 1563, 1564, 5, 419, 210, 2, 1564, 1565, 5, 431, 216, 2, 1565, 1566, 5, 421, 211, 2, 1566, 1567, 5, 427, 214, 2, 1567, 358, 3, 2, 2, 2, 1568, 1569, 5, 399, 200, 2, 1569, 1570, 5, 437, 219, 2, 1570, 1571, 5, 395, 198, 2, 1571, 1572, 5, 413, 207, 2, 1572, 1573, 5, 431, 216, 2, 1573, 1574, 5, 397, 199, 2, 1574, 1575, 5, 399, 200, 2, 1575, 360, 3, 2, 2, 2, 1576, 1577, 5, 429, 215, 2, 1577, 1578, 5, 407, 204, 2, 1578, 1579, 5, 399, 200, 2, 1579, 1580, 5, 427, 214, 2, 1580, 362, 3, 2, 2, 2, 1581, 1582, 5, 419, 210, 2, 1582, 1583, 5, 429, 215, 2, 1583, 1584, 5, 405, 203, 2, 1584, 1585, 5, 399, 200, 2, 1585, 1586, 5, 425, 213, 2, 1586, 1587, 5, 427, 214, 2, 1587, 364, 3, 2, 2, 2, 1588, 1589, 5, 397, 199, 2, 1589, 1590, 5, 419, 210, 2, 1590, 366, 3, 2, 2, 2, 1591, 1592, 5, 417, 209, 2, 1592, 1593, 5, 419, 210, 2, 1593, 1594, 5, 429, 215, 2, 1594, 1595, 5, 405, 203, 2, 1595, 1596, 5, 407, 204, 2, 1596, 1597, 5, 417, 209, 2, 1597, 1598, 5, 403, 202, 2, 1598, 368, 3, 2, 2, 2, 1599, 1605, 7, 36, 2, 2, 1600, 1604, 10, 2, 2, 2, 1601, 1602, 7, 36, 2, 2, 1602, 1604, 7, 36, 2, 2, 1603, 1600, 3, 2, 2, 2, 1603, 1601, 3, 2, 2, 2, 1604, 1607, 3, 2, 2, 2, 1605, 1603, 3, 2, 2, 2, 1605, 1606, 3, 2, 2, 2, 1606, 1608, 3, 2, 2, 2, 1607, 1605, 3, 2, 2, 2, 1608, 1635, 7, 36, 2, 2, 1609, 1615, 7, 98, 2, 2, 1610, 1614, 10, 3, 2, 2, 1611, 1612, 7, 98, 2, 2, 1612, 1614, 7, 98, 2, 2, 1613, 1610, 3, 2, 2, 2, 1613, 1611, 3, 2, 2, 2, 1614, 1617, 3, 2, 2, 2, 1615, 1613, 3, 2, 2, 2, 1615, 1616, 3, 2, 2, 2, 1616, 1618, 3, 2, 2, 2, 1617, 1615, 3, 2, 2, 2, 1618, 1635, 7, 98, 2, 2, 1619, 1623, 7, 93, 2, 2, 1620, 1622, 10, 4, 2, 2, 1621, 1620, 3, 2, 2, 2, 1622, 1625, 3, 2, 2, 2, 1623, 1621, 3, 2, 2, 2, 1623, 1624, 3, 2, 2, 2, 1624, 1626, 3, 2, 2, 2, 1625, 1623, 3, 2, 2, 2, 1626, 1635, 7, 95, 2, 2, 1627, 1631, 9, 5, 2, 2, 1628, 1630, 9, 6, 2, 2, 1629, 1628, 3, 2, 2, 2, 1630, 1633, 3, 2, 2, 2, 1631, 1629, 3, 2, 2, 2, 1631, 1632, 3, 2, 2, 2, 1632, 1635, 3, 2, 2, 2, 1633, 1631, 3, 2, 2, 2, 1634, 1599, 3, 2, 2, 2, 1634, 1609, 3, 2, 2, 2, 1634, 1619, 3, 2, 2, 2, 1634, 1627, 3, 2, 2, 2, 1635, 370, 3, 2, 2, 2, 1636, 1638, 5, 389, 195, 2, 1637, 1636, 3, 2, 2, 2, 1638, 1639, 3, 2, 2, 2, 1639, 1637, 3, 2, 2, 2, 1639, 1640, 3, 2, 2, 2, 1640, 1648, 3, 2, 2, 2, 1641, 1645, 7, 48, 2, 2, 1642, 1644, 5, 389, 195, 2, 1643, 1642, 3, 2, 2, 2, 1644, 1647, 3, 2, 2, 2, 1645, 1643, 3, 2, 2, 2, 1645, 1646, 3, 2, 2, 2, 1646, 1649, 3, 2, 2, 2, 1647, 1645, 3, 2, 2, 2, 1648, 1641, 3, 2, 2, 2, 1648, 1649, 3, 2, 2, 2, 1649, 1657, 3, 2, 2, 2, 1650, 1652, 7, 48, 2, 2, 1651, 1653, 5, 389, 195, 2, 1652, 1651, 3, 2, 2, 2, 1653, 1654, 3, 2, 2, 2, 1654, 1652, 3, 2, 2, 2, 1654, 1655, 3, 2, 2, 2, 1655, 1657, 3, 2, 2, 2, 1656, 1637, 3, 2, 2, 2, 1656, 1650, 3, 2, 2, 2, 1657, 1667, 3, 2, 2, 2, 1658, 1660, 5, 399, 200, 2, 1659, 1661, 9, 7, 2, 2, 1660, 1659, 3, 2, 2, 2, 1660, 1661, 3, 2, 2, 2, 1661, 1663, 3, 2, 2, 2, 1662, 1664, 5, 389, 195, 2, 1663, 1662, 3, 2, 2, 2, 1664, 1665, 3, 2, 2, 2, 1665, 1663, 3, 2, 2, 2, 1665, 1666, 3, 2, 2, 2, 1666, 1668, 3, 2, 2, 2, 1667, 1658, 3, 2, 2, 2, 1667, 1668, 3, 2, 2, 2, 1668, 1678, 3, 2, 2, 2, 1669, 1670, 7, 50, 2, 2, 1670, 1671, 7, 122, 2, 2, 1671, 1673, 3, 2, 2, 2, 1672, 1674, 5, 387, 194, 2, 1673, 1672, 3, 2, 2, 2, 1674, 1675, 3, 2, 2, 2, 1675, 1673, 3, 2, 2, 2, 1675, 1676, 3, 2, 2, 2, 1676, 1678, 3, 2, 2, 2, 1677, 1656, 3, 2, 2, 2, 1677, 1669, 3, 2, 2, 2, 1678, 372, 3, 2, 2, 2, 1679, 1683, 7, 65, 2, 2, 1680, 1682, 5, 389, 195, 2, 1681, 1680, 3, 2, 2, 2, 1682, 1685, 3, 2, 2, 2, 1683, 1681, 3, 2, 2, 2, 1683, 1684, 3, 2, 2, 2, 1684, 1689, 3, 2, 2, 2, 1685, 1683, 3, 2, 2, 2, 1686, 1687, 9, 8, 2, 2, 1687, 1689, 5, 369, 185, 2, 1688, 1679, 3, 2, 2, 2, 1688, 1686, 3, 2, 2, 2, 1689, 374, 3, 2, 2, 2, 1690, 1696, 7, 41, 2, 2, 1691, 1695, 10, 9, 2, 2, 1692, 1693, 7, 41, 2, 2, 1693, 1695, 7, 41, 2, 2, 1694, 1691, 3, 2, 2, 2, 1694, 1692, 3, 2, 2, 2, 1695, 1698, 3, 2, 2, 2, 1696, 1694, 3, 2, 2, 2, 1696, 1697, 3, 2, 2, 2, 1697, 1699, 3, 2, 2, 2, 1698, 1696, 3, 2, 2, 2, 1699, 1700, 7, 41, 2, 2, 1700, 376, 3, 2, 2, 2, 1701, 1702, 5, 437, 219, 2, 1702, 1703, 5, 375, 188, 2, 1703, 378, 3, 2, 2, 2, 1704, 1705, 7, 47, 2, 2, 1705, 1706, 7, 47, 2, 2, 1706, 1710, 3, 2, 2, 2, 1707, 1709, 10, 10, 2, 2, 1708, 1707, 3, 2, 2, 2, 1709, 1712, 3, 2, 2, 2, 1710, 1708, 3, 2, 2, 2, 1710, 1711, 3, 2, 2, 2, 1711, 1718, 3, 2, 2, 2, 1712, 1710, 3, 2, 2, 2, 1713, 1715, 7, 15, 2, 2, 1714, 1713, 3, 2, 2, 2, 1714, 1715, 3, 2, 2, 2, 1715, 1716, 3, 2, 2, 2, 1716, 1719, 7, 12, 2, 2, 1717, 1719, 7, 2, 2, 3, 1718, 1714, 3, 2, 2, 2, 1718, 1717, 3, 2, 2, 2, 1719, 1720, 3, 2, 2, 2, 1720, 1721, 8, 190, 2, 2, 1721, 380, 3, 2, 2, 2, 1722, 1723, 7, 49, 2, 2, 1723, 1724, 7, 44, 2, 2, 1724, 1728, 3, 2, 2, 2, 1725, 1727, 11, 2, 2, 2, 1726, 1725, 3, 2, 2, 2, 1727, 1730, 3, 2, 2, 2, 1728, 1729, 3, 2, 2, 2, 1728, 1726, 3, 2, 2, 2, 1729, 1731, 3, 2, 2, 2, 1730, 1728, 3, 2, 2, 2, 1731, 1732, 7, 44, 2, 2, 1732, 1733, 7, 49, 2, 2, 1733, 1734, 3, 2, 2, 2, 1734, 1735, 8, 191, 2, 2, 1735, 382, 3, 2, 2, 2, 1736, 1737, 9, 11, 2, 2, 1737, 1738, 3, 2, 2, 2, 1738, 1739, 8, 192, 2, 2, 1739, 384, 3, 2, 2, 2, 1740, 1741, 11, 2, 2, 2, 1741, 386, 3, 2, 2, 2, 1742, 1743, 9, 12, 2, 2, 1743, 388, 3, 2, 2, 2, 1744, 1745, 9, 13, 2, 2, 1745, 390, 3, 2, 2, 2, 1746, 1747, 9, 14, 2, 2, 1747, 392, 3, 2, 2, 2, 1748, 1749, 9, 15, 2, 2, 1749, 394, 3, 2, 2, 2, 1750, 1751, 9, 16, 2, 2, 1751, 396, 3, 2, 2, 2, 1752, 1753, 9, 17, 2, 2, 1753, 398, 3, 2, 2, 2, 1754, 1755, 9, 18, 2, 2, 1755, 400, 3, 2, 2, 2, 1756, 1757, 9, 19, 2, 2, 1757, 402, 3, 2, 2, 2, 1758, 1759, 9, 20, 2, 2, 1759, 404, 3, 2, 2, 2, 1760, 1761, 9, 21, 2, 2, 1761, 406, 3, 2, 2, 2, 1762, 1763, 9, 22, 2, 2, 1763, 408, 3, 2, 2, 2, 1764, 1765, 9, 23, 2, 2, 1765, 410, 3, 2, 2, 2, 1766, 1767, 9, 24, 2, 2, 1767, 412, 3, 2, 2, 2, 1768, 1769, 9, 25, 2, 2, 1769, 414, 3, 2, 2, 2, 1770, 1771, 9, 26, 2, 2, 1771, 416, 3, 2, 2, 2, 1772, 1773, 9, 27, 2, 2, 1773, 418, 3, 2, 2, 2, 1774, 1775, 9, 28, 2, 2, 1775, 420, 3, 2, 2, 2, 1776, 1777, 9, 29, 2, 2, 1777, 422, 3, 2, 2, 2, 1778, 1779, 9, 30, 2, 2, 1779, 424, 3, 2, 2, 2, 1780, 1781, 9, 31, 2, 2, 1781, 426, 3, 2, 2, 2, 1782, 1783, 9, 32, 2, 2, 1783, 428, 3, 2, 2, 2, 1784, 1785, 9, 33, 2, 2, 1785, 430, 3, 2, 2, 2, 1786, 1787, 9, 34, 2, 2, 1787, 432, 3, 2, 2, 2, 1788, 1789, 9, 35, 2, 2, 1789, 434, 3, 2, 2, 2, 1790, 1791, 9, 36, 2, 2, 1791, 436, 3, 2, 2, 2, 1792, 1793, 9, 37, 2, 2, 1793, 438, 3, 2, 2, 2, 1794, 1795, 9, 38, 2, 2, 1795, 440, 3, 2, 2, 2, 1796, 1797, 9, 39, 2, 2, 1797, 442, 3, 2, 2, 2, 28, 2, 1603, 1605, 1613, 1615, 1623, 1631, 1634, 1639, 1645, 1648, 1654, 1656, 1660, 1665, 1667, 1675, 1677, 1683, 1688, 1694, 1696, 1710, 1714, 1718, 1728, 3, 2, 3, 2] \ No newline at end of file diff --git a/internal/engine/sqlite/parser/SQLiteLexer.tokens b/internal/engine/sqlite/parser/SQLiteLexer.tokens index c57b62b5ad..3e1294c629 100644 --- a/internal/engine/sqlite/parser/SQLiteLexer.tokens +++ b/internal/engine/sqlite/parser/SQLiteLexer.tokens @@ -22,139 +22,174 @@ GT_EQ=21 EQ=22 NOT_EQ1=23 NOT_EQ2=24 -K_ABORT=25 -K_ACTION=26 -K_ADD=27 -K_AFTER=28 -K_ALL=29 -K_ALTER=30 -K_ANALYZE=31 -K_AND=32 -K_AS=33 -K_ASC=34 -K_ATTACH=35 -K_AUTOINCREMENT=36 -K_BEFORE=37 -K_BEGIN=38 -K_BETWEEN=39 -K_BY=40 -K_CASCADE=41 -K_CASE=42 -K_CAST=43 -K_CHECK=44 -K_COLLATE=45 -K_COLUMN=46 -K_COMMIT=47 -K_CONFLICT=48 -K_CONSTRAINT=49 -K_CREATE=50 -K_CROSS=51 -K_CURRENT_DATE=52 -K_CURRENT_TIME=53 -K_CURRENT_TIMESTAMP=54 -K_DATABASE=55 -K_DEFAULT=56 -K_DEFERRABLE=57 -K_DEFERRED=58 -K_DELETE=59 -K_DESC=60 -K_DETACH=61 -K_DISTINCT=62 -K_DROP=63 -K_EACH=64 -K_ELSE=65 -K_END=66 -K_ESCAPE=67 -K_EXCEPT=68 -K_EXCLUSIVE=69 -K_EXISTS=70 -K_EXPLAIN=71 -K_FAIL=72 -K_FOR=73 -K_FOREIGN=74 -K_FROM=75 -K_FULL=76 -K_GLOB=77 -K_GROUP=78 -K_HAVING=79 -K_IF=80 -K_IGNORE=81 -K_IMMEDIATE=82 -K_IN=83 -K_INDEX=84 -K_INDEXED=85 -K_INITIALLY=86 -K_INNER=87 -K_INSERT=88 -K_INSTEAD=89 -K_INTERSECT=90 -K_INTO=91 -K_IS=92 -K_ISNULL=93 -K_JOIN=94 -K_KEY=95 -K_LEFT=96 -K_LIKE=97 -K_LIMIT=98 -K_MATCH=99 -K_NATURAL=100 -K_NO=101 -K_NOT=102 -K_NOTNULL=103 -K_NULL=104 -K_OF=105 -K_OFFSET=106 -K_ON=107 -K_OR=108 -K_ORDER=109 -K_OUTER=110 -K_PLAN=111 -K_PRAGMA=112 -K_PRIMARY=113 -K_QUERY=114 -K_RAISE=115 -K_RECURSIVE=116 -K_REFERENCES=117 -K_REGEXP=118 -K_REINDEX=119 -K_RELEASE=120 -K_RENAME=121 -K_REPLACE=122 -K_RESTRICT=123 -K_RIGHT=124 -K_ROLLBACK=125 -K_ROW=126 -K_SAVEPOINT=127 -K_SELECT=128 -K_SET=129 -K_TABLE=130 -K_TEMP=131 -K_TEMPORARY=132 -K_THEN=133 -K_TO=134 -K_TRANSACTION=135 -K_TRIGGER=136 -K_UNION=137 -K_UNIQUE=138 -K_UPDATE=139 -K_USING=140 -K_VACUUM=141 -K_VALUES=142 -K_VIEW=143 -K_VIRTUAL=144 -K_WHEN=145 -K_WHERE=146 -K_WITH=147 -K_WITHOUT=148 -IDENTIFIER=149 -NUMERIC_LITERAL=150 -BIND_PARAMETER=151 -STRING_LITERAL=152 -BLOB_LITERAL=153 -SINGLE_LINE_COMMENT=154 -MULTILINE_COMMENT=155 -SPACES=156 -UNEXPECTED_CHAR=157 +ABORT_=25 +ACTION_=26 +ADD_=27 +AFTER_=28 +ALL_=29 +ALTER_=30 +ANALYZE_=31 +AND_=32 +AS_=33 +ASC_=34 +ATTACH_=35 +AUTOINCREMENT_=36 +BEFORE_=37 +BEGIN_=38 +BETWEEN_=39 +BY_=40 +CASCADE_=41 +CASE_=42 +CAST_=43 +CHECK_=44 +COLLATE_=45 +COLUMN_=46 +COMMIT_=47 +CONFLICT_=48 +CONSTRAINT_=49 +CREATE_=50 +CROSS_=51 +CURRENT_DATE_=52 +CURRENT_TIME_=53 +CURRENT_TIMESTAMP_=54 +DATABASE_=55 +DEFAULT_=56 +DEFERRABLE_=57 +DEFERRED_=58 +DELETE_=59 +DESC_=60 +DETACH_=61 +DISTINCT_=62 +DROP_=63 +EACH_=64 +ELSE_=65 +END_=66 +ESCAPE_=67 +EXCEPT_=68 +EXCLUSIVE_=69 +EXISTS_=70 +EXPLAIN_=71 +FAIL_=72 +FOR_=73 +FOREIGN_=74 +FROM_=75 +FULL_=76 +GLOB_=77 +GROUP_=78 +HAVING_=79 +IF_=80 +IGNORE_=81 +IMMEDIATE_=82 +IN_=83 +INDEX_=84 +INDEXED_=85 +INITIALLY_=86 +INNER_=87 +INSERT_=88 +INSTEAD_=89 +INTERSECT_=90 +INTO_=91 +IS_=92 +ISNULL_=93 +JOIN_=94 +KEY_=95 +LEFT_=96 +LIKE_=97 +LIMIT_=98 +MATCH_=99 +NATURAL_=100 +NO_=101 +NOT_=102 +NOTNULL_=103 +NULL_=104 +OF_=105 +OFFSET_=106 +ON_=107 +OR_=108 +ORDER_=109 +OUTER_=110 +PLAN_=111 +PRAGMA_=112 +PRIMARY_=113 +QUERY_=114 +RAISE_=115 +RECURSIVE_=116 +REFERENCES_=117 +REGEXP_=118 +REINDEX_=119 +RELEASE_=120 +RENAME_=121 +REPLACE_=122 +RESTRICT_=123 +RIGHT_=124 +ROLLBACK_=125 +ROW_=126 +ROWS_=127 +SAVEPOINT_=128 +SELECT_=129 +SET_=130 +TABLE_=131 +TEMP_=132 +TEMPORARY_=133 +THEN_=134 +TO_=135 +TRANSACTION_=136 +TRIGGER_=137 +UNION_=138 +UNIQUE_=139 +UPDATE_=140 +USING_=141 +VACUUM_=142 +VALUES_=143 +VIEW_=144 +VIRTUAL_=145 +WHEN_=146 +WHERE_=147 +WITH_=148 +WITHOUT_=149 +FIRST_VALUE_=150 +OVER_=151 +PARTITION_=152 +RANGE_=153 +PRECEDING_=154 +UNBOUNDED_=155 +CURRENT_=156 +FOLLOWING_=157 +CUME_DIST_=158 +DENSE_RANK_=159 +LAG_=160 +LAST_VALUE_=161 +LEAD_=162 +NTH_VALUE_=163 +NTILE_=164 +PERCENT_RANK_=165 +RANK_=166 +ROW_NUMBER_=167 +GENERATED_=168 +ALWAYS_=169 +STORED_=170 +TRUE_=171 +FALSE_=172 +WINDOW_=173 +NULLS_=174 +FIRST_=175 +LAST_=176 +FILTER_=177 +GROUPS_=178 +EXCLUDE_=179 +TIES_=180 +OTHERS_=181 +DO_=182 +NOTHING_=183 +IDENTIFIER=184 +NUMERIC_LITERAL=185 +BIND_PARAMETER=186 +STRING_LITERAL=187 +BLOB_LITERAL=188 +SINGLE_LINE_COMMENT=189 +MULTILINE_COMMENT=190 +SPACES=191 +UNEXPECTED_CHAR=192 ';'=1 '.'=2 '('=3 diff --git a/internal/engine/sqlite/parser/SQLiteParser.g4 b/internal/engine/sqlite/parser/SQLiteParser.g4 new file mode 100644 index 0000000000..ff411c6c41 --- /dev/null +++ b/internal/engine/sqlite/parser/SQLiteParser.g4 @@ -0,0 +1,904 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2014 by Bart Kiers + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Project : sqlite-parser; an ANTLR4 grammar for SQLite https://github.com/bkiers/sqlite-parser + * Developed by: + * Bart Kiers, bart@big-o.nl + * Martin Mirchev, marti_2203@abv.bg + * Mike Lische, mike@lischke-online.de + */ + +// $antlr-format alignTrailingComments on, columnLimit 130, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments off +// $antlr-format useTab off, allowShortRulesOnASingleLine off, allowShortBlocksOnASingleLine on, alignSemicolons ownLine + +parser grammar SQLiteParser; + +options { + tokenVocab = SQLiteLexer; +} + +parse: (sql_stmt_list)* EOF +; + +sql_stmt_list: + SCOL* sql_stmt (SCOL+ sql_stmt)* SCOL* +; + +sql_stmt: (EXPLAIN_ (QUERY_ PLAN_)?)? ( + alter_table_stmt + | analyze_stmt + | attach_stmt + | begin_stmt + | commit_stmt + | create_index_stmt + | create_table_stmt + | create_trigger_stmt + | create_view_stmt + | create_virtual_table_stmt + | delete_stmt + | delete_stmt_limited + | detach_stmt + | drop_stmt + | insert_stmt + | pragma_stmt + | reindex_stmt + | release_stmt + | rollback_stmt + | savepoint_stmt + | select_stmt + | update_stmt + | update_stmt_limited + | vacuum_stmt + ) +; + +alter_table_stmt: + ALTER_ TABLE_ (schema_name DOT)? table_name ( + RENAME_ ( + TO_ new_table_name + | COLUMN_? old_column_name = column_name TO_ new_column_name = column_name + ) + | ADD_ COLUMN_? column_def + ) +; + +analyze_stmt: + ANALYZE_ (schema_name | (schema_name DOT)? table_or_index_name)? +; + +attach_stmt: + ATTACH_ DATABASE_? expr AS_ schema_name +; + +begin_stmt: + BEGIN_ (DEFERRED_ | IMMEDIATE_ | EXCLUSIVE_)? ( + TRANSACTION_ transaction_name? + )? +; + +commit_stmt: (COMMIT_ | END_) TRANSACTION_? +; + +rollback_stmt: + ROLLBACK_ TRANSACTION_? (TO_ SAVEPOINT_? savepoint_name)? +; + +savepoint_stmt: + SAVEPOINT_ savepoint_name +; + +release_stmt: + RELEASE_ SAVEPOINT_? savepoint_name +; + +create_index_stmt: + CREATE_ UNIQUE_? INDEX_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? index_name ON_ table_name OPEN_PAR + indexed_column (COMMA indexed_column)* CLOSE_PAR (WHERE_ expr)? +; + +indexed_column: (column_name | expr) (COLLATE_ collation_name)? asc_desc? +; + +create_table_stmt: + CREATE_ (TEMP_ | TEMPORARY_)? TABLE_ (IF_ NOT_ EXISTS_)? ( + schema_name DOT + )? table_name ( + OPEN_PAR column_def (COMMA column_def)*? (COMMA table_constraint)* CLOSE_PAR ( + WITHOUT_ row_ROW_ID = IDENTIFIER + )? + | AS_ select_stmt + ) +; + +column_def: + column_name type_name? column_constraint* +; + +type_name: + name+? ( + OPEN_PAR signed_number CLOSE_PAR + | OPEN_PAR signed_number COMMA signed_number CLOSE_PAR + )? +; + +column_constraint: (CONSTRAINT_ name)? ( + (PRIMARY_ KEY_ asc_desc? conflict_clause? AUTOINCREMENT_?) + | (NOT_ NULL_ | UNIQUE_) conflict_clause? + | CHECK_ OPEN_PAR expr CLOSE_PAR + | DEFAULT_ (signed_number | literal_value | OPEN_PAR expr CLOSE_PAR) + | COLLATE_ collation_name + | foreign_key_clause + | (GENERATED_ ALWAYS_)? AS_ OPEN_PAR expr CLOSE_PAR ( + STORED_ + | VIRTUAL_ + )? + ) +; + +signed_number: (PLUS | MINUS)? NUMERIC_LITERAL +; + +table_constraint: (CONSTRAINT_ name)? ( + (PRIMARY_ KEY_ | UNIQUE_) OPEN_PAR indexed_column ( + COMMA indexed_column + )* CLOSE_PAR conflict_clause? + | CHECK_ OPEN_PAR expr CLOSE_PAR + | FOREIGN_ KEY_ OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR foreign_key_clause + ) +; + +foreign_key_clause: + REFERENCES_ foreign_table ( + OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR + )? ( + ON_ (DELETE_ | UPDATE_) ( + SET_ (NULL_ | DEFAULT_) + | CASCADE_ + | RESTRICT_ + | NO_ ACTION_ + ) + | MATCH_ name + )* (NOT_? DEFERRABLE_ (INITIALLY_ (DEFERRED_ | IMMEDIATE_))?)? +; + +conflict_clause: + ON_ CONFLICT_ ( + ROLLBACK_ + | ABORT_ + | FAIL_ + | IGNORE_ + | REPLACE_ + ) +; + +create_trigger_stmt: + CREATE_ (TEMP_ | TEMPORARY_)? TRIGGER_ (IF_ NOT_ EXISTS_)? ( + schema_name DOT + )? trigger_name (BEFORE_ | AFTER_ | INSTEAD_ OF_)? ( + DELETE_ + | INSERT_ + | UPDATE_ (OF_ column_name ( COMMA column_name)*)? + ) ON_ table_name (FOR_ EACH_ ROW_)? (WHEN_ expr)? BEGIN_ ( + (update_stmt | insert_stmt | delete_stmt | select_stmt) SCOL + )+ END_ +; + +create_view_stmt: + CREATE_ (TEMP_ | TEMPORARY_)? VIEW_ (IF_ NOT_ EXISTS_)? ( + schema_name DOT + )? view_name (OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR)? AS_ select_stmt +; + +create_virtual_table_stmt: + CREATE_ VIRTUAL_ TABLE_ (IF_ NOT_ EXISTS_)? (schema_name DOT)? table_name USING_ module_name ( + OPEN_PAR module_argument (COMMA module_argument)* CLOSE_PAR + )? +; + +with_clause: + WITH_ RECURSIVE_? cte_table_name AS_ OPEN_PAR select_stmt CLOSE_PAR ( + COMMA cte_table_name AS_ OPEN_PAR select_stmt CLOSE_PAR + )* +; + +cte_table_name: + table_name (OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR)? +; + +recursive_cte: + cte_table_name AS_ OPEN_PAR initial_select UNION_ ALL_? recursive__select CLOSE_PAR +; + +common_table_expression: + table_name (OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR)? AS_ OPEN_PAR select_stmt CLOSE_PAR +; + +delete_stmt: + with_clause? DELETE_ FROM_ qualified_table_name (WHERE_ expr)? +; + +delete_stmt_limited: + with_clause? DELETE_ FROM_ qualified_table_name (WHERE_ expr)? ( + order_by_stmt? limit_stmt + )? +; + +detach_stmt: + DETACH_ DATABASE_? schema_name +; + +drop_stmt: + DROP_ object = (INDEX_ | TABLE_ | TRIGGER_ | VIEW_) ( + IF_ EXISTS_ + )? (schema_name DOT)? any_name +; + +/* + SQLite understands the following binary operators, in order from highest to lowest precedence: + || + * / % + + - + << >> & | + < <= > >= + = == != <> IS IS NOT IN LIKE GLOB MATCH REGEXP + AND + OR + */ +expr: + literal_value + | BIND_PARAMETER + | ((schema_name DOT)? table_name DOT)? column_name + | unary_operator expr + | expr PIPE2 expr + | expr ( STAR | DIV | MOD) expr + | expr ( PLUS | MINUS) expr + | expr ( LT2 | GT2 | AMP | PIPE) expr + | expr ( LT | LT_EQ | GT | GT_EQ) expr + | expr ( + ASSIGN + | EQ + | NOT_EQ1 + | NOT_EQ2 + | IS_ + | IS_ NOT_ + | IN_ + | LIKE_ + | GLOB_ + | MATCH_ + | REGEXP_ + ) expr + | expr AND_ expr + | expr OR_ expr + | function_name OPEN_PAR ((DISTINCT_? expr ( COMMA expr)*) | STAR)? CLOSE_PAR filter_clause? over_clause? + | OPEN_PAR expr (COMMA expr)* CLOSE_PAR + | CAST_ OPEN_PAR expr AS_ type_name CLOSE_PAR + | expr COLLATE_ collation_name + | expr NOT_? (LIKE_ | GLOB_ | REGEXP_ | MATCH_) expr ( + ESCAPE_ expr + )? + | expr ( ISNULL_ | NOTNULL_ | NOT_ NULL_) + | expr IS_ NOT_? expr + | expr NOT_? BETWEEN_ expr AND_ expr + | expr NOT_? IN_ ( + OPEN_PAR (select_stmt | expr ( COMMA expr)*)? CLOSE_PAR + | ( schema_name DOT)? table_name + | (schema_name DOT)? table_function_name OPEN_PAR (expr (COMMA expr)*)? CLOSE_PAR + ) + | ((NOT_)? EXISTS_)? OPEN_PAR select_stmt CLOSE_PAR + | CASE_ expr? (WHEN_ expr THEN_ expr)+ (ELSE_ expr)? END_ + | raise_function +; + +raise_function: + RAISE_ OPEN_PAR ( + IGNORE_ + | (ROLLBACK_ | ABORT_ | FAIL_) COMMA error_message + ) CLOSE_PAR +; + +literal_value: + NUMERIC_LITERAL + | STRING_LITERAL + | BLOB_LITERAL + | NULL_ + | TRUE_ + | FALSE_ + | CURRENT_TIME_ + | CURRENT_DATE_ + | CURRENT_TIMESTAMP_ +; + +insert_stmt: + with_clause? ( + INSERT_ + | REPLACE_ + | INSERT_ OR_ ( + REPLACE_ + | ROLLBACK_ + | ABORT_ + | FAIL_ + | IGNORE_ + ) + ) INTO_ (schema_name DOT)? table_name (AS_ table_alias)? ( + OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR + )? ( + ( + VALUES_ OPEN_PAR expr (COMMA expr)* CLOSE_PAR ( + COMMA OPEN_PAR expr ( COMMA expr)* CLOSE_PAR + )* + | select_stmt + ) upsert_clause? + ) + | DEFAULT_ VALUES_ +; + +upsert_clause: + ON_ CONFLICT_ ( + OPEN_PAR indexed_column (COMMA indexed_column)* CLOSE_PAR (WHERE_ expr)? + )? DO_ ( + NOTHING_ + | UPDATE_ SET_ ( + (column_name | column_name_list) EQ expr ( + COMMA (column_name | column_name_list) EQ expr + )* (WHERE_ expr)? + ) + ) +; + +pragma_stmt: + PRAGMA_ (schema_name DOT)? pragma_name ( + ASSIGN pragma_value + | OPEN_PAR pragma_value CLOSE_PAR + )? +; + +pragma_value: + signed_number + | name + | STRING_LITERAL +; + +reindex_stmt: + REINDEX_ (collation_name | (schema_name DOT)? (table_name | index_name))? +; + +select_stmt: + common_table_stmt? select_core (compound_operator select_core)* order_by_stmt? limit_stmt? +; + +join_clause: + table_or_subquery (join_operator table_or_subquery join_constraint?)* +; + +select_core: + ( + SELECT_ (DISTINCT_ | ALL_)? result_column (COMMA result_column)* ( + FROM_ (table_or_subquery (COMMA table_or_subquery)* | join_clause) + )? (WHERE_ expr)? (GROUP_ BY_ expr (COMMA expr)* (HAVING_ expr)?)? ( + WINDOW_ window_name AS_ window_defn ( + COMMA window_name AS_ window_defn + )* + )? + ) + | VALUES_ OPEN_PAR expr (COMMA expr)* CLOSE_PAR ( + COMMA OPEN_PAR expr ( COMMA expr)* CLOSE_PAR + )* +; + +factored_select_stmt: + select_stmt +; + +simple_select_stmt: + common_table_stmt? select_core order_by_stmt? limit_stmt? +; + +compound_select_stmt: + common_table_stmt? select_core ( + (UNION_ ALL_? | INTERSECT_ | EXCEPT_) select_core + )+ order_by_stmt? limit_stmt? +; + +table_or_subquery: ( + (schema_name DOT)? table_name (AS_? table_alias)? ( + INDEXED_ BY_ index_name + | NOT_ INDEXED_ + )? + ) + | (schema_name DOT)? table_function_name OPEN_PAR expr (COMMA expr)* CLOSE_PAR ( + AS_? table_alias + )? + | OPEN_PAR (table_or_subquery (COMMA table_or_subquery)* | join_clause) CLOSE_PAR + | OPEN_PAR select_stmt CLOSE_PAR (AS_? table_alias)? +; + +result_column: + STAR + | table_name DOT STAR + | expr ( AS_? column_alias)? +; + +join_operator: + COMMA + | NATURAL_? (LEFT_ OUTER_? | INNER_ | CROSS_)? JOIN_ +; + +join_constraint: + ON_ expr + | USING_ OPEN_PAR column_name ( COMMA column_name)* CLOSE_PAR +; + +compound_operator: + UNION_ ALL_? + | INTERSECT_ + | EXCEPT_ +; + +update_stmt: + with_clause? UPDATE_ ( + OR_ (ROLLBACK_ | ABORT_ | REPLACE_ | FAIL_ | IGNORE_) + )? qualified_table_name SET_ (column_name | column_name_list) ASSIGN expr ( + COMMA (column_name | column_name_list) ASSIGN expr + )* (WHERE_ expr)? +; + +column_name_list: + OPEN_PAR column_name (COMMA column_name)* CLOSE_PAR +; + +update_stmt_limited: + with_clause? UPDATE_ ( + OR_ (ROLLBACK_ | ABORT_ | REPLACE_ | FAIL_ | IGNORE_) + )? qualified_table_name SET_ (column_name | column_name_list) ASSIGN expr ( + COMMA (column_name | column_name_list) ASSIGN expr + )* (WHERE_ expr)? (order_by_stmt? limit_stmt)? +; + +qualified_table_name: (schema_name DOT)? table_name (AS_ alias)? ( + INDEXED_ BY_ index_name + | NOT_ INDEXED_ + )? +; + +vacuum_stmt: + VACUUM_ schema_name? (INTO_ filename)? +; + +filter_clause: + FILTER_ OPEN_PAR WHERE_ expr CLOSE_PAR +; + +window_defn: + OPEN_PAR base_window_name? (PARTITION_ BY_ expr (COMMA expr)*)? ( + ORDER_ BY_ ordering_term (COMMA ordering_term)* + ) frame_spec? CLOSE_PAR +; + +over_clause: + OVER_ ( + window_name + | OPEN_PAR base_window_name? (PARTITION_ BY_ expr (COMMA expr)*)? ( + ORDER_ BY_ ordering_term (COMMA ordering_term)* + )? frame_spec? CLOSE_PAR + ) +; + +frame_spec: + frame_clause ( + EXCLUDE_ (NO_ OTHERS_) + | CURRENT_ ROW_ + | GROUP_ + | TIES_ + )? +; + +frame_clause: (RANGE_ | ROWS_ | GROUPS_) ( + frame_single + | BETWEEN_ frame_left AND_ frame_right + ) +; + +simple_function_invocation: + simple_func OPEN_PAR (expr (COMMA expr)* | STAR) CLOSE_PAR +; + +aggregate_function_invocation: + aggregate_func OPEN_PAR (DISTINCT_? expr (COMMA expr)* | STAR)? CLOSE_PAR filter_clause? +; + +window_function_invocation: + window_function OPEN_PAR (expr (COMMA expr)* | STAR)? CLOSE_PAR filter_clause? OVER_ ( + window_defn + | window_name + ) +; + +common_table_stmt: //additional structures + WITH_ RECURSIVE_? common_table_expression (COMMA common_table_expression)* +; + +order_by_stmt: + ORDER_ BY_ ordering_term (COMMA ordering_term)* +; + +limit_stmt: + LIMIT_ expr ((OFFSET_ | COMMA) expr)? +; + +ordering_term: + expr (COLLATE_ collation_name)? asc_desc? (NULLS_ (FIRST_ | LAST_))? +; + +asc_desc: + ASC_ + | DESC_ +; + +frame_left: + expr PRECEDING_ + | expr FOLLOWING_ + | CURRENT_ ROW_ + | UNBOUNDED_ PRECEDING_ +; + +frame_right: + expr PRECEDING_ + | expr FOLLOWING_ + | CURRENT_ ROW_ + | UNBOUNDED_ FOLLOWING_ +; + +frame_single: + expr PRECEDING_ + | UNBOUNDED_ PRECEDING_ + | CURRENT_ ROW_ +; + +// unknown + +window_function: + (FIRST_VALUE_ | LAST_VALUE_) OPEN_PAR expr CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc frame_clause + ? CLOSE_PAR + | (CUME_DIST_ | PERCENT_RANK_) OPEN_PAR CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr? CLOSE_PAR + | (DENSE_RANK_ | RANK_ | ROW_NUMBER_) OPEN_PAR CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc + CLOSE_PAR + | (LAG_ | LEAD_) OPEN_PAR expr of_OF_fset? default_DEFAULT__value? CLOSE_PAR OVER_ OPEN_PAR partition_by? + order_by_expr_asc_desc CLOSE_PAR + | NTH_VALUE_ OPEN_PAR expr COMMA signed_number CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc + frame_clause? CLOSE_PAR + | NTILE_ OPEN_PAR expr CLOSE_PAR OVER_ OPEN_PAR partition_by? order_by_expr_asc_desc CLOSE_PAR +; + +of_OF_fset: + COMMA signed_number +; + +default_DEFAULT__value: + COMMA signed_number +; + +partition_by: + PARTITION_ BY_ expr+ +; + +order_by_expr: + ORDER_ BY_ expr+ +; + +order_by_expr_asc_desc: + ORDER_ BY_ order_by_expr_asc_desc +; + +expr_asc_desc: + expr asc_desc? (COMMA expr asc_desc?)* +; + +//TODO BOTH OF THESE HAVE TO BE REWORKED TO FOLLOW THE SPEC +initial_select: + select_stmt +; + +recursive__select: + select_stmt +; + +unary_operator: + MINUS + | PLUS + | TILDE + | NOT_ +; + +error_message: + STRING_LITERAL +; + +module_argument: // TODO check what exactly is permitted here + expr + | column_def +; + +column_alias: + IDENTIFIER + | STRING_LITERAL +; + +keyword: + ABORT_ + | ACTION_ + | ADD_ + | AFTER_ + | ALL_ + | ALTER_ + | ANALYZE_ + | AND_ + | AS_ + | ASC_ + | ATTACH_ + | AUTOINCREMENT_ + | BEFORE_ + | BEGIN_ + | BETWEEN_ + | BY_ + | CASCADE_ + | CASE_ + | CAST_ + | CHECK_ + | COLLATE_ + | COLUMN_ + | COMMIT_ + | CONFLICT_ + | CONSTRAINT_ + | CREATE_ + | CROSS_ + | CURRENT_DATE_ + | CURRENT_TIME_ + | CURRENT_TIMESTAMP_ + | DATABASE_ + | DEFAULT_ + | DEFERRABLE_ + | DEFERRED_ + | DELETE_ + | DESC_ + | DETACH_ + | DISTINCT_ + | DROP_ + | EACH_ + | ELSE_ + | END_ + | ESCAPE_ + | EXCEPT_ + | EXCLUSIVE_ + | EXISTS_ + | EXPLAIN_ + | FAIL_ + | FOR_ + | FOREIGN_ + | FROM_ + | FULL_ + | GLOB_ + | GROUP_ + | HAVING_ + | IF_ + | IGNORE_ + | IMMEDIATE_ + | IN_ + | INDEX_ + | INDEXED_ + | INITIALLY_ + | INNER_ + | INSERT_ + | INSTEAD_ + | INTERSECT_ + | INTO_ + | IS_ + | ISNULL_ + | JOIN_ + | KEY_ + | LEFT_ + | LIKE_ + | LIMIT_ + | MATCH_ + | NATURAL_ + | NO_ + | NOT_ + | NOTNULL_ + | NULL_ + | OF_ + | OFFSET_ + | ON_ + | OR_ + | ORDER_ + | OUTER_ + | PLAN_ + | PRAGMA_ + | PRIMARY_ + | QUERY_ + | RAISE_ + | RECURSIVE_ + | REFERENCES_ + | REGEXP_ + | REINDEX_ + | RELEASE_ + | RENAME_ + | REPLACE_ + | RESTRICT_ + | RIGHT_ + | ROLLBACK_ + | ROW_ + | ROWS_ + | SAVEPOINT_ + | SELECT_ + | SET_ + | TABLE_ + | TEMP_ + | TEMPORARY_ + | THEN_ + | TO_ + | TRANSACTION_ + | TRIGGER_ + | UNION_ + | UNIQUE_ + | UPDATE_ + | USING_ + | VACUUM_ + | VALUES_ + | VIEW_ + | VIRTUAL_ + | WHEN_ + | WHERE_ + | WITH_ + | WITHOUT_ + | FIRST_VALUE_ + | OVER_ + | PARTITION_ + | RANGE_ + | PRECEDING_ + | UNBOUNDED_ + | CURRENT_ + | FOLLOWING_ + | CUME_DIST_ + | DENSE_RANK_ + | LAG_ + | LAST_VALUE_ + | LEAD_ + | NTH_VALUE_ + | NTILE_ + | PERCENT_RANK_ + | RANK_ + | ROW_NUMBER_ + | GENERATED_ + | ALWAYS_ + | STORED_ + | TRUE_ + | FALSE_ + | WINDOW_ + | NULLS_ + | FIRST_ + | LAST_ + | FILTER_ + | GROUPS_ + | EXCLUDE_ +; + +// TODO: check all names below + +name: + any_name +; + +function_name: + any_name +; + +schema_name: + any_name +; + +table_name: + any_name +; + +table_or_index_name: + any_name +; + +new_table_name: + any_name +; + +column_name: + any_name +; + +collation_name: + any_name +; + +foreign_table: + any_name +; + +index_name: + any_name +; + +trigger_name: + any_name +; + +view_name: + any_name +; + +module_name: + any_name +; + +pragma_name: + any_name +; + +savepoint_name: + any_name +; + +table_alias: + any_name +; + +transaction_name: + any_name +; + +window_name: + any_name +; + +alias: + any_name +; + +filename: + any_name +; + +base_window_name: + any_name +; + +simple_func: + any_name +; + +aggregate_func: + any_name +; + +table_function_name: + any_name +; + +any_name: + IDENTIFIER + | keyword + | STRING_LITERAL + | OPEN_PAR any_name CLOSE_PAR +; diff --git a/internal/engine/sqlite/parser/SQLiteParser.interp b/internal/engine/sqlite/parser/SQLiteParser.interp new file mode 100644 index 0000000000..88140b567f --- /dev/null +++ b/internal/engine/sqlite/parser/SQLiteParser.interp @@ -0,0 +1,506 @@ +token literal names: +null +';' +'.' +'(' +')' +',' +'=' +'*' +'+' +'-' +'~' +'||' +'/' +'%' +'<<' +'>>' +'&' +'|' +'<' +'<=' +'>' +'>=' +'==' +'!=' +'<>' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SCOL +DOT +OPEN_PAR +CLOSE_PAR +COMMA +ASSIGN +STAR +PLUS +MINUS +TILDE +PIPE2 +DIV +MOD +LT2 +GT2 +AMP +PIPE +LT +LT_EQ +GT +GT_EQ +EQ +NOT_EQ1 +NOT_EQ2 +ABORT_ +ACTION_ +ADD_ +AFTER_ +ALL_ +ALTER_ +ANALYZE_ +AND_ +AS_ +ASC_ +ATTACH_ +AUTOINCREMENT_ +BEFORE_ +BEGIN_ +BETWEEN_ +BY_ +CASCADE_ +CASE_ +CAST_ +CHECK_ +COLLATE_ +COLUMN_ +COMMIT_ +CONFLICT_ +CONSTRAINT_ +CREATE_ +CROSS_ +CURRENT_DATE_ +CURRENT_TIME_ +CURRENT_TIMESTAMP_ +DATABASE_ +DEFAULT_ +DEFERRABLE_ +DEFERRED_ +DELETE_ +DESC_ +DETACH_ +DISTINCT_ +DROP_ +EACH_ +ELSE_ +END_ +ESCAPE_ +EXCEPT_ +EXCLUSIVE_ +EXISTS_ +EXPLAIN_ +FAIL_ +FOR_ +FOREIGN_ +FROM_ +FULL_ +GLOB_ +GROUP_ +HAVING_ +IF_ +IGNORE_ +IMMEDIATE_ +IN_ +INDEX_ +INDEXED_ +INITIALLY_ +INNER_ +INSERT_ +INSTEAD_ +INTERSECT_ +INTO_ +IS_ +ISNULL_ +JOIN_ +KEY_ +LEFT_ +LIKE_ +LIMIT_ +MATCH_ +NATURAL_ +NO_ +NOT_ +NOTNULL_ +NULL_ +OF_ +OFFSET_ +ON_ +OR_ +ORDER_ +OUTER_ +PLAN_ +PRAGMA_ +PRIMARY_ +QUERY_ +RAISE_ +RECURSIVE_ +REFERENCES_ +REGEXP_ +REINDEX_ +RELEASE_ +RENAME_ +REPLACE_ +RESTRICT_ +RIGHT_ +ROLLBACK_ +ROW_ +ROWS_ +SAVEPOINT_ +SELECT_ +SET_ +TABLE_ +TEMP_ +TEMPORARY_ +THEN_ +TO_ +TRANSACTION_ +TRIGGER_ +UNION_ +UNIQUE_ +UPDATE_ +USING_ +VACUUM_ +VALUES_ +VIEW_ +VIRTUAL_ +WHEN_ +WHERE_ +WITH_ +WITHOUT_ +FIRST_VALUE_ +OVER_ +PARTITION_ +RANGE_ +PRECEDING_ +UNBOUNDED_ +CURRENT_ +FOLLOWING_ +CUME_DIST_ +DENSE_RANK_ +LAG_ +LAST_VALUE_ +LEAD_ +NTH_VALUE_ +NTILE_ +PERCENT_RANK_ +RANK_ +ROW_NUMBER_ +GENERATED_ +ALWAYS_ +STORED_ +TRUE_ +FALSE_ +WINDOW_ +NULLS_ +FIRST_ +LAST_ +FILTER_ +GROUPS_ +EXCLUDE_ +TIES_ +OTHERS_ +DO_ +NOTHING_ +IDENTIFIER +NUMERIC_LITERAL +BIND_PARAMETER +STRING_LITERAL +BLOB_LITERAL +SINGLE_LINE_COMMENT +MULTILINE_COMMENT +SPACES +UNEXPECTED_CHAR + +rule names: +parse +sql_stmt_list +sql_stmt +alter_table_stmt +analyze_stmt +attach_stmt +begin_stmt +commit_stmt +rollback_stmt +savepoint_stmt +release_stmt +create_index_stmt +indexed_column +create_table_stmt +column_def +type_name +column_constraint +signed_number +table_constraint +foreign_key_clause +conflict_clause +create_trigger_stmt +create_view_stmt +create_virtual_table_stmt +with_clause +cte_table_name +recursive_cte +common_table_expression +delete_stmt +delete_stmt_limited +detach_stmt +drop_stmt +expr +raise_function +literal_value +insert_stmt +upsert_clause +pragma_stmt +pragma_value +reindex_stmt +select_stmt +join_clause +select_core +factored_select_stmt +simple_select_stmt +compound_select_stmt +table_or_subquery +result_column +join_operator +join_constraint +compound_operator +update_stmt +column_name_list +update_stmt_limited +qualified_table_name +vacuum_stmt +filter_clause +window_defn +over_clause +frame_spec +frame_clause +simple_function_invocation +aggregate_function_invocation +window_function_invocation +common_table_stmt +order_by_stmt +limit_stmt +ordering_term +asc_desc +frame_left +frame_right +frame_single +window_function +of_OF_fset +default_DEFAULT__value +partition_by +order_by_expr +order_by_expr_asc_desc +expr_asc_desc +initial_select +recursive__select +unary_operator +error_message +module_argument +column_alias +keyword +name +function_name +schema_name +table_name +table_or_index_name +new_table_name +column_name +collation_name +foreign_table +index_name +trigger_name +view_name +module_name +pragma_name +savepoint_name +table_alias +transaction_name +window_name +alias +filename +base_window_name +simple_func +aggregate_func +table_function_name +any_name + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 194, 2043, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 3, 2, 7, 2, 226, 10, 2, 12, 2, 14, 2, 229, 11, 2, 3, 2, 3, 2, 3, 3, 7, 3, 234, 10, 3, 12, 3, 14, 3, 237, 11, 3, 3, 3, 3, 3, 6, 3, 241, 10, 3, 13, 3, 14, 3, 242, 3, 3, 7, 3, 246, 10, 3, 12, 3, 14, 3, 249, 11, 3, 3, 3, 7, 3, 252, 10, 3, 12, 3, 14, 3, 255, 11, 3, 3, 4, 3, 4, 3, 4, 5, 4, 260, 10, 4, 5, 4, 262, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 288, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 295, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 302, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 308, 10, 5, 3, 5, 3, 5, 5, 5, 312, 10, 5, 3, 5, 5, 5, 315, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 322, 10, 6, 3, 6, 5, 6, 325, 10, 6, 3, 7, 3, 7, 5, 7, 329, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 337, 10, 8, 3, 8, 3, 8, 5, 8, 341, 10, 8, 5, 8, 343, 10, 8, 3, 9, 3, 9, 5, 9, 347, 10, 9, 3, 10, 3, 10, 5, 10, 351, 10, 10, 3, 10, 3, 10, 5, 10, 355, 10, 10, 3, 10, 5, 10, 358, 10, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 365, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 5, 13, 371, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 377, 10, 13, 3, 13, 3, 13, 3, 13, 5, 13, 382, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 391, 10, 13, 12, 13, 14, 13, 394, 11, 13, 3, 13, 3, 13, 3, 13, 5, 13, 399, 10, 13, 3, 14, 3, 14, 5, 14, 403, 10, 14, 3, 14, 3, 14, 5, 14, 407, 10, 14, 3, 14, 5, 14, 410, 10, 14, 3, 15, 3, 15, 5, 15, 414, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 420, 10, 15, 3, 15, 3, 15, 3, 15, 5, 15, 425, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 432, 10, 15, 12, 15, 14, 15, 435, 11, 15, 3, 15, 3, 15, 7, 15, 439, 10, 15, 12, 15, 14, 15, 442, 11, 15, 3, 15, 3, 15, 3, 15, 5, 15, 447, 10, 15, 3, 15, 3, 15, 5, 15, 451, 10, 15, 3, 16, 3, 16, 5, 16, 455, 10, 16, 3, 16, 7, 16, 458, 10, 16, 12, 16, 14, 16, 461, 11, 16, 3, 17, 6, 17, 464, 10, 17, 13, 17, 14, 17, 465, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 478, 10, 17, 3, 18, 3, 18, 5, 18, 482, 10, 18, 3, 18, 3, 18, 3, 18, 5, 18, 487, 10, 18, 3, 18, 5, 18, 490, 10, 18, 3, 18, 5, 18, 493, 10, 18, 3, 18, 3, 18, 3, 18, 5, 18, 498, 10, 18, 3, 18, 5, 18, 501, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 515, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 522, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 529, 10, 18, 5, 18, 531, 10, 18, 3, 19, 5, 19, 534, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 540, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 545, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 551, 10, 20, 12, 20, 14, 20, 554, 11, 20, 3, 20, 3, 20, 5, 20, 558, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 571, 10, 20, 12, 20, 14, 20, 574, 11, 20, 3, 20, 3, 20, 3, 20, 5, 20, 579, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 587, 10, 21, 12, 21, 14, 21, 590, 11, 21, 3, 21, 3, 21, 5, 21, 594, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 604, 10, 21, 3, 21, 3, 21, 7, 21, 608, 10, 21, 12, 21, 14, 21, 611, 11, 21, 3, 21, 5, 21, 614, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 619, 10, 21, 5, 21, 621, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 5, 23, 629, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 635, 10, 23, 3, 23, 3, 23, 3, 23, 5, 23, 640, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 647, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 656, 10, 23, 12, 23, 14, 23, 659, 11, 23, 5, 23, 661, 10, 23, 5, 23, 663, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 670, 10, 23, 3, 23, 3, 23, 5, 23, 674, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 681, 10, 23, 3, 23, 3, 23, 6, 23, 685, 10, 23, 13, 23, 14, 23, 686, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 693, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 699, 10, 24, 3, 24, 3, 24, 3, 24, 5, 24, 704, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 711, 10, 24, 12, 24, 14, 24, 714, 11, 24, 3, 24, 3, 24, 5, 24, 718, 10, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 729, 10, 25, 3, 25, 3, 25, 3, 25, 5, 25, 734, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 743, 10, 25, 12, 25, 14, 25, 746, 11, 25, 3, 25, 3, 25, 5, 25, 750, 10, 25, 3, 26, 3, 26, 5, 26, 754, 10, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 768, 10, 26, 12, 26, 14, 26, 771, 11, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 778, 10, 27, 12, 27, 14, 27, 781, 11, 27, 3, 27, 3, 27, 5, 27, 785, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 793, 10, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 803, 10, 29, 12, 29, 14, 29, 806, 11, 29, 3, 29, 3, 29, 5, 29, 810, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 5, 30, 818, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 825, 10, 30, 3, 31, 5, 31, 828, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 835, 10, 31, 3, 31, 5, 31, 838, 10, 31, 3, 31, 5, 31, 841, 10, 31, 3, 32, 3, 32, 5, 32, 845, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 853, 10, 33, 3, 33, 3, 33, 3, 33, 5, 33, 858, 10, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 868, 10, 34, 3, 34, 3, 34, 3, 34, 5, 34, 873, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 882, 10, 34, 3, 34, 3, 34, 3, 34, 7, 34, 887, 10, 34, 12, 34, 14, 34, 890, 11, 34, 3, 34, 5, 34, 893, 10, 34, 3, 34, 3, 34, 5, 34, 897, 10, 34, 3, 34, 5, 34, 900, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 906, 10, 34, 12, 34, 14, 34, 909, 11, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 921, 10, 34, 3, 34, 5, 34, 924, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 932, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 6, 34, 939, 10, 34, 13, 34, 14, 34, 940, 3, 34, 3, 34, 5, 34, 945, 10, 34, 3, 34, 3, 34, 3, 34, 5, 34, 950, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 980, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 992, 10, 34, 3, 34, 3, 34, 3, 34, 5, 34, 997, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1009, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1015, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1022, 10, 34, 3, 34, 3, 34, 5, 34, 1026, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 1034, 10, 34, 12, 34, 14, 34, 1037, 11, 34, 5, 34, 1039, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1045, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1051, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 1058, 10, 34, 12, 34, 14, 34, 1061, 11, 34, 5, 34, 1063, 10, 34, 3, 34, 3, 34, 5, 34, 1067, 10, 34, 7, 34, 1069, 10, 34, 12, 34, 14, 34, 1072, 11, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 1080, 10, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 5, 37, 1087, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1094, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1100, 10, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1105, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 1111, 10, 37, 12, 37, 14, 37, 1114, 11, 37, 3, 37, 3, 37, 5, 37, 1118, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 1125, 10, 37, 12, 37, 14, 37, 1128, 11, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 1136, 10, 37, 12, 37, 14, 37, 1139, 11, 37, 3, 37, 3, 37, 7, 37, 1143, 10, 37, 12, 37, 14, 37, 1146, 11, 37, 3, 37, 5, 37, 1149, 10, 37, 3, 37, 5, 37, 1152, 10, 37, 3, 37, 3, 37, 5, 37, 1156, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 1164, 10, 38, 12, 38, 14, 38, 1167, 11, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1172, 10, 38, 5, 38, 1174, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1182, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1189, 10, 38, 3, 38, 3, 38, 3, 38, 7, 38, 1194, 10, 38, 12, 38, 14, 38, 1197, 11, 38, 3, 38, 3, 38, 5, 38, 1201, 10, 38, 5, 38, 1203, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 1209, 10, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 1218, 10, 39, 3, 40, 3, 40, 3, 40, 5, 40, 1223, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1230, 10, 41, 3, 41, 3, 41, 5, 41, 1234, 10, 41, 5, 41, 1236, 10, 41, 3, 42, 5, 42, 1239, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 1245, 10, 42, 12, 42, 14, 42, 1248, 11, 42, 3, 42, 5, 42, 1251, 10, 42, 3, 42, 5, 42, 1254, 10, 42, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 1260, 10, 43, 7, 43, 1262, 10, 43, 12, 43, 14, 43, 1265, 11, 43, 3, 44, 3, 44, 5, 44, 1269, 10, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1274, 10, 44, 12, 44, 14, 44, 1277, 11, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1283, 10, 44, 12, 44, 14, 44, 1286, 11, 44, 3, 44, 5, 44, 1289, 10, 44, 5, 44, 1291, 10, 44, 3, 44, 3, 44, 5, 44, 1295, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1302, 10, 44, 12, 44, 14, 44, 1305, 11, 44, 3, 44, 3, 44, 5, 44, 1309, 10, 44, 5, 44, 1311, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1322, 10, 44, 12, 44, 14, 44, 1325, 11, 44, 5, 44, 1327, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1334, 10, 44, 12, 44, 14, 44, 1337, 11, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1345, 10, 44, 12, 44, 14, 44, 1348, 11, 44, 3, 44, 3, 44, 7, 44, 1352, 10, 44, 12, 44, 14, 44, 1355, 11, 44, 5, 44, 1357, 10, 44, 3, 45, 3, 45, 3, 46, 5, 46, 1362, 10, 46, 3, 46, 3, 46, 5, 46, 1366, 10, 46, 3, 46, 5, 46, 1369, 10, 46, 3, 47, 5, 47, 1372, 10, 47, 3, 47, 3, 47, 3, 47, 5, 47, 1377, 10, 47, 3, 47, 3, 47, 5, 47, 1381, 10, 47, 3, 47, 6, 47, 1384, 10, 47, 13, 47, 14, 47, 1385, 3, 47, 5, 47, 1389, 10, 47, 3, 47, 5, 47, 1392, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 1397, 10, 48, 3, 48, 3, 48, 5, 48, 1401, 10, 48, 3, 48, 5, 48, 1404, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1411, 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1416, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 1423, 10, 48, 12, 48, 14, 48, 1426, 11, 48, 3, 48, 3, 48, 5, 48, 1430, 10, 48, 3, 48, 5, 48, 1433, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 1439, 10, 48, 12, 48, 14, 48, 1442, 11, 48, 3, 48, 5, 48, 1445, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1453, 10, 48, 3, 48, 5, 48, 1456, 10, 48, 5, 48, 1458, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 1467, 10, 49, 3, 49, 5, 49, 1470, 10, 49, 5, 49, 1472, 10, 49, 3, 50, 3, 50, 5, 50, 1476, 10, 50, 3, 50, 3, 50, 5, 50, 1480, 10, 50, 3, 50, 3, 50, 5, 50, 1484, 10, 50, 3, 50, 5, 50, 1487, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 1496, 10, 51, 12, 51, 14, 51, 1499, 11, 51, 3, 51, 3, 51, 5, 51, 1503, 10, 51, 3, 52, 3, 52, 5, 52, 1507, 10, 52, 3, 52, 3, 52, 5, 52, 1511, 10, 52, 3, 53, 5, 53, 1514, 10, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1519, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1525, 10, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1532, 10, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1537, 10, 53, 12, 53, 14, 53, 1540, 11, 53, 3, 53, 3, 53, 5, 53, 1544, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 1550, 10, 54, 12, 54, 14, 54, 1553, 11, 54, 3, 54, 3, 54, 3, 55, 5, 55, 1558, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 1563, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 1569, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 1576, 10, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1581, 10, 55, 12, 55, 14, 55, 1584, 11, 55, 3, 55, 3, 55, 5, 55, 1588, 10, 55, 3, 55, 5, 55, 1591, 10, 55, 3, 55, 5, 55, 1594, 10, 55, 3, 56, 3, 56, 3, 56, 5, 56, 1599, 10, 56, 3, 56, 3, 56, 3, 56, 5, 56, 1604, 10, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 1611, 10, 56, 3, 57, 3, 57, 5, 57, 1615, 10, 57, 3, 57, 3, 57, 5, 57, 1619, 10, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 5, 59, 1629, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 1636, 10, 59, 12, 59, 14, 59, 1639, 11, 59, 5, 59, 1641, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 1648, 10, 59, 12, 59, 14, 59, 1651, 11, 59, 3, 59, 5, 59, 1654, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 1662, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 1669, 10, 60, 12, 60, 14, 60, 1672, 11, 60, 5, 60, 1674, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 1681, 10, 60, 12, 60, 14, 60, 1684, 11, 60, 5, 60, 1686, 10, 60, 3, 60, 5, 60, 1689, 10, 60, 3, 60, 5, 60, 1692, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 1702, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 1711, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 1718, 10, 63, 12, 63, 14, 63, 1721, 11, 63, 3, 63, 5, 63, 1724, 10, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 5, 64, 1731, 10, 64, 3, 64, 3, 64, 3, 64, 7, 64, 1736, 10, 64, 12, 64, 14, 64, 1739, 11, 64, 3, 64, 5, 64, 1742, 10, 64, 3, 64, 3, 64, 5, 64, 1746, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 1753, 10, 65, 12, 65, 14, 65, 1756, 11, 65, 3, 65, 5, 65, 1759, 10, 65, 3, 65, 3, 65, 5, 65, 1763, 10, 65, 3, 65, 3, 65, 3, 65, 5, 65, 1768, 10, 65, 3, 66, 3, 66, 5, 66, 1772, 10, 66, 3, 66, 3, 66, 3, 66, 7, 66, 1777, 10, 66, 12, 66, 14, 66, 1780, 11, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 7, 67, 1787, 10, 67, 12, 67, 14, 67, 1790, 11, 67, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 1796, 10, 68, 3, 69, 3, 69, 3, 69, 5, 69, 1801, 10, 69, 3, 69, 5, 69, 1804, 10, 69, 3, 69, 3, 69, 5, 69, 1808, 10, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 5, 71, 1822, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 5, 72, 1834, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 5, 73, 1843, 10, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1852, 10, 74, 3, 74, 3, 74, 5, 74, 1856, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1866, 10, 74, 3, 74, 5, 74, 1869, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1878, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1887, 10, 74, 3, 74, 5, 74, 1890, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1896, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1910, 10, 74, 3, 74, 3, 74, 5, 74, 1914, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1925, 10, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1930, 10, 74, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 6, 77, 1941, 10, 77, 13, 77, 14, 77, 1942, 3, 78, 3, 78, 3, 78, 6, 78, 1948, 10, 78, 13, 78, 14, 78, 1949, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 5, 80, 1958, 10, 80, 3, 80, 3, 80, 3, 80, 5, 80, 1963, 10, 80, 7, 80, 1965, 10, 80, 12, 80, 14, 80, 1968, 11, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 85, 3, 85, 5, 85, 1980, 10, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 3, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 97, 3, 97, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 2041, 10, 112, 3, 112, 4, 433, 465, 3, 66, 113, 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, 2, 30, 5, 2, 60, 60, 71, 71, 84, 84, 4, 2, 49, 49, 68, 68, 3, 2, 134, 135, 4, 2, 147, 147, 172, 172, 3, 2, 10, 11, 4, 2, 61, 61, 142, 142, 4, 2, 58, 58, 106, 106, 4, 2, 60, 60, 84, 84, 7, 2, 27, 27, 74, 74, 83, 83, 124, 124, 127, 127, 6, 2, 86, 86, 133, 133, 139, 139, 146, 146, 4, 2, 9, 9, 14, 15, 3, 2, 16, 19, 3, 2, 20, 23, 6, 2, 79, 79, 99, 99, 101, 101, 120, 120, 5, 2, 27, 27, 74, 74, 127, 127, 7, 2, 54, 56, 106, 106, 173, 174, 187, 187, 189, 190, 4, 2, 31, 31, 64, 64, 5, 2, 129, 129, 155, 155, 180, 180, 4, 2, 7, 7, 108, 108, 3, 2, 177, 178, 4, 2, 36, 36, 62, 62, 4, 2, 152, 152, 163, 163, 4, 2, 160, 160, 167, 167, 4, 2, 161, 161, 168, 169, 4, 2, 162, 162, 164, 164, 4, 2, 10, 12, 104, 104, 4, 2, 186, 186, 189, 189, 3, 2, 27, 181, 2, 2319, 2, 227, 3, 2, 2, 2, 4, 235, 3, 2, 2, 2, 6, 261, 3, 2, 2, 2, 8, 289, 3, 2, 2, 2, 10, 316, 3, 2, 2, 2, 12, 326, 3, 2, 2, 2, 14, 334, 3, 2, 2, 2, 16, 344, 3, 2, 2, 2, 18, 348, 3, 2, 2, 2, 20, 359, 3, 2, 2, 2, 22, 362, 3, 2, 2, 2, 24, 368, 3, 2, 2, 2, 26, 402, 3, 2, 2, 2, 28, 411, 3, 2, 2, 2, 30, 452, 3, 2, 2, 2, 32, 463, 3, 2, 2, 2, 34, 481, 3, 2, 2, 2, 36, 533, 3, 2, 2, 2, 38, 539, 3, 2, 2, 2, 40, 580, 3, 2, 2, 2, 42, 622, 3, 2, 2, 2, 44, 626, 3, 2, 2, 2, 46, 690, 3, 2, 2, 2, 48, 722, 3, 2, 2, 2, 50, 751, 3, 2, 2, 2, 52, 772, 3, 2, 2, 2, 54, 786, 3, 2, 2, 2, 56, 797, 3, 2, 2, 2, 58, 817, 3, 2, 2, 2, 60, 827, 3, 2, 2, 2, 62, 842, 3, 2, 2, 2, 64, 848, 3, 2, 2, 2, 66, 949, 3, 2, 2, 2, 68, 1073, 3, 2, 2, 2, 70, 1083, 3, 2, 2, 2, 72, 1155, 3, 2, 2, 2, 74, 1157, 3, 2, 2, 2, 76, 1204, 3, 2, 2, 2, 78, 1222, 3, 2, 2, 2, 80, 1224, 3, 2, 2, 2, 82, 1238, 3, 2, 2, 2, 84, 1255, 3, 2, 2, 2, 86, 1356, 3, 2, 2, 2, 88, 1358, 3, 2, 2, 2, 90, 1361, 3, 2, 2, 2, 92, 1371, 3, 2, 2, 2, 94, 1457, 3, 2, 2, 2, 96, 1471, 3, 2, 2, 2, 98, 1486, 3, 2, 2, 2, 100, 1502, 3, 2, 2, 2, 102, 1510, 3, 2, 2, 2, 104, 1513, 3, 2, 2, 2, 106, 1545, 3, 2, 2, 2, 108, 1557, 3, 2, 2, 2, 110, 1598, 3, 2, 2, 2, 112, 1612, 3, 2, 2, 2, 114, 1620, 3, 2, 2, 2, 116, 1626, 3, 2, 2, 2, 118, 1657, 3, 2, 2, 2, 120, 1693, 3, 2, 2, 2, 122, 1703, 3, 2, 2, 2, 124, 1712, 3, 2, 2, 2, 126, 1727, 3, 2, 2, 2, 128, 1747, 3, 2, 2, 2, 130, 1769, 3, 2, 2, 2, 132, 1781, 3, 2, 2, 2, 134, 1791, 3, 2, 2, 2, 136, 1797, 3, 2, 2, 2, 138, 1809, 3, 2, 2, 2, 140, 1821, 3, 2, 2, 2, 142, 1833, 3, 2, 2, 2, 144, 1842, 3, 2, 2, 2, 146, 1929, 3, 2, 2, 2, 148, 1931, 3, 2, 2, 2, 150, 1934, 3, 2, 2, 2, 152, 1937, 3, 2, 2, 2, 154, 1944, 3, 2, 2, 2, 156, 1951, 3, 2, 2, 2, 158, 1955, 3, 2, 2, 2, 160, 1969, 3, 2, 2, 2, 162, 1971, 3, 2, 2, 2, 164, 1973, 3, 2, 2, 2, 166, 1975, 3, 2, 2, 2, 168, 1979, 3, 2, 2, 2, 170, 1981, 3, 2, 2, 2, 172, 1983, 3, 2, 2, 2, 174, 1985, 3, 2, 2, 2, 176, 1987, 3, 2, 2, 2, 178, 1989, 3, 2, 2, 2, 180, 1991, 3, 2, 2, 2, 182, 1993, 3, 2, 2, 2, 184, 1995, 3, 2, 2, 2, 186, 1997, 3, 2, 2, 2, 188, 1999, 3, 2, 2, 2, 190, 2001, 3, 2, 2, 2, 192, 2003, 3, 2, 2, 2, 194, 2005, 3, 2, 2, 2, 196, 2007, 3, 2, 2, 2, 198, 2009, 3, 2, 2, 2, 200, 2011, 3, 2, 2, 2, 202, 2013, 3, 2, 2, 2, 204, 2015, 3, 2, 2, 2, 206, 2017, 3, 2, 2, 2, 208, 2019, 3, 2, 2, 2, 210, 2021, 3, 2, 2, 2, 212, 2023, 3, 2, 2, 2, 214, 2025, 3, 2, 2, 2, 216, 2027, 3, 2, 2, 2, 218, 2029, 3, 2, 2, 2, 220, 2031, 3, 2, 2, 2, 222, 2040, 3, 2, 2, 2, 224, 226, 5, 4, 3, 2, 225, 224, 3, 2, 2, 2, 226, 229, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 230, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 230, 231, 7, 2, 2, 3, 231, 3, 3, 2, 2, 2, 232, 234, 7, 3, 2, 2, 233, 232, 3, 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 238, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 238, 247, 5, 6, 4, 2, 239, 241, 7, 3, 2, 2, 240, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 246, 5, 6, 4, 2, 245, 240, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 253, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, 252, 7, 3, 2, 2, 251, 250, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 5, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 259, 7, 73, 2, 2, 257, 258, 7, 116, 2, 2, 258, 260, 7, 113, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 262, 3, 2, 2, 2, 261, 256, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 287, 3, 2, 2, 2, 263, 288, 5, 8, 5, 2, 264, 288, 5, 10, 6, 2, 265, 288, 5, 12, 7, 2, 266, 288, 5, 14, 8, 2, 267, 288, 5, 16, 9, 2, 268, 288, 5, 24, 13, 2, 269, 288, 5, 28, 15, 2, 270, 288, 5, 44, 23, 2, 271, 288, 5, 46, 24, 2, 272, 288, 5, 48, 25, 2, 273, 288, 5, 58, 30, 2, 274, 288, 5, 60, 31, 2, 275, 288, 5, 62, 32, 2, 276, 288, 5, 64, 33, 2, 277, 288, 5, 72, 37, 2, 278, 288, 5, 76, 39, 2, 279, 288, 5, 80, 41, 2, 280, 288, 5, 22, 12, 2, 281, 288, 5, 18, 10, 2, 282, 288, 5, 20, 11, 2, 283, 288, 5, 82, 42, 2, 284, 288, 5, 104, 53, 2, 285, 288, 5, 108, 55, 2, 286, 288, 5, 112, 57, 2, 287, 263, 3, 2, 2, 2, 287, 264, 3, 2, 2, 2, 287, 265, 3, 2, 2, 2, 287, 266, 3, 2, 2, 2, 287, 267, 3, 2, 2, 2, 287, 268, 3, 2, 2, 2, 287, 269, 3, 2, 2, 2, 287, 270, 3, 2, 2, 2, 287, 271, 3, 2, 2, 2, 287, 272, 3, 2, 2, 2, 287, 273, 3, 2, 2, 2, 287, 274, 3, 2, 2, 2, 287, 275, 3, 2, 2, 2, 287, 276, 3, 2, 2, 2, 287, 277, 3, 2, 2, 2, 287, 278, 3, 2, 2, 2, 287, 279, 3, 2, 2, 2, 287, 280, 3, 2, 2, 2, 287, 281, 3, 2, 2, 2, 287, 282, 3, 2, 2, 2, 287, 283, 3, 2, 2, 2, 287, 284, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, 3, 2, 2, 2, 288, 7, 3, 2, 2, 2, 289, 290, 7, 32, 2, 2, 290, 294, 7, 133, 2, 2, 291, 292, 5, 178, 90, 2, 292, 293, 7, 4, 2, 2, 293, 295, 3, 2, 2, 2, 294, 291, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 314, 5, 180, 91, 2, 297, 307, 7, 123, 2, 2, 298, 299, 7, 137, 2, 2, 299, 308, 5, 184, 93, 2, 300, 302, 7, 48, 2, 2, 301, 300, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 5, 186, 94, 2, 304, 305, 7, 137, 2, 2, 305, 306, 5, 186, 94, 2, 306, 308, 3, 2, 2, 2, 307, 298, 3, 2, 2, 2, 307, 301, 3, 2, 2, 2, 308, 315, 3, 2, 2, 2, 309, 311, 7, 29, 2, 2, 310, 312, 7, 48, 2, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 315, 5, 30, 16, 2, 314, 297, 3, 2, 2, 2, 314, 309, 3, 2, 2, 2, 315, 9, 3, 2, 2, 2, 316, 324, 7, 33, 2, 2, 317, 325, 5, 178, 90, 2, 318, 319, 5, 178, 90, 2, 319, 320, 7, 4, 2, 2, 320, 322, 3, 2, 2, 2, 321, 318, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 325, 5, 182, 92, 2, 324, 317, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 11, 3, 2, 2, 2, 326, 328, 7, 37, 2, 2, 327, 329, 7, 57, 2, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 5, 66, 34, 2, 331, 332, 7, 35, 2, 2, 332, 333, 5, 178, 90, 2, 333, 13, 3, 2, 2, 2, 334, 336, 7, 40, 2, 2, 335, 337, 9, 2, 2, 2, 336, 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 342, 3, 2, 2, 2, 338, 340, 7, 138, 2, 2, 339, 341, 5, 206, 104, 2, 340, 339, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 343, 3, 2, 2, 2, 342, 338, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 15, 3, 2, 2, 2, 344, 346, 9, 3, 2, 2, 345, 347, 7, 138, 2, 2, 346, 345, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 17, 3, 2, 2, 2, 348, 350, 7, 127, 2, 2, 349, 351, 7, 138, 2, 2, 350, 349, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 357, 3, 2, 2, 2, 352, 354, 7, 137, 2, 2, 353, 355, 7, 130, 2, 2, 354, 353, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 358, 5, 202, 102, 2, 357, 352, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 19, 3, 2, 2, 2, 359, 360, 7, 130, 2, 2, 360, 361, 5, 202, 102, 2, 361, 21, 3, 2, 2, 2, 362, 364, 7, 122, 2, 2, 363, 365, 7, 130, 2, 2, 364, 363, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 367, 5, 202, 102, 2, 367, 23, 3, 2, 2, 2, 368, 370, 7, 52, 2, 2, 369, 371, 7, 141, 2, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 376, 7, 86, 2, 2, 373, 374, 7, 82, 2, 2, 374, 375, 7, 104, 2, 2, 375, 377, 7, 72, 2, 2, 376, 373, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 381, 3, 2, 2, 2, 378, 379, 5, 178, 90, 2, 379, 380, 7, 4, 2, 2, 380, 382, 3, 2, 2, 2, 381, 378, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 5, 192, 97, 2, 384, 385, 7, 109, 2, 2, 385, 386, 5, 180, 91, 2, 386, 387, 7, 5, 2, 2, 387, 392, 5, 26, 14, 2, 388, 389, 7, 7, 2, 2, 389, 391, 5, 26, 14, 2, 390, 388, 3, 2, 2, 2, 391, 394, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 395, 3, 2, 2, 2, 394, 392, 3, 2, 2, 2, 395, 398, 7, 6, 2, 2, 396, 397, 7, 149, 2, 2, 397, 399, 5, 66, 34, 2, 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 25, 3, 2, 2, 2, 400, 403, 5, 186, 94, 2, 401, 403, 5, 66, 34, 2, 402, 400, 3, 2, 2, 2, 402, 401, 3, 2, 2, 2, 403, 406, 3, 2, 2, 2, 404, 405, 7, 47, 2, 2, 405, 407, 5, 188, 95, 2, 406, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 409, 3, 2, 2, 2, 408, 410, 5, 138, 70, 2, 409, 408, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, 27, 3, 2, 2, 2, 411, 413, 7, 52, 2, 2, 412, 414, 9, 4, 2, 2, 413, 412, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 419, 7, 133, 2, 2, 416, 417, 7, 82, 2, 2, 417, 418, 7, 104, 2, 2, 418, 420, 7, 72, 2, 2, 419, 416, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 424, 3, 2, 2, 2, 421, 422, 5, 178, 90, 2, 422, 423, 7, 4, 2, 2, 423, 425, 3, 2, 2, 2, 424, 421, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 450, 5, 180, 91, 2, 427, 428, 7, 5, 2, 2, 428, 433, 5, 30, 16, 2, 429, 430, 7, 7, 2, 2, 430, 432, 5, 30, 16, 2, 431, 429, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 440, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 437, 7, 7, 2, 2, 437, 439, 5, 38, 20, 2, 438, 436, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 446, 7, 6, 2, 2, 444, 445, 7, 151, 2, 2, 445, 447, 7, 186, 2, 2, 446, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 451, 3, 2, 2, 2, 448, 449, 7, 35, 2, 2, 449, 451, 5, 82, 42, 2, 450, 427, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 451, 29, 3, 2, 2, 2, 452, 454, 5, 186, 94, 2, 453, 455, 5, 32, 17, 2, 454, 453, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 459, 3, 2, 2, 2, 456, 458, 5, 34, 18, 2, 457, 456, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 31, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 464, 5, 174, 88, 2, 463, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 465, 463, 3, 2, 2, 2, 466, 477, 3, 2, 2, 2, 467, 468, 7, 5, 2, 2, 468, 469, 5, 36, 19, 2, 469, 470, 7, 6, 2, 2, 470, 478, 3, 2, 2, 2, 471, 472, 7, 5, 2, 2, 472, 473, 5, 36, 19, 2, 473, 474, 7, 7, 2, 2, 474, 475, 5, 36, 19, 2, 475, 476, 7, 6, 2, 2, 476, 478, 3, 2, 2, 2, 477, 467, 3, 2, 2, 2, 477, 471, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 33, 3, 2, 2, 2, 479, 480, 7, 51, 2, 2, 480, 482, 5, 174, 88, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 530, 3, 2, 2, 2, 483, 484, 7, 115, 2, 2, 484, 486, 7, 97, 2, 2, 485, 487, 5, 138, 70, 2, 486, 485, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 489, 3, 2, 2, 2, 488, 490, 5, 42, 22, 2, 489, 488, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 492, 3, 2, 2, 2, 491, 493, 7, 38, 2, 2, 492, 491, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 531, 3, 2, 2, 2, 494, 495, 7, 104, 2, 2, 495, 498, 7, 106, 2, 2, 496, 498, 7, 141, 2, 2, 497, 494, 3, 2, 2, 2, 497, 496, 3, 2, 2, 2, 498, 500, 3, 2, 2, 2, 499, 501, 5, 42, 22, 2, 500, 499, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 531, 3, 2, 2, 2, 502, 503, 7, 46, 2, 2, 503, 504, 7, 5, 2, 2, 504, 505, 5, 66, 34, 2, 505, 506, 7, 6, 2, 2, 506, 531, 3, 2, 2, 2, 507, 514, 7, 58, 2, 2, 508, 515, 5, 36, 19, 2, 509, 515, 5, 70, 36, 2, 510, 511, 7, 5, 2, 2, 511, 512, 5, 66, 34, 2, 512, 513, 7, 6, 2, 2, 513, 515, 3, 2, 2, 2, 514, 508, 3, 2, 2, 2, 514, 509, 3, 2, 2, 2, 514, 510, 3, 2, 2, 2, 515, 531, 3, 2, 2, 2, 516, 517, 7, 47, 2, 2, 517, 531, 5, 188, 95, 2, 518, 531, 5, 40, 21, 2, 519, 520, 7, 170, 2, 2, 520, 522, 7, 171, 2, 2, 521, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 524, 7, 35, 2, 2, 524, 525, 7, 5, 2, 2, 525, 526, 5, 66, 34, 2, 526, 528, 7, 6, 2, 2, 527, 529, 9, 5, 2, 2, 528, 527, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 531, 3, 2, 2, 2, 530, 483, 3, 2, 2, 2, 530, 497, 3, 2, 2, 2, 530, 502, 3, 2, 2, 2, 530, 507, 3, 2, 2, 2, 530, 516, 3, 2, 2, 2, 530, 518, 3, 2, 2, 2, 530, 521, 3, 2, 2, 2, 531, 35, 3, 2, 2, 2, 532, 534, 9, 6, 2, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 7, 187, 2, 2, 536, 37, 3, 2, 2, 2, 537, 538, 7, 51, 2, 2, 538, 540, 5, 174, 88, 2, 539, 537, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 578, 3, 2, 2, 2, 541, 542, 7, 115, 2, 2, 542, 545, 7, 97, 2, 2, 543, 545, 7, 141, 2, 2, 544, 541, 3, 2, 2, 2, 544, 543, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 7, 5, 2, 2, 547, 552, 5, 26, 14, 2, 548, 549, 7, 7, 2, 2, 549, 551, 5, 26, 14, 2, 550, 548, 3, 2, 2, 2, 551, 554, 3, 2, 2, 2, 552, 550, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 555, 3, 2, 2, 2, 554, 552, 3, 2, 2, 2, 555, 557, 7, 6, 2, 2, 556, 558, 5, 42, 22, 2, 557, 556, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 579, 3, 2, 2, 2, 559, 560, 7, 46, 2, 2, 560, 561, 7, 5, 2, 2, 561, 562, 5, 66, 34, 2, 562, 563, 7, 6, 2, 2, 563, 579, 3, 2, 2, 2, 564, 565, 7, 76, 2, 2, 565, 566, 7, 97, 2, 2, 566, 567, 7, 5, 2, 2, 567, 572, 5, 186, 94, 2, 568, 569, 7, 7, 2, 2, 569, 571, 5, 186, 94, 2, 570, 568, 3, 2, 2, 2, 571, 574, 3, 2, 2, 2, 572, 570, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 575, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 575, 576, 7, 6, 2, 2, 576, 577, 5, 40, 21, 2, 577, 579, 3, 2, 2, 2, 578, 544, 3, 2, 2, 2, 578, 559, 3, 2, 2, 2, 578, 564, 3, 2, 2, 2, 579, 39, 3, 2, 2, 2, 580, 581, 7, 119, 2, 2, 581, 593, 5, 190, 96, 2, 582, 583, 7, 5, 2, 2, 583, 588, 5, 186, 94, 2, 584, 585, 7, 7, 2, 2, 585, 587, 5, 186, 94, 2, 586, 584, 3, 2, 2, 2, 587, 590, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 588, 589, 3, 2, 2, 2, 589, 591, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 591, 592, 7, 6, 2, 2, 592, 594, 3, 2, 2, 2, 593, 582, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 609, 3, 2, 2, 2, 595, 596, 7, 109, 2, 2, 596, 603, 9, 7, 2, 2, 597, 598, 7, 132, 2, 2, 598, 604, 9, 8, 2, 2, 599, 604, 7, 43, 2, 2, 600, 604, 7, 125, 2, 2, 601, 602, 7, 103, 2, 2, 602, 604, 7, 28, 2, 2, 603, 597, 3, 2, 2, 2, 603, 599, 3, 2, 2, 2, 603, 600, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 604, 608, 3, 2, 2, 2, 605, 606, 7, 101, 2, 2, 606, 608, 5, 174, 88, 2, 607, 595, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 608, 611, 3, 2, 2, 2, 609, 607, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 620, 3, 2, 2, 2, 611, 609, 3, 2, 2, 2, 612, 614, 7, 104, 2, 2, 613, 612, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 618, 7, 59, 2, 2, 616, 617, 7, 88, 2, 2, 617, 619, 9, 9, 2, 2, 618, 616, 3, 2, 2, 2, 618, 619, 3, 2, 2, 2, 619, 621, 3, 2, 2, 2, 620, 613, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 41, 3, 2, 2, 2, 622, 623, 7, 109, 2, 2, 623, 624, 7, 50, 2, 2, 624, 625, 9, 10, 2, 2, 625, 43, 3, 2, 2, 2, 626, 628, 7, 52, 2, 2, 627, 629, 9, 4, 2, 2, 628, 627, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 3, 2, 2, 2, 630, 634, 7, 139, 2, 2, 631, 632, 7, 82, 2, 2, 632, 633, 7, 104, 2, 2, 633, 635, 7, 72, 2, 2, 634, 631, 3, 2, 2, 2, 634, 635, 3, 2, 2, 2, 635, 639, 3, 2, 2, 2, 636, 637, 5, 178, 90, 2, 637, 638, 7, 4, 2, 2, 638, 640, 3, 2, 2, 2, 639, 636, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 646, 5, 194, 98, 2, 642, 647, 7, 39, 2, 2, 643, 647, 7, 30, 2, 2, 644, 645, 7, 91, 2, 2, 645, 647, 7, 107, 2, 2, 646, 642, 3, 2, 2, 2, 646, 643, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 662, 3, 2, 2, 2, 648, 663, 7, 61, 2, 2, 649, 663, 7, 90, 2, 2, 650, 660, 7, 142, 2, 2, 651, 652, 7, 107, 2, 2, 652, 657, 5, 186, 94, 2, 653, 654, 7, 7, 2, 2, 654, 656, 5, 186, 94, 2, 655, 653, 3, 2, 2, 2, 656, 659, 3, 2, 2, 2, 657, 655, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 660, 651, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 663, 3, 2, 2, 2, 662, 648, 3, 2, 2, 2, 662, 649, 3, 2, 2, 2, 662, 650, 3, 2, 2, 2, 663, 664, 3, 2, 2, 2, 664, 665, 7, 109, 2, 2, 665, 669, 5, 180, 91, 2, 666, 667, 7, 75, 2, 2, 667, 668, 7, 66, 2, 2, 668, 670, 7, 128, 2, 2, 669, 666, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 673, 3, 2, 2, 2, 671, 672, 7, 148, 2, 2, 672, 674, 5, 66, 34, 2, 673, 671, 3, 2, 2, 2, 673, 674, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 684, 7, 40, 2, 2, 676, 681, 5, 104, 53, 2, 677, 681, 5, 72, 37, 2, 678, 681, 5, 58, 30, 2, 679, 681, 5, 82, 42, 2, 680, 676, 3, 2, 2, 2, 680, 677, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 679, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, 683, 7, 3, 2, 2, 683, 685, 3, 2, 2, 2, 684, 680, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 684, 3, 2, 2, 2, 686, 687, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 689, 7, 68, 2, 2, 689, 45, 3, 2, 2, 2, 690, 692, 7, 52, 2, 2, 691, 693, 9, 4, 2, 2, 692, 691, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 698, 7, 146, 2, 2, 695, 696, 7, 82, 2, 2, 696, 697, 7, 104, 2, 2, 697, 699, 7, 72, 2, 2, 698, 695, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 703, 3, 2, 2, 2, 700, 701, 5, 178, 90, 2, 701, 702, 7, 4, 2, 2, 702, 704, 3, 2, 2, 2, 703, 700, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 717, 5, 196, 99, 2, 706, 707, 7, 5, 2, 2, 707, 712, 5, 186, 94, 2, 708, 709, 7, 7, 2, 2, 709, 711, 5, 186, 94, 2, 710, 708, 3, 2, 2, 2, 711, 714, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 712, 713, 3, 2, 2, 2, 713, 715, 3, 2, 2, 2, 714, 712, 3, 2, 2, 2, 715, 716, 7, 6, 2, 2, 716, 718, 3, 2, 2, 2, 717, 706, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 719, 3, 2, 2, 2, 719, 720, 7, 35, 2, 2, 720, 721, 5, 82, 42, 2, 721, 47, 3, 2, 2, 2, 722, 723, 7, 52, 2, 2, 723, 724, 7, 147, 2, 2, 724, 728, 7, 133, 2, 2, 725, 726, 7, 82, 2, 2, 726, 727, 7, 104, 2, 2, 727, 729, 7, 72, 2, 2, 728, 725, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 733, 3, 2, 2, 2, 730, 731, 5, 178, 90, 2, 731, 732, 7, 4, 2, 2, 732, 734, 3, 2, 2, 2, 733, 730, 3, 2, 2, 2, 733, 734, 3, 2, 2, 2, 734, 735, 3, 2, 2, 2, 735, 736, 5, 180, 91, 2, 736, 737, 7, 143, 2, 2, 737, 749, 5, 198, 100, 2, 738, 739, 7, 5, 2, 2, 739, 744, 5, 168, 85, 2, 740, 741, 7, 7, 2, 2, 741, 743, 5, 168, 85, 2, 742, 740, 3, 2, 2, 2, 743, 746, 3, 2, 2, 2, 744, 742, 3, 2, 2, 2, 744, 745, 3, 2, 2, 2, 745, 747, 3, 2, 2, 2, 746, 744, 3, 2, 2, 2, 747, 748, 7, 6, 2, 2, 748, 750, 3, 2, 2, 2, 749, 738, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 49, 3, 2, 2, 2, 751, 753, 7, 150, 2, 2, 752, 754, 7, 118, 2, 2, 753, 752, 3, 2, 2, 2, 753, 754, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 756, 5, 52, 27, 2, 756, 757, 7, 35, 2, 2, 757, 758, 7, 5, 2, 2, 758, 759, 5, 82, 42, 2, 759, 769, 7, 6, 2, 2, 760, 761, 7, 7, 2, 2, 761, 762, 5, 52, 27, 2, 762, 763, 7, 35, 2, 2, 763, 764, 7, 5, 2, 2, 764, 765, 5, 82, 42, 2, 765, 766, 7, 6, 2, 2, 766, 768, 3, 2, 2, 2, 767, 760, 3, 2, 2, 2, 768, 771, 3, 2, 2, 2, 769, 767, 3, 2, 2, 2, 769, 770, 3, 2, 2, 2, 770, 51, 3, 2, 2, 2, 771, 769, 3, 2, 2, 2, 772, 784, 5, 180, 91, 2, 773, 774, 7, 5, 2, 2, 774, 779, 5, 186, 94, 2, 775, 776, 7, 7, 2, 2, 776, 778, 5, 186, 94, 2, 777, 775, 3, 2, 2, 2, 778, 781, 3, 2, 2, 2, 779, 777, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 782, 3, 2, 2, 2, 781, 779, 3, 2, 2, 2, 782, 783, 7, 6, 2, 2, 783, 785, 3, 2, 2, 2, 784, 773, 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 53, 3, 2, 2, 2, 786, 787, 5, 52, 27, 2, 787, 788, 7, 35, 2, 2, 788, 789, 7, 5, 2, 2, 789, 790, 5, 160, 81, 2, 790, 792, 7, 140, 2, 2, 791, 793, 7, 31, 2, 2, 792, 791, 3, 2, 2, 2, 792, 793, 3, 2, 2, 2, 793, 794, 3, 2, 2, 2, 794, 795, 5, 162, 82, 2, 795, 796, 7, 6, 2, 2, 796, 55, 3, 2, 2, 2, 797, 809, 5, 180, 91, 2, 798, 799, 7, 5, 2, 2, 799, 804, 5, 186, 94, 2, 800, 801, 7, 7, 2, 2, 801, 803, 5, 186, 94, 2, 802, 800, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 804, 805, 3, 2, 2, 2, 805, 807, 3, 2, 2, 2, 806, 804, 3, 2, 2, 2, 807, 808, 7, 6, 2, 2, 808, 810, 3, 2, 2, 2, 809, 798, 3, 2, 2, 2, 809, 810, 3, 2, 2, 2, 810, 811, 3, 2, 2, 2, 811, 812, 7, 35, 2, 2, 812, 813, 7, 5, 2, 2, 813, 814, 5, 82, 42, 2, 814, 815, 7, 6, 2, 2, 815, 57, 3, 2, 2, 2, 816, 818, 5, 50, 26, 2, 817, 816, 3, 2, 2, 2, 817, 818, 3, 2, 2, 2, 818, 819, 3, 2, 2, 2, 819, 820, 7, 61, 2, 2, 820, 821, 7, 77, 2, 2, 821, 824, 5, 110, 56, 2, 822, 823, 7, 149, 2, 2, 823, 825, 5, 66, 34, 2, 824, 822, 3, 2, 2, 2, 824, 825, 3, 2, 2, 2, 825, 59, 3, 2, 2, 2, 826, 828, 5, 50, 26, 2, 827, 826, 3, 2, 2, 2, 827, 828, 3, 2, 2, 2, 828, 829, 3, 2, 2, 2, 829, 830, 7, 61, 2, 2, 830, 831, 7, 77, 2, 2, 831, 834, 5, 110, 56, 2, 832, 833, 7, 149, 2, 2, 833, 835, 5, 66, 34, 2, 834, 832, 3, 2, 2, 2, 834, 835, 3, 2, 2, 2, 835, 840, 3, 2, 2, 2, 836, 838, 5, 132, 67, 2, 837, 836, 3, 2, 2, 2, 837, 838, 3, 2, 2, 2, 838, 839, 3, 2, 2, 2, 839, 841, 5, 134, 68, 2, 840, 837, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 61, 3, 2, 2, 2, 842, 844, 7, 63, 2, 2, 843, 845, 7, 57, 2, 2, 844, 843, 3, 2, 2, 2, 844, 845, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 847, 5, 178, 90, 2, 847, 63, 3, 2, 2, 2, 848, 849, 7, 65, 2, 2, 849, 852, 9, 11, 2, 2, 850, 851, 7, 82, 2, 2, 851, 853, 7, 72, 2, 2, 852, 850, 3, 2, 2, 2, 852, 853, 3, 2, 2, 2, 853, 857, 3, 2, 2, 2, 854, 855, 5, 178, 90, 2, 855, 856, 7, 4, 2, 2, 856, 858, 3, 2, 2, 2, 857, 854, 3, 2, 2, 2, 857, 858, 3, 2, 2, 2, 858, 859, 3, 2, 2, 2, 859, 860, 5, 222, 112, 2, 860, 65, 3, 2, 2, 2, 861, 862, 8, 34, 1, 2, 862, 950, 5, 70, 36, 2, 863, 950, 7, 188, 2, 2, 864, 865, 5, 178, 90, 2, 865, 866, 7, 4, 2, 2, 866, 868, 3, 2, 2, 2, 867, 864, 3, 2, 2, 2, 867, 868, 3, 2, 2, 2, 868, 869, 3, 2, 2, 2, 869, 870, 5, 180, 91, 2, 870, 871, 7, 4, 2, 2, 871, 873, 3, 2, 2, 2, 872, 867, 3, 2, 2, 2, 872, 873, 3, 2, 2, 2, 873, 874, 3, 2, 2, 2, 874, 950, 5, 186, 94, 2, 875, 876, 5, 164, 83, 2, 876, 877, 5, 66, 34, 23, 877, 950, 3, 2, 2, 2, 878, 879, 5, 176, 89, 2, 879, 892, 7, 5, 2, 2, 880, 882, 7, 64, 2, 2, 881, 880, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 883, 3, 2, 2, 2, 883, 888, 5, 66, 34, 2, 884, 885, 7, 7, 2, 2, 885, 887, 5, 66, 34, 2, 886, 884, 3, 2, 2, 2, 887, 890, 3, 2, 2, 2, 888, 886, 3, 2, 2, 2, 888, 889, 3, 2, 2, 2, 889, 893, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 891, 893, 7, 9, 2, 2, 892, 881, 3, 2, 2, 2, 892, 891, 3, 2, 2, 2, 892, 893, 3, 2, 2, 2, 893, 894, 3, 2, 2, 2, 894, 896, 7, 6, 2, 2, 895, 897, 5, 114, 58, 2, 896, 895, 3, 2, 2, 2, 896, 897, 3, 2, 2, 2, 897, 899, 3, 2, 2, 2, 898, 900, 5, 118, 60, 2, 899, 898, 3, 2, 2, 2, 899, 900, 3, 2, 2, 2, 900, 950, 3, 2, 2, 2, 901, 902, 7, 5, 2, 2, 902, 907, 5, 66, 34, 2, 903, 904, 7, 7, 2, 2, 904, 906, 5, 66, 34, 2, 905, 903, 3, 2, 2, 2, 906, 909, 3, 2, 2, 2, 907, 905, 3, 2, 2, 2, 907, 908, 3, 2, 2, 2, 908, 910, 3, 2, 2, 2, 909, 907, 3, 2, 2, 2, 910, 911, 7, 6, 2, 2, 911, 950, 3, 2, 2, 2, 912, 913, 7, 45, 2, 2, 913, 914, 7, 5, 2, 2, 914, 915, 5, 66, 34, 2, 915, 916, 7, 35, 2, 2, 916, 917, 5, 32, 17, 2, 917, 918, 7, 6, 2, 2, 918, 950, 3, 2, 2, 2, 919, 921, 7, 104, 2, 2, 920, 919, 3, 2, 2, 2, 920, 921, 3, 2, 2, 2, 921, 922, 3, 2, 2, 2, 922, 924, 7, 72, 2, 2, 923, 920, 3, 2, 2, 2, 923, 924, 3, 2, 2, 2, 924, 925, 3, 2, 2, 2, 925, 926, 7, 5, 2, 2, 926, 927, 5, 82, 42, 2, 927, 928, 7, 6, 2, 2, 928, 950, 3, 2, 2, 2, 929, 931, 7, 44, 2, 2, 930, 932, 5, 66, 34, 2, 931, 930, 3, 2, 2, 2, 931, 932, 3, 2, 2, 2, 932, 938, 3, 2, 2, 2, 933, 934, 7, 148, 2, 2, 934, 935, 5, 66, 34, 2, 935, 936, 7, 136, 2, 2, 936, 937, 5, 66, 34, 2, 937, 939, 3, 2, 2, 2, 938, 933, 3, 2, 2, 2, 939, 940, 3, 2, 2, 2, 940, 938, 3, 2, 2, 2, 940, 941, 3, 2, 2, 2, 941, 944, 3, 2, 2, 2, 942, 943, 7, 67, 2, 2, 943, 945, 5, 66, 34, 2, 944, 942, 3, 2, 2, 2, 944, 945, 3, 2, 2, 2, 945, 946, 3, 2, 2, 2, 946, 947, 7, 68, 2, 2, 947, 950, 3, 2, 2, 2, 948, 950, 5, 68, 35, 2, 949, 861, 3, 2, 2, 2, 949, 863, 3, 2, 2, 2, 949, 872, 3, 2, 2, 2, 949, 875, 3, 2, 2, 2, 949, 878, 3, 2, 2, 2, 949, 901, 3, 2, 2, 2, 949, 912, 3, 2, 2, 2, 949, 923, 3, 2, 2, 2, 949, 929, 3, 2, 2, 2, 949, 948, 3, 2, 2, 2, 950, 1070, 3, 2, 2, 2, 951, 952, 12, 22, 2, 2, 952, 953, 7, 13, 2, 2, 953, 1069, 5, 66, 34, 23, 954, 955, 12, 21, 2, 2, 955, 956, 9, 12, 2, 2, 956, 1069, 5, 66, 34, 22, 957, 958, 12, 20, 2, 2, 958, 959, 9, 6, 2, 2, 959, 1069, 5, 66, 34, 21, 960, 961, 12, 19, 2, 2, 961, 962, 9, 13, 2, 2, 962, 1069, 5, 66, 34, 20, 963, 964, 12, 18, 2, 2, 964, 965, 9, 14, 2, 2, 965, 1069, 5, 66, 34, 19, 966, 979, 12, 17, 2, 2, 967, 980, 7, 8, 2, 2, 968, 980, 7, 24, 2, 2, 969, 980, 7, 25, 2, 2, 970, 980, 7, 26, 2, 2, 971, 980, 7, 94, 2, 2, 972, 973, 7, 94, 2, 2, 973, 980, 7, 104, 2, 2, 974, 980, 7, 85, 2, 2, 975, 980, 7, 99, 2, 2, 976, 980, 7, 79, 2, 2, 977, 980, 7, 101, 2, 2, 978, 980, 7, 120, 2, 2, 979, 967, 3, 2, 2, 2, 979, 968, 3, 2, 2, 2, 979, 969, 3, 2, 2, 2, 979, 970, 3, 2, 2, 2, 979, 971, 3, 2, 2, 2, 979, 972, 3, 2, 2, 2, 979, 974, 3, 2, 2, 2, 979, 975, 3, 2, 2, 2, 979, 976, 3, 2, 2, 2, 979, 977, 3, 2, 2, 2, 979, 978, 3, 2, 2, 2, 980, 981, 3, 2, 2, 2, 981, 1069, 5, 66, 34, 18, 982, 983, 12, 16, 2, 2, 983, 984, 7, 34, 2, 2, 984, 1069, 5, 66, 34, 17, 985, 986, 12, 15, 2, 2, 986, 987, 7, 110, 2, 2, 987, 1069, 5, 66, 34, 16, 988, 989, 12, 8, 2, 2, 989, 991, 7, 94, 2, 2, 990, 992, 7, 104, 2, 2, 991, 990, 3, 2, 2, 2, 991, 992, 3, 2, 2, 2, 992, 993, 3, 2, 2, 2, 993, 1069, 5, 66, 34, 9, 994, 996, 12, 7, 2, 2, 995, 997, 7, 104, 2, 2, 996, 995, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 997, 998, 3, 2, 2, 2, 998, 999, 7, 41, 2, 2, 999, 1000, 5, 66, 34, 2, 1000, 1001, 7, 34, 2, 2, 1001, 1002, 5, 66, 34, 8, 1002, 1069, 3, 2, 2, 2, 1003, 1004, 12, 11, 2, 2, 1004, 1005, 7, 47, 2, 2, 1005, 1069, 5, 188, 95, 2, 1006, 1008, 12, 10, 2, 2, 1007, 1009, 7, 104, 2, 2, 1008, 1007, 3, 2, 2, 2, 1008, 1009, 3, 2, 2, 2, 1009, 1010, 3, 2, 2, 2, 1010, 1011, 9, 15, 2, 2, 1011, 1014, 5, 66, 34, 2, 1012, 1013, 7, 69, 2, 2, 1013, 1015, 5, 66, 34, 2, 1014, 1012, 3, 2, 2, 2, 1014, 1015, 3, 2, 2, 2, 1015, 1069, 3, 2, 2, 2, 1016, 1021, 12, 9, 2, 2, 1017, 1022, 7, 95, 2, 2, 1018, 1022, 7, 105, 2, 2, 1019, 1020, 7, 104, 2, 2, 1020, 1022, 7, 106, 2, 2, 1021, 1017, 3, 2, 2, 2, 1021, 1018, 3, 2, 2, 2, 1021, 1019, 3, 2, 2, 2, 1022, 1069, 3, 2, 2, 2, 1023, 1025, 12, 6, 2, 2, 1024, 1026, 7, 104, 2, 2, 1025, 1024, 3, 2, 2, 2, 1025, 1026, 3, 2, 2, 2, 1026, 1027, 3, 2, 2, 2, 1027, 1066, 7, 85, 2, 2, 1028, 1038, 7, 5, 2, 2, 1029, 1039, 5, 82, 42, 2, 1030, 1035, 5, 66, 34, 2, 1031, 1032, 7, 7, 2, 2, 1032, 1034, 5, 66, 34, 2, 1033, 1031, 3, 2, 2, 2, 1034, 1037, 3, 2, 2, 2, 1035, 1033, 3, 2, 2, 2, 1035, 1036, 3, 2, 2, 2, 1036, 1039, 3, 2, 2, 2, 1037, 1035, 3, 2, 2, 2, 1038, 1029, 3, 2, 2, 2, 1038, 1030, 3, 2, 2, 2, 1038, 1039, 3, 2, 2, 2, 1039, 1040, 3, 2, 2, 2, 1040, 1067, 7, 6, 2, 2, 1041, 1042, 5, 178, 90, 2, 1042, 1043, 7, 4, 2, 2, 1043, 1045, 3, 2, 2, 2, 1044, 1041, 3, 2, 2, 2, 1044, 1045, 3, 2, 2, 2, 1045, 1046, 3, 2, 2, 2, 1046, 1067, 5, 180, 91, 2, 1047, 1048, 5, 178, 90, 2, 1048, 1049, 7, 4, 2, 2, 1049, 1051, 3, 2, 2, 2, 1050, 1047, 3, 2, 2, 2, 1050, 1051, 3, 2, 2, 2, 1051, 1052, 3, 2, 2, 2, 1052, 1053, 5, 220, 111, 2, 1053, 1062, 7, 5, 2, 2, 1054, 1059, 5, 66, 34, 2, 1055, 1056, 7, 7, 2, 2, 1056, 1058, 5, 66, 34, 2, 1057, 1055, 3, 2, 2, 2, 1058, 1061, 3, 2, 2, 2, 1059, 1057, 3, 2, 2, 2, 1059, 1060, 3, 2, 2, 2, 1060, 1063, 3, 2, 2, 2, 1061, 1059, 3, 2, 2, 2, 1062, 1054, 3, 2, 2, 2, 1062, 1063, 3, 2, 2, 2, 1063, 1064, 3, 2, 2, 2, 1064, 1065, 7, 6, 2, 2, 1065, 1067, 3, 2, 2, 2, 1066, 1028, 3, 2, 2, 2, 1066, 1044, 3, 2, 2, 2, 1066, 1050, 3, 2, 2, 2, 1067, 1069, 3, 2, 2, 2, 1068, 951, 3, 2, 2, 2, 1068, 954, 3, 2, 2, 2, 1068, 957, 3, 2, 2, 2, 1068, 960, 3, 2, 2, 2, 1068, 963, 3, 2, 2, 2, 1068, 966, 3, 2, 2, 2, 1068, 982, 3, 2, 2, 2, 1068, 985, 3, 2, 2, 2, 1068, 988, 3, 2, 2, 2, 1068, 994, 3, 2, 2, 2, 1068, 1003, 3, 2, 2, 2, 1068, 1006, 3, 2, 2, 2, 1068, 1016, 3, 2, 2, 2, 1068, 1023, 3, 2, 2, 2, 1069, 1072, 3, 2, 2, 2, 1070, 1068, 3, 2, 2, 2, 1070, 1071, 3, 2, 2, 2, 1071, 67, 3, 2, 2, 2, 1072, 1070, 3, 2, 2, 2, 1073, 1074, 7, 117, 2, 2, 1074, 1079, 7, 5, 2, 2, 1075, 1080, 7, 83, 2, 2, 1076, 1077, 9, 16, 2, 2, 1077, 1078, 7, 7, 2, 2, 1078, 1080, 5, 166, 84, 2, 1079, 1075, 3, 2, 2, 2, 1079, 1076, 3, 2, 2, 2, 1080, 1081, 3, 2, 2, 2, 1081, 1082, 7, 6, 2, 2, 1082, 69, 3, 2, 2, 2, 1083, 1084, 9, 17, 2, 2, 1084, 71, 3, 2, 2, 2, 1085, 1087, 5, 50, 26, 2, 1086, 1085, 3, 2, 2, 2, 1086, 1087, 3, 2, 2, 2, 1087, 1093, 3, 2, 2, 2, 1088, 1094, 7, 90, 2, 2, 1089, 1094, 7, 124, 2, 2, 1090, 1091, 7, 90, 2, 2, 1091, 1092, 7, 110, 2, 2, 1092, 1094, 9, 10, 2, 2, 1093, 1088, 3, 2, 2, 2, 1093, 1089, 3, 2, 2, 2, 1093, 1090, 3, 2, 2, 2, 1094, 1095, 3, 2, 2, 2, 1095, 1099, 7, 93, 2, 2, 1096, 1097, 5, 178, 90, 2, 1097, 1098, 7, 4, 2, 2, 1098, 1100, 3, 2, 2, 2, 1099, 1096, 3, 2, 2, 2, 1099, 1100, 3, 2, 2, 2, 1100, 1101, 3, 2, 2, 2, 1101, 1104, 5, 180, 91, 2, 1102, 1103, 7, 35, 2, 2, 1103, 1105, 5, 204, 103, 2, 1104, 1102, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 1117, 3, 2, 2, 2, 1106, 1107, 7, 5, 2, 2, 1107, 1112, 5, 186, 94, 2, 1108, 1109, 7, 7, 2, 2, 1109, 1111, 5, 186, 94, 2, 1110, 1108, 3, 2, 2, 2, 1111, 1114, 3, 2, 2, 2, 1112, 1110, 3, 2, 2, 2, 1112, 1113, 3, 2, 2, 2, 1113, 1115, 3, 2, 2, 2, 1114, 1112, 3, 2, 2, 2, 1115, 1116, 7, 6, 2, 2, 1116, 1118, 3, 2, 2, 2, 1117, 1106, 3, 2, 2, 2, 1117, 1118, 3, 2, 2, 2, 1118, 1148, 3, 2, 2, 2, 1119, 1120, 7, 145, 2, 2, 1120, 1121, 7, 5, 2, 2, 1121, 1126, 5, 66, 34, 2, 1122, 1123, 7, 7, 2, 2, 1123, 1125, 5, 66, 34, 2, 1124, 1122, 3, 2, 2, 2, 1125, 1128, 3, 2, 2, 2, 1126, 1124, 3, 2, 2, 2, 1126, 1127, 3, 2, 2, 2, 1127, 1129, 3, 2, 2, 2, 1128, 1126, 3, 2, 2, 2, 1129, 1144, 7, 6, 2, 2, 1130, 1131, 7, 7, 2, 2, 1131, 1132, 7, 5, 2, 2, 1132, 1137, 5, 66, 34, 2, 1133, 1134, 7, 7, 2, 2, 1134, 1136, 5, 66, 34, 2, 1135, 1133, 3, 2, 2, 2, 1136, 1139, 3, 2, 2, 2, 1137, 1135, 3, 2, 2, 2, 1137, 1138, 3, 2, 2, 2, 1138, 1140, 3, 2, 2, 2, 1139, 1137, 3, 2, 2, 2, 1140, 1141, 7, 6, 2, 2, 1141, 1143, 3, 2, 2, 2, 1142, 1130, 3, 2, 2, 2, 1143, 1146, 3, 2, 2, 2, 1144, 1142, 3, 2, 2, 2, 1144, 1145, 3, 2, 2, 2, 1145, 1149, 3, 2, 2, 2, 1146, 1144, 3, 2, 2, 2, 1147, 1149, 5, 82, 42, 2, 1148, 1119, 3, 2, 2, 2, 1148, 1147, 3, 2, 2, 2, 1149, 1151, 3, 2, 2, 2, 1150, 1152, 5, 74, 38, 2, 1151, 1150, 3, 2, 2, 2, 1151, 1152, 3, 2, 2, 2, 1152, 1156, 3, 2, 2, 2, 1153, 1154, 7, 58, 2, 2, 1154, 1156, 7, 145, 2, 2, 1155, 1086, 3, 2, 2, 2, 1155, 1153, 3, 2, 2, 2, 1156, 73, 3, 2, 2, 2, 1157, 1158, 7, 109, 2, 2, 1158, 1173, 7, 50, 2, 2, 1159, 1160, 7, 5, 2, 2, 1160, 1165, 5, 26, 14, 2, 1161, 1162, 7, 7, 2, 2, 1162, 1164, 5, 26, 14, 2, 1163, 1161, 3, 2, 2, 2, 1164, 1167, 3, 2, 2, 2, 1165, 1163, 3, 2, 2, 2, 1165, 1166, 3, 2, 2, 2, 1166, 1168, 3, 2, 2, 2, 1167, 1165, 3, 2, 2, 2, 1168, 1171, 7, 6, 2, 2, 1169, 1170, 7, 149, 2, 2, 1170, 1172, 5, 66, 34, 2, 1171, 1169, 3, 2, 2, 2, 1171, 1172, 3, 2, 2, 2, 1172, 1174, 3, 2, 2, 2, 1173, 1159, 3, 2, 2, 2, 1173, 1174, 3, 2, 2, 2, 1174, 1175, 3, 2, 2, 2, 1175, 1202, 7, 184, 2, 2, 1176, 1203, 7, 185, 2, 2, 1177, 1178, 7, 142, 2, 2, 1178, 1181, 7, 132, 2, 2, 1179, 1182, 5, 186, 94, 2, 1180, 1182, 5, 106, 54, 2, 1181, 1179, 3, 2, 2, 2, 1181, 1180, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, 2, 1183, 1184, 7, 24, 2, 2, 1184, 1195, 5, 66, 34, 2, 1185, 1188, 7, 7, 2, 2, 1186, 1189, 5, 186, 94, 2, 1187, 1189, 5, 106, 54, 2, 1188, 1186, 3, 2, 2, 2, 1188, 1187, 3, 2, 2, 2, 1189, 1190, 3, 2, 2, 2, 1190, 1191, 7, 24, 2, 2, 1191, 1192, 5, 66, 34, 2, 1192, 1194, 3, 2, 2, 2, 1193, 1185, 3, 2, 2, 2, 1194, 1197, 3, 2, 2, 2, 1195, 1193, 3, 2, 2, 2, 1195, 1196, 3, 2, 2, 2, 1196, 1200, 3, 2, 2, 2, 1197, 1195, 3, 2, 2, 2, 1198, 1199, 7, 149, 2, 2, 1199, 1201, 5, 66, 34, 2, 1200, 1198, 3, 2, 2, 2, 1200, 1201, 3, 2, 2, 2, 1201, 1203, 3, 2, 2, 2, 1202, 1176, 3, 2, 2, 2, 1202, 1177, 3, 2, 2, 2, 1203, 75, 3, 2, 2, 2, 1204, 1208, 7, 114, 2, 2, 1205, 1206, 5, 178, 90, 2, 1206, 1207, 7, 4, 2, 2, 1207, 1209, 3, 2, 2, 2, 1208, 1205, 3, 2, 2, 2, 1208, 1209, 3, 2, 2, 2, 1209, 1210, 3, 2, 2, 2, 1210, 1217, 5, 200, 101, 2, 1211, 1212, 7, 8, 2, 2, 1212, 1218, 5, 78, 40, 2, 1213, 1214, 7, 5, 2, 2, 1214, 1215, 5, 78, 40, 2, 1215, 1216, 7, 6, 2, 2, 1216, 1218, 3, 2, 2, 2, 1217, 1211, 3, 2, 2, 2, 1217, 1213, 3, 2, 2, 2, 1217, 1218, 3, 2, 2, 2, 1218, 77, 3, 2, 2, 2, 1219, 1223, 5, 36, 19, 2, 1220, 1223, 5, 174, 88, 2, 1221, 1223, 7, 189, 2, 2, 1222, 1219, 3, 2, 2, 2, 1222, 1220, 3, 2, 2, 2, 1222, 1221, 3, 2, 2, 2, 1223, 79, 3, 2, 2, 2, 1224, 1235, 7, 121, 2, 2, 1225, 1236, 5, 188, 95, 2, 1226, 1227, 5, 178, 90, 2, 1227, 1228, 7, 4, 2, 2, 1228, 1230, 3, 2, 2, 2, 1229, 1226, 3, 2, 2, 2, 1229, 1230, 3, 2, 2, 2, 1230, 1233, 3, 2, 2, 2, 1231, 1234, 5, 180, 91, 2, 1232, 1234, 5, 192, 97, 2, 1233, 1231, 3, 2, 2, 2, 1233, 1232, 3, 2, 2, 2, 1234, 1236, 3, 2, 2, 2, 1235, 1225, 3, 2, 2, 2, 1235, 1229, 3, 2, 2, 2, 1235, 1236, 3, 2, 2, 2, 1236, 81, 3, 2, 2, 2, 1237, 1239, 5, 130, 66, 2, 1238, 1237, 3, 2, 2, 2, 1238, 1239, 3, 2, 2, 2, 1239, 1240, 3, 2, 2, 2, 1240, 1246, 5, 86, 44, 2, 1241, 1242, 5, 102, 52, 2, 1242, 1243, 5, 86, 44, 2, 1243, 1245, 3, 2, 2, 2, 1244, 1241, 3, 2, 2, 2, 1245, 1248, 3, 2, 2, 2, 1246, 1244, 3, 2, 2, 2, 1246, 1247, 3, 2, 2, 2, 1247, 1250, 3, 2, 2, 2, 1248, 1246, 3, 2, 2, 2, 1249, 1251, 5, 132, 67, 2, 1250, 1249, 3, 2, 2, 2, 1250, 1251, 3, 2, 2, 2, 1251, 1253, 3, 2, 2, 2, 1252, 1254, 5, 134, 68, 2, 1253, 1252, 3, 2, 2, 2, 1253, 1254, 3, 2, 2, 2, 1254, 83, 3, 2, 2, 2, 1255, 1263, 5, 94, 48, 2, 1256, 1257, 5, 98, 50, 2, 1257, 1259, 5, 94, 48, 2, 1258, 1260, 5, 100, 51, 2, 1259, 1258, 3, 2, 2, 2, 1259, 1260, 3, 2, 2, 2, 1260, 1262, 3, 2, 2, 2, 1261, 1256, 3, 2, 2, 2, 1262, 1265, 3, 2, 2, 2, 1263, 1261, 3, 2, 2, 2, 1263, 1264, 3, 2, 2, 2, 1264, 85, 3, 2, 2, 2, 1265, 1263, 3, 2, 2, 2, 1266, 1268, 7, 131, 2, 2, 1267, 1269, 9, 18, 2, 2, 1268, 1267, 3, 2, 2, 2, 1268, 1269, 3, 2, 2, 2, 1269, 1270, 3, 2, 2, 2, 1270, 1275, 5, 96, 49, 2, 1271, 1272, 7, 7, 2, 2, 1272, 1274, 5, 96, 49, 2, 1273, 1271, 3, 2, 2, 2, 1274, 1277, 3, 2, 2, 2, 1275, 1273, 3, 2, 2, 2, 1275, 1276, 3, 2, 2, 2, 1276, 1290, 3, 2, 2, 2, 1277, 1275, 3, 2, 2, 2, 1278, 1288, 7, 77, 2, 2, 1279, 1284, 5, 94, 48, 2, 1280, 1281, 7, 7, 2, 2, 1281, 1283, 5, 94, 48, 2, 1282, 1280, 3, 2, 2, 2, 1283, 1286, 3, 2, 2, 2, 1284, 1282, 3, 2, 2, 2, 1284, 1285, 3, 2, 2, 2, 1285, 1289, 3, 2, 2, 2, 1286, 1284, 3, 2, 2, 2, 1287, 1289, 5, 84, 43, 2, 1288, 1279, 3, 2, 2, 2, 1288, 1287, 3, 2, 2, 2, 1289, 1291, 3, 2, 2, 2, 1290, 1278, 3, 2, 2, 2, 1290, 1291, 3, 2, 2, 2, 1291, 1294, 3, 2, 2, 2, 1292, 1293, 7, 149, 2, 2, 1293, 1295, 5, 66, 34, 2, 1294, 1292, 3, 2, 2, 2, 1294, 1295, 3, 2, 2, 2, 1295, 1310, 3, 2, 2, 2, 1296, 1297, 7, 80, 2, 2, 1297, 1298, 7, 42, 2, 2, 1298, 1303, 5, 66, 34, 2, 1299, 1300, 7, 7, 2, 2, 1300, 1302, 5, 66, 34, 2, 1301, 1299, 3, 2, 2, 2, 1302, 1305, 3, 2, 2, 2, 1303, 1301, 3, 2, 2, 2, 1303, 1304, 3, 2, 2, 2, 1304, 1308, 3, 2, 2, 2, 1305, 1303, 3, 2, 2, 2, 1306, 1307, 7, 81, 2, 2, 1307, 1309, 5, 66, 34, 2, 1308, 1306, 3, 2, 2, 2, 1308, 1309, 3, 2, 2, 2, 1309, 1311, 3, 2, 2, 2, 1310, 1296, 3, 2, 2, 2, 1310, 1311, 3, 2, 2, 2, 1311, 1326, 3, 2, 2, 2, 1312, 1313, 7, 175, 2, 2, 1313, 1314, 5, 208, 105, 2, 1314, 1315, 7, 35, 2, 2, 1315, 1323, 5, 116, 59, 2, 1316, 1317, 7, 7, 2, 2, 1317, 1318, 5, 208, 105, 2, 1318, 1319, 7, 35, 2, 2, 1319, 1320, 5, 116, 59, 2, 1320, 1322, 3, 2, 2, 2, 1321, 1316, 3, 2, 2, 2, 1322, 1325, 3, 2, 2, 2, 1323, 1321, 3, 2, 2, 2, 1323, 1324, 3, 2, 2, 2, 1324, 1327, 3, 2, 2, 2, 1325, 1323, 3, 2, 2, 2, 1326, 1312, 3, 2, 2, 2, 1326, 1327, 3, 2, 2, 2, 1327, 1357, 3, 2, 2, 2, 1328, 1329, 7, 145, 2, 2, 1329, 1330, 7, 5, 2, 2, 1330, 1335, 5, 66, 34, 2, 1331, 1332, 7, 7, 2, 2, 1332, 1334, 5, 66, 34, 2, 1333, 1331, 3, 2, 2, 2, 1334, 1337, 3, 2, 2, 2, 1335, 1333, 3, 2, 2, 2, 1335, 1336, 3, 2, 2, 2, 1336, 1338, 3, 2, 2, 2, 1337, 1335, 3, 2, 2, 2, 1338, 1353, 7, 6, 2, 2, 1339, 1340, 7, 7, 2, 2, 1340, 1341, 7, 5, 2, 2, 1341, 1346, 5, 66, 34, 2, 1342, 1343, 7, 7, 2, 2, 1343, 1345, 5, 66, 34, 2, 1344, 1342, 3, 2, 2, 2, 1345, 1348, 3, 2, 2, 2, 1346, 1344, 3, 2, 2, 2, 1346, 1347, 3, 2, 2, 2, 1347, 1349, 3, 2, 2, 2, 1348, 1346, 3, 2, 2, 2, 1349, 1350, 7, 6, 2, 2, 1350, 1352, 3, 2, 2, 2, 1351, 1339, 3, 2, 2, 2, 1352, 1355, 3, 2, 2, 2, 1353, 1351, 3, 2, 2, 2, 1353, 1354, 3, 2, 2, 2, 1354, 1357, 3, 2, 2, 2, 1355, 1353, 3, 2, 2, 2, 1356, 1266, 3, 2, 2, 2, 1356, 1328, 3, 2, 2, 2, 1357, 87, 3, 2, 2, 2, 1358, 1359, 5, 82, 42, 2, 1359, 89, 3, 2, 2, 2, 1360, 1362, 5, 130, 66, 2, 1361, 1360, 3, 2, 2, 2, 1361, 1362, 3, 2, 2, 2, 1362, 1363, 3, 2, 2, 2, 1363, 1365, 5, 86, 44, 2, 1364, 1366, 5, 132, 67, 2, 1365, 1364, 3, 2, 2, 2, 1365, 1366, 3, 2, 2, 2, 1366, 1368, 3, 2, 2, 2, 1367, 1369, 5, 134, 68, 2, 1368, 1367, 3, 2, 2, 2, 1368, 1369, 3, 2, 2, 2, 1369, 91, 3, 2, 2, 2, 1370, 1372, 5, 130, 66, 2, 1371, 1370, 3, 2, 2, 2, 1371, 1372, 3, 2, 2, 2, 1372, 1373, 3, 2, 2, 2, 1373, 1383, 5, 86, 44, 2, 1374, 1376, 7, 140, 2, 2, 1375, 1377, 7, 31, 2, 2, 1376, 1375, 3, 2, 2, 2, 1376, 1377, 3, 2, 2, 2, 1377, 1381, 3, 2, 2, 2, 1378, 1381, 7, 92, 2, 2, 1379, 1381, 7, 70, 2, 2, 1380, 1374, 3, 2, 2, 2, 1380, 1378, 3, 2, 2, 2, 1380, 1379, 3, 2, 2, 2, 1381, 1382, 3, 2, 2, 2, 1382, 1384, 5, 86, 44, 2, 1383, 1380, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 1383, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 1388, 3, 2, 2, 2, 1387, 1389, 5, 132, 67, 2, 1388, 1387, 3, 2, 2, 2, 1388, 1389, 3, 2, 2, 2, 1389, 1391, 3, 2, 2, 2, 1390, 1392, 5, 134, 68, 2, 1391, 1390, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, 93, 3, 2, 2, 2, 1393, 1394, 5, 178, 90, 2, 1394, 1395, 7, 4, 2, 2, 1395, 1397, 3, 2, 2, 2, 1396, 1393, 3, 2, 2, 2, 1396, 1397, 3, 2, 2, 2, 1397, 1398, 3, 2, 2, 2, 1398, 1403, 5, 180, 91, 2, 1399, 1401, 7, 35, 2, 2, 1400, 1399, 3, 2, 2, 2, 1400, 1401, 3, 2, 2, 2, 1401, 1402, 3, 2, 2, 2, 1402, 1404, 5, 204, 103, 2, 1403, 1400, 3, 2, 2, 2, 1403, 1404, 3, 2, 2, 2, 1404, 1410, 3, 2, 2, 2, 1405, 1406, 7, 87, 2, 2, 1406, 1407, 7, 42, 2, 2, 1407, 1411, 5, 192, 97, 2, 1408, 1409, 7, 104, 2, 2, 1409, 1411, 7, 87, 2, 2, 1410, 1405, 3, 2, 2, 2, 1410, 1408, 3, 2, 2, 2, 1410, 1411, 3, 2, 2, 2, 1411, 1458, 3, 2, 2, 2, 1412, 1413, 5, 178, 90, 2, 1413, 1414, 7, 4, 2, 2, 1414, 1416, 3, 2, 2, 2, 1415, 1412, 3, 2, 2, 2, 1415, 1416, 3, 2, 2, 2, 1416, 1417, 3, 2, 2, 2, 1417, 1418, 5, 220, 111, 2, 1418, 1419, 7, 5, 2, 2, 1419, 1424, 5, 66, 34, 2, 1420, 1421, 7, 7, 2, 2, 1421, 1423, 5, 66, 34, 2, 1422, 1420, 3, 2, 2, 2, 1423, 1426, 3, 2, 2, 2, 1424, 1422, 3, 2, 2, 2, 1424, 1425, 3, 2, 2, 2, 1425, 1427, 3, 2, 2, 2, 1426, 1424, 3, 2, 2, 2, 1427, 1432, 7, 6, 2, 2, 1428, 1430, 7, 35, 2, 2, 1429, 1428, 3, 2, 2, 2, 1429, 1430, 3, 2, 2, 2, 1430, 1431, 3, 2, 2, 2, 1431, 1433, 5, 204, 103, 2, 1432, 1429, 3, 2, 2, 2, 1432, 1433, 3, 2, 2, 2, 1433, 1458, 3, 2, 2, 2, 1434, 1444, 7, 5, 2, 2, 1435, 1440, 5, 94, 48, 2, 1436, 1437, 7, 7, 2, 2, 1437, 1439, 5, 94, 48, 2, 1438, 1436, 3, 2, 2, 2, 1439, 1442, 3, 2, 2, 2, 1440, 1438, 3, 2, 2, 2, 1440, 1441, 3, 2, 2, 2, 1441, 1445, 3, 2, 2, 2, 1442, 1440, 3, 2, 2, 2, 1443, 1445, 5, 84, 43, 2, 1444, 1435, 3, 2, 2, 2, 1444, 1443, 3, 2, 2, 2, 1445, 1446, 3, 2, 2, 2, 1446, 1447, 7, 6, 2, 2, 1447, 1458, 3, 2, 2, 2, 1448, 1449, 7, 5, 2, 2, 1449, 1450, 5, 82, 42, 2, 1450, 1455, 7, 6, 2, 2, 1451, 1453, 7, 35, 2, 2, 1452, 1451, 3, 2, 2, 2, 1452, 1453, 3, 2, 2, 2, 1453, 1454, 3, 2, 2, 2, 1454, 1456, 5, 204, 103, 2, 1455, 1452, 3, 2, 2, 2, 1455, 1456, 3, 2, 2, 2, 1456, 1458, 3, 2, 2, 2, 1457, 1396, 3, 2, 2, 2, 1457, 1415, 3, 2, 2, 2, 1457, 1434, 3, 2, 2, 2, 1457, 1448, 3, 2, 2, 2, 1458, 95, 3, 2, 2, 2, 1459, 1472, 7, 9, 2, 2, 1460, 1461, 5, 180, 91, 2, 1461, 1462, 7, 4, 2, 2, 1462, 1463, 7, 9, 2, 2, 1463, 1472, 3, 2, 2, 2, 1464, 1469, 5, 66, 34, 2, 1465, 1467, 7, 35, 2, 2, 1466, 1465, 3, 2, 2, 2, 1466, 1467, 3, 2, 2, 2, 1467, 1468, 3, 2, 2, 2, 1468, 1470, 5, 170, 86, 2, 1469, 1466, 3, 2, 2, 2, 1469, 1470, 3, 2, 2, 2, 1470, 1472, 3, 2, 2, 2, 1471, 1459, 3, 2, 2, 2, 1471, 1460, 3, 2, 2, 2, 1471, 1464, 3, 2, 2, 2, 1472, 97, 3, 2, 2, 2, 1473, 1487, 7, 7, 2, 2, 1474, 1476, 7, 102, 2, 2, 1475, 1474, 3, 2, 2, 2, 1475, 1476, 3, 2, 2, 2, 1476, 1483, 3, 2, 2, 2, 1477, 1479, 7, 98, 2, 2, 1478, 1480, 7, 112, 2, 2, 1479, 1478, 3, 2, 2, 2, 1479, 1480, 3, 2, 2, 2, 1480, 1484, 3, 2, 2, 2, 1481, 1484, 7, 89, 2, 2, 1482, 1484, 7, 53, 2, 2, 1483, 1477, 3, 2, 2, 2, 1483, 1481, 3, 2, 2, 2, 1483, 1482, 3, 2, 2, 2, 1483, 1484, 3, 2, 2, 2, 1484, 1485, 3, 2, 2, 2, 1485, 1487, 7, 96, 2, 2, 1486, 1473, 3, 2, 2, 2, 1486, 1475, 3, 2, 2, 2, 1487, 99, 3, 2, 2, 2, 1488, 1489, 7, 109, 2, 2, 1489, 1503, 5, 66, 34, 2, 1490, 1491, 7, 143, 2, 2, 1491, 1492, 7, 5, 2, 2, 1492, 1497, 5, 186, 94, 2, 1493, 1494, 7, 7, 2, 2, 1494, 1496, 5, 186, 94, 2, 1495, 1493, 3, 2, 2, 2, 1496, 1499, 3, 2, 2, 2, 1497, 1495, 3, 2, 2, 2, 1497, 1498, 3, 2, 2, 2, 1498, 1500, 3, 2, 2, 2, 1499, 1497, 3, 2, 2, 2, 1500, 1501, 7, 6, 2, 2, 1501, 1503, 3, 2, 2, 2, 1502, 1488, 3, 2, 2, 2, 1502, 1490, 3, 2, 2, 2, 1503, 101, 3, 2, 2, 2, 1504, 1506, 7, 140, 2, 2, 1505, 1507, 7, 31, 2, 2, 1506, 1505, 3, 2, 2, 2, 1506, 1507, 3, 2, 2, 2, 1507, 1511, 3, 2, 2, 2, 1508, 1511, 7, 92, 2, 2, 1509, 1511, 7, 70, 2, 2, 1510, 1504, 3, 2, 2, 2, 1510, 1508, 3, 2, 2, 2, 1510, 1509, 3, 2, 2, 2, 1511, 103, 3, 2, 2, 2, 1512, 1514, 5, 50, 26, 2, 1513, 1512, 3, 2, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1515, 3, 2, 2, 2, 1515, 1518, 7, 142, 2, 2, 1516, 1517, 7, 110, 2, 2, 1517, 1519, 9, 10, 2, 2, 1518, 1516, 3, 2, 2, 2, 1518, 1519, 3, 2, 2, 2, 1519, 1520, 3, 2, 2, 2, 1520, 1521, 5, 110, 56, 2, 1521, 1524, 7, 132, 2, 2, 1522, 1525, 5, 186, 94, 2, 1523, 1525, 5, 106, 54, 2, 1524, 1522, 3, 2, 2, 2, 1524, 1523, 3, 2, 2, 2, 1525, 1526, 3, 2, 2, 2, 1526, 1527, 7, 8, 2, 2, 1527, 1538, 5, 66, 34, 2, 1528, 1531, 7, 7, 2, 2, 1529, 1532, 5, 186, 94, 2, 1530, 1532, 5, 106, 54, 2, 1531, 1529, 3, 2, 2, 2, 1531, 1530, 3, 2, 2, 2, 1532, 1533, 3, 2, 2, 2, 1533, 1534, 7, 8, 2, 2, 1534, 1535, 5, 66, 34, 2, 1535, 1537, 3, 2, 2, 2, 1536, 1528, 3, 2, 2, 2, 1537, 1540, 3, 2, 2, 2, 1538, 1536, 3, 2, 2, 2, 1538, 1539, 3, 2, 2, 2, 1539, 1543, 3, 2, 2, 2, 1540, 1538, 3, 2, 2, 2, 1541, 1542, 7, 149, 2, 2, 1542, 1544, 5, 66, 34, 2, 1543, 1541, 3, 2, 2, 2, 1543, 1544, 3, 2, 2, 2, 1544, 105, 3, 2, 2, 2, 1545, 1546, 7, 5, 2, 2, 1546, 1551, 5, 186, 94, 2, 1547, 1548, 7, 7, 2, 2, 1548, 1550, 5, 186, 94, 2, 1549, 1547, 3, 2, 2, 2, 1550, 1553, 3, 2, 2, 2, 1551, 1549, 3, 2, 2, 2, 1551, 1552, 3, 2, 2, 2, 1552, 1554, 3, 2, 2, 2, 1553, 1551, 3, 2, 2, 2, 1554, 1555, 7, 6, 2, 2, 1555, 107, 3, 2, 2, 2, 1556, 1558, 5, 50, 26, 2, 1557, 1556, 3, 2, 2, 2, 1557, 1558, 3, 2, 2, 2, 1558, 1559, 3, 2, 2, 2, 1559, 1562, 7, 142, 2, 2, 1560, 1561, 7, 110, 2, 2, 1561, 1563, 9, 10, 2, 2, 1562, 1560, 3, 2, 2, 2, 1562, 1563, 3, 2, 2, 2, 1563, 1564, 3, 2, 2, 2, 1564, 1565, 5, 110, 56, 2, 1565, 1568, 7, 132, 2, 2, 1566, 1569, 5, 186, 94, 2, 1567, 1569, 5, 106, 54, 2, 1568, 1566, 3, 2, 2, 2, 1568, 1567, 3, 2, 2, 2, 1569, 1570, 3, 2, 2, 2, 1570, 1571, 7, 8, 2, 2, 1571, 1582, 5, 66, 34, 2, 1572, 1575, 7, 7, 2, 2, 1573, 1576, 5, 186, 94, 2, 1574, 1576, 5, 106, 54, 2, 1575, 1573, 3, 2, 2, 2, 1575, 1574, 3, 2, 2, 2, 1576, 1577, 3, 2, 2, 2, 1577, 1578, 7, 8, 2, 2, 1578, 1579, 5, 66, 34, 2, 1579, 1581, 3, 2, 2, 2, 1580, 1572, 3, 2, 2, 2, 1581, 1584, 3, 2, 2, 2, 1582, 1580, 3, 2, 2, 2, 1582, 1583, 3, 2, 2, 2, 1583, 1587, 3, 2, 2, 2, 1584, 1582, 3, 2, 2, 2, 1585, 1586, 7, 149, 2, 2, 1586, 1588, 5, 66, 34, 2, 1587, 1585, 3, 2, 2, 2, 1587, 1588, 3, 2, 2, 2, 1588, 1593, 3, 2, 2, 2, 1589, 1591, 5, 132, 67, 2, 1590, 1589, 3, 2, 2, 2, 1590, 1591, 3, 2, 2, 2, 1591, 1592, 3, 2, 2, 2, 1592, 1594, 5, 134, 68, 2, 1593, 1590, 3, 2, 2, 2, 1593, 1594, 3, 2, 2, 2, 1594, 109, 3, 2, 2, 2, 1595, 1596, 5, 178, 90, 2, 1596, 1597, 7, 4, 2, 2, 1597, 1599, 3, 2, 2, 2, 1598, 1595, 3, 2, 2, 2, 1598, 1599, 3, 2, 2, 2, 1599, 1600, 3, 2, 2, 2, 1600, 1603, 5, 180, 91, 2, 1601, 1602, 7, 35, 2, 2, 1602, 1604, 5, 210, 106, 2, 1603, 1601, 3, 2, 2, 2, 1603, 1604, 3, 2, 2, 2, 1604, 1610, 3, 2, 2, 2, 1605, 1606, 7, 87, 2, 2, 1606, 1607, 7, 42, 2, 2, 1607, 1611, 5, 192, 97, 2, 1608, 1609, 7, 104, 2, 2, 1609, 1611, 7, 87, 2, 2, 1610, 1605, 3, 2, 2, 2, 1610, 1608, 3, 2, 2, 2, 1610, 1611, 3, 2, 2, 2, 1611, 111, 3, 2, 2, 2, 1612, 1614, 7, 144, 2, 2, 1613, 1615, 5, 178, 90, 2, 1614, 1613, 3, 2, 2, 2, 1614, 1615, 3, 2, 2, 2, 1615, 1618, 3, 2, 2, 2, 1616, 1617, 7, 93, 2, 2, 1617, 1619, 5, 212, 107, 2, 1618, 1616, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 113, 3, 2, 2, 2, 1620, 1621, 7, 179, 2, 2, 1621, 1622, 7, 5, 2, 2, 1622, 1623, 7, 149, 2, 2, 1623, 1624, 5, 66, 34, 2, 1624, 1625, 7, 6, 2, 2, 1625, 115, 3, 2, 2, 2, 1626, 1628, 7, 5, 2, 2, 1627, 1629, 5, 214, 108, 2, 1628, 1627, 3, 2, 2, 2, 1628, 1629, 3, 2, 2, 2, 1629, 1640, 3, 2, 2, 2, 1630, 1631, 7, 154, 2, 2, 1631, 1632, 7, 42, 2, 2, 1632, 1637, 5, 66, 34, 2, 1633, 1634, 7, 7, 2, 2, 1634, 1636, 5, 66, 34, 2, 1635, 1633, 3, 2, 2, 2, 1636, 1639, 3, 2, 2, 2, 1637, 1635, 3, 2, 2, 2, 1637, 1638, 3, 2, 2, 2, 1638, 1641, 3, 2, 2, 2, 1639, 1637, 3, 2, 2, 2, 1640, 1630, 3, 2, 2, 2, 1640, 1641, 3, 2, 2, 2, 1641, 1642, 3, 2, 2, 2, 1642, 1643, 7, 111, 2, 2, 1643, 1644, 7, 42, 2, 2, 1644, 1649, 5, 136, 69, 2, 1645, 1646, 7, 7, 2, 2, 1646, 1648, 5, 136, 69, 2, 1647, 1645, 3, 2, 2, 2, 1648, 1651, 3, 2, 2, 2, 1649, 1647, 3, 2, 2, 2, 1649, 1650, 3, 2, 2, 2, 1650, 1653, 3, 2, 2, 2, 1651, 1649, 3, 2, 2, 2, 1652, 1654, 5, 120, 61, 2, 1653, 1652, 3, 2, 2, 2, 1653, 1654, 3, 2, 2, 2, 1654, 1655, 3, 2, 2, 2, 1655, 1656, 7, 6, 2, 2, 1656, 117, 3, 2, 2, 2, 1657, 1691, 7, 153, 2, 2, 1658, 1692, 5, 208, 105, 2, 1659, 1661, 7, 5, 2, 2, 1660, 1662, 5, 214, 108, 2, 1661, 1660, 3, 2, 2, 2, 1661, 1662, 3, 2, 2, 2, 1662, 1673, 3, 2, 2, 2, 1663, 1664, 7, 154, 2, 2, 1664, 1665, 7, 42, 2, 2, 1665, 1670, 5, 66, 34, 2, 1666, 1667, 7, 7, 2, 2, 1667, 1669, 5, 66, 34, 2, 1668, 1666, 3, 2, 2, 2, 1669, 1672, 3, 2, 2, 2, 1670, 1668, 3, 2, 2, 2, 1670, 1671, 3, 2, 2, 2, 1671, 1674, 3, 2, 2, 2, 1672, 1670, 3, 2, 2, 2, 1673, 1663, 3, 2, 2, 2, 1673, 1674, 3, 2, 2, 2, 1674, 1685, 3, 2, 2, 2, 1675, 1676, 7, 111, 2, 2, 1676, 1677, 7, 42, 2, 2, 1677, 1682, 5, 136, 69, 2, 1678, 1679, 7, 7, 2, 2, 1679, 1681, 5, 136, 69, 2, 1680, 1678, 3, 2, 2, 2, 1681, 1684, 3, 2, 2, 2, 1682, 1680, 3, 2, 2, 2, 1682, 1683, 3, 2, 2, 2, 1683, 1686, 3, 2, 2, 2, 1684, 1682, 3, 2, 2, 2, 1685, 1675, 3, 2, 2, 2, 1685, 1686, 3, 2, 2, 2, 1686, 1688, 3, 2, 2, 2, 1687, 1689, 5, 120, 61, 2, 1688, 1687, 3, 2, 2, 2, 1688, 1689, 3, 2, 2, 2, 1689, 1690, 3, 2, 2, 2, 1690, 1692, 7, 6, 2, 2, 1691, 1658, 3, 2, 2, 2, 1691, 1659, 3, 2, 2, 2, 1692, 119, 3, 2, 2, 2, 1693, 1701, 5, 122, 62, 2, 1694, 1695, 7, 181, 2, 2, 1695, 1696, 7, 103, 2, 2, 1696, 1702, 7, 183, 2, 2, 1697, 1698, 7, 158, 2, 2, 1698, 1702, 7, 128, 2, 2, 1699, 1702, 7, 80, 2, 2, 1700, 1702, 7, 182, 2, 2, 1701, 1694, 3, 2, 2, 2, 1701, 1697, 3, 2, 2, 2, 1701, 1699, 3, 2, 2, 2, 1701, 1700, 3, 2, 2, 2, 1701, 1702, 3, 2, 2, 2, 1702, 121, 3, 2, 2, 2, 1703, 1710, 9, 19, 2, 2, 1704, 1711, 5, 144, 73, 2, 1705, 1706, 7, 41, 2, 2, 1706, 1707, 5, 140, 71, 2, 1707, 1708, 7, 34, 2, 2, 1708, 1709, 5, 142, 72, 2, 1709, 1711, 3, 2, 2, 2, 1710, 1704, 3, 2, 2, 2, 1710, 1705, 3, 2, 2, 2, 1711, 123, 3, 2, 2, 2, 1712, 1713, 5, 216, 109, 2, 1713, 1723, 7, 5, 2, 2, 1714, 1719, 5, 66, 34, 2, 1715, 1716, 7, 7, 2, 2, 1716, 1718, 5, 66, 34, 2, 1717, 1715, 3, 2, 2, 2, 1718, 1721, 3, 2, 2, 2, 1719, 1717, 3, 2, 2, 2, 1719, 1720, 3, 2, 2, 2, 1720, 1724, 3, 2, 2, 2, 1721, 1719, 3, 2, 2, 2, 1722, 1724, 7, 9, 2, 2, 1723, 1714, 3, 2, 2, 2, 1723, 1722, 3, 2, 2, 2, 1724, 1725, 3, 2, 2, 2, 1725, 1726, 7, 6, 2, 2, 1726, 125, 3, 2, 2, 2, 1727, 1728, 5, 218, 110, 2, 1728, 1741, 7, 5, 2, 2, 1729, 1731, 7, 64, 2, 2, 1730, 1729, 3, 2, 2, 2, 1730, 1731, 3, 2, 2, 2, 1731, 1732, 3, 2, 2, 2, 1732, 1737, 5, 66, 34, 2, 1733, 1734, 7, 7, 2, 2, 1734, 1736, 5, 66, 34, 2, 1735, 1733, 3, 2, 2, 2, 1736, 1739, 3, 2, 2, 2, 1737, 1735, 3, 2, 2, 2, 1737, 1738, 3, 2, 2, 2, 1738, 1742, 3, 2, 2, 2, 1739, 1737, 3, 2, 2, 2, 1740, 1742, 7, 9, 2, 2, 1741, 1730, 3, 2, 2, 2, 1741, 1740, 3, 2, 2, 2, 1741, 1742, 3, 2, 2, 2, 1742, 1743, 3, 2, 2, 2, 1743, 1745, 7, 6, 2, 2, 1744, 1746, 5, 114, 58, 2, 1745, 1744, 3, 2, 2, 2, 1745, 1746, 3, 2, 2, 2, 1746, 127, 3, 2, 2, 2, 1747, 1748, 5, 146, 74, 2, 1748, 1758, 7, 5, 2, 2, 1749, 1754, 5, 66, 34, 2, 1750, 1751, 7, 7, 2, 2, 1751, 1753, 5, 66, 34, 2, 1752, 1750, 3, 2, 2, 2, 1753, 1756, 3, 2, 2, 2, 1754, 1752, 3, 2, 2, 2, 1754, 1755, 3, 2, 2, 2, 1755, 1759, 3, 2, 2, 2, 1756, 1754, 3, 2, 2, 2, 1757, 1759, 7, 9, 2, 2, 1758, 1749, 3, 2, 2, 2, 1758, 1757, 3, 2, 2, 2, 1758, 1759, 3, 2, 2, 2, 1759, 1760, 3, 2, 2, 2, 1760, 1762, 7, 6, 2, 2, 1761, 1763, 5, 114, 58, 2, 1762, 1761, 3, 2, 2, 2, 1762, 1763, 3, 2, 2, 2, 1763, 1764, 3, 2, 2, 2, 1764, 1767, 7, 153, 2, 2, 1765, 1768, 5, 116, 59, 2, 1766, 1768, 5, 208, 105, 2, 1767, 1765, 3, 2, 2, 2, 1767, 1766, 3, 2, 2, 2, 1768, 129, 3, 2, 2, 2, 1769, 1771, 7, 150, 2, 2, 1770, 1772, 7, 118, 2, 2, 1771, 1770, 3, 2, 2, 2, 1771, 1772, 3, 2, 2, 2, 1772, 1773, 3, 2, 2, 2, 1773, 1778, 5, 56, 29, 2, 1774, 1775, 7, 7, 2, 2, 1775, 1777, 5, 56, 29, 2, 1776, 1774, 3, 2, 2, 2, 1777, 1780, 3, 2, 2, 2, 1778, 1776, 3, 2, 2, 2, 1778, 1779, 3, 2, 2, 2, 1779, 131, 3, 2, 2, 2, 1780, 1778, 3, 2, 2, 2, 1781, 1782, 7, 111, 2, 2, 1782, 1783, 7, 42, 2, 2, 1783, 1788, 5, 136, 69, 2, 1784, 1785, 7, 7, 2, 2, 1785, 1787, 5, 136, 69, 2, 1786, 1784, 3, 2, 2, 2, 1787, 1790, 3, 2, 2, 2, 1788, 1786, 3, 2, 2, 2, 1788, 1789, 3, 2, 2, 2, 1789, 133, 3, 2, 2, 2, 1790, 1788, 3, 2, 2, 2, 1791, 1792, 7, 100, 2, 2, 1792, 1795, 5, 66, 34, 2, 1793, 1794, 9, 20, 2, 2, 1794, 1796, 5, 66, 34, 2, 1795, 1793, 3, 2, 2, 2, 1795, 1796, 3, 2, 2, 2, 1796, 135, 3, 2, 2, 2, 1797, 1800, 5, 66, 34, 2, 1798, 1799, 7, 47, 2, 2, 1799, 1801, 5, 188, 95, 2, 1800, 1798, 3, 2, 2, 2, 1800, 1801, 3, 2, 2, 2, 1801, 1803, 3, 2, 2, 2, 1802, 1804, 5, 138, 70, 2, 1803, 1802, 3, 2, 2, 2, 1803, 1804, 3, 2, 2, 2, 1804, 1807, 3, 2, 2, 2, 1805, 1806, 7, 176, 2, 2, 1806, 1808, 9, 21, 2, 2, 1807, 1805, 3, 2, 2, 2, 1807, 1808, 3, 2, 2, 2, 1808, 137, 3, 2, 2, 2, 1809, 1810, 9, 22, 2, 2, 1810, 139, 3, 2, 2, 2, 1811, 1812, 5, 66, 34, 2, 1812, 1813, 7, 156, 2, 2, 1813, 1822, 3, 2, 2, 2, 1814, 1815, 5, 66, 34, 2, 1815, 1816, 7, 159, 2, 2, 1816, 1822, 3, 2, 2, 2, 1817, 1818, 7, 158, 2, 2, 1818, 1822, 7, 128, 2, 2, 1819, 1820, 7, 157, 2, 2, 1820, 1822, 7, 156, 2, 2, 1821, 1811, 3, 2, 2, 2, 1821, 1814, 3, 2, 2, 2, 1821, 1817, 3, 2, 2, 2, 1821, 1819, 3, 2, 2, 2, 1822, 141, 3, 2, 2, 2, 1823, 1824, 5, 66, 34, 2, 1824, 1825, 7, 156, 2, 2, 1825, 1834, 3, 2, 2, 2, 1826, 1827, 5, 66, 34, 2, 1827, 1828, 7, 159, 2, 2, 1828, 1834, 3, 2, 2, 2, 1829, 1830, 7, 158, 2, 2, 1830, 1834, 7, 128, 2, 2, 1831, 1832, 7, 157, 2, 2, 1832, 1834, 7, 159, 2, 2, 1833, 1823, 3, 2, 2, 2, 1833, 1826, 3, 2, 2, 2, 1833, 1829, 3, 2, 2, 2, 1833, 1831, 3, 2, 2, 2, 1834, 143, 3, 2, 2, 2, 1835, 1836, 5, 66, 34, 2, 1836, 1837, 7, 156, 2, 2, 1837, 1843, 3, 2, 2, 2, 1838, 1839, 7, 157, 2, 2, 1839, 1843, 7, 156, 2, 2, 1840, 1841, 7, 158, 2, 2, 1841, 1843, 7, 128, 2, 2, 1842, 1835, 3, 2, 2, 2, 1842, 1838, 3, 2, 2, 2, 1842, 1840, 3, 2, 2, 2, 1843, 145, 3, 2, 2, 2, 1844, 1845, 9, 23, 2, 2, 1845, 1846, 7, 5, 2, 2, 1846, 1847, 5, 66, 34, 2, 1847, 1848, 7, 6, 2, 2, 1848, 1849, 7, 153, 2, 2, 1849, 1851, 7, 5, 2, 2, 1850, 1852, 5, 152, 77, 2, 1851, 1850, 3, 2, 2, 2, 1851, 1852, 3, 2, 2, 2, 1852, 1853, 3, 2, 2, 2, 1853, 1855, 5, 156, 79, 2, 1854, 1856, 5, 122, 62, 2, 1855, 1854, 3, 2, 2, 2, 1855, 1856, 3, 2, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, 1858, 7, 6, 2, 2, 1858, 1930, 3, 2, 2, 2, 1859, 1860, 9, 24, 2, 2, 1860, 1861, 7, 5, 2, 2, 1861, 1862, 7, 6, 2, 2, 1862, 1863, 7, 153, 2, 2, 1863, 1865, 7, 5, 2, 2, 1864, 1866, 5, 152, 77, 2, 1865, 1864, 3, 2, 2, 2, 1865, 1866, 3, 2, 2, 2, 1866, 1868, 3, 2, 2, 2, 1867, 1869, 5, 154, 78, 2, 1868, 1867, 3, 2, 2, 2, 1868, 1869, 3, 2, 2, 2, 1869, 1870, 3, 2, 2, 2, 1870, 1930, 7, 6, 2, 2, 1871, 1872, 9, 25, 2, 2, 1872, 1873, 7, 5, 2, 2, 1873, 1874, 7, 6, 2, 2, 1874, 1875, 7, 153, 2, 2, 1875, 1877, 7, 5, 2, 2, 1876, 1878, 5, 152, 77, 2, 1877, 1876, 3, 2, 2, 2, 1877, 1878, 3, 2, 2, 2, 1878, 1879, 3, 2, 2, 2, 1879, 1880, 5, 156, 79, 2, 1880, 1881, 7, 6, 2, 2, 1881, 1930, 3, 2, 2, 2, 1882, 1883, 9, 26, 2, 2, 1883, 1884, 7, 5, 2, 2, 1884, 1886, 5, 66, 34, 2, 1885, 1887, 5, 148, 75, 2, 1886, 1885, 3, 2, 2, 2, 1886, 1887, 3, 2, 2, 2, 1887, 1889, 3, 2, 2, 2, 1888, 1890, 5, 150, 76, 2, 1889, 1888, 3, 2, 2, 2, 1889, 1890, 3, 2, 2, 2, 1890, 1891, 3, 2, 2, 2, 1891, 1892, 7, 6, 2, 2, 1892, 1893, 7, 153, 2, 2, 1893, 1895, 7, 5, 2, 2, 1894, 1896, 5, 152, 77, 2, 1895, 1894, 3, 2, 2, 2, 1895, 1896, 3, 2, 2, 2, 1896, 1897, 3, 2, 2, 2, 1897, 1898, 5, 156, 79, 2, 1898, 1899, 7, 6, 2, 2, 1899, 1930, 3, 2, 2, 2, 1900, 1901, 7, 165, 2, 2, 1901, 1902, 7, 5, 2, 2, 1902, 1903, 5, 66, 34, 2, 1903, 1904, 7, 7, 2, 2, 1904, 1905, 5, 36, 19, 2, 1905, 1906, 7, 6, 2, 2, 1906, 1907, 7, 153, 2, 2, 1907, 1909, 7, 5, 2, 2, 1908, 1910, 5, 152, 77, 2, 1909, 1908, 3, 2, 2, 2, 1909, 1910, 3, 2, 2, 2, 1910, 1911, 3, 2, 2, 2, 1911, 1913, 5, 156, 79, 2, 1912, 1914, 5, 122, 62, 2, 1913, 1912, 3, 2, 2, 2, 1913, 1914, 3, 2, 2, 2, 1914, 1915, 3, 2, 2, 2, 1915, 1916, 7, 6, 2, 2, 1916, 1930, 3, 2, 2, 2, 1917, 1918, 7, 166, 2, 2, 1918, 1919, 7, 5, 2, 2, 1919, 1920, 5, 66, 34, 2, 1920, 1921, 7, 6, 2, 2, 1921, 1922, 7, 153, 2, 2, 1922, 1924, 7, 5, 2, 2, 1923, 1925, 5, 152, 77, 2, 1924, 1923, 3, 2, 2, 2, 1924, 1925, 3, 2, 2, 2, 1925, 1926, 3, 2, 2, 2, 1926, 1927, 5, 156, 79, 2, 1927, 1928, 7, 6, 2, 2, 1928, 1930, 3, 2, 2, 2, 1929, 1844, 3, 2, 2, 2, 1929, 1859, 3, 2, 2, 2, 1929, 1871, 3, 2, 2, 2, 1929, 1882, 3, 2, 2, 2, 1929, 1900, 3, 2, 2, 2, 1929, 1917, 3, 2, 2, 2, 1930, 147, 3, 2, 2, 2, 1931, 1932, 7, 7, 2, 2, 1932, 1933, 5, 36, 19, 2, 1933, 149, 3, 2, 2, 2, 1934, 1935, 7, 7, 2, 2, 1935, 1936, 5, 36, 19, 2, 1936, 151, 3, 2, 2, 2, 1937, 1938, 7, 154, 2, 2, 1938, 1940, 7, 42, 2, 2, 1939, 1941, 5, 66, 34, 2, 1940, 1939, 3, 2, 2, 2, 1941, 1942, 3, 2, 2, 2, 1942, 1940, 3, 2, 2, 2, 1942, 1943, 3, 2, 2, 2, 1943, 153, 3, 2, 2, 2, 1944, 1945, 7, 111, 2, 2, 1945, 1947, 7, 42, 2, 2, 1946, 1948, 5, 66, 34, 2, 1947, 1946, 3, 2, 2, 2, 1948, 1949, 3, 2, 2, 2, 1949, 1947, 3, 2, 2, 2, 1949, 1950, 3, 2, 2, 2, 1950, 155, 3, 2, 2, 2, 1951, 1952, 7, 111, 2, 2, 1952, 1953, 7, 42, 2, 2, 1953, 1954, 5, 156, 79, 2, 1954, 157, 3, 2, 2, 2, 1955, 1957, 5, 66, 34, 2, 1956, 1958, 5, 138, 70, 2, 1957, 1956, 3, 2, 2, 2, 1957, 1958, 3, 2, 2, 2, 1958, 1966, 3, 2, 2, 2, 1959, 1960, 7, 7, 2, 2, 1960, 1962, 5, 66, 34, 2, 1961, 1963, 5, 138, 70, 2, 1962, 1961, 3, 2, 2, 2, 1962, 1963, 3, 2, 2, 2, 1963, 1965, 3, 2, 2, 2, 1964, 1959, 3, 2, 2, 2, 1965, 1968, 3, 2, 2, 2, 1966, 1964, 3, 2, 2, 2, 1966, 1967, 3, 2, 2, 2, 1967, 159, 3, 2, 2, 2, 1968, 1966, 3, 2, 2, 2, 1969, 1970, 5, 82, 42, 2, 1970, 161, 3, 2, 2, 2, 1971, 1972, 5, 82, 42, 2, 1972, 163, 3, 2, 2, 2, 1973, 1974, 9, 27, 2, 2, 1974, 165, 3, 2, 2, 2, 1975, 1976, 7, 189, 2, 2, 1976, 167, 3, 2, 2, 2, 1977, 1980, 5, 66, 34, 2, 1978, 1980, 5, 30, 16, 2, 1979, 1977, 3, 2, 2, 2, 1979, 1978, 3, 2, 2, 2, 1980, 169, 3, 2, 2, 2, 1981, 1982, 9, 28, 2, 2, 1982, 171, 3, 2, 2, 2, 1983, 1984, 9, 29, 2, 2, 1984, 173, 3, 2, 2, 2, 1985, 1986, 5, 222, 112, 2, 1986, 175, 3, 2, 2, 2, 1987, 1988, 5, 222, 112, 2, 1988, 177, 3, 2, 2, 2, 1989, 1990, 5, 222, 112, 2, 1990, 179, 3, 2, 2, 2, 1991, 1992, 5, 222, 112, 2, 1992, 181, 3, 2, 2, 2, 1993, 1994, 5, 222, 112, 2, 1994, 183, 3, 2, 2, 2, 1995, 1996, 5, 222, 112, 2, 1996, 185, 3, 2, 2, 2, 1997, 1998, 5, 222, 112, 2, 1998, 187, 3, 2, 2, 2, 1999, 2000, 5, 222, 112, 2, 2000, 189, 3, 2, 2, 2, 2001, 2002, 5, 222, 112, 2, 2002, 191, 3, 2, 2, 2, 2003, 2004, 5, 222, 112, 2, 2004, 193, 3, 2, 2, 2, 2005, 2006, 5, 222, 112, 2, 2006, 195, 3, 2, 2, 2, 2007, 2008, 5, 222, 112, 2, 2008, 197, 3, 2, 2, 2, 2009, 2010, 5, 222, 112, 2, 2010, 199, 3, 2, 2, 2, 2011, 2012, 5, 222, 112, 2, 2012, 201, 3, 2, 2, 2, 2013, 2014, 5, 222, 112, 2, 2014, 203, 3, 2, 2, 2, 2015, 2016, 5, 222, 112, 2, 2016, 205, 3, 2, 2, 2, 2017, 2018, 5, 222, 112, 2, 2018, 207, 3, 2, 2, 2, 2019, 2020, 5, 222, 112, 2, 2020, 209, 3, 2, 2, 2, 2021, 2022, 5, 222, 112, 2, 2022, 211, 3, 2, 2, 2, 2023, 2024, 5, 222, 112, 2, 2024, 213, 3, 2, 2, 2, 2025, 2026, 5, 222, 112, 2, 2026, 215, 3, 2, 2, 2, 2027, 2028, 5, 222, 112, 2, 2028, 217, 3, 2, 2, 2, 2029, 2030, 5, 222, 112, 2, 2030, 219, 3, 2, 2, 2, 2031, 2032, 5, 222, 112, 2, 2032, 221, 3, 2, 2, 2, 2033, 2041, 7, 186, 2, 2, 2034, 2041, 5, 172, 87, 2, 2035, 2041, 7, 189, 2, 2, 2036, 2037, 7, 5, 2, 2, 2037, 2038, 5, 222, 112, 2, 2038, 2039, 7, 6, 2, 2, 2039, 2041, 3, 2, 2, 2, 2040, 2033, 3, 2, 2, 2, 2040, 2034, 3, 2, 2, 2, 2040, 2035, 3, 2, 2, 2, 2040, 2036, 3, 2, 2, 2, 2041, 223, 3, 2, 2, 2, 290, 227, 235, 242, 247, 253, 259, 261, 287, 294, 301, 307, 311, 314, 321, 324, 328, 336, 340, 342, 346, 350, 354, 357, 364, 370, 376, 381, 392, 398, 402, 406, 409, 413, 419, 424, 433, 440, 446, 450, 454, 459, 465, 477, 481, 486, 489, 492, 497, 500, 514, 521, 528, 530, 533, 539, 544, 552, 557, 572, 578, 588, 593, 603, 607, 609, 613, 618, 620, 628, 634, 639, 646, 657, 660, 662, 669, 673, 680, 686, 692, 698, 703, 712, 717, 728, 733, 744, 749, 753, 769, 779, 784, 792, 804, 809, 817, 824, 827, 834, 837, 840, 844, 852, 857, 867, 872, 881, 888, 892, 896, 899, 907, 920, 923, 931, 940, 944, 949, 979, 991, 996, 1008, 1014, 1021, 1025, 1035, 1038, 1044, 1050, 1059, 1062, 1066, 1068, 1070, 1079, 1086, 1093, 1099, 1104, 1112, 1117, 1126, 1137, 1144, 1148, 1151, 1155, 1165, 1171, 1173, 1181, 1188, 1195, 1200, 1202, 1208, 1217, 1222, 1229, 1233, 1235, 1238, 1246, 1250, 1253, 1259, 1263, 1268, 1275, 1284, 1288, 1290, 1294, 1303, 1308, 1310, 1323, 1326, 1335, 1346, 1353, 1356, 1361, 1365, 1368, 1371, 1376, 1380, 1385, 1388, 1391, 1396, 1400, 1403, 1410, 1415, 1424, 1429, 1432, 1440, 1444, 1452, 1455, 1457, 1466, 1469, 1471, 1475, 1479, 1483, 1486, 1497, 1502, 1506, 1510, 1513, 1518, 1524, 1531, 1538, 1543, 1551, 1557, 1562, 1568, 1575, 1582, 1587, 1590, 1593, 1598, 1603, 1610, 1614, 1618, 1628, 1637, 1640, 1649, 1653, 1661, 1670, 1673, 1682, 1685, 1688, 1691, 1701, 1710, 1719, 1723, 1730, 1737, 1741, 1745, 1754, 1758, 1762, 1767, 1771, 1778, 1788, 1795, 1800, 1803, 1807, 1821, 1833, 1842, 1851, 1855, 1865, 1868, 1877, 1886, 1889, 1895, 1909, 1913, 1924, 1929, 1942, 1949, 1957, 1962, 1966, 1979, 2040] \ No newline at end of file diff --git a/internal/engine/sqlite/parser/SQLiteParser.tokens b/internal/engine/sqlite/parser/SQLiteParser.tokens new file mode 100644 index 0000000000..3e1294c629 --- /dev/null +++ b/internal/engine/sqlite/parser/SQLiteParser.tokens @@ -0,0 +1,216 @@ +SCOL=1 +DOT=2 +OPEN_PAR=3 +CLOSE_PAR=4 +COMMA=5 +ASSIGN=6 +STAR=7 +PLUS=8 +MINUS=9 +TILDE=10 +PIPE2=11 +DIV=12 +MOD=13 +LT2=14 +GT2=15 +AMP=16 +PIPE=17 +LT=18 +LT_EQ=19 +GT=20 +GT_EQ=21 +EQ=22 +NOT_EQ1=23 +NOT_EQ2=24 +ABORT_=25 +ACTION_=26 +ADD_=27 +AFTER_=28 +ALL_=29 +ALTER_=30 +ANALYZE_=31 +AND_=32 +AS_=33 +ASC_=34 +ATTACH_=35 +AUTOINCREMENT_=36 +BEFORE_=37 +BEGIN_=38 +BETWEEN_=39 +BY_=40 +CASCADE_=41 +CASE_=42 +CAST_=43 +CHECK_=44 +COLLATE_=45 +COLUMN_=46 +COMMIT_=47 +CONFLICT_=48 +CONSTRAINT_=49 +CREATE_=50 +CROSS_=51 +CURRENT_DATE_=52 +CURRENT_TIME_=53 +CURRENT_TIMESTAMP_=54 +DATABASE_=55 +DEFAULT_=56 +DEFERRABLE_=57 +DEFERRED_=58 +DELETE_=59 +DESC_=60 +DETACH_=61 +DISTINCT_=62 +DROP_=63 +EACH_=64 +ELSE_=65 +END_=66 +ESCAPE_=67 +EXCEPT_=68 +EXCLUSIVE_=69 +EXISTS_=70 +EXPLAIN_=71 +FAIL_=72 +FOR_=73 +FOREIGN_=74 +FROM_=75 +FULL_=76 +GLOB_=77 +GROUP_=78 +HAVING_=79 +IF_=80 +IGNORE_=81 +IMMEDIATE_=82 +IN_=83 +INDEX_=84 +INDEXED_=85 +INITIALLY_=86 +INNER_=87 +INSERT_=88 +INSTEAD_=89 +INTERSECT_=90 +INTO_=91 +IS_=92 +ISNULL_=93 +JOIN_=94 +KEY_=95 +LEFT_=96 +LIKE_=97 +LIMIT_=98 +MATCH_=99 +NATURAL_=100 +NO_=101 +NOT_=102 +NOTNULL_=103 +NULL_=104 +OF_=105 +OFFSET_=106 +ON_=107 +OR_=108 +ORDER_=109 +OUTER_=110 +PLAN_=111 +PRAGMA_=112 +PRIMARY_=113 +QUERY_=114 +RAISE_=115 +RECURSIVE_=116 +REFERENCES_=117 +REGEXP_=118 +REINDEX_=119 +RELEASE_=120 +RENAME_=121 +REPLACE_=122 +RESTRICT_=123 +RIGHT_=124 +ROLLBACK_=125 +ROW_=126 +ROWS_=127 +SAVEPOINT_=128 +SELECT_=129 +SET_=130 +TABLE_=131 +TEMP_=132 +TEMPORARY_=133 +THEN_=134 +TO_=135 +TRANSACTION_=136 +TRIGGER_=137 +UNION_=138 +UNIQUE_=139 +UPDATE_=140 +USING_=141 +VACUUM_=142 +VALUES_=143 +VIEW_=144 +VIRTUAL_=145 +WHEN_=146 +WHERE_=147 +WITH_=148 +WITHOUT_=149 +FIRST_VALUE_=150 +OVER_=151 +PARTITION_=152 +RANGE_=153 +PRECEDING_=154 +UNBOUNDED_=155 +CURRENT_=156 +FOLLOWING_=157 +CUME_DIST_=158 +DENSE_RANK_=159 +LAG_=160 +LAST_VALUE_=161 +LEAD_=162 +NTH_VALUE_=163 +NTILE_=164 +PERCENT_RANK_=165 +RANK_=166 +ROW_NUMBER_=167 +GENERATED_=168 +ALWAYS_=169 +STORED_=170 +TRUE_=171 +FALSE_=172 +WINDOW_=173 +NULLS_=174 +FIRST_=175 +LAST_=176 +FILTER_=177 +GROUPS_=178 +EXCLUDE_=179 +TIES_=180 +OTHERS_=181 +DO_=182 +NOTHING_=183 +IDENTIFIER=184 +NUMERIC_LITERAL=185 +BIND_PARAMETER=186 +STRING_LITERAL=187 +BLOB_LITERAL=188 +SINGLE_LINE_COMMENT=189 +MULTILINE_COMMENT=190 +SPACES=191 +UNEXPECTED_CHAR=192 +';'=1 +'.'=2 +'('=3 +')'=4 +','=5 +'='=6 +'*'=7 +'+'=8 +'-'=9 +'~'=10 +'||'=11 +'/'=12 +'%'=13 +'<<'=14 +'>>'=15 +'&'=16 +'|'=17 +'<'=18 +'<='=19 +'>'=20 +'>='=21 +'=='=22 +'!='=23 +'<>'=24 diff --git a/internal/engine/sqlite/parser/sqlite_base_listener.go b/internal/engine/sqlite/parser/sqlite_base_listener.go deleted file mode 100644 index c964d1ec07..0000000000 --- a/internal/engine/sqlite/parser/sqlite_base_listener.go +++ /dev/null @@ -1,520 +0,0 @@ -// Code generated from SQLite.g4 by ANTLR 4.8. DO NOT EDIT. - -package parser // SQLite - -import "github.com/antlr/antlr4/runtime/Go/antlr" - -// BaseSQLiteListener is a complete listener for a parse tree produced by SQLiteParser. -type BaseSQLiteListener struct{} - -var _ SQLiteListener = &BaseSQLiteListener{} - -// VisitTerminal is called when a terminal node is visited. -func (s *BaseSQLiteListener) VisitTerminal(node antlr.TerminalNode) {} - -// VisitErrorNode is called when an error node is visited. -func (s *BaseSQLiteListener) VisitErrorNode(node antlr.ErrorNode) {} - -// EnterEveryRule is called when any rule is entered. -func (s *BaseSQLiteListener) EnterEveryRule(ctx antlr.ParserRuleContext) {} - -// ExitEveryRule is called when any rule is exited. -func (s *BaseSQLiteListener) ExitEveryRule(ctx antlr.ParserRuleContext) {} - -// EnterParse is called when production parse is entered. -func (s *BaseSQLiteListener) EnterParse(ctx *ParseContext) {} - -// ExitParse is called when production parse is exited. -func (s *BaseSQLiteListener) ExitParse(ctx *ParseContext) {} - -// EnterSql_stmt_list is called when production sql_stmt_list is entered. -func (s *BaseSQLiteListener) EnterSql_stmt_list(ctx *Sql_stmt_listContext) {} - -// ExitSql_stmt_list is called when production sql_stmt_list is exited. -func (s *BaseSQLiteListener) ExitSql_stmt_list(ctx *Sql_stmt_listContext) {} - -// EnterSql_stmt is called when production sql_stmt is entered. -func (s *BaseSQLiteListener) EnterSql_stmt(ctx *Sql_stmtContext) {} - -// ExitSql_stmt is called when production sql_stmt is exited. -func (s *BaseSQLiteListener) ExitSql_stmt(ctx *Sql_stmtContext) {} - -// EnterAlter_table_stmt is called when production alter_table_stmt is entered. -func (s *BaseSQLiteListener) EnterAlter_table_stmt(ctx *Alter_table_stmtContext) {} - -// ExitAlter_table_stmt is called when production alter_table_stmt is exited. -func (s *BaseSQLiteListener) ExitAlter_table_stmt(ctx *Alter_table_stmtContext) {} - -// EnterAnalyze_stmt is called when production analyze_stmt is entered. -func (s *BaseSQLiteListener) EnterAnalyze_stmt(ctx *Analyze_stmtContext) {} - -// ExitAnalyze_stmt is called when production analyze_stmt is exited. -func (s *BaseSQLiteListener) ExitAnalyze_stmt(ctx *Analyze_stmtContext) {} - -// EnterAttach_stmt is called when production attach_stmt is entered. -func (s *BaseSQLiteListener) EnterAttach_stmt(ctx *Attach_stmtContext) {} - -// ExitAttach_stmt is called when production attach_stmt is exited. -func (s *BaseSQLiteListener) ExitAttach_stmt(ctx *Attach_stmtContext) {} - -// EnterBegin_stmt is called when production begin_stmt is entered. -func (s *BaseSQLiteListener) EnterBegin_stmt(ctx *Begin_stmtContext) {} - -// ExitBegin_stmt is called when production begin_stmt is exited. -func (s *BaseSQLiteListener) ExitBegin_stmt(ctx *Begin_stmtContext) {} - -// EnterCommit_stmt is called when production commit_stmt is entered. -func (s *BaseSQLiteListener) EnterCommit_stmt(ctx *Commit_stmtContext) {} - -// ExitCommit_stmt is called when production commit_stmt is exited. -func (s *BaseSQLiteListener) ExitCommit_stmt(ctx *Commit_stmtContext) {} - -// EnterCompound_select_stmt is called when production compound_select_stmt is entered. -func (s *BaseSQLiteListener) EnterCompound_select_stmt(ctx *Compound_select_stmtContext) {} - -// ExitCompound_select_stmt is called when production compound_select_stmt is exited. -func (s *BaseSQLiteListener) ExitCompound_select_stmt(ctx *Compound_select_stmtContext) {} - -// EnterCreate_index_stmt is called when production create_index_stmt is entered. -func (s *BaseSQLiteListener) EnterCreate_index_stmt(ctx *Create_index_stmtContext) {} - -// ExitCreate_index_stmt is called when production create_index_stmt is exited. -func (s *BaseSQLiteListener) ExitCreate_index_stmt(ctx *Create_index_stmtContext) {} - -// EnterCreate_table_stmt is called when production create_table_stmt is entered. -func (s *BaseSQLiteListener) EnterCreate_table_stmt(ctx *Create_table_stmtContext) {} - -// ExitCreate_table_stmt is called when production create_table_stmt is exited. -func (s *BaseSQLiteListener) ExitCreate_table_stmt(ctx *Create_table_stmtContext) {} - -// EnterCreate_trigger_stmt is called when production create_trigger_stmt is entered. -func (s *BaseSQLiteListener) EnterCreate_trigger_stmt(ctx *Create_trigger_stmtContext) {} - -// ExitCreate_trigger_stmt is called when production create_trigger_stmt is exited. -func (s *BaseSQLiteListener) ExitCreate_trigger_stmt(ctx *Create_trigger_stmtContext) {} - -// EnterCreate_view_stmt is called when production create_view_stmt is entered. -func (s *BaseSQLiteListener) EnterCreate_view_stmt(ctx *Create_view_stmtContext) {} - -// ExitCreate_view_stmt is called when production create_view_stmt is exited. -func (s *BaseSQLiteListener) ExitCreate_view_stmt(ctx *Create_view_stmtContext) {} - -// EnterCreate_virtual_table_stmt is called when production create_virtual_table_stmt is entered. -func (s *BaseSQLiteListener) EnterCreate_virtual_table_stmt(ctx *Create_virtual_table_stmtContext) {} - -// ExitCreate_virtual_table_stmt is called when production create_virtual_table_stmt is exited. -func (s *BaseSQLiteListener) ExitCreate_virtual_table_stmt(ctx *Create_virtual_table_stmtContext) {} - -// EnterDelete_stmt is called when production delete_stmt is entered. -func (s *BaseSQLiteListener) EnterDelete_stmt(ctx *Delete_stmtContext) {} - -// ExitDelete_stmt is called when production delete_stmt is exited. -func (s *BaseSQLiteListener) ExitDelete_stmt(ctx *Delete_stmtContext) {} - -// EnterDelete_stmt_limited is called when production delete_stmt_limited is entered. -func (s *BaseSQLiteListener) EnterDelete_stmt_limited(ctx *Delete_stmt_limitedContext) {} - -// ExitDelete_stmt_limited is called when production delete_stmt_limited is exited. -func (s *BaseSQLiteListener) ExitDelete_stmt_limited(ctx *Delete_stmt_limitedContext) {} - -// EnterDetach_stmt is called when production detach_stmt is entered. -func (s *BaseSQLiteListener) EnterDetach_stmt(ctx *Detach_stmtContext) {} - -// ExitDetach_stmt is called when production detach_stmt is exited. -func (s *BaseSQLiteListener) ExitDetach_stmt(ctx *Detach_stmtContext) {} - -// EnterDrop_index_stmt is called when production drop_index_stmt is entered. -func (s *BaseSQLiteListener) EnterDrop_index_stmt(ctx *Drop_index_stmtContext) {} - -// ExitDrop_index_stmt is called when production drop_index_stmt is exited. -func (s *BaseSQLiteListener) ExitDrop_index_stmt(ctx *Drop_index_stmtContext) {} - -// EnterDrop_table_stmt is called when production drop_table_stmt is entered. -func (s *BaseSQLiteListener) EnterDrop_table_stmt(ctx *Drop_table_stmtContext) {} - -// ExitDrop_table_stmt is called when production drop_table_stmt is exited. -func (s *BaseSQLiteListener) ExitDrop_table_stmt(ctx *Drop_table_stmtContext) {} - -// EnterDrop_trigger_stmt is called when production drop_trigger_stmt is entered. -func (s *BaseSQLiteListener) EnterDrop_trigger_stmt(ctx *Drop_trigger_stmtContext) {} - -// ExitDrop_trigger_stmt is called when production drop_trigger_stmt is exited. -func (s *BaseSQLiteListener) ExitDrop_trigger_stmt(ctx *Drop_trigger_stmtContext) {} - -// EnterDrop_view_stmt is called when production drop_view_stmt is entered. -func (s *BaseSQLiteListener) EnterDrop_view_stmt(ctx *Drop_view_stmtContext) {} - -// ExitDrop_view_stmt is called when production drop_view_stmt is exited. -func (s *BaseSQLiteListener) ExitDrop_view_stmt(ctx *Drop_view_stmtContext) {} - -// EnterFactored_select_stmt is called when production factored_select_stmt is entered. -func (s *BaseSQLiteListener) EnterFactored_select_stmt(ctx *Factored_select_stmtContext) {} - -// ExitFactored_select_stmt is called when production factored_select_stmt is exited. -func (s *BaseSQLiteListener) ExitFactored_select_stmt(ctx *Factored_select_stmtContext) {} - -// EnterInsert_stmt is called when production insert_stmt is entered. -func (s *BaseSQLiteListener) EnterInsert_stmt(ctx *Insert_stmtContext) {} - -// ExitInsert_stmt is called when production insert_stmt is exited. -func (s *BaseSQLiteListener) ExitInsert_stmt(ctx *Insert_stmtContext) {} - -// EnterPragma_stmt is called when production pragma_stmt is entered. -func (s *BaseSQLiteListener) EnterPragma_stmt(ctx *Pragma_stmtContext) {} - -// ExitPragma_stmt is called when production pragma_stmt is exited. -func (s *BaseSQLiteListener) ExitPragma_stmt(ctx *Pragma_stmtContext) {} - -// EnterReindex_stmt is called when production reindex_stmt is entered. -func (s *BaseSQLiteListener) EnterReindex_stmt(ctx *Reindex_stmtContext) {} - -// ExitReindex_stmt is called when production reindex_stmt is exited. -func (s *BaseSQLiteListener) ExitReindex_stmt(ctx *Reindex_stmtContext) {} - -// EnterRelease_stmt is called when production release_stmt is entered. -func (s *BaseSQLiteListener) EnterRelease_stmt(ctx *Release_stmtContext) {} - -// ExitRelease_stmt is called when production release_stmt is exited. -func (s *BaseSQLiteListener) ExitRelease_stmt(ctx *Release_stmtContext) {} - -// EnterRollback_stmt is called when production rollback_stmt is entered. -func (s *BaseSQLiteListener) EnterRollback_stmt(ctx *Rollback_stmtContext) {} - -// ExitRollback_stmt is called when production rollback_stmt is exited. -func (s *BaseSQLiteListener) ExitRollback_stmt(ctx *Rollback_stmtContext) {} - -// EnterSavepoint_stmt is called when production savepoint_stmt is entered. -func (s *BaseSQLiteListener) EnterSavepoint_stmt(ctx *Savepoint_stmtContext) {} - -// ExitSavepoint_stmt is called when production savepoint_stmt is exited. -func (s *BaseSQLiteListener) ExitSavepoint_stmt(ctx *Savepoint_stmtContext) {} - -// EnterSimple_select_stmt is called when production simple_select_stmt is entered. -func (s *BaseSQLiteListener) EnterSimple_select_stmt(ctx *Simple_select_stmtContext) {} - -// ExitSimple_select_stmt is called when production simple_select_stmt is exited. -func (s *BaseSQLiteListener) ExitSimple_select_stmt(ctx *Simple_select_stmtContext) {} - -// EnterSelect_stmt is called when production select_stmt is entered. -func (s *BaseSQLiteListener) EnterSelect_stmt(ctx *Select_stmtContext) {} - -// ExitSelect_stmt is called when production select_stmt is exited. -func (s *BaseSQLiteListener) ExitSelect_stmt(ctx *Select_stmtContext) {} - -// EnterSelect_or_values is called when production select_or_values is entered. -func (s *BaseSQLiteListener) EnterSelect_or_values(ctx *Select_or_valuesContext) {} - -// ExitSelect_or_values is called when production select_or_values is exited. -func (s *BaseSQLiteListener) ExitSelect_or_values(ctx *Select_or_valuesContext) {} - -// EnterUpdate_stmt is called when production update_stmt is entered. -func (s *BaseSQLiteListener) EnterUpdate_stmt(ctx *Update_stmtContext) {} - -// ExitUpdate_stmt is called when production update_stmt is exited. -func (s *BaseSQLiteListener) ExitUpdate_stmt(ctx *Update_stmtContext) {} - -// EnterUpdate_stmt_limited is called when production update_stmt_limited is entered. -func (s *BaseSQLiteListener) EnterUpdate_stmt_limited(ctx *Update_stmt_limitedContext) {} - -// ExitUpdate_stmt_limited is called when production update_stmt_limited is exited. -func (s *BaseSQLiteListener) ExitUpdate_stmt_limited(ctx *Update_stmt_limitedContext) {} - -// EnterVacuum_stmt is called when production vacuum_stmt is entered. -func (s *BaseSQLiteListener) EnterVacuum_stmt(ctx *Vacuum_stmtContext) {} - -// ExitVacuum_stmt is called when production vacuum_stmt is exited. -func (s *BaseSQLiteListener) ExitVacuum_stmt(ctx *Vacuum_stmtContext) {} - -// EnterColumn_def is called when production column_def is entered. -func (s *BaseSQLiteListener) EnterColumn_def(ctx *Column_defContext) {} - -// ExitColumn_def is called when production column_def is exited. -func (s *BaseSQLiteListener) ExitColumn_def(ctx *Column_defContext) {} - -// EnterType_name is called when production type_name is entered. -func (s *BaseSQLiteListener) EnterType_name(ctx *Type_nameContext) {} - -// ExitType_name is called when production type_name is exited. -func (s *BaseSQLiteListener) ExitType_name(ctx *Type_nameContext) {} - -// EnterColumn_constraint is called when production column_constraint is entered. -func (s *BaseSQLiteListener) EnterColumn_constraint(ctx *Column_constraintContext) {} - -// ExitColumn_constraint is called when production column_constraint is exited. -func (s *BaseSQLiteListener) ExitColumn_constraint(ctx *Column_constraintContext) {} - -// EnterConflict_clause is called when production conflict_clause is entered. -func (s *BaseSQLiteListener) EnterConflict_clause(ctx *Conflict_clauseContext) {} - -// ExitConflict_clause is called when production conflict_clause is exited. -func (s *BaseSQLiteListener) ExitConflict_clause(ctx *Conflict_clauseContext) {} - -// EnterExpr is called when production expr is entered. -func (s *BaseSQLiteListener) EnterExpr(ctx *ExprContext) {} - -// ExitExpr is called when production expr is exited. -func (s *BaseSQLiteListener) ExitExpr(ctx *ExprContext) {} - -// EnterForeign_key_clause is called when production foreign_key_clause is entered. -func (s *BaseSQLiteListener) EnterForeign_key_clause(ctx *Foreign_key_clauseContext) {} - -// ExitForeign_key_clause is called when production foreign_key_clause is exited. -func (s *BaseSQLiteListener) ExitForeign_key_clause(ctx *Foreign_key_clauseContext) {} - -// EnterRaise_function is called when production raise_function is entered. -func (s *BaseSQLiteListener) EnterRaise_function(ctx *Raise_functionContext) {} - -// ExitRaise_function is called when production raise_function is exited. -func (s *BaseSQLiteListener) ExitRaise_function(ctx *Raise_functionContext) {} - -// EnterIndexed_column is called when production indexed_column is entered. -func (s *BaseSQLiteListener) EnterIndexed_column(ctx *Indexed_columnContext) {} - -// ExitIndexed_column is called when production indexed_column is exited. -func (s *BaseSQLiteListener) ExitIndexed_column(ctx *Indexed_columnContext) {} - -// EnterTable_constraint is called when production table_constraint is entered. -func (s *BaseSQLiteListener) EnterTable_constraint(ctx *Table_constraintContext) {} - -// ExitTable_constraint is called when production table_constraint is exited. -func (s *BaseSQLiteListener) ExitTable_constraint(ctx *Table_constraintContext) {} - -// EnterWith_clause is called when production with_clause is entered. -func (s *BaseSQLiteListener) EnterWith_clause(ctx *With_clauseContext) {} - -// ExitWith_clause is called when production with_clause is exited. -func (s *BaseSQLiteListener) ExitWith_clause(ctx *With_clauseContext) {} - -// EnterQualified_table_name is called when production qualified_table_name is entered. -func (s *BaseSQLiteListener) EnterQualified_table_name(ctx *Qualified_table_nameContext) {} - -// ExitQualified_table_name is called when production qualified_table_name is exited. -func (s *BaseSQLiteListener) ExitQualified_table_name(ctx *Qualified_table_nameContext) {} - -// EnterOrdering_term is called when production ordering_term is entered. -func (s *BaseSQLiteListener) EnterOrdering_term(ctx *Ordering_termContext) {} - -// ExitOrdering_term is called when production ordering_term is exited. -func (s *BaseSQLiteListener) ExitOrdering_term(ctx *Ordering_termContext) {} - -// EnterPragma_value is called when production pragma_value is entered. -func (s *BaseSQLiteListener) EnterPragma_value(ctx *Pragma_valueContext) {} - -// ExitPragma_value is called when production pragma_value is exited. -func (s *BaseSQLiteListener) ExitPragma_value(ctx *Pragma_valueContext) {} - -// EnterCommon_table_expression is called when production common_table_expression is entered. -func (s *BaseSQLiteListener) EnterCommon_table_expression(ctx *Common_table_expressionContext) {} - -// ExitCommon_table_expression is called when production common_table_expression is exited. -func (s *BaseSQLiteListener) ExitCommon_table_expression(ctx *Common_table_expressionContext) {} - -// EnterResult_column is called when production result_column is entered. -func (s *BaseSQLiteListener) EnterResult_column(ctx *Result_columnContext) {} - -// ExitResult_column is called when production result_column is exited. -func (s *BaseSQLiteListener) ExitResult_column(ctx *Result_columnContext) {} - -// EnterTable_or_subquery is called when production table_or_subquery is entered. -func (s *BaseSQLiteListener) EnterTable_or_subquery(ctx *Table_or_subqueryContext) {} - -// ExitTable_or_subquery is called when production table_or_subquery is exited. -func (s *BaseSQLiteListener) ExitTable_or_subquery(ctx *Table_or_subqueryContext) {} - -// EnterJoin_clause is called when production join_clause is entered. -func (s *BaseSQLiteListener) EnterJoin_clause(ctx *Join_clauseContext) {} - -// ExitJoin_clause is called when production join_clause is exited. -func (s *BaseSQLiteListener) ExitJoin_clause(ctx *Join_clauseContext) {} - -// EnterJoin_operator is called when production join_operator is entered. -func (s *BaseSQLiteListener) EnterJoin_operator(ctx *Join_operatorContext) {} - -// ExitJoin_operator is called when production join_operator is exited. -func (s *BaseSQLiteListener) ExitJoin_operator(ctx *Join_operatorContext) {} - -// EnterJoin_constraint is called when production join_constraint is entered. -func (s *BaseSQLiteListener) EnterJoin_constraint(ctx *Join_constraintContext) {} - -// ExitJoin_constraint is called when production join_constraint is exited. -func (s *BaseSQLiteListener) ExitJoin_constraint(ctx *Join_constraintContext) {} - -// EnterSelect_core is called when production select_core is entered. -func (s *BaseSQLiteListener) EnterSelect_core(ctx *Select_coreContext) {} - -// ExitSelect_core is called when production select_core is exited. -func (s *BaseSQLiteListener) ExitSelect_core(ctx *Select_coreContext) {} - -// EnterCompound_operator is called when production compound_operator is entered. -func (s *BaseSQLiteListener) EnterCompound_operator(ctx *Compound_operatorContext) {} - -// ExitCompound_operator is called when production compound_operator is exited. -func (s *BaseSQLiteListener) ExitCompound_operator(ctx *Compound_operatorContext) {} - -// EnterSigned_number is called when production signed_number is entered. -func (s *BaseSQLiteListener) EnterSigned_number(ctx *Signed_numberContext) {} - -// ExitSigned_number is called when production signed_number is exited. -func (s *BaseSQLiteListener) ExitSigned_number(ctx *Signed_numberContext) {} - -// EnterLiteral_value is called when production literal_value is entered. -func (s *BaseSQLiteListener) EnterLiteral_value(ctx *Literal_valueContext) {} - -// ExitLiteral_value is called when production literal_value is exited. -func (s *BaseSQLiteListener) ExitLiteral_value(ctx *Literal_valueContext) {} - -// EnterUnary_operator is called when production unary_operator is entered. -func (s *BaseSQLiteListener) EnterUnary_operator(ctx *Unary_operatorContext) {} - -// ExitUnary_operator is called when production unary_operator is exited. -func (s *BaseSQLiteListener) ExitUnary_operator(ctx *Unary_operatorContext) {} - -// EnterError_message is called when production error_message is entered. -func (s *BaseSQLiteListener) EnterError_message(ctx *Error_messageContext) {} - -// ExitError_message is called when production error_message is exited. -func (s *BaseSQLiteListener) ExitError_message(ctx *Error_messageContext) {} - -// EnterModule_argument is called when production module_argument is entered. -func (s *BaseSQLiteListener) EnterModule_argument(ctx *Module_argumentContext) {} - -// ExitModule_argument is called when production module_argument is exited. -func (s *BaseSQLiteListener) ExitModule_argument(ctx *Module_argumentContext) {} - -// EnterColumn_alias is called when production column_alias is entered. -func (s *BaseSQLiteListener) EnterColumn_alias(ctx *Column_aliasContext) {} - -// ExitColumn_alias is called when production column_alias is exited. -func (s *BaseSQLiteListener) ExitColumn_alias(ctx *Column_aliasContext) {} - -// EnterKeyword is called when production keyword is entered. -func (s *BaseSQLiteListener) EnterKeyword(ctx *KeywordContext) {} - -// ExitKeyword is called when production keyword is exited. -func (s *BaseSQLiteListener) ExitKeyword(ctx *KeywordContext) {} - -// EnterName is called when production name is entered. -func (s *BaseSQLiteListener) EnterName(ctx *NameContext) {} - -// ExitName is called when production name is exited. -func (s *BaseSQLiteListener) ExitName(ctx *NameContext) {} - -// EnterFunction_name is called when production function_name is entered. -func (s *BaseSQLiteListener) EnterFunction_name(ctx *Function_nameContext) {} - -// ExitFunction_name is called when production function_name is exited. -func (s *BaseSQLiteListener) ExitFunction_name(ctx *Function_nameContext) {} - -// EnterDatabase_name is called when production database_name is entered. -func (s *BaseSQLiteListener) EnterDatabase_name(ctx *Database_nameContext) {} - -// ExitDatabase_name is called when production database_name is exited. -func (s *BaseSQLiteListener) ExitDatabase_name(ctx *Database_nameContext) {} - -// EnterSchema_name is called when production schema_name is entered. -func (s *BaseSQLiteListener) EnterSchema_name(ctx *Schema_nameContext) {} - -// ExitSchema_name is called when production schema_name is exited. -func (s *BaseSQLiteListener) ExitSchema_name(ctx *Schema_nameContext) {} - -// EnterTable_function_name is called when production table_function_name is entered. -func (s *BaseSQLiteListener) EnterTable_function_name(ctx *Table_function_nameContext) {} - -// ExitTable_function_name is called when production table_function_name is exited. -func (s *BaseSQLiteListener) ExitTable_function_name(ctx *Table_function_nameContext) {} - -// EnterTable_name is called when production table_name is entered. -func (s *BaseSQLiteListener) EnterTable_name(ctx *Table_nameContext) {} - -// ExitTable_name is called when production table_name is exited. -func (s *BaseSQLiteListener) ExitTable_name(ctx *Table_nameContext) {} - -// EnterTable_or_index_name is called when production table_or_index_name is entered. -func (s *BaseSQLiteListener) EnterTable_or_index_name(ctx *Table_or_index_nameContext) {} - -// ExitTable_or_index_name is called when production table_or_index_name is exited. -func (s *BaseSQLiteListener) ExitTable_or_index_name(ctx *Table_or_index_nameContext) {} - -// EnterNew_table_name is called when production new_table_name is entered. -func (s *BaseSQLiteListener) EnterNew_table_name(ctx *New_table_nameContext) {} - -// ExitNew_table_name is called when production new_table_name is exited. -func (s *BaseSQLiteListener) ExitNew_table_name(ctx *New_table_nameContext) {} - -// EnterColumn_name is called when production column_name is entered. -func (s *BaseSQLiteListener) EnterColumn_name(ctx *Column_nameContext) {} - -// ExitColumn_name is called when production column_name is exited. -func (s *BaseSQLiteListener) ExitColumn_name(ctx *Column_nameContext) {} - -// EnterNew_column_name is called when production new_column_name is entered. -func (s *BaseSQLiteListener) EnterNew_column_name(ctx *New_column_nameContext) {} - -// ExitNew_column_name is called when production new_column_name is exited. -func (s *BaseSQLiteListener) ExitNew_column_name(ctx *New_column_nameContext) {} - -// EnterCollation_name is called when production collation_name is entered. -func (s *BaseSQLiteListener) EnterCollation_name(ctx *Collation_nameContext) {} - -// ExitCollation_name is called when production collation_name is exited. -func (s *BaseSQLiteListener) ExitCollation_name(ctx *Collation_nameContext) {} - -// EnterForeign_table is called when production foreign_table is entered. -func (s *BaseSQLiteListener) EnterForeign_table(ctx *Foreign_tableContext) {} - -// ExitForeign_table is called when production foreign_table is exited. -func (s *BaseSQLiteListener) ExitForeign_table(ctx *Foreign_tableContext) {} - -// EnterIndex_name is called when production index_name is entered. -func (s *BaseSQLiteListener) EnterIndex_name(ctx *Index_nameContext) {} - -// ExitIndex_name is called when production index_name is exited. -func (s *BaseSQLiteListener) ExitIndex_name(ctx *Index_nameContext) {} - -// EnterTrigger_name is called when production trigger_name is entered. -func (s *BaseSQLiteListener) EnterTrigger_name(ctx *Trigger_nameContext) {} - -// ExitTrigger_name is called when production trigger_name is exited. -func (s *BaseSQLiteListener) ExitTrigger_name(ctx *Trigger_nameContext) {} - -// EnterView_name is called when production view_name is entered. -func (s *BaseSQLiteListener) EnterView_name(ctx *View_nameContext) {} - -// ExitView_name is called when production view_name is exited. -func (s *BaseSQLiteListener) ExitView_name(ctx *View_nameContext) {} - -// EnterModule_name is called when production module_name is entered. -func (s *BaseSQLiteListener) EnterModule_name(ctx *Module_nameContext) {} - -// ExitModule_name is called when production module_name is exited. -func (s *BaseSQLiteListener) ExitModule_name(ctx *Module_nameContext) {} - -// EnterPragma_name is called when production pragma_name is entered. -func (s *BaseSQLiteListener) EnterPragma_name(ctx *Pragma_nameContext) {} - -// ExitPragma_name is called when production pragma_name is exited. -func (s *BaseSQLiteListener) ExitPragma_name(ctx *Pragma_nameContext) {} - -// EnterSavepoint_name is called when production savepoint_name is entered. -func (s *BaseSQLiteListener) EnterSavepoint_name(ctx *Savepoint_nameContext) {} - -// ExitSavepoint_name is called when production savepoint_name is exited. -func (s *BaseSQLiteListener) ExitSavepoint_name(ctx *Savepoint_nameContext) {} - -// EnterTable_alias is called when production table_alias is entered. -func (s *BaseSQLiteListener) EnterTable_alias(ctx *Table_aliasContext) {} - -// ExitTable_alias is called when production table_alias is exited. -func (s *BaseSQLiteListener) ExitTable_alias(ctx *Table_aliasContext) {} - -// EnterTransaction_name is called when production transaction_name is entered. -func (s *BaseSQLiteListener) EnterTransaction_name(ctx *Transaction_nameContext) {} - -// ExitTransaction_name is called when production transaction_name is exited. -func (s *BaseSQLiteListener) ExitTransaction_name(ctx *Transaction_nameContext) {} - -// EnterAny_name is called when production any_name is entered. -func (s *BaseSQLiteListener) EnterAny_name(ctx *Any_nameContext) {} - -// ExitAny_name is called when production any_name is exited. -func (s *BaseSQLiteListener) ExitAny_name(ctx *Any_nameContext) {} diff --git a/internal/engine/sqlite/parser/sqlite_lexer.go b/internal/engine/sqlite/parser/sqlite_lexer.go index 000cc2697f..05e262cfc1 100644 --- a/internal/engine/sqlite/parser/sqlite_lexer.go +++ b/internal/engine/sqlite/parser/sqlite_lexer.go @@ -1,4 +1,4 @@ -// Code generated from SQLite.g4 by ANTLR 4.8. DO NOT EDIT. +// Code generated from SQLiteLexer.g4 by ANTLR 4.9.3. DO NOT EDIT. package parser @@ -14,7 +14,7 @@ var _ = fmt.Printf var _ = unicode.IsLetter var serializedLexerAtn = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 159, 1454, + 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 194, 1798, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, @@ -52,7 +52,15 @@ var serializedLexerAtn = []uint16{ 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, - 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 3, 2, 3, 2, 3, 3, 3, 3, + 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, + 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, + 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, + 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, + 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, + 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, + 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, + 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, + 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, @@ -126,49 +134,79 @@ var serializedLexerAtn = []uint16{ 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, - 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, - 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, - 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, - 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, - 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, - 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, - 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, - 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, - 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, - 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, - 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, - 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, - 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, - 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, - 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, + 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, + 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, + 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, + 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, + 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, + 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, + 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, + 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, + 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, + 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, + 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, + 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, + 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, + 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, + 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, - 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 7, 150, - 1266, 10, 150, 12, 150, 14, 150, 1269, 11, 150, 3, 150, 3, 150, 3, 150, - 3, 150, 3, 150, 7, 150, 1276, 10, 150, 12, 150, 14, 150, 1279, 11, 150, - 3, 150, 3, 150, 3, 150, 7, 150, 1284, 10, 150, 12, 150, 14, 150, 1287, - 11, 150, 3, 150, 3, 150, 3, 150, 7, 150, 1292, 10, 150, 12, 150, 14, 150, - 1295, 11, 150, 5, 150, 1297, 10, 150, 3, 151, 6, 151, 1300, 10, 151, 13, - 151, 14, 151, 1301, 3, 151, 3, 151, 7, 151, 1306, 10, 151, 12, 151, 14, - 151, 1309, 11, 151, 5, 151, 1311, 10, 151, 3, 151, 3, 151, 5, 151, 1315, - 10, 151, 3, 151, 6, 151, 1318, 10, 151, 13, 151, 14, 151, 1319, 5, 151, - 1322, 10, 151, 3, 151, 3, 151, 6, 151, 1326, 10, 151, 13, 151, 14, 151, - 1327, 3, 151, 3, 151, 5, 151, 1332, 10, 151, 3, 151, 6, 151, 1335, 10, - 151, 13, 151, 14, 151, 1336, 5, 151, 1339, 10, 151, 5, 151, 1341, 10, 151, - 3, 152, 3, 152, 7, 152, 1345, 10, 152, 12, 152, 14, 152, 1348, 11, 152, - 3, 152, 3, 152, 5, 152, 1352, 10, 152, 3, 153, 3, 153, 3, 153, 3, 153, - 7, 153, 1358, 10, 153, 12, 153, 14, 153, 1361, 11, 153, 3, 153, 3, 153, - 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 7, 155, 1372, 10, - 155, 12, 155, 14, 155, 1375, 11, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, - 156, 3, 156, 7, 156, 1383, 10, 156, 12, 156, 14, 156, 1386, 11, 156, 3, - 156, 3, 156, 3, 156, 5, 156, 1391, 10, 156, 3, 156, 3, 156, 3, 157, 3, - 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 159, 3, 159, 3, 160, 3, 160, 3, - 161, 3, 161, 3, 162, 3, 162, 3, 163, 3, 163, 3, 164, 3, 164, 3, 165, 3, - 165, 3, 166, 3, 166, 3, 167, 3, 167, 3, 168, 3, 168, 3, 169, 3, 169, 3, - 170, 3, 170, 3, 171, 3, 171, 3, 172, 3, 172, 3, 173, 3, 173, 3, 174, 3, - 174, 3, 175, 3, 175, 3, 176, 3, 176, 3, 177, 3, 177, 3, 178, 3, 178, 3, - 179, 3, 179, 3, 180, 3, 180, 3, 181, 3, 181, 3, 182, 3, 182, 3, 183, 3, - 183, 3, 184, 3, 184, 3, 185, 3, 185, 3, 1384, 2, 186, 3, 3, 5, 4, 7, 5, - 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, + 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, + 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, + 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, + 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, + 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, + 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, + 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 157, + 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, + 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, + 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, + 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, + 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, + 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, + 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, + 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, + 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, + 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, + 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, + 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, + 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, + 3, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, + 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, + 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, + 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, + 3, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, + 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, + 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 180, + 3, 180, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, + 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, + 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, + 3, 185, 3, 185, 3, 185, 3, 185, 7, 185, 1604, 10, 185, 12, 185, 14, 185, + 1607, 11, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 7, 185, 1614, 10, + 185, 12, 185, 14, 185, 1617, 11, 185, 3, 185, 3, 185, 3, 185, 7, 185, 1622, + 10, 185, 12, 185, 14, 185, 1625, 11, 185, 3, 185, 3, 185, 3, 185, 7, 185, + 1630, 10, 185, 12, 185, 14, 185, 1633, 11, 185, 5, 185, 1635, 10, 185, + 3, 186, 6, 186, 1638, 10, 186, 13, 186, 14, 186, 1639, 3, 186, 3, 186, + 7, 186, 1644, 10, 186, 12, 186, 14, 186, 1647, 11, 186, 5, 186, 1649, 10, + 186, 3, 186, 3, 186, 6, 186, 1653, 10, 186, 13, 186, 14, 186, 1654, 5, + 186, 1657, 10, 186, 3, 186, 3, 186, 5, 186, 1661, 10, 186, 3, 186, 6, 186, + 1664, 10, 186, 13, 186, 14, 186, 1665, 5, 186, 1668, 10, 186, 3, 186, 3, + 186, 3, 186, 3, 186, 6, 186, 1674, 10, 186, 13, 186, 14, 186, 1675, 5, + 186, 1678, 10, 186, 3, 187, 3, 187, 7, 187, 1682, 10, 187, 12, 187, 14, + 187, 1685, 11, 187, 3, 187, 3, 187, 5, 187, 1689, 10, 187, 3, 188, 3, 188, + 3, 188, 3, 188, 7, 188, 1695, 10, 188, 12, 188, 14, 188, 1698, 11, 188, + 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, + 7, 190, 1709, 10, 190, 12, 190, 14, 190, 1712, 11, 190, 3, 190, 5, 190, + 1715, 10, 190, 3, 190, 3, 190, 5, 190, 1719, 10, 190, 3, 190, 3, 190, 3, + 191, 3, 191, 3, 191, 3, 191, 7, 191, 1727, 10, 191, 12, 191, 14, 191, 1730, + 11, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, + 3, 192, 3, 193, 3, 193, 3, 194, 3, 194, 3, 195, 3, 195, 3, 196, 3, 196, + 3, 197, 3, 197, 3, 198, 3, 198, 3, 199, 3, 199, 3, 200, 3, 200, 3, 201, + 3, 201, 3, 202, 3, 202, 3, 203, 3, 203, 3, 204, 3, 204, 3, 205, 3, 205, + 3, 206, 3, 206, 3, 207, 3, 207, 3, 208, 3, 208, 3, 209, 3, 209, 3, 210, + 3, 210, 3, 211, 3, 211, 3, 212, 3, 212, 3, 213, 3, 213, 3, 214, 3, 214, + 3, 215, 3, 215, 3, 216, 3, 216, 3, 217, 3, 217, 3, 218, 3, 218, 3, 219, + 3, 219, 3, 220, 3, 220, 3, 221, 3, 221, 3, 1728, 2, 222, 3, 3, 5, 4, 7, + 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, @@ -187,514 +225,641 @@ var serializedLexerAtn = []uint16{ 271, 137, 273, 138, 275, 139, 277, 140, 279, 141, 281, 142, 283, 143, 285, 144, 287, 145, 289, 146, 291, 147, 293, 148, 295, 149, 297, 150, 299, 151, 301, 152, 303, 153, 305, 154, 307, 155, 309, 156, 311, 157, 313, 158, 315, - 159, 317, 2, 319, 2, 321, 2, 323, 2, 325, 2, 327, 2, 329, 2, 331, 2, 333, - 2, 335, 2, 337, 2, 339, 2, 341, 2, 343, 2, 345, 2, 347, 2, 349, 2, 351, - 2, 353, 2, 355, 2, 357, 2, 359, 2, 361, 2, 363, 2, 365, 2, 367, 2, 369, - 2, 3, 2, 39, 3, 2, 36, 36, 3, 2, 98, 98, 3, 2, 95, 95, 5, 2, 67, 92, 97, - 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 4, 2, 45, 45, 47, 47, - 5, 2, 38, 38, 60, 60, 66, 66, 3, 2, 41, 41, 4, 2, 12, 12, 15, 15, 5, 2, - 11, 13, 15, 15, 34, 34, 3, 2, 50, 59, 4, 2, 67, 67, 99, 99, 4, 2, 68, 68, - 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, 102, 4, 2, 71, 71, - 103, 103, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, 105, 4, 2, 74, 74, - 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, 108, 4, 2, 77, 77, - 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, 111, 4, 2, 80, 80, - 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, 114, 4, 2, 83, 83, - 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, 117, 4, 2, 86, 86, - 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, 120, 4, 2, 89, 89, - 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, 123, 4, 2, 92, 92, - 124, 124, 2, 1453, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, - 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, - 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, - 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, - 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, - 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, - 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, - 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, - 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, - 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, - 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, - 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, - 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, - 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, - 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, - 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, - 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, - 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, - 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, - 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, - 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, - 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, - 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, - 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, - 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, - 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, - 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, - 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, - 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, - 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, - 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, - 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, - 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, - 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, - 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, - 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, - 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, - 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, - 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, - 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, - 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, - 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, - 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, - 3, 371, 3, 2, 2, 2, 5, 373, 3, 2, 2, 2, 7, 375, 3, 2, 2, 2, 9, 377, 3, - 2, 2, 2, 11, 379, 3, 2, 2, 2, 13, 381, 3, 2, 2, 2, 15, 383, 3, 2, 2, 2, - 17, 385, 3, 2, 2, 2, 19, 387, 3, 2, 2, 2, 21, 389, 3, 2, 2, 2, 23, 391, - 3, 2, 2, 2, 25, 394, 3, 2, 2, 2, 27, 396, 3, 2, 2, 2, 29, 398, 3, 2, 2, - 2, 31, 401, 3, 2, 2, 2, 33, 404, 3, 2, 2, 2, 35, 406, 3, 2, 2, 2, 37, 408, - 3, 2, 2, 2, 39, 410, 3, 2, 2, 2, 41, 413, 3, 2, 2, 2, 43, 415, 3, 2, 2, - 2, 45, 418, 3, 2, 2, 2, 47, 421, 3, 2, 2, 2, 49, 424, 3, 2, 2, 2, 51, 427, - 3, 2, 2, 2, 53, 433, 3, 2, 2, 2, 55, 440, 3, 2, 2, 2, 57, 444, 3, 2, 2, - 2, 59, 450, 3, 2, 2, 2, 61, 454, 3, 2, 2, 2, 63, 460, 3, 2, 2, 2, 65, 468, - 3, 2, 2, 2, 67, 472, 3, 2, 2, 2, 69, 475, 3, 2, 2, 2, 71, 479, 3, 2, 2, - 2, 73, 486, 3, 2, 2, 2, 75, 500, 3, 2, 2, 2, 77, 507, 3, 2, 2, 2, 79, 513, - 3, 2, 2, 2, 81, 521, 3, 2, 2, 2, 83, 524, 3, 2, 2, 2, 85, 532, 3, 2, 2, - 2, 87, 537, 3, 2, 2, 2, 89, 542, 3, 2, 2, 2, 91, 548, 3, 2, 2, 2, 93, 556, - 3, 2, 2, 2, 95, 563, 3, 2, 2, 2, 97, 570, 3, 2, 2, 2, 99, 579, 3, 2, 2, - 2, 101, 590, 3, 2, 2, 2, 103, 597, 3, 2, 2, 2, 105, 603, 3, 2, 2, 2, 107, - 616, 3, 2, 2, 2, 109, 629, 3, 2, 2, 2, 111, 647, 3, 2, 2, 2, 113, 656, - 3, 2, 2, 2, 115, 664, 3, 2, 2, 2, 117, 675, 3, 2, 2, 2, 119, 684, 3, 2, - 2, 2, 121, 691, 3, 2, 2, 2, 123, 696, 3, 2, 2, 2, 125, 703, 3, 2, 2, 2, - 127, 712, 3, 2, 2, 2, 129, 717, 3, 2, 2, 2, 131, 722, 3, 2, 2, 2, 133, - 727, 3, 2, 2, 2, 135, 731, 3, 2, 2, 2, 137, 738, 3, 2, 2, 2, 139, 745, - 3, 2, 2, 2, 141, 755, 3, 2, 2, 2, 143, 762, 3, 2, 2, 2, 145, 770, 3, 2, - 2, 2, 147, 775, 3, 2, 2, 2, 149, 779, 3, 2, 2, 2, 151, 787, 3, 2, 2, 2, - 153, 792, 3, 2, 2, 2, 155, 797, 3, 2, 2, 2, 157, 802, 3, 2, 2, 2, 159, - 808, 3, 2, 2, 2, 161, 815, 3, 2, 2, 2, 163, 818, 3, 2, 2, 2, 165, 825, - 3, 2, 2, 2, 167, 835, 3, 2, 2, 2, 169, 838, 3, 2, 2, 2, 171, 844, 3, 2, - 2, 2, 173, 852, 3, 2, 2, 2, 175, 862, 3, 2, 2, 2, 177, 868, 3, 2, 2, 2, - 179, 875, 3, 2, 2, 2, 181, 883, 3, 2, 2, 2, 183, 893, 3, 2, 2, 2, 185, - 898, 3, 2, 2, 2, 187, 901, 3, 2, 2, 2, 189, 908, 3, 2, 2, 2, 191, 913, - 3, 2, 2, 2, 193, 917, 3, 2, 2, 2, 195, 922, 3, 2, 2, 2, 197, 927, 3, 2, - 2, 2, 199, 933, 3, 2, 2, 2, 201, 939, 3, 2, 2, 2, 203, 947, 3, 2, 2, 2, - 205, 950, 3, 2, 2, 2, 207, 954, 3, 2, 2, 2, 209, 962, 3, 2, 2, 2, 211, - 967, 3, 2, 2, 2, 213, 970, 3, 2, 2, 2, 215, 977, 3, 2, 2, 2, 217, 980, - 3, 2, 2, 2, 219, 983, 3, 2, 2, 2, 221, 989, 3, 2, 2, 2, 223, 995, 3, 2, - 2, 2, 225, 1000, 3, 2, 2, 2, 227, 1007, 3, 2, 2, 2, 229, 1015, 3, 2, 2, - 2, 231, 1021, 3, 2, 2, 2, 233, 1027, 3, 2, 2, 2, 235, 1037, 3, 2, 2, 2, - 237, 1048, 3, 2, 2, 2, 239, 1055, 3, 2, 2, 2, 241, 1063, 3, 2, 2, 2, 243, - 1071, 3, 2, 2, 2, 245, 1078, 3, 2, 2, 2, 247, 1086, 3, 2, 2, 2, 249, 1095, - 3, 2, 2, 2, 251, 1101, 3, 2, 2, 2, 253, 1110, 3, 2, 2, 2, 255, 1114, 3, - 2, 2, 2, 257, 1124, 3, 2, 2, 2, 259, 1131, 3, 2, 2, 2, 261, 1135, 3, 2, - 2, 2, 263, 1141, 3, 2, 2, 2, 265, 1146, 3, 2, 2, 2, 267, 1156, 3, 2, 2, - 2, 269, 1161, 3, 2, 2, 2, 271, 1164, 3, 2, 2, 2, 273, 1176, 3, 2, 2, 2, - 275, 1184, 3, 2, 2, 2, 277, 1190, 3, 2, 2, 2, 279, 1197, 3, 2, 2, 2, 281, - 1204, 3, 2, 2, 2, 283, 1210, 3, 2, 2, 2, 285, 1217, 3, 2, 2, 2, 287, 1224, - 3, 2, 2, 2, 289, 1229, 3, 2, 2, 2, 291, 1237, 3, 2, 2, 2, 293, 1242, 3, - 2, 2, 2, 295, 1248, 3, 2, 2, 2, 297, 1253, 3, 2, 2, 2, 299, 1296, 3, 2, - 2, 2, 301, 1340, 3, 2, 2, 2, 303, 1351, 3, 2, 2, 2, 305, 1353, 3, 2, 2, - 2, 307, 1364, 3, 2, 2, 2, 309, 1367, 3, 2, 2, 2, 311, 1378, 3, 2, 2, 2, - 313, 1394, 3, 2, 2, 2, 315, 1398, 3, 2, 2, 2, 317, 1400, 3, 2, 2, 2, 319, - 1402, 3, 2, 2, 2, 321, 1404, 3, 2, 2, 2, 323, 1406, 3, 2, 2, 2, 325, 1408, - 3, 2, 2, 2, 327, 1410, 3, 2, 2, 2, 329, 1412, 3, 2, 2, 2, 331, 1414, 3, - 2, 2, 2, 333, 1416, 3, 2, 2, 2, 335, 1418, 3, 2, 2, 2, 337, 1420, 3, 2, - 2, 2, 339, 1422, 3, 2, 2, 2, 341, 1424, 3, 2, 2, 2, 343, 1426, 3, 2, 2, - 2, 345, 1428, 3, 2, 2, 2, 347, 1430, 3, 2, 2, 2, 349, 1432, 3, 2, 2, 2, - 351, 1434, 3, 2, 2, 2, 353, 1436, 3, 2, 2, 2, 355, 1438, 3, 2, 2, 2, 357, - 1440, 3, 2, 2, 2, 359, 1442, 3, 2, 2, 2, 361, 1444, 3, 2, 2, 2, 363, 1446, - 3, 2, 2, 2, 365, 1448, 3, 2, 2, 2, 367, 1450, 3, 2, 2, 2, 369, 1452, 3, - 2, 2, 2, 371, 372, 7, 61, 2, 2, 372, 4, 3, 2, 2, 2, 373, 374, 7, 48, 2, - 2, 374, 6, 3, 2, 2, 2, 375, 376, 7, 42, 2, 2, 376, 8, 3, 2, 2, 2, 377, - 378, 7, 43, 2, 2, 378, 10, 3, 2, 2, 2, 379, 380, 7, 46, 2, 2, 380, 12, - 3, 2, 2, 2, 381, 382, 7, 63, 2, 2, 382, 14, 3, 2, 2, 2, 383, 384, 7, 44, - 2, 2, 384, 16, 3, 2, 2, 2, 385, 386, 7, 45, 2, 2, 386, 18, 3, 2, 2, 2, - 387, 388, 7, 47, 2, 2, 388, 20, 3, 2, 2, 2, 389, 390, 7, 128, 2, 2, 390, - 22, 3, 2, 2, 2, 391, 392, 7, 126, 2, 2, 392, 393, 7, 126, 2, 2, 393, 24, - 3, 2, 2, 2, 394, 395, 7, 49, 2, 2, 395, 26, 3, 2, 2, 2, 396, 397, 7, 39, - 2, 2, 397, 28, 3, 2, 2, 2, 398, 399, 7, 62, 2, 2, 399, 400, 7, 62, 2, 2, - 400, 30, 3, 2, 2, 2, 401, 402, 7, 64, 2, 2, 402, 403, 7, 64, 2, 2, 403, - 32, 3, 2, 2, 2, 404, 405, 7, 40, 2, 2, 405, 34, 3, 2, 2, 2, 406, 407, 7, - 126, 2, 2, 407, 36, 3, 2, 2, 2, 408, 409, 7, 62, 2, 2, 409, 38, 3, 2, 2, - 2, 410, 411, 7, 62, 2, 2, 411, 412, 7, 63, 2, 2, 412, 40, 3, 2, 2, 2, 413, - 414, 7, 64, 2, 2, 414, 42, 3, 2, 2, 2, 415, 416, 7, 64, 2, 2, 416, 417, - 7, 63, 2, 2, 417, 44, 3, 2, 2, 2, 418, 419, 7, 63, 2, 2, 419, 420, 7, 63, - 2, 2, 420, 46, 3, 2, 2, 2, 421, 422, 7, 35, 2, 2, 422, 423, 7, 63, 2, 2, - 423, 48, 3, 2, 2, 2, 424, 425, 7, 62, 2, 2, 425, 426, 7, 64, 2, 2, 426, - 50, 3, 2, 2, 2, 427, 428, 5, 319, 160, 2, 428, 429, 5, 321, 161, 2, 429, - 430, 5, 347, 174, 2, 430, 431, 5, 353, 177, 2, 431, 432, 5, 357, 179, 2, - 432, 52, 3, 2, 2, 2, 433, 434, 5, 319, 160, 2, 434, 435, 5, 323, 162, 2, - 435, 436, 5, 357, 179, 2, 436, 437, 5, 335, 168, 2, 437, 438, 5, 347, 174, - 2, 438, 439, 5, 345, 173, 2, 439, 54, 3, 2, 2, 2, 440, 441, 5, 319, 160, - 2, 441, 442, 5, 325, 163, 2, 442, 443, 5, 325, 163, 2, 443, 56, 3, 2, 2, - 2, 444, 445, 5, 319, 160, 2, 445, 446, 5, 329, 165, 2, 446, 447, 5, 357, - 179, 2, 447, 448, 5, 327, 164, 2, 448, 449, 5, 353, 177, 2, 449, 58, 3, - 2, 2, 2, 450, 451, 5, 319, 160, 2, 451, 452, 5, 341, 171, 2, 452, 453, - 5, 341, 171, 2, 453, 60, 3, 2, 2, 2, 454, 455, 5, 319, 160, 2, 455, 456, - 5, 341, 171, 2, 456, 457, 5, 357, 179, 2, 457, 458, 5, 327, 164, 2, 458, - 459, 5, 353, 177, 2, 459, 62, 3, 2, 2, 2, 460, 461, 5, 319, 160, 2, 461, - 462, 5, 345, 173, 2, 462, 463, 5, 319, 160, 2, 463, 464, 5, 341, 171, 2, - 464, 465, 5, 367, 184, 2, 465, 466, 5, 369, 185, 2, 466, 467, 5, 327, 164, - 2, 467, 64, 3, 2, 2, 2, 468, 469, 5, 319, 160, 2, 469, 470, 5, 345, 173, - 2, 470, 471, 5, 325, 163, 2, 471, 66, 3, 2, 2, 2, 472, 473, 5, 319, 160, - 2, 473, 474, 5, 355, 178, 2, 474, 68, 3, 2, 2, 2, 475, 476, 5, 319, 160, - 2, 476, 477, 5, 355, 178, 2, 477, 478, 5, 323, 162, 2, 478, 70, 3, 2, 2, - 2, 479, 480, 5, 319, 160, 2, 480, 481, 5, 357, 179, 2, 481, 482, 5, 357, - 179, 2, 482, 483, 5, 319, 160, 2, 483, 484, 5, 323, 162, 2, 484, 485, 5, - 333, 167, 2, 485, 72, 3, 2, 2, 2, 486, 487, 5, 319, 160, 2, 487, 488, 5, - 359, 180, 2, 488, 489, 5, 357, 179, 2, 489, 490, 5, 347, 174, 2, 490, 491, - 5, 335, 168, 2, 491, 492, 5, 345, 173, 2, 492, 493, 5, 323, 162, 2, 493, - 494, 5, 353, 177, 2, 494, 495, 5, 327, 164, 2, 495, 496, 5, 343, 172, 2, - 496, 497, 5, 327, 164, 2, 497, 498, 5, 345, 173, 2, 498, 499, 5, 357, 179, - 2, 499, 74, 3, 2, 2, 2, 500, 501, 5, 321, 161, 2, 501, 502, 5, 327, 164, - 2, 502, 503, 5, 329, 165, 2, 503, 504, 5, 347, 174, 2, 504, 505, 5, 353, - 177, 2, 505, 506, 5, 327, 164, 2, 506, 76, 3, 2, 2, 2, 507, 508, 5, 321, - 161, 2, 508, 509, 5, 327, 164, 2, 509, 510, 5, 331, 166, 2, 510, 511, 5, - 335, 168, 2, 511, 512, 5, 345, 173, 2, 512, 78, 3, 2, 2, 2, 513, 514, 5, - 321, 161, 2, 514, 515, 5, 327, 164, 2, 515, 516, 5, 357, 179, 2, 516, 517, - 5, 363, 182, 2, 517, 518, 5, 327, 164, 2, 518, 519, 5, 327, 164, 2, 519, - 520, 5, 345, 173, 2, 520, 80, 3, 2, 2, 2, 521, 522, 5, 321, 161, 2, 522, - 523, 5, 367, 184, 2, 523, 82, 3, 2, 2, 2, 524, 525, 5, 323, 162, 2, 525, - 526, 5, 319, 160, 2, 526, 527, 5, 355, 178, 2, 527, 528, 5, 323, 162, 2, - 528, 529, 5, 319, 160, 2, 529, 530, 5, 325, 163, 2, 530, 531, 5, 327, 164, - 2, 531, 84, 3, 2, 2, 2, 532, 533, 5, 323, 162, 2, 533, 534, 5, 319, 160, - 2, 534, 535, 5, 355, 178, 2, 535, 536, 5, 327, 164, 2, 536, 86, 3, 2, 2, - 2, 537, 538, 5, 323, 162, 2, 538, 539, 5, 319, 160, 2, 539, 540, 5, 355, - 178, 2, 540, 541, 5, 357, 179, 2, 541, 88, 3, 2, 2, 2, 542, 543, 5, 323, - 162, 2, 543, 544, 5, 333, 167, 2, 544, 545, 5, 327, 164, 2, 545, 546, 5, - 323, 162, 2, 546, 547, 5, 339, 170, 2, 547, 90, 3, 2, 2, 2, 548, 549, 5, - 323, 162, 2, 549, 550, 5, 347, 174, 2, 550, 551, 5, 341, 171, 2, 551, 552, - 5, 341, 171, 2, 552, 553, 5, 319, 160, 2, 553, 554, 5, 357, 179, 2, 554, - 555, 5, 327, 164, 2, 555, 92, 3, 2, 2, 2, 556, 557, 5, 323, 162, 2, 557, - 558, 5, 347, 174, 2, 558, 559, 5, 341, 171, 2, 559, 560, 5, 359, 180, 2, - 560, 561, 5, 343, 172, 2, 561, 562, 5, 345, 173, 2, 562, 94, 3, 2, 2, 2, - 563, 564, 5, 323, 162, 2, 564, 565, 5, 347, 174, 2, 565, 566, 5, 343, 172, - 2, 566, 567, 5, 343, 172, 2, 567, 568, 5, 335, 168, 2, 568, 569, 5, 357, - 179, 2, 569, 96, 3, 2, 2, 2, 570, 571, 5, 323, 162, 2, 571, 572, 5, 347, - 174, 2, 572, 573, 5, 345, 173, 2, 573, 574, 5, 329, 165, 2, 574, 575, 5, - 341, 171, 2, 575, 576, 5, 335, 168, 2, 576, 577, 5, 323, 162, 2, 577, 578, - 5, 357, 179, 2, 578, 98, 3, 2, 2, 2, 579, 580, 5, 323, 162, 2, 580, 581, - 5, 347, 174, 2, 581, 582, 5, 345, 173, 2, 582, 583, 5, 355, 178, 2, 583, - 584, 5, 357, 179, 2, 584, 585, 5, 353, 177, 2, 585, 586, 5, 319, 160, 2, - 586, 587, 5, 335, 168, 2, 587, 588, 5, 345, 173, 2, 588, 589, 5, 357, 179, - 2, 589, 100, 3, 2, 2, 2, 590, 591, 5, 323, 162, 2, 591, 592, 5, 353, 177, - 2, 592, 593, 5, 327, 164, 2, 593, 594, 5, 319, 160, 2, 594, 595, 5, 357, - 179, 2, 595, 596, 5, 327, 164, 2, 596, 102, 3, 2, 2, 2, 597, 598, 5, 323, - 162, 2, 598, 599, 5, 353, 177, 2, 599, 600, 5, 347, 174, 2, 600, 601, 5, - 355, 178, 2, 601, 602, 5, 355, 178, 2, 602, 104, 3, 2, 2, 2, 603, 604, - 5, 323, 162, 2, 604, 605, 5, 359, 180, 2, 605, 606, 5, 353, 177, 2, 606, - 607, 5, 353, 177, 2, 607, 608, 5, 327, 164, 2, 608, 609, 5, 345, 173, 2, - 609, 610, 5, 357, 179, 2, 610, 611, 7, 97, 2, 2, 611, 612, 5, 325, 163, - 2, 612, 613, 5, 319, 160, 2, 613, 614, 5, 357, 179, 2, 614, 615, 5, 327, - 164, 2, 615, 106, 3, 2, 2, 2, 616, 617, 5, 323, 162, 2, 617, 618, 5, 359, - 180, 2, 618, 619, 5, 353, 177, 2, 619, 620, 5, 353, 177, 2, 620, 621, 5, - 327, 164, 2, 621, 622, 5, 345, 173, 2, 622, 623, 5, 357, 179, 2, 623, 624, - 7, 97, 2, 2, 624, 625, 5, 357, 179, 2, 625, 626, 5, 335, 168, 2, 626, 627, - 5, 343, 172, 2, 627, 628, 5, 327, 164, 2, 628, 108, 3, 2, 2, 2, 629, 630, - 5, 323, 162, 2, 630, 631, 5, 359, 180, 2, 631, 632, 5, 353, 177, 2, 632, - 633, 5, 353, 177, 2, 633, 634, 5, 327, 164, 2, 634, 635, 5, 345, 173, 2, - 635, 636, 5, 357, 179, 2, 636, 637, 7, 97, 2, 2, 637, 638, 5, 357, 179, - 2, 638, 639, 5, 335, 168, 2, 639, 640, 5, 343, 172, 2, 640, 641, 5, 327, - 164, 2, 641, 642, 5, 355, 178, 2, 642, 643, 5, 357, 179, 2, 643, 644, 5, - 319, 160, 2, 644, 645, 5, 343, 172, 2, 645, 646, 5, 349, 175, 2, 646, 110, - 3, 2, 2, 2, 647, 648, 5, 325, 163, 2, 648, 649, 5, 319, 160, 2, 649, 650, - 5, 357, 179, 2, 650, 651, 5, 319, 160, 2, 651, 652, 5, 321, 161, 2, 652, - 653, 5, 319, 160, 2, 653, 654, 5, 355, 178, 2, 654, 655, 5, 327, 164, 2, - 655, 112, 3, 2, 2, 2, 656, 657, 5, 325, 163, 2, 657, 658, 5, 327, 164, - 2, 658, 659, 5, 329, 165, 2, 659, 660, 5, 319, 160, 2, 660, 661, 5, 359, - 180, 2, 661, 662, 5, 341, 171, 2, 662, 663, 5, 357, 179, 2, 663, 114, 3, - 2, 2, 2, 664, 665, 5, 325, 163, 2, 665, 666, 5, 327, 164, 2, 666, 667, - 5, 329, 165, 2, 667, 668, 5, 327, 164, 2, 668, 669, 5, 353, 177, 2, 669, - 670, 5, 353, 177, 2, 670, 671, 5, 319, 160, 2, 671, 672, 5, 321, 161, 2, - 672, 673, 5, 341, 171, 2, 673, 674, 5, 327, 164, 2, 674, 116, 3, 2, 2, - 2, 675, 676, 5, 325, 163, 2, 676, 677, 5, 327, 164, 2, 677, 678, 5, 329, - 165, 2, 678, 679, 5, 327, 164, 2, 679, 680, 5, 353, 177, 2, 680, 681, 5, - 353, 177, 2, 681, 682, 5, 327, 164, 2, 682, 683, 5, 325, 163, 2, 683, 118, - 3, 2, 2, 2, 684, 685, 5, 325, 163, 2, 685, 686, 5, 327, 164, 2, 686, 687, - 5, 341, 171, 2, 687, 688, 5, 327, 164, 2, 688, 689, 5, 357, 179, 2, 689, - 690, 5, 327, 164, 2, 690, 120, 3, 2, 2, 2, 691, 692, 5, 325, 163, 2, 692, - 693, 5, 327, 164, 2, 693, 694, 5, 355, 178, 2, 694, 695, 5, 323, 162, 2, - 695, 122, 3, 2, 2, 2, 696, 697, 5, 325, 163, 2, 697, 698, 5, 327, 164, - 2, 698, 699, 5, 357, 179, 2, 699, 700, 5, 319, 160, 2, 700, 701, 5, 323, - 162, 2, 701, 702, 5, 333, 167, 2, 702, 124, 3, 2, 2, 2, 703, 704, 5, 325, - 163, 2, 704, 705, 5, 335, 168, 2, 705, 706, 5, 355, 178, 2, 706, 707, 5, - 357, 179, 2, 707, 708, 5, 335, 168, 2, 708, 709, 5, 345, 173, 2, 709, 710, - 5, 323, 162, 2, 710, 711, 5, 357, 179, 2, 711, 126, 3, 2, 2, 2, 712, 713, - 5, 325, 163, 2, 713, 714, 5, 353, 177, 2, 714, 715, 5, 347, 174, 2, 715, - 716, 5, 349, 175, 2, 716, 128, 3, 2, 2, 2, 717, 718, 5, 327, 164, 2, 718, - 719, 5, 319, 160, 2, 719, 720, 5, 323, 162, 2, 720, 721, 5, 333, 167, 2, - 721, 130, 3, 2, 2, 2, 722, 723, 5, 327, 164, 2, 723, 724, 5, 341, 171, - 2, 724, 725, 5, 355, 178, 2, 725, 726, 5, 327, 164, 2, 726, 132, 3, 2, - 2, 2, 727, 728, 5, 327, 164, 2, 728, 729, 5, 345, 173, 2, 729, 730, 5, - 325, 163, 2, 730, 134, 3, 2, 2, 2, 731, 732, 5, 327, 164, 2, 732, 733, - 5, 355, 178, 2, 733, 734, 5, 323, 162, 2, 734, 735, 5, 319, 160, 2, 735, - 736, 5, 349, 175, 2, 736, 737, 5, 327, 164, 2, 737, 136, 3, 2, 2, 2, 738, - 739, 5, 327, 164, 2, 739, 740, 5, 365, 183, 2, 740, 741, 5, 323, 162, 2, - 741, 742, 5, 327, 164, 2, 742, 743, 5, 349, 175, 2, 743, 744, 5, 357, 179, - 2, 744, 138, 3, 2, 2, 2, 745, 746, 5, 327, 164, 2, 746, 747, 5, 365, 183, - 2, 747, 748, 5, 323, 162, 2, 748, 749, 5, 341, 171, 2, 749, 750, 5, 359, - 180, 2, 750, 751, 5, 355, 178, 2, 751, 752, 5, 335, 168, 2, 752, 753, 5, - 361, 181, 2, 753, 754, 5, 327, 164, 2, 754, 140, 3, 2, 2, 2, 755, 756, - 5, 327, 164, 2, 756, 757, 5, 365, 183, 2, 757, 758, 5, 335, 168, 2, 758, - 759, 5, 355, 178, 2, 759, 760, 5, 357, 179, 2, 760, 761, 5, 355, 178, 2, - 761, 142, 3, 2, 2, 2, 762, 763, 5, 327, 164, 2, 763, 764, 5, 365, 183, - 2, 764, 765, 5, 349, 175, 2, 765, 766, 5, 341, 171, 2, 766, 767, 5, 319, - 160, 2, 767, 768, 5, 335, 168, 2, 768, 769, 5, 345, 173, 2, 769, 144, 3, - 2, 2, 2, 770, 771, 5, 329, 165, 2, 771, 772, 5, 319, 160, 2, 772, 773, - 5, 335, 168, 2, 773, 774, 5, 341, 171, 2, 774, 146, 3, 2, 2, 2, 775, 776, - 5, 329, 165, 2, 776, 777, 5, 347, 174, 2, 777, 778, 5, 353, 177, 2, 778, - 148, 3, 2, 2, 2, 779, 780, 5, 329, 165, 2, 780, 781, 5, 347, 174, 2, 781, - 782, 5, 353, 177, 2, 782, 783, 5, 327, 164, 2, 783, 784, 5, 335, 168, 2, - 784, 785, 5, 331, 166, 2, 785, 786, 5, 345, 173, 2, 786, 150, 3, 2, 2, - 2, 787, 788, 5, 329, 165, 2, 788, 789, 5, 353, 177, 2, 789, 790, 5, 347, - 174, 2, 790, 791, 5, 343, 172, 2, 791, 152, 3, 2, 2, 2, 792, 793, 5, 329, - 165, 2, 793, 794, 5, 359, 180, 2, 794, 795, 5, 341, 171, 2, 795, 796, 5, - 341, 171, 2, 796, 154, 3, 2, 2, 2, 797, 798, 5, 331, 166, 2, 798, 799, - 5, 341, 171, 2, 799, 800, 5, 347, 174, 2, 800, 801, 5, 321, 161, 2, 801, - 156, 3, 2, 2, 2, 802, 803, 5, 331, 166, 2, 803, 804, 5, 353, 177, 2, 804, - 805, 5, 347, 174, 2, 805, 806, 5, 359, 180, 2, 806, 807, 5, 349, 175, 2, - 807, 158, 3, 2, 2, 2, 808, 809, 5, 333, 167, 2, 809, 810, 5, 319, 160, - 2, 810, 811, 5, 361, 181, 2, 811, 812, 5, 335, 168, 2, 812, 813, 5, 345, - 173, 2, 813, 814, 5, 331, 166, 2, 814, 160, 3, 2, 2, 2, 815, 816, 5, 335, - 168, 2, 816, 817, 5, 329, 165, 2, 817, 162, 3, 2, 2, 2, 818, 819, 5, 335, - 168, 2, 819, 820, 5, 331, 166, 2, 820, 821, 5, 345, 173, 2, 821, 822, 5, - 347, 174, 2, 822, 823, 5, 353, 177, 2, 823, 824, 5, 327, 164, 2, 824, 164, - 3, 2, 2, 2, 825, 826, 5, 335, 168, 2, 826, 827, 5, 343, 172, 2, 827, 828, - 5, 343, 172, 2, 828, 829, 5, 327, 164, 2, 829, 830, 5, 325, 163, 2, 830, - 831, 5, 335, 168, 2, 831, 832, 5, 319, 160, 2, 832, 833, 5, 357, 179, 2, - 833, 834, 5, 327, 164, 2, 834, 166, 3, 2, 2, 2, 835, 836, 5, 335, 168, - 2, 836, 837, 5, 345, 173, 2, 837, 168, 3, 2, 2, 2, 838, 839, 5, 335, 168, - 2, 839, 840, 5, 345, 173, 2, 840, 841, 5, 325, 163, 2, 841, 842, 5, 327, - 164, 2, 842, 843, 5, 365, 183, 2, 843, 170, 3, 2, 2, 2, 844, 845, 5, 335, - 168, 2, 845, 846, 5, 345, 173, 2, 846, 847, 5, 325, 163, 2, 847, 848, 5, - 327, 164, 2, 848, 849, 5, 365, 183, 2, 849, 850, 5, 327, 164, 2, 850, 851, - 5, 325, 163, 2, 851, 172, 3, 2, 2, 2, 852, 853, 5, 335, 168, 2, 853, 854, - 5, 345, 173, 2, 854, 855, 5, 335, 168, 2, 855, 856, 5, 357, 179, 2, 856, - 857, 5, 335, 168, 2, 857, 858, 5, 319, 160, 2, 858, 859, 5, 341, 171, 2, - 859, 860, 5, 341, 171, 2, 860, 861, 5, 367, 184, 2, 861, 174, 3, 2, 2, - 2, 862, 863, 5, 335, 168, 2, 863, 864, 5, 345, 173, 2, 864, 865, 5, 345, - 173, 2, 865, 866, 5, 327, 164, 2, 866, 867, 5, 353, 177, 2, 867, 176, 3, - 2, 2, 2, 868, 869, 5, 335, 168, 2, 869, 870, 5, 345, 173, 2, 870, 871, - 5, 355, 178, 2, 871, 872, 5, 327, 164, 2, 872, 873, 5, 353, 177, 2, 873, - 874, 5, 357, 179, 2, 874, 178, 3, 2, 2, 2, 875, 876, 5, 335, 168, 2, 876, - 877, 5, 345, 173, 2, 877, 878, 5, 355, 178, 2, 878, 879, 5, 357, 179, 2, - 879, 880, 5, 327, 164, 2, 880, 881, 5, 319, 160, 2, 881, 882, 5, 325, 163, - 2, 882, 180, 3, 2, 2, 2, 883, 884, 5, 335, 168, 2, 884, 885, 5, 345, 173, - 2, 885, 886, 5, 357, 179, 2, 886, 887, 5, 327, 164, 2, 887, 888, 5, 353, - 177, 2, 888, 889, 5, 355, 178, 2, 889, 890, 5, 327, 164, 2, 890, 891, 5, - 323, 162, 2, 891, 892, 5, 357, 179, 2, 892, 182, 3, 2, 2, 2, 893, 894, - 5, 335, 168, 2, 894, 895, 5, 345, 173, 2, 895, 896, 5, 357, 179, 2, 896, - 897, 5, 347, 174, 2, 897, 184, 3, 2, 2, 2, 898, 899, 5, 335, 168, 2, 899, - 900, 5, 355, 178, 2, 900, 186, 3, 2, 2, 2, 901, 902, 5, 335, 168, 2, 902, - 903, 5, 355, 178, 2, 903, 904, 5, 345, 173, 2, 904, 905, 5, 359, 180, 2, - 905, 906, 5, 341, 171, 2, 906, 907, 5, 341, 171, 2, 907, 188, 3, 2, 2, - 2, 908, 909, 5, 337, 169, 2, 909, 910, 5, 347, 174, 2, 910, 911, 5, 335, - 168, 2, 911, 912, 5, 345, 173, 2, 912, 190, 3, 2, 2, 2, 913, 914, 5, 339, - 170, 2, 914, 915, 5, 327, 164, 2, 915, 916, 5, 367, 184, 2, 916, 192, 3, - 2, 2, 2, 917, 918, 5, 341, 171, 2, 918, 919, 5, 327, 164, 2, 919, 920, - 5, 329, 165, 2, 920, 921, 5, 357, 179, 2, 921, 194, 3, 2, 2, 2, 922, 923, - 5, 341, 171, 2, 923, 924, 5, 335, 168, 2, 924, 925, 5, 339, 170, 2, 925, - 926, 5, 327, 164, 2, 926, 196, 3, 2, 2, 2, 927, 928, 5, 341, 171, 2, 928, - 929, 5, 335, 168, 2, 929, 930, 5, 343, 172, 2, 930, 931, 5, 335, 168, 2, - 931, 932, 5, 357, 179, 2, 932, 198, 3, 2, 2, 2, 933, 934, 5, 343, 172, - 2, 934, 935, 5, 319, 160, 2, 935, 936, 5, 357, 179, 2, 936, 937, 5, 323, - 162, 2, 937, 938, 5, 333, 167, 2, 938, 200, 3, 2, 2, 2, 939, 940, 5, 345, - 173, 2, 940, 941, 5, 319, 160, 2, 941, 942, 5, 357, 179, 2, 942, 943, 5, - 359, 180, 2, 943, 944, 5, 353, 177, 2, 944, 945, 5, 319, 160, 2, 945, 946, - 5, 341, 171, 2, 946, 202, 3, 2, 2, 2, 947, 948, 5, 345, 173, 2, 948, 949, - 5, 347, 174, 2, 949, 204, 3, 2, 2, 2, 950, 951, 5, 345, 173, 2, 951, 952, - 5, 347, 174, 2, 952, 953, 5, 357, 179, 2, 953, 206, 3, 2, 2, 2, 954, 955, - 5, 345, 173, 2, 955, 956, 5, 347, 174, 2, 956, 957, 5, 357, 179, 2, 957, - 958, 5, 345, 173, 2, 958, 959, 5, 359, 180, 2, 959, 960, 5, 341, 171, 2, - 960, 961, 5, 341, 171, 2, 961, 208, 3, 2, 2, 2, 962, 963, 5, 345, 173, - 2, 963, 964, 5, 359, 180, 2, 964, 965, 5, 341, 171, 2, 965, 966, 5, 341, - 171, 2, 966, 210, 3, 2, 2, 2, 967, 968, 5, 347, 174, 2, 968, 969, 5, 329, - 165, 2, 969, 212, 3, 2, 2, 2, 970, 971, 5, 347, 174, 2, 971, 972, 5, 329, - 165, 2, 972, 973, 5, 329, 165, 2, 973, 974, 5, 355, 178, 2, 974, 975, 5, - 327, 164, 2, 975, 976, 5, 357, 179, 2, 976, 214, 3, 2, 2, 2, 977, 978, - 5, 347, 174, 2, 978, 979, 5, 345, 173, 2, 979, 216, 3, 2, 2, 2, 980, 981, - 5, 347, 174, 2, 981, 982, 5, 353, 177, 2, 982, 218, 3, 2, 2, 2, 983, 984, - 5, 347, 174, 2, 984, 985, 5, 353, 177, 2, 985, 986, 5, 325, 163, 2, 986, - 987, 5, 327, 164, 2, 987, 988, 5, 353, 177, 2, 988, 220, 3, 2, 2, 2, 989, - 990, 5, 347, 174, 2, 990, 991, 5, 359, 180, 2, 991, 992, 5, 357, 179, 2, - 992, 993, 5, 327, 164, 2, 993, 994, 5, 353, 177, 2, 994, 222, 3, 2, 2, - 2, 995, 996, 5, 349, 175, 2, 996, 997, 5, 341, 171, 2, 997, 998, 5, 319, - 160, 2, 998, 999, 5, 345, 173, 2, 999, 224, 3, 2, 2, 2, 1000, 1001, 5, - 349, 175, 2, 1001, 1002, 5, 353, 177, 2, 1002, 1003, 5, 319, 160, 2, 1003, - 1004, 5, 331, 166, 2, 1004, 1005, 5, 343, 172, 2, 1005, 1006, 5, 319, 160, - 2, 1006, 226, 3, 2, 2, 2, 1007, 1008, 5, 349, 175, 2, 1008, 1009, 5, 353, - 177, 2, 1009, 1010, 5, 335, 168, 2, 1010, 1011, 5, 343, 172, 2, 1011, 1012, - 5, 319, 160, 2, 1012, 1013, 5, 353, 177, 2, 1013, 1014, 5, 367, 184, 2, - 1014, 228, 3, 2, 2, 2, 1015, 1016, 5, 351, 176, 2, 1016, 1017, 5, 359, - 180, 2, 1017, 1018, 5, 327, 164, 2, 1018, 1019, 5, 353, 177, 2, 1019, 1020, - 5, 367, 184, 2, 1020, 230, 3, 2, 2, 2, 1021, 1022, 5, 353, 177, 2, 1022, - 1023, 5, 319, 160, 2, 1023, 1024, 5, 335, 168, 2, 1024, 1025, 5, 355, 178, - 2, 1025, 1026, 5, 327, 164, 2, 1026, 232, 3, 2, 2, 2, 1027, 1028, 5, 353, - 177, 2, 1028, 1029, 5, 327, 164, 2, 1029, 1030, 5, 323, 162, 2, 1030, 1031, - 5, 359, 180, 2, 1031, 1032, 5, 353, 177, 2, 1032, 1033, 5, 355, 178, 2, - 1033, 1034, 5, 335, 168, 2, 1034, 1035, 5, 361, 181, 2, 1035, 1036, 5, - 327, 164, 2, 1036, 234, 3, 2, 2, 2, 1037, 1038, 5, 353, 177, 2, 1038, 1039, - 5, 327, 164, 2, 1039, 1040, 5, 329, 165, 2, 1040, 1041, 5, 327, 164, 2, - 1041, 1042, 5, 353, 177, 2, 1042, 1043, 5, 327, 164, 2, 1043, 1044, 5, - 345, 173, 2, 1044, 1045, 5, 323, 162, 2, 1045, 1046, 5, 327, 164, 2, 1046, - 1047, 5, 355, 178, 2, 1047, 236, 3, 2, 2, 2, 1048, 1049, 5, 353, 177, 2, - 1049, 1050, 5, 327, 164, 2, 1050, 1051, 5, 331, 166, 2, 1051, 1052, 5, - 327, 164, 2, 1052, 1053, 5, 365, 183, 2, 1053, 1054, 5, 349, 175, 2, 1054, - 238, 3, 2, 2, 2, 1055, 1056, 5, 353, 177, 2, 1056, 1057, 5, 327, 164, 2, - 1057, 1058, 5, 335, 168, 2, 1058, 1059, 5, 345, 173, 2, 1059, 1060, 5, - 325, 163, 2, 1060, 1061, 5, 327, 164, 2, 1061, 1062, 5, 365, 183, 2, 1062, - 240, 3, 2, 2, 2, 1063, 1064, 5, 353, 177, 2, 1064, 1065, 5, 327, 164, 2, - 1065, 1066, 5, 341, 171, 2, 1066, 1067, 5, 327, 164, 2, 1067, 1068, 5, - 319, 160, 2, 1068, 1069, 5, 355, 178, 2, 1069, 1070, 5, 327, 164, 2, 1070, - 242, 3, 2, 2, 2, 1071, 1072, 5, 353, 177, 2, 1072, 1073, 5, 327, 164, 2, - 1073, 1074, 5, 345, 173, 2, 1074, 1075, 5, 319, 160, 2, 1075, 1076, 5, - 343, 172, 2, 1076, 1077, 5, 327, 164, 2, 1077, 244, 3, 2, 2, 2, 1078, 1079, - 5, 353, 177, 2, 1079, 1080, 5, 327, 164, 2, 1080, 1081, 5, 349, 175, 2, - 1081, 1082, 5, 341, 171, 2, 1082, 1083, 5, 319, 160, 2, 1083, 1084, 5, - 323, 162, 2, 1084, 1085, 5, 327, 164, 2, 1085, 246, 3, 2, 2, 2, 1086, 1087, - 5, 353, 177, 2, 1087, 1088, 5, 327, 164, 2, 1088, 1089, 5, 355, 178, 2, - 1089, 1090, 5, 357, 179, 2, 1090, 1091, 5, 353, 177, 2, 1091, 1092, 5, - 335, 168, 2, 1092, 1093, 5, 323, 162, 2, 1093, 1094, 5, 357, 179, 2, 1094, - 248, 3, 2, 2, 2, 1095, 1096, 5, 353, 177, 2, 1096, 1097, 5, 335, 168, 2, - 1097, 1098, 5, 331, 166, 2, 1098, 1099, 5, 333, 167, 2, 1099, 1100, 5, - 357, 179, 2, 1100, 250, 3, 2, 2, 2, 1101, 1102, 5, 353, 177, 2, 1102, 1103, - 5, 347, 174, 2, 1103, 1104, 5, 341, 171, 2, 1104, 1105, 5, 341, 171, 2, - 1105, 1106, 5, 321, 161, 2, 1106, 1107, 5, 319, 160, 2, 1107, 1108, 5, - 323, 162, 2, 1108, 1109, 5, 339, 170, 2, 1109, 252, 3, 2, 2, 2, 1110, 1111, - 5, 353, 177, 2, 1111, 1112, 5, 347, 174, 2, 1112, 1113, 5, 363, 182, 2, - 1113, 254, 3, 2, 2, 2, 1114, 1115, 5, 355, 178, 2, 1115, 1116, 5, 319, - 160, 2, 1116, 1117, 5, 361, 181, 2, 1117, 1118, 5, 327, 164, 2, 1118, 1119, - 5, 349, 175, 2, 1119, 1120, 5, 347, 174, 2, 1120, 1121, 5, 335, 168, 2, - 1121, 1122, 5, 345, 173, 2, 1122, 1123, 5, 357, 179, 2, 1123, 256, 3, 2, - 2, 2, 1124, 1125, 5, 355, 178, 2, 1125, 1126, 5, 327, 164, 2, 1126, 1127, - 5, 341, 171, 2, 1127, 1128, 5, 327, 164, 2, 1128, 1129, 5, 323, 162, 2, - 1129, 1130, 5, 357, 179, 2, 1130, 258, 3, 2, 2, 2, 1131, 1132, 5, 355, - 178, 2, 1132, 1133, 5, 327, 164, 2, 1133, 1134, 5, 357, 179, 2, 1134, 260, - 3, 2, 2, 2, 1135, 1136, 5, 357, 179, 2, 1136, 1137, 5, 319, 160, 2, 1137, - 1138, 5, 321, 161, 2, 1138, 1139, 5, 341, 171, 2, 1139, 1140, 5, 327, 164, - 2, 1140, 262, 3, 2, 2, 2, 1141, 1142, 5, 357, 179, 2, 1142, 1143, 5, 327, - 164, 2, 1143, 1144, 5, 343, 172, 2, 1144, 1145, 5, 349, 175, 2, 1145, 264, - 3, 2, 2, 2, 1146, 1147, 5, 357, 179, 2, 1147, 1148, 5, 327, 164, 2, 1148, - 1149, 5, 343, 172, 2, 1149, 1150, 5, 349, 175, 2, 1150, 1151, 5, 347, 174, - 2, 1151, 1152, 5, 353, 177, 2, 1152, 1153, 5, 319, 160, 2, 1153, 1154, - 5, 353, 177, 2, 1154, 1155, 5, 367, 184, 2, 1155, 266, 3, 2, 2, 2, 1156, - 1157, 5, 357, 179, 2, 1157, 1158, 5, 333, 167, 2, 1158, 1159, 5, 327, 164, - 2, 1159, 1160, 5, 345, 173, 2, 1160, 268, 3, 2, 2, 2, 1161, 1162, 5, 357, - 179, 2, 1162, 1163, 5, 347, 174, 2, 1163, 270, 3, 2, 2, 2, 1164, 1165, - 5, 357, 179, 2, 1165, 1166, 5, 353, 177, 2, 1166, 1167, 5, 319, 160, 2, - 1167, 1168, 5, 345, 173, 2, 1168, 1169, 5, 355, 178, 2, 1169, 1170, 5, - 319, 160, 2, 1170, 1171, 5, 323, 162, 2, 1171, 1172, 5, 357, 179, 2, 1172, - 1173, 5, 335, 168, 2, 1173, 1174, 5, 347, 174, 2, 1174, 1175, 5, 345, 173, - 2, 1175, 272, 3, 2, 2, 2, 1176, 1177, 5, 357, 179, 2, 1177, 1178, 5, 353, - 177, 2, 1178, 1179, 5, 335, 168, 2, 1179, 1180, 5, 331, 166, 2, 1180, 1181, - 5, 331, 166, 2, 1181, 1182, 5, 327, 164, 2, 1182, 1183, 5, 353, 177, 2, - 1183, 274, 3, 2, 2, 2, 1184, 1185, 5, 359, 180, 2, 1185, 1186, 5, 345, - 173, 2, 1186, 1187, 5, 335, 168, 2, 1187, 1188, 5, 347, 174, 2, 1188, 1189, - 5, 345, 173, 2, 1189, 276, 3, 2, 2, 2, 1190, 1191, 5, 359, 180, 2, 1191, - 1192, 5, 345, 173, 2, 1192, 1193, 5, 335, 168, 2, 1193, 1194, 5, 351, 176, - 2, 1194, 1195, 5, 359, 180, 2, 1195, 1196, 5, 327, 164, 2, 1196, 278, 3, - 2, 2, 2, 1197, 1198, 5, 359, 180, 2, 1198, 1199, 5, 349, 175, 2, 1199, - 1200, 5, 325, 163, 2, 1200, 1201, 5, 319, 160, 2, 1201, 1202, 5, 357, 179, - 2, 1202, 1203, 5, 327, 164, 2, 1203, 280, 3, 2, 2, 2, 1204, 1205, 5, 359, - 180, 2, 1205, 1206, 5, 355, 178, 2, 1206, 1207, 5, 335, 168, 2, 1207, 1208, - 5, 345, 173, 2, 1208, 1209, 5, 331, 166, 2, 1209, 282, 3, 2, 2, 2, 1210, - 1211, 5, 361, 181, 2, 1211, 1212, 5, 319, 160, 2, 1212, 1213, 5, 323, 162, - 2, 1213, 1214, 5, 359, 180, 2, 1214, 1215, 5, 359, 180, 2, 1215, 1216, - 5, 343, 172, 2, 1216, 284, 3, 2, 2, 2, 1217, 1218, 5, 361, 181, 2, 1218, - 1219, 5, 319, 160, 2, 1219, 1220, 5, 341, 171, 2, 1220, 1221, 5, 359, 180, - 2, 1221, 1222, 5, 327, 164, 2, 1222, 1223, 5, 355, 178, 2, 1223, 286, 3, - 2, 2, 2, 1224, 1225, 5, 361, 181, 2, 1225, 1226, 5, 335, 168, 2, 1226, - 1227, 5, 327, 164, 2, 1227, 1228, 5, 363, 182, 2, 1228, 288, 3, 2, 2, 2, - 1229, 1230, 5, 361, 181, 2, 1230, 1231, 5, 335, 168, 2, 1231, 1232, 5, - 353, 177, 2, 1232, 1233, 5, 357, 179, 2, 1233, 1234, 5, 359, 180, 2, 1234, - 1235, 5, 319, 160, 2, 1235, 1236, 5, 341, 171, 2, 1236, 290, 3, 2, 2, 2, - 1237, 1238, 5, 363, 182, 2, 1238, 1239, 5, 333, 167, 2, 1239, 1240, 5, - 327, 164, 2, 1240, 1241, 5, 345, 173, 2, 1241, 292, 3, 2, 2, 2, 1242, 1243, - 5, 363, 182, 2, 1243, 1244, 5, 333, 167, 2, 1244, 1245, 5, 327, 164, 2, - 1245, 1246, 5, 353, 177, 2, 1246, 1247, 5, 327, 164, 2, 1247, 294, 3, 2, - 2, 2, 1248, 1249, 5, 363, 182, 2, 1249, 1250, 5, 335, 168, 2, 1250, 1251, - 5, 357, 179, 2, 1251, 1252, 5, 333, 167, 2, 1252, 296, 3, 2, 2, 2, 1253, - 1254, 5, 363, 182, 2, 1254, 1255, 5, 335, 168, 2, 1255, 1256, 5, 357, 179, - 2, 1256, 1257, 5, 333, 167, 2, 1257, 1258, 5, 347, 174, 2, 1258, 1259, - 5, 359, 180, 2, 1259, 1260, 5, 357, 179, 2, 1260, 298, 3, 2, 2, 2, 1261, - 1267, 7, 36, 2, 2, 1262, 1266, 10, 2, 2, 2, 1263, 1264, 7, 36, 2, 2, 1264, - 1266, 7, 36, 2, 2, 1265, 1262, 3, 2, 2, 2, 1265, 1263, 3, 2, 2, 2, 1266, - 1269, 3, 2, 2, 2, 1267, 1265, 3, 2, 2, 2, 1267, 1268, 3, 2, 2, 2, 1268, - 1270, 3, 2, 2, 2, 1269, 1267, 3, 2, 2, 2, 1270, 1297, 7, 36, 2, 2, 1271, - 1277, 7, 98, 2, 2, 1272, 1276, 10, 3, 2, 2, 1273, 1274, 7, 98, 2, 2, 1274, - 1276, 7, 98, 2, 2, 1275, 1272, 3, 2, 2, 2, 1275, 1273, 3, 2, 2, 2, 1276, - 1279, 3, 2, 2, 2, 1277, 1275, 3, 2, 2, 2, 1277, 1278, 3, 2, 2, 2, 1278, - 1280, 3, 2, 2, 2, 1279, 1277, 3, 2, 2, 2, 1280, 1297, 7, 98, 2, 2, 1281, - 1285, 7, 93, 2, 2, 1282, 1284, 10, 4, 2, 2, 1283, 1282, 3, 2, 2, 2, 1284, - 1287, 3, 2, 2, 2, 1285, 1283, 3, 2, 2, 2, 1285, 1286, 3, 2, 2, 2, 1286, - 1288, 3, 2, 2, 2, 1287, 1285, 3, 2, 2, 2, 1288, 1297, 7, 95, 2, 2, 1289, - 1293, 9, 5, 2, 2, 1290, 1292, 9, 6, 2, 2, 1291, 1290, 3, 2, 2, 2, 1292, - 1295, 3, 2, 2, 2, 1293, 1291, 3, 2, 2, 2, 1293, 1294, 3, 2, 2, 2, 1294, - 1297, 3, 2, 2, 2, 1295, 1293, 3, 2, 2, 2, 1296, 1261, 3, 2, 2, 2, 1296, - 1271, 3, 2, 2, 2, 1296, 1281, 3, 2, 2, 2, 1296, 1289, 3, 2, 2, 2, 1297, - 300, 3, 2, 2, 2, 1298, 1300, 5, 317, 159, 2, 1299, 1298, 3, 2, 2, 2, 1300, - 1301, 3, 2, 2, 2, 1301, 1299, 3, 2, 2, 2, 1301, 1302, 3, 2, 2, 2, 1302, - 1310, 3, 2, 2, 2, 1303, 1307, 7, 48, 2, 2, 1304, 1306, 5, 317, 159, 2, - 1305, 1304, 3, 2, 2, 2, 1306, 1309, 3, 2, 2, 2, 1307, 1305, 3, 2, 2, 2, - 1307, 1308, 3, 2, 2, 2, 1308, 1311, 3, 2, 2, 2, 1309, 1307, 3, 2, 2, 2, - 1310, 1303, 3, 2, 2, 2, 1310, 1311, 3, 2, 2, 2, 1311, 1321, 3, 2, 2, 2, - 1312, 1314, 5, 327, 164, 2, 1313, 1315, 9, 7, 2, 2, 1314, 1313, 3, 2, 2, - 2, 1314, 1315, 3, 2, 2, 2, 1315, 1317, 3, 2, 2, 2, 1316, 1318, 5, 317, - 159, 2, 1317, 1316, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 1317, 3, - 2, 2, 2, 1319, 1320, 3, 2, 2, 2, 1320, 1322, 3, 2, 2, 2, 1321, 1312, 3, - 2, 2, 2, 1321, 1322, 3, 2, 2, 2, 1322, 1341, 3, 2, 2, 2, 1323, 1325, 7, - 48, 2, 2, 1324, 1326, 5, 317, 159, 2, 1325, 1324, 3, 2, 2, 2, 1326, 1327, - 3, 2, 2, 2, 1327, 1325, 3, 2, 2, 2, 1327, 1328, 3, 2, 2, 2, 1328, 1338, - 3, 2, 2, 2, 1329, 1331, 5, 327, 164, 2, 1330, 1332, 9, 7, 2, 2, 1331, 1330, - 3, 2, 2, 2, 1331, 1332, 3, 2, 2, 2, 1332, 1334, 3, 2, 2, 2, 1333, 1335, - 5, 317, 159, 2, 1334, 1333, 3, 2, 2, 2, 1335, 1336, 3, 2, 2, 2, 1336, 1334, - 3, 2, 2, 2, 1336, 1337, 3, 2, 2, 2, 1337, 1339, 3, 2, 2, 2, 1338, 1329, - 3, 2, 2, 2, 1338, 1339, 3, 2, 2, 2, 1339, 1341, 3, 2, 2, 2, 1340, 1299, - 3, 2, 2, 2, 1340, 1323, 3, 2, 2, 2, 1341, 302, 3, 2, 2, 2, 1342, 1346, - 7, 65, 2, 2, 1343, 1345, 5, 317, 159, 2, 1344, 1343, 3, 2, 2, 2, 1345, - 1348, 3, 2, 2, 2, 1346, 1344, 3, 2, 2, 2, 1346, 1347, 3, 2, 2, 2, 1347, - 1352, 3, 2, 2, 2, 1348, 1346, 3, 2, 2, 2, 1349, 1350, 9, 8, 2, 2, 1350, - 1352, 5, 299, 150, 2, 1351, 1342, 3, 2, 2, 2, 1351, 1349, 3, 2, 2, 2, 1352, - 304, 3, 2, 2, 2, 1353, 1359, 7, 41, 2, 2, 1354, 1358, 10, 9, 2, 2, 1355, - 1356, 7, 41, 2, 2, 1356, 1358, 7, 41, 2, 2, 1357, 1354, 3, 2, 2, 2, 1357, - 1355, 3, 2, 2, 2, 1358, 1361, 3, 2, 2, 2, 1359, 1357, 3, 2, 2, 2, 1359, - 1360, 3, 2, 2, 2, 1360, 1362, 3, 2, 2, 2, 1361, 1359, 3, 2, 2, 2, 1362, - 1363, 7, 41, 2, 2, 1363, 306, 3, 2, 2, 2, 1364, 1365, 5, 365, 183, 2, 1365, - 1366, 5, 305, 153, 2, 1366, 308, 3, 2, 2, 2, 1367, 1368, 7, 47, 2, 2, 1368, - 1369, 7, 47, 2, 2, 1369, 1373, 3, 2, 2, 2, 1370, 1372, 10, 10, 2, 2, 1371, - 1370, 3, 2, 2, 2, 1372, 1375, 3, 2, 2, 2, 1373, 1371, 3, 2, 2, 2, 1373, - 1374, 3, 2, 2, 2, 1374, 1376, 3, 2, 2, 2, 1375, 1373, 3, 2, 2, 2, 1376, - 1377, 8, 155, 2, 2, 1377, 310, 3, 2, 2, 2, 1378, 1379, 7, 49, 2, 2, 1379, - 1380, 7, 44, 2, 2, 1380, 1384, 3, 2, 2, 2, 1381, 1383, 11, 2, 2, 2, 1382, - 1381, 3, 2, 2, 2, 1383, 1386, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1384, - 1382, 3, 2, 2, 2, 1385, 1390, 3, 2, 2, 2, 1386, 1384, 3, 2, 2, 2, 1387, - 1388, 7, 44, 2, 2, 1388, 1391, 7, 49, 2, 2, 1389, 1391, 7, 2, 2, 3, 1390, - 1387, 3, 2, 2, 2, 1390, 1389, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, - 1393, 8, 156, 2, 2, 1393, 312, 3, 2, 2, 2, 1394, 1395, 9, 11, 2, 2, 1395, - 1396, 3, 2, 2, 2, 1396, 1397, 8, 157, 2, 2, 1397, 314, 3, 2, 2, 2, 1398, - 1399, 11, 2, 2, 2, 1399, 316, 3, 2, 2, 2, 1400, 1401, 9, 12, 2, 2, 1401, - 318, 3, 2, 2, 2, 1402, 1403, 9, 13, 2, 2, 1403, 320, 3, 2, 2, 2, 1404, - 1405, 9, 14, 2, 2, 1405, 322, 3, 2, 2, 2, 1406, 1407, 9, 15, 2, 2, 1407, - 324, 3, 2, 2, 2, 1408, 1409, 9, 16, 2, 2, 1409, 326, 3, 2, 2, 2, 1410, - 1411, 9, 17, 2, 2, 1411, 328, 3, 2, 2, 2, 1412, 1413, 9, 18, 2, 2, 1413, - 330, 3, 2, 2, 2, 1414, 1415, 9, 19, 2, 2, 1415, 332, 3, 2, 2, 2, 1416, - 1417, 9, 20, 2, 2, 1417, 334, 3, 2, 2, 2, 1418, 1419, 9, 21, 2, 2, 1419, - 336, 3, 2, 2, 2, 1420, 1421, 9, 22, 2, 2, 1421, 338, 3, 2, 2, 2, 1422, - 1423, 9, 23, 2, 2, 1423, 340, 3, 2, 2, 2, 1424, 1425, 9, 24, 2, 2, 1425, - 342, 3, 2, 2, 2, 1426, 1427, 9, 25, 2, 2, 1427, 344, 3, 2, 2, 2, 1428, - 1429, 9, 26, 2, 2, 1429, 346, 3, 2, 2, 2, 1430, 1431, 9, 27, 2, 2, 1431, - 348, 3, 2, 2, 2, 1432, 1433, 9, 28, 2, 2, 1433, 350, 3, 2, 2, 2, 1434, - 1435, 9, 29, 2, 2, 1435, 352, 3, 2, 2, 2, 1436, 1437, 9, 30, 2, 2, 1437, - 354, 3, 2, 2, 2, 1438, 1439, 9, 31, 2, 2, 1439, 356, 3, 2, 2, 2, 1440, - 1441, 9, 32, 2, 2, 1441, 358, 3, 2, 2, 2, 1442, 1443, 9, 33, 2, 2, 1443, - 360, 3, 2, 2, 2, 1444, 1445, 9, 34, 2, 2, 1445, 362, 3, 2, 2, 2, 1446, - 1447, 9, 35, 2, 2, 1447, 364, 3, 2, 2, 2, 1448, 1449, 9, 36, 2, 2, 1449, - 366, 3, 2, 2, 2, 1450, 1451, 9, 37, 2, 2, 1451, 368, 3, 2, 2, 2, 1452, - 1453, 9, 38, 2, 2, 1453, 370, 3, 2, 2, 2, 28, 2, 1265, 1267, 1275, 1277, - 1285, 1293, 1296, 1301, 1307, 1310, 1314, 1319, 1321, 1327, 1331, 1336, - 1338, 1340, 1346, 1351, 1357, 1359, 1373, 1384, 1390, 3, 2, 3, 2, + 159, 317, 160, 319, 161, 321, 162, 323, 163, 325, 164, 327, 165, 329, 166, + 331, 167, 333, 168, 335, 169, 337, 170, 339, 171, 341, 172, 343, 173, 345, + 174, 347, 175, 349, 176, 351, 177, 353, 178, 355, 179, 357, 180, 359, 181, + 361, 182, 363, 183, 365, 184, 367, 185, 369, 186, 371, 187, 373, 188, 375, + 189, 377, 190, 379, 191, 381, 192, 383, 193, 385, 194, 387, 2, 389, 2, + 391, 2, 393, 2, 395, 2, 397, 2, 399, 2, 401, 2, 403, 2, 405, 2, 407, 2, + 409, 2, 411, 2, 413, 2, 415, 2, 417, 2, 419, 2, 421, 2, 423, 2, 425, 2, + 427, 2, 429, 2, 431, 2, 433, 2, 435, 2, 437, 2, 439, 2, 441, 2, 3, 2, 40, + 3, 2, 36, 36, 3, 2, 98, 98, 3, 2, 95, 95, 5, 2, 67, 92, 97, 97, 99, 124, + 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 4, 2, 45, 45, 47, 47, 5, 2, 38, + 38, 60, 60, 66, 66, 3, 2, 41, 41, 4, 2, 12, 12, 15, 15, 5, 2, 11, 13, 15, + 15, 34, 34, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 59, 4, 2, 67, 67, + 99, 99, 4, 2, 68, 68, 100, 100, 4, 2, 69, 69, 101, 101, 4, 2, 70, 70, 102, + 102, 4, 2, 71, 71, 103, 103, 4, 2, 72, 72, 104, 104, 4, 2, 73, 73, 105, + 105, 4, 2, 74, 74, 106, 106, 4, 2, 75, 75, 107, 107, 4, 2, 76, 76, 108, + 108, 4, 2, 77, 77, 109, 109, 4, 2, 78, 78, 110, 110, 4, 2, 79, 79, 111, + 111, 4, 2, 80, 80, 112, 112, 4, 2, 81, 81, 113, 113, 4, 2, 82, 82, 114, + 114, 4, 2, 83, 83, 115, 115, 4, 2, 84, 84, 116, 116, 4, 2, 85, 85, 117, + 117, 4, 2, 86, 86, 118, 118, 4, 2, 87, 87, 119, 119, 4, 2, 88, 88, 120, + 120, 4, 2, 89, 89, 121, 121, 4, 2, 90, 90, 122, 122, 4, 2, 91, 91, 123, + 123, 4, 2, 92, 92, 124, 124, 2, 1796, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, + 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, + 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, + 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, + 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, + 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, + 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, + 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, + 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, + 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, + 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, + 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, + 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, + 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, + 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, + 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, + 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, + 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, + 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, + 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, + 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, + 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, + 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, + 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, + 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, + 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, + 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, + 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, + 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, + 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, + 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, + 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, + 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, + 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, + 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, + 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, + 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, + 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, + 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, + 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, + 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, + 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, + 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, + 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, + 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, + 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, + 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, + 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, + 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, + 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, + 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, + 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, + 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, + 3, 443, 3, 2, 2, 2, 5, 445, 3, 2, 2, 2, 7, 447, 3, 2, 2, 2, 9, 449, 3, + 2, 2, 2, 11, 451, 3, 2, 2, 2, 13, 453, 3, 2, 2, 2, 15, 455, 3, 2, 2, 2, + 17, 457, 3, 2, 2, 2, 19, 459, 3, 2, 2, 2, 21, 461, 3, 2, 2, 2, 23, 463, + 3, 2, 2, 2, 25, 466, 3, 2, 2, 2, 27, 468, 3, 2, 2, 2, 29, 470, 3, 2, 2, + 2, 31, 473, 3, 2, 2, 2, 33, 476, 3, 2, 2, 2, 35, 478, 3, 2, 2, 2, 37, 480, + 3, 2, 2, 2, 39, 482, 3, 2, 2, 2, 41, 485, 3, 2, 2, 2, 43, 487, 3, 2, 2, + 2, 45, 490, 3, 2, 2, 2, 47, 493, 3, 2, 2, 2, 49, 496, 3, 2, 2, 2, 51, 499, + 3, 2, 2, 2, 53, 505, 3, 2, 2, 2, 55, 512, 3, 2, 2, 2, 57, 516, 3, 2, 2, + 2, 59, 522, 3, 2, 2, 2, 61, 526, 3, 2, 2, 2, 63, 532, 3, 2, 2, 2, 65, 540, + 3, 2, 2, 2, 67, 544, 3, 2, 2, 2, 69, 547, 3, 2, 2, 2, 71, 551, 3, 2, 2, + 2, 73, 558, 3, 2, 2, 2, 75, 572, 3, 2, 2, 2, 77, 579, 3, 2, 2, 2, 79, 585, + 3, 2, 2, 2, 81, 593, 3, 2, 2, 2, 83, 596, 3, 2, 2, 2, 85, 604, 3, 2, 2, + 2, 87, 609, 3, 2, 2, 2, 89, 614, 3, 2, 2, 2, 91, 620, 3, 2, 2, 2, 93, 628, + 3, 2, 2, 2, 95, 635, 3, 2, 2, 2, 97, 642, 3, 2, 2, 2, 99, 651, 3, 2, 2, + 2, 101, 662, 3, 2, 2, 2, 103, 669, 3, 2, 2, 2, 105, 675, 3, 2, 2, 2, 107, + 688, 3, 2, 2, 2, 109, 701, 3, 2, 2, 2, 111, 719, 3, 2, 2, 2, 113, 728, + 3, 2, 2, 2, 115, 736, 3, 2, 2, 2, 117, 747, 3, 2, 2, 2, 119, 756, 3, 2, + 2, 2, 121, 763, 3, 2, 2, 2, 123, 768, 3, 2, 2, 2, 125, 775, 3, 2, 2, 2, + 127, 784, 3, 2, 2, 2, 129, 789, 3, 2, 2, 2, 131, 794, 3, 2, 2, 2, 133, + 799, 3, 2, 2, 2, 135, 803, 3, 2, 2, 2, 137, 810, 3, 2, 2, 2, 139, 817, + 3, 2, 2, 2, 141, 827, 3, 2, 2, 2, 143, 834, 3, 2, 2, 2, 145, 842, 3, 2, + 2, 2, 147, 847, 3, 2, 2, 2, 149, 851, 3, 2, 2, 2, 151, 859, 3, 2, 2, 2, + 153, 864, 3, 2, 2, 2, 155, 869, 3, 2, 2, 2, 157, 874, 3, 2, 2, 2, 159, + 880, 3, 2, 2, 2, 161, 887, 3, 2, 2, 2, 163, 890, 3, 2, 2, 2, 165, 897, + 3, 2, 2, 2, 167, 907, 3, 2, 2, 2, 169, 910, 3, 2, 2, 2, 171, 916, 3, 2, + 2, 2, 173, 924, 3, 2, 2, 2, 175, 934, 3, 2, 2, 2, 177, 940, 3, 2, 2, 2, + 179, 947, 3, 2, 2, 2, 181, 955, 3, 2, 2, 2, 183, 965, 3, 2, 2, 2, 185, + 970, 3, 2, 2, 2, 187, 973, 3, 2, 2, 2, 189, 980, 3, 2, 2, 2, 191, 985, + 3, 2, 2, 2, 193, 989, 3, 2, 2, 2, 195, 994, 3, 2, 2, 2, 197, 999, 3, 2, + 2, 2, 199, 1005, 3, 2, 2, 2, 201, 1011, 3, 2, 2, 2, 203, 1019, 3, 2, 2, + 2, 205, 1022, 3, 2, 2, 2, 207, 1026, 3, 2, 2, 2, 209, 1034, 3, 2, 2, 2, + 211, 1039, 3, 2, 2, 2, 213, 1042, 3, 2, 2, 2, 215, 1049, 3, 2, 2, 2, 217, + 1052, 3, 2, 2, 2, 219, 1055, 3, 2, 2, 2, 221, 1061, 3, 2, 2, 2, 223, 1067, + 3, 2, 2, 2, 225, 1072, 3, 2, 2, 2, 227, 1079, 3, 2, 2, 2, 229, 1087, 3, + 2, 2, 2, 231, 1093, 3, 2, 2, 2, 233, 1099, 3, 2, 2, 2, 235, 1109, 3, 2, + 2, 2, 237, 1120, 3, 2, 2, 2, 239, 1127, 3, 2, 2, 2, 241, 1135, 3, 2, 2, + 2, 243, 1143, 3, 2, 2, 2, 245, 1150, 3, 2, 2, 2, 247, 1158, 3, 2, 2, 2, + 249, 1167, 3, 2, 2, 2, 251, 1173, 3, 2, 2, 2, 253, 1182, 3, 2, 2, 2, 255, + 1186, 3, 2, 2, 2, 257, 1191, 3, 2, 2, 2, 259, 1201, 3, 2, 2, 2, 261, 1208, + 3, 2, 2, 2, 263, 1212, 3, 2, 2, 2, 265, 1218, 3, 2, 2, 2, 267, 1223, 3, + 2, 2, 2, 269, 1233, 3, 2, 2, 2, 271, 1238, 3, 2, 2, 2, 273, 1241, 3, 2, + 2, 2, 275, 1253, 3, 2, 2, 2, 277, 1261, 3, 2, 2, 2, 279, 1267, 3, 2, 2, + 2, 281, 1274, 3, 2, 2, 2, 283, 1281, 3, 2, 2, 2, 285, 1287, 3, 2, 2, 2, + 287, 1294, 3, 2, 2, 2, 289, 1301, 3, 2, 2, 2, 291, 1306, 3, 2, 2, 2, 293, + 1314, 3, 2, 2, 2, 295, 1319, 3, 2, 2, 2, 297, 1325, 3, 2, 2, 2, 299, 1330, + 3, 2, 2, 2, 301, 1338, 3, 2, 2, 2, 303, 1350, 3, 2, 2, 2, 305, 1355, 3, + 2, 2, 2, 307, 1365, 3, 2, 2, 2, 309, 1371, 3, 2, 2, 2, 311, 1381, 3, 2, + 2, 2, 313, 1391, 3, 2, 2, 2, 315, 1399, 3, 2, 2, 2, 317, 1409, 3, 2, 2, + 2, 319, 1419, 3, 2, 2, 2, 321, 1430, 3, 2, 2, 2, 323, 1434, 3, 2, 2, 2, + 325, 1445, 3, 2, 2, 2, 327, 1450, 3, 2, 2, 2, 329, 1460, 3, 2, 2, 2, 331, + 1466, 3, 2, 2, 2, 333, 1479, 3, 2, 2, 2, 335, 1484, 3, 2, 2, 2, 337, 1495, + 3, 2, 2, 2, 339, 1505, 3, 2, 2, 2, 341, 1512, 3, 2, 2, 2, 343, 1519, 3, + 2, 2, 2, 345, 1524, 3, 2, 2, 2, 347, 1530, 3, 2, 2, 2, 349, 1537, 3, 2, + 2, 2, 351, 1543, 3, 2, 2, 2, 353, 1549, 3, 2, 2, 2, 355, 1554, 3, 2, 2, + 2, 357, 1561, 3, 2, 2, 2, 359, 1568, 3, 2, 2, 2, 361, 1576, 3, 2, 2, 2, + 363, 1581, 3, 2, 2, 2, 365, 1588, 3, 2, 2, 2, 367, 1591, 3, 2, 2, 2, 369, + 1634, 3, 2, 2, 2, 371, 1677, 3, 2, 2, 2, 373, 1688, 3, 2, 2, 2, 375, 1690, + 3, 2, 2, 2, 377, 1701, 3, 2, 2, 2, 379, 1704, 3, 2, 2, 2, 381, 1722, 3, + 2, 2, 2, 383, 1736, 3, 2, 2, 2, 385, 1740, 3, 2, 2, 2, 387, 1742, 3, 2, + 2, 2, 389, 1744, 3, 2, 2, 2, 391, 1746, 3, 2, 2, 2, 393, 1748, 3, 2, 2, + 2, 395, 1750, 3, 2, 2, 2, 397, 1752, 3, 2, 2, 2, 399, 1754, 3, 2, 2, 2, + 401, 1756, 3, 2, 2, 2, 403, 1758, 3, 2, 2, 2, 405, 1760, 3, 2, 2, 2, 407, + 1762, 3, 2, 2, 2, 409, 1764, 3, 2, 2, 2, 411, 1766, 3, 2, 2, 2, 413, 1768, + 3, 2, 2, 2, 415, 1770, 3, 2, 2, 2, 417, 1772, 3, 2, 2, 2, 419, 1774, 3, + 2, 2, 2, 421, 1776, 3, 2, 2, 2, 423, 1778, 3, 2, 2, 2, 425, 1780, 3, 2, + 2, 2, 427, 1782, 3, 2, 2, 2, 429, 1784, 3, 2, 2, 2, 431, 1786, 3, 2, 2, + 2, 433, 1788, 3, 2, 2, 2, 435, 1790, 3, 2, 2, 2, 437, 1792, 3, 2, 2, 2, + 439, 1794, 3, 2, 2, 2, 441, 1796, 3, 2, 2, 2, 443, 444, 7, 61, 2, 2, 444, + 4, 3, 2, 2, 2, 445, 446, 7, 48, 2, 2, 446, 6, 3, 2, 2, 2, 447, 448, 7, + 42, 2, 2, 448, 8, 3, 2, 2, 2, 449, 450, 7, 43, 2, 2, 450, 10, 3, 2, 2, + 2, 451, 452, 7, 46, 2, 2, 452, 12, 3, 2, 2, 2, 453, 454, 7, 63, 2, 2, 454, + 14, 3, 2, 2, 2, 455, 456, 7, 44, 2, 2, 456, 16, 3, 2, 2, 2, 457, 458, 7, + 45, 2, 2, 458, 18, 3, 2, 2, 2, 459, 460, 7, 47, 2, 2, 460, 20, 3, 2, 2, + 2, 461, 462, 7, 128, 2, 2, 462, 22, 3, 2, 2, 2, 463, 464, 7, 126, 2, 2, + 464, 465, 7, 126, 2, 2, 465, 24, 3, 2, 2, 2, 466, 467, 7, 49, 2, 2, 467, + 26, 3, 2, 2, 2, 468, 469, 7, 39, 2, 2, 469, 28, 3, 2, 2, 2, 470, 471, 7, + 62, 2, 2, 471, 472, 7, 62, 2, 2, 472, 30, 3, 2, 2, 2, 473, 474, 7, 64, + 2, 2, 474, 475, 7, 64, 2, 2, 475, 32, 3, 2, 2, 2, 476, 477, 7, 40, 2, 2, + 477, 34, 3, 2, 2, 2, 478, 479, 7, 126, 2, 2, 479, 36, 3, 2, 2, 2, 480, + 481, 7, 62, 2, 2, 481, 38, 3, 2, 2, 2, 482, 483, 7, 62, 2, 2, 483, 484, + 7, 63, 2, 2, 484, 40, 3, 2, 2, 2, 485, 486, 7, 64, 2, 2, 486, 42, 3, 2, + 2, 2, 487, 488, 7, 64, 2, 2, 488, 489, 7, 63, 2, 2, 489, 44, 3, 2, 2, 2, + 490, 491, 7, 63, 2, 2, 491, 492, 7, 63, 2, 2, 492, 46, 3, 2, 2, 2, 493, + 494, 7, 35, 2, 2, 494, 495, 7, 63, 2, 2, 495, 48, 3, 2, 2, 2, 496, 497, + 7, 62, 2, 2, 497, 498, 7, 64, 2, 2, 498, 50, 3, 2, 2, 2, 499, 500, 5, 391, + 196, 2, 500, 501, 5, 393, 197, 2, 501, 502, 5, 419, 210, 2, 502, 503, 5, + 425, 213, 2, 503, 504, 5, 429, 215, 2, 504, 52, 3, 2, 2, 2, 505, 506, 5, + 391, 196, 2, 506, 507, 5, 395, 198, 2, 507, 508, 5, 429, 215, 2, 508, 509, + 5, 407, 204, 2, 509, 510, 5, 419, 210, 2, 510, 511, 5, 417, 209, 2, 511, + 54, 3, 2, 2, 2, 512, 513, 5, 391, 196, 2, 513, 514, 5, 397, 199, 2, 514, + 515, 5, 397, 199, 2, 515, 56, 3, 2, 2, 2, 516, 517, 5, 391, 196, 2, 517, + 518, 5, 401, 201, 2, 518, 519, 5, 429, 215, 2, 519, 520, 5, 399, 200, 2, + 520, 521, 5, 425, 213, 2, 521, 58, 3, 2, 2, 2, 522, 523, 5, 391, 196, 2, + 523, 524, 5, 413, 207, 2, 524, 525, 5, 413, 207, 2, 525, 60, 3, 2, 2, 2, + 526, 527, 5, 391, 196, 2, 527, 528, 5, 413, 207, 2, 528, 529, 5, 429, 215, + 2, 529, 530, 5, 399, 200, 2, 530, 531, 5, 425, 213, 2, 531, 62, 3, 2, 2, + 2, 532, 533, 5, 391, 196, 2, 533, 534, 5, 417, 209, 2, 534, 535, 5, 391, + 196, 2, 535, 536, 5, 413, 207, 2, 536, 537, 5, 439, 220, 2, 537, 538, 5, + 441, 221, 2, 538, 539, 5, 399, 200, 2, 539, 64, 3, 2, 2, 2, 540, 541, 5, + 391, 196, 2, 541, 542, 5, 417, 209, 2, 542, 543, 5, 397, 199, 2, 543, 66, + 3, 2, 2, 2, 544, 545, 5, 391, 196, 2, 545, 546, 5, 427, 214, 2, 546, 68, + 3, 2, 2, 2, 547, 548, 5, 391, 196, 2, 548, 549, 5, 427, 214, 2, 549, 550, + 5, 395, 198, 2, 550, 70, 3, 2, 2, 2, 551, 552, 5, 391, 196, 2, 552, 553, + 5, 429, 215, 2, 553, 554, 5, 429, 215, 2, 554, 555, 5, 391, 196, 2, 555, + 556, 5, 395, 198, 2, 556, 557, 5, 405, 203, 2, 557, 72, 3, 2, 2, 2, 558, + 559, 5, 391, 196, 2, 559, 560, 5, 431, 216, 2, 560, 561, 5, 429, 215, 2, + 561, 562, 5, 419, 210, 2, 562, 563, 5, 407, 204, 2, 563, 564, 5, 417, 209, + 2, 564, 565, 5, 395, 198, 2, 565, 566, 5, 425, 213, 2, 566, 567, 5, 399, + 200, 2, 567, 568, 5, 415, 208, 2, 568, 569, 5, 399, 200, 2, 569, 570, 5, + 417, 209, 2, 570, 571, 5, 429, 215, 2, 571, 74, 3, 2, 2, 2, 572, 573, 5, + 393, 197, 2, 573, 574, 5, 399, 200, 2, 574, 575, 5, 401, 201, 2, 575, 576, + 5, 419, 210, 2, 576, 577, 5, 425, 213, 2, 577, 578, 5, 399, 200, 2, 578, + 76, 3, 2, 2, 2, 579, 580, 5, 393, 197, 2, 580, 581, 5, 399, 200, 2, 581, + 582, 5, 403, 202, 2, 582, 583, 5, 407, 204, 2, 583, 584, 5, 417, 209, 2, + 584, 78, 3, 2, 2, 2, 585, 586, 5, 393, 197, 2, 586, 587, 5, 399, 200, 2, + 587, 588, 5, 429, 215, 2, 588, 589, 5, 435, 218, 2, 589, 590, 5, 399, 200, + 2, 590, 591, 5, 399, 200, 2, 591, 592, 5, 417, 209, 2, 592, 80, 3, 2, 2, + 2, 593, 594, 5, 393, 197, 2, 594, 595, 5, 439, 220, 2, 595, 82, 3, 2, 2, + 2, 596, 597, 5, 395, 198, 2, 597, 598, 5, 391, 196, 2, 598, 599, 5, 427, + 214, 2, 599, 600, 5, 395, 198, 2, 600, 601, 5, 391, 196, 2, 601, 602, 5, + 397, 199, 2, 602, 603, 5, 399, 200, 2, 603, 84, 3, 2, 2, 2, 604, 605, 5, + 395, 198, 2, 605, 606, 5, 391, 196, 2, 606, 607, 5, 427, 214, 2, 607, 608, + 5, 399, 200, 2, 608, 86, 3, 2, 2, 2, 609, 610, 5, 395, 198, 2, 610, 611, + 5, 391, 196, 2, 611, 612, 5, 427, 214, 2, 612, 613, 5, 429, 215, 2, 613, + 88, 3, 2, 2, 2, 614, 615, 5, 395, 198, 2, 615, 616, 5, 405, 203, 2, 616, + 617, 5, 399, 200, 2, 617, 618, 5, 395, 198, 2, 618, 619, 5, 411, 206, 2, + 619, 90, 3, 2, 2, 2, 620, 621, 5, 395, 198, 2, 621, 622, 5, 419, 210, 2, + 622, 623, 5, 413, 207, 2, 623, 624, 5, 413, 207, 2, 624, 625, 5, 391, 196, + 2, 625, 626, 5, 429, 215, 2, 626, 627, 5, 399, 200, 2, 627, 92, 3, 2, 2, + 2, 628, 629, 5, 395, 198, 2, 629, 630, 5, 419, 210, 2, 630, 631, 5, 413, + 207, 2, 631, 632, 5, 431, 216, 2, 632, 633, 5, 415, 208, 2, 633, 634, 5, + 417, 209, 2, 634, 94, 3, 2, 2, 2, 635, 636, 5, 395, 198, 2, 636, 637, 5, + 419, 210, 2, 637, 638, 5, 415, 208, 2, 638, 639, 5, 415, 208, 2, 639, 640, + 5, 407, 204, 2, 640, 641, 5, 429, 215, 2, 641, 96, 3, 2, 2, 2, 642, 643, + 5, 395, 198, 2, 643, 644, 5, 419, 210, 2, 644, 645, 5, 417, 209, 2, 645, + 646, 5, 401, 201, 2, 646, 647, 5, 413, 207, 2, 647, 648, 5, 407, 204, 2, + 648, 649, 5, 395, 198, 2, 649, 650, 5, 429, 215, 2, 650, 98, 3, 2, 2, 2, + 651, 652, 5, 395, 198, 2, 652, 653, 5, 419, 210, 2, 653, 654, 5, 417, 209, + 2, 654, 655, 5, 427, 214, 2, 655, 656, 5, 429, 215, 2, 656, 657, 5, 425, + 213, 2, 657, 658, 5, 391, 196, 2, 658, 659, 5, 407, 204, 2, 659, 660, 5, + 417, 209, 2, 660, 661, 5, 429, 215, 2, 661, 100, 3, 2, 2, 2, 662, 663, + 5, 395, 198, 2, 663, 664, 5, 425, 213, 2, 664, 665, 5, 399, 200, 2, 665, + 666, 5, 391, 196, 2, 666, 667, 5, 429, 215, 2, 667, 668, 5, 399, 200, 2, + 668, 102, 3, 2, 2, 2, 669, 670, 5, 395, 198, 2, 670, 671, 5, 425, 213, + 2, 671, 672, 5, 419, 210, 2, 672, 673, 5, 427, 214, 2, 673, 674, 5, 427, + 214, 2, 674, 104, 3, 2, 2, 2, 675, 676, 5, 395, 198, 2, 676, 677, 5, 431, + 216, 2, 677, 678, 5, 425, 213, 2, 678, 679, 5, 425, 213, 2, 679, 680, 5, + 399, 200, 2, 680, 681, 5, 417, 209, 2, 681, 682, 5, 429, 215, 2, 682, 683, + 7, 97, 2, 2, 683, 684, 5, 397, 199, 2, 684, 685, 5, 391, 196, 2, 685, 686, + 5, 429, 215, 2, 686, 687, 5, 399, 200, 2, 687, 106, 3, 2, 2, 2, 688, 689, + 5, 395, 198, 2, 689, 690, 5, 431, 216, 2, 690, 691, 5, 425, 213, 2, 691, + 692, 5, 425, 213, 2, 692, 693, 5, 399, 200, 2, 693, 694, 5, 417, 209, 2, + 694, 695, 5, 429, 215, 2, 695, 696, 7, 97, 2, 2, 696, 697, 5, 429, 215, + 2, 697, 698, 5, 407, 204, 2, 698, 699, 5, 415, 208, 2, 699, 700, 5, 399, + 200, 2, 700, 108, 3, 2, 2, 2, 701, 702, 5, 395, 198, 2, 702, 703, 5, 431, + 216, 2, 703, 704, 5, 425, 213, 2, 704, 705, 5, 425, 213, 2, 705, 706, 5, + 399, 200, 2, 706, 707, 5, 417, 209, 2, 707, 708, 5, 429, 215, 2, 708, 709, + 7, 97, 2, 2, 709, 710, 5, 429, 215, 2, 710, 711, 5, 407, 204, 2, 711, 712, + 5, 415, 208, 2, 712, 713, 5, 399, 200, 2, 713, 714, 5, 427, 214, 2, 714, + 715, 5, 429, 215, 2, 715, 716, 5, 391, 196, 2, 716, 717, 5, 415, 208, 2, + 717, 718, 5, 421, 211, 2, 718, 110, 3, 2, 2, 2, 719, 720, 5, 397, 199, + 2, 720, 721, 5, 391, 196, 2, 721, 722, 5, 429, 215, 2, 722, 723, 5, 391, + 196, 2, 723, 724, 5, 393, 197, 2, 724, 725, 5, 391, 196, 2, 725, 726, 5, + 427, 214, 2, 726, 727, 5, 399, 200, 2, 727, 112, 3, 2, 2, 2, 728, 729, + 5, 397, 199, 2, 729, 730, 5, 399, 200, 2, 730, 731, 5, 401, 201, 2, 731, + 732, 5, 391, 196, 2, 732, 733, 5, 431, 216, 2, 733, 734, 5, 413, 207, 2, + 734, 735, 5, 429, 215, 2, 735, 114, 3, 2, 2, 2, 736, 737, 5, 397, 199, + 2, 737, 738, 5, 399, 200, 2, 738, 739, 5, 401, 201, 2, 739, 740, 5, 399, + 200, 2, 740, 741, 5, 425, 213, 2, 741, 742, 5, 425, 213, 2, 742, 743, 5, + 391, 196, 2, 743, 744, 5, 393, 197, 2, 744, 745, 5, 413, 207, 2, 745, 746, + 5, 399, 200, 2, 746, 116, 3, 2, 2, 2, 747, 748, 5, 397, 199, 2, 748, 749, + 5, 399, 200, 2, 749, 750, 5, 401, 201, 2, 750, 751, 5, 399, 200, 2, 751, + 752, 5, 425, 213, 2, 752, 753, 5, 425, 213, 2, 753, 754, 5, 399, 200, 2, + 754, 755, 5, 397, 199, 2, 755, 118, 3, 2, 2, 2, 756, 757, 5, 397, 199, + 2, 757, 758, 5, 399, 200, 2, 758, 759, 5, 413, 207, 2, 759, 760, 5, 399, + 200, 2, 760, 761, 5, 429, 215, 2, 761, 762, 5, 399, 200, 2, 762, 120, 3, + 2, 2, 2, 763, 764, 5, 397, 199, 2, 764, 765, 5, 399, 200, 2, 765, 766, + 5, 427, 214, 2, 766, 767, 5, 395, 198, 2, 767, 122, 3, 2, 2, 2, 768, 769, + 5, 397, 199, 2, 769, 770, 5, 399, 200, 2, 770, 771, 5, 429, 215, 2, 771, + 772, 5, 391, 196, 2, 772, 773, 5, 395, 198, 2, 773, 774, 5, 405, 203, 2, + 774, 124, 3, 2, 2, 2, 775, 776, 5, 397, 199, 2, 776, 777, 5, 407, 204, + 2, 777, 778, 5, 427, 214, 2, 778, 779, 5, 429, 215, 2, 779, 780, 5, 407, + 204, 2, 780, 781, 5, 417, 209, 2, 781, 782, 5, 395, 198, 2, 782, 783, 5, + 429, 215, 2, 783, 126, 3, 2, 2, 2, 784, 785, 5, 397, 199, 2, 785, 786, + 5, 425, 213, 2, 786, 787, 5, 419, 210, 2, 787, 788, 5, 421, 211, 2, 788, + 128, 3, 2, 2, 2, 789, 790, 5, 399, 200, 2, 790, 791, 5, 391, 196, 2, 791, + 792, 5, 395, 198, 2, 792, 793, 5, 405, 203, 2, 793, 130, 3, 2, 2, 2, 794, + 795, 5, 399, 200, 2, 795, 796, 5, 413, 207, 2, 796, 797, 5, 427, 214, 2, + 797, 798, 5, 399, 200, 2, 798, 132, 3, 2, 2, 2, 799, 800, 5, 399, 200, + 2, 800, 801, 5, 417, 209, 2, 801, 802, 5, 397, 199, 2, 802, 134, 3, 2, + 2, 2, 803, 804, 5, 399, 200, 2, 804, 805, 5, 427, 214, 2, 805, 806, 5, + 395, 198, 2, 806, 807, 5, 391, 196, 2, 807, 808, 5, 421, 211, 2, 808, 809, + 5, 399, 200, 2, 809, 136, 3, 2, 2, 2, 810, 811, 5, 399, 200, 2, 811, 812, + 5, 437, 219, 2, 812, 813, 5, 395, 198, 2, 813, 814, 5, 399, 200, 2, 814, + 815, 5, 421, 211, 2, 815, 816, 5, 429, 215, 2, 816, 138, 3, 2, 2, 2, 817, + 818, 5, 399, 200, 2, 818, 819, 5, 437, 219, 2, 819, 820, 5, 395, 198, 2, + 820, 821, 5, 413, 207, 2, 821, 822, 5, 431, 216, 2, 822, 823, 5, 427, 214, + 2, 823, 824, 5, 407, 204, 2, 824, 825, 5, 433, 217, 2, 825, 826, 5, 399, + 200, 2, 826, 140, 3, 2, 2, 2, 827, 828, 5, 399, 200, 2, 828, 829, 5, 437, + 219, 2, 829, 830, 5, 407, 204, 2, 830, 831, 5, 427, 214, 2, 831, 832, 5, + 429, 215, 2, 832, 833, 5, 427, 214, 2, 833, 142, 3, 2, 2, 2, 834, 835, + 5, 399, 200, 2, 835, 836, 5, 437, 219, 2, 836, 837, 5, 421, 211, 2, 837, + 838, 5, 413, 207, 2, 838, 839, 5, 391, 196, 2, 839, 840, 5, 407, 204, 2, + 840, 841, 5, 417, 209, 2, 841, 144, 3, 2, 2, 2, 842, 843, 5, 401, 201, + 2, 843, 844, 5, 391, 196, 2, 844, 845, 5, 407, 204, 2, 845, 846, 5, 413, + 207, 2, 846, 146, 3, 2, 2, 2, 847, 848, 5, 401, 201, 2, 848, 849, 5, 419, + 210, 2, 849, 850, 5, 425, 213, 2, 850, 148, 3, 2, 2, 2, 851, 852, 5, 401, + 201, 2, 852, 853, 5, 419, 210, 2, 853, 854, 5, 425, 213, 2, 854, 855, 5, + 399, 200, 2, 855, 856, 5, 407, 204, 2, 856, 857, 5, 403, 202, 2, 857, 858, + 5, 417, 209, 2, 858, 150, 3, 2, 2, 2, 859, 860, 5, 401, 201, 2, 860, 861, + 5, 425, 213, 2, 861, 862, 5, 419, 210, 2, 862, 863, 5, 415, 208, 2, 863, + 152, 3, 2, 2, 2, 864, 865, 5, 401, 201, 2, 865, 866, 5, 431, 216, 2, 866, + 867, 5, 413, 207, 2, 867, 868, 5, 413, 207, 2, 868, 154, 3, 2, 2, 2, 869, + 870, 5, 403, 202, 2, 870, 871, 5, 413, 207, 2, 871, 872, 5, 419, 210, 2, + 872, 873, 5, 393, 197, 2, 873, 156, 3, 2, 2, 2, 874, 875, 5, 403, 202, + 2, 875, 876, 5, 425, 213, 2, 876, 877, 5, 419, 210, 2, 877, 878, 5, 431, + 216, 2, 878, 879, 5, 421, 211, 2, 879, 158, 3, 2, 2, 2, 880, 881, 5, 405, + 203, 2, 881, 882, 5, 391, 196, 2, 882, 883, 5, 433, 217, 2, 883, 884, 5, + 407, 204, 2, 884, 885, 5, 417, 209, 2, 885, 886, 5, 403, 202, 2, 886, 160, + 3, 2, 2, 2, 887, 888, 5, 407, 204, 2, 888, 889, 5, 401, 201, 2, 889, 162, + 3, 2, 2, 2, 890, 891, 5, 407, 204, 2, 891, 892, 5, 403, 202, 2, 892, 893, + 5, 417, 209, 2, 893, 894, 5, 419, 210, 2, 894, 895, 5, 425, 213, 2, 895, + 896, 5, 399, 200, 2, 896, 164, 3, 2, 2, 2, 897, 898, 5, 407, 204, 2, 898, + 899, 5, 415, 208, 2, 899, 900, 5, 415, 208, 2, 900, 901, 5, 399, 200, 2, + 901, 902, 5, 397, 199, 2, 902, 903, 5, 407, 204, 2, 903, 904, 5, 391, 196, + 2, 904, 905, 5, 429, 215, 2, 905, 906, 5, 399, 200, 2, 906, 166, 3, 2, + 2, 2, 907, 908, 5, 407, 204, 2, 908, 909, 5, 417, 209, 2, 909, 168, 3, + 2, 2, 2, 910, 911, 5, 407, 204, 2, 911, 912, 5, 417, 209, 2, 912, 913, + 5, 397, 199, 2, 913, 914, 5, 399, 200, 2, 914, 915, 5, 437, 219, 2, 915, + 170, 3, 2, 2, 2, 916, 917, 5, 407, 204, 2, 917, 918, 5, 417, 209, 2, 918, + 919, 5, 397, 199, 2, 919, 920, 5, 399, 200, 2, 920, 921, 5, 437, 219, 2, + 921, 922, 5, 399, 200, 2, 922, 923, 5, 397, 199, 2, 923, 172, 3, 2, 2, + 2, 924, 925, 5, 407, 204, 2, 925, 926, 5, 417, 209, 2, 926, 927, 5, 407, + 204, 2, 927, 928, 5, 429, 215, 2, 928, 929, 5, 407, 204, 2, 929, 930, 5, + 391, 196, 2, 930, 931, 5, 413, 207, 2, 931, 932, 5, 413, 207, 2, 932, 933, + 5, 439, 220, 2, 933, 174, 3, 2, 2, 2, 934, 935, 5, 407, 204, 2, 935, 936, + 5, 417, 209, 2, 936, 937, 5, 417, 209, 2, 937, 938, 5, 399, 200, 2, 938, + 939, 5, 425, 213, 2, 939, 176, 3, 2, 2, 2, 940, 941, 5, 407, 204, 2, 941, + 942, 5, 417, 209, 2, 942, 943, 5, 427, 214, 2, 943, 944, 5, 399, 200, 2, + 944, 945, 5, 425, 213, 2, 945, 946, 5, 429, 215, 2, 946, 178, 3, 2, 2, + 2, 947, 948, 5, 407, 204, 2, 948, 949, 5, 417, 209, 2, 949, 950, 5, 427, + 214, 2, 950, 951, 5, 429, 215, 2, 951, 952, 5, 399, 200, 2, 952, 953, 5, + 391, 196, 2, 953, 954, 5, 397, 199, 2, 954, 180, 3, 2, 2, 2, 955, 956, + 5, 407, 204, 2, 956, 957, 5, 417, 209, 2, 957, 958, 5, 429, 215, 2, 958, + 959, 5, 399, 200, 2, 959, 960, 5, 425, 213, 2, 960, 961, 5, 427, 214, 2, + 961, 962, 5, 399, 200, 2, 962, 963, 5, 395, 198, 2, 963, 964, 5, 429, 215, + 2, 964, 182, 3, 2, 2, 2, 965, 966, 5, 407, 204, 2, 966, 967, 5, 417, 209, + 2, 967, 968, 5, 429, 215, 2, 968, 969, 5, 419, 210, 2, 969, 184, 3, 2, + 2, 2, 970, 971, 5, 407, 204, 2, 971, 972, 5, 427, 214, 2, 972, 186, 3, + 2, 2, 2, 973, 974, 5, 407, 204, 2, 974, 975, 5, 427, 214, 2, 975, 976, + 5, 417, 209, 2, 976, 977, 5, 431, 216, 2, 977, 978, 5, 413, 207, 2, 978, + 979, 5, 413, 207, 2, 979, 188, 3, 2, 2, 2, 980, 981, 5, 409, 205, 2, 981, + 982, 5, 419, 210, 2, 982, 983, 5, 407, 204, 2, 983, 984, 5, 417, 209, 2, + 984, 190, 3, 2, 2, 2, 985, 986, 5, 411, 206, 2, 986, 987, 5, 399, 200, + 2, 987, 988, 5, 439, 220, 2, 988, 192, 3, 2, 2, 2, 989, 990, 5, 413, 207, + 2, 990, 991, 5, 399, 200, 2, 991, 992, 5, 401, 201, 2, 992, 993, 5, 429, + 215, 2, 993, 194, 3, 2, 2, 2, 994, 995, 5, 413, 207, 2, 995, 996, 5, 407, + 204, 2, 996, 997, 5, 411, 206, 2, 997, 998, 5, 399, 200, 2, 998, 196, 3, + 2, 2, 2, 999, 1000, 5, 413, 207, 2, 1000, 1001, 5, 407, 204, 2, 1001, 1002, + 5, 415, 208, 2, 1002, 1003, 5, 407, 204, 2, 1003, 1004, 5, 429, 215, 2, + 1004, 198, 3, 2, 2, 2, 1005, 1006, 5, 415, 208, 2, 1006, 1007, 5, 391, + 196, 2, 1007, 1008, 5, 429, 215, 2, 1008, 1009, 5, 395, 198, 2, 1009, 1010, + 5, 405, 203, 2, 1010, 200, 3, 2, 2, 2, 1011, 1012, 5, 417, 209, 2, 1012, + 1013, 5, 391, 196, 2, 1013, 1014, 5, 429, 215, 2, 1014, 1015, 5, 431, 216, + 2, 1015, 1016, 5, 425, 213, 2, 1016, 1017, 5, 391, 196, 2, 1017, 1018, + 5, 413, 207, 2, 1018, 202, 3, 2, 2, 2, 1019, 1020, 5, 417, 209, 2, 1020, + 1021, 5, 419, 210, 2, 1021, 204, 3, 2, 2, 2, 1022, 1023, 5, 417, 209, 2, + 1023, 1024, 5, 419, 210, 2, 1024, 1025, 5, 429, 215, 2, 1025, 206, 3, 2, + 2, 2, 1026, 1027, 5, 417, 209, 2, 1027, 1028, 5, 419, 210, 2, 1028, 1029, + 5, 429, 215, 2, 1029, 1030, 5, 417, 209, 2, 1030, 1031, 5, 431, 216, 2, + 1031, 1032, 5, 413, 207, 2, 1032, 1033, 5, 413, 207, 2, 1033, 208, 3, 2, + 2, 2, 1034, 1035, 5, 417, 209, 2, 1035, 1036, 5, 431, 216, 2, 1036, 1037, + 5, 413, 207, 2, 1037, 1038, 5, 413, 207, 2, 1038, 210, 3, 2, 2, 2, 1039, + 1040, 5, 419, 210, 2, 1040, 1041, 5, 401, 201, 2, 1041, 212, 3, 2, 2, 2, + 1042, 1043, 5, 419, 210, 2, 1043, 1044, 5, 401, 201, 2, 1044, 1045, 5, + 401, 201, 2, 1045, 1046, 5, 427, 214, 2, 1046, 1047, 5, 399, 200, 2, 1047, + 1048, 5, 429, 215, 2, 1048, 214, 3, 2, 2, 2, 1049, 1050, 5, 419, 210, 2, + 1050, 1051, 5, 417, 209, 2, 1051, 216, 3, 2, 2, 2, 1052, 1053, 5, 419, + 210, 2, 1053, 1054, 5, 425, 213, 2, 1054, 218, 3, 2, 2, 2, 1055, 1056, + 5, 419, 210, 2, 1056, 1057, 5, 425, 213, 2, 1057, 1058, 5, 397, 199, 2, + 1058, 1059, 5, 399, 200, 2, 1059, 1060, 5, 425, 213, 2, 1060, 220, 3, 2, + 2, 2, 1061, 1062, 5, 419, 210, 2, 1062, 1063, 5, 431, 216, 2, 1063, 1064, + 5, 429, 215, 2, 1064, 1065, 5, 399, 200, 2, 1065, 1066, 5, 425, 213, 2, + 1066, 222, 3, 2, 2, 2, 1067, 1068, 5, 421, 211, 2, 1068, 1069, 5, 413, + 207, 2, 1069, 1070, 5, 391, 196, 2, 1070, 1071, 5, 417, 209, 2, 1071, 224, + 3, 2, 2, 2, 1072, 1073, 5, 421, 211, 2, 1073, 1074, 5, 425, 213, 2, 1074, + 1075, 5, 391, 196, 2, 1075, 1076, 5, 403, 202, 2, 1076, 1077, 5, 415, 208, + 2, 1077, 1078, 5, 391, 196, 2, 1078, 226, 3, 2, 2, 2, 1079, 1080, 5, 421, + 211, 2, 1080, 1081, 5, 425, 213, 2, 1081, 1082, 5, 407, 204, 2, 1082, 1083, + 5, 415, 208, 2, 1083, 1084, 5, 391, 196, 2, 1084, 1085, 5, 425, 213, 2, + 1085, 1086, 5, 439, 220, 2, 1086, 228, 3, 2, 2, 2, 1087, 1088, 5, 423, + 212, 2, 1088, 1089, 5, 431, 216, 2, 1089, 1090, 5, 399, 200, 2, 1090, 1091, + 5, 425, 213, 2, 1091, 1092, 5, 439, 220, 2, 1092, 230, 3, 2, 2, 2, 1093, + 1094, 5, 425, 213, 2, 1094, 1095, 5, 391, 196, 2, 1095, 1096, 5, 407, 204, + 2, 1096, 1097, 5, 427, 214, 2, 1097, 1098, 5, 399, 200, 2, 1098, 232, 3, + 2, 2, 2, 1099, 1100, 5, 425, 213, 2, 1100, 1101, 5, 399, 200, 2, 1101, + 1102, 5, 395, 198, 2, 1102, 1103, 5, 431, 216, 2, 1103, 1104, 5, 425, 213, + 2, 1104, 1105, 5, 427, 214, 2, 1105, 1106, 5, 407, 204, 2, 1106, 1107, + 5, 433, 217, 2, 1107, 1108, 5, 399, 200, 2, 1108, 234, 3, 2, 2, 2, 1109, + 1110, 5, 425, 213, 2, 1110, 1111, 5, 399, 200, 2, 1111, 1112, 5, 401, 201, + 2, 1112, 1113, 5, 399, 200, 2, 1113, 1114, 5, 425, 213, 2, 1114, 1115, + 5, 399, 200, 2, 1115, 1116, 5, 417, 209, 2, 1116, 1117, 5, 395, 198, 2, + 1117, 1118, 5, 399, 200, 2, 1118, 1119, 5, 427, 214, 2, 1119, 236, 3, 2, + 2, 2, 1120, 1121, 5, 425, 213, 2, 1121, 1122, 5, 399, 200, 2, 1122, 1123, + 5, 403, 202, 2, 1123, 1124, 5, 399, 200, 2, 1124, 1125, 5, 437, 219, 2, + 1125, 1126, 5, 421, 211, 2, 1126, 238, 3, 2, 2, 2, 1127, 1128, 5, 425, + 213, 2, 1128, 1129, 5, 399, 200, 2, 1129, 1130, 5, 407, 204, 2, 1130, 1131, + 5, 417, 209, 2, 1131, 1132, 5, 397, 199, 2, 1132, 1133, 5, 399, 200, 2, + 1133, 1134, 5, 437, 219, 2, 1134, 240, 3, 2, 2, 2, 1135, 1136, 5, 425, + 213, 2, 1136, 1137, 5, 399, 200, 2, 1137, 1138, 5, 413, 207, 2, 1138, 1139, + 5, 399, 200, 2, 1139, 1140, 5, 391, 196, 2, 1140, 1141, 5, 427, 214, 2, + 1141, 1142, 5, 399, 200, 2, 1142, 242, 3, 2, 2, 2, 1143, 1144, 5, 425, + 213, 2, 1144, 1145, 5, 399, 200, 2, 1145, 1146, 5, 417, 209, 2, 1146, 1147, + 5, 391, 196, 2, 1147, 1148, 5, 415, 208, 2, 1148, 1149, 5, 399, 200, 2, + 1149, 244, 3, 2, 2, 2, 1150, 1151, 5, 425, 213, 2, 1151, 1152, 5, 399, + 200, 2, 1152, 1153, 5, 421, 211, 2, 1153, 1154, 5, 413, 207, 2, 1154, 1155, + 5, 391, 196, 2, 1155, 1156, 5, 395, 198, 2, 1156, 1157, 5, 399, 200, 2, + 1157, 246, 3, 2, 2, 2, 1158, 1159, 5, 425, 213, 2, 1159, 1160, 5, 399, + 200, 2, 1160, 1161, 5, 427, 214, 2, 1161, 1162, 5, 429, 215, 2, 1162, 1163, + 5, 425, 213, 2, 1163, 1164, 5, 407, 204, 2, 1164, 1165, 5, 395, 198, 2, + 1165, 1166, 5, 429, 215, 2, 1166, 248, 3, 2, 2, 2, 1167, 1168, 5, 425, + 213, 2, 1168, 1169, 5, 407, 204, 2, 1169, 1170, 5, 403, 202, 2, 1170, 1171, + 5, 405, 203, 2, 1171, 1172, 5, 429, 215, 2, 1172, 250, 3, 2, 2, 2, 1173, + 1174, 5, 425, 213, 2, 1174, 1175, 5, 419, 210, 2, 1175, 1176, 5, 413, 207, + 2, 1176, 1177, 5, 413, 207, 2, 1177, 1178, 5, 393, 197, 2, 1178, 1179, + 5, 391, 196, 2, 1179, 1180, 5, 395, 198, 2, 1180, 1181, 5, 411, 206, 2, + 1181, 252, 3, 2, 2, 2, 1182, 1183, 5, 425, 213, 2, 1183, 1184, 5, 419, + 210, 2, 1184, 1185, 5, 435, 218, 2, 1185, 254, 3, 2, 2, 2, 1186, 1187, + 5, 425, 213, 2, 1187, 1188, 5, 419, 210, 2, 1188, 1189, 5, 435, 218, 2, + 1189, 1190, 5, 427, 214, 2, 1190, 256, 3, 2, 2, 2, 1191, 1192, 5, 427, + 214, 2, 1192, 1193, 5, 391, 196, 2, 1193, 1194, 5, 433, 217, 2, 1194, 1195, + 5, 399, 200, 2, 1195, 1196, 5, 421, 211, 2, 1196, 1197, 5, 419, 210, 2, + 1197, 1198, 5, 407, 204, 2, 1198, 1199, 5, 417, 209, 2, 1199, 1200, 5, + 429, 215, 2, 1200, 258, 3, 2, 2, 2, 1201, 1202, 5, 427, 214, 2, 1202, 1203, + 5, 399, 200, 2, 1203, 1204, 5, 413, 207, 2, 1204, 1205, 5, 399, 200, 2, + 1205, 1206, 5, 395, 198, 2, 1206, 1207, 5, 429, 215, 2, 1207, 260, 3, 2, + 2, 2, 1208, 1209, 5, 427, 214, 2, 1209, 1210, 5, 399, 200, 2, 1210, 1211, + 5, 429, 215, 2, 1211, 262, 3, 2, 2, 2, 1212, 1213, 5, 429, 215, 2, 1213, + 1214, 5, 391, 196, 2, 1214, 1215, 5, 393, 197, 2, 1215, 1216, 5, 413, 207, + 2, 1216, 1217, 5, 399, 200, 2, 1217, 264, 3, 2, 2, 2, 1218, 1219, 5, 429, + 215, 2, 1219, 1220, 5, 399, 200, 2, 1220, 1221, 5, 415, 208, 2, 1221, 1222, + 5, 421, 211, 2, 1222, 266, 3, 2, 2, 2, 1223, 1224, 5, 429, 215, 2, 1224, + 1225, 5, 399, 200, 2, 1225, 1226, 5, 415, 208, 2, 1226, 1227, 5, 421, 211, + 2, 1227, 1228, 5, 419, 210, 2, 1228, 1229, 5, 425, 213, 2, 1229, 1230, + 5, 391, 196, 2, 1230, 1231, 5, 425, 213, 2, 1231, 1232, 5, 439, 220, 2, + 1232, 268, 3, 2, 2, 2, 1233, 1234, 5, 429, 215, 2, 1234, 1235, 5, 405, + 203, 2, 1235, 1236, 5, 399, 200, 2, 1236, 1237, 5, 417, 209, 2, 1237, 270, + 3, 2, 2, 2, 1238, 1239, 5, 429, 215, 2, 1239, 1240, 5, 419, 210, 2, 1240, + 272, 3, 2, 2, 2, 1241, 1242, 5, 429, 215, 2, 1242, 1243, 5, 425, 213, 2, + 1243, 1244, 5, 391, 196, 2, 1244, 1245, 5, 417, 209, 2, 1245, 1246, 5, + 427, 214, 2, 1246, 1247, 5, 391, 196, 2, 1247, 1248, 5, 395, 198, 2, 1248, + 1249, 5, 429, 215, 2, 1249, 1250, 5, 407, 204, 2, 1250, 1251, 5, 419, 210, + 2, 1251, 1252, 5, 417, 209, 2, 1252, 274, 3, 2, 2, 2, 1253, 1254, 5, 429, + 215, 2, 1254, 1255, 5, 425, 213, 2, 1255, 1256, 5, 407, 204, 2, 1256, 1257, + 5, 403, 202, 2, 1257, 1258, 5, 403, 202, 2, 1258, 1259, 5, 399, 200, 2, + 1259, 1260, 5, 425, 213, 2, 1260, 276, 3, 2, 2, 2, 1261, 1262, 5, 431, + 216, 2, 1262, 1263, 5, 417, 209, 2, 1263, 1264, 5, 407, 204, 2, 1264, 1265, + 5, 419, 210, 2, 1265, 1266, 5, 417, 209, 2, 1266, 278, 3, 2, 2, 2, 1267, + 1268, 5, 431, 216, 2, 1268, 1269, 5, 417, 209, 2, 1269, 1270, 5, 407, 204, + 2, 1270, 1271, 5, 423, 212, 2, 1271, 1272, 5, 431, 216, 2, 1272, 1273, + 5, 399, 200, 2, 1273, 280, 3, 2, 2, 2, 1274, 1275, 5, 431, 216, 2, 1275, + 1276, 5, 421, 211, 2, 1276, 1277, 5, 397, 199, 2, 1277, 1278, 5, 391, 196, + 2, 1278, 1279, 5, 429, 215, 2, 1279, 1280, 5, 399, 200, 2, 1280, 282, 3, + 2, 2, 2, 1281, 1282, 5, 431, 216, 2, 1282, 1283, 5, 427, 214, 2, 1283, + 1284, 5, 407, 204, 2, 1284, 1285, 5, 417, 209, 2, 1285, 1286, 5, 403, 202, + 2, 1286, 284, 3, 2, 2, 2, 1287, 1288, 5, 433, 217, 2, 1288, 1289, 5, 391, + 196, 2, 1289, 1290, 5, 395, 198, 2, 1290, 1291, 5, 431, 216, 2, 1291, 1292, + 5, 431, 216, 2, 1292, 1293, 5, 415, 208, 2, 1293, 286, 3, 2, 2, 2, 1294, + 1295, 5, 433, 217, 2, 1295, 1296, 5, 391, 196, 2, 1296, 1297, 5, 413, 207, + 2, 1297, 1298, 5, 431, 216, 2, 1298, 1299, 5, 399, 200, 2, 1299, 1300, + 5, 427, 214, 2, 1300, 288, 3, 2, 2, 2, 1301, 1302, 5, 433, 217, 2, 1302, + 1303, 5, 407, 204, 2, 1303, 1304, 5, 399, 200, 2, 1304, 1305, 5, 435, 218, + 2, 1305, 290, 3, 2, 2, 2, 1306, 1307, 5, 433, 217, 2, 1307, 1308, 5, 407, + 204, 2, 1308, 1309, 5, 425, 213, 2, 1309, 1310, 5, 429, 215, 2, 1310, 1311, + 5, 431, 216, 2, 1311, 1312, 5, 391, 196, 2, 1312, 1313, 5, 413, 207, 2, + 1313, 292, 3, 2, 2, 2, 1314, 1315, 5, 435, 218, 2, 1315, 1316, 5, 405, + 203, 2, 1316, 1317, 5, 399, 200, 2, 1317, 1318, 5, 417, 209, 2, 1318, 294, + 3, 2, 2, 2, 1319, 1320, 5, 435, 218, 2, 1320, 1321, 5, 405, 203, 2, 1321, + 1322, 5, 399, 200, 2, 1322, 1323, 5, 425, 213, 2, 1323, 1324, 5, 399, 200, + 2, 1324, 296, 3, 2, 2, 2, 1325, 1326, 5, 435, 218, 2, 1326, 1327, 5, 407, + 204, 2, 1327, 1328, 5, 429, 215, 2, 1328, 1329, 5, 405, 203, 2, 1329, 298, + 3, 2, 2, 2, 1330, 1331, 5, 435, 218, 2, 1331, 1332, 5, 407, 204, 2, 1332, + 1333, 5, 429, 215, 2, 1333, 1334, 5, 405, 203, 2, 1334, 1335, 5, 419, 210, + 2, 1335, 1336, 5, 431, 216, 2, 1336, 1337, 5, 429, 215, 2, 1337, 300, 3, + 2, 2, 2, 1338, 1339, 5, 401, 201, 2, 1339, 1340, 5, 407, 204, 2, 1340, + 1341, 5, 425, 213, 2, 1341, 1342, 5, 427, 214, 2, 1342, 1343, 5, 429, 215, + 2, 1343, 1344, 7, 97, 2, 2, 1344, 1345, 5, 433, 217, 2, 1345, 1346, 5, + 391, 196, 2, 1346, 1347, 5, 413, 207, 2, 1347, 1348, 5, 431, 216, 2, 1348, + 1349, 5, 399, 200, 2, 1349, 302, 3, 2, 2, 2, 1350, 1351, 5, 419, 210, 2, + 1351, 1352, 5, 433, 217, 2, 1352, 1353, 5, 399, 200, 2, 1353, 1354, 5, + 425, 213, 2, 1354, 304, 3, 2, 2, 2, 1355, 1356, 5, 421, 211, 2, 1356, 1357, + 5, 391, 196, 2, 1357, 1358, 5, 425, 213, 2, 1358, 1359, 5, 429, 215, 2, + 1359, 1360, 5, 407, 204, 2, 1360, 1361, 5, 429, 215, 2, 1361, 1362, 5, + 407, 204, 2, 1362, 1363, 5, 419, 210, 2, 1363, 1364, 5, 417, 209, 2, 1364, + 306, 3, 2, 2, 2, 1365, 1366, 5, 425, 213, 2, 1366, 1367, 5, 391, 196, 2, + 1367, 1368, 5, 417, 209, 2, 1368, 1369, 5, 403, 202, 2, 1369, 1370, 5, + 399, 200, 2, 1370, 308, 3, 2, 2, 2, 1371, 1372, 5, 421, 211, 2, 1372, 1373, + 5, 425, 213, 2, 1373, 1374, 5, 399, 200, 2, 1374, 1375, 5, 395, 198, 2, + 1375, 1376, 5, 399, 200, 2, 1376, 1377, 5, 397, 199, 2, 1377, 1378, 5, + 407, 204, 2, 1378, 1379, 5, 417, 209, 2, 1379, 1380, 5, 403, 202, 2, 1380, + 310, 3, 2, 2, 2, 1381, 1382, 5, 431, 216, 2, 1382, 1383, 5, 417, 209, 2, + 1383, 1384, 5, 393, 197, 2, 1384, 1385, 5, 419, 210, 2, 1385, 1386, 5, + 431, 216, 2, 1386, 1387, 5, 417, 209, 2, 1387, 1388, 5, 397, 199, 2, 1388, + 1389, 5, 399, 200, 2, 1389, 1390, 5, 397, 199, 2, 1390, 312, 3, 2, 2, 2, + 1391, 1392, 5, 395, 198, 2, 1392, 1393, 5, 431, 216, 2, 1393, 1394, 5, + 425, 213, 2, 1394, 1395, 5, 425, 213, 2, 1395, 1396, 5, 399, 200, 2, 1396, + 1397, 5, 417, 209, 2, 1397, 1398, 5, 429, 215, 2, 1398, 314, 3, 2, 2, 2, + 1399, 1400, 5, 401, 201, 2, 1400, 1401, 5, 419, 210, 2, 1401, 1402, 5, + 413, 207, 2, 1402, 1403, 5, 413, 207, 2, 1403, 1404, 5, 419, 210, 2, 1404, + 1405, 5, 435, 218, 2, 1405, 1406, 5, 407, 204, 2, 1406, 1407, 5, 417, 209, + 2, 1407, 1408, 5, 403, 202, 2, 1408, 316, 3, 2, 2, 2, 1409, 1410, 5, 395, + 198, 2, 1410, 1411, 5, 431, 216, 2, 1411, 1412, 5, 415, 208, 2, 1412, 1413, + 5, 399, 200, 2, 1413, 1414, 7, 97, 2, 2, 1414, 1415, 5, 397, 199, 2, 1415, + 1416, 5, 407, 204, 2, 1416, 1417, 5, 427, 214, 2, 1417, 1418, 5, 429, 215, + 2, 1418, 318, 3, 2, 2, 2, 1419, 1420, 5, 397, 199, 2, 1420, 1421, 5, 399, + 200, 2, 1421, 1422, 5, 417, 209, 2, 1422, 1423, 5, 427, 214, 2, 1423, 1424, + 5, 399, 200, 2, 1424, 1425, 7, 97, 2, 2, 1425, 1426, 5, 425, 213, 2, 1426, + 1427, 5, 391, 196, 2, 1427, 1428, 5, 417, 209, 2, 1428, 1429, 5, 411, 206, + 2, 1429, 320, 3, 2, 2, 2, 1430, 1431, 5, 413, 207, 2, 1431, 1432, 5, 391, + 196, 2, 1432, 1433, 5, 403, 202, 2, 1433, 322, 3, 2, 2, 2, 1434, 1435, + 5, 413, 207, 2, 1435, 1436, 5, 391, 196, 2, 1436, 1437, 5, 427, 214, 2, + 1437, 1438, 5, 429, 215, 2, 1438, 1439, 7, 97, 2, 2, 1439, 1440, 5, 433, + 217, 2, 1440, 1441, 5, 391, 196, 2, 1441, 1442, 5, 413, 207, 2, 1442, 1443, + 5, 431, 216, 2, 1443, 1444, 5, 399, 200, 2, 1444, 324, 3, 2, 2, 2, 1445, + 1446, 5, 413, 207, 2, 1446, 1447, 5, 399, 200, 2, 1447, 1448, 5, 391, 196, + 2, 1448, 1449, 5, 397, 199, 2, 1449, 326, 3, 2, 2, 2, 1450, 1451, 5, 417, + 209, 2, 1451, 1452, 5, 429, 215, 2, 1452, 1453, 5, 405, 203, 2, 1453, 1454, + 7, 97, 2, 2, 1454, 1455, 5, 433, 217, 2, 1455, 1456, 5, 391, 196, 2, 1456, + 1457, 5, 413, 207, 2, 1457, 1458, 5, 431, 216, 2, 1458, 1459, 5, 399, 200, + 2, 1459, 328, 3, 2, 2, 2, 1460, 1461, 5, 417, 209, 2, 1461, 1462, 5, 429, + 215, 2, 1462, 1463, 5, 407, 204, 2, 1463, 1464, 5, 413, 207, 2, 1464, 1465, + 5, 399, 200, 2, 1465, 330, 3, 2, 2, 2, 1466, 1467, 5, 421, 211, 2, 1467, + 1468, 5, 399, 200, 2, 1468, 1469, 5, 425, 213, 2, 1469, 1470, 5, 395, 198, + 2, 1470, 1471, 5, 399, 200, 2, 1471, 1472, 5, 417, 209, 2, 1472, 1473, + 5, 429, 215, 2, 1473, 1474, 7, 97, 2, 2, 1474, 1475, 5, 425, 213, 2, 1475, + 1476, 5, 391, 196, 2, 1476, 1477, 5, 417, 209, 2, 1477, 1478, 5, 411, 206, + 2, 1478, 332, 3, 2, 2, 2, 1479, 1480, 5, 425, 213, 2, 1480, 1481, 5, 391, + 196, 2, 1481, 1482, 5, 417, 209, 2, 1482, 1483, 5, 411, 206, 2, 1483, 334, + 3, 2, 2, 2, 1484, 1485, 5, 425, 213, 2, 1485, 1486, 5, 419, 210, 2, 1486, + 1487, 5, 435, 218, 2, 1487, 1488, 7, 97, 2, 2, 1488, 1489, 5, 417, 209, + 2, 1489, 1490, 5, 431, 216, 2, 1490, 1491, 5, 415, 208, 2, 1491, 1492, + 5, 393, 197, 2, 1492, 1493, 5, 399, 200, 2, 1493, 1494, 5, 425, 213, 2, + 1494, 336, 3, 2, 2, 2, 1495, 1496, 5, 403, 202, 2, 1496, 1497, 5, 399, + 200, 2, 1497, 1498, 5, 417, 209, 2, 1498, 1499, 5, 399, 200, 2, 1499, 1500, + 5, 425, 213, 2, 1500, 1501, 5, 391, 196, 2, 1501, 1502, 5, 429, 215, 2, + 1502, 1503, 5, 399, 200, 2, 1503, 1504, 5, 397, 199, 2, 1504, 338, 3, 2, + 2, 2, 1505, 1506, 5, 391, 196, 2, 1506, 1507, 5, 413, 207, 2, 1507, 1508, + 5, 435, 218, 2, 1508, 1509, 5, 391, 196, 2, 1509, 1510, 5, 439, 220, 2, + 1510, 1511, 5, 427, 214, 2, 1511, 340, 3, 2, 2, 2, 1512, 1513, 5, 427, + 214, 2, 1513, 1514, 5, 429, 215, 2, 1514, 1515, 5, 419, 210, 2, 1515, 1516, + 5, 425, 213, 2, 1516, 1517, 5, 399, 200, 2, 1517, 1518, 5, 397, 199, 2, + 1518, 342, 3, 2, 2, 2, 1519, 1520, 5, 429, 215, 2, 1520, 1521, 5, 425, + 213, 2, 1521, 1522, 5, 431, 216, 2, 1522, 1523, 5, 399, 200, 2, 1523, 344, + 3, 2, 2, 2, 1524, 1525, 5, 401, 201, 2, 1525, 1526, 5, 391, 196, 2, 1526, + 1527, 5, 413, 207, 2, 1527, 1528, 5, 427, 214, 2, 1528, 1529, 5, 399, 200, + 2, 1529, 346, 3, 2, 2, 2, 1530, 1531, 5, 435, 218, 2, 1531, 1532, 5, 407, + 204, 2, 1532, 1533, 5, 417, 209, 2, 1533, 1534, 5, 397, 199, 2, 1534, 1535, + 5, 419, 210, 2, 1535, 1536, 5, 435, 218, 2, 1536, 348, 3, 2, 2, 2, 1537, + 1538, 5, 417, 209, 2, 1538, 1539, 5, 431, 216, 2, 1539, 1540, 5, 413, 207, + 2, 1540, 1541, 5, 413, 207, 2, 1541, 1542, 5, 427, 214, 2, 1542, 350, 3, + 2, 2, 2, 1543, 1544, 5, 401, 201, 2, 1544, 1545, 5, 407, 204, 2, 1545, + 1546, 5, 425, 213, 2, 1546, 1547, 5, 427, 214, 2, 1547, 1548, 5, 429, 215, + 2, 1548, 352, 3, 2, 2, 2, 1549, 1550, 5, 413, 207, 2, 1550, 1551, 5, 391, + 196, 2, 1551, 1552, 5, 427, 214, 2, 1552, 1553, 5, 429, 215, 2, 1553, 354, + 3, 2, 2, 2, 1554, 1555, 5, 401, 201, 2, 1555, 1556, 5, 407, 204, 2, 1556, + 1557, 5, 413, 207, 2, 1557, 1558, 5, 429, 215, 2, 1558, 1559, 5, 399, 200, + 2, 1559, 1560, 5, 425, 213, 2, 1560, 356, 3, 2, 2, 2, 1561, 1562, 5, 403, + 202, 2, 1562, 1563, 5, 425, 213, 2, 1563, 1564, 5, 419, 210, 2, 1564, 1565, + 5, 431, 216, 2, 1565, 1566, 5, 421, 211, 2, 1566, 1567, 5, 427, 214, 2, + 1567, 358, 3, 2, 2, 2, 1568, 1569, 5, 399, 200, 2, 1569, 1570, 5, 437, + 219, 2, 1570, 1571, 5, 395, 198, 2, 1571, 1572, 5, 413, 207, 2, 1572, 1573, + 5, 431, 216, 2, 1573, 1574, 5, 397, 199, 2, 1574, 1575, 5, 399, 200, 2, + 1575, 360, 3, 2, 2, 2, 1576, 1577, 5, 429, 215, 2, 1577, 1578, 5, 407, + 204, 2, 1578, 1579, 5, 399, 200, 2, 1579, 1580, 5, 427, 214, 2, 1580, 362, + 3, 2, 2, 2, 1581, 1582, 5, 419, 210, 2, 1582, 1583, 5, 429, 215, 2, 1583, + 1584, 5, 405, 203, 2, 1584, 1585, 5, 399, 200, 2, 1585, 1586, 5, 425, 213, + 2, 1586, 1587, 5, 427, 214, 2, 1587, 364, 3, 2, 2, 2, 1588, 1589, 5, 397, + 199, 2, 1589, 1590, 5, 419, 210, 2, 1590, 366, 3, 2, 2, 2, 1591, 1592, + 5, 417, 209, 2, 1592, 1593, 5, 419, 210, 2, 1593, 1594, 5, 429, 215, 2, + 1594, 1595, 5, 405, 203, 2, 1595, 1596, 5, 407, 204, 2, 1596, 1597, 5, + 417, 209, 2, 1597, 1598, 5, 403, 202, 2, 1598, 368, 3, 2, 2, 2, 1599, 1605, + 7, 36, 2, 2, 1600, 1604, 10, 2, 2, 2, 1601, 1602, 7, 36, 2, 2, 1602, 1604, + 7, 36, 2, 2, 1603, 1600, 3, 2, 2, 2, 1603, 1601, 3, 2, 2, 2, 1604, 1607, + 3, 2, 2, 2, 1605, 1603, 3, 2, 2, 2, 1605, 1606, 3, 2, 2, 2, 1606, 1608, + 3, 2, 2, 2, 1607, 1605, 3, 2, 2, 2, 1608, 1635, 7, 36, 2, 2, 1609, 1615, + 7, 98, 2, 2, 1610, 1614, 10, 3, 2, 2, 1611, 1612, 7, 98, 2, 2, 1612, 1614, + 7, 98, 2, 2, 1613, 1610, 3, 2, 2, 2, 1613, 1611, 3, 2, 2, 2, 1614, 1617, + 3, 2, 2, 2, 1615, 1613, 3, 2, 2, 2, 1615, 1616, 3, 2, 2, 2, 1616, 1618, + 3, 2, 2, 2, 1617, 1615, 3, 2, 2, 2, 1618, 1635, 7, 98, 2, 2, 1619, 1623, + 7, 93, 2, 2, 1620, 1622, 10, 4, 2, 2, 1621, 1620, 3, 2, 2, 2, 1622, 1625, + 3, 2, 2, 2, 1623, 1621, 3, 2, 2, 2, 1623, 1624, 3, 2, 2, 2, 1624, 1626, + 3, 2, 2, 2, 1625, 1623, 3, 2, 2, 2, 1626, 1635, 7, 95, 2, 2, 1627, 1631, + 9, 5, 2, 2, 1628, 1630, 9, 6, 2, 2, 1629, 1628, 3, 2, 2, 2, 1630, 1633, + 3, 2, 2, 2, 1631, 1629, 3, 2, 2, 2, 1631, 1632, 3, 2, 2, 2, 1632, 1635, + 3, 2, 2, 2, 1633, 1631, 3, 2, 2, 2, 1634, 1599, 3, 2, 2, 2, 1634, 1609, + 3, 2, 2, 2, 1634, 1619, 3, 2, 2, 2, 1634, 1627, 3, 2, 2, 2, 1635, 370, + 3, 2, 2, 2, 1636, 1638, 5, 389, 195, 2, 1637, 1636, 3, 2, 2, 2, 1638, 1639, + 3, 2, 2, 2, 1639, 1637, 3, 2, 2, 2, 1639, 1640, 3, 2, 2, 2, 1640, 1648, + 3, 2, 2, 2, 1641, 1645, 7, 48, 2, 2, 1642, 1644, 5, 389, 195, 2, 1643, + 1642, 3, 2, 2, 2, 1644, 1647, 3, 2, 2, 2, 1645, 1643, 3, 2, 2, 2, 1645, + 1646, 3, 2, 2, 2, 1646, 1649, 3, 2, 2, 2, 1647, 1645, 3, 2, 2, 2, 1648, + 1641, 3, 2, 2, 2, 1648, 1649, 3, 2, 2, 2, 1649, 1657, 3, 2, 2, 2, 1650, + 1652, 7, 48, 2, 2, 1651, 1653, 5, 389, 195, 2, 1652, 1651, 3, 2, 2, 2, + 1653, 1654, 3, 2, 2, 2, 1654, 1652, 3, 2, 2, 2, 1654, 1655, 3, 2, 2, 2, + 1655, 1657, 3, 2, 2, 2, 1656, 1637, 3, 2, 2, 2, 1656, 1650, 3, 2, 2, 2, + 1657, 1667, 3, 2, 2, 2, 1658, 1660, 5, 399, 200, 2, 1659, 1661, 9, 7, 2, + 2, 1660, 1659, 3, 2, 2, 2, 1660, 1661, 3, 2, 2, 2, 1661, 1663, 3, 2, 2, + 2, 1662, 1664, 5, 389, 195, 2, 1663, 1662, 3, 2, 2, 2, 1664, 1665, 3, 2, + 2, 2, 1665, 1663, 3, 2, 2, 2, 1665, 1666, 3, 2, 2, 2, 1666, 1668, 3, 2, + 2, 2, 1667, 1658, 3, 2, 2, 2, 1667, 1668, 3, 2, 2, 2, 1668, 1678, 3, 2, + 2, 2, 1669, 1670, 7, 50, 2, 2, 1670, 1671, 7, 122, 2, 2, 1671, 1673, 3, + 2, 2, 2, 1672, 1674, 5, 387, 194, 2, 1673, 1672, 3, 2, 2, 2, 1674, 1675, + 3, 2, 2, 2, 1675, 1673, 3, 2, 2, 2, 1675, 1676, 3, 2, 2, 2, 1676, 1678, + 3, 2, 2, 2, 1677, 1656, 3, 2, 2, 2, 1677, 1669, 3, 2, 2, 2, 1678, 372, + 3, 2, 2, 2, 1679, 1683, 7, 65, 2, 2, 1680, 1682, 5, 389, 195, 2, 1681, + 1680, 3, 2, 2, 2, 1682, 1685, 3, 2, 2, 2, 1683, 1681, 3, 2, 2, 2, 1683, + 1684, 3, 2, 2, 2, 1684, 1689, 3, 2, 2, 2, 1685, 1683, 3, 2, 2, 2, 1686, + 1687, 9, 8, 2, 2, 1687, 1689, 5, 369, 185, 2, 1688, 1679, 3, 2, 2, 2, 1688, + 1686, 3, 2, 2, 2, 1689, 374, 3, 2, 2, 2, 1690, 1696, 7, 41, 2, 2, 1691, + 1695, 10, 9, 2, 2, 1692, 1693, 7, 41, 2, 2, 1693, 1695, 7, 41, 2, 2, 1694, + 1691, 3, 2, 2, 2, 1694, 1692, 3, 2, 2, 2, 1695, 1698, 3, 2, 2, 2, 1696, + 1694, 3, 2, 2, 2, 1696, 1697, 3, 2, 2, 2, 1697, 1699, 3, 2, 2, 2, 1698, + 1696, 3, 2, 2, 2, 1699, 1700, 7, 41, 2, 2, 1700, 376, 3, 2, 2, 2, 1701, + 1702, 5, 437, 219, 2, 1702, 1703, 5, 375, 188, 2, 1703, 378, 3, 2, 2, 2, + 1704, 1705, 7, 47, 2, 2, 1705, 1706, 7, 47, 2, 2, 1706, 1710, 3, 2, 2, + 2, 1707, 1709, 10, 10, 2, 2, 1708, 1707, 3, 2, 2, 2, 1709, 1712, 3, 2, + 2, 2, 1710, 1708, 3, 2, 2, 2, 1710, 1711, 3, 2, 2, 2, 1711, 1718, 3, 2, + 2, 2, 1712, 1710, 3, 2, 2, 2, 1713, 1715, 7, 15, 2, 2, 1714, 1713, 3, 2, + 2, 2, 1714, 1715, 3, 2, 2, 2, 1715, 1716, 3, 2, 2, 2, 1716, 1719, 7, 12, + 2, 2, 1717, 1719, 7, 2, 2, 3, 1718, 1714, 3, 2, 2, 2, 1718, 1717, 3, 2, + 2, 2, 1719, 1720, 3, 2, 2, 2, 1720, 1721, 8, 190, 2, 2, 1721, 380, 3, 2, + 2, 2, 1722, 1723, 7, 49, 2, 2, 1723, 1724, 7, 44, 2, 2, 1724, 1728, 3, + 2, 2, 2, 1725, 1727, 11, 2, 2, 2, 1726, 1725, 3, 2, 2, 2, 1727, 1730, 3, + 2, 2, 2, 1728, 1729, 3, 2, 2, 2, 1728, 1726, 3, 2, 2, 2, 1729, 1731, 3, + 2, 2, 2, 1730, 1728, 3, 2, 2, 2, 1731, 1732, 7, 44, 2, 2, 1732, 1733, 7, + 49, 2, 2, 1733, 1734, 3, 2, 2, 2, 1734, 1735, 8, 191, 2, 2, 1735, 382, + 3, 2, 2, 2, 1736, 1737, 9, 11, 2, 2, 1737, 1738, 3, 2, 2, 2, 1738, 1739, + 8, 192, 2, 2, 1739, 384, 3, 2, 2, 2, 1740, 1741, 11, 2, 2, 2, 1741, 386, + 3, 2, 2, 2, 1742, 1743, 9, 12, 2, 2, 1743, 388, 3, 2, 2, 2, 1744, 1745, + 9, 13, 2, 2, 1745, 390, 3, 2, 2, 2, 1746, 1747, 9, 14, 2, 2, 1747, 392, + 3, 2, 2, 2, 1748, 1749, 9, 15, 2, 2, 1749, 394, 3, 2, 2, 2, 1750, 1751, + 9, 16, 2, 2, 1751, 396, 3, 2, 2, 2, 1752, 1753, 9, 17, 2, 2, 1753, 398, + 3, 2, 2, 2, 1754, 1755, 9, 18, 2, 2, 1755, 400, 3, 2, 2, 2, 1756, 1757, + 9, 19, 2, 2, 1757, 402, 3, 2, 2, 2, 1758, 1759, 9, 20, 2, 2, 1759, 404, + 3, 2, 2, 2, 1760, 1761, 9, 21, 2, 2, 1761, 406, 3, 2, 2, 2, 1762, 1763, + 9, 22, 2, 2, 1763, 408, 3, 2, 2, 2, 1764, 1765, 9, 23, 2, 2, 1765, 410, + 3, 2, 2, 2, 1766, 1767, 9, 24, 2, 2, 1767, 412, 3, 2, 2, 2, 1768, 1769, + 9, 25, 2, 2, 1769, 414, 3, 2, 2, 2, 1770, 1771, 9, 26, 2, 2, 1771, 416, + 3, 2, 2, 2, 1772, 1773, 9, 27, 2, 2, 1773, 418, 3, 2, 2, 2, 1774, 1775, + 9, 28, 2, 2, 1775, 420, 3, 2, 2, 2, 1776, 1777, 9, 29, 2, 2, 1777, 422, + 3, 2, 2, 2, 1778, 1779, 9, 30, 2, 2, 1779, 424, 3, 2, 2, 2, 1780, 1781, + 9, 31, 2, 2, 1781, 426, 3, 2, 2, 2, 1782, 1783, 9, 32, 2, 2, 1783, 428, + 3, 2, 2, 2, 1784, 1785, 9, 33, 2, 2, 1785, 430, 3, 2, 2, 2, 1786, 1787, + 9, 34, 2, 2, 1787, 432, 3, 2, 2, 2, 1788, 1789, 9, 35, 2, 2, 1789, 434, + 3, 2, 2, 2, 1790, 1791, 9, 36, 2, 2, 1791, 436, 3, 2, 2, 2, 1792, 1793, + 9, 37, 2, 2, 1793, 438, 3, 2, 2, 2, 1794, 1795, 9, 38, 2, 2, 1795, 440, + 3, 2, 2, 2, 1796, 1797, 9, 39, 2, 2, 1797, 442, 3, 2, 2, 2, 28, 2, 1603, + 1605, 1613, 1615, 1623, 1631, 1634, 1639, 1645, 1648, 1654, 1656, 1660, + 1665, 1667, 1675, 1677, 1683, 1688, 1694, 1696, 1710, 1714, 1718, 1728, + 3, 2, 3, 2, } -var lexerDeserializer = antlr.NewATNDeserializer(nil) -var lexerAtn = lexerDeserializer.DeserializeFromUInt16(serializedLexerAtn) - var lexerChannelNames = []string{ "DEFAULT_TOKEN_CHANNEL", "HIDDEN", } @@ -712,57 +877,65 @@ var lexerLiteralNames = []string{ var lexerSymbolicNames = []string{ "", "SCOL", "DOT", "OPEN_PAR", "CLOSE_PAR", "COMMA", "ASSIGN", "STAR", "PLUS", "MINUS", "TILDE", "PIPE2", "DIV", "MOD", "LT2", "GT2", "AMP", "PIPE", - "LT", "LT_EQ", "GT", "GT_EQ", "EQ", "NOT_EQ1", "NOT_EQ2", "K_ABORT", "K_ACTION", - "K_ADD", "K_AFTER", "K_ALL", "K_ALTER", "K_ANALYZE", "K_AND", "K_AS", "K_ASC", - "K_ATTACH", "K_AUTOINCREMENT", "K_BEFORE", "K_BEGIN", "K_BETWEEN", "K_BY", - "K_CASCADE", "K_CASE", "K_CAST", "K_CHECK", "K_COLLATE", "K_COLUMN", "K_COMMIT", - "K_CONFLICT", "K_CONSTRAINT", "K_CREATE", "K_CROSS", "K_CURRENT_DATE", - "K_CURRENT_TIME", "K_CURRENT_TIMESTAMP", "K_DATABASE", "K_DEFAULT", "K_DEFERRABLE", - "K_DEFERRED", "K_DELETE", "K_DESC", "K_DETACH", "K_DISTINCT", "K_DROP", - "K_EACH", "K_ELSE", "K_END", "K_ESCAPE", "K_EXCEPT", "K_EXCLUSIVE", "K_EXISTS", - "K_EXPLAIN", "K_FAIL", "K_FOR", "K_FOREIGN", "K_FROM", "K_FULL", "K_GLOB", - "K_GROUP", "K_HAVING", "K_IF", "K_IGNORE", "K_IMMEDIATE", "K_IN", "K_INDEX", - "K_INDEXED", "K_INITIALLY", "K_INNER", "K_INSERT", "K_INSTEAD", "K_INTERSECT", - "K_INTO", "K_IS", "K_ISNULL", "K_JOIN", "K_KEY", "K_LEFT", "K_LIKE", "K_LIMIT", - "K_MATCH", "K_NATURAL", "K_NO", "K_NOT", "K_NOTNULL", "K_NULL", "K_OF", - "K_OFFSET", "K_ON", "K_OR", "K_ORDER", "K_OUTER", "K_PLAN", "K_PRAGMA", - "K_PRIMARY", "K_QUERY", "K_RAISE", "K_RECURSIVE", "K_REFERENCES", "K_REGEXP", - "K_REINDEX", "K_RELEASE", "K_RENAME", "K_REPLACE", "K_RESTRICT", "K_RIGHT", - "K_ROLLBACK", "K_ROW", "K_SAVEPOINT", "K_SELECT", "K_SET", "K_TABLE", "K_TEMP", - "K_TEMPORARY", "K_THEN", "K_TO", "K_TRANSACTION", "K_TRIGGER", "K_UNION", - "K_UNIQUE", "K_UPDATE", "K_USING", "K_VACUUM", "K_VALUES", "K_VIEW", "K_VIRTUAL", - "K_WHEN", "K_WHERE", "K_WITH", "K_WITHOUT", "IDENTIFIER", "NUMERIC_LITERAL", - "BIND_PARAMETER", "STRING_LITERAL", "BLOB_LITERAL", "SINGLE_LINE_COMMENT", - "MULTILINE_COMMENT", "SPACES", "UNEXPECTED_CHAR", + "LT", "LT_EQ", "GT", "GT_EQ", "EQ", "NOT_EQ1", "NOT_EQ2", "ABORT_", "ACTION_", + "ADD_", "AFTER_", "ALL_", "ALTER_", "ANALYZE_", "AND_", "AS_", "ASC_", + "ATTACH_", "AUTOINCREMENT_", "BEFORE_", "BEGIN_", "BETWEEN_", "BY_", "CASCADE_", + "CASE_", "CAST_", "CHECK_", "COLLATE_", "COLUMN_", "COMMIT_", "CONFLICT_", + "CONSTRAINT_", "CREATE_", "CROSS_", "CURRENT_DATE_", "CURRENT_TIME_", "CURRENT_TIMESTAMP_", + "DATABASE_", "DEFAULT_", "DEFERRABLE_", "DEFERRED_", "DELETE_", "DESC_", + "DETACH_", "DISTINCT_", "DROP_", "EACH_", "ELSE_", "END_", "ESCAPE_", "EXCEPT_", + "EXCLUSIVE_", "EXISTS_", "EXPLAIN_", "FAIL_", "FOR_", "FOREIGN_", "FROM_", + "FULL_", "GLOB_", "GROUP_", "HAVING_", "IF_", "IGNORE_", "IMMEDIATE_", + "IN_", "INDEX_", "INDEXED_", "INITIALLY_", "INNER_", "INSERT_", "INSTEAD_", + "INTERSECT_", "INTO_", "IS_", "ISNULL_", "JOIN_", "KEY_", "LEFT_", "LIKE_", + "LIMIT_", "MATCH_", "NATURAL_", "NO_", "NOT_", "NOTNULL_", "NULL_", "OF_", + "OFFSET_", "ON_", "OR_", "ORDER_", "OUTER_", "PLAN_", "PRAGMA_", "PRIMARY_", + "QUERY_", "RAISE_", "RECURSIVE_", "REFERENCES_", "REGEXP_", "REINDEX_", + "RELEASE_", "RENAME_", "REPLACE_", "RESTRICT_", "RIGHT_", "ROLLBACK_", + "ROW_", "ROWS_", "SAVEPOINT_", "SELECT_", "SET_", "TABLE_", "TEMP_", "TEMPORARY_", + "THEN_", "TO_", "TRANSACTION_", "TRIGGER_", "UNION_", "UNIQUE_", "UPDATE_", + "USING_", "VACUUM_", "VALUES_", "VIEW_", "VIRTUAL_", "WHEN_", "WHERE_", + "WITH_", "WITHOUT_", "FIRST_VALUE_", "OVER_", "PARTITION_", "RANGE_", "PRECEDING_", + "UNBOUNDED_", "CURRENT_", "FOLLOWING_", "CUME_DIST_", "DENSE_RANK_", "LAG_", + "LAST_VALUE_", "LEAD_", "NTH_VALUE_", "NTILE_", "PERCENT_RANK_", "RANK_", + "ROW_NUMBER_", "GENERATED_", "ALWAYS_", "STORED_", "TRUE_", "FALSE_", "WINDOW_", + "NULLS_", "FIRST_", "LAST_", "FILTER_", "GROUPS_", "EXCLUDE_", "TIES_", + "OTHERS_", "DO_", "NOTHING_", "IDENTIFIER", "NUMERIC_LITERAL", "BIND_PARAMETER", + "STRING_LITERAL", "BLOB_LITERAL", "SINGLE_LINE_COMMENT", "MULTILINE_COMMENT", + "SPACES", "UNEXPECTED_CHAR", } var lexerRuleNames = []string{ "SCOL", "DOT", "OPEN_PAR", "CLOSE_PAR", "COMMA", "ASSIGN", "STAR", "PLUS", "MINUS", "TILDE", "PIPE2", "DIV", "MOD", "LT2", "GT2", "AMP", "PIPE", "LT", - "LT_EQ", "GT", "GT_EQ", "EQ", "NOT_EQ1", "NOT_EQ2", "K_ABORT", "K_ACTION", - "K_ADD", "K_AFTER", "K_ALL", "K_ALTER", "K_ANALYZE", "K_AND", "K_AS", "K_ASC", - "K_ATTACH", "K_AUTOINCREMENT", "K_BEFORE", "K_BEGIN", "K_BETWEEN", "K_BY", - "K_CASCADE", "K_CASE", "K_CAST", "K_CHECK", "K_COLLATE", "K_COLUMN", "K_COMMIT", - "K_CONFLICT", "K_CONSTRAINT", "K_CREATE", "K_CROSS", "K_CURRENT_DATE", - "K_CURRENT_TIME", "K_CURRENT_TIMESTAMP", "K_DATABASE", "K_DEFAULT", "K_DEFERRABLE", - "K_DEFERRED", "K_DELETE", "K_DESC", "K_DETACH", "K_DISTINCT", "K_DROP", - "K_EACH", "K_ELSE", "K_END", "K_ESCAPE", "K_EXCEPT", "K_EXCLUSIVE", "K_EXISTS", - "K_EXPLAIN", "K_FAIL", "K_FOR", "K_FOREIGN", "K_FROM", "K_FULL", "K_GLOB", - "K_GROUP", "K_HAVING", "K_IF", "K_IGNORE", "K_IMMEDIATE", "K_IN", "K_INDEX", - "K_INDEXED", "K_INITIALLY", "K_INNER", "K_INSERT", "K_INSTEAD", "K_INTERSECT", - "K_INTO", "K_IS", "K_ISNULL", "K_JOIN", "K_KEY", "K_LEFT", "K_LIKE", "K_LIMIT", - "K_MATCH", "K_NATURAL", "K_NO", "K_NOT", "K_NOTNULL", "K_NULL", "K_OF", - "K_OFFSET", "K_ON", "K_OR", "K_ORDER", "K_OUTER", "K_PLAN", "K_PRAGMA", - "K_PRIMARY", "K_QUERY", "K_RAISE", "K_RECURSIVE", "K_REFERENCES", "K_REGEXP", - "K_REINDEX", "K_RELEASE", "K_RENAME", "K_REPLACE", "K_RESTRICT", "K_RIGHT", - "K_ROLLBACK", "K_ROW", "K_SAVEPOINT", "K_SELECT", "K_SET", "K_TABLE", "K_TEMP", - "K_TEMPORARY", "K_THEN", "K_TO", "K_TRANSACTION", "K_TRIGGER", "K_UNION", - "K_UNIQUE", "K_UPDATE", "K_USING", "K_VACUUM", "K_VALUES", "K_VIEW", "K_VIRTUAL", - "K_WHEN", "K_WHERE", "K_WITH", "K_WITHOUT", "IDENTIFIER", "NUMERIC_LITERAL", - "BIND_PARAMETER", "STRING_LITERAL", "BLOB_LITERAL", "SINGLE_LINE_COMMENT", - "MULTILINE_COMMENT", "SPACES", "UNEXPECTED_CHAR", "DIGIT", "A", "B", "C", - "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", - "S", "T", "U", "V", "W", "X", "Y", "Z", + "LT_EQ", "GT", "GT_EQ", "EQ", "NOT_EQ1", "NOT_EQ2", "ABORT_", "ACTION_", + "ADD_", "AFTER_", "ALL_", "ALTER_", "ANALYZE_", "AND_", "AS_", "ASC_", + "ATTACH_", "AUTOINCREMENT_", "BEFORE_", "BEGIN_", "BETWEEN_", "BY_", "CASCADE_", + "CASE_", "CAST_", "CHECK_", "COLLATE_", "COLUMN_", "COMMIT_", "CONFLICT_", + "CONSTRAINT_", "CREATE_", "CROSS_", "CURRENT_DATE_", "CURRENT_TIME_", "CURRENT_TIMESTAMP_", + "DATABASE_", "DEFAULT_", "DEFERRABLE_", "DEFERRED_", "DELETE_", "DESC_", + "DETACH_", "DISTINCT_", "DROP_", "EACH_", "ELSE_", "END_", "ESCAPE_", "EXCEPT_", + "EXCLUSIVE_", "EXISTS_", "EXPLAIN_", "FAIL_", "FOR_", "FOREIGN_", "FROM_", + "FULL_", "GLOB_", "GROUP_", "HAVING_", "IF_", "IGNORE_", "IMMEDIATE_", + "IN_", "INDEX_", "INDEXED_", "INITIALLY_", "INNER_", "INSERT_", "INSTEAD_", + "INTERSECT_", "INTO_", "IS_", "ISNULL_", "JOIN_", "KEY_", "LEFT_", "LIKE_", + "LIMIT_", "MATCH_", "NATURAL_", "NO_", "NOT_", "NOTNULL_", "NULL_", "OF_", + "OFFSET_", "ON_", "OR_", "ORDER_", "OUTER_", "PLAN_", "PRAGMA_", "PRIMARY_", + "QUERY_", "RAISE_", "RECURSIVE_", "REFERENCES_", "REGEXP_", "REINDEX_", + "RELEASE_", "RENAME_", "REPLACE_", "RESTRICT_", "RIGHT_", "ROLLBACK_", + "ROW_", "ROWS_", "SAVEPOINT_", "SELECT_", "SET_", "TABLE_", "TEMP_", "TEMPORARY_", + "THEN_", "TO_", "TRANSACTION_", "TRIGGER_", "UNION_", "UNIQUE_", "UPDATE_", + "USING_", "VACUUM_", "VALUES_", "VIEW_", "VIRTUAL_", "WHEN_", "WHERE_", + "WITH_", "WITHOUT_", "FIRST_VALUE_", "OVER_", "PARTITION_", "RANGE_", "PRECEDING_", + "UNBOUNDED_", "CURRENT_", "FOLLOWING_", "CUME_DIST_", "DENSE_RANK_", "LAG_", + "LAST_VALUE_", "LEAD_", "NTH_VALUE_", "NTILE_", "PERCENT_RANK_", "RANK_", + "ROW_NUMBER_", "GENERATED_", "ALWAYS_", "STORED_", "TRUE_", "FALSE_", "WINDOW_", + "NULLS_", "FIRST_", "LAST_", "FILTER_", "GROUPS_", "EXCLUDE_", "TIES_", + "OTHERS_", "DO_", "NOTHING_", "IDENTIFIER", "NUMERIC_LITERAL", "BIND_PARAMETER", + "STRING_LITERAL", "BLOB_LITERAL", "SINGLE_LINE_COMMENT", "MULTILINE_COMMENT", + "SPACES", "UNEXPECTED_CHAR", "HEX_DIGIT", "DIGIT", "A", "B", "C", "D", + "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", + "T", "U", "V", "W", "X", "Y", "Z", } type SQLiteLexer struct { @@ -772,18 +945,20 @@ type SQLiteLexer struct { // TODO: EOF string } -var lexerDecisionToDFA = make([]*antlr.DFA, len(lexerAtn.DecisionToState)) - -func init() { +// NewSQLiteLexer produces a new lexer instance for the optional input antlr.CharStream. +// +// The *SQLiteLexer instance produced may be reused by calling the SetInputStream method. +// The initial lexer configuration is expensive to construct, and the object is not thread-safe; +// however, if used within a Golang sync.Pool, the construction cost amortizes well and the +// objects can be used in a thread-safe manner. +func NewSQLiteLexer(input antlr.CharStream) *SQLiteLexer { + l := new(SQLiteLexer) + lexerDeserializer := antlr.NewATNDeserializer(nil) + lexerAtn := lexerDeserializer.DeserializeFromUInt16(serializedLexerAtn) + lexerDecisionToDFA := make([]*antlr.DFA, len(lexerAtn.DecisionToState)) for index, ds := range lexerAtn.DecisionToState { lexerDecisionToDFA[index] = antlr.NewDFA(ds, index) } -} - -func NewSQLiteLexer(input antlr.CharStream) *SQLiteLexer { - - l := new(SQLiteLexer) - l.BaseLexer = antlr.NewBaseLexer(input) l.Interpreter = antlr.NewLexerATNSimulator(l, lexerAtn, lexerDecisionToDFA, antlr.NewPredictionContextCache()) @@ -792,7 +967,7 @@ func NewSQLiteLexer(input antlr.CharStream) *SQLiteLexer { l.RuleNames = lexerRuleNames l.LiteralNames = lexerLiteralNames l.SymbolicNames = lexerSymbolicNames - l.GrammarFileName = "SQLite.g4" + l.GrammarFileName = "SQLiteLexer.g4" // TODO: l.EOF = antlr.TokenEOF return l @@ -824,137 +999,172 @@ const ( SQLiteLexerEQ = 22 SQLiteLexerNOT_EQ1 = 23 SQLiteLexerNOT_EQ2 = 24 - SQLiteLexerK_ABORT = 25 - SQLiteLexerK_ACTION = 26 - SQLiteLexerK_ADD = 27 - SQLiteLexerK_AFTER = 28 - SQLiteLexerK_ALL = 29 - SQLiteLexerK_ALTER = 30 - SQLiteLexerK_ANALYZE = 31 - SQLiteLexerK_AND = 32 - SQLiteLexerK_AS = 33 - SQLiteLexerK_ASC = 34 - SQLiteLexerK_ATTACH = 35 - SQLiteLexerK_AUTOINCREMENT = 36 - SQLiteLexerK_BEFORE = 37 - SQLiteLexerK_BEGIN = 38 - SQLiteLexerK_BETWEEN = 39 - SQLiteLexerK_BY = 40 - SQLiteLexerK_CASCADE = 41 - SQLiteLexerK_CASE = 42 - SQLiteLexerK_CAST = 43 - SQLiteLexerK_CHECK = 44 - SQLiteLexerK_COLLATE = 45 - SQLiteLexerK_COLUMN = 46 - SQLiteLexerK_COMMIT = 47 - SQLiteLexerK_CONFLICT = 48 - SQLiteLexerK_CONSTRAINT = 49 - SQLiteLexerK_CREATE = 50 - SQLiteLexerK_CROSS = 51 - SQLiteLexerK_CURRENT_DATE = 52 - SQLiteLexerK_CURRENT_TIME = 53 - SQLiteLexerK_CURRENT_TIMESTAMP = 54 - SQLiteLexerK_DATABASE = 55 - SQLiteLexerK_DEFAULT = 56 - SQLiteLexerK_DEFERRABLE = 57 - SQLiteLexerK_DEFERRED = 58 - SQLiteLexerK_DELETE = 59 - SQLiteLexerK_DESC = 60 - SQLiteLexerK_DETACH = 61 - SQLiteLexerK_DISTINCT = 62 - SQLiteLexerK_DROP = 63 - SQLiteLexerK_EACH = 64 - SQLiteLexerK_ELSE = 65 - SQLiteLexerK_END = 66 - SQLiteLexerK_ESCAPE = 67 - SQLiteLexerK_EXCEPT = 68 - SQLiteLexerK_EXCLUSIVE = 69 - SQLiteLexerK_EXISTS = 70 - SQLiteLexerK_EXPLAIN = 71 - SQLiteLexerK_FAIL = 72 - SQLiteLexerK_FOR = 73 - SQLiteLexerK_FOREIGN = 74 - SQLiteLexerK_FROM = 75 - SQLiteLexerK_FULL = 76 - SQLiteLexerK_GLOB = 77 - SQLiteLexerK_GROUP = 78 - SQLiteLexerK_HAVING = 79 - SQLiteLexerK_IF = 80 - SQLiteLexerK_IGNORE = 81 - SQLiteLexerK_IMMEDIATE = 82 - SQLiteLexerK_IN = 83 - SQLiteLexerK_INDEX = 84 - SQLiteLexerK_INDEXED = 85 - SQLiteLexerK_INITIALLY = 86 - SQLiteLexerK_INNER = 87 - SQLiteLexerK_INSERT = 88 - SQLiteLexerK_INSTEAD = 89 - SQLiteLexerK_INTERSECT = 90 - SQLiteLexerK_INTO = 91 - SQLiteLexerK_IS = 92 - SQLiteLexerK_ISNULL = 93 - SQLiteLexerK_JOIN = 94 - SQLiteLexerK_KEY = 95 - SQLiteLexerK_LEFT = 96 - SQLiteLexerK_LIKE = 97 - SQLiteLexerK_LIMIT = 98 - SQLiteLexerK_MATCH = 99 - SQLiteLexerK_NATURAL = 100 - SQLiteLexerK_NO = 101 - SQLiteLexerK_NOT = 102 - SQLiteLexerK_NOTNULL = 103 - SQLiteLexerK_NULL = 104 - SQLiteLexerK_OF = 105 - SQLiteLexerK_OFFSET = 106 - SQLiteLexerK_ON = 107 - SQLiteLexerK_OR = 108 - SQLiteLexerK_ORDER = 109 - SQLiteLexerK_OUTER = 110 - SQLiteLexerK_PLAN = 111 - SQLiteLexerK_PRAGMA = 112 - SQLiteLexerK_PRIMARY = 113 - SQLiteLexerK_QUERY = 114 - SQLiteLexerK_RAISE = 115 - SQLiteLexerK_RECURSIVE = 116 - SQLiteLexerK_REFERENCES = 117 - SQLiteLexerK_REGEXP = 118 - SQLiteLexerK_REINDEX = 119 - SQLiteLexerK_RELEASE = 120 - SQLiteLexerK_RENAME = 121 - SQLiteLexerK_REPLACE = 122 - SQLiteLexerK_RESTRICT = 123 - SQLiteLexerK_RIGHT = 124 - SQLiteLexerK_ROLLBACK = 125 - SQLiteLexerK_ROW = 126 - SQLiteLexerK_SAVEPOINT = 127 - SQLiteLexerK_SELECT = 128 - SQLiteLexerK_SET = 129 - SQLiteLexerK_TABLE = 130 - SQLiteLexerK_TEMP = 131 - SQLiteLexerK_TEMPORARY = 132 - SQLiteLexerK_THEN = 133 - SQLiteLexerK_TO = 134 - SQLiteLexerK_TRANSACTION = 135 - SQLiteLexerK_TRIGGER = 136 - SQLiteLexerK_UNION = 137 - SQLiteLexerK_UNIQUE = 138 - SQLiteLexerK_UPDATE = 139 - SQLiteLexerK_USING = 140 - SQLiteLexerK_VACUUM = 141 - SQLiteLexerK_VALUES = 142 - SQLiteLexerK_VIEW = 143 - SQLiteLexerK_VIRTUAL = 144 - SQLiteLexerK_WHEN = 145 - SQLiteLexerK_WHERE = 146 - SQLiteLexerK_WITH = 147 - SQLiteLexerK_WITHOUT = 148 - SQLiteLexerIDENTIFIER = 149 - SQLiteLexerNUMERIC_LITERAL = 150 - SQLiteLexerBIND_PARAMETER = 151 - SQLiteLexerSTRING_LITERAL = 152 - SQLiteLexerBLOB_LITERAL = 153 - SQLiteLexerSINGLE_LINE_COMMENT = 154 - SQLiteLexerMULTILINE_COMMENT = 155 - SQLiteLexerSPACES = 156 - SQLiteLexerUNEXPECTED_CHAR = 157 + SQLiteLexerABORT_ = 25 + SQLiteLexerACTION_ = 26 + SQLiteLexerADD_ = 27 + SQLiteLexerAFTER_ = 28 + SQLiteLexerALL_ = 29 + SQLiteLexerALTER_ = 30 + SQLiteLexerANALYZE_ = 31 + SQLiteLexerAND_ = 32 + SQLiteLexerAS_ = 33 + SQLiteLexerASC_ = 34 + SQLiteLexerATTACH_ = 35 + SQLiteLexerAUTOINCREMENT_ = 36 + SQLiteLexerBEFORE_ = 37 + SQLiteLexerBEGIN_ = 38 + SQLiteLexerBETWEEN_ = 39 + SQLiteLexerBY_ = 40 + SQLiteLexerCASCADE_ = 41 + SQLiteLexerCASE_ = 42 + SQLiteLexerCAST_ = 43 + SQLiteLexerCHECK_ = 44 + SQLiteLexerCOLLATE_ = 45 + SQLiteLexerCOLUMN_ = 46 + SQLiteLexerCOMMIT_ = 47 + SQLiteLexerCONFLICT_ = 48 + SQLiteLexerCONSTRAINT_ = 49 + SQLiteLexerCREATE_ = 50 + SQLiteLexerCROSS_ = 51 + SQLiteLexerCURRENT_DATE_ = 52 + SQLiteLexerCURRENT_TIME_ = 53 + SQLiteLexerCURRENT_TIMESTAMP_ = 54 + SQLiteLexerDATABASE_ = 55 + SQLiteLexerDEFAULT_ = 56 + SQLiteLexerDEFERRABLE_ = 57 + SQLiteLexerDEFERRED_ = 58 + SQLiteLexerDELETE_ = 59 + SQLiteLexerDESC_ = 60 + SQLiteLexerDETACH_ = 61 + SQLiteLexerDISTINCT_ = 62 + SQLiteLexerDROP_ = 63 + SQLiteLexerEACH_ = 64 + SQLiteLexerELSE_ = 65 + SQLiteLexerEND_ = 66 + SQLiteLexerESCAPE_ = 67 + SQLiteLexerEXCEPT_ = 68 + SQLiteLexerEXCLUSIVE_ = 69 + SQLiteLexerEXISTS_ = 70 + SQLiteLexerEXPLAIN_ = 71 + SQLiteLexerFAIL_ = 72 + SQLiteLexerFOR_ = 73 + SQLiteLexerFOREIGN_ = 74 + SQLiteLexerFROM_ = 75 + SQLiteLexerFULL_ = 76 + SQLiteLexerGLOB_ = 77 + SQLiteLexerGROUP_ = 78 + SQLiteLexerHAVING_ = 79 + SQLiteLexerIF_ = 80 + SQLiteLexerIGNORE_ = 81 + SQLiteLexerIMMEDIATE_ = 82 + SQLiteLexerIN_ = 83 + SQLiteLexerINDEX_ = 84 + SQLiteLexerINDEXED_ = 85 + SQLiteLexerINITIALLY_ = 86 + SQLiteLexerINNER_ = 87 + SQLiteLexerINSERT_ = 88 + SQLiteLexerINSTEAD_ = 89 + SQLiteLexerINTERSECT_ = 90 + SQLiteLexerINTO_ = 91 + SQLiteLexerIS_ = 92 + SQLiteLexerISNULL_ = 93 + SQLiteLexerJOIN_ = 94 + SQLiteLexerKEY_ = 95 + SQLiteLexerLEFT_ = 96 + SQLiteLexerLIKE_ = 97 + SQLiteLexerLIMIT_ = 98 + SQLiteLexerMATCH_ = 99 + SQLiteLexerNATURAL_ = 100 + SQLiteLexerNO_ = 101 + SQLiteLexerNOT_ = 102 + SQLiteLexerNOTNULL_ = 103 + SQLiteLexerNULL_ = 104 + SQLiteLexerOF_ = 105 + SQLiteLexerOFFSET_ = 106 + SQLiteLexerON_ = 107 + SQLiteLexerOR_ = 108 + SQLiteLexerORDER_ = 109 + SQLiteLexerOUTER_ = 110 + SQLiteLexerPLAN_ = 111 + SQLiteLexerPRAGMA_ = 112 + SQLiteLexerPRIMARY_ = 113 + SQLiteLexerQUERY_ = 114 + SQLiteLexerRAISE_ = 115 + SQLiteLexerRECURSIVE_ = 116 + SQLiteLexerREFERENCES_ = 117 + SQLiteLexerREGEXP_ = 118 + SQLiteLexerREINDEX_ = 119 + SQLiteLexerRELEASE_ = 120 + SQLiteLexerRENAME_ = 121 + SQLiteLexerREPLACE_ = 122 + SQLiteLexerRESTRICT_ = 123 + SQLiteLexerRIGHT_ = 124 + SQLiteLexerROLLBACK_ = 125 + SQLiteLexerROW_ = 126 + SQLiteLexerROWS_ = 127 + SQLiteLexerSAVEPOINT_ = 128 + SQLiteLexerSELECT_ = 129 + SQLiteLexerSET_ = 130 + SQLiteLexerTABLE_ = 131 + SQLiteLexerTEMP_ = 132 + SQLiteLexerTEMPORARY_ = 133 + SQLiteLexerTHEN_ = 134 + SQLiteLexerTO_ = 135 + SQLiteLexerTRANSACTION_ = 136 + SQLiteLexerTRIGGER_ = 137 + SQLiteLexerUNION_ = 138 + SQLiteLexerUNIQUE_ = 139 + SQLiteLexerUPDATE_ = 140 + SQLiteLexerUSING_ = 141 + SQLiteLexerVACUUM_ = 142 + SQLiteLexerVALUES_ = 143 + SQLiteLexerVIEW_ = 144 + SQLiteLexerVIRTUAL_ = 145 + SQLiteLexerWHEN_ = 146 + SQLiteLexerWHERE_ = 147 + SQLiteLexerWITH_ = 148 + SQLiteLexerWITHOUT_ = 149 + SQLiteLexerFIRST_VALUE_ = 150 + SQLiteLexerOVER_ = 151 + SQLiteLexerPARTITION_ = 152 + SQLiteLexerRANGE_ = 153 + SQLiteLexerPRECEDING_ = 154 + SQLiteLexerUNBOUNDED_ = 155 + SQLiteLexerCURRENT_ = 156 + SQLiteLexerFOLLOWING_ = 157 + SQLiteLexerCUME_DIST_ = 158 + SQLiteLexerDENSE_RANK_ = 159 + SQLiteLexerLAG_ = 160 + SQLiteLexerLAST_VALUE_ = 161 + SQLiteLexerLEAD_ = 162 + SQLiteLexerNTH_VALUE_ = 163 + SQLiteLexerNTILE_ = 164 + SQLiteLexerPERCENT_RANK_ = 165 + SQLiteLexerRANK_ = 166 + SQLiteLexerROW_NUMBER_ = 167 + SQLiteLexerGENERATED_ = 168 + SQLiteLexerALWAYS_ = 169 + SQLiteLexerSTORED_ = 170 + SQLiteLexerTRUE_ = 171 + SQLiteLexerFALSE_ = 172 + SQLiteLexerWINDOW_ = 173 + SQLiteLexerNULLS_ = 174 + SQLiteLexerFIRST_ = 175 + SQLiteLexerLAST_ = 176 + SQLiteLexerFILTER_ = 177 + SQLiteLexerGROUPS_ = 178 + SQLiteLexerEXCLUDE_ = 179 + SQLiteLexerTIES_ = 180 + SQLiteLexerOTHERS_ = 181 + SQLiteLexerDO_ = 182 + SQLiteLexerNOTHING_ = 183 + SQLiteLexerIDENTIFIER = 184 + SQLiteLexerNUMERIC_LITERAL = 185 + SQLiteLexerBIND_PARAMETER = 186 + SQLiteLexerSTRING_LITERAL = 187 + SQLiteLexerBLOB_LITERAL = 188 + SQLiteLexerSINGLE_LINE_COMMENT = 189 + SQLiteLexerMULTILINE_COMMENT = 190 + SQLiteLexerSPACES = 191 + SQLiteLexerUNEXPECTED_CHAR = 192 ) diff --git a/internal/engine/sqlite/parser/sqlite_parser.go b/internal/engine/sqlite/parser/sqlite_parser.go index 445b5b59c7..4710df0a30 100644 --- a/internal/engine/sqlite/parser/sqlite_parser.go +++ b/internal/engine/sqlite/parser/sqlite_parser.go @@ -1,6 +1,6 @@ -// Code generated from SQLite.g4 by ANTLR 4.8. DO NOT EDIT. +// Code generated from SQLiteParser.g4 by ANTLR 4.9.3. DO NOT EDIT. -package parser // SQLite +package parser // SQLiteParser import ( "fmt" @@ -16,7 +16,7 @@ var _ = reflect.Copy var _ = strconv.Itoa var parserATN = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 159, 1691, + 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 194, 2043, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, @@ -32,841 +32,1015 @@ var parserATN = []uint16{ 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, - 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 3, 2, 7, 2, 170, 10, 2, 12, - 2, 14, 2, 173, 11, 2, 3, 2, 3, 2, 3, 3, 7, 3, 178, 10, 3, 12, 3, 14, 3, - 181, 11, 3, 3, 3, 3, 3, 6, 3, 185, 10, 3, 13, 3, 14, 3, 186, 3, 3, 7, 3, - 190, 10, 3, 12, 3, 14, 3, 193, 11, 3, 3, 3, 7, 3, 196, 10, 3, 12, 3, 14, - 3, 199, 11, 3, 3, 4, 3, 4, 3, 4, 5, 4, 204, 10, 4, 5, 4, 206, 10, 4, 3, - 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, - 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, - 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 238, 10, 4, 3, 5, 3, 5, 3, 5, 3, - 5, 3, 5, 5, 5, 245, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 253, - 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 261, 10, 5, 3, 5, 5, 5, - 264, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 273, 10, 6, - 3, 7, 3, 7, 5, 7, 277, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, - 285, 10, 8, 3, 8, 3, 8, 5, 8, 289, 10, 8, 5, 8, 291, 10, 8, 3, 9, 3, 9, - 3, 9, 5, 9, 296, 10, 9, 5, 9, 298, 10, 9, 3, 10, 5, 10, 301, 10, 10, 3, - 10, 3, 10, 3, 10, 5, 10, 306, 10, 10, 3, 10, 3, 10, 5, 10, 310, 10, 10, - 3, 10, 6, 10, 313, 10, 10, 13, 10, 14, 10, 314, 3, 10, 3, 10, 3, 10, 3, - 10, 3, 10, 7, 10, 322, 10, 10, 12, 10, 14, 10, 325, 11, 10, 5, 10, 327, - 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 333, 10, 10, 5, 10, 335, 10, - 10, 3, 11, 3, 11, 5, 11, 339, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, - 345, 10, 11, 3, 11, 3, 11, 3, 11, 5, 11, 350, 10, 11, 3, 11, 3, 11, 3, - 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 359, 10, 11, 12, 11, 14, 11, 362, - 11, 11, 3, 11, 3, 11, 3, 11, 5, 11, 367, 10, 11, 3, 12, 3, 12, 5, 12, 371, - 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 377, 10, 12, 3, 12, 3, 12, 3, - 12, 5, 12, 382, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 389, - 10, 12, 12, 12, 14, 12, 392, 11, 12, 3, 12, 3, 12, 7, 12, 396, 10, 12, - 12, 12, 14, 12, 399, 11, 12, 3, 12, 3, 12, 3, 12, 5, 12, 404, 10, 12, 3, - 12, 3, 12, 5, 12, 408, 10, 12, 3, 13, 3, 13, 5, 13, 412, 10, 13, 3, 13, - 3, 13, 3, 13, 3, 13, 5, 13, 418, 10, 13, 3, 13, 3, 13, 3, 13, 5, 13, 423, - 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 430, 10, 13, 3, 13, 3, - 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 439, 10, 13, 12, 13, 14, - 13, 442, 11, 13, 5, 13, 444, 10, 13, 5, 13, 446, 10, 13, 3, 13, 3, 13, - 3, 13, 3, 13, 5, 13, 452, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 458, - 10, 13, 3, 13, 3, 13, 5, 13, 462, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, - 13, 5, 13, 469, 10, 13, 3, 13, 3, 13, 6, 13, 473, 10, 13, 13, 13, 14, 13, - 474, 3, 13, 3, 13, 3, 14, 3, 14, 5, 14, 481, 10, 14, 3, 14, 3, 14, 3, 14, - 3, 14, 5, 14, 487, 10, 14, 3, 14, 3, 14, 3, 14, 5, 14, 492, 10, 14, 3, - 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, - 504, 10, 15, 3, 15, 3, 15, 3, 15, 5, 15, 509, 10, 15, 3, 15, 3, 15, 3, - 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 518, 10, 15, 12, 15, 14, 15, 521, - 11, 15, 3, 15, 3, 15, 5, 15, 525, 10, 15, 3, 16, 5, 16, 528, 10, 16, 3, - 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 535, 10, 16, 3, 17, 5, 17, 538, - 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 545, 10, 17, 3, 17, 3, - 17, 3, 17, 3, 17, 3, 17, 7, 17, 552, 10, 17, 12, 17, 14, 17, 555, 11, 17, - 5, 17, 557, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 563, 10, 17, 5, - 17, 565, 10, 17, 3, 18, 3, 18, 5, 18, 569, 10, 18, 3, 18, 3, 18, 3, 19, - 3, 19, 3, 19, 3, 19, 5, 19, 577, 10, 19, 3, 19, 3, 19, 3, 19, 5, 19, 582, - 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 590, 10, 20, 3, - 20, 3, 20, 3, 20, 5, 20, 595, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, - 3, 21, 5, 21, 603, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 608, 10, 21, 3, - 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 616, 10, 22, 3, 22, 3, 22, - 3, 22, 5, 22, 621, 10, 22, 3, 22, 3, 22, 3, 23, 5, 23, 626, 10, 23, 3, - 23, 3, 23, 3, 23, 3, 23, 7, 23, 632, 10, 23, 12, 23, 14, 23, 635, 11, 23, - 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 642, 10, 23, 12, 23, 14, 23, - 645, 11, 23, 5, 23, 647, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 653, - 10, 23, 5, 23, 655, 10, 23, 3, 24, 5, 24, 658, 10, 24, 3, 24, 3, 24, 3, - 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, - 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 677, 10, 24, 3, 24, 3, 24, 3, 24, 3, - 24, 5, 24, 683, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 690, - 10, 24, 12, 24, 14, 24, 693, 11, 24, 3, 24, 3, 24, 5, 24, 697, 10, 24, - 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 704, 10, 24, 12, 24, 14, 24, - 707, 11, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 7, 24, 715, 10, - 24, 12, 24, 14, 24, 718, 11, 24, 3, 24, 3, 24, 7, 24, 722, 10, 24, 12, - 24, 14, 24, 725, 11, 24, 3, 24, 3, 24, 3, 24, 5, 24, 730, 10, 24, 3, 25, - 3, 25, 3, 25, 3, 25, 5, 25, 736, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, - 25, 3, 25, 3, 25, 5, 25, 745, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, - 5, 26, 752, 10, 26, 3, 26, 3, 26, 5, 26, 756, 10, 26, 5, 26, 758, 10, 26, - 3, 27, 3, 27, 5, 27, 762, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 5, - 28, 769, 10, 28, 5, 28, 771, 10, 28, 3, 28, 3, 28, 5, 28, 775, 10, 28, - 3, 28, 5, 28, 778, 10, 28, 3, 29, 3, 29, 3, 29, 3, 30, 5, 30, 784, 10, - 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 792, 10, 30, 12, 30, - 14, 30, 795, 11, 30, 5, 30, 797, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, - 30, 803, 10, 30, 5, 30, 805, 10, 30, 3, 31, 5, 31, 808, 10, 31, 3, 31, - 3, 31, 3, 31, 3, 31, 7, 31, 814, 10, 31, 12, 31, 14, 31, 817, 11, 31, 3, - 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 824, 10, 31, 12, 31, 14, 31, 827, - 11, 31, 5, 31, 829, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 835, 10, - 31, 5, 31, 837, 10, 31, 3, 32, 3, 32, 5, 32, 841, 10, 32, 3, 32, 3, 32, - 3, 32, 7, 32, 846, 10, 32, 12, 32, 14, 32, 849, 11, 32, 3, 32, 3, 32, 3, - 32, 3, 32, 7, 32, 855, 10, 32, 12, 32, 14, 32, 858, 11, 32, 3, 32, 5, 32, - 861, 10, 32, 5, 32, 863, 10, 32, 3, 32, 3, 32, 5, 32, 867, 10, 32, 3, 32, - 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 874, 10, 32, 12, 32, 14, 32, 877, 11, - 32, 3, 32, 3, 32, 5, 32, 881, 10, 32, 5, 32, 883, 10, 32, 3, 32, 3, 32, - 3, 32, 3, 32, 3, 32, 7, 32, 890, 10, 32, 12, 32, 14, 32, 893, 11, 32, 3, - 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 901, 10, 32, 12, 32, 14, - 32, 904, 11, 32, 3, 32, 3, 32, 7, 32, 908, 10, 32, 12, 32, 14, 32, 911, - 11, 32, 5, 32, 913, 10, 32, 3, 33, 5, 33, 916, 10, 33, 3, 33, 3, 33, 3, - 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 929, - 10, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, - 3, 33, 7, 33, 941, 10, 33, 12, 33, 14, 33, 944, 11, 33, 3, 33, 3, 33, 5, - 33, 948, 10, 33, 3, 34, 5, 34, 951, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, - 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 964, 10, 34, 3, - 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, - 976, 10, 34, 12, 34, 14, 34, 979, 11, 34, 3, 34, 3, 34, 5, 34, 983, 10, - 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 990, 10, 34, 12, 34, 14, - 34, 993, 11, 34, 5, 34, 995, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, - 1001, 10, 34, 5, 34, 1003, 10, 34, 3, 35, 3, 35, 3, 36, 3, 36, 5, 36, 1009, - 10, 36, 3, 36, 7, 36, 1012, 10, 36, 12, 36, 14, 36, 1015, 11, 36, 3, 37, - 6, 37, 1018, 10, 37, 13, 37, 14, 37, 1019, 3, 37, 3, 37, 3, 37, 3, 37, - 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1032, 10, 37, 3, 38, 3, - 38, 5, 38, 1036, 10, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1041, 10, 38, 3, 38, - 3, 38, 5, 38, 1045, 10, 38, 3, 38, 5, 38, 1048, 10, 38, 3, 38, 3, 38, 3, - 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, - 3, 38, 3, 38, 3, 38, 5, 38, 1066, 10, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1071, - 10, 38, 3, 39, 3, 39, 3, 39, 5, 39, 1076, 10, 39, 3, 40, 3, 40, 3, 40, - 3, 40, 3, 40, 3, 40, 5, 40, 1084, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1089, - 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1098, 10, - 40, 3, 40, 3, 40, 3, 40, 7, 40, 1103, 10, 40, 12, 40, 14, 40, 1106, 11, - 40, 3, 40, 5, 40, 1109, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, - 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1125, 10, - 40, 3, 40, 5, 40, 1128, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, - 5, 40, 1136, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 6, 40, 1143, 10, - 40, 13, 40, 14, 40, 1144, 3, 40, 3, 40, 5, 40, 1149, 10, 40, 3, 40, 3, - 40, 3, 40, 5, 40, 1154, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, - 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, - 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, - 5, 40, 1183, 10, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1188, 10, 40, 3, 40, 3, - 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1197, 10, 40, 3, 40, 3, 40, - 3, 40, 3, 40, 3, 40, 3, 40, 7, 40, 1205, 10, 40, 12, 40, 14, 40, 1208, - 11, 40, 5, 40, 1210, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1216, 10, - 40, 3, 40, 5, 40, 1219, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, - 1226, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1232, 10, 40, 3, 40, 3, - 40, 3, 40, 3, 40, 3, 40, 5, 40, 1239, 10, 40, 7, 40, 1241, 10, 40, 12, - 40, 14, 40, 1244, 11, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, - 41, 1252, 10, 41, 12, 41, 14, 41, 1255, 11, 41, 3, 41, 3, 41, 5, 41, 1259, - 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, - 3, 41, 5, 41, 1271, 10, 41, 3, 41, 3, 41, 5, 41, 1275, 10, 41, 7, 41, 1277, - 10, 41, 12, 41, 14, 41, 1280, 11, 41, 3, 41, 5, 41, 1283, 10, 41, 3, 41, - 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1290, 10, 41, 5, 41, 1292, 10, 41, 3, - 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1300, 10, 42, 3, 42, 3, 42, - 3, 43, 3, 43, 3, 43, 5, 43, 1307, 10, 43, 3, 43, 5, 43, 1310, 10, 43, 3, - 44, 3, 44, 5, 44, 1314, 10, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1319, 10, 44, - 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1325, 10, 44, 12, 44, 14, 44, 1328, - 11, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, - 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1344, 10, 44, 12, 44, 14, 44, - 1347, 11, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1352, 10, 44, 3, 45, 3, 45, 5, - 45, 1356, 10, 45, 3, 45, 3, 45, 3, 45, 7, 45, 1361, 10, 45, 12, 45, 14, - 45, 1364, 11, 45, 3, 46, 3, 46, 3, 46, 5, 46, 1369, 10, 46, 3, 46, 3, 46, - 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 1377, 10, 46, 3, 47, 3, 47, 3, 47, 5, - 47, 1382, 10, 47, 3, 47, 5, 47, 1385, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, - 1390, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 1397, 10, 49, 12, - 49, 14, 49, 1400, 11, 49, 3, 49, 3, 49, 5, 49, 1404, 10, 49, 3, 49, 3, - 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, - 5, 50, 1418, 10, 50, 3, 50, 5, 50, 1421, 10, 50, 5, 50, 1423, 10, 50, 3, - 51, 3, 51, 3, 51, 5, 51, 1428, 10, 51, 3, 51, 3, 51, 5, 51, 1432, 10, 51, - 3, 51, 5, 51, 1435, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1442, - 10, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1447, 10, 51, 3, 51, 3, 51, 3, 51, - 3, 51, 3, 51, 7, 51, 1454, 10, 51, 12, 51, 14, 51, 1457, 11, 51, 5, 51, - 1459, 10, 51, 3, 51, 3, 51, 5, 51, 1463, 10, 51, 3, 51, 5, 51, 1466, 10, - 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 1472, 10, 51, 12, 51, 14, 51, 1475, - 11, 51, 3, 51, 5, 51, 1478, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, - 3, 51, 5, 51, 1486, 10, 51, 3, 51, 5, 51, 1489, 10, 51, 5, 51, 1491, 10, - 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 1498, 10, 52, 12, 52, 14, - 52, 1501, 11, 52, 3, 53, 3, 53, 5, 53, 1505, 10, 53, 3, 53, 3, 53, 5, 53, - 1509, 10, 53, 3, 53, 3, 53, 5, 53, 1513, 10, 53, 3, 53, 5, 53, 1516, 10, - 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 7, 54, 1525, 10, 54, - 12, 54, 14, 54, 1528, 11, 54, 3, 54, 3, 54, 5, 54, 1532, 10, 54, 3, 55, - 3, 55, 5, 55, 1536, 10, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1541, 10, 55, 12, - 55, 14, 55, 1544, 11, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1550, 10, - 55, 12, 55, 14, 55, 1553, 11, 55, 3, 55, 5, 55, 1556, 10, 55, 5, 55, 1558, - 10, 55, 3, 55, 3, 55, 5, 55, 1562, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, - 3, 55, 7, 55, 1569, 10, 55, 12, 55, 14, 55, 1572, 11, 55, 3, 55, 3, 55, - 5, 55, 1576, 10, 55, 5, 55, 1578, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, - 55, 7, 55, 1585, 10, 55, 12, 55, 14, 55, 1588, 11, 55, 3, 55, 3, 55, 3, - 55, 3, 55, 3, 55, 3, 55, 7, 55, 1596, 10, 55, 12, 55, 14, 55, 1599, 11, - 55, 3, 55, 3, 55, 7, 55, 1603, 10, 55, 12, 55, 14, 55, 1606, 11, 55, 5, - 55, 1608, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 1615, 10, 56, - 3, 57, 5, 57, 1618, 10, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59, 3, - 60, 3, 60, 3, 61, 3, 61, 5, 61, 1630, 10, 61, 3, 62, 3, 62, 3, 63, 3, 63, - 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, - 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, - 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 79, 3, - 79, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, - 5, 82, 1678, 10, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, - 84, 3, 84, 5, 84, 1689, 10, 84, 3, 84, 4, 390, 1019, 3, 78, 85, 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, 2, 21, 5, 2, - 60, 60, 71, 71, 84, 84, 4, 2, 49, 49, 68, 68, 4, 2, 7, 7, 108, 108, 3, - 2, 133, 134, 4, 2, 31, 31, 64, 64, 4, 2, 36, 36, 62, 62, 7, 2, 27, 27, - 74, 74, 83, 83, 124, 124, 127, 127, 4, 2, 9, 9, 14, 15, 3, 2, 10, 11, 3, - 2, 16, 19, 3, 2, 20, 23, 4, 2, 8, 8, 24, 26, 6, 2, 79, 79, 99, 99, 101, - 101, 120, 120, 4, 2, 61, 61, 141, 141, 5, 2, 27, 27, 74, 74, 127, 127, - 6, 2, 54, 56, 106, 106, 152, 152, 154, 155, 4, 2, 10, 12, 104, 104, 4, - 2, 151, 151, 154, 154, 3, 2, 27, 150, 2, 1946, 2, 171, 3, 2, 2, 2, 4, 179, - 3, 2, 2, 2, 6, 205, 3, 2, 2, 2, 8, 239, 3, 2, 2, 2, 10, 265, 3, 2, 2, 2, - 12, 274, 3, 2, 2, 2, 14, 282, 3, 2, 2, 2, 16, 292, 3, 2, 2, 2, 18, 300, - 3, 2, 2, 2, 20, 336, 3, 2, 2, 2, 22, 368, 3, 2, 2, 2, 24, 409, 3, 2, 2, - 2, 26, 478, 3, 2, 2, 2, 28, 497, 3, 2, 2, 2, 30, 527, 3, 2, 2, 2, 32, 537, - 3, 2, 2, 2, 34, 566, 3, 2, 2, 2, 36, 572, 3, 2, 2, 2, 38, 585, 3, 2, 2, - 2, 40, 598, 3, 2, 2, 2, 42, 611, 3, 2, 2, 2, 44, 625, 3, 2, 2, 2, 46, 657, - 3, 2, 2, 2, 48, 731, 3, 2, 2, 2, 50, 746, 3, 2, 2, 2, 52, 759, 3, 2, 2, - 2, 54, 765, 3, 2, 2, 2, 56, 779, 3, 2, 2, 2, 58, 783, 3, 2, 2, 2, 60, 807, - 3, 2, 2, 2, 62, 912, 3, 2, 2, 2, 64, 915, 3, 2, 2, 2, 66, 950, 3, 2, 2, - 2, 68, 1004, 3, 2, 2, 2, 70, 1006, 3, 2, 2, 2, 72, 1017, 3, 2, 2, 2, 74, - 1035, 3, 2, 2, 2, 76, 1075, 3, 2, 2, 2, 78, 1153, 3, 2, 2, 2, 80, 1245, - 3, 2, 2, 2, 82, 1293, 3, 2, 2, 2, 84, 1303, 3, 2, 2, 2, 86, 1313, 3, 2, - 2, 2, 88, 1353, 3, 2, 2, 2, 90, 1368, 3, 2, 2, 2, 92, 1378, 3, 2, 2, 2, - 94, 1389, 3, 2, 2, 2, 96, 1391, 3, 2, 2, 2, 98, 1422, 3, 2, 2, 2, 100, - 1490, 3, 2, 2, 2, 102, 1492, 3, 2, 2, 2, 104, 1515, 3, 2, 2, 2, 106, 1531, - 3, 2, 2, 2, 108, 1607, 3, 2, 2, 2, 110, 1614, 3, 2, 2, 2, 112, 1617, 3, - 2, 2, 2, 114, 1621, 3, 2, 2, 2, 116, 1623, 3, 2, 2, 2, 118, 1625, 3, 2, - 2, 2, 120, 1629, 3, 2, 2, 2, 122, 1631, 3, 2, 2, 2, 124, 1633, 3, 2, 2, - 2, 126, 1635, 3, 2, 2, 2, 128, 1637, 3, 2, 2, 2, 130, 1639, 3, 2, 2, 2, - 132, 1641, 3, 2, 2, 2, 134, 1643, 3, 2, 2, 2, 136, 1645, 3, 2, 2, 2, 138, - 1647, 3, 2, 2, 2, 140, 1649, 3, 2, 2, 2, 142, 1651, 3, 2, 2, 2, 144, 1653, - 3, 2, 2, 2, 146, 1655, 3, 2, 2, 2, 148, 1657, 3, 2, 2, 2, 150, 1659, 3, - 2, 2, 2, 152, 1661, 3, 2, 2, 2, 154, 1663, 3, 2, 2, 2, 156, 1665, 3, 2, - 2, 2, 158, 1667, 3, 2, 2, 2, 160, 1669, 3, 2, 2, 2, 162, 1677, 3, 2, 2, - 2, 164, 1679, 3, 2, 2, 2, 166, 1688, 3, 2, 2, 2, 168, 170, 5, 4, 3, 2, - 169, 168, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, - 172, 3, 2, 2, 2, 172, 174, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 175, - 7, 2, 2, 3, 175, 3, 3, 2, 2, 2, 176, 178, 7, 3, 2, 2, 177, 176, 3, 2, 2, - 2, 178, 181, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, - 182, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 191, 5, 6, 4, 2, 183, 185, - 7, 3, 2, 2, 184, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 184, 3, 2, - 2, 2, 186, 187, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 190, 5, 6, 4, 2, - 189, 184, 3, 2, 2, 2, 190, 193, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, - 192, 3, 2, 2, 2, 192, 197, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 194, 196, - 7, 3, 2, 2, 195, 194, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, - 2, 2, 197, 198, 3, 2, 2, 2, 198, 5, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, - 203, 7, 73, 2, 2, 201, 202, 7, 116, 2, 2, 202, 204, 7, 113, 2, 2, 203, - 201, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 206, 3, 2, 2, 2, 205, 200, - 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 237, 3, 2, 2, 2, 207, 238, 5, 8, - 5, 2, 208, 238, 5, 10, 6, 2, 209, 238, 5, 12, 7, 2, 210, 238, 5, 14, 8, - 2, 211, 238, 5, 16, 9, 2, 212, 238, 5, 18, 10, 2, 213, 238, 5, 20, 11, - 2, 214, 238, 5, 22, 12, 2, 215, 238, 5, 24, 13, 2, 216, 238, 5, 26, 14, - 2, 217, 238, 5, 28, 15, 2, 218, 238, 5, 30, 16, 2, 219, 238, 5, 32, 17, - 2, 220, 238, 5, 34, 18, 2, 221, 238, 5, 36, 19, 2, 222, 238, 5, 38, 20, - 2, 223, 238, 5, 40, 21, 2, 224, 238, 5, 42, 22, 2, 225, 238, 5, 44, 23, - 2, 226, 238, 5, 46, 24, 2, 227, 238, 5, 48, 25, 2, 228, 238, 5, 50, 26, - 2, 229, 238, 5, 52, 27, 2, 230, 238, 5, 54, 28, 2, 231, 238, 5, 56, 29, - 2, 232, 238, 5, 58, 30, 2, 233, 238, 5, 60, 31, 2, 234, 238, 5, 64, 33, - 2, 235, 238, 5, 66, 34, 2, 236, 238, 5, 68, 35, 2, 237, 207, 3, 2, 2, 2, - 237, 208, 3, 2, 2, 2, 237, 209, 3, 2, 2, 2, 237, 210, 3, 2, 2, 2, 237, - 211, 3, 2, 2, 2, 237, 212, 3, 2, 2, 2, 237, 213, 3, 2, 2, 2, 237, 214, - 3, 2, 2, 2, 237, 215, 3, 2, 2, 2, 237, 216, 3, 2, 2, 2, 237, 217, 3, 2, - 2, 2, 237, 218, 3, 2, 2, 2, 237, 219, 3, 2, 2, 2, 237, 220, 3, 2, 2, 2, - 237, 221, 3, 2, 2, 2, 237, 222, 3, 2, 2, 2, 237, 223, 3, 2, 2, 2, 237, - 224, 3, 2, 2, 2, 237, 225, 3, 2, 2, 2, 237, 226, 3, 2, 2, 2, 237, 227, - 3, 2, 2, 2, 237, 228, 3, 2, 2, 2, 237, 229, 3, 2, 2, 2, 237, 230, 3, 2, - 2, 2, 237, 231, 3, 2, 2, 2, 237, 232, 3, 2, 2, 2, 237, 233, 3, 2, 2, 2, - 237, 234, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, - 7, 3, 2, 2, 2, 239, 240, 7, 32, 2, 2, 240, 244, 7, 132, 2, 2, 241, 242, - 5, 130, 66, 2, 242, 243, 7, 4, 2, 2, 243, 245, 3, 2, 2, 2, 244, 241, 3, - 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 263, 5, 136, - 69, 2, 247, 248, 7, 123, 2, 2, 248, 249, 7, 136, 2, 2, 249, 264, 5, 140, - 71, 2, 250, 252, 7, 123, 2, 2, 251, 253, 7, 48, 2, 2, 252, 251, 3, 2, 2, - 2, 252, 253, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 5, 142, 72, 2, - 255, 256, 7, 136, 2, 2, 256, 257, 5, 144, 73, 2, 257, 264, 3, 2, 2, 2, - 258, 260, 7, 29, 2, 2, 259, 261, 7, 48, 2, 2, 260, 259, 3, 2, 2, 2, 260, - 261, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 264, 5, 70, 36, 2, 263, 247, - 3, 2, 2, 2, 263, 250, 3, 2, 2, 2, 263, 258, 3, 2, 2, 2, 264, 9, 3, 2, 2, - 2, 265, 272, 7, 33, 2, 2, 266, 273, 5, 130, 66, 2, 267, 273, 5, 138, 70, - 2, 268, 269, 5, 130, 66, 2, 269, 270, 7, 4, 2, 2, 270, 271, 5, 138, 70, - 2, 271, 273, 3, 2, 2, 2, 272, 266, 3, 2, 2, 2, 272, 267, 3, 2, 2, 2, 272, - 268, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 11, 3, 2, 2, 2, 274, 276, 7, - 37, 2, 2, 275, 277, 7, 57, 2, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, - 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 5, 78, 40, 2, 279, 280, 7, 35, 2, - 2, 280, 281, 5, 130, 66, 2, 281, 13, 3, 2, 2, 2, 282, 284, 7, 40, 2, 2, - 283, 285, 9, 2, 2, 2, 284, 283, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, - 290, 3, 2, 2, 2, 286, 288, 7, 137, 2, 2, 287, 289, 5, 164, 83, 2, 288, - 287, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 291, 3, 2, 2, 2, 290, 286, - 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 15, 3, 2, 2, 2, 292, 297, 9, 3, - 2, 2, 293, 295, 7, 137, 2, 2, 294, 296, 5, 164, 83, 2, 295, 294, 3, 2, - 2, 2, 295, 296, 3, 2, 2, 2, 296, 298, 3, 2, 2, 2, 297, 293, 3, 2, 2, 2, - 297, 298, 3, 2, 2, 2, 298, 17, 3, 2, 2, 2, 299, 301, 5, 88, 45, 2, 300, - 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 312, - 5, 108, 55, 2, 303, 305, 7, 139, 2, 2, 304, 306, 7, 31, 2, 2, 305, 304, - 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 310, 3, 2, 2, 2, 307, 310, 7, 92, - 2, 2, 308, 310, 7, 70, 2, 2, 309, 303, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, - 309, 308, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 313, 5, 108, 55, 2, 312, - 309, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 312, 3, 2, 2, 2, 314, 315, - 3, 2, 2, 2, 315, 326, 3, 2, 2, 2, 316, 317, 7, 111, 2, 2, 317, 318, 7, - 42, 2, 2, 318, 323, 5, 92, 47, 2, 319, 320, 7, 7, 2, 2, 320, 322, 5, 92, - 47, 2, 321, 319, 3, 2, 2, 2, 322, 325, 3, 2, 2, 2, 323, 321, 3, 2, 2, 2, - 323, 324, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 326, - 316, 3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 334, 3, 2, 2, 2, 328, 329, - 7, 100, 2, 2, 329, 332, 5, 78, 40, 2, 330, 331, 9, 4, 2, 2, 331, 333, 5, - 78, 40, 2, 332, 330, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 335, 3, 2, - 2, 2, 334, 328, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 19, 3, 2, 2, 2, - 336, 338, 7, 52, 2, 2, 337, 339, 7, 140, 2, 2, 338, 337, 3, 2, 2, 2, 338, - 339, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 344, 7, 86, 2, 2, 341, 342, - 7, 82, 2, 2, 342, 343, 7, 104, 2, 2, 343, 345, 7, 72, 2, 2, 344, 341, 3, - 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 349, 3, 2, 2, 2, 346, 347, 5, 130, - 66, 2, 347, 348, 7, 4, 2, 2, 348, 350, 3, 2, 2, 2, 349, 346, 3, 2, 2, 2, - 349, 350, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 352, 5, 150, 76, 2, 352, - 353, 7, 109, 2, 2, 353, 354, 5, 136, 69, 2, 354, 355, 7, 5, 2, 2, 355, - 360, 5, 84, 43, 2, 356, 357, 7, 7, 2, 2, 357, 359, 5, 84, 43, 2, 358, 356, - 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 360, 361, 3, 2, - 2, 2, 361, 363, 3, 2, 2, 2, 362, 360, 3, 2, 2, 2, 363, 366, 7, 6, 2, 2, - 364, 365, 7, 148, 2, 2, 365, 367, 5, 78, 40, 2, 366, 364, 3, 2, 2, 2, 366, - 367, 3, 2, 2, 2, 367, 21, 3, 2, 2, 2, 368, 370, 7, 52, 2, 2, 369, 371, - 9, 5, 2, 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, - 2, 2, 372, 376, 7, 132, 2, 2, 373, 374, 7, 82, 2, 2, 374, 375, 7, 104, - 2, 2, 375, 377, 7, 72, 2, 2, 376, 373, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, - 377, 381, 3, 2, 2, 2, 378, 379, 5, 130, 66, 2, 379, 380, 7, 4, 2, 2, 380, - 382, 3, 2, 2, 2, 381, 378, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, - 3, 2, 2, 2, 383, 407, 5, 136, 69, 2, 384, 385, 7, 5, 2, 2, 385, 390, 5, - 70, 36, 2, 386, 387, 7, 7, 2, 2, 387, 389, 5, 70, 36, 2, 388, 386, 3, 2, - 2, 2, 389, 392, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, - 391, 397, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 394, 7, 7, 2, 2, 394, - 396, 5, 86, 44, 2, 395, 393, 3, 2, 2, 2, 396, 399, 3, 2, 2, 2, 397, 395, - 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 400, 3, 2, 2, 2, 399, 397, 3, 2, - 2, 2, 400, 403, 7, 6, 2, 2, 401, 402, 7, 150, 2, 2, 402, 404, 7, 151, 2, - 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 408, 3, 2, 2, 2, 405, - 406, 7, 35, 2, 2, 406, 408, 5, 60, 31, 2, 407, 384, 3, 2, 2, 2, 407, 405, - 3, 2, 2, 2, 408, 23, 3, 2, 2, 2, 409, 411, 7, 52, 2, 2, 410, 412, 9, 5, - 2, 2, 411, 410, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, - 413, 417, 7, 138, 2, 2, 414, 415, 7, 82, 2, 2, 415, 416, 7, 104, 2, 2, - 416, 418, 7, 72, 2, 2, 417, 414, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, - 422, 3, 2, 2, 2, 419, 420, 5, 130, 66, 2, 420, 421, 7, 4, 2, 2, 421, 423, - 3, 2, 2, 2, 422, 419, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 3, 2, - 2, 2, 424, 429, 5, 152, 77, 2, 425, 430, 7, 39, 2, 2, 426, 430, 7, 30, - 2, 2, 427, 428, 7, 91, 2, 2, 428, 430, 7, 107, 2, 2, 429, 425, 3, 2, 2, - 2, 429, 426, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 430, - 445, 3, 2, 2, 2, 431, 446, 7, 61, 2, 2, 432, 446, 7, 90, 2, 2, 433, 443, - 7, 141, 2, 2, 434, 435, 7, 107, 2, 2, 435, 440, 5, 142, 72, 2, 436, 437, - 7, 7, 2, 2, 437, 439, 5, 142, 72, 2, 438, 436, 3, 2, 2, 2, 439, 442, 3, - 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 444, 3, 2, 2, - 2, 442, 440, 3, 2, 2, 2, 443, 434, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, - 446, 3, 2, 2, 2, 445, 431, 3, 2, 2, 2, 445, 432, 3, 2, 2, 2, 445, 433, - 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 451, 7, 109, 2, 2, 448, 449, 5, - 130, 66, 2, 449, 450, 7, 4, 2, 2, 450, 452, 3, 2, 2, 2, 451, 448, 3, 2, - 2, 2, 451, 452, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 457, 5, 136, 69, - 2, 454, 455, 7, 75, 2, 2, 455, 456, 7, 66, 2, 2, 456, 458, 7, 128, 2, 2, - 457, 454, 3, 2, 2, 2, 457, 458, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, - 460, 7, 147, 2, 2, 460, 462, 5, 78, 40, 2, 461, 459, 3, 2, 2, 2, 461, 462, - 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 472, 7, 40, 2, 2, 464, 469, 5, 64, - 33, 2, 465, 469, 5, 46, 24, 2, 466, 469, 5, 30, 16, 2, 467, 469, 5, 60, - 31, 2, 468, 464, 3, 2, 2, 2, 468, 465, 3, 2, 2, 2, 468, 466, 3, 2, 2, 2, - 468, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 471, 7, 3, 2, 2, 471, - 473, 3, 2, 2, 2, 472, 468, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 472, - 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 477, 7, 68, - 2, 2, 477, 25, 3, 2, 2, 2, 478, 480, 7, 52, 2, 2, 479, 481, 9, 5, 2, 2, - 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, - 486, 7, 145, 2, 2, 483, 484, 7, 82, 2, 2, 484, 485, 7, 104, 2, 2, 485, - 487, 7, 72, 2, 2, 486, 483, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 491, - 3, 2, 2, 2, 488, 489, 5, 130, 66, 2, 489, 490, 7, 4, 2, 2, 490, 492, 3, - 2, 2, 2, 491, 488, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 3, 2, 2, - 2, 493, 494, 5, 154, 78, 2, 494, 495, 7, 35, 2, 2, 495, 496, 5, 60, 31, - 2, 496, 27, 3, 2, 2, 2, 497, 498, 7, 52, 2, 2, 498, 499, 7, 146, 2, 2, - 499, 503, 7, 132, 2, 2, 500, 501, 7, 82, 2, 2, 501, 502, 7, 104, 2, 2, - 502, 504, 7, 72, 2, 2, 503, 500, 3, 2, 2, 2, 503, 504, 3, 2, 2, 2, 504, - 508, 3, 2, 2, 2, 505, 506, 5, 130, 66, 2, 506, 507, 7, 4, 2, 2, 507, 509, - 3, 2, 2, 2, 508, 505, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 510, 3, 2, - 2, 2, 510, 511, 5, 136, 69, 2, 511, 512, 7, 142, 2, 2, 512, 524, 5, 156, - 79, 2, 513, 514, 7, 5, 2, 2, 514, 519, 5, 120, 61, 2, 515, 516, 7, 7, 2, - 2, 516, 518, 5, 120, 61, 2, 517, 515, 3, 2, 2, 2, 518, 521, 3, 2, 2, 2, - 519, 517, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 522, 3, 2, 2, 2, 521, - 519, 3, 2, 2, 2, 522, 523, 7, 6, 2, 2, 523, 525, 3, 2, 2, 2, 524, 513, - 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 29, 3, 2, 2, 2, 526, 528, 5, 88, - 45, 2, 527, 526, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, - 529, 530, 7, 61, 2, 2, 530, 531, 7, 77, 2, 2, 531, 534, 5, 90, 46, 2, 532, - 533, 7, 148, 2, 2, 533, 535, 5, 78, 40, 2, 534, 532, 3, 2, 2, 2, 534, 535, - 3, 2, 2, 2, 535, 31, 3, 2, 2, 2, 536, 538, 5, 88, 45, 2, 537, 536, 3, 2, - 2, 2, 537, 538, 3, 2, 2, 2, 538, 539, 3, 2, 2, 2, 539, 540, 7, 61, 2, 2, - 540, 541, 7, 77, 2, 2, 541, 544, 5, 90, 46, 2, 542, 543, 7, 148, 2, 2, - 543, 545, 5, 78, 40, 2, 544, 542, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, - 564, 3, 2, 2, 2, 546, 547, 7, 111, 2, 2, 547, 548, 7, 42, 2, 2, 548, 553, - 5, 92, 47, 2, 549, 550, 7, 7, 2, 2, 550, 552, 5, 92, 47, 2, 551, 549, 3, - 2, 2, 2, 552, 555, 3, 2, 2, 2, 553, 551, 3, 2, 2, 2, 553, 554, 3, 2, 2, - 2, 554, 557, 3, 2, 2, 2, 555, 553, 3, 2, 2, 2, 556, 546, 3, 2, 2, 2, 556, - 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 7, 100, 2, 2, 559, 562, - 5, 78, 40, 2, 560, 561, 9, 4, 2, 2, 561, 563, 5, 78, 40, 2, 562, 560, 3, - 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 565, 3, 2, 2, 2, 564, 556, 3, 2, 2, - 2, 564, 565, 3, 2, 2, 2, 565, 33, 3, 2, 2, 2, 566, 568, 7, 63, 2, 2, 567, - 569, 7, 57, 2, 2, 568, 567, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 570, - 3, 2, 2, 2, 570, 571, 5, 130, 66, 2, 571, 35, 3, 2, 2, 2, 572, 573, 7, - 65, 2, 2, 573, 576, 7, 86, 2, 2, 574, 575, 7, 82, 2, 2, 575, 577, 7, 72, - 2, 2, 576, 574, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 581, 3, 2, 2, 2, - 578, 579, 5, 130, 66, 2, 579, 580, 7, 4, 2, 2, 580, 582, 3, 2, 2, 2, 581, - 578, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, - 5, 150, 76, 2, 584, 37, 3, 2, 2, 2, 585, 586, 7, 65, 2, 2, 586, 589, 7, - 132, 2, 2, 587, 588, 7, 82, 2, 2, 588, 590, 7, 72, 2, 2, 589, 587, 3, 2, - 2, 2, 589, 590, 3, 2, 2, 2, 590, 594, 3, 2, 2, 2, 591, 592, 5, 130, 66, - 2, 592, 593, 7, 4, 2, 2, 593, 595, 3, 2, 2, 2, 594, 591, 3, 2, 2, 2, 594, - 595, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 5, 136, 69, 2, 597, 39, - 3, 2, 2, 2, 598, 599, 7, 65, 2, 2, 599, 602, 7, 138, 2, 2, 600, 601, 7, - 82, 2, 2, 601, 603, 7, 72, 2, 2, 602, 600, 3, 2, 2, 2, 602, 603, 3, 2, - 2, 2, 603, 607, 3, 2, 2, 2, 604, 605, 5, 130, 66, 2, 605, 606, 7, 4, 2, - 2, 606, 608, 3, 2, 2, 2, 607, 604, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, - 609, 3, 2, 2, 2, 609, 610, 5, 152, 77, 2, 610, 41, 3, 2, 2, 2, 611, 612, - 7, 65, 2, 2, 612, 615, 7, 145, 2, 2, 613, 614, 7, 82, 2, 2, 614, 616, 7, - 72, 2, 2, 615, 613, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 620, 3, 2, 2, - 2, 617, 618, 5, 130, 66, 2, 618, 619, 7, 4, 2, 2, 619, 621, 3, 2, 2, 2, - 620, 617, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 622, 3, 2, 2, 2, 622, - 623, 5, 154, 78, 2, 623, 43, 3, 2, 2, 2, 624, 626, 5, 88, 45, 2, 625, 624, - 3, 2, 2, 2, 625, 626, 3, 2, 2, 2, 626, 627, 3, 2, 2, 2, 627, 633, 5, 108, - 55, 2, 628, 629, 5, 110, 56, 2, 629, 630, 5, 108, 55, 2, 630, 632, 3, 2, - 2, 2, 631, 628, 3, 2, 2, 2, 632, 635, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, - 633, 634, 3, 2, 2, 2, 634, 646, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 636, - 637, 7, 111, 2, 2, 637, 638, 7, 42, 2, 2, 638, 643, 5, 92, 47, 2, 639, - 640, 7, 7, 2, 2, 640, 642, 5, 92, 47, 2, 641, 639, 3, 2, 2, 2, 642, 645, - 3, 2, 2, 2, 643, 641, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 647, 3, 2, - 2, 2, 645, 643, 3, 2, 2, 2, 646, 636, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, - 647, 654, 3, 2, 2, 2, 648, 649, 7, 100, 2, 2, 649, 652, 5, 78, 40, 2, 650, - 651, 9, 4, 2, 2, 651, 653, 5, 78, 40, 2, 652, 650, 3, 2, 2, 2, 652, 653, - 3, 2, 2, 2, 653, 655, 3, 2, 2, 2, 654, 648, 3, 2, 2, 2, 654, 655, 3, 2, - 2, 2, 655, 45, 3, 2, 2, 2, 656, 658, 5, 88, 45, 2, 657, 656, 3, 2, 2, 2, - 657, 658, 3, 2, 2, 2, 658, 676, 3, 2, 2, 2, 659, 677, 7, 90, 2, 2, 660, - 677, 7, 124, 2, 2, 661, 662, 7, 90, 2, 2, 662, 663, 7, 110, 2, 2, 663, - 677, 7, 124, 2, 2, 664, 665, 7, 90, 2, 2, 665, 666, 7, 110, 2, 2, 666, - 677, 7, 127, 2, 2, 667, 668, 7, 90, 2, 2, 668, 669, 7, 110, 2, 2, 669, - 677, 7, 27, 2, 2, 670, 671, 7, 90, 2, 2, 671, 672, 7, 110, 2, 2, 672, 677, - 7, 74, 2, 2, 673, 674, 7, 90, 2, 2, 674, 675, 7, 110, 2, 2, 675, 677, 7, - 83, 2, 2, 676, 659, 3, 2, 2, 2, 676, 660, 3, 2, 2, 2, 676, 661, 3, 2, 2, - 2, 676, 664, 3, 2, 2, 2, 676, 667, 3, 2, 2, 2, 676, 670, 3, 2, 2, 2, 676, - 673, 3, 2, 2, 2, 677, 678, 3, 2, 2, 2, 678, 682, 7, 93, 2, 2, 679, 680, - 5, 130, 66, 2, 680, 681, 7, 4, 2, 2, 681, 683, 3, 2, 2, 2, 682, 679, 3, - 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 684, 3, 2, 2, 2, 684, 696, 5, 136, - 69, 2, 685, 686, 7, 5, 2, 2, 686, 691, 5, 142, 72, 2, 687, 688, 7, 7, 2, - 2, 688, 690, 5, 142, 72, 2, 689, 687, 3, 2, 2, 2, 690, 693, 3, 2, 2, 2, - 691, 689, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 694, 3, 2, 2, 2, 693, - 691, 3, 2, 2, 2, 694, 695, 7, 6, 2, 2, 695, 697, 3, 2, 2, 2, 696, 685, - 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 729, 3, 2, 2, 2, 698, 699, 7, 144, - 2, 2, 699, 700, 7, 5, 2, 2, 700, 705, 5, 78, 40, 2, 701, 702, 7, 7, 2, - 2, 702, 704, 5, 78, 40, 2, 703, 701, 3, 2, 2, 2, 704, 707, 3, 2, 2, 2, - 705, 703, 3, 2, 2, 2, 705, 706, 3, 2, 2, 2, 706, 708, 3, 2, 2, 2, 707, - 705, 3, 2, 2, 2, 708, 723, 7, 6, 2, 2, 709, 710, 7, 7, 2, 2, 710, 711, - 7, 5, 2, 2, 711, 716, 5, 78, 40, 2, 712, 713, 7, 7, 2, 2, 713, 715, 5, - 78, 40, 2, 714, 712, 3, 2, 2, 2, 715, 718, 3, 2, 2, 2, 716, 714, 3, 2, - 2, 2, 716, 717, 3, 2, 2, 2, 717, 719, 3, 2, 2, 2, 718, 716, 3, 2, 2, 2, - 719, 720, 7, 6, 2, 2, 720, 722, 3, 2, 2, 2, 721, 709, 3, 2, 2, 2, 722, - 725, 3, 2, 2, 2, 723, 721, 3, 2, 2, 2, 723, 724, 3, 2, 2, 2, 724, 730, - 3, 2, 2, 2, 725, 723, 3, 2, 2, 2, 726, 730, 5, 60, 31, 2, 727, 728, 7, - 58, 2, 2, 728, 730, 7, 144, 2, 2, 729, 698, 3, 2, 2, 2, 729, 726, 3, 2, - 2, 2, 729, 727, 3, 2, 2, 2, 730, 47, 3, 2, 2, 2, 731, 735, 7, 114, 2, 2, - 732, 733, 5, 130, 66, 2, 733, 734, 7, 4, 2, 2, 734, 736, 3, 2, 2, 2, 735, - 732, 3, 2, 2, 2, 735, 736, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 744, - 5, 158, 80, 2, 738, 739, 7, 8, 2, 2, 739, 745, 5, 94, 48, 2, 740, 741, - 7, 5, 2, 2, 741, 742, 5, 94, 48, 2, 742, 743, 7, 6, 2, 2, 743, 745, 3, - 2, 2, 2, 744, 738, 3, 2, 2, 2, 744, 740, 3, 2, 2, 2, 744, 745, 3, 2, 2, - 2, 745, 49, 3, 2, 2, 2, 746, 757, 7, 121, 2, 2, 747, 758, 5, 146, 74, 2, - 748, 749, 5, 130, 66, 2, 749, 750, 7, 4, 2, 2, 750, 752, 3, 2, 2, 2, 751, - 748, 3, 2, 2, 2, 751, 752, 3, 2, 2, 2, 752, 755, 3, 2, 2, 2, 753, 756, - 5, 136, 69, 2, 754, 756, 5, 150, 76, 2, 755, 753, 3, 2, 2, 2, 755, 754, - 3, 2, 2, 2, 756, 758, 3, 2, 2, 2, 757, 747, 3, 2, 2, 2, 757, 751, 3, 2, - 2, 2, 757, 758, 3, 2, 2, 2, 758, 51, 3, 2, 2, 2, 759, 761, 7, 122, 2, 2, - 760, 762, 7, 129, 2, 2, 761, 760, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, - 763, 3, 2, 2, 2, 763, 764, 5, 160, 81, 2, 764, 53, 3, 2, 2, 2, 765, 770, - 7, 127, 2, 2, 766, 768, 7, 137, 2, 2, 767, 769, 5, 164, 83, 2, 768, 767, - 3, 2, 2, 2, 768, 769, 3, 2, 2, 2, 769, 771, 3, 2, 2, 2, 770, 766, 3, 2, - 2, 2, 770, 771, 3, 2, 2, 2, 771, 777, 3, 2, 2, 2, 772, 774, 7, 136, 2, - 2, 773, 775, 7, 129, 2, 2, 774, 773, 3, 2, 2, 2, 774, 775, 3, 2, 2, 2, - 775, 776, 3, 2, 2, 2, 776, 778, 5, 160, 81, 2, 777, 772, 3, 2, 2, 2, 777, - 778, 3, 2, 2, 2, 778, 55, 3, 2, 2, 2, 779, 780, 7, 129, 2, 2, 780, 781, - 5, 160, 81, 2, 781, 57, 3, 2, 2, 2, 782, 784, 5, 88, 45, 2, 783, 782, 3, - 2, 2, 2, 783, 784, 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 796, 5, 108, - 55, 2, 786, 787, 7, 111, 2, 2, 787, 788, 7, 42, 2, 2, 788, 793, 5, 92, - 47, 2, 789, 790, 7, 7, 2, 2, 790, 792, 5, 92, 47, 2, 791, 789, 3, 2, 2, - 2, 792, 795, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 793, 794, 3, 2, 2, 2, 794, - 797, 3, 2, 2, 2, 795, 793, 3, 2, 2, 2, 796, 786, 3, 2, 2, 2, 796, 797, - 3, 2, 2, 2, 797, 804, 3, 2, 2, 2, 798, 799, 7, 100, 2, 2, 799, 802, 5, - 78, 40, 2, 800, 801, 9, 4, 2, 2, 801, 803, 5, 78, 40, 2, 802, 800, 3, 2, - 2, 2, 802, 803, 3, 2, 2, 2, 803, 805, 3, 2, 2, 2, 804, 798, 3, 2, 2, 2, - 804, 805, 3, 2, 2, 2, 805, 59, 3, 2, 2, 2, 806, 808, 5, 88, 45, 2, 807, - 806, 3, 2, 2, 2, 807, 808, 3, 2, 2, 2, 808, 809, 3, 2, 2, 2, 809, 815, - 5, 62, 32, 2, 810, 811, 5, 110, 56, 2, 811, 812, 5, 62, 32, 2, 812, 814, - 3, 2, 2, 2, 813, 810, 3, 2, 2, 2, 814, 817, 3, 2, 2, 2, 815, 813, 3, 2, - 2, 2, 815, 816, 3, 2, 2, 2, 816, 828, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, - 818, 819, 7, 111, 2, 2, 819, 820, 7, 42, 2, 2, 820, 825, 5, 92, 47, 2, - 821, 822, 7, 7, 2, 2, 822, 824, 5, 92, 47, 2, 823, 821, 3, 2, 2, 2, 824, - 827, 3, 2, 2, 2, 825, 823, 3, 2, 2, 2, 825, 826, 3, 2, 2, 2, 826, 829, - 3, 2, 2, 2, 827, 825, 3, 2, 2, 2, 828, 818, 3, 2, 2, 2, 828, 829, 3, 2, - 2, 2, 829, 836, 3, 2, 2, 2, 830, 831, 7, 100, 2, 2, 831, 834, 5, 78, 40, - 2, 832, 833, 9, 4, 2, 2, 833, 835, 5, 78, 40, 2, 834, 832, 3, 2, 2, 2, - 834, 835, 3, 2, 2, 2, 835, 837, 3, 2, 2, 2, 836, 830, 3, 2, 2, 2, 836, - 837, 3, 2, 2, 2, 837, 61, 3, 2, 2, 2, 838, 840, 7, 130, 2, 2, 839, 841, - 9, 6, 2, 2, 840, 839, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 842, 3, 2, - 2, 2, 842, 847, 5, 98, 50, 2, 843, 844, 7, 7, 2, 2, 844, 846, 5, 98, 50, - 2, 845, 843, 3, 2, 2, 2, 846, 849, 3, 2, 2, 2, 847, 845, 3, 2, 2, 2, 847, - 848, 3, 2, 2, 2, 848, 862, 3, 2, 2, 2, 849, 847, 3, 2, 2, 2, 850, 860, - 7, 77, 2, 2, 851, 856, 5, 100, 51, 2, 852, 853, 7, 7, 2, 2, 853, 855, 5, - 100, 51, 2, 854, 852, 3, 2, 2, 2, 855, 858, 3, 2, 2, 2, 856, 854, 3, 2, - 2, 2, 856, 857, 3, 2, 2, 2, 857, 861, 3, 2, 2, 2, 858, 856, 3, 2, 2, 2, - 859, 861, 5, 102, 52, 2, 860, 851, 3, 2, 2, 2, 860, 859, 3, 2, 2, 2, 861, - 863, 3, 2, 2, 2, 862, 850, 3, 2, 2, 2, 862, 863, 3, 2, 2, 2, 863, 866, - 3, 2, 2, 2, 864, 865, 7, 148, 2, 2, 865, 867, 5, 78, 40, 2, 866, 864, 3, - 2, 2, 2, 866, 867, 3, 2, 2, 2, 867, 882, 3, 2, 2, 2, 868, 869, 7, 80, 2, - 2, 869, 870, 7, 42, 2, 2, 870, 875, 5, 78, 40, 2, 871, 872, 7, 7, 2, 2, - 872, 874, 5, 78, 40, 2, 873, 871, 3, 2, 2, 2, 874, 877, 3, 2, 2, 2, 875, - 873, 3, 2, 2, 2, 875, 876, 3, 2, 2, 2, 876, 880, 3, 2, 2, 2, 877, 875, - 3, 2, 2, 2, 878, 879, 7, 81, 2, 2, 879, 881, 5, 78, 40, 2, 880, 878, 3, - 2, 2, 2, 880, 881, 3, 2, 2, 2, 881, 883, 3, 2, 2, 2, 882, 868, 3, 2, 2, - 2, 882, 883, 3, 2, 2, 2, 883, 913, 3, 2, 2, 2, 884, 885, 7, 144, 2, 2, - 885, 886, 7, 5, 2, 2, 886, 891, 5, 78, 40, 2, 887, 888, 7, 7, 2, 2, 888, - 890, 5, 78, 40, 2, 889, 887, 3, 2, 2, 2, 890, 893, 3, 2, 2, 2, 891, 889, - 3, 2, 2, 2, 891, 892, 3, 2, 2, 2, 892, 894, 3, 2, 2, 2, 893, 891, 3, 2, - 2, 2, 894, 909, 7, 6, 2, 2, 895, 896, 7, 7, 2, 2, 896, 897, 7, 5, 2, 2, - 897, 902, 5, 78, 40, 2, 898, 899, 7, 7, 2, 2, 899, 901, 5, 78, 40, 2, 900, - 898, 3, 2, 2, 2, 901, 904, 3, 2, 2, 2, 902, 900, 3, 2, 2, 2, 902, 903, - 3, 2, 2, 2, 903, 905, 3, 2, 2, 2, 904, 902, 3, 2, 2, 2, 905, 906, 7, 6, - 2, 2, 906, 908, 3, 2, 2, 2, 907, 895, 3, 2, 2, 2, 908, 911, 3, 2, 2, 2, - 909, 907, 3, 2, 2, 2, 909, 910, 3, 2, 2, 2, 910, 913, 3, 2, 2, 2, 911, - 909, 3, 2, 2, 2, 912, 838, 3, 2, 2, 2, 912, 884, 3, 2, 2, 2, 913, 63, 3, - 2, 2, 2, 914, 916, 5, 88, 45, 2, 915, 914, 3, 2, 2, 2, 915, 916, 3, 2, - 2, 2, 916, 917, 3, 2, 2, 2, 917, 928, 7, 141, 2, 2, 918, 919, 7, 110, 2, - 2, 919, 929, 7, 127, 2, 2, 920, 921, 7, 110, 2, 2, 921, 929, 7, 27, 2, - 2, 922, 923, 7, 110, 2, 2, 923, 929, 7, 124, 2, 2, 924, 925, 7, 110, 2, - 2, 925, 929, 7, 74, 2, 2, 926, 927, 7, 110, 2, 2, 927, 929, 7, 83, 2, 2, - 928, 918, 3, 2, 2, 2, 928, 920, 3, 2, 2, 2, 928, 922, 3, 2, 2, 2, 928, - 924, 3, 2, 2, 2, 928, 926, 3, 2, 2, 2, 928, 929, 3, 2, 2, 2, 929, 930, - 3, 2, 2, 2, 930, 931, 5, 90, 46, 2, 931, 932, 7, 131, 2, 2, 932, 933, 5, - 142, 72, 2, 933, 934, 7, 8, 2, 2, 934, 942, 5, 78, 40, 2, 935, 936, 7, - 7, 2, 2, 936, 937, 5, 142, 72, 2, 937, 938, 7, 8, 2, 2, 938, 939, 5, 78, - 40, 2, 939, 941, 3, 2, 2, 2, 940, 935, 3, 2, 2, 2, 941, 944, 3, 2, 2, 2, - 942, 940, 3, 2, 2, 2, 942, 943, 3, 2, 2, 2, 943, 947, 3, 2, 2, 2, 944, - 942, 3, 2, 2, 2, 945, 946, 7, 148, 2, 2, 946, 948, 5, 78, 40, 2, 947, 945, - 3, 2, 2, 2, 947, 948, 3, 2, 2, 2, 948, 65, 3, 2, 2, 2, 949, 951, 5, 88, - 45, 2, 950, 949, 3, 2, 2, 2, 950, 951, 3, 2, 2, 2, 951, 952, 3, 2, 2, 2, - 952, 963, 7, 141, 2, 2, 953, 954, 7, 110, 2, 2, 954, 964, 7, 127, 2, 2, - 955, 956, 7, 110, 2, 2, 956, 964, 7, 27, 2, 2, 957, 958, 7, 110, 2, 2, - 958, 964, 7, 124, 2, 2, 959, 960, 7, 110, 2, 2, 960, 964, 7, 74, 2, 2, - 961, 962, 7, 110, 2, 2, 962, 964, 7, 83, 2, 2, 963, 953, 3, 2, 2, 2, 963, - 955, 3, 2, 2, 2, 963, 957, 3, 2, 2, 2, 963, 959, 3, 2, 2, 2, 963, 961, - 3, 2, 2, 2, 963, 964, 3, 2, 2, 2, 964, 965, 3, 2, 2, 2, 965, 966, 5, 90, - 46, 2, 966, 967, 7, 131, 2, 2, 967, 968, 5, 142, 72, 2, 968, 969, 7, 8, - 2, 2, 969, 977, 5, 78, 40, 2, 970, 971, 7, 7, 2, 2, 971, 972, 5, 142, 72, - 2, 972, 973, 7, 8, 2, 2, 973, 974, 5, 78, 40, 2, 974, 976, 3, 2, 2, 2, - 975, 970, 3, 2, 2, 2, 976, 979, 3, 2, 2, 2, 977, 975, 3, 2, 2, 2, 977, - 978, 3, 2, 2, 2, 978, 982, 3, 2, 2, 2, 979, 977, 3, 2, 2, 2, 980, 981, - 7, 148, 2, 2, 981, 983, 5, 78, 40, 2, 982, 980, 3, 2, 2, 2, 982, 983, 3, - 2, 2, 2, 983, 1002, 3, 2, 2, 2, 984, 985, 7, 111, 2, 2, 985, 986, 7, 42, - 2, 2, 986, 991, 5, 92, 47, 2, 987, 988, 7, 7, 2, 2, 988, 990, 5, 92, 47, - 2, 989, 987, 3, 2, 2, 2, 990, 993, 3, 2, 2, 2, 991, 989, 3, 2, 2, 2, 991, - 992, 3, 2, 2, 2, 992, 995, 3, 2, 2, 2, 993, 991, 3, 2, 2, 2, 994, 984, - 3, 2, 2, 2, 994, 995, 3, 2, 2, 2, 995, 996, 3, 2, 2, 2, 996, 997, 7, 100, - 2, 2, 997, 1000, 5, 78, 40, 2, 998, 999, 9, 4, 2, 2, 999, 1001, 5, 78, - 40, 2, 1000, 998, 3, 2, 2, 2, 1000, 1001, 3, 2, 2, 2, 1001, 1003, 3, 2, - 2, 2, 1002, 994, 3, 2, 2, 2, 1002, 1003, 3, 2, 2, 2, 1003, 67, 3, 2, 2, - 2, 1004, 1005, 7, 143, 2, 2, 1005, 69, 3, 2, 2, 2, 1006, 1008, 5, 142, - 72, 2, 1007, 1009, 5, 72, 37, 2, 1008, 1007, 3, 2, 2, 2, 1008, 1009, 3, - 2, 2, 2, 1009, 1013, 3, 2, 2, 2, 1010, 1012, 5, 74, 38, 2, 1011, 1010, - 3, 2, 2, 2, 1012, 1015, 3, 2, 2, 2, 1013, 1011, 3, 2, 2, 2, 1013, 1014, - 3, 2, 2, 2, 1014, 71, 3, 2, 2, 2, 1015, 1013, 3, 2, 2, 2, 1016, 1018, 5, - 126, 64, 2, 1017, 1016, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 1020, - 3, 2, 2, 2, 1019, 1017, 3, 2, 2, 2, 1020, 1031, 3, 2, 2, 2, 1021, 1022, - 7, 5, 2, 2, 1022, 1023, 5, 112, 57, 2, 1023, 1024, 7, 6, 2, 2, 1024, 1032, - 3, 2, 2, 2, 1025, 1026, 7, 5, 2, 2, 1026, 1027, 5, 112, 57, 2, 1027, 1028, - 7, 7, 2, 2, 1028, 1029, 5, 112, 57, 2, 1029, 1030, 7, 6, 2, 2, 1030, 1032, - 3, 2, 2, 2, 1031, 1021, 3, 2, 2, 2, 1031, 1025, 3, 2, 2, 2, 1031, 1032, - 3, 2, 2, 2, 1032, 73, 3, 2, 2, 2, 1033, 1034, 7, 51, 2, 2, 1034, 1036, - 5, 126, 64, 2, 1035, 1033, 3, 2, 2, 2, 1035, 1036, 3, 2, 2, 2, 1036, 1070, - 3, 2, 2, 2, 1037, 1038, 7, 115, 2, 2, 1038, 1040, 7, 97, 2, 2, 1039, 1041, - 9, 7, 2, 2, 1040, 1039, 3, 2, 2, 2, 1040, 1041, 3, 2, 2, 2, 1041, 1042, - 3, 2, 2, 2, 1042, 1044, 5, 76, 39, 2, 1043, 1045, 7, 38, 2, 2, 1044, 1043, - 3, 2, 2, 2, 1044, 1045, 3, 2, 2, 2, 1045, 1071, 3, 2, 2, 2, 1046, 1048, - 7, 104, 2, 2, 1047, 1046, 3, 2, 2, 2, 1047, 1048, 3, 2, 2, 2, 1048, 1049, - 3, 2, 2, 2, 1049, 1050, 7, 106, 2, 2, 1050, 1071, 5, 76, 39, 2, 1051, 1052, - 7, 140, 2, 2, 1052, 1071, 5, 76, 39, 2, 1053, 1054, 7, 46, 2, 2, 1054, - 1055, 7, 5, 2, 2, 1055, 1056, 5, 78, 40, 2, 1056, 1057, 7, 6, 2, 2, 1057, - 1071, 3, 2, 2, 2, 1058, 1065, 7, 58, 2, 2, 1059, 1066, 5, 112, 57, 2, 1060, - 1066, 5, 114, 58, 2, 1061, 1062, 7, 5, 2, 2, 1062, 1063, 5, 78, 40, 2, - 1063, 1064, 7, 6, 2, 2, 1064, 1066, 3, 2, 2, 2, 1065, 1059, 3, 2, 2, 2, - 1065, 1060, 3, 2, 2, 2, 1065, 1061, 3, 2, 2, 2, 1066, 1071, 3, 2, 2, 2, - 1067, 1068, 7, 47, 2, 2, 1068, 1071, 5, 146, 74, 2, 1069, 1071, 5, 80, - 41, 2, 1070, 1037, 3, 2, 2, 2, 1070, 1047, 3, 2, 2, 2, 1070, 1051, 3, 2, - 2, 2, 1070, 1053, 3, 2, 2, 2, 1070, 1058, 3, 2, 2, 2, 1070, 1067, 3, 2, - 2, 2, 1070, 1069, 3, 2, 2, 2, 1071, 75, 3, 2, 2, 2, 1072, 1073, 7, 109, - 2, 2, 1073, 1074, 7, 50, 2, 2, 1074, 1076, 9, 8, 2, 2, 1075, 1072, 3, 2, - 2, 2, 1075, 1076, 3, 2, 2, 2, 1076, 77, 3, 2, 2, 2, 1077, 1078, 8, 40, - 1, 2, 1078, 1154, 5, 114, 58, 2, 1079, 1154, 7, 153, 2, 2, 1080, 1081, - 5, 130, 66, 2, 1081, 1082, 7, 4, 2, 2, 1082, 1084, 3, 2, 2, 2, 1083, 1080, - 3, 2, 2, 2, 1083, 1084, 3, 2, 2, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1086, - 5, 136, 69, 2, 1086, 1087, 7, 4, 2, 2, 1087, 1089, 3, 2, 2, 2, 1088, 1083, - 3, 2, 2, 2, 1088, 1089, 3, 2, 2, 2, 1089, 1090, 3, 2, 2, 2, 1090, 1154, - 5, 142, 72, 2, 1091, 1092, 5, 116, 59, 2, 1092, 1093, 5, 78, 40, 23, 1093, - 1154, 3, 2, 2, 2, 1094, 1095, 5, 128, 65, 2, 1095, 1108, 7, 5, 2, 2, 1096, - 1098, 7, 64, 2, 2, 1097, 1096, 3, 2, 2, 2, 1097, 1098, 3, 2, 2, 2, 1098, - 1099, 3, 2, 2, 2, 1099, 1104, 5, 78, 40, 2, 1100, 1101, 7, 7, 2, 2, 1101, - 1103, 5, 78, 40, 2, 1102, 1100, 3, 2, 2, 2, 1103, 1106, 3, 2, 2, 2, 1104, - 1102, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 1109, 3, 2, 2, 2, 1106, - 1104, 3, 2, 2, 2, 1107, 1109, 7, 9, 2, 2, 1108, 1097, 3, 2, 2, 2, 1108, - 1107, 3, 2, 2, 2, 1108, 1109, 3, 2, 2, 2, 1109, 1110, 3, 2, 2, 2, 1110, - 1111, 7, 6, 2, 2, 1111, 1154, 3, 2, 2, 2, 1112, 1113, 7, 5, 2, 2, 1113, - 1114, 5, 78, 40, 2, 1114, 1115, 7, 6, 2, 2, 1115, 1154, 3, 2, 2, 2, 1116, - 1117, 7, 45, 2, 2, 1117, 1118, 7, 5, 2, 2, 1118, 1119, 5, 78, 40, 2, 1119, - 1120, 7, 35, 2, 2, 1120, 1121, 5, 72, 37, 2, 1121, 1122, 7, 6, 2, 2, 1122, - 1154, 3, 2, 2, 2, 1123, 1125, 7, 104, 2, 2, 1124, 1123, 3, 2, 2, 2, 1124, - 1125, 3, 2, 2, 2, 1125, 1126, 3, 2, 2, 2, 1126, 1128, 7, 72, 2, 2, 1127, - 1124, 3, 2, 2, 2, 1127, 1128, 3, 2, 2, 2, 1128, 1129, 3, 2, 2, 2, 1129, - 1130, 7, 5, 2, 2, 1130, 1131, 5, 60, 31, 2, 1131, 1132, 7, 6, 2, 2, 1132, - 1154, 3, 2, 2, 2, 1133, 1135, 7, 44, 2, 2, 1134, 1136, 5, 78, 40, 2, 1135, - 1134, 3, 2, 2, 2, 1135, 1136, 3, 2, 2, 2, 1136, 1142, 3, 2, 2, 2, 1137, - 1138, 7, 147, 2, 2, 1138, 1139, 5, 78, 40, 2, 1139, 1140, 7, 135, 2, 2, - 1140, 1141, 5, 78, 40, 2, 1141, 1143, 3, 2, 2, 2, 1142, 1137, 3, 2, 2, - 2, 1143, 1144, 3, 2, 2, 2, 1144, 1142, 3, 2, 2, 2, 1144, 1145, 3, 2, 2, - 2, 1145, 1148, 3, 2, 2, 2, 1146, 1147, 7, 67, 2, 2, 1147, 1149, 5, 78, - 40, 2, 1148, 1146, 3, 2, 2, 2, 1148, 1149, 3, 2, 2, 2, 1149, 1150, 3, 2, - 2, 2, 1150, 1151, 7, 68, 2, 2, 1151, 1154, 3, 2, 2, 2, 1152, 1154, 5, 82, - 42, 2, 1153, 1077, 3, 2, 2, 2, 1153, 1079, 3, 2, 2, 2, 1153, 1088, 3, 2, - 2, 2, 1153, 1091, 3, 2, 2, 2, 1153, 1094, 3, 2, 2, 2, 1153, 1112, 3, 2, - 2, 2, 1153, 1116, 3, 2, 2, 2, 1153, 1127, 3, 2, 2, 2, 1153, 1133, 3, 2, - 2, 2, 1153, 1152, 3, 2, 2, 2, 1154, 1242, 3, 2, 2, 2, 1155, 1156, 12, 22, - 2, 2, 1156, 1157, 7, 13, 2, 2, 1157, 1241, 5, 78, 40, 23, 1158, 1159, 12, - 21, 2, 2, 1159, 1160, 9, 9, 2, 2, 1160, 1241, 5, 78, 40, 22, 1161, 1162, - 12, 20, 2, 2, 1162, 1163, 9, 10, 2, 2, 1163, 1241, 5, 78, 40, 21, 1164, - 1165, 12, 19, 2, 2, 1165, 1166, 9, 11, 2, 2, 1166, 1241, 5, 78, 40, 20, - 1167, 1168, 12, 18, 2, 2, 1168, 1169, 9, 12, 2, 2, 1169, 1241, 5, 78, 40, - 19, 1170, 1171, 12, 17, 2, 2, 1171, 1172, 9, 13, 2, 2, 1172, 1241, 5, 78, - 40, 18, 1173, 1174, 12, 15, 2, 2, 1174, 1175, 7, 34, 2, 2, 1175, 1241, - 5, 78, 40, 16, 1176, 1177, 12, 14, 2, 2, 1177, 1178, 7, 110, 2, 2, 1178, - 1241, 5, 78, 40, 15, 1179, 1180, 12, 7, 2, 2, 1180, 1182, 7, 94, 2, 2, - 1181, 1183, 7, 104, 2, 2, 1182, 1181, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, - 2, 1183, 1184, 3, 2, 2, 2, 1184, 1241, 5, 78, 40, 8, 1185, 1187, 12, 6, - 2, 2, 1186, 1188, 7, 104, 2, 2, 1187, 1186, 3, 2, 2, 2, 1187, 1188, 3, - 2, 2, 2, 1188, 1189, 3, 2, 2, 2, 1189, 1190, 7, 41, 2, 2, 1190, 1191, 5, - 78, 40, 2, 1191, 1192, 7, 34, 2, 2, 1192, 1193, 5, 78, 40, 7, 1193, 1241, - 3, 2, 2, 2, 1194, 1196, 12, 16, 2, 2, 1195, 1197, 7, 104, 2, 2, 1196, 1195, - 3, 2, 2, 2, 1196, 1197, 3, 2, 2, 2, 1197, 1198, 3, 2, 2, 2, 1198, 1218, - 7, 85, 2, 2, 1199, 1209, 7, 5, 2, 2, 1200, 1210, 5, 60, 31, 2, 1201, 1206, - 5, 78, 40, 2, 1202, 1203, 7, 7, 2, 2, 1203, 1205, 5, 78, 40, 2, 1204, 1202, - 3, 2, 2, 2, 1205, 1208, 3, 2, 2, 2, 1206, 1204, 3, 2, 2, 2, 1206, 1207, - 3, 2, 2, 2, 1207, 1210, 3, 2, 2, 2, 1208, 1206, 3, 2, 2, 2, 1209, 1200, - 3, 2, 2, 2, 1209, 1201, 3, 2, 2, 2, 1209, 1210, 3, 2, 2, 2, 1210, 1211, - 3, 2, 2, 2, 1211, 1219, 7, 6, 2, 2, 1212, 1213, 5, 130, 66, 2, 1213, 1214, - 7, 4, 2, 2, 1214, 1216, 3, 2, 2, 2, 1215, 1212, 3, 2, 2, 2, 1215, 1216, - 3, 2, 2, 2, 1216, 1217, 3, 2, 2, 2, 1217, 1219, 5, 136, 69, 2, 1218, 1199, - 3, 2, 2, 2, 1218, 1215, 3, 2, 2, 2, 1219, 1241, 3, 2, 2, 2, 1220, 1221, - 12, 10, 2, 2, 1221, 1222, 7, 47, 2, 2, 1222, 1241, 5, 146, 74, 2, 1223, - 1225, 12, 9, 2, 2, 1224, 1226, 7, 104, 2, 2, 1225, 1224, 3, 2, 2, 2, 1225, - 1226, 3, 2, 2, 2, 1226, 1227, 3, 2, 2, 2, 1227, 1228, 9, 14, 2, 2, 1228, - 1231, 5, 78, 40, 2, 1229, 1230, 7, 69, 2, 2, 1230, 1232, 5, 78, 40, 2, - 1231, 1229, 3, 2, 2, 2, 1231, 1232, 3, 2, 2, 2, 1232, 1241, 3, 2, 2, 2, - 1233, 1238, 12, 8, 2, 2, 1234, 1239, 7, 95, 2, 2, 1235, 1239, 7, 105, 2, - 2, 1236, 1237, 7, 104, 2, 2, 1237, 1239, 7, 106, 2, 2, 1238, 1234, 3, 2, - 2, 2, 1238, 1235, 3, 2, 2, 2, 1238, 1236, 3, 2, 2, 2, 1239, 1241, 3, 2, - 2, 2, 1240, 1155, 3, 2, 2, 2, 1240, 1158, 3, 2, 2, 2, 1240, 1161, 3, 2, - 2, 2, 1240, 1164, 3, 2, 2, 2, 1240, 1167, 3, 2, 2, 2, 1240, 1170, 3, 2, - 2, 2, 1240, 1173, 3, 2, 2, 2, 1240, 1176, 3, 2, 2, 2, 1240, 1179, 3, 2, - 2, 2, 1240, 1185, 3, 2, 2, 2, 1240, 1194, 3, 2, 2, 2, 1240, 1220, 3, 2, - 2, 2, 1240, 1223, 3, 2, 2, 2, 1240, 1233, 3, 2, 2, 2, 1241, 1244, 3, 2, - 2, 2, 1242, 1240, 3, 2, 2, 2, 1242, 1243, 3, 2, 2, 2, 1243, 79, 3, 2, 2, - 2, 1244, 1242, 3, 2, 2, 2, 1245, 1246, 7, 119, 2, 2, 1246, 1258, 5, 148, - 75, 2, 1247, 1248, 7, 5, 2, 2, 1248, 1253, 5, 142, 72, 2, 1249, 1250, 7, - 7, 2, 2, 1250, 1252, 5, 142, 72, 2, 1251, 1249, 3, 2, 2, 2, 1252, 1255, - 3, 2, 2, 2, 1253, 1251, 3, 2, 2, 2, 1253, 1254, 3, 2, 2, 2, 1254, 1256, - 3, 2, 2, 2, 1255, 1253, 3, 2, 2, 2, 1256, 1257, 7, 6, 2, 2, 1257, 1259, - 3, 2, 2, 2, 1258, 1247, 3, 2, 2, 2, 1258, 1259, 3, 2, 2, 2, 1259, 1278, - 3, 2, 2, 2, 1260, 1261, 7, 109, 2, 2, 1261, 1270, 9, 15, 2, 2, 1262, 1263, - 7, 131, 2, 2, 1263, 1271, 7, 106, 2, 2, 1264, 1265, 7, 131, 2, 2, 1265, - 1271, 7, 58, 2, 2, 1266, 1271, 7, 43, 2, 2, 1267, 1271, 7, 125, 2, 2, 1268, - 1269, 7, 103, 2, 2, 1269, 1271, 7, 28, 2, 2, 1270, 1262, 3, 2, 2, 2, 1270, - 1264, 3, 2, 2, 2, 1270, 1266, 3, 2, 2, 2, 1270, 1267, 3, 2, 2, 2, 1270, - 1268, 3, 2, 2, 2, 1271, 1275, 3, 2, 2, 2, 1272, 1273, 7, 101, 2, 2, 1273, - 1275, 5, 126, 64, 2, 1274, 1260, 3, 2, 2, 2, 1274, 1272, 3, 2, 2, 2, 1275, - 1277, 3, 2, 2, 2, 1276, 1274, 3, 2, 2, 2, 1277, 1280, 3, 2, 2, 2, 1278, - 1276, 3, 2, 2, 2, 1278, 1279, 3, 2, 2, 2, 1279, 1291, 3, 2, 2, 2, 1280, - 1278, 3, 2, 2, 2, 1281, 1283, 7, 104, 2, 2, 1282, 1281, 3, 2, 2, 2, 1282, - 1283, 3, 2, 2, 2, 1283, 1284, 3, 2, 2, 2, 1284, 1289, 7, 59, 2, 2, 1285, - 1286, 7, 88, 2, 2, 1286, 1290, 7, 60, 2, 2, 1287, 1288, 7, 88, 2, 2, 1288, - 1290, 7, 84, 2, 2, 1289, 1285, 3, 2, 2, 2, 1289, 1287, 3, 2, 2, 2, 1289, - 1290, 3, 2, 2, 2, 1290, 1292, 3, 2, 2, 2, 1291, 1282, 3, 2, 2, 2, 1291, - 1292, 3, 2, 2, 2, 1292, 81, 3, 2, 2, 2, 1293, 1294, 7, 117, 2, 2, 1294, - 1299, 7, 5, 2, 2, 1295, 1300, 7, 83, 2, 2, 1296, 1297, 9, 16, 2, 2, 1297, - 1298, 7, 7, 2, 2, 1298, 1300, 5, 118, 60, 2, 1299, 1295, 3, 2, 2, 2, 1299, - 1296, 3, 2, 2, 2, 1300, 1301, 3, 2, 2, 2, 1301, 1302, 7, 6, 2, 2, 1302, - 83, 3, 2, 2, 2, 1303, 1306, 5, 142, 72, 2, 1304, 1305, 7, 47, 2, 2, 1305, - 1307, 5, 146, 74, 2, 1306, 1304, 3, 2, 2, 2, 1306, 1307, 3, 2, 2, 2, 1307, - 1309, 3, 2, 2, 2, 1308, 1310, 9, 7, 2, 2, 1309, 1308, 3, 2, 2, 2, 1309, - 1310, 3, 2, 2, 2, 1310, 85, 3, 2, 2, 2, 1311, 1312, 7, 51, 2, 2, 1312, - 1314, 5, 126, 64, 2, 1313, 1311, 3, 2, 2, 2, 1313, 1314, 3, 2, 2, 2, 1314, - 1351, 3, 2, 2, 2, 1315, 1316, 7, 115, 2, 2, 1316, 1319, 7, 97, 2, 2, 1317, - 1319, 7, 140, 2, 2, 1318, 1315, 3, 2, 2, 2, 1318, 1317, 3, 2, 2, 2, 1319, - 1320, 3, 2, 2, 2, 1320, 1321, 7, 5, 2, 2, 1321, 1326, 5, 84, 43, 2, 1322, - 1323, 7, 7, 2, 2, 1323, 1325, 5, 84, 43, 2, 1324, 1322, 3, 2, 2, 2, 1325, - 1328, 3, 2, 2, 2, 1326, 1324, 3, 2, 2, 2, 1326, 1327, 3, 2, 2, 2, 1327, - 1329, 3, 2, 2, 2, 1328, 1326, 3, 2, 2, 2, 1329, 1330, 7, 6, 2, 2, 1330, - 1331, 5, 76, 39, 2, 1331, 1352, 3, 2, 2, 2, 1332, 1333, 7, 46, 2, 2, 1333, - 1334, 7, 5, 2, 2, 1334, 1335, 5, 78, 40, 2, 1335, 1336, 7, 6, 2, 2, 1336, - 1352, 3, 2, 2, 2, 1337, 1338, 7, 76, 2, 2, 1338, 1339, 7, 97, 2, 2, 1339, - 1340, 7, 5, 2, 2, 1340, 1345, 5, 142, 72, 2, 1341, 1342, 7, 7, 2, 2, 1342, - 1344, 5, 142, 72, 2, 1343, 1341, 3, 2, 2, 2, 1344, 1347, 3, 2, 2, 2, 1345, - 1343, 3, 2, 2, 2, 1345, 1346, 3, 2, 2, 2, 1346, 1348, 3, 2, 2, 2, 1347, - 1345, 3, 2, 2, 2, 1348, 1349, 7, 6, 2, 2, 1349, 1350, 5, 80, 41, 2, 1350, - 1352, 3, 2, 2, 2, 1351, 1318, 3, 2, 2, 2, 1351, 1332, 3, 2, 2, 2, 1351, - 1337, 3, 2, 2, 2, 1352, 87, 3, 2, 2, 2, 1353, 1355, 7, 149, 2, 2, 1354, - 1356, 7, 118, 2, 2, 1355, 1354, 3, 2, 2, 2, 1355, 1356, 3, 2, 2, 2, 1356, - 1357, 3, 2, 2, 2, 1357, 1362, 5, 96, 49, 2, 1358, 1359, 7, 7, 2, 2, 1359, - 1361, 5, 96, 49, 2, 1360, 1358, 3, 2, 2, 2, 1361, 1364, 3, 2, 2, 2, 1362, - 1360, 3, 2, 2, 2, 1362, 1363, 3, 2, 2, 2, 1363, 89, 3, 2, 2, 2, 1364, 1362, - 3, 2, 2, 2, 1365, 1366, 5, 130, 66, 2, 1366, 1367, 7, 4, 2, 2, 1367, 1369, - 3, 2, 2, 2, 1368, 1365, 3, 2, 2, 2, 1368, 1369, 3, 2, 2, 2, 1369, 1370, - 3, 2, 2, 2, 1370, 1376, 5, 136, 69, 2, 1371, 1372, 7, 87, 2, 2, 1372, 1373, - 7, 42, 2, 2, 1373, 1377, 5, 150, 76, 2, 1374, 1375, 7, 104, 2, 2, 1375, - 1377, 7, 87, 2, 2, 1376, 1371, 3, 2, 2, 2, 1376, 1374, 3, 2, 2, 2, 1376, - 1377, 3, 2, 2, 2, 1377, 91, 3, 2, 2, 2, 1378, 1381, 5, 78, 40, 2, 1379, - 1380, 7, 47, 2, 2, 1380, 1382, 5, 146, 74, 2, 1381, 1379, 3, 2, 2, 2, 1381, - 1382, 3, 2, 2, 2, 1382, 1384, 3, 2, 2, 2, 1383, 1385, 9, 7, 2, 2, 1384, - 1383, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 93, 3, 2, 2, 2, 1386, 1390, - 5, 112, 57, 2, 1387, 1390, 5, 126, 64, 2, 1388, 1390, 7, 154, 2, 2, 1389, - 1386, 3, 2, 2, 2, 1389, 1387, 3, 2, 2, 2, 1389, 1388, 3, 2, 2, 2, 1390, - 95, 3, 2, 2, 2, 1391, 1403, 5, 136, 69, 2, 1392, 1393, 7, 5, 2, 2, 1393, - 1398, 5, 142, 72, 2, 1394, 1395, 7, 7, 2, 2, 1395, 1397, 5, 142, 72, 2, - 1396, 1394, 3, 2, 2, 2, 1397, 1400, 3, 2, 2, 2, 1398, 1396, 3, 2, 2, 2, - 1398, 1399, 3, 2, 2, 2, 1399, 1401, 3, 2, 2, 2, 1400, 1398, 3, 2, 2, 2, - 1401, 1402, 7, 6, 2, 2, 1402, 1404, 3, 2, 2, 2, 1403, 1392, 3, 2, 2, 2, - 1403, 1404, 3, 2, 2, 2, 1404, 1405, 3, 2, 2, 2, 1405, 1406, 7, 35, 2, 2, - 1406, 1407, 7, 5, 2, 2, 1407, 1408, 5, 60, 31, 2, 1408, 1409, 7, 6, 2, - 2, 1409, 97, 3, 2, 2, 2, 1410, 1423, 7, 9, 2, 2, 1411, 1412, 5, 136, 69, - 2, 1412, 1413, 7, 4, 2, 2, 1413, 1414, 7, 9, 2, 2, 1414, 1423, 3, 2, 2, - 2, 1415, 1420, 5, 78, 40, 2, 1416, 1418, 7, 35, 2, 2, 1417, 1416, 3, 2, - 2, 2, 1417, 1418, 3, 2, 2, 2, 1418, 1419, 3, 2, 2, 2, 1419, 1421, 5, 122, - 62, 2, 1420, 1417, 3, 2, 2, 2, 1420, 1421, 3, 2, 2, 2, 1421, 1423, 3, 2, - 2, 2, 1422, 1410, 3, 2, 2, 2, 1422, 1411, 3, 2, 2, 2, 1422, 1415, 3, 2, - 2, 2, 1423, 99, 3, 2, 2, 2, 1424, 1425, 5, 132, 67, 2, 1425, 1426, 7, 4, - 2, 2, 1426, 1428, 3, 2, 2, 2, 1427, 1424, 3, 2, 2, 2, 1427, 1428, 3, 2, - 2, 2, 1428, 1429, 3, 2, 2, 2, 1429, 1434, 5, 136, 69, 2, 1430, 1432, 7, - 35, 2, 2, 1431, 1430, 3, 2, 2, 2, 1431, 1432, 3, 2, 2, 2, 1432, 1433, 3, - 2, 2, 2, 1433, 1435, 5, 162, 82, 2, 1434, 1431, 3, 2, 2, 2, 1434, 1435, - 3, 2, 2, 2, 1435, 1441, 3, 2, 2, 2, 1436, 1437, 7, 87, 2, 2, 1437, 1438, - 7, 42, 2, 2, 1438, 1442, 5, 150, 76, 2, 1439, 1440, 7, 104, 2, 2, 1440, - 1442, 7, 87, 2, 2, 1441, 1436, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1441, - 1442, 3, 2, 2, 2, 1442, 1491, 3, 2, 2, 2, 1443, 1444, 5, 132, 67, 2, 1444, - 1445, 7, 4, 2, 2, 1445, 1447, 3, 2, 2, 2, 1446, 1443, 3, 2, 2, 2, 1446, - 1447, 3, 2, 2, 2, 1447, 1448, 3, 2, 2, 2, 1448, 1449, 5, 134, 68, 2, 1449, - 1458, 7, 5, 2, 2, 1450, 1455, 5, 78, 40, 2, 1451, 1452, 7, 7, 2, 2, 1452, - 1454, 5, 78, 40, 2, 1453, 1451, 3, 2, 2, 2, 1454, 1457, 3, 2, 2, 2, 1455, - 1453, 3, 2, 2, 2, 1455, 1456, 3, 2, 2, 2, 1456, 1459, 3, 2, 2, 2, 1457, - 1455, 3, 2, 2, 2, 1458, 1450, 3, 2, 2, 2, 1458, 1459, 3, 2, 2, 2, 1459, - 1460, 3, 2, 2, 2, 1460, 1465, 7, 6, 2, 2, 1461, 1463, 7, 35, 2, 2, 1462, - 1461, 3, 2, 2, 2, 1462, 1463, 3, 2, 2, 2, 1463, 1464, 3, 2, 2, 2, 1464, - 1466, 5, 162, 82, 2, 1465, 1462, 3, 2, 2, 2, 1465, 1466, 3, 2, 2, 2, 1466, - 1491, 3, 2, 2, 2, 1467, 1477, 7, 5, 2, 2, 1468, 1473, 5, 100, 51, 2, 1469, - 1470, 7, 7, 2, 2, 1470, 1472, 5, 100, 51, 2, 1471, 1469, 3, 2, 2, 2, 1472, - 1475, 3, 2, 2, 2, 1473, 1471, 3, 2, 2, 2, 1473, 1474, 3, 2, 2, 2, 1474, - 1478, 3, 2, 2, 2, 1475, 1473, 3, 2, 2, 2, 1476, 1478, 5, 102, 52, 2, 1477, - 1468, 3, 2, 2, 2, 1477, 1476, 3, 2, 2, 2, 1478, 1479, 3, 2, 2, 2, 1479, - 1480, 7, 6, 2, 2, 1480, 1491, 3, 2, 2, 2, 1481, 1482, 7, 5, 2, 2, 1482, - 1483, 5, 60, 31, 2, 1483, 1488, 7, 6, 2, 2, 1484, 1486, 7, 35, 2, 2, 1485, - 1484, 3, 2, 2, 2, 1485, 1486, 3, 2, 2, 2, 1486, 1487, 3, 2, 2, 2, 1487, - 1489, 5, 162, 82, 2, 1488, 1485, 3, 2, 2, 2, 1488, 1489, 3, 2, 2, 2, 1489, - 1491, 3, 2, 2, 2, 1490, 1427, 3, 2, 2, 2, 1490, 1446, 3, 2, 2, 2, 1490, - 1467, 3, 2, 2, 2, 1490, 1481, 3, 2, 2, 2, 1491, 101, 3, 2, 2, 2, 1492, - 1499, 5, 100, 51, 2, 1493, 1494, 5, 104, 53, 2, 1494, 1495, 5, 100, 51, - 2, 1495, 1496, 5, 106, 54, 2, 1496, 1498, 3, 2, 2, 2, 1497, 1493, 3, 2, - 2, 2, 1498, 1501, 3, 2, 2, 2, 1499, 1497, 3, 2, 2, 2, 1499, 1500, 3, 2, - 2, 2, 1500, 103, 3, 2, 2, 2, 1501, 1499, 3, 2, 2, 2, 1502, 1516, 7, 7, - 2, 2, 1503, 1505, 7, 102, 2, 2, 1504, 1503, 3, 2, 2, 2, 1504, 1505, 3, - 2, 2, 2, 1505, 1512, 3, 2, 2, 2, 1506, 1508, 7, 98, 2, 2, 1507, 1509, 7, - 112, 2, 2, 1508, 1507, 3, 2, 2, 2, 1508, 1509, 3, 2, 2, 2, 1509, 1513, - 3, 2, 2, 2, 1510, 1513, 7, 89, 2, 2, 1511, 1513, 7, 53, 2, 2, 1512, 1506, - 3, 2, 2, 2, 1512, 1510, 3, 2, 2, 2, 1512, 1511, 3, 2, 2, 2, 1512, 1513, - 3, 2, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1516, 7, 96, 2, 2, 1515, 1502, - 3, 2, 2, 2, 1515, 1504, 3, 2, 2, 2, 1516, 105, 3, 2, 2, 2, 1517, 1518, - 7, 109, 2, 2, 1518, 1532, 5, 78, 40, 2, 1519, 1520, 7, 142, 2, 2, 1520, - 1521, 7, 5, 2, 2, 1521, 1526, 5, 142, 72, 2, 1522, 1523, 7, 7, 2, 2, 1523, - 1525, 5, 142, 72, 2, 1524, 1522, 3, 2, 2, 2, 1525, 1528, 3, 2, 2, 2, 1526, - 1524, 3, 2, 2, 2, 1526, 1527, 3, 2, 2, 2, 1527, 1529, 3, 2, 2, 2, 1528, - 1526, 3, 2, 2, 2, 1529, 1530, 7, 6, 2, 2, 1530, 1532, 3, 2, 2, 2, 1531, - 1517, 3, 2, 2, 2, 1531, 1519, 3, 2, 2, 2, 1531, 1532, 3, 2, 2, 2, 1532, - 107, 3, 2, 2, 2, 1533, 1535, 7, 130, 2, 2, 1534, 1536, 9, 6, 2, 2, 1535, - 1534, 3, 2, 2, 2, 1535, 1536, 3, 2, 2, 2, 1536, 1537, 3, 2, 2, 2, 1537, - 1542, 5, 98, 50, 2, 1538, 1539, 7, 7, 2, 2, 1539, 1541, 5, 98, 50, 2, 1540, - 1538, 3, 2, 2, 2, 1541, 1544, 3, 2, 2, 2, 1542, 1540, 3, 2, 2, 2, 1542, - 1543, 3, 2, 2, 2, 1543, 1557, 3, 2, 2, 2, 1544, 1542, 3, 2, 2, 2, 1545, - 1555, 7, 77, 2, 2, 1546, 1551, 5, 100, 51, 2, 1547, 1548, 7, 7, 2, 2, 1548, - 1550, 5, 100, 51, 2, 1549, 1547, 3, 2, 2, 2, 1550, 1553, 3, 2, 2, 2, 1551, - 1549, 3, 2, 2, 2, 1551, 1552, 3, 2, 2, 2, 1552, 1556, 3, 2, 2, 2, 1553, - 1551, 3, 2, 2, 2, 1554, 1556, 5, 102, 52, 2, 1555, 1546, 3, 2, 2, 2, 1555, - 1554, 3, 2, 2, 2, 1556, 1558, 3, 2, 2, 2, 1557, 1545, 3, 2, 2, 2, 1557, - 1558, 3, 2, 2, 2, 1558, 1561, 3, 2, 2, 2, 1559, 1560, 7, 148, 2, 2, 1560, - 1562, 5, 78, 40, 2, 1561, 1559, 3, 2, 2, 2, 1561, 1562, 3, 2, 2, 2, 1562, - 1577, 3, 2, 2, 2, 1563, 1564, 7, 80, 2, 2, 1564, 1565, 7, 42, 2, 2, 1565, - 1570, 5, 78, 40, 2, 1566, 1567, 7, 7, 2, 2, 1567, 1569, 5, 78, 40, 2, 1568, - 1566, 3, 2, 2, 2, 1569, 1572, 3, 2, 2, 2, 1570, 1568, 3, 2, 2, 2, 1570, - 1571, 3, 2, 2, 2, 1571, 1575, 3, 2, 2, 2, 1572, 1570, 3, 2, 2, 2, 1573, - 1574, 7, 81, 2, 2, 1574, 1576, 5, 78, 40, 2, 1575, 1573, 3, 2, 2, 2, 1575, - 1576, 3, 2, 2, 2, 1576, 1578, 3, 2, 2, 2, 1577, 1563, 3, 2, 2, 2, 1577, - 1578, 3, 2, 2, 2, 1578, 1608, 3, 2, 2, 2, 1579, 1580, 7, 144, 2, 2, 1580, - 1581, 7, 5, 2, 2, 1581, 1586, 5, 78, 40, 2, 1582, 1583, 7, 7, 2, 2, 1583, - 1585, 5, 78, 40, 2, 1584, 1582, 3, 2, 2, 2, 1585, 1588, 3, 2, 2, 2, 1586, - 1584, 3, 2, 2, 2, 1586, 1587, 3, 2, 2, 2, 1587, 1589, 3, 2, 2, 2, 1588, - 1586, 3, 2, 2, 2, 1589, 1604, 7, 6, 2, 2, 1590, 1591, 7, 7, 2, 2, 1591, - 1592, 7, 5, 2, 2, 1592, 1597, 5, 78, 40, 2, 1593, 1594, 7, 7, 2, 2, 1594, - 1596, 5, 78, 40, 2, 1595, 1593, 3, 2, 2, 2, 1596, 1599, 3, 2, 2, 2, 1597, - 1595, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 1600, 3, 2, 2, 2, 1599, - 1597, 3, 2, 2, 2, 1600, 1601, 7, 6, 2, 2, 1601, 1603, 3, 2, 2, 2, 1602, - 1590, 3, 2, 2, 2, 1603, 1606, 3, 2, 2, 2, 1604, 1602, 3, 2, 2, 2, 1604, - 1605, 3, 2, 2, 2, 1605, 1608, 3, 2, 2, 2, 1606, 1604, 3, 2, 2, 2, 1607, - 1533, 3, 2, 2, 2, 1607, 1579, 3, 2, 2, 2, 1608, 109, 3, 2, 2, 2, 1609, - 1615, 7, 139, 2, 2, 1610, 1611, 7, 139, 2, 2, 1611, 1615, 7, 31, 2, 2, - 1612, 1615, 7, 92, 2, 2, 1613, 1615, 7, 70, 2, 2, 1614, 1609, 3, 2, 2, - 2, 1614, 1610, 3, 2, 2, 2, 1614, 1612, 3, 2, 2, 2, 1614, 1613, 3, 2, 2, - 2, 1615, 111, 3, 2, 2, 2, 1616, 1618, 9, 10, 2, 2, 1617, 1616, 3, 2, 2, - 2, 1617, 1618, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 1620, 7, 152, - 2, 2, 1620, 113, 3, 2, 2, 2, 1621, 1622, 9, 17, 2, 2, 1622, 115, 3, 2, - 2, 2, 1623, 1624, 9, 18, 2, 2, 1624, 117, 3, 2, 2, 2, 1625, 1626, 7, 154, - 2, 2, 1626, 119, 3, 2, 2, 2, 1627, 1630, 5, 78, 40, 2, 1628, 1630, 5, 70, - 36, 2, 1629, 1627, 3, 2, 2, 2, 1629, 1628, 3, 2, 2, 2, 1630, 121, 3, 2, - 2, 2, 1631, 1632, 9, 19, 2, 2, 1632, 123, 3, 2, 2, 2, 1633, 1634, 9, 20, - 2, 2, 1634, 125, 3, 2, 2, 2, 1635, 1636, 5, 166, 84, 2, 1636, 127, 3, 2, - 2, 2, 1637, 1638, 5, 166, 84, 2, 1638, 129, 3, 2, 2, 2, 1639, 1640, 5, - 166, 84, 2, 1640, 131, 3, 2, 2, 2, 1641, 1642, 5, 166, 84, 2, 1642, 133, - 3, 2, 2, 2, 1643, 1644, 5, 166, 84, 2, 1644, 135, 3, 2, 2, 2, 1645, 1646, - 5, 166, 84, 2, 1646, 137, 3, 2, 2, 2, 1647, 1648, 5, 166, 84, 2, 1648, - 139, 3, 2, 2, 2, 1649, 1650, 5, 166, 84, 2, 1650, 141, 3, 2, 2, 2, 1651, - 1652, 5, 166, 84, 2, 1652, 143, 3, 2, 2, 2, 1653, 1654, 5, 166, 84, 2, - 1654, 145, 3, 2, 2, 2, 1655, 1656, 5, 166, 84, 2, 1656, 147, 3, 2, 2, 2, - 1657, 1658, 5, 166, 84, 2, 1658, 149, 3, 2, 2, 2, 1659, 1660, 5, 166, 84, - 2, 1660, 151, 3, 2, 2, 2, 1661, 1662, 5, 166, 84, 2, 1662, 153, 3, 2, 2, - 2, 1663, 1664, 5, 166, 84, 2, 1664, 155, 3, 2, 2, 2, 1665, 1666, 5, 166, - 84, 2, 1666, 157, 3, 2, 2, 2, 1667, 1668, 5, 166, 84, 2, 1668, 159, 3, - 2, 2, 2, 1669, 1670, 5, 166, 84, 2, 1670, 161, 3, 2, 2, 2, 1671, 1678, - 7, 151, 2, 2, 1672, 1678, 7, 154, 2, 2, 1673, 1674, 7, 5, 2, 2, 1674, 1675, - 5, 162, 82, 2, 1675, 1676, 7, 6, 2, 2, 1676, 1678, 3, 2, 2, 2, 1677, 1671, - 3, 2, 2, 2, 1677, 1672, 3, 2, 2, 2, 1677, 1673, 3, 2, 2, 2, 1678, 163, - 3, 2, 2, 2, 1679, 1680, 5, 166, 84, 2, 1680, 165, 3, 2, 2, 2, 1681, 1689, - 7, 151, 2, 2, 1682, 1689, 5, 124, 63, 2, 1683, 1689, 7, 154, 2, 2, 1684, - 1685, 7, 5, 2, 2, 1685, 1686, 5, 166, 84, 2, 1686, 1687, 7, 6, 2, 2, 1687, - 1689, 3, 2, 2, 2, 1688, 1681, 3, 2, 2, 2, 1688, 1682, 3, 2, 2, 2, 1688, - 1683, 3, 2, 2, 2, 1688, 1684, 3, 2, 2, 2, 1689, 167, 3, 2, 2, 2, 239, 171, - 179, 186, 191, 197, 203, 205, 237, 244, 252, 260, 263, 272, 276, 284, 288, - 290, 295, 297, 300, 305, 309, 314, 323, 326, 332, 334, 338, 344, 349, 360, - 366, 370, 376, 381, 390, 397, 403, 407, 411, 417, 422, 429, 440, 443, 445, - 451, 457, 461, 468, 474, 480, 486, 491, 503, 508, 519, 524, 527, 534, 537, - 544, 553, 556, 562, 564, 568, 576, 581, 589, 594, 602, 607, 615, 620, 625, - 633, 643, 646, 652, 654, 657, 676, 682, 691, 696, 705, 716, 723, 729, 735, - 744, 751, 755, 757, 761, 768, 770, 774, 777, 783, 793, 796, 802, 804, 807, - 815, 825, 828, 834, 836, 840, 847, 856, 860, 862, 866, 875, 880, 882, 891, - 902, 909, 912, 915, 928, 942, 947, 950, 963, 977, 982, 991, 994, 1000, - 1002, 1008, 1013, 1019, 1031, 1035, 1040, 1044, 1047, 1065, 1070, 1075, - 1083, 1088, 1097, 1104, 1108, 1124, 1127, 1135, 1144, 1148, 1153, 1182, - 1187, 1196, 1206, 1209, 1215, 1218, 1225, 1231, 1238, 1240, 1242, 1253, - 1258, 1270, 1274, 1278, 1282, 1289, 1291, 1299, 1306, 1309, 1313, 1318, - 1326, 1345, 1351, 1355, 1362, 1368, 1376, 1381, 1384, 1389, 1398, 1403, - 1417, 1420, 1422, 1427, 1431, 1434, 1441, 1446, 1455, 1458, 1462, 1465, - 1473, 1477, 1485, 1488, 1490, 1499, 1504, 1508, 1512, 1515, 1526, 1531, - 1535, 1542, 1551, 1555, 1557, 1561, 1570, 1575, 1577, 1586, 1597, 1604, - 1607, 1614, 1617, 1629, 1677, 1688, -} -var deserializer = antlr.NewATNDeserializer(nil) -var deserializedATN = deserializer.DeserializeFromUInt16(parserATN) - + 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, + 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, + 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, + 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, + 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, + 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, + 9, 111, 4, 112, 9, 112, 3, 2, 7, 2, 226, 10, 2, 12, 2, 14, 2, 229, 11, + 2, 3, 2, 3, 2, 3, 3, 7, 3, 234, 10, 3, 12, 3, 14, 3, 237, 11, 3, 3, 3, + 3, 3, 6, 3, 241, 10, 3, 13, 3, 14, 3, 242, 3, 3, 7, 3, 246, 10, 3, 12, + 3, 14, 3, 249, 11, 3, 3, 3, 7, 3, 252, 10, 3, 12, 3, 14, 3, 255, 11, 3, + 3, 4, 3, 4, 3, 4, 5, 4, 260, 10, 4, 5, 4, 262, 10, 4, 3, 4, 3, 4, 3, 4, + 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, + 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 288, 10, 4, + 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 295, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, + 3, 5, 5, 5, 302, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 308, 10, 5, 3, 5, + 3, 5, 5, 5, 312, 10, 5, 3, 5, 5, 5, 315, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, + 3, 6, 5, 6, 322, 10, 6, 3, 6, 5, 6, 325, 10, 6, 3, 7, 3, 7, 5, 7, 329, + 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 337, 10, 8, 3, 8, 3, 8, + 5, 8, 341, 10, 8, 5, 8, 343, 10, 8, 3, 9, 3, 9, 5, 9, 347, 10, 9, 3, 10, + 3, 10, 5, 10, 351, 10, 10, 3, 10, 3, 10, 5, 10, 355, 10, 10, 3, 10, 5, + 10, 358, 10, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 365, 10, 12, + 3, 12, 3, 12, 3, 13, 3, 13, 5, 13, 371, 10, 13, 3, 13, 3, 13, 3, 13, 3, + 13, 5, 13, 377, 10, 13, 3, 13, 3, 13, 3, 13, 5, 13, 382, 10, 13, 3, 13, + 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 7, 13, 391, 10, 13, 12, 13, 14, + 13, 394, 11, 13, 3, 13, 3, 13, 3, 13, 5, 13, 399, 10, 13, 3, 14, 3, 14, + 5, 14, 403, 10, 14, 3, 14, 3, 14, 5, 14, 407, 10, 14, 3, 14, 5, 14, 410, + 10, 14, 3, 15, 3, 15, 5, 15, 414, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, + 15, 420, 10, 15, 3, 15, 3, 15, 3, 15, 5, 15, 425, 10, 15, 3, 15, 3, 15, + 3, 15, 3, 15, 3, 15, 7, 15, 432, 10, 15, 12, 15, 14, 15, 435, 11, 15, 3, + 15, 3, 15, 7, 15, 439, 10, 15, 12, 15, 14, 15, 442, 11, 15, 3, 15, 3, 15, + 3, 15, 5, 15, 447, 10, 15, 3, 15, 3, 15, 5, 15, 451, 10, 15, 3, 16, 3, + 16, 5, 16, 455, 10, 16, 3, 16, 7, 16, 458, 10, 16, 12, 16, 14, 16, 461, + 11, 16, 3, 17, 6, 17, 464, 10, 17, 13, 17, 14, 17, 465, 3, 17, 3, 17, 3, + 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 478, 10, 17, + 3, 18, 3, 18, 5, 18, 482, 10, 18, 3, 18, 3, 18, 3, 18, 5, 18, 487, 10, + 18, 3, 18, 5, 18, 490, 10, 18, 3, 18, 5, 18, 493, 10, 18, 3, 18, 3, 18, + 3, 18, 5, 18, 498, 10, 18, 3, 18, 5, 18, 501, 10, 18, 3, 18, 3, 18, 3, + 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, + 515, 10, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 522, 10, 18, 3, + 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 529, 10, 18, 5, 18, 531, 10, 18, + 3, 19, 5, 19, 534, 10, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 540, 10, + 20, 3, 20, 3, 20, 3, 20, 5, 20, 545, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, + 7, 20, 551, 10, 20, 12, 20, 14, 20, 554, 11, 20, 3, 20, 3, 20, 5, 20, 558, + 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, + 3, 20, 3, 20, 7, 20, 571, 10, 20, 12, 20, 14, 20, 574, 11, 20, 3, 20, 3, + 20, 3, 20, 5, 20, 579, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, + 7, 21, 587, 10, 21, 12, 21, 14, 21, 590, 11, 21, 3, 21, 3, 21, 5, 21, 594, + 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, + 604, 10, 21, 3, 21, 3, 21, 7, 21, 608, 10, 21, 12, 21, 14, 21, 611, 11, + 21, 3, 21, 5, 21, 614, 10, 21, 3, 21, 3, 21, 3, 21, 5, 21, 619, 10, 21, + 5, 21, 621, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 5, 23, 629, + 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 635, 10, 23, 3, 23, 3, 23, 3, + 23, 5, 23, 640, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 647, + 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 7, 23, 656, 10, + 23, 12, 23, 14, 23, 659, 11, 23, 5, 23, 661, 10, 23, 5, 23, 663, 10, 23, + 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 670, 10, 23, 3, 23, 3, 23, 5, + 23, 674, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 681, 10, 23, + 3, 23, 3, 23, 6, 23, 685, 10, 23, 13, 23, 14, 23, 686, 3, 23, 3, 23, 3, + 24, 3, 24, 5, 24, 693, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 699, + 10, 24, 3, 24, 3, 24, 3, 24, 5, 24, 704, 10, 24, 3, 24, 3, 24, 3, 24, 3, + 24, 3, 24, 7, 24, 711, 10, 24, 12, 24, 14, 24, 714, 11, 24, 3, 24, 3, 24, + 5, 24, 718, 10, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, + 25, 3, 25, 5, 25, 729, 10, 25, 3, 25, 3, 25, 3, 25, 5, 25, 734, 10, 25, + 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 7, 25, 743, 10, 25, 12, + 25, 14, 25, 746, 11, 25, 3, 25, 3, 25, 5, 25, 750, 10, 25, 3, 26, 3, 26, + 5, 26, 754, 10, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, + 26, 3, 26, 3, 26, 3, 26, 3, 26, 7, 26, 768, 10, 26, 12, 26, 14, 26, 771, + 11, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 778, 10, 27, 12, 27, + 14, 27, 781, 11, 27, 3, 27, 3, 27, 5, 27, 785, 10, 27, 3, 28, 3, 28, 3, + 28, 3, 28, 3, 28, 3, 28, 5, 28, 793, 10, 28, 3, 28, 3, 28, 3, 28, 3, 29, + 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 803, 10, 29, 12, 29, 14, 29, 806, 11, + 29, 3, 29, 3, 29, 5, 29, 810, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, + 3, 30, 5, 30, 818, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 825, + 10, 30, 3, 31, 5, 31, 828, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, + 31, 835, 10, 31, 3, 31, 5, 31, 838, 10, 31, 3, 31, 5, 31, 841, 10, 31, + 3, 32, 3, 32, 5, 32, 845, 10, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, + 33, 5, 33, 853, 10, 33, 3, 33, 3, 33, 3, 33, 5, 33, 858, 10, 33, 3, 33, + 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 868, 10, 34, 3, + 34, 3, 34, 3, 34, 5, 34, 873, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, + 3, 34, 3, 34, 5, 34, 882, 10, 34, 3, 34, 3, 34, 3, 34, 7, 34, 887, 10, + 34, 12, 34, 14, 34, 890, 11, 34, 3, 34, 5, 34, 893, 10, 34, 3, 34, 3, 34, + 5, 34, 897, 10, 34, 3, 34, 5, 34, 900, 10, 34, 3, 34, 3, 34, 3, 34, 3, + 34, 7, 34, 906, 10, 34, 12, 34, 14, 34, 909, 11, 34, 3, 34, 3, 34, 3, 34, + 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 921, 10, 34, 3, + 34, 5, 34, 924, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, + 932, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 6, 34, 939, 10, 34, 13, + 34, 14, 34, 940, 3, 34, 3, 34, 5, 34, 945, 10, 34, 3, 34, 3, 34, 3, 34, + 5, 34, 950, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, + 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, + 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, + 34, 980, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, + 3, 34, 3, 34, 5, 34, 992, 10, 34, 3, 34, 3, 34, 3, 34, 5, 34, 997, 10, + 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, + 5, 34, 1009, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1015, 10, 34, 3, + 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1022, 10, 34, 3, 34, 3, 34, 5, 34, + 1026, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 1034, 10, + 34, 12, 34, 14, 34, 1037, 11, 34, 5, 34, 1039, 10, 34, 3, 34, 3, 34, 3, + 34, 3, 34, 5, 34, 1045, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1051, + 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 7, 34, 1058, 10, 34, 12, 34, + 14, 34, 1061, 11, 34, 5, 34, 1063, 10, 34, 3, 34, 3, 34, 5, 34, 1067, 10, + 34, 7, 34, 1069, 10, 34, 12, 34, 14, 34, 1072, 11, 34, 3, 35, 3, 35, 3, + 35, 3, 35, 3, 35, 3, 35, 5, 35, 1080, 10, 35, 3, 35, 3, 35, 3, 36, 3, 36, + 3, 37, 5, 37, 1087, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1094, + 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1100, 10, 37, 3, 37, 3, 37, + 3, 37, 5, 37, 1105, 10, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 1111, 10, + 37, 12, 37, 14, 37, 1114, 11, 37, 3, 37, 3, 37, 5, 37, 1118, 10, 37, 3, + 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 1125, 10, 37, 12, 37, 14, 37, 1128, + 11, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 1136, 10, 37, + 12, 37, 14, 37, 1139, 11, 37, 3, 37, 3, 37, 7, 37, 1143, 10, 37, 12, 37, + 14, 37, 1146, 11, 37, 3, 37, 5, 37, 1149, 10, 37, 3, 37, 5, 37, 1152, 10, + 37, 3, 37, 3, 37, 5, 37, 1156, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, + 3, 38, 7, 38, 1164, 10, 38, 12, 38, 14, 38, 1167, 11, 38, 3, 38, 3, 38, + 3, 38, 5, 38, 1172, 10, 38, 5, 38, 1174, 10, 38, 3, 38, 3, 38, 3, 38, 3, + 38, 3, 38, 3, 38, 5, 38, 1182, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, + 5, 38, 1189, 10, 38, 3, 38, 3, 38, 3, 38, 7, 38, 1194, 10, 38, 12, 38, + 14, 38, 1197, 11, 38, 3, 38, 3, 38, 5, 38, 1201, 10, 38, 5, 38, 1203, 10, + 38, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 1209, 10, 39, 3, 39, 3, 39, 3, 39, + 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 1218, 10, 39, 3, 40, 3, 40, 3, 40, 5, + 40, 1223, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1230, 10, 41, + 3, 41, 3, 41, 5, 41, 1234, 10, 41, 5, 41, 1236, 10, 41, 3, 42, 5, 42, 1239, + 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 1245, 10, 42, 12, 42, 14, 42, + 1248, 11, 42, 3, 42, 5, 42, 1251, 10, 42, 3, 42, 5, 42, 1254, 10, 42, 3, + 43, 3, 43, 3, 43, 3, 43, 5, 43, 1260, 10, 43, 7, 43, 1262, 10, 43, 12, + 43, 14, 43, 1265, 11, 43, 3, 44, 3, 44, 5, 44, 1269, 10, 44, 3, 44, 3, + 44, 3, 44, 7, 44, 1274, 10, 44, 12, 44, 14, 44, 1277, 11, 44, 3, 44, 3, + 44, 3, 44, 3, 44, 7, 44, 1283, 10, 44, 12, 44, 14, 44, 1286, 11, 44, 3, + 44, 5, 44, 1289, 10, 44, 5, 44, 1291, 10, 44, 3, 44, 3, 44, 5, 44, 1295, + 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1302, 10, 44, 12, 44, + 14, 44, 1305, 11, 44, 3, 44, 3, 44, 5, 44, 1309, 10, 44, 5, 44, 1311, 10, + 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, + 1322, 10, 44, 12, 44, 14, 44, 1325, 11, 44, 5, 44, 1327, 10, 44, 3, 44, + 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1334, 10, 44, 12, 44, 14, 44, 1337, + 11, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1345, 10, 44, + 12, 44, 14, 44, 1348, 11, 44, 3, 44, 3, 44, 7, 44, 1352, 10, 44, 12, 44, + 14, 44, 1355, 11, 44, 5, 44, 1357, 10, 44, 3, 45, 3, 45, 3, 46, 5, 46, + 1362, 10, 46, 3, 46, 3, 46, 5, 46, 1366, 10, 46, 3, 46, 5, 46, 1369, 10, + 46, 3, 47, 5, 47, 1372, 10, 47, 3, 47, 3, 47, 3, 47, 5, 47, 1377, 10, 47, + 3, 47, 3, 47, 5, 47, 1381, 10, 47, 3, 47, 6, 47, 1384, 10, 47, 13, 47, + 14, 47, 1385, 3, 47, 5, 47, 1389, 10, 47, 3, 47, 5, 47, 1392, 10, 47, 3, + 48, 3, 48, 3, 48, 5, 48, 1397, 10, 48, 3, 48, 3, 48, 5, 48, 1401, 10, 48, + 3, 48, 5, 48, 1404, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1411, + 10, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1416, 10, 48, 3, 48, 3, 48, 3, 48, + 3, 48, 3, 48, 7, 48, 1423, 10, 48, 12, 48, 14, 48, 1426, 11, 48, 3, 48, + 3, 48, 5, 48, 1430, 10, 48, 3, 48, 5, 48, 1433, 10, 48, 3, 48, 3, 48, 3, + 48, 3, 48, 7, 48, 1439, 10, 48, 12, 48, 14, 48, 1442, 11, 48, 3, 48, 5, + 48, 1445, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1453, + 10, 48, 3, 48, 5, 48, 1456, 10, 48, 5, 48, 1458, 10, 48, 3, 49, 3, 49, + 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 1467, 10, 49, 3, 49, 5, 49, 1470, + 10, 49, 5, 49, 1472, 10, 49, 3, 50, 3, 50, 5, 50, 1476, 10, 50, 3, 50, + 3, 50, 5, 50, 1480, 10, 50, 3, 50, 3, 50, 5, 50, 1484, 10, 50, 3, 50, 5, + 50, 1487, 10, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, + 1496, 10, 51, 12, 51, 14, 51, 1499, 11, 51, 3, 51, 3, 51, 5, 51, 1503, + 10, 51, 3, 52, 3, 52, 5, 52, 1507, 10, 52, 3, 52, 3, 52, 5, 52, 1511, 10, + 52, 3, 53, 5, 53, 1514, 10, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1519, 10, 53, + 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1525, 10, 53, 3, 53, 3, 53, 3, 53, 3, + 53, 3, 53, 5, 53, 1532, 10, 53, 3, 53, 3, 53, 3, 53, 7, 53, 1537, 10, 53, + 12, 53, 14, 53, 1540, 11, 53, 3, 53, 3, 53, 5, 53, 1544, 10, 53, 3, 54, + 3, 54, 3, 54, 3, 54, 7, 54, 1550, 10, 54, 12, 54, 14, 54, 1553, 11, 54, + 3, 54, 3, 54, 3, 55, 5, 55, 1558, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 1563, + 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 1569, 10, 55, 3, 55, 3, 55, + 3, 55, 3, 55, 3, 55, 5, 55, 1576, 10, 55, 3, 55, 3, 55, 3, 55, 7, 55, 1581, + 10, 55, 12, 55, 14, 55, 1584, 11, 55, 3, 55, 3, 55, 5, 55, 1588, 10, 55, + 3, 55, 5, 55, 1591, 10, 55, 3, 55, 5, 55, 1594, 10, 55, 3, 56, 3, 56, 3, + 56, 5, 56, 1599, 10, 56, 3, 56, 3, 56, 3, 56, 5, 56, 1604, 10, 56, 3, 56, + 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 1611, 10, 56, 3, 57, 3, 57, 5, 57, 1615, + 10, 57, 3, 57, 3, 57, 5, 57, 1619, 10, 57, 3, 58, 3, 58, 3, 58, 3, 58, + 3, 58, 3, 58, 3, 59, 3, 59, 5, 59, 1629, 10, 59, 3, 59, 3, 59, 3, 59, 3, + 59, 3, 59, 7, 59, 1636, 10, 59, 12, 59, 14, 59, 1639, 11, 59, 5, 59, 1641, + 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 1648, 10, 59, 12, 59, + 14, 59, 1651, 11, 59, 3, 59, 5, 59, 1654, 10, 59, 3, 59, 3, 59, 3, 60, + 3, 60, 3, 60, 3, 60, 5, 60, 1662, 10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, + 60, 7, 60, 1669, 10, 60, 12, 60, 14, 60, 1672, 11, 60, 5, 60, 1674, 10, + 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 7, 60, 1681, 10, 60, 12, 60, 14, + 60, 1684, 11, 60, 5, 60, 1686, 10, 60, 3, 60, 5, 60, 1689, 10, 60, 3, 60, + 5, 60, 1692, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, + 61, 5, 61, 1702, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, + 5, 62, 1711, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 1718, 10, + 63, 12, 63, 14, 63, 1721, 11, 63, 3, 63, 5, 63, 1724, 10, 63, 3, 63, 3, + 63, 3, 64, 3, 64, 3, 64, 5, 64, 1731, 10, 64, 3, 64, 3, 64, 3, 64, 7, 64, + 1736, 10, 64, 12, 64, 14, 64, 1739, 11, 64, 3, 64, 5, 64, 1742, 10, 64, + 3, 64, 3, 64, 5, 64, 1746, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 7, + 65, 1753, 10, 65, 12, 65, 14, 65, 1756, 11, 65, 3, 65, 5, 65, 1759, 10, + 65, 3, 65, 3, 65, 5, 65, 1763, 10, 65, 3, 65, 3, 65, 3, 65, 5, 65, 1768, + 10, 65, 3, 66, 3, 66, 5, 66, 1772, 10, 66, 3, 66, 3, 66, 3, 66, 7, 66, + 1777, 10, 66, 12, 66, 14, 66, 1780, 11, 66, 3, 67, 3, 67, 3, 67, 3, 67, + 3, 67, 7, 67, 1787, 10, 67, 12, 67, 14, 67, 1790, 11, 67, 3, 68, 3, 68, + 3, 68, 3, 68, 5, 68, 1796, 10, 68, 3, 69, 3, 69, 3, 69, 5, 69, 1801, 10, + 69, 3, 69, 5, 69, 1804, 10, 69, 3, 69, 3, 69, 5, 69, 1808, 10, 69, 3, 70, + 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, + 71, 5, 71, 1822, 10, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, + 3, 72, 3, 72, 3, 72, 5, 72, 1834, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, + 73, 3, 73, 3, 73, 5, 73, 1843, 10, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, + 3, 74, 3, 74, 5, 74, 1852, 10, 74, 3, 74, 3, 74, 5, 74, 1856, 10, 74, 3, + 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1866, 10, 74, + 3, 74, 5, 74, 1869, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, + 74, 5, 74, 1878, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, + 5, 74, 1887, 10, 74, 3, 74, 5, 74, 1890, 10, 74, 3, 74, 3, 74, 3, 74, 3, + 74, 5, 74, 1896, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, + 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1910, 10, 74, 3, 74, 3, 74, 5, + 74, 1914, 10, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, + 3, 74, 5, 74, 1925, 10, 74, 3, 74, 3, 74, 3, 74, 5, 74, 1930, 10, 74, 3, + 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 6, 77, 1941, + 10, 77, 13, 77, 14, 77, 1942, 3, 78, 3, 78, 3, 78, 6, 78, 1948, 10, 78, + 13, 78, 14, 78, 1949, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 5, 80, + 1958, 10, 80, 3, 80, 3, 80, 3, 80, 5, 80, 1963, 10, 80, 7, 80, 1965, 10, + 80, 12, 80, 14, 80, 1968, 11, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 83, 3, + 83, 3, 84, 3, 84, 3, 85, 3, 85, 5, 85, 1980, 10, 85, 3, 86, 3, 86, 3, 87, + 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, + 92, 3, 93, 3, 93, 3, 94, 3, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 97, 3, 97, + 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, + 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, + 107, 3, 107, 3, 108, 3, 108, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, + 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 5, 112, 2041, + 10, 112, 3, 112, 4, 433, 465, 3, 66, 113, 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, 2, 30, 5, 2, 60, 60, 71, 71, 84, 84, 4, 2, + 49, 49, 68, 68, 3, 2, 134, 135, 4, 2, 147, 147, 172, 172, 3, 2, 10, 11, + 4, 2, 61, 61, 142, 142, 4, 2, 58, 58, 106, 106, 4, 2, 60, 60, 84, 84, 7, + 2, 27, 27, 74, 74, 83, 83, 124, 124, 127, 127, 6, 2, 86, 86, 133, 133, + 139, 139, 146, 146, 4, 2, 9, 9, 14, 15, 3, 2, 16, 19, 3, 2, 20, 23, 6, + 2, 79, 79, 99, 99, 101, 101, 120, 120, 5, 2, 27, 27, 74, 74, 127, 127, + 7, 2, 54, 56, 106, 106, 173, 174, 187, 187, 189, 190, 4, 2, 31, 31, 64, + 64, 5, 2, 129, 129, 155, 155, 180, 180, 4, 2, 7, 7, 108, 108, 3, 2, 177, + 178, 4, 2, 36, 36, 62, 62, 4, 2, 152, 152, 163, 163, 4, 2, 160, 160, 167, + 167, 4, 2, 161, 161, 168, 169, 4, 2, 162, 162, 164, 164, 4, 2, 10, 12, + 104, 104, 4, 2, 186, 186, 189, 189, 3, 2, 27, 181, 2, 2319, 2, 227, 3, + 2, 2, 2, 4, 235, 3, 2, 2, 2, 6, 261, 3, 2, 2, 2, 8, 289, 3, 2, 2, 2, 10, + 316, 3, 2, 2, 2, 12, 326, 3, 2, 2, 2, 14, 334, 3, 2, 2, 2, 16, 344, 3, + 2, 2, 2, 18, 348, 3, 2, 2, 2, 20, 359, 3, 2, 2, 2, 22, 362, 3, 2, 2, 2, + 24, 368, 3, 2, 2, 2, 26, 402, 3, 2, 2, 2, 28, 411, 3, 2, 2, 2, 30, 452, + 3, 2, 2, 2, 32, 463, 3, 2, 2, 2, 34, 481, 3, 2, 2, 2, 36, 533, 3, 2, 2, + 2, 38, 539, 3, 2, 2, 2, 40, 580, 3, 2, 2, 2, 42, 622, 3, 2, 2, 2, 44, 626, + 3, 2, 2, 2, 46, 690, 3, 2, 2, 2, 48, 722, 3, 2, 2, 2, 50, 751, 3, 2, 2, + 2, 52, 772, 3, 2, 2, 2, 54, 786, 3, 2, 2, 2, 56, 797, 3, 2, 2, 2, 58, 817, + 3, 2, 2, 2, 60, 827, 3, 2, 2, 2, 62, 842, 3, 2, 2, 2, 64, 848, 3, 2, 2, + 2, 66, 949, 3, 2, 2, 2, 68, 1073, 3, 2, 2, 2, 70, 1083, 3, 2, 2, 2, 72, + 1155, 3, 2, 2, 2, 74, 1157, 3, 2, 2, 2, 76, 1204, 3, 2, 2, 2, 78, 1222, + 3, 2, 2, 2, 80, 1224, 3, 2, 2, 2, 82, 1238, 3, 2, 2, 2, 84, 1255, 3, 2, + 2, 2, 86, 1356, 3, 2, 2, 2, 88, 1358, 3, 2, 2, 2, 90, 1361, 3, 2, 2, 2, + 92, 1371, 3, 2, 2, 2, 94, 1457, 3, 2, 2, 2, 96, 1471, 3, 2, 2, 2, 98, 1486, + 3, 2, 2, 2, 100, 1502, 3, 2, 2, 2, 102, 1510, 3, 2, 2, 2, 104, 1513, 3, + 2, 2, 2, 106, 1545, 3, 2, 2, 2, 108, 1557, 3, 2, 2, 2, 110, 1598, 3, 2, + 2, 2, 112, 1612, 3, 2, 2, 2, 114, 1620, 3, 2, 2, 2, 116, 1626, 3, 2, 2, + 2, 118, 1657, 3, 2, 2, 2, 120, 1693, 3, 2, 2, 2, 122, 1703, 3, 2, 2, 2, + 124, 1712, 3, 2, 2, 2, 126, 1727, 3, 2, 2, 2, 128, 1747, 3, 2, 2, 2, 130, + 1769, 3, 2, 2, 2, 132, 1781, 3, 2, 2, 2, 134, 1791, 3, 2, 2, 2, 136, 1797, + 3, 2, 2, 2, 138, 1809, 3, 2, 2, 2, 140, 1821, 3, 2, 2, 2, 142, 1833, 3, + 2, 2, 2, 144, 1842, 3, 2, 2, 2, 146, 1929, 3, 2, 2, 2, 148, 1931, 3, 2, + 2, 2, 150, 1934, 3, 2, 2, 2, 152, 1937, 3, 2, 2, 2, 154, 1944, 3, 2, 2, + 2, 156, 1951, 3, 2, 2, 2, 158, 1955, 3, 2, 2, 2, 160, 1969, 3, 2, 2, 2, + 162, 1971, 3, 2, 2, 2, 164, 1973, 3, 2, 2, 2, 166, 1975, 3, 2, 2, 2, 168, + 1979, 3, 2, 2, 2, 170, 1981, 3, 2, 2, 2, 172, 1983, 3, 2, 2, 2, 174, 1985, + 3, 2, 2, 2, 176, 1987, 3, 2, 2, 2, 178, 1989, 3, 2, 2, 2, 180, 1991, 3, + 2, 2, 2, 182, 1993, 3, 2, 2, 2, 184, 1995, 3, 2, 2, 2, 186, 1997, 3, 2, + 2, 2, 188, 1999, 3, 2, 2, 2, 190, 2001, 3, 2, 2, 2, 192, 2003, 3, 2, 2, + 2, 194, 2005, 3, 2, 2, 2, 196, 2007, 3, 2, 2, 2, 198, 2009, 3, 2, 2, 2, + 200, 2011, 3, 2, 2, 2, 202, 2013, 3, 2, 2, 2, 204, 2015, 3, 2, 2, 2, 206, + 2017, 3, 2, 2, 2, 208, 2019, 3, 2, 2, 2, 210, 2021, 3, 2, 2, 2, 212, 2023, + 3, 2, 2, 2, 214, 2025, 3, 2, 2, 2, 216, 2027, 3, 2, 2, 2, 218, 2029, 3, + 2, 2, 2, 220, 2031, 3, 2, 2, 2, 222, 2040, 3, 2, 2, 2, 224, 226, 5, 4, + 3, 2, 225, 224, 3, 2, 2, 2, 226, 229, 3, 2, 2, 2, 227, 225, 3, 2, 2, 2, + 227, 228, 3, 2, 2, 2, 228, 230, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 230, + 231, 7, 2, 2, 3, 231, 3, 3, 2, 2, 2, 232, 234, 7, 3, 2, 2, 233, 232, 3, + 2, 2, 2, 234, 237, 3, 2, 2, 2, 235, 233, 3, 2, 2, 2, 235, 236, 3, 2, 2, + 2, 236, 238, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 238, 247, 5, 6, 4, 2, 239, + 241, 7, 3, 2, 2, 240, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 240, + 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 246, 5, 6, + 4, 2, 245, 240, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, + 247, 248, 3, 2, 2, 2, 248, 253, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, + 252, 7, 3, 2, 2, 251, 250, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, + 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 5, 3, 2, 2, 2, 255, 253, 3, 2, 2, + 2, 256, 259, 7, 73, 2, 2, 257, 258, 7, 116, 2, 2, 258, 260, 7, 113, 2, + 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 262, 3, 2, 2, 2, 261, + 256, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 287, 3, 2, 2, 2, 263, 288, + 5, 8, 5, 2, 264, 288, 5, 10, 6, 2, 265, 288, 5, 12, 7, 2, 266, 288, 5, + 14, 8, 2, 267, 288, 5, 16, 9, 2, 268, 288, 5, 24, 13, 2, 269, 288, 5, 28, + 15, 2, 270, 288, 5, 44, 23, 2, 271, 288, 5, 46, 24, 2, 272, 288, 5, 48, + 25, 2, 273, 288, 5, 58, 30, 2, 274, 288, 5, 60, 31, 2, 275, 288, 5, 62, + 32, 2, 276, 288, 5, 64, 33, 2, 277, 288, 5, 72, 37, 2, 278, 288, 5, 76, + 39, 2, 279, 288, 5, 80, 41, 2, 280, 288, 5, 22, 12, 2, 281, 288, 5, 18, + 10, 2, 282, 288, 5, 20, 11, 2, 283, 288, 5, 82, 42, 2, 284, 288, 5, 104, + 53, 2, 285, 288, 5, 108, 55, 2, 286, 288, 5, 112, 57, 2, 287, 263, 3, 2, + 2, 2, 287, 264, 3, 2, 2, 2, 287, 265, 3, 2, 2, 2, 287, 266, 3, 2, 2, 2, + 287, 267, 3, 2, 2, 2, 287, 268, 3, 2, 2, 2, 287, 269, 3, 2, 2, 2, 287, + 270, 3, 2, 2, 2, 287, 271, 3, 2, 2, 2, 287, 272, 3, 2, 2, 2, 287, 273, + 3, 2, 2, 2, 287, 274, 3, 2, 2, 2, 287, 275, 3, 2, 2, 2, 287, 276, 3, 2, + 2, 2, 287, 277, 3, 2, 2, 2, 287, 278, 3, 2, 2, 2, 287, 279, 3, 2, 2, 2, + 287, 280, 3, 2, 2, 2, 287, 281, 3, 2, 2, 2, 287, 282, 3, 2, 2, 2, 287, + 283, 3, 2, 2, 2, 287, 284, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, + 3, 2, 2, 2, 288, 7, 3, 2, 2, 2, 289, 290, 7, 32, 2, 2, 290, 294, 7, 133, + 2, 2, 291, 292, 5, 178, 90, 2, 292, 293, 7, 4, 2, 2, 293, 295, 3, 2, 2, + 2, 294, 291, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, + 314, 5, 180, 91, 2, 297, 307, 7, 123, 2, 2, 298, 299, 7, 137, 2, 2, 299, + 308, 5, 184, 93, 2, 300, 302, 7, 48, 2, 2, 301, 300, 3, 2, 2, 2, 301, 302, + 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 5, 186, 94, 2, 304, 305, 7, + 137, 2, 2, 305, 306, 5, 186, 94, 2, 306, 308, 3, 2, 2, 2, 307, 298, 3, + 2, 2, 2, 307, 301, 3, 2, 2, 2, 308, 315, 3, 2, 2, 2, 309, 311, 7, 29, 2, + 2, 310, 312, 7, 48, 2, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, + 313, 3, 2, 2, 2, 313, 315, 5, 30, 16, 2, 314, 297, 3, 2, 2, 2, 314, 309, + 3, 2, 2, 2, 315, 9, 3, 2, 2, 2, 316, 324, 7, 33, 2, 2, 317, 325, 5, 178, + 90, 2, 318, 319, 5, 178, 90, 2, 319, 320, 7, 4, 2, 2, 320, 322, 3, 2, 2, + 2, 321, 318, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, + 325, 5, 182, 92, 2, 324, 317, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 324, 325, + 3, 2, 2, 2, 325, 11, 3, 2, 2, 2, 326, 328, 7, 37, 2, 2, 327, 329, 7, 57, + 2, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, + 330, 331, 5, 66, 34, 2, 331, 332, 7, 35, 2, 2, 332, 333, 5, 178, 90, 2, + 333, 13, 3, 2, 2, 2, 334, 336, 7, 40, 2, 2, 335, 337, 9, 2, 2, 2, 336, + 335, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 342, 3, 2, 2, 2, 338, 340, + 7, 138, 2, 2, 339, 341, 5, 206, 104, 2, 340, 339, 3, 2, 2, 2, 340, 341, + 3, 2, 2, 2, 341, 343, 3, 2, 2, 2, 342, 338, 3, 2, 2, 2, 342, 343, 3, 2, + 2, 2, 343, 15, 3, 2, 2, 2, 344, 346, 9, 3, 2, 2, 345, 347, 7, 138, 2, 2, + 346, 345, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 17, 3, 2, 2, 2, 348, 350, + 7, 127, 2, 2, 349, 351, 7, 138, 2, 2, 350, 349, 3, 2, 2, 2, 350, 351, 3, + 2, 2, 2, 351, 357, 3, 2, 2, 2, 352, 354, 7, 137, 2, 2, 353, 355, 7, 130, + 2, 2, 354, 353, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, + 356, 358, 5, 202, 102, 2, 357, 352, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, + 19, 3, 2, 2, 2, 359, 360, 7, 130, 2, 2, 360, 361, 5, 202, 102, 2, 361, + 21, 3, 2, 2, 2, 362, 364, 7, 122, 2, 2, 363, 365, 7, 130, 2, 2, 364, 363, + 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 367, 5, 202, + 102, 2, 367, 23, 3, 2, 2, 2, 368, 370, 7, 52, 2, 2, 369, 371, 7, 141, 2, + 2, 370, 369, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, + 376, 7, 86, 2, 2, 373, 374, 7, 82, 2, 2, 374, 375, 7, 104, 2, 2, 375, 377, + 7, 72, 2, 2, 376, 373, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 381, 3, 2, + 2, 2, 378, 379, 5, 178, 90, 2, 379, 380, 7, 4, 2, 2, 380, 382, 3, 2, 2, + 2, 381, 378, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, + 384, 5, 192, 97, 2, 384, 385, 7, 109, 2, 2, 385, 386, 5, 180, 91, 2, 386, + 387, 7, 5, 2, 2, 387, 392, 5, 26, 14, 2, 388, 389, 7, 7, 2, 2, 389, 391, + 5, 26, 14, 2, 390, 388, 3, 2, 2, 2, 391, 394, 3, 2, 2, 2, 392, 390, 3, + 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 395, 3, 2, 2, 2, 394, 392, 3, 2, 2, + 2, 395, 398, 7, 6, 2, 2, 396, 397, 7, 149, 2, 2, 397, 399, 5, 66, 34, 2, + 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 25, 3, 2, 2, 2, 400, 403, + 5, 186, 94, 2, 401, 403, 5, 66, 34, 2, 402, 400, 3, 2, 2, 2, 402, 401, + 3, 2, 2, 2, 403, 406, 3, 2, 2, 2, 404, 405, 7, 47, 2, 2, 405, 407, 5, 188, + 95, 2, 406, 404, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 409, 3, 2, 2, 2, + 408, 410, 5, 138, 70, 2, 409, 408, 3, 2, 2, 2, 409, 410, 3, 2, 2, 2, 410, + 27, 3, 2, 2, 2, 411, 413, 7, 52, 2, 2, 412, 414, 9, 4, 2, 2, 413, 412, + 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 415, 3, 2, 2, 2, 415, 419, 7, 133, + 2, 2, 416, 417, 7, 82, 2, 2, 417, 418, 7, 104, 2, 2, 418, 420, 7, 72, 2, + 2, 419, 416, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 424, 3, 2, 2, 2, 421, + 422, 5, 178, 90, 2, 422, 423, 7, 4, 2, 2, 423, 425, 3, 2, 2, 2, 424, 421, + 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 450, 5, 180, + 91, 2, 427, 428, 7, 5, 2, 2, 428, 433, 5, 30, 16, 2, 429, 430, 7, 7, 2, + 2, 430, 432, 5, 30, 16, 2, 431, 429, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, + 433, 434, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 440, 3, 2, 2, 2, 435, + 433, 3, 2, 2, 2, 436, 437, 7, 7, 2, 2, 437, 439, 5, 38, 20, 2, 438, 436, + 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, + 2, 2, 441, 443, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 446, 7, 6, 2, 2, + 444, 445, 7, 151, 2, 2, 445, 447, 7, 186, 2, 2, 446, 444, 3, 2, 2, 2, 446, + 447, 3, 2, 2, 2, 447, 451, 3, 2, 2, 2, 448, 449, 7, 35, 2, 2, 449, 451, + 5, 82, 42, 2, 450, 427, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 451, 29, 3, 2, + 2, 2, 452, 454, 5, 186, 94, 2, 453, 455, 5, 32, 17, 2, 454, 453, 3, 2, + 2, 2, 454, 455, 3, 2, 2, 2, 455, 459, 3, 2, 2, 2, 456, 458, 5, 34, 18, + 2, 457, 456, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, + 460, 3, 2, 2, 2, 460, 31, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 464, 5, + 174, 88, 2, 463, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 466, 3, 2, + 2, 2, 465, 463, 3, 2, 2, 2, 466, 477, 3, 2, 2, 2, 467, 468, 7, 5, 2, 2, + 468, 469, 5, 36, 19, 2, 469, 470, 7, 6, 2, 2, 470, 478, 3, 2, 2, 2, 471, + 472, 7, 5, 2, 2, 472, 473, 5, 36, 19, 2, 473, 474, 7, 7, 2, 2, 474, 475, + 5, 36, 19, 2, 475, 476, 7, 6, 2, 2, 476, 478, 3, 2, 2, 2, 477, 467, 3, + 2, 2, 2, 477, 471, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 33, 3, 2, 2, + 2, 479, 480, 7, 51, 2, 2, 480, 482, 5, 174, 88, 2, 481, 479, 3, 2, 2, 2, + 481, 482, 3, 2, 2, 2, 482, 530, 3, 2, 2, 2, 483, 484, 7, 115, 2, 2, 484, + 486, 7, 97, 2, 2, 485, 487, 5, 138, 70, 2, 486, 485, 3, 2, 2, 2, 486, 487, + 3, 2, 2, 2, 487, 489, 3, 2, 2, 2, 488, 490, 5, 42, 22, 2, 489, 488, 3, + 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 492, 3, 2, 2, 2, 491, 493, 7, 38, 2, + 2, 492, 491, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 531, 3, 2, 2, 2, 494, + 495, 7, 104, 2, 2, 495, 498, 7, 106, 2, 2, 496, 498, 7, 141, 2, 2, 497, + 494, 3, 2, 2, 2, 497, 496, 3, 2, 2, 2, 498, 500, 3, 2, 2, 2, 499, 501, + 5, 42, 22, 2, 500, 499, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 531, 3, + 2, 2, 2, 502, 503, 7, 46, 2, 2, 503, 504, 7, 5, 2, 2, 504, 505, 5, 66, + 34, 2, 505, 506, 7, 6, 2, 2, 506, 531, 3, 2, 2, 2, 507, 514, 7, 58, 2, + 2, 508, 515, 5, 36, 19, 2, 509, 515, 5, 70, 36, 2, 510, 511, 7, 5, 2, 2, + 511, 512, 5, 66, 34, 2, 512, 513, 7, 6, 2, 2, 513, 515, 3, 2, 2, 2, 514, + 508, 3, 2, 2, 2, 514, 509, 3, 2, 2, 2, 514, 510, 3, 2, 2, 2, 515, 531, + 3, 2, 2, 2, 516, 517, 7, 47, 2, 2, 517, 531, 5, 188, 95, 2, 518, 531, 5, + 40, 21, 2, 519, 520, 7, 170, 2, 2, 520, 522, 7, 171, 2, 2, 521, 519, 3, + 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 524, 7, 35, 2, + 2, 524, 525, 7, 5, 2, 2, 525, 526, 5, 66, 34, 2, 526, 528, 7, 6, 2, 2, + 527, 529, 9, 5, 2, 2, 528, 527, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, + 531, 3, 2, 2, 2, 530, 483, 3, 2, 2, 2, 530, 497, 3, 2, 2, 2, 530, 502, + 3, 2, 2, 2, 530, 507, 3, 2, 2, 2, 530, 516, 3, 2, 2, 2, 530, 518, 3, 2, + 2, 2, 530, 521, 3, 2, 2, 2, 531, 35, 3, 2, 2, 2, 532, 534, 9, 6, 2, 2, + 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, + 536, 7, 187, 2, 2, 536, 37, 3, 2, 2, 2, 537, 538, 7, 51, 2, 2, 538, 540, + 5, 174, 88, 2, 539, 537, 3, 2, 2, 2, 539, 540, 3, 2, 2, 2, 540, 578, 3, + 2, 2, 2, 541, 542, 7, 115, 2, 2, 542, 545, 7, 97, 2, 2, 543, 545, 7, 141, + 2, 2, 544, 541, 3, 2, 2, 2, 544, 543, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, + 546, 547, 7, 5, 2, 2, 547, 552, 5, 26, 14, 2, 548, 549, 7, 7, 2, 2, 549, + 551, 5, 26, 14, 2, 550, 548, 3, 2, 2, 2, 551, 554, 3, 2, 2, 2, 552, 550, + 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 555, 3, 2, 2, 2, 554, 552, 3, 2, + 2, 2, 555, 557, 7, 6, 2, 2, 556, 558, 5, 42, 22, 2, 557, 556, 3, 2, 2, + 2, 557, 558, 3, 2, 2, 2, 558, 579, 3, 2, 2, 2, 559, 560, 7, 46, 2, 2, 560, + 561, 7, 5, 2, 2, 561, 562, 5, 66, 34, 2, 562, 563, 7, 6, 2, 2, 563, 579, + 3, 2, 2, 2, 564, 565, 7, 76, 2, 2, 565, 566, 7, 97, 2, 2, 566, 567, 7, + 5, 2, 2, 567, 572, 5, 186, 94, 2, 568, 569, 7, 7, 2, 2, 569, 571, 5, 186, + 94, 2, 570, 568, 3, 2, 2, 2, 571, 574, 3, 2, 2, 2, 572, 570, 3, 2, 2, 2, + 572, 573, 3, 2, 2, 2, 573, 575, 3, 2, 2, 2, 574, 572, 3, 2, 2, 2, 575, + 576, 7, 6, 2, 2, 576, 577, 5, 40, 21, 2, 577, 579, 3, 2, 2, 2, 578, 544, + 3, 2, 2, 2, 578, 559, 3, 2, 2, 2, 578, 564, 3, 2, 2, 2, 579, 39, 3, 2, + 2, 2, 580, 581, 7, 119, 2, 2, 581, 593, 5, 190, 96, 2, 582, 583, 7, 5, + 2, 2, 583, 588, 5, 186, 94, 2, 584, 585, 7, 7, 2, 2, 585, 587, 5, 186, + 94, 2, 586, 584, 3, 2, 2, 2, 587, 590, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, + 588, 589, 3, 2, 2, 2, 589, 591, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 591, + 592, 7, 6, 2, 2, 592, 594, 3, 2, 2, 2, 593, 582, 3, 2, 2, 2, 593, 594, + 3, 2, 2, 2, 594, 609, 3, 2, 2, 2, 595, 596, 7, 109, 2, 2, 596, 603, 9, + 7, 2, 2, 597, 598, 7, 132, 2, 2, 598, 604, 9, 8, 2, 2, 599, 604, 7, 43, + 2, 2, 600, 604, 7, 125, 2, 2, 601, 602, 7, 103, 2, 2, 602, 604, 7, 28, + 2, 2, 603, 597, 3, 2, 2, 2, 603, 599, 3, 2, 2, 2, 603, 600, 3, 2, 2, 2, + 603, 601, 3, 2, 2, 2, 604, 608, 3, 2, 2, 2, 605, 606, 7, 101, 2, 2, 606, + 608, 5, 174, 88, 2, 607, 595, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 608, 611, + 3, 2, 2, 2, 609, 607, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 620, 3, 2, + 2, 2, 611, 609, 3, 2, 2, 2, 612, 614, 7, 104, 2, 2, 613, 612, 3, 2, 2, + 2, 613, 614, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 618, 7, 59, 2, 2, 616, + 617, 7, 88, 2, 2, 617, 619, 9, 9, 2, 2, 618, 616, 3, 2, 2, 2, 618, 619, + 3, 2, 2, 2, 619, 621, 3, 2, 2, 2, 620, 613, 3, 2, 2, 2, 620, 621, 3, 2, + 2, 2, 621, 41, 3, 2, 2, 2, 622, 623, 7, 109, 2, 2, 623, 624, 7, 50, 2, + 2, 624, 625, 9, 10, 2, 2, 625, 43, 3, 2, 2, 2, 626, 628, 7, 52, 2, 2, 627, + 629, 9, 4, 2, 2, 628, 627, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, + 3, 2, 2, 2, 630, 634, 7, 139, 2, 2, 631, 632, 7, 82, 2, 2, 632, 633, 7, + 104, 2, 2, 633, 635, 7, 72, 2, 2, 634, 631, 3, 2, 2, 2, 634, 635, 3, 2, + 2, 2, 635, 639, 3, 2, 2, 2, 636, 637, 5, 178, 90, 2, 637, 638, 7, 4, 2, + 2, 638, 640, 3, 2, 2, 2, 639, 636, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, + 641, 3, 2, 2, 2, 641, 646, 5, 194, 98, 2, 642, 647, 7, 39, 2, 2, 643, 647, + 7, 30, 2, 2, 644, 645, 7, 91, 2, 2, 645, 647, 7, 107, 2, 2, 646, 642, 3, + 2, 2, 2, 646, 643, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 646, 647, 3, 2, 2, + 2, 647, 662, 3, 2, 2, 2, 648, 663, 7, 61, 2, 2, 649, 663, 7, 90, 2, 2, + 650, 660, 7, 142, 2, 2, 651, 652, 7, 107, 2, 2, 652, 657, 5, 186, 94, 2, + 653, 654, 7, 7, 2, 2, 654, 656, 5, 186, 94, 2, 655, 653, 3, 2, 2, 2, 656, + 659, 3, 2, 2, 2, 657, 655, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 661, + 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 660, 651, 3, 2, 2, 2, 660, 661, 3, 2, + 2, 2, 661, 663, 3, 2, 2, 2, 662, 648, 3, 2, 2, 2, 662, 649, 3, 2, 2, 2, + 662, 650, 3, 2, 2, 2, 663, 664, 3, 2, 2, 2, 664, 665, 7, 109, 2, 2, 665, + 669, 5, 180, 91, 2, 666, 667, 7, 75, 2, 2, 667, 668, 7, 66, 2, 2, 668, + 670, 7, 128, 2, 2, 669, 666, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 673, + 3, 2, 2, 2, 671, 672, 7, 148, 2, 2, 672, 674, 5, 66, 34, 2, 673, 671, 3, + 2, 2, 2, 673, 674, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 684, 7, 40, 2, + 2, 676, 681, 5, 104, 53, 2, 677, 681, 5, 72, 37, 2, 678, 681, 5, 58, 30, + 2, 679, 681, 5, 82, 42, 2, 680, 676, 3, 2, 2, 2, 680, 677, 3, 2, 2, 2, + 680, 678, 3, 2, 2, 2, 680, 679, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, + 683, 7, 3, 2, 2, 683, 685, 3, 2, 2, 2, 684, 680, 3, 2, 2, 2, 685, 686, + 3, 2, 2, 2, 686, 684, 3, 2, 2, 2, 686, 687, 3, 2, 2, 2, 687, 688, 3, 2, + 2, 2, 688, 689, 7, 68, 2, 2, 689, 45, 3, 2, 2, 2, 690, 692, 7, 52, 2, 2, + 691, 693, 9, 4, 2, 2, 692, 691, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, + 694, 3, 2, 2, 2, 694, 698, 7, 146, 2, 2, 695, 696, 7, 82, 2, 2, 696, 697, + 7, 104, 2, 2, 697, 699, 7, 72, 2, 2, 698, 695, 3, 2, 2, 2, 698, 699, 3, + 2, 2, 2, 699, 703, 3, 2, 2, 2, 700, 701, 5, 178, 90, 2, 701, 702, 7, 4, + 2, 2, 702, 704, 3, 2, 2, 2, 703, 700, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, + 704, 705, 3, 2, 2, 2, 705, 717, 5, 196, 99, 2, 706, 707, 7, 5, 2, 2, 707, + 712, 5, 186, 94, 2, 708, 709, 7, 7, 2, 2, 709, 711, 5, 186, 94, 2, 710, + 708, 3, 2, 2, 2, 711, 714, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 712, 713, + 3, 2, 2, 2, 713, 715, 3, 2, 2, 2, 714, 712, 3, 2, 2, 2, 715, 716, 7, 6, + 2, 2, 716, 718, 3, 2, 2, 2, 717, 706, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, + 718, 719, 3, 2, 2, 2, 719, 720, 7, 35, 2, 2, 720, 721, 5, 82, 42, 2, 721, + 47, 3, 2, 2, 2, 722, 723, 7, 52, 2, 2, 723, 724, 7, 147, 2, 2, 724, 728, + 7, 133, 2, 2, 725, 726, 7, 82, 2, 2, 726, 727, 7, 104, 2, 2, 727, 729, + 7, 72, 2, 2, 728, 725, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 733, 3, 2, + 2, 2, 730, 731, 5, 178, 90, 2, 731, 732, 7, 4, 2, 2, 732, 734, 3, 2, 2, + 2, 733, 730, 3, 2, 2, 2, 733, 734, 3, 2, 2, 2, 734, 735, 3, 2, 2, 2, 735, + 736, 5, 180, 91, 2, 736, 737, 7, 143, 2, 2, 737, 749, 5, 198, 100, 2, 738, + 739, 7, 5, 2, 2, 739, 744, 5, 168, 85, 2, 740, 741, 7, 7, 2, 2, 741, 743, + 5, 168, 85, 2, 742, 740, 3, 2, 2, 2, 743, 746, 3, 2, 2, 2, 744, 742, 3, + 2, 2, 2, 744, 745, 3, 2, 2, 2, 745, 747, 3, 2, 2, 2, 746, 744, 3, 2, 2, + 2, 747, 748, 7, 6, 2, 2, 748, 750, 3, 2, 2, 2, 749, 738, 3, 2, 2, 2, 749, + 750, 3, 2, 2, 2, 750, 49, 3, 2, 2, 2, 751, 753, 7, 150, 2, 2, 752, 754, + 7, 118, 2, 2, 753, 752, 3, 2, 2, 2, 753, 754, 3, 2, 2, 2, 754, 755, 3, + 2, 2, 2, 755, 756, 5, 52, 27, 2, 756, 757, 7, 35, 2, 2, 757, 758, 7, 5, + 2, 2, 758, 759, 5, 82, 42, 2, 759, 769, 7, 6, 2, 2, 760, 761, 7, 7, 2, + 2, 761, 762, 5, 52, 27, 2, 762, 763, 7, 35, 2, 2, 763, 764, 7, 5, 2, 2, + 764, 765, 5, 82, 42, 2, 765, 766, 7, 6, 2, 2, 766, 768, 3, 2, 2, 2, 767, + 760, 3, 2, 2, 2, 768, 771, 3, 2, 2, 2, 769, 767, 3, 2, 2, 2, 769, 770, + 3, 2, 2, 2, 770, 51, 3, 2, 2, 2, 771, 769, 3, 2, 2, 2, 772, 784, 5, 180, + 91, 2, 773, 774, 7, 5, 2, 2, 774, 779, 5, 186, 94, 2, 775, 776, 7, 7, 2, + 2, 776, 778, 5, 186, 94, 2, 777, 775, 3, 2, 2, 2, 778, 781, 3, 2, 2, 2, + 779, 777, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 782, 3, 2, 2, 2, 781, + 779, 3, 2, 2, 2, 782, 783, 7, 6, 2, 2, 783, 785, 3, 2, 2, 2, 784, 773, + 3, 2, 2, 2, 784, 785, 3, 2, 2, 2, 785, 53, 3, 2, 2, 2, 786, 787, 5, 52, + 27, 2, 787, 788, 7, 35, 2, 2, 788, 789, 7, 5, 2, 2, 789, 790, 5, 160, 81, + 2, 790, 792, 7, 140, 2, 2, 791, 793, 7, 31, 2, 2, 792, 791, 3, 2, 2, 2, + 792, 793, 3, 2, 2, 2, 793, 794, 3, 2, 2, 2, 794, 795, 5, 162, 82, 2, 795, + 796, 7, 6, 2, 2, 796, 55, 3, 2, 2, 2, 797, 809, 5, 180, 91, 2, 798, 799, + 7, 5, 2, 2, 799, 804, 5, 186, 94, 2, 800, 801, 7, 7, 2, 2, 801, 803, 5, + 186, 94, 2, 802, 800, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, + 2, 2, 804, 805, 3, 2, 2, 2, 805, 807, 3, 2, 2, 2, 806, 804, 3, 2, 2, 2, + 807, 808, 7, 6, 2, 2, 808, 810, 3, 2, 2, 2, 809, 798, 3, 2, 2, 2, 809, + 810, 3, 2, 2, 2, 810, 811, 3, 2, 2, 2, 811, 812, 7, 35, 2, 2, 812, 813, + 7, 5, 2, 2, 813, 814, 5, 82, 42, 2, 814, 815, 7, 6, 2, 2, 815, 57, 3, 2, + 2, 2, 816, 818, 5, 50, 26, 2, 817, 816, 3, 2, 2, 2, 817, 818, 3, 2, 2, + 2, 818, 819, 3, 2, 2, 2, 819, 820, 7, 61, 2, 2, 820, 821, 7, 77, 2, 2, + 821, 824, 5, 110, 56, 2, 822, 823, 7, 149, 2, 2, 823, 825, 5, 66, 34, 2, + 824, 822, 3, 2, 2, 2, 824, 825, 3, 2, 2, 2, 825, 59, 3, 2, 2, 2, 826, 828, + 5, 50, 26, 2, 827, 826, 3, 2, 2, 2, 827, 828, 3, 2, 2, 2, 828, 829, 3, + 2, 2, 2, 829, 830, 7, 61, 2, 2, 830, 831, 7, 77, 2, 2, 831, 834, 5, 110, + 56, 2, 832, 833, 7, 149, 2, 2, 833, 835, 5, 66, 34, 2, 834, 832, 3, 2, + 2, 2, 834, 835, 3, 2, 2, 2, 835, 840, 3, 2, 2, 2, 836, 838, 5, 132, 67, + 2, 837, 836, 3, 2, 2, 2, 837, 838, 3, 2, 2, 2, 838, 839, 3, 2, 2, 2, 839, + 841, 5, 134, 68, 2, 840, 837, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 61, + 3, 2, 2, 2, 842, 844, 7, 63, 2, 2, 843, 845, 7, 57, 2, 2, 844, 843, 3, + 2, 2, 2, 844, 845, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 847, 5, 178, + 90, 2, 847, 63, 3, 2, 2, 2, 848, 849, 7, 65, 2, 2, 849, 852, 9, 11, 2, + 2, 850, 851, 7, 82, 2, 2, 851, 853, 7, 72, 2, 2, 852, 850, 3, 2, 2, 2, + 852, 853, 3, 2, 2, 2, 853, 857, 3, 2, 2, 2, 854, 855, 5, 178, 90, 2, 855, + 856, 7, 4, 2, 2, 856, 858, 3, 2, 2, 2, 857, 854, 3, 2, 2, 2, 857, 858, + 3, 2, 2, 2, 858, 859, 3, 2, 2, 2, 859, 860, 5, 222, 112, 2, 860, 65, 3, + 2, 2, 2, 861, 862, 8, 34, 1, 2, 862, 950, 5, 70, 36, 2, 863, 950, 7, 188, + 2, 2, 864, 865, 5, 178, 90, 2, 865, 866, 7, 4, 2, 2, 866, 868, 3, 2, 2, + 2, 867, 864, 3, 2, 2, 2, 867, 868, 3, 2, 2, 2, 868, 869, 3, 2, 2, 2, 869, + 870, 5, 180, 91, 2, 870, 871, 7, 4, 2, 2, 871, 873, 3, 2, 2, 2, 872, 867, + 3, 2, 2, 2, 872, 873, 3, 2, 2, 2, 873, 874, 3, 2, 2, 2, 874, 950, 5, 186, + 94, 2, 875, 876, 5, 164, 83, 2, 876, 877, 5, 66, 34, 23, 877, 950, 3, 2, + 2, 2, 878, 879, 5, 176, 89, 2, 879, 892, 7, 5, 2, 2, 880, 882, 7, 64, 2, + 2, 881, 880, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 883, 3, 2, 2, 2, 883, + 888, 5, 66, 34, 2, 884, 885, 7, 7, 2, 2, 885, 887, 5, 66, 34, 2, 886, 884, + 3, 2, 2, 2, 887, 890, 3, 2, 2, 2, 888, 886, 3, 2, 2, 2, 888, 889, 3, 2, + 2, 2, 889, 893, 3, 2, 2, 2, 890, 888, 3, 2, 2, 2, 891, 893, 7, 9, 2, 2, + 892, 881, 3, 2, 2, 2, 892, 891, 3, 2, 2, 2, 892, 893, 3, 2, 2, 2, 893, + 894, 3, 2, 2, 2, 894, 896, 7, 6, 2, 2, 895, 897, 5, 114, 58, 2, 896, 895, + 3, 2, 2, 2, 896, 897, 3, 2, 2, 2, 897, 899, 3, 2, 2, 2, 898, 900, 5, 118, + 60, 2, 899, 898, 3, 2, 2, 2, 899, 900, 3, 2, 2, 2, 900, 950, 3, 2, 2, 2, + 901, 902, 7, 5, 2, 2, 902, 907, 5, 66, 34, 2, 903, 904, 7, 7, 2, 2, 904, + 906, 5, 66, 34, 2, 905, 903, 3, 2, 2, 2, 906, 909, 3, 2, 2, 2, 907, 905, + 3, 2, 2, 2, 907, 908, 3, 2, 2, 2, 908, 910, 3, 2, 2, 2, 909, 907, 3, 2, + 2, 2, 910, 911, 7, 6, 2, 2, 911, 950, 3, 2, 2, 2, 912, 913, 7, 45, 2, 2, + 913, 914, 7, 5, 2, 2, 914, 915, 5, 66, 34, 2, 915, 916, 7, 35, 2, 2, 916, + 917, 5, 32, 17, 2, 917, 918, 7, 6, 2, 2, 918, 950, 3, 2, 2, 2, 919, 921, + 7, 104, 2, 2, 920, 919, 3, 2, 2, 2, 920, 921, 3, 2, 2, 2, 921, 922, 3, + 2, 2, 2, 922, 924, 7, 72, 2, 2, 923, 920, 3, 2, 2, 2, 923, 924, 3, 2, 2, + 2, 924, 925, 3, 2, 2, 2, 925, 926, 7, 5, 2, 2, 926, 927, 5, 82, 42, 2, + 927, 928, 7, 6, 2, 2, 928, 950, 3, 2, 2, 2, 929, 931, 7, 44, 2, 2, 930, + 932, 5, 66, 34, 2, 931, 930, 3, 2, 2, 2, 931, 932, 3, 2, 2, 2, 932, 938, + 3, 2, 2, 2, 933, 934, 7, 148, 2, 2, 934, 935, 5, 66, 34, 2, 935, 936, 7, + 136, 2, 2, 936, 937, 5, 66, 34, 2, 937, 939, 3, 2, 2, 2, 938, 933, 3, 2, + 2, 2, 939, 940, 3, 2, 2, 2, 940, 938, 3, 2, 2, 2, 940, 941, 3, 2, 2, 2, + 941, 944, 3, 2, 2, 2, 942, 943, 7, 67, 2, 2, 943, 945, 5, 66, 34, 2, 944, + 942, 3, 2, 2, 2, 944, 945, 3, 2, 2, 2, 945, 946, 3, 2, 2, 2, 946, 947, + 7, 68, 2, 2, 947, 950, 3, 2, 2, 2, 948, 950, 5, 68, 35, 2, 949, 861, 3, + 2, 2, 2, 949, 863, 3, 2, 2, 2, 949, 872, 3, 2, 2, 2, 949, 875, 3, 2, 2, + 2, 949, 878, 3, 2, 2, 2, 949, 901, 3, 2, 2, 2, 949, 912, 3, 2, 2, 2, 949, + 923, 3, 2, 2, 2, 949, 929, 3, 2, 2, 2, 949, 948, 3, 2, 2, 2, 950, 1070, + 3, 2, 2, 2, 951, 952, 12, 22, 2, 2, 952, 953, 7, 13, 2, 2, 953, 1069, 5, + 66, 34, 23, 954, 955, 12, 21, 2, 2, 955, 956, 9, 12, 2, 2, 956, 1069, 5, + 66, 34, 22, 957, 958, 12, 20, 2, 2, 958, 959, 9, 6, 2, 2, 959, 1069, 5, + 66, 34, 21, 960, 961, 12, 19, 2, 2, 961, 962, 9, 13, 2, 2, 962, 1069, 5, + 66, 34, 20, 963, 964, 12, 18, 2, 2, 964, 965, 9, 14, 2, 2, 965, 1069, 5, + 66, 34, 19, 966, 979, 12, 17, 2, 2, 967, 980, 7, 8, 2, 2, 968, 980, 7, + 24, 2, 2, 969, 980, 7, 25, 2, 2, 970, 980, 7, 26, 2, 2, 971, 980, 7, 94, + 2, 2, 972, 973, 7, 94, 2, 2, 973, 980, 7, 104, 2, 2, 974, 980, 7, 85, 2, + 2, 975, 980, 7, 99, 2, 2, 976, 980, 7, 79, 2, 2, 977, 980, 7, 101, 2, 2, + 978, 980, 7, 120, 2, 2, 979, 967, 3, 2, 2, 2, 979, 968, 3, 2, 2, 2, 979, + 969, 3, 2, 2, 2, 979, 970, 3, 2, 2, 2, 979, 971, 3, 2, 2, 2, 979, 972, + 3, 2, 2, 2, 979, 974, 3, 2, 2, 2, 979, 975, 3, 2, 2, 2, 979, 976, 3, 2, + 2, 2, 979, 977, 3, 2, 2, 2, 979, 978, 3, 2, 2, 2, 980, 981, 3, 2, 2, 2, + 981, 1069, 5, 66, 34, 18, 982, 983, 12, 16, 2, 2, 983, 984, 7, 34, 2, 2, + 984, 1069, 5, 66, 34, 17, 985, 986, 12, 15, 2, 2, 986, 987, 7, 110, 2, + 2, 987, 1069, 5, 66, 34, 16, 988, 989, 12, 8, 2, 2, 989, 991, 7, 94, 2, + 2, 990, 992, 7, 104, 2, 2, 991, 990, 3, 2, 2, 2, 991, 992, 3, 2, 2, 2, + 992, 993, 3, 2, 2, 2, 993, 1069, 5, 66, 34, 9, 994, 996, 12, 7, 2, 2, 995, + 997, 7, 104, 2, 2, 996, 995, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 997, 998, + 3, 2, 2, 2, 998, 999, 7, 41, 2, 2, 999, 1000, 5, 66, 34, 2, 1000, 1001, + 7, 34, 2, 2, 1001, 1002, 5, 66, 34, 8, 1002, 1069, 3, 2, 2, 2, 1003, 1004, + 12, 11, 2, 2, 1004, 1005, 7, 47, 2, 2, 1005, 1069, 5, 188, 95, 2, 1006, + 1008, 12, 10, 2, 2, 1007, 1009, 7, 104, 2, 2, 1008, 1007, 3, 2, 2, 2, 1008, + 1009, 3, 2, 2, 2, 1009, 1010, 3, 2, 2, 2, 1010, 1011, 9, 15, 2, 2, 1011, + 1014, 5, 66, 34, 2, 1012, 1013, 7, 69, 2, 2, 1013, 1015, 5, 66, 34, 2, + 1014, 1012, 3, 2, 2, 2, 1014, 1015, 3, 2, 2, 2, 1015, 1069, 3, 2, 2, 2, + 1016, 1021, 12, 9, 2, 2, 1017, 1022, 7, 95, 2, 2, 1018, 1022, 7, 105, 2, + 2, 1019, 1020, 7, 104, 2, 2, 1020, 1022, 7, 106, 2, 2, 1021, 1017, 3, 2, + 2, 2, 1021, 1018, 3, 2, 2, 2, 1021, 1019, 3, 2, 2, 2, 1022, 1069, 3, 2, + 2, 2, 1023, 1025, 12, 6, 2, 2, 1024, 1026, 7, 104, 2, 2, 1025, 1024, 3, + 2, 2, 2, 1025, 1026, 3, 2, 2, 2, 1026, 1027, 3, 2, 2, 2, 1027, 1066, 7, + 85, 2, 2, 1028, 1038, 7, 5, 2, 2, 1029, 1039, 5, 82, 42, 2, 1030, 1035, + 5, 66, 34, 2, 1031, 1032, 7, 7, 2, 2, 1032, 1034, 5, 66, 34, 2, 1033, 1031, + 3, 2, 2, 2, 1034, 1037, 3, 2, 2, 2, 1035, 1033, 3, 2, 2, 2, 1035, 1036, + 3, 2, 2, 2, 1036, 1039, 3, 2, 2, 2, 1037, 1035, 3, 2, 2, 2, 1038, 1029, + 3, 2, 2, 2, 1038, 1030, 3, 2, 2, 2, 1038, 1039, 3, 2, 2, 2, 1039, 1040, + 3, 2, 2, 2, 1040, 1067, 7, 6, 2, 2, 1041, 1042, 5, 178, 90, 2, 1042, 1043, + 7, 4, 2, 2, 1043, 1045, 3, 2, 2, 2, 1044, 1041, 3, 2, 2, 2, 1044, 1045, + 3, 2, 2, 2, 1045, 1046, 3, 2, 2, 2, 1046, 1067, 5, 180, 91, 2, 1047, 1048, + 5, 178, 90, 2, 1048, 1049, 7, 4, 2, 2, 1049, 1051, 3, 2, 2, 2, 1050, 1047, + 3, 2, 2, 2, 1050, 1051, 3, 2, 2, 2, 1051, 1052, 3, 2, 2, 2, 1052, 1053, + 5, 220, 111, 2, 1053, 1062, 7, 5, 2, 2, 1054, 1059, 5, 66, 34, 2, 1055, + 1056, 7, 7, 2, 2, 1056, 1058, 5, 66, 34, 2, 1057, 1055, 3, 2, 2, 2, 1058, + 1061, 3, 2, 2, 2, 1059, 1057, 3, 2, 2, 2, 1059, 1060, 3, 2, 2, 2, 1060, + 1063, 3, 2, 2, 2, 1061, 1059, 3, 2, 2, 2, 1062, 1054, 3, 2, 2, 2, 1062, + 1063, 3, 2, 2, 2, 1063, 1064, 3, 2, 2, 2, 1064, 1065, 7, 6, 2, 2, 1065, + 1067, 3, 2, 2, 2, 1066, 1028, 3, 2, 2, 2, 1066, 1044, 3, 2, 2, 2, 1066, + 1050, 3, 2, 2, 2, 1067, 1069, 3, 2, 2, 2, 1068, 951, 3, 2, 2, 2, 1068, + 954, 3, 2, 2, 2, 1068, 957, 3, 2, 2, 2, 1068, 960, 3, 2, 2, 2, 1068, 963, + 3, 2, 2, 2, 1068, 966, 3, 2, 2, 2, 1068, 982, 3, 2, 2, 2, 1068, 985, 3, + 2, 2, 2, 1068, 988, 3, 2, 2, 2, 1068, 994, 3, 2, 2, 2, 1068, 1003, 3, 2, + 2, 2, 1068, 1006, 3, 2, 2, 2, 1068, 1016, 3, 2, 2, 2, 1068, 1023, 3, 2, + 2, 2, 1069, 1072, 3, 2, 2, 2, 1070, 1068, 3, 2, 2, 2, 1070, 1071, 3, 2, + 2, 2, 1071, 67, 3, 2, 2, 2, 1072, 1070, 3, 2, 2, 2, 1073, 1074, 7, 117, + 2, 2, 1074, 1079, 7, 5, 2, 2, 1075, 1080, 7, 83, 2, 2, 1076, 1077, 9, 16, + 2, 2, 1077, 1078, 7, 7, 2, 2, 1078, 1080, 5, 166, 84, 2, 1079, 1075, 3, + 2, 2, 2, 1079, 1076, 3, 2, 2, 2, 1080, 1081, 3, 2, 2, 2, 1081, 1082, 7, + 6, 2, 2, 1082, 69, 3, 2, 2, 2, 1083, 1084, 9, 17, 2, 2, 1084, 71, 3, 2, + 2, 2, 1085, 1087, 5, 50, 26, 2, 1086, 1085, 3, 2, 2, 2, 1086, 1087, 3, + 2, 2, 2, 1087, 1093, 3, 2, 2, 2, 1088, 1094, 7, 90, 2, 2, 1089, 1094, 7, + 124, 2, 2, 1090, 1091, 7, 90, 2, 2, 1091, 1092, 7, 110, 2, 2, 1092, 1094, + 9, 10, 2, 2, 1093, 1088, 3, 2, 2, 2, 1093, 1089, 3, 2, 2, 2, 1093, 1090, + 3, 2, 2, 2, 1094, 1095, 3, 2, 2, 2, 1095, 1099, 7, 93, 2, 2, 1096, 1097, + 5, 178, 90, 2, 1097, 1098, 7, 4, 2, 2, 1098, 1100, 3, 2, 2, 2, 1099, 1096, + 3, 2, 2, 2, 1099, 1100, 3, 2, 2, 2, 1100, 1101, 3, 2, 2, 2, 1101, 1104, + 5, 180, 91, 2, 1102, 1103, 7, 35, 2, 2, 1103, 1105, 5, 204, 103, 2, 1104, + 1102, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 1117, 3, 2, 2, 2, 1106, + 1107, 7, 5, 2, 2, 1107, 1112, 5, 186, 94, 2, 1108, 1109, 7, 7, 2, 2, 1109, + 1111, 5, 186, 94, 2, 1110, 1108, 3, 2, 2, 2, 1111, 1114, 3, 2, 2, 2, 1112, + 1110, 3, 2, 2, 2, 1112, 1113, 3, 2, 2, 2, 1113, 1115, 3, 2, 2, 2, 1114, + 1112, 3, 2, 2, 2, 1115, 1116, 7, 6, 2, 2, 1116, 1118, 3, 2, 2, 2, 1117, + 1106, 3, 2, 2, 2, 1117, 1118, 3, 2, 2, 2, 1118, 1148, 3, 2, 2, 2, 1119, + 1120, 7, 145, 2, 2, 1120, 1121, 7, 5, 2, 2, 1121, 1126, 5, 66, 34, 2, 1122, + 1123, 7, 7, 2, 2, 1123, 1125, 5, 66, 34, 2, 1124, 1122, 3, 2, 2, 2, 1125, + 1128, 3, 2, 2, 2, 1126, 1124, 3, 2, 2, 2, 1126, 1127, 3, 2, 2, 2, 1127, + 1129, 3, 2, 2, 2, 1128, 1126, 3, 2, 2, 2, 1129, 1144, 7, 6, 2, 2, 1130, + 1131, 7, 7, 2, 2, 1131, 1132, 7, 5, 2, 2, 1132, 1137, 5, 66, 34, 2, 1133, + 1134, 7, 7, 2, 2, 1134, 1136, 5, 66, 34, 2, 1135, 1133, 3, 2, 2, 2, 1136, + 1139, 3, 2, 2, 2, 1137, 1135, 3, 2, 2, 2, 1137, 1138, 3, 2, 2, 2, 1138, + 1140, 3, 2, 2, 2, 1139, 1137, 3, 2, 2, 2, 1140, 1141, 7, 6, 2, 2, 1141, + 1143, 3, 2, 2, 2, 1142, 1130, 3, 2, 2, 2, 1143, 1146, 3, 2, 2, 2, 1144, + 1142, 3, 2, 2, 2, 1144, 1145, 3, 2, 2, 2, 1145, 1149, 3, 2, 2, 2, 1146, + 1144, 3, 2, 2, 2, 1147, 1149, 5, 82, 42, 2, 1148, 1119, 3, 2, 2, 2, 1148, + 1147, 3, 2, 2, 2, 1149, 1151, 3, 2, 2, 2, 1150, 1152, 5, 74, 38, 2, 1151, + 1150, 3, 2, 2, 2, 1151, 1152, 3, 2, 2, 2, 1152, 1156, 3, 2, 2, 2, 1153, + 1154, 7, 58, 2, 2, 1154, 1156, 7, 145, 2, 2, 1155, 1086, 3, 2, 2, 2, 1155, + 1153, 3, 2, 2, 2, 1156, 73, 3, 2, 2, 2, 1157, 1158, 7, 109, 2, 2, 1158, + 1173, 7, 50, 2, 2, 1159, 1160, 7, 5, 2, 2, 1160, 1165, 5, 26, 14, 2, 1161, + 1162, 7, 7, 2, 2, 1162, 1164, 5, 26, 14, 2, 1163, 1161, 3, 2, 2, 2, 1164, + 1167, 3, 2, 2, 2, 1165, 1163, 3, 2, 2, 2, 1165, 1166, 3, 2, 2, 2, 1166, + 1168, 3, 2, 2, 2, 1167, 1165, 3, 2, 2, 2, 1168, 1171, 7, 6, 2, 2, 1169, + 1170, 7, 149, 2, 2, 1170, 1172, 5, 66, 34, 2, 1171, 1169, 3, 2, 2, 2, 1171, + 1172, 3, 2, 2, 2, 1172, 1174, 3, 2, 2, 2, 1173, 1159, 3, 2, 2, 2, 1173, + 1174, 3, 2, 2, 2, 1174, 1175, 3, 2, 2, 2, 1175, 1202, 7, 184, 2, 2, 1176, + 1203, 7, 185, 2, 2, 1177, 1178, 7, 142, 2, 2, 1178, 1181, 7, 132, 2, 2, + 1179, 1182, 5, 186, 94, 2, 1180, 1182, 5, 106, 54, 2, 1181, 1179, 3, 2, + 2, 2, 1181, 1180, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, 2, 1183, 1184, 7, 24, + 2, 2, 1184, 1195, 5, 66, 34, 2, 1185, 1188, 7, 7, 2, 2, 1186, 1189, 5, + 186, 94, 2, 1187, 1189, 5, 106, 54, 2, 1188, 1186, 3, 2, 2, 2, 1188, 1187, + 3, 2, 2, 2, 1189, 1190, 3, 2, 2, 2, 1190, 1191, 7, 24, 2, 2, 1191, 1192, + 5, 66, 34, 2, 1192, 1194, 3, 2, 2, 2, 1193, 1185, 3, 2, 2, 2, 1194, 1197, + 3, 2, 2, 2, 1195, 1193, 3, 2, 2, 2, 1195, 1196, 3, 2, 2, 2, 1196, 1200, + 3, 2, 2, 2, 1197, 1195, 3, 2, 2, 2, 1198, 1199, 7, 149, 2, 2, 1199, 1201, + 5, 66, 34, 2, 1200, 1198, 3, 2, 2, 2, 1200, 1201, 3, 2, 2, 2, 1201, 1203, + 3, 2, 2, 2, 1202, 1176, 3, 2, 2, 2, 1202, 1177, 3, 2, 2, 2, 1203, 75, 3, + 2, 2, 2, 1204, 1208, 7, 114, 2, 2, 1205, 1206, 5, 178, 90, 2, 1206, 1207, + 7, 4, 2, 2, 1207, 1209, 3, 2, 2, 2, 1208, 1205, 3, 2, 2, 2, 1208, 1209, + 3, 2, 2, 2, 1209, 1210, 3, 2, 2, 2, 1210, 1217, 5, 200, 101, 2, 1211, 1212, + 7, 8, 2, 2, 1212, 1218, 5, 78, 40, 2, 1213, 1214, 7, 5, 2, 2, 1214, 1215, + 5, 78, 40, 2, 1215, 1216, 7, 6, 2, 2, 1216, 1218, 3, 2, 2, 2, 1217, 1211, + 3, 2, 2, 2, 1217, 1213, 3, 2, 2, 2, 1217, 1218, 3, 2, 2, 2, 1218, 77, 3, + 2, 2, 2, 1219, 1223, 5, 36, 19, 2, 1220, 1223, 5, 174, 88, 2, 1221, 1223, + 7, 189, 2, 2, 1222, 1219, 3, 2, 2, 2, 1222, 1220, 3, 2, 2, 2, 1222, 1221, + 3, 2, 2, 2, 1223, 79, 3, 2, 2, 2, 1224, 1235, 7, 121, 2, 2, 1225, 1236, + 5, 188, 95, 2, 1226, 1227, 5, 178, 90, 2, 1227, 1228, 7, 4, 2, 2, 1228, + 1230, 3, 2, 2, 2, 1229, 1226, 3, 2, 2, 2, 1229, 1230, 3, 2, 2, 2, 1230, + 1233, 3, 2, 2, 2, 1231, 1234, 5, 180, 91, 2, 1232, 1234, 5, 192, 97, 2, + 1233, 1231, 3, 2, 2, 2, 1233, 1232, 3, 2, 2, 2, 1234, 1236, 3, 2, 2, 2, + 1235, 1225, 3, 2, 2, 2, 1235, 1229, 3, 2, 2, 2, 1235, 1236, 3, 2, 2, 2, + 1236, 81, 3, 2, 2, 2, 1237, 1239, 5, 130, 66, 2, 1238, 1237, 3, 2, 2, 2, + 1238, 1239, 3, 2, 2, 2, 1239, 1240, 3, 2, 2, 2, 1240, 1246, 5, 86, 44, + 2, 1241, 1242, 5, 102, 52, 2, 1242, 1243, 5, 86, 44, 2, 1243, 1245, 3, + 2, 2, 2, 1244, 1241, 3, 2, 2, 2, 1245, 1248, 3, 2, 2, 2, 1246, 1244, 3, + 2, 2, 2, 1246, 1247, 3, 2, 2, 2, 1247, 1250, 3, 2, 2, 2, 1248, 1246, 3, + 2, 2, 2, 1249, 1251, 5, 132, 67, 2, 1250, 1249, 3, 2, 2, 2, 1250, 1251, + 3, 2, 2, 2, 1251, 1253, 3, 2, 2, 2, 1252, 1254, 5, 134, 68, 2, 1253, 1252, + 3, 2, 2, 2, 1253, 1254, 3, 2, 2, 2, 1254, 83, 3, 2, 2, 2, 1255, 1263, 5, + 94, 48, 2, 1256, 1257, 5, 98, 50, 2, 1257, 1259, 5, 94, 48, 2, 1258, 1260, + 5, 100, 51, 2, 1259, 1258, 3, 2, 2, 2, 1259, 1260, 3, 2, 2, 2, 1260, 1262, + 3, 2, 2, 2, 1261, 1256, 3, 2, 2, 2, 1262, 1265, 3, 2, 2, 2, 1263, 1261, + 3, 2, 2, 2, 1263, 1264, 3, 2, 2, 2, 1264, 85, 3, 2, 2, 2, 1265, 1263, 3, + 2, 2, 2, 1266, 1268, 7, 131, 2, 2, 1267, 1269, 9, 18, 2, 2, 1268, 1267, + 3, 2, 2, 2, 1268, 1269, 3, 2, 2, 2, 1269, 1270, 3, 2, 2, 2, 1270, 1275, + 5, 96, 49, 2, 1271, 1272, 7, 7, 2, 2, 1272, 1274, 5, 96, 49, 2, 1273, 1271, + 3, 2, 2, 2, 1274, 1277, 3, 2, 2, 2, 1275, 1273, 3, 2, 2, 2, 1275, 1276, + 3, 2, 2, 2, 1276, 1290, 3, 2, 2, 2, 1277, 1275, 3, 2, 2, 2, 1278, 1288, + 7, 77, 2, 2, 1279, 1284, 5, 94, 48, 2, 1280, 1281, 7, 7, 2, 2, 1281, 1283, + 5, 94, 48, 2, 1282, 1280, 3, 2, 2, 2, 1283, 1286, 3, 2, 2, 2, 1284, 1282, + 3, 2, 2, 2, 1284, 1285, 3, 2, 2, 2, 1285, 1289, 3, 2, 2, 2, 1286, 1284, + 3, 2, 2, 2, 1287, 1289, 5, 84, 43, 2, 1288, 1279, 3, 2, 2, 2, 1288, 1287, + 3, 2, 2, 2, 1289, 1291, 3, 2, 2, 2, 1290, 1278, 3, 2, 2, 2, 1290, 1291, + 3, 2, 2, 2, 1291, 1294, 3, 2, 2, 2, 1292, 1293, 7, 149, 2, 2, 1293, 1295, + 5, 66, 34, 2, 1294, 1292, 3, 2, 2, 2, 1294, 1295, 3, 2, 2, 2, 1295, 1310, + 3, 2, 2, 2, 1296, 1297, 7, 80, 2, 2, 1297, 1298, 7, 42, 2, 2, 1298, 1303, + 5, 66, 34, 2, 1299, 1300, 7, 7, 2, 2, 1300, 1302, 5, 66, 34, 2, 1301, 1299, + 3, 2, 2, 2, 1302, 1305, 3, 2, 2, 2, 1303, 1301, 3, 2, 2, 2, 1303, 1304, + 3, 2, 2, 2, 1304, 1308, 3, 2, 2, 2, 1305, 1303, 3, 2, 2, 2, 1306, 1307, + 7, 81, 2, 2, 1307, 1309, 5, 66, 34, 2, 1308, 1306, 3, 2, 2, 2, 1308, 1309, + 3, 2, 2, 2, 1309, 1311, 3, 2, 2, 2, 1310, 1296, 3, 2, 2, 2, 1310, 1311, + 3, 2, 2, 2, 1311, 1326, 3, 2, 2, 2, 1312, 1313, 7, 175, 2, 2, 1313, 1314, + 5, 208, 105, 2, 1314, 1315, 7, 35, 2, 2, 1315, 1323, 5, 116, 59, 2, 1316, + 1317, 7, 7, 2, 2, 1317, 1318, 5, 208, 105, 2, 1318, 1319, 7, 35, 2, 2, + 1319, 1320, 5, 116, 59, 2, 1320, 1322, 3, 2, 2, 2, 1321, 1316, 3, 2, 2, + 2, 1322, 1325, 3, 2, 2, 2, 1323, 1321, 3, 2, 2, 2, 1323, 1324, 3, 2, 2, + 2, 1324, 1327, 3, 2, 2, 2, 1325, 1323, 3, 2, 2, 2, 1326, 1312, 3, 2, 2, + 2, 1326, 1327, 3, 2, 2, 2, 1327, 1357, 3, 2, 2, 2, 1328, 1329, 7, 145, + 2, 2, 1329, 1330, 7, 5, 2, 2, 1330, 1335, 5, 66, 34, 2, 1331, 1332, 7, + 7, 2, 2, 1332, 1334, 5, 66, 34, 2, 1333, 1331, 3, 2, 2, 2, 1334, 1337, + 3, 2, 2, 2, 1335, 1333, 3, 2, 2, 2, 1335, 1336, 3, 2, 2, 2, 1336, 1338, + 3, 2, 2, 2, 1337, 1335, 3, 2, 2, 2, 1338, 1353, 7, 6, 2, 2, 1339, 1340, + 7, 7, 2, 2, 1340, 1341, 7, 5, 2, 2, 1341, 1346, 5, 66, 34, 2, 1342, 1343, + 7, 7, 2, 2, 1343, 1345, 5, 66, 34, 2, 1344, 1342, 3, 2, 2, 2, 1345, 1348, + 3, 2, 2, 2, 1346, 1344, 3, 2, 2, 2, 1346, 1347, 3, 2, 2, 2, 1347, 1349, + 3, 2, 2, 2, 1348, 1346, 3, 2, 2, 2, 1349, 1350, 7, 6, 2, 2, 1350, 1352, + 3, 2, 2, 2, 1351, 1339, 3, 2, 2, 2, 1352, 1355, 3, 2, 2, 2, 1353, 1351, + 3, 2, 2, 2, 1353, 1354, 3, 2, 2, 2, 1354, 1357, 3, 2, 2, 2, 1355, 1353, + 3, 2, 2, 2, 1356, 1266, 3, 2, 2, 2, 1356, 1328, 3, 2, 2, 2, 1357, 87, 3, + 2, 2, 2, 1358, 1359, 5, 82, 42, 2, 1359, 89, 3, 2, 2, 2, 1360, 1362, 5, + 130, 66, 2, 1361, 1360, 3, 2, 2, 2, 1361, 1362, 3, 2, 2, 2, 1362, 1363, + 3, 2, 2, 2, 1363, 1365, 5, 86, 44, 2, 1364, 1366, 5, 132, 67, 2, 1365, + 1364, 3, 2, 2, 2, 1365, 1366, 3, 2, 2, 2, 1366, 1368, 3, 2, 2, 2, 1367, + 1369, 5, 134, 68, 2, 1368, 1367, 3, 2, 2, 2, 1368, 1369, 3, 2, 2, 2, 1369, + 91, 3, 2, 2, 2, 1370, 1372, 5, 130, 66, 2, 1371, 1370, 3, 2, 2, 2, 1371, + 1372, 3, 2, 2, 2, 1372, 1373, 3, 2, 2, 2, 1373, 1383, 5, 86, 44, 2, 1374, + 1376, 7, 140, 2, 2, 1375, 1377, 7, 31, 2, 2, 1376, 1375, 3, 2, 2, 2, 1376, + 1377, 3, 2, 2, 2, 1377, 1381, 3, 2, 2, 2, 1378, 1381, 7, 92, 2, 2, 1379, + 1381, 7, 70, 2, 2, 1380, 1374, 3, 2, 2, 2, 1380, 1378, 3, 2, 2, 2, 1380, + 1379, 3, 2, 2, 2, 1381, 1382, 3, 2, 2, 2, 1382, 1384, 5, 86, 44, 2, 1383, + 1380, 3, 2, 2, 2, 1384, 1385, 3, 2, 2, 2, 1385, 1383, 3, 2, 2, 2, 1385, + 1386, 3, 2, 2, 2, 1386, 1388, 3, 2, 2, 2, 1387, 1389, 5, 132, 67, 2, 1388, + 1387, 3, 2, 2, 2, 1388, 1389, 3, 2, 2, 2, 1389, 1391, 3, 2, 2, 2, 1390, + 1392, 5, 134, 68, 2, 1391, 1390, 3, 2, 2, 2, 1391, 1392, 3, 2, 2, 2, 1392, + 93, 3, 2, 2, 2, 1393, 1394, 5, 178, 90, 2, 1394, 1395, 7, 4, 2, 2, 1395, + 1397, 3, 2, 2, 2, 1396, 1393, 3, 2, 2, 2, 1396, 1397, 3, 2, 2, 2, 1397, + 1398, 3, 2, 2, 2, 1398, 1403, 5, 180, 91, 2, 1399, 1401, 7, 35, 2, 2, 1400, + 1399, 3, 2, 2, 2, 1400, 1401, 3, 2, 2, 2, 1401, 1402, 3, 2, 2, 2, 1402, + 1404, 5, 204, 103, 2, 1403, 1400, 3, 2, 2, 2, 1403, 1404, 3, 2, 2, 2, 1404, + 1410, 3, 2, 2, 2, 1405, 1406, 7, 87, 2, 2, 1406, 1407, 7, 42, 2, 2, 1407, + 1411, 5, 192, 97, 2, 1408, 1409, 7, 104, 2, 2, 1409, 1411, 7, 87, 2, 2, + 1410, 1405, 3, 2, 2, 2, 1410, 1408, 3, 2, 2, 2, 1410, 1411, 3, 2, 2, 2, + 1411, 1458, 3, 2, 2, 2, 1412, 1413, 5, 178, 90, 2, 1413, 1414, 7, 4, 2, + 2, 1414, 1416, 3, 2, 2, 2, 1415, 1412, 3, 2, 2, 2, 1415, 1416, 3, 2, 2, + 2, 1416, 1417, 3, 2, 2, 2, 1417, 1418, 5, 220, 111, 2, 1418, 1419, 7, 5, + 2, 2, 1419, 1424, 5, 66, 34, 2, 1420, 1421, 7, 7, 2, 2, 1421, 1423, 5, + 66, 34, 2, 1422, 1420, 3, 2, 2, 2, 1423, 1426, 3, 2, 2, 2, 1424, 1422, + 3, 2, 2, 2, 1424, 1425, 3, 2, 2, 2, 1425, 1427, 3, 2, 2, 2, 1426, 1424, + 3, 2, 2, 2, 1427, 1432, 7, 6, 2, 2, 1428, 1430, 7, 35, 2, 2, 1429, 1428, + 3, 2, 2, 2, 1429, 1430, 3, 2, 2, 2, 1430, 1431, 3, 2, 2, 2, 1431, 1433, + 5, 204, 103, 2, 1432, 1429, 3, 2, 2, 2, 1432, 1433, 3, 2, 2, 2, 1433, 1458, + 3, 2, 2, 2, 1434, 1444, 7, 5, 2, 2, 1435, 1440, 5, 94, 48, 2, 1436, 1437, + 7, 7, 2, 2, 1437, 1439, 5, 94, 48, 2, 1438, 1436, 3, 2, 2, 2, 1439, 1442, + 3, 2, 2, 2, 1440, 1438, 3, 2, 2, 2, 1440, 1441, 3, 2, 2, 2, 1441, 1445, + 3, 2, 2, 2, 1442, 1440, 3, 2, 2, 2, 1443, 1445, 5, 84, 43, 2, 1444, 1435, + 3, 2, 2, 2, 1444, 1443, 3, 2, 2, 2, 1445, 1446, 3, 2, 2, 2, 1446, 1447, + 7, 6, 2, 2, 1447, 1458, 3, 2, 2, 2, 1448, 1449, 7, 5, 2, 2, 1449, 1450, + 5, 82, 42, 2, 1450, 1455, 7, 6, 2, 2, 1451, 1453, 7, 35, 2, 2, 1452, 1451, + 3, 2, 2, 2, 1452, 1453, 3, 2, 2, 2, 1453, 1454, 3, 2, 2, 2, 1454, 1456, + 5, 204, 103, 2, 1455, 1452, 3, 2, 2, 2, 1455, 1456, 3, 2, 2, 2, 1456, 1458, + 3, 2, 2, 2, 1457, 1396, 3, 2, 2, 2, 1457, 1415, 3, 2, 2, 2, 1457, 1434, + 3, 2, 2, 2, 1457, 1448, 3, 2, 2, 2, 1458, 95, 3, 2, 2, 2, 1459, 1472, 7, + 9, 2, 2, 1460, 1461, 5, 180, 91, 2, 1461, 1462, 7, 4, 2, 2, 1462, 1463, + 7, 9, 2, 2, 1463, 1472, 3, 2, 2, 2, 1464, 1469, 5, 66, 34, 2, 1465, 1467, + 7, 35, 2, 2, 1466, 1465, 3, 2, 2, 2, 1466, 1467, 3, 2, 2, 2, 1467, 1468, + 3, 2, 2, 2, 1468, 1470, 5, 170, 86, 2, 1469, 1466, 3, 2, 2, 2, 1469, 1470, + 3, 2, 2, 2, 1470, 1472, 3, 2, 2, 2, 1471, 1459, 3, 2, 2, 2, 1471, 1460, + 3, 2, 2, 2, 1471, 1464, 3, 2, 2, 2, 1472, 97, 3, 2, 2, 2, 1473, 1487, 7, + 7, 2, 2, 1474, 1476, 7, 102, 2, 2, 1475, 1474, 3, 2, 2, 2, 1475, 1476, + 3, 2, 2, 2, 1476, 1483, 3, 2, 2, 2, 1477, 1479, 7, 98, 2, 2, 1478, 1480, + 7, 112, 2, 2, 1479, 1478, 3, 2, 2, 2, 1479, 1480, 3, 2, 2, 2, 1480, 1484, + 3, 2, 2, 2, 1481, 1484, 7, 89, 2, 2, 1482, 1484, 7, 53, 2, 2, 1483, 1477, + 3, 2, 2, 2, 1483, 1481, 3, 2, 2, 2, 1483, 1482, 3, 2, 2, 2, 1483, 1484, + 3, 2, 2, 2, 1484, 1485, 3, 2, 2, 2, 1485, 1487, 7, 96, 2, 2, 1486, 1473, + 3, 2, 2, 2, 1486, 1475, 3, 2, 2, 2, 1487, 99, 3, 2, 2, 2, 1488, 1489, 7, + 109, 2, 2, 1489, 1503, 5, 66, 34, 2, 1490, 1491, 7, 143, 2, 2, 1491, 1492, + 7, 5, 2, 2, 1492, 1497, 5, 186, 94, 2, 1493, 1494, 7, 7, 2, 2, 1494, 1496, + 5, 186, 94, 2, 1495, 1493, 3, 2, 2, 2, 1496, 1499, 3, 2, 2, 2, 1497, 1495, + 3, 2, 2, 2, 1497, 1498, 3, 2, 2, 2, 1498, 1500, 3, 2, 2, 2, 1499, 1497, + 3, 2, 2, 2, 1500, 1501, 7, 6, 2, 2, 1501, 1503, 3, 2, 2, 2, 1502, 1488, + 3, 2, 2, 2, 1502, 1490, 3, 2, 2, 2, 1503, 101, 3, 2, 2, 2, 1504, 1506, + 7, 140, 2, 2, 1505, 1507, 7, 31, 2, 2, 1506, 1505, 3, 2, 2, 2, 1506, 1507, + 3, 2, 2, 2, 1507, 1511, 3, 2, 2, 2, 1508, 1511, 7, 92, 2, 2, 1509, 1511, + 7, 70, 2, 2, 1510, 1504, 3, 2, 2, 2, 1510, 1508, 3, 2, 2, 2, 1510, 1509, + 3, 2, 2, 2, 1511, 103, 3, 2, 2, 2, 1512, 1514, 5, 50, 26, 2, 1513, 1512, + 3, 2, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1515, 3, 2, 2, 2, 1515, 1518, + 7, 142, 2, 2, 1516, 1517, 7, 110, 2, 2, 1517, 1519, 9, 10, 2, 2, 1518, + 1516, 3, 2, 2, 2, 1518, 1519, 3, 2, 2, 2, 1519, 1520, 3, 2, 2, 2, 1520, + 1521, 5, 110, 56, 2, 1521, 1524, 7, 132, 2, 2, 1522, 1525, 5, 186, 94, + 2, 1523, 1525, 5, 106, 54, 2, 1524, 1522, 3, 2, 2, 2, 1524, 1523, 3, 2, + 2, 2, 1525, 1526, 3, 2, 2, 2, 1526, 1527, 7, 8, 2, 2, 1527, 1538, 5, 66, + 34, 2, 1528, 1531, 7, 7, 2, 2, 1529, 1532, 5, 186, 94, 2, 1530, 1532, 5, + 106, 54, 2, 1531, 1529, 3, 2, 2, 2, 1531, 1530, 3, 2, 2, 2, 1532, 1533, + 3, 2, 2, 2, 1533, 1534, 7, 8, 2, 2, 1534, 1535, 5, 66, 34, 2, 1535, 1537, + 3, 2, 2, 2, 1536, 1528, 3, 2, 2, 2, 1537, 1540, 3, 2, 2, 2, 1538, 1536, + 3, 2, 2, 2, 1538, 1539, 3, 2, 2, 2, 1539, 1543, 3, 2, 2, 2, 1540, 1538, + 3, 2, 2, 2, 1541, 1542, 7, 149, 2, 2, 1542, 1544, 5, 66, 34, 2, 1543, 1541, + 3, 2, 2, 2, 1543, 1544, 3, 2, 2, 2, 1544, 105, 3, 2, 2, 2, 1545, 1546, + 7, 5, 2, 2, 1546, 1551, 5, 186, 94, 2, 1547, 1548, 7, 7, 2, 2, 1548, 1550, + 5, 186, 94, 2, 1549, 1547, 3, 2, 2, 2, 1550, 1553, 3, 2, 2, 2, 1551, 1549, + 3, 2, 2, 2, 1551, 1552, 3, 2, 2, 2, 1552, 1554, 3, 2, 2, 2, 1553, 1551, + 3, 2, 2, 2, 1554, 1555, 7, 6, 2, 2, 1555, 107, 3, 2, 2, 2, 1556, 1558, + 5, 50, 26, 2, 1557, 1556, 3, 2, 2, 2, 1557, 1558, 3, 2, 2, 2, 1558, 1559, + 3, 2, 2, 2, 1559, 1562, 7, 142, 2, 2, 1560, 1561, 7, 110, 2, 2, 1561, 1563, + 9, 10, 2, 2, 1562, 1560, 3, 2, 2, 2, 1562, 1563, 3, 2, 2, 2, 1563, 1564, + 3, 2, 2, 2, 1564, 1565, 5, 110, 56, 2, 1565, 1568, 7, 132, 2, 2, 1566, + 1569, 5, 186, 94, 2, 1567, 1569, 5, 106, 54, 2, 1568, 1566, 3, 2, 2, 2, + 1568, 1567, 3, 2, 2, 2, 1569, 1570, 3, 2, 2, 2, 1570, 1571, 7, 8, 2, 2, + 1571, 1582, 5, 66, 34, 2, 1572, 1575, 7, 7, 2, 2, 1573, 1576, 5, 186, 94, + 2, 1574, 1576, 5, 106, 54, 2, 1575, 1573, 3, 2, 2, 2, 1575, 1574, 3, 2, + 2, 2, 1576, 1577, 3, 2, 2, 2, 1577, 1578, 7, 8, 2, 2, 1578, 1579, 5, 66, + 34, 2, 1579, 1581, 3, 2, 2, 2, 1580, 1572, 3, 2, 2, 2, 1581, 1584, 3, 2, + 2, 2, 1582, 1580, 3, 2, 2, 2, 1582, 1583, 3, 2, 2, 2, 1583, 1587, 3, 2, + 2, 2, 1584, 1582, 3, 2, 2, 2, 1585, 1586, 7, 149, 2, 2, 1586, 1588, 5, + 66, 34, 2, 1587, 1585, 3, 2, 2, 2, 1587, 1588, 3, 2, 2, 2, 1588, 1593, + 3, 2, 2, 2, 1589, 1591, 5, 132, 67, 2, 1590, 1589, 3, 2, 2, 2, 1590, 1591, + 3, 2, 2, 2, 1591, 1592, 3, 2, 2, 2, 1592, 1594, 5, 134, 68, 2, 1593, 1590, + 3, 2, 2, 2, 1593, 1594, 3, 2, 2, 2, 1594, 109, 3, 2, 2, 2, 1595, 1596, + 5, 178, 90, 2, 1596, 1597, 7, 4, 2, 2, 1597, 1599, 3, 2, 2, 2, 1598, 1595, + 3, 2, 2, 2, 1598, 1599, 3, 2, 2, 2, 1599, 1600, 3, 2, 2, 2, 1600, 1603, + 5, 180, 91, 2, 1601, 1602, 7, 35, 2, 2, 1602, 1604, 5, 210, 106, 2, 1603, + 1601, 3, 2, 2, 2, 1603, 1604, 3, 2, 2, 2, 1604, 1610, 3, 2, 2, 2, 1605, + 1606, 7, 87, 2, 2, 1606, 1607, 7, 42, 2, 2, 1607, 1611, 5, 192, 97, 2, + 1608, 1609, 7, 104, 2, 2, 1609, 1611, 7, 87, 2, 2, 1610, 1605, 3, 2, 2, + 2, 1610, 1608, 3, 2, 2, 2, 1610, 1611, 3, 2, 2, 2, 1611, 111, 3, 2, 2, + 2, 1612, 1614, 7, 144, 2, 2, 1613, 1615, 5, 178, 90, 2, 1614, 1613, 3, + 2, 2, 2, 1614, 1615, 3, 2, 2, 2, 1615, 1618, 3, 2, 2, 2, 1616, 1617, 7, + 93, 2, 2, 1617, 1619, 5, 212, 107, 2, 1618, 1616, 3, 2, 2, 2, 1618, 1619, + 3, 2, 2, 2, 1619, 113, 3, 2, 2, 2, 1620, 1621, 7, 179, 2, 2, 1621, 1622, + 7, 5, 2, 2, 1622, 1623, 7, 149, 2, 2, 1623, 1624, 5, 66, 34, 2, 1624, 1625, + 7, 6, 2, 2, 1625, 115, 3, 2, 2, 2, 1626, 1628, 7, 5, 2, 2, 1627, 1629, + 5, 214, 108, 2, 1628, 1627, 3, 2, 2, 2, 1628, 1629, 3, 2, 2, 2, 1629, 1640, + 3, 2, 2, 2, 1630, 1631, 7, 154, 2, 2, 1631, 1632, 7, 42, 2, 2, 1632, 1637, + 5, 66, 34, 2, 1633, 1634, 7, 7, 2, 2, 1634, 1636, 5, 66, 34, 2, 1635, 1633, + 3, 2, 2, 2, 1636, 1639, 3, 2, 2, 2, 1637, 1635, 3, 2, 2, 2, 1637, 1638, + 3, 2, 2, 2, 1638, 1641, 3, 2, 2, 2, 1639, 1637, 3, 2, 2, 2, 1640, 1630, + 3, 2, 2, 2, 1640, 1641, 3, 2, 2, 2, 1641, 1642, 3, 2, 2, 2, 1642, 1643, + 7, 111, 2, 2, 1643, 1644, 7, 42, 2, 2, 1644, 1649, 5, 136, 69, 2, 1645, + 1646, 7, 7, 2, 2, 1646, 1648, 5, 136, 69, 2, 1647, 1645, 3, 2, 2, 2, 1648, + 1651, 3, 2, 2, 2, 1649, 1647, 3, 2, 2, 2, 1649, 1650, 3, 2, 2, 2, 1650, + 1653, 3, 2, 2, 2, 1651, 1649, 3, 2, 2, 2, 1652, 1654, 5, 120, 61, 2, 1653, + 1652, 3, 2, 2, 2, 1653, 1654, 3, 2, 2, 2, 1654, 1655, 3, 2, 2, 2, 1655, + 1656, 7, 6, 2, 2, 1656, 117, 3, 2, 2, 2, 1657, 1691, 7, 153, 2, 2, 1658, + 1692, 5, 208, 105, 2, 1659, 1661, 7, 5, 2, 2, 1660, 1662, 5, 214, 108, + 2, 1661, 1660, 3, 2, 2, 2, 1661, 1662, 3, 2, 2, 2, 1662, 1673, 3, 2, 2, + 2, 1663, 1664, 7, 154, 2, 2, 1664, 1665, 7, 42, 2, 2, 1665, 1670, 5, 66, + 34, 2, 1666, 1667, 7, 7, 2, 2, 1667, 1669, 5, 66, 34, 2, 1668, 1666, 3, + 2, 2, 2, 1669, 1672, 3, 2, 2, 2, 1670, 1668, 3, 2, 2, 2, 1670, 1671, 3, + 2, 2, 2, 1671, 1674, 3, 2, 2, 2, 1672, 1670, 3, 2, 2, 2, 1673, 1663, 3, + 2, 2, 2, 1673, 1674, 3, 2, 2, 2, 1674, 1685, 3, 2, 2, 2, 1675, 1676, 7, + 111, 2, 2, 1676, 1677, 7, 42, 2, 2, 1677, 1682, 5, 136, 69, 2, 1678, 1679, + 7, 7, 2, 2, 1679, 1681, 5, 136, 69, 2, 1680, 1678, 3, 2, 2, 2, 1681, 1684, + 3, 2, 2, 2, 1682, 1680, 3, 2, 2, 2, 1682, 1683, 3, 2, 2, 2, 1683, 1686, + 3, 2, 2, 2, 1684, 1682, 3, 2, 2, 2, 1685, 1675, 3, 2, 2, 2, 1685, 1686, + 3, 2, 2, 2, 1686, 1688, 3, 2, 2, 2, 1687, 1689, 5, 120, 61, 2, 1688, 1687, + 3, 2, 2, 2, 1688, 1689, 3, 2, 2, 2, 1689, 1690, 3, 2, 2, 2, 1690, 1692, + 7, 6, 2, 2, 1691, 1658, 3, 2, 2, 2, 1691, 1659, 3, 2, 2, 2, 1692, 119, + 3, 2, 2, 2, 1693, 1701, 5, 122, 62, 2, 1694, 1695, 7, 181, 2, 2, 1695, + 1696, 7, 103, 2, 2, 1696, 1702, 7, 183, 2, 2, 1697, 1698, 7, 158, 2, 2, + 1698, 1702, 7, 128, 2, 2, 1699, 1702, 7, 80, 2, 2, 1700, 1702, 7, 182, + 2, 2, 1701, 1694, 3, 2, 2, 2, 1701, 1697, 3, 2, 2, 2, 1701, 1699, 3, 2, + 2, 2, 1701, 1700, 3, 2, 2, 2, 1701, 1702, 3, 2, 2, 2, 1702, 121, 3, 2, + 2, 2, 1703, 1710, 9, 19, 2, 2, 1704, 1711, 5, 144, 73, 2, 1705, 1706, 7, + 41, 2, 2, 1706, 1707, 5, 140, 71, 2, 1707, 1708, 7, 34, 2, 2, 1708, 1709, + 5, 142, 72, 2, 1709, 1711, 3, 2, 2, 2, 1710, 1704, 3, 2, 2, 2, 1710, 1705, + 3, 2, 2, 2, 1711, 123, 3, 2, 2, 2, 1712, 1713, 5, 216, 109, 2, 1713, 1723, + 7, 5, 2, 2, 1714, 1719, 5, 66, 34, 2, 1715, 1716, 7, 7, 2, 2, 1716, 1718, + 5, 66, 34, 2, 1717, 1715, 3, 2, 2, 2, 1718, 1721, 3, 2, 2, 2, 1719, 1717, + 3, 2, 2, 2, 1719, 1720, 3, 2, 2, 2, 1720, 1724, 3, 2, 2, 2, 1721, 1719, + 3, 2, 2, 2, 1722, 1724, 7, 9, 2, 2, 1723, 1714, 3, 2, 2, 2, 1723, 1722, + 3, 2, 2, 2, 1724, 1725, 3, 2, 2, 2, 1725, 1726, 7, 6, 2, 2, 1726, 125, + 3, 2, 2, 2, 1727, 1728, 5, 218, 110, 2, 1728, 1741, 7, 5, 2, 2, 1729, 1731, + 7, 64, 2, 2, 1730, 1729, 3, 2, 2, 2, 1730, 1731, 3, 2, 2, 2, 1731, 1732, + 3, 2, 2, 2, 1732, 1737, 5, 66, 34, 2, 1733, 1734, 7, 7, 2, 2, 1734, 1736, + 5, 66, 34, 2, 1735, 1733, 3, 2, 2, 2, 1736, 1739, 3, 2, 2, 2, 1737, 1735, + 3, 2, 2, 2, 1737, 1738, 3, 2, 2, 2, 1738, 1742, 3, 2, 2, 2, 1739, 1737, + 3, 2, 2, 2, 1740, 1742, 7, 9, 2, 2, 1741, 1730, 3, 2, 2, 2, 1741, 1740, + 3, 2, 2, 2, 1741, 1742, 3, 2, 2, 2, 1742, 1743, 3, 2, 2, 2, 1743, 1745, + 7, 6, 2, 2, 1744, 1746, 5, 114, 58, 2, 1745, 1744, 3, 2, 2, 2, 1745, 1746, + 3, 2, 2, 2, 1746, 127, 3, 2, 2, 2, 1747, 1748, 5, 146, 74, 2, 1748, 1758, + 7, 5, 2, 2, 1749, 1754, 5, 66, 34, 2, 1750, 1751, 7, 7, 2, 2, 1751, 1753, + 5, 66, 34, 2, 1752, 1750, 3, 2, 2, 2, 1753, 1756, 3, 2, 2, 2, 1754, 1752, + 3, 2, 2, 2, 1754, 1755, 3, 2, 2, 2, 1755, 1759, 3, 2, 2, 2, 1756, 1754, + 3, 2, 2, 2, 1757, 1759, 7, 9, 2, 2, 1758, 1749, 3, 2, 2, 2, 1758, 1757, + 3, 2, 2, 2, 1758, 1759, 3, 2, 2, 2, 1759, 1760, 3, 2, 2, 2, 1760, 1762, + 7, 6, 2, 2, 1761, 1763, 5, 114, 58, 2, 1762, 1761, 3, 2, 2, 2, 1762, 1763, + 3, 2, 2, 2, 1763, 1764, 3, 2, 2, 2, 1764, 1767, 7, 153, 2, 2, 1765, 1768, + 5, 116, 59, 2, 1766, 1768, 5, 208, 105, 2, 1767, 1765, 3, 2, 2, 2, 1767, + 1766, 3, 2, 2, 2, 1768, 129, 3, 2, 2, 2, 1769, 1771, 7, 150, 2, 2, 1770, + 1772, 7, 118, 2, 2, 1771, 1770, 3, 2, 2, 2, 1771, 1772, 3, 2, 2, 2, 1772, + 1773, 3, 2, 2, 2, 1773, 1778, 5, 56, 29, 2, 1774, 1775, 7, 7, 2, 2, 1775, + 1777, 5, 56, 29, 2, 1776, 1774, 3, 2, 2, 2, 1777, 1780, 3, 2, 2, 2, 1778, + 1776, 3, 2, 2, 2, 1778, 1779, 3, 2, 2, 2, 1779, 131, 3, 2, 2, 2, 1780, + 1778, 3, 2, 2, 2, 1781, 1782, 7, 111, 2, 2, 1782, 1783, 7, 42, 2, 2, 1783, + 1788, 5, 136, 69, 2, 1784, 1785, 7, 7, 2, 2, 1785, 1787, 5, 136, 69, 2, + 1786, 1784, 3, 2, 2, 2, 1787, 1790, 3, 2, 2, 2, 1788, 1786, 3, 2, 2, 2, + 1788, 1789, 3, 2, 2, 2, 1789, 133, 3, 2, 2, 2, 1790, 1788, 3, 2, 2, 2, + 1791, 1792, 7, 100, 2, 2, 1792, 1795, 5, 66, 34, 2, 1793, 1794, 9, 20, + 2, 2, 1794, 1796, 5, 66, 34, 2, 1795, 1793, 3, 2, 2, 2, 1795, 1796, 3, + 2, 2, 2, 1796, 135, 3, 2, 2, 2, 1797, 1800, 5, 66, 34, 2, 1798, 1799, 7, + 47, 2, 2, 1799, 1801, 5, 188, 95, 2, 1800, 1798, 3, 2, 2, 2, 1800, 1801, + 3, 2, 2, 2, 1801, 1803, 3, 2, 2, 2, 1802, 1804, 5, 138, 70, 2, 1803, 1802, + 3, 2, 2, 2, 1803, 1804, 3, 2, 2, 2, 1804, 1807, 3, 2, 2, 2, 1805, 1806, + 7, 176, 2, 2, 1806, 1808, 9, 21, 2, 2, 1807, 1805, 3, 2, 2, 2, 1807, 1808, + 3, 2, 2, 2, 1808, 137, 3, 2, 2, 2, 1809, 1810, 9, 22, 2, 2, 1810, 139, + 3, 2, 2, 2, 1811, 1812, 5, 66, 34, 2, 1812, 1813, 7, 156, 2, 2, 1813, 1822, + 3, 2, 2, 2, 1814, 1815, 5, 66, 34, 2, 1815, 1816, 7, 159, 2, 2, 1816, 1822, + 3, 2, 2, 2, 1817, 1818, 7, 158, 2, 2, 1818, 1822, 7, 128, 2, 2, 1819, 1820, + 7, 157, 2, 2, 1820, 1822, 7, 156, 2, 2, 1821, 1811, 3, 2, 2, 2, 1821, 1814, + 3, 2, 2, 2, 1821, 1817, 3, 2, 2, 2, 1821, 1819, 3, 2, 2, 2, 1822, 141, + 3, 2, 2, 2, 1823, 1824, 5, 66, 34, 2, 1824, 1825, 7, 156, 2, 2, 1825, 1834, + 3, 2, 2, 2, 1826, 1827, 5, 66, 34, 2, 1827, 1828, 7, 159, 2, 2, 1828, 1834, + 3, 2, 2, 2, 1829, 1830, 7, 158, 2, 2, 1830, 1834, 7, 128, 2, 2, 1831, 1832, + 7, 157, 2, 2, 1832, 1834, 7, 159, 2, 2, 1833, 1823, 3, 2, 2, 2, 1833, 1826, + 3, 2, 2, 2, 1833, 1829, 3, 2, 2, 2, 1833, 1831, 3, 2, 2, 2, 1834, 143, + 3, 2, 2, 2, 1835, 1836, 5, 66, 34, 2, 1836, 1837, 7, 156, 2, 2, 1837, 1843, + 3, 2, 2, 2, 1838, 1839, 7, 157, 2, 2, 1839, 1843, 7, 156, 2, 2, 1840, 1841, + 7, 158, 2, 2, 1841, 1843, 7, 128, 2, 2, 1842, 1835, 3, 2, 2, 2, 1842, 1838, + 3, 2, 2, 2, 1842, 1840, 3, 2, 2, 2, 1843, 145, 3, 2, 2, 2, 1844, 1845, + 9, 23, 2, 2, 1845, 1846, 7, 5, 2, 2, 1846, 1847, 5, 66, 34, 2, 1847, 1848, + 7, 6, 2, 2, 1848, 1849, 7, 153, 2, 2, 1849, 1851, 7, 5, 2, 2, 1850, 1852, + 5, 152, 77, 2, 1851, 1850, 3, 2, 2, 2, 1851, 1852, 3, 2, 2, 2, 1852, 1853, + 3, 2, 2, 2, 1853, 1855, 5, 156, 79, 2, 1854, 1856, 5, 122, 62, 2, 1855, + 1854, 3, 2, 2, 2, 1855, 1856, 3, 2, 2, 2, 1856, 1857, 3, 2, 2, 2, 1857, + 1858, 7, 6, 2, 2, 1858, 1930, 3, 2, 2, 2, 1859, 1860, 9, 24, 2, 2, 1860, + 1861, 7, 5, 2, 2, 1861, 1862, 7, 6, 2, 2, 1862, 1863, 7, 153, 2, 2, 1863, + 1865, 7, 5, 2, 2, 1864, 1866, 5, 152, 77, 2, 1865, 1864, 3, 2, 2, 2, 1865, + 1866, 3, 2, 2, 2, 1866, 1868, 3, 2, 2, 2, 1867, 1869, 5, 154, 78, 2, 1868, + 1867, 3, 2, 2, 2, 1868, 1869, 3, 2, 2, 2, 1869, 1870, 3, 2, 2, 2, 1870, + 1930, 7, 6, 2, 2, 1871, 1872, 9, 25, 2, 2, 1872, 1873, 7, 5, 2, 2, 1873, + 1874, 7, 6, 2, 2, 1874, 1875, 7, 153, 2, 2, 1875, 1877, 7, 5, 2, 2, 1876, + 1878, 5, 152, 77, 2, 1877, 1876, 3, 2, 2, 2, 1877, 1878, 3, 2, 2, 2, 1878, + 1879, 3, 2, 2, 2, 1879, 1880, 5, 156, 79, 2, 1880, 1881, 7, 6, 2, 2, 1881, + 1930, 3, 2, 2, 2, 1882, 1883, 9, 26, 2, 2, 1883, 1884, 7, 5, 2, 2, 1884, + 1886, 5, 66, 34, 2, 1885, 1887, 5, 148, 75, 2, 1886, 1885, 3, 2, 2, 2, + 1886, 1887, 3, 2, 2, 2, 1887, 1889, 3, 2, 2, 2, 1888, 1890, 5, 150, 76, + 2, 1889, 1888, 3, 2, 2, 2, 1889, 1890, 3, 2, 2, 2, 1890, 1891, 3, 2, 2, + 2, 1891, 1892, 7, 6, 2, 2, 1892, 1893, 7, 153, 2, 2, 1893, 1895, 7, 5, + 2, 2, 1894, 1896, 5, 152, 77, 2, 1895, 1894, 3, 2, 2, 2, 1895, 1896, 3, + 2, 2, 2, 1896, 1897, 3, 2, 2, 2, 1897, 1898, 5, 156, 79, 2, 1898, 1899, + 7, 6, 2, 2, 1899, 1930, 3, 2, 2, 2, 1900, 1901, 7, 165, 2, 2, 1901, 1902, + 7, 5, 2, 2, 1902, 1903, 5, 66, 34, 2, 1903, 1904, 7, 7, 2, 2, 1904, 1905, + 5, 36, 19, 2, 1905, 1906, 7, 6, 2, 2, 1906, 1907, 7, 153, 2, 2, 1907, 1909, + 7, 5, 2, 2, 1908, 1910, 5, 152, 77, 2, 1909, 1908, 3, 2, 2, 2, 1909, 1910, + 3, 2, 2, 2, 1910, 1911, 3, 2, 2, 2, 1911, 1913, 5, 156, 79, 2, 1912, 1914, + 5, 122, 62, 2, 1913, 1912, 3, 2, 2, 2, 1913, 1914, 3, 2, 2, 2, 1914, 1915, + 3, 2, 2, 2, 1915, 1916, 7, 6, 2, 2, 1916, 1930, 3, 2, 2, 2, 1917, 1918, + 7, 166, 2, 2, 1918, 1919, 7, 5, 2, 2, 1919, 1920, 5, 66, 34, 2, 1920, 1921, + 7, 6, 2, 2, 1921, 1922, 7, 153, 2, 2, 1922, 1924, 7, 5, 2, 2, 1923, 1925, + 5, 152, 77, 2, 1924, 1923, 3, 2, 2, 2, 1924, 1925, 3, 2, 2, 2, 1925, 1926, + 3, 2, 2, 2, 1926, 1927, 5, 156, 79, 2, 1927, 1928, 7, 6, 2, 2, 1928, 1930, + 3, 2, 2, 2, 1929, 1844, 3, 2, 2, 2, 1929, 1859, 3, 2, 2, 2, 1929, 1871, + 3, 2, 2, 2, 1929, 1882, 3, 2, 2, 2, 1929, 1900, 3, 2, 2, 2, 1929, 1917, + 3, 2, 2, 2, 1930, 147, 3, 2, 2, 2, 1931, 1932, 7, 7, 2, 2, 1932, 1933, + 5, 36, 19, 2, 1933, 149, 3, 2, 2, 2, 1934, 1935, 7, 7, 2, 2, 1935, 1936, + 5, 36, 19, 2, 1936, 151, 3, 2, 2, 2, 1937, 1938, 7, 154, 2, 2, 1938, 1940, + 7, 42, 2, 2, 1939, 1941, 5, 66, 34, 2, 1940, 1939, 3, 2, 2, 2, 1941, 1942, + 3, 2, 2, 2, 1942, 1940, 3, 2, 2, 2, 1942, 1943, 3, 2, 2, 2, 1943, 153, + 3, 2, 2, 2, 1944, 1945, 7, 111, 2, 2, 1945, 1947, 7, 42, 2, 2, 1946, 1948, + 5, 66, 34, 2, 1947, 1946, 3, 2, 2, 2, 1948, 1949, 3, 2, 2, 2, 1949, 1947, + 3, 2, 2, 2, 1949, 1950, 3, 2, 2, 2, 1950, 155, 3, 2, 2, 2, 1951, 1952, + 7, 111, 2, 2, 1952, 1953, 7, 42, 2, 2, 1953, 1954, 5, 156, 79, 2, 1954, + 157, 3, 2, 2, 2, 1955, 1957, 5, 66, 34, 2, 1956, 1958, 5, 138, 70, 2, 1957, + 1956, 3, 2, 2, 2, 1957, 1958, 3, 2, 2, 2, 1958, 1966, 3, 2, 2, 2, 1959, + 1960, 7, 7, 2, 2, 1960, 1962, 5, 66, 34, 2, 1961, 1963, 5, 138, 70, 2, + 1962, 1961, 3, 2, 2, 2, 1962, 1963, 3, 2, 2, 2, 1963, 1965, 3, 2, 2, 2, + 1964, 1959, 3, 2, 2, 2, 1965, 1968, 3, 2, 2, 2, 1966, 1964, 3, 2, 2, 2, + 1966, 1967, 3, 2, 2, 2, 1967, 159, 3, 2, 2, 2, 1968, 1966, 3, 2, 2, 2, + 1969, 1970, 5, 82, 42, 2, 1970, 161, 3, 2, 2, 2, 1971, 1972, 5, 82, 42, + 2, 1972, 163, 3, 2, 2, 2, 1973, 1974, 9, 27, 2, 2, 1974, 165, 3, 2, 2, + 2, 1975, 1976, 7, 189, 2, 2, 1976, 167, 3, 2, 2, 2, 1977, 1980, 5, 66, + 34, 2, 1978, 1980, 5, 30, 16, 2, 1979, 1977, 3, 2, 2, 2, 1979, 1978, 3, + 2, 2, 2, 1980, 169, 3, 2, 2, 2, 1981, 1982, 9, 28, 2, 2, 1982, 171, 3, + 2, 2, 2, 1983, 1984, 9, 29, 2, 2, 1984, 173, 3, 2, 2, 2, 1985, 1986, 5, + 222, 112, 2, 1986, 175, 3, 2, 2, 2, 1987, 1988, 5, 222, 112, 2, 1988, 177, + 3, 2, 2, 2, 1989, 1990, 5, 222, 112, 2, 1990, 179, 3, 2, 2, 2, 1991, 1992, + 5, 222, 112, 2, 1992, 181, 3, 2, 2, 2, 1993, 1994, 5, 222, 112, 2, 1994, + 183, 3, 2, 2, 2, 1995, 1996, 5, 222, 112, 2, 1996, 185, 3, 2, 2, 2, 1997, + 1998, 5, 222, 112, 2, 1998, 187, 3, 2, 2, 2, 1999, 2000, 5, 222, 112, 2, + 2000, 189, 3, 2, 2, 2, 2001, 2002, 5, 222, 112, 2, 2002, 191, 3, 2, 2, + 2, 2003, 2004, 5, 222, 112, 2, 2004, 193, 3, 2, 2, 2, 2005, 2006, 5, 222, + 112, 2, 2006, 195, 3, 2, 2, 2, 2007, 2008, 5, 222, 112, 2, 2008, 197, 3, + 2, 2, 2, 2009, 2010, 5, 222, 112, 2, 2010, 199, 3, 2, 2, 2, 2011, 2012, + 5, 222, 112, 2, 2012, 201, 3, 2, 2, 2, 2013, 2014, 5, 222, 112, 2, 2014, + 203, 3, 2, 2, 2, 2015, 2016, 5, 222, 112, 2, 2016, 205, 3, 2, 2, 2, 2017, + 2018, 5, 222, 112, 2, 2018, 207, 3, 2, 2, 2, 2019, 2020, 5, 222, 112, 2, + 2020, 209, 3, 2, 2, 2, 2021, 2022, 5, 222, 112, 2, 2022, 211, 3, 2, 2, + 2, 2023, 2024, 5, 222, 112, 2, 2024, 213, 3, 2, 2, 2, 2025, 2026, 5, 222, + 112, 2, 2026, 215, 3, 2, 2, 2, 2027, 2028, 5, 222, 112, 2, 2028, 217, 3, + 2, 2, 2, 2029, 2030, 5, 222, 112, 2, 2030, 219, 3, 2, 2, 2, 2031, 2032, + 5, 222, 112, 2, 2032, 221, 3, 2, 2, 2, 2033, 2041, 7, 186, 2, 2, 2034, + 2041, 5, 172, 87, 2, 2035, 2041, 7, 189, 2, 2, 2036, 2037, 7, 5, 2, 2, + 2037, 2038, 5, 222, 112, 2, 2038, 2039, 7, 6, 2, 2, 2039, 2041, 3, 2, 2, + 2, 2040, 2033, 3, 2, 2, 2, 2040, 2034, 3, 2, 2, 2, 2040, 2035, 3, 2, 2, + 2, 2040, 2036, 3, 2, 2, 2, 2041, 223, 3, 2, 2, 2, 290, 227, 235, 242, 247, + 253, 259, 261, 287, 294, 301, 307, 311, 314, 321, 324, 328, 336, 340, 342, + 346, 350, 354, 357, 364, 370, 376, 381, 392, 398, 402, 406, 409, 413, 419, + 424, 433, 440, 446, 450, 454, 459, 465, 477, 481, 486, 489, 492, 497, 500, + 514, 521, 528, 530, 533, 539, 544, 552, 557, 572, 578, 588, 593, 603, 607, + 609, 613, 618, 620, 628, 634, 639, 646, 657, 660, 662, 669, 673, 680, 686, + 692, 698, 703, 712, 717, 728, 733, 744, 749, 753, 769, 779, 784, 792, 804, + 809, 817, 824, 827, 834, 837, 840, 844, 852, 857, 867, 872, 881, 888, 892, + 896, 899, 907, 920, 923, 931, 940, 944, 949, 979, 991, 996, 1008, 1014, + 1021, 1025, 1035, 1038, 1044, 1050, 1059, 1062, 1066, 1068, 1070, 1079, + 1086, 1093, 1099, 1104, 1112, 1117, 1126, 1137, 1144, 1148, 1151, 1155, + 1165, 1171, 1173, 1181, 1188, 1195, 1200, 1202, 1208, 1217, 1222, 1229, + 1233, 1235, 1238, 1246, 1250, 1253, 1259, 1263, 1268, 1275, 1284, 1288, + 1290, 1294, 1303, 1308, 1310, 1323, 1326, 1335, 1346, 1353, 1356, 1361, + 1365, 1368, 1371, 1376, 1380, 1385, 1388, 1391, 1396, 1400, 1403, 1410, + 1415, 1424, 1429, 1432, 1440, 1444, 1452, 1455, 1457, 1466, 1469, 1471, + 1475, 1479, 1483, 1486, 1497, 1502, 1506, 1510, 1513, 1518, 1524, 1531, + 1538, 1543, 1551, 1557, 1562, 1568, 1575, 1582, 1587, 1590, 1593, 1598, + 1603, 1610, 1614, 1618, 1628, 1637, 1640, 1649, 1653, 1661, 1670, 1673, + 1682, 1685, 1688, 1691, 1701, 1710, 1719, 1723, 1730, 1737, 1741, 1745, + 1754, 1758, 1762, 1767, 1771, 1778, 1788, 1795, 1800, 1803, 1807, 1821, + 1833, 1842, 1851, 1855, 1865, 1868, 1877, 1886, 1889, 1895, 1909, 1913, + 1924, 1929, 1942, 1949, 1957, 1962, 1966, 1979, 2040, +} var literalNames = []string{ "", "';'", "'.'", "'('", "')'", "','", "'='", "'*'", "'+'", "'-'", "'~'", "'||'", "'/'", "'%'", "'<<'", "'>>'", "'&'", "'|'", "'<'", "'<='", "'>'", @@ -875,73 +1049,87 @@ var literalNames = []string{ var symbolicNames = []string{ "", "SCOL", "DOT", "OPEN_PAR", "CLOSE_PAR", "COMMA", "ASSIGN", "STAR", "PLUS", "MINUS", "TILDE", "PIPE2", "DIV", "MOD", "LT2", "GT2", "AMP", "PIPE", - "LT", "LT_EQ", "GT", "GT_EQ", "EQ", "NOT_EQ1", "NOT_EQ2", "K_ABORT", "K_ACTION", - "K_ADD", "K_AFTER", "K_ALL", "K_ALTER", "K_ANALYZE", "K_AND", "K_AS", "K_ASC", - "K_ATTACH", "K_AUTOINCREMENT", "K_BEFORE", "K_BEGIN", "K_BETWEEN", "K_BY", - "K_CASCADE", "K_CASE", "K_CAST", "K_CHECK", "K_COLLATE", "K_COLUMN", "K_COMMIT", - "K_CONFLICT", "K_CONSTRAINT", "K_CREATE", "K_CROSS", "K_CURRENT_DATE", - "K_CURRENT_TIME", "K_CURRENT_TIMESTAMP", "K_DATABASE", "K_DEFAULT", "K_DEFERRABLE", - "K_DEFERRED", "K_DELETE", "K_DESC", "K_DETACH", "K_DISTINCT", "K_DROP", - "K_EACH", "K_ELSE", "K_END", "K_ESCAPE", "K_EXCEPT", "K_EXCLUSIVE", "K_EXISTS", - "K_EXPLAIN", "K_FAIL", "K_FOR", "K_FOREIGN", "K_FROM", "K_FULL", "K_GLOB", - "K_GROUP", "K_HAVING", "K_IF", "K_IGNORE", "K_IMMEDIATE", "K_IN", "K_INDEX", - "K_INDEXED", "K_INITIALLY", "K_INNER", "K_INSERT", "K_INSTEAD", "K_INTERSECT", - "K_INTO", "K_IS", "K_ISNULL", "K_JOIN", "K_KEY", "K_LEFT", "K_LIKE", "K_LIMIT", - "K_MATCH", "K_NATURAL", "K_NO", "K_NOT", "K_NOTNULL", "K_NULL", "K_OF", - "K_OFFSET", "K_ON", "K_OR", "K_ORDER", "K_OUTER", "K_PLAN", "K_PRAGMA", - "K_PRIMARY", "K_QUERY", "K_RAISE", "K_RECURSIVE", "K_REFERENCES", "K_REGEXP", - "K_REINDEX", "K_RELEASE", "K_RENAME", "K_REPLACE", "K_RESTRICT", "K_RIGHT", - "K_ROLLBACK", "K_ROW", "K_SAVEPOINT", "K_SELECT", "K_SET", "K_TABLE", "K_TEMP", - "K_TEMPORARY", "K_THEN", "K_TO", "K_TRANSACTION", "K_TRIGGER", "K_UNION", - "K_UNIQUE", "K_UPDATE", "K_USING", "K_VACUUM", "K_VALUES", "K_VIEW", "K_VIRTUAL", - "K_WHEN", "K_WHERE", "K_WITH", "K_WITHOUT", "IDENTIFIER", "NUMERIC_LITERAL", - "BIND_PARAMETER", "STRING_LITERAL", "BLOB_LITERAL", "SINGLE_LINE_COMMENT", - "MULTILINE_COMMENT", "SPACES", "UNEXPECTED_CHAR", + "LT", "LT_EQ", "GT", "GT_EQ", "EQ", "NOT_EQ1", "NOT_EQ2", "ABORT_", "ACTION_", + "ADD_", "AFTER_", "ALL_", "ALTER_", "ANALYZE_", "AND_", "AS_", "ASC_", + "ATTACH_", "AUTOINCREMENT_", "BEFORE_", "BEGIN_", "BETWEEN_", "BY_", "CASCADE_", + "CASE_", "CAST_", "CHECK_", "COLLATE_", "COLUMN_", "COMMIT_", "CONFLICT_", + "CONSTRAINT_", "CREATE_", "CROSS_", "CURRENT_DATE_", "CURRENT_TIME_", "CURRENT_TIMESTAMP_", + "DATABASE_", "DEFAULT_", "DEFERRABLE_", "DEFERRED_", "DELETE_", "DESC_", + "DETACH_", "DISTINCT_", "DROP_", "EACH_", "ELSE_", "END_", "ESCAPE_", "EXCEPT_", + "EXCLUSIVE_", "EXISTS_", "EXPLAIN_", "FAIL_", "FOR_", "FOREIGN_", "FROM_", + "FULL_", "GLOB_", "GROUP_", "HAVING_", "IF_", "IGNORE_", "IMMEDIATE_", + "IN_", "INDEX_", "INDEXED_", "INITIALLY_", "INNER_", "INSERT_", "INSTEAD_", + "INTERSECT_", "INTO_", "IS_", "ISNULL_", "JOIN_", "KEY_", "LEFT_", "LIKE_", + "LIMIT_", "MATCH_", "NATURAL_", "NO_", "NOT_", "NOTNULL_", "NULL_", "OF_", + "OFFSET_", "ON_", "OR_", "ORDER_", "OUTER_", "PLAN_", "PRAGMA_", "PRIMARY_", + "QUERY_", "RAISE_", "RECURSIVE_", "REFERENCES_", "REGEXP_", "REINDEX_", + "RELEASE_", "RENAME_", "REPLACE_", "RESTRICT_", "RIGHT_", "ROLLBACK_", + "ROW_", "ROWS_", "SAVEPOINT_", "SELECT_", "SET_", "TABLE_", "TEMP_", "TEMPORARY_", + "THEN_", "TO_", "TRANSACTION_", "TRIGGER_", "UNION_", "UNIQUE_", "UPDATE_", + "USING_", "VACUUM_", "VALUES_", "VIEW_", "VIRTUAL_", "WHEN_", "WHERE_", + "WITH_", "WITHOUT_", "FIRST_VALUE_", "OVER_", "PARTITION_", "RANGE_", "PRECEDING_", + "UNBOUNDED_", "CURRENT_", "FOLLOWING_", "CUME_DIST_", "DENSE_RANK_", "LAG_", + "LAST_VALUE_", "LEAD_", "NTH_VALUE_", "NTILE_", "PERCENT_RANK_", "RANK_", + "ROW_NUMBER_", "GENERATED_", "ALWAYS_", "STORED_", "TRUE_", "FALSE_", "WINDOW_", + "NULLS_", "FIRST_", "LAST_", "FILTER_", "GROUPS_", "EXCLUDE_", "TIES_", + "OTHERS_", "DO_", "NOTHING_", "IDENTIFIER", "NUMERIC_LITERAL", "BIND_PARAMETER", + "STRING_LITERAL", "BLOB_LITERAL", "SINGLE_LINE_COMMENT", "MULTILINE_COMMENT", + "SPACES", "UNEXPECTED_CHAR", } var ruleNames = []string{ "parse", "sql_stmt_list", "sql_stmt", "alter_table_stmt", "analyze_stmt", - "attach_stmt", "begin_stmt", "commit_stmt", "compound_select_stmt", "create_index_stmt", - "create_table_stmt", "create_trigger_stmt", "create_view_stmt", "create_virtual_table_stmt", - "delete_stmt", "delete_stmt_limited", "detach_stmt", "drop_index_stmt", - "drop_table_stmt", "drop_trigger_stmt", "drop_view_stmt", "factored_select_stmt", - "insert_stmt", "pragma_stmt", "reindex_stmt", "release_stmt", "rollback_stmt", - "savepoint_stmt", "simple_select_stmt", "select_stmt", "select_or_values", - "update_stmt", "update_stmt_limited", "vacuum_stmt", "column_def", "type_name", - "column_constraint", "conflict_clause", "expr", "foreign_key_clause", "raise_function", - "indexed_column", "table_constraint", "with_clause", "qualified_table_name", - "ordering_term", "pragma_value", "common_table_expression", "result_column", - "table_or_subquery", "join_clause", "join_operator", "join_constraint", - "select_core", "compound_operator", "signed_number", "literal_value", "unary_operator", - "error_message", "module_argument", "column_alias", "keyword", "name", - "function_name", "database_name", "schema_name", "table_function_name", - "table_name", "table_or_index_name", "new_table_name", "column_name", "new_column_name", + "attach_stmt", "begin_stmt", "commit_stmt", "rollback_stmt", "savepoint_stmt", + "release_stmt", "create_index_stmt", "indexed_column", "create_table_stmt", + "column_def", "type_name", "column_constraint", "signed_number", "table_constraint", + "foreign_key_clause", "conflict_clause", "create_trigger_stmt", "create_view_stmt", + "create_virtual_table_stmt", "with_clause", "cte_table_name", "recursive_cte", + "common_table_expression", "delete_stmt", "delete_stmt_limited", "detach_stmt", + "drop_stmt", "expr", "raise_function", "literal_value", "insert_stmt", + "upsert_clause", "pragma_stmt", "pragma_value", "reindex_stmt", "select_stmt", + "join_clause", "select_core", "factored_select_stmt", "simple_select_stmt", + "compound_select_stmt", "table_or_subquery", "result_column", "join_operator", + "join_constraint", "compound_operator", "update_stmt", "column_name_list", + "update_stmt_limited", "qualified_table_name", "vacuum_stmt", "filter_clause", + "window_defn", "over_clause", "frame_spec", "frame_clause", "simple_function_invocation", + "aggregate_function_invocation", "window_function_invocation", "common_table_stmt", + "order_by_stmt", "limit_stmt", "ordering_term", "asc_desc", "frame_left", + "frame_right", "frame_single", "window_function", "of_OF_fset", "default_DEFAULT__value", + "partition_by", "order_by_expr", "order_by_expr_asc_desc", "expr_asc_desc", + "initial_select", "recursive__select", "unary_operator", "error_message", + "module_argument", "column_alias", "keyword", "name", "function_name", + "schema_name", "table_name", "table_or_index_name", "new_table_name", "column_name", "collation_name", "foreign_table", "index_name", "trigger_name", "view_name", "module_name", "pragma_name", "savepoint_name", "table_alias", "transaction_name", - "any_name", -} -var decisionToDFA = make([]*antlr.DFA, len(deserializedATN.DecisionToState)) - -func init() { - for index, ds := range deserializedATN.DecisionToState { - decisionToDFA[index] = antlr.NewDFA(ds, index) - } + "window_name", "alias", "filename", "base_window_name", "simple_func", + "aggregate_func", "table_function_name", "any_name", } type SQLiteParser struct { *antlr.BaseParser } +// NewSQLiteParser produces a new parser instance for the optional input antlr.TokenStream. +// +// The *SQLiteParser instance produced may be reused by calling the SetInputStream method. +// The initial parser configuration is expensive to construct, and the object is not thread-safe; +// however, if used within a Golang sync.Pool, the construction cost amortizes well and the +// objects can be used in a thread-safe manner. func NewSQLiteParser(input antlr.TokenStream) *SQLiteParser { this := new(SQLiteParser) - + deserializer := antlr.NewATNDeserializer(nil) + deserializedATN := deserializer.DeserializeFromUInt16(parserATN) + decisionToDFA := make([]*antlr.DFA, len(deserializedATN.DecisionToState)) + for index, ds := range deserializedATN.DecisionToState { + decisionToDFA[index] = antlr.NewDFA(ds, index) + } this.BaseParser = antlr.NewBaseParser(input) this.Interpreter = antlr.NewParserATNSimulator(this, deserializedATN, decisionToDFA, antlr.NewPredictionContextCache()) this.RuleNames = ruleNames this.LiteralNames = literalNames this.SymbolicNames = symbolicNames - this.GrammarFileName = "SQLite.g4" + this.GrammarFileName = "SQLiteParser.g4" return this } @@ -973,226 +1161,289 @@ const ( SQLiteParserEQ = 22 SQLiteParserNOT_EQ1 = 23 SQLiteParserNOT_EQ2 = 24 - SQLiteParserK_ABORT = 25 - SQLiteParserK_ACTION = 26 - SQLiteParserK_ADD = 27 - SQLiteParserK_AFTER = 28 - SQLiteParserK_ALL = 29 - SQLiteParserK_ALTER = 30 - SQLiteParserK_ANALYZE = 31 - SQLiteParserK_AND = 32 - SQLiteParserK_AS = 33 - SQLiteParserK_ASC = 34 - SQLiteParserK_ATTACH = 35 - SQLiteParserK_AUTOINCREMENT = 36 - SQLiteParserK_BEFORE = 37 - SQLiteParserK_BEGIN = 38 - SQLiteParserK_BETWEEN = 39 - SQLiteParserK_BY = 40 - SQLiteParserK_CASCADE = 41 - SQLiteParserK_CASE = 42 - SQLiteParserK_CAST = 43 - SQLiteParserK_CHECK = 44 - SQLiteParserK_COLLATE = 45 - SQLiteParserK_COLUMN = 46 - SQLiteParserK_COMMIT = 47 - SQLiteParserK_CONFLICT = 48 - SQLiteParserK_CONSTRAINT = 49 - SQLiteParserK_CREATE = 50 - SQLiteParserK_CROSS = 51 - SQLiteParserK_CURRENT_DATE = 52 - SQLiteParserK_CURRENT_TIME = 53 - SQLiteParserK_CURRENT_TIMESTAMP = 54 - SQLiteParserK_DATABASE = 55 - SQLiteParserK_DEFAULT = 56 - SQLiteParserK_DEFERRABLE = 57 - SQLiteParserK_DEFERRED = 58 - SQLiteParserK_DELETE = 59 - SQLiteParserK_DESC = 60 - SQLiteParserK_DETACH = 61 - SQLiteParserK_DISTINCT = 62 - SQLiteParserK_DROP = 63 - SQLiteParserK_EACH = 64 - SQLiteParserK_ELSE = 65 - SQLiteParserK_END = 66 - SQLiteParserK_ESCAPE = 67 - SQLiteParserK_EXCEPT = 68 - SQLiteParserK_EXCLUSIVE = 69 - SQLiteParserK_EXISTS = 70 - SQLiteParserK_EXPLAIN = 71 - SQLiteParserK_FAIL = 72 - SQLiteParserK_FOR = 73 - SQLiteParserK_FOREIGN = 74 - SQLiteParserK_FROM = 75 - SQLiteParserK_FULL = 76 - SQLiteParserK_GLOB = 77 - SQLiteParserK_GROUP = 78 - SQLiteParserK_HAVING = 79 - SQLiteParserK_IF = 80 - SQLiteParserK_IGNORE = 81 - SQLiteParserK_IMMEDIATE = 82 - SQLiteParserK_IN = 83 - SQLiteParserK_INDEX = 84 - SQLiteParserK_INDEXED = 85 - SQLiteParserK_INITIALLY = 86 - SQLiteParserK_INNER = 87 - SQLiteParserK_INSERT = 88 - SQLiteParserK_INSTEAD = 89 - SQLiteParserK_INTERSECT = 90 - SQLiteParserK_INTO = 91 - SQLiteParserK_IS = 92 - SQLiteParserK_ISNULL = 93 - SQLiteParserK_JOIN = 94 - SQLiteParserK_KEY = 95 - SQLiteParserK_LEFT = 96 - SQLiteParserK_LIKE = 97 - SQLiteParserK_LIMIT = 98 - SQLiteParserK_MATCH = 99 - SQLiteParserK_NATURAL = 100 - SQLiteParserK_NO = 101 - SQLiteParserK_NOT = 102 - SQLiteParserK_NOTNULL = 103 - SQLiteParserK_NULL = 104 - SQLiteParserK_OF = 105 - SQLiteParserK_OFFSET = 106 - SQLiteParserK_ON = 107 - SQLiteParserK_OR = 108 - SQLiteParserK_ORDER = 109 - SQLiteParserK_OUTER = 110 - SQLiteParserK_PLAN = 111 - SQLiteParserK_PRAGMA = 112 - SQLiteParserK_PRIMARY = 113 - SQLiteParserK_QUERY = 114 - SQLiteParserK_RAISE = 115 - SQLiteParserK_RECURSIVE = 116 - SQLiteParserK_REFERENCES = 117 - SQLiteParserK_REGEXP = 118 - SQLiteParserK_REINDEX = 119 - SQLiteParserK_RELEASE = 120 - SQLiteParserK_RENAME = 121 - SQLiteParserK_REPLACE = 122 - SQLiteParserK_RESTRICT = 123 - SQLiteParserK_RIGHT = 124 - SQLiteParserK_ROLLBACK = 125 - SQLiteParserK_ROW = 126 - SQLiteParserK_SAVEPOINT = 127 - SQLiteParserK_SELECT = 128 - SQLiteParserK_SET = 129 - SQLiteParserK_TABLE = 130 - SQLiteParserK_TEMP = 131 - SQLiteParserK_TEMPORARY = 132 - SQLiteParserK_THEN = 133 - SQLiteParserK_TO = 134 - SQLiteParserK_TRANSACTION = 135 - SQLiteParserK_TRIGGER = 136 - SQLiteParserK_UNION = 137 - SQLiteParserK_UNIQUE = 138 - SQLiteParserK_UPDATE = 139 - SQLiteParserK_USING = 140 - SQLiteParserK_VACUUM = 141 - SQLiteParserK_VALUES = 142 - SQLiteParserK_VIEW = 143 - SQLiteParserK_VIRTUAL = 144 - SQLiteParserK_WHEN = 145 - SQLiteParserK_WHERE = 146 - SQLiteParserK_WITH = 147 - SQLiteParserK_WITHOUT = 148 - SQLiteParserIDENTIFIER = 149 - SQLiteParserNUMERIC_LITERAL = 150 - SQLiteParserBIND_PARAMETER = 151 - SQLiteParserSTRING_LITERAL = 152 - SQLiteParserBLOB_LITERAL = 153 - SQLiteParserSINGLE_LINE_COMMENT = 154 - SQLiteParserMULTILINE_COMMENT = 155 - SQLiteParserSPACES = 156 - SQLiteParserUNEXPECTED_CHAR = 157 + SQLiteParserABORT_ = 25 + SQLiteParserACTION_ = 26 + SQLiteParserADD_ = 27 + SQLiteParserAFTER_ = 28 + SQLiteParserALL_ = 29 + SQLiteParserALTER_ = 30 + SQLiteParserANALYZE_ = 31 + SQLiteParserAND_ = 32 + SQLiteParserAS_ = 33 + SQLiteParserASC_ = 34 + SQLiteParserATTACH_ = 35 + SQLiteParserAUTOINCREMENT_ = 36 + SQLiteParserBEFORE_ = 37 + SQLiteParserBEGIN_ = 38 + SQLiteParserBETWEEN_ = 39 + SQLiteParserBY_ = 40 + SQLiteParserCASCADE_ = 41 + SQLiteParserCASE_ = 42 + SQLiteParserCAST_ = 43 + SQLiteParserCHECK_ = 44 + SQLiteParserCOLLATE_ = 45 + SQLiteParserCOLUMN_ = 46 + SQLiteParserCOMMIT_ = 47 + SQLiteParserCONFLICT_ = 48 + SQLiteParserCONSTRAINT_ = 49 + SQLiteParserCREATE_ = 50 + SQLiteParserCROSS_ = 51 + SQLiteParserCURRENT_DATE_ = 52 + SQLiteParserCURRENT_TIME_ = 53 + SQLiteParserCURRENT_TIMESTAMP_ = 54 + SQLiteParserDATABASE_ = 55 + SQLiteParserDEFAULT_ = 56 + SQLiteParserDEFERRABLE_ = 57 + SQLiteParserDEFERRED_ = 58 + SQLiteParserDELETE_ = 59 + SQLiteParserDESC_ = 60 + SQLiteParserDETACH_ = 61 + SQLiteParserDISTINCT_ = 62 + SQLiteParserDROP_ = 63 + SQLiteParserEACH_ = 64 + SQLiteParserELSE_ = 65 + SQLiteParserEND_ = 66 + SQLiteParserESCAPE_ = 67 + SQLiteParserEXCEPT_ = 68 + SQLiteParserEXCLUSIVE_ = 69 + SQLiteParserEXISTS_ = 70 + SQLiteParserEXPLAIN_ = 71 + SQLiteParserFAIL_ = 72 + SQLiteParserFOR_ = 73 + SQLiteParserFOREIGN_ = 74 + SQLiteParserFROM_ = 75 + SQLiteParserFULL_ = 76 + SQLiteParserGLOB_ = 77 + SQLiteParserGROUP_ = 78 + SQLiteParserHAVING_ = 79 + SQLiteParserIF_ = 80 + SQLiteParserIGNORE_ = 81 + SQLiteParserIMMEDIATE_ = 82 + SQLiteParserIN_ = 83 + SQLiteParserINDEX_ = 84 + SQLiteParserINDEXED_ = 85 + SQLiteParserINITIALLY_ = 86 + SQLiteParserINNER_ = 87 + SQLiteParserINSERT_ = 88 + SQLiteParserINSTEAD_ = 89 + SQLiteParserINTERSECT_ = 90 + SQLiteParserINTO_ = 91 + SQLiteParserIS_ = 92 + SQLiteParserISNULL_ = 93 + SQLiteParserJOIN_ = 94 + SQLiteParserKEY_ = 95 + SQLiteParserLEFT_ = 96 + SQLiteParserLIKE_ = 97 + SQLiteParserLIMIT_ = 98 + SQLiteParserMATCH_ = 99 + SQLiteParserNATURAL_ = 100 + SQLiteParserNO_ = 101 + SQLiteParserNOT_ = 102 + SQLiteParserNOTNULL_ = 103 + SQLiteParserNULL_ = 104 + SQLiteParserOF_ = 105 + SQLiteParserOFFSET_ = 106 + SQLiteParserON_ = 107 + SQLiteParserOR_ = 108 + SQLiteParserORDER_ = 109 + SQLiteParserOUTER_ = 110 + SQLiteParserPLAN_ = 111 + SQLiteParserPRAGMA_ = 112 + SQLiteParserPRIMARY_ = 113 + SQLiteParserQUERY_ = 114 + SQLiteParserRAISE_ = 115 + SQLiteParserRECURSIVE_ = 116 + SQLiteParserREFERENCES_ = 117 + SQLiteParserREGEXP_ = 118 + SQLiteParserREINDEX_ = 119 + SQLiteParserRELEASE_ = 120 + SQLiteParserRENAME_ = 121 + SQLiteParserREPLACE_ = 122 + SQLiteParserRESTRICT_ = 123 + SQLiteParserRIGHT_ = 124 + SQLiteParserROLLBACK_ = 125 + SQLiteParserROW_ = 126 + SQLiteParserROWS_ = 127 + SQLiteParserSAVEPOINT_ = 128 + SQLiteParserSELECT_ = 129 + SQLiteParserSET_ = 130 + SQLiteParserTABLE_ = 131 + SQLiteParserTEMP_ = 132 + SQLiteParserTEMPORARY_ = 133 + SQLiteParserTHEN_ = 134 + SQLiteParserTO_ = 135 + SQLiteParserTRANSACTION_ = 136 + SQLiteParserTRIGGER_ = 137 + SQLiteParserUNION_ = 138 + SQLiteParserUNIQUE_ = 139 + SQLiteParserUPDATE_ = 140 + SQLiteParserUSING_ = 141 + SQLiteParserVACUUM_ = 142 + SQLiteParserVALUES_ = 143 + SQLiteParserVIEW_ = 144 + SQLiteParserVIRTUAL_ = 145 + SQLiteParserWHEN_ = 146 + SQLiteParserWHERE_ = 147 + SQLiteParserWITH_ = 148 + SQLiteParserWITHOUT_ = 149 + SQLiteParserFIRST_VALUE_ = 150 + SQLiteParserOVER_ = 151 + SQLiteParserPARTITION_ = 152 + SQLiteParserRANGE_ = 153 + SQLiteParserPRECEDING_ = 154 + SQLiteParserUNBOUNDED_ = 155 + SQLiteParserCURRENT_ = 156 + SQLiteParserFOLLOWING_ = 157 + SQLiteParserCUME_DIST_ = 158 + SQLiteParserDENSE_RANK_ = 159 + SQLiteParserLAG_ = 160 + SQLiteParserLAST_VALUE_ = 161 + SQLiteParserLEAD_ = 162 + SQLiteParserNTH_VALUE_ = 163 + SQLiteParserNTILE_ = 164 + SQLiteParserPERCENT_RANK_ = 165 + SQLiteParserRANK_ = 166 + SQLiteParserROW_NUMBER_ = 167 + SQLiteParserGENERATED_ = 168 + SQLiteParserALWAYS_ = 169 + SQLiteParserSTORED_ = 170 + SQLiteParserTRUE_ = 171 + SQLiteParserFALSE_ = 172 + SQLiteParserWINDOW_ = 173 + SQLiteParserNULLS_ = 174 + SQLiteParserFIRST_ = 175 + SQLiteParserLAST_ = 176 + SQLiteParserFILTER_ = 177 + SQLiteParserGROUPS_ = 178 + SQLiteParserEXCLUDE_ = 179 + SQLiteParserTIES_ = 180 + SQLiteParserOTHERS_ = 181 + SQLiteParserDO_ = 182 + SQLiteParserNOTHING_ = 183 + SQLiteParserIDENTIFIER = 184 + SQLiteParserNUMERIC_LITERAL = 185 + SQLiteParserBIND_PARAMETER = 186 + SQLiteParserSTRING_LITERAL = 187 + SQLiteParserBLOB_LITERAL = 188 + SQLiteParserSINGLE_LINE_COMMENT = 189 + SQLiteParserMULTILINE_COMMENT = 190 + SQLiteParserSPACES = 191 + SQLiteParserUNEXPECTED_CHAR = 192 ) // SQLiteParser rules. const ( - SQLiteParserRULE_parse = 0 - SQLiteParserRULE_sql_stmt_list = 1 - SQLiteParserRULE_sql_stmt = 2 - SQLiteParserRULE_alter_table_stmt = 3 - SQLiteParserRULE_analyze_stmt = 4 - SQLiteParserRULE_attach_stmt = 5 - SQLiteParserRULE_begin_stmt = 6 - SQLiteParserRULE_commit_stmt = 7 - SQLiteParserRULE_compound_select_stmt = 8 - SQLiteParserRULE_create_index_stmt = 9 - SQLiteParserRULE_create_table_stmt = 10 - SQLiteParserRULE_create_trigger_stmt = 11 - SQLiteParserRULE_create_view_stmt = 12 - SQLiteParserRULE_create_virtual_table_stmt = 13 - SQLiteParserRULE_delete_stmt = 14 - SQLiteParserRULE_delete_stmt_limited = 15 - SQLiteParserRULE_detach_stmt = 16 - SQLiteParserRULE_drop_index_stmt = 17 - SQLiteParserRULE_drop_table_stmt = 18 - SQLiteParserRULE_drop_trigger_stmt = 19 - SQLiteParserRULE_drop_view_stmt = 20 - SQLiteParserRULE_factored_select_stmt = 21 - SQLiteParserRULE_insert_stmt = 22 - SQLiteParserRULE_pragma_stmt = 23 - SQLiteParserRULE_reindex_stmt = 24 - SQLiteParserRULE_release_stmt = 25 - SQLiteParserRULE_rollback_stmt = 26 - SQLiteParserRULE_savepoint_stmt = 27 - SQLiteParserRULE_simple_select_stmt = 28 - SQLiteParserRULE_select_stmt = 29 - SQLiteParserRULE_select_or_values = 30 - SQLiteParserRULE_update_stmt = 31 - SQLiteParserRULE_update_stmt_limited = 32 - SQLiteParserRULE_vacuum_stmt = 33 - SQLiteParserRULE_column_def = 34 - SQLiteParserRULE_type_name = 35 - SQLiteParserRULE_column_constraint = 36 - SQLiteParserRULE_conflict_clause = 37 - SQLiteParserRULE_expr = 38 - SQLiteParserRULE_foreign_key_clause = 39 - SQLiteParserRULE_raise_function = 40 - SQLiteParserRULE_indexed_column = 41 - SQLiteParserRULE_table_constraint = 42 - SQLiteParserRULE_with_clause = 43 - SQLiteParserRULE_qualified_table_name = 44 - SQLiteParserRULE_ordering_term = 45 - SQLiteParserRULE_pragma_value = 46 - SQLiteParserRULE_common_table_expression = 47 - SQLiteParserRULE_result_column = 48 - SQLiteParserRULE_table_or_subquery = 49 - SQLiteParserRULE_join_clause = 50 - SQLiteParserRULE_join_operator = 51 - SQLiteParserRULE_join_constraint = 52 - SQLiteParserRULE_select_core = 53 - SQLiteParserRULE_compound_operator = 54 - SQLiteParserRULE_signed_number = 55 - SQLiteParserRULE_literal_value = 56 - SQLiteParserRULE_unary_operator = 57 - SQLiteParserRULE_error_message = 58 - SQLiteParserRULE_module_argument = 59 - SQLiteParserRULE_column_alias = 60 - SQLiteParserRULE_keyword = 61 - SQLiteParserRULE_name = 62 - SQLiteParserRULE_function_name = 63 - SQLiteParserRULE_database_name = 64 - SQLiteParserRULE_schema_name = 65 - SQLiteParserRULE_table_function_name = 66 - SQLiteParserRULE_table_name = 67 - SQLiteParserRULE_table_or_index_name = 68 - SQLiteParserRULE_new_table_name = 69 - SQLiteParserRULE_column_name = 70 - SQLiteParserRULE_new_column_name = 71 - SQLiteParserRULE_collation_name = 72 - SQLiteParserRULE_foreign_table = 73 - SQLiteParserRULE_index_name = 74 - SQLiteParserRULE_trigger_name = 75 - SQLiteParserRULE_view_name = 76 - SQLiteParserRULE_module_name = 77 - SQLiteParserRULE_pragma_name = 78 - SQLiteParserRULE_savepoint_name = 79 - SQLiteParserRULE_table_alias = 80 - SQLiteParserRULE_transaction_name = 81 - SQLiteParserRULE_any_name = 82 + SQLiteParserRULE_parse = 0 + SQLiteParserRULE_sql_stmt_list = 1 + SQLiteParserRULE_sql_stmt = 2 + SQLiteParserRULE_alter_table_stmt = 3 + SQLiteParserRULE_analyze_stmt = 4 + SQLiteParserRULE_attach_stmt = 5 + SQLiteParserRULE_begin_stmt = 6 + SQLiteParserRULE_commit_stmt = 7 + SQLiteParserRULE_rollback_stmt = 8 + SQLiteParserRULE_savepoint_stmt = 9 + SQLiteParserRULE_release_stmt = 10 + SQLiteParserRULE_create_index_stmt = 11 + SQLiteParserRULE_indexed_column = 12 + SQLiteParserRULE_create_table_stmt = 13 + SQLiteParserRULE_column_def = 14 + SQLiteParserRULE_type_name = 15 + SQLiteParserRULE_column_constraint = 16 + SQLiteParserRULE_signed_number = 17 + SQLiteParserRULE_table_constraint = 18 + SQLiteParserRULE_foreign_key_clause = 19 + SQLiteParserRULE_conflict_clause = 20 + SQLiteParserRULE_create_trigger_stmt = 21 + SQLiteParserRULE_create_view_stmt = 22 + SQLiteParserRULE_create_virtual_table_stmt = 23 + SQLiteParserRULE_with_clause = 24 + SQLiteParserRULE_cte_table_name = 25 + SQLiteParserRULE_recursive_cte = 26 + SQLiteParserRULE_common_table_expression = 27 + SQLiteParserRULE_delete_stmt = 28 + SQLiteParserRULE_delete_stmt_limited = 29 + SQLiteParserRULE_detach_stmt = 30 + SQLiteParserRULE_drop_stmt = 31 + SQLiteParserRULE_expr = 32 + SQLiteParserRULE_raise_function = 33 + SQLiteParserRULE_literal_value = 34 + SQLiteParserRULE_insert_stmt = 35 + SQLiteParserRULE_upsert_clause = 36 + SQLiteParserRULE_pragma_stmt = 37 + SQLiteParserRULE_pragma_value = 38 + SQLiteParserRULE_reindex_stmt = 39 + SQLiteParserRULE_select_stmt = 40 + SQLiteParserRULE_join_clause = 41 + SQLiteParserRULE_select_core = 42 + SQLiteParserRULE_factored_select_stmt = 43 + SQLiteParserRULE_simple_select_stmt = 44 + SQLiteParserRULE_compound_select_stmt = 45 + SQLiteParserRULE_table_or_subquery = 46 + SQLiteParserRULE_result_column = 47 + SQLiteParserRULE_join_operator = 48 + SQLiteParserRULE_join_constraint = 49 + SQLiteParserRULE_compound_operator = 50 + SQLiteParserRULE_update_stmt = 51 + SQLiteParserRULE_column_name_list = 52 + SQLiteParserRULE_update_stmt_limited = 53 + SQLiteParserRULE_qualified_table_name = 54 + SQLiteParserRULE_vacuum_stmt = 55 + SQLiteParserRULE_filter_clause = 56 + SQLiteParserRULE_window_defn = 57 + SQLiteParserRULE_over_clause = 58 + SQLiteParserRULE_frame_spec = 59 + SQLiteParserRULE_frame_clause = 60 + SQLiteParserRULE_simple_function_invocation = 61 + SQLiteParserRULE_aggregate_function_invocation = 62 + SQLiteParserRULE_window_function_invocation = 63 + SQLiteParserRULE_common_table_stmt = 64 + SQLiteParserRULE_order_by_stmt = 65 + SQLiteParserRULE_limit_stmt = 66 + SQLiteParserRULE_ordering_term = 67 + SQLiteParserRULE_asc_desc = 68 + SQLiteParserRULE_frame_left = 69 + SQLiteParserRULE_frame_right = 70 + SQLiteParserRULE_frame_single = 71 + SQLiteParserRULE_window_function = 72 + SQLiteParserRULE_of_OF_fset = 73 + SQLiteParserRULE_default_DEFAULT__value = 74 + SQLiteParserRULE_partition_by = 75 + SQLiteParserRULE_order_by_expr = 76 + SQLiteParserRULE_order_by_expr_asc_desc = 77 + SQLiteParserRULE_expr_asc_desc = 78 + SQLiteParserRULE_initial_select = 79 + SQLiteParserRULE_recursive__select = 80 + SQLiteParserRULE_unary_operator = 81 + SQLiteParserRULE_error_message = 82 + SQLiteParserRULE_module_argument = 83 + SQLiteParserRULE_column_alias = 84 + SQLiteParserRULE_keyword = 85 + SQLiteParserRULE_name = 86 + SQLiteParserRULE_function_name = 87 + SQLiteParserRULE_schema_name = 88 + SQLiteParserRULE_table_name = 89 + SQLiteParserRULE_table_or_index_name = 90 + SQLiteParserRULE_new_table_name = 91 + SQLiteParserRULE_column_name = 92 + SQLiteParserRULE_collation_name = 93 + SQLiteParserRULE_foreign_table = 94 + SQLiteParserRULE_index_name = 95 + SQLiteParserRULE_trigger_name = 96 + SQLiteParserRULE_view_name = 97 + SQLiteParserRULE_module_name = 98 + SQLiteParserRULE_pragma_name = 99 + SQLiteParserRULE_savepoint_name = 100 + SQLiteParserRULE_table_alias = 101 + SQLiteParserRULE_transaction_name = 102 + SQLiteParserRULE_window_name = 103 + SQLiteParserRULE_alias = 104 + SQLiteParserRULE_filename = 105 + SQLiteParserRULE_base_window_name = 106 + SQLiteParserRULE_simple_func = 107 + SQLiteParserRULE_aggregate_func = 108 + SQLiteParserRULE_table_function_name = 109 + SQLiteParserRULE_any_name = 110 ) // IParseContext is an interface to support dynamic dispatch. @@ -1269,18 +1520,21 @@ func (s *ParseContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) } func (s *ParseContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(SQLiteListener); ok { + if listenerT, ok := listener.(SQLiteParserListener); ok { listenerT.EnterParse(s) } } func (s *ParseContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(SQLiteListener); ok { + if listenerT, ok := listener.(SQLiteParserListener); ok { listenerT.ExitParse(s) } } func (p *SQLiteParser) Parse() (localctx IParseContext) { + this := p + _ = this + localctx = NewParseContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 0, SQLiteParserRULE_parse) var _la int @@ -1302,22 +1556,22 @@ func (p *SQLiteParser) Parse() (localctx IParseContext) { }() p.EnterOuterAlt(localctx, 1) - p.SetState(169) + p.SetState(225) p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - for (((_la)&-(0x1f+1)) == 0 && ((1<