From 46651ce6fe013220ed397add242004d764fc0153 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:15:05 +0200 Subject: Adding upstream version 14.5. Signed-off-by: Daniel Baumann --- src/backend/parser/.gitignore | 3 + src/backend/parser/Makefile | 70 + src/backend/parser/README | 32 + src/backend/parser/analyze.c | 3436 +++ src/backend/parser/check_keywords.pl | 281 + src/backend/parser/gram.c | 48439 +++++++++++++++++++++++++++++++++ src/backend/parser/gram.h | 622 + src/backend/parser/gram.y | 17264 ++++++++++++ src/backend/parser/parse_agg.c | 2149 ++ src/backend/parser/parse_clause.c | 3691 +++ src/backend/parser/parse_coerce.c | 3346 +++ src/backend/parser/parse_collate.c | 1057 + src/backend/parser/parse_cte.c | 1166 + src/backend/parser/parse_enr.c | 29 + src/backend/parser/parse_expr.c | 3114 +++ src/backend/parser/parse_func.c | 2679 ++ src/backend/parser/parse_node.c | 468 + src/backend/parser/parse_oper.c | 1066 + src/backend/parser/parse_param.c | 363 + src/backend/parser/parse_relation.c | 3711 +++ src/backend/parser/parse_target.c | 1965 ++ src/backend/parser/parse_type.c | 809 + src/backend/parser/parse_utilcmd.c | 4382 +++ src/backend/parser/parser.c | 501 + src/backend/parser/scan.c | 8070 ++++++ src/backend/parser/scan.l | 1429 + src/backend/parser/scansup.c | 127 + 27 files changed, 110269 insertions(+) create mode 100644 src/backend/parser/.gitignore create mode 100644 src/backend/parser/Makefile create mode 100644 src/backend/parser/README create mode 100644 src/backend/parser/analyze.c create mode 100644 src/backend/parser/check_keywords.pl create mode 100644 src/backend/parser/gram.c create mode 100644 src/backend/parser/gram.h create mode 100644 src/backend/parser/gram.y create mode 100644 src/backend/parser/parse_agg.c create mode 100644 src/backend/parser/parse_clause.c create mode 100644 src/backend/parser/parse_coerce.c create mode 100644 src/backend/parser/parse_collate.c create mode 100644 src/backend/parser/parse_cte.c create mode 100644 src/backend/parser/parse_enr.c create mode 100644 src/backend/parser/parse_expr.c create mode 100644 src/backend/parser/parse_func.c create mode 100644 src/backend/parser/parse_node.c create mode 100644 src/backend/parser/parse_oper.c create mode 100644 src/backend/parser/parse_param.c create mode 100644 src/backend/parser/parse_relation.c create mode 100644 src/backend/parser/parse_target.c create mode 100644 src/backend/parser/parse_type.c create mode 100644 src/backend/parser/parse_utilcmd.c create mode 100644 src/backend/parser/parser.c create mode 100644 src/backend/parser/scan.c create mode 100644 src/backend/parser/scan.l create mode 100644 src/backend/parser/scansup.c (limited to 'src/backend/parser') diff --git a/src/backend/parser/.gitignore b/src/backend/parser/.gitignore new file mode 100644 index 0000000..16ac68d --- /dev/null +++ b/src/backend/parser/.gitignore @@ -0,0 +1,3 @@ +/gram.h +/gram.c +/scan.c diff --git a/src/backend/parser/Makefile b/src/backend/parser/Makefile new file mode 100644 index 0000000..5ddb9a9 --- /dev/null +++ b/src/backend/parser/Makefile @@ -0,0 +1,70 @@ +#------------------------------------------------------------------------- +# +# Makefile for parser +# +# src/backend/parser/Makefile +# +#------------------------------------------------------------------------- + +subdir = src/backend/parser +top_builddir = ../../.. +include $(top_builddir)/src/Makefile.global + +override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) + +OBJS = \ + analyze.o \ + gram.o \ + parse_agg.o \ + parse_clause.o \ + parse_coerce.o \ + parse_collate.o \ + parse_cte.o \ + parse_enr.o \ + parse_expr.o \ + parse_func.o \ + parse_node.o \ + parse_oper.o \ + parse_param.o \ + parse_relation.o \ + parse_target.o \ + parse_type.o \ + parse_utilcmd.o \ + parser.o \ + scan.o \ + scansup.o + +include $(top_srcdir)/src/backend/common.mk + + +# There is no correct way to write a rule that generates two files. +# Rules with two targets don't have that meaning, they are merely +# shorthand for two otherwise separate rules. If we have an action +# that in fact generates two or more files, we must choose one of them +# as primary and show it as the action's output, then make all of the +# other output files dependent on the primary, like this. Furthermore, +# the "touch" action is essential, because it ensures that gram.h is +# marked as newer than (or at least no older than) gram.c. Without that, +# make is likely to try to rebuild gram.h in subsequent runs, which causes +# failures in VPATH builds from tarballs. + +gram.h: gram.c + touch $@ + +gram.c: BISONFLAGS += -d +gram.c: BISON_CHECK_CMD = $(PERL) $(srcdir)/check_keywords.pl $< $(top_srcdir)/src/include/parser/kwlist.h + + +scan.c: FLEXFLAGS = -CF -p -p +scan.c: FLEX_NO_BACKUP=yes +scan.c: FLEX_FIX_WARNING=yes + + +# Force these dependencies to be known even without dependency info built: +gram.o scan.o parser.o: gram.h + + +# gram.c, gram.h, and scan.c are in the distribution tarball, so they +# are not cleaned here. +clean distclean maintainer-clean: + rm -f lex.backup diff --git a/src/backend/parser/README b/src/backend/parser/README new file mode 100644 index 0000000..6d8f19b --- /dev/null +++ b/src/backend/parser/README @@ -0,0 +1,32 @@ +src/backend/parser/README + +Parser +====== + +This directory does more than tokenize and parse SQL queries. It also +creates Query structures for the various complex queries that are passed +to the optimizer and then executor. + +parser.c things start here +scan.l break query into tokens +scansup.c handle escapes in input strings +gram.y parse the tokens and produce a "raw" parse tree +analyze.c top level of parse analysis for optimizable queries +parse_agg.c handle aggregates, like SUM(col1), AVG(col2), ... +parse_clause.c handle clauses like WHERE, ORDER BY, GROUP BY, ... +parse_coerce.c handle coercing expressions to different data types +parse_collate.c assign collation information in completed expressions +parse_cte.c handle Common Table Expressions (WITH clauses) +parse_expr.c handle expressions like col, col + 3, x = 3 or x = 4 +parse_func.c handle functions, table.column and column identifiers +parse_node.c create nodes for various structures +parse_oper.c handle operators in expressions +parse_param.c handle Params (for the cases used in the core backend) +parse_relation.c support routines for tables and column handling +parse_target.c handle the result list of the query +parse_type.c support routines for data type handling +parse_utilcmd.c parse analysis for utility commands (done at execution time) + +See also src/common/keywords.c, which contains the table of standard +keywords and the keyword lookup function. We separated that out because +various frontend code wants to use it too. diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c new file mode 100644 index 0000000..333be34 --- /dev/null +++ b/src/backend/parser/analyze.c @@ -0,0 +1,3436 @@ +/*------------------------------------------------------------------------- + * + * analyze.c + * transform the raw parse tree into a query tree + * + * For optimizable statements, we are careful to obtain a suitable lock on + * each referenced table, and other modules of the backend preserve or + * re-obtain these locks before depending on the results. It is therefore + * okay to do significant semantic analysis of these statements. For + * utility commands, no locks are obtained here (and if they were, we could + * not be sure we'd still have them at execution). Hence the general rule + * for utility commands is to just dump them into a Query node untransformed. + * DECLARE CURSOR, EXPLAIN, and CREATE TABLE AS are exceptions because they + * contain optimizable statements, which we should transform. + * + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/backend/parser/analyze.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "access/sysattr.h" +#include "catalog/pg_proc.h" +#include "catalog/pg_type.h" +#include "miscadmin.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "optimizer/optimizer.h" +#include "parser/analyze.h" +#include "parser/parse_agg.h" +#include "parser/parse_clause.h" +#include "parser/parse_coerce.h" +#include "parser/parse_collate.h" +#include "parser/parse_cte.h" +#include "parser/parse_expr.h" +#include "parser/parse_func.h" +#include "parser/parse_oper.h" +#include "parser/parse_param.h" +#include "parser/parse_relation.h" +#include "parser/parse_target.h" +#include "parser/parse_type.h" +#include "parser/parsetree.h" +#include "rewrite/rewriteManip.h" +#include "utils/backend_status.h" +#include "utils/builtins.h" +#include "utils/guc.h" +#include "utils/queryjumble.h" +#include "utils/rel.h" +#include "utils/syscache.h" + + +/* Hook for plugins to get control at end of parse analysis */ +post_parse_analyze_hook_type post_parse_analyze_hook = NULL; + +static Query *transformOptionalSelectInto(ParseState *pstate, Node *parseTree); +static Query *transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt); +static Query *transformInsertStmt(ParseState *pstate, InsertStmt *stmt); +static List *transformInsertRow(ParseState *pstate, List *exprlist, + List *stmtcols, List *icolumns, List *attrnos, + bool strip_indirection); +static OnConflictExpr *transformOnConflictClause(ParseState *pstate, + OnConflictClause *onConflictClause); +static int count_rowexpr_columns(ParseState *pstate, Node *expr); +static Query *transformSelectStmt(ParseState *pstate, SelectStmt *stmt); +static Query *transformValuesClause(ParseState *pstate, SelectStmt *stmt); +static Query *transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt); +static Node *transformSetOperationTree(ParseState *pstate, SelectStmt *stmt, + bool isTopLevel, List **targetlist); +static void determineRecursiveColTypes(ParseState *pstate, + Node *larg, List *nrtargetlist); +static Query *transformReturnStmt(ParseState *pstate, ReturnStmt *stmt); +static Query *transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt); +static List *transformReturningList(ParseState *pstate, List *returningList); +static List *transformUpdateTargetList(ParseState *pstate, + List *targetList); +static Query *transformPLAssignStmt(ParseState *pstate, + PLAssignStmt *stmt); +static Query *transformDeclareCursorStmt(ParseState *pstate, + DeclareCursorStmt *stmt); +static Query *transformExplainStmt(ParseState *pstate, + ExplainStmt *stmt); +static Query *transformCreateTableAsStmt(ParseState *pstate, + CreateTableAsStmt *stmt); +static Query *transformCallStmt(ParseState *pstate, + CallStmt *stmt); +static void transformLockingClause(ParseState *pstate, Query *qry, + LockingClause *lc, bool pushedDown); +#ifdef RAW_EXPRESSION_COVERAGE_TEST +static bool test_raw_expression_coverage(Node *node, void *context); +#endif + + +/* + * parse_analyze + * Analyze a raw parse tree and transform it to Query form. + * + * Optionally, information about $n parameter types can be supplied. + * References to $n indexes not defined by paramTypes[] are disallowed. + * + * The result is a Query node. Optimizable statements require considerable + * transformation, while utility-type statements are simply hung off + * a dummy CMD_UTILITY Query node. + */ +Query * +parse_analyze(RawStmt *parseTree, const char *sourceText, + Oid *paramTypes, int numParams, + QueryEnvironment *queryEnv) +{ + ParseState *pstate = make_parsestate(NULL); + Query *query; + JumbleState *jstate = NULL; + + Assert(sourceText != NULL); /* required as of 8.4 */ + + pstate->p_sourcetext = sourceText; + + if (numParams > 0) + parse_fixed_parameters(pstate, paramTypes, numParams); + + pstate->p_queryEnv = queryEnv; + + query = transformTopLevelStmt(pstate, parseTree); + + if (IsQueryIdEnabled()) + jstate = JumbleQuery(query, sourceText); + + if (post_parse_analyze_hook) + (*post_parse_analyze_hook) (pstate, query, jstate); + + free_parsestate(pstate); + + pgstat_report_query_id(query->queryId, false); + + return query; +} + +/* + * parse_analyze_varparams + * + * This variant is used when it's okay to deduce information about $n + * symbol datatypes from context. The passed-in paramTypes[] array can + * be modified or enlarged (via repalloc). + */ +Query * +parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, + Oid **paramTypes, int *numParams) +{ + ParseState *pstate = make_parsestate(NULL); + Query *query; + JumbleState *jstate = NULL; + + Assert(sourceText != NULL); /* required as of 8.4 */ + + pstate->p_sourcetext = sourceText; + + parse_variable_parameters(pstate, paramTypes, numParams); + + query = transformTopLevelStmt(pstate, parseTree); + + /* make sure all is well with parameter types */ + check_variable_parameters(pstate, query); + + if (IsQueryIdEnabled()) + jstate = JumbleQuery(query, sourceText); + + if (post_parse_analyze_hook) + (*post_parse_analyze_hook) (pstate, query, jstate); + + free_parsestate(pstate); + + pgstat_report_query_id(query->queryId, false); + + return query; +} + +/* + * parse_sub_analyze + * Entry point for recursively analyzing a sub-statement. + */ +Query * +parse_sub_analyze(Node *parseTree, ParseState *parentParseState, + CommonTableExpr *parentCTE, + bool locked_from_parent, + bool resolve_unknowns) +{ + ParseState *pstate = make_parsestate(parentParseState); + Query *query; + + pstate->p_parent_cte = parentCTE; + pstate->p_locked_from_parent = locked_from_parent; + pstate->p_resolve_unknowns = resolve_unknowns; + + query = transformStmt(pstate, parseTree); + + free_parsestate(pstate); + + return query; +} + +/* + * transformTopLevelStmt - + * transform a Parse tree into a Query tree. + * + * This function is just responsible for transferring statement location data + * from the RawStmt into the finished Query. + */ +Query * +transformTopLevelStmt(ParseState *pstate, RawStmt *parseTree) +{ + Query *result; + + /* We're at top level, so allow SELECT INTO */ + result = transformOptionalSelectInto(pstate, parseTree->stmt); + + result->stmt_location = parseTree->stmt_location; + result->stmt_len = parseTree->stmt_len; + + return result; +} + +/* + * transformOptionalSelectInto - + * If SELECT has INTO, convert it to CREATE TABLE AS. + * + * The only thing we do here that we don't do in transformStmt() is to + * convert SELECT ... INTO into CREATE TABLE AS. Since utility statements + * aren't allowed within larger statements, this is only allowed at the top + * of the parse tree, and so we only try it before entering the recursive + * transformStmt() processing. + */ +static Query * +transformOptionalSelectInto(ParseState *pstate, Node *parseTree) +{ + if (IsA(parseTree, SelectStmt)) + { + SelectStmt *stmt = (SelectStmt *) parseTree; + + /* If it's a set-operation tree, drill down to leftmost SelectStmt */ + while (stmt && stmt->op != SETOP_NONE) + stmt = stmt->larg; + Assert(stmt && IsA(stmt, SelectStmt) && stmt->larg == NULL); + + if (stmt->intoClause) + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + + ctas->query = parseTree; + ctas->into = stmt->intoClause; + ctas->objtype = OBJECT_TABLE; + ctas->is_select_into = true; + + /* + * Remove the intoClause from the SelectStmt. This makes it safe + * for transformSelectStmt to complain if it finds intoClause set + * (implying that the INTO appeared in a disallowed place). + */ + stmt->intoClause = NULL; + + parseTree = (Node *) ctas; + } + } + + return transformStmt(pstate, parseTree); +} + +/* + * transformStmt - + * recursively transform a Parse tree into a Query tree. + */ +Query * +transformStmt(ParseState *pstate, Node *parseTree) +{ + Query *result; + + /* + * We apply RAW_EXPRESSION_COVERAGE_TEST testing to basic DML statements; + * we can't just run it on everything because raw_expression_tree_walker() + * doesn't claim to handle utility statements. + */ +#ifdef RAW_EXPRESSION_COVERAGE_TEST + switch (nodeTag(parseTree)) + { + case T_SelectStmt: + case T_InsertStmt: + case T_UpdateStmt: + case T_DeleteStmt: + (void) test_raw_expression_coverage(parseTree, NULL); + break; + default: + break; + } +#endif /* RAW_EXPRESSION_COVERAGE_TEST */ + + switch (nodeTag(parseTree)) + { + /* + * Optimizable statements + */ + case T_InsertStmt: + result = transformInsertStmt(pstate, (InsertStmt *) parseTree); + break; + + case T_DeleteStmt: + result = transformDeleteStmt(pstate, (DeleteStmt *) parseTree); + break; + + case T_UpdateStmt: + result = transformUpdateStmt(pstate, (UpdateStmt *) parseTree); + break; + + case T_SelectStmt: + { + SelectStmt *n = (SelectStmt *) parseTree; + + if (n->valuesLists) + result = transformValuesClause(pstate, n); + else if (n->op == SETOP_NONE) + result = transformSelectStmt(pstate, n); + else + result = transformSetOperationStmt(pstate, n); + } + break; + + case T_ReturnStmt: + result = transformReturnStmt(pstate, (ReturnStmt *) parseTree); + break; + + case T_PLAssignStmt: + result = transformPLAssignStmt(pstate, + (PLAssignStmt *) parseTree); + break; + + /* + * Special cases + */ + case T_DeclareCursorStmt: + result = transformDeclareCursorStmt(pstate, + (DeclareCursorStmt *) parseTree); + break; + + case T_ExplainStmt: + result = transformExplainStmt(pstate, + (ExplainStmt *) parseTree); + break; + + case T_CreateTableAsStmt: + result = transformCreateTableAsStmt(pstate, + (CreateTableAsStmt *) parseTree); + break; + + case T_CallStmt: + result = transformCallStmt(pstate, + (CallStmt *) parseTree); + break; + + default: + + /* + * other statements don't require any transformation; just return + * the original parsetree with a Query node plastered on top. + */ + result = makeNode(Query); + result->commandType = CMD_UTILITY; + result->utilityStmt = (Node *) parseTree; + break; + } + + /* Mark as original query until we learn differently */ + result->querySource = QSRC_ORIGINAL; + result->canSetTag = true; + + return result; +} + +/* + * analyze_requires_snapshot + * Returns true if a snapshot must be set before doing parse analysis + * on the given raw parse tree. + * + * Classification here should match transformStmt(). + */ +bool +analyze_requires_snapshot(RawStmt *parseTree) +{ + bool result; + + switch (nodeTag(parseTree->stmt)) + { + /* + * Optimizable statements + */ + case T_InsertStmt: + case T_DeleteStmt: + case T_UpdateStmt: + case T_SelectStmt: + case T_PLAssignStmt: + result = true; + break; + + /* + * Special cases + */ + case T_DeclareCursorStmt: + case T_ExplainStmt: + case T_CreateTableAsStmt: + /* yes, because we must analyze the contained statement */ + result = true; + break; + + default: + /* other utility statements don't have any real parse analysis */ + result = false; + break; + } + + return result; +} + +/* + * transformDeleteStmt - + * transforms a Delete Statement + */ +static Query * +transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt) +{ + Query *qry = makeNode(Query); + ParseNamespaceItem *nsitem; + Node *qual; + + qry->commandType = CMD_DELETE; + + /* process the WITH clause independently of all else */ + if (stmt->withClause) + { + qry->hasRecursive = stmt->withClause->recursive; + qry->cteList = transformWithClause(pstate, stmt->withClause); + qry->hasModifyingCTE = pstate->p_hasModifyingCTE; + } + + /* set up range table with just the result rel */ + qry->resultRelation = setTargetTable(pstate, stmt->relation, + stmt->relation->inh, + true, + ACL_DELETE); + nsitem = pstate->p_target_nsitem; + + /* there's no DISTINCT in DELETE */ + qry->distinctClause = NIL; + + /* subqueries in USING cannot access the result relation */ + nsitem->p_lateral_only = true; + nsitem->p_lateral_ok = false; + + /* + * The USING clause is non-standard SQL syntax, and is equivalent in + * functionality to the FROM list that can be specified for UPDATE. The + * USING keyword is used rather than FROM because FROM is already a + * keyword in the DELETE syntax. + */ + transformFromClause(pstate, stmt->usingClause); + + /* remaining clauses can reference the result relation normally */ + nsitem->p_lateral_only = false; + nsitem->p_lateral_ok = true; + + qual = transformWhereClause(pstate, stmt->whereClause, + EXPR_KIND_WHERE, "WHERE"); + + qry->returningList = transformReturningList(pstate, stmt->returningList); + + /* done building the range table and jointree */ + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, qual); + + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->hasWindowFuncs = pstate->p_hasWindowFuncs; + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasAggs = pstate->p_hasAggs; + + assign_query_collations(pstate, qry); + + /* this must be done after collations, for reliable comparison of exprs */ + if (pstate->p_hasAggs) + parseCheckAggregates(pstate, qry); + + return qry; +} + +/* + * transformInsertStmt - + * transform an Insert Statement + */ +static Query * +transformInsertStmt(ParseState *pstate, InsertStmt *stmt) +{ + Query *qry = makeNode(Query); + SelectStmt *selectStmt = (SelectStmt *) stmt->selectStmt; + List *exprList = NIL; + bool isGeneralSelect; + List *sub_rtable; + List *sub_namespace; + List *icolumns; + List *attrnos; + ParseNamespaceItem *nsitem; + RangeTblEntry *rte; + ListCell *icols; + ListCell *attnos; + ListCell *lc; + bool isOnConflictUpdate; + AclMode targetPerms; + + /* There can't be any outer WITH to worry about */ + Assert(pstate->p_ctenamespace == NIL); + + qry->commandType = CMD_INSERT; + pstate->p_is_insert = true; + + /* process the WITH clause independently of all else */ + if (stmt->withClause) + { + qry->hasRecursive = stmt->withClause->recursive; + qry->cteList = transformWithClause(pstate, stmt->withClause); + qry->hasModifyingCTE = pstate->p_hasModifyingCTE; + } + + qry->override = stmt->override; + + isOnConflictUpdate = (stmt->onConflictClause && + stmt->onConflictClause->action == ONCONFLICT_UPDATE); + + /* + * We have three cases to deal with: DEFAULT VALUES (selectStmt == NULL), + * VALUES list, or general SELECT input. We special-case VALUES, both for + * efficiency and so we can handle DEFAULT specifications. + * + * The grammar allows attaching ORDER BY, LIMIT, FOR UPDATE, or WITH to a + * VALUES clause. If we have any of those, treat it as a general SELECT; + * so it will work, but you can't use DEFAULT items together with those. + */ + isGeneralSelect = (selectStmt && (selectStmt->valuesLists == NIL || + selectStmt->sortClause != NIL || + selectStmt->limitOffset != NULL || + selectStmt->limitCount != NULL || + selectStmt->lockingClause != NIL || + selectStmt->withClause != NULL)); + + /* + * If a non-nil rangetable/namespace was passed in, and we are doing + * INSERT/SELECT, arrange to pass the rangetable/namespace down to the + * SELECT. This can only happen if we are inside a CREATE RULE, and in + * that case we want the rule's OLD and NEW rtable entries to appear as + * part of the SELECT's rtable, not as outer references for it. (Kluge!) + * The SELECT's joinlist is not affected however. We must do this before + * adding the target table to the INSERT's rtable. + */ + if (isGeneralSelect) + { + sub_rtable = pstate->p_rtable; + pstate->p_rtable = NIL; + sub_namespace = pstate->p_namespace; + pstate->p_namespace = NIL; + } + else + { + sub_rtable = NIL; /* not used, but keep compiler quiet */ + sub_namespace = NIL; + } + + /* + * Must get write lock on INSERT target table before scanning SELECT, else + * we will grab the wrong kind of initial lock if the target table is also + * mentioned in the SELECT part. Note that the target table is not added + * to the joinlist or namespace. + */ + targetPerms = ACL_INSERT; + if (isOnConflictUpdate) + targetPerms |= ACL_UPDATE; + qry->resultRelation = setTargetTable(pstate, stmt->relation, + false, false, targetPerms); + + /* Validate stmt->cols list, or build default list if no list given */ + icolumns = checkInsertTargets(pstate, stmt->cols, &attrnos); + Assert(list_length(icolumns) == list_length(attrnos)); + + /* + * Determine which variant of INSERT we have. + */ + if (selectStmt == NULL) + { + /* + * We have INSERT ... DEFAULT VALUES. We can handle this case by + * emitting an empty targetlist --- all columns will be defaulted when + * the planner expands the targetlist. + */ + exprList = NIL; + } + else if (isGeneralSelect) + { + /* + * We make the sub-pstate a child of the outer pstate so that it can + * see any Param definitions supplied from above. Since the outer + * pstate's rtable and namespace are presently empty, there are no + * side-effects of exposing names the sub-SELECT shouldn't be able to + * see. + */ + ParseState *sub_pstate = make_parsestate(pstate); + Query *selectQuery; + + /* + * Process the source SELECT. + * + * It is important that this be handled just like a standalone SELECT; + * otherwise the behavior of SELECT within INSERT might be different + * from a stand-alone SELECT. (Indeed, Postgres up through 6.5 had + * bugs of just that nature...) + * + * The sole exception is that we prevent resolving unknown-type + * outputs as TEXT. This does not change the semantics since if the + * column type matters semantically, it would have been resolved to + * something else anyway. Doing this lets us resolve such outputs as + * the target column's type, which we handle below. + */ + sub_pstate->p_rtable = sub_rtable; + sub_pstate->p_joinexprs = NIL; /* sub_rtable has no joins */ + sub_pstate->p_namespace = sub_namespace; + sub_pstate->p_resolve_unknowns = false; + + selectQuery = transformStmt(sub_pstate, stmt->selectStmt); + + free_parsestate(sub_pstate); + + /* The grammar should have produced a SELECT */ + if (!IsA(selectQuery, Query) || + selectQuery->commandType != CMD_SELECT) + elog(ERROR, "unexpected non-SELECT command in INSERT ... SELECT"); + + /* + * Make the source be a subquery in the INSERT's rangetable, and add + * it to the INSERT's joinlist (but not the namespace). + */ + nsitem = addRangeTableEntryForSubquery(pstate, + selectQuery, + makeAlias("*SELECT*", NIL), + false, + false); + addNSItemToQuery(pstate, nsitem, true, false, false); + + /*---------- + * Generate an expression list for the INSERT that selects all the + * non-resjunk columns from the subquery. (INSERT's tlist must be + * separate from the subquery's tlist because we may add columns, + * insert datatype coercions, etc.) + * + * HACK: unknown-type constants and params in the SELECT's targetlist + * are copied up as-is rather than being referenced as subquery + * outputs. This is to ensure that when we try to coerce them to + * the target column's datatype, the right things happen (see + * special cases in coerce_type). Otherwise, this fails: + * INSERT INTO foo SELECT 'bar', ... FROM baz + *---------- + */ + exprList = NIL; + foreach(lc, selectQuery->targetList) + { + TargetEntry *tle = (TargetEntry *) lfirst(lc); + Expr *expr; + + if (tle->resjunk) + continue; + if (tle->expr && + (IsA(tle->expr, Const) || IsA(tle->expr, Param)) && + exprType((Node *) tle->expr) == UNKNOWNOID) + expr = tle->expr; + else + { + Var *var = makeVarFromTargetEntry(nsitem->p_rtindex, tle); + + var->location = exprLocation((Node *) tle->expr); + expr = (Expr *) var; + } + exprList = lappend(exprList, expr); + } + + /* Prepare row for assignment to target table */ + exprList = transformInsertRow(pstate, exprList, + stmt->cols, + icolumns, attrnos, + false); + } + else if (list_length(selectStmt->valuesLists) > 1) + { + /* + * Process INSERT ... VALUES with multiple VALUES sublists. We + * generate a VALUES RTE holding the transformed expression lists, and + * build up a targetlist containing Vars that reference the VALUES + * RTE. + */ + List *exprsLists = NIL; + List *coltypes = NIL; + List *coltypmods = NIL; + List *colcollations = NIL; + int sublist_length = -1; + bool lateral = false; + + Assert(selectStmt->intoClause == NULL); + + foreach(lc, selectStmt->valuesLists) + { + List *sublist = (List *) lfirst(lc); + + /* + * Do basic expression transformation (same as a ROW() expr, but + * allow SetToDefault at top level) + */ + sublist = transformExpressionList(pstate, sublist, + EXPR_KIND_VALUES, true); + + /* + * All the sublists must be the same length, *after* + * transformation (which might expand '*' into multiple items). + * The VALUES RTE can't handle anything different. + */ + if (sublist_length < 0) + { + /* Remember post-transformation length of first sublist */ + sublist_length = list_length(sublist); + } + else if (sublist_length != list_length(sublist)) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("VALUES lists must all be the same length"), + parser_errposition(pstate, + exprLocation((Node *) sublist)))); + } + + /* + * Prepare row for assignment to target table. We process any + * indirection on the target column specs normally but then strip + * off the resulting field/array assignment nodes, since we don't + * want the parsed statement to contain copies of those in each + * VALUES row. (It's annoying to have to transform the + * indirection specs over and over like this, but avoiding it + * would take some really messy refactoring of + * transformAssignmentIndirection.) + */ + sublist = transformInsertRow(pstate, sublist, + stmt->cols, + icolumns, attrnos, + true); + + /* + * We must assign collations now because assign_query_collations + * doesn't process rangetable entries. We just assign all the + * collations independently in each row, and don't worry about + * whether they are consistent vertically. The outer INSERT query + * isn't going to care about the collations of the VALUES columns, + * so it's not worth the effort to identify a common collation for + * each one here. (But note this does have one user-visible + * consequence: INSERT ... VALUES won't complain about conflicting + * explicit COLLATEs in a column, whereas the same VALUES + * construct in another context would complain.) + */ + assign_list_collations(pstate, sublist); + + exprsLists = lappend(exprsLists, sublist); + } + + /* + * Construct column type/typmod/collation lists for the VALUES RTE. + * Every expression in each column has been coerced to the type/typmod + * of the corresponding target column or subfield, so it's sufficient + * to look at the exprType/exprTypmod of the first row. We don't care + * about the collation labeling, so just fill in InvalidOid for that. + */ + foreach(lc, (List *) linitial(exprsLists)) + { + Node *val = (Node *) lfirst(lc); + + coltypes = lappend_oid(coltypes, exprType(val)); + coltypmods = lappend_int(coltypmods, exprTypmod(val)); + colcollations = lappend_oid(colcollations, InvalidOid); + } + + /* + * Ordinarily there can't be any current-level Vars in the expression + * lists, because the namespace was empty ... but if we're inside + * CREATE RULE, then NEW/OLD references might appear. In that case we + * have to mark the VALUES RTE as LATERAL. + */ + if (list_length(pstate->p_rtable) != 1 && + contain_vars_of_level((Node *) exprsLists, 0)) + lateral = true; + + /* + * Generate the VALUES RTE + */ + nsitem = addRangeTableEntryForValues(pstate, exprsLists, + coltypes, coltypmods, colcollations, + NULL, lateral, true); + addNSItemToQuery(pstate, nsitem, true, false, false); + + /* + * Generate list of Vars referencing the RTE + */ + exprList = expandNSItemVars(nsitem, 0, -1, NULL); + + /* + * Re-apply any indirection on the target column specs to the Vars + */ + exprList = transformInsertRow(pstate, exprList, + stmt->cols, + icolumns, attrnos, + false); + } + else + { + /* + * Process INSERT ... VALUES with a single VALUES sublist. We treat + * this case separately for efficiency. The sublist is just computed + * directly as the Query's targetlist, with no VALUES RTE. So it + * works just like a SELECT without any FROM. + */ + List *valuesLists = selectStmt->valuesLists; + + Assert(list_length(valuesLists) == 1); + Assert(selectStmt->intoClause == NULL); + + /* + * Do basic expression transformation (same as a ROW() expr, but allow + * SetToDefault at top level) + */ + exprList = transformExpressionList(pstate, + (List *) linitial(valuesLists), + EXPR_KIND_VALUES_SINGLE, + true); + + /* Prepare row for assignment to target table */ + exprList = transformInsertRow(pstate, exprList, + stmt->cols, + icolumns, attrnos, + false); + } + + /* + * Generate query's target list using the computed list of expressions. + * Also, mark all the target columns as needing insert permissions. + */ + rte = pstate->p_target_nsitem->p_rte; + qry->targetList = NIL; + Assert(list_length(exprList) <= list_length(icolumns)); + forthree(lc, exprList, icols, icolumns, attnos, attrnos) + { + Expr *expr = (Expr *) lfirst(lc); + ResTarget *col = lfirst_node(ResTarget, icols); + AttrNumber attr_num = (AttrNumber) lfirst_int(attnos); + TargetEntry *tle; + + tle = makeTargetEntry(expr, + attr_num, + col->name, + false); + qry->targetList = lappend(qry->targetList, tle); + + rte->insertedCols = bms_add_member(rte->insertedCols, + attr_num - FirstLowInvalidHeapAttributeNumber); + } + + /* + * If we have any clauses yet to process, set the query namespace to + * contain only the target relation, removing any entries added in a + * sub-SELECT or VALUES list. + */ + if (stmt->onConflictClause || stmt->returningList) + { + pstate->p_namespace = NIL; + addNSItemToQuery(pstate, pstate->p_target_nsitem, + false, true, true); + } + + /* Process ON CONFLICT, if any. */ + if (stmt->onConflictClause) + qry->onConflict = transformOnConflictClause(pstate, + stmt->onConflictClause); + + /* Process RETURNING, if any. */ + if (stmt->returningList) + qry->returningList = transformReturningList(pstate, + stmt->returningList); + + /* done building the range table and jointree */ + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); + + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasSubLinks = pstate->p_hasSubLinks; + + assign_query_collations(pstate, qry); + + return qry; +} + +/* + * Prepare an INSERT row for assignment to the target table. + * + * exprlist: transformed expressions for source values; these might come from + * a VALUES row, or be Vars referencing a sub-SELECT or VALUES RTE output. + * stmtcols: original target-columns spec for INSERT (we just test for NIL) + * icolumns: effective target-columns spec (list of ResTarget) + * attrnos: integer column numbers (must be same length as icolumns) + * strip_indirection: if true, remove any field/array assignment nodes + */ +static List * +transformInsertRow(ParseState *pstate, List *exprlist, + List *stmtcols, List *icolumns, List *attrnos, + bool strip_indirection) +{ + List *result; + ListCell *lc; + ListCell *icols; + ListCell *attnos; + + /* + * Check length of expr list. It must not have more expressions than + * there are target columns. We allow fewer, but only if no explicit + * columns list was given (the remaining columns are implicitly + * defaulted). Note we must check this *after* transformation because + * that could expand '*' into multiple items. + */ + if (list_length(exprlist) > list_length(icolumns)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("INSERT has more expressions than target columns"), + parser_errposition(pstate, + exprLocation(list_nth(exprlist, + list_length(icolumns)))))); + if (stmtcols != NIL && + list_length(exprlist) < list_length(icolumns)) + { + /* + * We can get here for cases like INSERT ... SELECT (a,b,c) FROM ... + * where the user accidentally created a RowExpr instead of separate + * columns. Add a suitable hint if that seems to be the problem, + * because the main error message is quite misleading for this case. + * (If there's no stmtcols, you'll get something about data type + * mismatch, which is less misleading so we don't worry about giving a + * hint in that case.) + */ + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("INSERT has more target columns than expressions"), + ((list_length(exprlist) == 1 && + count_rowexpr_columns(pstate, linitial(exprlist)) == + list_length(icolumns)) ? + errhint("The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?") : 0), + parser_errposition(pstate, + exprLocation(list_nth(icolumns, + list_length(exprlist)))))); + } + + /* + * Prepare columns for assignment to target table. + */ + result = NIL; + forthree(lc, exprlist, icols, icolumns, attnos, attrnos) + { + Expr *expr = (Expr *) lfirst(lc); + ResTarget *col = lfirst_node(ResTarget, icols); + int attno = lfirst_int(attnos); + + expr = transformAssignedExpr(pstate, expr, + EXPR_KIND_INSERT_TARGET, + col->name, + attno, + col->indirection, + col->location); + + if (strip_indirection) + { + while (expr) + { + if (IsA(expr, FieldStore)) + { + FieldStore *fstore = (FieldStore *) expr; + + expr = (Expr *) linitial(fstore->newvals); + } + else if (IsA(expr, SubscriptingRef)) + { + SubscriptingRef *sbsref = (SubscriptingRef *) expr; + + if (sbsref->refassgnexpr == NULL) + break; + + expr = sbsref->refassgnexpr; + } + else + break; + } + } + + result = lappend(result, expr); + } + + return result; +} + +/* + * transformOnConflictClause - + * transforms an OnConflictClause in an INSERT + */ +static OnConflictExpr * +transformOnConflictClause(ParseState *pstate, + OnConflictClause *onConflictClause) +{ + ParseNamespaceItem *exclNSItem = NULL; + List *arbiterElems; + Node *arbiterWhere; + Oid arbiterConstraint; + List *onConflictSet = NIL; + Node *onConflictWhere = NULL; + int exclRelIndex = 0; + List *exclRelTlist = NIL; + OnConflictExpr *result; + + /* + * If this is ON CONFLICT ... UPDATE, first create the range table entry + * for the EXCLUDED pseudo relation, so that that will be present while + * processing arbiter expressions. (You can't actually reference it from + * there, but this provides a useful error message if you try.) + */ + if (onConflictClause->action == ONCONFLICT_UPDATE) + { + Relation targetrel = pstate->p_target_relation; + RangeTblEntry *exclRte; + + exclNSItem = addRangeTableEntryForRelation(pstate, + targetrel, + RowExclusiveLock, + makeAlias("excluded", NIL), + false, false); + exclRte = exclNSItem->p_rte; + exclRelIndex = exclNSItem->p_rtindex; + + /* + * relkind is set to composite to signal that we're not dealing with + * an actual relation, and no permission checks are required on it. + * (We'll check the actual target relation, instead.) + */ + exclRte->relkind = RELKIND_COMPOSITE_TYPE; + exclRte->requiredPerms = 0; + /* other permissions fields in exclRte are already empty */ + + /* Create EXCLUDED rel's targetlist for use by EXPLAIN */ + exclRelTlist = BuildOnConflictExcludedTargetlist(targetrel, + exclRelIndex); + } + + /* Process the arbiter clause, ON CONFLICT ON (...) */ + transformOnConflictArbiter(pstate, onConflictClause, &arbiterElems, + &arbiterWhere, &arbiterConstraint); + + /* Process DO UPDATE */ + if (onConflictClause->action == ONCONFLICT_UPDATE) + { + /* + * Expressions in the UPDATE targetlist need to be handled like UPDATE + * not INSERT. We don't need to save/restore this because all INSERT + * expressions have been parsed already. + */ + pstate->p_is_insert = false; + + /* + * Add the EXCLUDED pseudo relation to the query namespace, making it + * available in the UPDATE subexpressions. + */ + addNSItemToQuery(pstate, exclNSItem, false, true, true); + + /* + * Now transform the UPDATE subexpressions. + */ + onConflictSet = + transformUpdateTargetList(pstate, onConflictClause->targetList); + + onConflictWhere = transformWhereClause(pstate, + onConflictClause->whereClause, + EXPR_KIND_WHERE, "WHERE"); + + /* + * Remove the EXCLUDED pseudo relation from the query namespace, since + * it's not supposed to be available in RETURNING. (Maybe someday we + * could allow that, and drop this step.) + */ + Assert((ParseNamespaceItem *) llast(pstate->p_namespace) == exclNSItem); + pstate->p_namespace = list_delete_last(pstate->p_namespace); + } + + /* Finally, build ON CONFLICT DO [NOTHING | UPDATE] expression */ + result = makeNode(OnConflictExpr); + + result->action = onConflictClause->action; + result->arbiterElems = arbiterElems; + result->arbiterWhere = arbiterWhere; + result->constraint = arbiterConstraint; + result->onConflictSet = onConflictSet; + result->onConflictWhere = onConflictWhere; + result->exclRelIndex = exclRelIndex; + result->exclRelTlist = exclRelTlist; + + return result; +} + + +/* + * BuildOnConflictExcludedTargetlist + * Create target list for the EXCLUDED pseudo-relation of ON CONFLICT, + * representing the columns of targetrel with varno exclRelIndex. + * + * Note: Exported for use in the rewriter. + */ +List * +BuildOnConflictExcludedTargetlist(Relation targetrel, + Index exclRelIndex) +{ + List *result = NIL; + int attno; + Var *var; + TargetEntry *te; + + /* + * Note that resnos of the tlist must correspond to attnos of the + * underlying relation, hence we need entries for dropped columns too. + */ + for (attno = 0; attno < RelationGetNumberOfAttributes(targetrel); attno++) + { + Form_pg_attribute attr = TupleDescAttr(targetrel->rd_att, attno); + char *name; + + if (attr->attisdropped) + { + /* + * can't use atttypid here, but it doesn't really matter what type + * the Const claims to be. + */ + var = (Var *) makeNullConst(INT4OID, -1, InvalidOid); + name = NULL; + } + else + { + var = makeVar(exclRelIndex, attno + 1, + attr->atttypid, attr->atttypmod, + attr->attcollation, + 0); + name = pstrdup(NameStr(attr->attname)); + } + + te = makeTargetEntry((Expr *) var, + attno + 1, + name, + false); + + result = lappend(result, te); + } + + /* + * Add a whole-row-Var entry to support references to "EXCLUDED.*". Like + * the other entries in the EXCLUDED tlist, its resno must match the Var's + * varattno, else the wrong things happen while resolving references in + * setrefs.c. This is against normal conventions for targetlists, but + * it's okay since we don't use this as a real tlist. + */ + var = makeVar(exclRelIndex, InvalidAttrNumber, + targetrel->rd_rel->reltype, + -1, InvalidOid, 0); + te = makeTargetEntry((Expr *) var, InvalidAttrNumber, NULL, true); + result = lappend(result, te); + + return result; +} + + +/* + * count_rowexpr_columns - + * get number of columns contained in a ROW() expression; + * return -1 if expression isn't a RowExpr or a Var referencing one. + * + * This is currently used only for hint purposes, so we aren't terribly + * tense about recognizing all possible cases. The Var case is interesting + * because that's what we'll get in the INSERT ... SELECT (...) case. + */ +static int +count_rowexpr_columns(ParseState *pstate, Node *expr) +{ + if (expr == NULL) + return -1; + if (IsA(expr, RowExpr)) + return list_length(((RowExpr *) expr)->args); + if (IsA(expr, Var)) + { + Var *var = (Var *) expr; + AttrNumber attnum = var->varattno; + + if (attnum > 0 && var->vartype == RECORDOID) + { + RangeTblEntry *rte; + + rte = GetRTEByRangeTablePosn(pstate, var->varno, var->varlevelsup); + if (rte->rtekind == RTE_SUBQUERY) + { + /* Subselect-in-FROM: examine sub-select's output expr */ + TargetEntry *ste = get_tle_by_resno(rte->subquery->targetList, + attnum); + + if (ste == NULL || ste->resjunk) + return -1; + expr = (Node *) ste->expr; + if (IsA(expr, RowExpr)) + return list_length(((RowExpr *) expr)->args); + } + } + } + return -1; +} + + +/* + * transformSelectStmt - + * transforms a Select Statement + * + * Note: this covers only cases with no set operations and no VALUES lists; + * see below for the other cases. + */ +static Query * +transformSelectStmt(ParseState *pstate, SelectStmt *stmt) +{ + Query *qry = makeNode(Query); + Node *qual; + ListCell *l; + + qry->commandType = CMD_SELECT; + + /* process the WITH clause independently of all else */ + if (stmt->withClause) + { + qry->hasRecursive = stmt->withClause->recursive; + qry->cteList = transformWithClause(pstate, stmt->withClause); + qry->hasModifyingCTE = pstate->p_hasModifyingCTE; + } + + /* Complain if we get called from someplace where INTO is not allowed */ + if (stmt->intoClause) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("SELECT ... INTO is not allowed here"), + parser_errposition(pstate, + exprLocation((Node *) stmt->intoClause)))); + + /* make FOR UPDATE/FOR SHARE info available to addRangeTableEntry */ + pstate->p_locking_clause = stmt->lockingClause; + + /* make WINDOW info available for window functions, too */ + pstate->p_windowdefs = stmt->windowClause; + + /* process the FROM clause */ + transformFromClause(pstate, stmt->fromClause); + + /* transform targetlist */ + qry->targetList = transformTargetList(pstate, stmt->targetList, + EXPR_KIND_SELECT_TARGET); + + /* mark column origins */ + markTargetListOrigins(pstate, qry->targetList); + + /* transform WHERE */ + qual = transformWhereClause(pstate, stmt->whereClause, + EXPR_KIND_WHERE, "WHERE"); + + /* initial processing of HAVING clause is much like WHERE clause */ + qry->havingQual = transformWhereClause(pstate, stmt->havingClause, + EXPR_KIND_HAVING, "HAVING"); + + /* + * Transform sorting/grouping stuff. Do ORDER BY first because both + * transformGroupClause and transformDistinctClause need the results. Note + * that these functions can also change the targetList, so it's passed to + * them by reference. + */ + qry->sortClause = transformSortClause(pstate, + stmt->sortClause, + &qry->targetList, + EXPR_KIND_ORDER_BY, + false /* allow SQL92 rules */ ); + + qry->groupClause = transformGroupClause(pstate, + stmt->groupClause, + &qry->groupingSets, + &qry->targetList, + qry->sortClause, + EXPR_KIND_GROUP_BY, + false /* allow SQL92 rules */ ); + qry->groupDistinct = stmt->groupDistinct; + + if (stmt->distinctClause == NIL) + { + qry->distinctClause = NIL; + qry->hasDistinctOn = false; + } + else if (linitial(stmt->distinctClause) == NULL) + { + /* We had SELECT DISTINCT */ + qry->distinctClause = transformDistinctClause(pstate, + &qry->targetList, + qry->sortClause, + false); + qry->hasDistinctOn = false; + } + else + { + /* We had SELECT DISTINCT ON */ + qry->distinctClause = transformDistinctOnClause(pstate, + stmt->distinctClause, + &qry->targetList, + qry->sortClause); + qry->hasDistinctOn = true; + } + + /* transform LIMIT */ + qry->limitOffset = transformLimitClause(pstate, stmt->limitOffset, + EXPR_KIND_OFFSET, "OFFSET", + stmt->limitOption); + qry->limitCount = transformLimitClause(pstate, stmt->limitCount, + EXPR_KIND_LIMIT, "LIMIT", + stmt->limitOption); + qry->limitOption = stmt->limitOption; + + /* transform window clauses after we have seen all window functions */ + qry->windowClause = transformWindowDefinitions(pstate, + pstate->p_windowdefs, + &qry->targetList); + + /* resolve any still-unresolved output columns as being type text */ + if (pstate->p_resolve_unknowns) + resolveTargetListUnknowns(pstate, qry->targetList); + + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, qual); + + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->hasWindowFuncs = pstate->p_hasWindowFuncs; + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasAggs = pstate->p_hasAggs; + + foreach(l, stmt->lockingClause) + { + transformLockingClause(pstate, qry, + (LockingClause *) lfirst(l), false); + } + + assign_query_collations(pstate, qry); + + /* this must be done after collations, for reliable comparison of exprs */ + if (pstate->p_hasAggs || qry->groupClause || qry->groupingSets || qry->havingQual) + parseCheckAggregates(pstate, qry); + + return qry; +} + +/* + * transformValuesClause - + * transforms a VALUES clause that's being used as a standalone SELECT + * + * We build a Query containing a VALUES RTE, rather as if one had written + * SELECT * FROM (VALUES ...) AS "*VALUES*" + */ +static Query * +transformValuesClause(ParseState *pstate, SelectStmt *stmt) +{ + Query *qry = makeNode(Query); + List *exprsLists = NIL; + List *coltypes = NIL; + List *coltypmods = NIL; + List *colcollations = NIL; + List **colexprs = NULL; + int sublist_length = -1; + bool lateral = false; + ParseNamespaceItem *nsitem; + ListCell *lc; + ListCell *lc2; + int i; + + qry->commandType = CMD_SELECT; + + /* Most SELECT stuff doesn't apply in a VALUES clause */ + Assert(stmt->distinctClause == NIL); + Assert(stmt->intoClause == NULL); + Assert(stmt->targetList == NIL); + Assert(stmt->fromClause == NIL); + Assert(stmt->whereClause == NULL); + Assert(stmt->groupClause == NIL); + Assert(stmt->havingClause == NULL); + Assert(stmt->windowClause == NIL); + Assert(stmt->op == SETOP_NONE); + + /* process the WITH clause independently of all else */ + if (stmt->withClause) + { + qry->hasRecursive = stmt->withClause->recursive; + qry->cteList = transformWithClause(pstate, stmt->withClause); + qry->hasModifyingCTE = pstate->p_hasModifyingCTE; + } + + /* + * For each row of VALUES, transform the raw expressions. + * + * Note that the intermediate representation we build is column-organized + * not row-organized. That simplifies the type and collation processing + * below. + */ + foreach(lc, stmt->valuesLists) + { + List *sublist = (List *) lfirst(lc); + + /* + * Do basic expression transformation (same as a ROW() expr, but here + * we disallow SetToDefault) + */ + sublist = transformExpressionList(pstate, sublist, + EXPR_KIND_VALUES, false); + + /* + * All the sublists must be the same length, *after* transformation + * (which might expand '*' into multiple items). The VALUES RTE can't + * handle anything different. + */ + if (sublist_length < 0) + { + /* Remember post-transformation length of first sublist */ + sublist_length = list_length(sublist); + /* and allocate array for per-column lists */ + colexprs = (List **) palloc0(sublist_length * sizeof(List *)); + } + else if (sublist_length != list_length(sublist)) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("VALUES lists must all be the same length"), + parser_errposition(pstate, + exprLocation((Node *) sublist)))); + } + + /* Build per-column expression lists */ + i = 0; + foreach(lc2, sublist) + { + Node *col = (Node *) lfirst(lc2); + + colexprs[i] = lappend(colexprs[i], col); + i++; + } + + /* Release sub-list's cells to save memory */ + list_free(sublist); + + /* Prepare an exprsLists element for this row */ + exprsLists = lappend(exprsLists, NIL); + } + + /* + * Now resolve the common types of the columns, and coerce everything to + * those types. Then identify the common typmod and common collation, if + * any, of each column. + * + * We must do collation processing now because (1) assign_query_collations + * doesn't process rangetable entries, and (2) we need to label the VALUES + * RTE with column collations for use in the outer query. We don't + * consider conflict of implicit collations to be an error here; instead + * the column will just show InvalidOid as its collation, and you'll get a + * failure later if that results in failure to resolve a collation. + * + * Note we modify the per-column expression lists in-place. + */ + for (i = 0; i < sublist_length; i++) + { + Oid coltype; + int32 coltypmod; + Oid colcoll; + + coltype = select_common_type(pstate, colexprs[i], "VALUES", NULL); + + foreach(lc, colexprs[i]) + { + Node *col = (Node *) lfirst(lc); + + col = coerce_to_common_type(pstate, col, coltype, "VALUES"); + lfirst(lc) = (void *) col; + } + + coltypmod = select_common_typmod(pstate, colexprs[i], coltype); + colcoll = select_common_collation(pstate, colexprs[i], true); + + coltypes = lappend_oid(coltypes, coltype); + coltypmods = lappend_int(coltypmods, coltypmod); + colcollations = lappend_oid(colcollations, colcoll); + } + + /* + * Finally, rearrange the coerced expressions into row-organized lists. + */ + for (i = 0; i < sublist_length; i++) + { + forboth(lc, colexprs[i], lc2, exprsLists) + { + Node *col = (Node *) lfirst(lc); + List *sublist = lfirst(lc2); + + sublist = lappend(sublist, col); + lfirst(lc2) = sublist; + } + list_free(colexprs[i]); + } + + /* + * Ordinarily there can't be any current-level Vars in the expression + * lists, because the namespace was empty ... but if we're inside CREATE + * RULE, then NEW/OLD references might appear. In that case we have to + * mark the VALUES RTE as LATERAL. + */ + if (pstate->p_rtable != NIL && + contain_vars_of_level((Node *) exprsLists, 0)) + lateral = true; + + /* + * Generate the VALUES RTE + */ + nsitem = addRangeTableEntryForValues(pstate, exprsLists, + coltypes, coltypmods, colcollations, + NULL, lateral, true); + addNSItemToQuery(pstate, nsitem, true, true, true); + + /* + * Generate a targetlist as though expanding "*" + */ + Assert(pstate->p_next_resno == 1); + qry->targetList = expandNSItemAttrs(pstate, nsitem, 0, -1); + + /* + * The grammar allows attaching ORDER BY, LIMIT, and FOR UPDATE to a + * VALUES, so cope. + */ + qry->sortClause = transformSortClause(pstate, + stmt->sortClause, + &qry->targetList, + EXPR_KIND_ORDER_BY, + false /* allow SQL92 rules */ ); + + qry->limitOffset = transformLimitClause(pstate, stmt->limitOffset, + EXPR_KIND_OFFSET, "OFFSET", + stmt->limitOption); + qry->limitCount = transformLimitClause(pstate, stmt->limitCount, + EXPR_KIND_LIMIT, "LIMIT", + stmt->limitOption); + qry->limitOption = stmt->limitOption; + + if (stmt->lockingClause) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to VALUES", + LCS_asString(((LockingClause *) + linitial(stmt->lockingClause))->strength)))); + + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); + + qry->hasSubLinks = pstate->p_hasSubLinks; + + assign_query_collations(pstate, qry); + + return qry; +} + +/* + * transformSetOperationStmt - + * transforms a set-operations tree + * + * A set-operation tree is just a SELECT, but with UNION/INTERSECT/EXCEPT + * structure to it. We must transform each leaf SELECT and build up a top- + * level Query that contains the leaf SELECTs as subqueries in its rangetable. + * The tree of set operations is converted into the setOperations field of + * the top-level Query. + */ +static Query * +transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt) +{ + Query *qry = makeNode(Query); + SelectStmt *leftmostSelect; + int leftmostRTI; + Query *leftmostQuery; + SetOperationStmt *sostmt; + List *sortClause; + Node *limitOffset; + Node *limitCount; + List *lockingClause; + WithClause *withClause; + Node *node; + ListCell *left_tlist, + *lct, + *lcm, + *lcc, + *l; + List *targetvars, + *targetnames, + *sv_namespace; + int sv_rtable_length; + ParseNamespaceItem *jnsitem; + ParseNamespaceColumn *sortnscolumns; + int sortcolindex; + int tllen; + + qry->commandType = CMD_SELECT; + + /* + * Find leftmost leaf SelectStmt. We currently only need to do this in + * order to deliver a suitable error message if there's an INTO clause + * there, implying the set-op tree is in a context that doesn't allow + * INTO. (transformSetOperationTree would throw error anyway, but it + * seems worth the trouble to throw a different error for non-leftmost + * INTO, so we produce that error in transformSetOperationTree.) + */ + leftmostSelect = stmt->larg; + while (leftmostSelect && leftmostSelect->op != SETOP_NONE) + leftmostSelect = leftmostSelect->larg; + Assert(leftmostSelect && IsA(leftmostSelect, SelectStmt) && + leftmostSelect->larg == NULL); + if (leftmostSelect->intoClause) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("SELECT ... INTO is not allowed here"), + parser_errposition(pstate, + exprLocation((Node *) leftmostSelect->intoClause)))); + + /* + * We need to extract ORDER BY and other top-level clauses here and not + * let transformSetOperationTree() see them --- else it'll just recurse + * right back here! + */ + sortClause = stmt->sortClause; + limitOffset = stmt->limitOffset; + limitCount = stmt->limitCount; + lockingClause = stmt->lockingClause; + withClause = stmt->withClause; + + stmt->sortClause = NIL; + stmt->limitOffset = NULL; + stmt->limitCount = NULL; + stmt->lockingClause = NIL; + stmt->withClause = NULL; + + /* We don't support FOR UPDATE/SHARE with set ops at the moment. */ + if (lockingClause) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with UNION/INTERSECT/EXCEPT", + LCS_asString(((LockingClause *) + linitial(lockingClause))->strength)))); + + /* Process the WITH clause independently of all else */ + if (withClause) + { + qry->hasRecursive = withClause->recursive; + qry->cteList = transformWithClause(pstate, withClause); + qry->hasModifyingCTE = pstate->p_hasModifyingCTE; + } + + /* + * Recursively transform the components of the tree. + */ + sostmt = castNode(SetOperationStmt, + transformSetOperationTree(pstate, stmt, true, NULL)); + Assert(sostmt); + qry->setOperations = (Node *) sostmt; + + /* + * Re-find leftmost SELECT (now it's a sub-query in rangetable) + */ + node = sostmt->larg; + while (node && IsA(node, SetOperationStmt)) + node = ((SetOperationStmt *) node)->larg; + Assert(node && IsA(node, RangeTblRef)); + leftmostRTI = ((RangeTblRef *) node)->rtindex; + leftmostQuery = rt_fetch(leftmostRTI, pstate->p_rtable)->subquery; + Assert(leftmostQuery != NULL); + + /* + * Generate dummy targetlist for outer query using column names of + * leftmost select and common datatypes/collations of topmost set + * operation. Also make lists of the dummy vars and their names for use + * in parsing ORDER BY. + * + * Note: we use leftmostRTI as the varno of the dummy variables. It + * shouldn't matter too much which RT index they have, as long as they + * have one that corresponds to a real RT entry; else funny things may + * happen when the tree is mashed by rule rewriting. + */ + qry->targetList = NIL; + targetvars = NIL; + targetnames = NIL; + sortnscolumns = (ParseNamespaceColumn *) + palloc0(list_length(sostmt->colTypes) * sizeof(ParseNamespaceColumn)); + sortcolindex = 0; + + forfour(lct, sostmt->colTypes, + lcm, sostmt->colTypmods, + lcc, sostmt->colCollations, + left_tlist, leftmostQuery->targetList) + { + Oid colType = lfirst_oid(lct); + int32 colTypmod = lfirst_int(lcm); + Oid colCollation = lfirst_oid(lcc); + TargetEntry *lefttle = (TargetEntry *) lfirst(left_tlist); + char *colName; + TargetEntry *tle; + Var *var; + + Assert(!lefttle->resjunk); + colName = pstrdup(lefttle->resname); + var = makeVar(leftmostRTI, + lefttle->resno, + colType, + colTypmod, + colCollation, + 0); + var->location = exprLocation((Node *) lefttle->expr); + tle = makeTargetEntry((Expr *) var, + (AttrNumber) pstate->p_next_resno++, + colName, + false); + qry->targetList = lappend(qry->targetList, tle); + targetvars = lappend(targetvars, var); + targetnames = lappend(targetnames, makeString(colName)); + sortnscolumns[sortcolindex].p_varno = leftmostRTI; + sortnscolumns[sortcolindex].p_varattno = lefttle->resno; + sortnscolumns[sortcolindex].p_vartype = colType; + sortnscolumns[sortcolindex].p_vartypmod = colTypmod; + sortnscolumns[sortcolindex].p_varcollid = colCollation; + sortnscolumns[sortcolindex].p_varnosyn = leftmostRTI; + sortnscolumns[sortcolindex].p_varattnosyn = lefttle->resno; + sortcolindex++; + } + + /* + * As a first step towards supporting sort clauses that are expressions + * using the output columns, generate a namespace entry that makes the + * output columns visible. A Join RTE node is handy for this, since we + * can easily control the Vars generated upon matches. + * + * Note: we don't yet do anything useful with such cases, but at least + * "ORDER BY upper(foo)" will draw the right error message rather than + * "foo not found". + */ + sv_rtable_length = list_length(pstate->p_rtable); + + jnsitem = addRangeTableEntryForJoin(pstate, + targetnames, + sortnscolumns, + JOIN_INNER, + 0, + targetvars, + NIL, + NIL, + NULL, + NULL, + false); + + sv_namespace = pstate->p_namespace; + pstate->p_namespace = NIL; + + /* add jnsitem to column namespace only */ + addNSItemToQuery(pstate, jnsitem, false, false, true); + + /* + * For now, we don't support resjunk sort clauses on the output of a + * setOperation tree --- you can only use the SQL92-spec options of + * selecting an output column by name or number. Enforce by checking that + * transformSortClause doesn't add any items to tlist. + */ + tllen = list_length(qry->targetList); + + qry->sortClause = transformSortClause(pstate, + sortClause, + &qry->targetList, + EXPR_KIND_ORDER_BY, + false /* allow SQL92 rules */ ); + + /* restore namespace, remove join RTE from rtable */ + pstate->p_namespace = sv_namespace; + pstate->p_rtable = list_truncate(pstate->p_rtable, sv_rtable_length); + + if (tllen != list_length(qry->targetList)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("invalid UNION/INTERSECT/EXCEPT ORDER BY clause"), + errdetail("Only result column names can be used, not expressions or functions."), + errhint("Add the expression/function to every SELECT, or move the UNION into a FROM clause."), + parser_errposition(pstate, + exprLocation(list_nth(qry->targetList, tllen))))); + + qry->limitOffset = transformLimitClause(pstate, limitOffset, + EXPR_KIND_OFFSET, "OFFSET", + stmt->limitOption); + qry->limitCount = transformLimitClause(pstate, limitCount, + EXPR_KIND_LIMIT, "LIMIT", + stmt->limitOption); + qry->limitOption = stmt->limitOption; + + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); + + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->hasWindowFuncs = pstate->p_hasWindowFuncs; + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasAggs = pstate->p_hasAggs; + + foreach(l, lockingClause) + { + transformLockingClause(pstate, qry, + (LockingClause *) lfirst(l), false); + } + + assign_query_collations(pstate, qry); + + /* this must be done after collations, for reliable comparison of exprs */ + if (pstate->p_hasAggs || qry->groupClause || qry->groupingSets || qry->havingQual) + parseCheckAggregates(pstate, qry); + + return qry; +} + +/* + * Make a SortGroupClause node for a SetOperationStmt's groupClauses + * + * If require_hash is true, the caller is indicating that they need hash + * support or they will fail. So look extra hard for hash support. + */ +SortGroupClause * +makeSortGroupClauseForSetOp(Oid rescoltype, bool require_hash) +{ + SortGroupClause *grpcl = makeNode(SortGroupClause); + Oid sortop; + Oid eqop; + bool hashable; + + /* determine the eqop and optional sortop */ + get_sort_group_operators(rescoltype, + false, true, false, + &sortop, &eqop, NULL, + &hashable); + + /* + * The type cache doesn't believe that record is hashable (see + * cache_record_field_properties()), but if the caller really needs hash + * support, we can assume it does. Worst case, if any components of the + * record don't support hashing, we will fail at execution. + */ + if (require_hash && (rescoltype == RECORDOID || rescoltype == RECORDARRAYOID)) + hashable = true; + + /* we don't have a tlist yet, so can't assign sortgrouprefs */ + grpcl->tleSortGroupRef = 0; + grpcl->eqop = eqop; + grpcl->sortop = sortop; + grpcl->nulls_first = false; /* OK with or without sortop */ + grpcl->hashable = hashable; + + return grpcl; +} + +/* + * transformSetOperationTree + * Recursively transform leaves and internal nodes of a set-op tree + * + * In addition to returning the transformed node, if targetlist isn't NULL + * then we return a list of its non-resjunk TargetEntry nodes. For a leaf + * set-op node these are the actual targetlist entries; otherwise they are + * dummy entries created to carry the type, typmod, collation, and location + * (for error messages) of each output column of the set-op node. This info + * is needed only during the internal recursion of this function, so outside + * callers pass NULL for targetlist. Note: the reason for passing the + * actual targetlist entries of a leaf node is so that upper levels can + * replace UNKNOWN Consts with properly-coerced constants. + */ +static Node * +transformSetOperationTree(ParseState *pstate, SelectStmt *stmt, + bool isTopLevel, List **targetlist) +{ + bool isLeaf; + + Assert(stmt && IsA(stmt, SelectStmt)); + + /* Guard against stack overflow due to overly complex set-expressions */ + check_stack_depth(); + + /* + * Validity-check both leaf and internal SELECTs for disallowed ops. + */ + if (stmt->intoClause) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT"), + parser_errposition(pstate, + exprLocation((Node *) stmt->intoClause)))); + + /* We don't support FOR UPDATE/SHARE with set ops at the moment. */ + if (stmt->lockingClause) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with UNION/INTERSECT/EXCEPT", + LCS_asString(((LockingClause *) + linitial(stmt->lockingClause))->strength)))); + + /* + * If an internal node of a set-op tree has ORDER BY, LIMIT, FOR UPDATE, + * or WITH clauses attached, we need to treat it like a leaf node to + * generate an independent sub-Query tree. Otherwise, it can be + * represented by a SetOperationStmt node underneath the parent Query. + */ + if (stmt->op == SETOP_NONE) + { + Assert(stmt->larg == NULL && stmt->rarg == NULL); + isLeaf = true; + } + else + { + Assert(stmt->larg != NULL && stmt->rarg != NULL); + if (stmt->sortClause || stmt->limitOffset || stmt->limitCount || + stmt->lockingClause || stmt->withClause) + isLeaf = true; + else + isLeaf = false; + } + + if (isLeaf) + { + /* Process leaf SELECT */ + Query *selectQuery; + char selectName[32]; + ParseNamespaceItem *nsitem; + RangeTblRef *rtr; + ListCell *tl; + + /* + * Transform SelectStmt into a Query. + * + * This works the same as SELECT transformation normally would, except + * that we prevent resolving unknown-type outputs as TEXT. This does + * not change the subquery's semantics since if the column type + * matters semantically, it would have been resolved to something else + * anyway. Doing this lets us resolve such outputs using + * select_common_type(), below. + * + * Note: previously transformed sub-queries don't affect the parsing + * of this sub-query, because they are not in the toplevel pstate's + * namespace list. + */ + selectQuery = parse_sub_analyze((Node *) stmt, pstate, + NULL, false, false); + + /* + * Check for bogus references to Vars on the current query level (but + * upper-level references are okay). Normally this can't happen + * because the namespace will be empty, but it could happen if we are + * inside a rule. + */ + if (pstate->p_namespace) + { + if (contain_vars_of_level((Node *) selectQuery, 1)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), + errmsg("UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level"), + parser_errposition(pstate, + locate_var_of_level((Node *) selectQuery, 1)))); + } + + /* + * Extract a list of the non-junk TLEs for upper-level processing. + */ + if (targetlist) + { + *targetlist = NIL; + foreach(tl, selectQuery->targetList) + { + TargetEntry *tle = (TargetEntry *) lfirst(tl); + + if (!tle->resjunk) + *targetlist = lappend(*targetlist, tle); + } + } + + /* + * Make the leaf query be a subquery in the top-level rangetable. + */ + snprintf(selectName, sizeof(selectName), "*SELECT* %d", + list_length(pstate->p_rtable) + 1); + nsitem = addRangeTableEntryForSubquery(pstate, + selectQuery, + makeAlias(selectName, NIL), + false, + false); + + /* + * Return a RangeTblRef to replace the SelectStmt in the set-op tree. + */ + rtr = makeNode(RangeTblRef); + rtr->rtindex = nsitem->p_rtindex; + return (Node *) rtr; + } + else + { + /* Process an internal node (set operation node) */ + SetOperationStmt *op = makeNode(SetOperationStmt); + List *ltargetlist; + List *rtargetlist; + ListCell *ltl; + ListCell *rtl; + const char *context; + bool recursive = (pstate->p_parent_cte && + pstate->p_parent_cte->cterecursive); + + context = (stmt->op == SETOP_UNION ? "UNION" : + (stmt->op == SETOP_INTERSECT ? "INTERSECT" : + "EXCEPT")); + + op->op = stmt->op; + op->all = stmt->all; + + /* + * Recursively transform the left child node. + */ + op->larg = transformSetOperationTree(pstate, stmt->larg, + false, + <argetlist); + + /* + * If we are processing a recursive union query, now is the time to + * examine the non-recursive term's output columns and mark the + * containing CTE as having those result columns. We should do this + * only at the topmost setop of the CTE, of course. + */ + if (isTopLevel && recursive) + determineRecursiveColTypes(pstate, op->larg, ltargetlist); + + /* + * Recursively transform the right child node. + */ + op->rarg = transformSetOperationTree(pstate, stmt->rarg, + false, + &rtargetlist); + + /* + * Verify that the two children have the same number of non-junk + * columns, and determine the types of the merged output columns. + */ + if (list_length(ltargetlist) != list_length(rtargetlist)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("each %s query must have the same number of columns", + context), + parser_errposition(pstate, + exprLocation((Node *) rtargetlist)))); + + if (targetlist) + *targetlist = NIL; + op->colTypes = NIL; + op->colTypmods = NIL; + op->colCollations = NIL; + op->groupClauses = NIL; + forboth(ltl, ltargetlist, rtl, rtargetlist) + { + TargetEntry *ltle = (TargetEntry *) lfirst(ltl); + TargetEntry *rtle = (TargetEntry *) lfirst(rtl); + Node *lcolnode = (Node *) ltle->expr; + Node *rcolnode = (Node *) rtle->expr; + Oid lcoltype = exprType(lcolnode); + Oid rcoltype = exprType(rcolnode); + Node *bestexpr; + int bestlocation; + Oid rescoltype; + int32 rescoltypmod; + Oid rescolcoll; + + /* select common type, same as CASE et al */ + rescoltype = select_common_type(pstate, + list_make2(lcolnode, rcolnode), + context, + &bestexpr); + bestlocation = exprLocation(bestexpr); + + /* + * Verify the coercions are actually possible. If not, we'd fail + * later anyway, but we want to fail now while we have sufficient + * context to produce an error cursor position. + * + * For all non-UNKNOWN-type cases, we verify coercibility but we + * don't modify the child's expression, for fear of changing the + * child query's semantics. + * + * If a child expression is an UNKNOWN-type Const or Param, we + * want to replace it with the coerced expression. This can only + * happen when the child is a leaf set-op node. It's safe to + * replace the expression because if the child query's semantics + * depended on the type of this output column, it'd have already + * coerced the UNKNOWN to something else. We want to do this + * because (a) we want to verify that a Const is valid for the + * target type, or resolve the actual type of an UNKNOWN Param, + * and (b) we want to avoid unnecessary discrepancies between the + * output type of the child query and the resolved target type. + * Such a discrepancy would disable optimization in the planner. + * + * If it's some other UNKNOWN-type node, eg a Var, we do nothing + * (knowing that coerce_to_common_type would fail). The planner + * is sometimes able to fold an UNKNOWN Var to a constant before + * it has to coerce the type, so failing now would just break + * cases that might work. + */ + if (lcoltype != UNKNOWNOID) + lcolnode = coerce_to_common_type(pstate, lcolnode, + rescoltype, context); + else if (IsA(lcolnode, Const) || + IsA(lcolnode, Param)) + { + lcolnode = coerce_to_common_type(pstate, lcolnode, + rescoltype, context); + ltle->expr = (Expr *) lcolnode; + } + + if (rcoltype != UNKNOWNOID) + rcolnode = coerce_to_common_type(pstate, rcolnode, + rescoltype, context); + else if (IsA(rcolnode, Const) || + IsA(rcolnode, Param)) + { + rcolnode = coerce_to_common_type(pstate, rcolnode, + rescoltype, context); + rtle->expr = (Expr *) rcolnode; + } + + rescoltypmod = select_common_typmod(pstate, + list_make2(lcolnode, rcolnode), + rescoltype); + + /* + * Select common collation. A common collation is required for + * all set operators except UNION ALL; see SQL:2008 7.13 Syntax Rule 15c. (If we fail to identify a common + * collation for a UNION ALL column, the colCollations element + * will be set to InvalidOid, which may result in a runtime error + * if something at a higher query level wants to use the column's + * collation.) + */ + rescolcoll = select_common_collation(pstate, + list_make2(lcolnode, rcolnode), + (op->op == SETOP_UNION && op->all)); + + /* emit results */ + op->colTypes = lappend_oid(op->colTypes, rescoltype); + op->colTypmods = lappend_int(op->colTypmods, rescoltypmod); + op->colCollations = lappend_oid(op->colCollations, rescolcoll); + + /* + * For all cases except UNION ALL, identify the grouping operators + * (and, if available, sorting operators) that will be used to + * eliminate duplicates. + */ + if (op->op != SETOP_UNION || !op->all) + { + ParseCallbackState pcbstate; + + setup_parser_errposition_callback(&pcbstate, pstate, + bestlocation); + + /* If it's a recursive union, we need to require hashing support. */ + op->groupClauses = lappend(op->groupClauses, + makeSortGroupClauseForSetOp(rescoltype, recursive)); + + cancel_parser_errposition_callback(&pcbstate); + } + + /* + * Construct a dummy tlist entry to return. We use a SetToDefault + * node for the expression, since it carries exactly the fields + * needed, but any other expression node type would do as well. + */ + if (targetlist) + { + SetToDefault *rescolnode = makeNode(SetToDefault); + TargetEntry *restle; + + rescolnode->typeId = rescoltype; + rescolnode->typeMod = rescoltypmod; + rescolnode->collation = rescolcoll; + rescolnode->location = bestlocation; + restle = makeTargetEntry((Expr *) rescolnode, + 0, /* no need to set resno */ + NULL, + false); + *targetlist = lappend(*targetlist, restle); + } + } + + return (Node *) op; + } +} + +/* + * Process the outputs of the non-recursive term of a recursive union + * to set up the parent CTE's columns + */ +static void +determineRecursiveColTypes(ParseState *pstate, Node *larg, List *nrtargetlist) +{ + Node *node; + int leftmostRTI; + Query *leftmostQuery; + List *targetList; + ListCell *left_tlist; + ListCell *nrtl; + int next_resno; + + /* + * Find leftmost leaf SELECT + */ + node = larg; + while (node && IsA(node, SetOperationStmt)) + node = ((SetOperationStmt *) node)->larg; + Assert(node && IsA(node, RangeTblRef)); + leftmostRTI = ((RangeTblRef *) node)->rtindex; + leftmostQuery = rt_fetch(leftmostRTI, pstate->p_rtable)->subquery; + Assert(leftmostQuery != NULL); + + /* + * Generate dummy targetlist using column names of leftmost select and + * dummy result expressions of the non-recursive term. + */ + targetList = NIL; + next_resno = 1; + + forboth(nrtl, nrtargetlist, left_tlist, leftmostQuery->targetList) + { + TargetEntry *nrtle = (TargetEntry *) lfirst(nrtl); + TargetEntry *lefttle = (TargetEntry *) lfirst(left_tlist); + char *colName; + TargetEntry *tle; + + Assert(!lefttle->resjunk); + colName = pstrdup(lefttle->resname); + tle = makeTargetEntry(nrtle->expr, + next_resno++, + colName, + false); + targetList = lappend(targetList, tle); + } + + /* Now build CTE's output column info using dummy targetlist */ + analyzeCTETargetList(pstate, pstate->p_parent_cte, targetList); +} + + +/* + * transformReturnStmt - + * transforms a return statement + */ +static Query * +transformReturnStmt(ParseState *pstate, ReturnStmt *stmt) +{ + Query *qry = makeNode(Query); + + qry->commandType = CMD_SELECT; + qry->isReturn = true; + + qry->targetList = list_make1(makeTargetEntry((Expr *) transformExpr(pstate, stmt->returnval, EXPR_KIND_SELECT_TARGET), + 1, NULL, false)); + + if (pstate->p_resolve_unknowns) + resolveTargetListUnknowns(pstate, qry->targetList); + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, NULL); + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->hasWindowFuncs = pstate->p_hasWindowFuncs; + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasAggs = pstate->p_hasAggs; + + assign_query_collations(pstate, qry); + + return qry; +} + + +/* + * transformUpdateStmt - + * transforms an update statement + */ +static Query * +transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) +{ + Query *qry = makeNode(Query); + ParseNamespaceItem *nsitem; + Node *qual; + + qry->commandType = CMD_UPDATE; + pstate->p_is_insert = false; + + /* process the WITH clause independently of all else */ + if (stmt->withClause) + { + qry->hasRecursive = stmt->withClause->recursive; + qry->cteList = transformWithClause(pstate, stmt->withClause); + qry->hasModifyingCTE = pstate->p_hasModifyingCTE; + } + + qry->resultRelation = setTargetTable(pstate, stmt->relation, + stmt->relation->inh, + true, + ACL_UPDATE); + nsitem = pstate->p_target_nsitem; + + /* subqueries in FROM cannot access the result relation */ + nsitem->p_lateral_only = true; + nsitem->p_lateral_ok = false; + + /* + * the FROM clause is non-standard SQL syntax. We used to be able to do + * this with REPLACE in POSTQUEL so we keep the feature. + */ + transformFromClause(pstate, stmt->fromClause); + + /* remaining clauses can reference the result relation normally */ + nsitem->p_lateral_only = false; + nsitem->p_lateral_ok = true; + + qual = transformWhereClause(pstate, stmt->whereClause, + EXPR_KIND_WHERE, "WHERE"); + + qry->returningList = transformReturningList(pstate, stmt->returningList); + + /* + * Now we are done with SELECT-like processing, and can get on with + * transforming the target list to match the UPDATE target columns. + */ + qry->targetList = transformUpdateTargetList(pstate, stmt->targetList); + + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, qual); + + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasSubLinks = pstate->p_hasSubLinks; + + assign_query_collations(pstate, qry); + + return qry; +} + +/* + * transformUpdateTargetList - + * handle SET clause in UPDATE/INSERT ... ON CONFLICT UPDATE + */ +static List * +transformUpdateTargetList(ParseState *pstate, List *origTlist) +{ + List *tlist = NIL; + RangeTblEntry *target_rte; + ListCell *orig_tl; + ListCell *tl; + + tlist = transformTargetList(pstate, origTlist, + EXPR_KIND_UPDATE_SOURCE); + + /* Prepare to assign non-conflicting resnos to resjunk attributes */ + if (pstate->p_next_resno <= RelationGetNumberOfAttributes(pstate->p_target_relation)) + pstate->p_next_resno = RelationGetNumberOfAttributes(pstate->p_target_relation) + 1; + + /* Prepare non-junk columns for assignment to target table */ + target_rte = pstate->p_target_nsitem->p_rte; + orig_tl = list_head(origTlist); + + foreach(tl, tlist) + { + TargetEntry *tle = (TargetEntry *) lfirst(tl); + ResTarget *origTarget; + int attrno; + + if (tle->resjunk) + { + /* + * Resjunk nodes need no additional processing, but be sure they + * have resnos that do not match any target columns; else rewriter + * or planner might get confused. They don't need a resname + * either. + */ + tle->resno = (AttrNumber) pstate->p_next_resno++; + tle->resname = NULL; + continue; + } + if (orig_tl == NULL) + elog(ERROR, "UPDATE target count mismatch --- internal error"); + origTarget = lfirst_node(ResTarget, orig_tl); + + attrno = attnameAttNum(pstate->p_target_relation, + origTarget->name, true); + if (attrno == InvalidAttrNumber) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_COLUMN), + errmsg("column \"%s\" of relation \"%s\" does not exist", + origTarget->name, + RelationGetRelationName(pstate->p_target_relation)), + parser_errposition(pstate, origTarget->location))); + + updateTargetListEntry(pstate, tle, origTarget->name, + attrno, + origTarget->indirection, + origTarget->location); + + /* Mark the target column as requiring update permissions */ + target_rte->updatedCols = bms_add_member(target_rte->updatedCols, + attrno - FirstLowInvalidHeapAttributeNumber); + + orig_tl = lnext(origTlist, orig_tl); + } + if (orig_tl != NULL) + elog(ERROR, "UPDATE target count mismatch --- internal error"); + + return tlist; +} + +/* + * transformReturningList - + * handle a RETURNING clause in INSERT/UPDATE/DELETE + */ +static List * +transformReturningList(ParseState *pstate, List *returningList) +{ + List *rlist; + int save_next_resno; + + if (returningList == NIL) + return NIL; /* nothing to do */ + + /* + * We need to assign resnos starting at one in the RETURNING list. Save + * and restore the main tlist's value of p_next_resno, just in case + * someone looks at it later (probably won't happen). + */ + save_next_resno = pstate->p_next_resno; + pstate->p_next_resno = 1; + + /* transform RETURNING identically to a SELECT targetlist */ + rlist = transformTargetList(pstate, returningList, EXPR_KIND_RETURNING); + + /* + * Complain if the nonempty tlist expanded to nothing (which is possible + * if it contains only a star-expansion of a zero-column table). If we + * allow this, the parsed Query will look like it didn't have RETURNING, + * with results that would probably surprise the user. + */ + if (rlist == NIL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("RETURNING must have at least one column"), + parser_errposition(pstate, + exprLocation(linitial(returningList))))); + + /* mark column origins */ + markTargetListOrigins(pstate, rlist); + + /* resolve any still-unresolved output columns as being type text */ + if (pstate->p_resolve_unknowns) + resolveTargetListUnknowns(pstate, rlist); + + /* restore state */ + pstate->p_next_resno = save_next_resno; + + return rlist; +} + + +/* + * transformPLAssignStmt - + * transform a PL/pgSQL assignment statement + * + * If there is no opt_indirection, the transformed statement looks like + * "SELECT a_expr ...", except the expression has been cast to the type of + * the target. With indirection, it's still a SELECT, but the expression will + * incorporate FieldStore and/or assignment SubscriptingRef nodes to compute a + * new value for a container-type variable represented by the target. The + * expression references the target as the container source. + */ +static Query * +transformPLAssignStmt(ParseState *pstate, PLAssignStmt *stmt) +{ + Query *qry = makeNode(Query); + ColumnRef *cref = makeNode(ColumnRef); + List *indirection = stmt->indirection; + int nnames = stmt->nnames; + SelectStmt *sstmt = stmt->val; + Node *target; + Oid targettype; + int32 targettypmod; + Oid targetcollation; + List *tlist; + TargetEntry *tle; + Oid type_id; + Node *qual; + ListCell *l; + + /* + * First, construct a ColumnRef for the target variable. If the target + * has more than one dotted name, we have to pull the extra names out of + * the indirection list. + */ + cref->fields = list_make1(makeString(stmt->name)); + cref->location = stmt->location; + if (nnames > 1) + { + /* avoid munging the raw parsetree */ + indirection = list_copy(indirection); + while (--nnames > 0 && indirection != NIL) + { + Node *ind = (Node *) linitial(indirection); + + if (!IsA(ind, String)) + elog(ERROR, "invalid name count in PLAssignStmt"); + cref->fields = lappend(cref->fields, ind); + indirection = list_delete_first(indirection); + } + } + + /* + * Transform the target reference. Typically we will get back a Param + * node, but there's no reason to be too picky about its type. + */ + target = transformExpr(pstate, (Node *) cref, + EXPR_KIND_UPDATE_TARGET); + targettype = exprType(target); + targettypmod = exprTypmod(target); + targetcollation = exprCollation(target); + + /* + * The rest mostly matches transformSelectStmt, except that we needn't + * consider WITH or INTO, and we build a targetlist our own way. + */ + qry->commandType = CMD_SELECT; + pstate->p_is_insert = false; + + /* make FOR UPDATE/FOR SHARE info available to addRangeTableEntry */ + pstate->p_locking_clause = sstmt->lockingClause; + + /* make WINDOW info available for window functions, too */ + pstate->p_windowdefs = sstmt->windowClause; + + /* process the FROM clause */ + transformFromClause(pstate, sstmt->fromClause); + + /* initially transform the targetlist as if in SELECT */ + tlist = transformTargetList(pstate, sstmt->targetList, + EXPR_KIND_SELECT_TARGET); + + /* we should have exactly one targetlist item */ + if (list_length(tlist) != 1) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg_plural("assignment source returned %d column", + "assignment source returned %d columns", + list_length(tlist), + list_length(tlist)))); + + tle = linitial_node(TargetEntry, tlist); + + /* + * This next bit is similar to transformAssignedExpr; the key difference + * is we use COERCION_PLPGSQL not COERCION_ASSIGNMENT. + */ + type_id = exprType((Node *) tle->expr); + + pstate->p_expr_kind = EXPR_KIND_UPDATE_TARGET; + + if (indirection) + { + tle->expr = (Expr *) + transformAssignmentIndirection(pstate, + target, + stmt->name, + false, + targettype, + targettypmod, + targetcollation, + indirection, + list_head(indirection), + (Node *) tle->expr, + COERCION_PLPGSQL, + exprLocation(target)); + } + else if (targettype != type_id && + (targettype == RECORDOID || ISCOMPLEX(targettype)) && + (type_id == RECORDOID || ISCOMPLEX(type_id))) + { + /* + * Hack: do not let coerce_to_target_type() deal with inconsistent + * composite types. Just pass the expression result through as-is, + * and let the PL/pgSQL executor do the conversion its way. This is + * rather bogus, but it's needed for backwards compatibility. + */ + } + else + { + /* + * For normal non-qualified target column, do type checking and + * coercion. + */ + Node *orig_expr = (Node *) tle->expr; + + tle->expr = (Expr *) + coerce_to_target_type(pstate, + orig_expr, type_id, + targettype, targettypmod, + COERCION_PLPGSQL, + COERCE_IMPLICIT_CAST, + -1); + /* With COERCION_PLPGSQL, this error is probably unreachable */ + if (tle->expr == NULL) + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("variable \"%s\" is of type %s" + " but expression is of type %s", + stmt->name, + format_type_be(targettype), + format_type_be(type_id)), + errhint("You will need to rewrite or cast the expression."), + parser_errposition(pstate, exprLocation(orig_expr)))); + } + + pstate->p_expr_kind = EXPR_KIND_NONE; + + qry->targetList = list_make1(tle); + + /* transform WHERE */ + qual = transformWhereClause(pstate, sstmt->whereClause, + EXPR_KIND_WHERE, "WHERE"); + + /* initial processing of HAVING clause is much like WHERE clause */ + qry->havingQual = transformWhereClause(pstate, sstmt->havingClause, + EXPR_KIND_HAVING, "HAVING"); + + /* + * Transform sorting/grouping stuff. Do ORDER BY first because both + * transformGroupClause and transformDistinctClause need the results. Note + * that these functions can also change the targetList, so it's passed to + * them by reference. + */ + qry->sortClause = transformSortClause(pstate, + sstmt->sortClause, + &qry->targetList, + EXPR_KIND_ORDER_BY, + false /* allow SQL92 rules */ ); + + qry->groupClause = transformGroupClause(pstate, + sstmt->groupClause, + &qry->groupingSets, + &qry->targetList, + qry->sortClause, + EXPR_KIND_GROUP_BY, + false /* allow SQL92 rules */ ); + + if (sstmt->distinctClause == NIL) + { + qry->distinctClause = NIL; + qry->hasDistinctOn = false; + } + else if (linitial(sstmt->distinctClause) == NULL) + { + /* We had SELECT DISTINCT */ + qry->distinctClause = transformDistinctClause(pstate, + &qry->targetList, + qry->sortClause, + false); + qry->hasDistinctOn = false; + } + else + { + /* We had SELECT DISTINCT ON */ + qry->distinctClause = transformDistinctOnClause(pstate, + sstmt->distinctClause, + &qry->targetList, + qry->sortClause); + qry->hasDistinctOn = true; + } + + /* transform LIMIT */ + qry->limitOffset = transformLimitClause(pstate, sstmt->limitOffset, + EXPR_KIND_OFFSET, "OFFSET", + sstmt->limitOption); + qry->limitCount = transformLimitClause(pstate, sstmt->limitCount, + EXPR_KIND_LIMIT, "LIMIT", + sstmt->limitOption); + qry->limitOption = sstmt->limitOption; + + /* transform window clauses after we have seen all window functions */ + qry->windowClause = transformWindowDefinitions(pstate, + pstate->p_windowdefs, + &qry->targetList); + + qry->rtable = pstate->p_rtable; + qry->jointree = makeFromExpr(pstate->p_joinlist, qual); + + qry->hasSubLinks = pstate->p_hasSubLinks; + qry->hasWindowFuncs = pstate->p_hasWindowFuncs; + qry->hasTargetSRFs = pstate->p_hasTargetSRFs; + qry->hasAggs = pstate->p_hasAggs; + + foreach(l, sstmt->lockingClause) + { + transformLockingClause(pstate, qry, + (LockingClause *) lfirst(l), false); + } + + assign_query_collations(pstate, qry); + + /* this must be done after collations, for reliable comparison of exprs */ + if (pstate->p_hasAggs || qry->groupClause || qry->groupingSets || qry->havingQual) + parseCheckAggregates(pstate, qry); + + return qry; +} + + +/* + * transformDeclareCursorStmt - + * transform a DECLARE CURSOR Statement + * + * DECLARE CURSOR is like other utility statements in that we emit it as a + * CMD_UTILITY Query node; however, we must first transform the contained + * query. We used to postpone that until execution, but it's really necessary + * to do it during the normal parse analysis phase to ensure that side effects + * of parser hooks happen at the expected time. + */ +static Query * +transformDeclareCursorStmt(ParseState *pstate, DeclareCursorStmt *stmt) +{ + Query *result; + Query *query; + + if ((stmt->options & CURSOR_OPT_SCROLL) && + (stmt->options & CURSOR_OPT_NO_SCROLL)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), + /* translator: %s is a SQL keyword */ + errmsg("cannot specify both %s and %s", + "SCROLL", "NO SCROLL"))); + + if ((stmt->options & CURSOR_OPT_ASENSITIVE) && + (stmt->options & CURSOR_OPT_INSENSITIVE)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), + /* translator: %s is a SQL keyword */ + errmsg("cannot specify both %s and %s", + "ASENSITIVE", "INSENSITIVE"))); + + /* Transform contained query, not allowing SELECT INTO */ + query = transformStmt(pstate, stmt->query); + stmt->query = (Node *) query; + + /* Grammar should not have allowed anything but SELECT */ + if (!IsA(query, Query) || + query->commandType != CMD_SELECT) + elog(ERROR, "unexpected non-SELECT command in DECLARE CURSOR"); + + /* + * We also disallow data-modifying WITH in a cursor. (This could be + * allowed, but the semantics of when the updates occur might be + * surprising.) + */ + if (query->hasModifyingCTE) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("DECLARE CURSOR must not contain data-modifying statements in WITH"))); + + /* FOR UPDATE and WITH HOLD are not compatible */ + if (query->rowMarks != NIL && (stmt->options & CURSOR_OPT_HOLD)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("DECLARE CURSOR WITH HOLD ... %s is not supported", + LCS_asString(((RowMarkClause *) + linitial(query->rowMarks))->strength)), + errdetail("Holdable cursors must be READ ONLY."))); + + /* FOR UPDATE and SCROLL are not compatible */ + if (query->rowMarks != NIL && (stmt->options & CURSOR_OPT_SCROLL)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("DECLARE SCROLL CURSOR ... %s is not supported", + LCS_asString(((RowMarkClause *) + linitial(query->rowMarks))->strength)), + errdetail("Scrollable cursors must be READ ONLY."))); + + /* FOR UPDATE and INSENSITIVE are not compatible */ + if (query->rowMarks != NIL && (stmt->options & CURSOR_OPT_INSENSITIVE)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_CURSOR_DEFINITION), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("DECLARE INSENSITIVE CURSOR ... %s is not valid", + LCS_asString(((RowMarkClause *) + linitial(query->rowMarks))->strength)), + errdetail("Insensitive cursors must be READ ONLY."))); + + /* represent the command as a utility Query */ + result = makeNode(Query); + result->commandType = CMD_UTILITY; + result->utilityStmt = (Node *) stmt; + + return result; +} + + +/* + * transformExplainStmt - + * transform an EXPLAIN Statement + * + * EXPLAIN is like other utility statements in that we emit it as a + * CMD_UTILITY Query node; however, we must first transform the contained + * query. We used to postpone that until execution, but it's really necessary + * to do it during the normal parse analysis phase to ensure that side effects + * of parser hooks happen at the expected time. + */ +static Query * +transformExplainStmt(ParseState *pstate, ExplainStmt *stmt) +{ + Query *result; + + /* transform contained query, allowing SELECT INTO */ + stmt->query = (Node *) transformOptionalSelectInto(pstate, stmt->query); + + /* represent the command as a utility Query */ + result = makeNode(Query); + result->commandType = CMD_UTILITY; + result->utilityStmt = (Node *) stmt; + + return result; +} + + +/* + * transformCreateTableAsStmt - + * transform a CREATE TABLE AS, SELECT ... INTO, or CREATE MATERIALIZED VIEW + * Statement + * + * As with DECLARE CURSOR and EXPLAIN, transform the contained statement now. + */ +static Query * +transformCreateTableAsStmt(ParseState *pstate, CreateTableAsStmt *stmt) +{ + Query *result; + Query *query; + + /* transform contained query, not allowing SELECT INTO */ + query = transformStmt(pstate, stmt->query); + stmt->query = (Node *) query; + + /* additional work needed for CREATE MATERIALIZED VIEW */ + if (stmt->objtype == OBJECT_MATVIEW) + { + /* + * Prohibit a data-modifying CTE in the query used to create a + * materialized view. It's not sufficiently clear what the user would + * want to happen if the MV is refreshed or incrementally maintained. + */ + if (query->hasModifyingCTE) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("materialized views must not use data-modifying statements in WITH"))); + + /* + * Check whether any temporary database objects are used in the + * creation query. It would be hard to refresh data or incrementally + * maintain it if a source disappeared. + */ + if (isQueryUsingTempRelation(query)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("materialized views must not use temporary tables or views"))); + + /* + * A materialized view would either need to save parameters for use in + * maintaining/loading the data or prohibit them entirely. The latter + * seems safer and more sane. + */ + if (query_contains_extern_params(query)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("materialized views may not be defined using bound parameters"))); + + /* + * For now, we disallow unlogged materialized views, because it seems + * like a bad idea for them to just go to empty after a crash. (If we + * could mark them as unpopulated, that would be better, but that + * requires catalog changes which crash recovery can't presently + * handle.) + */ + if (stmt->into->rel->relpersistence == RELPERSISTENCE_UNLOGGED) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("materialized views cannot be unlogged"))); + + /* + * At runtime, we'll need a copy of the parsed-but-not-rewritten Query + * for purposes of creating the view's ON SELECT rule. We stash that + * in the IntoClause because that's where intorel_startup() can + * conveniently get it from. + */ + stmt->into->viewQuery = (Node *) copyObject(query); + } + + /* represent the command as a utility Query */ + result = makeNode(Query); + result->commandType = CMD_UTILITY; + result->utilityStmt = (Node *) stmt; + + return result; +} + +/* + * transform a CallStmt + */ +static Query * +transformCallStmt(ParseState *pstate, CallStmt *stmt) +{ + List *targs; + ListCell *lc; + Node *node; + FuncExpr *fexpr; + HeapTuple proctup; + Datum proargmodes; + bool isNull; + List *outargs = NIL; + Query *result; + + /* + * First, do standard parse analysis on the procedure call and its + * arguments, allowing us to identify the called procedure. + */ + targs = NIL; + foreach(lc, stmt->funccall->args) + { + targs = lappend(targs, transformExpr(pstate, + (Node *) lfirst(lc), + EXPR_KIND_CALL_ARGUMENT)); + } + + node = ParseFuncOrColumn(pstate, + stmt->funccall->funcname, + targs, + pstate->p_last_srf, + stmt->funccall, + true, + stmt->funccall->location); + + assign_expr_collations(pstate, node); + + fexpr = castNode(FuncExpr, node); + + proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(fexpr->funcid)); + if (!HeapTupleIsValid(proctup)) + elog(ERROR, "cache lookup failed for function %u", fexpr->funcid); + + /* + * Expand the argument list to deal with named-argument notation and + * default arguments. For ordinary FuncExprs this'd be done during + * planning, but a CallStmt doesn't go through planning, and there seems + * no good reason not to do it here. + */ + fexpr->args = expand_function_arguments(fexpr->args, + true, + fexpr->funcresulttype, + proctup); + + /* Fetch proargmodes; if it's null, there are no output args */ + proargmodes = SysCacheGetAttr(PROCOID, proctup, + Anum_pg_proc_proargmodes, + &isNull); + if (!isNull) + { + /* + * Split the list into input arguments in fexpr->args and output + * arguments in stmt->outargs. INOUT arguments appear in both lists. + */ + ArrayType *arr; + int numargs; + char *argmodes; + List *inargs; + int i; + + arr = DatumGetArrayTypeP(proargmodes); /* ensure not toasted */ + numargs = list_length(fexpr->args); + if (ARR_NDIM(arr) != 1 || + ARR_DIMS(arr)[0] != numargs || + ARR_HASNULL(arr) || + ARR_ELEMTYPE(arr) != CHAROID) + elog(ERROR, "proargmodes is not a 1-D char array of length %d or it contains nulls", + numargs); + argmodes = (char *) ARR_DATA_PTR(arr); + + inargs = NIL; + i = 0; + foreach(lc, fexpr->args) + { + Node *n = lfirst(lc); + + switch (argmodes[i]) + { + case PROARGMODE_IN: + case PROARGMODE_VARIADIC: + inargs = lappend(inargs, n); + break; + case PROARGMODE_OUT: + outargs = lappend(outargs, n); + break; + case PROARGMODE_INOUT: + inargs = lappend(inargs, n); + outargs = lappend(outargs, copyObject(n)); + break; + default: + /* note we don't support PROARGMODE_TABLE */ + elog(ERROR, "invalid argmode %c for procedure", + argmodes[i]); + break; + } + i++; + } + fexpr->args = inargs; + } + + stmt->funcexpr = fexpr; + stmt->outargs = outargs; + + ReleaseSysCache(proctup); + + /* represent the command as a utility Query */ + result = makeNode(Query); + result->commandType = CMD_UTILITY; + result->utilityStmt = (Node *) stmt; + + return result; +} + +/* + * Produce a string representation of a LockClauseStrength value. + * This should only be applied to valid values (not LCS_NONE). + */ +const char * +LCS_asString(LockClauseStrength strength) +{ + switch (strength) + { + case LCS_NONE: + Assert(false); + break; + case LCS_FORKEYSHARE: + return "FOR KEY SHARE"; + case LCS_FORSHARE: + return "FOR SHARE"; + case LCS_FORNOKEYUPDATE: + return "FOR NO KEY UPDATE"; + case LCS_FORUPDATE: + return "FOR UPDATE"; + } + return "FOR some"; /* shouldn't happen */ +} + +/* + * Check for features that are not supported with FOR [KEY] UPDATE/SHARE. + * + * exported so planner can check again after rewriting, query pullup, etc + */ +void +CheckSelectLocking(Query *qry, LockClauseStrength strength) +{ + Assert(strength != LCS_NONE); /* else caller error */ + + if (qry->setOperations) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with UNION/INTERSECT/EXCEPT", + LCS_asString(strength)))); + if (qry->distinctClause != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with DISTINCT clause", + LCS_asString(strength)))); + if (qry->groupClause != NIL || qry->groupingSets != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with GROUP BY clause", + LCS_asString(strength)))); + if (qry->havingQual != NULL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with HAVING clause", + LCS_asString(strength)))); + if (qry->hasAggs) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with aggregate functions", + LCS_asString(strength)))); + if (qry->hasWindowFuncs) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with window functions", + LCS_asString(strength)))); + if (qry->hasTargetSRFs) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s is not allowed with set-returning functions in the target list", + LCS_asString(strength)))); +} + +/* + * Transform a FOR [KEY] UPDATE/SHARE clause + * + * This basically involves replacing names by integer relids. + * + * NB: if you need to change this, see also markQueryForLocking() + * in rewriteHandler.c, and isLockedRefname() in parse_relation.c. + */ +static void +transformLockingClause(ParseState *pstate, Query *qry, LockingClause *lc, + bool pushedDown) +{ + List *lockedRels = lc->lockedRels; + ListCell *l; + ListCell *rt; + Index i; + LockingClause *allrels; + + CheckSelectLocking(qry, lc->strength); + + /* make a clause we can pass down to subqueries to select all rels */ + allrels = makeNode(LockingClause); + allrels->lockedRels = NIL; /* indicates all rels */ + allrels->strength = lc->strength; + allrels->waitPolicy = lc->waitPolicy; + + if (lockedRels == NIL) + { + /* + * Lock all regular tables used in query and its subqueries. We + * examine inFromCl to exclude auto-added RTEs, particularly NEW/OLD + * in rules. This is a bit of an abuse of a mostly-obsolete flag, but + * it's convenient. We can't rely on the namespace mechanism that has + * largely replaced inFromCl, since for example we need to lock + * base-relation RTEs even if they are masked by upper joins. + */ + i = 0; + foreach(rt, qry->rtable) + { + RangeTblEntry *rte = (RangeTblEntry *) lfirst(rt); + + ++i; + if (!rte->inFromCl) + continue; + switch (rte->rtekind) + { + case RTE_RELATION: + applyLockingClause(qry, i, lc->strength, lc->waitPolicy, + pushedDown); + rte->requiredPerms |= ACL_SELECT_FOR_UPDATE; + break; + case RTE_SUBQUERY: + applyLockingClause(qry, i, lc->strength, lc->waitPolicy, + pushedDown); + + /* + * FOR UPDATE/SHARE of subquery is propagated to all of + * subquery's rels, too. We could do this later (based on + * the marking of the subquery RTE) but it is convenient + * to have local knowledge in each query level about which + * rels need to be opened with RowShareLock. + */ + transformLockingClause(pstate, rte->subquery, + allrels, true); + break; + default: + /* ignore JOIN, SPECIAL, FUNCTION, VALUES, CTE RTEs */ + break; + } + } + } + else + { + /* + * Lock just the named tables. As above, we allow locking any base + * relation regardless of alias-visibility rules, so we need to + * examine inFromCl to exclude OLD/NEW. + */ + foreach(l, lockedRels) + { + RangeVar *thisrel = (RangeVar *) lfirst(l); + + /* For simplicity we insist on unqualified alias names here */ + if (thisrel->catalogname || thisrel->schemaname) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s must specify unqualified relation names", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + + i = 0; + foreach(rt, qry->rtable) + { + RangeTblEntry *rte = (RangeTblEntry *) lfirst(rt); + char *rtename; + + ++i; + if (!rte->inFromCl) + continue; + + /* + * A join RTE without an alias is not visible as a relation + * name and needs to be skipped (otherwise it might hide a + * base relation with the same name), except if it has a USING + * alias, which *is* visible. + */ + if (rte->rtekind == RTE_JOIN && rte->alias == NULL) + { + if (rte->join_using_alias == NULL) + continue; + rtename = rte->join_using_alias->aliasname; + } + else + rtename = rte->eref->aliasname; + + if (strcmp(rtename, thisrel->relname) == 0) + { + switch (rte->rtekind) + { + case RTE_RELATION: + applyLockingClause(qry, i, lc->strength, + lc->waitPolicy, pushedDown); + rte->requiredPerms |= ACL_SELECT_FOR_UPDATE; + break; + case RTE_SUBQUERY: + applyLockingClause(qry, i, lc->strength, + lc->waitPolicy, pushedDown); + /* see comment above */ + transformLockingClause(pstate, rte->subquery, + allrels, true); + break; + case RTE_JOIN: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to a join", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + break; + case RTE_FUNCTION: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to a function", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + break; + case RTE_TABLEFUNC: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to a table function", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + break; + case RTE_VALUES: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to VALUES", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + break; + case RTE_CTE: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to a WITH query", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + break; + case RTE_NAMEDTUPLESTORE: + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("%s cannot be applied to a named tuplestore", + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + break; + + /* Shouldn't be possible to see RTE_RESULT here */ + + default: + elog(ERROR, "unrecognized RTE type: %d", + (int) rte->rtekind); + break; + } + break; /* out of foreach loop */ + } + } + if (rt == NULL) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_TABLE), + /*------ + translator: %s is a SQL row locking clause such as FOR UPDATE */ + errmsg("relation \"%s\" in %s clause not found in FROM clause", + thisrel->relname, + LCS_asString(lc->strength)), + parser_errposition(pstate, thisrel->location))); + } + } +} + +/* + * Record locking info for a single rangetable item + */ +void +applyLockingClause(Query *qry, Index rtindex, + LockClauseStrength strength, LockWaitPolicy waitPolicy, + bool pushedDown) +{ + RowMarkClause *rc; + + Assert(strength != LCS_NONE); /* else caller error */ + + /* If it's an explicit clause, make sure hasForUpdate gets set */ + if (!pushedDown) + qry->hasForUpdate = true; + + /* Check for pre-existing entry for same rtindex */ + if ((rc = get_parse_rowmark(qry, rtindex)) != NULL) + { + /* + * If the same RTE is specified with more than one locking strength, + * use the strongest. (Reasonable, since you can't take both a shared + * and exclusive lock at the same time; it'll end up being exclusive + * anyway.) + * + * Similarly, if the same RTE is specified with more than one lock + * wait policy, consider that NOWAIT wins over SKIP LOCKED, which in + * turn wins over waiting for the lock (the default). This is a bit + * more debatable but raising an error doesn't seem helpful. (Consider + * for instance SELECT FOR UPDATE NOWAIT from a view that internally + * contains a plain FOR UPDATE spec.) Having NOWAIT win over SKIP + * LOCKED is reasonable since the former throws an error in case of + * coming across a locked tuple, which may be undesirable in some + * cases but it seems better than silently returning inconsistent + * results. + * + * And of course pushedDown becomes false if any clause is explicit. + */ + rc->strength = Max(rc->strength, strength); + rc->waitPolicy = Max(rc->waitPolicy, waitPolicy); + rc->pushedDown &= pushedDown; + return; + } + + /* Make a new RowMarkClause */ + rc = makeNode(RowMarkClause); + rc->rti = rtindex; + rc->strength = strength; + rc->waitPolicy = waitPolicy; + rc->pushedDown = pushedDown; + qry->rowMarks = lappend(qry->rowMarks, rc); +} + +/* + * Coverage testing for raw_expression_tree_walker(). + * + * When enabled, we run raw_expression_tree_walker() over every DML statement + * submitted to parse analysis. Without this provision, that function is only + * applied in limited cases involving CTEs, and we don't really want to have + * to test everything inside as well as outside a CTE. + */ +#ifdef RAW_EXPRESSION_COVERAGE_TEST + +static bool +test_raw_expression_coverage(Node *node, void *context) +{ + if (node == NULL) + return false; + return raw_expression_tree_walker(node, + test_raw_expression_coverage, + context); +} + +#endif /* RAW_EXPRESSION_COVERAGE_TEST */ diff --git a/src/backend/parser/check_keywords.pl b/src/backend/parser/check_keywords.pl new file mode 100644 index 0000000..598f3d2 --- /dev/null +++ b/src/backend/parser/check_keywords.pl @@ -0,0 +1,281 @@ +#!/usr/bin/perl + +# Check that the keyword lists in gram.y and kwlist.h are sane. +# Usage: check_keywords.pl gram.y kwlist.h + +# src/backend/parser/check_keywords.pl +# Copyright (c) 2009-2021, PostgreSQL Global Development Group + +use strict; +use warnings; + +my $gram_filename = $ARGV[0]; +my $kwlist_filename = $ARGV[1]; + +my $errors = 0; + +sub error +{ + print STDERR @_; + $errors = 1; + return; +} + +# Check alphabetical order of a set of keyword symbols +# (note these are NOT the actual keyword strings) +sub check_alphabetical_order +{ + my ($listname, $list) = @_; + my $prevkword = ''; + + foreach my $kword (@$list) + { + # Some symbols have a _P suffix. Remove it for the comparison. + my $bare_kword = $kword; + $bare_kword =~ s/_P$//; + if ($bare_kword le $prevkword) + { + error + "'$bare_kword' after '$prevkword' in $listname list is misplaced"; + } + $prevkword = $bare_kword; + } + return; +} + +$, = ' '; # set output field separator +$\ = "\n"; # set output record separator + +my %keyword_categories; +$keyword_categories{'unreserved_keyword'} = 'UNRESERVED_KEYWORD'; +$keyword_categories{'col_name_keyword'} = 'COL_NAME_KEYWORD'; +$keyword_categories{'type_func_name_keyword'} = 'TYPE_FUNC_NAME_KEYWORD'; +$keyword_categories{'reserved_keyword'} = 'RESERVED_KEYWORD'; + +open(my $gram, '<', $gram_filename) || die("Could not open : $gram_filename"); + +my $kcat; +my $in_bare_labels; +my $comment; +my @arr; +my %keywords; +my @bare_label_keywords; + +line: while (my $S = <$gram>) +{ + chomp $S; # strip record separator + + my $s; + + # Make sure any braces are split + $s = '{', $S =~ s/$s/ { /g; + $s = '}', $S =~ s/$s/ } /g; + + # Any comments are split + $s = '[/][*]', $S =~ s#$s# /* #g; + $s = '[*][/]', $S =~ s#$s# */ #g; + + if (!($kcat) && !($in_bare_labels)) + { + + # Is this the beginning of a keyword list? + foreach my $k (keys %keyword_categories) + { + if ($S =~ m/^($k):/) + { + $kcat = $k; + next line; + } + } + + # Is this the beginning of the bare_label_keyword list? + $in_bare_labels = 1 if ($S =~ m/^bare_label_keyword:/); + + next line; + } + + # Now split the line into individual fields + my $n = (@arr = split(' ', $S)); + + # Ok, we're in a keyword list. Go through each field in turn + for (my $fieldIndexer = 0; $fieldIndexer < $n; $fieldIndexer++) + { + if ($arr[$fieldIndexer] eq '*/' && $comment) + { + $comment = 0; + next; + } + elsif ($comment) + { + next; + } + elsif ($arr[$fieldIndexer] eq '/*') + { + + # start of a multiline comment + $comment = 1; + next; + } + elsif ($arr[$fieldIndexer] eq '//') + { + next line; + } + + if ($arr[$fieldIndexer] eq ';') + { + + # end of keyword list + undef $kcat; + undef $in_bare_labels; + next; + } + + if ($arr[$fieldIndexer] eq '|') + { + next; + } + + # Put this keyword into the right list + if ($in_bare_labels) + { + push @bare_label_keywords, $arr[$fieldIndexer]; + } + else + { + push @{ $keywords{$kcat} }, $arr[$fieldIndexer]; + } + } +} +close $gram; + +# Check that each keyword list is in alphabetical order (just for neatnik-ism) +check_alphabetical_order($_, $keywords{$_}) for (keys %keyword_categories); +check_alphabetical_order('bare_label_keyword', \@bare_label_keywords); + +# Transform the keyword lists into hashes. +# kwhashes is a hash of hashes, keyed by keyword category id, +# e.g. UNRESERVED_KEYWORD. +# Each inner hash is keyed by keyword id, e.g. ABORT_P, with a dummy value. +my %kwhashes; +while (my ($kcat, $kcat_id) = each(%keyword_categories)) +{ + @arr = @{ $keywords{$kcat} }; + + my $hash; + foreach my $item (@arr) { $hash->{$item} = 1; } + + $kwhashes{$kcat_id} = $hash; +} +my %bare_label_keywords = map { $_ => 1 } @bare_label_keywords; + +# Now read in kwlist.h + +open(my $kwlist, '<', $kwlist_filename) + || die("Could not open : $kwlist_filename"); + +my $prevkwstring = ''; +my $bare_kwname; +my %kwhash; +kwlist_line: while (<$kwlist>) +{ + my ($line) = $_; + + if ($line =~ /^PG_KEYWORD\(\"(.*)\", (.*), (.*), (.*)\)/) + { + my ($kwstring) = $1; + my ($kwname) = $2; + my ($kwcat_id) = $3; + my ($collabel) = $4; + + # Check that the list is in alphabetical order (critical!) + if ($kwstring le $prevkwstring) + { + error + "'$kwstring' after '$prevkwstring' in kwlist.h is misplaced"; + } + $prevkwstring = $kwstring; + + # Check that the keyword string is valid: all lower-case ASCII chars + if ($kwstring !~ /^[a-z_]+$/) + { + error + "'$kwstring' is not a valid keyword string, must be all lower-case ASCII chars"; + } + + # Check that the keyword name is valid: all upper-case ASCII chars + if ($kwname !~ /^[A-Z_]+$/) + { + error + "'$kwname' is not a valid keyword name, must be all upper-case ASCII chars"; + } + + # Check that the keyword string matches keyword name + $bare_kwname = $kwname; + $bare_kwname =~ s/_P$//; + if ($bare_kwname ne uc($kwstring)) + { + error + "keyword name '$kwname' doesn't match keyword string '$kwstring'"; + } + + # Check that the keyword is present in the right category list + %kwhash = %{ $kwhashes{$kwcat_id} }; + + if (!(%kwhash)) + { + error "Unknown keyword category: $kwcat_id"; + } + else + { + if (!($kwhash{$kwname})) + { + error "'$kwname' not present in $kwcat_id section of gram.y"; + } + else + { + + # Remove it from the hash, so that we can + # complain at the end if there's keywords left + # that were not found in kwlist.h + delete $kwhashes{$kwcat_id}->{$kwname}; + } + } + + # Check that the keyword's collabel property matches gram.y + if ($collabel eq 'BARE_LABEL') + { + unless ($bare_label_keywords{$kwname}) + { + error + "'$kwname' is marked as BARE_LABEL in kwlist.h, but it is missing from gram.y's bare_label_keyword rule"; + } + } + elsif ($collabel eq 'AS_LABEL') + { + if ($bare_label_keywords{$kwname}) + { + error + "'$kwname' is marked as AS_LABEL in kwlist.h, but it is listed in gram.y's bare_label_keyword rule"; + } + } + else + { + error + "'$collabel' not recognized in kwlist.h. Expected either 'BARE_LABEL' or 'AS_LABEL'"; + } + } +} +close $kwlist; + +# Check that we've paired up all keywords from gram.y with lines in kwlist.h +while (my ($kwcat, $kwcat_id) = each(%keyword_categories)) +{ + %kwhash = %{ $kwhashes{$kwcat_id} }; + + for my $kw (keys %kwhash) + { + error "'$kw' found in gram.y $kwcat category, but not in kwlist.h"; + } +} + +exit $errors; diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c new file mode 100644 index 0000000..4d624ab --- /dev/null +++ b/src/backend/parser/gram.c @@ -0,0 +1,48439 @@ +/* A Bison parser, made by GNU Bison 3.7.5. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output, and Bison version. */ +#define YYBISON 30705 + +/* Bison version string. */ +#define YYBISON_VERSION "3.7.5" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +/* Substitute the variable and function names. */ +#define yyparse base_yyparse +#define yylex base_yylex +#define yyerror base_yyerror +#define yydebug base_yydebug +#define yynerrs base_yynerrs + +/* First part of user prologue. */ +#line 1 "gram.y" + + +/*#define YYDEBUG 1*/ +/*------------------------------------------------------------------------- + * + * gram.y + * POSTGRESQL BISON rules/actions + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/parser/gram.y + * + * HISTORY + * AUTHOR DATE MAJOR EVENT + * Andrew Yu Sept, 1994 POSTQUEL to SQL conversion + * Andrew Yu Oct, 1994 lispy code conversion + * + * NOTES + * CAPITALS are used to represent terminal symbols. + * non-capitals are used to represent non-terminals. + * + * In general, nothing in this file should initiate database accesses + * nor depend on changeable state (such as SET variables). If you do + * database accesses, your code will fail when we have aborted the + * current transaction and are just parsing commands to find the next + * ROLLBACK or COMMIT. If you make use of SET variables, then you + * will do the wrong thing in multi-query strings like this: + * SET constraint_exclusion TO off; SELECT * FROM foo; + * because the entire string is parsed by gram.y before the SET gets + * executed. Anything that depends on the database or changeable state + * should be handled during parse analysis so that it happens at the + * right time not the wrong time. + * + * WARNINGS + * If you use a list, make sure the datum is a node so that the printing + * routines work. + * + * Sometimes we assign constants to makeStrings. Make sure we don't free + * those. + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include +#include + +#include "access/tableam.h" +#include "catalog/index.h" +#include "catalog/namespace.h" +#include "catalog/pg_am.h" +#include "catalog/pg_trigger.h" +#include "commands/defrem.h" +#include "commands/trigger.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "parser/gramparse.h" +#include "parser/parser.h" +#include "storage/lmgr.h" +#include "utils/date.h" +#include "utils/datetime.h" +#include "utils/numeric.h" +#include "utils/xml.h" + + +/* + * Location tracking support --- simpler than bison's default, since we only + * want to track the start position not the end position of each nonterminal. + */ +#define YYLLOC_DEFAULT(Current, Rhs, N) \ + do { \ + if ((N) > 0) \ + (Current) = (Rhs)[1]; \ + else \ + (Current) = (-1); \ + } while (0) + +/* + * The above macro assigns -1 (unknown) as the parse location of any + * nonterminal that was reduced from an empty rule, or whose leftmost + * component was reduced from an empty rule. This is problematic + * for nonterminals defined like + * OptFooList: / * EMPTY * / { ... } | OptFooList Foo { ... } ; + * because we'll set -1 as the location during the first reduction and then + * copy it during each subsequent reduction, leaving us with -1 for the + * location even when the list is not empty. To fix that, do this in the + * action for the nonempty rule(s): + * if (@$ < 0) @$ = @2; + * (Although we have many nonterminals that follow this pattern, we only + * bother with fixing @$ like this when the nonterminal's parse location + * is actually referenced in some rule.) + * + * A cleaner answer would be to make YYLLOC_DEFAULT scan all the Rhs + * locations until it's found one that's not -1. Then we'd get a correct + * location for any nonterminal that isn't entirely empty. But this way + * would add overhead to every rule reduction, and so far there's not been + * a compelling reason to pay that overhead. + */ + +/* + * Bison doesn't allocate anything that needs to live across parser calls, + * so we can easily have it use palloc instead of malloc. This prevents + * memory leaks if we error out during parsing. Note this only works with + * bison >= 2.0. However, in bison 1.875 the default is to use alloca() + * if possible, so there's not really much problem anyhow, at least if + * you're building with gcc. + */ +#define YYMALLOC palloc +#define YYFREE pfree + +/* Private struct for the result of privilege_target production */ +typedef struct PrivTarget +{ + GrantTargetType targtype; + ObjectType objtype; + List *objs; +} PrivTarget; + +/* Private struct for the result of import_qualification production */ +typedef struct ImportQual +{ + ImportForeignSchemaType type; + List *table_names; +} ImportQual; + +/* Private struct for the result of opt_select_limit production */ +typedef struct SelectLimit +{ + Node *limitOffset; + Node *limitCount; + LimitOption limitOption; +} SelectLimit; + +/* Private struct for the result of group_clause production */ +typedef struct GroupClause +{ + bool distinct; + List *list; +} GroupClause; + +/* ConstraintAttributeSpec yields an integer bitmask of these flags: */ +#define CAS_NOT_DEFERRABLE 0x01 +#define CAS_DEFERRABLE 0x02 +#define CAS_INITIALLY_IMMEDIATE 0x04 +#define CAS_INITIALLY_DEFERRED 0x08 +#define CAS_NOT_VALID 0x10 +#define CAS_NO_INHERIT 0x20 + + +#define parser_yyerror(msg) scanner_yyerror(msg, yyscanner) +#define parser_errposition(pos) scanner_errposition(pos, yyscanner) + +static void base_yyerror(YYLTYPE *yylloc, core_yyscan_t yyscanner, + const char *msg); +static RawStmt *makeRawStmt(Node *stmt, int stmt_location); +static void updateRawStmtEnd(RawStmt *rs, int end_location); +static Node *makeColumnRef(char *colname, List *indirection, + int location, core_yyscan_t yyscanner); +static Node *makeTypeCast(Node *arg, TypeName *typename, int location); +static Node *makeStringConst(char *str, int location); +static Node *makeStringConstCast(char *str, int location, TypeName *typename); +static Node *makeIntConst(int val, int location); +static Node *makeFloatConst(char *str, int location); +static Node *makeBitStringConst(char *str, int location); +static Node *makeNullAConst(int location); +static Node *makeAConst(Value *v, int location); +static Node *makeBoolAConst(bool state, int location); +static RoleSpec *makeRoleSpec(RoleSpecType type, int location); +static void check_qualified_name(List *names, core_yyscan_t yyscanner); +static List *check_func_name(List *names, core_yyscan_t yyscanner); +static List *check_indirection(List *indirection, core_yyscan_t yyscanner); +static List *extractArgTypes(List *parameters); +static List *extractAggrArgTypes(List *aggrargs); +static List *makeOrderedSetArgs(List *directargs, List *orderedargs, + core_yyscan_t yyscanner); +static void insertSelectOptions(SelectStmt *stmt, + List *sortClause, List *lockingClause, + SelectLimit *limitClause, + WithClause *withClause, + core_yyscan_t yyscanner); +static Node *makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg); +static Node *doNegate(Node *n, int location); +static void doNegateFloat(Value *v); +static Node *makeAndExpr(Node *lexpr, Node *rexpr, int location); +static Node *makeOrExpr(Node *lexpr, Node *rexpr, int location); +static Node *makeNotExpr(Node *expr, int location); +static Node *makeAArrayExpr(List *elements, int location); +static Node *makeSQLValueFunction(SQLValueFunctionOp op, int32 typmod, + int location); +static Node *makeXmlExpr(XmlExprOp op, char *name, List *named_args, + List *args, int location); +static List *mergeTableFuncParameters(List *func_args, List *columns); +static TypeName *TableFuncTypeName(List *columns); +static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_t yyscanner); +static void SplitColQualList(List *qualList, + List **constraintList, CollateClause **collClause, + core_yyscan_t yyscanner); +static void processCASbits(int cas_bits, int location, const char *constrType, + bool *deferrable, bool *initdeferred, bool *not_valid, + bool *no_inherit, core_yyscan_t yyscanner); +static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); + + +#line 283 "gram.c" + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif + +#include "gram.h" +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_IDENT = 3, /* IDENT */ + YYSYMBOL_UIDENT = 4, /* UIDENT */ + YYSYMBOL_FCONST = 5, /* FCONST */ + YYSYMBOL_SCONST = 6, /* SCONST */ + YYSYMBOL_USCONST = 7, /* USCONST */ + YYSYMBOL_BCONST = 8, /* BCONST */ + YYSYMBOL_XCONST = 9, /* XCONST */ + YYSYMBOL_Op = 10, /* Op */ + YYSYMBOL_ICONST = 11, /* ICONST */ + YYSYMBOL_PARAM = 12, /* PARAM */ + YYSYMBOL_TYPECAST = 13, /* TYPECAST */ + YYSYMBOL_DOT_DOT = 14, /* DOT_DOT */ + YYSYMBOL_COLON_EQUALS = 15, /* COLON_EQUALS */ + YYSYMBOL_EQUALS_GREATER = 16, /* EQUALS_GREATER */ + YYSYMBOL_LESS_EQUALS = 17, /* LESS_EQUALS */ + YYSYMBOL_GREATER_EQUALS = 18, /* GREATER_EQUALS */ + YYSYMBOL_NOT_EQUALS = 19, /* NOT_EQUALS */ + YYSYMBOL_ABORT_P = 20, /* ABORT_P */ + YYSYMBOL_ABSOLUTE_P = 21, /* ABSOLUTE_P */ + YYSYMBOL_ACCESS = 22, /* ACCESS */ + YYSYMBOL_ACTION = 23, /* ACTION */ + YYSYMBOL_ADD_P = 24, /* ADD_P */ + YYSYMBOL_ADMIN = 25, /* ADMIN */ + YYSYMBOL_AFTER = 26, /* AFTER */ + YYSYMBOL_AGGREGATE = 27, /* AGGREGATE */ + YYSYMBOL_ALL = 28, /* ALL */ + YYSYMBOL_ALSO = 29, /* ALSO */ + YYSYMBOL_ALTER = 30, /* ALTER */ + YYSYMBOL_ALWAYS = 31, /* ALWAYS */ + YYSYMBOL_ANALYSE = 32, /* ANALYSE */ + YYSYMBOL_ANALYZE = 33, /* ANALYZE */ + YYSYMBOL_AND = 34, /* AND */ + YYSYMBOL_ANY = 35, /* ANY */ + YYSYMBOL_ARRAY = 36, /* ARRAY */ + YYSYMBOL_AS = 37, /* AS */ + YYSYMBOL_ASC = 38, /* ASC */ + YYSYMBOL_ASENSITIVE = 39, /* ASENSITIVE */ + YYSYMBOL_ASSERTION = 40, /* ASSERTION */ + YYSYMBOL_ASSIGNMENT = 41, /* ASSIGNMENT */ + YYSYMBOL_ASYMMETRIC = 42, /* ASYMMETRIC */ + YYSYMBOL_ATOMIC = 43, /* ATOMIC */ + YYSYMBOL_AT = 44, /* AT */ + YYSYMBOL_ATTACH = 45, /* ATTACH */ + YYSYMBOL_ATTRIBUTE = 46, /* ATTRIBUTE */ + YYSYMBOL_AUTHORIZATION = 47, /* AUTHORIZATION */ + YYSYMBOL_BACKWARD = 48, /* BACKWARD */ + YYSYMBOL_BEFORE = 49, /* BEFORE */ + YYSYMBOL_BEGIN_P = 50, /* BEGIN_P */ + YYSYMBOL_BETWEEN = 51, /* BETWEEN */ + YYSYMBOL_BIGINT = 52, /* BIGINT */ + YYSYMBOL_BINARY = 53, /* BINARY */ + YYSYMBOL_BIT = 54, /* BIT */ + YYSYMBOL_BOOLEAN_P = 55, /* BOOLEAN_P */ + YYSYMBOL_BOTH = 56, /* BOTH */ + YYSYMBOL_BREADTH = 57, /* BREADTH */ + YYSYMBOL_BY = 58, /* BY */ + YYSYMBOL_CACHE = 59, /* CACHE */ + YYSYMBOL_CALL = 60, /* CALL */ + YYSYMBOL_CALLED = 61, /* CALLED */ + YYSYMBOL_CASCADE = 62, /* CASCADE */ + YYSYMBOL_CASCADED = 63, /* CASCADED */ + YYSYMBOL_CASE = 64, /* CASE */ + YYSYMBOL_CAST = 65, /* CAST */ + YYSYMBOL_CATALOG_P = 66, /* CATALOG_P */ + YYSYMBOL_CHAIN = 67, /* CHAIN */ + YYSYMBOL_CHAR_P = 68, /* CHAR_P */ + YYSYMBOL_CHARACTER = 69, /* CHARACTER */ + YYSYMBOL_CHARACTERISTICS = 70, /* CHARACTERISTICS */ + YYSYMBOL_CHECK = 71, /* CHECK */ + YYSYMBOL_CHECKPOINT = 72, /* CHECKPOINT */ + YYSYMBOL_CLASS = 73, /* CLASS */ + YYSYMBOL_CLOSE = 74, /* CLOSE */ + YYSYMBOL_CLUSTER = 75, /* CLUSTER */ + YYSYMBOL_COALESCE = 76, /* COALESCE */ + YYSYMBOL_COLLATE = 77, /* COLLATE */ + YYSYMBOL_COLLATION = 78, /* COLLATION */ + YYSYMBOL_COLUMN = 79, /* COLUMN */ + YYSYMBOL_COLUMNS = 80, /* COLUMNS */ + YYSYMBOL_COMMENT = 81, /* COMMENT */ + YYSYMBOL_COMMENTS = 82, /* COMMENTS */ + YYSYMBOL_COMMIT = 83, /* COMMIT */ + YYSYMBOL_COMMITTED = 84, /* COMMITTED */ + YYSYMBOL_COMPRESSION = 85, /* COMPRESSION */ + YYSYMBOL_CONCURRENTLY = 86, /* CONCURRENTLY */ + YYSYMBOL_CONFIGURATION = 87, /* CONFIGURATION */ + YYSYMBOL_CONFLICT = 88, /* CONFLICT */ + YYSYMBOL_CONNECTION = 89, /* CONNECTION */ + YYSYMBOL_CONSTRAINT = 90, /* CONSTRAINT */ + YYSYMBOL_CONSTRAINTS = 91, /* CONSTRAINTS */ + YYSYMBOL_CONTENT_P = 92, /* CONTENT_P */ + YYSYMBOL_CONTINUE_P = 93, /* CONTINUE_P */ + YYSYMBOL_CONVERSION_P = 94, /* CONVERSION_P */ + YYSYMBOL_COPY = 95, /* COPY */ + YYSYMBOL_COST = 96, /* COST */ + YYSYMBOL_CREATE = 97, /* CREATE */ + YYSYMBOL_CROSS = 98, /* CROSS */ + YYSYMBOL_CSV = 99, /* CSV */ + YYSYMBOL_CUBE = 100, /* CUBE */ + YYSYMBOL_CURRENT_P = 101, /* CURRENT_P */ + YYSYMBOL_CURRENT_CATALOG = 102, /* CURRENT_CATALOG */ + YYSYMBOL_CURRENT_DATE = 103, /* CURRENT_DATE */ + YYSYMBOL_CURRENT_ROLE = 104, /* CURRENT_ROLE */ + YYSYMBOL_CURRENT_SCHEMA = 105, /* CURRENT_SCHEMA */ + YYSYMBOL_CURRENT_TIME = 106, /* CURRENT_TIME */ + YYSYMBOL_CURRENT_TIMESTAMP = 107, /* CURRENT_TIMESTAMP */ + YYSYMBOL_CURRENT_USER = 108, /* CURRENT_USER */ + YYSYMBOL_CURSOR = 109, /* CURSOR */ + YYSYMBOL_CYCLE = 110, /* CYCLE */ + YYSYMBOL_DATA_P = 111, /* DATA_P */ + YYSYMBOL_DATABASE = 112, /* DATABASE */ + YYSYMBOL_DAY_P = 113, /* DAY_P */ + YYSYMBOL_DEALLOCATE = 114, /* DEALLOCATE */ + YYSYMBOL_DEC = 115, /* DEC */ + YYSYMBOL_DECIMAL_P = 116, /* DECIMAL_P */ + YYSYMBOL_DECLARE = 117, /* DECLARE */ + YYSYMBOL_DEFAULT = 118, /* DEFAULT */ + YYSYMBOL_DEFAULTS = 119, /* DEFAULTS */ + YYSYMBOL_DEFERRABLE = 120, /* DEFERRABLE */ + YYSYMBOL_DEFERRED = 121, /* DEFERRED */ + YYSYMBOL_DEFINER = 122, /* DEFINER */ + YYSYMBOL_DELETE_P = 123, /* DELETE_P */ + YYSYMBOL_DELIMITER = 124, /* DELIMITER */ + YYSYMBOL_DELIMITERS = 125, /* DELIMITERS */ + YYSYMBOL_DEPENDS = 126, /* DEPENDS */ + YYSYMBOL_DEPTH = 127, /* DEPTH */ + YYSYMBOL_DESC = 128, /* DESC */ + YYSYMBOL_DETACH = 129, /* DETACH */ + YYSYMBOL_DICTIONARY = 130, /* DICTIONARY */ + YYSYMBOL_DISABLE_P = 131, /* DISABLE_P */ + YYSYMBOL_DISCARD = 132, /* DISCARD */ + YYSYMBOL_DISTINCT = 133, /* DISTINCT */ + YYSYMBOL_DO = 134, /* DO */ + YYSYMBOL_DOCUMENT_P = 135, /* DOCUMENT_P */ + YYSYMBOL_DOMAIN_P = 136, /* DOMAIN_P */ + YYSYMBOL_DOUBLE_P = 137, /* DOUBLE_P */ + YYSYMBOL_DROP = 138, /* DROP */ + YYSYMBOL_EACH = 139, /* EACH */ + YYSYMBOL_ELSE = 140, /* ELSE */ + YYSYMBOL_ENABLE_P = 141, /* ENABLE_P */ + YYSYMBOL_ENCODING = 142, /* ENCODING */ + YYSYMBOL_ENCRYPTED = 143, /* ENCRYPTED */ + YYSYMBOL_END_P = 144, /* END_P */ + YYSYMBOL_ENUM_P = 145, /* ENUM_P */ + YYSYMBOL_ESCAPE = 146, /* ESCAPE */ + YYSYMBOL_EVENT = 147, /* EVENT */ + YYSYMBOL_EXCEPT = 148, /* EXCEPT */ + YYSYMBOL_EXCLUDE = 149, /* EXCLUDE */ + YYSYMBOL_EXCLUDING = 150, /* EXCLUDING */ + YYSYMBOL_EXCLUSIVE = 151, /* EXCLUSIVE */ + YYSYMBOL_EXECUTE = 152, /* EXECUTE */ + YYSYMBOL_EXISTS = 153, /* EXISTS */ + YYSYMBOL_EXPLAIN = 154, /* EXPLAIN */ + YYSYMBOL_EXPRESSION = 155, /* EXPRESSION */ + YYSYMBOL_EXTENSION = 156, /* EXTENSION */ + YYSYMBOL_EXTERNAL = 157, /* EXTERNAL */ + YYSYMBOL_EXTRACT = 158, /* EXTRACT */ + YYSYMBOL_FALSE_P = 159, /* FALSE_P */ + YYSYMBOL_FAMILY = 160, /* FAMILY */ + YYSYMBOL_FETCH = 161, /* FETCH */ + YYSYMBOL_FILTER = 162, /* FILTER */ + YYSYMBOL_FINALIZE = 163, /* FINALIZE */ + YYSYMBOL_FIRST_P = 164, /* FIRST_P */ + YYSYMBOL_FLOAT_P = 165, /* FLOAT_P */ + YYSYMBOL_FOLLOWING = 166, /* FOLLOWING */ + YYSYMBOL_FOR = 167, /* FOR */ + YYSYMBOL_FORCE = 168, /* FORCE */ + YYSYMBOL_FOREIGN = 169, /* FOREIGN */ + YYSYMBOL_FORWARD = 170, /* FORWARD */ + YYSYMBOL_FREEZE = 171, /* FREEZE */ + YYSYMBOL_FROM = 172, /* FROM */ + YYSYMBOL_FULL = 173, /* FULL */ + YYSYMBOL_FUNCTION = 174, /* FUNCTION */ + YYSYMBOL_FUNCTIONS = 175, /* FUNCTIONS */ + YYSYMBOL_GENERATED = 176, /* GENERATED */ + YYSYMBOL_GLOBAL = 177, /* GLOBAL */ + YYSYMBOL_GRANT = 178, /* GRANT */ + YYSYMBOL_GRANTED = 179, /* GRANTED */ + YYSYMBOL_GREATEST = 180, /* GREATEST */ + YYSYMBOL_GROUP_P = 181, /* GROUP_P */ + YYSYMBOL_GROUPING = 182, /* GROUPING */ + YYSYMBOL_GROUPS = 183, /* GROUPS */ + YYSYMBOL_HANDLER = 184, /* HANDLER */ + YYSYMBOL_HAVING = 185, /* HAVING */ + YYSYMBOL_HEADER_P = 186, /* HEADER_P */ + YYSYMBOL_HOLD = 187, /* HOLD */ + YYSYMBOL_HOUR_P = 188, /* HOUR_P */ + YYSYMBOL_IDENTITY_P = 189, /* IDENTITY_P */ + YYSYMBOL_IF_P = 190, /* IF_P */ + YYSYMBOL_ILIKE = 191, /* ILIKE */ + YYSYMBOL_IMMEDIATE = 192, /* IMMEDIATE */ + YYSYMBOL_IMMUTABLE = 193, /* IMMUTABLE */ + YYSYMBOL_IMPLICIT_P = 194, /* IMPLICIT_P */ + YYSYMBOL_IMPORT_P = 195, /* IMPORT_P */ + YYSYMBOL_IN_P = 196, /* IN_P */ + YYSYMBOL_INCLUDE = 197, /* INCLUDE */ + YYSYMBOL_INCLUDING = 198, /* INCLUDING */ + YYSYMBOL_INCREMENT = 199, /* INCREMENT */ + YYSYMBOL_INDEX = 200, /* INDEX */ + YYSYMBOL_INDEXES = 201, /* INDEXES */ + YYSYMBOL_INHERIT = 202, /* INHERIT */ + YYSYMBOL_INHERITS = 203, /* INHERITS */ + YYSYMBOL_INITIALLY = 204, /* INITIALLY */ + YYSYMBOL_INLINE_P = 205, /* INLINE_P */ + YYSYMBOL_INNER_P = 206, /* INNER_P */ + YYSYMBOL_INOUT = 207, /* INOUT */ + YYSYMBOL_INPUT_P = 208, /* INPUT_P */ + YYSYMBOL_INSENSITIVE = 209, /* INSENSITIVE */ + YYSYMBOL_INSERT = 210, /* INSERT */ + YYSYMBOL_INSTEAD = 211, /* INSTEAD */ + YYSYMBOL_INT_P = 212, /* INT_P */ + YYSYMBOL_INTEGER = 213, /* INTEGER */ + YYSYMBOL_INTERSECT = 214, /* INTERSECT */ + YYSYMBOL_INTERVAL = 215, /* INTERVAL */ + YYSYMBOL_INTO = 216, /* INTO */ + YYSYMBOL_INVOKER = 217, /* INVOKER */ + YYSYMBOL_IS = 218, /* IS */ + YYSYMBOL_ISNULL = 219, /* ISNULL */ + YYSYMBOL_ISOLATION = 220, /* ISOLATION */ + YYSYMBOL_JOIN = 221, /* JOIN */ + YYSYMBOL_KEY = 222, /* KEY */ + YYSYMBOL_LABEL = 223, /* LABEL */ + YYSYMBOL_LANGUAGE = 224, /* LANGUAGE */ + YYSYMBOL_LARGE_P = 225, /* LARGE_P */ + YYSYMBOL_LAST_P = 226, /* LAST_P */ + YYSYMBOL_LATERAL_P = 227, /* LATERAL_P */ + YYSYMBOL_LEADING = 228, /* LEADING */ + YYSYMBOL_LEAKPROOF = 229, /* LEAKPROOF */ + YYSYMBOL_LEAST = 230, /* LEAST */ + YYSYMBOL_LEFT = 231, /* LEFT */ + YYSYMBOL_LEVEL = 232, /* LEVEL */ + YYSYMBOL_LIKE = 233, /* LIKE */ + YYSYMBOL_LIMIT = 234, /* LIMIT */ + YYSYMBOL_LISTEN = 235, /* LISTEN */ + YYSYMBOL_LOAD = 236, /* LOAD */ + YYSYMBOL_LOCAL = 237, /* LOCAL */ + YYSYMBOL_LOCALTIME = 238, /* LOCALTIME */ + YYSYMBOL_LOCALTIMESTAMP = 239, /* LOCALTIMESTAMP */ + YYSYMBOL_LOCATION = 240, /* LOCATION */ + YYSYMBOL_LOCK_P = 241, /* LOCK_P */ + YYSYMBOL_LOCKED = 242, /* LOCKED */ + YYSYMBOL_LOGGED = 243, /* LOGGED */ + YYSYMBOL_MAPPING = 244, /* MAPPING */ + YYSYMBOL_MATCH = 245, /* MATCH */ + YYSYMBOL_MATERIALIZED = 246, /* MATERIALIZED */ + YYSYMBOL_MAXVALUE = 247, /* MAXVALUE */ + YYSYMBOL_METHOD = 248, /* METHOD */ + YYSYMBOL_MINUTE_P = 249, /* MINUTE_P */ + YYSYMBOL_MINVALUE = 250, /* MINVALUE */ + YYSYMBOL_MODE = 251, /* MODE */ + YYSYMBOL_MONTH_P = 252, /* MONTH_P */ + YYSYMBOL_MOVE = 253, /* MOVE */ + YYSYMBOL_NAME_P = 254, /* NAME_P */ + YYSYMBOL_NAMES = 255, /* NAMES */ + YYSYMBOL_NATIONAL = 256, /* NATIONAL */ + YYSYMBOL_NATURAL = 257, /* NATURAL */ + YYSYMBOL_NCHAR = 258, /* NCHAR */ + YYSYMBOL_NEW = 259, /* NEW */ + YYSYMBOL_NEXT = 260, /* NEXT */ + YYSYMBOL_NFC = 261, /* NFC */ + YYSYMBOL_NFD = 262, /* NFD */ + YYSYMBOL_NFKC = 263, /* NFKC */ + YYSYMBOL_NFKD = 264, /* NFKD */ + YYSYMBOL_NO = 265, /* NO */ + YYSYMBOL_NONE = 266, /* NONE */ + YYSYMBOL_NORMALIZE = 267, /* NORMALIZE */ + YYSYMBOL_NORMALIZED = 268, /* NORMALIZED */ + YYSYMBOL_NOT = 269, /* NOT */ + YYSYMBOL_NOTHING = 270, /* NOTHING */ + YYSYMBOL_NOTIFY = 271, /* NOTIFY */ + YYSYMBOL_NOTNULL = 272, /* NOTNULL */ + YYSYMBOL_NOWAIT = 273, /* NOWAIT */ + YYSYMBOL_NULL_P = 274, /* NULL_P */ + YYSYMBOL_NULLIF = 275, /* NULLIF */ + YYSYMBOL_NULLS_P = 276, /* NULLS_P */ + YYSYMBOL_NUMERIC = 277, /* NUMERIC */ + YYSYMBOL_OBJECT_P = 278, /* OBJECT_P */ + YYSYMBOL_OF = 279, /* OF */ + YYSYMBOL_OFF = 280, /* OFF */ + YYSYMBOL_OFFSET = 281, /* OFFSET */ + YYSYMBOL_OIDS = 282, /* OIDS */ + YYSYMBOL_OLD = 283, /* OLD */ + YYSYMBOL_ON = 284, /* ON */ + YYSYMBOL_ONLY = 285, /* ONLY */ + YYSYMBOL_OPERATOR = 286, /* OPERATOR */ + YYSYMBOL_OPTION = 287, /* OPTION */ + YYSYMBOL_OPTIONS = 288, /* OPTIONS */ + YYSYMBOL_OR = 289, /* OR */ + YYSYMBOL_ORDER = 290, /* ORDER */ + YYSYMBOL_ORDINALITY = 291, /* ORDINALITY */ + YYSYMBOL_OTHERS = 292, /* OTHERS */ + YYSYMBOL_OUT_P = 293, /* OUT_P */ + YYSYMBOL_OUTER_P = 294, /* OUTER_P */ + YYSYMBOL_OVER = 295, /* OVER */ + YYSYMBOL_OVERLAPS = 296, /* OVERLAPS */ + YYSYMBOL_OVERLAY = 297, /* OVERLAY */ + YYSYMBOL_OVERRIDING = 298, /* OVERRIDING */ + YYSYMBOL_OWNED = 299, /* OWNED */ + YYSYMBOL_OWNER = 300, /* OWNER */ + YYSYMBOL_PARALLEL = 301, /* PARALLEL */ + YYSYMBOL_PARSER = 302, /* PARSER */ + YYSYMBOL_PARTIAL = 303, /* PARTIAL */ + YYSYMBOL_PARTITION = 304, /* PARTITION */ + YYSYMBOL_PASSING = 305, /* PASSING */ + YYSYMBOL_PASSWORD = 306, /* PASSWORD */ + YYSYMBOL_PLACING = 307, /* PLACING */ + YYSYMBOL_PLANS = 308, /* PLANS */ + YYSYMBOL_POLICY = 309, /* POLICY */ + YYSYMBOL_POSITION = 310, /* POSITION */ + YYSYMBOL_PRECEDING = 311, /* PRECEDING */ + YYSYMBOL_PRECISION = 312, /* PRECISION */ + YYSYMBOL_PRESERVE = 313, /* PRESERVE */ + YYSYMBOL_PREPARE = 314, /* PREPARE */ + YYSYMBOL_PREPARED = 315, /* PREPARED */ + YYSYMBOL_PRIMARY = 316, /* PRIMARY */ + YYSYMBOL_PRIOR = 317, /* PRIOR */ + YYSYMBOL_PRIVILEGES = 318, /* PRIVILEGES */ + YYSYMBOL_PROCEDURAL = 319, /* PROCEDURAL */ + YYSYMBOL_PROCEDURE = 320, /* PROCEDURE */ + YYSYMBOL_PROCEDURES = 321, /* PROCEDURES */ + YYSYMBOL_PROGRAM = 322, /* PROGRAM */ + YYSYMBOL_PUBLICATION = 323, /* PUBLICATION */ + YYSYMBOL_QUOTE = 324, /* QUOTE */ + YYSYMBOL_RANGE = 325, /* RANGE */ + YYSYMBOL_READ = 326, /* READ */ + YYSYMBOL_REAL = 327, /* REAL */ + YYSYMBOL_REASSIGN = 328, /* REASSIGN */ + YYSYMBOL_RECHECK = 329, /* RECHECK */ + YYSYMBOL_RECURSIVE = 330, /* RECURSIVE */ + YYSYMBOL_REF = 331, /* REF */ + YYSYMBOL_REFERENCES = 332, /* REFERENCES */ + YYSYMBOL_REFERENCING = 333, /* REFERENCING */ + YYSYMBOL_REFRESH = 334, /* REFRESH */ + YYSYMBOL_REINDEX = 335, /* REINDEX */ + YYSYMBOL_RELATIVE_P = 336, /* RELATIVE_P */ + YYSYMBOL_RELEASE = 337, /* RELEASE */ + YYSYMBOL_RENAME = 338, /* RENAME */ + YYSYMBOL_REPEATABLE = 339, /* REPEATABLE */ + YYSYMBOL_REPLACE = 340, /* REPLACE */ + YYSYMBOL_REPLICA = 341, /* REPLICA */ + YYSYMBOL_RESET = 342, /* RESET */ + YYSYMBOL_RESTART = 343, /* RESTART */ + YYSYMBOL_RESTRICT = 344, /* RESTRICT */ + YYSYMBOL_RETURN = 345, /* RETURN */ + YYSYMBOL_RETURNING = 346, /* RETURNING */ + YYSYMBOL_RETURNS = 347, /* RETURNS */ + YYSYMBOL_REVOKE = 348, /* REVOKE */ + YYSYMBOL_RIGHT = 349, /* RIGHT */ + YYSYMBOL_ROLE = 350, /* ROLE */ + YYSYMBOL_ROLLBACK = 351, /* ROLLBACK */ + YYSYMBOL_ROLLUP = 352, /* ROLLUP */ + YYSYMBOL_ROUTINE = 353, /* ROUTINE */ + YYSYMBOL_ROUTINES = 354, /* ROUTINES */ + YYSYMBOL_ROW = 355, /* ROW */ + YYSYMBOL_ROWS = 356, /* ROWS */ + YYSYMBOL_RULE = 357, /* RULE */ + YYSYMBOL_SAVEPOINT = 358, /* SAVEPOINT */ + YYSYMBOL_SCHEMA = 359, /* SCHEMA */ + YYSYMBOL_SCHEMAS = 360, /* SCHEMAS */ + YYSYMBOL_SCROLL = 361, /* SCROLL */ + YYSYMBOL_SEARCH = 362, /* SEARCH */ + YYSYMBOL_SECOND_P = 363, /* SECOND_P */ + YYSYMBOL_SECURITY = 364, /* SECURITY */ + YYSYMBOL_SELECT = 365, /* SELECT */ + YYSYMBOL_SEQUENCE = 366, /* SEQUENCE */ + YYSYMBOL_SEQUENCES = 367, /* SEQUENCES */ + YYSYMBOL_SERIALIZABLE = 368, /* SERIALIZABLE */ + YYSYMBOL_SERVER = 369, /* SERVER */ + YYSYMBOL_SESSION = 370, /* SESSION */ + YYSYMBOL_SESSION_USER = 371, /* SESSION_USER */ + YYSYMBOL_SET = 372, /* SET */ + YYSYMBOL_SETS = 373, /* SETS */ + YYSYMBOL_SETOF = 374, /* SETOF */ + YYSYMBOL_SHARE = 375, /* SHARE */ + YYSYMBOL_SHOW = 376, /* SHOW */ + YYSYMBOL_SIMILAR = 377, /* SIMILAR */ + YYSYMBOL_SIMPLE = 378, /* SIMPLE */ + YYSYMBOL_SKIP = 379, /* SKIP */ + YYSYMBOL_SMALLINT = 380, /* SMALLINT */ + YYSYMBOL_SNAPSHOT = 381, /* SNAPSHOT */ + YYSYMBOL_SOME = 382, /* SOME */ + YYSYMBOL_SQL_P = 383, /* SQL_P */ + YYSYMBOL_STABLE = 384, /* STABLE */ + YYSYMBOL_STANDALONE_P = 385, /* STANDALONE_P */ + YYSYMBOL_START = 386, /* START */ + YYSYMBOL_STATEMENT = 387, /* STATEMENT */ + YYSYMBOL_STATISTICS = 388, /* STATISTICS */ + YYSYMBOL_STDIN = 389, /* STDIN */ + YYSYMBOL_STDOUT = 390, /* STDOUT */ + YYSYMBOL_STORAGE = 391, /* STORAGE */ + YYSYMBOL_STORED = 392, /* STORED */ + YYSYMBOL_STRICT_P = 393, /* STRICT_P */ + YYSYMBOL_STRIP_P = 394, /* STRIP_P */ + YYSYMBOL_SUBSCRIPTION = 395, /* SUBSCRIPTION */ + YYSYMBOL_SUBSTRING = 396, /* SUBSTRING */ + YYSYMBOL_SUPPORT = 397, /* SUPPORT */ + YYSYMBOL_SYMMETRIC = 398, /* SYMMETRIC */ + YYSYMBOL_SYSID = 399, /* SYSID */ + YYSYMBOL_SYSTEM_P = 400, /* SYSTEM_P */ + YYSYMBOL_TABLE = 401, /* TABLE */ + YYSYMBOL_TABLES = 402, /* TABLES */ + YYSYMBOL_TABLESAMPLE = 403, /* TABLESAMPLE */ + YYSYMBOL_TABLESPACE = 404, /* TABLESPACE */ + YYSYMBOL_TEMP = 405, /* TEMP */ + YYSYMBOL_TEMPLATE = 406, /* TEMPLATE */ + YYSYMBOL_TEMPORARY = 407, /* TEMPORARY */ + YYSYMBOL_TEXT_P = 408, /* TEXT_P */ + YYSYMBOL_THEN = 409, /* THEN */ + YYSYMBOL_TIES = 410, /* TIES */ + YYSYMBOL_TIME = 411, /* TIME */ + YYSYMBOL_TIMESTAMP = 412, /* TIMESTAMP */ + YYSYMBOL_TO = 413, /* TO */ + YYSYMBOL_TRAILING = 414, /* TRAILING */ + YYSYMBOL_TRANSACTION = 415, /* TRANSACTION */ + YYSYMBOL_TRANSFORM = 416, /* TRANSFORM */ + YYSYMBOL_TREAT = 417, /* TREAT */ + YYSYMBOL_TRIGGER = 418, /* TRIGGER */ + YYSYMBOL_TRIM = 419, /* TRIM */ + YYSYMBOL_TRUE_P = 420, /* TRUE_P */ + YYSYMBOL_TRUNCATE = 421, /* TRUNCATE */ + YYSYMBOL_TRUSTED = 422, /* TRUSTED */ + YYSYMBOL_TYPE_P = 423, /* TYPE_P */ + YYSYMBOL_TYPES_P = 424, /* TYPES_P */ + YYSYMBOL_UESCAPE = 425, /* UESCAPE */ + YYSYMBOL_UNBOUNDED = 426, /* UNBOUNDED */ + YYSYMBOL_UNCOMMITTED = 427, /* UNCOMMITTED */ + YYSYMBOL_UNENCRYPTED = 428, /* UNENCRYPTED */ + YYSYMBOL_UNION = 429, /* UNION */ + YYSYMBOL_UNIQUE = 430, /* UNIQUE */ + YYSYMBOL_UNKNOWN = 431, /* UNKNOWN */ + YYSYMBOL_UNLISTEN = 432, /* UNLISTEN */ + YYSYMBOL_UNLOGGED = 433, /* UNLOGGED */ + YYSYMBOL_UNTIL = 434, /* UNTIL */ + YYSYMBOL_UPDATE = 435, /* UPDATE */ + YYSYMBOL_USER = 436, /* USER */ + YYSYMBOL_USING = 437, /* USING */ + YYSYMBOL_VACUUM = 438, /* VACUUM */ + YYSYMBOL_VALID = 439, /* VALID */ + YYSYMBOL_VALIDATE = 440, /* VALIDATE */ + YYSYMBOL_VALIDATOR = 441, /* VALIDATOR */ + YYSYMBOL_VALUE_P = 442, /* VALUE_P */ + YYSYMBOL_VALUES = 443, /* VALUES */ + YYSYMBOL_VARCHAR = 444, /* VARCHAR */ + YYSYMBOL_VARIADIC = 445, /* VARIADIC */ + YYSYMBOL_VARYING = 446, /* VARYING */ + YYSYMBOL_VERBOSE = 447, /* VERBOSE */ + YYSYMBOL_VERSION_P = 448, /* VERSION_P */ + YYSYMBOL_VIEW = 449, /* VIEW */ + YYSYMBOL_VIEWS = 450, /* VIEWS */ + YYSYMBOL_VOLATILE = 451, /* VOLATILE */ + YYSYMBOL_WHEN = 452, /* WHEN */ + YYSYMBOL_WHERE = 453, /* WHERE */ + YYSYMBOL_WHITESPACE_P = 454, /* WHITESPACE_P */ + YYSYMBOL_WINDOW = 455, /* WINDOW */ + YYSYMBOL_WITH = 456, /* WITH */ + YYSYMBOL_WITHIN = 457, /* WITHIN */ + YYSYMBOL_WITHOUT = 458, /* WITHOUT */ + YYSYMBOL_WORK = 459, /* WORK */ + YYSYMBOL_WRAPPER = 460, /* WRAPPER */ + YYSYMBOL_WRITE = 461, /* WRITE */ + YYSYMBOL_XML_P = 462, /* XML_P */ + YYSYMBOL_XMLATTRIBUTES = 463, /* XMLATTRIBUTES */ + YYSYMBOL_XMLCONCAT = 464, /* XMLCONCAT */ + YYSYMBOL_XMLELEMENT = 465, /* XMLELEMENT */ + YYSYMBOL_XMLEXISTS = 466, /* XMLEXISTS */ + YYSYMBOL_XMLFOREST = 467, /* XMLFOREST */ + YYSYMBOL_XMLNAMESPACES = 468, /* XMLNAMESPACES */ + YYSYMBOL_XMLPARSE = 469, /* XMLPARSE */ + YYSYMBOL_XMLPI = 470, /* XMLPI */ + YYSYMBOL_XMLROOT = 471, /* XMLROOT */ + YYSYMBOL_XMLSERIALIZE = 472, /* XMLSERIALIZE */ + YYSYMBOL_XMLTABLE = 473, /* XMLTABLE */ + YYSYMBOL_YEAR_P = 474, /* YEAR_P */ + YYSYMBOL_YES_P = 475, /* YES_P */ + YYSYMBOL_ZONE = 476, /* ZONE */ + YYSYMBOL_NOT_LA = 477, /* NOT_LA */ + YYSYMBOL_NULLS_LA = 478, /* NULLS_LA */ + YYSYMBOL_WITH_LA = 479, /* WITH_LA */ + YYSYMBOL_MODE_TYPE_NAME = 480, /* MODE_TYPE_NAME */ + YYSYMBOL_MODE_PLPGSQL_EXPR = 481, /* MODE_PLPGSQL_EXPR */ + YYSYMBOL_MODE_PLPGSQL_ASSIGN1 = 482, /* MODE_PLPGSQL_ASSIGN1 */ + YYSYMBOL_MODE_PLPGSQL_ASSIGN2 = 483, /* MODE_PLPGSQL_ASSIGN2 */ + YYSYMBOL_MODE_PLPGSQL_ASSIGN3 = 484, /* MODE_PLPGSQL_ASSIGN3 */ + YYSYMBOL_485_ = 485, /* '<' */ + YYSYMBOL_486_ = 486, /* '>' */ + YYSYMBOL_487_ = 487, /* '=' */ + YYSYMBOL_488_ = 488, /* '+' */ + YYSYMBOL_489_ = 489, /* '-' */ + YYSYMBOL_490_ = 490, /* '*' */ + YYSYMBOL_491_ = 491, /* '/' */ + YYSYMBOL_492_ = 492, /* '%' */ + YYSYMBOL_493_ = 493, /* '^' */ + YYSYMBOL_UMINUS = 494, /* UMINUS */ + YYSYMBOL_495_ = 495, /* '[' */ + YYSYMBOL_496_ = 496, /* ']' */ + YYSYMBOL_497_ = 497, /* '(' */ + YYSYMBOL_498_ = 498, /* ')' */ + YYSYMBOL_499_ = 499, /* '.' */ + YYSYMBOL_500_ = 500, /* ';' */ + YYSYMBOL_501_ = 501, /* ',' */ + YYSYMBOL_502_ = 502, /* ':' */ + YYSYMBOL_YYACCEPT = 503, /* $accept */ + YYSYMBOL_parse_toplevel = 504, /* parse_toplevel */ + YYSYMBOL_stmtmulti = 505, /* stmtmulti */ + YYSYMBOL_toplevel_stmt = 506, /* toplevel_stmt */ + YYSYMBOL_stmt = 507, /* stmt */ + YYSYMBOL_CallStmt = 508, /* CallStmt */ + YYSYMBOL_CreateRoleStmt = 509, /* CreateRoleStmt */ + YYSYMBOL_opt_with = 510, /* opt_with */ + YYSYMBOL_OptRoleList = 511, /* OptRoleList */ + YYSYMBOL_AlterOptRoleList = 512, /* AlterOptRoleList */ + YYSYMBOL_AlterOptRoleElem = 513, /* AlterOptRoleElem */ + YYSYMBOL_CreateOptRoleElem = 514, /* CreateOptRoleElem */ + YYSYMBOL_CreateUserStmt = 515, /* CreateUserStmt */ + YYSYMBOL_AlterRoleStmt = 516, /* AlterRoleStmt */ + YYSYMBOL_opt_in_database = 517, /* opt_in_database */ + YYSYMBOL_AlterRoleSetStmt = 518, /* AlterRoleSetStmt */ + YYSYMBOL_DropRoleStmt = 519, /* DropRoleStmt */ + YYSYMBOL_CreateGroupStmt = 520, /* CreateGroupStmt */ + YYSYMBOL_AlterGroupStmt = 521, /* AlterGroupStmt */ + YYSYMBOL_add_drop = 522, /* add_drop */ + YYSYMBOL_CreateSchemaStmt = 523, /* CreateSchemaStmt */ + YYSYMBOL_OptSchemaName = 524, /* OptSchemaName */ + YYSYMBOL_OptSchemaEltList = 525, /* OptSchemaEltList */ + YYSYMBOL_schema_stmt = 526, /* schema_stmt */ + YYSYMBOL_VariableSetStmt = 527, /* VariableSetStmt */ + YYSYMBOL_set_rest = 528, /* set_rest */ + YYSYMBOL_generic_set = 529, /* generic_set */ + YYSYMBOL_set_rest_more = 530, /* set_rest_more */ + YYSYMBOL_var_name = 531, /* var_name */ + YYSYMBOL_var_list = 532, /* var_list */ + YYSYMBOL_var_value = 533, /* var_value */ + YYSYMBOL_iso_level = 534, /* iso_level */ + YYSYMBOL_opt_boolean_or_string = 535, /* opt_boolean_or_string */ + YYSYMBOL_zone_value = 536, /* zone_value */ + YYSYMBOL_opt_encoding = 537, /* opt_encoding */ + YYSYMBOL_NonReservedWord_or_Sconst = 538, /* NonReservedWord_or_Sconst */ + YYSYMBOL_VariableResetStmt = 539, /* VariableResetStmt */ + YYSYMBOL_reset_rest = 540, /* reset_rest */ + YYSYMBOL_generic_reset = 541, /* generic_reset */ + YYSYMBOL_SetResetClause = 542, /* SetResetClause */ + YYSYMBOL_FunctionSetResetClause = 543, /* FunctionSetResetClause */ + YYSYMBOL_VariableShowStmt = 544, /* VariableShowStmt */ + YYSYMBOL_ConstraintsSetStmt = 545, /* ConstraintsSetStmt */ + YYSYMBOL_constraints_set_list = 546, /* constraints_set_list */ + YYSYMBOL_constraints_set_mode = 547, /* constraints_set_mode */ + YYSYMBOL_CheckPointStmt = 548, /* CheckPointStmt */ + YYSYMBOL_DiscardStmt = 549, /* DiscardStmt */ + YYSYMBOL_AlterTableStmt = 550, /* AlterTableStmt */ + YYSYMBOL_alter_table_cmds = 551, /* alter_table_cmds */ + YYSYMBOL_partition_cmd = 552, /* partition_cmd */ + YYSYMBOL_index_partition_cmd = 553, /* index_partition_cmd */ + YYSYMBOL_alter_table_cmd = 554, /* alter_table_cmd */ + YYSYMBOL_alter_column_default = 555, /* alter_column_default */ + YYSYMBOL_opt_drop_behavior = 556, /* opt_drop_behavior */ + YYSYMBOL_opt_collate_clause = 557, /* opt_collate_clause */ + YYSYMBOL_alter_using = 558, /* alter_using */ + YYSYMBOL_replica_identity = 559, /* replica_identity */ + YYSYMBOL_reloptions = 560, /* reloptions */ + YYSYMBOL_opt_reloptions = 561, /* opt_reloptions */ + YYSYMBOL_reloption_list = 562, /* reloption_list */ + YYSYMBOL_reloption_elem = 563, /* reloption_elem */ + YYSYMBOL_alter_identity_column_option_list = 564, /* alter_identity_column_option_list */ + YYSYMBOL_alter_identity_column_option = 565, /* alter_identity_column_option */ + YYSYMBOL_PartitionBoundSpec = 566, /* PartitionBoundSpec */ + YYSYMBOL_hash_partbound_elem = 567, /* hash_partbound_elem */ + YYSYMBOL_hash_partbound = 568, /* hash_partbound */ + YYSYMBOL_AlterCompositeTypeStmt = 569, /* AlterCompositeTypeStmt */ + YYSYMBOL_alter_type_cmds = 570, /* alter_type_cmds */ + YYSYMBOL_alter_type_cmd = 571, /* alter_type_cmd */ + YYSYMBOL_ClosePortalStmt = 572, /* ClosePortalStmt */ + YYSYMBOL_CopyStmt = 573, /* CopyStmt */ + YYSYMBOL_copy_from = 574, /* copy_from */ + YYSYMBOL_opt_program = 575, /* opt_program */ + YYSYMBOL_copy_file_name = 576, /* copy_file_name */ + YYSYMBOL_copy_options = 577, /* copy_options */ + YYSYMBOL_copy_opt_list = 578, /* copy_opt_list */ + YYSYMBOL_copy_opt_item = 579, /* copy_opt_item */ + YYSYMBOL_opt_binary = 580, /* opt_binary */ + YYSYMBOL_copy_delimiter = 581, /* copy_delimiter */ + YYSYMBOL_opt_using = 582, /* opt_using */ + YYSYMBOL_copy_generic_opt_list = 583, /* copy_generic_opt_list */ + YYSYMBOL_copy_generic_opt_elem = 584, /* copy_generic_opt_elem */ + YYSYMBOL_copy_generic_opt_arg = 585, /* copy_generic_opt_arg */ + YYSYMBOL_copy_generic_opt_arg_list = 586, /* copy_generic_opt_arg_list */ + YYSYMBOL_copy_generic_opt_arg_list_item = 587, /* copy_generic_opt_arg_list_item */ + YYSYMBOL_CreateStmt = 588, /* CreateStmt */ + YYSYMBOL_OptTemp = 589, /* OptTemp */ + YYSYMBOL_OptTableElementList = 590, /* OptTableElementList */ + YYSYMBOL_OptTypedTableElementList = 591, /* OptTypedTableElementList */ + YYSYMBOL_TableElementList = 592, /* TableElementList */ + YYSYMBOL_TypedTableElementList = 593, /* TypedTableElementList */ + YYSYMBOL_TableElement = 594, /* TableElement */ + YYSYMBOL_TypedTableElement = 595, /* TypedTableElement */ + YYSYMBOL_columnDef = 596, /* columnDef */ + YYSYMBOL_columnOptions = 597, /* columnOptions */ + YYSYMBOL_column_compression = 598, /* column_compression */ + YYSYMBOL_opt_column_compression = 599, /* opt_column_compression */ + YYSYMBOL_ColQualList = 600, /* ColQualList */ + YYSYMBOL_ColConstraint = 601, /* ColConstraint */ + YYSYMBOL_ColConstraintElem = 602, /* ColConstraintElem */ + YYSYMBOL_generated_when = 603, /* generated_when */ + YYSYMBOL_ConstraintAttr = 604, /* ConstraintAttr */ + YYSYMBOL_TableLikeClause = 605, /* TableLikeClause */ + YYSYMBOL_TableLikeOptionList = 606, /* TableLikeOptionList */ + YYSYMBOL_TableLikeOption = 607, /* TableLikeOption */ + YYSYMBOL_TableConstraint = 608, /* TableConstraint */ + YYSYMBOL_ConstraintElem = 609, /* ConstraintElem */ + YYSYMBOL_opt_no_inherit = 610, /* opt_no_inherit */ + YYSYMBOL_opt_column_list = 611, /* opt_column_list */ + YYSYMBOL_columnList = 612, /* columnList */ + YYSYMBOL_columnElem = 613, /* columnElem */ + YYSYMBOL_opt_c_include = 614, /* opt_c_include */ + YYSYMBOL_key_match = 615, /* key_match */ + YYSYMBOL_ExclusionConstraintList = 616, /* ExclusionConstraintList */ + YYSYMBOL_ExclusionConstraintElem = 617, /* ExclusionConstraintElem */ + YYSYMBOL_OptWhereClause = 618, /* OptWhereClause */ + YYSYMBOL_key_actions = 619, /* key_actions */ + YYSYMBOL_key_update = 620, /* key_update */ + YYSYMBOL_key_delete = 621, /* key_delete */ + YYSYMBOL_key_action = 622, /* key_action */ + YYSYMBOL_OptInherit = 623, /* OptInherit */ + YYSYMBOL_OptPartitionSpec = 624, /* OptPartitionSpec */ + YYSYMBOL_PartitionSpec = 625, /* PartitionSpec */ + YYSYMBOL_part_params = 626, /* part_params */ + YYSYMBOL_part_elem = 627, /* part_elem */ + YYSYMBOL_table_access_method_clause = 628, /* table_access_method_clause */ + YYSYMBOL_OptWith = 629, /* OptWith */ + YYSYMBOL_OnCommitOption = 630, /* OnCommitOption */ + YYSYMBOL_OptTableSpace = 631, /* OptTableSpace */ + YYSYMBOL_OptConsTableSpace = 632, /* OptConsTableSpace */ + YYSYMBOL_ExistingIndex = 633, /* ExistingIndex */ + YYSYMBOL_CreateStatsStmt = 634, /* CreateStatsStmt */ + YYSYMBOL_stats_params = 635, /* stats_params */ + YYSYMBOL_stats_param = 636, /* stats_param */ + YYSYMBOL_AlterStatsStmt = 637, /* AlterStatsStmt */ + YYSYMBOL_CreateAsStmt = 638, /* CreateAsStmt */ + YYSYMBOL_create_as_target = 639, /* create_as_target */ + YYSYMBOL_opt_with_data = 640, /* opt_with_data */ + YYSYMBOL_CreateMatViewStmt = 641, /* CreateMatViewStmt */ + YYSYMBOL_create_mv_target = 642, /* create_mv_target */ + YYSYMBOL_OptNoLog = 643, /* OptNoLog */ + YYSYMBOL_RefreshMatViewStmt = 644, /* RefreshMatViewStmt */ + YYSYMBOL_CreateSeqStmt = 645, /* CreateSeqStmt */ + YYSYMBOL_AlterSeqStmt = 646, /* AlterSeqStmt */ + YYSYMBOL_OptSeqOptList = 647, /* OptSeqOptList */ + YYSYMBOL_OptParenthesizedSeqOptList = 648, /* OptParenthesizedSeqOptList */ + YYSYMBOL_SeqOptList = 649, /* SeqOptList */ + YYSYMBOL_SeqOptElem = 650, /* SeqOptElem */ + YYSYMBOL_opt_by = 651, /* opt_by */ + YYSYMBOL_NumericOnly = 652, /* NumericOnly */ + YYSYMBOL_NumericOnly_list = 653, /* NumericOnly_list */ + YYSYMBOL_CreatePLangStmt = 654, /* CreatePLangStmt */ + YYSYMBOL_opt_trusted = 655, /* opt_trusted */ + YYSYMBOL_handler_name = 656, /* handler_name */ + YYSYMBOL_opt_inline_handler = 657, /* opt_inline_handler */ + YYSYMBOL_validator_clause = 658, /* validator_clause */ + YYSYMBOL_opt_validator = 659, /* opt_validator */ + YYSYMBOL_opt_procedural = 660, /* opt_procedural */ + YYSYMBOL_CreateTableSpaceStmt = 661, /* CreateTableSpaceStmt */ + YYSYMBOL_OptTableSpaceOwner = 662, /* OptTableSpaceOwner */ + YYSYMBOL_DropTableSpaceStmt = 663, /* DropTableSpaceStmt */ + YYSYMBOL_CreateExtensionStmt = 664, /* CreateExtensionStmt */ + YYSYMBOL_create_extension_opt_list = 665, /* create_extension_opt_list */ + YYSYMBOL_create_extension_opt_item = 666, /* create_extension_opt_item */ + YYSYMBOL_AlterExtensionStmt = 667, /* AlterExtensionStmt */ + YYSYMBOL_alter_extension_opt_list = 668, /* alter_extension_opt_list */ + YYSYMBOL_alter_extension_opt_item = 669, /* alter_extension_opt_item */ + YYSYMBOL_AlterExtensionContentsStmt = 670, /* AlterExtensionContentsStmt */ + YYSYMBOL_CreateFdwStmt = 671, /* CreateFdwStmt */ + YYSYMBOL_fdw_option = 672, /* fdw_option */ + YYSYMBOL_fdw_options = 673, /* fdw_options */ + YYSYMBOL_opt_fdw_options = 674, /* opt_fdw_options */ + YYSYMBOL_AlterFdwStmt = 675, /* AlterFdwStmt */ + YYSYMBOL_create_generic_options = 676, /* create_generic_options */ + YYSYMBOL_generic_option_list = 677, /* generic_option_list */ + YYSYMBOL_alter_generic_options = 678, /* alter_generic_options */ + YYSYMBOL_alter_generic_option_list = 679, /* alter_generic_option_list */ + YYSYMBOL_alter_generic_option_elem = 680, /* alter_generic_option_elem */ + YYSYMBOL_generic_option_elem = 681, /* generic_option_elem */ + YYSYMBOL_generic_option_name = 682, /* generic_option_name */ + YYSYMBOL_generic_option_arg = 683, /* generic_option_arg */ + YYSYMBOL_CreateForeignServerStmt = 684, /* CreateForeignServerStmt */ + YYSYMBOL_opt_type = 685, /* opt_type */ + YYSYMBOL_foreign_server_version = 686, /* foreign_server_version */ + YYSYMBOL_opt_foreign_server_version = 687, /* opt_foreign_server_version */ + YYSYMBOL_AlterForeignServerStmt = 688, /* AlterForeignServerStmt */ + YYSYMBOL_CreateForeignTableStmt = 689, /* CreateForeignTableStmt */ + YYSYMBOL_ImportForeignSchemaStmt = 690, /* ImportForeignSchemaStmt */ + YYSYMBOL_import_qualification_type = 691, /* import_qualification_type */ + YYSYMBOL_import_qualification = 692, /* import_qualification */ + YYSYMBOL_CreateUserMappingStmt = 693, /* CreateUserMappingStmt */ + YYSYMBOL_auth_ident = 694, /* auth_ident */ + YYSYMBOL_DropUserMappingStmt = 695, /* DropUserMappingStmt */ + YYSYMBOL_AlterUserMappingStmt = 696, /* AlterUserMappingStmt */ + YYSYMBOL_CreatePolicyStmt = 697, /* CreatePolicyStmt */ + YYSYMBOL_AlterPolicyStmt = 698, /* AlterPolicyStmt */ + YYSYMBOL_RowSecurityOptionalExpr = 699, /* RowSecurityOptionalExpr */ + YYSYMBOL_RowSecurityOptionalWithCheck = 700, /* RowSecurityOptionalWithCheck */ + YYSYMBOL_RowSecurityDefaultToRole = 701, /* RowSecurityDefaultToRole */ + YYSYMBOL_RowSecurityOptionalToRole = 702, /* RowSecurityOptionalToRole */ + YYSYMBOL_RowSecurityDefaultPermissive = 703, /* RowSecurityDefaultPermissive */ + YYSYMBOL_RowSecurityDefaultForCmd = 704, /* RowSecurityDefaultForCmd */ + YYSYMBOL_row_security_cmd = 705, /* row_security_cmd */ + YYSYMBOL_CreateAmStmt = 706, /* CreateAmStmt */ + YYSYMBOL_am_type = 707, /* am_type */ + YYSYMBOL_CreateTrigStmt = 708, /* CreateTrigStmt */ + YYSYMBOL_TriggerActionTime = 709, /* TriggerActionTime */ + YYSYMBOL_TriggerEvents = 710, /* TriggerEvents */ + YYSYMBOL_TriggerOneEvent = 711, /* TriggerOneEvent */ + YYSYMBOL_TriggerReferencing = 712, /* TriggerReferencing */ + YYSYMBOL_TriggerTransitions = 713, /* TriggerTransitions */ + YYSYMBOL_TriggerTransition = 714, /* TriggerTransition */ + YYSYMBOL_TransitionOldOrNew = 715, /* TransitionOldOrNew */ + YYSYMBOL_TransitionRowOrTable = 716, /* TransitionRowOrTable */ + YYSYMBOL_TransitionRelName = 717, /* TransitionRelName */ + YYSYMBOL_TriggerForSpec = 718, /* TriggerForSpec */ + YYSYMBOL_TriggerForOptEach = 719, /* TriggerForOptEach */ + YYSYMBOL_TriggerForType = 720, /* TriggerForType */ + YYSYMBOL_TriggerWhen = 721, /* TriggerWhen */ + YYSYMBOL_FUNCTION_or_PROCEDURE = 722, /* FUNCTION_or_PROCEDURE */ + YYSYMBOL_TriggerFuncArgs = 723, /* TriggerFuncArgs */ + YYSYMBOL_TriggerFuncArg = 724, /* TriggerFuncArg */ + YYSYMBOL_OptConstrFromTable = 725, /* OptConstrFromTable */ + YYSYMBOL_ConstraintAttributeSpec = 726, /* ConstraintAttributeSpec */ + YYSYMBOL_ConstraintAttributeElem = 727, /* ConstraintAttributeElem */ + YYSYMBOL_CreateEventTrigStmt = 728, /* CreateEventTrigStmt */ + YYSYMBOL_event_trigger_when_list = 729, /* event_trigger_when_list */ + YYSYMBOL_event_trigger_when_item = 730, /* event_trigger_when_item */ + YYSYMBOL_event_trigger_value_list = 731, /* event_trigger_value_list */ + YYSYMBOL_AlterEventTrigStmt = 732, /* AlterEventTrigStmt */ + YYSYMBOL_enable_trigger = 733, /* enable_trigger */ + YYSYMBOL_CreateAssertionStmt = 734, /* CreateAssertionStmt */ + YYSYMBOL_DefineStmt = 735, /* DefineStmt */ + YYSYMBOL_definition = 736, /* definition */ + YYSYMBOL_def_list = 737, /* def_list */ + YYSYMBOL_def_elem = 738, /* def_elem */ + YYSYMBOL_def_arg = 739, /* def_arg */ + YYSYMBOL_old_aggr_definition = 740, /* old_aggr_definition */ + YYSYMBOL_old_aggr_list = 741, /* old_aggr_list */ + YYSYMBOL_old_aggr_elem = 742, /* old_aggr_elem */ + YYSYMBOL_opt_enum_val_list = 743, /* opt_enum_val_list */ + YYSYMBOL_enum_val_list = 744, /* enum_val_list */ + YYSYMBOL_AlterEnumStmt = 745, /* AlterEnumStmt */ + YYSYMBOL_opt_if_not_exists = 746, /* opt_if_not_exists */ + YYSYMBOL_CreateOpClassStmt = 747, /* CreateOpClassStmt */ + YYSYMBOL_opclass_item_list = 748, /* opclass_item_list */ + YYSYMBOL_opclass_item = 749, /* opclass_item */ + YYSYMBOL_opt_default = 750, /* opt_default */ + YYSYMBOL_opt_opfamily = 751, /* opt_opfamily */ + YYSYMBOL_opclass_purpose = 752, /* opclass_purpose */ + YYSYMBOL_opt_recheck = 753, /* opt_recheck */ + YYSYMBOL_CreateOpFamilyStmt = 754, /* CreateOpFamilyStmt */ + YYSYMBOL_AlterOpFamilyStmt = 755, /* AlterOpFamilyStmt */ + YYSYMBOL_opclass_drop_list = 756, /* opclass_drop_list */ + YYSYMBOL_opclass_drop = 757, /* opclass_drop */ + YYSYMBOL_DropOpClassStmt = 758, /* DropOpClassStmt */ + YYSYMBOL_DropOpFamilyStmt = 759, /* DropOpFamilyStmt */ + YYSYMBOL_DropOwnedStmt = 760, /* DropOwnedStmt */ + YYSYMBOL_ReassignOwnedStmt = 761, /* ReassignOwnedStmt */ + YYSYMBOL_DropStmt = 762, /* DropStmt */ + YYSYMBOL_object_type_any_name = 763, /* object_type_any_name */ + YYSYMBOL_object_type_name = 764, /* object_type_name */ + YYSYMBOL_drop_type_name = 765, /* drop_type_name */ + YYSYMBOL_object_type_name_on_any_name = 766, /* object_type_name_on_any_name */ + YYSYMBOL_any_name_list = 767, /* any_name_list */ + YYSYMBOL_any_name = 768, /* any_name */ + YYSYMBOL_attrs = 769, /* attrs */ + YYSYMBOL_type_name_list = 770, /* type_name_list */ + YYSYMBOL_TruncateStmt = 771, /* TruncateStmt */ + YYSYMBOL_opt_restart_seqs = 772, /* opt_restart_seqs */ + YYSYMBOL_CommentStmt = 773, /* CommentStmt */ + YYSYMBOL_comment_text = 774, /* comment_text */ + YYSYMBOL_SecLabelStmt = 775, /* SecLabelStmt */ + YYSYMBOL_opt_provider = 776, /* opt_provider */ + YYSYMBOL_security_label = 777, /* security_label */ + YYSYMBOL_FetchStmt = 778, /* FetchStmt */ + YYSYMBOL_fetch_args = 779, /* fetch_args */ + YYSYMBOL_from_in = 780, /* from_in */ + YYSYMBOL_opt_from_in = 781, /* opt_from_in */ + YYSYMBOL_GrantStmt = 782, /* GrantStmt */ + YYSYMBOL_RevokeStmt = 783, /* RevokeStmt */ + YYSYMBOL_privileges = 784, /* privileges */ + YYSYMBOL_privilege_list = 785, /* privilege_list */ + YYSYMBOL_privilege = 786, /* privilege */ + YYSYMBOL_privilege_target = 787, /* privilege_target */ + YYSYMBOL_grantee_list = 788, /* grantee_list */ + YYSYMBOL_grantee = 789, /* grantee */ + YYSYMBOL_opt_grant_grant_option = 790, /* opt_grant_grant_option */ + YYSYMBOL_GrantRoleStmt = 791, /* GrantRoleStmt */ + YYSYMBOL_RevokeRoleStmt = 792, /* RevokeRoleStmt */ + YYSYMBOL_opt_grant_admin_option = 793, /* opt_grant_admin_option */ + YYSYMBOL_opt_granted_by = 794, /* opt_granted_by */ + YYSYMBOL_AlterDefaultPrivilegesStmt = 795, /* AlterDefaultPrivilegesStmt */ + YYSYMBOL_DefACLOptionList = 796, /* DefACLOptionList */ + YYSYMBOL_DefACLOption = 797, /* DefACLOption */ + YYSYMBOL_DefACLAction = 798, /* DefACLAction */ + YYSYMBOL_defacl_privilege_target = 799, /* defacl_privilege_target */ + YYSYMBOL_IndexStmt = 800, /* IndexStmt */ + YYSYMBOL_opt_unique = 801, /* opt_unique */ + YYSYMBOL_opt_concurrently = 802, /* opt_concurrently */ + YYSYMBOL_opt_index_name = 803, /* opt_index_name */ + YYSYMBOL_access_method_clause = 804, /* access_method_clause */ + YYSYMBOL_index_params = 805, /* index_params */ + YYSYMBOL_index_elem_options = 806, /* index_elem_options */ + YYSYMBOL_index_elem = 807, /* index_elem */ + YYSYMBOL_opt_include = 808, /* opt_include */ + YYSYMBOL_index_including_params = 809, /* index_including_params */ + YYSYMBOL_opt_collate = 810, /* opt_collate */ + YYSYMBOL_opt_class = 811, /* opt_class */ + YYSYMBOL_opt_asc_desc = 812, /* opt_asc_desc */ + YYSYMBOL_opt_nulls_order = 813, /* opt_nulls_order */ + YYSYMBOL_CreateFunctionStmt = 814, /* CreateFunctionStmt */ + YYSYMBOL_opt_or_replace = 815, /* opt_or_replace */ + YYSYMBOL_func_args = 816, /* func_args */ + YYSYMBOL_func_args_list = 817, /* func_args_list */ + YYSYMBOL_function_with_argtypes_list = 818, /* function_with_argtypes_list */ + YYSYMBOL_function_with_argtypes = 819, /* function_with_argtypes */ + YYSYMBOL_func_args_with_defaults = 820, /* func_args_with_defaults */ + YYSYMBOL_func_args_with_defaults_list = 821, /* func_args_with_defaults_list */ + YYSYMBOL_func_arg = 822, /* func_arg */ + YYSYMBOL_arg_class = 823, /* arg_class */ + YYSYMBOL_param_name = 824, /* param_name */ + YYSYMBOL_func_return = 825, /* func_return */ + YYSYMBOL_func_type = 826, /* func_type */ + YYSYMBOL_func_arg_with_default = 827, /* func_arg_with_default */ + YYSYMBOL_aggr_arg = 828, /* aggr_arg */ + YYSYMBOL_aggr_args = 829, /* aggr_args */ + YYSYMBOL_aggr_args_list = 830, /* aggr_args_list */ + YYSYMBOL_aggregate_with_argtypes = 831, /* aggregate_with_argtypes */ + YYSYMBOL_aggregate_with_argtypes_list = 832, /* aggregate_with_argtypes_list */ + YYSYMBOL_opt_createfunc_opt_list = 833, /* opt_createfunc_opt_list */ + YYSYMBOL_createfunc_opt_list = 834, /* createfunc_opt_list */ + YYSYMBOL_common_func_opt_item = 835, /* common_func_opt_item */ + YYSYMBOL_createfunc_opt_item = 836, /* createfunc_opt_item */ + YYSYMBOL_func_as = 837, /* func_as */ + YYSYMBOL_ReturnStmt = 838, /* ReturnStmt */ + YYSYMBOL_opt_routine_body = 839, /* opt_routine_body */ + YYSYMBOL_routine_body_stmt_list = 840, /* routine_body_stmt_list */ + YYSYMBOL_routine_body_stmt = 841, /* routine_body_stmt */ + YYSYMBOL_transform_type_list = 842, /* transform_type_list */ + YYSYMBOL_opt_definition = 843, /* opt_definition */ + YYSYMBOL_table_func_column = 844, /* table_func_column */ + YYSYMBOL_table_func_column_list = 845, /* table_func_column_list */ + YYSYMBOL_AlterFunctionStmt = 846, /* AlterFunctionStmt */ + YYSYMBOL_alterfunc_opt_list = 847, /* alterfunc_opt_list */ + YYSYMBOL_opt_restrict = 848, /* opt_restrict */ + YYSYMBOL_RemoveFuncStmt = 849, /* RemoveFuncStmt */ + YYSYMBOL_RemoveAggrStmt = 850, /* RemoveAggrStmt */ + YYSYMBOL_RemoveOperStmt = 851, /* RemoveOperStmt */ + YYSYMBOL_oper_argtypes = 852, /* oper_argtypes */ + YYSYMBOL_any_operator = 853, /* any_operator */ + YYSYMBOL_operator_with_argtypes_list = 854, /* operator_with_argtypes_list */ + YYSYMBOL_operator_with_argtypes = 855, /* operator_with_argtypes */ + YYSYMBOL_DoStmt = 856, /* DoStmt */ + YYSYMBOL_dostmt_opt_list = 857, /* dostmt_opt_list */ + YYSYMBOL_dostmt_opt_item = 858, /* dostmt_opt_item */ + YYSYMBOL_CreateCastStmt = 859, /* CreateCastStmt */ + YYSYMBOL_cast_context = 860, /* cast_context */ + YYSYMBOL_DropCastStmt = 861, /* DropCastStmt */ + YYSYMBOL_opt_if_exists = 862, /* opt_if_exists */ + YYSYMBOL_CreateTransformStmt = 863, /* CreateTransformStmt */ + YYSYMBOL_transform_element_list = 864, /* transform_element_list */ + YYSYMBOL_DropTransformStmt = 865, /* DropTransformStmt */ + YYSYMBOL_ReindexStmt = 866, /* ReindexStmt */ + YYSYMBOL_reindex_target_type = 867, /* reindex_target_type */ + YYSYMBOL_reindex_target_multitable = 868, /* reindex_target_multitable */ + YYSYMBOL_AlterTblSpcStmt = 869, /* AlterTblSpcStmt */ + YYSYMBOL_RenameStmt = 870, /* RenameStmt */ + YYSYMBOL_opt_column = 871, /* opt_column */ + YYSYMBOL_opt_set_data = 872, /* opt_set_data */ + YYSYMBOL_AlterObjectDependsStmt = 873, /* AlterObjectDependsStmt */ + YYSYMBOL_opt_no = 874, /* opt_no */ + YYSYMBOL_AlterObjectSchemaStmt = 875, /* AlterObjectSchemaStmt */ + YYSYMBOL_AlterOperatorStmt = 876, /* AlterOperatorStmt */ + YYSYMBOL_operator_def_list = 877, /* operator_def_list */ + YYSYMBOL_operator_def_elem = 878, /* operator_def_elem */ + YYSYMBOL_operator_def_arg = 879, /* operator_def_arg */ + YYSYMBOL_AlterTypeStmt = 880, /* AlterTypeStmt */ + YYSYMBOL_AlterOwnerStmt = 881, /* AlterOwnerStmt */ + YYSYMBOL_CreatePublicationStmt = 882, /* CreatePublicationStmt */ + YYSYMBOL_opt_publication_for_tables = 883, /* opt_publication_for_tables */ + YYSYMBOL_publication_for_tables = 884, /* publication_for_tables */ + YYSYMBOL_AlterPublicationStmt = 885, /* AlterPublicationStmt */ + YYSYMBOL_CreateSubscriptionStmt = 886, /* CreateSubscriptionStmt */ + YYSYMBOL_AlterSubscriptionStmt = 887, /* AlterSubscriptionStmt */ + YYSYMBOL_DropSubscriptionStmt = 888, /* DropSubscriptionStmt */ + YYSYMBOL_RuleStmt = 889, /* RuleStmt */ + YYSYMBOL_RuleActionList = 890, /* RuleActionList */ + YYSYMBOL_RuleActionMulti = 891, /* RuleActionMulti */ + YYSYMBOL_RuleActionStmt = 892, /* RuleActionStmt */ + YYSYMBOL_RuleActionStmtOrEmpty = 893, /* RuleActionStmtOrEmpty */ + YYSYMBOL_event = 894, /* event */ + YYSYMBOL_opt_instead = 895, /* opt_instead */ + YYSYMBOL_NotifyStmt = 896, /* NotifyStmt */ + YYSYMBOL_notify_payload = 897, /* notify_payload */ + YYSYMBOL_ListenStmt = 898, /* ListenStmt */ + YYSYMBOL_UnlistenStmt = 899, /* UnlistenStmt */ + YYSYMBOL_TransactionStmt = 900, /* TransactionStmt */ + YYSYMBOL_TransactionStmtLegacy = 901, /* TransactionStmtLegacy */ + YYSYMBOL_opt_transaction = 902, /* opt_transaction */ + YYSYMBOL_transaction_mode_item = 903, /* transaction_mode_item */ + YYSYMBOL_transaction_mode_list = 904, /* transaction_mode_list */ + YYSYMBOL_transaction_mode_list_or_empty = 905, /* transaction_mode_list_or_empty */ + YYSYMBOL_opt_transaction_chain = 906, /* opt_transaction_chain */ + YYSYMBOL_ViewStmt = 907, /* ViewStmt */ + YYSYMBOL_opt_check_option = 908, /* opt_check_option */ + YYSYMBOL_LoadStmt = 909, /* LoadStmt */ + YYSYMBOL_CreatedbStmt = 910, /* CreatedbStmt */ + YYSYMBOL_createdb_opt_list = 911, /* createdb_opt_list */ + YYSYMBOL_createdb_opt_items = 912, /* createdb_opt_items */ + YYSYMBOL_createdb_opt_item = 913, /* createdb_opt_item */ + YYSYMBOL_createdb_opt_name = 914, /* createdb_opt_name */ + YYSYMBOL_opt_equal = 915, /* opt_equal */ + YYSYMBOL_AlterDatabaseStmt = 916, /* AlterDatabaseStmt */ + YYSYMBOL_AlterDatabaseSetStmt = 917, /* AlterDatabaseSetStmt */ + YYSYMBOL_DropdbStmt = 918, /* DropdbStmt */ + YYSYMBOL_drop_option_list = 919, /* drop_option_list */ + YYSYMBOL_drop_option = 920, /* drop_option */ + YYSYMBOL_AlterCollationStmt = 921, /* AlterCollationStmt */ + YYSYMBOL_AlterSystemStmt = 922, /* AlterSystemStmt */ + YYSYMBOL_CreateDomainStmt = 923, /* CreateDomainStmt */ + YYSYMBOL_AlterDomainStmt = 924, /* AlterDomainStmt */ + YYSYMBOL_opt_as = 925, /* opt_as */ + YYSYMBOL_AlterTSDictionaryStmt = 926, /* AlterTSDictionaryStmt */ + YYSYMBOL_AlterTSConfigurationStmt = 927, /* AlterTSConfigurationStmt */ + YYSYMBOL_any_with = 928, /* any_with */ + YYSYMBOL_CreateConversionStmt = 929, /* CreateConversionStmt */ + YYSYMBOL_ClusterStmt = 930, /* ClusterStmt */ + YYSYMBOL_cluster_index_specification = 931, /* cluster_index_specification */ + YYSYMBOL_VacuumStmt = 932, /* VacuumStmt */ + YYSYMBOL_AnalyzeStmt = 933, /* AnalyzeStmt */ + YYSYMBOL_utility_option_list = 934, /* utility_option_list */ + YYSYMBOL_analyze_keyword = 935, /* analyze_keyword */ + YYSYMBOL_utility_option_elem = 936, /* utility_option_elem */ + YYSYMBOL_utility_option_name = 937, /* utility_option_name */ + YYSYMBOL_utility_option_arg = 938, /* utility_option_arg */ + YYSYMBOL_opt_analyze = 939, /* opt_analyze */ + YYSYMBOL_opt_verbose = 940, /* opt_verbose */ + YYSYMBOL_opt_full = 941, /* opt_full */ + YYSYMBOL_opt_freeze = 942, /* opt_freeze */ + YYSYMBOL_opt_name_list = 943, /* opt_name_list */ + YYSYMBOL_vacuum_relation = 944, /* vacuum_relation */ + YYSYMBOL_vacuum_relation_list = 945, /* vacuum_relation_list */ + YYSYMBOL_opt_vacuum_relation_list = 946, /* opt_vacuum_relation_list */ + YYSYMBOL_ExplainStmt = 947, /* ExplainStmt */ + YYSYMBOL_ExplainableStmt = 948, /* ExplainableStmt */ + YYSYMBOL_PrepareStmt = 949, /* PrepareStmt */ + YYSYMBOL_prep_type_clause = 950, /* prep_type_clause */ + YYSYMBOL_PreparableStmt = 951, /* PreparableStmt */ + YYSYMBOL_ExecuteStmt = 952, /* ExecuteStmt */ + YYSYMBOL_execute_param_clause = 953, /* execute_param_clause */ + YYSYMBOL_DeallocateStmt = 954, /* DeallocateStmt */ + YYSYMBOL_InsertStmt = 955, /* InsertStmt */ + YYSYMBOL_insert_target = 956, /* insert_target */ + YYSYMBOL_insert_rest = 957, /* insert_rest */ + YYSYMBOL_override_kind = 958, /* override_kind */ + YYSYMBOL_insert_column_list = 959, /* insert_column_list */ + YYSYMBOL_insert_column_item = 960, /* insert_column_item */ + YYSYMBOL_opt_on_conflict = 961, /* opt_on_conflict */ + YYSYMBOL_opt_conf_expr = 962, /* opt_conf_expr */ + YYSYMBOL_returning_clause = 963, /* returning_clause */ + YYSYMBOL_DeleteStmt = 964, /* DeleteStmt */ + YYSYMBOL_using_clause = 965, /* using_clause */ + YYSYMBOL_LockStmt = 966, /* LockStmt */ + YYSYMBOL_opt_lock = 967, /* opt_lock */ + YYSYMBOL_lock_type = 968, /* lock_type */ + YYSYMBOL_opt_nowait = 969, /* opt_nowait */ + YYSYMBOL_opt_nowait_or_skip = 970, /* opt_nowait_or_skip */ + YYSYMBOL_UpdateStmt = 971, /* UpdateStmt */ + YYSYMBOL_set_clause_list = 972, /* set_clause_list */ + YYSYMBOL_set_clause = 973, /* set_clause */ + YYSYMBOL_set_target = 974, /* set_target */ + YYSYMBOL_set_target_list = 975, /* set_target_list */ + YYSYMBOL_DeclareCursorStmt = 976, /* DeclareCursorStmt */ + YYSYMBOL_cursor_name = 977, /* cursor_name */ + YYSYMBOL_cursor_options = 978, /* cursor_options */ + YYSYMBOL_opt_hold = 979, /* opt_hold */ + YYSYMBOL_SelectStmt = 980, /* SelectStmt */ + YYSYMBOL_select_with_parens = 981, /* select_with_parens */ + YYSYMBOL_select_no_parens = 982, /* select_no_parens */ + YYSYMBOL_select_clause = 983, /* select_clause */ + YYSYMBOL_simple_select = 984, /* simple_select */ + YYSYMBOL_with_clause = 985, /* with_clause */ + YYSYMBOL_cte_list = 986, /* cte_list */ + YYSYMBOL_common_table_expr = 987, /* common_table_expr */ + YYSYMBOL_opt_materialized = 988, /* opt_materialized */ + YYSYMBOL_opt_search_clause = 989, /* opt_search_clause */ + YYSYMBOL_opt_cycle_clause = 990, /* opt_cycle_clause */ + YYSYMBOL_opt_with_clause = 991, /* opt_with_clause */ + YYSYMBOL_into_clause = 992, /* into_clause */ + YYSYMBOL_OptTempTableName = 993, /* OptTempTableName */ + YYSYMBOL_opt_table = 994, /* opt_table */ + YYSYMBOL_set_quantifier = 995, /* set_quantifier */ + YYSYMBOL_distinct_clause = 996, /* distinct_clause */ + YYSYMBOL_opt_all_clause = 997, /* opt_all_clause */ + YYSYMBOL_opt_distinct_clause = 998, /* opt_distinct_clause */ + YYSYMBOL_opt_sort_clause = 999, /* opt_sort_clause */ + YYSYMBOL_sort_clause = 1000, /* sort_clause */ + YYSYMBOL_sortby_list = 1001, /* sortby_list */ + YYSYMBOL_sortby = 1002, /* sortby */ + YYSYMBOL_select_limit = 1003, /* select_limit */ + YYSYMBOL_opt_select_limit = 1004, /* opt_select_limit */ + YYSYMBOL_limit_clause = 1005, /* limit_clause */ + YYSYMBOL_offset_clause = 1006, /* offset_clause */ + YYSYMBOL_select_limit_value = 1007, /* select_limit_value */ + YYSYMBOL_select_offset_value = 1008, /* select_offset_value */ + YYSYMBOL_select_fetch_first_value = 1009, /* select_fetch_first_value */ + YYSYMBOL_I_or_F_const = 1010, /* I_or_F_const */ + YYSYMBOL_row_or_rows = 1011, /* row_or_rows */ + YYSYMBOL_first_or_next = 1012, /* first_or_next */ + YYSYMBOL_group_clause = 1013, /* group_clause */ + YYSYMBOL_group_by_list = 1014, /* group_by_list */ + YYSYMBOL_group_by_item = 1015, /* group_by_item */ + YYSYMBOL_empty_grouping_set = 1016, /* empty_grouping_set */ + YYSYMBOL_rollup_clause = 1017, /* rollup_clause */ + YYSYMBOL_cube_clause = 1018, /* cube_clause */ + YYSYMBOL_grouping_sets_clause = 1019, /* grouping_sets_clause */ + YYSYMBOL_having_clause = 1020, /* having_clause */ + YYSYMBOL_for_locking_clause = 1021, /* for_locking_clause */ + YYSYMBOL_opt_for_locking_clause = 1022, /* opt_for_locking_clause */ + YYSYMBOL_for_locking_items = 1023, /* for_locking_items */ + YYSYMBOL_for_locking_item = 1024, /* for_locking_item */ + YYSYMBOL_for_locking_strength = 1025, /* for_locking_strength */ + YYSYMBOL_locked_rels_list = 1026, /* locked_rels_list */ + YYSYMBOL_values_clause = 1027, /* values_clause */ + YYSYMBOL_from_clause = 1028, /* from_clause */ + YYSYMBOL_from_list = 1029, /* from_list */ + YYSYMBOL_table_ref = 1030, /* table_ref */ + YYSYMBOL_joined_table = 1031, /* joined_table */ + YYSYMBOL_alias_clause = 1032, /* alias_clause */ + YYSYMBOL_opt_alias_clause = 1033, /* opt_alias_clause */ + YYSYMBOL_opt_alias_clause_for_join_using = 1034, /* opt_alias_clause_for_join_using */ + YYSYMBOL_func_alias_clause = 1035, /* func_alias_clause */ + YYSYMBOL_join_type = 1036, /* join_type */ + YYSYMBOL_opt_outer = 1037, /* opt_outer */ + YYSYMBOL_join_qual = 1038, /* join_qual */ + YYSYMBOL_relation_expr = 1039, /* relation_expr */ + YYSYMBOL_relation_expr_list = 1040, /* relation_expr_list */ + YYSYMBOL_relation_expr_opt_alias = 1041, /* relation_expr_opt_alias */ + YYSYMBOL_tablesample_clause = 1042, /* tablesample_clause */ + YYSYMBOL_opt_repeatable_clause = 1043, /* opt_repeatable_clause */ + YYSYMBOL_func_table = 1044, /* func_table */ + YYSYMBOL_rowsfrom_item = 1045, /* rowsfrom_item */ + YYSYMBOL_rowsfrom_list = 1046, /* rowsfrom_list */ + YYSYMBOL_opt_col_def_list = 1047, /* opt_col_def_list */ + YYSYMBOL_opt_ordinality = 1048, /* opt_ordinality */ + YYSYMBOL_where_clause = 1049, /* where_clause */ + YYSYMBOL_where_or_current_clause = 1050, /* where_or_current_clause */ + YYSYMBOL_OptTableFuncElementList = 1051, /* OptTableFuncElementList */ + YYSYMBOL_TableFuncElementList = 1052, /* TableFuncElementList */ + YYSYMBOL_TableFuncElement = 1053, /* TableFuncElement */ + YYSYMBOL_xmltable = 1054, /* xmltable */ + YYSYMBOL_xmltable_column_list = 1055, /* xmltable_column_list */ + YYSYMBOL_xmltable_column_el = 1056, /* xmltable_column_el */ + YYSYMBOL_xmltable_column_option_list = 1057, /* xmltable_column_option_list */ + YYSYMBOL_xmltable_column_option_el = 1058, /* xmltable_column_option_el */ + YYSYMBOL_xml_namespace_list = 1059, /* xml_namespace_list */ + YYSYMBOL_xml_namespace_el = 1060, /* xml_namespace_el */ + YYSYMBOL_Typename = 1061, /* Typename */ + YYSYMBOL_opt_array_bounds = 1062, /* opt_array_bounds */ + YYSYMBOL_SimpleTypename = 1063, /* SimpleTypename */ + YYSYMBOL_ConstTypename = 1064, /* ConstTypename */ + YYSYMBOL_GenericType = 1065, /* GenericType */ + YYSYMBOL_opt_type_modifiers = 1066, /* opt_type_modifiers */ + YYSYMBOL_Numeric = 1067, /* Numeric */ + YYSYMBOL_opt_float = 1068, /* opt_float */ + YYSYMBOL_Bit = 1069, /* Bit */ + YYSYMBOL_ConstBit = 1070, /* ConstBit */ + YYSYMBOL_BitWithLength = 1071, /* BitWithLength */ + YYSYMBOL_BitWithoutLength = 1072, /* BitWithoutLength */ + YYSYMBOL_Character = 1073, /* Character */ + YYSYMBOL_ConstCharacter = 1074, /* ConstCharacter */ + YYSYMBOL_CharacterWithLength = 1075, /* CharacterWithLength */ + YYSYMBOL_CharacterWithoutLength = 1076, /* CharacterWithoutLength */ + YYSYMBOL_character = 1077, /* character */ + YYSYMBOL_opt_varying = 1078, /* opt_varying */ + YYSYMBOL_ConstDatetime = 1079, /* ConstDatetime */ + YYSYMBOL_ConstInterval = 1080, /* ConstInterval */ + YYSYMBOL_opt_timezone = 1081, /* opt_timezone */ + YYSYMBOL_opt_interval = 1082, /* opt_interval */ + YYSYMBOL_interval_second = 1083, /* interval_second */ + YYSYMBOL_a_expr = 1084, /* a_expr */ + YYSYMBOL_b_expr = 1085, /* b_expr */ + YYSYMBOL_c_expr = 1086, /* c_expr */ + YYSYMBOL_func_application = 1087, /* func_application */ + YYSYMBOL_func_expr = 1088, /* func_expr */ + YYSYMBOL_func_expr_windowless = 1089, /* func_expr_windowless */ + YYSYMBOL_func_expr_common_subexpr = 1090, /* func_expr_common_subexpr */ + YYSYMBOL_xml_root_version = 1091, /* xml_root_version */ + YYSYMBOL_opt_xml_root_standalone = 1092, /* opt_xml_root_standalone */ + YYSYMBOL_xml_attributes = 1093, /* xml_attributes */ + YYSYMBOL_xml_attribute_list = 1094, /* xml_attribute_list */ + YYSYMBOL_xml_attribute_el = 1095, /* xml_attribute_el */ + YYSYMBOL_document_or_content = 1096, /* document_or_content */ + YYSYMBOL_xml_whitespace_option = 1097, /* xml_whitespace_option */ + YYSYMBOL_xmlexists_argument = 1098, /* xmlexists_argument */ + YYSYMBOL_xml_passing_mech = 1099, /* xml_passing_mech */ + YYSYMBOL_within_group_clause = 1100, /* within_group_clause */ + YYSYMBOL_filter_clause = 1101, /* filter_clause */ + YYSYMBOL_window_clause = 1102, /* window_clause */ + YYSYMBOL_window_definition_list = 1103, /* window_definition_list */ + YYSYMBOL_window_definition = 1104, /* window_definition */ + YYSYMBOL_over_clause = 1105, /* over_clause */ + YYSYMBOL_window_specification = 1106, /* window_specification */ + YYSYMBOL_opt_existing_window_name = 1107, /* opt_existing_window_name */ + YYSYMBOL_opt_partition_clause = 1108, /* opt_partition_clause */ + YYSYMBOL_opt_frame_clause = 1109, /* opt_frame_clause */ + YYSYMBOL_frame_extent = 1110, /* frame_extent */ + YYSYMBOL_frame_bound = 1111, /* frame_bound */ + YYSYMBOL_opt_window_exclusion_clause = 1112, /* opt_window_exclusion_clause */ + YYSYMBOL_row = 1113, /* row */ + YYSYMBOL_explicit_row = 1114, /* explicit_row */ + YYSYMBOL_implicit_row = 1115, /* implicit_row */ + YYSYMBOL_sub_type = 1116, /* sub_type */ + YYSYMBOL_all_Op = 1117, /* all_Op */ + YYSYMBOL_MathOp = 1118, /* MathOp */ + YYSYMBOL_qual_Op = 1119, /* qual_Op */ + YYSYMBOL_qual_all_Op = 1120, /* qual_all_Op */ + YYSYMBOL_subquery_Op = 1121, /* subquery_Op */ + YYSYMBOL_expr_list = 1122, /* expr_list */ + YYSYMBOL_func_arg_list = 1123, /* func_arg_list */ + YYSYMBOL_func_arg_expr = 1124, /* func_arg_expr */ + YYSYMBOL_func_arg_list_opt = 1125, /* func_arg_list_opt */ + YYSYMBOL_type_list = 1126, /* type_list */ + YYSYMBOL_array_expr = 1127, /* array_expr */ + YYSYMBOL_array_expr_list = 1128, /* array_expr_list */ + YYSYMBOL_extract_list = 1129, /* extract_list */ + YYSYMBOL_extract_arg = 1130, /* extract_arg */ + YYSYMBOL_unicode_normal_form = 1131, /* unicode_normal_form */ + YYSYMBOL_overlay_list = 1132, /* overlay_list */ + YYSYMBOL_position_list = 1133, /* position_list */ + YYSYMBOL_substr_list = 1134, /* substr_list */ + YYSYMBOL_trim_list = 1135, /* trim_list */ + YYSYMBOL_in_expr = 1136, /* in_expr */ + YYSYMBOL_case_expr = 1137, /* case_expr */ + YYSYMBOL_when_clause_list = 1138, /* when_clause_list */ + YYSYMBOL_when_clause = 1139, /* when_clause */ + YYSYMBOL_case_default = 1140, /* case_default */ + YYSYMBOL_case_arg = 1141, /* case_arg */ + YYSYMBOL_columnref = 1142, /* columnref */ + YYSYMBOL_indirection_el = 1143, /* indirection_el */ + YYSYMBOL_opt_slice_bound = 1144, /* opt_slice_bound */ + YYSYMBOL_indirection = 1145, /* indirection */ + YYSYMBOL_opt_indirection = 1146, /* opt_indirection */ + YYSYMBOL_opt_asymmetric = 1147, /* opt_asymmetric */ + YYSYMBOL_opt_target_list = 1148, /* opt_target_list */ + YYSYMBOL_target_list = 1149, /* target_list */ + YYSYMBOL_target_el = 1150, /* target_el */ + YYSYMBOL_qualified_name_list = 1151, /* qualified_name_list */ + YYSYMBOL_qualified_name = 1152, /* qualified_name */ + YYSYMBOL_name_list = 1153, /* name_list */ + YYSYMBOL_name = 1154, /* name */ + YYSYMBOL_attr_name = 1155, /* attr_name */ + YYSYMBOL_file_name = 1156, /* file_name */ + YYSYMBOL_func_name = 1157, /* func_name */ + YYSYMBOL_AexprConst = 1158, /* AexprConst */ + YYSYMBOL_Iconst = 1159, /* Iconst */ + YYSYMBOL_Sconst = 1160, /* Sconst */ + YYSYMBOL_SignedIconst = 1161, /* SignedIconst */ + YYSYMBOL_RoleId = 1162, /* RoleId */ + YYSYMBOL_RoleSpec = 1163, /* RoleSpec */ + YYSYMBOL_role_list = 1164, /* role_list */ + YYSYMBOL_PLpgSQL_Expr = 1165, /* PLpgSQL_Expr */ + YYSYMBOL_PLAssignStmt = 1166, /* PLAssignStmt */ + YYSYMBOL_plassign_target = 1167, /* plassign_target */ + YYSYMBOL_plassign_equals = 1168, /* plassign_equals */ + YYSYMBOL_ColId = 1169, /* ColId */ + YYSYMBOL_type_function_name = 1170, /* type_function_name */ + YYSYMBOL_NonReservedWord = 1171, /* NonReservedWord */ + YYSYMBOL_ColLabel = 1172, /* ColLabel */ + YYSYMBOL_BareColLabel = 1173, /* BareColLabel */ + YYSYMBOL_unreserved_keyword = 1174, /* unreserved_keyword */ + YYSYMBOL_col_name_keyword = 1175, /* col_name_keyword */ + YYSYMBOL_type_func_name_keyword = 1176, /* type_func_name_keyword */ + YYSYMBOL_reserved_keyword = 1177, /* reserved_keyword */ + YYSYMBOL_bare_label_keyword = 1178 /* bare_label_keyword */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + + + + +#ifdef short +# undef short +#endif + +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif +#endif + +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + . */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) +#else +# define YY_USE(E) /* empty */ +#endif + +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if !defined yyoverflow + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* !defined yyoverflow */ + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yy_state_t yyss_alloc; + YYSTYPE yyvs_alloc; + YYLTYPE yyls_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ + + YYSIZEOF (YYLTYPE)) \ + + 2 * YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYPTRDIFF_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYPTRDIFF_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 895 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 108111 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 503 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 676 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 3159 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 5980 + +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK 740 + + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const yytype_int16 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 492, 2, 2, + 497, 498, 490, 488, 501, 489, 499, 491, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 502, 500, + 485, 487, 486, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 495, 2, 496, 493, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 494 +}; + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_int16 yyrline[] = +{ + 0, 827, 827, 831, 835, 840, 847, 854, 873, 885, + 899, 900, 904, 905, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, + 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, + 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, + 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1028, 1037, 1052, 1063, 1064, + 1065, 1074, 1075, 1079, 1080, 1084, 1089, 1093, 1103, 1111, + 1115, 1119, 1124, 1128, 1176, 1178, 1182, 1186, 1190, 1194, + 1208, 1226, 1234, 1245, 1246, 1250, 1258, 1266, 1274, 1295, + 1302, 1309, 1316, 1323, 1330, 1347, 1365, 1376, 1377, 1388, + 1398, 1408, 1423, 1441, 1442, 1446, 1453, 1461, 1462, 1463, + 1464, 1465, 1466, 1480, 1486, 1492, 1501, 1509, 1517, 1521, + 1529, 1537, 1544, 1554, 1555, 1563, 1574, 1582, 1590, 1601, + 1609, 1617, 1624, 1633, 1643, 1644, 1648, 1649, 1652, 1654, + 1658, 1659, 1660, 1661, 1665, 1666, 1667, 1673, 1685, 1689, + 1693, 1708, 1715, 1716, 1717, 1721, 1722, 1723, 1727, 1728, + 1732, 1736, 1737, 1744, 1751, 1761, 1768, 1778, 1779, 1784, + 1785, 1790, 1796, 1802, 1808, 1814, 1824, 1834, 1835, 1839, + 1840, 1848, 1863, 1869, 1875, 1881, 1887, 1906, 1915, 1924, + 1933, 1942, 1953, 1964, 1973, 1982, 1991, 2002, 2013, 2022, + 2031, 2040, 2049, 2058, 2067, 2078, 2089, 2098, 2110, 2111, + 2116, 2130, 2143, 2159, 2176, 2185, 2194, 2203, 2212, 2221, + 2229, 2237, 2245, 2254, 2263, 2279, 2288, 2297, 2306, 2315, + 2332, 2341, 2350, 2359, 2369, 2382, 2397, 2406, 2414, 2429, + 2437, 2447, 2457, 2464, 2472, 2480, 2487, 2494, 2502, 2510, + 2518, 2525, 2532, 2540, 2547, 2554, 2562, 2570, 2578, 2586, + 2594, 2602, 2612, 2619, 2627, 2635, 2643, 2651, 2659, 2666, + 2673, 2680, 2686, 2696, 2697, 2701, 2702, 2703, 2707, 2715, + 2719, 2720, 2724, 2731, 2738, 2745, 2755, 2758, 2759, 2763, + 2764, 2769, 2773, 2777, 2782, 2789, 2791, 2796, 2800, 2804, + 2815, 2823, 2876, 2889, 2903, 2915, 2922, 2926, 2940, 2953, + 2954, 2959, 2968, 2978, 2988, 3014, 3020, 3053, 3088, 3110, + 3111, 3115, 3116, 3125, 3126, 3127, 3130, 3131, 3136, 3137, + 3141, 3145, 3149, 3153, 3157, 3161, 3165, 3169, 3173, 3177, + 3181, 3185, 3189, 3198, 3202, 3206, 3210, 3214, 3215, 3220, + 3224, 3231, 3238, 3239, 3240, 3241, 3242, 3246, 3250, 3258, + 3269, 3288, 3307, 3327, 3347, 3367, 3400, 3401, 3402, 3403, + 3404, 3411, 3418, 3419, 3423, 3424, 3428, 3429, 3433, 3437, + 3444, 3448, 3455, 3456, 3457, 3461, 3462, 3465, 3487, 3505, + 3526, 3527, 3531, 3532, 3536, 3537, 3541, 3548, 3549, 3550, + 3581, 3588, 3595, 3606, 3617, 3629, 3638, 3647, 3670, 3688, + 3689, 3708, 3715, 3722, 3729, 3740, 3751, 3752, 3753, 3757, + 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3775, + 3782, 3786, 3799, 3815, 3830, 3846, 3861, 3880, 3901, 3902, + 3906, 3907, 3911, 3912, 3915, 3921, 3922, 3925, 3929, 3937, + 3942, 3948, 3949, 3953, 3958, 3965, 3966, 3976, 3978, 3980, + 3982, 3985, 3988, 3991, 3995, 3996, 3997, 3998, 3999, 4002, + 4003, 4007, 4008, 4011, 4023, 4024, 4027, 4038, 4049, 4063, + 4064, 4069, 4070, 4071, 4074, 4075, 4076, 4077, 4080, 4081, + 4084, 4085, 4088, 4106, 4118, 4139, 4140, 4143, 4149, 4155, + 4172, 4180, 4201, 4214, 4230, 4246, 4247, 4248, 4260, 4273, + 4289, 4303, 4304, 4316, 4336, 4346, 4359, 4367, 4378, 4379, + 4382, 4383, 4386, 4387, 4390, 4394, 4398, 4402, 4406, 4410, + 4414, 4418, 4422, 4426, 4430, 4435, 4439, 4443, 4449, 4450, + 4454, 4455, 4456, 4461, 4464, 4465, 4477, 4492, 4507, 4508, + 4516, 4517, 4521, 4522, 4526, 4527, 4531, 4532, 4536, 4537, + 4547, 4558, 4559, 4572, 4579, 4596, 4604, 4615, 4618, 4622, + 4626, 4630, 4637, 4649, 4659, 4662, 4666, 4679, 4688, 4697, + 4706, 4715, 4724, 4733, 4742, 4751, 4760, 4769, 4778, 4787, + 4805, 4816, 4817, 4818, 4819, 4823, 4824, 4828, 4829, 4839, + 4847, 4859, 4860, 4864, 4868, 4876, 4880, 4884, 4891, 4895, + 4900, 4905, 4912, 4919, 4924, 4934, 4946, 4961, 4962, 4967, + 4968, 4972, 4973, 4983, 4992, 5000, 5017, 5037, 5057, 5078, + 5111, 5126, 5127, 5131, 5139, 5154, 5163, 5175, 5176, 5188, + 5196, 5213, 5237, 5254, 5268, 5269, 5273, 5274, 5278, 5279, + 5283, 5284, 5288, 5302, 5306, 5307, 5311, 5312, 5313, 5314, + 5315, 5325, 5336, 5337, 5348, 5370, 5401, 5402, 5403, 5407, + 5409, 5431, 5433, 5435, 5437, 5439, 5444, 5445, 5449, 5450, + 5454, 5465, 5466, 5470, 5479, 5483, 5487, 5492, 5502, 5503, + 5507, 5508, 5512, 5513, 5517, 5518, 5522, 5523, 5524, 5528, + 5532, 5533, 5534, 5538, 5539, 5544, 5545, 5572, 5573, 5574, + 5575, 5576, 5577, 5590, 5600, 5614, 5616, 5621, 5626, 5628, + 5633, 5643, 5644, 5645, 5646, 5657, 5676, 5687, 5699, 5709, + 5719, 5730, 5739, 5746, 5753, 5762, 5771, 5780, 5789, 5798, + 5808, 5817, 5829, 5832, 5833, 5836, 5840, 5847, 5848, 5849, + 5850, 5851, 5852, 5855, 5858, 5859, 5867, 5874, 5875, 5878, + 5880, 5891, 5902, 5913, 5924, 5937, 5938, 5954, 5969, 5970, + 5974, 5986, 5996, 6004, 6013, 6022, 6023, 6026, 6027, 6030, + 6031, 6032, 6035, 6049, 6054, 6064, 6073, 6085, 6086, 6090, + 6098, 6110, 6120, 6133, 6143, 6165, 6175, 6193, 6203, 6213, + 6223, 6233, 6243, 6253, 6263, 6273, 6283, 6293, 6303, 6317, + 6318, 6319, 6320, 6321, 6322, 6323, 6324, 6325, 6326, 6327, + 6328, 6329, 6339, 6340, 6341, 6342, 6343, 6347, 6348, 6349, + 6350, 6351, 6352, 6353, 6354, 6359, 6360, 6361, 6365, 6366, + 6369, 6370, 6373, 6375, 6380, 6381, 6392, 6403, 6404, 6405, + 6415, 6423, 6431, 6439, 6447, 6455, 6463, 6471, 6479, 6487, + 6500, 6508, 6516, 6524, 6532, 6540, 6548, 6556, 6567, 6568, + 6582, 6592, 6602, 6612, 6622, 6632, 6642, 6652, 6662, 6672, + 6684, 6685, 6688, 6689, 6699, 6705, 6713, 6721, 6729, 6737, + 6745, 6753, 6761, 6769, 6777, 6785, 6793, 6801, 6809, 6817, + 6825, 6833, 6843, 6844, 6847, 6848, 6858, 6875, 6890, 6917, + 6919, 6921, 6923, 6930, 6939, 6940, 6943, 6950, 6957, 6964, + 6978, 6986, 6994, 7002, 7010, 7018, 7026, 7034, 7042, 7050, + 7058, 7066, 7074, 7082, 7090, 7098, 7106, 7114, 7122, 7130, + 7142, 7143, 7147, 7148, 7153, 7154, 7164, 7177, 7187, 7199, + 7200, 7203, 7204, 7214, 7224, 7225, 7229, 7233, 7237, 7248, + 7261, 7275, 7292, 7293, 7294, 7295, 7296, 7297, 7309, 7339, + 7372, 7373, 7377, 7378, 7382, 7383, 7387, 7388, 7391, 7392, + 7397, 7409, 7428, 7433, 7438, 7445, 7446, 7449, 7450, 7453, + 7454, 7457, 7458, 7461, 7462, 7463, 7466, 7467, 7468, 7484, + 7497, 7511, 7524, 7540, 7541, 7544, 7545, 7549, 7550, 7554, + 7555, 7560, 7573, 7580, 7587, 7602, 7603, 7607, 7608, 7623, + 7632, 7641, 7650, 7659, 7671, 7672, 7673, 7674, 7675, 7681, + 7685, 7700, 7701, 7707, 7717, 7721, 7726, 7734, 7776, 7780, + 7784, 7788, 7796, 7797, 7801, 7812, 7813, 7818, 7819, 7824, + 7825, 7832, 7836, 7840, 7844, 7848, 7852, 7856, 7860, 7864, + 7868, 7872, 7876, 7880, 7884, 7888, 7892, 7897, 7904, 7908, + 7912, 7916, 7920, 7926, 7927, 7933, 7942, 7946, 7957, 7963, + 7972, 7978, 7979, 7983, 7984, 7988, 7989, 7992, 8004, 8008, + 8023, 8031, 8039, 8051, 8052, 8057, 8058, 8075, 8085, 8095, + 8105, 8115, 8125, 8138, 8148, 8161, 8171, 8184, 8192, 8194, + 8196, 8201, 8203, 8208, 8209, 8214, 8232, 8241, 8242, 8246, + 8250, 8262, 8273, 8284, 8297, 8298, 8299, 8303, 8315, 8316, + 8326, 8338, 8342, 8346, 8350, 8357, 8377, 8389, 8401, 8413, + 8427, 8428, 8431, 8432, 8433, 8443, 8452, 8469, 8478, 8487, + 8496, 8505, 8514, 8523, 8532, 8541, 8550, 8559, 8568, 8577, + 8587, 8597, 8606, 8615, 8624, 8633, 8642, 8651, 8661, 8671, + 8681, 8691, 8701, 8711, 8721, 8731, 8741, 8751, 8761, 8771, + 8782, 8793, 8804, 8815, 8826, 8837, 8847, 8857, 8868, 8879, + 8889, 8899, 8907, 8916, 8925, 8934, 8943, 8952, 8961, 8970, + 8979, 8988, 9002, 9003, 9006, 9007, 9017, 9026, 9035, 9044, + 9054, 9063, 9074, 9075, 9085, 9094, 9103, 9112, 9121, 9130, + 9139, 9148, 9157, 9166, 9175, 9184, 9193, 9202, 9211, 9220, + 9229, 9238, 9247, 9256, 9265, 9274, 9283, 9292, 9301, 9310, + 9319, 9337, 9346, 9347, 9350, 9352, 9358, 9359, 9360, 9361, + 9362, 9374, 9389, 9397, 9405, 9413, 9421, 9429, 9437, 9445, + 9453, 9461, 9469, 9477, 9485, 9493, 9501, 9509, 9517, 9525, + 9533, 9541, 9549, 9557, 9565, 9573, 9591, 9610, 9611, 9615, + 9619, 9639, 9646, 9654, 9662, 9679, 9698, 9707, 9716, 9725, + 9735, 9745, 9755, 9765, 9783, 9791, 9807, 9824, 9825, 9826, + 9831, 9837, 9846, 9847, 9848, 9849, 9850, 9854, 9855, 9858, + 9859, 9860, 9861, 9865, 9866, 9867, 9879, 9889, 9890, 9893, + 9902, 9908, 9927, 9935, 9942, 9950, 9958, 9965, 9972, 9979, + 9986, 9993, 10000, 10007, 10017, 10024, 10034, 10035, 10036, 10040, + 10043, 10046, 10049, 10052, 10059, 10061, 10063, 10068, 10070, 10074, + 10075, 10076, 10088, 10101, 10114, 10132, 10153, 10154, 10155, 10156, + 10166, 10182, 10192, 10193, 10197, 10198, 10202, 10206, 10210, 10228, + 10229, 10230, 10231, 10232, 10233, 10234, 10241, 10242, 10253, 10260, + 10267, 10278, 10295, 10303, 10311, 10319, 10330, 10334, 10345, 10357, + 10374, 10380, 10396, 10409, 10418, 10426, 10434, 10443, 10454, 10465, + 10475, 10476, 10487, 10497, 10508, 10519, 10530, 10541, 10550, 10562, + 10563, 10577, 10601, 10612, 10620, 10631, 10644, 10645, 10657, 10677, + 10687, 10698, 10709, 10713, 10720, 10721, 10725, 10732, 10733, 10737, + 10738, 10739, 10743, 10744, 10748, 10749, 10752, 10753, 10756, 10757, + 10761, 10762, 10766, 10773, 10775, 10780, 10781, 10794, 10801, 10811, + 10818, 10828, 10829, 10830, 10831, 10832, 10833, 10834, 10835, 10836, + 10846, 10856, 10857, 10861, 10862, 10863, 10864, 10874, 10881, 10898, + 10917, 10918, 10928, 10934, 10940, 10946, 10962, 10980, 10984, 10992, + 10998, 11005, 11011, 11018, 11027, 11028, 11032, 11034, 11039, 11050, + 11060, 11070, 11076, 11085, 11094, 11100, 11101, 11112, 11126, 11127, + 11138, 11149, 11150, 11153, 11154, 11155, 11156, 11157, 11158, 11159, + 11160, 11163, 11164, 11168, 11169, 11170, 11181, 11199, 11200, 11204, + 11209, 11233, 11244, 11245, 11255, 11266, 11269, 11270, 11271, 11272, + 11273, 11274, 11277, 11278, 11279, 11327, 11328, 11332, 11333, 11348, + 11349, 11356, 11364, 11372, 11380, 11388, 11396, 11407, 11408, 11440, + 11455, 11471, 11472, 11491, 11495, 11499, 11514, 11521, 11528, 11538, + 11539, 11542, 11557, 11558, 11559, 11563, 11572, 11582, 11588, 11599, + 11611, 11617, 11618, 11622, 11634, 11642, 11647, 11652, 11657, 11662, + 11670, 11678, 11683, 11688, 11695, 11696, 11700, 11701, 11702, 11709, + 11710, 11714, 11715, 11719, 11720, 11724, 11725, 11729, 11733, 11734, + 11737, 11746, 11759, 11764, 11769, 11773, 11784, 11785, 11789, 11797, + 11813, 11821, 11829, 11837, 11848, 11851, 11856, 11857, 11865, 11885, + 11886, 11888, 11893, 11894, 11898, 11899, 11902, 11903, 11928, 11936, + 11945, 11946, 11950, 11951, 11952, 11953, 11954, 11958, 11971, 11978, + 11985, 11992, 11993, 11997, 11998, 12002, 12003, 12007, 12008, 12012, + 12023, 12024, 12025, 12026, 12030, 12031, 12041, 12047, 12065, 12066, + 12070, 12071, 12077, 12082, 12090, 12097, 12105, 12111, 12118, 12153, + 12178, 12182, 12208, 12212, 12225, 12245, 12266, 12278, 12294, 12300, + 12305, 12311, 12318, 12319, 12329, 12335, 12343, 12347, 12351, 12357, + 12364, 12369, 12370, 12371, 12372, 12376, 12377, 12392, 12396, 12404, + 12411, 12418, 12425, 12436, 12437, 12450, 12454, 12461, 12474, 12487, + 12488, 12503, 12513, 12525, 12530, 12531, 12534, 12535, 12538, 12539, + 12544, 12545, 12550, 12551, 12559, 12564, 12565, 12569, 12573, 12579, + 12603, 12613, 12626, 12627, 12631, 12645, 12702, 12716, 12718, 12723, + 12725, 12727, 12729, 12734, 12736, 12741, 12749, 12769, 12774, 12781, + 12786, 12792, 12797, 12806, 12808, 12811, 12815, 12816, 12817, 12818, + 12819, 12820, 12825, 12845, 12846, 12847, 12848, 12859, 12865, 12873, + 12874, 12880, 12885, 12890, 12895, 12900, 12905, 12910, 12915, 12921, + 12927, 12933, 12940, 12962, 12971, 12975, 12983, 12987, 12995, 13007, + 13028, 13032, 13038, 13042, 13055, 13063, 13073, 13075, 13077, 13079, + 13081, 13083, 13088, 13089, 13096, 13105, 13113, 13122, 13133, 13141, + 13142, 13143, 13147, 13149, 13151, 13153, 13155, 13157, 13159, 13164, + 13169, 13175, 13183, 13188, 13195, 13202, 13206, 13210, 13246, 13247, + 13249, 13257, 13273, 13275, 13277, 13279, 13281, 13283, 13285, 13287, + 13289, 13291, 13293, 13295, 13297, 13299, 13302, 13304, 13307, 13309, + 13311, 13313, 13316, 13321, 13330, 13335, 13344, 13349, 13358, 13363, + 13373, 13382, 13391, 13400, 13419, 13427, 13435, 13443, 13451, 13468, + 13476, 13484, 13492, 13500, 13508, 13516, 13520, 13524, 13532, 13540, + 13548, 13556, 13576, 13598, 13609, 13616, 13632, 13637, 13643, 13650, + 13657, 13665, 13673, 13698, 13700, 13702, 13704, 13706, 13708, 13710, + 13712, 13714, 13716, 13718, 13720, 13722, 13724, 13726, 13728, 13730, + 13732, 13734, 13738, 13742, 13747, 13763, 13764, 13765, 13780, 13792, + 13794, 13796, 13807, 13831, 13842, 13853, 13860, 13870, 13880, 13889, + 13895, 13903, 13912, 13921, 13933, 13942, 13972, 14007, 14018, 14019, + 14026, 14033, 14037, 14041, 14045, 14049, 14053, 14057, 14061, 14065, + 14069, 14073, 14077, 14081, 14085, 14089, 14093, 14095, 14102, 14109, + 14116, 14123, 14134, 14148, 14158, 14169, 14185, 14195, 14202, 14209, + 14216, 14220, 14227, 14235, 14243, 14247, 14251, 14255, 14259, 14263, + 14272, 14276, 14285, 14289, 14293, 14298, 14312, 14314, 14318, 14320, + 14322, 14325, 14328, 14331, 14332, 14335, 14343, 14353, 14354, 14357, + 14358, 14359, 14364, 14368, 14372, 14376, 14383, 14384, 14392, 14393, + 14397, 14398, 14406, 14407, 14411, 14412, 14417, 14425, 14427, 14441, + 14444, 14471, 14472, 14475, 14476, 14484, 14491, 14498, 14506, 14515, + 14532, 14577, 14585, 14593, 14601, 14609, 14620, 14621, 14622, 14623, + 14624, 14638, 14639, 14640, 14643, 14644, 14647, 14650, 14651, 14652, + 14655, 14656, 14659, 14660, 14661, 14662, 14663, 14664, 14665, 14666, + 14667, 14668, 14669, 14670, 14673, 14675, 14680, 14682, 14687, 14689, + 14691, 14693, 14695, 14697, 14709, 14713, 14720, 14724, 14730, 14734, + 14743, 14754, 14755, 14758, 14759, 14762, 14766, 14770, 14776, 14777, + 14782, 14792, 14793, 14794, 14795, 14796, 14797, 14798, 14799, 14803, + 14804, 14805, 14806, 14811, 14816, 14825, 14846, 14850, 14855, 14866, + 14883, 14889, 14890, 14891, 14894, 14901, 14911, 14925, 14926, 14930, + 14941, 14942, 14945, 14946, 14949, 14953, 14960, 14964, 14968, 14976, + 14987, 14988, 14992, 14993, 14997, 14998, 15001, 15002, 15012, 15013, + 15017, 15018, 15021, 15029, 15037, 15045, 15067, 15068, 15079, 15083, + 15110, 15112, 15117, 15119, 15121, 15131, 15133, 15144, 15148, 15152, + 15156, 15160, 15169, 15176, 15208, 15212, 15218, 15225, 15229, 15233, + 15239, 15240, 15242, 15243, 15244, 15248, 15288, 15315, 15319, 15323, + 15329, 15331, 15345, 15381, 15394, 15395, 15398, 15399, 15416, 15417, + 15418, 15423, 15424, 15425, 15430, 15431, 15432, 15433, 15439, 15440, + 15441, 15442, 15443, 15449, 15450, 15470, 15471, 15472, 15473, 15474, + 15475, 15476, 15477, 15478, 15479, 15480, 15481, 15482, 15483, 15484, + 15485, 15486, 15487, 15488, 15489, 15490, 15491, 15492, 15493, 15494, + 15495, 15496, 15497, 15498, 15499, 15500, 15501, 15502, 15503, 15504, + 15505, 15506, 15507, 15508, 15509, 15510, 15511, 15512, 15513, 15514, + 15515, 15516, 15517, 15518, 15519, 15520, 15521, 15522, 15523, 15524, + 15525, 15526, 15527, 15528, 15529, 15530, 15531, 15532, 15533, 15534, + 15535, 15536, 15537, 15538, 15539, 15540, 15541, 15542, 15543, 15544, + 15545, 15546, 15547, 15548, 15549, 15550, 15551, 15552, 15553, 15554, + 15555, 15556, 15557, 15558, 15559, 15560, 15561, 15562, 15563, 15564, + 15565, 15566, 15567, 15568, 15569, 15570, 15571, 15572, 15573, 15574, + 15575, 15576, 15577, 15578, 15579, 15580, 15581, 15582, 15583, 15584, + 15585, 15586, 15587, 15588, 15589, 15590, 15591, 15592, 15593, 15594, + 15595, 15596, 15597, 15598, 15599, 15600, 15601, 15602, 15603, 15604, + 15605, 15606, 15607, 15608, 15609, 15610, 15611, 15612, 15613, 15614, + 15615, 15616, 15617, 15618, 15619, 15620, 15621, 15622, 15623, 15624, + 15625, 15626, 15627, 15628, 15629, 15630, 15631, 15632, 15633, 15634, + 15635, 15636, 15637, 15638, 15639, 15640, 15641, 15642, 15643, 15644, + 15645, 15646, 15647, 15648, 15649, 15650, 15651, 15652, 15653, 15654, + 15655, 15656, 15657, 15658, 15659, 15660, 15661, 15662, 15663, 15664, + 15665, 15666, 15667, 15668, 15669, 15670, 15671, 15672, 15673, 15674, + 15675, 15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15684, + 15685, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15693, 15694, + 15695, 15696, 15697, 15698, 15699, 15700, 15701, 15702, 15703, 15704, + 15705, 15706, 15707, 15708, 15709, 15710, 15711, 15712, 15713, 15714, + 15715, 15716, 15717, 15718, 15719, 15720, 15721, 15722, 15723, 15724, + 15725, 15726, 15727, 15728, 15729, 15730, 15731, 15732, 15733, 15734, + 15735, 15736, 15737, 15738, 15739, 15740, 15741, 15742, 15743, 15744, + 15745, 15746, 15747, 15748, 15749, 15750, 15751, 15752, 15753, 15754, + 15755, 15756, 15757, 15758, 15759, 15760, 15761, 15762, 15763, 15764, + 15765, 15766, 15767, 15768, 15769, 15770, 15771, 15772, 15773, 15774, + 15775, 15789, 15790, 15791, 15792, 15793, 15794, 15795, 15796, 15797, + 15798, 15799, 15800, 15801, 15802, 15803, 15804, 15805, 15806, 15807, + 15808, 15809, 15810, 15811, 15812, 15813, 15814, 15815, 15816, 15817, + 15818, 15819, 15820, 15821, 15822, 15823, 15824, 15825, 15826, 15827, + 15828, 15829, 15830, 15831, 15832, 15833, 15834, 15835, 15836, 15837, + 15838, 15839, 15853, 15854, 15855, 15856, 15857, 15858, 15859, 15860, + 15861, 15862, 15863, 15864, 15865, 15866, 15867, 15868, 15869, 15870, + 15871, 15872, 15873, 15874, 15875, 15885, 15886, 15887, 15888, 15889, + 15890, 15891, 15892, 15893, 15894, 15895, 15896, 15897, 15898, 15899, + 15900, 15901, 15902, 15903, 15904, 15905, 15906, 15907, 15908, 15909, + 15910, 15911, 15912, 15913, 15914, 15915, 15916, 15917, 15918, 15919, + 15920, 15921, 15922, 15923, 15924, 15925, 15926, 15927, 15928, 15929, + 15930, 15931, 15932, 15933, 15934, 15935, 15936, 15937, 15938, 15939, + 15940, 15941, 15942, 15943, 15944, 15945, 15946, 15947, 15948, 15949, + 15950, 15951, 15952, 15953, 15954, 15955, 15956, 15957, 15958, 15959, + 15960, 15961, 15974, 15975, 15976, 15977, 15978, 15979, 15980, 15981, + 15982, 15983, 15984, 15985, 15986, 15987, 15988, 15989, 15990, 15991, + 15992, 15993, 15994, 15995, 15996, 15997, 15998, 15999, 16000, 16001, + 16002, 16003, 16004, 16005, 16006, 16007, 16008, 16009, 16010, 16011, + 16012, 16013, 16014, 16015, 16016, 16017, 16018, 16019, 16020, 16021, + 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16030, 16031, + 16032, 16033, 16034, 16035, 16036, 16037, 16038, 16039, 16040, 16041, + 16042, 16043, 16044, 16045, 16046, 16047, 16048, 16049, 16050, 16051, + 16052, 16053, 16054, 16055, 16056, 16057, 16058, 16059, 16060, 16061, + 16062, 16063, 16064, 16065, 16066, 16067, 16068, 16069, 16070, 16071, + 16072, 16073, 16074, 16075, 16076, 16077, 16078, 16079, 16080, 16081, + 16082, 16083, 16084, 16085, 16086, 16087, 16088, 16089, 16090, 16091, + 16092, 16093, 16094, 16095, 16096, 16097, 16098, 16099, 16100, 16101, + 16102, 16103, 16104, 16105, 16106, 16107, 16108, 16109, 16110, 16111, + 16112, 16113, 16114, 16115, 16116, 16117, 16118, 16119, 16120, 16121, + 16122, 16123, 16124, 16125, 16126, 16127, 16128, 16129, 16130, 16131, + 16132, 16133, 16134, 16135, 16136, 16137, 16138, 16139, 16140, 16141, + 16142, 16143, 16144, 16145, 16146, 16147, 16148, 16149, 16150, 16151, + 16152, 16153, 16154, 16155, 16156, 16157, 16158, 16159, 16160, 16161, + 16162, 16163, 16164, 16165, 16166, 16167, 16168, 16169, 16170, 16171, + 16172, 16173, 16174, 16175, 16176, 16177, 16178, 16179, 16180, 16181, + 16182, 16183, 16184, 16185, 16186, 16187, 16188, 16189, 16190, 16191, + 16192, 16193, 16194, 16195, 16196, 16197, 16198, 16199, 16200, 16201, + 16202, 16203, 16204, 16205, 16206, 16207, 16208, 16209, 16210, 16211, + 16212, 16213, 16214, 16215, 16216, 16217, 16218, 16219, 16220, 16221, + 16222, 16223, 16224, 16225, 16226, 16227, 16228, 16229, 16230, 16231, + 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16240, 16241, + 16242, 16243, 16244, 16245, 16246, 16247, 16248, 16249, 16250, 16251, + 16252, 16253, 16254, 16255, 16256, 16257, 16258, 16259, 16260, 16261, + 16262, 16263, 16264, 16265, 16266, 16267, 16268, 16269, 16270, 16271, + 16272, 16273, 16274, 16275, 16276, 16277, 16278, 16279, 16280, 16281, + 16282, 16283, 16284, 16285, 16286, 16287, 16288, 16289, 16290, 16291, + 16292, 16293, 16294, 16295, 16296, 16297, 16298, 16299, 16300, 16301, + 16302, 16303, 16304, 16305, 16306, 16307, 16308, 16309, 16310, 16311, + 16312, 16313, 16314, 16315, 16316, 16317, 16318, 16319, 16320, 16321, + 16322, 16323, 16324, 16325, 16326, 16327, 16328, 16329, 16330, 16331, + 16332, 16333, 16334, 16335, 16336, 16337, 16338, 16339, 16340, 16341, + 16342, 16343, 16344, 16345, 16346, 16347, 16348, 16349, 16350, 16351, + 16352, 16353, 16354, 16355, 16356, 16357, 16358, 16359, 16360, 16361, + 16362, 16363, 16364, 16365, 16366, 16367, 16368, 16369, 16370, 16371, + 16372, 16373, 16374, 16375, 16376, 16377, 16378, 16379, 16380, 16381, + 16382, 16383, 16384, 16385, 16386, 16387, 16388, 16389, 16390, 16391 +}; +#endif + +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "\"end of file\"", "error", "\"invalid token\"", "IDENT", "UIDENT", + "FCONST", "SCONST", "USCONST", "BCONST", "XCONST", "Op", "ICONST", + "PARAM", "TYPECAST", "DOT_DOT", "COLON_EQUALS", "EQUALS_GREATER", + "LESS_EQUALS", "GREATER_EQUALS", "NOT_EQUALS", "ABORT_P", "ABSOLUTE_P", + "ACCESS", "ACTION", "ADD_P", "ADMIN", "AFTER", "AGGREGATE", "ALL", + "ALSO", "ALTER", "ALWAYS", "ANALYSE", "ANALYZE", "AND", "ANY", "ARRAY", + "AS", "ASC", "ASENSITIVE", "ASSERTION", "ASSIGNMENT", "ASYMMETRIC", + "ATOMIC", "AT", "ATTACH", "ATTRIBUTE", "AUTHORIZATION", "BACKWARD", + "BEFORE", "BEGIN_P", "BETWEEN", "BIGINT", "BINARY", "BIT", "BOOLEAN_P", + "BOTH", "BREADTH", "BY", "CACHE", "CALL", "CALLED", "CASCADE", + "CASCADED", "CASE", "CAST", "CATALOG_P", "CHAIN", "CHAR_P", "CHARACTER", + "CHARACTERISTICS", "CHECK", "CHECKPOINT", "CLASS", "CLOSE", "CLUSTER", + "COALESCE", "COLLATE", "COLLATION", "COLUMN", "COLUMNS", "COMMENT", + "COMMENTS", "COMMIT", "COMMITTED", "COMPRESSION", "CONCURRENTLY", + "CONFIGURATION", "CONFLICT", "CONNECTION", "CONSTRAINT", "CONSTRAINTS", + "CONTENT_P", "CONTINUE_P", "CONVERSION_P", "COPY", "COST", "CREATE", + "CROSS", "CSV", "CUBE", "CURRENT_P", "CURRENT_CATALOG", "CURRENT_DATE", + "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "CURRENT_USER", "CURSOR", "CYCLE", "DATA_P", "DATABASE", "DAY_P", + "DEALLOCATE", "DEC", "DECIMAL_P", "DECLARE", "DEFAULT", "DEFAULTS", + "DEFERRABLE", "DEFERRED", "DEFINER", "DELETE_P", "DELIMITER", + "DELIMITERS", "DEPENDS", "DEPTH", "DESC", "DETACH", "DICTIONARY", + "DISABLE_P", "DISCARD", "DISTINCT", "DO", "DOCUMENT_P", "DOMAIN_P", + "DOUBLE_P", "DROP", "EACH", "ELSE", "ENABLE_P", "ENCODING", "ENCRYPTED", + "END_P", "ENUM_P", "ESCAPE", "EVENT", "EXCEPT", "EXCLUDE", "EXCLUDING", + "EXCLUSIVE", "EXECUTE", "EXISTS", "EXPLAIN", "EXPRESSION", "EXTENSION", + "EXTERNAL", "EXTRACT", "FALSE_P", "FAMILY", "FETCH", "FILTER", + "FINALIZE", "FIRST_P", "FLOAT_P", "FOLLOWING", "FOR", "FORCE", "FOREIGN", + "FORWARD", "FREEZE", "FROM", "FULL", "FUNCTION", "FUNCTIONS", + "GENERATED", "GLOBAL", "GRANT", "GRANTED", "GREATEST", "GROUP_P", + "GROUPING", "GROUPS", "HANDLER", "HAVING", "HEADER_P", "HOLD", "HOUR_P", + "IDENTITY_P", "IF_P", "ILIKE", "IMMEDIATE", "IMMUTABLE", "IMPLICIT_P", + "IMPORT_P", "IN_P", "INCLUDE", "INCLUDING", "INCREMENT", "INDEX", + "INDEXES", "INHERIT", "INHERITS", "INITIALLY", "INLINE_P", "INNER_P", + "INOUT", "INPUT_P", "INSENSITIVE", "INSERT", "INSTEAD", "INT_P", + "INTEGER", "INTERSECT", "INTERVAL", "INTO", "INVOKER", "IS", "ISNULL", + "ISOLATION", "JOIN", "KEY", "LABEL", "LANGUAGE", "LARGE_P", "LAST_P", + "LATERAL_P", "LEADING", "LEAKPROOF", "LEAST", "LEFT", "LEVEL", "LIKE", + "LIMIT", "LISTEN", "LOAD", "LOCAL", "LOCALTIME", "LOCALTIMESTAMP", + "LOCATION", "LOCK_P", "LOCKED", "LOGGED", "MAPPING", "MATCH", + "MATERIALIZED", "MAXVALUE", "METHOD", "MINUTE_P", "MINVALUE", "MODE", + "MONTH_P", "MOVE", "NAME_P", "NAMES", "NATIONAL", "NATURAL", "NCHAR", + "NEW", "NEXT", "NFC", "NFD", "NFKC", "NFKD", "NO", "NONE", "NORMALIZE", + "NORMALIZED", "NOT", "NOTHING", "NOTIFY", "NOTNULL", "NOWAIT", "NULL_P", + "NULLIF", "NULLS_P", "NUMERIC", "OBJECT_P", "OF", "OFF", "OFFSET", + "OIDS", "OLD", "ON", "ONLY", "OPERATOR", "OPTION", "OPTIONS", "OR", + "ORDER", "ORDINALITY", "OTHERS", "OUT_P", "OUTER_P", "OVER", "OVERLAPS", + "OVERLAY", "OVERRIDING", "OWNED", "OWNER", "PARALLEL", "PARSER", + "PARTIAL", "PARTITION", "PASSING", "PASSWORD", "PLACING", "PLANS", + "POLICY", "POSITION", "PRECEDING", "PRECISION", "PRESERVE", "PREPARE", + "PREPARED", "PRIMARY", "PRIOR", "PRIVILEGES", "PROCEDURAL", "PROCEDURE", + "PROCEDURES", "PROGRAM", "PUBLICATION", "QUOTE", "RANGE", "READ", "REAL", + "REASSIGN", "RECHECK", "RECURSIVE", "REF", "REFERENCES", "REFERENCING", + "REFRESH", "REINDEX", "RELATIVE_P", "RELEASE", "RENAME", "REPEATABLE", + "REPLACE", "REPLICA", "RESET", "RESTART", "RESTRICT", "RETURN", + "RETURNING", "RETURNS", "REVOKE", "RIGHT", "ROLE", "ROLLBACK", "ROLLUP", + "ROUTINE", "ROUTINES", "ROW", "ROWS", "RULE", "SAVEPOINT", "SCHEMA", + "SCHEMAS", "SCROLL", "SEARCH", "SECOND_P", "SECURITY", "SELECT", + "SEQUENCE", "SEQUENCES", "SERIALIZABLE", "SERVER", "SESSION", + "SESSION_USER", "SET", "SETS", "SETOF", "SHARE", "SHOW", "SIMILAR", + "SIMPLE", "SKIP", "SMALLINT", "SNAPSHOT", "SOME", "SQL_P", "STABLE", + "STANDALONE_P", "START", "STATEMENT", "STATISTICS", "STDIN", "STDOUT", + "STORAGE", "STORED", "STRICT_P", "STRIP_P", "SUBSCRIPTION", "SUBSTRING", + "SUPPORT", "SYMMETRIC", "SYSID", "SYSTEM_P", "TABLE", "TABLES", + "TABLESAMPLE", "TABLESPACE", "TEMP", "TEMPLATE", "TEMPORARY", "TEXT_P", + "THEN", "TIES", "TIME", "TIMESTAMP", "TO", "TRAILING", "TRANSACTION", + "TRANSFORM", "TREAT", "TRIGGER", "TRIM", "TRUE_P", "TRUNCATE", "TRUSTED", + "TYPE_P", "TYPES_P", "UESCAPE", "UNBOUNDED", "UNCOMMITTED", + "UNENCRYPTED", "UNION", "UNIQUE", "UNKNOWN", "UNLISTEN", "UNLOGGED", + "UNTIL", "UPDATE", "USER", "USING", "VACUUM", "VALID", "VALIDATE", + "VALIDATOR", "VALUE_P", "VALUES", "VARCHAR", "VARIADIC", "VARYING", + "VERBOSE", "VERSION_P", "VIEW", "VIEWS", "VOLATILE", "WHEN", "WHERE", + "WHITESPACE_P", "WINDOW", "WITH", "WITHIN", "WITHOUT", "WORK", "WRAPPER", + "WRITE", "XML_P", "XMLATTRIBUTES", "XMLCONCAT", "XMLELEMENT", + "XMLEXISTS", "XMLFOREST", "XMLNAMESPACES", "XMLPARSE", "XMLPI", + "XMLROOT", "XMLSERIALIZE", "XMLTABLE", "YEAR_P", "YES_P", "ZONE", + "NOT_LA", "NULLS_LA", "WITH_LA", "MODE_TYPE_NAME", "MODE_PLPGSQL_EXPR", + "MODE_PLPGSQL_ASSIGN1", "MODE_PLPGSQL_ASSIGN2", "MODE_PLPGSQL_ASSIGN3", + "'<'", "'>'", "'='", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "UMINUS", + "'['", "']'", "'('", "')'", "'.'", "';'", "','", "':'", "$accept", + "parse_toplevel", "stmtmulti", "toplevel_stmt", "stmt", "CallStmt", + "CreateRoleStmt", "opt_with", "OptRoleList", "AlterOptRoleList", + "AlterOptRoleElem", "CreateOptRoleElem", "CreateUserStmt", + "AlterRoleStmt", "opt_in_database", "AlterRoleSetStmt", "DropRoleStmt", + "CreateGroupStmt", "AlterGroupStmt", "add_drop", "CreateSchemaStmt", + "OptSchemaName", "OptSchemaEltList", "schema_stmt", "VariableSetStmt", + "set_rest", "generic_set", "set_rest_more", "var_name", "var_list", + "var_value", "iso_level", "opt_boolean_or_string", "zone_value", + "opt_encoding", "NonReservedWord_or_Sconst", "VariableResetStmt", + "reset_rest", "generic_reset", "SetResetClause", + "FunctionSetResetClause", "VariableShowStmt", "ConstraintsSetStmt", + "constraints_set_list", "constraints_set_mode", "CheckPointStmt", + "DiscardStmt", "AlterTableStmt", "alter_table_cmds", "partition_cmd", + "index_partition_cmd", "alter_table_cmd", "alter_column_default", + "opt_drop_behavior", "opt_collate_clause", "alter_using", + "replica_identity", "reloptions", "opt_reloptions", "reloption_list", + "reloption_elem", "alter_identity_column_option_list", + "alter_identity_column_option", "PartitionBoundSpec", + "hash_partbound_elem", "hash_partbound", "AlterCompositeTypeStmt", + "alter_type_cmds", "alter_type_cmd", "ClosePortalStmt", "CopyStmt", + "copy_from", "opt_program", "copy_file_name", "copy_options", + "copy_opt_list", "copy_opt_item", "opt_binary", "copy_delimiter", + "opt_using", "copy_generic_opt_list", "copy_generic_opt_elem", + "copy_generic_opt_arg", "copy_generic_opt_arg_list", + "copy_generic_opt_arg_list_item", "CreateStmt", "OptTemp", + "OptTableElementList", "OptTypedTableElementList", "TableElementList", + "TypedTableElementList", "TableElement", "TypedTableElement", + "columnDef", "columnOptions", "column_compression", + "opt_column_compression", "ColQualList", "ColConstraint", + "ColConstraintElem", "generated_when", "ConstraintAttr", + "TableLikeClause", "TableLikeOptionList", "TableLikeOption", + "TableConstraint", "ConstraintElem", "opt_no_inherit", "opt_column_list", + "columnList", "columnElem", "opt_c_include", "key_match", + "ExclusionConstraintList", "ExclusionConstraintElem", "OptWhereClause", + "key_actions", "key_update", "key_delete", "key_action", "OptInherit", + "OptPartitionSpec", "PartitionSpec", "part_params", "part_elem", + "table_access_method_clause", "OptWith", "OnCommitOption", + "OptTableSpace", "OptConsTableSpace", "ExistingIndex", "CreateStatsStmt", + "stats_params", "stats_param", "AlterStatsStmt", "CreateAsStmt", + "create_as_target", "opt_with_data", "CreateMatViewStmt", + "create_mv_target", "OptNoLog", "RefreshMatViewStmt", "CreateSeqStmt", + "AlterSeqStmt", "OptSeqOptList", "OptParenthesizedSeqOptList", + "SeqOptList", "SeqOptElem", "opt_by", "NumericOnly", "NumericOnly_list", + "CreatePLangStmt", "opt_trusted", "handler_name", "opt_inline_handler", + "validator_clause", "opt_validator", "opt_procedural", + "CreateTableSpaceStmt", "OptTableSpaceOwner", "DropTableSpaceStmt", + "CreateExtensionStmt", "create_extension_opt_list", + "create_extension_opt_item", "AlterExtensionStmt", + "alter_extension_opt_list", "alter_extension_opt_item", + "AlterExtensionContentsStmt", "CreateFdwStmt", "fdw_option", + "fdw_options", "opt_fdw_options", "AlterFdwStmt", + "create_generic_options", "generic_option_list", "alter_generic_options", + "alter_generic_option_list", "alter_generic_option_elem", + "generic_option_elem", "generic_option_name", "generic_option_arg", + "CreateForeignServerStmt", "opt_type", "foreign_server_version", + "opt_foreign_server_version", "AlterForeignServerStmt", + "CreateForeignTableStmt", "ImportForeignSchemaStmt", + "import_qualification_type", "import_qualification", + "CreateUserMappingStmt", "auth_ident", "DropUserMappingStmt", + "AlterUserMappingStmt", "CreatePolicyStmt", "AlterPolicyStmt", + "RowSecurityOptionalExpr", "RowSecurityOptionalWithCheck", + "RowSecurityDefaultToRole", "RowSecurityOptionalToRole", + "RowSecurityDefaultPermissive", "RowSecurityDefaultForCmd", + "row_security_cmd", "CreateAmStmt", "am_type", "CreateTrigStmt", + "TriggerActionTime", "TriggerEvents", "TriggerOneEvent", + "TriggerReferencing", "TriggerTransitions", "TriggerTransition", + "TransitionOldOrNew", "TransitionRowOrTable", "TransitionRelName", + "TriggerForSpec", "TriggerForOptEach", "TriggerForType", "TriggerWhen", + "FUNCTION_or_PROCEDURE", "TriggerFuncArgs", "TriggerFuncArg", + "OptConstrFromTable", "ConstraintAttributeSpec", + "ConstraintAttributeElem", "CreateEventTrigStmt", + "event_trigger_when_list", "event_trigger_when_item", + "event_trigger_value_list", "AlterEventTrigStmt", "enable_trigger", + "CreateAssertionStmt", "DefineStmt", "definition", "def_list", + "def_elem", "def_arg", "old_aggr_definition", "old_aggr_list", + "old_aggr_elem", "opt_enum_val_list", "enum_val_list", "AlterEnumStmt", + "opt_if_not_exists", "CreateOpClassStmt", "opclass_item_list", + "opclass_item", "opt_default", "opt_opfamily", "opclass_purpose", + "opt_recheck", "CreateOpFamilyStmt", "AlterOpFamilyStmt", + "opclass_drop_list", "opclass_drop", "DropOpClassStmt", + "DropOpFamilyStmt", "DropOwnedStmt", "ReassignOwnedStmt", "DropStmt", + "object_type_any_name", "object_type_name", "drop_type_name", + "object_type_name_on_any_name", "any_name_list", "any_name", "attrs", + "type_name_list", "TruncateStmt", "opt_restart_seqs", "CommentStmt", + "comment_text", "SecLabelStmt", "opt_provider", "security_label", + "FetchStmt", "fetch_args", "from_in", "opt_from_in", "GrantStmt", + "RevokeStmt", "privileges", "privilege_list", "privilege", + "privilege_target", "grantee_list", "grantee", "opt_grant_grant_option", + "GrantRoleStmt", "RevokeRoleStmt", "opt_grant_admin_option", + "opt_granted_by", "AlterDefaultPrivilegesStmt", "DefACLOptionList", + "DefACLOption", "DefACLAction", "defacl_privilege_target", "IndexStmt", + "opt_unique", "opt_concurrently", "opt_index_name", + "access_method_clause", "index_params", "index_elem_options", + "index_elem", "opt_include", "index_including_params", "opt_collate", + "opt_class", "opt_asc_desc", "opt_nulls_order", "CreateFunctionStmt", + "opt_or_replace", "func_args", "func_args_list", + "function_with_argtypes_list", "function_with_argtypes", + "func_args_with_defaults", "func_args_with_defaults_list", "func_arg", + "arg_class", "param_name", "func_return", "func_type", + "func_arg_with_default", "aggr_arg", "aggr_args", "aggr_args_list", + "aggregate_with_argtypes", "aggregate_with_argtypes_list", + "opt_createfunc_opt_list", "createfunc_opt_list", "common_func_opt_item", + "createfunc_opt_item", "func_as", "ReturnStmt", "opt_routine_body", + "routine_body_stmt_list", "routine_body_stmt", "transform_type_list", + "opt_definition", "table_func_column", "table_func_column_list", + "AlterFunctionStmt", "alterfunc_opt_list", "opt_restrict", + "RemoveFuncStmt", "RemoveAggrStmt", "RemoveOperStmt", "oper_argtypes", + "any_operator", "operator_with_argtypes_list", "operator_with_argtypes", + "DoStmt", "dostmt_opt_list", "dostmt_opt_item", "CreateCastStmt", + "cast_context", "DropCastStmt", "opt_if_exists", "CreateTransformStmt", + "transform_element_list", "DropTransformStmt", "ReindexStmt", + "reindex_target_type", "reindex_target_multitable", "AlterTblSpcStmt", + "RenameStmt", "opt_column", "opt_set_data", "AlterObjectDependsStmt", + "opt_no", "AlterObjectSchemaStmt", "AlterOperatorStmt", + "operator_def_list", "operator_def_elem", "operator_def_arg", + "AlterTypeStmt", "AlterOwnerStmt", "CreatePublicationStmt", + "opt_publication_for_tables", "publication_for_tables", + "AlterPublicationStmt", "CreateSubscriptionStmt", + "AlterSubscriptionStmt", "DropSubscriptionStmt", "RuleStmt", + "RuleActionList", "RuleActionMulti", "RuleActionStmt", + "RuleActionStmtOrEmpty", "event", "opt_instead", "NotifyStmt", + "notify_payload", "ListenStmt", "UnlistenStmt", "TransactionStmt", + "TransactionStmtLegacy", "opt_transaction", "transaction_mode_item", + "transaction_mode_list", "transaction_mode_list_or_empty", + "opt_transaction_chain", "ViewStmt", "opt_check_option", "LoadStmt", + "CreatedbStmt", "createdb_opt_list", "createdb_opt_items", + "createdb_opt_item", "createdb_opt_name", "opt_equal", + "AlterDatabaseStmt", "AlterDatabaseSetStmt", "DropdbStmt", + "drop_option_list", "drop_option", "AlterCollationStmt", + "AlterSystemStmt", "CreateDomainStmt", "AlterDomainStmt", "opt_as", + "AlterTSDictionaryStmt", "AlterTSConfigurationStmt", "any_with", + "CreateConversionStmt", "ClusterStmt", "cluster_index_specification", + "VacuumStmt", "AnalyzeStmt", "utility_option_list", "analyze_keyword", + "utility_option_elem", "utility_option_name", "utility_option_arg", + "opt_analyze", "opt_verbose", "opt_full", "opt_freeze", "opt_name_list", + "vacuum_relation", "vacuum_relation_list", "opt_vacuum_relation_list", + "ExplainStmt", "ExplainableStmt", "PrepareStmt", "prep_type_clause", + "PreparableStmt", "ExecuteStmt", "execute_param_clause", + "DeallocateStmt", "InsertStmt", "insert_target", "insert_rest", + "override_kind", "insert_column_list", "insert_column_item", + "opt_on_conflict", "opt_conf_expr", "returning_clause", "DeleteStmt", + "using_clause", "LockStmt", "opt_lock", "lock_type", "opt_nowait", + "opt_nowait_or_skip", "UpdateStmt", "set_clause_list", "set_clause", + "set_target", "set_target_list", "DeclareCursorStmt", "cursor_name", + "cursor_options", "opt_hold", "SelectStmt", "select_with_parens", + "select_no_parens", "select_clause", "simple_select", "with_clause", + "cte_list", "common_table_expr", "opt_materialized", "opt_search_clause", + "opt_cycle_clause", "opt_with_clause", "into_clause", "OptTempTableName", + "opt_table", "set_quantifier", "distinct_clause", "opt_all_clause", + "opt_distinct_clause", "opt_sort_clause", "sort_clause", "sortby_list", + "sortby", "select_limit", "opt_select_limit", "limit_clause", + "offset_clause", "select_limit_value", "select_offset_value", + "select_fetch_first_value", "I_or_F_const", "row_or_rows", + "first_or_next", "group_clause", "group_by_list", "group_by_item", + "empty_grouping_set", "rollup_clause", "cube_clause", + "grouping_sets_clause", "having_clause", "for_locking_clause", + "opt_for_locking_clause", "for_locking_items", "for_locking_item", + "for_locking_strength", "locked_rels_list", "values_clause", + "from_clause", "from_list", "table_ref", "joined_table", "alias_clause", + "opt_alias_clause", "opt_alias_clause_for_join_using", + "func_alias_clause", "join_type", "opt_outer", "join_qual", + "relation_expr", "relation_expr_list", "relation_expr_opt_alias", + "tablesample_clause", "opt_repeatable_clause", "func_table", + "rowsfrom_item", "rowsfrom_list", "opt_col_def_list", "opt_ordinality", + "where_clause", "where_or_current_clause", "OptTableFuncElementList", + "TableFuncElementList", "TableFuncElement", "xmltable", + "xmltable_column_list", "xmltable_column_el", + "xmltable_column_option_list", "xmltable_column_option_el", + "xml_namespace_list", "xml_namespace_el", "Typename", "opt_array_bounds", + "SimpleTypename", "ConstTypename", "GenericType", "opt_type_modifiers", + "Numeric", "opt_float", "Bit", "ConstBit", "BitWithLength", + "BitWithoutLength", "Character", "ConstCharacter", "CharacterWithLength", + "CharacterWithoutLength", "character", "opt_varying", "ConstDatetime", + "ConstInterval", "opt_timezone", "opt_interval", "interval_second", + "a_expr", "b_expr", "c_expr", "func_application", "func_expr", + "func_expr_windowless", "func_expr_common_subexpr", "xml_root_version", + "opt_xml_root_standalone", "xml_attributes", "xml_attribute_list", + "xml_attribute_el", "document_or_content", "xml_whitespace_option", + "xmlexists_argument", "xml_passing_mech", "within_group_clause", + "filter_clause", "window_clause", "window_definition_list", + "window_definition", "over_clause", "window_specification", + "opt_existing_window_name", "opt_partition_clause", "opt_frame_clause", + "frame_extent", "frame_bound", "opt_window_exclusion_clause", "row", + "explicit_row", "implicit_row", "sub_type", "all_Op", "MathOp", + "qual_Op", "qual_all_Op", "subquery_Op", "expr_list", "func_arg_list", + "func_arg_expr", "func_arg_list_opt", "type_list", "array_expr", + "array_expr_list", "extract_list", "extract_arg", "unicode_normal_form", + "overlay_list", "position_list", "substr_list", "trim_list", "in_expr", + "case_expr", "when_clause_list", "when_clause", "case_default", + "case_arg", "columnref", "indirection_el", "opt_slice_bound", + "indirection", "opt_indirection", "opt_asymmetric", "opt_target_list", + "target_list", "target_el", "qualified_name_list", "qualified_name", + "name_list", "name", "attr_name", "file_name", "func_name", "AexprConst", + "Iconst", "Sconst", "SignedIconst", "RoleId", "RoleSpec", "role_list", + "PLpgSQL_Expr", "PLAssignStmt", "plassign_target", "plassign_equals", + "ColId", "type_function_name", "NonReservedWord", "ColLabel", + "BareColLabel", "unreserved_keyword", "col_name_keyword", + "type_func_name_keyword", "reserved_keyword", "bare_label_keyword", YY_NULLPTR +}; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} +#endif + +#ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_int16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 60, 62, 61, 43, 45, + 42, 47, 37, 94, 740, 91, 93, 40, 41, 46, + 59, 44, 58 +}; +#endif + +#define YYPACT_NINF (-5214) + +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) + +#define YYTABLE_NINF (-2772) + +#define yytable_value_is_error(Yyn) \ + ((Yyn) == YYTABLE_NINF) + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const int yypact[] = +{ + 7079, 25, 18712, -5214, -5214, 25, 64641, -5214, 72699, -8, + 172, 1094, 177, 13896, 73173, 81705, 249, 330, 16385, 25, + 81705, 1070, 55635, 69855, 826, 81705, 1238, 901, 55635, 81705, + 82179, 737, 1083, 881, 82653, 73647, 68433, 1100, 81705, 1153, + 376, 83127, 74121, 1026, 74595, 901, 51867, 154, 989, 83601, + 81705,105335, 376, 75069, 75069, 75069, 1926, 1527, 1171, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, 1302, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, 1616, -5214, 1073, 1886, + 1472, 332, 1235, -5214, -5214, 1716, 64641, 81705, 81705, 81705, + 1463, 81705, 1376, 81705, 461, 64641, 60849, 75543, 1676, 1637, + 47973, 84075, -5214, 64641, 81705, 58479, 64641, 81705, 81705, 84549, + 81705, 85023, 81705, 1607, 71277, 81705, 1757, 81705, 81705, 58953, + 85497, 1932, 1249, 237, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, 1666, 1719, -5214, 255, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, 63219, 81705, + 17832, 1238, 1716, -5214, 1926, 81705, 1940, 81705, 1733, 85971, + 81705, -5214, 81705, 1816, 86445, 651, 1487, 60849, 1669, 48464, + 1931, 81705, 81705, 60849, 86919, 87393, 87867, 81705, 81705, -5214, + -5214, 1934, 81705, -5214, 2096, 61323, 1539, 2103, 2229, 2154, + 1065, -5214, 76017, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, 64167, 330, -5214, -5214, 2172, 65115, 2168, -5214, -5214, + 88341,105795, 1997, -5214, 779, 65589, 61797, 2291, 1961, 48955, + 2371, -5214, 66063, -5214, 62271, 66537, -5214, -5214, -5214, -5214, + -5214, 88815, -5214, 89289, 2075, 2168, -5214,106255, 62745, -5214, + 2280, 89763, 90237, 90711, 1716, 1952, 1645, 1323, 43151, -5214, + -5214, -5214, 2049, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, 310, 1861, 257, 194, 265, -5214, -5214, 197, 202, + 204, 310, 2497, 2497, -5214, 81705, -5214, -5214, 1861, 37, + 2019, 2019, 2019, 2241, -1, -5214, 2019, 2186, -5214, -5214, + -5214, -5214, 74595, -5214, 2069, 1238, 2063, 2538, 2161, -5214, + -5214, -5214, -5214, -5214, 63219, 2551, 2551, 81705, -5214, -5214, + 2578, 2180, 2411, 2203, -5214, -5214, -5214, 2374, 2416, 2414, + 175, 1238, 215, -5214, 2547, -5214, 2435, 29557, 29557, 1238, + 76491, 91185, 208, 64167, 1238, 76965, 2248, 951, 2442, -5214, + -5214, -5214, 812, -5214, 2689, 2289, 2533, 2203, 1249, 44585, + -5214, 2285, 1719, 74595, -5214, -5214, -5214, 63219, 2606, 32007, + 81705, 2286, -5214, 2316, 2286, -5214, -5214, 2346, -5214, 2346, + 2346, 2320, 2320, 2518, 2328, -5214, -5214, -5214, 2178, 2346, + 2320, -5214,107175, -5214, 1380, 1399, -5214, -5214, 2795, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, 2338, -5214, 478, + 1704, -5214, -5214, -5214, 29557, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, 2345, 2353, 1472, -5214, 6322, 63219, 81705, 905, + 905, 2787, 905, 1533, 1559, -5214, 2126, -5214, 2685, 2642, + 74595, 2365, 296, -5214, 1404, 2377, 1758, 2369, 1566, 1263, + -5214, 794, 81705, 222, 2415, 77439, 6389, 2384, 1719, 2385, + -5214, -5214, -5214, -5214, 2548, 931, -5214, -5214, -5214, -5214, + 2697, 2746, 8310, 308, 77913, -5214, -5214, -5214, -5214, 81705, + 81705, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + 2404, 126, -5214, -5214, 2401, 2757, 2628, 8747, 958, 2722, + 2584, 1230, 9458, 2644, 726, 2773, 13153, 1222, 2780, 1713, + 1401, 78387, 81705, 2738, 2782, 7153, 1622, 758, 2677, 979, + 2722, 2798, 2629, 1230, 2821, 5972, 81705, -5214, 2754, 2867, + 90, -5214, 191, -5214, 23240, 32007, 51393, -5214, 1719, 1802, + -5214, -5214, 54687, -5214, 2560, 2704, 652, 64641, 2495, 81705, + 81705, -5214,105335, 64641, -5214, 2728, 49446, 64641, -5214, 64641, + -5214, -5214, 2833,105335, 81705, 81705, -5214, 81705, -5214, -5214, + 2514, -5214, -5214, -5214, -5214, 2019, 81705, 2942,105335, 2750, + 110, 1456, 2985, 81705, 2755, 1456, 2568, 91659, -5214, -5214, + 1456, -5214, -5214, -5214, 81705, 81705, 2550, 1488, 2752, 2863, + 1456, 2779, 3002, 3012, 2797, 2646, 2801, 2316, 2982, 2774, + 995, 168, 1969, 1456, 2624, 92133, 92607, 81705, 2626, 81705, + 2551, 64641, 2659, 64641, 64641, 81705, 2912, 81705, -5214, 2761, + -5214, -5214, 1056, -5214, -5214, -5214, -5214, -5214, 2928, -5214, + 157, 2929, 2586, 2931, 1661, 2933, 212, -5214, -5214, 2627, + -5214, 2936, 243, -5214, 2937, -5214, 2591, 93081, -5214, 93555, + 94029, 2945, 268, -5214, 60849, 2946, 243, 2947, 2591, 2948, + 243, 2949, 833, 2952, -5214, 1031, 2939, 2955, 212, 2958, + 1972, 2591, -5214, 2963, 292, -5214, 2964, 333, -5214, 2968, + 2839, -5214, 32007, -5214, 2723, -5214, 989, 1872, 1323, 1861, + -5214, 81705, 1861, 81705, 1861, 81705, 1861, 81705, 1861, 81705, + 81705, 81705, 1861, -5214, -5214, -5214, 81705, 2631, 81705, 81705, + -5214, -5214, -5214, 70329, 60849, 70803, -5214, 81705, -5214, 119, + 1238, -5214, -5214,105335, 3088, 60849, 2551, 1873, -5214, 81705, + 81705, -5214, -5214, -5214, 2897, 81705, 2965, 2970, 70329, 60849, + -5214, 94503, -5214, 64167, 2846, 2634, -5214, -5214, -5214, -5214, + -5214, 1764, 3129, 277, 3132, 32007, 2643, 277, 277, 2645, + 2972, -5214, -5214, -5214, 263, 2647, 2648, -5214, 223, 223, + -5214, 2649, 2650, -5214, 244, 2651, 2652, 3137, 3144, 252, + 2654, 2660, 2662, 2178, 277, 2663, 32007, -5214, 2664, 223, + 2665, 2668, 2673, 3150, 2674, -5214, 3166, 2676, 289, 293, + 2678, 2680, -5214, 2649, -5214, 258, 2681, 2684, 2686, 2688, + 2690, 2693, 2694, 2695, 32007, 32007, 32007, -5214, 27102, 1719, + 1238, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, 261, + 47482, -5214, 2732, -5214, -5214, 2902, -5214, -5214, 32007, -5214, + -5214, 713, -5214, 266, -5214, -5214, -5214, 1719, 2977, 2702, + -5214, -5214, 1359, 2707, -5214, 2152, -5214, -5214, -5214, -5214, + -5214, -5214, 63693, 3168, -5214, 303, 1238, 191, 1725, 3108, + 53739, 54213, -5214, -5214, 2978, -5214, 81705, -5214, -5214, 1719, + 147, 1874, -5214, 2049, 18282, 1921, 2286, 81705, 81705, 3175, + -5214, 2716, -5214, -5214, 32007, -5214, -5214, -5214, 2497, -5214, + 2346, 2346, -5214, -5214, 3178, 2804, 2805, 2497, -5214, 2497, + -5214, 2729, 2730, 2497, 2810, 2813, 2814, -5214, 2720, 2815, + 2497, -5214, -5214, 56583, 1782, -5214, 3067, 316, -5214, -5214, + -5214, 1963, -5214, 2739, -5214, 2316, -5214, -5214, 1472, 1472, + 32007, 1472, 259, 1849, 30047, 32497, 3074, 2962, 1555, 1528, + 3077, -5214, 2966, 1533, 1559, 74595, 81705, 94977, 2877, 32007, + -5214, 3183, 2838, 2840, 2895, 52815, -5214, 2842, 2808, 2844, + 2900, 2762, 2852, 2854, 2910, -5214, 3036, -5214, -5214, 2859, + 2860, 95451, -5214, -5214, 433, -5214, -5214, -5214, 433, -5214, + 2788, 1333, 484, 1195, 2861, 301, 910, 3186, -5214, 1224, + -5214, -5214, 2918, -5214, 5228, 81705, 3127, 7131, 2997, 308, + 2920, -5214, -5214, -5214, 3053, 2873, 81705, 2874, 3014, 308, + 287, 95925, -5214, -5214, 81705, -5214, -5214, -5214, -5214, 6911, + 3164, 26182, -5214, 1858, 2878, 2857, 2890, 81705, 67485, 2003, + 2992, 3015, 1754, 2062, 224, 2954, 81705, 1780, 3021, 81705, + 2806, 2888, 2889, 3115, 2817, 1314, 3217, 2822, -5214, -5214, + -5214, 3185, -5214, 2155, 2228, 3016, -5214, 3128, 3172, 8498, + 2894, 2896,103955, -5214, 2914, 582, 49937, 81705, 81705, 2919, + 2922, 96399, 6911, 3210, 2938, 2940, 2924, 2925, 1081, 3230, + 1665, 2930, -5214, -5214, -5214, 1665, 2932, 2934, 96873, 6911, + 3222, 81705, 2941, 2943, 81705,107175, 308, -5214, 3292, 308, + 308, 1959, 3293, 2944, 338, 3098, 1337, 1456, 2822, 2167, + -5214, 2951, 2956, 319, -5214, 3065, 81705, 2957, 2959, 86, + 3032, 1238, -5214, 3037, -5214, 2961, 3042, 2967, 48, -5214, + -5214, 1325, 2971, 74595, 3055, 3063, 1780, 233, 1349, 2822, + -5214, 2969, 2976, 2817, 2817, 81705, 81705, 81705, 81705, 81705, + 198, 3325, 3330, 2979, 192, 627, 2876, -5214, 1665, 59427, + 2981, -5214, 1665, 81705, 201, 1722, 2822, 1680, 1803, -5214, + -5214, -5214, 1249, -5214, 32007, 32007, 32007, 2880, -5214, 1617, + 18282, 82, -5214, 285, 12545, 2879, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, 81705, 63219, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, 81705, -5214, 81705, 3161,105335, 3165, 3100, 3167, 3173, + 308, 81705, 81705, 3180, 3181, 3182,105335, 3187, 3189, 3190, + 3106, 2983, 135, 2980, 2907, 3372, 3257, 81705, 56583, -5214, + 433, -5214,105335, 3131, 3258, -5214, 81705, 3143, 106, -5214, + 3298, 2984, -5214, -5214, 78, 81705, 226, 2973, -5214, -5214, + 3265, 60849, 1250, 3266, 1238, 2974, 3270, 3140, 1238, 60849, + 3191, 81705, 81705, 81705, 81705, 153, -5214, 59427, 3156, -5214, + 81705, 3157, 2167, 3158, 3393, 69, 2019, 97347, 3267, 97821, + 2935, 81705, 2950, 2950, 3396,105335, 1212, 3212, -5214, -5214, + 1944, -5214, 3076, -5214, 64641, -5214, -5214, 64641, -5214, -5214, + 105335, 81705, 2986,105335,105335, -5214, -5214, 64641, 64641, -5214, + 60849, 60849, 3285, 292, 3286, 3003, 3288, 3005, 49937, 49937, + -5214, 334, 64641, -5214, 60849, 64641, -5214, 81705, -5214, 81705, + -5214, -5214, -5214, -5214,105335,105335, -5214, 60849, 59427, 3290, + 81705, 81705, -5214, 81705, 81705, -5214, 81705, 81705, 1971, 98295, + 1323, -5214, 81705, -5214, 81705, -5214, 81705, -5214, 81705, -5214, + 81705, -5214, -5214, -5214, 81705, -5214, 81705, 1978, -5214, -5214, + 1982, 1227, 81705, 81705, 209, 64641, 81705, 3170, 64641, 64641, + 81705, 81705, 81705, 81705, 81705, 3031, 2707, 1051, -5214, 279, + 453, 74595, 3176, -5214, -5214, 1996, 1926, 1137, 81705, 927, + -5214, -5214, -5214, -5214, 70803, 69855, 3273, 123, 81705, -5214, + -5214, 17968, 32007, 1719, 29062, -5214, -5214, 18282, 2994, 32007, + 32007, 2989, 2497, 2497, -5214, 998, 32007, 32007, 32007, 2497, + 2497, 32007, 4458, 32007, 49937, 32007, 37397, 24232, 32007, 32007, + 27592, -5214, 32007, 3197, 38371, 32007, 1725, 3200, 32007, 1725, + 4458, 3442, 3442, 1983, 7279, 2960, 1719, -5214, 2497, 1071, + -5214, 262,105335, 32007, 32007, 32007, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + 32007, -5214, 56583, -5214, -5214, -5214, -5214, -5214, -5214, 3045, + -5214, -5214, -5214, -5214, -5214, -5214, 3501, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + 81705, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 28082, -5214, -5214, -5214, -5214, 2990, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, 2057, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 28572, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, 2995, -5214, -5214, 32007, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, 3046, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, 860, 32007, 32007, + 32007, 32007, 32007, 32007, 32007, 32007, 32007, -5214, 32007, 309, + -5214, -5214, 3277, 3300, 569, 458, 78861, 29557, 3067, 23240, + -5214, 241, 3067, -5214, -5214, -5214, 81705, 3168, -5214, -5214, + 3048, -5214, -5214, -5214, -5214, -5214, 286, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, 2975, -5214, -5214, -5214, -5214, 2975, + -5214, 2996, 3271, 3279, 833, 81705, 2351, 32007, 3045, 217, + 81705, 32007, 2990, 2057, 32007, 2995, 32007, 3046, -5214, 32007, + -5214, 2000, 1962, 32007, 2004, 2998, -5214, -5214, 2987, 2730, + 2999, 3001, 3004, 3006, 2497, 230, 3008, 169, 1181, 3107, + 2497, 3219, 3009, -5214, 56583, -5214, 40283, 3025, -5214, -5214, + -5214, 376, 81705, 81705, -5214, 3260, -5214, 3010, -5214, 12575, + 3260, -5214, -5214, 37884, 3104, 3275, 3195, -5214, -5214, -5214, + 3011, 18282, 32987, 32987, -5214, 2086, 18282, 2119, -5214, -5214, + -5214, -5214, -5214, -5214, 1202, -5214, 81705, 698, 3074, 1528, + 3058, 733, 3462, 81705, -5214, 45063, 2008, -5214, 60849, 81705, + 81705, 3207, -5214, 3445, -5214,107175, -5214, 3020, -5214,106715, + 102561, -5214, -5214, 635, -5214, 575, 60849, -5214, 81705, 81705, + 60849, 81705, 81705, -5214, 60849, 81705, 81705, -5214, -5214, -5214, + -5214, -5214, 55161, 923, 69855, 3151, 68907, -5214, -5214, 3017, + 81705, 3072, 3299, 3305, 1001, -5214, -5214, 98769, -5214, 3246, + 60849, 81705, 81705, 32007, 3255, 81705, 81705, -5214, 272, 3117, + 3120, -5214, 81705, 3121, 64641, 3038,105335, 64641, 50428, 64641, + 64641, 3369,105335, 81705, 81705, 1166, 74595, 346, 1731, 2822, + 3263, -5214, 863, -5214, 60849, -5214, 81705, 3254, -5214, -5214, + -5214, 79335, 3492, 3159, -5214, -5214, -5214, 99243, -5214, -5214, + 3261, -5214, 2023, -5214, 60849, 60849, 81705, 8934, 99717, 1099, + 3272, -5214, -5214,105335, -5214, 81705, 79809, 81705, 81705, 3310, + 81705, 71751,100191,100665, 1294, 1350, 3315, 81705, 72225, 3316, + -5214, 3199, 81705, -5214, -5214, 57057, 60849, 81705, 1008, 56583, + -5214, -5214, 81705, -5214, 267, -5214, 81705, 4531, 3274, -5214, + -5214, 3142, 3146, 81705, 351, 1779, 2822, 3430, 81705, 81705, + 3056, 2031, 60849, 81705, 56583, -5214, 3276, 1182, 60849, 81705, + 79335, -5214, 3287, 74595, 74595, 60849, 81705, 74595, -5214, 81705, + 91185, -5214, 60849, 918, -5214, 60849, 81705, 79335, -5214, 3289, + 3221, 60849, 81705, 18653, -5214, -5214, -5214, 308, -5214, -5214, + -5214, -5214, -5214, 81705, 81705, 308, 81705, 81705, 308, 1197, + -5214, 60849, 81705, -5214, -5214, -5214, 3198, 60849, 81705, 81705, + 310, 81705, -5214, 81705, 60849, 2973, 81705, 81705, -5214, 81705, + 7699, 81705, 81705, 81705, 81705, 81705, 81705, 60849, 81705, -5214, + -5214, 1116, 79, 1750, 1785, 1481, 81705, 3371, 81705,101139, + 60849, 81705, 81705, 1238, 81705, 56583, 1576, -5214, -5214, 3203, + -5214, 60849, 918, -5214, 9475, 81705, 81705, 81705, 3162, 3163, + 203, 3243, -5214, -5214, -5214, 744, 744, 3284, -5214, 32007, + 32007, 30537, 3079, -5214, -5214, 32007, 2560, -5214, -5214, -5214, + 328, 3541, 328,101613, 328, 328, 3361, 3147, 3148, 328, + 328, 328, 3356, 328, 328, 328, 81705, 3259, -5214, -5214, + 3259, 815, 32007,105335, 81705, -5214, 2051, -5214, 3096, -5214, + -5214, 56583, 81705, 260, 149, 3433, 3308, 67959, 1448, 3421, + 81705, 3141, 81705, 3554, 3192, 74595, 2550, -5214, 1448, 81705, + -5214, 2139, 69855, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + 81705, -5214, -5214, 3423, 81705, 40761, 3280, -5214, 1238, 2550, + 2550, 2550, 2550, 3099, 2550, 81705, 3224, 3444, 1448, 3105, + 3452, -5214, 2167, 3453, 1196, 81705, 3328, 67959, 3174, 3160, + 3343, 3576, 2019, 1238, 3345, 3333, -5214, 53277, -5214, 2550, + 3592, 26642, 3432, 6825, 3335, 3397, -5214, -5214, 3341, 879, + 81705, 3435, 3437, 3459, -5214, 157, -5214, 3590, 1661, 3460, + 212, -5214, 243, -5214, 2591, -5214, 81705, -5214, 81705, 81705, + 81705, 81705, 268, -5214, -5214, 243, 2591, 243, 833, -5214, + 3405, 212, 2591, 3262, 3463, 292, -5214, 333, -5214, 3348, + 833, -5214, 3364, 2019, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, 2058, -5214, 81705, -5214, 3438, 3439, 3440, 3443, 3448, + 3139, 3145, 3193, 81705, 3153, 3139, 308, 3153, 3153, 3139, + 2707, 2707, 3139, 3145, 59901, 3613, 3468, -5214, 3228, 3154, + 3483, 189, -5214, 210, 60, 3407, -5214, -5214, -5214, -5214, + 105335, -5214, 60849, 3204, 2551, 2551, 269, 3375, 3169, 59901, + 3605, 833, -5214, 64641, 81705,105335, 64641, 3386, 64641, 64641, + 105335, 81705, 81705, 2060, -5214, 1821, -5214, 1834, 32007, 412, + -5214, 14076, 2065, 32007, 3171, 3177, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 3179, 3493, -5214, 2073, 2077, 2084, 3201, + 3205, 5727, 6225, 3206, 14150, 3188, 3208, 3211, 3184, 37397, + 37397, 27102, 1097, -5214, 37397, 3213, 3376, 2091, 12883, 3214, + 3215, 14427, 31027, 32007, 31027, 31027, 14845, 3194, 3216, 2097, + 56583, 3366, 14937, 2106, -5214, 32007, 56583, 6758, 32007, -5214, + 32007, 3218, -5214, -5214, 3729, 3729, 3729, 4458, -5214, 3202, + -5214, 37397, 37397, -5214, 2829, 27102, -5214, -5214, 3502, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, 2641, -5214, -5214, -5214, + 3408, 3075, 49937, 6049, 32007, 239, 32007, 2990, 32007, 3278, + 3729, 3729, 3729, 486, 486, 273, 273, 273, 1998, 458, + -5214, -5214, -5214, 3196, 3223, 3225, 3385, 3226, 32007, -5214, + 2028, 2080, 81705, 4679, 5171, 5253, -5214, -5214, -5214, 3025, + 82, 3025, -5214, 1249, 2497, 1071, 54687, -5214, -5214, -5214, + -5214, -5214, -5214, 81705, 18282, -5214, -5214, 3450, 3227, 2110, + -5214, -5214, 2497, -5214, -5214, 574, 574, 3229, -5214, 3231, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, 3220, -5214, -5214, + -5214, 41239, 3511, 3232, 39805, 80283, 3209, 2521, -5214, 80283, + 80757, 80283, -5214, 3240, -5214, 1719, 32007, 3507, -5214, -5214, + -5214, 32007, -5214, -5214, 475, 3248, 56, 121, 2277, 2277, + 2086, 838, -5214, -5214, 3295, -5214, 32007, 2175, -5214, 2311, + -5214, -5214, -5214, -5214, 2707, -5214, 3455, -5214, -5214, -5214, + 40283, 3245, 3291, 1085, 44107, 3418, -5214, 81705, -5214, 81705, + 356, -5214, 3234, -5214, -5214, -5214, -5214, -5214, -5214,102561, + 1704, -5214,106715, -5214,106715, -5214, 1704, 3650, -5214,102561, + -40, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 60849, 60849, 3457, 81705, 3449, 3461, 32007, + 821, 81705, 3235, 3241, 1262, 3537, 81705, -5214, 3597, 833, + -5214, -5214, 3331, -5214, 18282, -5214, -5214, -5214, -5214, -5214, + 60849, 81705, -5214, 64167, -5214, -5214,105335, -5214, -5214, 81705, + 81705, -5214, -5214, -5214,105335, -5214, -5214, -5214, 81705, 732, + 3338, 3339, 81705, -5214, 1124, 3065, 9921, 81705, 81705, 81705, + 3535, -5214, -5214, -5214, -5214, 3479, -5214, 3600, -5214,102561, + -5214, 2591, 1544, 3344, 2822, 3489, -5214, 3606, 3675, -5214, + 3389, 820, -5214, -5214, 3398, -5214, -5214, -5214, -5214, 3610, + 833, 3611, 833, 81705, 81705, 81705, 81705, 3401, -5214, -5214, + -5214, -5214, 3402, 3536, -5214, 56583, 56583, 56583, 2114, -5214, + -5214, 1238, -5214, -5214, -5214, -5214, -5214, -5214, 3567, -5214, + 2129, -5214, 1326, -5214, -5214, -5214, -5214, -5214, 3614, 60849, + 81705, 10222, 81705, 81705, 81705, 3485, 1730, 1098,105335, -5214, + 104415, -5214, -5214, 2134, -5214, 3294, 81705, 3359, 60849, 3340, + -5214, -5214, -5214, 3622, 3282, 3282, -5214, -5214, 3282, -5214, + -5214, -5214, 3550, 3480, -5214, 929, 3481, 60849, 3355, -5214, + -5214, -5214, -5214, 3634, 3379, -5214, -5214, 3380, 1836, 2822, + 2167, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + 3406, -5214, -5214, -5214, -5214, 1231, 1231, -5214, -5214, -5214, + 1231, 1564, 343, 1948, 2822, -5214, 313, 1146, 3382, -5214, + 3384, -5214, -5214, -5214, 3555, 3556, 3557, 3390, 3392, 3451, + 3399, 3400, 3456, -5214, 3409, 3464, 3413, 3469, 3414, 3676, + 833,105335, 3545, 1238, 3446, 3667, 833, -5214, 3419, -5214, + 3420, -5214, 2140, 3775, -5214, 81705, -5214, 391, 1992, 2822, + -5214, 3425, -5214, 60849, 81705, -5214, -5214, -5214, 32007, 3342, + 3346, 3347, 18282, 18282, 32007, -5214, -5214, 18282, 3350, -5214, + -5214, -5214, -5214,105335, -5214, 81705, 3621, -5214, -5214, 328, + 81705, 81705, -5214, -5214, -5214, 81705, -5214, -5214, -5214, 3623, + -5214, 471, 471, -5214, -5214, 3658, 7626, 3351, 220, -5214, + 56583, 46500, 1640, 158, 1456, -5214, 64167, 81705, 64167, -5214, + 149, 3562, 81705, 81705, 81705, 3353, 3352, -5214, -5214, -5214, + -5214, 60849, 763, 60849, 2497, -5214, -5214, 3429, -5214, 81705, + 2019, 3840, 3687, -5214, 3282, -5214, 3808, 3012, 1250, 1783, + 199, 2646, 3746, 2316, 32007, 367, -5214, -5214, 1719, 81705, + 3160, -5214, -5214, -5214, -5214, 1238, -5214, 3360, 3362, -5214, + 81705, 3693, 81705, 81705, 81705, 81705, 3204, 3365, 81705, 3363, + 105335, 81705, 2007, 2817, 3827, 3712, 1926, 3174, 3458, 3713, + 74595, 3381, 2162, -5214, -5214, 879, -5214, 2194, 138, -5214, + 1238, 64167,103495, 3700, -5214, 548, 6825, -5214, -5214, 548, + 887, 81705, -5214, -5214, -5214, -5214, 3594, 2059, -5214, 3685, + -5214, -5214, 1926, -5214,105335, 3373, -5214, 2198, -5214, -5214, + -5214, 292, 3441, 833, 3447, 833, -5214, -5214, -5214, -5214, + 81705, -5214, 81705, 59427, -5214, -5214, 81705, -5214, 3721, -5214, + -5214, 3516, 3521, 3522, 3523, 3527, 81705, 3139, -5214, 3387, + 60849, 1273, -5214, -5214, 3602, -5214, -5214, 74595, 3525, -5214, + -5214, -5214, -5214, 3739, 3740, -5214, -5214, -5214, 294, -5214, + 81705, 81705, 60849, 70329, 205, 60849, -5214, 3674, 3679, 3682, + 3683, 308, 3689, 3690, 3701, 3703, 3708, -5214, -5214, -5214, + 3434, 15460, 32007, -5214, 3784,105335, -5214, 8128, -5214, -5214, + -5214, 32007, -5214, -5214, -5214, -5214, -5214, -5214, 2100, 32007, + -5214, 32007, -5214, -5214, 24728, 3920, 3920, 3467,105335, 37397, + 37397, 37397, 37397, 1421, 2665, 37397, 37397, 37397, 37397, 37397, + 37397, 37397, 37397, 37397, 37397, 555, -5214, 3638, 32007, 32007, + 31517, -5214, -5214,105335, 3466, 3194, 3471, 3472, 32007, -5214, + -5214, 2199, 38849, 3475, 56583, -5214, 32007, 13249, 2209, 3487, + 15809, 1719, 8201, 1238, 32007, 1125, 1135, 32007, 2215, 32007, + 3767, -5214, -5214, -5214, -5214, -5214, -5214, 3673, -5214, 32007, + 3476, 3454, 37397, 37397, 4559, -5214, 5532, 32007, 27102, -5214, + 3284, 3496, 45541, -5214, 25224, 3474, 901, 901, 901, 901, + -5214, 81705, 81705, 81705, 3507, 3478, 3507, 191, 3486, -5214, + -5214, -5214, -5214, 1926, -5214, 3465, -5214, -5214, -5214, -5214, + -5214, 80283, 80757, 80283, 3488, 39327, 25703, 2521, 3491, 81705, + -5214, -5214, 3498, 40283, 3734, 3656, -5214, 40283, 3656, 1579, + 3656, 3737, 3574, 46019, -5214, -5214, 3500, -5214, 3668, -5214, + 1858, 18282, 3902, 3780, -5214, 3503, -5214, 3248, 270, -5214, + -5214, -5214, 845, -5214, 3573, -5214, -5214, -5214, 3209, 33477, + 3640, -5214, -5214, -5214, 3561, 2217, -5214, -5214, 3910, 3640, + -5214, -5214, 2230, 45063, 3245, 32007, 1719, 2240, 1798, -5214, + -5214,102561, -5214, 3581, 2591, 2591, 1424, 3139, 3838, 1424, + 8266, -5214, -5214, 41717, 81705, 81705, -5214, 81705, 2249, 2001, + 81705, -5214, 81705, -5214, -5214, -5214, 3969, 3579, 3582, 3786, + -5214, 2369, -5214, -5214, 60849, 81705, -5214, -5214, -5214, 393, + 2158, 2822, -5214, 3607, -5214, -5214, 3810, 81705, -5214, 3965, + 3624, 81705, 3872, 81705, 81231, -5214, 3562, 2001, 3639, 3850, + 1567, 2817, 338, 4282, -5214, 1609, -5214, -5214, 3608, -5214, + 81705, -5214, 81705, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + 3665, -5214, -5214, -5214, -5214, 57057, -5214, -5214, 81705, -5214, + 56583, 46500, 56583, 81705, -5214, 1586, 403, 2225, 2822, -5214, + 3617, -5214, 3876, 3620, 3625, 3677, 193, 1096, 3626, 3627, + 3678, 3543, 3544, 3546, -5214, 56583, 46991, 3696, 81705, 2591, + 3538, 3587, 81705, 310, 1238, -5214, -5214, 1238, 2591, 1238, + 81705, 81705, 81705, 81705, 310, -5214, -5214, -5214, 3987, 3642, + 81705, 81705, 81705, 81705, -5214, 3609, -5214, -5214, -5214, 81705, + 81705, 3882, 789, 2046, 60849, 81705, 81705, 60849, 81705, 81705, + 81705, 81705, 81705, 81705, 81705, 3766, -5214, 3974, 3901, 2189, + 3944, 3633, 81705, -5214, 81705, 1238, -5214, 3065, 81705, 81705, + 81705, 81705, -5214, -5214, -5214, -5214, -5214, 3284, -5214, 3559, + 3841, 328, -5214, 3842, 3843, 3844, 328, -5214, -5214, 1456, + -5214, 358, 81705, -5214, 2165, 81705, -5214, -5214, -5214, 3503, + 2155, 2228, -5214, -5214, -5214, -5214, -5214, -5214, 3568, 81705, + 81705, 37397, -5214, 418, 1453, 1030, -5214, 3836, 81705, 2973, + -5214, -5214, -5214, 190, 81705, -5214, -5214, -5214, -5214, 3569, + -5214, 594, 3365, -5214, 3864, 67959, 2591, 60849, 60849, 2591, + -5214,105335, 3588, 3160, -5214, 340, 3680, 60849, 1250,102087, + 2974, 3628, 3787, 9214, 40283, 40761, 1231, -5214, 3593, 3585, + -5214, -5214, 81705, 3562, 59427, 2253, 2167, 4052, 745, 1952, + -5214, 69381, 3788, 3365, 3864, -5214, 2817, 3812, 3806, -5214, + 1926, 81705, 3204, 3160, 1238, 81705, 3072, 46500, -5214, 4092, + 2061, -5214,102561, 32007, 32007, -5214, 3599, -5214, 3601, 6825, + -5214, 3681, 3604, 4058, 32007, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 3694, 3612, 81705, 81705, 879, 81705, -5214, + 3616, 3460, -5214, 3460, -5214, 81705, -5214, 81705, -5214, 833, + -5214, 3741, 833, 81705, 81705, 81705, 81705, 81705, 81705, 3139, + 308, -5214, 3925, 59901, 3468, -5214, 2259, 81705, -5214, -5214, + -5214, 4000, -5214, -5214, 123, 3943, 833, -5214, 937, 937, + 937, 937, 3898, 937, 937, 937, 937, 937, -5214, 32007, + 18282, -5214, 3619, -5214, 18282, 3630, 9279, 16439, -5214, 2272, + 32007, -5214, 970, 970, 970, 2745, 3946, -5214, 2403, 970, + 970, 970, 357, 357, 235, 235, 235, 3920, 555, 16565, + 17104, 17224, 3631, -5214, -5214, -5214, 3194, -5214, 33967, 66, + 4061, 38371, -5214, -5214, -5214, 3666, 3669, 3635, -5214, 32007, + 34457, 3641,107175, 3825, -5214, 981, 32007, 32007, 6451, -5214, + 8389, 32007, -5214, 6451, 318, 32007, 1900, 2160, 32007, 32007, + 6031, 9404, 3636, 32007,103021, -5214, -5214, -5214, 2283, 32007, + 81705, 81705, 81705, 81705, -5214, -5214, -5214, 3780, 1238, 3780, + 1238, 3637, -5214, -5214, -5214, -5214, 57531, 3629, 3366, 80283, + 3643, 81705, 2521, 40283, -5214, -5214, 2499, -5214, 40283, 3903, + -5214, 40283, 64641, -5214, 81705, 3647, 81705, -5214, 905, 32007, + 3670, 49937, -5214, -5214, -5214, -5214, 3722, -5214, 3852, 18282, + 29557, -5214, 1926, 1489, 81705, 1719, 74, -5214, 3649, 81705, + -5214, 3640, 18282, -5214, 3699, 2287, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 3726, 69855, 3973, -5214, 32007, 2295, -5214, + 3691, 4069, 325, 2296, 2301, 2001, -5214, 3951, -5214, 1482, + 3947, 196, -5214, 833, -5214,105335, 81705, 81705, 81705, 2762, + -5214, -5214, 81705, 81705, 81705, 81705, -5214, -5214, 60849, 81705, + -5214, 81705, -5214, -5214, -5214, -5214, 310, 418, 3960, 3961, + 3880, -5214, 308, -5214, 418, 3881, 310, 81705, -5214, -5214, + -5214, 2148, -5214,105335, 833, 833, -5214, -5214, -5214, -5214, + -5214, 3671, -5214, 4098, 3753, 81705, 81705, 81705, 81705, 81705, + 60849, 81705, 81705, 2497, 2497,105335, 3659, -5214, 2497, 2497, + 3660, -5214, 60849, 81705, 81705, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, 3749, -5214, 32007, 4097, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, 60849, 81705, 3750, -5214, 3756, -5214, 132, -5214, -5214, + 81705, 81705, 81705, 81705, 4017, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, 4015, 81705, -5214, -5214, + 1238, 1238,105335, 833, 833, -5214, -5214, -5214, 3759, -5214, + -5214, 3684, 3955, 328, -5214, 328, 328, 328, -5214, 3688, + -5214, 1456, 4050, -5214, 2001, 856, 4002, -5214, 32007, -5214, + 1657, 2745, -5214, 4059, 4141, -5214, -5214, -5214, -5214, 2973, + 2019, 3742, -5214, -5214, 64641, 1228, -5214, 3985, 260, 56583, + 3907, 67959, 313, 1685, 3695, 3818, -5214, 2591, 2591, 3751, + 81705, 4154, -5214, -5214, -5214, -5214, -5214, -5214, 60849, 3340, + -5214, 3924, 827, 4026, 81705, 40761, -5214, 3209, -5214, -5214, + -5214, 1238, -5214, -5214, 3828, 3160, -5214, 1254, 81705, 3917, + 67959, 3204, 2321, -5214, -5214, -5214, 3743, 4140, 3174, -5214, + 313, 3788, -5214, -5214, 4117, 3797, 3747, 4165, -5214, 3797, + 4032, 3921, 3710, -5214, 3381, -5214, 81705, -5214, 18282, 18282, + 1238,107635, 548,105335, 4041, -5214, 18282, 81705, 160, 3709, + 3878, -5214, 4004, 833, 2322, -5214, 833, 833, -5214, 81705, + -5214, 3139, 3139, 3139, 3139, 3139, -5214, 3926, -5214, -5214, + -5214, 3996, -5214, 833, 59901, -5214, -5214, -5214, -5214, -5214, + -5214, -5214, 937, -5214, -5214, -5214, -5214, -5214, 18282, -5214, + -5214, -5214, 32007, -5214, 9888, 37397, 4053, -5214, 32007, 32007, + 32007, -5214, 3727, 2326, 2339, -5214, -5214, 66, -5214, 4061, + -5214, -5214, -5214, 9924, 3785, 18282, 3845, 3728, 3731, 6451, + 6451, 8389, 6451, 32007, 32007, 6451, 6451, 32007, -5214, -5214, + 10256, 3928, -5214, -5214, 10621, -5214, -5214, -5214, -5214, 3670, + -5214, 3670, -5214, 3871, -5214, 2349, 4197, 36417, 4155, -5214, + 81705, 2354, -5214, 32007, 3744, -5214, -5214, 40283, 2499, 3745, + 2355, 81705, 2366,105335, 34947, 18282, 81705, 3284, 3738, -5214, + 81705, 2702, -5214, 1085, -5214, -5214, 4147, 41717, 4104, 32007, + -5214, -5214, -5214, -5214, 59901, 3956, 59901, 2001, 10854, 3951, + 41717, 50919, 81705, -5214, 81705, -5214, 3911, 3951, 3748, 2973, + -5214, -5214, -5214, -5214, -5214, -5214, 3754, -5214, -5214, -5214, + -5214, 3833, -5214, -5214, 22, 3176, -5214, 1640, -5214, 4210, + 4100, 4101, -5214, -5214, -5214, -5214, -5214, -5214, 3974, -5214, + -5214, 46500, 60849, 81705, -5214, 3846, -5214, -5214, -5214, -5214, + -5214, -5214, 43629, 49937, -5214, 193, 3758, 3760, 1096, -5214, + -5214, -5214, 81705, 11138, 3761, 620, 3176, 81705, 81705, 3763, + 3764, 3768, -10, 1307, 1829, 3139, 4089, 81705, -5214, -5214, + -5214, 3974, -5214, -5214, 81705, -5214, 328, -5214, -5214, -5214, + -5214, 56583, -5214, 2692, 3688, 1238, 64641, 4226, 4226, 11157, + 3990, -5214, -5214, 111, 3742, 4022, 4071, -5214, 3772, 81705, + 190, 3776, 2378, -5214, 81705, 3777, 3905, 1652, 1652, 81705, + 81705, 81705, 2389, 1926, 2591, 3587, 1250, 4123, 67959, 4166, + 3562, 369, -5214, 81705, 4241, 81705, 3204, 3365, 81705, 3781, + -5214, -5214, 69381, 3992, 1640, 81705, 2007, 3788, 3174, 1327, + 81705, -5214, 1303, -5214, 1926, -5214, 81705, 74595, 41717, 4111, + -5214,106715, -5214, 2390, -5214, -5214, -5214, 3861, 19226, 3025, + 3906, 3908, 3790, 1818, 4125, 81705, 155, -5214, -5214, -5214, + -5214, -5214, -5214, 81705, -5214, 205, -5214, 17598, -5214, 3591, + 37397, 18282, 18282, 18282, 32007, -5214, 32007, -5214, -5214, -5214, + -5214, 87, -5214, -5214, 6451, 6451, 6451, -5214, 4232, 3284, + -5214, -5214, -5214, 1509, 4184, 3240, 57531, 3800, -5214, 37397, + 2396, -5214, 2319, 81705, 2397, -5214, 18282, 81705, -5214, -5214, + 32007, -5214, 2410, -5214, 3801, 930, 3802, 23736, 3799, -5214, + -5214, -5214, -5214, -5214, 18282, 3803, -5214, 4264, 1528, -5214, + -5214, 3863, 81705, 2422, -5214, 89, 18282, 1273, 1424, 337, + 4069, 2973, -5214, 3811, -5214, -5214, 2817, 1503, 81705, 2973, + 81705, 3742, -5214, 81705, 3899, -5214, 4122, -5214, -5214, 3875, + -5214, 895, 3176, 81705,105335, -5214, 171, 4146, -5214,105335, + 105335, -5214, -5214, -5214, 32007, 3912, -5214, -5214, -5214, 32007, + 32007, 67011, -5214, -5214, 81705, 81705, 81705, 81705, 81705, -5214, + 833, -5214, -5214, 2426, -5214, 42673, -5214, -5214, 2985, 1238, + 2985, 173, -5214, -5214, 2985, 2985, -5214, 3025, -5214, 4226, + 321, -5214, -5214, 4049, 3820, 32007, -5214, 1145, 4031, 3914, + 3822, -5214, 64641, 4317, -5214, 56583, 3365, 3864, 81705, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, + -5214, 2443, 3562, 4164, 3160, 3747, -5214, 81705, 3866, -5214, + 40283, 3562, 1926, 1952, -5214, 3788, 3365, 3864, -5214, -5214, + 3830, 3806, 3174, 2007, 3972, -5214, 3976, -5214, 4258, 4046, + 4265, 3204, -5214, 3072, 2444, 81705, -5214, -5214, 6825,107635, + 105335, -5214, -5214, -5214, 3835, 4206, 3886, 3887, -5214, -5214, + -5214, 1818, -5214, 1360, 4205, 3893, -5214, 3913, 81705, -5214, + -5214, 3562, 833, 32007, 3591, 2445, 2450, 3904, -5214, 32007, + 985, 4183, 4185, 81705, -5214, -5214, -5214, 81705, 2745, 3851, + 36417, 56583, 2451, -5214,104875, -5214, 2455, 2456, -5214, 32007, + 3854, 32007, -5214, 34947, 81705, 3856, 3074, 1926, -5214, 3025, + 41717, -5214, 3983, -5214, 4186, -5214, -5214, 3742, 49937, 1503, + 3248, 2019, 3742, 2457, -5214, -5214, 81705, 3820, 32007, -5214, + 3952, -5214, -5214, 2498, 1163, 4028, 4028, 2500, 2504, 11349, + 81705, 2506, 2513, -5214, 2520, 2497, 3145, 1829, 3145, -5214, + 3139, -5214, -5214, 56583, -5214, 60375, -5214, -5214, -5214, 1238, + -5214, 1238, 4085, 81705, 52341, 1238, 1238, -5214, -5214, -5214, + -5214, 4158, -5214, 2167, -5214, 11368, -5214, -5214, -5214, 384, + -5214, 4077, 4078, 81705, -5214, 3868, -5214, 2525, -5214, 313, + 3994, 3562, -5214, -5214, 81705, 4329, 4331, -5214, 949, 81705, + 3209, -5214, 3747, 3204, 3174, 313, 3788, 1640, 42195, 3797, + 2007, 3806, -5214, -5214, 4082, -5214, 4083, -5214, 3877, 4175, + -5214, 1536, 548, -5214, -5214, -5214, 848, 4207, 4209, -5214, + -5214, -5214, 2985, -5214, 1368, 3888, 4227, -5214, -5214, -5214, + -5214, 18282, -5214, -5214, -5214, 3194, 35437, 35437, 35437, 3889, + 4326, 4328, 988, 2531, 38371, -5214, -5214, -5214, 81705, 4103, + 994, 4354, 4056, 2537, 34947, 2539, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 45063, 59901, 3948, 3909, 3248, -5214, 4022, + -5214, -5214, 2001, 3176, -5214, 18282, 81705, 64641, 4338, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, 3176, 3984, -5214, -5214, + 67011, -5214, 81705, -5214, -5214, 2543, -5214, -5214, -5214, 81705, + 3709, -5214, 3709, -5214, -5214, -5214, 976, 4007, 813, 813, + 4280, -5214, 3970, -5214, -5214, 3915, -5214, 4398, 4037, 81705, + -5214, -5214, 193, 1926, 67959, 3562, -5214, -5214, 2007, 3788, + 3174, 32007, 2544, -5214, 4069, 325, -5214, 3806, 3797, -5214, + -5214, 41717, 3918, 3160, 4270, -5214, -5214, -5214, 2347, 64641, + 64641, 81705, -5214, -5214, -5214, 32007, 190, 36907, 4055, 859, + 13921, 4263, -5214, 4263, 4263, -5214, 81705, 81705, 81705, -5214, + 3366, -5214, -5214, 37397, 37397, 4142, -5214, 994, -5214, 81705, + -5214, 3922, -5214, -5214, 2545, -5214, 1606, 337, 3923, -5214, + -5214, -5214, 4031, 2001, -5214, 3176, -5214, 81705, -5214, 3927, + -5214, -5214, -5214, 60375, 3709, -5214, -5214, -5214, 4399, -5214, + 295, -5214, -5214, -5214, -5214, 81705, 3562, 3659, 3747, -5214, + 3806, 3174, 2007, 11691, -5214, 42195, 81705, 81705, 3797, -5214, + 2555, 41717, 3797, 4068, -5214, 2043, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, 3929, 3931, -5214, -5214, 11867, 64641, 4391, + -5214, -5214, -5214, -5214, -5214, 839, -5214, -5214, -5214, 1175, + 1201, 1711, 4346, 2745, 2745, -5214, -5214, -5214, 32007, -5214, + -5214, -5214, 32007, 2001, -5214, -5214, -5214, 32007, -5214, -5214, + -5214, -5214, 3562, -5214, -5214, 3797, 2007, 3806, 4069, -5214, + -5214, -5214, -5214, -5214, 4175, -5214, 2556, 3025, 3893, 2142, + -5214, -5214, 2177, 2353, 4016, 4261, -5214, 3937, 35927, 4080, + -5214, 4144, -5214, 81705, 81705, 58005, 81705, 81705, 12199, 12260, + 2001, 2557, -5214, -5214, 3806, 3797, 81705, 3160, -5214, 41717, + -5214, 4287, -5214, 2043, 4057, 4060, 56109, -5214, -5214, -5214, + -5214, -5214, 288, 4323, -5214, 2562, -5214, -5214, -5214, 3797, + -5214, -5214, 3797, -5214, 190, -5214, 3986, 3988, -5214, 2566, + -5214, -5214, -5214, -5214, 32007, 58005, -5214, -5214, 3025, 64641, + 4271, 4272, -5214, 56109, 744, 4010, -5214, 3953, 64641, 64641, + -5214, 3950, 81705, 56109, -5214, -5214, 1238, -5214, 2567, -5214 +}; + + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_int16 yydefact[] = +{ + 1652, 1418, 639, 1505, 1504, 1418, 0, 261, 0, 1515, + 0, 1418, 424, 1084, 0, 0, 0, 0, 639, 1418, + 0, 1652, 0, 0, 0, 0, 0, 1665, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1418, 0, 0, + 1672, 0, 0, 0, 0, 1665, 0, 1517, 0, 0, + 0, 0, 1672, 0, 0, 0, 0, 0, 2, 9, + 10, 45, 80, 81, 38, 37, 98, 63, 24, 71, + 132, 131, 133, 50, 46, 88, 33, 35, 47, 51, + 73, 75, 40, 53, 64, 110, 72, 31, 70, 76, + 96, 58, 19, 20, 59, 21, 60, 22, 61, 106, + 82, 99, 43, 69, 30, 52, 78, 79, 12, 54, + 86, 18, 65, 66, 68, 91, 92, 93, 115, 94, + 127, 49, 124, 103, 104, 121, 105, 122, 16, 107, + 62, 23, 118, 117, 119, 89, 55, 90, 77, 97, + 116, 34, 120, 25, 26, 28, 29, 27, 67, 36, + 74, 39, 95, 123, 113, 109, 128, 126, 11, 134, + 111, 83, 14, 15, 100, 13, 32, 57, 17, 42, + 41, 56, 48, 130, 44, 1515, 102, 114, 101, 84, + 108, 87, 112, 129, 85, 125, 1616, 1615, 1676, 1619, + 1651, 0, 1631, 1417, 1416, 1431, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 638, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1428, 2268, 2285, 2286, 2287, 2288, 2289, 2290, + 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2300, 2299, + 2301, 2302, 2642, 2303, 2304, 2305, 2591, 2592, 2643, 2593, + 2594, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, + 2595, 2596, 2315, 2316, 2317, 2318, 2319, 2597, 2644, 2320, + 2321, 2322, 2323, 2324, 2325, 2645, 2326, 2327, 2328, 2329, + 2330, 2331, 2332, 2333, 2334, 2646, 2335, 2336, 2337, 2647, + 2338, 2339, 2340, 2341, 2342, 2343, 2598, 2599, 2344, 2345, + 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, + 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, + 2366, 2367, 2368, 2369, 2370, 2371, 2600, 2372, 2373, 2374, + 2375, 2601, 2376, 2377, 2378, 2379, 2602, 2380, 2381, 2382, + 2648, 2649, 2383, 2384, 2385, 2386, 2387, 2603, 2604, 2388, + 2389, 2390, 2391, 2392, 2393, 2394, 2650, 2395, 2396, 2397, + 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2651, + 2605, 2407, 2408, 2409, 2410, 2606, 2607, 2608, 2411, 2652, + 2653, 2412, 2654, 2413, 2414, 2415, 2416, 2417, 2418, 2609, + 2655, 2419, 2656, 2420, 2421, 2422, 2423, 2424, 2425, 2426, + 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, + 2437, 2438, 2610, 2657, 2611, 2439, 2440, 2441, 2442, 2443, + 2444, 2445, 2612, 2613, 2446, 2447, 2448, 2658, 2449, 2614, + 2450, 2615, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, + 2459, 2460, 2616, 2659, 2461, 2660, 2617, 2462, 2463, 2464, + 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2618, 2473, + 2619, 2476, 2474, 2475, 2477, 2478, 2479, 2480, 2481, 2482, + 2483, 2484, 2485, 2486, 2620, 2487, 2488, 2489, 2490, 2491, + 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, + 2502, 2503, 2504, 2505, 2661, 2506, 2507, 2508, 2509, 2510, + 2621, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, + 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2622, 2527, 2528, + 2662, 2529, 2530, 2623, 2531, 2532, 2533, 2534, 2535, 2536, + 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2624, 2545, + 2546, 2547, 2548, 2663, 2549, 2550, 2551, 2552, 2553, 2554, + 2625, 2626, 2555, 2556, 2627, 2557, 2628, 2558, 2559, 2560, + 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, + 2571, 2572, 2573, 2574, 2575, 2629, 2630, 2576, 2664, 2577, + 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, + 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, + 2641, 2588, 2589, 2590, 136, 0, 0, 2235, 2269, 2270, + 2273, 2268, 396, 395, 1605, 2232, 2269, 1514, 0, 1494, + 639, 0, 1431, 423, 1652, 0, 0, 0, 0, 0, + 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 184, 0, 0, 0, 0, 447, + 446, 0, 0, 1050, 452, 0, 0, 0, 0, 0, + 629, 1554, 2474, 1552, 1606, 262, 265, 266, 263, 264, + 2251, 0, 1196, 1197, 1199, 0, 0, 1209, 895, 896, + 0, 0, 0, 909, 0, 0, 0, 893, 0, 0, + 0, 915, 0, 912, 0, 0, 916, 913, 890, 914, + 897, 0, 889, 0, 0, 1209, 917, 0, 0, 891, + 0, 0, 0, 0, 1431, 1551, 453, 1652, 0, 1536, + 1537, 1538, 1515, 1527, 1539, 1532, 1534, 1533, 1535, 1531, + 2250, 2286, 985, 985, 985, 985, 982, 983, 985, 985, + 985, 2494, 0, 0, 964, 0, 966, 2252, 985, 990, + 521, 521, 521, 0, 989, 994, 521, 0, 1399, 1440, + 2234, 1664, 0, 965, 1398, 2555, 1542, 0, 0, 1224, + 1220, 1222, 1223, 1221, 0, 1053, 1053, 2513, 1408, 246, + 2524, 2625, 2555, 245, 240, 241, 214, 2290, 0, 0, + 989, 0, 1431, 1406, 961, 1671, 1669, 0, 2219, 2313, + 2329, 2422, 237, 2506, 2514, 2524, 2625, 2555, 2587, 193, + 203, 198, 0, 255, 2524, 2625, 2555, 251, 1428, 0, + 1632, 1779, 2228, 0, 1401, 1400, 1516, 0, 1519, 0, + 2489, 1636, 1639, 1521, 1637, 2271, 1854, 1883, 1861, 1883, + 1883, 1850, 1850, 2359, 1863, 1851, 1852, 1888, 0, 1883, + 1850, 1855, 0, 1853, 1891, 1891, 1878, 3, 1835, 1836, + 1837, 1838, 1864, 1865, 1839, 1870, 1871, 1875, 1840, 1905, + 1850, 2272, 1673, 1674, 2219, 4, 2265, 5, 2214, 2264, + 6, 7, 1628, 0, 0, 1, 1652, 0, 1526, 1668, + 1668, 0, 1668, 0, 1620, 1628, 1623, 1627, 0, 0, + 0, 0, 0, 1402, 0, 0, 0, 920, 0, 1443, + 1035, 0, 0, 0, 0, 0, 1293, 0, 1093, 1092, + 2274, 2257, 2258, 2259, 0, 2255, 2256, 2275, 2276, 2277, + 0, 2394, 1293, 0, 0, 2130, 2141, 2142, 2143, 2317, + 2376, 2138, 2139, 2140, 2132, 2133, 2134, 2135, 2136, 2137, + 0, 0, 1191, 2131, 0, 2394, 0, 1293, 0, 163, + 0, 140, 1293, 0, 0, 2394, 0, 0, 2394, 0, + 0, 0, 0, 0, 2394, 0, 0, 0, 0, 0, + 163, 2427, 0, 140, 2394, 0, 0, 1422, 0, 0, + 0, 1424, 1427, 1414, 0, 2211, 0, 2212, 2236, 0, + 1508, 1502, 1511, 1507, 1497, 0, 2228, 0, 0, 0, + 0, 903, 0, 0, 893, 0, 0, 0, 904, 0, + 905, 906, 0, 0, 0, 0, 902, 0, 1412, 1404, + 0, 1544, 1546, 1545, 1543, 521, 0, 0, 0, 2394, + 0, 140, 1481, 0, 2394, 140, 0, 0, 451, 450, + 140, 2255, 449, 448, 2317, 2376, 0, 1083, 0, 1358, + 140, 2394, 0, 186, 2394, 698, 2394, 1521, 0, 642, + 0, 810, 2427, 140, 0, 0, 0, 0, 0, 0, + 1053, 0, 0, 0, 0, 0, 0, 0, 628, 639, + 1555, 1553, 0, 1200, 239, 238, 1198, 907, 2394, 1125, + 357, 0, 0, 2394, 1462, 2394, 357, 924, 908, 0, + 894, 2394, 357, 1089, 2394, 2260, 173, 0, 892, 2317, + 2376, 2394, 357, 1193, 0, 2394, 357, 2394, 169, 2394, + 357, 2394, 357, 2394, 643, 0, 0, 2394, 357, 2394, + 2427, 171, 911, 2394, 357, 918, 2394, 357, 2230, 2394, + 0, 1415, 0, 1547, 0, 1529, 2629, 0, 1652, 985, + 984, 0, 985, 0, 985, 0, 985, 0, 985, 0, + 0, 0, 985, 2253, 2254, 967, 0, 991, 0, 0, + 998, 997, 996, 0, 0, 0, 999, 0, 1783, 1582, + 0, 1396, 1411, 0, 0, 0, 1053, 0, 1052, 0, + 0, 1407, 244, 242, 0, 0, 0, 0, 0, 0, + 1413, 0, 1405, 0, 0, 0, 2238, 2240, 2241, 2144, + 2214, 0, 2592, 2593, 2594, 2203, 0, 2595, 2596, 2597, + 2644, 2034, 2021, 2030, 2035, 2022, 2024, 2031, 2598, 2599, + 1972, 2600, 2601, 2248, 2602, 2603, 2604, 2606, 2607, 2608, + 2609, 2026, 2028, 2610, 2611, 2613, 0, 2249, 2614, 2615, + 2456, 2617, 2618, 2620, 2621, 2032, 2623, 2624, 2625, 2626, + 2627, 2628, 2247, 0, 2033, 2630, 2632, 2633, 2634, 2635, + 2637, 2638, 2639, 2640, 0, 0, 0, 2225, 0, 2001, + 0, 1843, 1844, 1866, 1867, 1845, 1872, 1873, 1846, 0, + 2224, 1908, 2089, 2000, 2017, 0, 2006, 2007, 0, 1999, + 1995, 1654, 2220, 0, 1996, 2237, 2239, 2204, 1654, 2218, + 206, 257, 0, 258, 2226, 2524, 194, 236, 208, 235, + 209, 207, 0, 2315, 195, 0, 0, 196, 0, 0, + 0, 0, 254, 252, 0, 1403, 0, 1781, 1780, 2229, + 929, 0, 1518, 1515, 2154, 0, 1638, 0, 0, 0, + 1882, 1869, 1877, 1876, 0, 1859, 1858, 1857, 0, 1856, + 1883, 1883, 1881, 1860, 1835, 0, 0, 0, 1887, 0, + 1885, 1831, 1827, 0, 1894, 1895, 1896, 1893, 1906, 1892, + 0, 1841, 1897, 0, 1850, 1847, 1739, 0, 1618, 1617, + 8, 0, 1523, 1525, 1500, 1521, 1666, 1667, 0, 0, + 0, 0, 0, 0, 0, 0, 1726, 1684, 1685, 1687, + 1723, 1727, 1735, 0, 1624, 0, 0, 1785, 0, 0, + 1429, 0, 0, 0, 0, 0, 1124, 0, 0, 0, + 0, 921, 0, 0, 0, 1449, 0, 1451, 1452, 1453, + 0, 0, 1454, 1455, 1443, 248, 1461, 1459, 1442, 1444, + 1457, 0, 0, 0, 0, 0, 0, 0, 1473, 0, + 177, 178, 0, 655, 639, 0, 2394, 0, 0, 0, + 0, 1134, 1141, 1292, 0, 0, 0, 0, 0, 0, + 0, 0, 1135, 1133, 0, 1136, 250, 1146, 1173, 1176, + 0, 0, 1091, 1094, 0, 0, 0, 0, 0, 1283, + 0, 0, 0, 1283, 0, 0, 0, 1292, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 273, 275, 288, + 352, 0, 620, 0, 0, 0, 623, 0, 2394, 1293, + 0, 0, 0, 1195, 0, 0, 0, 0, 0, 0, + 0, 0, 1176, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 138, 139, 144, 0, 0, 0, 0, 1176, + 0, 0, 0, 0, 0, 0, 0, 606, 619, 0, + 0, 0, 0, 0, 616, 0, 0, 140, 278, 596, + 602, 0, 0, 0, 705, 704, 0, 0, 0, 0, + 0, 0, 1373, 0, 1372, 0, 0, 0, 0, 1471, + 1470, 0, 0, 0, 0, 0, 0, 1283, 0, 267, + 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 388, 389, 0, 0, + 0, 144, 0, 0, 1283, 0, 280, 0, 0, 1423, + 1420, 1421, 0, 1426, 0, 0, 0, 0, 2009, 0, + 2158, 1676, 2156, 1109, 2210, 0, 2278, 2665, 2666, 2667, + 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, + 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, + 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, + 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, + 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, + 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, + 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, + 2738, 2739, 2740, 2741, 2207, 2206, 2233, 2279, 2280, 2281, + 2282, 2213, 0, 0, 225, 226, 224, 1509, 227, 1510, + 1506, 0, 1492, 0, 0, 0, 0, 0, 0, 0, + 0, 2317, 2376, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 818, + 1443, 1480, 0, 0, 0, 648, 0, 2394, 0, 142, + 856, 0, 808, 452, 0, 0, 0, 1166, 1357, 142, + 0, 0, 180, 0, 0, 702, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 809, 0, 0, 142, + 0, 2394, 599, 2394, 0, 521, 521, 0, 0, 1055, + 0, 0, 0, 0, 0, 0, 0, 0, 1610, 1609, + 1612, 1611, 0, 1608, 0, 355, 356, 0, 1183, 1208, + 0, 0, 0, 0, 0, 885, 910, 0, 0, 1177, + 0, 0, 2394, 357, 2394, 0, 2394, 0, 0, 0, + 1185, 357, 0, 1179, 0, 0, 1181, 0, 1374, 0, + 901, 899, 898, 900, 0, 0, 883, 0, 0, 0, + 0, 0, 878, 0, 0, 880, 0, 0, 0, 0, + 1652, 1528, 0, 975, 0, 979, 0, 970, 0, 976, + 0, 971, 968, 969, 0, 974, 0, 0, 522, 524, + 0, 0, 2341, 2358, 0, 2383, 2415, 2416, 2480, 2509, + 2514, 2520, 0, 2549, 2560, 0, 1000, 1030, 995, 714, + 0, 0, 1592, 1397, 2163, 0, 1652, 0, 0, 0, + 1216, 1217, 243, 215, 0, 0, 0, 1032, 2513, 1410, + 960, 639, 0, 1997, 0, 2004, 2005, 2202, 0, 0, + 0, 0, 0, 0, 2003, 0, 0, 0, 0, 0, + 0, 0, 1930, 0, 0, 2162, 0, 0, 2162, 0, + 0, 1965, 0, 0, 0, 0, 0, 0, 0, 0, + 1931, 1912, 1913, 2001, 2154, 0, 2002, 2244, 0, 1905, + 2283, 2144, 0, 2141, 2142, 2143, 2742, 2743, 2744, 2745, + 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, + 2756, 2757, 0, 2758, 2759, 2760, 2761, 2762, 2764, 2763, + 2765, 2766, 2767, 2768, 2769, 2770, 2217, 2772, 2773, 2774, + 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, + 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, + 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, + 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, + 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, + 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, + 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, + 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, + 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, + 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, + 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, + 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, + 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, + 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, + 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 1945, + 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, + 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, + 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, + 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, + 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 1947, + 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, + 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, + 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 3002, + 3003, 3004, 3005, 3006, 3009, 3007, 3008, 3010, 3011, 3012, + 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, + 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, + 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, + 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, + 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, + 3063, 3064, 3066, 3065, 3067, 3068, 3069, 3070, 3071, 3072, + 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, + 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, + 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, + 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, + 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, + 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, + 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, + 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, + 3153, 3154, 3155, 3156, 3157, 3158, 3159, 0, 2138, 2139, + 2140, 2132, 2133, 2134, 2135, 2136, 2137, 2148, 0, 0, + 2223, 2284, 0, 2091, 0, 1927, 0, 0, 1739, 0, + 2242, 2205, 1739, 259, 260, 256, 0, 0, 211, 210, + 0, 229, 233, 234, 205, 232, 0, 228, 213, 2078, + 2077, 212, 204, 201, 199, 216, 218, 219, 202, 200, + 253, 0, 0, 0, 357, 1526, 1513, 0, 0, 2217, + 0, 2152, 0, 0, 2150, 0, 0, 0, 1736, 0, + 1640, 0, 1644, 0, 0, 0, 1880, 1879, 1832, 1828, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 922, 0, 1848, 0, 1801, 2266, 2267, + 2215, 1672, 1526, 0, 1522, 1635, 1634, 1677, 1678, 1075, + 1633, 1706, 1707, 0, 0, 0, 0, 1732, 1730, 1697, + 1688, 1696, 0, 0, 1694, 0, 1698, 1908, 1725, 1622, + 1682, 1683, 1686, 1621, 0, 1728, 0, 1595, 1726, 1687, + 1579, 0, 1557, 0, 1786, 0, 0, 1430, 0, 0, + 0, 1104, 1106, 0, 1105, 0, 1108, 0, 1117, 0, + 0, 1103, 1122, 0, 1111, 1109, 0, 1469, 0, 0, + 0, 0, 0, 1450, 0, 0, 2549, 247, 1453, 1458, + 1445, 1456, 0, 0, 0, 0, 0, 1034, 1033, 0, + 0, 1057, 0, 0, 0, 1476, 510, 0, 354, 0, + 0, 0, 0, 0, 0, 0, 0, 804, 801, 0, + 0, 800, 0, 653, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 678, 0, 1283, 0, 286, + 0, 1143, 0, 1142, 0, 1147, 0, 0, 1144, 1139, + 1140, 2514, 2524, 2555, 249, 1145, 1175, 0, 1174, 1170, + 0, 1086, 0, 1087, 0, 0, 0, 0, 0, 2368, + 2394, 294, 317, 0, 1282, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 339, 0, 0, 342, 341, 0, 0, 0, 0, 0, + 346, 325, 0, 326, 0, 345, 0, 0, 0, 621, + 622, 0, 0, 0, 1283, 0, 282, 0, 0, 0, + 0, 0, 0, 0, 0, 1192, 0, 731, 0, 0, + 2514, 1171, 0, 0, 0, 0, 0, 0, 1361, 0, + 0, 166, 0, 161, 165, 0, 0, 2514, 1172, 0, + 0, 0, 0, 0, 604, 605, 618, 0, 609, 610, + 607, 611, 612, 0, 0, 0, 0, 0, 0, 0, + 603, 0, 0, 700, 699, 703, 0, 0, 0, 0, + 0, 0, 1367, 0, 0, 1166, 0, 0, 1366, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1226, + 1225, 0, 0, 0, 0, 1293, 0, 846, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 168, 718, 0, + 717, 0, 162, 167, 0, 0, 0, 0, 0, 0, + 0, 0, 223, 1419, 1425, 1676, 1676, 1676, 2015, 0, + 0, 0, 0, 1675, 2208, 2211, 1497, 1503, 1496, 1495, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 402, 399, 400, + 402, 0, 0, 0, 0, 820, 0, 823, 826, 1441, + 475, 0, 0, 645, 678, 0, 0, 455, 175, 0, + 0, 0, 0, 733, 0, 0, 0, 1356, 137, 184, + 186, 453, 0, 185, 187, 189, 190, 191, 188, 192, + 0, 697, 701, 0, 0, 0, 0, 641, 0, 0, + 0, 0, 0, 0, 0, 1806, 0, 0, 160, 0, + 0, 594, 598, 0, 0, 0, 0, 455, 560, 368, + 2394, 0, 521, 0, 2394, 0, 1054, 0, 807, 0, + 0, 0, 1128, 1128, 0, 0, 747, 746, 0, 0, + 0, 0, 0, 0, 1607, 357, 1126, 0, 1463, 0, + 357, 925, 357, 1090, 174, 2261, 0, 887, 0, 0, + 0, 0, 357, 1194, 875, 357, 170, 357, 357, 644, + 0, 357, 172, 0, 0, 357, 919, 357, 2231, 0, + 357, 1550, 2394, 521, 1530, 972, 981, 980, 978, 977, + 973, 0, 992, 0, 520, 0, 0, 0, 0, 0, + 1008, 1009, 0, 0, 1005, 1010, 0, 1006, 1007, 1012, + 1002, 1001, 1013, 1014, 0, 0, 1032, 712, 0, 0, + 0, 0, 1589, 0, 1587, 0, 1784, 1591, 1580, 1541, + 0, 1540, 0, 587, 1053, 1053, 0, 0, 989, 0, + 0, 357, 1409, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2167, 0, 2168, 0, 0, 2201, + 2197, 0, 0, 0, 0, 0, 2171, 2174, 2175, 2176, + 2173, 2177, 2172, 0, 0, 2178, 0, 0, 0, 0, + 0, 0, 0, 0, 2158, 2161, 0, 0, 2621, 0, + 0, 0, 0, 1973, 0, 0, 2125, 0, 2158, 0, + 0, 0, 0, 0, 0, 0, 2154, 2193, 0, 0, + 0, 0, 2076, 0, 2073, 0, 0, 0, 0, 2214, + 0, 0, 2245, 1909, 1923, 1924, 1925, 1928, 2222, 0, + 2216, 0, 0, 1910, 1936, 0, 2194, 1961, 0, 1966, + 1951, 2179, 2180, 2181, 2182, 1968, 0, 1944, 1949, 1953, + 0, 1932, 0, 1929, 0, 2217, 2153, 0, 2151, 0, + 1920, 1921, 1922, 1914, 1915, 1916, 1917, 1918, 1919, 1926, + 2129, 2127, 2128, 0, 0, 0, 2099, 0, 0, 1948, + 2386, 2422, 0, 1665, 1665, 1665, 1653, 1663, 2221, 1801, + 1676, 1801, 2227, 0, 0, 1905, 0, 1782, 927, 928, + 926, 1499, 1512, 1526, 2155, 1520, 1642, 0, 0, 0, + 1849, 1862, 0, 1890, 1889, 1891, 1891, 0, 1833, 0, + 1874, 1899, 1900, 1901, 1902, 1903, 1904, 0, 1898, 1842, + 923, 0, 2511, 2641, 0, 1763, 1738, 1740, 1750, 1763, + 1770, 1763, 2018, 1799, 2019, 2228, 0, 1709, 2263, 1501, + 1524, 0, 1073, 1074, 0, 1078, 2621, 2511, 0, 0, + 0, 0, 1699, 1733, 0, 1724, 0, 2238, 1700, 2237, + 1701, 1704, 1705, 1695, 1734, 1593, 0, 1729, 1626, 1625, + 0, 1804, 0, 0, 0, 1571, 1559, 0, 1787, 0, + 1739, 1597, 0, 2214, 1737, 1332, 1227, 1294, 1107, 0, + 1850, 1118, 0, 1102, 0, 1101, 1850, 0, 1119, 0, + 1850, 1333, 1228, 1295, 1334, 1229, 1296, 1335, 1230, 1460, + 1448, 1447, 1446, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 785, 2394, 357, + 1474, 1336, 0, 1231, 353, 1475, 1297, 1479, 803, 802, + 0, 0, 1298, 0, 654, 659, 0, 661, 662, 2317, + 2376, 663, 666, 667, 0, 669, 658, 657, 0, 0, + 0, 0, 0, 675, 680, 0, 0, 0, 0, 0, + 0, 1137, 1138, 1337, 1234, 0, 1299, 0, 1085, 0, + 1235, 176, 0, 0, 274, 2394, 296, 0, 473, 785, + 0, 1285, 293, 323, 0, 338, 333, 334, 332, 2394, + 357, 2394, 357, 0, 0, 0, 0, 0, 335, 330, + 331, 327, 0, 0, 340, 2289, 2360, 2525, 0, 686, + 688, 0, 693, 343, 1255, 364, 363, 362, 0, 347, + 0, 369, 372, 344, 324, 322, 319, 289, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1187, + 0, 1340, 1300, 0, 1322, 0, 0, 0, 0, 725, + 1343, 1241, 1303, 0, 1362, 1364, 1354, 1242, 1363, 164, + 1272, 153, 0, 0, 149, 0, 0, 0, 0, 143, + 1344, 1243, 1304, 0, 0, 1345, 1244, 0, 0, 279, + 597, 608, 613, 1249, 617, 614, 1312, 615, 1352, 1245, + 0, 1348, 1275, 1307, 580, 1166, 1166, 1355, 1368, 1246, + 1166, 0, 1283, 0, 268, 270, 0, 1053, 0, 1247, + 0, 1305, 1347, 1274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1482, 0, 0, 0, 0, 0, 0, + 357, 0, 0, 0, 1285, 2394, 357, 1346, 0, 1280, + 0, 1320, 0, 0, 390, 0, 1273, 1283, 0, 281, + 1251, 0, 1314, 0, 0, 221, 220, 222, 0, 0, + 0, 0, 2159, 2160, 0, 2157, 2010, 2210, 0, 1493, + 949, 935, 948, 0, 931, 2358, 0, 934, 936, 0, + 0, 0, 937, 941, 942, 0, 933, 930, 932, 0, + 401, 0, 0, 742, 743, 0, 0, 0, 0, 822, + 0, 0, 1472, 0, 140, 652, 0, 0, 0, 647, + 677, 682, 0, 0, 0, 0, 454, 458, 462, 463, + 464, 0, 0, 0, 0, 154, 141, 0, 864, 0, + 521, 0, 735, 1360, 1359, 1165, 0, 186, 179, 0, + 0, 698, 0, 1521, 0, 0, 575, 578, 577, 0, + 368, 817, 815, 814, 816, 838, 813, 0, 1805, 1807, + 0, 0, 0, 0, 0, 0, 587, 457, 0, 0, + 524, 0, 563, 0, 0, 0, 0, 560, 0, 0, + 0, 2271, 0, 834, 806, 0, 1096, 0, 1114, 1097, + 0, 0, 0, 0, 1151, 1158, 1127, 1152, 1129, 1158, + 0, 0, 748, 752, 751, 755, 753, 0, 749, 626, + 1613, 1614, 0, 1184, 0, 0, 1468, 0, 1466, 886, + 1178, 357, 0, 357, 0, 357, 1186, 1180, 1182, 1375, + 0, 884, 0, 0, 877, 879, 0, 881, 0, 993, + 523, 0, 0, 0, 0, 0, 0, 1004, 624, 1011, + 0, 1025, 1020, 1022, 0, 1026, 711, 0, 0, 1590, + 1583, 1585, 1584, 0, 0, 1581, 2164, 876, 0, 593, + 0, 0, 0, 0, 1032, 0, 1027, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1670, 2165, 2166, + 0, 0, 0, 2198, 0, 0, 2051, 0, 2023, 2025, + 2037, 0, 2052, 2008, 2053, 2027, 2029, 2038, 0, 0, + 2145, 0, 2041, 2040, 0, 1975, 1976, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1990, 2042, 2124, 0, 0, + 0, 2044, 2043, 0, 0, 2192, 0, 0, 0, 2049, + 2054, 0, 0, 0, 0, 2060, 0, 2081, 0, 0, + 0, 1998, 2155, 0, 0, 0, 0, 0, 0, 0, + 0, 1967, 1952, 1970, 1946, 1950, 1954, 0, 1969, 0, + 0, 1940, 0, 0, 1938, 1962, 1934, 0, 0, 1963, + 0, 0, 0, 2016, 0, 0, 1665, 1665, 1665, 1665, + 1662, 0, 0, 0, 1709, 0, 1709, 197, 0, 230, + 217, 1498, 1643, 1652, 1868, 0, 1886, 1884, 1829, 1834, + 1907, 1763, 1770, 1763, 0, 0, 1628, 0, 1750, 0, + 1762, 1748, 1761, 0, 0, 1776, 1774, 0, 1776, 0, + 1776, 0, 1742, 0, 1766, 1744, 1761, 1746, 0, 1791, + 2229, 1800, 0, 1722, 1679, 0, 2146, 1078, 0, 1681, + 1703, 1702, 0, 1692, 0, 1731, 1689, 1594, 1578, 0, + 1576, 1563, 1565, 1564, 0, 0, 1566, 2214, 0, 1576, + 1558, 1602, 0, 0, 1804, 0, 1601, 0, 1850, 1099, + 1100, 0, 1123, 0, 1037, 1038, 0, 1036, 0, 0, + 0, 509, 1056, 0, 0, 0, 785, 0, 0, 513, + 0, 1477, 0, 1353, 1271, 656, 0, 0, 0, 0, + 671, 630, 672, 674, 0, 0, 673, 676, 679, 1283, + 0, 287, 1257, 0, 1318, 1131, 0, 0, 1088, 0, + 0, 0, 0, 0, 0, 472, 682, 318, 0, 0, + 0, 0, 377, 0, 298, 310, 375, 316, 0, 349, + 0, 321, 0, 314, 336, 328, 337, 329, 348, 350, + 0, 690, 691, 689, 685, 0, 692, 694, 0, 366, + 0, 0, 0, 0, 1339, 0, 1283, 0, 283, 1253, + 0, 1316, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1321, 0, 0, 0, 0, 730, + 0, 727, 0, 0, 0, 146, 145, 0, 152, 0, + 0, 0, 0, 0, 0, 1369, 1370, 1371, 0, 0, + 0, 0, 0, 0, 384, 0, 290, 292, 291, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 391, 359, 0, 841, + 0, 0, 0, 393, 0, 0, 1331, 0, 0, 0, + 0, 0, 1338, 1236, 2013, 2014, 2011, 1676, 2209, 0, + 0, 0, 946, 0, 0, 0, 0, 404, 405, 140, + 403, 426, 0, 785, 0, 0, 819, 824, 832, 2456, + 2132, 2133, 830, 825, 827, 829, 831, 828, 0, 0, + 0, 0, 491, 0, 0, 0, 481, 0, 0, 1166, + 474, 477, 478, 0, 0, 648, 651, 649, 650, 0, + 670, 0, 457, 498, 550, 0, 156, 0, 0, 157, + 155, 0, 0, 368, 732, 0, 729, 0, 182, 0, + 702, 0, 0, 0, 0, 0, 1166, 640, 0, 837, + 839, 811, 0, 682, 0, 0, 599, 0, 521, 1551, + 582, 0, 552, 457, 550, 559, 0, 0, 567, 367, + 0, 0, 587, 368, 0, 0, 1057, 0, 833, 0, + 0, 1095, 0, 0, 0, 1148, 1153, 1149, 0, 1128, + 1110, 0, 1150, 0, 0, 1156, 1081, 1130, 1082, 1391, + 1392, 1389, 1390, 0, 0, 0, 0, 0, 0, 1604, + 0, 0, 1464, 0, 888, 0, 871, 0, 873, 357, + 719, 0, 357, 0, 0, 0, 0, 0, 0, 1003, + 0, 1023, 0, 0, 1032, 1029, 0, 0, 1588, 1586, + 585, 0, 1218, 1219, 1032, 0, 357, 1031, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2169, 0, + 2200, 2196, 0, 2020, 2170, 0, 0, 0, 2125, 0, + 0, 1974, 1986, 1987, 1988, 2185, 0, 1993, 0, 1983, + 1984, 1985, 1977, 1978, 1979, 1980, 1981, 1982, 1989, 2189, + 2188, 0, 0, 2046, 2047, 2048, 2191, 2055, 0, 2307, + 2082, 0, 2059, 2075, 2074, 0, 0, 0, 2062, 0, + 0, 2071, 0, 2126, 2246, 1911, 0, 0, 1937, 2195, + 1955, 0, 1971, 1933, 2145, 0, 0, 0, 0, 0, + 1942, 0, 0, 0, 2102, 2097, 2098, 2122, 0, 0, + 0, 0, 0, 0, 1656, 1655, 1661, 1722, 2010, 1722, + 0, 0, 1830, 1749, 1745, 1747, 0, 2636, 0, 1752, + 1759, 0, 1741, 0, 1775, 1771, 0, 1772, 0, 0, + 1773, 0, 0, 1743, 0, 1759, 0, 1798, 1668, 0, + 2093, 0, 1680, 1076, 1077, 1690, 0, 1693, 2337, 1802, + 0, 1577, 0, 0, 0, 1568, 1574, 1556, 0, 0, + 1598, 1576, 1599, 1120, 0, 0, 1112, 1043, 1044, 1047, + 1045, 1042, 1046, 0, 0, 0, 785, 0, 0, 531, + 0, 1070, 1070, 0, 0, 515, 572, 526, 788, 0, + 0, 0, 786, 357, 1232, 0, 0, 0, 0, 631, + 1351, 1233, 0, 0, 0, 0, 1132, 1286, 0, 0, + 1256, 0, 295, 471, 470, 475, 0, 0, 301, 311, + 0, 306, 0, 1284, 0, 0, 0, 0, 305, 308, + 379, 0, 376, 0, 357, 357, 351, 687, 365, 370, + 371, 374, 1291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 865, 848, 0, 0, + 866, 867, 0, 0, 0, 1189, 1190, 1188, 1323, 1324, + 1329, 1326, 1325, 1328, 1330, 1327, 0, 1239, 0, 0, + 723, 1287, 150, 147, 148, 151, 1288, 1269, 1250, 1313, + 581, 0, 0, 0, 1248, 0, 1306, 0, 1265, 1259, + 0, 0, 0, 0, 0, 1350, 1279, 1311, 1349, 1277, + 1309, 1276, 1308, 1278, 1310, 1270, 0, 0, 1809, 845, + 0, 0, 0, 357, 357, 844, 721, 1252, 0, 1315, + 1261, 0, 0, 0, 938, 0, 0, 0, 940, 409, + 427, 140, 0, 741, 805, 0, 0, 821, 0, 479, + 0, 485, 489, 0, 0, 493, 494, 492, 480, 1166, + 521, 571, 774, 775, 0, 0, 795, 0, 646, 0, + 0, 455, 0, 495, 0, 0, 459, 159, 158, 0, + 0, 0, 736, 740, 738, 737, 739, 734, 0, 725, + 186, 2394, 0, 0, 0, 0, 579, 573, 576, 1365, + 812, 0, 1808, 715, 0, 368, 595, 0, 0, 0, + 455, 587, 0, 460, 465, 466, 475, 0, 560, 551, + 0, 552, 561, 562, 0, 569, 1439, 0, 588, 569, + 0, 0, 0, 836, 0, 835, 0, 1098, 1115, 1116, + 0, 0, 1158, 0, 0, 1160, 1155, 0, 0, 754, + 757, 750, 633, 357, 0, 1467, 357, 357, 1215, 0, + 882, 1017, 1018, 1019, 1016, 1015, 625, 0, 1021, 986, + 713, 0, 586, 357, 0, 987, 963, 955, 962, 951, + 954, 956, 0, 958, 959, 953, 950, 952, 2199, 2036, + 2039, 2050, 0, 2124, 2155, 0, 0, 1994, 0, 0, + 0, 2045, 2631, 0, 0, 2086, 2087, 0, 2083, 2084, + 2079, 2080, 2061, 0, 2445, 2066, 0, 0, 0, 1959, + 1957, 1956, 1941, 0, 0, 1939, 1935, 0, 1964, 2088, + 0, 2104, 2101, 2121, 2155, 1660, 1659, 1658, 1657, 2093, + 2243, 2093, 231, 1647, 1794, 0, 1797, 0, 0, 1751, + 0, 0, 1753, 0, 0, 1755, 1757, 0, 0, 0, + 0, 0, 0, 2232, 0, 1721, 0, 1676, 0, 1691, + 0, 1575, 1560, 0, 1561, 1567, 0, 0, 0, 0, + 1603, 1596, 1113, 1121, 0, 0, 0, 511, 0, 526, + 0, 0, 0, 1063, 1072, 1062, 0, 526, 0, 1166, + 790, 789, 792, 787, 791, 1478, 0, 664, 665, 668, + 1258, 0, 1319, 1267, 0, 1592, 297, 467, 304, 0, + 0, 0, 299, 378, 380, 300, 303, 307, 359, 320, + 313, 0, 0, 0, 1254, 0, 1317, 1263, 1290, 1341, + 1237, 1301, 0, 0, 854, 0, 0, 0, 0, 1342, + 1238, 1302, 0, 0, 0, 0, 1592, 0, 0, 0, + 0, 0, 0, 0, 0, 1487, 0, 0, 358, 843, + 842, 359, 392, 1281, 0, 2012, 0, 939, 944, 945, + 943, 0, 398, 406, 409, 0, 0, 1206, 1206, 0, + 0, 476, 490, 0, 571, 530, 0, 482, 0, 0, + 0, 0, 0, 683, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 728, 727, 181, 0, 455, 0, + 682, 0, 840, 0, 0, 0, 587, 457, 0, 0, + 1548, 456, 0, 0, 468, 0, 563, 552, 560, 0, + 0, 584, 0, 1432, 0, 590, 0, 0, 0, 784, + 1154, 0, 1168, 0, 1109, 1079, 1163, 0, 1652, 1801, + 0, 0, 0, 0, 767, 0, 637, 1207, 1465, 872, + 874, 720, 1024, 0, 1028, 1032, 957, 2184, 2126, 1991, + 0, 2187, 2186, 2190, 0, 2056, 0, 2057, 2085, 2063, + 2067, 0, 2064, 2065, 1960, 1958, 1943, 2090, 0, 1676, + 2123, 1630, 1629, 0, 1650, 1799, 0, 0, 1793, 0, + 0, 1823, 0, 0, 0, 1760, 1778, 0, 1756, 1754, + 0, 1767, 0, 1769, 2336, 2604, 2508, 0, 1708, 1710, + 1713, 1715, 1714, 1716, 1712, 2092, 2094, 0, 1687, 2147, + 1803, 0, 0, 0, 1058, 0, 1600, 1025, 0, 357, + 1070, 1166, 532, 2456, 533, 1069, 1071, 1075, 0, 1166, + 0, 571, 660, 0, 0, 276, 0, 302, 312, 361, + 373, 0, 1592, 0, 0, 852, 861, 861, 849, 0, + 0, 868, 1240, 724, 0, 0, 271, 1266, 1260, 0, + 0, 0, 1489, 1490, 0, 0, 0, 0, 0, 1289, + 357, 1262, 947, 0, 429, 436, 410, 414, 1481, 0, + 1481, 0, 411, 415, 1481, 1481, 408, 1801, 425, 1206, + 0, 1203, 1202, 519, 601, 0, 483, 0, 541, 0, + 0, 796, 0, 0, 681, 0, 457, 550, 0, 508, + 499, 500, 501, 502, 504, 503, 505, 506, 507, 497, + 496, 0, 682, 858, 368, 1439, 722, 0, 0, 695, + 0, 682, 0, 1551, 583, 552, 457, 550, 461, 475, + 0, 567, 560, 563, 0, 564, 0, 568, 0, 0, + 0, 587, 1491, 1057, 0, 0, 785, 1167, 1128, 0, + 0, 1157, 1161, 1162, 0, 0, 0, 0, 1210, 761, + 762, 756, 758, 0, 769, 773, 632, 0, 0, 636, + 627, 682, 357, 0, 1992, 0, 0, 2069, 2068, 0, + 2108, 0, 0, 0, 1641, 1792, 1795, 0, 1826, 0, + 0, 0, 0, 1812, 0, 1758, 0, 0, 1768, 0, + 0, 0, 1717, 0, 0, 0, 1726, 0, 1573, 1801, + 0, 1570, 0, 1039, 0, 1040, 1064, 571, 0, 1075, + 1078, 521, 571, 0, 785, 1268, 0, 601, 0, 315, + 0, 284, 1264, 0, 0, 863, 863, 0, 0, 0, + 0, 0, 0, 386, 0, 0, 1483, 0, 1484, 1485, + 1488, 394, 407, 0, 434, 0, 432, 431, 433, 0, + 422, 0, 0, 0, 0, 0, 0, 397, 1201, 1205, + 1204, 0, 484, 0, 486, 0, 527, 528, 529, 0, + 488, 537, 538, 0, 793, 0, 798, 0, 684, 0, + 0, 682, 549, 706, 0, 0, 0, 1433, 0, 0, + 574, 716, 1439, 587, 560, 0, 552, 469, 0, 569, + 563, 567, 565, 566, 0, 1436, 0, 589, 0, 1066, + 783, 0, 1158, 1169, 1164, 1159, 1395, 0, 0, 759, + 764, 763, 1481, 768, 0, 0, 0, 635, 634, 710, + 988, 2183, 2072, 2058, 2070, 2103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1824, 1825, 1810, 0, 0, + 1814, 1765, 1790, 0, 0, 0, 1711, 2095, 2096, 2262, + 1562, 1572, 1059, 0, 0, 536, 0, 1078, 1060, 530, + 785, 525, 512, 1592, 309, 360, 0, 0, 0, 859, + 862, 850, 851, 870, 869, 726, 1592, 0, 382, 381, + 0, 385, 0, 430, 439, 0, 437, 412, 417, 0, + 421, 419, 418, 413, 416, 518, 0, 0, 0, 0, + 0, 539, 0, 540, 570, 0, 797, 0, 0, 0, + 708, 857, 0, 0, 455, 682, 1434, 1549, 563, 552, + 560, 0, 0, 554, 1070, 1070, 442, 567, 569, 1437, + 1438, 0, 0, 368, 0, 1080, 1394, 1393, 1652, 0, + 0, 0, 770, 771, 766, 0, 0, 2591, 2337, 2563, + 0, 2120, 2109, 2120, 2120, 2100, 0, 0, 0, 1796, + 0, 1813, 1816, 0, 0, 0, 1822, 1815, 1817, 0, + 1777, 0, 1788, 1719, 0, 1718, 1801, 357, 0, 785, + 534, 1061, 541, 514, 277, 1592, 853, 0, 272, 0, + 387, 1486, 435, 0, 420, 600, 487, 546, 0, 545, + 0, 543, 542, 794, 799, 0, 682, 847, 1439, 696, + 567, 560, 563, 0, 553, 0, 1072, 1072, 569, 440, + 0, 0, 569, 0, 1377, 1652, 1376, 1378, 1386, 1383, + 1385, 1384, 1382, 1213, 1214, 760, 765, 0, 0, 0, + 2113, 2112, 2111, 2115, 2114, 0, 2107, 2105, 2106, 0, + 0, 0, 0, 1819, 1820, 1821, 1818, 1764, 0, 1720, + 1569, 1041, 0, 516, 785, 285, 860, 0, 438, 544, + 548, 547, 682, 707, 1435, 569, 563, 567, 1070, 555, + 1071, 557, 556, 444, 1066, 1067, 0, 1801, 773, 0, + 1387, 1381, 1628, 1615, 0, 0, 772, 0, 0, 0, + 2117, 0, 2118, 0, 0, 0, 0, 0, 0, 0, + 517, 0, 709, 443, 567, 569, 1072, 368, 1065, 0, + 1048, 0, 1379, 1652, 0, 0, 778, 2110, 2116, 2119, + 1646, 1645, 0, 0, 1649, 0, 1789, 535, 383, 569, + 441, 558, 569, 1068, 0, 1380, 0, 0, 780, 0, + 776, 779, 781, 782, 0, 0, 1811, 445, 1801, 0, + 0, 0, 744, 0, 1676, 0, 1049, 0, 0, 0, + 777, 0, 0, 778, 1211, 1212, 0, 1648, 0, 745 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -5214, -5214, -5214, 3553, -747, -5214, -5214, -945, 306, 2809, + -1771, -5214, -5214, -5214, 1161, -5214, -5214, -5214, -5214, 3517, + -5214, 1506, -2815, -5214, -5214, 127, 3477, -1358, 118, 3110, + 1190, -5214, -981, -5214, -5214, -605, 1, -5214, 3484, 485, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -878, 1626, + -5214, 1705, 996, -611, -3188, -5214, -5214, -1459, -3649, -5214, + 299, -5214, 327, -4632, -1207, -5214, -5214, -5214, 1608, -5214, + -5214, -5214, 1558, 797, -644, -5214, -5214, -5214, -5214, -5214, + -5214, -1051, -5214, -5214, -1309, 6, -639, -2865, -4171, -5214, + -5214, 161, -687, -1444, -5214, 345, -5214, -4479, -5214, -301, + -2812, -5214, -5214, -5214, -658, -1423, 1091, -5214, -727, -1126, + 1430, -4575, -1165, -5214, -533, -5214, -1284, -1063, -1061, -1198, + -4217, -4690, -5214, -5214, -1310, -3664, -4989, -5213, -4644, -4631, + 1104, -5214, -323, 176, -5214, 7, -3571, -3633, 8, 142, + -5214, 10, 12, -5214, 162, -993, -948, -1553, -5214, -907, + -5214, -5214, -5214, -3343, -5214, -5214, -5214, 144, -5214, -5214, + -5214, -5214, 211, -5214, -5214, -5214, -5214, -5214, -5214, -3120, + 1582, 1583, -5214, -4002, -5214, -917, -5214, 355, -3377, 1028, + -5214, -5214, 799, 3548, 188, -5214, -5214, -5214, -5214, -5214, + -5214, -1751, -5214, -5214, -5214, -5214, -293, -618, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, 13, -5214, 764, 131, -5214, + -5214, -901, -5214, -5214, -5214, -5214, -5214, -5214, -1347, -4975, + -1431, -1420, -5214, -3361, -5214, -5214, -5214, -595, -5214, -5214, + -5214, -5214, -5214, -908, -5214, 855, -4021, -5214, -5214, 167, + -5214, -5214, -5214, -5214, -5214, -1164, -532, 2742, -5214, -759, + -957, -5214, -5214, -5214, -528, -5214, -5214, -5214, -5214, -5214, + -503, -1278, 4546, 3938, -1085, 6254, -828, -568, -5214, -5214, + -5214, -2678, -5214, -5214, -4068, -5214, 4542, 2270, 934, 14, + -5214, 18, 93, 3383, -1140, -2985, 141, -716, -5214, -5214, + -5214, -2992, -5214, -5214, -5214, -5214, -3949, 17, -5214, -725, + -5214, -4228, -4999, -4437, -3989, -1308, -5214, -4230, -4286, -4952, + -3936, -5214, 1624, -5214, -5214, -561, -187, 2724, -5214, -1443, + 1960, -1355, -5214, -2498, 200, 1200, 2733, -3192, -123, 2721, + -2921, -5214, -733, 800, -5214, -610, -3675, -5214, -5214, -5214, + -2705, -842, -5214, -5214, 1374, -1114, -5214, -5214, -5214, -5214, + -629, 2703, -194, -5214, -5214, 3930, -5214, -4799, -5214, 3879, + -5214, -5214, -5214, -5214, 2621, 2623, -5214, -5214, -1439, 969, + -5214, -830, -5214, -5214, 1734, 400, -5214, -5214, -5214, -5214, + -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -5214, -1142, + -1321, -5214, -5214, -4432, -5214, -5214, -5214, -5214, -5214, 2163, + -946, -737, 3779, 425, 19, -5179, -5214, -5214, -1168, -5214, + 3136, -5214, -5214, -5214, -5214, -5214, 206, 207, -5214, -5214, + -5214, -5214, -4336, -5214, -5214, -4841, -5214, -5214, 1718, -5214, + -5214, 771, 3, 2855, -5214, -5214, -5214, -23, -5214, -5214, + -1008, 2056, -5214, -2345, -5214, -582, -5214, -5214, -1869, 23, + -4205, -5214, 9, -5214, -5214, -404, -5214, 27, -5214, -5214, + -3883, 11, -5214, -5214, -5214, -5214, -4854, -5214, 21, -1031, + 550, -3220, -5214, 30, 29, -5214, -5214, 5, 245, -41, + -27, -11, 4, 117, 3268, -5214, -5214, -5214, -5214, 3296, + -5214, -7, -847, 4586, 4587, -5214, -866, -156, -5214, 1312, + -712, -2532, 3233, 3236, -5214, 1292, 2064, -2411, -2407, -5214, + -1315, -1006, -844, -5214, -5214, -5214, -5214, -1862, -708, -2539, + -5214, 3244, -5214, -5214, -5214, -2323, -3254, -3168, 1336, -3182, + -3127, -5214, 631, 615, -1269, -353, 49, -752, 3247, -5214, + -5214, 1345, -599, -5214, -5214, -594, -3176, 576, -5214, -4412, + -2743, 1351, -1254, -983, -5214, -1111, -5214, -813, 1611, 3281, + -812, -5214, -5214, -781, 9619, -5214, -5214, -5214, 13763, 14353, + -5214, -5214, 14633, 14818, -5214, -638, 15016, 12483, -773, -1898, + -238, 17376, -1667, -939, 45, -5214, -2902, -2296, -5214, -5214, + -5214, -566, 714, 451, -5214, -4425, -4282, -5214, -5214, -2210, + -5214, -825, -5214, -821, -5214, -5214, -5214, -3063, -4793, -3173, + 2192, -5214, -5214, -5214, -183, -5214, 17218, -3163, -5214, -626, + -1002, -1565, 2667, -3353, -1875, -5214, -5214, -5214, -3035, -5214, + -5214, -5214, -807, 1444, -5214, -5214, 1551, -5214, -5214, -5214, + -943, 1786, -732, -1153, 1458, 3804, -760, 2208, -769, 16689, + -434, 11027, -1271, -5214, 2235, -4099, 7317, 8050, 36, -127, + 1636, -661, 2125, 2636, -5214, -5214, 5068, 7879, -562, -984, + -5214, -6, 12191, 12774, -3565, -5214 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + 0, 57, 58, 59, 60, 61, 62, 1574, 2938, 2793, + 3715, 3716, 63, 64, 1570, 65, 66, 67, 68, 1484, + 69, 1072, 1822, 2953, 70, 2637, 820, 821, 822, 2504, + 2505, 2883, 2506, 2494, 1338, 1768, 1506, 794, 795, 1466, + 1507, 72, 73, 1332, 2485, 74, 75, 76, 1537, 1630, + 1538, 1539, 1478, 1868, 4758, 5509, 3509, 2755, 3764, 3510, + 3511, 4145, 4146, 4226, 5523, 5524, 77, 1646, 1647, 78, + 79, 2920, 3681, 4279, 5122, 5123, 5356, 635, 4781, 4782, + 5343, 5344, 5537, 5685, 5686, 2954, 666, 3759, 4362, 3706, + 4852, 3707, 4853, 3708, 4854, 4135, 4136, 3692, 4310, 4311, + 4794, 4312, 3709, 4813, 5389, 3710, 2656, 5552, 2988, 1940, + 1938, 5039, 5368, 4618, 4619, 5779, 5560, 5561, 5562, 5801, + 4815, 4858, 4859, 5722, 5723, 3762, 4368, 4865, 5181, 5137, + 3407, 81, 3735, 3736, 82, 729, 1844, 3859, 730, 2991, + 667, 731, 2955, 87, 2981, 5554, 2982, 1600, 2807, 4292, + 3839, 88, 1099, 4110, 5206, 5449, 5450, 720, 89, 1830, + 90, 91, 2933, 3699, 92, 2673, 3424, 93, 94, 3443, + 3444, 3445, 95, 4320, 5142, 1540, 3498, 3499, 3500, 3501, + 4166, 96, 1825, 2962, 2963, 97, 98, 99, 3089, 3090, + 100, 2869, 101, 102, 103, 104, 4201, 4720, 4829, 3539, + 3722, 4336, 4827, 105, 3685, 2956, 3009, 3797, 3798, 5204, + 5441, 5442, 5443, 5612, 5835, 5445, 5614, 5744, 5616, 4804, + 5949, 5950, 5426, 4099, 4632, 107, 4805, 4806, 5567, 108, + 2671, 109, 110, 1799, 2926, 2927, 4293, 2998, 3772, 3773, + 4348, 4349, 111, 3623, 112, 4696, 4697, 668, 5575, 5515, + 5671, 113, 114, 4700, 4701, 115, 116, 117, 118, 119, + 721, 1035, 1036, 723, 1154, 1155, 3380, 1116, 120, 2514, + 121, 3661, 122, 1224, 4917, 123, 754, 1170, 1171, 2957, + 125, 763, 3108, 765, 1955, 3841, 3842, 4434, 126, 127, + 3086, 3111, 128, 1471, 2647, 2648, 4613, 2958, 669, 1209, + 2995, 3402, 5283, 5033, 5284, 5733, 5886, 5034, 5297, 3325, + 4049, 130, 670, 1512, 2712, 1122, 1123, 3002, 3777, 2618, + 2619, 1669, 4389, 2621, 3779, 2622, 1446, 2623, 1109, 1110, + 3785, 3786, 3787, 3788, 4385, 4395, 4396, 5198, 5434, 4392, + 2947, 5192, 5193, 131, 1509, 2709, 132, 133, 134, 1553, + 960, 1132, 1133, 135, 682, 683, 136, 5361, 137, 1112, + 138, 5202, 139, 140, 785, 786, 141, 142, 2726, 4148, + 143, 1510, 144, 145, 3533, 3534, 4712, 146, 147, 148, + 1817, 1818, 149, 150, 151, 152, 153, 5826, 5889, 5890, + 5891, 4403, 5738, 154, 1201, 155, 156, 157, 158, 195, + 1001, 1002, 1003, 913, 2959, 5183, 160, 161, 1467, 1468, + 1469, 1470, 2642, 162, 163, 164, 3807, 3808, 165, 166, + 167, 168, 1802, 169, 170, 5334, 171, 172, 1772, 173, + 174, 1009, 1010, 1011, 1012, 1770, 3273, 629, 838, 1363, + 1369, 1412, 1413, 1414, 176, 733, 177, 1204, 1040, 734, + 1163, 179, 735, 2601, 3355, 4064, 4065, 4066, 4069, 5018, + 4591, 736, 3351, 182, 1962, 3095, 3098, 3347, 737, 3360, + 3361, 3362, 4072, 738, 756, 1102, 3013, 739, 1299, 187, + 188, 189, 894, 841, 842, 3278, 5244, 5464, 191, 2478, + 3256, 772, 1418, 882, 883, 884, 903, 2893, 2567, 2568, + 2592, 2593, 1427, 1428, 2580, 2584, 2585, 3338, 3331, 2573, + 4043, 5268, 5269, 5270, 5271, 5272, 5273, 4580, 2588, 2589, + 1430, 1431, 1432, 2597, 192, 2557, 3306, 3307, 3308, 4020, + 4021, 5770, 4035, 4031, 4565, 4995, 3309, 1199, 1438, 4573, + 5772, 3310, 4984, 4985, 5248, 4039, 3317, 4060, 3747, 3748, + 3749, 3311, 5472, 5473, 5767, 5768, 5250, 5251, 2624, 1392, + 868, 1300, 869, 1405, 1301, 1379, 871, 1302, 1303, 1304, + 874, 1305, 1306, 1307, 877, 1371, 1308, 1309, 1388, 1401, + 1402, 1364, 5252, 1311, 1312, 1313, 3313, 1314, 4511, 4957, + 4943, 3183, 3184, 2501, 4507, 3943, 4501, 2473, 3246, 5007, + 5275, 5276, 3983, 4535, 4971, 5239, 5629, 5751, 5752, 5846, + 1315, 1316, 1317, 3243, 2467, 963, 1318, 4295, 2469, 3177, + 3155, 1672, 3156, 1965, 1986, 3127, 3143, 3144, 3220, 3157, + 3165, 3170, 3178, 3207, 1319, 3129, 3130, 3884, 1988, 1320, + 1007, 1675, 1008, 1407, 3202, 1328, 1329, 1322, 1956, 831, + 4991, 1158, 1755, 769, 1323, 1324, 1325, 1326, 1546, 934, + 1125, 1126, 885, 887, 888, 2561, 625, 617, 936, 3502, + 2470, 626, 619, 620, 1760, 2471 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int16 yytable[] = +{ + 618, 71, 1671, 175, 190, 185, 80, 83, 84, 180, + 85, 181, 86, 106, 124, 893, 961, 129, 926, 159, + 1066, 183, 1756, 178, 732, 190, 967, 962, 1599, 972, + 184, 1767, 904, 1190, 1191, 1192, 1545, 623, 833, 1196, + 1433, 1333, 1883, 1138, 674, 881, 2820, 1321, 1651, 2655, + 1384, 614, 1404, 1419, 799, 1421, 1663, 1151, 758, 3348, + 1604, 1210, 1937, 3737, 758, 1761, 1013, 3349, 2713, 1827, + 1375, 1376, 3705, 914, 2721, 2750, 1103, 1983, 1976, 1383, + 1347, 1360, 3789, 3994, 2733, 3996, 2976, 1164, 970, 1451, + 2620, 4347, 1390, 830, 3845, 2722, 4058, 3101, 1598, 4116, + 1359, 2887, 992, 4373, 4620, 1769, 1800, 1629, 4137, 3126, + 1805, 4582, 1541, 3620, 4398, 1809, 764, 1656, 4161, 1105, + 4163, 3373, 3375, 4360, 3864, 1819, 4297, 1034, 4034, 800, + 3588, 3192, 2553, 4988, 4655, 3728, 4017, 1563, 1839, 4071, + 4615, 1136, 1580, 2704, 1140, 1165, 231, 4861, 4872, 1148, + 4680, 4812, 898, 793, 4851, 3259, 2620, 3043, 1812, 3261, + 827, 4047, 5000, 906, 5002, 5372, 1013, 844, 819, 1872, + 3271, 5178, 3340, 1836, 2849, 2850, 5057, 4077, 3343, 907, + 5146, 3967, 4032, 4357, 4037, 5035, 4597, 5411, 2845, 5424, + 618, 1426, 4860, 1508, -2379, 1429, 1513, -2417, 5589, 618, + 937, 5305, -2440, 2704, -2477, 1835, 2684, 618, 1340, 937, + 618, 1372, 1373, 1365, 680, 2876, 5577, 3319, 4948, 1865, + 2704, 1382, 1013, 937, 3664, 5185, 3667, 3668, 5177, -1850, + 633, 3672, 3673, 3674, 1508, 3676, 3677, 3678, 2861, 1508, + 2512, 740, 5326, -2271, 2856, 186, 1480, -2236, 3908, 912, + -1863, 1105, -2271, -2271, 2944, 2734, 4383, -2303, -1888, 3200, + 3314, -2272, 5336, 5337, -1878, -2382, 186, 680, 740, -2647, + -2272, -2272, 680, 985, 1865, 1013, 740, 675, -2647, -2647, + 2724, 3200, 1797, -1883, 1359, 1172, 2032, 3645, 1157, 1092, + -2130, -2235, 680, 1176, 680, -1891, 2639, -2130, 2973, -1891, + 5364, 892, 3110, 3418, 5099, 1865, 2491, 2918, 1542, 680, + 4313, 997, 2724, 1542, 740, 1960, 5043, 2518, 1792, 740, + 3072, 740, 3695, 2843, 4117, 680, 1337, 836, 5100, 5362, + 1865, 2558, 5200, 3438, 680, 1013, 680, 3240, 5514, 3162, + 3849, -1704, 3514, -140, 3241, 5500, -2149, 1219, 2985, -140, + 2520, 4843, 5457, -2149, 1865, 1187, 4873, 3291, 5016, 5491, + 1481, 3851, 5549, 1440, 4802, 1849, 746, 4693, 4822, 746, + 3908, 2837, 901, 2986, 746, 1660, 746, 5174, 5728, 3610, + -2438, 4919, 4920, 4921, 3110, 4923, 4924, 4925, 4926, 4927, + 747, 2661, 4285, 747, 5304, 1865, 1865, 4945, 747, 1865, + 747, 1663, 5032, 5716, 805, 4440, -1705, 2564, 2941, 2699, + 2936, 998, 1194, 5870, 3439, 3853, 1761, 3611, 3292, 1756, + 5447, 2492, 2724, 2571, 5591, 2724, 1554, 3087, 1814, 746, + 2724, 4224, 3696, 4220, 4583, 905, 1455, 746, 2495, 627, + 193, 3862, 5542, 2507, 2507, 2829, 5332, 5543, 2781, 4792, + 1105, 3612, 4083, 747, 5291, 908, 630, 1374, 5511, 2554, + 999, 747, 5299, 4823, 2560, 2798, 962, 1375, 1376, 5333, + 2724, 2032, 2724, 1891, 2830, 3091, 4793, 680, 2974, 4694, + 4225, 1968, 2724, -428, 194, 945, 2587, 5412, 1383, 628, + 2513, 1914, 946, 947, 948, 3854, 4584, 5544, 1555, 2032, + 1195, 1866, 2518, 5366, 2700, 1875, 1390, 5698, 4946, 806, + 4803, 1879, -1704, 3088, 5818, 5550, 962, 1000, 857, 2572, + 1060, 1890, 1456, 1881, 5492, 1893, 1070, 2942, 2556, 1896, + 2518, 1898, 1398, 1957, 1188, 2520, 1918, 1906, 1083, 4344, + 2493, 5400, 909, 1912, 1967, 1798, 1915, 5657, 2919, 3515, + 4824, 1661, 3882, 3904, 681, 2649, 1866, 676, 1977, 4441, + 5548, 1441, 5458, 2520, 3850, 2735, 2987, 2026, 3908, 5871, + 1761, 5017, 924, 5201, 2650, 1457, 1798, -1705, 3073, 2736, + 4117, 2737, 2691, 2891, 4695, 3852, 1921, 1866, 5101, 5262, + 3442, 1394, 2698, 2823, 1482, 2481, 5448, 5875, 4393, 1372, + 1373, 5727, 3660, 2937, 3092, 2862, 4297, 1798, 5365, 2689, + 4314, -1850, 1866, 3419, 2875, 3201, 677, 1097, 1980, 3697, + 1961, -2438, 937, 2555, 1881, 4384, 1382, 2945, 1221, 5874, + 3646, 4715, 2929, 2651, 2863, 5044, 1866, 3972, 190, 1044, + 2857, 937, 2738, 1041, -2130, 1042, 2844, 937, 1961, 2815, + 2975, 837, 2818, 2652, 678, 1043, 679, 1483, 1867, 937, + 2788, 1105, 2885, 2886, 5915, 1798, 1395, 5228, 1552, 3314, + 5504, 2766, 2025, 1458, 634, 937, 1195, 1866, 1866, 2805, + 618, 1866, 2808, 2809, 4821, 881, 5682, 893, 2825, 618, + 937, 3242, 1662, -1850, -2379, -2438, 618, -2417, 937, 618, + -2149, 5939, -2440, 3122, -2477, 4825, 4433, -2438, 3698, 1168, + 2838, 881, 937, 1874, 2662, 5584, 2884, 1798, 5021, 2767, + 1374, 2598, 937, 1370, 4869, 2599, 3288, 1396, 3923, 5810, + 1397, 190, 5820, 2638, -2271, 4625, 1005, 2489, -2236, 4868, + 1006, 1378, 2536, 2537, 1878, 752, 753, 1385, 2534, -1888, + 1434, 1385, -2272, 752, 753, -1878, 4221, -2303, 2028, 3447, + -2647, 4045, 1056, 2479, 3522, -2382, 2466, 910, 1386, 1889, + 1195, 5838, 1386, 2804, -1883, 4826, 2708, 1169, 937, 1174, + 1105, 1178, -2235, 3264, 1185, 5954, 1387, 1182, 1105, 1105, + 1389, 1543, 1544, 1911, 1572, 4780, 1543, 1544, 752, 753, + 2653, 618, 618, 2559, 4258, 2892, 4642, 937, 3093, 5784, + 3061, 1005, 4297, 2606, 2928, 1006, 4685, 1573, 1472, 5699, + 1005, 1198, 5788, 5877, 1006, 3045, -140, -140, 3094, 2708, + 4034, 937, 1783, 618, 1914, 1881, 1779, 1462, 4433, 1463, + 1784, 1398, 1785, 962, 4139, 1635, 2708, 3920, 3921, 3922, + 3923, 3352, 4357, 5496, 5216, 4562, 881, 4073, 3071, 4566, + 4277, 4278, 925, 4465, 3128, -1850, 5655, 906, 4345, 3083, + 4345, 5660, 4446, 2906, 4079, 5797, 4080, 5736, 618, 186, + 4215, 4216, 1198, 907, 4553, 4217, 4555, 5914, 1636, 4605, + 1119, 937, 2649, 4394, 1774, 1865, 5720, 71, 4810, 175, + 190, 185, 80, 83, 84, 180, 85, 181, 86, 106, + 124, 3225, 4338, 129, 2654, 159, 4112, 183, 3340, 178, + 1465, 3551, 4784, 4052, 3247, 3377, 184, 2775, 4001, 2476, + 5587, 5865, 1473, 1416, 2531, 680, -2232, 5708, 1336, 4783, + 5899, 2773, 1344, 680, 4327, 5726, 2461, 2462, 2463, 2464, + 2465, 2466, 1399, 5719, 5839, 1480, 4741, 1366, 4140, 1437, + 951, 952, 953, 954, 955, 956, 957, 958, 959, 5959, + 2651, 3345, 186, 892, 1487, 1400, 2463, 2464, 2465, 2466, + 1229, 2683, 1564, 3908, 1349, 3451, 2864, -2772, -2772, -2772, + 2652, 4272, 5325, 779, 2032, 767, 5405, 5763, 618, 618, + 1757, 3136, 3793, 1640, 680, 3314, 937, 3552, 3314, 1641, + 4399, 618, 5539, 1585, 5541, 3683, 881, 618, 5545, 5546, + 5900, 618, 3559, 618, 4848, 5841, 1582, 881, 2663, 5811, + 5126, 3353, 1385, 4713, 901, 1586, 777, 4074, 1417, 779, + 2560, 4620, 881, 3918, 3919, 3920, 3921, 3922, 3923, 4849, + 5310, 3226, 1057, 1386, 3314, 5633, 3227, 1039, 2520, 5737, + 1637, 3553, -1850, 5127, 1583, 4892, 3248, 3163, 3198, 1481, + -1850, 997, 1374, -1850, 1403, 3181, -1850, 3346, 5798, 2774, + 3452, 780, 1831, 1761, 5819, 618, 1587, 618, 618, 3794, + 4837, 4811, 1091, 3228, 1474, 1858, 1565, 4400, 40, 793, + 1621, 3559, 3, 4, 5901, 5927, 2985, 1229, 1530, 1859, + 3908, 3137, 5764, 4328, 3909, 3910, 3911, 1642, 1900, 2989, + 3554, 1881, 4186, 4053, 2865, 1832, 3505, 780, 937, 4742, + 4585, 2986, 1475, 3378, 44, 1229, 3379, 2653, 3908, 905, + 3604, 186, 3909, 3910, 3911, 1229, 3605, 1005, 3908, 1161, + 4797, 1006, 3909, 3910, 3911, 1092, 618, 5799, 5399, 4516, + 5570, 1901, 4141, 4142, 1638, 1860, 1476, 726, 5626, 4517, + 5842, 998, 190, 4113, 5883, 1588, 48, 1866, 5887, 2664, + 1120, 3506, 3080, 3081, 1394, 5800, 3138, 15, 937, 49, + 5586, 4621, 4143, 4294, 5176, 5598, 5164, 881, 5583, 937, + 1923, 1013, 1925, 4205, 1927, 5569, 1929, 5195, 1931, 1932, + 1933, 4916, 50, 937, 2477, 1935, 3684, 937, 5170, 3024, + 999, 899, 20, 1589, 3555, 1350, 1590, 1222, 4848, 618, + 3354, 5913, 1208, 3036, 1477, 5585, 4187, 3229, 3006, 1093, + 781, 2819, 4850, 1857, 680, 3648, 3042, 3139, 3448, 5902, + 3140, 2654, 4401, 4849, 3606, 5027, 3914, 893, 1566, 1395, + 618, 3007, 5139, 5765, 3372, 1861, 1455, 5510, 5766, 2665, + 4698, 5940, 3027, 3393, 3466, 1592, 5741, 1000, 3507, 1643, + 3034, 782, 783, 3300, 4390, 2657, 781, 900, 618, 618, + 618, 2026, 618, 3912, 4054, 5957, 1567, 1833, 5958, 1351, + 3795, 4586, 771, 5480, 4798, 3020, 5828, 2810, 3438, 4227, + 5627, 1215, 618, 2658, 3796, 3913, 3022, 1644, 5556, 1594, + 1396, 1862, 4402, 1397, 5158, 3523, 3655, 782, 783, 778, + 1568, 3035, 1346, 1902, 3037, 5852, 937, 3041, 3054, 5494, + 2516, 5628, 1595, 3913, 937, 937, 3556, 2951, 3755, 2704, + 3438, 1645, 1456, 3913, 3557, 2667, 3123, 3558, 3125, 3394, + 5758, 3141, 1597, 901, 3132, 2668, 5418, 3999, 618, 997, + 3146, 3147, 3148, 962, 5419, 3153, 804, 4989, 784, 5020, + 5140, 3167, 4699, 3914, 3074, 1094, 3179, 3077, 3078, 3439, + 5573, 2565, 2566, 5828, 2570, 4992, 1881, 1757, 4188, 5581, + 4996, 1834, 3065, 4998, 32, 1457, 5165, 907, 907, 631, + 907, 3914, -677, 186, 618, 801, 3607, 1863, 618, 618, + 726, 3914, 1095, 3008, 2574, 1610, 1569, 1997, 2952, 2820, + 3294, 3439, 5143, 618, 1398, 40, 4189, 1903, 3405, 881, + 15, 828, 4909, 3737, 2811, 3508, 5714, 2812, 5557, 5619, + 5414, 3551, 4913, 5668, 3608, -2772, -2772, -2772, 3918, 3919, + 3920, 3921, 3922, 3923, 2659, 5415, 3440, 2575, 4882, 998, + 4190, 44, 3142, 3711, 5795, 20, 1985, 3260, 3121, 3047, + 2483, 1096, 2787, 1097, 1437, 4062, 839, 1098, 3609, 3063, + 1611, 5828, 3905, 3906, 5816, 5817, 1994, 3925, 3406, 1167, + 2643, 5652, 902, 1458, 3441, 881, 4297, 3085, 3070, 193, + 1530, 2644, 3075, 48, 5413, 193, 3079, 727, 999, 3082, + 3537, 4063, 1601, 5558, 2669, 5669, 49, 895, 2011, 2645, + 5881, 5882, 1612, 5404, 3955, 3956, 3401, 3552, 1761, 1613, + 5420, 3322, 1614, 2023, 1398, 1399, 881, 5903, 3066, 50, + 3102, 2484, 1881, 194, 4476, 1207, 4477, 2751, 3778, 194, + 1602, 40, 2670, 1459, 5658, 3442, 5461, 728, -2255, 5710, + 1756, 1465, -163, 5904, 4795, 1000, 1465, 2577, 1798, 881, + 2751, 3067, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, + 3923, 3553, 2751, 4774, 3068, 3538, -1057, 44, 4778, 4607, + 3633, 1460, -163, 5040, 4801, 35, 1641, 3442, 1361, 4842, + 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 40, + 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3069, + 5941, 3323, 2889, 2890, 3332, 1461, 5462, 2578, 1881, 48, + 5416, 4839, 2620, 937, 3712, 4796, 2620, 5335, 5916, 1465, + 3554, 3483, 49, 1465, 4986, 44, 4628, 32, 618, 618, + 618, 3391, 867, 905, 905, 646, 905, 1462, 1411, 1463, + 1603, 896, 2840, 4294, 5041, 50, 3063, 1173, 1175, 1177, + 5379, 2646, 1179, 1180, 1181, 2658, 1572, 2946, 40, 1422, + 4478, 3023, 1186, 56, 1422, 3033, 2817, 48, 4711, 3405, + 1423, 1615, 3063, 5734, 1442, 962, 962, 3485, 2846, 1573, + 49, 4298, 3484, 5809, 1642, 5610, 1422, 4299, 2752, 1464, + -1675, 5781, 4658, 5742, 44, 648, -1675, 3314, 4298, 4432, + 4300, 3314, 1914, 50, 5380, 1616, 911, 5381, 1350, 1617, + 4629, 2752, 1443, 5382, 3016, 5576, 1493, 2753, 5590, 627, + 912, 56, 4025, 2752, 3555, 5743, 4659, 937, 4301, 4095, + 4302, 5611, 1424, 5332, -1628, 3512, 48, 1424, 3486, 881, + 2753, 5383, 2754, 1618, 4433, 4301, 1444, -1628, 4608, 49, + 881, 920, 2753, -1628, 4609, 4026, 5333, 5013, 5597, 1424, + 3535, 4610, 1757, -1675, 922, 2754, 881, 3314, 3713, 897, + 4568, 4630, 50, 1384, 5873, 4631, 5933, 2754, 1914, 1425, + 4028, 2749, 1351, 4171, 1425, 937, 4303, 2499, -453, 3618, + 56, 962, 646, 937, 1215, 4172, 4611, 3344, 5384, 5258, + -1628, 937, 5885, 4303, 2749, 5147, 4660, 40, 1385, 3464, + -1675, 5385, 935, 4129, 4304, 5059, 2749, 3714, 4612, 881, + -1628, 971, 5064, 5386, 40, 3570, 5965, 1385, 618, 1386, + 2500, 618, 5446, 4218, 881, 993, 1452, 881, 881, 1084, + 5912, 618, 618, 44, 937, 937, 3556, 1387, 1386, 4294, + 5309, 3535, 648, 5148, 3557, 4683, 618, 3558, 937, 618, + 44, -592, 1058, 659, 1059, 660, 1389, -1628, 881, 881, + 3571, 937, 937, 3270, 1453, 1085, -1628, 3279, 3574, 4305, + 1229, 3577, 1572, 3908, 4306, 48, 4130, 3909, 3910, 3911, + 5718, 1813, 1631, 5340, 190, 3569, 5130, 5735, 4030, 5215, + 5943, 4306, 48, 3737, 4963, 1573, 4219, -453, 1454, 618, + 1086, 3811, 618, 618, 3613, 49, 5145, 3693, 2741, 981, + 5717, 3055, 4142, 3056, 943, 3057, 4307, 3058, 4684, 3059, + 1632, 5513, 3594, 3060, 1633, 2751, 5517, 5518, 50, 56, + 190, 1044, 4308, 4307, 2751, 1041, 618, 1042, 618, 982, + 2878, 4671, 2742, 618, 618, 5169, 56, 1043, 1087, 4308, + 618, 618, 618, 3107, 1634, 618, 3639, 618, 5568, 618, + 618, 618, 618, 618, 618, 4458, 618, 35, 618, 618, + 3096, 2032, 618, 1607, 2620, 5156, 4128, 2820, 2879, 3649, + 3650, 3651, 2751, 5435, 2620, 3619, 881, 618, 618, 618, + 4183, 3544, 3545, 746, -1627, 3548, 3951, 2790, 3725, 5287, + 5387, 5289, 2518, 5388, 618, -1628, 1757, -1627, 3314, 3314, + 659, 1608, 660, -1627, 3461, 2791, 5812, 747, 1447, 3316, + 2794, 3741, 3742, 3743, 3744, 5601, 3746, 3106, 4184, 2810, + 4309, 2574, 4421, 3805, 1062, 2520, 1063, 5439, 664, 2751, + 1105, 2877, 2724, 3655, 5822, 1609, 944, 4309, 3614, 4267, + 3449, 3774, 1448, 2725, 5134, 5117, 1449, 5118, 5119, 5120, + -1627, 5440, 4185, 1922, 2620, 5618, 1924, 4073, 1926, 2729, + 1928, 2730, 1930, 1084, 2575, 4621, 1934, 1572, 3913, 987, + -1627, 4628, 3615, 3616, 5905, 2948, 2752, 2741, 4621, 2880, + 1450, -1628, 1575, 2867, 4551, 2752, 1837, 2873, 3524, 1908, + 1573, 2724, 2881, 5662, -1628, 2978, 5580, 5876, 5906, 1085, + -1628, 1648, 2732, 4222, 1652, 2753, 996, 3617, -140, 1838, + 2759, 2742, 1909, 1004, 2753, 186, 740, -1627, 232, 3838, + 1229, 2882, 2731, 3908, 632, 2576, -1627, 3909, 3910, 3911, + 2754, 5547, 724, 2752, 4339, 1585, 3914, 618, 1046, 2754, + 3208, 2751, 3209, 3724, 4964, 4213, 3941, -1628, 4259, 1342, + 802, 1374, 3948, 1403, 1585, 4629, 2811, 1586, 3276, 2812, + 4076, 186, 2753, 4743, 1005, 4760, 3210, -1628, 1006, 2749, + 3163, 3163, 2487, 5452, 2577, 3163, 1586, 618, 2749, -1084, + 1048, 3277, 1087, 2760, 1053, 2751, 4744, 2754, 4761, 740, + 2752, 615, 4472, 4473, 4474, 4475, 1380, 1381, 4479, 4480, + 4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 1587, 1984, + 3314, 56, 3163, 3163, -1628, 3767, 4630, 3314, 5942, 2753, + 4631, 1067, 3314, -1628, 899, 3314, 2749, 1587, 618, 1374, + 4098, 2554, 4050, 1061, 2578, 5332, 4621, -1676, 740, 1061, + 4604, 40, 755, -1676, 2754, 1374, 1080, 2554, 755, 5783, + 1762, 1061, 1117, 1763, 4369, 4526, 4527, 4223, 5333, 3293, + 3295, 3296, 3729, 5651, 29, -1627, 646, 3878, 3211, 3212, + 3213, 3214, 2529, 1089, 4664, 3215, 3216, 44, 1117, 1229, + 3879, 3217, 3908, 2749, 5301, 3880, 3909, 3910, 3911, -1051, + 900, 1562, -591, 4406, 4986, 4876, 1579, 1588, 4407, 1088, + 4407, 4260, 2752, 1005, 1090, -2236, 5471, 1006, 1111, 2507, + -1676, 3211, 3212, 3213, 3214, 3934, 1588, 3936, 3937, 48, + 1920, 1969, 2515, 1763, 1763, 1763, 648, 1127, 3913, 3860, + 3861, 2753, 49, 3, 4, 3915, 3916, 3917, 3918, 3919, + 3920, 3921, 3922, 3923, 3995, 1589, 2752, 3585, 1590, 3586, + 3011, 2751, 3012, 3590, 3803, 50, 2754, -1676, 40, 3809, + 1128, 3810, -1628, 2819, 1589, 1118, 901, 1590, 5863, 2528, + 1107, 3816, 2529, 56, 3817, 2753, 3818, 3819, 650, 1134, + 3821, 915, 2819, 3986, 3824, 3987, 3825, 1145, 5342, 3827, + 927, 3341, 3342, 3206, 44, 2749, 3914, 1592, 927, 1162, + 2754, 927, 618, 618, 618, 618, 618, 618, 618, 618, + 618, 2562, 618, 4366, 1763, 4367, 1592, 3185, 2751, 3051, + 3188, 618, 2529, 618, -1699, -1699, 3062, 3218, 1005, 3063, + 3064, 1408, 1006, 3063, 3431, 3988, 48, 3989, 3219, 2749, + 3428, 1594, 3432, 3433, 3099, 962, 627, 3100, 3275, 49, + 3866, 1914, 3280, 5910, 1152, 2529, 3364, 5602, 740, 2529, + 1594, 618, 4006, 4007, 1595, 618, 1189, 4644, 618, 3272, + 618, 3458, 50, 618, 3459, 1193, 3997, 618, 4118, 3529, + -1703, -1703, 3530, 1595, 1597, 3907, 4936, 3913, 4937, 3314, + 56, -1388, 4078, -1388, 659, 1197, 660, 3935, 1757, 3689, + 618, 3425, 3690, 1597, 4147, 902, 3829, -1084, 3877, 3063, + 1203, 2529, 2752, 3886, 5753, 5754, 2529, 618, 4121, 663, + 1200, 3892, 1813, 4294, 2529, 3893, 618, 618, 2529, 3958, + 5847, 5848, 3894, 4040, 4687, 2529, 5497, 3460, 4621, 3927, + 4670, 2753, 2529, 3970, 5502, 3940, 1205, 4024, 2529, 2555, + 5860, 3312, 937, 4844, 3945, 3914, 3356, 3946, 4004, 881, + 1206, 2529, 4164, 881, 881, 4165, 2754, 5824, 29, 4024, + 937, 4785, 3985, 4786, 937, 1212, 4355, 4169, 937, 2752, + 4170, 1214, 4194, 1778, 4791, 4195, 937, 1208, 4256, 3837, + 5922, 4195, 5923, 4178, 1787, 3915, 3916, 3917, 3918, 3919, + 3920, 3921, 3922, 3923, 937, 2749, 1213, 618, 2753, 1795, + 4378, 1216, 3395, 4379, 3398, 3550, -1702, -1702, 618, 5777, + 881, 618, 4025, 618, 618, 1408, 881, -1616, 3392, 4547, + 4643, 4549, 4661, 2754, 4668, 4979, 5724, 4981, 937, 4652, + 890, 891, 4381, 5427, 4025, 4382, 4412, 4497, 1218, 4413, + 4498, 3314, 1215, 1217, 1105, 4026, 2928, 4508, 937, 937, + 4509, 5920, 40, 4519, 1223, 4593, 2529, 881, 4594, 1225, + 4027, 3314, 2749, 4445, 1345, 4342, 2620, 4026, 4598, 1348, + 4028, 4599, 4084, 4085, 3314, 3446, 1352, 4686, 4603, 1757, + 937, 3379, 4027, 1757, 3636, 5346, 5486, 4627, 44, 4315, + 3063, 4845, 4028, 1354, 3063, 1229, 4029, 4910, 3908, 4567, + 1961, 4570, 3909, 3910, 3911, 1353, 937, 3206, 1757, 5241, + 4933, 5242, 937, 2529, 3960, 1358, 3961, 1362, 4029, 937, + 4286, 4973, 5966, 4993, 2529, 5023, 937, 1367, 3379, 937, + 48, 5347, 1370, 5029, 5036, 937, 5030, 3063, 4101, 5037, + 3962, 3305, 3063, 49, 3915, 3916, 3917, 3918, 3919, 3920, + 3921, 3922, 3923, 1368, 1964, 937, 5348, 1374, 4105, 5171, + 5208, 937, 5172, 4413, 5225, 1378, 50, 5226, 937, 4621, + 1377, 1391, 1198, 1198, 5349, 1393, 1198, 5227, 5350, 2031, + 2529, 937, 2032, 1408, 5825, 1420, 186, 5245, 4030, 5169, + 5246, 1409, 5255, 5261, 937, 1914, 4352, 1435, 1436, 1757, + 5351, 1105, 1439, 5352, 5263, 937, 3584, 4352, 1403, 4151, + 4030, 4153, 4228, 2518, 1445, 1485, 5374, 4199, 5353, 5375, + -2772, 1511, -2273, 618, 618, 618, 1514, 5394, 5428, 618, + 3063, 5429, 3314, 1516, 5469, 5475, 4208, 5470, 1914, 1517, + 1556, 1552, 3211, 3212, 3213, 3214, 2520, 4862, 5478, 3963, + 1557, 4352, 1558, 5724, 4595, 3964, 618, 881, 1569, 4621, + 5489, 915, 1571, 5490, 5532, 1757, 1584, 5533, 1581, 3870, + 927, 3872, 3873, 1606, 1622, 1623, 4994, 927, 4855, 3778, + 927, 5572, 5599, 5622, 2486, 5490, 3946, 5649, 5623, 5637, + 3314, 2529, 5638, 5641, 5642, 5661, 1914, 2529, 3063, 618, + 4503, 1639, 4087, 3913, 4452, 1649, 5354, 1650, 4623, 4624, + 3163, 3163, 3163, 3163, 1653, 3957, 3163, 3163, 3163, 3163, + 3163, 3163, 3163, 3163, 3163, 3163, 1658, 1659, 1773, 3756, + 3867, 881, 1775, 4333, 1198, 881, 5667, 1771, 5673, 3100, + 1786, 3100, 5674, 4500, 5677, 3100, 1780, 2529, 2560, 4246, + 3312, 5678, 1791, 1794, 2529, 4253, 5355, 4621, 5679, 1796, + -2772, 5680, 1801, 5706, 1804, -2772, 5707, 2620, 1806, 5759, + 1816, 3914, 4352, 3163, 3163, 5773, 1815, 5775, 2529, 962, + 2529, 5792, 5814, 5859, 5793, 5815, 5483, 1798, 1820, 1821, + 4326, 1663, 4329, 5884, 5918, 5938, 5490, 5919, 2529, -183, + 5956, 3965, -2772, 5638, 5962, 5979, 1823, 5963, 5963, 1824, + 1826, 1828, 3966, 1840, 1829, 1847, 4558, 1851, 937, 1855, + 212, 1864, 1869, 1870, 1871, 2031, 1873, 1876, 2032, 1877, + 1880, 4316, 1881, 4318, 881, 4436, 937, 1761, 1888, 1892, + 1894, 1895, 1897, 937, 3314, 1899, 1904, 618, 1905, 881, + 618, 1907, 618, 618, 881, 2525, 1910, 1913, 4670, 2518, + 893, 1916, 618, 1917, 1919, 1966, -2772, 618, 1936, 1972, + 1981, 1982, 1974, 2560, 1105, -1854, 1105, 1975, -1861, 1991, + 1989, 4046, 1990, -1851, 1992, 1993, 56, 1995, 1996, 1997, + -1852, 1998, 2520, 618, 618, 618, -1855, 1999, 618, 2000, + 2001, 2003, 2004, 2771, 893, 2005, 618, 618, 618, 618, + 2006, 2007, -1853, 2008, 1757, 2009, 4387, 2010, 2012, 618, + 1757, 2013, 618, 2014, 618, 2015, 3512, 2016, 4681, 2472, + 2017, 2018, 2019, 2476, 3314, 618, 618, 4662, 2474, 618, + 4414, 4444, 4416, 2477, 4418, 2490, -2772, 5056, 2486, 2502, + 2510, 3535, 2532, 2533, 2538, 2540, 2541, 2550, 618, 1105, + 618, 3969, 618, 2547, 2544, 2545, 2548, 2549, 2551, 186, + 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 2556, + 2563, 1423, 618, 1425, 2594, 2596, 3991, 3992, 3993, 2605, + 2607, 2608, 915, 2609, 2610, 2626, 2627, 2628, 927, 2629, + 937, 2554, 927, 893, 927, 2630, -2772, 2631, 5219, 2632, + 2633, -2772, 2634, 2635, 2660, 2641, 2666, 2672, 4469, 4889, + 2686, 2690, 2693, 4639, 2692, 2870, 2694, 2696, 2697, 4710, + 2710, 2714, 3314, 2715, 2716, 618, 2727, 2555, 618, 2728, + 2743, 2746, 2747, 2745, 2748, 4346, -2772, 2756, -2772, 2739, + 618, 2758, 4496, 893, 2749, 618, 2761, 2461, 2462, 2463, + 2464, 2465, 2466, 2757, 2762, 2763, 1850, 2772, 1852, 1853, + 618, 2768, 2778, 2769, 4779, 2779, 2782, 2785, 2786, 2783, + 4766, 2784, 2789, 2792, 618, 2795, 3312, 2796, 2799, 3312, + 2806, 2813, 2816, 1530, 2801, 2831, 2802, 2814, 4538, 2841, + 2833, 2525, 3163, 881, 2821, 2835, 881, 2842, 881, 2822, + 2827, 2858, 2828, 881, 2834, 2839, 2859, 2866, 2888, 2900, + 2836, 2895, 2847, 2902, 2903, 2904, 2901, 937, 937, 2848, + 2916, 2905, 2860, 618, 2871, 3312, 2917, 2912, 2909, 2910, + 2911, 4771, 4429, 2921, 2922, 2913, 2023, 2914, 2915, 2923, + 2924, 2932, 2935, 2930, 937, 2931, 641, 937, 2949, 2960, + 881, 2940, 1603, 2964, 2965, 2977, 2980, 2983, 881, 2946, + 2984, 2968, 2997, 3004, 2993, 3314, 3010, 3014, 3026, 3028, + 3029, 3030, 3031, 3044, 3084, 3109, 3128, 3001, 3076, 3097, + 2023, 3180, -2772, 881, 3186, 2032, 3199, 2950, 3244, 3224, + 3268, 3190, 3245, 3263, 2031, 2967, 3005, 2032, 3269, 3780, + 1398, 3298, 3206, 2870, 900, 3283, 3266, 3284, 3316, 3333, + 3335, 3017, 3282, 3019, 1117, 3021, 3133, 3205, 3979, 1757, + 1757, 1757, 3222, 1488, 3267, 3350, 3281, 3334, 2518, 3357, + 3368, -2771, 3285, 3369, 3286, -2772, 3290, 3299, 4046, 3401, + 3396, 3321, 3336, 937, 3399, 3040, 1117, 3025, 3371, 3314, + 3410, 3403, 881, 4906, 881, 3314, 5191, 3404, 1489, 3415, + 3420, 2520, 937, 3421, 3423, 3426, 3434, 3450, 3455, 1342, + 1346, 3467, 3474, 3200, 2870, 3457, 4011, 3487, 3492, 4016, + 3520, 937, -2772, 5454, 3493, 3519, 3525, 3528, 3518, 3564, + 3536, 3622, 4949, 2461, 2462, 2463, 2464, 2465, 2466, 3647, + 3580, 3543, 3635, 3563, 901, 3643, 3644, 3656, 3663, 3669, + 3675, 3680, 5468, 3691, 3670, 3671, 3702, 3703, 3717, 1490, + 3719, 3721, 3732, 3750, 3723, 3305, 3745, 3751, -2771, 892, + 4525, 1229, 3752, 3739, 3908, 3753, 3754, 3758, 3909, 3910, + 3911, 3761, 3765, 3766, 3769, 881, 3763, 3770, 3775, 3790, + 3792, 3791, 3800, 3314, 3801, 1491, 3802, 3804, 3806, 3820, + 3823, 3822, 3826, 3828, 3831, 3832, 3833, 937, 3844, 3834, + 1914, 3846, 618, 3193, 3835, -2772, 1911, 3110, 618, -2771, + -2772, 3847, 2560, 3836, 1878, 3848, 3781, 881, 3855, 3863, + 3858, 1492, -2771, 3865, 3871, 3891, 4817, 4818, -2771, 3888, + 1195, 3942, -2122, -2771, 3959, 3889, 3968, 3890, 3954, -2771, + 3982, 3904, -2771, 4014, 1757, 881, -2771, -2772, 4042, 3648, + 937, 3977, 937, 3978, 5152, 2529, 4002, 4057, 4059, 3895, + 4958, 1494, 4068, 3896, 3900, 937, 3902, 937, 4081, 3903, + 4023, 3926, 3931, 3932, 3939, -2771, 3953, -2771, 4010, 4038, + 3980, 4075, 3981, 3984, 4003, 4008, 4048, 4009, 618, 4015, + 4055, 5004, 4093, 1496, 4061, -2771, 4088, 4097, 4094, 2031, + 2525, 4086, 2032, 4125, 4102, 4089, -2772, -2772, -2772, 4855, + 4100, 4114, 4115, 4126, 881, 5063, 4127, 4131, 4132, 4133, + 4134, 4138, 4149, 4150, 4152, 4158, 4159, 4168, 4160, 4182, + 4173, 4372, 4198, 2518, 35, 937, 881, 4200, 4202, 3782, + 2519, 4196, -2771, 1961, 4203, -2771, 4204, 4207, 1499, 4209, + 4210, -2771, 4211, 4212, 4214, 4229, 1500, 4230, 881, 4231, + 4232, 4233, 4245, 4234, 2707, 4235, 2520, 4409, 4898, -2772, + 4236, 4900, 4237, 4238, 4248, 4239, 1502, 937, 4250, 4376, + 4252, 2856, 4240, 4241, 4532, 1503, 4242, 4244, 4243, 1504, + 5011, -2772, 4254, 4255, 937, 4915, 5124, 5499, 4261, 4271, + 4264, 4276, 4282, 4334, 4265, 4266, 4268, -2771, 3783, 4284, + 4319, 4324, 4331, 4325, 4335, 4337, 937, 4341, 4351, 937, + 4354, 4364, 4361, 4352, 4370, 4371, 4375, 4391, 4377, 4408, + 4411, 4374, 4944, 4405, 4423, 4424, 618, 3914, 4415, 881, + 4425, 4426, 4427, 1505, 4417, 618, 4428, 3784, 4430, 4435, + 4438, 4439, 4448, 618, 4437, 618, 1198, 4449, 618, 3201, + 4450, 4451, 881, 618, 618, 618, 618, 4453, 4454, 618, + 618, 618, 618, 618, 618, 618, 618, 618, 618, 4455, + 2521, 4456, 618, 618, 618, 2522, 4457, 881, 4461, 1984, + -2771, -2772, 618, 3908, -2121, 4510, 618, 893, 1757, 4521, + 618, 4522, 2461, 2462, 2463, 2464, 2465, 2466, 618, 4533, + 4564, 618, 5008, 618, -2771, 4563, -2771, -2771, 4571, 4577, + 4578, 4552, 2524, 618, 4493, 4579, 618, 618, 4470, 4494, + 4495, 618, 618, 4502, 4524, 4539, 4548, 4572, 618, 4540, + 4541, 4542, 4543, 4587, 4550, 4556, 4590, 5054, 4046, 4559, + 4901, 4902, 4903, 4904, 4905, 4561, 3163, 4576, 4596, -2771, + 4581, -2771, -2771, 4592, 4606, 4614, 4635, 190, 1044, 618, + 4638, 186, 1041, 4046, 1042, 2525, 4636, 618, 4646, 4637, + 4645, 618, 5045, 4648, 1043, 4651, 4657, 4656, 4649, 4676, + 4688, 4673, 4689, 4690, 4716, 4718, 4692, 4704, 4691, 4702, + 4703, 4705, 4706, 4719, 4707, 4731, 4732, 186, 3163, 4740, + 4756, 4757, 4737, 618, 4759, 4663, 4762, 4772, 4799, 4773, + 4775, 4776, 4777, 5069, 5070, 4788, 4809, 4814, 3312, 618, + 5095, 4835, 3312, 5135, 5191, 881, 3915, 3916, 3917, 3918, + 3919, 3920, 3921, 3922, 3923, 4820, 4841, 618, 4834, 4847, + 4864, 4840, 4857, 4828, 4863, 4874, 5853, 5854, 4881, 915, + 4880, 4885, 915, 4907, 4883, 4884, 2527, 4887, 937, 4888, + 4899, 4912, 927, 927, 4893, 4914, 4922, 4929, 4935, 4947, + 4950, -2123, 5022, 4951, 4997, 5006, 4987, 927, 4930, 4941, + 927, 5010, 5009, 4952, 4969, 4983, 5019, 5345, 3312, 5024, + 4990, 5278, 4956, 2820, 5001, 5026, 5032, 5031, 5038, 5042, + 5060, 5061, 5112, 5113, 5062, 5065, 5072, 5073, 5071, 1757, + 5085, 5088, 5092, 5097, 1757, 881, 1757, 5154, 5094, 5098, + 5106, 5107, 5114, 5116, 5503, 5125, 5128, 5132, 5133, 5136, + 927, 5141, 5115, 927, 927, 5121, 5144, 5150, 5151, 1757, + 881, 5153, 5149, 5157, 4046, 5159, 5168, 5163, 5175, 5173, + 5179, 5180, 5184, 5182, 5186, 5187, 2457, 5188, 5197, 5205, + 3063, 5203, 5213, 5212, -2772, -2772, -2772, 2461, 2462, 2463, + 2464, 2465, 2466, 2023, 5224, 5220, 5232, 5230, 937, 5233, + 5231, 937, 5238, 5243, 5247, 5253, 5279, 5282, 5285, 4722, + 5288, 5257, 5260, 5298, 3365, 5300, 5303, 5306, 186, 5526, + 4730, 5528, 5302, 5307, 5308, 5319, 5338, 5320, 5324, 5313, + 5329, 5330, 3381, 5360, 4798, 5331, 3384, 5367, 3305, 5370, + 3387, 5369, 3305, 5373, 5378, 5377, 5397, 5398, 5402, 5407, + 5409, 3163, 5207, 5425, 5430, 5209, 5210, 3427, 5438, 5436, + 5459, 5437, 5444, 3435, 5463, 618, 3411, 5467, 5479, 5481, + 5483, 5485, 5214, 5506, 5484, 5487, 5102, 5103, 5498, 5105, + 3163, 5507, 5508, 5514, 5551, 5559, 5520, 5553, 5563, 1585, + 5564, 937, 937, 5566, 5574, 881, 5579, 5588, 5592, 5594, + 3453, 937, 5593, 5595, 3468, 5605, 5596, 5632, 618, 618, + 5606, 1586, 5607, 5608, 5613, 5615, 5624, 5630, 937, 5631, + 1061, 5644, 5634, 4534, 5617, 5653, 5666, 5670, 5654, 5689, + 5695, 5700, 5702, 5709, 5536, 5705, 5712, 4134, 5713, 5729, + 5730, 881, 5732, 5460, 5731, 4866, 881, 618, 618, 5746, + 5391, 5739, 3503, 5740, 5756, 5745, 5757, 5755, 618, 3312, + 3312, 5769, 1587, 4663, 5762, 5771, 5787, 5789, 962, 5796, + 2663, 5778, 5294, 5698, 5804, 5699, 5805, 5780, 3531, 5823, + 5840, 5311, 5845, 5803, 3540, 5821, 5855, 5690, 5692, 5858, + 5862, 3546, 5869, 5888, 5867, 5898, 5907, 937, 1061, 5924, + 5894, 3560, 5895, 5925, 5926, 5928, 5929, 3565, 5538, 5944, + 5946, 5955, 5960, 5947, 5961, 5968, 5969, 5972, 5976, 1410, + 5973, 5432, 1515, 618, 5316, 3726, 4000, 3578, 4664, 1620, + 2872, 2509, 3517, 3581, 618, 1619, 3595, 4144, 2031, 4679, + 3587, 2032, 4672, 5790, 3634, 2033, 2034, 2035, 3682, 4281, + 5357, 1588, 5683, 3602, 5868, 5408, 4816, 5636, 4669, 5131, + 5390, 4091, 618, 3830, 5782, 618, 3627, 5292, 5864, 5703, + 5701, 5802, 2518, 618, 618, 5879, 881, 1061, 4096, 2519, + 618, 618, 5161, 4867, 5664, 618, 3700, 3701, 4846, 618, + 4677, 4838, 618, 618, 4162, 1605, 4808, 618, 4833, 1589, + 4340, 3163, 1590, 618, 3687, 2520, 5155, 5396, 4891, 4380, + 5609, 5921, 5978, 5970, 5371, 4287, 4875, 2819, 5807, 5345, + 618, 4665, 2939, 5318, 5684, 1518, 5254, 618, 5516, 5672, + 5321, 1519, 618, 5794, 722, 618, 618, 5254, 1037, 2031, + 773, 5493, 2032, 618, 4908, 3730, 5917, 3003, 1958, 4082, + 3374, 1592, 4877, 2999, 618, 3015, 4397, 5603, 5433, 3305, + 3104, 3032, 3105, 4251, 1146, 4708, 5827, 5012, 5014, 3632, + 5456, 3312, 5945, 2518, 2640, 5696, 1521, 1355, 3312, 5281, + -2772, 618, 1106, 3312, 3659, 186, 3312, 4894, 2897, 3320, + 4895, 5015, 5776, 4600, 2482, 1594, 807, 808, 4056, 881, + 5849, 5850, 5025, 4044, 5477, 2530, 2520, 3330, 5774, 5646, + 4018, 2025, 937, 4554, 4569, 5259, 4012, 5466, 1595, 2521, + 4601, 5465, 4013, 5935, 2522, 5761, 5856, 5635, 5455, 5647, + 4504, 2591, 1522, 2590, 5648, 2539, 3249, 881, 1597, 1523, + 4666, 3975, 1524, 4667, 2595, 3169, 2523, 2219, 5495, -2550, + 3883, 3658, 2600, 3973, 937, 3258, 3318, 0, 1406, 881, + 0, 2524, 5058, 0, 0, 5760, 937, 0, 0, 1525, + 0, 0, 5066, 5521, 5522, 4528, 0, 0, 0, 0, + 0, 3856, 618, 0, 0, 0, 0, 0, 0, 0, + 3843, 0, 0, 0, 0, 937, 3869, 0, 0, 5531, + 2269, 3874, 0, 1526, 0, 0, 0, 0, 3857, 0, + 0, 0, 0, 0, 2525, 3843, 0, 0, 0, 0, + -2772, 0, 0, 0, 0, -2772, 881, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5525, + 0, 0, 0, 0, 5659, 0, -2550, 0, 0, 2749, + 0, 0, 618, 1105, 0, 0, 0, 0, 0, 0, + 0, 615, -2772, 0, 0, 0, 1626, 0, 618, 0, + 1528, 0, 0, 1757, 0, 0, 0, 0, 3305, 0, + 1529, 0, 5684, 3305, 0, 0, 3305, 0, 0, 1530, + 0, 0, 937, 5476, 3163, 3163, 0, -2550, 0, 618, + 0, 1531, 0, 5625, 0, 2527, 0, 186, 186, 0, + -2550, 5620, 0, 0, 0, 2525, -2550, 0, 962, 0, + 0, -2550, 5166, 5643, 0, 5645, 0, -2550, 0, 0, + -2550, 0, 0, 0, -2550, 0, 0, 0, 0, 5656, + 0, 0, 1533, 1534, 0, 881, 0, 881, 0, 0, + 3312, 0, 0, 0, 0, 0, 0, 0, 4046, 5317, + 0, 0, 0, -2550, 0, 5315, 0, 0, 0, 0, + 962, 0, 0, 1535, 5530, 0, 0, 0, 937, 915, + 0, 0, 927, -2550, 927, 927, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 618, 0, 0, 618, + 0, 0, 618, 618, 618, 2457, -2772, 0, 0, 5359, + 0, 0, 5953, 2458, 2459, 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 5964, 0, 0, 0, 0, 618, 618, 0, + -2550, 618, 0, -2550, 0, 0, 0, 0, 0, -2550, + 0, 1536, 0, 1105, 0, 0, 0, 0, 0, 5953, + 0, 618, 0, 0, 0, 0, 0, 618, 0, 5953, + 0, 618, 0, 0, 0, 0, 0, 881, 618, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 618, 0, 618, 0, 0, 0, 0, 937, 0, + 937, 0, 0, 0, 618, -2550, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -2772, 4106, 0, 5280, + 0, 0, 3312, 0, 0, 4109, 0, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 0, 0, 4103, 0, 0, 0, + 0, 0, 3312, 0, 0, 881, 937, 0, 0, 0, + 0, 0, 0, 0, 616, 3312, 618, 0, 0, 0, + 771, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 766, 186, 768, 0, 0, 0, 774, 5971, 0, + 0, 0, 788, 796, 766, 0, 803, 0, -2550, 796, + 796, 0, 832, 0, 835, 1757, 0, 0, 5525, 0, + 618, 889, 889, 889, 0, 0, 0, 0, 0, 0, + 0, 0, -2550, 0, -2550, -2550, 0, 0, 0, 4191, + 0, 4193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4174, 0, 0, 5395, 0, + 0, 0, 0, 0, 0, 0, 5861, 0, 0, 0, + 0, -2552, 0, 0, -2550, 0, 0, -2550, -2550, -2550, + 0, 0, 618, 0, 0, 881, 0, 0, 0, 5421, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, + 615, 175, 190, 185, 80, 83, 84, 180, 85, 181, + 86, 106, 124, 0, 618, 129, 0, 159, 618, 183, + 618, 178, 0, 0, 0, 0, 893, 0, 184, 0, + 0, 1105, 4247, 3312, 0, 0, 5423, 0, 0, 0, + 618, 5911, 3305, 618, 0, 0, 0, 0, 0, 0, + 685, 0, 0, -2568, 618, 2674, 0, 0, 0, 0, + 0, 618, 0, 0, 616, 917, 917, 0, -2552, 917, + 0, 0, 0, 928, 4269, 832, 0, 0, 964, 4262, + 0, 928, 0, 0, 928, 0, 0, 832, 0, 917, + 0, 3312, 832, 2675, 0, 0, 917, 0, 832, 0, + 0, 0, 0, 0, 0, 0, 688, 0, 881, 0, + 0, 0, 0, 881, 881, 962, 0, 0, 618, -2552, + 0, 0, 689, 618, 618, 937, 0, 0, 0, 0, + 0, 0, -2552, 0, 0, 0, 0, 0, -2552, 937, + 1021, 0, 0, -2552, 0, 0, 0, 0, 915, -2552, + -2568, 927, -2552, 927, 927, 0, -2552, 0, 0, 618, + 0, 0, 0, 0, 2676, 0, 618, 0, 0, 1757, + 0, 3468, 0, 0, 0, 692, 0, 0, 0, 0, + 0, 0, 0, 0, 693, -2552, 0, 0, 0, 0, + 0, 0, 0, 0, 618, 0, 0, 694, 186, 0, + 0, -2568, 2677, 0, 0, -2552, 0, 5582, 0, 0, + 0, 0, 0, 0, -2568, 4410, 0, 0, 0, 0, + -2568, 0, 0, 881, 881, -2568, 0, 0, 1024, 186, + 0, -2568, 0, 0, -2568, 0, 0, 0, -2568, 0, + 0, 0, 0, 186, 0, 3312, 0, 618, 0, 0, + 0, 0, -2552, 618, 0, -2552, 0, 0, 0, 2870, + 0, -2552, 0, 0, 618, 1757, 0, -2568, 881, 0, + 0, 0, 0, 618, 698, 618, 4431, 618, 0, 0, + 5786, 0, 0, 0, 618, 0, 0, -2568, 0, 0, + 0, 0, 5650, 0, 0, 0, 4462, 0, 0, 0, + 0, 4447, 618, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2023, 0, 2678, 0, 0, -2552, 0, 4471, + 0, 0, 0, 0, 0, 0, 0, 1757, 0, 937, + 0, 0, 0, 0, -2568, 3312, 615, -2568, 0, 615, + 0, 0, 2031, -2568, 4492, 2032, 0, 212, 2679, 0, + 0, 703, 5833, 5834, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 771, 0, 0, 0, 2518, 0, 1028, 0, + 0, 2680, 618, -2772, 0, 615, 0, 707, 0, 0, + 0, 0, 0, 0, 708, 0, 0, 709, 0, -2568, + -2552, 0, 0, 0, 0, 0, 0, 0, 0, 2520, + 0, 0, 0, 0, 0, 0, 710, 0, 0, 0, + 618, 618, 618, 1030, -2552, 0, -2552, -2552, 618, 712, + 0, 0, 1031, 3312, 0, 0, 714, 0, 618, 0, + 0, 0, 0, 0, 2681, 3305, 0, 186, 937, 0, + 0, 2682, 0, 0, 771, 0, 0, 0, 0, 0, + 0, 618, 0, 0, 0, 0, -2552, 0, 0, -2552, + -2552, -2552, 0, 0, 937, 0, 0, 719, 4529, 0, + 0, 0, -2568, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1016, 0, 0, + 0, 0, 0, 832, 0, 917, -2568, 917, -2568, -2568, + 917, 0, 0, 0, 0, 618, 0, 964, 5808, 0, + 0, 0, 1073, -2772, 917, 618, 0, 0, -2772, 0, + 917, 0, 186, 618, 618, 0, 0, 2031, 0, 618, + 2032, 618, 190, 5832, 2033, 2034, 2035, 5829, -2568, 5830, + 4640, -2568, -2568, -2568, 616, 0, 0, 618, 618, 5831, + 0, 2517, 0, 928, 0, -2772, 0, 964, 0, 0, + 928, 2518, 0, 928, 0, 0, 3312, 0, 2519, 0, + 0, 5974, 5975, 0, 5893, 0, 0, 937, 0, 917, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2520, 0, 0, 0, 0, 618, + 0, 0, 0, 0, 0, 618, 0, 0, 2525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, + 5832, 0, 618, 0, 5829, 0, 5830, 0, 0, 0, + 832, 0, 0, 0, 0, 0, 5831, 0, 0, 0, + 0, 0, 618, 0, 0, 1211, 618, 0, 0, 0, + 3312, 618, 0, 0, 0, 0, 3312, 0, 0, 0, + 4745, 0, 0, 4748, 0, 1327, 1327, 0, 832, 796, + 0, 0, 0, 796, 0, 0, 0, 0, 0, 0, + 0, 0, 618, 0, 0, 0, 0, 832, 0, 618, + 0, 832, 0, 0, 0, 0, 0, 1327, 0, -2772, + 0, 0, 0, 618, 0, 0, 0, 0, 2521, 0, + 1757, 0, 0, 2522, 0, 0, 0, 190, 5832, 0, + 0, 0, 5829, 0, 5830, 0, 0, 0, 0, 0, + 0, 0, 4819, 0, 5831, 2523, 2219, 0, 618, 618, + 0, 0, 1327, 618, 0, 0, 0, 1757, 186, 0, + 2524, 0, 618, 618, 3312, 0, 832, 1757, 0, 0, + 0, 0, 0, 4830, 0, 0, 0, 0, 832, 0, + 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, + 2870, 0, 0, 832, 0, 0, 1518, 0, 0, 2269, + 0, 0, 1519, 0, 0, 0, 0, 0, 0, -2772, + 0, 0, 832, 2525, 0, 0, 2526, 917, 917, 0, + 2461, 2462, 2463, 2464, 2465, 2466, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2031, 0, 0, 2032, 0, 0, 1521, 0, 796, + 796, 0, 0, 0, 0, 0, 0, 0, 0, 2031, + 0, 0, 2032, 0, 0, 0, 2033, 2034, 2035, 3843, + 5892, 0, 1327, 1327, 0, 2518, 0, 0, 0, 0, + 0, 0, -2772, 2517, 0, 616, 0, 917, 0, 0, + 0, 928, 0, 2518, 964, 928, 0, 928, 0, 0, + 2519, 0, 917, 1522, 2527, 0, 0, 0, 2520, 0, + 1523, 0, 0, 1524, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 832, 2520, 0, 0, 0, + 0, 0, 917, 917, 0, 0, 0, 0, 0, 0, + 1525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 832, 832, 832, 0, 917, 0, 616, + 0, 616, 616, 0, 0, 0, 0, 0, 186, 0, + 0, 0, 0, 0, 1526, 0, 0, 4967, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 917, 0, 917, 917, 0, + 0, 0, 0, 0, 2457, 0, 0, 0, 0, 0, + 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, + 2466, 0, -2772, 0, 0, 3897, 0, -2772, 3898, 0, + 1327, 0, 0, 0, 0, 2031, 0, 1626, 2032, 0, + 2521, 1528, 2033, 2034, 2035, 2522, 5046, 0, 0, 0, + 0, 1529, 0, 0, 0, 0, 1939, 1939, 615, 2517, + 1530, 832, 615, 766, -2772, 0, 0, 2523, 2219, 2518, + 0, 0, 1531, 0, 0, 0, 2519, 832, 0, 0, + 0, 0, 2524, 1973, 5068, 0, 832, 0, 0, 1979, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2520, 1327, 0, 0, 5084, 0, 0, 0, + 1654, 0, 0, 1533, 1534, 0, 0, 2525, 0, 0, + 0, 2269, -135, 0, 0, 0, 5079, 0, 615, 0, + 0, 0, 0, 0, 1327, 2525, 0, 0, 5089, 0, + 0, 0, 1, 0, 1655, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 3, 4, 0, 0, 0, 0, + 0, 0, 1327, 1327, 1327, 0, 1327, 0, 0, 0, + 0, 0, 5, 5111, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 0, 0, 1327, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 8, 9, 0, 0, + 0, 0, 0, 10, 0, 11, 0, 0, -2772, 0, + 0, 0, 1536, 0, 0, 0, 2521, 12, 0, 13, + 0, 2522, 0, 0, 832, 0, 2527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 15, + 0, 0, 1327, 2523, 2219, 0, 0, 0, 0, 0, + 1488, 916, 918, 0, 16, 921, 17, 0, 2524, 0, + 18, 2031, 0, 0, 2032, 0, 19, 0, 0, 0, + 0, 0, 0, 0, 20, 979, 21, 0, 0, 0, + 0, 0, 989, 22, 0, 1489, 0, 0, 1327, 0, + 0, 0, 1327, 1327, 5196, 2518, 0, 2269, 0, 0, + 23, 0, -2772, 832, 832, 2604, 0, 1327, -2772, 0, + 0, 2525, 0, 0, 2526, 0, 0, 24, 0, 2461, + 2462, 2463, 2464, 2465, 2466, 0, 2457, 0, 2520, 796, + 0, 0, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 0, 0, 1490, 0, 0, 0, + 3843, 0, 0, 0, 0, 0, 0, 25, 26, 0, + 0, 0, 0, 27, 2695, 0, 0, 0, 0, 796, + 0, 0, 917, 0, 0, 28, 0, 0, 0, 615, + 615, 0, 1491, 0, 0, 832, 2723, 0, 0, 0, + 0, 0, 0, 29, 832, 0, 0, 917, 0, 0, + 0, 0, 2527, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4247, 0, 0, 0, 1492, 0, + 0, 0, 0, 0, 964, 0, 832, 0, 0, 796, + 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, -2772, 0, 0, 0, 796, -2772, 0, 832, + 31, 0, 832, 0, 1493, 0, 32, 33, 1494, 34, + 3843, 0, 3843, 0, 35, 0, 0, 0, 0, 0, + 36, 0, 0, 37, 917, 0, 0, 0, 0, 0, + 38, 0, 0, 0, -2772, 0, 39, 40, 0, 1495, + 1496, 832, 0, 0, 41, 0, 0, 0, 42, 0, + 0, 0, 2457, 917, 917, 917, 917, 832, 43, 0, + 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, + 0, 832, 0, 44, 0, 0, 3899, 1497, 0, 0, + 0, 35, 1327, 1327, 1327, 0, 1498, 2525, 0, 0, + 0, 0, 0, 45, 0, 1499, 0, 0, 0, 0, + 0, 0, 0, 1500, 46, 0, 0, 0, 0, 0, + 47, 1501, 0, 0, 0, 48, 0, 0, 2031, 0, + 0, 2032, 0, 1502, 0, 2033, 2034, 2035, 49, 0, + 0, 0, 1503, 0, 0, 0, 1504, 0, 0, 0, + 0, 615, 2517, 0, 0, 0, 0, 0, 615, 0, + 0, 50, 2518, 615, 0, 0, 615, 4999, 0, 2519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, + 0, 0, -135, 0, 0, 0, 0, 0, -2772, 0, + 832, 0, 0, 0, 0, 2520, 0, 0, 0, 0, + 1505, 832, 0, 0, 0, 0, 0, 0, 0, 917, + 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3780, 0, 0, 917, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 832, 0, 0, 1488, 0, 0, 0, + 0, 1047, 0, 1050, 0, 0, 1052, 0, 0, 917, + 917, 917, 917, 0, 0, 0, 0, 0, 832, 0, + 1077, 0, 0, 0, 0, 832, 1081, 0, 0, 0, + 0, 1489, 0, 0, 0, 1964, 0, 0, -2772, 0, + 1964, 1964, 616, 0, 0, 616, 0, 0, 0, 2461, + 2462, 2463, 2464, 2465, 2466, 928, 928, 0, 0, 2521, + 0, 0, 0, 0, 2522, 0, 964, 964, 0, 0, + 928, 0, 0, 928, 0, 0, 0, 0, 0, 0, + 0, 0, 1488, 0, 0, 0, 2523, 2219, 917, 917, + 0, 0, 1490, 0, 0, 917, 0, 832, 0, 0, + 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1939, 0, 0, 1489, 0, 0, + 0, 917, 0, 928, 0, 0, 928, 928, 1491, 832, + 832, 0, 917, 0, 0, 0, 0, 0, 0, 832, + 2269, 0, 0, 0, 0, 0, 832, 0, 0, 5138, + 0, 5604, 766, 766, 2525, 0, 3112, 2526, 0, 3781, + 1327, 0, 1327, 0, 1492, 0, 0, 1327, 1327, 0, + 0, 0, 0, 0, 1327, 1327, 1327, 0, 1490, 1327, + 615, 1327, 964, 1327, 1327, 1327, 1327, 1327, 1327, -135, + 1327, 0, 1327, 1327, 0, 5640, 1327, 0, 0, 0, + 0, 0, 0, 0, 1494, 0, 0, 0, 0, 1, + 0, 1327, 1327, 1327, 1491, 0, 0, 0, 0, 2, + 0, 3, 4, 0, 0, 0, 0, 0, 1327, 0, + 0, 0, 0, 0, 0, 0, 1496, 0, 0, 5, + 0, 0, 0, 0, 0, 2527, 0, 0, 0, 6, + 1492, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 8, 9, 1518, 0, 0, 917, 0, + 10, 1519, 11, 0, 0, 0, 0, 35, 0, 0, + 0, 0, 1498, 0, 12, 0, 13, 1518, 0, 0, + 1494, 1499, 0, 1519, 0, 0, 0, 0, 0, 1500, + 0, 0, 0, 14, 0, 0, 15, 2707, 1624, 0, + 0, 0, 0, 1550, 1551, 0, 1521, 0, 0, 1502, + 0, 16, 1496, 17, 0, 0, 0, 18, 1503, 0, + 0, 0, 1504, 19, 0, 0, 0, 0, 1521, 0, + 0, 20, 615, 21, 0, 2457, 0, 0, 0, 0, + 22, 3783, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 615, 35, 0, 2706, 0, 23, 1498, 3949, + 0, 1327, 1522, 0, 0, 615, 0, 1499, 0, 1523, + 0, 0, 1524, 1776, 24, 1500, 1505, 0, 0, 0, + 3784, 0, 1625, 2707, 1522, 0, 0, 0, 1788, 2031, + 3843, 1523, 2032, 0, 1524, 1502, 2033, 2034, 2035, 1525, + 0, 1327, 0, 0, 1503, 0, 0, 0, 1504, 0, + 0, 0, 0, 2517, 25, 26, 0, 927, 1810, 1811, + 27, 1525, 0, 2518, 0, 0, 0, 0, 0, 0, + 2519, 0, 28, 1526, 0, 0, 0, 0, 0, 757, + 0, 0, 0, 1848, 0, 757, 0, 0, 0, 0, + 29, 0, 1327, 0, 0, 1526, 2520, 0, 0, 0, + 0, 927, 1505, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1885, 1887, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 0, 0, 1626, 0, 0, 0, + 1528, 0, 0, 0, 0, 0, 0, 31, 0, 0, + 1529, 0, 0, 32, 33, 0, 34, 0, 1626, 1530, + 0, 35, 1528, 615, 0, 0, 0, 36, 0, 0, + 37, 1531, 1529, 0, 0, 0, 0, 38, 0, 0, + 0, 1530, 0, 39, 40, 0, 0, 0, 0, 0, + 0, 41, 0, 1531, 0, 42, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 43, 0, 0, 0, 2687, + 2521, 0, 1533, 1534, 0, 2522, 0, 0, 0, 0, + 44, 615, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1627, 0, 0, 1533, 1534, 0, 2523, 2219, 0, + 45, 0, 0, 2688, 0, 0, 0, 0, 0, 0, + 0, 46, 2524, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 48, 0, 0, 1628, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 49, 1327, 0, 0, 0, + 0, 0, 0, 0, 832, 1327, 0, 1327, 0, 0, + 0, 2269, 0, 0, 832, 0, 0, 0, 50, 51, + 52, 53, 54, 55, 0, 2525, 0, 0, 2526, 0, + 0, 1536, 0, 0, 0, 0, 56, 0, 0, -135, + 0, 0, 0, 832, 0, 1327, 0, 0, 917, 1327, + 0, 0, 1327, 1536, 1327, 0, 0, 1327, 0, 0, + 0, 1327, 0, 0, 0, 0, 0, 5565, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3315, 0, 0, 0, 0, 0, + 832, 832, 0, 0, 0, 615, 2031, 0, 0, 2032, + 0, 1327, 0, 2033, 2034, 2035, 0, 0, 0, 0, + 1327, 1327, 0, 0, 0, 0, 2527, 0, 0, 0, + 2517, 0, 0, 0, 832, 0, 0, 0, 0, 0, + 2518, 3358, 0, 3363, 0, 0, 0, 2519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2520, 0, 0, 0, 0, 0, 0, + 0, 0, 766, 0, 766, 0, 0, 0, 0, 0, + 0, 0, 0, 1518, 0, 615, 0, 0, 0, 1519, + 0, 1327, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 0, 1624, 928, 964, 928, 928, 0, + 0, 917, 0, 0, 832, 0, 2457, 0, 2705, 0, + 0, 0, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 1521, 796, 0, 3189, 0, 0, + 0, 0, 0, 2744, 0, 0, 2723, 0, 0, 0, + 0, 0, 0, 0, 3471, 832, 0, 0, 0, 0, + 0, 3482, 0, 0, 0, 0, 0, 0, 0, 0, + 832, 0, 0, 0, 0, 0, 0, 2521, 0, 0, + 0, 0, 2522, 615, 0, 0, 0, 0, 1625, 0, + 1522, 832, 0, 0, 0, 0, 0, 1523, 0, 0, + 1524, 0, 0, 0, 2523, 2219, 0, 0, 0, 0, + 0, 832, 832, 0, 0, 832, 0, 0, 796, 2524, + 2826, 0, 0, 0, 0, 0, 0, 1525, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 917, 0, 0, 917, 0, 0, 0, 0, 2851, + 2852, 2853, 2854, 0, 0, 0, 0, 0, 2269, 0, + 0, 1526, 927, 0, 0, 0, 0, 0, 0, 832, + 832, 0, 2525, 0, 0, 2526, 0, 0, 0, 0, + 0, 0, 0, 0, 3621, 0, 3624, 3626, 0, 0, + 880, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1327, 1327, 1327, + 0, 0, 0, 1327, 1626, 0, 615, 0, 1528, 0, + 0, 917, 0, 0, 927, 927, 0, 0, 1529, 0, + 0, 0, 0, 0, 917, 0, 0, 1530, 0, 0, + 1327, 0, 917, 0, 0, 0, 0, 0, 0, 1531, + 0, 0, 0, 2527, 0, 2723, 0, 0, 0, 0, + 832, 0, 0, 832, 0, 0, 0, 3727, 0, 0, + 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 917, 3738, 0, 2907, 2908, 3592, 0, 0, + 1533, 1534, 0, 3621, 0, 0, 0, 0, 0, 0, + 615, 2925, 0, 917, 0, 3760, 615, 0, 757, 0, + 757, 0, 757, 0, 0, 0, 0, 684, 757, 1183, + 1184, 3593, 0, 5897, 0, 0, 770, 0, 0, 0, + 0, 0, 0, 0, 0, 2969, 2970, 2971, 2972, 0, + 0, 0, 0, 0, 917, 0, 917, 0, 917, 0, + 0, 0, 0, 2457, 0, 0, 0, 0, 0, 0, + 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, + 0, 0, 0, 0, 4283, 0, 0, 0, 0, 0, + 0, 1939, 0, 0, 0, 0, 0, 0, 2031, 1536, + 5932, 2032, 0, 0, 0, 2033, 2034, 2035, 0, 0, + 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, + 0, 0, 2517, 0, 0, 3046, 0, 0, 0, 0, + 0, 3050, 2518, 0, 0, 0, 0, 0, 0, 2519, + 0, 616, 917, 0, 928, 0, 928, 928, 0, 917, + 5932, 0, 0, 0, 5967, 0, 1327, 0, 0, 0, + 0, 1327, 0, 927, 927, 2520, 0, 0, 0, 0, + 0, 2031, 0, 0, 2032, 0, 0, 0, 2033, 2034, + 2035, 0, 0, 0, 0, 0, 0, 1327, 1327, 1327, + 0, 0, 1327, 0, 0, 2517, 0, 0, 0, 0, + 1327, 1327, 1327, 1327, 0, 2518, 0, 0, 0, 0, + 0, 0, 2519, 1327, 0, 0, 1327, 0, 1327, 0, + 757, 0, 0, 0, 0, 0, 0, 0, 0, 1327, + 1327, 0, 0, 1327, 0, 0, 2031, 0, 2520, 2032, + 0, 0, 0, 2033, 2034, 2035, 0, 0, 0, 0, + 964, 0, 1327, 0, 1327, 0, 1327, 0, 0, 0, + 2517, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2518, 0, 0, 0, 0, 0, 1327, 2519, 0, 2521, + 832, 0, 0, 0, 2522, 0, 0, 0, 0, 757, + 0, 0, 0, 0, 1518, 0, 0, 0, 0, 0, + 1519, 832, 0, 2520, 3203, 0, 2523, 2219, 0, 0, + 0, 0, 0, 0, 0, 1520, 0, 0, 0, 0, + 0, 2524, 0, 0, 0, 0, 0, 0, 0, 616, + 0, 0, 3315, 4022, 0, 0, 0, 4022, 4036, 4022, + 0, 0, 0, 0, 1327, 1521, 0, 0, 0, 1327, + 0, 0, 2521, 0, 0, 0, 0, 2522, 0, 2031, + 2269, 0, 2032, 0, 1327, 0, 2033, 2034, 2035, 0, + 0, 0, 0, 0, 2525, 0, 0, 2526, 3315, 2523, + 2219, 0, 4067, 0, 0, 4070, 0, 3363, 0, 0, + 0, 0, 0, 2518, 2524, 0, 0, 0, 0, 0, + 2519, 1522, 0, 0, 0, 0, 0, 0, 1523, 0, + 0, 1524, 0, 0, 0, 0, 0, 2521, 0, 0, + 0, 0, 2522, 0, 0, 0, 2520, 1327, 0, 0, + 0, 0, 0, 2269, 1939, 0, 0, 0, 1525, 0, + 0, 0, 0, 0, 2523, 2219, 0, 2525, 0, 0, + 2526, 0, 0, 0, 0, 0, 0, 917, 917, 2524, + 0, 0, 0, 0, 0, 2527, 0, 0, 0, 0, + 0, 0, 1526, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1518, 0, 0, 0, 0, 0, 1519, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2269, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2525, 0, 0, 2526, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 880, 0, 0, 1521, 0, 1527, 0, 0, 2527, 1528, + 2521, 0, 0, 0, 0, 2522, 0, 0, 0, 1529, + 0, 0, 0, 0, 0, 0, 880, 0, 1530, 0, + 0, 0, 0, 0, 832, 2457, 0, -2772, -2772, 0, + 1531, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 2524, 0, 0, 0, 4463, 0, 0, 1522, + 0, 0, 0, 0, 0, 0, 1523, 0, 0, 1524, + 0, 0, 0, 2527, 0, 0, 0, 0, 1532, 0, + 0, 1533, 1534, 0, 0, 0, 0, 0, 0, 0, + 0, -2772, 757, 0, 0, 0, 1525, 757, 757, 0, + 0, 0, 0, 0, 0, 2525, 0, 0, 2457, 0, + 0, 1038, 1535, 0, 0, 0, 2458, 2459, 2460, 2461, + 2462, 2463, 2464, 2465, 2466, 2535, 0, 0, 0, 4513, + 1526, 0, 0, 0, 2542, 0, 2543, 0, 0, 0, + 2546, 0, 0, 0, 0, 0, 1327, 2552, 0, 0, + 0, 0, 1327, 0, 0, 0, 0, 0, 0, 0, + 0, 1104, 684, 917, 0, 0, 0, 0, 0, 0, + 0, 880, 0, 2457, 0, 0, 0, 0, 0, 0, + 1536, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, + 0, 0, 0, 1527, 4616, 0, 2527, 1528, 0, 0, + 832, 832, 832, 0, 3203, 0, 0, 1529, 0, 0, + 0, 0, 0, 0, 0, 0, 1530, 832, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1531, 0, + 0, 0, 1327, 0, 0, 0, 757, 0, 1488, 0, + 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, + 1939, 832, 832, 0, 0, 1202, 832, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2764, 0, 832, 1533, + 1534, 0, 0, 1489, 0, 0, 0, 0, 0, 0, + 0, 1220, 0, 0, 0, 0, 0, 0, 0, 1330, + 1183, 1184, 1339, 1104, 1341, 0, 2457, 0, 0, 0, + 2765, 0, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 1673, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 917, 0, 0, 0, 0, 0, + 0, 880, 0, 757, 1490, 0, 757, 757, 0, 0, + 0, 0, 880, 0, 0, 832, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 880, 832, 0, + 0, 832, 0, 0, 0, 0, 0, 3436, 1536, 0, + 1491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1327, 0, 0, 0, 0, 0, 0, 0, 1518, 1327, + 0, 0, 0, 0, 1519, 0, 0, 1327, 0, 1327, + 0, 0, 1327, 0, 0, 0, 1492, 1327, 1327, 1327, + 1327, 0, 0, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 0, 0, 0, 1327, 1327, 1327, 0, + 0, 0, 0, 0, 0, 0, 1327, 0, 0, 1521, + 1327, 0, 1493, 0, 1327, 0, 1494, 0, 0, 0, + 0, 0, 1327, 0, 0, 1327, 0, 1327, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1327, 0, 0, + 1327, 1327, 0, 0, 0, 1327, 1327, 1559, 1496, 0, + 4536, 0, 1327, 0, 0, 0, 0, 0, 0, 832, + 832, 832, 1104, 0, 0, 1522, 0, 3572, 0, 0, + 3575, 0, 1523, 0, 0, 1524, 0, 0, 0, 4022, + 4036, 4022, 880, 1327, 4022, 1560, 0, 4560, 0, 35, + 0, 3315, 0, 0, 1498, 3315, 0, 757, 0, 0, + 0, 4575, 1525, 1499, 0, 0, 0, 0, 0, 0, + 0, 1500, 0, 0, 0, 0, 0, 0, 0, 1561, + 0, 0, 0, 0, 0, 0, 0, 1327, 0, 0, + 0, 1502, 0, 0, 0, 0, 1526, 0, 0, 0, + 1503, 3363, 0, 1327, 1504, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3666, 0, 0, + 0, 4622, 1939, 1939, 0, 0, 0, 0, 0, 0, + 3679, 0, 0, 0, 0, 0, 0, 0, 3688, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1505, 1626, + 0, 2723, 4654, 1528, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1529, 0, 0, 0, 0, 3733, 0, + 4675, 0, 1530, 0, 2031, 0, 0, 2032, 0, 0, + 0, 2033, 2034, 2035, 1531, 0, 0, 0, 0, 3757, + 0, 0, 0, 0, 0, 0, 0, 0, 2517, 0, + 1963, 0, 0, 0, 0, 0, 0, 0, 2518, 0, + 0, 0, 0, 0, 0, 2519, 0, 0, 0, 0, + 0, 0, 3463, 1104, 0, 1533, 1534, 0, 0, 0, + 0, 0, 3812, 0, 3814, 0, 0, 0, 0, 2031, + 0, 2520, 2032, 0, 0, 0, 2033, 2034, 2035, 0, + 0, 0, 0, 0, 0, 0, 1535, 0, 0, 3134, + 3135, 0, 0, 2517, 0, 0, 3149, 3150, 0, 0, + 4763, 0, 0, 2518, 2625, 0, 0, 0, 0, 0, + 2519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3191, 0, 0, 0, 0, + 2027, 0, 0, 917, 0, 0, 2520, 0, 0, 2029, + 0, 0, 0, 0, 0, 0, 0, 917, 3868, 1327, + 0, 0, 0, 2480, 1536, 3875, 832, 0, 0, 0, + 0, 0, 4807, 0, 0, 0, 0, 0, 0, 0, + 2625, 0, 1104, 2723, 0, 2497, 2498, 0, 0, 0, + 1104, 1104, 0, 0, 0, 2521, 0, 832, 0, 0, + 2522, 0, 3315, 3738, 2031, 0, 0, 2032, 0, 0, + 3621, 2033, 2034, 2035, 0, 0, 0, 0, 0, 4856, + 0, 880, 2523, 2219, 0, 0, 0, 0, 2517, 832, + 0, 0, 0, 0, 0, 0, 0, 2524, 2518, 0, + 0, 1327, 1327, 0, 0, 2519, 0, 0, 0, 0, + 0, 0, 1327, 0, 880, 0, 0, 0, 0, 0, + 2521, 0, 0, 1939, 832, 2522, 0, 0, 0, 0, + 0, 2520, 0, 0, 0, 0, 2269, 0, 0, 0, + 0, 832, 0, 0, 0, 0, 0, 2523, 2219, 1518, + 2525, 0, 0, 2526, 0, 1519, 0, 0, 0, 0, + 0, 0, 2524, 0, 0, 0, 0, 0, 0, 1488, + 0, 0, 0, 0, 0, 0, 0, 1327, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1327, 0, + 0, 0, 0, 1673, 1673, 1673, 0, 0, 0, 0, + 1521, 2269, 0, 0, 1489, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2525, 1327, 0, 2526, 1327, + 0, 0, 0, 0, 0, 0, 0, 1327, 1327, 0, + 0, 0, 0, 0, 1327, 1327, 0, 0, 0, 1327, + 0, 2527, 0, 1327, 0, 2521, 1327, 1327, 0, 0, + 2522, 1327, 4972, 0, 0, 0, 1522, 1327, 832, 832, + 832, 832, 0, 1523, 0, 1490, 1524, 0, 0, 0, + 0, 0, 2523, 2219, 616, 0, 0, 4022, 0, 0, + 0, 3315, 0, 0, 0, 0, 3315, 2524, 0, 3315, + 616, 0, 3621, 1525, 5003, 0, 0, 1327, 0, 964, + 0, 1491, 0, 2824, 880, 0, 2527, 0, 1327, 0, + 0, 2832, 4067, 0, 0, 880, 0, 3363, 0, 0, + 870, 0, 0, 0, 0, 0, 2269, 1526, 0, 0, + 0, 880, 766, 4107, 4108, 1327, 0, 1492, 0, 0, + 2525, 2457, 0, 2526, 0, 0, 0, 0, 0, 2458, + 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, 0, + 0, 0, 4836, 0, 0, 0, 0, 0, 0, 2723, + 0, 0, 0, 1493, 0, 0, 0, 1494, 0, 0, + 0, 0, 0, 0, 880, 5067, 0, 0, 0, 0, + 1626, 0, 0, 0, 1528, 0, 0, 0, 0, 880, + 0, 0, 880, 880, 1529, 0, 2457, 0, 1576, 1496, + 0, 0, 0, 1530, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 0, 1531, 0, 4931, 0, 0, + 0, 2527, 0, 880, 880, 0, 1327, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1577, 0, 0, 0, + 35, 0, 0, 0, 0, 1498, 0, 0, 0, 0, + 917, 0, 0, 3637, 1499, 0, 1533, 1534, 0, 0, + 0, 0, 1500, 0, 0, 917, 0, 0, 0, 0, + 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1502, 0, 0, 0, 0, 3638, 0, 0, + 0, 1503, 0, 0, 0, 1504, 1327, 0, 0, 0, + 0, 3287, 3289, 0, 0, 0, 0, 3297, 0, 0, + 0, 0, 616, 0, 2961, 0, 0, 0, 2966, 2723, + 0, 2457, 0, 0, 1673, 0, 0, 1673, 1939, 2458, + 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2031, 3339, + 3339, 2032, 4968, 3738, 0, 2033, 2034, 2035, 0, 1505, + 0, 880, 0, 0, 0, 1536, 917, 0, 3760, 4270, + 0, 0, 2517, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2518, 0, 2031, 0, 0, 2032, 0, 2519, + 0, 2033, 2034, 2035, 832, 1518, 0, 0, 0, 0, + 0, 1519, 0, 0, 0, 832, 0, 0, 2517, 757, + 0, 0, 0, 0, 0, 2520, 0, 0, 2518, 0, + 0, 0, 0, 0, 0, 2519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1521, 0, 0, 0, + 1327, 2520, 0, 1327, 0, 0, 1327, 1327, 1327, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1327, 1327, 0, 0, 1327, 0, 0, 0, 0, + 0, 0, 0, 3470, 0, 3145, 0, 0, 0, 0, + 0, 0, 1522, 0, 0, 1327, 0, 0, 0, 1523, + 0, 1327, 1524, 0, 0, 3315, 0, 0, 0, 5003, + 0, 0, 1327, 0, 5277, 0, 0, 0, 0, 2521, + 4422, 0, 0, 0, 2522, 4622, 0, 1327, 0, 1525, + 0, 0, 0, 0, 0, 0, 0, 0, 4622, 964, + 917, 0, 917, 0, 0, 0, 2523, 2219, 0, 0, + 0, 0, 0, 0, 0, 2521, 0, 0, 0, 0, + 2522, 2524, 0, 1526, 757, 0, 0, 0, 0, 0, + 0, 0, 757, 0, 0, 757, 0, 0, 0, 0, + 0, 0, 2523, 2219, 0, 0, 0, 757, 0, 0, + 928, 964, 0, 0, 0, 0, 0, 2524, 0, 0, + 2269, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2525, 0, 0, 2526, 0, 0, + 0, 0, 0, 0, 0, 0, 1626, 0, 0, 0, + 1528, 0, 0, 0, 928, 0, 2269, 0, 0, 0, + 1529, 0, 0, 0, 0, 0, 0, 4807, 0, 1530, + 2525, 0, 832, 2526, 0, 0, 0, 832, 0, 0, + 0, 1531, 0, 0, 0, 0, 2723, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 832, 0, 0, 0, + 4856, 0, 0, 5410, 0, 0, 1518, 0, 0, 0, + 0, 0, 1519, 0, 917, 832, 4622, 0, 0, 4119, + 0, 0, 1533, 1534, 0, 2527, 2031, 0, 0, 2032, + 0, 0, 0, 2033, 2034, 2035, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1327, 0, + 2517, 0, 1327, 4120, 1327, 0, 0, 1521, 0, 0, + 2518, 2527, 0, 0, 0, 0, 0, 2519, 0, 0, + 870, 0, 0, 0, 616, 0, 0, 1327, 0, 0, + 0, 5474, 0, 0, 0, 0, 0, 0, 1327, 0, + 0, 0, 0, 2520, 0, 1327, 870, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1522, 0, 0, 0, 0, 1673, 0, + 1523, 1536, 0, 1524, 0, 2457, 832, 0, 1939, 0, + 0, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 0, 0, 0, 0, 5218, 0, 0, 0, + 1525, 0, 1327, 757, 0, 0, 0, 1327, 1327, 0, + 0, 2457, 917, 917, 917, 917, 0, 0, 0, 2458, + 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, 0, + 0, 0, 5229, 0, 1526, 0, 0, 0, 0, 0, + 0, 0, 0, 1327, 0, 0, 0, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 2521, 0, 0, + 0, 0, 2522, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 832, 0, 0, 3315, 0, + 0, 0, 0, 0, 2523, 2219, 0, 0, 0, 0, + 0, 870, 0, 0, 0, 0, 0, 1626, 0, 2524, + 0, 1528, 0, 832, 3370, 0, 0, 0, 2625, 3376, + 0, 1529, 0, 0, 0, 0, 0, 0, 0, 0, + 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1327, 1531, 0, 0, 0, 0, 1327, 2269, 0, + 0, 1939, 0, 0, 0, 3621, 0, 0, 1327, 4787, + 0, 0, 2525, 0, 0, 2526, 3265, 1327, 0, 1327, + 0, 1327, 5277, 4789, 0, 880, 0, 0, 4622, 0, + 4176, 880, 0, 1533, 1534, 0, 964, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1327, 0, 0, 0, + 0, 3998, 0, 757, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4177, 0, 0, 0, 0, 4005, + 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, + 0, 1939, 1939, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2031, 0, 2527, 2032, 0, 0, 0, 2033, 2034, + 2035, 870, 917, 0, 0, 4051, 4051, 0, 0, 0, + 0, 0, 870, 0, 0, 2517, 5725, 0, 0, 0, + 0, 0, 1536, 0, 0, 2518, 0, 870, 0, 0, + 0, 0, 2519, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1104, 0, 1327, 1327, 1327, 0, 2520, 0, + 0, 0, 1327, 0, 0, 0, 5474, 0, 0, 0, + 0, 0, 1327, 0, 0, 0, 0, 0, 0, 0, + 0, 3363, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2457, 0, 928, 0, 0, 0, 0, + 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, + 917, 1341, 0, 0, 5237, 0, 0, 1939, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1673, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2723, 0, 0, 0, 0, 0, 0, 1327, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4622, + 0, 0, 880, 0, 0, 0, 0, 928, 928, 5836, + 0, 0, 2521, 1327, 0, 1327, 0, 2522, 0, 0, + 0, 0, 870, 0, 1939, 1939, 5851, 0, 0, 0, + 1341, 1327, 1327, 0, 0, 0, 0, 5857, 0, 2523, + 2219, 0, 0, 0, 0, 0, 0, 1341, 0, 0, + 0, 0, 0, 0, 2524, 917, 0, 0, 0, 0, + 0, 0, 0, 0, 2031, 0, 0, 2032, 0, 0, + 0, 2033, 2034, 2035, 0, 0, 2625, 0, 0, 0, + 2625, 0, 0, 5725, 917, 917, 0, 0, 2517, 4622, + 0, 0, 0, 2269, 0, 0, 0, 0, 2518, 0, + 0, 0, 0, 0, 0, 2519, 616, 2525, 0, 0, + 2526, 0, 0, 3630, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1327, 0, 0, 0, + 1327, 2520, 0, 0, 0, 1327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3662, 0, 3662, 0, 3662, 3662, 0, 0, 0, 3662, + 3662, 3662, 0, 3662, 3662, 3662, 1327, 0, 0, 0, + 0, 5930, 5931, 616, 5934, 5474, 0, 0, 0, 880, + 0, 0, 0, 0, 917, 0, 0, 4622, 0, 0, + 0, 0, 0, 0, 880, 0, 5104, 0, 2527, 880, + 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, + 0, 5108, 0, 0, 0, 0, 0, 0, 3740, 0, + 0, 0, 1327, 616, 0, 0, 0, 616, 0, 0, + 0, 4330, 0, 0, 0, 624, 928, 928, 0, 0, + 5977, 673, 624, 3768, 0, 2521, 0, 725, 0, 624, + 2522, 0, 0, 0, 0, 624, 0, 776, 0, 0, + 0, 0, 0, 0, 870, 0, 0, 0, 0, 0, + 0, 0, 2523, 2219, 0, 0, 843, 843, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2524, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2457, 0, + 0, 0, 5167, 0, 0, 0, 2458, 2459, 2460, 2461, + 2462, 2463, 2464, 2465, 2466, 0, 0, 0, 0, 5240, + 0, 0, 0, 0, 0, 0, 2269, 0, 0, 0, + 870, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2525, 0, 0, 2526, 0, 0, 0, 0, 2031, 0, + 0, 2032, 0, 0, 0, 2033, 2034, 2035, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2031, 0, 0, + 2032, 870, 2517, 0, 2033, 2034, 2035, 0, 0, 0, + 0, 0, 2518, 0, 0, 0, 0, 0, 757, 2519, + 0, 2517, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2518, 0, 0, 870, 0, 0, 0, 2519, 0, + 0, 0, 0, 0, 0, 2520, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 919, 0, 0, 0, + 923, 2527, 0, 0, 2520, 0, 0, 0, 966, 0, + 0, 968, 0, 0, 973, 974, 0, 977, 2625, 980, + 0, 3376, 986, 3376, 988, 0, 0, 0, 2625, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5295, 0, 5296, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 880, 0, 0, 0, 0, + 0, 0, 0, 880, 0, 0, 1104, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2521, + 0, 2457, 0, 0, 2522, 0, 0, 0, 2625, 2458, + 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2521, 0, + 0, 0, 5290, 2522, 0, 0, 2523, 2219, 0, 2031, + 0, 0, 2032, 0, 0, 0, 2033, 2034, 2035, 0, + 0, 2524, 0, 0, 0, 2523, 2219, 0, 2031, 0, + 0, 2032, 0, 2517, 0, 2033, 2034, 2035, 0, 0, + 2524, 0, 0, 2518, 870, 0, 0, 0, 0, 0, + 2519, 0, 2517, 0, 0, 870, 0, 880, 0, 880, + 2269, 0, 2518, 0, 0, 0, 0, 0, 0, 2519, + 0, 870, 0, 0, 2525, 0, 2520, 2526, 0, 2269, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5422, 0, 0, 2525, 0, 2520, 2526, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1104, 870, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 757, 870, + 0, 0, 870, 870, 0, 0, 0, 0, 0, 0, + 880, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 757, 0, 2527, 0, 0, 0, 0, + 757, 0, 0, 870, 870, 0, 0, 1673, 0, 0, + 0, 757, 0, 1673, 2527, 0, 0, 0, 0, 0, + 2521, 0, 880, 0, 0, 2522, 0, 0, 0, 0, + 0, 4167, 0, 0, 0, 0, 0, 0, 0, 2521, + 0, 0, 0, 0, 2522, 0, 0, 2523, 2219, 0, + 3376, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2524, 0, 0, 0, 2523, 2219, 0, 5527, + 0, 5529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2524, 0, 0, 0, 4206, 0, 1183, 1184, 0, + 0, 0, 0, 0, 0, 2457, 0, 0, 0, 0, + 0, 2269, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 0, 0, 2457, 2525, 5323, 0, 2526, 880, + 2269, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, + 2466, 870, 0, 0, 2525, 5363, 1015, 2526, 0, 0, + 0, 3376, 0, 0, 0, 0, 0, 1051, 0, 0, + 0, 1055, 0, 4249, 0, 0, 0, 0, 1068, 1069, + 0, 0, 1075, 880, 1078, 1079, 0, 0, 0, 0, + 0, 0, 0, 0, 757, 0, 0, 0, 0, 1101, + 0, 2031, 0, 0, 2032, 0, 0, 0, 2033, 2034, + 2035, 0, 0, 0, 0, 0, 0, 1114, 0, 3662, + 0, 0, 0, 0, 0, 2517, 2527, 0, 0, 0, + 0, 4280, 4280, 0, 0, 2518, 0, 0, 1142, 0, + 1144, 4296, 2519, 0, 0, 2527, 1104, 757, 1104, 0, + 1160, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 880, 0, 0, 0, 2520, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 624, 0, 0, 0, 0, 880, 0, 0, + 0, 0, 0, 0, 0, 4350, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2457, 0, 5711, 0, + 4386, 1104, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 0, 2457, 0, 5675, 0, 0, + 0, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 0, 0, 0, 0, 5697, 843, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2031, 0, 0, + 2032, 0, 2521, 0, 2033, 2034, 2035, 2522, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2517, 0, 0, 0, 0, 0, 0, 0, 2523, + 2219, 2518, 0, 0, 0, 0, 0, 0, 2519, 0, + 0, 0, 0, 0, 2524, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5791, 0, 0, 0, + 0, 0, 0, 0, 2520, 0, 0, 0, 0, 1479, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2625, 0, 0, 2269, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 757, 0, 0, 0, 2525, 0, 757, + 2526, 0, 0, 757, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4514, 0, 0, 0, 0, 0, 0, + 5082, 5083, 0, 0, 0, 5086, 5087, 0, 0, 0, + 0, 0, 0, 1657, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5866, 0, 0, 0, 0, 0, 1777, 0, 0, + 3376, 0, 0, 0, 0, 0, 0, 0, 2521, 0, + 0, 0, 1789, 2522, 1790, 0, 0, 0, 2527, 0, + 5880, 5880, 0, 1793, 0, 3376, 0, 0, 0, 0, + 1803, 0, 0, 0, 0, 2523, 2219, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2524, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1854, 0, 1856, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2269, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2525, 0, 0, 2526, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2457, 0, + 5880, 0, 0, 0, 0, 0, 2458, 2459, 2460, 2461, + 2462, 2463, 2464, 2465, 2466, 0, 0, 0, 0, 5878, + 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, + 624, 0, 624, 0, 624, 0, 624, 624, 624, 2031, + 880, 0, 2032, 624, 0, 0, 2033, 2034, 2035, 0, + 0, 4296, 0, 0, 1959, 0, 0, 0, 0, 0, + 0, 0, 0, 2517, 870, 0, 0, 1971, 870, 870, + 0, 0, 0, 2518, 2527, 0, 4714, 0, 0, 0, + 2519, 0, 0, 0, 4723, 0, 3376, 4724, 0, 4725, + 0, 2625, 0, 0, 0, 0, 0, 0, 0, 0, + 2031, 0, 0, 2032, 0, 0, 2520, 2033, 2034, 2035, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2517, 870, 0, 0, 0, 0, + 0, 870, 0, 0, 2518, 4765, 0, 0, 0, 0, + 0, 2519, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3662, 0, 0, 0, 0, 3662, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2520, 0, 0, + 0, 0, 870, 0, 2457, 0, 0, 0, 0, 0, + 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, + 2466, 0, 0, 0, 0, 5896, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 757, 0, + 2521, 880, 0, 0, 843, 2522, 0, 938, 0, 0, + 0, 0, 0, 0, 0, 0, 938, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2523, 2219, 0, + 938, 0, 0, 0, 4870, 0, 0, 4296, 0, 0, + 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2521, 0, 0, 0, 0, 2522, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2269, 0, 0, 0, 0, 0, 0, 2523, 2219, + 0, 0, 0, 0, 0, 2525, 0, 0, 2526, 0, + 0, 0, 0, 2524, 0, 0, 0, 0, 4918, 4918, + 4918, 4918, 0, 4918, 4918, 4918, 4918, 4918, 0, 0, + 0, 0, 2685, 0, 880, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2269, 0, 879, 0, 0, 0, 0, 0, + 0, 0, 870, 0, 0, 0, 2525, 0, 0, 2526, + 0, 0, 880, 0, 0, 2031, 0, 0, 2032, 0, + 0, 0, 2033, 2034, 2035, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 880, 0, 2527, 0, 0, 2517, + 0, 0, 0, 0, 2776, 2031, 0, 0, 2032, 2518, + 0, 0, 2033, 2034, 2035, 0, 2519, 0, 4980, 0, + 4982, 0, 0, 0, 0, 0, 0, 0, 0, 2517, + 0, 0, 0, 3322, 0, 0, 870, 0, 0, 2518, + 870, 0, 2520, 0, 0, 0, 2519, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2527, 0, 0, + 0, 880, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2457, 0, 0, 0, + 0, 0, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 0, 0, 0, 5936, 0, 0, + 0, 0, 0, 3323, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 870, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 870, 0, 2521, 2457, 0, 870, + 0, 2522, 0, 0, 0, 2458, 2459, 2460, 2461, 2462, + 2463, 2464, 2465, 2466, 0, 0, 0, 0, 5937, 0, + 5194, 0, 880, 2523, 2219, 0, 2521, 0, 0, 0, + 0, 2522, 0, 0, 0, 0, 0, 0, 2524, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2523, 2219, 0, 0, 0, 2898, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2524, 0, + 5109, 5110, 0, 0, 0, 0, 0, 2269, 0, 938, + 0, 0, 0, 3662, 0, 3662, 3662, 3662, 0, 0, + 0, 2525, 0, 2934, 2526, 0, 0, 0, 938, 0, + 0, 0, 5681, 0, 938, 0, 0, 2269, 0, 0, + 0, 0, 0, 0, 0, 0, 938, 0, 0, 0, + 0, 2525, 0, 0, 2526, 0, 0, 0, 0, 0, + 0, 0, 938, 0, 0, 0, 2996, 0, 3000, 0, + 0, 0, 880, 0, 0, 0, 0, 938, 0, 0, + 0, 5162, 0, 2031, 0, 938, 2032, 0, 3018, 0, + 2033, 2034, 2035, 0, 0, 0, 0, 0, 0, 938, + 0, 0, 0, 0, 0, 0, 0, 2517, 0, 938, + 0, 0, 2527, 0, 3038, 0, 3039, 2518, 0, 0, + 5190, 0, 0, 0, 2519, 0, 0, 0, 0, 0, + 0, 3048, 0, 3049, 0, 0, 0, 0, 0, 624, + 3376, 624, 2527, 624, 0, 624, 0, 624, 0, 0, + 2520, 624, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4918, 0, 0, 938, 0, 0, 0, 929, + 939, 0, 0, 0, 0, 0, 0, 929, 870, 939, + 929, 870, 0, 870, 0, 0, 0, 0, 870, 0, + 0, 0, 0, 939, 938, 0, 0, 0, 0, 0, + 0, 0, 3324, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2457, 0, 0, 0, 0, 0, 938, 0, + 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, + 0, 2894, 0, 0, 0, 870, 0, 0, 0, 0, + 3928, 0, 2457, 870, 0, 3929, 0, 0, 0, 0, + 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, + 3376, 0, 0, 0, 2521, 0, 0, 0, 870, 2522, + 0, 0, 0, 0, 0, 0, 0, 0, 938, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2523, 2219, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2524, 0, 0, 0, + 0, 4296, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 870, 0, 870, + 0, 0, 0, 0, 0, 2269, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3662, 0, 0, 2525, + 0, 0, 2526, 0, 879, 5358, 0, 1518, 0, 0, + 0, 0, 0, 1519, 0, 0, 0, 0, 0, 0, + 1585, 0, 0, 880, 0, 0, 0, 1758, 880, 880, + 879, 0, 0, 938, 0, 0, 0, 0, 0, 0, + 0, 0, 1586, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1521, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 870, 0, 0, 5951, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2031, + 3930, 0, 2032, 1587, 0, 0, 2033, 2034, 2035, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5951, 0, 870, 2517, 1522, 0, 0, 0, 0, 0, + 5951, 1523, 0, 2518, 1524, 0, 0, 0, 0, 0, + 2519, 0, 0, 0, 0, 0, 0, 0, 5194, 880, + 870, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1525, 0, 0, 0, 938, 2520, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, + 0, 0, 1588, 880, 0, 1526, 0, 0, 0, 0, + 2457, 0, 0, 0, 0, 0, 0, 0, 2458, 2459, + 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, 0, 870, + 0, 0, 0, 0, 0, 938, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1104, 938, 0, 0, 5540, + 1589, 870, 939, 1590, 0, 0, 0, 0, 0, 0, + 938, 0, 0, 0, 938, 0, 0, 0, 1591, 0, + 0, 939, 1528, 870, 0, 0, 0, 939, 0, 0, + 0, 0, 1529, 0, 0, 0, 0, 0, 0, 939, + 2521, 1530, 0, 0, 0, 2522, 0, 0, 0, 0, + 0, 0, 1592, 1531, 0, 939, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2523, 2219, 929, + 939, 0, 0, 0, 0, 0, 929, 0, 939, 929, + 0, 0, 2524, 0, 0, 0, 0, 0, 0, 0, + 0, 1593, 939, 0, 1533, 1534, 1594, 0, 0, 0, + 0, 0, 939, 0, 870, 879, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 879, 0, 0, 1595, + 0, 2269, 0, 0, 0, 1596, 0, 870, 0, 0, + 0, 879, 0, 938, 0, 2525, 0, 0, 2526, 1597, + 0, 938, 938, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 870, 0, 0, 0, 0, 0, 939, 0, + 0, 0, 4505, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1104, 0, 939, 0, 5687, + 0, 5688, 0, 1536, 1758, 5693, 5694, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2527, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3366, 3367, 0, 0, + 0, 0, 0, 4506, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3382, 3383, 0, 3385, 3386, + 0, 0, 3388, 3389, 0, 0, 0, 0, 0, 0, + 0, 939, 0, 0, 0, 0, 0, 3400, 0, 0, + 0, 0, 0, 0, 3409, 0, 879, 0, 3412, 3413, + 0, 0, 3416, 3417, 0, 0, 0, 0, 0, 3422, + 870, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3437, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3454, 0, 0, 2457, 0, 3456, 0, + 0, 0, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 3462, 0, 0, 0, 0, 0, 0, + 0, 0, 3469, 0, 0, 3473, 0, 3475, 3478, 3480, + 0, 0, 0, 0, 3488, 3491, 0, 0, 0, 0, + 0, 0, 0, 0, 3504, 0, 0, 0, 0, 3513, + 1759, 0, 0, 3516, 0, 0, 939, 0, 0, 0, + 870, 0, 0, 0, 0, 3526, 3527, 929, 0, 0, + 3532, 929, 0, 929, 0, 0, 3541, 3542, 0, 0, + 0, 0, 0, 3547, 872, 870, 3549, 0, 0, 0, + 0, 0, 0, 3561, 3562, 0, 0, 0, 2496, 3566, + 0, 0, 0, 1673, 0, 0, 0, 0, 0, 0, + 938, 3573, 0, 1104, 3576, 0, 0, 0, 0, 3579, + 0, 0, 0, 0, 0, 3582, 3583, 0, 0, 0, + 0, 0, 0, 3589, 0, 0, 3591, 0, 0, 0, + 3598, 3599, 3600, 3601, 0, 3603, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3628, 3629, + 0, 3631, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3640, 3641, 3642, 0, 0, 0, 939, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, + 0, 2031, 0, 0, 2032, 0, 637, 0, 2033, 2034, + 2035, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 870, 0, 0, 0, 938, 2517, 0, 0, 0, 3694, + 0, 638, 0, 0, 0, 2518, 0, 3718, 939, 0, + 0, 0, 2519, 0, 639, 0, 5952, 0, 0, 939, + 0, 0, 2480, 0, 0, 0, 0, 3731, 0, 1758, + -856, 0, 0, 939, 879, 0, 870, 939, 2520, 0, + 0, 870, 0, 0, 0, 0, 0, 0, 640, 0, + 0, 0, 938, 5952, 641, 0, 0, 0, 0, 0, + 938, 0, 0, 5952, 0, 0, 4980, 0, 938, 0, + 0, 0, 642, 0, 0, 879, 0, 3799, 0, 0, + 0, 0, 0, 643, 0, 0, 0, 0, 0, 0, + 0, 0, 644, 0, 0, 0, 3813, 0, 3815, 0, + 0, 0, 0, 0, 0, 645, 0, 0, 879, 0, + 0, 938, 938, 646, 0, 0, 0, 647, 0, 0, + 0, 0, 0, 0, 0, 938, 2031, 5843, 0, 2032, + 0, 0, 0, 2033, 2034, 2035, -1051, 0, 938, 938, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2517, 0, 2521, 3885, 0, 0, 939, 2522, 0, 0, + 2518, 0, 0, 0, 939, 939, 0, 2519, 0, 0, + 0, 870, 0, 648, 0, 0, 0, 0, 0, 2523, + 2219, 0, -592, 0, 0, 0, 0, 0, 0, 3876, + 0, 0, 0, 2520, 2524, 0, 0, 0, 0, 0, + 2031, 0, 0, 2032, 0, 0, 0, 2033, 2034, 2035, + 0, 0, 0, 0, 0, 0, 0, 1759, 0, 0, + 0, 0, 649, 0, 2517, 650, 0, 0, 0, 0, + 0, 0, 0, 2269, 2518, 0, 0, 0, 0, 0, + 0, 2519, 0, 0, 0, 651, 0, 2525, 0, 0, + 2526, 0, 0, 0, 0, 0, 0, 0, 0, 652, + 0, 0, 0, 0, 0, 0, -453, 2520, 0, 0, + 0, 0, 5844, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1758, 0, 0, 653, 0, 0, 0, + 0, 0, 0, 0, 870, 654, 0, 0, 879, 0, + 0, 0, -453, 0, 0, 655, 0, 2521, 0, 879, + 0, 0, 2522, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 656, 879, 0, 0, 0, 0, + 0, 657, 870, 0, 2523, 2219, 0, -453, 2527, 0, + 658, 659, 0, 660, 661, 0, 0, 0, 0, 2524, + 0, 0, 0, 0, 870, 0, 0, 0, 0, 662, + 0, 0, 0, 0, 0, 0, 663, 0, 0, 664, + 0, 0, 665, 0, 0, 0, 0, 0, 879, 0, + 0, 2521, 0, 0, 0, -453, 2522, 0, 2269, 0, + 0, 0, 0, 879, 0, 0, 879, 879, 0, 0, + 0, 0, 2525, 0, 0, 2526, 0, 0, 2523, 2219, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 870, 0, 2524, 0, 0, 0, 879, 879, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2457, 0, + 0, 0, 0, 0, 873, 0, 2458, 2459, 2460, 2461, + 2462, 2463, 2464, 2465, 2466, 0, 0, 0, 0, 0, + 0, 0, 2269, 939, 0, 0, 0, 0, 4092, 0, + 0, 0, 0, 0, 0, 0, 2525, 2031, 0, 2526, + 2032, 0, 0, 0, 2033, 2034, 2035, 0, 4104, 0, + 0, 0, 0, 2527, 872, 0, 0, 3901, 0, 0, + 0, 2517, 0, 0, 3933, 4111, 0, 0, 0, 4111, + 0, 2518, 0, 0, 4122, 4123, 4124, 0, 2519, 0, + 872, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 870, 0, 2520, 0, 0, 0, 0, 0, + 4154, 4155, 4156, 4157, 0, 879, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2527, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 939, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4175, 0, 4179, + 4180, 4181, 0, 2457, 0, 0, 0, 0, 0, 0, + 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, + 0, 0, 1759, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 939, 0, 0, 0, 0, + 0, 0, 0, 939, 0, 0, 0, 0, 0, 0, + 0, 939, 0, 0, 0, 0, 0, 0, 2521, 0, + 0, 0, 870, 2522, 0, 872, 0, 2457, 0, 0, + 0, 0, 0, 0, 0, 2458, 2459, 2460, 2461, 2462, + 2463, 2464, 2465, 2466, 0, 2523, 2219, 0, 0, 0, + 0, 929, 929, 0, 939, 939, 0, 0, 0, 0, + 2524, 0, 4257, 0, 0, 0, 929, 0, 939, 929, + 0, 4263, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 939, 939, 0, 875, 0, 0, 0, 0, 0, + 870, 0, 0, 0, 0, 0, 0, 4273, 4274, 2269, + 0, 0, 4275, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2525, 0, 0, 2526, 0, 0, 929, + 0, 0, 929, 929, 4317, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1758, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4353, 0, 0, + 0, 0, 4359, 0, 0, 872, 0, 0, 4365, 0, + 0, 0, 0, 0, 0, 0, 872, 0, 0, 938, + 0, 0, 0, 0, 2527, 0, 0, 0, 0, 0, + 870, 872, 0, 0, 0, 0, 0, 938, 4404, 0, + 0, 938, 0, 0, 0, 938, 1759, 0, 0, 0, + 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4419, 0, 4420, + 0, 938, 0, 0, 0, 2031, 0, 0, 2032, 0, + 0, 0, 2033, 2034, 2035, 0, 0, 0, 0, 876, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2517, + 0, 0, 0, 0, 0, 938, 0, 0, 4443, 2518, + 0, 0, 0, 0, 0, 0, 2519, 0, 0, 0, + 0, 0, 0, 0, 2457, 938, 938, 0, 0, 0, + 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, + 2466, 0, 2520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 870, 0, 0, 1758, 938, 870, 870, + 1758, 0, 0, 0, 0, 0, 0, 2031, 0, 0, + 2032, 0, 0, 0, 2033, 2034, 2035, 0, 0, 0, + 0, 0, 0, 938, 0, 1758, 872, 0, 0, 938, + 0, 2517, 0, 0, 3944, 0, 938, 0, 0, 0, + 0, 2518, 0, 938, 0, 0, 938, 0, 2519, 0, + 0, 0, 938, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 938, 0, 2520, 0, 0, 3938, 938, 0, + 0, 0, 0, 0, 0, 938, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2521, 0, 938, 0, + 0, 2522, 0, 0, 873, 0, 0, 0, 0, 870, + 0, 938, 0, 0, 0, 0, 1758, 0, 0, 0, + 0, 0, 938, 2523, 2219, 0, 0, 878, 0, 0, + 873, 0, 0, 0, 0, 0, 0, 0, 2524, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 870, 0, 0, 0, 0, 879, 0, + 0, 0, 879, 879, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2269, 0, 0, + 0, 0, 1758, 0, 4626, 0, 0, 4633, 2521, 4634, + 0, 2525, 0, 2522, 2526, 0, 0, 0, 0, 0, + 0, 0, 4641, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4647, 2523, 2219, 0, 4650, 879, + 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, + 2524, 0, 0, 0, 0, 0, 0, 4674, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4678, 0, 0, 0, 0, + 4682, 0, 0, 0, 0, 0, 879, 0, 872, 2269, + 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, + 0, 0, 2527, 2525, 0, 4717, 2526, 0, 0, 4721, + 0, 0, 0, 0, 0, 0, 0, 4726, 4727, 4728, + 4729, 0, 0, 0, 0, 0, 0, 4733, 4734, 4735, + 4736, 0, 0, 0, 0, 0, 4738, 4739, 0, 0, + 0, 0, 4746, 4747, 0, 4749, 4750, 4751, 4752, 4753, + 4754, 4755, 0, 0, 872, 938, 0, 0, 0, 0, + 0, 4764, 0, 0, 0, 4767, 4768, 4769, 4770, 0, + 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, + 938, 0, 0, 0, 0, 0, 0, 0, 0, 4111, + 0, 0, 0, 0, 2527, 872, 0, 0, 0, 0, + 0, 0, 2457, 0, 875, 0, 0, 4790, 1759, 0, + 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 872, 0, + 875, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1758, 0, 0, 0, 873, 0, 1758, 0, 0, + 0, 0, 939, 0, 0, 0, 873, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 939, 873, 4871, 0, 939, 0, 879, 0, 939, 0, + 0, 0, 0, 0, 2457, 0, 939, 0, 0, 0, + 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, + 2466, 0, 0, 0, 939, 4111, 0, 0, 0, 0, + 0, 0, 4896, 0, 4897, 0, 0, 0, 0, 0, + 0, 929, 0, 929, 929, 0, 0, 938, 0, 0, + 0, 0, 0, 0, 4911, 0, 0, 0, 939, 0, + 2031, 0, 0, 2032, 0, 0, 0, 2033, 2034, 2035, + 879, 0, 0, 0, 879, 0, 0, 0, 939, 939, + 0, 0, 0, 0, 2517, 875, 0, 0, 0, 0, + 0, 0, 0, 0, 2518, 0, 0, 0, 0, 876, + 0, 2519, 0, 0, 0, 0, 0, 0, 0, 1759, + 939, 0, 0, 1759, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 876, 0, 2520, 872, 0, + 0, 0, 0, 0, 0, 0, 939, 0, 1759, 872, + 0, 0, 939, 0, 0, 0, 873, 0, 0, 939, + 0, 0, 0, 0, 0, 872, 939, 0, 0, 939, + 0, 0, 0, 0, 0, 939, 0, 0, 0, 0, + 0, 0, 0, 879, 938, 938, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 939, 0, 0, 879, 0, + 0, 939, 0, 879, 0, 0, 0, 0, 939, 0, + 0, 938, 0, 0, 938, 0, 0, 0, 872, 0, + 0, 939, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 872, 939, 0, 872, 872, 0, 1759, + 0, 0, 0, 0, 0, 939, 0, 0, 0, 0, + 0, 2521, 0, 0, 0, 875, 2522, 0, 0, 0, + 0, 0, 0, 5047, 5048, 5049, 875, 872, 872, 5050, + 5051, 5052, 5053, 0, 0, 0, 5055, 0, 2523, 2219, + 876, 875, 0, 0, 0, 0, 1758, 1758, 1758, 0, + 0, 0, 0, 2524, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1759, 0, 878, 0, 0, + 938, 0, 5074, 5075, 5076, 5077, 5078, 0, 5080, 5081, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 938, + 5090, 5091, 2269, 878, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2525, 0, 938, 2526, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5096, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 872, 0, 0, 873, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2031, + 0, 0, 2032, 0, 0, 0, 2033, 2034, 2035, 0, + 0, 0, 0, 0, 938, 0, 875, 2527, 0, 0, + 876, 0, 0, 2517, 0, 0, 4512, 0, 0, 0, + 0, 876, 879, 2518, 0, 879, 0, 879, 939, 0, + 2519, 5160, 879, 0, 873, 0, 876, 0, 0, 4459, + 0, 0, 0, 0, 0, 0, 939, 0, 878, 0, + 0, 1758, 0, 939, 0, 0, 2520, 938, 0, 938, + 929, 0, 929, 929, 0, 0, 0, 0, 0, 0, + 0, 0, 938, 0, 938, 873, 0, 0, 0, 879, + 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, + 0, 0, 0, 0, 0, 0, 5211, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2457, 873, 0, + 0, 0, 879, 0, 0, 2458, 2459, 2460, 2461, 2462, + 2463, 2464, 2465, 2466, 1759, 0, 0, 0, 0, 0, + 1759, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 938, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2521, 0, 0, 0, 0, 2522, 0, 0, 0, 0, + 0, 879, 0, 879, 938, 0, 0, 0, 0, 0, + 0, 876, 0, 0, 0, 0, 0, 2523, 2219, 0, + 0, 938, 0, 0, 0, 0, 0, 624, 878, 0, + 939, 0, 2524, 0, 0, 0, 0, 0, 0, 878, + 0, 0, 0, 938, 0, 0, 938, 0, 0, 0, + 0, 0, 0, 0, 878, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, + 0, 2269, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2525, 0, 0, 2526, 0, + 5312, 0, 0, 0, 879, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5322, + 0, 0, 0, 0, 5327, 5328, 0, 0, 873, 0, + 0, 0, 0, 0, 5339, 1758, 0, 0, 0, 873, + 0, 5341, 0, 0, 875, 0, 879, 0, 0, 0, + 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 939, 939, 0, + 0, 0, 0, 0, 879, 0, 0, 5392, 5393, 0, + 0, 0, 0, 0, 0, 875, 2527, 0, 0, 0, + 5401, 0, 5403, 0, 939, 0, 0, 939, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5417, 873, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 875, 878, + 0, 0, 0, 873, 0, 0, 873, 873, 0, 0, + 0, 0, 4111, 0, 0, 0, 0, 0, 0, 0, + 5451, 0, 0, 879, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 873, 873, 0, + 0, 0, 0, 876, 0, 879, 0, 0, 0, 1759, + 1759, 1759, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2457, 879, 0, 0, + 0, 0, 0, 939, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 0, 938, 0, 0, 0, 5488, + 0, 0, 939, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, + 5505, 939, 0, 0, 0, 0, 0, 0, 0, 0, + 5512, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1758, 0, 0, 0, + 0, 1758, 0, 1758, 0, 0, 0, 0, 879, 0, + 876, 0, 0, 0, 0, 0, 0, 0, 872, 0, + 0, 0, 872, 872, 0, 873, 1758, 0, 0, 0, + 0, 879, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 876, 0, 5571, 0, 685, 875, 0, + 0, 0, 686, 0, 0, 0, 879, 939, 0, 875, + 0, 0, 0, 0, 0, 938, 0, 0, 938, 0, + 0, 0, 0, 0, 0, 875, 0, 0, 0, 872, + 0, 0, 0, 0, 0, 872, 0, 0, 0, 2031, + 687, 0, 2032, 0, 0, 0, 2033, 2034, 2035, 0, + 0, 878, 0, 688, 1759, 0, 0, 0, 0, 0, + 939, 0, 939, 2517, 0, 4111, 0, 0, 0, 689, + 0, 0, 0, 2518, 0, 939, 872, 939, 875, 0, + 2519, 0, 0, 0, 0, 0, 0, 690, 0, 0, + 0, 0, 0, 875, 0, 0, 875, 875, 0, 0, + 0, 0, 0, 0, 0, 0, 2520, 0, 938, 938, + 0, 691, 0, 0, 0, 0, 0, 878, 938, 0, + 0, 0, 692, 5663, 0, 0, 0, 875, 875, 0, + 0, 693, 0, 0, 0, 938, 0, 5676, 0, 0, + 0, 0, 0, 0, 694, 939, 0, 0, 0, 695, + 0, 0, 0, 0, 879, 0, 696, 0, 878, 0, + 0, 0, 0, 0, 0, 2031, 0, 0, 2032, 0, + 0, 0, 2033, 2034, 2035, 697, 0, 0, 0, 0, + 5704, 0, 0, 876, 0, 0, 0, 939, 0, 2517, + 0, 878, 0, 0, 876, 0, 5715, 0, 0, 2518, + 0, 4932, 0, 0, 939, 0, 2519, 0, 0, 0, + 876, 0, 0, 0, 938, 0, 0, 0, 0, 0, + 2521, 698, 0, 0, 0, 2522, 939, 0, 0, 939, + 0, 0, 2520, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 879, 0, 0, 2523, 2219, 0, + 0, 0, 0, 0, 0, 875, 0, 0, 0, 0, + 0, 699, 2524, 876, 0, 0, 0, 0, 0, 879, + 0, 0, 0, 0, 700, 0, 872, 0, 876, 0, + 0, 876, 876, 5785, 701, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 702, 0, 0, 703, 0, + 0, 2269, 0, 0, 0, 0, 0, 0, 1759, 0, + 0, 0, 876, 876, 0, 2525, 0, 0, 2526, 0, + 0, 0, 0, 0, 0, 704, 5806, 4938, 705, 0, + 0, 0, 706, 0, 707, 0, 0, 0, 0, 0, + 0, 708, 0, 0, 709, 0, 2521, 0, 0, 0, + 872, 2522, 0, 0, 872, 0, 0, 0, 0, 0, + 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, + 711, 0, 0, 2523, 2219, 0, 712, 0, 0, 713, + 0, 878, 0, 714, 0, 0, 0, 0, 2524, 0, + 0, 715, 878, 716, 0, 0, 0, 0, 717, 0, + 0, 0, 0, 0, 879, 0, 2527, 0, 878, 0, + 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5872, 0, 719, 0, 0, 2269, 0, 938, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 876, 2525, 0, 0, 2526, 0, 0, 0, 0, 0, + 879, 0, 0, 872, 0, 879, 0, 0, 0, 0, + 0, 878, 0, 0, 0, 0, 0, 0, 872, 0, + 0, 938, 0, 872, 0, 0, 878, 0, 939, 878, + 878, 0, 0, 938, 0, 0, 942, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 976, 0, + 0, 0, 0, 0, 0, 0, 2457, 0, 0, 995, + 878, 878, 938, 0, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, 0, 0, 0, 0, 0, 0, 1759, + 0, 0, 2527, 0, 1759, 0, 1759, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 873, 1759, + 0, 0, 873, 873, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, + 1758, 0, 0, 0, 0, 0, 0, 0, 939, 0, + 0, 939, 0, 0, 0, 0, 0, 0, 0, 938, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 873, + 0, 0, 0, 0, 0, 873, 0, 0, 0, 0, + 0, 0, 2457, 0, 0, 0, 0, 0, 878, 0, + 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 873, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 939, 939, 0, 0, 938, 0, 0, 0, 0, + 0, 939, 0, 0, 2031, 0, 0, 2032, 879, 0, + 0, 2033, 2034, 2035, 0, 0, 0, 0, 939, 0, + 0, 0, 872, 0, 0, 872, 0, 872, 2517, 0, + 0, 0, 872, 0, 0, 0, 0, 0, 2518, 0, + 0, 0, 0, 0, 0, 2519, 879, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, + 0, 2520, 0, 0, 0, 0, 0, 0, 0, 872, + 0, 0, 0, 0, 0, 0, 0, 872, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 939, 0, 0, + 0, 0, 0, 0, 0, 938, 0, 938, 0, 0, + 0, 0, 872, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2031, 0, 0, 2032, 0, 0, + 0, 2033, 2034, 2035, 0, 879, 0, 0, 875, 0, + 0, 0, 875, 875, 0, 0, 0, 0, 2517, 0, + 0, 0, 0, 938, 0, 0, 0, 0, 2518, 0, + 0, 4939, 0, 0, 0, 2519, 873, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 872, 0, 872, 0, 2521, 0, 0, 0, 0, + 2522, 2520, 0, 0, 0, 0, 0, 0, 0, 875, + 0, 0, 1758, 0, 0, 875, 0, 0, 1014, 0, + 0, 0, 2523, 2219, 1045, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2524, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 873, 0, 0, 0, 873, 0, 875, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, + 4940, 0, 0, 0, 0, 0, 2269, 0, 0, 0, + 0, 0, 0, 0, 872, 0, 0, 0, 0, 0, + 2525, 0, 0, 2526, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2521, 0, 0, 0, 0, + 2522, 0, 939, 0, 0, 0, 872, 0, 0, 0, + 0, 0, 0, 876, 0, 0, 0, 876, 876, 0, + 0, 0, 2523, 2219, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 873, 872, 0, 0, 2524, 0, 0, + 0, 0, 0, 0, 939, 0, 0, 0, 873, 0, + 0, 0, 0, 873, 0, 0, 939, 0, 0, 0, + 0, 2527, 0, 0, 0, 0, 879, 0, 0, 0, + 0, 0, 0, 0, 876, 0, 2269, 0, 0, 1334, + 876, 0, 0, 0, 0, 939, 0, 0, 0, 0, + 2525, 0, 0, 2526, 0, 0, 0, 0, 1357, 0, + 0, 0, 938, 872, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 938, 0, 0, 0, + 0, 876, 0, 0, 0, 872, 0, 0, 0, 0, + 0, 0, 0, 0, 879, 0, 875, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1758, 872, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2457, 0, 1759, 0, 0, 0, 1415, 0, 2458, + 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, 0, + 0, 2527, 939, 0, 0, 0, 0, 0, 2031, 0, + 0, 2032, 0, 0, 0, 2033, 2034, 2035, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 875, 878, 2517, 1549, 875, 878, 878, 0, 0, 0, + 0, 0, 2518, 0, 0, 0, 0, 0, 872, 2519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1758, 0, 0, 0, 0, 0, 0, 0, + 0, 872, 0, 0, 879, 2520, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 939, 0, + 0, 0, 878, 0, 0, 0, 872, 0, 878, 0, + 0, 2457, 0, 0, 0, 0, 0, 0, 0, 2458, + 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 0, 0, + 0, 0, 873, 0, 1758, 873, 938, 873, 0, 0, + 0, 0, 873, 875, 0, 0, 0, 0, 0, 878, + 0, 876, 0, 0, 0, 0, 1808, 0, 875, 0, + 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5453, 0, 0, 0, 0, + 0, 0, 0, 0, 1842, 1845, 1846, 0, 0, 873, + 0, 0, 0, 0, 0, 0, 0, 873, 0, 2521, + 0, 0, 0, 0, 2522, 0, 0, 879, 939, 0, + 939, 0, 879, 879, 0, 0, 0, 0, 0, 0, + 0, 0, 873, 0, 0, 876, 2523, 2219, 0, 876, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2524, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 872, 938, 939, 0, 0, 0, + 0, 0, 0, 0, 685, 0, 929, 0, 0, 1017, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2269, 938, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 873, 1334, 873, 2525, 0, 0, 2526, 0, 0, + 0, 0, 0, 0, 0, 1759, 0, 1018, 1970, 0, + 929, 0, 0, 0, 0, 0, 0, 1334, 0, 0, + 688, 1019, 0, 879, 0, 0, 0, 0, 876, 0, + 0, 0, 1020, 0, 0, 0, 689, 0, 0, 0, + 0, 0, 0, 876, 872, 0, 0, 0, 876, 878, + 0, 0, 0, 0, 1021, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 879, 0, 872, + 0, 0, 0, 0, 0, 0, 0, 0, 1022, 0, + 0, 0, 0, 0, 873, 2527, 0, 0, 0, 692, + 0, 0, 0, 0, 938, 0, 0, 0, 693, 0, + 685, 0, 0, 0, 0, 3113, 0, 0, 0, 0, + 0, 694, 875, 0, 0, 875, 1023, 875, 0, 0, + 0, 0, 875, 878, 0, 0, 873, 878, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1024, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 873, 2511, 688, 3114, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1025, 0, 875, + 0, 0, 689, 0, 0, 0, 0, 875, 0, 0, + 0, 0, 0, 0, 0, 2457, 0, 0, 698, 0, + 1021, 0, 0, 2458, 2459, 2460, 2461, 2462, 2463, 2464, + 2465, 2466, 875, 0, 872, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3115, 939, 0, 0, 0, 0, + 0, 0, 0, 873, 0, 692, 878, 1758, 1026, 939, + 0, 0, 0, 0, 693, 2602, 0, 0, 0, 0, + 0, 878, 0, 0, 0, 873, 878, 694, 0, 0, + 872, 701, 3116, 0, 0, 872, 0, 0, 0, 1759, + 0, 212, 1027, 0, 1758, 703, 0, 873, 0, 0, + 0, 875, 0, 875, 1758, 0, 0, 0, 1024, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1028, 1310, 1310, 1029, 0, 876, 0, 706, + 876, 707, 876, 3117, 0, 0, 0, 876, 708, 0, + 0, 709, 0, 0, 0, 0, 2717, 0, 0, 0, + 0, 0, 0, 0, 698, 2740, 0, 0, 0, 0, + 710, 0, 0, 0, 0, 0, 0, 1030, 0, 0, + 0, 0, 0, 712, 0, 0, 1031, 0, 873, 0, + 714, 0, 0, 0, 876, 1759, 0, 2777, 1032, 0, + 716, 0, 876, 0, 875, 1033, 0, 0, 0, 0, + 1310, 873, 0, 0, 0, 0, 0, 0, 0, 0, + 2800, 0, 0, 2803, 0, 872, 0, 876, 0, 0, + 0, 719, 0, 0, 0, 0, 873, 212, 3118, 0, + 0, 703, 2031, 0, 0, 2032, 875, 0, 0, 2033, + 2034, 2035, 0, 0, 0, 0, 0, 1759, 0, 939, + 0, 0, 0, 0, 0, 0, 2517, 0, 1028, 0, + 0, 3119, 0, 0, 875, 0, 2518, 707, 2855, 0, + 0, 0, 0, 2519, 708, 0, 0, 709, 0, 0, + 0, 0, 2874, 0, 0, 0, 876, 0, 876, 0, + 0, 0, 0, 0, 0, 0, 710, 0, 0, 2520, + 0, 0, 0, 1030, 0, 0, 0, 0, 0, 712, + 0, 0, 1031, 0, 0, 0, 714, 0, 0, 0, + 1670, 1674, 0, 0, 0, 878, 0, 0, 878, 0, + 878, 3120, 0, 875, 0, 878, 0, 0, 872, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 875, 0, 719, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 939, 0, + 0, 0, 0, 0, 873, 0, 872, 875, 0, 876, + 0, 929, 878, 0, 0, 0, 0, 0, 0, 0, + 878, 2896, 0, 0, 939, 0, 0, 0, 872, 0, + 0, 0, 2899, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2521, 0, 878, 0, 0, 2522, 0, + 0, 876, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2523, 2219, 0, 0, 2943, 0, 0, 0, 0, 876, + 0, 0, 0, 929, 929, 2524, 0, 0, 875, 0, + 0, 0, 0, 0, 873, 872, 0, 0, 2468, 2979, + 0, 0, 0, 0, 0, 0, 2992, 0, 0, 0, + 0, 875, 0, 0, 878, 0, 878, 0, 0, 873, + 0, 0, 0, 0, 2269, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 875, 939, 2525, 0, + 0, 2526, 0, 0, 0, 0, 0, 0, 876, 0, + 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 876, 0, 0, 0, 0, 0, 0, 0, 3053, 0, + 0, 1987, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 876, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, + 1334, 1334, 2002, 0, 0, 0, 872, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3103, 0, 2527, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2020, 2021, 2022, 0, 2024, 0, 0, 1518, 0, 878, + 0, 0, 0, 1519, 873, 0, 0, 0, 0, 0, + 1585, 0, 0, 0, 2475, 0, 0, 0, 0, 0, + 1759, 0, 0, 876, 0, 0, 0, 878, 0, 0, + 0, 0, 1586, 0, 875, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 876, 0, 1521, 0, + 873, 0, 0, 0, 0, 873, 0, 1759, 0, 196, + 0, 0, 929, 929, 0, 0, 0, 1759, 0, 0, + 0, 876, 0, 0, 0, 0, 0, 0, 0, 2457, + 0, 0, 0, 1587, 0, 0, 872, 2458, 2459, 2460, + 2461, 2462, 2463, 2464, 2465, 2466, 878, 0, 0, 0, + 0, 0, 0, 0, 1522, 0, 0, 0, 0, 0, + 197, 1523, 0, 0, 1524, 0, 2569, 0, 878, 0, + 2581, 2586, 0, 0, 875, 0, 198, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 878, 1525, 0, 0, 199, 0, 0, 0, 0, 875, + 200, 0, 0, 0, 872, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, + 0, 0, 1588, 0, 0, 1526, 0, 0, 0, 202, + 0, 0, 0, 0, 0, 873, 0, 0, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 204, 0, 0, 0, 0, 205, 0, 2468, 0, + 0, 0, 2468, 206, 0, 0, 0, 0, 0, 876, + 1589, 878, 0, 1590, 0, 0, 0, 0, 0, 0, + 0, 0, 207, 0, 0, 0, 0, 0, 1591, 0, + 0, 0, 1528, 0, 878, 0, 0, 0, 0, 0, + 0, 0, 1529, 0, 0, 0, 0, 208, 0, 0, + 0, 1530, 0, 0, 0, 0, 0, 0, 0, 878, + 0, 0, 1592, 1531, 872, 0, 0, 0, 209, 0, + 0, 0, 0, 0, 875, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 873, 876, + 0, 3567, 0, 0, 1533, 1534, 1594, 0, 210, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 875, 0, 0, 0, 876, 875, 0, 0, 0, 1595, + 0, 211, 0, 0, 0, 3568, 873, 0, 0, 0, + 0, 212, 213, 0, 0, 214, 0, 0, 0, 1597, + 1670, 1670, 1670, 0, 0, 0, 0, 0, 873, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 215, 0, 0, 216, 0, 0, 0, 217, + 0, 218, 0, 0, 0, 0, 0, 872, 219, 0, + 0, 220, 872, 872, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1536, 0, 0, 0, 878, 0, 0, + 221, 0, 0, 0, 0, 0, 0, 222, 0, 0, + 0, 0, 223, 224, 0, 873, 225, 0, 0, 0, + 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 227, 0, 0, 0, 0, 228, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 875, 0, 0, 229, 876, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 3257, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3262, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, + 0, 0, 0, 872, 0, 876, 0, 0, 0, 0, + 876, 0, 0, 0, 1415, 2468, 0, 0, 0, 0, + 0, 0, 878, 0, 0, 0, 0, 0, 0, 0, + 2468, 0, 0, 0, 3164, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 873, 872, 2468, 2468, + 2468, 0, 2468, 0, 0, 0, 1, 0, 0, 0, + 0, 1415, 1415, 0, 0, 0, 2, 0, 3, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 875, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1334, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, + 8, 9, 0, 0, 0, 0, 875, 10, 0, 11, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 0, 13, 0, 0, 0, 0, 875, 0, + 876, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 15, 0, 0, 0, 878, 0, 0, + 0, 0, 0, 0, 0, 0, 873, 0, 16, 0, + 17, 0, 0, 0, 18, 3131, 0, 0, 0, 0, + 5431, 0, 0, 0, 0, 0, 0, 3151, 20, 3152, + 21, 3154, 0, 0, 3168, 3171, 3176, 22, 0, 0, + 0, 3182, 0, 878, 3187, 875, 0, 0, 878, 0, + 0, 0, 0, 0, 23, 0, 0, 0, 0, 3194, + 3195, 3196, 0, 0, 0, 0, 3472, 0, 0, 0, + 0, 24, 0, 0, 873, 0, 3197, 0, 0, 0, + 0, 3494, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3521, 876, 0, 0, 0, 0, 0, 0, + 0, 25, 26, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 876, 0, 0, 0, 0, 0, 29, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 876, 0, 0, 875, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, + 3596, 3597, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 873, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 32, 33, 0, 34, 0, 0, 0, 0, 35, 3204, + 0, 4394, 0, 0, 36, 0, 0, 37, 0, 0, + 876, 0, 0, 0, 38, 0, 0, 0, 0, 0, + 39, 40, 0, 0, 0, 0, 0, 0, 41, 0, + 0, 0, 42, 0, 0, 0, 0, 0, 0, 3221, + 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, + 0, 3720, 0, 0, 0, 0, 875, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, + 0, 878, 0, 0, 0, 0, 0, 0, 46, 0, + 3223, 0, 0, 0, 47, 0, 0, 873, 0, 48, + 0, 0, 873, 873, 0, 0, 0, 0, 0, 0, + 0, 0, 49, 0, 0, 0, 0, 0, 0, 878, + 0, 0, 0, 2468, 0, 0, 0, 0, 0, 0, + 0, 876, 0, 0, 875, 50, 0, 0, 0, 0, + 0, 878, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 56, 0, 0, -135, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 878, 0, + 0, 0, 0, 873, 0, 0, 0, 2468, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2468, + 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 876, 0, 0, 875, 0, 0, 873, 0, 0, + 0, 0, 0, 0, 3230, 3231, 3232, 3233, 3234, 3235, + 3236, 3237, 3238, 0, 3239, 0, 0, 0, 0, 0, + 0, 0, 0, 1310, 0, 1670, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, + 0, 0, 0, 3197, 0, 0, 0, 3204, 0, 878, + 3221, 0, 3223, 0, 0, 3274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3990, 0, 0, 0, 0, 0, 875, 0, 0, + 0, 0, 875, 875, 0, 0, 0, 0, 2021, 2022, + 0, 0, 1415, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 876, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 878, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3414, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 875, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 875, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 876, 0, 0, 0, 0, 876, 876, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 878, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4197, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3652, 3653, 1670, 0, 0, + 0, 3657, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 876, 0, 0, 0, 0, 0, 3686, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 878, 0, 0, 0, 0, 878, 878, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2468, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2468, + 2468, 0, 2468, 0, 0, 0, 0, 3164, 3164, 0, + 3924, 0, 3164, 0, 0, 0, 2468, 0, 0, 2468, + 0, 4321, 4322, 4323, 2468, 0, 0, 0, 0, 0, + 2468, 0, 0, 0, 0, 2468, 0, 0, 4332, 0, + 0, 0, 2468, 2468, 2468, 2468, 0, 0, 0, 3164, + 3164, 0, 2468, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2468, + 0, 2468, 4356, 4358, 0, 0, 878, 4363, 2468, 2468, + 2468, 2468, 2468, 2468, 2468, 2468, 2468, 2468, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 878, 0, 2468, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3881, 0, 0, 0, 0, 3887, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2024, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3176, 4442, + 3176, 3176, 1334, 0, 0, 0, 0, 0, 0, 0, + 0, 3947, 0, 0, 3950, 0, 3952, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3971, 0, 3974, 0, 3976, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4544, 4545, 4546, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4041, 0, 0, 0, 0, 2569, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2586, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4090, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2468, 2468, 0, 0, 0, 2468, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4800, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1670, 0, 0, 0, 4832, 0, + 1670, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2992, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4890, 0, 0, 0, 2468, + 0, 0, 0, 0, 0, 2468, 0, 0, 0, 0, + 4343, 0, 3053, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3924, 3924, 0, 0, 3164, 3164, 3164, + 3164, 0, 0, 3164, 3164, 3164, 3164, 3164, 3164, 3164, + 3164, 3164, 3164, 3924, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2468, 0, 0, 2468, 0, + 2468, 0, 0, 3924, 3924, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2468, + 3164, 3164, 2468, 0, 2468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4975, + 4976, 4977, 4978, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4460, 2468, + 0, 0, 0, 0, 0, 0, 0, 4464, 0, 0, + 0, 0, 0, 0, 0, 4466, 0, 4467, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4489, 4490, 4491, 0, 2468, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3182, 0, 0, 0, 0, 0, 0, 0, + 4515, 0, 0, 4518, 0, 4520, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4523, 0, 0, 0, 0, + 0, 0, 0, 4530, 4531, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4589, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4602, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3164, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2468, 0, 0, 0, 5189, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2468, 0, + 0, 0, 2468, 0, 2468, 2468, 0, 0, 0, 0, + 3924, 3924, 3924, 3924, 0, 0, 0, 3924, 3924, 3924, + 3924, 3924, 3924, 3924, 3924, 3924, 3924, 2468, 2468, 2468, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2468, 0, 0, 2468, 0, 2468, 0, + 0, 2468, 0, 0, 3924, 3924, 0, 0, 2468, 2468, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4878, + 4879, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4886, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2468, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2468, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5376, 0, 4928, 0, 0, 1334, 0, + 0, 0, 0, 0, 0, 0, 4934, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5406, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4953, 4955, 0, 0, 0, + 0, 0, 4959, 4960, 0, 0, 0, 4961, 0, 0, + 0, 4962, 0, 0, 4965, 4966, 0, 0, 0, 4970, + 0, 0, 0, 0, 0, 4974, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5005, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1310, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5501, 0, 0, + 0, 0, 0, 5028, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3924, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5578, 0, 0, 0, + 0, 0, 0, 0, 5093, 0, 2468, 2468, 0, 0, + 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5600, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2468, 0, 0, 0, + 0, 0, 2468, 3164, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5129, 0, 0, 0, 0, 0, + 0, 2468, 0, 2468, 0, 0, 0, 2468, 2468, 2468, + 2468, 0, 0, 2468, 2468, 0, 0, 0, 2468, 0, + 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3164, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2468, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2468, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5217, 0, + 0, 2468, 0, 0, 5221, 5222, 5223, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5234, + 5235, 0, 0, 5236, 0, 0, 0, 2468, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5256, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5286, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2468, 0, 3924, 3164, 2468, + 2468, 2468, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2468, 2468, 2468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3164, 0, 0, + 3924, 0, 0, 0, 2468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2468, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3182, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2024, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3924, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3924, 0, 3164, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2468, 0, 0, + 0, 5555, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2468, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5621, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2468, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2468, 5665, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2468, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3164, 3164, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5750, 5750, 5750, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2468, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2468, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3924, 3924, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5813, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5837, 0, 5750, 0, 0, 2468, 2468, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5908, 0, 0, 0, 5909, 0, + 0, 0, 0, 233, 0, 1226, 680, 0, 1227, 1228, + 1229, 740, 1230, 0, 0, 0, 0, 0, 0, 0, + 234, 235, 236, 237, 238, 239, 240, 241, 1664, 242, + 243, 244, 0, 0, 5750, 0, 1231, 0, 0, 245, + 246, 247, 0, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 1232, 258, 1233, 1234, 0, 261, 262, 263, + 264, 265, 266, 267, 1235, 1236, 268, 269, 1237, 1238, + 272, 0, 273, 274, 275, 276, 1239, 0, 1240, 0, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 1670, 289, 290, 291, 292, 293, 294, 0, 295, 296, + 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 300, + 301, 302, 303, 304, 305, 1248, 1249, 308, 1250, 309, + 0, 310, 311, 312, 313, 314, 315, 316, 0, 317, + 318, 319, 320, 1665, 0, 321, 322, 853, 324, 325, + 0, 326, 327, 328, 0, 329, 330, 331, 0, 332, + 333, 334, 335, 1251, 337, 338, 339, 340, 1252, 1253, + 342, 0, 343, 344, 345, 1254, 347, 0, 348, 0, + 349, 350, 0, 351, 352, 353, 354, 355, 0, 356, + 1255, 0, 1256, 359, 360, 0, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 0, 371, 372, 373, + 374, 375, 376, 377, 0, 378, 379, 380, 381, 382, + 383, 384, 1257, 1258, 0, 1259, 0, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 0, 0, 398, + 1260, 400, 401, 402, 0, 403, 404, 405, 1261, 1262, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 1263, 423, 1264, 425, + 426, 427, 428, 429, 430, 431, 432, 1265, 434, 1266, + 435, 436, 437, 438, 1267, 1268, 440, 1269, 442, 443, + 444, 0, 445, 446, 0, 0, 1270, 448, 449, 0, + 0, 450, 451, 452, 453, 454, 455, 1271, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 0, 466, 467, + 1272, 469, 470, 471, 472, 473, 0, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 1273, 485, 486, + 487, 488, 0, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 0, 502, 503, 504, + 505, 506, 507, 508, 509, 1274, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 0, 520, 521, 522, 523, + 524, 1275, 525, 526, 527, 528, 529, 530, 531, 532, + 1276, 534, 0, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 1277, 549, 0, 550, + 551, 0, 552, 553, 554, 555, 556, 557, 558, 0, + 559, 1278, 1279, 0, 0, 562, 563, 1280, 565, 1281, + 1282, 567, 568, 569, 570, 571, 572, 573, 574, 0, + 1283, 575, 576, 577, 578, 579, 1284, 0, 580, 581, + 582, 583, 584, 585, 1285, 1666, 587, 588, 589, 590, + 591, 592, 0, 0, 593, 0, 0, 594, 595, 596, + 597, 598, 599, 600, 1286, 1287, 1288, 1289, 605, 1290, + 1291, 1292, 1293, 610, 611, 612, 613, 1294, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1295, 1296, + 1667, 0, 0, 0, 0, 0, 0, 1298, 1668, 233, + 0, 1226, 680, 0, 1227, 1228, 1229, 740, 1230, 0, + 0, 0, 0, 0, 0, 0, 234, 235, 236, 237, + 238, 239, 240, 241, 0, 242, 243, 244, 0, 0, + 0, 0, 1231, 0, 0, 245, 246, 247, 0, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 1232, 258, + 1233, 1234, 0, 261, 262, 263, 264, 265, 266, 267, + 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, 274, + 275, 276, 1239, 0, 1240, 0, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 0, 289, 290, 291, + 292, 293, 294, 0, 295, 296, 297, 298, 1241, 1242, + 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, 304, + 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 0, + 0, 321, 322, 853, 324, 325, 0, 326, 327, 328, + 0, 329, 330, 331, 0, 332, 333, 334, 335, 1251, + 337, 338, 339, 340, 1252, 1253, 342, 0, 343, 344, + 345, 1254, 347, 0, 348, 0, 349, 350, 0, 351, + 352, 353, 354, 355, 0, 356, 1255, 0, 1256, 359, + 360, 0, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 0, 371, 372, 373, 374, 375, 376, 377, + 0, 378, 379, 380, 381, 382, 383, 384, 1257, 1258, + 0, 1259, 0, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 0, 0, 398, 1260, 400, 401, 402, + 0, 403, 404, 405, 1261, 1262, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 1263, 423, 1264, 425, 426, 427, 428, 429, + 430, 431, 432, 1265, 434, 1266, 435, 436, 437, 438, + 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, 446, + 0, 0, 1270, 448, 449, 0, 0, 450, 451, 452, + 453, 454, 455, 1271, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 0, 466, 467, 1272, 469, 470, 471, + 472, 473, 0, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 1273, 485, 486, 487, 488, 0, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 0, 502, 503, 504, 505, 506, 507, 508, + 509, 1274, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 40, 520, 521, 522, 523, 524, 1275, 525, 526, + 527, 528, 529, 530, 531, 532, 1276, 534, 0, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 1277, 549, 0, 550, 551, 44, 552, 553, + 554, 555, 556, 557, 558, 0, 559, 1278, 1279, 0, + 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, 569, + 570, 571, 572, 573, 574, 0, 1283, 575, 576, 577, + 578, 579, 1284, 0, 580, 581, 582, 583, 584, 1166, + 1285, 0, 587, 588, 589, 590, 591, 592, 0, 0, + 593, 0, 49, 594, 595, 596, 597, 598, 599, 600, + 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, 610, + 611, 612, 613, 1294, 0, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 1295, 1296, 0, 0, 0, 0, + 0, 0, 0, 1298, 5482, 233, 0, 1226, 680, 0, + 1227, 1228, 1229, 740, 1230, 0, 0, 0, 0, 0, + 0, 0, 234, 235, 236, 237, 238, 239, 240, 241, + 0, 242, 243, 244, 0, 0, 0, 0, 1231, 0, + 0, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 1232, 258, 1233, 1234, 0, 261, + 262, 263, 264, 265, 266, 267, 1235, 1236, 268, 269, + 1237, 1238, 272, 0, 273, 274, 275, 276, 1239, 0, + 1240, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, + 1247, 300, 301, 302, 303, 304, 305, 1248, 1249, 308, + 1250, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 1251, 337, 338, 339, 340, + 1252, 1253, 342, 0, 343, 344, 345, 1254, 347, 0, + 348, 0, 349, 350, 0, 351, 352, 353, 354, 355, + 0, 356, 1255, 0, 1256, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 0, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 380, + 381, 382, 383, 384, 1257, 1258, 0, 1259, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 398, 1260, 400, 401, 402, 0, 403, 404, 405, + 1261, 1262, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 1263, 423, + 1264, 425, 426, 427, 428, 429, 430, 431, 432, 1265, + 434, 1266, 435, 436, 437, 438, 1267, 1268, 440, 1269, + 442, 443, 444, 0, 445, 446, 0, 0, 1270, 448, + 449, 0, 0, 450, 451, 452, 453, 454, 455, 1271, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 1272, 469, 470, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 1273, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 1274, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 520, 521, + 522, 523, 524, 1275, 525, 526, 527, 528, 529, 530, + 531, 532, 1276, 534, 0, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 1277, 549, + 0, 550, 551, 0, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 1278, 1279, 0, 0, 562, 563, 1280, + 565, 1281, 1282, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 1283, 575, 576, 577, 578, 579, 1284, 0, + 580, 581, 582, 583, 584, 585, 1285, 0, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, + 605, 1290, 1291, 1292, 1293, 610, 611, 612, 613, 1294, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1295, 1296, 0, 0, 0, 0, 0, 0, 0, 1298, + 3166, 233, 0, 1226, 680, 0, 1227, 1228, 1229, 740, + 1230, 0, 0, 0, 0, 0, 0, 0, 234, 235, + 236, 237, 238, 239, 240, 241, 0, 242, 243, 244, + 0, 0, 0, 0, 1231, 0, 0, 245, 246, 247, + 0, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 1232, 258, 1233, 1234, 0, 261, 262, 263, 264, 265, + 266, 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, + 273, 274, 275, 276, 1239, 0, 1240, 0, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 0, 289, + 290, 291, 292, 293, 294, 0, 295, 296, 297, 298, + 1241, 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, + 303, 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, + 311, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 0, 0, 321, 322, 853, 324, 325, 0, 326, + 327, 328, 0, 329, 330, 331, 0, 332, 333, 334, + 335, 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, + 343, 344, 345, 1254, 347, 0, 348, 0, 349, 350, + 0, 351, 352, 353, 354, 355, 0, 356, 1255, 0, + 1256, 359, 360, 0, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 0, 371, 372, 373, 374, 375, + 376, 377, 0, 378, 379, 380, 381, 382, 383, 384, + 1257, 1258, 0, 1259, 0, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 0, 0, 398, 1260, 400, + 401, 402, 0, 403, 404, 405, 1261, 1262, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 1263, 423, 1264, 425, 426, 427, + 428, 429, 430, 431, 432, 1265, 434, 1266, 435, 436, + 437, 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, + 445, 446, 0, 0, 1270, 448, 449, 0, 0, 450, + 451, 452, 453, 454, 455, 1271, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 0, 466, 467, 1272, 469, + 470, 471, 472, 473, 0, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 1273, 485, 486, 487, 488, + 0, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 504, 505, 506, + 507, 508, 509, 1274, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 0, 520, 521, 522, 523, 524, 1275, + 525, 526, 527, 528, 529, 530, 531, 532, 1276, 534, + 0, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 1277, 549, 0, 550, 551, 0, + 552, 553, 554, 555, 556, 557, 558, 0, 559, 1278, + 1279, 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, + 568, 569, 570, 571, 572, 573, 574, 0, 1283, 575, + 576, 577, 578, 579, 1284, 0, 580, 581, 582, 583, + 584, 585, 1285, 0, 587, 588, 589, 590, 591, 592, + 0, 0, 593, 0, 0, 594, 595, 596, 597, 598, + 599, 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, + 1293, 610, 611, 612, 613, 1294, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1295, 1296, 0, 0, + 0, 0, 0, 0, 0, 1298, 4468, 233, 0, 1226, + 680, 0, 1227, 1228, 1229, 740, 1230, 0, 0, 0, + 0, 0, 0, 0, 234, 235, 236, 237, 238, 239, + 240, 241, 0, 242, 243, 244, 0, 0, 0, 0, + 1231, 0, 0, 245, 246, 247, 0, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 1232, 258, 1233, 1234, + 0, 261, 262, 263, 264, 265, 266, 267, 1235, 1236, + 268, 269, 1237, 1238, 272, 0, 273, 274, 275, 276, + 1239, 0, 1240, 0, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 0, 289, 290, 291, 292, 293, + 294, 0, 295, 296, 297, 298, 1241, 1242, 1243, 1244, + 1245, 1246, 1247, 300, 301, 302, 303, 304, 305, 1248, + 1249, 308, 1250, 309, 0, 310, 311, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 0, 0, 321, + 322, 853, 324, 325, 0, 326, 327, 328, 0, 329, + 330, 331, 0, 332, 333, 334, 335, 1251, 337, 338, + 339, 340, 1252, 1253, 342, 0, 343, 344, 345, 1254, + 347, 0, 348, 0, 349, 350, 0, 351, 352, 353, + 354, 355, 0, 356, 1255, 0, 1256, 359, 360, 0, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 0, 371, 372, 373, 374, 375, 376, 377, 0, 378, + 379, 380, 381, 382, 383, 384, 1257, 1258, 0, 1259, + 0, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 0, 0, 398, 1260, 400, 401, 402, 0, 403, + 404, 405, 1261, 1262, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 1263, 423, 1264, 425, 426, 427, 428, 429, 430, 431, + 432, 1265, 434, 1266, 435, 436, 437, 438, 1267, 1268, + 440, 1269, 442, 443, 444, 0, 445, 446, 0, 0, + 1270, 448, 449, 0, 0, 450, 451, 452, 453, 454, + 455, 1271, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 0, 466, 467, 1272, 469, 470, 471, 472, 473, + 0, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 1273, 485, 486, 487, 488, 0, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 1274, + 511, 512, 513, 514, 515, 516, 517, 518, 519, 0, + 520, 521, 522, 523, 524, 1275, 525, 526, 527, 528, + 529, 530, 531, 532, 1276, 534, 0, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 1277, 549, 0, 550, 551, 0, 552, 553, 554, 555, + 556, 557, 558, 0, 559, 1278, 1279, 0, 0, 562, + 563, 1280, 565, 1281, 1282, 567, 568, 569, 570, 571, + 572, 573, 574, 0, 1283, 575, 576, 577, 578, 579, + 1284, 0, 580, 581, 582, 583, 584, 585, 1285, 0, + 587, 588, 589, 590, 591, 592, 0, 0, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 1286, 1287, + 1288, 1289, 605, 1290, 1291, 1292, 1293, 610, 611, 612, + 613, 1294, 0, 0, 0, 0, 621, 0, 0, 0, + 0, 0, 1295, 1296, 0, 0, 0, 0, 0, 0, + 0, 1298, 4537, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 4019, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, -1763, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, -1763, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, -1763, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, -1763, 393, 394, 395, 396, 397, + 0, 0, 398, 399, -1763, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + -1763, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, -1763, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1408, 234, 235, 236, 237, 238, 239, 240, 241, + 0, 242, 243, 244, 0, 0, 0, 0, 0, 0, + 0, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 0, 846, 258, 847, 848, 0, 261, + 262, 263, 264, 265, 266, 267, 0, 0, 268, 269, + 849, 850, 272, 0, 273, 274, 275, 276, 0, 0, + 278, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 0, 0, 0, 299, 0, 0, + 0, 300, 301, 302, 303, 304, 305, 851, 852, 308, + 0, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 0, 337, 338, 339, 340, + 0, 0, 342, 0, 343, 344, 345, 854, 347, 0, + 348, 0, 349, 350, 0, 351, 352, 353, 354, 355, + 0, 356, 0, 0, 0, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 2611, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 2612, + 381, 382, 383, 384, 855, 856, 0, 857, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 398, 0, 400, 401, 402, 0, 403, 404, 405, + 0, 0, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 858, 423, + 859, 425, 426, 427, 428, 429, 430, 431, 0, 0, + 434, 0, 435, 436, 437, 438, 0, 0, 440, 860, + 442, 443, 444, 0, 445, 446, 0, 0, 447, 448, + 449, 0, 0, 450, 451, 2614, 453, 454, 455, 0, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 0, 469, 0, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 861, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 0, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 520, 521, + 522, 523, 524, 0, 525, 526, 2615, 528, 529, 530, + 531, 532, 863, 534, 0, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 0, 549, + 0, 550, 551, 0, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 864, 865, 0, 0, 562, 563, 0, + 565, 0, 0, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 0, 575, 576, 577, 578, 579, 0, 0, + 580, 581, 582, 583, 584, 0, 866, 2616, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 845, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 611, 612, 613, 0, + 0, 0, 234, 235, 236, 237, 238, 239, 240, 241, + 0, 242, 243, 244, 0, 0, 0, 0, 0, 0, + 2711, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 0, 846, 258, 847, 848, 0, 261, + 262, 263, 264, 265, 266, 267, 0, 0, 268, 269, + 849, 850, 272, 0, 273, 274, 275, 276, 0, 0, + 278, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 0, 0, 0, 299, 0, 0, + 0, 300, 301, 302, 303, 304, 305, 851, 852, 308, + 0, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 0, 337, 338, 339, 340, + 0, 0, 342, 0, 343, 344, 345, 854, 347, 0, + 348, 0, 349, 350, 0, 351, 352, 353, 354, 355, + 0, 356, 0, 0, 0, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 2611, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 2612, + 381, 382, 383, 384, 855, 856, 0, 857, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 398, 0, 400, 401, 402, 0, 403, 404, 405, + 0, 0, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 858, 423, + 859, 425, 426, 427, 428, 429, 430, 431, 0, 0, + 434, 0, 435, 436, 437, 438, 0, 0, 440, 860, + 442, 443, 444, 0, 445, 446, 0, 0, 447, 448, + 449, 0, 0, 450, 451, 2614, 453, 454, 455, 0, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 0, 469, 0, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 861, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 0, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 520, 521, + 522, 523, 524, 0, 525, 526, 2615, 528, 529, 530, + 531, 532, 863, 534, 0, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 0, 549, + 0, 550, 551, 0, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 864, 865, 0, 0, 562, 563, 0, + 565, 0, 0, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 0, 575, 576, 577, 578, 579, 0, 0, + 580, 581, 582, 583, 584, 0, 866, 2616, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 233, 0, 1226, 680, 0, + 1227, 1228, 1229, 740, 1230, 0, 611, 612, 613, 0, + 0, 0, 234, 235, 236, 237, 238, 239, 240, 241, + 0, 242, 243, 244, 0, 0, 0, 0, 1231, 0, + 3776, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 1232, 258, 1233, 1234, 0, 261, + 262, 263, 264, 265, 266, 267, 1235, 1236, 268, 269, + 1237, 1238, 272, 0, 273, 274, 275, 276, 1239, 0, + 1240, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, + 1247, 300, 301, 302, 303, 304, 305, 1248, 1249, 308, + 1250, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 1251, 337, 338, 339, 340, + 1252, 1253, 342, 0, 343, 344, 345, 1254, 347, 0, + 348, 0, 349, 350, 0, 351, 352, 353, 354, 355, + 0, 356, 1255, 0, 1256, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 0, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 380, + 381, 382, 383, 384, 1257, 1258, 0, 1259, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 398, 1260, 400, 401, 402, 0, 403, 404, 405, + 1261, 1262, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 1263, 423, + 1264, 425, 426, 427, 428, 429, 430, 431, 432, 1265, + 434, 1266, 435, 436, 437, 438, 1267, 1268, 440, 1269, + 442, 443, 444, 0, 445, 446, 0, 0, 1270, 448, + 449, 0, 0, 450, 451, 452, 453, 454, 455, 1271, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 1272, 469, 470, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 1273, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 1274, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 40, 520, 521, + 522, 523, 524, 1275, 525, 526, 527, 528, 529, 530, + 531, 532, 1276, 534, 0, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 1277, 549, + 0, 550, 551, 44, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 1278, 1279, 0, 0, 562, 563, 1280, + 565, 1281, 1282, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 1283, 575, 576, 577, 578, 579, 1284, 0, + 580, 581, 582, 583, 584, 1166, 1285, 0, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 49, 594, + 595, 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, + 605, 1290, 1291, 1292, 1293, 610, 611, 612, 613, 1294, + 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 1295, 1296, 0, 0, 0, 233, 0, 1226, 680, 1298, + 1227, 1228, 1229, 740, 1230, 0, 0, 0, 0, 0, + 0, 0, 234, 235, 236, 237, 238, 239, 240, 241, + 0, 242, 243, 244, 0, 0, 0, 0, 1231, 0, + 0, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 1232, 258, 1233, 1234, 3172, 261, + 262, 263, 264, 265, 266, 267, 1235, 1236, 268, 269, + 1237, 1238, 272, 0, 273, 274, 275, 276, 1239, 0, + 1240, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, + 1247, 300, 301, 302, 303, 304, 305, 1248, 1249, 308, + 1250, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 1251, 337, 338, 339, 340, + 1252, 1253, 342, 0, 343, 344, 345, 1254, 347, 0, + 348, 0, 349, 350, 3173, 351, 352, 353, 354, 355, + 0, 356, 1255, 0, 1256, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 0, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 380, + 381, 382, 383, 384, 1257, 1258, 0, 1259, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 3174, 398, 1260, 400, 401, 402, 0, 403, 404, 405, + 1261, 1262, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 1263, 423, + 1264, 425, 426, 427, 428, 429, 430, 431, 432, 1265, + 434, 1266, 435, 436, 437, 438, 1267, 1268, 440, 1269, + 442, 443, 444, 0, 445, 446, 0, 0, 1270, 448, + 449, 0, 0, 450, 451, 452, 453, 454, 455, 1271, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 1272, 469, 470, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 1273, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 1274, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 520, 521, + 522, 523, 524, 1275, 525, 526, 527, 528, 529, 530, + 531, 532, 1276, 534, 0, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 1277, 549, + 0, 550, 551, 0, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 1278, 1279, 0, 3175, 562, 563, 1280, + 565, 1281, 1282, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 1283, 575, 576, 577, 578, 579, 1284, 0, + 580, 581, 582, 583, 584, 585, 1285, 0, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, + 605, 1290, 1291, 1292, 1293, 610, 611, 612, 613, 1294, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1295, 1296, 0, 0, 0, 233, 0, 1226, 680, 1298, + 1227, 1228, 1229, 740, 1230, 0, 0, 0, 0, 0, + 0, 0, 234, 235, 236, 237, 238, 239, 240, 241, + -2152, 242, 243, 244, 0, 0, 0, -2152, 1231, 0, + 0, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 1232, 258, 1233, 1234, 0, 261, + 262, 263, 264, 265, 266, 267, 1235, 1236, 268, 269, + 1237, 1238, 272, 0, 273, 274, 275, 276, 1239, 0, + 1240, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, + 1247, 300, 301, 302, 303, 304, 305, 1248, 1249, 308, + 1250, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 1251, 337, 338, 339, 340, + 1252, 1253, 342, 0, 343, 344, 345, 1254, 347, 0, + 348, 0, 349, 350, 0, 351, 352, 353, 354, 355, + 0, 356, 1255, 0, 1256, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 0, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 380, + 381, 382, 383, 384, 1257, 1258, 0, 1259, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 398, 1260, 400, 401, 402, 0, 403, 404, 405, + 1261, 1262, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 1263, 423, + 1264, 425, 426, 427, 428, 429, 430, 431, 432, 1265, + 434, 1266, 435, 436, 437, 438, 1267, 1268, 440, 1269, + 442, 443, 444, 0, 445, 446, 0, 0, 1270, 448, + 449, 0, 0, 450, 451, 452, 453, 454, 455, 1271, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 1272, 469, 470, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 1273, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 1274, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 520, 521, + 522, 523, 524, 1275, 525, 526, 527, 528, 529, 530, + 531, 532, 1276, 534, -2152, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 1277, 549, + 0, 550, 551, 0, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 1278, 1279, 0, 0, 562, 563, 1280, + 565, 1281, 1282, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 1283, 575, 576, 577, 578, 579, 1284, 0, + 580, 581, 582, 583, 584, 585, 1285, 0, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, + 605, 1290, 1291, 1292, 1293, 610, 611, 612, 613, 1294, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1295, 1296, 0, 0, 0, 233, 0, 1226, 680, 1298, + 1227, 1228, 1229, 740, 1230, 0, 0, 0, 0, 0, + 0, 0, 234, 235, 236, 237, 238, 239, 240, 241, + -2150, 242, 243, 244, 0, 0, 0, -2150, 1231, 0, + 0, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 1232, 258, 1233, 1234, 0, 261, + 262, 263, 264, 265, 266, 267, 1235, 1236, 268, 269, + 1237, 1238, 272, 0, 273, 274, 275, 276, 1239, 0, + 1240, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, + 1247, 300, 301, 302, 303, 304, 305, 1248, 1249, 308, + 1250, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 1251, 337, 338, 339, 340, + 1252, 1253, 342, 0, 343, 344, 345, 1254, 347, 0, + 348, 0, 349, 350, 0, 351, 352, 353, 354, 355, + 0, 356, 1255, 0, 1256, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 0, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 380, + 381, 382, 383, 384, 1257, 1258, 0, 1259, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 398, 1260, 400, 401, 402, 0, 403, 404, 405, + 1261, 1262, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 1263, 423, + 1264, 425, 426, 427, 428, 429, 430, 431, 432, 1265, + 434, 1266, 435, 436, 437, 438, 1267, 1268, 440, 1269, + 442, 443, 444, 0, 445, 446, 0, 0, 1270, 448, + 449, 0, 0, 450, 451, 452, 453, 454, 455, 1271, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 1272, 469, 470, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 1273, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 1274, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 520, 521, + 522, 523, 524, 1275, 525, 526, 527, 528, 529, 530, + 531, 532, 1276, 534, -2150, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 1277, 549, + 0, 550, 551, 0, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 1278, 1279, 0, 0, 562, 563, 1280, + 565, 1281, 1282, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 1283, 575, 576, 577, 578, 579, 1284, 0, + 580, 581, 582, 583, 584, 585, 1285, 0, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, + 605, 1290, 1291, 1292, 1293, 610, 611, 612, 613, 1294, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1295, 1296, 0, 0, 0, 233, 0, 1226, 680, 1298, + 1227, 1228, 1229, 740, 1230, 0, 0, 0, 0, 0, + 0, 0, 234, 235, 236, 237, 238, 239, 240, 241, + 0, 242, 243, 244, 0, 0, 0, 0, 1231, 0, + 0, 245, 246, 247, 0, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 1232, 258, 1233, 1234, 0, 261, + 262, 263, 264, 265, 266, 267, 1235, 1236, 268, 269, + 1237, 1238, 272, 0, 273, 274, 275, 276, 1239, 0, + 1240, 0, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 0, 289, 290, 291, 292, 293, 294, 0, + 295, 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, + 1247, 300, 301, 302, 303, 304, 305, 1248, 1249, 308, + 1250, 309, 0, 310, 311, 312, 313, 314, 315, 316, + 0, 317, 318, 319, 320, 0, 0, 321, 322, 853, + 324, 325, 0, 326, 327, 328, 0, 329, 330, 331, + 0, 332, 333, 334, 335, 1251, 337, 338, 339, 340, + 1252, 1253, 342, 0, 343, 344, 345, 1254, 347, 0, + 348, 0, 349, 350, 0, 351, 352, 353, 354, 355, + 0, 356, 1255, 0, 1256, 359, 360, 0, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 0, 371, + 372, 373, 374, 375, 376, 377, 0, 378, 379, 380, + 381, 382, 383, 384, 1257, 1258, 0, 1259, 0, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 0, + 0, 398, 1260, 400, 401, 402, 0, 403, 404, 405, + 1261, 1262, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 1263, 423, + 1264, 425, 426, 427, 428, 429, 430, 431, 432, 1265, + 434, 1266, 435, 436, 437, 438, 1267, 1268, 440, 1269, + 442, 443, 444, 0, 445, 446, 0, 0, 1270, 448, + 449, 0, 0, 450, 451, 452, 453, 454, 455, 1271, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 0, + 466, 467, 1272, 469, 470, 471, 472, 473, 0, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 1273, + 485, 486, 487, 488, 0, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 0, 502, + 503, 504, 505, 506, 507, 508, 509, 1274, 511, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 520, 521, + 522, 523, 524, 1275, 525, 526, 527, 528, 529, 530, + 531, 532, 1276, 534, 0, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 1277, 549, + 0, 550, 551, 0, 552, 553, 554, 555, 556, 557, + 558, 0, 559, 1278, 1279, 0, 0, 562, 563, 1280, + 565, 1281, 1282, 567, 568, 569, 570, 571, 572, 573, + 574, 0, 1283, 575, 576, 577, 578, 579, 1284, 0, + 580, 581, 582, 583, 584, 585, 1285, 0, 587, 588, + 589, 590, 591, 592, 0, 0, 593, 0, 0, 594, + 595, 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, + 605, 1290, 1291, 1292, 1293, 610, 611, 612, 613, 1294, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1295, 1296, 0, 0, 0, 0, 0, 1984, 3124, 1298, + 233, 0, 1226, 680, 0, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 1297, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 2579, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 3654, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 3173, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 3224, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2582, 2583, 0, 0, 0, + 233, 0, 3337, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 4588, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 4942, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 4954, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 5264, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 5265, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 5266, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 5267, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 5747, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 5748, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 5749, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 5748, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 5749, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 1294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 5249, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 0, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 3158, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3159, 3160, 0, 0, 0, + 233, 0, 1226, 680, 3161, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, -2772, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 5748, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 1250, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, -2772, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 0, 0, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + -2772, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 1266, 435, 436, 0, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 1274, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, -2772, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 5749, 573, 574, 0, 1283, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, -2772, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1295, 1296, 0, 0, 0, + 233, 0, 1226, 680, 1298, 1227, 1228, 1229, 740, 1230, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 0, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 1270, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 3158, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3159, 3160, 233, 0, 1226, + 680, 0, 1227, 1228, 3161, 740, 1230, 0, 0, 0, + 0, 0, 0, 0, 234, 235, 236, 237, 238, 239, + 240, 241, 0, 242, 243, 244, 0, 0, 0, 0, + 1231, 0, 0, 245, 246, 247, 0, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 1232, 258, 1233, 1234, + 0, 261, 262, 263, 264, 265, 266, 267, 1235, 1236, + 268, 269, 1237, 1238, 272, 0, 273, 274, 275, 276, + 1239, 0, 1240, 0, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 0, 289, 290, 291, 292, 293, + 294, 0, 295, 296, 297, 298, 1241, 1242, 1243, 1244, + 1245, 1246, 1247, 300, 301, 302, 303, 304, 305, 1248, + 1249, 308, 0, 309, 0, 310, 311, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 0, 0, 321, + 322, 853, 324, 325, 0, 326, 327, 328, 0, 329, + 330, 331, 0, 332, 333, 334, 335, 1251, 337, 338, + 339, 340, 1252, 1253, 342, 0, 343, 344, 345, 1254, + 347, 0, 348, 0, 349, 350, 0, 351, 352, 353, + 354, 355, 0, 356, 1255, 0, 1256, 359, 360, 0, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 0, 371, 372, 373, 374, 375, 376, 377, 0, 378, + 379, 380, 381, 382, 383, 384, 1257, 1258, 0, 1259, + 0, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 0, 0, 398, 1260, 400, 401, 402, 0, 403, + 404, 405, 1261, 1262, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 1263, 423, 1264, 425, 426, 427, 428, 429, 430, 431, + 432, 1265, 434, 0, 435, 436, 437, 438, 1267, 1268, + 440, 1269, 442, 443, 444, 0, 445, 446, 0, 0, + 447, 448, 449, 0, 0, 450, 451, 452, 453, 454, + 455, 1271, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 0, 466, 467, 1272, 469, 470, 471, 472, 473, + 0, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 1273, 485, 486, 487, 488, 0, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 504, 505, 506, 507, 508, 509, 3326, + 3327, 512, 513, 514, 515, 516, 517, 518, 519, 0, + 520, 521, 522, 523, 524, 1275, 525, 526, 527, 528, + 529, 530, 531, 532, 1276, 534, 0, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 1277, 549, 0, 550, 551, 0, 552, 553, 554, 555, + 556, 557, 558, 0, 559, 1278, 1279, 0, 0, 562, + 563, 1280, 565, 1281, 1282, 567, 568, 569, 570, 571, + 572, 573, 574, 0, 0, 575, 576, 577, 578, 579, + 1284, 0, 580, 581, 582, 583, 584, 585, 1285, 0, + 587, 588, 589, 590, 591, 592, 0, 0, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 1286, 1287, + 1288, 1289, 605, 1290, 1291, 1292, 1293, 610, 611, 612, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3328, 3329, 233, 0, 1226, 680, 0, 1227, + 1228, 3161, 740, 1230, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 1231, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 1232, 258, 1233, 1234, 0, 261, 262, + 263, 264, 265, 266, 267, 1235, 1236, 268, 269, 1237, + 1238, 272, 0, 273, 274, 275, 276, 1239, 0, 1240, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, 1247, + 300, 301, 302, 303, 304, 305, 1248, 1249, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 853, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 1251, 337, 338, 339, 340, 1252, + 1253, 342, 0, 343, 344, 345, 1254, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 1255, 0, 1256, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 1257, 1258, 0, 1259, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 1260, 400, 401, 402, 0, 403, 404, 405, 1261, + 1262, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 1263, 423, 1264, + 425, 426, 427, 428, 429, 430, 431, 432, 1265, 434, + 0, 435, 436, 437, 438, 1267, 1268, 440, 1269, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 1271, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 1272, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 1273, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 3158, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 1275, 525, 526, 527, 528, 529, 530, 531, + 532, 1276, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 1277, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 1278, 1279, 0, 0, 562, 563, 1280, 565, + 1281, 1282, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 1284, 0, 580, + 581, 582, 583, 584, 585, 1285, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, 605, + 1290, 1291, 1292, 1293, 610, 611, 612, 613, 0, 0, + 0, 0, 233, 0, 1226, 680, 0, 1227, 1228, 0, + 740, 1230, 0, 0, 0, 0, 0, 0, 3161, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 1231, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 1232, 258, 1233, 1234, 0, 261, 4499, 263, 264, + 265, 266, 267, 1235, 1236, 268, 269, 1237, 1238, 272, + 0, 273, 274, 275, 276, 1239, 0, 1240, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, + 302, 303, 304, 305, 1248, 1249, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 853, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 1251, 337, 338, 339, 340, 1252, 1253, 342, + 0, 343, 344, 345, 1254, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 1255, + 0, 1256, 359, 360, 0, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 1257, 1258, 0, 1259, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 1260, + 400, 401, 402, 0, 403, 404, 405, 1261, 1262, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 1263, 423, 1264, 425, 426, + 427, 428, 429, 430, 431, 432, 1265, 434, 0, 435, + 436, 437, 438, 1267, 1268, 440, 1269, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 1271, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 1272, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 1273, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 3158, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 1275, 525, 526, 527, 528, 529, 530, 531, 532, 1276, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 1277, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 1278, 1279, 0, 0, 562, 563, 1280, 565, 1281, 1282, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 1284, 0, 580, 581, 582, + 583, 584, 585, 1285, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, + 1292, 1293, 610, 611, 612, 613, 0, 0, 0, 0, + 233, 0, 1226, 680, 0, 1227, 1228, 0, 740, 1230, + 0, 0, 0, 0, 0, 0, 3161, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 1231, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 1232, + 258, 1233, 1234, 0, 261, 262, 263, 264, 265, 266, + 267, 1235, 1236, 268, 269, 1237, 1238, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 1248, 1249, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 1251, 337, 338, 339, 340, 1252, 1253, 342, 0, 343, + 344, 345, 1254, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 1256, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 1257, + 1258, 0, 1259, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 1263, 423, 1264, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 0, 435, 436, 437, + 438, 1267, 1268, 440, 1269, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 1273, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 3158, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 1276, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 1278, 1279, + 0, 0, 562, 563, 1280, 565, 1281, 1282, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 1285, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 4557, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 0, 0, 0, 0, 233, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3161, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 1236, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 1239, 0, 1240, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 1241, 1242, 1243, + 1244, 1245, 1246, 1247, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 1252, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 1255, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 3301, 0, 398, 1260, 400, 401, 402, 0, + 403, 404, 405, 1261, 1262, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 1265, 434, 0, 435, 436, 437, 438, 0, + 1268, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 829, 447, 448, 449, 0, 0, 450, 451, 452, 453, + 454, 455, 1271, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 1272, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 3302, 512, 513, 514, 515, 516, 517, 518, 519, + 40, 520, 521, 522, 523, 524, 1275, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 1277, 549, 0, 550, 551, 44, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 1280, 565, 1281, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 1284, 0, 580, 581, 582, 583, 584, 1166, 586, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 49, 594, 595, 596, 597, 598, 599, 600, 1286, + 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, 3303, 611, + 612, 613, 0, 0, 50, 0, 233, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3304, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 1236, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 1239, + 0, 1240, 0, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 295, 296, 297, 298, 1241, 1242, 1243, 1244, 1245, + 1246, 1247, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 1252, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 350, 0, 351, 352, 353, 354, + 355, 0, 356, 1255, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 3301, 0, 398, 1260, 400, 401, 402, 0, 403, 404, + 405, 1261, 1262, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 1265, 434, 0, 435, 436, 437, 438, 0, 1268, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 829, 447, + 448, 449, 0, 0, 450, 451, 452, 453, 454, 455, + 1271, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 1272, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 3302, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 1275, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 1277, + 549, 0, 550, 551, 0, 552, 553, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 1280, 565, 1281, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 1284, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 588, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 1286, 1287, 1288, + 1289, 605, 1290, 1291, 1292, 1293, 3303, 611, 612, 613, + 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3304, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 1236, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 1239, 0, 1240, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, 1247, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 1252, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 1255, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 1260, 400, 401, 402, 0, 403, 404, 405, 1261, + 1262, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 1265, 434, + 0, 435, 436, 437, 438, 0, 1268, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 1271, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 1272, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 1275, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 1277, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 1280, 565, + 1281, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 1284, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, 605, + 1290, 1291, 1292, 1293, 610, 611, 612, 613, 0, 0, + 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3734, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 1236, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 1239, 0, 1240, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 1252, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 1255, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 1260, + 400, 401, 402, 0, 403, 404, 405, 1261, 1262, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 1265, 434, 0, 435, + 436, 437, 438, 0, 1268, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 1271, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 1272, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 3302, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 1275, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 1277, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 1280, 565, 1281, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 1284, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, + 1292, 1293, 3303, 611, 612, 613, 0, 0, 0, 0, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 56, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 1236, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 1239, 0, 1240, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 1241, + 1242, 1243, 1244, 1245, 1246, 1247, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 1252, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 1255, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 1260, 400, 401, + 402, 0, 403, 404, 405, 1261, 1262, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 1265, 434, 0, 435, 436, 437, + 438, 0, 1268, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 1271, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 1272, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 1275, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 1277, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 1280, 565, 1281, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 1284, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 1286, 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, + 610, 611, 612, 613, 0, 0, 0, 0, 233, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4617, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 1236, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 1239, 0, 1240, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 1241, 1242, 1243, + 1244, 1245, 1246, 1247, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 1252, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 1255, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 1260, 400, 401, 402, 0, + 403, 404, 405, 1261, 1262, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 1265, 434, 0, 435, 436, 437, 438, 0, + 1268, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 453, + 454, 455, 1271, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 1272, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 1275, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 1277, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 1280, 565, 1281, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 1284, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 1286, + 1287, 1288, 1289, 605, 1290, 1291, 1292, 1293, 610, 611, + 612, 613, 0, 0, 0, 0, 930, 0, 1542, 680, + 0, 0, 0, 0, 740, 0, 0, 0, 0, 0, + 0, 0, 5721, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 278, 0, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 295, 296, 297, 298, 0, 0, 0, 299, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 1764, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 350, 0, 351, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 400, 401, 402, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 437, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 1765, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 553, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 1766, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 588, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 0, 0, 0, 0, 930, 0, 0, 0, 0, 0, + 0, 1543, 1544, 5534, 0, 0, 0, 0, 0, 0, + 5535, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 3, 4, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 278, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 0, 0, 0, 299, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 400, 401, 402, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 437, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 40, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 44, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 1166, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 49, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 0, 0, + 50, 0, 233, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 278, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 0, 0, 0, 299, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 400, 401, 402, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 437, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 0, 0, 0, 0, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5314, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 40, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 44, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 1166, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 49, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 0, 0, 50, 0, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 0, 0, 0, 0, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1356, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3359, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 0, 0, + 0, 0, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4534, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 0, 0, 0, 0, + 0, 0, 0, 845, 0, 1542, 680, 0, 0, 0, + 945, 740, 0, 0, 0, 0, 4574, 946, 947, 948, + 234, 235, 236, 237, 238, 239, 240, 241, 1677, 242, + 243, 244, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 245, + 246, 247, 1685, 248, 249, 250, 251, 252, 253, 254, + 255, 0, 846, 258, 847, 848, 1686, 261, 262, 263, + 264, 265, 266, 267, 1687, 1688, 268, 269, 849, 850, + 272, 1689, 273, 274, 275, 276, 0, 1690, 278, 1691, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 1692, 289, 290, 291, 292, 293, 294, 1693, 295, 296, + 297, 298, 1694, 1695, 1696, 299, 1697, 1698, 1699, 300, + 301, 302, 303, 304, 305, 851, 852, 308, 1700, 309, + 1701, 310, 311, 312, 313, 314, 315, 316, 1702, 317, + 318, 319, 320, 1703, 1704, 321, 322, 853, 324, 325, + 1705, 326, 327, 328, 1706, 329, 330, 331, 1707, 332, + 333, 334, 335, 0, 337, 338, 339, 340, 0, 1708, + 342, 1709, 343, 344, 345, 854, 347, 1710, 348, 1711, + 349, 350, 1712, 351, 352, 353, 354, 355, 1713, 356, + 0, 1714, 0, 359, 360, 1715, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 1716, 371, 372, 373, + 374, 375, 376, 377, 1717, 378, 379, 0, 381, 382, + 383, 384, 855, 856, 1718, 857, 1719, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 1720, 1721, 398, + 0, 400, 401, 402, 1722, 403, 404, 405, 1723, 1724, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 858, 423, 859, 425, + 426, 427, 428, 429, 430, 431, 4288, 0, 434, 1725, + 435, 436, 437, 438, 1726, 0, 440, 860, 442, 443, + 444, 1727, 445, 446, 1728, 1729, 4289, 448, 449, 1730, + 1731, 450, 451, 0, 453, 454, 455, 0, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 1732, 466, 467, + 0, 469, 0, 471, 472, 473, 1733, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 861, 485, 486, + 487, 488, 1734, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, 499, 500, 501, 1735, 502, 503, 504, + 505, 506, 507, 508, 509, 0, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 1736, 520, 521, 522, 523, + 524, 1737, 525, 526, 2615, 528, 529, 530, 531, 532, + 863, 534, 1738, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 0, 549, 1739, 550, + 551, 1740, 552, 553, 554, 555, 556, 557, 558, 1741, + 559, 864, 865, 1742, 1743, 562, 563, 0, 565, 0, + 1744, 567, 568, 569, 570, 571, 572, 573, 574, 1745, + 1746, 575, 576, 577, 578, 579, 1747, 1748, 580, 581, + 582, 583, 584, 0, 866, 1749, 587, 588, 589, 590, + 591, 592, 1750, 1751, 593, 1752, 1753, 594, 595, 596, + 597, 598, 599, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 611, 612, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 951, 952, 953, 4290, 4291, + 956, 957, 958, 959, 845, 0, 1542, 680, 0, 0, + 0, 945, 740, 0, 0, 0, 0, 0, 946, 947, + 948, 234, 235, 236, 237, 238, 239, 240, 241, 1677, + 242, 243, 244, 1678, 1679, 1680, 1681, 1682, 1683, 1684, + 245, 246, 247, 1685, 248, 249, 250, 251, 252, 253, + 254, 255, 0, 846, 258, 847, 848, 1686, 261, 262, + 263, 264, 265, 266, 267, 1687, 1688, 268, 269, 849, + 850, 272, 1689, 273, 274, 275, 276, 0, 1690, 278, + 1691, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 1692, 289, 290, 291, 292, 293, 294, 1693, 295, + 296, 297, 298, 1694, 1695, 1696, 299, 1697, 1698, 1699, + 300, 301, 302, 303, 304, 305, 851, 852, 308, 1700, + 309, 1701, 310, 311, 312, 313, 314, 315, 316, 1702, + 317, 318, 319, 320, 1703, 1704, 321, 322, 853, 324, + 325, 1705, 326, 327, 328, 1706, 329, 330, 331, 1707, + 332, 333, 334, 335, 0, 337, 338, 339, 340, 0, + 1708, 342, 1709, 343, 344, 345, 854, 347, 1710, 348, + 1711, 349, 350, 1712, 351, 352, 353, 354, 355, 1713, + 356, 0, 1714, 0, 359, 360, 1715, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 1716, 371, 372, + 373, 374, 375, 376, 377, 1717, 378, 379, 0, 381, + 382, 383, 384, 855, 856, 1718, 857, 1719, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 1720, 1721, + 398, 0, 400, 401, 402, 1722, 403, 404, 405, 1723, + 1724, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 858, 423, 859, + 425, 426, 427, 428, 429, 430, 431, 4709, 0, 434, + 1725, 435, 436, 437, 438, 1726, 0, 440, 860, 442, + 443, 444, 1727, 445, 446, 1728, 1729, 4289, 448, 449, + 1730, 1731, 450, 451, 0, 453, 454, 455, 0, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 1732, 466, + 467, 0, 469, 0, 471, 472, 473, 1733, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 861, 485, + 486, 487, 488, 1734, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 1735, 502, 503, + 504, 505, 506, 507, 508, 509, 0, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 1736, 520, 521, 522, + 523, 524, 1737, 525, 526, 2615, 528, 529, 530, 531, + 532, 863, 534, 1738, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 0, 549, 1739, + 550, 551, 1740, 552, 553, 554, 555, 556, 557, 558, + 1741, 559, 864, 865, 1742, 1743, 562, 563, 0, 565, + 0, 1744, 567, 568, 569, 570, 571, 572, 573, 574, + 1745, 1746, 575, 576, 577, 578, 579, 1747, 1748, 580, + 581, 582, 583, 584, 0, 866, 1749, 587, 588, 589, + 590, 591, 592, 1750, 1751, 593, 1752, 1753, 594, 595, + 596, 597, 598, 599, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 612, 613, 0, 0, + 0, 0, 0, 0, 0, 0, 951, 952, 953, 4290, + 4291, 956, 957, 958, 959, 2030, 0, 0, 0, 0, + 0, 0, 2031, 0, 0, 2032, 0, 0, 0, 2033, + 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, + 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 0, 2052, + 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, + 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, + 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, + 0, 0, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, + 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, + 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 0, + 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, + 2120, 2121, 2122, 2123, 2124, 0, 2125, 2126, 2127, 2128, + 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, + 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, + 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, + 0, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, + 2168, 2169, 2170, 0, 0, 2171, 2172, 2173, 2174, 0, + 2175, 2176, 2177, 2178, 0, 2179, 2180, 2181, 2182, 2183, + 0, 2184, 2185, 0, 2186, 2187, 2188, 0, 2189, 2190, + 0, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, + 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2215, 0, 2216, 0, 2217, + 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, + 2228, 2229, 2230, 2231, 2232, 2233, 0, 2234, 2235, 2236, + 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, + 2247, 0, 2248, 2249, 0, 2250, 2251, 2252, 2253, 2254, + 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, + 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, + 2275, 2276, 2277, 0, 2278, 2279, 0, 2280, 2281, 2282, + 2283, 2284, 0, 2285, 2286, 2287, 2288, 0, 0, 2289, + 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, + 2300, 2301, 2302, 2303, 0, 2304, 2305, 2306, 2307, 2308, + 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, + 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, + 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 0, 2337, + 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, + 2348, 2349, 2350, 2351, 2352, 0, 2353, 2354, 2355, 2356, + 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, + 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, + 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, + 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, + 2397, 2398, 2399, 2400, 2401, 0, 2402, 2403, 2404, 2405, + 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, + 2416, 0, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, + 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 0, 2433, + 2434, 2435, 2436, 2437, 2438, 0, 2439, 0, 0, 0, + 0, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, + 2449, 2450, 2451, 2452, 2453, 2454, 0, 2455, 2456, 2457, + 0, 0, 0, 0, 0, 0, 0, 2458, 2459, 2460, + 2461, 2462, 2463, 2464, 2465, 2466, 621, 0, 0, 0, + 0, 0, 0, 945, 0, 0, 0, 0, 0, 0, + 946, 947, 948, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 949, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 950, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 0, 0, 0, 0, 0, 0, 0, 0, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 621, 0, 0, + 0, 0, 0, 0, 945, 0, 0, 0, 0, 0, + 0, 946, 947, 948, 234, 235, 236, 237, 238, 239, + 240, 241, 0, 242, 243, 244, 0, 0, 0, 0, + 0, 0, 0, 245, 246, 247, 0, 248, 249, 250, + 251, 0, 253, 254, 255, 256, 257, 0, 259, 260, + 0, 261, 262, 263, 264, 265, 266, 267, 0, 0, + 268, 269, 270, 271, 272, 0, 273, 1064, 275, 276, + 277, 0, 0, 0, 279, 280, 281, 282, 283, 284, + 0, 286, 287, 288, 0, 289, 290, 291, 292, 293, + 294, 0, 0, 296, 297, 298, 0, 0, 0, 0, + 0, 0, 0, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 0, 309, 0, 310, 311, 312, 313, 314, + 315, 316, 0, 317, 318, 319, 320, 0, 0, 321, + 322, 323, 324, 325, 0, 326, 327, 328, 0, 329, + 330, 331, 0, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 0, 1065, 0, 343, 344, 345, 346, + 347, 0, 348, 0, 349, 0, 0, 0, 352, 353, + 354, 355, 0, 356, 357, 0, 358, 359, 360, 0, + 361, 362, 363, 364, 365, 0, 367, 368, 369, 370, + 0, 371, 372, 373, 374, 375, 376, 377, 0, 378, + 0, 380, 381, 382, 383, 384, 385, 386, 0, 387, + 0, 388, 0, 0, 391, 0, 393, 394, 395, 396, + 397, 0, 0, 398, 399, 0, 401, 0, 0, 403, + 404, 405, 0, 0, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 0, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 0, 435, 436, 0, 438, 0, 439, + 440, 441, 442, 443, 444, 0, 445, 446, 0, 0, + 447, 448, 449, 0, 0, 450, 451, 452, 0, 454, + 0, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 0, 466, 467, 468, 469, 470, 471, 472, 473, + 0, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 0, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, + 0, 502, 503, 0, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, 516, 517, 518, 519, 0, + 520, 521, 522, 523, 524, 0, 525, 526, 527, 528, + 529, 0, 531, 532, 533, 534, 0, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 0, 550, 551, 0, 552, 0, 554, 555, + 556, 557, 558, 0, 559, 560, 561, 0, 0, 562, + 563, 564, 565, 566, 0, 567, 568, 569, 570, 571, + 572, 573, 574, 0, 0, 575, 576, 577, 578, 579, + 0, 0, 580, 581, 582, 583, 584, 585, 586, 0, + 587, 0, 589, 590, 591, 592, 0, 0, 593, 0, + 0, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 951, + 952, 953, 954, 955, 956, 957, 958, 959, 621, 0, + 0, 0, 0, 0, 0, 945, 0, 0, 0, 0, + 0, 0, 946, 947, 948, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 1129, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 1130, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 1131, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 951, 952, 953, 954, 955, 956, 957, 958, 959, 621, + 0, 0, 0, 0, 0, 0, 945, 0, 0, 0, + 0, 0, 0, 946, 947, 948, 234, 235, 236, 237, + 238, 239, 240, 241, 0, 242, 243, 244, 0, 0, + 0, 0, 0, 0, 0, 245, 246, 247, 0, 248, + 249, 250, 251, 0, 253, 254, 255, 256, 257, 0, + 259, 260, 0, 261, 262, 263, 264, 265, 266, 267, + 0, 0, 268, 269, 270, 271, 272, 0, 273, 1781, + 275, 276, 277, 0, 0, 0, 279, 280, 281, 282, + 283, 284, 0, 286, 287, 288, 0, 289, 290, 291, + 292, 293, 294, 0, 0, 296, 297, 298, 0, 0, + 0, 0, 0, 0, 0, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 0, 309, 0, 310, 311, 312, + 313, 314, 315, 316, 0, 317, 318, 319, 320, 0, + 0, 321, 322, 323, 324, 325, 0, 326, 327, 328, + 0, 329, 330, 331, 0, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 0, 1782, 0, 343, 344, + 345, 346, 347, 0, 348, 0, 349, 0, 0, 0, + 352, 353, 354, 355, 0, 356, 357, 0, 358, 359, + 360, 0, 361, 362, 363, 364, 365, 0, 367, 368, + 369, 370, 0, 371, 372, 373, 374, 375, 376, 377, + 0, 378, 0, 380, 381, 382, 383, 384, 385, 386, + 0, 387, 0, 388, 0, 0, 391, 0, 393, 394, + 395, 396, 397, 0, 0, 398, 399, 0, 401, 0, + 0, 403, 404, 405, 0, 0, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 0, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 0, 435, 436, 0, 438, + 0, 439, 440, 441, 442, 443, 444, 0, 445, 446, + 0, 0, 447, 448, 449, 0, 0, 450, 451, 452, + 0, 454, 0, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 0, 466, 467, 468, 469, 470, 471, + 472, 473, 0, 474, 475, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 0, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 0, 502, 503, 0, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, + 519, 0, 520, 521, 522, 523, 524, 0, 525, 526, + 527, 528, 529, 0, 531, 532, 533, 534, 0, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 0, 550, 551, 0, 552, 0, + 554, 555, 556, 557, 558, 0, 559, 560, 561, 0, + 0, 562, 563, 564, 565, 566, 0, 567, 568, 569, + 570, 571, 572, 573, 574, 0, 0, 575, 576, 577, + 578, 579, 0, 0, 580, 581, 582, 583, 584, 585, + 586, 0, 587, 0, 589, 590, 591, 592, 0, 0, + 593, 0, 0, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 0, 0, 0, 0, 0, 0, 0, + 0, 951, 952, 953, 954, 955, 956, 957, 958, 959, + 621, 0, 0, 0, 0, 0, 0, 945, 0, 0, + 0, 0, 0, 0, 946, 947, 948, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 0, 0, 0, 0, 0, 0, + 0, 0, 951, 952, 953, 954, 955, 956, 957, 958, + 959, 621, 0, 0, 0, 0, 0, 0, 945, 0, + 0, 0, 0, 0, 0, 946, 947, 948, 234, 235, + 236, 237, 238, 239, 240, 241, 0, 242, 243, 244, + 0, 0, 0, 0, 0, 0, 0, 245, 246, 247, + 0, 248, 249, 250, 251, 0, 253, 254, 255, 256, + 257, 0, 259, 260, 0, 261, 262, 263, 264, 265, + 266, 267, 0, 0, 268, 269, 270, 271, 272, 0, + 273, 3429, 275, 276, 277, 0, 0, 0, 279, 280, + 281, 282, 283, 284, 0, 286, 287, 288, 0, 289, + 290, 291, 292, 293, 294, 0, 0, 296, 297, 298, + 0, 0, 0, 0, 0, 0, 0, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 0, 309, 0, 310, + 311, 312, 313, 314, 315, 316, 0, 317, 318, 319, + 320, 0, 0, 321, 322, 323, 324, 325, 0, 326, + 327, 328, 0, 329, 330, 331, 0, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 0, 3430, 0, + 343, 344, 345, 346, 347, 0, 348, 0, 349, 0, + 0, 0, 352, 353, 354, 355, 0, 356, 357, 0, + 358, 359, 360, 0, 361, 362, 363, 364, 365, 0, + 367, 368, 369, 370, 0, 371, 372, 373, 374, 375, + 376, 377, 0, 378, 0, 380, 381, 382, 383, 384, + 385, 386, 0, 387, 0, 388, 0, 0, 391, 0, + 393, 394, 395, 396, 397, 0, 0, 398, 399, 0, + 401, 0, 0, 403, 404, 405, 0, 0, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 0, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 0, 435, 436, + 0, 438, 0, 439, 440, 441, 442, 443, 444, 0, + 445, 446, 0, 0, 447, 448, 449, 0, 0, 450, + 451, 452, 0, 454, 0, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 0, 466, 467, 468, 469, + 470, 471, 472, 473, 0, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 0, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 501, 0, 502, 503, 0, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 0, 520, 521, 522, 523, 524, 0, + 525, 526, 527, 528, 529, 0, 531, 532, 533, 534, + 0, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 549, 0, 550, 551, 0, + 552, 0, 554, 555, 556, 557, 558, 0, 559, 560, + 561, 0, 0, 562, 563, 564, 565, 566, 0, 567, + 568, 569, 570, 571, 572, 573, 574, 0, 0, 575, + 576, 577, 578, 579, 0, 0, 580, 581, 582, 583, + 584, 585, 586, 0, 587, 0, 589, 590, 591, 592, + 0, 0, 593, 0, 0, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 611, 612, 613, 0, 0, 0, 0, 0, + 0, 0, 0, 951, 952, 953, 954, 955, 956, 957, + 958, 959, 621, 0, 0, 0, 0, 0, 0, 945, + 0, 0, 0, 0, 0, 0, 946, 947, 948, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 5293, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 1676, 0, 0, 0, + 0, 0, 0, 0, 951, 952, 953, 954, 955, 956, + 957, 958, 959, 234, 235, 236, 237, 238, 239, 240, + 241, 1677, 242, 243, 244, 1678, 1679, 1680, 1681, 1682, + 1683, 1684, 245, 246, 247, 1685, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 1686, + 261, 262, 263, 264, 265, 266, 267, 1687, 1688, 268, + 269, 270, 271, 272, 1689, 273, 274, 275, 276, 277, + 1690, 278, 1691, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 1692, 289, 290, 291, 292, 293, 294, + 1693, 295, 296, 297, 298, 1694, 1695, 1696, 299, 1697, + 1698, 1699, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 1700, 309, 1701, 310, 311, 312, 313, 314, 315, + 316, 1702, 317, 318, 319, 320, 1703, 1704, 321, 322, + 323, 324, 325, 1705, 326, 327, 328, 1706, 329, 330, + 331, 1707, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 1708, 342, 1709, 343, 344, 345, 346, 347, + 1710, 348, 1711, 349, 350, 1712, 351, 352, 353, 354, + 355, 1713, 356, 357, 1714, 358, 359, 360, 1715, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 1716, + 371, 372, 373, 374, 375, 376, 377, 1717, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 1718, 387, 1719, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 1720, 1721, 398, 399, 400, 401, 402, 1722, 403, 404, + 405, 1723, 1724, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 1725, 435, 436, 437, 438, 1726, 439, 440, + 441, 442, 443, 444, 1727, 445, 446, 1728, 1729, 447, + 448, 449, 1730, 1731, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 1732, 466, 467, 468, 469, 470, 471, 472, 473, 1733, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 1734, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 1735, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 1736, 520, + 521, 522, 523, 524, 1737, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 1738, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 1739, 550, 551, 1740, 552, 553, 554, 555, 556, + 557, 558, 1741, 559, 560, 561, 1742, 1743, 562, 563, + 564, 565, 566, 1744, 567, 568, 569, 570, 571, 572, + 573, 574, 1745, 1746, 575, 576, 577, 578, 579, 1747, + 1748, 580, 581, 582, 583, 584, 585, 586, 1749, 587, + 588, 589, 590, 591, 592, 1750, 1751, 593, 1752, 1753, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1754, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 834, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5691, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 2611, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 2612, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 2613, 450, 451, 2614, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 2615, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 2616, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 0, 0, + 3771, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 2617, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 0, 846, + 258, 847, 848, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 849, 850, 272, 0, 273, + 274, 275, 276, 0, 0, 278, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 0, + 0, 0, 299, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 851, 852, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 853, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 0, 337, 338, 339, 340, 0, 0, 342, 0, 343, + 344, 345, 854, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 0, 0, 0, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 2611, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 2612, 381, 382, 383, 384, 855, + 856, 0, 857, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 0, 400, 401, + 402, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 858, 423, 859, 425, 426, 427, 428, + 429, 430, 431, 0, 0, 434, 0, 435, 436, 437, + 438, 0, 0, 440, 860, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 2613, 450, 451, + 2614, 453, 454, 455, 0, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 0, 469, 0, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 861, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 0, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 2615, 528, 529, 530, 531, 532, 863, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 0, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 864, 865, + 0, 0, 562, 563, 0, 565, 0, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 0, 866, 2616, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 0, 0, 930, 0, 1542, 680, 0, 0, 0, 0, + 740, 611, 612, 613, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 2617, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 278, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 0, 0, 0, 299, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 2503, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 1764, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 400, 401, 402, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 437, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 1765, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 1766, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 930, 0, 1542, 680, + 0, 0, 0, 0, 740, 0, 0, 1543, 1544, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 278, 0, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 295, 296, 297, 298, 0, 0, 0, 299, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 2508, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 1764, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 350, 0, 351, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 400, 401, 402, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 437, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 1765, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 553, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 1766, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 588, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 930, 0, 1542, 680, 0, 0, 0, 0, 740, 0, + 0, 1543, 1544, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 278, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 0, + 0, 0, 299, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 1764, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 400, 401, + 402, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 437, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 1765, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 1766, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 930, 0, 0, 680, 0, 0, + 0, 0, 740, 0, 0, 1543, 1544, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 278, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 0, 0, 0, 299, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 3390, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 1764, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 400, 401, 402, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 437, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 1765, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 1766, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 740, 0, 0, 752, + 753, 0, 0, 0, 0, 234, 741, 236, 237, 238, + 239, 240, 241, 742, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 743, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 744, + 346, 347, 0, 348, 0, 745, 0, 746, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 747, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 748, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 749, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 750, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 751, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 1676, 0, 5948, 680, 0, 0, 0, 0, + 740, 0, 0, 752, 753, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 1677, 242, 243, + 244, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 245, 246, + 247, 1685, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 1686, 261, 262, 263, 264, + 265, 266, 267, 1687, 1688, 268, 269, 270, 271, 272, + 1689, 273, 274, 275, 276, 277, 1690, 278, 1691, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 1692, + 289, 290, 291, 292, 293, 294, 1693, 295, 296, 297, + 298, 1694, 1695, 1696, 299, 1697, 1698, 1699, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 1700, 309, 1701, + 310, 311, 312, 313, 314, 315, 316, 1702, 317, 318, + 319, 320, 1703, 1704, 321, 322, 323, 324, 325, 1705, + 326, 327, 328, 1706, 329, 330, 331, 1707, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 1708, 342, + 1709, 343, 344, 345, 346, 347, 1710, 348, 1711, 349, + 350, 1712, 351, 352, 353, 354, 355, 1713, 356, 357, + 1714, 358, 359, 360, 1715, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 1716, 371, 372, 373, 374, + 375, 376, 377, 1717, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 1718, 387, 1719, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 1720, 1721, 398, 399, + 400, 401, 402, 1722, 403, 404, 405, 1723, 1724, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 1725, 435, + 436, 437, 438, 1726, 439, 440, 441, 442, 443, 444, + 1727, 445, 446, 1728, 1729, 447, 448, 449, 1730, 1731, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 1732, 466, 467, 468, + 469, 470, 471, 472, 473, 1733, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 1734, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 1735, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 1736, 520, 521, 522, 523, 524, + 1737, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 1738, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 1739, 550, 551, + 1740, 552, 553, 554, 555, 556, 557, 558, 1741, 559, + 560, 561, 1742, 1743, 562, 563, 564, 565, 566, 1744, + 567, 568, 569, 570, 571, 572, 573, 574, 1745, 1746, + 575, 576, 577, 578, 579, 1747, 1748, 580, 581, 582, + 583, 584, 585, 586, 1749, 587, 588, 589, 590, 591, + 592, 1750, 1751, 593, 1752, 1753, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 1676, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 1677, 242, 243, 244, 1678, 1679, 1680, 1681, 1682, + 1683, 1684, 245, 246, 247, 1685, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 1686, + 261, 262, 263, 264, 265, 266, 267, 1687, 1688, 268, + 269, 270, 271, 272, 1689, 273, 274, 275, 276, 277, + 1690, 278, 1691, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 1692, 289, 290, 291, 292, 293, 294, + 1693, 295, 296, 297, 298, 1694, 1695, 1696, 299, 1697, + 1698, 1699, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 1700, 309, 1701, 310, 311, 312, 313, 314, 315, + 316, 1702, 317, 318, 319, 320, 1703, 1704, 321, 322, + 323, 324, 325, 1705, 326, 327, 328, 1706, 329, 330, + 331, 1707, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 1708, 342, 1709, 343, 344, 345, 346, 347, + 1710, 348, 1711, 349, 350, 1712, 351, 352, 353, 354, + 355, 1713, 356, 357, 1714, 358, 359, 360, 1715, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 1716, + 371, 372, 373, 374, 375, 376, 377, 1717, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 1718, 387, 1719, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 1720, 1721, 398, 399, 400, 401, 402, 1722, 403, 404, + 405, 1723, 1724, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 1725, 435, 436, 437, 438, 1726, 439, 440, + 441, 442, 443, 444, 1727, 445, 446, 1728, 1729, 447, + 448, 449, 1730, 1731, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 1732, 466, 467, 468, 469, 470, 471, 472, 473, 1733, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 1734, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 1735, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 1736, 520, + 521, 522, 523, 524, 1737, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 1738, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 1739, 550, 551, 1740, 552, 553, 554, 555, 556, + 557, 558, 1741, 559, 560, 561, 1742, 1743, 562, 563, + 564, 565, 566, 1744, 567, 568, 569, 570, 571, 572, + 573, 574, 1745, 1746, 575, 576, 577, 578, 579, 1747, + 1748, 580, 581, 582, 583, 584, 585, 586, 1749, 587, + 588, 589, 590, 591, 592, 1750, 1751, 593, 1752, 1753, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 1676, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 3495, 239, 240, 241, 1677, 242, 243, 244, 1678, + 1679, 1680, 1681, 1682, 1683, 1684, 245, 246, 247, 1685, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 1686, 261, 262, 263, 264, 265, 266, + 267, 1687, 1688, 268, 269, 270, 271, 272, 1689, 273, + 274, 275, 276, 277, 1690, 278, 1691, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 1692, 289, 290, + 291, 292, 293, 294, 1693, 295, 296, 297, 298, 1694, + 1695, 1696, 299, 1697, 1698, 1699, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 1700, 309, 1701, 310, 311, + 312, 313, 314, 315, 316, 1702, 317, 318, 319, 320, + 1703, 1704, 321, 322, 323, 3496, 325, 1705, 326, 327, + 328, 1706, 329, 330, 331, 1707, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 1708, 342, 1709, 343, + 344, 345, 346, 347, 1710, 348, 1711, 349, 350, 1712, + 351, 352, 353, 354, 355, 1713, 356, 357, 1714, 358, + 359, 360, 1715, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 1716, 371, 372, 373, 374, 375, 376, + 377, 1717, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 1718, 387, 1719, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 1720, 1721, 398, 399, 400, 401, + 402, 1722, 403, 404, 405, 1723, 1724, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 1725, 435, 436, 437, + 438, 1726, 439, 440, 441, 442, 443, 444, 1727, 445, + 446, 1728, 1729, 447, 448, 449, 1730, 1731, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 1732, 466, 467, 468, 469, 470, + 471, 472, 473, 1733, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 1734, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 1735, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 1736, 520, 521, 522, 523, 524, 1737, 3497, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 1738, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 1739, 550, 551, 1740, 552, + 553, 554, 555, 556, 557, 558, 1741, 559, 560, 561, + 1742, 1743, 562, 563, 564, 565, 566, 1744, 567, 568, + 569, 570, 571, 572, 573, 574, 1745, 1746, 575, 576, + 577, 578, 579, 1747, 1748, 580, 581, 582, 583, 584, + 585, 586, 1749, 587, 588, 589, 590, 591, 592, 1750, + 1751, 593, 1752, 1753, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 233, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 1236, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 1239, 0, 1240, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 1241, 1242, 1243, 1244, 1245, 1246, 1247, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 1252, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 1255, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 1260, 400, 401, 402, 0, 403, 404, 405, 1261, + 1262, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 1265, 434, + 0, 435, 436, 437, 438, 0, 1268, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 1271, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 1272, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 1275, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 1277, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 1280, 565, + 1281, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 1284, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 1286, 1287, 1288, 1289, 605, + 1290, 1291, 1292, 1293, 610, 611, 612, 613, 233, 0, + 1226, 680, 0, 1227, 1228, 0, 740, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 1232, 258, 1233, + 1234, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 1237, 1238, 272, 0, 273, 274, 275, + 276, 277, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 1248, 1249, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 1253, 342, 0, 343, 344, 345, + 1254, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 380, 381, 382, 383, 384, 1257, 1258, 0, + 1259, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 1263, 423, 1264, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 437, 438, 1267, + 439, 440, 1269, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 1273, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 530, 531, 532, 1276, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 1278, 1279, 0, 0, + 562, 563, 564, 565, 566, 1282, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 1285, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 930, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 969, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 278, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 0, 0, 931, 299, 0, 0, 932, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 400, 401, 402, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 437, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 933, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 930, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 990, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 278, 0, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 295, 296, 297, 298, 0, 0, 931, 299, 0, + 0, 932, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 350, 0, 351, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 400, 401, 402, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 991, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 437, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 933, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 553, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 588, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 278, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 0, + 0, 931, 299, 0, 0, 932, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 400, 401, + 402, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 437, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 933, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 2868, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 930, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 278, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 0, 0, 931, 299, 0, 0, 932, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 357, 3840, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 400, 401, 402, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 437, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 933, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 930, 0, + 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 1764, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 437, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 1765, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 1766, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 930, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 278, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 0, 0, 931, 299, 0, 0, 932, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 400, 401, 402, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 437, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 933, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 930, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 278, 0, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 295, 296, 297, 298, 0, 0, 931, 299, 0, + 0, 932, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 350, 0, 351, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 400, 401, 402, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 1082, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 437, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 933, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 553, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 588, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 278, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 0, + 0, 931, 299, 0, 0, 932, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 1124, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 400, 401, + 402, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 437, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 933, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 930, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 278, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 0, 0, 931, 299, 0, 0, 932, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 1137, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 400, 401, 402, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 437, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 933, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 930, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 931, + 299, 0, 0, 932, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 1149, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 1150, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 437, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 933, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 930, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 3, 4, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 278, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 0, 0, 0, 299, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 400, 401, 402, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 437, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 930, 0, 0, 680, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 278, 0, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 295, 296, 297, 298, 0, 0, 0, 299, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 2488, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 350, 0, 351, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 400, 401, 402, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 437, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 553, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 588, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 930, 0, 0, 680, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 278, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 0, + 0, 0, 299, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 400, 401, + 402, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 437, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 233, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 278, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 0, 0, 0, 299, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 400, 401, 402, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 437, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 233, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 1108, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 437, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 233, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 278, 0, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 295, 296, 297, + 298, 0, 0, 0, 299, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 350, 0, 351, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 1121, + 366, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 400, 401, 402, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 437, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 553, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 588, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 233, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 278, 0, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 295, 296, 297, 298, 0, 0, 0, 299, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 350, 0, 351, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 1135, 366, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 400, 401, 402, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 437, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 553, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 588, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 278, 0, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 295, 296, 297, 298, 0, + 0, 0, 299, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 350, 0, + 351, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 1139, 366, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 400, 401, + 402, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 437, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 553, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 588, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 930, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 278, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 0, 0, 0, 299, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 400, 401, 402, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 437, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 2649, 273, 274, 275, + 276, 277, 0, 0, 2718, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 2650, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 2719, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 2652, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 2720, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 2653, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 2654, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 2649, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 2650, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 2719, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 2652, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 3704, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 2653, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 2654, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 797, 240, + 241, 759, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 760, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 798, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 761, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 762, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 759, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 760, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 3397, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 761, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 762, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 2649, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 2650, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 2719, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 2652, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 2653, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 2654, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 759, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 760, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 761, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 762, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 1941, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 1942, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 1943, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 1944, 349, + 0, 0, 0, 1945, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 1946, 1947, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 1948, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 1949, 509, 510, 511, 512, 513, 1950, 515, + 516, 517, 518, 519, 0, 1951, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 1952, 552, 0, 1953, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 1954, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 760, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 761, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 762, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 983, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 984, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 829, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 3476, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 3477, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 3489, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 3490, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 622, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 671, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 672, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 789, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 790, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 791, 561, + 0, 0, 792, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 823, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 824, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 825, 561, 0, 0, 826, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 829, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 886, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 940, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 941, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 1100, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 1331, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 1342, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 809, 269, 270, 271, 1343, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 812, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 813, 506, 507, 508, 509, + 510, 511, 512, 513, 814, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 1335, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 816, 561, 0, 0, + 817, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 818, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 1486, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 829, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 1547, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 1548, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 789, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 3250, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 3251, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 3252, 552, 0, 554, 3253, 556, 3254, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 3255, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 740, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 4019, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 4033, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 4653, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 775, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 787, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 809, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 810, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 811, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 812, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 813, 506, 507, + 508, 509, 510, 511, 512, 513, 814, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 815, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 816, 561, + 0, 0, 817, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 818, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 840, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 965, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 975, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 978, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 994, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 1049, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 1054, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 1071, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 1074, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 1076, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 1113, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 1141, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 1143, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 1153, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 1156, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 1159, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 809, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 812, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 813, 506, 507, 508, 509, + 510, 511, 512, 513, 814, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 1335, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 816, 561, 0, 0, + 817, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 818, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 1807, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 1841, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 1843, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 1882, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 1884, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 1886, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 1978, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 2603, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 365, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 0, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 809, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 812, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 813, 506, 507, 508, 509, 510, 511, 512, 513, + 814, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 1335, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 2636, 555, 556, 557, 558, + 0, 559, 816, 561, 0, 0, 817, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 818, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 809, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 365, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 812, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 813, 506, 507, 508, 509, + 510, 511, 512, 513, 2701, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 2702, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 816, 561, 0, 0, + 2703, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 818, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 809, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 365, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 812, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 813, + 506, 507, 508, 509, 510, 511, 512, 513, 2780, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 2702, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 816, 561, 0, 0, 2703, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 818, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 809, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 812, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 813, 506, 507, 508, 509, 510, 511, + 512, 513, 2797, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 2702, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 816, 561, 0, 0, 2703, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 818, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 2990, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 2994, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 3052, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 3408, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 809, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 322, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 812, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 813, 506, 507, 508, 509, 510, 511, + 512, 513, 814, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 2702, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 816, 561, 0, 0, 2703, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 818, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 3465, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 359, 360, 0, 361, 362, 363, + 364, 3479, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 621, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 0, 253, 254, 255, 256, 257, 0, 259, + 260, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 270, 271, 272, 0, 273, 274, 275, + 276, 277, 0, 0, 0, 279, 280, 281, 282, 283, + 284, 0, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 0, 296, 297, 298, 0, 0, 0, + 0, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 0, 342, 0, 343, 344, 345, + 346, 347, 0, 348, 0, 349, 0, 0, 0, 352, + 353, 354, 355, 0, 356, 357, 0, 358, 359, 360, + 0, 361, 362, 363, 364, 3481, 0, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 0, 380, 381, 382, 383, 384, 385, 386, 0, + 387, 0, 388, 0, 0, 391, 0, 393, 394, 395, + 396, 397, 0, 0, 398, 399, 0, 401, 0, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 0, 435, 436, 0, 438, 0, + 439, 440, 441, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 452, 0, + 454, 0, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 468, 469, 470, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 0, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 527, + 528, 529, 0, 531, 532, 533, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 0, 550, 551, 0, 552, 0, 554, + 555, 556, 557, 558, 0, 559, 560, 561, 0, 0, + 562, 563, 564, 565, 566, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 585, 586, + 0, 587, 0, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, + 235, 236, 237, 238, 239, 240, 241, 0, 242, 243, + 244, 0, 0, 0, 0, 0, 0, 0, 245, 246, + 247, 0, 248, 249, 250, 251, 0, 253, 254, 255, + 256, 257, 0, 259, 260, 0, 261, 262, 263, 264, + 265, 266, 267, 0, 0, 268, 269, 270, 271, 272, + 0, 273, 274, 275, 276, 277, 0, 0, 0, 279, + 280, 281, 282, 283, 284, 0, 286, 287, 288, 0, + 289, 290, 291, 292, 293, 294, 0, 0, 296, 297, + 298, 0, 0, 0, 0, 0, 0, 0, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 0, 309, 0, + 310, 311, 312, 313, 314, 315, 316, 0, 317, 318, + 319, 320, 0, 0, 321, 322, 323, 324, 325, 0, + 326, 327, 328, 0, 329, 330, 331, 0, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 0, 342, + 0, 343, 344, 345, 346, 347, 0, 348, 0, 349, + 0, 0, 0, 352, 353, 354, 355, 0, 356, 357, + 0, 358, 359, 360, 0, 361, 362, 363, 364, 3625, + 0, 367, 368, 369, 370, 0, 371, 372, 373, 374, + 375, 376, 377, 0, 378, 0, 380, 381, 382, 383, + 384, 385, 386, 0, 387, 0, 388, 0, 0, 391, + 0, 393, 394, 395, 396, 397, 0, 0, 398, 399, + 0, 401, 0, 0, 403, 404, 405, 0, 0, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 0, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 0, 435, + 436, 0, 438, 0, 439, 440, 441, 442, 443, 444, + 0, 445, 446, 0, 0, 447, 448, 449, 0, 0, + 450, 451, 452, 0, 454, 0, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 0, 466, 467, 468, + 469, 470, 471, 472, 473, 0, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 0, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 0, 502, 503, 0, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 520, 521, 522, 523, 524, + 0, 525, 526, 527, 528, 529, 0, 531, 532, 533, + 534, 0, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 0, 550, 551, + 0, 552, 0, 554, 555, 556, 557, 558, 0, 559, + 560, 561, 0, 0, 562, 563, 564, 565, 566, 0, + 567, 568, 569, 570, 571, 572, 573, 574, 0, 0, + 575, 576, 577, 578, 579, 0, 0, 580, 581, 582, + 583, 584, 585, 586, 0, 587, 0, 589, 590, 591, + 592, 0, 0, 593, 0, 0, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 621, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 236, 237, 238, 239, 240, + 241, 0, 242, 243, 244, 0, 0, 0, 0, 0, + 0, 0, 245, 246, 247, 0, 248, 249, 250, 251, + 0, 253, 254, 255, 256, 257, 0, 259, 260, 0, + 261, 262, 263, 264, 265, 266, 267, 0, 0, 268, + 269, 270, 271, 272, 0, 273, 274, 275, 276, 277, + 0, 0, 0, 279, 280, 281, 282, 283, 284, 0, + 286, 287, 288, 0, 289, 290, 291, 292, 293, 294, + 0, 0, 296, 297, 298, 0, 0, 0, 0, 0, + 0, 0, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 0, 309, 0, 310, 311, 312, 313, 314, 315, + 316, 0, 317, 318, 319, 320, 0, 0, 321, 3665, + 323, 324, 325, 0, 326, 327, 328, 0, 329, 330, + 331, 0, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 0, 342, 0, 343, 344, 345, 346, 347, + 0, 348, 0, 349, 0, 0, 0, 352, 353, 354, + 355, 0, 356, 357, 0, 358, 359, 360, 0, 361, + 362, 363, 364, 365, 0, 367, 368, 369, 370, 0, + 371, 372, 373, 374, 375, 376, 377, 0, 378, 0, + 380, 381, 382, 383, 384, 385, 386, 0, 387, 0, + 388, 0, 0, 391, 0, 393, 394, 395, 396, 397, + 0, 0, 398, 399, 0, 401, 0, 0, 403, 404, + 405, 0, 0, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 0, 435, 436, 0, 438, 0, 439, 440, + 441, 442, 443, 444, 0, 445, 446, 0, 0, 447, + 448, 449, 0, 0, 450, 451, 452, 0, 454, 0, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 0, 466, 467, 468, 469, 470, 471, 472, 473, 0, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 0, + 502, 503, 0, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 520, + 521, 522, 523, 524, 0, 525, 526, 527, 528, 529, + 0, 531, 532, 533, 534, 0, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 0, 550, 551, 0, 552, 0, 554, 555, 556, + 557, 558, 0, 559, 560, 561, 0, 0, 562, 563, + 564, 565, 566, 0, 567, 568, 569, 570, 571, 572, + 573, 574, 0, 0, 575, 576, 577, 578, 579, 0, + 0, 580, 581, 582, 583, 584, 585, 586, 0, 587, + 0, 589, 590, 591, 592, 0, 0, 593, 0, 0, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 234, 235, 236, + 237, 238, 239, 240, 241, 0, 242, 243, 244, 0, + 0, 0, 0, 0, 0, 0, 245, 246, 247, 0, + 248, 249, 250, 251, 0, 253, 254, 255, 256, 257, + 0, 259, 260, 0, 261, 262, 263, 264, 265, 266, + 267, 0, 0, 268, 269, 270, 271, 272, 0, 273, + 274, 275, 276, 277, 0, 0, 0, 279, 280, 281, + 282, 283, 284, 0, 286, 287, 288, 0, 289, 290, + 291, 292, 293, 294, 0, 0, 296, 297, 298, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 0, 309, 0, 310, 311, + 312, 313, 314, 315, 316, 0, 317, 318, 319, 320, + 0, 0, 321, 322, 323, 324, 325, 0, 326, 327, + 328, 0, 329, 330, 331, 0, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 0, 342, 0, 343, + 344, 345, 346, 347, 0, 348, 0, 349, 0, 0, + 0, 352, 353, 354, 355, 0, 356, 357, 0, 358, + 359, 360, 0, 361, 362, 363, 364, 4831, 0, 367, + 368, 369, 370, 0, 371, 372, 373, 374, 375, 376, + 377, 0, 378, 0, 380, 381, 382, 383, 384, 385, + 386, 0, 387, 0, 388, 0, 0, 391, 0, 393, + 394, 395, 396, 397, 0, 0, 398, 399, 0, 401, + 0, 0, 403, 404, 405, 0, 0, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 0, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 0, 435, 436, 0, + 438, 0, 439, 440, 441, 442, 443, 444, 0, 445, + 446, 0, 0, 447, 448, 449, 0, 0, 450, 451, + 452, 0, 454, 0, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 0, 466, 467, 468, 469, 470, + 471, 472, 473, 0, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 0, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 0, 502, 503, 0, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 520, 521, 522, 523, 524, 0, 525, + 526, 527, 528, 529, 0, 531, 532, 533, 534, 0, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 0, 550, 551, 0, 552, + 0, 554, 555, 556, 557, 558, 0, 559, 560, 561, + 0, 0, 562, 563, 564, 565, 566, 0, 567, 568, + 569, 570, 571, 572, 573, 574, 0, 0, 575, 576, + 577, 578, 579, 0, 0, 580, 581, 582, 583, 584, + 585, 586, 0, 587, 0, 589, 590, 591, 592, 0, + 0, 593, 0, 0, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 845, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 252, 253, + 254, 255, 0, 846, 258, 847, 848, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 849, + 850, 272, 0, 273, 274, 275, 276, 0, 0, 278, + 0, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 295, + 296, 297, 298, 0, 0, 0, 299, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 851, 852, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 853, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 0, 337, 338, 339, 340, 0, + 0, 342, 0, 343, 344, 345, 854, 347, 0, 348, + 0, 349, 350, 0, 351, 352, 353, 354, 355, 0, + 356, 0, 0, 0, 359, 360, 0, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 2611, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 379, 2612, 381, + 382, 383, 384, 855, 856, 0, 857, 0, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 0, 0, + 398, 0, 400, 401, 402, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 858, 423, 859, + 425, 426, 427, 428, 429, 430, 431, 0, 0, 434, + 0, 435, 436, 437, 438, 0, 0, 440, 860, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 2614, 453, 454, 455, 0, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 0, 466, + 467, 0, 469, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 861, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 504, 505, 506, 507, 508, 509, 0, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 2615, 528, 529, 530, 531, + 532, 863, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 0, 549, 0, + 550, 551, 0, 552, 553, 554, 555, 556, 557, 558, + 0, 559, 864, 865, 0, 0, 562, 563, 0, 565, + 0, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 0, 866, 2616, 587, 588, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 621, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 612, 613, 0, 0, + 0, 234, 235, 236, 237, 238, 239, 240, 241, 0, + 242, 243, 244, 0, 0, 0, 0, 0, 0, 0, + 245, 246, 247, 0, 248, 249, 250, 251, 0, 253, + 254, 255, 256, 257, 0, 259, 260, 0, 261, 262, + 263, 264, 265, 266, 267, 0, 0, 268, 269, 270, + 271, 272, 0, 273, 274, 275, 276, 277, 0, 0, + 0, 279, 280, 281, 282, 283, 284, 0, 286, 287, + 288, 0, 289, 290, 291, 292, 293, 294, 0, 0, + 296, 297, 298, 0, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 0, + 309, 0, 310, 311, 312, 313, 314, 315, 316, 0, + 317, 318, 319, 320, 0, 0, 321, 322, 323, 324, + 325, 0, 326, 327, 328, 0, 329, 330, 331, 0, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 0, 342, 0, 343, 344, 345, 346, 347, 0, 348, + 0, 349, 0, 0, 0, 352, 353, 354, 355, 0, + 356, 357, 0, 358, 0, 360, 0, 361, 362, 363, + 364, 365, 0, 367, 368, 369, 370, 0, 371, 372, + 373, 374, 375, 376, 377, 0, 378, 0, 380, 381, + 382, 383, 384, 385, 386, 0, 387, 0, 388, 0, + 0, 391, 0, 393, 394, 395, 396, 397, 0, 0, + 398, 399, 0, 401, 0, 0, 403, 404, 405, 0, + 0, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 0, 435, 436, 0, 438, 0, 439, 440, 441, 442, + 443, 444, 0, 445, 446, 0, 0, 447, 448, 449, + 0, 0, 450, 451, 452, 0, 454, 0, 456, 457, + 458, 459, 460, 461, 462, 0, 464, 465, 0, 466, + 467, 468, 469, 470, 471, 472, 473, 0, 474, 475, + 476, 477, 478, 479, 480, 481, 0, 483, 484, 485, + 486, 487, 488, 0, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 0, 502, 503, + 0, 505, 506, 507, 508, 509, 510, 0, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 520, 521, 522, + 523, 524, 0, 525, 526, 527, 528, 529, 0, 531, + 532, 533, 534, 0, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 0, + 550, 551, 0, 552, 0, 554, 555, 556, 557, 558, + 0, 559, 560, 561, 0, 0, 562, 563, 564, 565, + 566, 0, 567, 568, 569, 570, 571, 572, 573, 574, + 0, 0, 575, 576, 577, 578, 579, 0, 0, 580, + 581, 582, 583, 584, 585, 586, 0, 587, 0, 589, + 590, 591, 592, 0, 0, 593, 0, 0, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 2697, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 2615, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 4388, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 2770, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 862, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 4192, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 862, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 5639, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 862, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 862, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 1115, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 862, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 1147, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 862, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 2615, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 846, 258, 847, + 848, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 849, 850, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 851, 852, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 853, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 854, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 855, 856, 0, + 857, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 858, 423, 859, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 860, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 861, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 0, + 528, 529, 530, 531, 532, 863, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 864, 865, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 866, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 845, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613, 0, 0, 0, 234, 235, 236, 237, 238, + 239, 240, 241, 0, 242, 243, 244, 0, 0, 0, + 0, 0, 0, 0, 245, 246, 247, 0, 248, 249, + 250, 251, 252, 253, 254, 255, 0, 0, 258, 0, + 0, 0, 261, 262, 263, 264, 265, 266, 267, 0, + 0, 268, 269, 0, 0, 272, 0, 273, 274, 275, + 276, 0, 0, 278, 0, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 0, 289, 290, 291, 292, + 293, 294, 0, 295, 296, 297, 298, 0, 0, 0, + 299, 0, 0, 0, 300, 301, 302, 303, 304, 305, + 0, 0, 308, 0, 309, 0, 310, 311, 312, 313, + 314, 315, 316, 0, 317, 318, 319, 320, 0, 0, + 321, 322, 323, 324, 325, 0, 326, 327, 328, 0, + 329, 330, 331, 0, 332, 333, 334, 335, 0, 337, + 338, 339, 340, 0, 0, 342, 0, 343, 344, 345, + 0, 347, 0, 348, 0, 349, 350, 0, 351, 352, + 353, 354, 355, 0, 356, 0, 0, 0, 359, 360, + 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 0, 371, 372, 373, 374, 375, 376, 377, 0, + 378, 379, 0, 381, 382, 383, 384, 0, 0, 0, + 0, 0, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 0, 0, 398, 0, 400, 401, 402, 0, + 403, 404, 405, 0, 0, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 0, 423, 0, 425, 426, 427, 428, 429, 430, + 431, 0, 0, 434, 0, 435, 436, 437, 438, 0, + 0, 440, 0, 442, 443, 444, 0, 445, 446, 0, + 0, 447, 448, 449, 0, 0, 450, 451, 0, 453, + 454, 455, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 0, 466, 467, 0, 469, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 0, 485, 486, 487, 488, 0, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 0, 502, 503, 504, 505, 506, 507, 508, 509, + 0, 511, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 520, 521, 522, 523, 524, 0, 525, 526, 0, + 528, 529, 530, 531, 532, 0, 534, 0, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 0, 549, 0, 550, 551, 0, 552, 553, 554, + 555, 556, 557, 558, 0, 559, 0, 0, 0, 0, + 562, 563, 0, 565, 0, 0, 567, 568, 569, 570, + 571, 572, 573, 574, 0, 0, 575, 576, 577, 578, + 579, 0, 0, 580, 581, 582, 583, 584, 0, 0, + 0, 587, 588, 589, 590, 591, 592, 0, 0, 593, + 0, 0, 594, 595, 596, 597, 598, 599, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 612, 613 +}; + +static const yytype_int16 yycheck[] = +{ + 6, 0, 1004, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 56, 210, 0, 205, 0, + 649, 0, 1006, 0, 21, 21, 213, 210, 976, 216, + 0, 1012, 188, 760, 761, 762, 943, 8, 45, 766, + 906, 810, 1127, 704, 15, 51, 1599, 807, 993, 1472, + 862, 6, 880, 900, 36, 902, 1002, 718, 22, 2598, + 977, 786, 1188, 2965, 28, 1008, 628, 2599, 1511, 1077, + 851, 852, 2937, 196, 1518, 1534, 681, 1230, 1218, 860, + 817, 833, 3003, 3259, 1523, 3261, 1837, 726, 215, 917, + 1445, 3740, 865, 44, 3086, 1518, 3350, 1966, 976, 3442, + 832, 1666, 229, 3767, 4093, 1012, 1051, 985, 3469, 1984, + 1055, 4047, 942, 2856, 3789, 1060, 23, 995, 3495, 681, + 3497, 2619, 2620, 3756, 3109, 1070, 3691, 630, 3310, 36, + 2835, 2029, 1403, 4558, 4136, 2950, 3304, 967, 1083, 3359, + 4089, 702, 972, 1501, 705, 727, 2, 4364, 4376, 717, + 4171, 4322, 175, 35, 4359, 2478, 1511, 1908, 1066, 2482, + 42, 3324, 4574, 190, 4576, 5140, 728, 50, 41, 1114, + 2515, 4861, 2583, 1081, 1633, 1634, 4655, 3369, 2585, 190, + 4812, 3216, 3309, 3754, 3311, 4622, 4069, 5176, 1627, 5188, + 196, 903, 4363, 926, 0, 903, 928, 0, 5411, 205, + 206, 5055, 0, 1561, 0, 37, 1484, 213, 813, 215, + 216, 849, 850, 839, 6, 1654, 5395, 2562, 4500, 62, + 1578, 859, 784, 229, 2902, 4869, 2904, 2905, 4860, 6, + 53, 2909, 2910, 2911, 967, 2913, 2914, 2915, 46, 972, + 93, 11, 5096, 6, 46, 0, 24, 6, 13, 34, + 6, 813, 15, 16, 28, 31, 118, 0, 6, 42, + 2556, 6, 5103, 5104, 6, 0, 21, 6, 11, 6, + 15, 16, 6, 224, 62, 837, 11, 28, 15, 16, + 79, 42, 172, 6, 1016, 28, 13, 84, 722, 90, + 28, 6, 6, 28, 6, 6, 1464, 35, 145, 6, + 189, 56, 179, 31, 172, 62, 3, 172, 5, 6, + 152, 120, 79, 5, 11, 196, 120, 44, 1045, 11, + 111, 11, 62, 90, 3444, 6, 118, 173, 196, 5128, + 62, 15, 172, 184, 6, 897, 6, 28, 167, 2006, + 151, 285, 75, 5, 35, 5297, 28, 172, 279, 11, + 77, 4353, 265, 35, 62, 318, 4377, 188, 284, 270, + 138, 151, 41, 67, 174, 1090, 172, 174, 28, 172, + 13, 323, 290, 304, 172, 285, 172, 4856, 5591, 300, + 172, 4449, 4450, 4451, 179, 4453, 4454, 4455, 4456, 4457, + 196, 90, 172, 196, 372, 62, 62, 331, 196, 62, + 196, 1347, 77, 5582, 28, 111, 285, 1415, 330, 122, + 304, 220, 413, 118, 265, 355, 1359, 338, 249, 1403, + 265, 118, 79, 164, 5413, 79, 300, 148, 1067, 172, + 79, 118, 172, 90, 164, 190, 3, 172, 1345, 447, + 415, 172, 269, 1350, 1351, 359, 456, 274, 1562, 31, + 1012, 372, 492, 196, 5029, 123, 284, 497, 5312, 499, + 269, 196, 5037, 123, 1407, 1579, 649, 1248, 1249, 479, + 79, 13, 79, 1134, 388, 22, 58, 6, 325, 286, + 167, 1206, 79, 125, 459, 10, 1425, 5177, 1269, 497, + 343, 501, 17, 18, 19, 435, 226, 324, 372, 13, + 501, 344, 44, 5134, 217, 1116, 1279, 123, 442, 133, + 320, 1122, 456, 234, 5727, 194, 699, 326, 215, 260, + 647, 1132, 89, 501, 435, 1136, 653, 449, 172, 1140, + 44, 1142, 363, 1194, 497, 77, 1162, 1148, 665, 172, + 237, 172, 210, 1154, 1205, 497, 1157, 5499, 413, 282, + 210, 461, 140, 497, 224, 71, 344, 308, 1219, 265, + 5359, 265, 475, 77, 375, 341, 497, 1299, 13, 274, + 1513, 497, 111, 413, 90, 142, 497, 456, 369, 355, + 3700, 357, 1489, 501, 391, 375, 1168, 344, 456, 5001, + 441, 113, 1499, 274, 372, 1327, 441, 5810, 50, 1237, + 1238, 5590, 274, 497, 151, 413, 4171, 497, 497, 1487, + 452, 36, 344, 341, 413, 398, 367, 418, 1223, 359, + 501, 413, 628, 1404, 501, 487, 1264, 401, 413, 5808, + 427, 4196, 1800, 149, 442, 439, 344, 398, 634, 634, + 442, 647, 418, 634, 382, 634, 413, 653, 501, 1594, + 497, 497, 1597, 169, 405, 634, 407, 435, 501, 665, + 1568, 1223, 1664, 1665, 5877, 497, 188, 4949, 497, 2965, + 5301, 1549, 1298, 240, 497, 681, 501, 344, 344, 1586, + 686, 344, 1589, 1590, 4333, 691, 5527, 728, 1605, 695, + 696, 382, 501, 118, 500, 487, 702, 500, 704, 705, + 382, 5914, 500, 1981, 500, 365, 501, 499, 448, 732, + 1618, 717, 718, 501, 413, 5405, 1662, 497, 4601, 1549, + 497, 1433, 728, 446, 4373, 1433, 496, 249, 493, 5718, + 252, 727, 5731, 300, 497, 4096, 495, 1342, 497, 4372, + 499, 497, 1380, 1381, 501, 488, 489, 458, 1374, 497, + 906, 458, 497, 488, 489, 497, 413, 500, 497, 413, + 497, 286, 111, 497, 413, 500, 493, 435, 479, 501, + 501, 5746, 479, 1585, 497, 435, 1509, 741, 784, 743, + 1342, 745, 497, 497, 755, 497, 497, 751, 1350, 1351, + 497, 488, 489, 501, 456, 437, 488, 489, 488, 489, + 316, 807, 808, 487, 413, 1671, 413, 813, 355, 5663, + 1936, 495, 4377, 1439, 1798, 499, 413, 479, 24, 435, + 495, 772, 5676, 5812, 499, 1910, 488, 489, 375, 1562, + 4012, 837, 1026, 839, 501, 501, 1023, 404, 501, 406, + 1027, 363, 1029, 1026, 24, 87, 1579, 490, 491, 492, + 493, 118, 4423, 5290, 4922, 4023, 862, 501, 1943, 4027, + 389, 390, 401, 3898, 452, 290, 5497, 894, 501, 1954, + 501, 5502, 3864, 1780, 3372, 62, 3374, 29, 884, 634, + 3585, 3586, 833, 894, 4011, 3590, 4013, 5876, 130, 4081, + 111, 897, 71, 345, 1017, 62, 5586, 896, 304, 896, + 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, + 896, 51, 3727, 896, 430, 896, 184, 896, 3329, 896, + 919, 3, 4283, 3330, 355, 290, 896, 1556, 3273, 216, + 5409, 5785, 138, 28, 1368, 6, 284, 5569, 811, 4282, + 101, 359, 815, 6, 181, 5589, 488, 489, 490, 491, + 492, 493, 474, 5585, 5747, 24, 167, 840, 138, 910, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 5944, + 149, 273, 727, 728, 925, 497, 490, 491, 492, 493, + 10, 1484, 24, 13, 172, 122, 359, 17, 18, 19, + 169, 3669, 372, 112, 13, 169, 5167, 3, 1004, 1005, + 1006, 3, 123, 24, 6, 3301, 1012, 89, 3304, 30, + 123, 1017, 5348, 37, 5350, 200, 1022, 1023, 5354, 5355, + 181, 1027, 2793, 1029, 279, 166, 300, 1033, 118, 5719, + 174, 298, 458, 4196, 290, 59, 299, 3360, 133, 112, + 1983, 5030, 1048, 488, 489, 490, 491, 492, 493, 304, + 5071, 191, 401, 479, 3350, 5467, 196, 632, 77, 211, + 302, 143, 487, 207, 338, 4408, 497, 2006, 2052, 138, + 495, 120, 497, 498, 499, 2014, 501, 379, 265, 497, + 217, 200, 87, 2026, 5728, 1091, 110, 1093, 1094, 210, + 4344, 497, 27, 233, 300, 39, 138, 210, 365, 981, + 982, 2872, 32, 33, 265, 5898, 279, 10, 288, 53, + 13, 113, 118, 350, 17, 18, 19, 138, 87, 1846, + 202, 501, 24, 285, 497, 130, 118, 200, 1134, 340, + 285, 304, 338, 498, 401, 10, 501, 316, 13, 894, + 24, 896, 17, 18, 19, 10, 30, 495, 13, 724, + 120, 499, 17, 18, 19, 90, 1162, 344, 5160, 34, + 5377, 130, 342, 343, 406, 109, 372, 97, 183, 34, + 311, 220, 1168, 441, 5818, 199, 443, 344, 5822, 269, + 401, 173, 1951, 1952, 113, 372, 188, 117, 1194, 456, + 5407, 4093, 372, 3691, 4858, 5423, 4845, 1203, 5403, 1205, + 1171, 1763, 1173, 274, 1175, 5376, 1177, 4882, 1179, 1180, + 1181, 274, 479, 1219, 501, 1186, 401, 1223, 4851, 1880, + 269, 148, 152, 247, 306, 413, 250, 802, 279, 1235, + 497, 5875, 86, 1894, 440, 5406, 138, 377, 26, 174, + 359, 265, 497, 1099, 6, 501, 1907, 249, 2687, 410, + 252, 430, 365, 304, 138, 4616, 286, 1298, 300, 188, + 1266, 49, 34, 269, 2619, 209, 3, 372, 274, 359, + 174, 5915, 1883, 350, 2718, 299, 5612, 326, 270, 300, + 1891, 400, 401, 2554, 3782, 90, 359, 214, 1294, 1295, + 1296, 2023, 1298, 196, 456, 5939, 338, 302, 5942, 487, + 421, 456, 401, 373, 274, 1873, 5738, 110, 184, 163, + 325, 499, 1318, 118, 435, 218, 1877, 338, 173, 343, + 249, 265, 435, 252, 497, 2764, 2891, 400, 401, 246, + 372, 1892, 381, 302, 1895, 5760, 1342, 1905, 1920, 5288, + 1363, 356, 366, 218, 1350, 1351, 428, 97, 152, 2707, + 184, 372, 89, 218, 436, 131, 1982, 439, 1984, 436, + 372, 363, 386, 290, 1990, 141, 63, 3265, 1374, 120, + 1996, 1997, 1998, 1556, 71, 2004, 223, 4559, 497, 4599, + 152, 2007, 286, 286, 1945, 320, 2012, 1948, 1949, 265, + 5392, 1418, 1419, 5825, 1421, 4563, 501, 1403, 300, 5401, + 4568, 406, 175, 4571, 334, 142, 152, 1418, 1419, 315, + 1421, 286, 288, 1168, 1420, 315, 300, 361, 1424, 1425, + 97, 286, 357, 211, 222, 24, 196, 497, 178, 2982, + 249, 265, 4809, 1439, 363, 365, 338, 406, 437, 1445, + 117, 415, 4434, 4345, 247, 437, 497, 250, 303, 5451, + 123, 3, 4444, 290, 338, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 269, 138, 300, 265, 4389, 220, + 372, 401, 474, 25, 498, 152, 1231, 2479, 1981, 1913, + 121, 416, 401, 418, 1435, 400, 497, 422, 372, 501, + 89, 5923, 3159, 3160, 5724, 5725, 1251, 3164, 497, 728, + 167, 5490, 429, 240, 338, 1511, 5071, 456, 1942, 415, + 288, 178, 1946, 443, 5178, 415, 1950, 447, 269, 1953, + 338, 436, 300, 378, 300, 362, 456, 0, 1283, 196, + 5816, 5817, 131, 5166, 3201, 3202, 437, 89, 2481, 138, + 237, 38, 141, 1298, 363, 474, 1552, 372, 321, 479, + 413, 192, 501, 459, 133, 784, 135, 243, 3001, 459, + 338, 365, 338, 300, 5500, 441, 57, 497, 338, 5571, + 2554, 1570, 342, 372, 121, 326, 1575, 375, 497, 1585, + 243, 354, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 143, 243, 4271, 367, 413, 497, 401, 4276, 175, + 24, 338, 372, 121, 4309, 342, 30, 441, 837, 4352, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 365, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 402, + 5916, 128, 15, 16, 2573, 372, 127, 435, 501, 443, + 313, 4346, 2997, 1649, 196, 192, 3001, 340, 5878, 1648, + 202, 357, 456, 1652, 4556, 401, 120, 334, 1664, 1665, + 1666, 2642, 51, 1418, 1419, 177, 1421, 404, 897, 406, + 448, 500, 1623, 4171, 192, 479, 501, 743, 744, 745, + 28, 348, 748, 749, 750, 118, 456, 456, 365, 161, + 269, 1878, 758, 497, 161, 1889, 359, 443, 4196, 437, + 167, 300, 501, 167, 300, 1888, 1889, 357, 359, 479, + 456, 71, 418, 5715, 138, 355, 161, 77, 404, 456, + 161, 5657, 155, 355, 401, 237, 167, 4023, 71, 456, + 90, 4027, 501, 479, 82, 334, 501, 85, 413, 338, + 204, 404, 338, 91, 1867, 5394, 265, 433, 5412, 447, + 34, 497, 173, 404, 306, 387, 189, 1763, 118, 497, + 120, 401, 234, 456, 148, 2749, 443, 234, 418, 1775, + 433, 119, 458, 372, 501, 118, 372, 161, 354, 456, + 1786, 318, 433, 167, 360, 206, 479, 298, 5421, 234, + 2774, 367, 1798, 234, 418, 458, 1802, 4093, 350, 497, + 221, 265, 479, 2615, 5806, 269, 5905, 458, 501, 281, + 231, 497, 487, 487, 281, 1821, 176, 92, 330, 338, + 497, 2004, 177, 1829, 499, 499, 402, 2596, 176, 4997, + 214, 1837, 5821, 176, 497, 150, 269, 365, 458, 2717, + 281, 189, 206, 299, 204, 4657, 497, 399, 424, 1855, + 234, 215, 4664, 201, 365, 2803, 5955, 458, 1864, 479, + 135, 1867, 5205, 299, 1870, 229, 300, 1873, 1874, 330, + 5872, 1877, 1878, 401, 1880, 1881, 428, 497, 479, 4377, + 5068, 2865, 237, 198, 436, 299, 1892, 439, 1894, 1895, + 401, 246, 405, 405, 407, 407, 497, 281, 1904, 1905, + 2807, 1907, 1908, 2514, 338, 366, 290, 2533, 2815, 269, + 10, 2818, 456, 13, 274, 443, 372, 17, 18, 19, + 5584, 433, 300, 5111, 1920, 2803, 269, 5602, 349, 4914, + 5919, 274, 443, 4835, 34, 479, 372, 449, 372, 1945, + 401, 3026, 1948, 1949, 2852, 456, 4811, 2931, 168, 342, + 5583, 1922, 343, 1924, 278, 1926, 316, 1928, 372, 1930, + 338, 5314, 2840, 1934, 342, 243, 5319, 5320, 479, 497, + 1966, 1966, 332, 316, 243, 1966, 1982, 1966, 1984, 372, + 300, 372, 202, 1989, 1990, 4850, 497, 1966, 449, 332, + 1996, 1997, 1998, 1975, 372, 2001, 2874, 2003, 5375, 2005, + 2006, 2007, 2008, 2009, 2010, 3880, 2012, 342, 2014, 2015, + 1961, 13, 2018, 300, 3369, 4830, 3459, 3570, 338, 2885, + 2886, 2887, 243, 5199, 3379, 2855, 2032, 2033, 2034, 2035, + 300, 2783, 2784, 172, 148, 2787, 3189, 372, 2946, 5024, + 388, 5026, 44, 391, 2050, 429, 2052, 161, 4344, 4345, + 405, 338, 407, 167, 2715, 1570, 5720, 196, 300, 453, + 1575, 2969, 2970, 2971, 2972, 5426, 2974, 1974, 338, 110, + 430, 222, 3823, 3018, 405, 77, 407, 259, 433, 243, + 2642, 359, 79, 3648, 5733, 372, 449, 430, 338, 3654, + 359, 2999, 334, 90, 4799, 4773, 338, 4775, 4776, 4777, + 214, 283, 372, 1169, 3459, 5448, 1172, 501, 1174, 355, + 1176, 357, 1178, 330, 265, 5017, 1182, 456, 218, 362, + 234, 120, 372, 338, 413, 1819, 404, 168, 5030, 326, + 372, 148, 971, 1648, 4003, 404, 167, 1652, 359, 167, + 479, 79, 339, 5504, 161, 1839, 5400, 5811, 437, 366, + 167, 990, 90, 3592, 993, 433, 224, 372, 497, 190, + 5, 202, 190, 497, 433, 1920, 11, 281, 5, 3076, + 10, 368, 418, 13, 11, 326, 290, 17, 18, 19, + 458, 5357, 19, 404, 401, 37, 286, 2193, 248, 458, + 133, 243, 135, 2945, 34, 359, 3180, 214, 3637, 47, + 37, 497, 3186, 499, 37, 204, 247, 59, 246, 250, + 3363, 1966, 433, 167, 495, 26, 159, 234, 499, 497, + 3159, 3160, 70, 5215, 375, 3164, 59, 2233, 497, 90, + 497, 269, 449, 5, 418, 243, 190, 458, 49, 11, + 404, 6, 3909, 3910, 3911, 3912, 68, 69, 3915, 3916, + 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 110, 495, + 4556, 497, 3201, 3202, 281, 2992, 265, 4563, 5917, 433, + 269, 340, 4568, 290, 148, 4571, 497, 110, 2284, 497, + 3406, 499, 5, 647, 435, 456, 5188, 161, 11, 653, + 492, 365, 22, 167, 458, 497, 362, 499, 28, 5660, + 498, 665, 691, 501, 3763, 3972, 3973, 359, 479, 2547, + 2548, 2549, 2951, 5489, 271, 429, 177, 496, 261, 262, + 263, 264, 501, 94, 176, 268, 269, 401, 717, 10, + 496, 274, 13, 497, 5039, 501, 17, 18, 19, 200, + 214, 967, 246, 284, 5246, 284, 972, 199, 289, 246, + 289, 359, 404, 495, 200, 497, 37, 499, 190, 3266, + 234, 261, 262, 263, 264, 3172, 199, 3174, 3175, 443, + 498, 498, 498, 501, 501, 501, 237, 86, 218, 3104, + 3105, 433, 456, 32, 33, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 3260, 247, 404, 2831, 250, 2833, + 456, 243, 458, 2837, 3015, 479, 458, 281, 365, 3020, + 449, 3022, 429, 265, 247, 418, 290, 250, 5779, 498, + 248, 3032, 501, 497, 3035, 433, 3037, 3038, 289, 58, + 3041, 196, 265, 405, 3045, 407, 3047, 362, 5116, 3050, + 205, 355, 356, 2198, 401, 497, 286, 299, 213, 497, + 458, 216, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, + 2466, 498, 2468, 456, 501, 458, 299, 2016, 243, 498, + 2019, 2477, 501, 2479, 355, 356, 498, 420, 495, 501, + 498, 498, 499, 501, 2678, 405, 443, 407, 431, 497, + 2677, 343, 2679, 2680, 498, 2678, 447, 501, 498, 456, + 3111, 501, 498, 5864, 224, 501, 498, 5428, 11, 501, + 343, 2517, 3285, 3286, 366, 2521, 497, 359, 2524, 2516, + 2526, 498, 479, 2529, 501, 284, 3263, 2533, 3445, 498, + 355, 356, 501, 366, 386, 3161, 133, 218, 135, 4835, + 497, 498, 3370, 500, 405, 359, 407, 3173, 2554, 498, + 2556, 2674, 501, 386, 3471, 429, 498, 418, 498, 501, + 497, 501, 404, 498, 5627, 5628, 501, 2573, 3446, 430, + 501, 498, 433, 5071, 501, 498, 2582, 2583, 501, 3205, + 5753, 5754, 498, 3315, 359, 501, 5291, 2714, 5490, 498, + 4143, 433, 501, 3222, 5299, 498, 58, 98, 501, 3380, + 5776, 2556, 2608, 4354, 498, 286, 2601, 501, 498, 2615, + 449, 501, 498, 2619, 2620, 501, 458, 270, 271, 98, + 2626, 456, 3248, 458, 2630, 47, 3752, 498, 2634, 404, + 501, 220, 498, 1022, 4301, 501, 2642, 86, 498, 3073, + 498, 501, 500, 3521, 1033, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 2660, 497, 476, 2663, 433, 1048, + 498, 287, 2644, 501, 2646, 2792, 355, 356, 2674, 5654, + 2676, 2677, 173, 2679, 2680, 498, 2682, 500, 2642, 3994, + 4119, 3996, 4141, 458, 4143, 4547, 5588, 4549, 2694, 4133, + 54, 55, 498, 5191, 173, 501, 498, 498, 284, 501, + 501, 4997, 499, 287, 3266, 206, 3690, 498, 2714, 2715, + 501, 5887, 365, 498, 167, 498, 501, 2723, 501, 284, + 221, 5017, 497, 3863, 476, 3733, 4081, 206, 498, 287, + 231, 501, 3393, 3394, 5030, 2686, 47, 4176, 498, 2745, + 2746, 501, 221, 2749, 2871, 53, 5278, 498, 401, 3694, + 501, 498, 231, 220, 501, 10, 257, 498, 13, 4028, + 501, 4030, 17, 18, 19, 476, 2772, 2522, 2774, 4979, + 498, 4981, 2778, 501, 133, 490, 135, 171, 257, 2785, + 3688, 498, 5958, 284, 501, 498, 2792, 501, 501, 2795, + 443, 99, 446, 498, 498, 2801, 501, 501, 3409, 498, + 159, 2556, 501, 456, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 497, 1203, 2821, 124, 497, 3423, 498, + 498, 2827, 501, 501, 498, 497, 479, 501, 2834, 5731, + 312, 36, 2783, 2784, 142, 497, 2787, 498, 146, 10, + 501, 2847, 13, 498, 497, 58, 2601, 498, 349, 5714, + 501, 498, 498, 498, 2860, 501, 501, 172, 216, 2865, + 168, 3423, 497, 171, 498, 2871, 2830, 501, 499, 3480, + 349, 3482, 3597, 44, 497, 460, 498, 3538, 186, 501, + 51, 497, 497, 2889, 2890, 2891, 338, 498, 498, 2895, + 501, 501, 5188, 196, 498, 498, 3557, 501, 501, 153, + 499, 497, 261, 262, 263, 264, 77, 4366, 498, 268, + 153, 501, 284, 5815, 4067, 274, 2922, 2923, 196, 5821, + 498, 686, 338, 501, 498, 2931, 153, 501, 284, 3116, + 695, 3118, 3119, 153, 196, 153, 437, 702, 4361, 4382, + 705, 498, 498, 498, 501, 501, 501, 5486, 498, 498, + 5246, 501, 501, 498, 498, 498, 501, 501, 501, 2965, + 3944, 284, 3396, 218, 3871, 167, 274, 338, 4094, 4095, + 3909, 3910, 3911, 3912, 153, 146, 3915, 3916, 3917, 3918, + 3919, 3920, 3921, 3922, 3923, 3924, 232, 120, 284, 2984, + 3113, 2997, 497, 3720, 2945, 3001, 498, 437, 498, 501, + 167, 501, 498, 3942, 498, 501, 278, 501, 3951, 3620, + 2965, 498, 498, 71, 501, 3626, 324, 5919, 498, 269, + 191, 501, 37, 498, 269, 196, 501, 4382, 460, 498, + 167, 286, 501, 3972, 3973, 498, 284, 498, 501, 3222, + 501, 498, 498, 498, 501, 501, 501, 497, 269, 47, + 3711, 3997, 3713, 498, 498, 498, 501, 501, 501, 47, + 498, 420, 233, 501, 498, 498, 269, 501, 501, 423, + 269, 89, 431, 449, 300, 449, 4015, 418, 3084, 167, + 319, 153, 153, 497, 153, 10, 153, 460, 13, 153, + 153, 3696, 501, 3698, 3100, 3847, 3102, 4040, 153, 153, + 153, 153, 153, 3109, 5400, 153, 167, 3113, 153, 3115, + 3116, 153, 3118, 3119, 3120, 286, 153, 153, 4671, 44, + 3161, 153, 3128, 284, 401, 37, 51, 3133, 497, 232, + 284, 497, 167, 4076, 3696, 6, 3698, 167, 6, 167, + 497, 3324, 497, 6, 497, 497, 497, 497, 497, 497, + 6, 497, 77, 3159, 3160, 3161, 6, 497, 3164, 497, + 497, 497, 497, 1552, 3205, 497, 3172, 3173, 3174, 3175, + 497, 497, 6, 497, 3180, 497, 3781, 497, 497, 3185, + 3186, 497, 3188, 497, 3190, 497, 4170, 497, 4172, 457, + 497, 497, 497, 216, 5490, 3201, 3202, 4142, 296, 3205, + 3811, 3862, 3813, 501, 3815, 37, 377, 4651, 501, 101, + 232, 4195, 37, 497, 36, 411, 411, 497, 3224, 3781, + 3226, 146, 3228, 413, 495, 495, 413, 413, 413, 2984, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 172, + 501, 167, 3248, 281, 167, 279, 3253, 3254, 3255, 372, + 67, 413, 1017, 413, 359, 413, 448, 413, 1023, 359, + 3266, 499, 1027, 3304, 1029, 413, 191, 413, 4935, 359, + 234, 196, 413, 413, 413, 487, 90, 359, 3904, 4405, + 153, 284, 229, 4111, 364, 1649, 413, 413, 274, 4196, + 126, 413, 5588, 436, 404, 3301, 304, 4078, 3304, 284, + 279, 413, 413, 497, 189, 3739, 477, 90, 233, 355, + 3316, 126, 3938, 3354, 497, 3321, 300, 488, 489, 490, + 491, 492, 493, 501, 196, 153, 1091, 413, 1093, 1094, + 3336, 437, 413, 437, 4279, 413, 126, 413, 413, 401, + 4257, 401, 112, 413, 3350, 413, 3301, 413, 126, 3304, + 58, 58, 254, 288, 413, 323, 413, 413, 3984, 304, + 323, 286, 4301, 3369, 413, 323, 3372, 304, 3374, 413, + 413, 46, 413, 3379, 413, 404, 46, 501, 498, 218, + 413, 502, 413, 218, 284, 218, 1775, 3393, 3394, 413, + 284, 218, 413, 3399, 413, 3350, 413, 1786, 218, 218, + 218, 4267, 3836, 423, 497, 218, 3161, 218, 218, 37, + 153, 153, 269, 1802, 3420, 284, 118, 3423, 153, 153, + 3426, 437, 448, 153, 284, 269, 269, 269, 3434, 456, + 37, 240, 497, 37, 167, 5731, 224, 361, 153, 153, + 437, 153, 437, 153, 413, 172, 452, 497, 278, 273, + 3205, 254, 377, 3459, 254, 13, 411, 1821, 181, 413, + 189, 501, 162, 415, 10, 1829, 1855, 13, 189, 37, + 363, 252, 3227, 1837, 214, 476, 501, 476, 453, 375, + 285, 1870, 495, 497, 1873, 1874, 497, 497, 3243, 3495, + 3496, 3497, 497, 61, 498, 437, 498, 222, 44, 37, + 293, 0, 498, 58, 498, 51, 498, 498, 3691, 437, + 359, 501, 501, 3519, 497, 1904, 1905, 1881, 498, 5815, + 274, 222, 3528, 4430, 3530, 5821, 4881, 222, 96, 274, + 413, 77, 3538, 413, 413, 497, 167, 274, 284, 47, + 381, 269, 232, 42, 1908, 284, 3301, 232, 232, 3304, + 404, 3557, 477, 5220, 355, 413, 126, 501, 284, 338, + 284, 190, 4501, 488, 489, 490, 491, 492, 493, 326, + 372, 284, 369, 284, 290, 413, 413, 498, 37, 218, + 224, 322, 5249, 487, 437, 437, 153, 279, 167, 157, + 449, 37, 169, 369, 402, 3350, 497, 153, 97, 3354, + 146, 10, 497, 323, 13, 153, 153, 279, 17, 18, + 19, 437, 269, 37, 269, 3621, 456, 284, 26, 284, + 279, 224, 187, 5919, 187, 193, 167, 37, 168, 224, + 167, 369, 284, 269, 196, 196, 196, 3643, 25, 196, + 501, 413, 3648, 2032, 196, 191, 501, 179, 3654, 148, + 196, 497, 4595, 460, 501, 172, 224, 3663, 251, 284, + 456, 229, 161, 58, 278, 172, 4327, 4328, 167, 498, + 501, 305, 296, 172, 172, 498, 268, 498, 476, 178, + 295, 497, 181, 172, 3690, 3691, 185, 233, 181, 501, + 3696, 413, 3698, 497, 4820, 501, 246, 242, 453, 498, + 4512, 269, 284, 498, 498, 3711, 498, 3713, 58, 498, + 501, 498, 498, 498, 498, 214, 498, 216, 498, 479, + 497, 487, 497, 497, 497, 496, 478, 496, 3734, 497, + 435, 4578, 497, 301, 443, 234, 287, 200, 497, 10, + 286, 284, 13, 208, 413, 284, 17, 18, 19, 5172, + 153, 413, 413, 274, 3760, 4662, 156, 413, 269, 153, + 85, 372, 364, 153, 153, 364, 364, 200, 232, 284, + 156, 3766, 413, 44, 342, 3781, 3782, 437, 156, 347, + 51, 487, 281, 501, 234, 284, 306, 306, 356, 434, + 156, 290, 413, 413, 388, 413, 364, 413, 3804, 244, + 244, 244, 126, 413, 372, 413, 77, 3802, 4419, 218, + 359, 4422, 413, 413, 269, 359, 384, 3823, 372, 3770, + 153, 46, 413, 359, 3980, 393, 413, 413, 359, 397, + 4590, 377, 413, 413, 3840, 4446, 4781, 5296, 413, 218, + 498, 218, 184, 3, 498, 498, 496, 346, 416, 498, + 288, 498, 423, 501, 167, 47, 3862, 111, 498, 3865, + 167, 498, 497, 501, 37, 153, 153, 167, 487, 184, + 497, 413, 4498, 279, 153, 359, 3882, 286, 437, 3885, + 359, 359, 359, 451, 437, 3891, 359, 455, 501, 287, + 151, 151, 218, 3899, 369, 3901, 3847, 218, 3904, 398, + 218, 218, 3908, 3909, 3910, 3911, 3912, 218, 218, 3915, + 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 218, + 191, 218, 3928, 3929, 3930, 196, 218, 3933, 144, 495, + 429, 477, 3938, 13, 296, 448, 3942, 3978, 3944, 172, + 3946, 268, 488, 489, 490, 491, 492, 493, 3954, 453, + 294, 3957, 4581, 3959, 453, 221, 455, 456, 221, 291, + 58, 496, 233, 3969, 498, 185, 3972, 3973, 501, 498, + 498, 3977, 3978, 498, 498, 501, 498, 403, 3984, 3986, + 3987, 3988, 3989, 410, 498, 497, 346, 4648, 4171, 498, + 4424, 4425, 4426, 4427, 4428, 497, 4935, 497, 88, 498, + 497, 500, 501, 442, 423, 167, 37, 4003, 4003, 4015, + 224, 3766, 4003, 4196, 4003, 286, 437, 4023, 208, 437, + 413, 4027, 4633, 58, 4003, 153, 176, 388, 404, 364, + 413, 423, 156, 413, 338, 497, 359, 359, 413, 413, + 413, 498, 498, 456, 498, 58, 404, 3802, 4987, 167, + 284, 77, 443, 4059, 153, 111, 423, 498, 222, 218, + 218, 218, 218, 4674, 4675, 497, 497, 203, 4023, 4075, + 4731, 284, 4027, 4800, 5429, 4081, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 497, 501, 4093, 460, 37, + 284, 498, 304, 413, 282, 3, 5763, 5764, 497, 1864, + 501, 43, 1867, 178, 423, 501, 377, 413, 4114, 497, + 369, 111, 1877, 1878, 498, 172, 218, 498, 172, 58, + 454, 296, 423, 454, 221, 455, 497, 1892, 498, 498, + 1895, 279, 410, 498, 498, 498, 487, 5121, 4093, 413, + 497, 5007, 501, 5696, 497, 172, 77, 456, 197, 202, + 190, 190, 4763, 4764, 274, 274, 58, 404, 487, 4165, + 501, 501, 413, 413, 4170, 4171, 4172, 4828, 71, 413, + 153, 156, 413, 218, 5300, 125, 174, 118, 37, 437, + 1945, 196, 498, 1948, 1949, 497, 279, 369, 437, 4195, + 4196, 37, 497, 269, 4377, 169, 279, 369, 58, 456, + 83, 404, 37, 456, 172, 284, 477, 497, 167, 205, + 501, 333, 216, 287, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 3978, 497, 172, 498, 442, 4234, 498, + 385, 4237, 304, 362, 37, 80, 498, 90, 134, 4203, + 284, 497, 497, 332, 2608, 497, 413, 37, 4003, 5334, + 4214, 5336, 498, 153, 153, 497, 167, 497, 497, 413, + 497, 497, 2626, 37, 274, 497, 2630, 245, 4023, 497, + 2634, 200, 4027, 497, 369, 498, 153, 111, 37, 498, + 288, 5220, 4893, 172, 423, 4896, 4897, 2676, 498, 383, + 58, 383, 167, 2682, 110, 4301, 2660, 497, 497, 497, + 501, 37, 4913, 404, 501, 442, 4740, 4741, 497, 4743, + 5249, 189, 437, 167, 265, 284, 404, 497, 404, 37, + 498, 4327, 4328, 6, 160, 4331, 460, 497, 356, 71, + 2694, 4337, 356, 287, 2723, 500, 71, 5463, 4344, 4345, + 134, 59, 456, 456, 139, 452, 442, 164, 4354, 164, + 2714, 497, 501, 497, 441, 372, 404, 329, 172, 274, + 202, 284, 284, 369, 5345, 497, 37, 85, 37, 287, + 287, 4377, 197, 5239, 497, 4370, 4382, 4383, 4384, 152, + 5149, 174, 2746, 174, 58, 497, 58, 498, 4394, 4344, + 4345, 37, 110, 111, 291, 339, 58, 413, 4581, 392, + 118, 453, 5031, 123, 6, 435, 369, 498, 2772, 139, + 355, 5072, 149, 498, 2778, 497, 274, 5543, 5544, 497, + 497, 2785, 23, 355, 497, 34, 80, 4433, 2792, 413, + 501, 2795, 501, 172, 497, 355, 292, 2801, 5345, 152, + 383, 118, 456, 383, 456, 174, 174, 437, 498, 896, + 497, 5198, 935, 4459, 5083, 2949, 3266, 2821, 176, 982, + 1651, 1351, 2757, 2827, 4470, 981, 2840, 3471, 10, 4170, + 2834, 13, 4145, 5680, 2866, 17, 18, 19, 2920, 3682, + 5124, 199, 5533, 2847, 5793, 5172, 4325, 5471, 4143, 4790, + 5148, 3400, 4498, 3063, 5659, 4501, 2860, 5030, 5782, 5562, + 5561, 5699, 44, 4509, 4510, 5815, 4512, 2871, 3404, 51, + 4516, 4517, 4835, 4371, 5507, 4521, 2934, 2934, 4356, 4525, + 4165, 4345, 4528, 4529, 3496, 977, 4315, 4533, 4340, 247, + 3731, 5470, 250, 4539, 2923, 77, 4829, 5155, 4407, 3775, + 5441, 5888, 5973, 5963, 5139, 3690, 4379, 265, 5712, 5533, + 4556, 269, 1810, 5085, 5535, 24, 4990, 4563, 5317, 5516, + 5088, 30, 4568, 5689, 18, 4571, 4572, 5001, 630, 10, + 28, 5287, 13, 4579, 4433, 2951, 5884, 1853, 1195, 3379, + 2620, 299, 4382, 1850, 4590, 1864, 3786, 5429, 5198, 4344, + 1969, 1888, 1969, 3624, 715, 4195, 5738, 4592, 4593, 2865, + 5226, 4556, 5923, 44, 1468, 5553, 75, 828, 4563, 5013, + 51, 4617, 682, 4568, 2896, 4370, 4571, 4411, 1763, 2563, + 4413, 4594, 5653, 4073, 1328, 343, 40, 40, 3336, 4635, + 5756, 5757, 4614, 3321, 5260, 1367, 77, 2573, 5644, 5483, + 3304, 5267, 4648, 4012, 4029, 4998, 3301, 5246, 366, 191, + 4074, 5245, 3301, 5907, 196, 5638, 5767, 5470, 5224, 5484, + 3946, 1428, 131, 1427, 5485, 1384, 2474, 4673, 386, 138, + 388, 3227, 141, 391, 1430, 2008, 218, 219, 5289, 0, + 3129, 2895, 1435, 3225, 4690, 2477, 2561, -1, 884, 4695, + -1, 233, 4656, -1, -1, 5634, 4702, -1, -1, 168, + -1, -1, 4666, 5329, 5330, 146, -1, -1, -1, -1, + -1, 3100, 4718, -1, -1, -1, -1, -1, -1, -1, + 3084, -1, -1, -1, -1, 4731, 3115, -1, -1, 5340, + 272, 3120, -1, 202, -1, -1, -1, -1, 3102, -1, + -1, -1, -1, -1, 286, 3109, -1, -1, -1, -1, + 191, -1, -1, -1, -1, 196, 4762, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5331, + -1, -1, -1, -1, 5501, -1, 97, -1, -1, 497, + -1, -1, 4788, 5345, -1, -1, -1, -1, -1, -1, + -1, 2556, 233, -1, -1, -1, 265, -1, 4804, -1, + 269, -1, -1, 4809, -1, -1, -1, -1, 4563, -1, + 279, -1, 5793, 4568, -1, -1, 4571, -1, -1, 288, + -1, -1, 4828, 5257, 5763, 5764, -1, 148, -1, 4835, + -1, 300, -1, 5459, -1, 377, -1, 4592, 4593, -1, + 161, 5452, -1, -1, -1, 286, 167, -1, 5031, -1, + -1, 172, 4847, 5479, -1, 5481, -1, 178, -1, -1, + 181, -1, -1, -1, 185, -1, -1, -1, -1, 5498, + -1, -1, 341, 342, -1, 4881, -1, 4883, -1, -1, + 4835, -1, -1, -1, -1, -1, -1, -1, 5071, 5083, + -1, -1, -1, 214, -1, 5082, -1, -1, -1, -1, + 5083, -1, -1, 372, 5338, -1, -1, -1, 4914, 2674, + -1, -1, 2677, 234, 2679, 2680, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4932, -1, -1, 4935, + -1, -1, 4938, 4939, 4940, 477, 377, -1, -1, 5126, + -1, -1, 5926, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 5954, -1, -1, -1, -1, 4963, 4964, -1, + 281, 4967, -1, 284, -1, -1, -1, -1, -1, 290, + -1, 440, -1, 5535, -1, -1, -1, -1, -1, 5963, + -1, 4987, -1, -1, -1, -1, -1, 4993, -1, 5973, + -1, 4997, -1, -1, -1, -1, -1, 5003, 5004, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5017, -1, 5019, -1, -1, -1, -1, 5024, -1, + 5026, -1, -1, -1, 5030, 346, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 477, 3426, -1, 5010, + -1, -1, 4997, -1, -1, 3434, -1, 488, 489, 490, + 491, 492, 493, -1, -1, -1, 3420, -1, -1, -1, + -1, -1, 5017, -1, -1, 5071, 5072, -1, -1, -1, + -1, -1, -1, -1, 6, 5030, 5082, -1, -1, -1, + 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 23, 4847, 25, -1, -1, -1, 29, 5964, -1, + -1, -1, 34, 35, 36, -1, 38, -1, 429, 41, + 42, -1, 44, -1, 46, 5121, -1, -1, 5680, -1, + 5126, 53, 54, 55, -1, -1, -1, -1, -1, -1, + -1, -1, 453, -1, 455, 456, -1, -1, -1, 3528, + -1, 3530, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3519, -1, -1, 5153, -1, + -1, -1, -1, -1, -1, -1, 5777, -1, -1, -1, + -1, 0, -1, -1, 495, -1, -1, 498, 499, 500, + -1, -1, 5188, -1, -1, 5191, -1, -1, -1, 5184, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5198, + 2965, 5198, 5198, 5198, 5198, 5198, 5198, 5198, 5198, 5198, + 5198, 5198, 5198, -1, 5220, 5198, -1, 5198, 5224, 5198, + 5226, 5198, -1, -1, -1, -1, 5267, -1, 5198, -1, + -1, 5793, 3621, 5188, -1, -1, 5187, -1, -1, -1, + 5246, 5867, 4997, 5249, -1, -1, -1, -1, -1, -1, + 22, -1, -1, 0, 5260, 27, -1, -1, -1, -1, + -1, 5267, -1, -1, 196, 197, 198, -1, 97, 201, + -1, -1, -1, 205, 3663, 207, -1, -1, 210, 3643, + -1, 213, -1, -1, 216, -1, -1, 219, -1, 221, + -1, 5246, 224, 65, -1, -1, 228, -1, 230, -1, + -1, -1, -1, -1, -1, -1, 78, -1, 5314, -1, + -1, -1, -1, 5319, 5320, 5498, -1, -1, 5324, 148, + -1, -1, 94, 5329, 5330, 5331, -1, -1, -1, -1, + -1, -1, 161, -1, -1, -1, -1, -1, 167, 5345, + 112, -1, -1, 172, -1, -1, -1, -1, 3113, 178, + 97, 3116, 181, 3118, 3119, -1, 185, -1, -1, 5365, + -1, -1, -1, -1, 136, -1, 5372, -1, -1, 5375, + -1, 3760, -1, -1, -1, 147, -1, -1, -1, -1, + -1, -1, -1, -1, 156, 214, -1, -1, -1, -1, + -1, -1, -1, -1, 5400, -1, -1, 169, 5153, -1, + -1, 148, 174, -1, -1, 234, -1, 5402, -1, -1, + -1, -1, -1, -1, 161, 3804, -1, -1, -1, -1, + 167, -1, -1, 5429, 5430, 172, -1, -1, 200, 5184, + -1, 178, -1, -1, 181, -1, -1, -1, 185, -1, + -1, -1, -1, 5198, -1, 5400, -1, 5453, -1, -1, + -1, -1, 281, 5459, -1, 284, -1, -1, -1, 3823, + -1, 290, -1, -1, 5470, 5471, -1, 214, 5474, -1, + -1, -1, -1, 5479, 246, 5481, 3840, 5483, -1, -1, + 5667, -1, -1, -1, 5490, -1, -1, 234, -1, -1, + -1, -1, 5487, -1, -1, -1, 3885, -1, -1, -1, + -1, 3865, 5508, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5267, -1, 286, -1, -1, 346, -1, 3908, + -1, -1, -1, -1, -1, -1, -1, 5533, -1, 5535, + -1, -1, -1, -1, 281, 5490, 3301, 284, -1, 3304, + -1, -1, 10, 290, 3933, 13, -1, 319, 320, -1, + -1, 323, 5739, 5740, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 401, -1, -1, -1, 44, -1, 350, -1, + -1, 353, 5588, 51, -1, 3350, -1, 359, -1, -1, + -1, -1, -1, -1, 366, -1, -1, 369, -1, 346, + 429, -1, -1, -1, -1, -1, -1, -1, -1, 77, + -1, -1, -1, -1, -1, -1, 388, -1, -1, -1, + 5626, 5627, 5628, 395, 453, -1, 455, 456, 5634, 401, + -1, -1, 404, 5588, -1, -1, 408, -1, 5644, -1, + -1, -1, -1, -1, 416, 5400, -1, 5402, 5654, -1, + -1, 423, -1, -1, 401, -1, -1, -1, -1, -1, + -1, 5667, -1, -1, -1, -1, 495, -1, -1, 498, + 499, 500, -1, -1, 5680, -1, -1, 449, 146, -1, + -1, -1, 429, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 629, -1, -1, + -1, -1, -1, 635, -1, 637, 453, 639, 455, 456, + 642, -1, -1, -1, -1, 5721, -1, 649, 5713, -1, + -1, -1, 654, 191, 656, 5731, -1, -1, 196, -1, + 662, -1, 5487, 5739, 5740, -1, -1, 10, -1, 5745, + 13, 5747, 5738, 5738, 17, 18, 19, 5738, 495, 5738, + 4114, 498, 499, 500, 686, -1, -1, 5763, 5764, 5738, + -1, 34, -1, 695, -1, 233, -1, 699, -1, -1, + 702, 44, -1, 705, -1, -1, 5731, -1, 51, -1, + -1, 5968, 5969, -1, 5825, -1, -1, 5793, -1, 721, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, -1, -1, -1, -1, 5815, + -1, -1, -1, -1, -1, 5821, -1, -1, 286, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5825, + 5825, -1, 5838, -1, 5825, -1, 5825, -1, -1, -1, + 772, -1, -1, -1, -1, -1, 5825, -1, -1, -1, + -1, -1, 5858, -1, -1, 787, 5862, -1, -1, -1, + 5815, 5867, -1, -1, -1, -1, 5821, -1, -1, -1, + 4234, -1, -1, 4237, -1, 807, 808, -1, 810, 811, + -1, -1, -1, 815, -1, -1, -1, -1, -1, -1, + -1, -1, 5898, -1, -1, -1, -1, 829, -1, 5905, + -1, 833, -1, -1, -1, -1, -1, 839, -1, 377, + -1, -1, -1, 5919, -1, -1, -1, -1, 191, -1, + 5926, -1, -1, 196, -1, -1, -1, 5923, 5923, -1, + -1, -1, 5923, -1, 5923, -1, -1, -1, -1, -1, + -1, -1, 4331, -1, 5923, 218, 219, -1, 5954, 5955, + -1, -1, 884, 5959, -1, -1, -1, 5963, 5713, -1, + 233, -1, 5968, 5969, 5919, -1, 898, 5973, -1, -1, + -1, -1, -1, 4337, -1, -1, -1, -1, 910, -1, + -1, -1, -1, 5738, -1, -1, -1, -1, -1, -1, + 4354, -1, -1, 925, -1, -1, 24, -1, -1, 272, + -1, -1, 30, -1, -1, -1, -1, -1, -1, 477, + -1, -1, 944, 286, -1, -1, 289, 949, 950, -1, + 488, 489, 490, 491, 492, 493, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, -1, -1, 13, -1, -1, 75, -1, 981, + 982, -1, -1, -1, -1, -1, -1, -1, -1, 10, + -1, -1, 13, -1, -1, -1, 17, 18, 19, 4433, + 5825, -1, 1004, 1005, -1, 44, -1, -1, -1, -1, + -1, -1, 51, 34, -1, 1017, -1, 1019, -1, -1, + -1, 1023, -1, 44, 1026, 1027, -1, 1029, -1, -1, + 51, -1, 1034, 131, 377, -1, -1, -1, 77, -1, + 138, -1, -1, 141, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1057, 77, -1, -1, -1, + -1, -1, 1064, 1065, -1, -1, -1, -1, -1, -1, + 168, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1085, 1086, 1087, -1, 1089, -1, 1091, + -1, 1093, 1094, -1, -1, -1, -1, -1, 5923, -1, + -1, -1, -1, -1, 202, -1, -1, 146, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1127, -1, 1129, 1130, -1, + -1, -1, -1, -1, 477, -1, -1, -1, -1, -1, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, -1, 191, -1, -1, 498, -1, 196, 501, -1, + 1162, -1, -1, -1, -1, 10, -1, 265, 13, -1, + 191, 269, 17, 18, 19, 196, 4635, -1, -1, -1, + -1, 279, -1, -1, -1, -1, 1188, 1189, 4023, 34, + 288, 1193, 4027, 1195, 233, -1, -1, 218, 219, 44, + -1, -1, 300, -1, -1, -1, 51, 1209, -1, -1, + -1, -1, 233, 1215, 4673, -1, 1218, -1, -1, 1221, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 77, 1235, -1, -1, 4695, -1, -1, -1, + 338, -1, -1, 341, 342, -1, -1, 286, -1, -1, + -1, 272, 0, -1, -1, -1, 4690, -1, 4093, -1, + -1, -1, -1, -1, 1266, 286, -1, -1, 4702, -1, + -1, -1, 20, -1, 372, -1, -1, -1, -1, -1, + -1, -1, 30, -1, 32, 33, -1, -1, -1, -1, + -1, -1, 1294, 1295, 1296, -1, 1298, -1, -1, -1, + -1, -1, 50, 4762, -1, -1, -1, -1, -1, -1, + -1, -1, 60, -1, -1, -1, 1318, -1, -1, -1, + -1, -1, -1, -1, 72, -1, 74, 75, -1, -1, + -1, -1, -1, 81, -1, 83, -1, -1, 377, -1, + -1, -1, 440, -1, -1, -1, 191, 95, -1, 97, + -1, 196, -1, -1, 1356, -1, 377, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 114, -1, -1, 117, + -1, -1, 1374, 218, 219, -1, -1, -1, -1, -1, + 61, 197, 198, -1, 132, 201, 134, -1, 233, -1, + 138, 10, -1, -1, 13, -1, 144, -1, -1, -1, + -1, -1, -1, -1, 152, 221, 154, -1, -1, -1, + -1, -1, 228, 161, -1, 96, -1, -1, 1420, -1, + -1, -1, 1424, 1425, 4883, 44, -1, 272, -1, -1, + 178, -1, 51, 1435, 1436, 1437, -1, 1439, 477, -1, + -1, 286, -1, -1, 289, -1, -1, 195, -1, 488, + 489, 490, 491, 492, 493, -1, 477, -1, 77, 1461, + -1, -1, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, -1, -1, -1, 157, -1, -1, -1, + 4914, -1, -1, -1, -1, -1, -1, 235, 236, -1, + -1, -1, -1, 241, 1496, -1, -1, -1, -1, 1501, + -1, -1, 1504, -1, -1, 253, -1, -1, -1, 4344, + 4345, -1, 193, -1, -1, 1517, 1518, -1, -1, -1, + -1, -1, -1, 271, 1526, -1, -1, 1529, -1, -1, + -1, -1, 377, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5003, -1, -1, -1, 229, -1, + -1, -1, -1, -1, 1556, -1, 1558, -1, -1, 1561, + -1, -1, -1, -1, -1, -1, 314, -1, -1, -1, + -1, -1, 191, -1, -1, -1, 1578, 196, -1, 1581, + 328, -1, 1584, -1, 265, -1, 334, 335, 269, 337, + 5024, -1, 5026, -1, 342, -1, -1, -1, -1, -1, + 348, -1, -1, 351, 1606, -1, -1, -1, -1, -1, + 358, -1, -1, -1, 233, -1, 364, 365, -1, 300, + 301, 1623, -1, -1, 372, -1, -1, -1, 376, -1, + -1, -1, 477, 1635, 1636, 1637, 1638, 1639, 386, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, -1, + -1, 1653, -1, 401, -1, -1, 501, 338, -1, -1, + -1, 342, 1664, 1665, 1666, -1, 347, 286, -1, -1, + -1, -1, -1, 421, -1, 356, -1, -1, -1, -1, + -1, -1, -1, 364, 432, -1, -1, -1, -1, -1, + 438, 372, -1, -1, -1, 443, -1, -1, 10, -1, + -1, 13, -1, 384, -1, 17, 18, 19, 456, -1, + -1, -1, 393, -1, -1, -1, 397, -1, -1, -1, + -1, 4556, 34, -1, -1, -1, -1, -1, 4563, -1, + -1, 479, 44, 4568, -1, -1, 4571, 4572, -1, 51, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 497, + -1, -1, 500, -1, -1, -1, -1, -1, 377, -1, + 1762, -1, -1, -1, -1, 77, -1, -1, -1, -1, + 451, 1773, -1, -1, -1, -1, -1, -1, -1, 1781, + 1782, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37, -1, -1, 1797, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1815, -1, -1, 61, -1, -1, -1, + -1, 637, -1, 639, -1, -1, 642, -1, -1, 1831, + 1832, 1833, 1834, -1, -1, -1, -1, -1, 1840, -1, + 656, -1, -1, -1, -1, 1847, 662, -1, -1, -1, + -1, 96, -1, -1, -1, 5314, -1, -1, 477, -1, + 5319, 5320, 1864, -1, -1, 1867, -1, -1, -1, 488, + 489, 490, 491, 492, 493, 1877, 1878, -1, -1, 191, + -1, -1, -1, -1, 196, -1, 1888, 1889, -1, -1, + 1892, -1, -1, 1895, -1, -1, -1, -1, -1, -1, + -1, -1, 61, -1, -1, -1, 218, 219, 1910, 1911, + -1, -1, 157, -1, -1, 1917, -1, 1919, -1, -1, + -1, 233, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1936, -1, -1, 96, -1, -1, + -1, 1943, -1, 1945, -1, -1, 1948, 1949, 193, 1951, + 1952, -1, 1954, -1, -1, -1, -1, -1, -1, 1961, + 272, -1, -1, -1, -1, -1, 1968, -1, -1, 4804, + -1, 5430, 1974, 1975, 286, -1, 1978, 289, -1, 224, + 1982, -1, 1984, -1, 229, -1, -1, 1989, 1990, -1, + -1, -1, -1, -1, 1996, 1997, 1998, -1, 157, 2001, + 4835, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 0, + 2012, -1, 2014, 2015, -1, 5474, 2018, -1, -1, -1, + -1, -1, -1, -1, 269, -1, -1, -1, -1, 20, + -1, 2033, 2034, 2035, 193, -1, -1, -1, -1, 30, + -1, 32, 33, -1, -1, -1, -1, -1, 2050, -1, + -1, -1, -1, -1, -1, -1, 301, -1, -1, 50, + -1, -1, -1, -1, -1, 377, -1, -1, -1, 60, + 229, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 72, -1, 74, 75, 24, -1, -1, 2090, -1, + 81, 30, 83, -1, -1, -1, -1, 342, -1, -1, + -1, -1, 347, -1, 95, -1, 97, 24, -1, -1, + 269, 356, -1, 30, -1, -1, -1, -1, -1, 364, + -1, -1, -1, 114, -1, -1, 117, 372, 45, -1, + -1, -1, -1, 949, 950, -1, 75, -1, -1, 384, + -1, 132, 301, 134, -1, -1, -1, 138, 393, -1, + -1, -1, 397, 144, -1, -1, -1, -1, 75, -1, + -1, 152, 4997, 154, -1, 477, -1, -1, -1, -1, + 161, 416, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 5017, 342, -1, 344, -1, 178, 347, 501, + -1, 2193, 131, -1, -1, 5030, -1, 356, -1, 138, + -1, -1, 141, 1019, 195, 364, 451, -1, -1, -1, + 455, -1, 129, 372, 131, -1, -1, -1, 1034, 10, + 5654, 138, 13, -1, 141, 384, 17, 18, 19, 168, + -1, 2233, -1, -1, 393, -1, -1, -1, 397, -1, + -1, -1, -1, 34, 235, 236, -1, 5082, 1064, 1065, + 241, 168, -1, 44, -1, -1, -1, -1, -1, -1, + 51, -1, 253, 202, -1, -1, -1, -1, -1, 22, + -1, -1, -1, 1089, -1, 28, -1, -1, -1, -1, + 271, -1, 2284, -1, -1, 202, 77, -1, -1, -1, + -1, 5126, 451, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1129, 1130, -1, -1, -1, -1, -1, + -1, -1, -1, 314, -1, -1, 265, -1, -1, -1, + 269, -1, -1, -1, -1, -1, -1, 328, -1, -1, + 279, -1, -1, 334, 335, -1, 337, -1, 265, 288, + -1, 342, 269, 5188, -1, -1, -1, 348, -1, -1, + 351, 300, 279, -1, -1, -1, -1, 358, -1, -1, + -1, 288, -1, 364, 365, -1, -1, -1, -1, -1, + -1, 372, -1, 300, -1, 376, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 386, -1, -1, -1, 338, + 191, -1, 341, 342, -1, 196, -1, -1, -1, -1, + 401, 5246, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, -1, -1, 341, 342, -1, 218, 219, -1, + 421, -1, -1, 372, -1, -1, -1, -1, -1, -1, + -1, 432, 233, -1, -1, -1, -1, 438, -1, -1, + -1, -1, 443, -1, -1, 372, 2458, 2459, 2460, 2461, + 2462, 2463, 2464, 2465, 2466, 456, 2468, -1, -1, -1, + -1, -1, -1, -1, 2476, 2477, -1, 2479, -1, -1, + -1, 272, -1, -1, 2486, -1, -1, -1, 479, 480, + 481, 482, 483, 484, -1, 286, -1, -1, 289, -1, + -1, 440, -1, -1, -1, -1, 497, -1, -1, 500, + -1, -1, -1, 2515, -1, 2517, -1, -1, 2520, 2521, + -1, -1, 2524, 440, 2526, -1, -1, 2529, -1, -1, + -1, 2533, -1, -1, -1, -1, -1, 5372, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2556, -1, -1, -1, -1, -1, + 2562, 2563, -1, -1, -1, 5400, 10, -1, -1, 13, + -1, 2573, -1, 17, 18, 19, -1, -1, -1, -1, + 2582, 2583, -1, -1, -1, -1, 377, -1, -1, -1, + 34, -1, -1, -1, 2596, -1, -1, -1, -1, -1, + 44, 2603, -1, 2605, -1, -1, -1, 51, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 77, -1, -1, -1, -1, -1, -1, + -1, -1, 2644, -1, 2646, -1, -1, -1, -1, -1, + -1, -1, -1, 24, -1, 5490, -1, -1, -1, 30, + -1, 2663, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2674, -1, 45, 2677, 2678, 2679, 2680, -1, + -1, 2683, -1, -1, 2686, -1, 477, -1, 1504, -1, + -1, -1, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, -1, 75, 2707, -1, 498, -1, -1, + -1, -1, -1, 1529, -1, -1, 2718, -1, -1, -1, + -1, -1, -1, -1, 2726, 2727, -1, -1, -1, -1, + -1, 2733, -1, -1, -1, -1, -1, -1, -1, -1, + 2742, -1, -1, -1, -1, -1, -1, 191, -1, -1, + -1, -1, 196, 5588, -1, -1, -1, -1, 129, -1, + 131, 2763, -1, -1, -1, -1, -1, 138, -1, -1, + 141, -1, -1, -1, 218, 219, -1, -1, -1, -1, + -1, 2783, 2784, -1, -1, 2787, -1, -1, 2790, 233, + 1606, -1, -1, -1, -1, -1, -1, 168, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2813, -1, -1, 2816, -1, -1, -1, -1, 1635, + 1636, 1637, 1638, -1, -1, -1, -1, -1, 272, -1, + -1, 202, 5667, -1, -1, -1, -1, -1, -1, 2841, + 2842, -1, 286, -1, -1, 289, -1, -1, -1, -1, + -1, -1, -1, -1, 2856, -1, 2858, 2859, -1, -1, + 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2889, 2890, 2891, + -1, -1, -1, 2895, 265, -1, 5731, -1, 269, -1, + -1, 2903, -1, -1, 5739, 5740, -1, -1, 279, -1, + -1, -1, -1, -1, 2916, -1, -1, 288, -1, -1, + 2922, -1, 2924, -1, -1, -1, -1, -1, -1, 300, + -1, -1, -1, 377, -1, 2937, -1, -1, -1, -1, + 2942, -1, -1, 2945, -1, -1, -1, 2949, -1, -1, + 2952, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2964, 2965, -1, 1781, 1782, 338, -1, -1, + 341, 342, -1, 2975, -1, -1, -1, -1, -1, -1, + 5815, 1797, -1, 2985, -1, 2987, 5821, -1, 741, -1, + 743, -1, 745, -1, -1, -1, -1, 17, 751, 752, + 753, 372, -1, 5838, -1, -1, 26, -1, -1, -1, + -1, -1, -1, -1, -1, 1831, 1832, 1833, 1834, -1, + -1, -1, -1, -1, 3026, -1, 3028, -1, 3030, -1, + -1, -1, -1, 477, -1, -1, -1, -1, -1, -1, + -1, 485, 486, 487, 488, 489, 490, 491, 492, 493, + -1, -1, -1, -1, 498, -1, -1, -1, -1, -1, + -1, 3063, -1, -1, -1, -1, -1, -1, 10, 440, + 5905, 13, -1, -1, -1, 17, 18, 19, -1, -1, + -1, -1, -1, -1, 5919, -1, -1, -1, -1, -1, + -1, -1, 34, -1, -1, 1911, -1, -1, -1, -1, + -1, 1917, 44, -1, -1, -1, -1, -1, -1, 51, + -1, 3113, 3114, -1, 3116, -1, 3118, 3119, -1, 3121, + 5955, -1, -1, -1, 5959, -1, 3128, -1, -1, -1, + -1, 3133, -1, 5968, 5969, 77, -1, -1, -1, -1, + -1, 10, -1, -1, 13, -1, -1, -1, 17, 18, + 19, -1, -1, -1, -1, -1, -1, 3159, 3160, 3161, + -1, -1, 3164, -1, -1, 34, -1, -1, -1, -1, + 3172, 3173, 3174, 3175, -1, 44, -1, -1, -1, -1, + -1, -1, 51, 3185, -1, -1, 3188, -1, 3190, -1, + 943, -1, -1, -1, -1, -1, -1, -1, -1, 3201, + 3202, -1, -1, 3205, -1, -1, 10, -1, 77, 13, + -1, -1, -1, 17, 18, 19, -1, -1, -1, -1, + 3222, -1, 3224, -1, 3226, -1, 3228, -1, -1, -1, + 34, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 44, -1, -1, -1, -1, -1, 3248, 51, -1, 191, + 3252, -1, -1, -1, 196, -1, -1, -1, -1, 1012, + -1, -1, -1, -1, 24, -1, -1, -1, -1, -1, + 30, 3273, -1, 77, 2090, -1, 218, 219, -1, -1, + -1, -1, -1, -1, -1, 45, -1, -1, -1, -1, + -1, 233, -1, -1, -1, -1, -1, -1, -1, 3301, + -1, -1, 3304, 3305, -1, -1, -1, 3309, 3310, 3311, + -1, -1, -1, -1, 3316, 75, -1, -1, -1, 3321, + -1, -1, 191, -1, -1, -1, -1, 196, -1, 10, + 272, -1, 13, -1, 3336, -1, 17, 18, 19, -1, + -1, -1, -1, -1, 286, -1, -1, 289, 3350, 218, + 219, -1, 3354, -1, -1, 3357, -1, 3359, -1, -1, + -1, -1, -1, 44, 233, -1, -1, -1, -1, -1, + 51, 131, -1, -1, -1, -1, -1, -1, 138, -1, + -1, 141, -1, -1, -1, -1, -1, 191, -1, -1, + -1, -1, 196, -1, -1, -1, 77, 3399, -1, -1, + -1, -1, -1, 272, 3406, -1, -1, -1, 168, -1, + -1, -1, -1, -1, 218, 219, -1, 286, -1, -1, + 289, -1, -1, -1, -1, -1, -1, 3429, 3430, 233, + -1, -1, -1, -1, -1, 377, -1, -1, -1, -1, + -1, -1, 202, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 24, -1, -1, -1, -1, -1, 30, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 272, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 286, -1, -1, 289, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 691, -1, -1, 75, -1, 265, -1, -1, 377, 269, + 191, -1, -1, -1, -1, 196, -1, -1, -1, 279, + -1, -1, -1, -1, -1, -1, 717, -1, 288, -1, + -1, -1, -1, -1, 3536, 477, -1, 218, 219, -1, + 300, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 233, -1, -1, -1, 498, -1, -1, 131, + -1, -1, -1, -1, -1, -1, 138, -1, -1, 141, + -1, -1, -1, 377, -1, -1, -1, -1, 338, -1, + -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, + -1, 272, 1345, -1, -1, -1, 168, 1350, 1351, -1, + -1, -1, -1, -1, -1, 286, -1, -1, 477, -1, + -1, 631, 372, -1, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 1378, -1, -1, -1, 498, + 202, -1, -1, -1, 1387, -1, 1389, -1, -1, -1, + 1393, -1, -1, -1, -1, -1, 3648, 1400, -1, -1, + -1, -1, 3654, -1, -1, -1, -1, -1, -1, -1, + -1, 681, 682, 3665, -1, -1, -1, -1, -1, -1, + -1, 862, -1, 477, -1, -1, -1, -1, -1, -1, + 440, 485, 486, 487, 488, 489, 490, 491, 492, 493, + -1, -1, -1, 265, 498, -1, 377, 269, -1, -1, + 3702, 3703, 3704, -1, 2520, -1, -1, 279, -1, -1, + -1, -1, -1, -1, -1, -1, 288, 3719, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 300, -1, + -1, -1, 3734, -1, -1, -1, 1489, -1, 61, -1, + -1, -1, -1, -1, -1, -1, 1499, -1, -1, -1, + 3752, 3753, 3754, -1, -1, 775, 3758, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, -1, 3770, 341, + 342, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, 801, -1, -1, -1, -1, -1, -1, -1, 809, + 1543, 1544, 812, 813, 814, -1, 477, -1, -1, -1, + 372, -1, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 1004, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3826, -1, -1, -1, -1, -1, + -1, 1022, -1, 1586, 157, -1, 1589, 1590, -1, -1, + -1, -1, 1033, -1, -1, 3847, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1048, 3860, -1, + -1, 3863, -1, -1, -1, -1, -1, 2683, 440, -1, + 193, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3882, -1, -1, -1, -1, -1, -1, -1, 24, 3891, + -1, -1, -1, -1, 30, -1, -1, 3899, -1, 3901, + -1, -1, 3904, -1, -1, -1, 229, 3909, 3910, 3911, + 3912, -1, -1, 3915, 3916, 3917, 3918, 3919, 3920, 3921, + 3922, 3923, 3924, -1, -1, -1, 3928, 3929, 3930, -1, + -1, -1, -1, -1, -1, -1, 3938, -1, -1, 75, + 3942, -1, 265, -1, 3946, -1, 269, -1, -1, -1, + -1, -1, 3954, -1, -1, 3957, -1, 3959, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3969, -1, -1, + 3972, 3973, -1, -1, -1, 3977, 3978, 300, 301, -1, + 3982, -1, 3984, -1, -1, -1, -1, -1, -1, 3991, + 3992, 3993, 1012, -1, -1, 131, -1, 2813, -1, -1, + 2816, -1, 138, -1, -1, 141, -1, -1, -1, 4011, + 4012, 4013, 1203, 4015, 4016, 338, -1, 4019, -1, 342, + -1, 4023, -1, -1, 347, 4027, -1, 1780, -1, -1, + -1, 4033, 168, 356, -1, -1, -1, -1, -1, -1, + -1, 364, -1, -1, -1, -1, -1, -1, -1, 372, + -1, -1, -1, -1, -1, -1, -1, 4059, -1, -1, + -1, 384, -1, -1, -1, -1, 202, -1, -1, -1, + 393, 4073, -1, 4075, 397, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2903, -1, -1, + -1, 4093, 4094, 4095, -1, -1, -1, -1, -1, -1, + 2916, -1, -1, -1, -1, -1, -1, -1, 2924, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 451, 265, + -1, 4133, 4134, 269, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 279, -1, -1, -1, -1, 2964, -1, + 4152, -1, 288, -1, 10, -1, -1, 13, -1, -1, + -1, 17, 18, 19, 300, -1, -1, -1, -1, 2985, + -1, -1, -1, -1, -1, -1, -1, -1, 34, -1, + 1200, -1, -1, -1, -1, -1, -1, -1, 44, -1, + -1, -1, -1, -1, -1, 51, -1, -1, -1, -1, + -1, -1, 338, 1223, -1, 341, 342, -1, -1, -1, + -1, -1, 3028, -1, 3030, -1, -1, -1, -1, 10, + -1, 77, 13, -1, -1, -1, 17, 18, 19, -1, + -1, -1, -1, -1, -1, -1, 372, -1, -1, 1992, + 1993, -1, -1, 34, -1, -1, 1999, 2000, -1, -1, + 4252, -1, -1, 44, 1445, -1, -1, -1, -1, -1, + 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2028, -1, -1, -1, -1, + 1300, -1, -1, 4285, -1, -1, 77, -1, -1, 1309, + -1, -1, -1, -1, -1, -1, -1, 4299, 3114, 4301, + -1, -1, -1, 1323, 440, 3121, 4308, -1, -1, -1, + -1, -1, 4314, -1, -1, -1, -1, -1, -1, -1, + 1511, -1, 1342, 4325, -1, 1345, 1346, -1, -1, -1, + 1350, 1351, -1, -1, -1, 191, -1, 4339, -1, -1, + 196, -1, 4344, 4345, 10, -1, -1, 13, -1, -1, + 4352, 17, 18, 19, -1, -1, -1, -1, -1, 4361, + -1, 1552, 218, 219, -1, -1, -1, -1, 34, 4371, + -1, -1, -1, -1, -1, -1, -1, 233, 44, -1, + -1, 4383, 4384, -1, -1, 51, -1, -1, -1, -1, + -1, -1, 4394, -1, 1585, -1, -1, -1, -1, -1, + 191, -1, -1, 4405, 4406, 196, -1, -1, -1, -1, + -1, 77, -1, -1, -1, -1, 272, -1, -1, -1, + -1, 4423, -1, -1, -1, -1, -1, 218, 219, 24, + 286, -1, -1, 289, -1, 30, -1, -1, -1, -1, + -1, -1, 233, -1, -1, -1, -1, -1, -1, 61, + -1, -1, -1, -1, -1, -1, -1, 4459, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4470, -1, + -1, -1, -1, 1664, 1665, 1666, -1, -1, -1, -1, + 75, 272, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 286, 4498, -1, 289, 4501, + -1, -1, -1, -1, -1, -1, -1, 4509, 4510, -1, + -1, -1, -1, -1, 4516, 4517, -1, -1, -1, 4521, + -1, 377, -1, 4525, -1, 191, 4528, 4529, -1, -1, + 196, 4533, 4534, -1, -1, -1, 131, 4539, 4540, 4541, + 4542, 4543, -1, 138, -1, 157, 141, -1, -1, -1, + -1, -1, 218, 219, 4556, -1, -1, 4559, -1, -1, + -1, 4563, -1, -1, -1, -1, 4568, 233, -1, 4571, + 4572, -1, 4574, 168, 4576, -1, -1, 4579, -1, 4581, + -1, 193, -1, 1603, 1775, -1, 377, -1, 4590, -1, + -1, 1611, 4594, -1, -1, 1786, -1, 4599, -1, -1, + 51, -1, -1, -1, -1, -1, 272, 202, -1, -1, + -1, 1802, 4614, 3429, 3430, 4617, -1, 229, -1, -1, + 286, 477, -1, 289, -1, -1, -1, -1, -1, 485, + 486, 487, 488, 489, 490, 491, 492, 493, -1, -1, + -1, -1, 498, -1, -1, -1, -1, -1, -1, 4651, + -1, -1, -1, 265, -1, -1, -1, 269, -1, -1, + -1, -1, -1, -1, 1855, 4667, -1, -1, -1, -1, + 265, -1, -1, -1, 269, -1, -1, -1, -1, 1870, + -1, -1, 1873, 1874, 279, -1, 477, -1, 300, 301, + -1, -1, -1, 288, 485, 486, 487, 488, 489, 490, + 491, 492, 493, -1, -1, 300, -1, 498, -1, -1, + -1, 377, -1, 1904, 1905, -1, 4718, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, -1, -1, -1, + 342, -1, -1, -1, -1, 347, -1, -1, -1, -1, + 4742, -1, -1, 338, 356, -1, 341, 342, -1, -1, + -1, -1, 364, -1, -1, 4757, -1, -1, -1, -1, + 372, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 384, -1, -1, -1, -1, 372, -1, -1, + -1, 393, -1, -1, -1, 397, 4788, -1, -1, -1, + -1, 2544, 2545, -1, -1, -1, -1, 2550, -1, -1, + -1, -1, 4804, -1, 1824, -1, -1, -1, 1828, 4811, + -1, 477, -1, -1, 2005, -1, -1, 2008, 4820, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 10, 2582, + 2583, 13, 498, 4835, -1, 17, 18, 19, -1, 451, + -1, 2032, -1, -1, -1, 440, 4848, -1, 4850, 3665, + -1, -1, 34, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 10, -1, -1, 13, -1, 51, + -1, 17, 18, 19, 4876, 24, -1, -1, -1, -1, + -1, 30, -1, -1, -1, 4887, -1, -1, 34, 2642, + -1, -1, -1, -1, -1, 77, -1, -1, 44, -1, + -1, -1, -1, -1, -1, 51, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, + 4932, 77, -1, 4935, -1, -1, 4938, 4939, 4940, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4963, 4964, -1, -1, 4967, -1, -1, -1, -1, + -1, -1, -1, 2726, -1, 1995, -1, -1, -1, -1, + -1, -1, 131, -1, -1, 4987, -1, -1, -1, 138, + -1, 4993, 141, -1, -1, 4997, -1, -1, -1, 5001, + -1, -1, 5004, -1, 5006, -1, -1, -1, -1, 191, + 3826, -1, -1, -1, 196, 5017, -1, 5019, -1, 168, + -1, -1, -1, -1, -1, -1, -1, -1, 5030, 5031, + 5032, -1, 5034, -1, -1, -1, 218, 219, -1, -1, + -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, + 196, 233, -1, 202, 2807, -1, -1, -1, -1, -1, + -1, -1, 2815, -1, -1, 2818, -1, -1, -1, -1, + -1, -1, 218, 219, -1, -1, -1, 2830, -1, -1, + 5082, 5083, -1, -1, -1, -1, -1, 233, -1, -1, + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 286, -1, -1, 289, -1, -1, + -1, -1, -1, -1, -1, -1, 265, -1, -1, -1, + 269, -1, -1, -1, 5126, -1, 272, -1, -1, -1, + 279, -1, -1, -1, -1, -1, -1, 5139, -1, 288, + 286, -1, 5144, 289, -1, -1, -1, 5149, -1, -1, + -1, 300, -1, -1, -1, -1, 5158, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5168, -1, -1, -1, + 5172, -1, -1, 5175, -1, -1, 24, -1, -1, -1, + -1, -1, 30, -1, 5186, 5187, 5188, -1, -1, 338, + -1, -1, 341, 342, -1, 377, 10, -1, -1, 13, + -1, -1, -1, 17, 18, 19, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5220, -1, + 34, -1, 5224, 372, 5226, -1, -1, 75, -1, -1, + 44, 377, -1, -1, -1, -1, -1, 51, -1, -1, + 691, -1, -1, -1, 5246, -1, -1, 5249, -1, -1, + -1, 5253, -1, -1, -1, -1, -1, -1, 5260, -1, + -1, -1, -1, 77, -1, 5267, 717, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 131, -1, -1, -1, -1, 2479, -1, + 138, 440, -1, 141, -1, 477, 5298, -1, 5300, -1, + -1, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, -1, -1, -1, -1, 498, -1, -1, -1, + 168, -1, 5324, 3076, -1, -1, -1, 5329, 5330, -1, + -1, 477, 5334, 5335, 5336, 5337, -1, -1, -1, 485, + 486, 487, 488, 489, 490, 491, 492, 493, -1, -1, + -1, -1, 498, -1, 202, -1, -1, -1, -1, -1, + -1, -1, -1, 5365, -1, -1, -1, -1, -1, -1, + 5372, -1, -1, -1, -1, -1, -1, 191, -1, -1, + -1, -1, 196, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5397, -1, -1, 5400, -1, + -1, -1, -1, -1, 218, 219, -1, -1, -1, -1, + -1, 862, -1, -1, -1, -1, -1, 265, -1, 233, + -1, 269, -1, 5425, 2615, -1, -1, -1, 2619, 2620, + -1, 279, -1, -1, -1, -1, -1, -1, -1, -1, + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5453, 300, -1, -1, -1, -1, 5459, 272, -1, + -1, 5463, -1, -1, -1, 5467, -1, -1, 5470, 4285, + -1, -1, 286, -1, -1, 289, 2496, 5479, -1, 5481, + -1, 5483, 5484, 4299, -1, 2676, -1, -1, 5490, -1, + 338, 2682, -1, 341, 342, -1, 5498, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5508, -1, -1, -1, + -1, 3264, -1, 3266, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 372, -1, -1, -1, -1, 3282, + -1, -1, 2723, -1, -1, -1, -1, -1, -1, -1, + -1, 5543, 5544, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, -1, 377, 13, -1, -1, -1, 17, 18, + 19, 1022, 5574, -1, -1, 3328, 3329, -1, -1, -1, + -1, -1, 1033, -1, -1, 34, 5588, -1, -1, -1, + -1, -1, 440, -1, -1, 44, -1, 1048, -1, -1, + -1, -1, 51, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2642, -1, 5626, 5627, 5628, -1, 77, -1, + -1, -1, 5634, -1, -1, -1, 5638, -1, -1, -1, + -1, -1, 5644, -1, -1, -1, -1, -1, -1, -1, + -1, 5653, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 477, -1, 5667, -1, -1, -1, -1, + -1, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 5682, 2701, -1, -1, 498, -1, -1, 5689, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2891, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5714, -1, -1, -1, -1, -1, -1, 5721, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5731, + -1, -1, 2923, -1, -1, -1, -1, 5739, 5740, 5741, + -1, -1, 191, 5745, -1, 5747, -1, 196, -1, -1, + -1, -1, 1203, -1, 5756, 5757, 5758, -1, -1, -1, + 2780, 5763, 5764, -1, -1, -1, -1, 5769, -1, 218, + 219, -1, -1, -1, -1, -1, -1, 2797, -1, -1, + -1, -1, -1, -1, 233, 5787, -1, -1, -1, -1, + -1, -1, -1, -1, 10, -1, -1, 13, -1, -1, + -1, 17, 18, 19, -1, -1, 2997, -1, -1, -1, + 3001, -1, -1, 5815, 5816, 5817, -1, -1, 34, 5821, + -1, -1, -1, 272, -1, -1, -1, -1, 44, -1, + -1, -1, -1, -1, -1, 51, 5838, 286, -1, -1, + 289, -1, -1, 2863, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5858, -1, -1, -1, + 5862, 77, -1, -1, -1, 5867, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2900, -1, 2902, -1, 2904, 2905, -1, -1, -1, 2909, + 2910, 2911, -1, 2913, 2914, 2915, 5898, -1, -1, -1, + -1, 5903, 5904, 5905, 5906, 5907, -1, -1, -1, 3100, + -1, -1, -1, -1, 5916, -1, -1, 5919, -1, -1, + -1, -1, -1, -1, 3115, -1, 4742, -1, 377, 3120, + -1, -1, -1, -1, -1, -1, -1, -1, 3691, -1, + -1, 4757, -1, -1, -1, -1, -1, -1, 2968, -1, + -1, -1, 5954, 5955, -1, -1, -1, 5959, -1, -1, + -1, 3714, -1, -1, -1, 8, 5968, 5969, -1, -1, + 5972, 14, 15, 2993, -1, 191, -1, 20, -1, 22, + 196, -1, -1, -1, -1, 28, -1, 30, -1, -1, + -1, -1, -1, -1, 1445, -1, -1, -1, -1, -1, + -1, -1, 218, 219, -1, -1, 49, 50, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 233, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 477, -1, + -1, -1, 4848, -1, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, -1, -1, -1, -1, 498, + -1, -1, -1, -1, -1, -1, 272, -1, -1, -1, + 1511, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 286, -1, -1, 289, -1, -1, -1, -1, 10, -1, + -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, + 13, 1552, 34, -1, 17, 18, 19, -1, -1, -1, + -1, -1, 44, -1, -1, -1, -1, -1, 3871, 51, + -1, 34, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 44, -1, -1, 1585, -1, -1, -1, 51, -1, + -1, -1, -1, -1, -1, 77, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 199, -1, -1, -1, + 203, 377, -1, -1, 77, -1, -1, -1, 211, -1, + -1, 214, -1, -1, 217, 218, -1, 220, 3369, 222, + -1, 3372, 225, 3374, 227, -1, -1, -1, 3379, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5032, -1, 5034, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3426, -1, -1, -1, -1, + -1, -1, -1, 3434, -1, -1, 3266, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 191, + -1, 477, -1, -1, 196, -1, -1, -1, 3459, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 191, -1, + -1, -1, 498, 196, -1, -1, 218, 219, -1, 10, + -1, -1, 13, -1, -1, -1, 17, 18, 19, -1, + -1, 233, -1, -1, -1, 218, 219, -1, 10, -1, + -1, 13, -1, 34, -1, 17, 18, 19, -1, -1, + 233, -1, -1, 44, 1775, -1, -1, -1, -1, -1, + 51, -1, 34, -1, -1, 1786, -1, 3528, -1, 3530, + 272, -1, 44, -1, -1, -1, -1, -1, -1, 51, + -1, 1802, -1, -1, 286, -1, 77, 289, -1, 272, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5186, -1, -1, 286, -1, 77, 289, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3423, 1855, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4171, 1870, + -1, -1, 1873, 1874, -1, -1, -1, -1, -1, -1, + 3621, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4196, -1, 377, -1, -1, -1, -1, + 4203, -1, -1, 1904, 1905, -1, -1, 3648, -1, -1, + -1, 4214, -1, 3654, 377, -1, -1, -1, -1, -1, + 191, -1, 3663, -1, -1, 196, -1, -1, -1, -1, + -1, 3501, -1, -1, -1, -1, -1, -1, -1, 191, + -1, -1, -1, -1, 196, -1, -1, 218, 219, -1, + 3691, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 233, -1, -1, -1, 218, 219, -1, 5335, + -1, 5337, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 233, -1, -1, -1, 3555, -1, 4290, 4291, -1, + -1, -1, -1, -1, -1, 477, -1, -1, -1, -1, + -1, 272, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, -1, -1, 477, 286, 498, -1, 289, 3760, + 272, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 2032, -1, -1, 286, 498, 629, 289, -1, -1, + -1, 3782, -1, -1, -1, -1, -1, 640, -1, -1, + -1, 644, -1, 3623, -1, -1, -1, -1, 651, 652, + -1, -1, 655, 3804, 657, 658, -1, -1, -1, -1, + -1, -1, -1, -1, 4377, -1, -1, -1, -1, 672, + -1, 10, -1, -1, 13, -1, -1, -1, 17, 18, + 19, -1, -1, -1, -1, -1, -1, 690, -1, 3669, + -1, -1, -1, -1, -1, 34, 377, -1, -1, -1, + -1, 3681, 3682, -1, -1, 44, -1, -1, 711, -1, + 713, 3691, 51, -1, -1, 377, 3696, 4430, 3698, -1, + 723, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3885, -1, -1, -1, 77, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 755, -1, -1, -1, -1, 3908, -1, -1, + -1, -1, -1, -1, -1, 3745, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3933, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 477, -1, 5574, -1, + 3780, 3781, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, -1, -1, 477, -1, 498, -1, -1, + -1, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, -1, -1, -1, -1, 498, 840, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, + 13, -1, 191, -1, 17, 18, 19, 196, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 34, -1, -1, -1, -1, -1, -1, -1, 218, + 219, 44, -1, -1, -1, -1, -1, -1, 51, -1, + -1, -1, -1, -1, 233, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5682, -1, -1, -1, + -1, -1, -1, -1, 77, -1, -1, -1, -1, 922, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4081, -1, -1, 272, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4656, -1, -1, -1, 286, -1, 4662, + 289, -1, -1, 4666, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3953, -1, -1, -1, -1, -1, -1, + 4693, 4694, -1, -1, -1, 4698, 4699, -1, -1, -1, + -1, -1, -1, 996, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5787, -1, -1, -1, -1, -1, 1020, -1, -1, + 4171, -1, -1, -1, -1, -1, -1, -1, 191, -1, + -1, -1, 1035, 196, 1037, -1, -1, -1, 377, -1, + 5816, 5817, -1, 1046, -1, 4196, -1, -1, -1, -1, + 1053, -1, -1, -1, -1, 218, 219, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 233, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1095, -1, 1097, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 286, -1, -1, 289, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 477, -1, + 5916, -1, -1, -1, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, -1, -1, -1, -1, 498, + -1, -1, -1, -1, -1, -1, -1, -1, 1171, -1, + 1173, -1, 1175, -1, 1177, -1, 1179, 1180, 1181, 10, + 4331, -1, 13, 1186, -1, -1, 17, 18, 19, -1, + -1, 4171, -1, -1, 1197, -1, -1, -1, -1, -1, + -1, -1, -1, 34, 2615, -1, -1, 1210, 2619, 2620, + -1, -1, -1, 44, 377, -1, 4196, -1, -1, -1, + 51, -1, -1, -1, 4204, -1, 4377, 4207, -1, 4209, + -1, 4382, -1, -1, -1, -1, -1, -1, -1, -1, + 10, -1, -1, 13, -1, -1, 77, 17, 18, 19, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 34, 2676, -1, -1, -1, -1, + -1, 2682, -1, -1, 44, 4255, -1, -1, -1, -1, + -1, 51, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4271, -1, -1, -1, -1, 4276, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 77, -1, -1, + -1, -1, 2723, -1, 477, -1, -1, -1, -1, -1, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, -1, -1, -1, -1, 498, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5071, -1, + 191, 4512, -1, -1, 1367, 196, -1, 206, -1, -1, + -1, -1, -1, -1, -1, -1, 215, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 218, 219, -1, + 229, -1, -1, -1, 4374, -1, -1, 4377, -1, -1, + -1, -1, 233, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 191, -1, -1, -1, -1, 196, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 272, -1, -1, -1, -1, -1, -1, 218, 219, + -1, -1, -1, -1, -1, 286, -1, -1, 289, -1, + -1, -1, -1, 233, -1, -1, -1, -1, 4448, 4449, + 4450, 4451, -1, 4453, 4454, 4455, 4456, 4457, -1, -1, + -1, -1, 1485, -1, 4635, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 272, -1, 51, -1, -1, -1, -1, -1, + -1, -1, 2923, -1, -1, -1, 286, -1, -1, 289, + -1, -1, 4673, -1, -1, 10, -1, -1, 13, -1, + -1, -1, 17, 18, 19, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4695, -1, 377, -1, -1, 34, + -1, -1, -1, -1, 1557, 10, -1, -1, 13, 44, + -1, -1, 17, 18, 19, -1, 51, -1, 4548, -1, + 4550, -1, -1, -1, -1, -1, -1, -1, -1, 34, + -1, -1, -1, 38, -1, -1, 2997, -1, -1, 44, + 3001, -1, 77, -1, -1, -1, 51, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 377, -1, -1, + -1, 4762, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 77, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5345, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 477, -1, -1, -1, + -1, -1, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, -1, -1, -1, -1, 498, -1, -1, + -1, -1, -1, 128, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3100, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3115, -1, 191, 477, -1, 3120, + -1, 196, -1, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, -1, -1, -1, -1, 498, -1, + 4881, -1, 4883, 218, 219, -1, 191, -1, -1, -1, + -1, 196, -1, -1, -1, -1, -1, -1, 233, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 218, 219, -1, -1, -1, 1771, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 233, -1, + 4760, 4761, -1, -1, -1, -1, -1, 272, -1, 628, + -1, -1, -1, 4773, -1, 4775, 4776, 4777, -1, -1, + -1, 286, -1, 1806, 289, -1, -1, -1, 647, -1, + -1, -1, 5525, -1, 653, -1, -1, 272, -1, -1, + -1, -1, -1, -1, -1, -1, 665, -1, -1, -1, + -1, 286, -1, -1, 289, -1, -1, -1, -1, -1, + -1, -1, 681, -1, -1, -1, 1849, -1, 1851, -1, + -1, -1, 5003, -1, -1, -1, -1, 696, -1, -1, + -1, 4841, -1, 10, -1, 704, 13, -1, 1871, -1, + 17, 18, 19, -1, -1, -1, -1, -1, -1, 718, + -1, -1, -1, -1, -1, -1, -1, 34, -1, 728, + -1, -1, 377, -1, 1897, -1, 1899, 44, -1, -1, + 4880, -1, -1, -1, 51, -1, -1, -1, -1, -1, + -1, 1914, -1, 1916, -1, -1, -1, -1, -1, 1922, + 5071, 1924, 377, 1926, -1, 1928, -1, 1930, -1, -1, + 77, 1934, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4922, -1, -1, 784, -1, -1, -1, 205, + 206, -1, -1, -1, -1, -1, -1, 213, 3369, 215, + 216, 3372, -1, 3374, -1, -1, -1, -1, 3379, -1, + -1, -1, -1, 229, 813, -1, -1, -1, -1, -1, + -1, -1, 437, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 477, -1, -1, -1, -1, -1, 837, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, -1, + -1, 496, -1, -1, -1, 3426, -1, -1, -1, -1, + 167, -1, 477, 3434, -1, 172, -1, -1, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, -1, + 5191, -1, -1, -1, 191, -1, -1, -1, 3459, 196, + -1, -1, -1, -1, -1, -1, -1, -1, 897, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 218, 219, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 233, -1, -1, -1, + -1, 5071, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3528, -1, 3530, + -1, -1, -1, -1, -1, 272, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5116, -1, -1, 286, + -1, -1, 289, -1, 691, 5125, -1, 24, -1, -1, + -1, -1, -1, 30, -1, -1, -1, -1, -1, -1, + 37, -1, -1, 5314, -1, -1, -1, 1006, 5319, 5320, + 717, -1, -1, 1012, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 75, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3621, -1, -1, 5926, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, + 377, -1, 13, 110, -1, -1, 17, 18, 19, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5963, -1, 3663, 34, 131, -1, -1, -1, -1, -1, + 5973, 138, -1, 44, 141, -1, -1, -1, -1, -1, + 51, -1, -1, -1, -1, -1, -1, -1, 5429, 5430, + 3691, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 168, -1, -1, -1, 1134, 77, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 862, -1, -1, -1, -1, + -1, -1, 199, 5474, -1, 202, -1, -1, -1, -1, + 477, -1, -1, -1, -1, -1, -1, -1, 485, 486, + 487, 488, 489, 490, 491, 492, 493, -1, -1, 3760, + -1, -1, -1, -1, -1, 1194, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5345, 1205, -1, -1, 5349, + 247, 3782, 628, 250, -1, -1, -1, -1, -1, -1, + 1219, -1, -1, -1, 1223, -1, -1, -1, 265, -1, + -1, 647, 269, 3804, -1, -1, -1, 653, -1, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, 665, + 191, 288, -1, -1, -1, 196, -1, -1, -1, -1, + -1, -1, 299, 300, -1, 681, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 218, 219, 695, + 696, -1, -1, -1, -1, -1, 702, -1, 704, 705, + -1, -1, 233, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 718, -1, 341, 342, 343, -1, -1, -1, + -1, -1, 728, -1, 3885, 1022, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1033, -1, -1, 366, + -1, 272, -1, -1, -1, 372, -1, 3908, -1, -1, + -1, 1048, -1, 1342, -1, 286, -1, -1, 289, 386, + -1, 1350, 1351, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3933, -1, -1, -1, -1, -1, 784, -1, + -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5535, -1, 813, -1, 5539, + -1, 5541, -1, 440, 1403, 5545, 5546, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 837, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 377, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2609, 2610, -1, -1, + -1, -1, -1, 394, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2628, 2629, -1, 2631, 2632, + -1, -1, 2635, 2636, -1, -1, -1, -1, -1, -1, + -1, 897, -1, -1, -1, -1, -1, 2650, -1, -1, + -1, -1, -1, -1, 2657, -1, 1203, -1, 2661, 2662, + -1, -1, 2665, 2666, -1, -1, -1, -1, -1, 2672, + 4081, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2684, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2696, -1, -1, 477, -1, 2701, -1, + -1, -1, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 2716, -1, -1, -1, -1, -1, -1, + -1, -1, 2725, -1, -1, 2728, -1, 2730, 2731, 2732, + -1, -1, -1, -1, 2737, 2738, -1, -1, -1, -1, + -1, -1, -1, -1, 2747, -1, -1, -1, -1, 2752, + 1006, -1, -1, 2756, -1, -1, 1012, -1, -1, -1, + 4171, -1, -1, -1, -1, 2768, 2769, 1023, -1, -1, + 2773, 1027, -1, 1029, -1, -1, 2779, 2780, -1, -1, + -1, -1, -1, 2786, 51, 4196, 2789, -1, -1, -1, + -1, -1, -1, 2796, 2797, -1, -1, -1, 1345, 2802, + -1, -1, -1, 5954, -1, -1, -1, -1, -1, -1, + 1649, 2814, -1, 5793, 2817, -1, -1, -1, -1, 2822, + -1, -1, -1, -1, -1, 2828, 2829, -1, -1, -1, + -1, -1, -1, 2836, -1, -1, 2839, -1, -1, -1, + 2843, 2844, 2845, 2846, -1, 2848, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2861, 2862, + -1, 2864, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2875, 2876, 2877, -1, -1, -1, 1134, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1445, -1, + -1, 10, -1, -1, 13, -1, 40, -1, 17, 18, + 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4331, -1, -1, -1, 1763, 34, -1, -1, -1, 2932, + -1, 65, -1, -1, -1, 44, -1, 2940, 1194, -1, + -1, -1, 51, -1, 78, -1, 5926, -1, -1, 1205, + -1, -1, 5932, -1, -1, -1, -1, 2960, -1, 1798, + 94, -1, -1, 1219, 1511, -1, 4377, 1223, 77, -1, + -1, 4382, -1, -1, -1, -1, -1, -1, 112, -1, + -1, -1, 1821, 5963, 118, -1, -1, -1, -1, -1, + 1829, -1, -1, 5973, -1, -1, 5976, -1, 1837, -1, + -1, -1, 136, -1, -1, 1552, -1, 3010, -1, -1, + -1, -1, -1, 147, -1, -1, -1, -1, -1, -1, + -1, -1, 156, -1, -1, -1, 3029, -1, 3031, -1, + -1, -1, -1, -1, -1, 169, -1, -1, 1585, -1, + -1, 1880, 1881, 177, -1, -1, -1, 181, -1, -1, + -1, -1, -1, -1, -1, 1894, 10, 166, -1, 13, + -1, -1, -1, 17, 18, 19, 200, -1, 1907, 1908, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 34, -1, 191, 37, -1, -1, 1342, 196, -1, -1, + 44, -1, -1, -1, 1350, 1351, -1, 51, -1, -1, + -1, 4512, -1, 237, -1, -1, -1, -1, -1, 218, + 219, -1, 246, -1, -1, -1, -1, -1, -1, 3122, + -1, -1, -1, 77, 233, -1, -1, -1, -1, -1, + 10, -1, -1, 13, -1, -1, -1, 17, 18, 19, + -1, -1, -1, -1, -1, -1, -1, 1403, -1, -1, + -1, -1, 286, -1, 34, 289, -1, -1, -1, -1, + -1, -1, -1, 272, 44, -1, -1, -1, -1, -1, + -1, 51, -1, -1, -1, 309, -1, 286, -1, -1, + 289, -1, -1, -1, -1, -1, -1, -1, -1, 323, + -1, -1, -1, -1, -1, -1, 330, 77, -1, -1, + -1, -1, 311, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2052, -1, -1, 350, -1, -1, -1, + -1, -1, -1, -1, 4635, 359, -1, -1, 1775, -1, + -1, -1, 366, -1, -1, 369, -1, 191, -1, 1786, + -1, -1, 196, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 388, 1802, -1, -1, -1, -1, + -1, 395, 4673, -1, 218, 219, -1, 401, 377, -1, + 404, 405, -1, 407, 408, -1, -1, -1, -1, 233, + -1, -1, -1, -1, 4695, -1, -1, -1, -1, 423, + -1, -1, -1, -1, -1, -1, 430, -1, -1, 433, + -1, -1, 436, -1, -1, -1, -1, -1, 1855, -1, + -1, 191, -1, -1, -1, 449, 196, -1, 272, -1, + -1, -1, -1, 1870, -1, -1, 1873, 1874, -1, -1, + -1, -1, 286, -1, -1, 289, -1, -1, 218, 219, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4762, -1, 233, -1, -1, -1, 1904, 1905, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 477, -1, + -1, -1, -1, -1, 51, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, -1, -1, -1, -1, -1, + -1, -1, 272, 1649, -1, -1, -1, -1, 3401, -1, + -1, -1, -1, -1, -1, -1, 286, 10, -1, 289, + 13, -1, -1, -1, 17, 18, 19, -1, 3421, -1, + -1, -1, -1, 377, 691, -1, -1, 307, -1, -1, + -1, 34, -1, -1, 37, 3438, -1, -1, -1, 3442, + -1, 44, -1, -1, 3447, 3448, 3449, -1, 51, -1, + 717, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4883, -1, 77, -1, -1, -1, -1, -1, + 3483, 3484, 3485, 3486, -1, 2032, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 377, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1763, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3520, -1, 3522, + 3523, 3524, -1, 477, -1, -1, -1, -1, -1, -1, + -1, 485, 486, 487, 488, 489, 490, 491, 492, 493, + -1, -1, 1798, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1821, -1, -1, -1, -1, + -1, -1, -1, 1829, -1, -1, -1, -1, -1, -1, + -1, 1837, -1, -1, -1, -1, -1, -1, 191, -1, + -1, -1, 5003, 196, -1, 862, -1, 477, -1, -1, + -1, -1, -1, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, -1, 218, 219, -1, -1, -1, + -1, 1877, 1878, -1, 1880, 1881, -1, -1, -1, -1, + 233, -1, 3635, -1, -1, -1, 1892, -1, 1894, 1895, + -1, 3644, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1907, 1908, -1, 51, -1, -1, -1, -1, -1, + 5071, -1, -1, -1, -1, -1, -1, 3670, 3671, 272, + -1, -1, 3675, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 286, -1, -1, 289, -1, -1, 1945, + -1, -1, 1948, 1949, 3697, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2554, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3750, -1, -1, + -1, -1, 3755, -1, -1, 1022, -1, -1, 3761, -1, + -1, -1, -1, -1, -1, -1, 1033, -1, -1, 2608, + -1, -1, -1, -1, 377, -1, -1, -1, -1, -1, + 5191, 1048, -1, -1, -1, -1, -1, 2626, 3791, -1, + -1, 2630, -1, -1, -1, 2634, 2052, -1, -1, -1, + -1, -1, -1, 2642, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3820, -1, 3822, + -1, 2660, -1, -1, -1, 10, -1, -1, 13, -1, + -1, -1, 17, 18, 19, -1, -1, -1, -1, 51, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, + -1, -1, -1, -1, -1, 2694, -1, -1, 3861, 44, + -1, -1, -1, -1, -1, -1, 51, -1, -1, -1, + -1, -1, -1, -1, 477, 2714, 2715, -1, -1, -1, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, -1, 77, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5314, -1, -1, 2745, 2746, 5319, 5320, + 2749, -1, -1, -1, -1, -1, -1, 10, -1, -1, + 13, -1, -1, -1, 17, 18, 19, -1, -1, -1, + -1, -1, -1, 2772, -1, 2774, 1203, -1, -1, 2778, + -1, 34, -1, -1, 37, -1, 2785, -1, -1, -1, + -1, 44, -1, 2792, -1, -1, 2795, -1, 51, -1, + -1, -1, 2801, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2821, -1, 77, -1, -1, 172, 2827, -1, + -1, -1, -1, -1, -1, 2834, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 191, -1, 2847, -1, + -1, 196, -1, -1, 691, -1, -1, -1, -1, 5430, + -1, 2860, -1, -1, -1, -1, 2865, -1, -1, -1, + -1, -1, 2871, 218, 219, -1, -1, 51, -1, -1, + 717, -1, -1, -1, -1, -1, -1, -1, 233, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5474, -1, -1, -1, -1, 2615, -1, + -1, -1, 2619, 2620, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 272, -1, -1, + -1, -1, 2931, -1, 4097, -1, -1, 4100, 191, 4102, + -1, 286, -1, 196, 289, -1, -1, -1, -1, -1, + -1, -1, 4115, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4127, 218, 219, -1, 4131, 2676, + -1, -1, -1, -1, -1, 2682, -1, -1, -1, -1, + 233, -1, -1, -1, -1, -1, -1, 4150, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4168, -1, -1, -1, -1, + 4173, -1, -1, -1, -1, -1, 2723, -1, 1445, 272, + -1, -1, -1, -1, -1, 862, -1, -1, -1, -1, + -1, -1, 377, 286, -1, 4198, 289, -1, -1, 4202, + -1, -1, -1, -1, -1, -1, -1, 4210, 4211, 4212, + 4213, -1, -1, -1, -1, -1, -1, 4220, 4221, 4222, + 4223, -1, -1, -1, -1, -1, 4229, 4230, -1, -1, + -1, -1, 4235, 4236, -1, 4238, 4239, 4240, 4241, 4242, + 4243, 4244, -1, -1, 1511, 3084, -1, -1, -1, -1, + -1, 4254, -1, -1, -1, 4258, 4259, 4260, 4261, -1, + -1, -1, -1, 3102, -1, -1, -1, -1, -1, -1, + 3109, -1, -1, -1, -1, -1, -1, -1, -1, 4282, + -1, -1, -1, -1, 377, 1552, -1, -1, -1, -1, + -1, -1, 477, -1, 691, -1, -1, 4300, 2554, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1585, -1, + 717, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3180, -1, -1, -1, 1022, -1, 3186, -1, -1, + -1, -1, 2608, -1, -1, -1, 1033, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2626, 1048, 4375, -1, 2630, -1, 2923, -1, 2634, -1, + -1, -1, -1, -1, 477, -1, 2642, -1, -1, -1, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, -1, -1, -1, 2660, 4408, -1, -1, -1, -1, + -1, -1, 4415, -1, 4417, -1, -1, -1, -1, -1, + -1, 2677, -1, 2679, 2680, -1, -1, 3266, -1, -1, + -1, -1, -1, -1, 4437, -1, -1, -1, 2694, -1, + 10, -1, -1, 13, -1, -1, -1, 17, 18, 19, + 2997, -1, -1, -1, 3001, -1, -1, -1, 2714, 2715, + -1, -1, -1, -1, 34, 862, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, -1, -1, -1, 691, + -1, 51, -1, -1, -1, -1, -1, -1, -1, 2745, + 2746, -1, -1, 2749, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 717, -1, 77, 1775, -1, + -1, -1, -1, -1, -1, -1, 2772, -1, 2774, 1786, + -1, -1, 2778, -1, -1, -1, 1203, -1, -1, 2785, + -1, -1, -1, -1, -1, 1802, 2792, -1, -1, 2795, + -1, -1, -1, -1, -1, 2801, -1, -1, -1, -1, + -1, -1, -1, 3100, 3393, 3394, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2821, -1, -1, 3115, -1, + -1, 2827, -1, 3120, -1, -1, -1, -1, 2834, -1, + -1, 3420, -1, -1, 3423, -1, -1, -1, 1855, -1, + -1, 2847, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1870, 2860, -1, 1873, 1874, -1, 2865, + -1, -1, -1, -1, -1, 2871, -1, -1, -1, -1, + -1, 191, -1, -1, -1, 1022, 196, -1, -1, -1, + -1, -1, -1, 4636, 4637, 4638, 1033, 1904, 1905, 4642, + 4643, 4644, 4645, -1, -1, -1, 4649, -1, 218, 219, + 862, 1048, -1, -1, -1, -1, 3495, 3496, 3497, -1, + -1, -1, -1, 233, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2931, -1, 691, -1, -1, + 3519, -1, 4685, 4686, 4687, 4688, 4689, -1, 4691, 4692, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3538, + 4703, 4704, 272, 717, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 286, -1, 3557, 289, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4732, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2032, -1, -1, 1445, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, + -1, -1, 13, -1, -1, -1, 17, 18, 19, -1, + -1, -1, -1, -1, 3643, -1, 1203, 377, -1, -1, + 1022, -1, -1, 34, -1, -1, 37, -1, -1, -1, + -1, 1033, 3369, 44, -1, 3372, -1, 3374, 3084, -1, + 51, 4834, 3379, -1, 1511, -1, 1048, -1, -1, 409, + -1, -1, -1, -1, -1, -1, 3102, -1, 862, -1, + -1, 3690, -1, 3109, -1, -1, 77, 3696, -1, 3698, + 3116, -1, 3118, 3119, -1, -1, -1, -1, -1, -1, + -1, -1, 3711, -1, 3713, 1552, -1, -1, -1, 3426, + -1, -1, -1, -1, -1, -1, -1, 3434, -1, -1, + -1, -1, -1, -1, -1, -1, 4899, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 477, 1585, -1, + -1, -1, 3459, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 3180, -1, -1, -1, -1, -1, + 3186, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3781, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 191, -1, -1, -1, -1, 196, -1, -1, -1, -1, + -1, 3528, -1, 3530, 3823, -1, -1, -1, -1, -1, + -1, 1203, -1, -1, -1, -1, -1, 218, 219, -1, + -1, 3840, -1, -1, -1, -1, -1, 5010, 1022, -1, + 3266, -1, 233, -1, -1, -1, -1, -1, -1, 1033, + -1, -1, -1, 3862, -1, -1, 3865, -1, -1, -1, + -1, -1, -1, -1, 1048, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1445, -1, + -1, 272, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 286, -1, -1, 289, -1, + 5073, -1, -1, -1, 3621, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5092, + -1, -1, -1, -1, 5097, 5098, -1, -1, 1775, -1, + -1, -1, -1, -1, 5107, 3944, -1, -1, -1, 1786, + -1, 5114, -1, -1, 1511, -1, 3663, -1, -1, -1, + -1, -1, -1, -1, -1, 1802, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3393, 3394, -1, + -1, -1, -1, -1, 3691, -1, -1, 5150, 5151, -1, + -1, -1, -1, -1, -1, 1552, 377, -1, -1, -1, + 5163, -1, 5165, -1, 3420, -1, -1, 3423, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5180, 1855, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1585, 1203, + -1, -1, -1, 1870, -1, -1, 1873, 1874, -1, -1, + -1, -1, 5205, -1, -1, -1, -1, -1, -1, -1, + 5213, -1, -1, 3760, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1904, 1905, -1, + -1, -1, -1, 1445, -1, 3782, -1, -1, -1, 3495, + 3496, 3497, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 477, 3804, -1, -1, + -1, -1, -1, 3519, 485, 486, 487, 488, 489, 490, + 491, 492, 493, -1, -1, 4114, -1, -1, -1, 5282, + -1, -1, 3538, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1511, + 5303, 3557, -1, -1, -1, -1, -1, -1, -1, -1, + 5313, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4165, -1, -1, -1, + -1, 4170, -1, 4172, -1, -1, -1, -1, 3885, -1, + 1552, -1, -1, -1, -1, -1, -1, -1, 2615, -1, + -1, -1, 2619, 2620, -1, 2032, 4195, -1, -1, -1, + -1, 3908, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1585, -1, 5378, -1, 22, 1775, -1, + -1, -1, 27, -1, -1, -1, 3933, 3643, -1, 1786, + -1, -1, -1, -1, -1, 4234, -1, -1, 4237, -1, + -1, -1, -1, -1, -1, 1802, -1, -1, -1, 2676, + -1, -1, -1, -1, -1, 2682, -1, -1, -1, 10, + 65, -1, 13, -1, -1, -1, 17, 18, 19, -1, + -1, 1445, -1, 78, 3690, -1, -1, -1, -1, -1, + 3696, -1, 3698, 34, -1, 5448, -1, -1, -1, 94, + -1, -1, -1, 44, -1, 3711, 2723, 3713, 1855, -1, + 51, -1, -1, -1, -1, -1, -1, 112, -1, -1, + -1, -1, -1, 1870, -1, -1, 1873, 1874, -1, -1, + -1, -1, -1, -1, -1, -1, 77, -1, 4327, 4328, + -1, 136, -1, -1, -1, -1, -1, 1511, 4337, -1, + -1, -1, 147, 5506, -1, -1, -1, 1904, 1905, -1, + -1, 156, -1, -1, -1, 4354, -1, 5520, -1, -1, + -1, -1, -1, -1, 169, 3781, -1, -1, -1, 174, + -1, -1, -1, -1, 4081, -1, 181, -1, 1552, -1, + -1, -1, -1, -1, -1, 10, -1, -1, 13, -1, + -1, -1, 17, 18, 19, 200, -1, -1, -1, -1, + 5563, -1, -1, 1775, -1, -1, -1, 3823, -1, 34, + -1, 1585, -1, -1, 1786, -1, 5579, -1, -1, 44, + -1, 172, -1, -1, 3840, -1, 51, -1, -1, -1, + 1802, -1, -1, -1, 4433, -1, -1, -1, -1, -1, + 191, 246, -1, -1, -1, 196, 3862, -1, -1, 3865, + -1, -1, 77, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4171, -1, -1, 218, 219, -1, + -1, -1, -1, -1, -1, 2032, -1, -1, -1, -1, + -1, 286, 233, 1855, -1, -1, -1, -1, -1, 4196, + -1, -1, -1, -1, 299, -1, 2923, -1, 1870, -1, + -1, 1873, 1874, 5666, 309, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 319, 320, -1, -1, 323, -1, + -1, 272, -1, -1, -1, -1, -1, -1, 3944, -1, + -1, -1, 1904, 1905, -1, 286, -1, -1, 289, -1, + -1, -1, -1, -1, -1, 350, 5709, 172, 353, -1, + -1, -1, 357, -1, 359, -1, -1, -1, -1, -1, + -1, 366, -1, -1, 369, -1, 191, -1, -1, -1, + 2997, 196, -1, -1, 3001, -1, -1, -1, -1, -1, + -1, -1, -1, 388, -1, -1, -1, -1, -1, -1, + 395, -1, -1, 218, 219, -1, 401, -1, -1, 404, + -1, 1775, -1, 408, -1, -1, -1, -1, 233, -1, + -1, 416, 1786, 418, -1, -1, -1, -1, 423, -1, + -1, -1, -1, -1, 4331, -1, 377, -1, 1802, -1, + -1, 436, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5805, -1, 449, -1, -1, 272, -1, 4648, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2032, 286, -1, -1, 289, -1, -1, -1, -1, -1, + 4377, -1, -1, 3100, -1, 4382, -1, -1, -1, -1, + -1, 1855, -1, -1, -1, -1, -1, -1, 3115, -1, + -1, 4690, -1, 3120, -1, -1, 1870, -1, 4114, 1873, + 1874, -1, -1, 4702, -1, -1, 207, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 219, -1, + -1, -1, -1, -1, -1, -1, 477, -1, -1, 230, + 1904, 1905, 4731, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, -1, -1, -1, -1, -1, -1, 4165, + -1, -1, 377, -1, 4170, -1, 4172, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2615, 4195, + -1, -1, 2619, 2620, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4512, -1, -1, -1, -1, + 4809, -1, -1, -1, -1, -1, -1, -1, 4234, -1, + -1, 4237, -1, -1, -1, -1, -1, -1, -1, 4828, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2676, + -1, -1, -1, -1, -1, 2682, -1, -1, -1, -1, + -1, -1, 477, -1, -1, -1, -1, -1, 2032, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2723, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4327, 4328, -1, -1, 4914, -1, -1, -1, -1, + -1, 4337, -1, -1, 10, -1, -1, 13, 4635, -1, + -1, 17, 18, 19, -1, -1, -1, -1, 4354, -1, + -1, -1, 3369, -1, -1, 3372, -1, 3374, 34, -1, + -1, -1, 3379, -1, -1, -1, -1, -1, 44, -1, + -1, -1, -1, -1, -1, 51, 4673, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4695, -1, + -1, 77, -1, -1, -1, -1, -1, -1, -1, 3426, + -1, -1, -1, -1, -1, -1, -1, 3434, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4433, -1, -1, + -1, -1, -1, -1, -1, 5024, -1, 5026, -1, -1, + -1, -1, 3459, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 10, -1, -1, 13, -1, -1, + -1, 17, 18, 19, -1, 4762, -1, -1, 2615, -1, + -1, -1, 2619, 2620, -1, -1, -1, -1, 34, -1, + -1, -1, -1, 5072, -1, -1, -1, -1, 44, -1, + -1, 167, -1, -1, -1, 51, 2923, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3528, -1, 3530, -1, 191, -1, -1, -1, -1, + 196, 77, -1, -1, -1, -1, -1, -1, -1, 2676, + -1, -1, 5121, -1, -1, 2682, -1, -1, 629, -1, + -1, -1, 218, 219, 635, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 233, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2997, -1, -1, -1, 3001, -1, 2723, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4883, -1, -1, -1, + 146, -1, -1, -1, -1, -1, 272, -1, -1, -1, + -1, -1, -1, -1, 3621, -1, -1, -1, -1, -1, + 286, -1, -1, 289, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, + 196, -1, 4648, -1, -1, -1, 3663, -1, -1, -1, + -1, -1, -1, 2615, -1, -1, -1, 2619, 2620, -1, + -1, -1, 218, 219, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3100, 3691, -1, -1, 233, -1, -1, + -1, -1, -1, -1, 4690, -1, -1, -1, 3115, -1, + -1, -1, -1, 3120, -1, -1, 4702, -1, -1, -1, + -1, 377, -1, -1, -1, -1, 5003, -1, -1, -1, + -1, -1, -1, -1, 2676, -1, 272, -1, -1, 810, + 2682, -1, -1, -1, -1, 4731, -1, -1, -1, -1, + 286, -1, -1, 289, -1, -1, -1, -1, 829, -1, + -1, -1, 5331, 3760, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5345, -1, -1, -1, + -1, 2723, -1, -1, -1, 3782, -1, -1, -1, -1, + -1, -1, -1, -1, 5071, -1, 2923, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5375, 3804, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 477, -1, 4809, -1, -1, -1, 898, -1, 485, + 486, 487, 488, 489, 490, 491, 492, 493, -1, -1, + -1, 377, 4828, -1, -1, -1, -1, -1, 10, -1, + -1, 13, -1, -1, -1, 17, 18, 19, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2997, 2615, 34, 944, 3001, 2619, 2620, -1, -1, -1, + -1, -1, 44, -1, -1, -1, -1, -1, 3885, 51, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5471, -1, -1, -1, -1, -1, -1, -1, + -1, 3908, -1, -1, 5191, 77, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4914, -1, + -1, -1, 2676, -1, -1, -1, 3933, -1, 2682, -1, + -1, 477, -1, -1, -1, -1, -1, -1, -1, 485, + 486, 487, 488, 489, 490, 491, 492, 493, -1, -1, + -1, -1, 3369, -1, 5533, 3372, 5535, 3374, -1, -1, + -1, -1, 3379, 3100, -1, -1, -1, -1, -1, 2723, + -1, 2923, -1, -1, -1, -1, 1057, -1, 3115, -1, + -1, -1, -1, 3120, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 167, -1, -1, -1, -1, + -1, -1, -1, -1, 1085, 1086, 1087, -1, -1, 3426, + -1, -1, -1, -1, -1, -1, -1, 3434, -1, 191, + -1, -1, -1, -1, 196, -1, -1, 5314, 5024, -1, + 5026, -1, 5319, 5320, -1, -1, -1, -1, -1, -1, + -1, -1, 3459, -1, -1, 2997, 218, 219, -1, 3001, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 233, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4081, 5654, 5072, -1, -1, -1, + -1, -1, -1, -1, 22, -1, 5082, -1, -1, 27, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 272, 5680, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3528, 1193, 3530, 286, -1, -1, 289, -1, -1, + -1, -1, -1, -1, -1, 5121, -1, 65, 1209, -1, + 5126, -1, -1, -1, -1, -1, -1, 1218, -1, -1, + 78, 79, -1, 5430, -1, -1, -1, -1, 3100, -1, + -1, -1, 90, -1, -1, -1, 94, -1, -1, -1, + -1, -1, -1, 3115, 4171, -1, -1, -1, 3120, 2923, + -1, -1, -1, -1, 112, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5474, -1, 4196, + -1, -1, -1, -1, -1, -1, -1, -1, 136, -1, + -1, -1, -1, -1, 3621, 377, -1, -1, -1, 147, + -1, -1, -1, -1, 5793, -1, -1, -1, 156, -1, + 22, -1, -1, -1, -1, 27, -1, -1, -1, -1, + -1, 169, 3369, -1, -1, 3372, 174, 3374, -1, -1, + -1, -1, 3379, 2997, -1, -1, 3663, 3001, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 200, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3691, 1356, 78, 79, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 225, -1, 3426, + -1, -1, 94, -1, -1, -1, -1, 3434, -1, -1, + -1, -1, -1, -1, -1, 477, -1, -1, 246, -1, + 112, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 3459, -1, 4331, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 136, 5331, -1, -1, -1, -1, + -1, -1, -1, 3760, -1, 147, 3100, 5926, 286, 5345, + -1, -1, -1, -1, 156, 1436, -1, -1, -1, -1, + -1, 3115, -1, -1, -1, 3782, 3120, 169, -1, -1, + 4377, 309, 174, -1, -1, 4382, -1, -1, -1, 5375, + -1, 319, 320, -1, 5963, 323, -1, 3804, -1, -1, + -1, 3528, -1, 3530, 5973, -1, -1, -1, 200, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 350, 807, 808, 353, -1, 3369, -1, 357, + 3372, 359, 3374, 225, -1, -1, -1, 3379, 366, -1, + -1, 369, -1, -1, -1, -1, 1517, -1, -1, -1, + -1, -1, -1, -1, 246, 1526, -1, -1, -1, -1, + 388, -1, -1, -1, -1, -1, -1, 395, -1, -1, + -1, -1, -1, 401, -1, -1, 404, -1, 3885, -1, + 408, -1, -1, -1, 3426, 5471, -1, 1558, 416, -1, + 418, -1, 3434, -1, 3621, 423, -1, -1, -1, -1, + 884, 3908, -1, -1, -1, -1, -1, -1, -1, -1, + 1581, -1, -1, 1584, -1, 4512, -1, 3459, -1, -1, + -1, 449, -1, -1, -1, -1, 3933, 319, 320, -1, + -1, 323, 10, -1, -1, 13, 3663, -1, -1, 17, + 18, 19, -1, -1, -1, -1, -1, 5533, -1, 5535, + -1, -1, -1, -1, -1, -1, 34, -1, 350, -1, + -1, 353, -1, -1, 3691, -1, 44, 359, 1639, -1, + -1, -1, -1, 51, 366, -1, -1, 369, -1, -1, + -1, -1, 1653, -1, -1, -1, 3528, -1, 3530, -1, + -1, -1, -1, -1, -1, -1, 388, -1, -1, 77, + -1, -1, -1, 395, -1, -1, -1, -1, -1, 401, + -1, -1, 404, -1, -1, -1, 408, -1, -1, -1, + 1004, 1005, -1, -1, -1, 3369, -1, -1, 3372, -1, + 3374, 423, -1, 3760, -1, 3379, -1, -1, 4635, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3782, -1, 449, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5654, -1, + -1, -1, -1, -1, 4081, -1, 4673, 3804, -1, 3621, + -1, 5667, 3426, -1, -1, -1, -1, -1, -1, -1, + 3434, 1762, -1, -1, 5680, -1, -1, -1, 4695, -1, + -1, -1, 1773, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 191, -1, 3459, -1, -1, 196, -1, + -1, 3663, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 218, 219, -1, -1, 1815, -1, -1, -1, -1, 3691, + -1, -1, -1, 5739, 5740, 233, -1, -1, 3885, -1, + -1, -1, -1, -1, 4171, 4762, -1, -1, 1310, 1840, + -1, -1, -1, -1, -1, -1, 1847, -1, -1, -1, + -1, 3908, -1, -1, 3528, -1, 3530, -1, -1, 4196, + -1, -1, -1, -1, 272, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3933, 5793, 286, -1, + -1, 289, -1, -1, -1, -1, -1, -1, 3760, -1, + -1, -1, 1364, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3782, -1, -1, -1, -1, -1, -1, -1, 1919, -1, + -1, 1235, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3804, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3621, -1, -1, + 1951, 1952, 1266, -1, -1, -1, 4883, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1968, -1, 377, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1294, 1295, 1296, -1, 1298, -1, -1, 24, -1, 3663, + -1, -1, -1, 30, 4331, -1, -1, -1, -1, -1, + 37, -1, -1, -1, 1318, -1, -1, -1, -1, -1, + 5926, -1, -1, 3885, -1, -1, -1, 3691, -1, -1, + -1, -1, 59, -1, 4081, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3908, -1, 75, -1, + 4377, -1, -1, -1, -1, 4382, -1, 5963, -1, 27, + -1, -1, 5968, 5969, -1, -1, -1, 5973, -1, -1, + -1, 3933, -1, -1, -1, -1, -1, -1, -1, 477, + -1, -1, -1, 110, -1, -1, 5003, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 3760, -1, -1, -1, + -1, -1, -1, -1, 131, -1, -1, -1, -1, -1, + 78, 138, -1, -1, 141, -1, 1420, -1, 3782, -1, + 1424, 1425, -1, -1, 4171, -1, 94, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3804, 168, -1, -1, 112, -1, -1, -1, -1, 4196, + 118, -1, -1, -1, 5071, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 136, -1, + -1, -1, 199, -1, -1, 202, -1, -1, -1, 147, + -1, -1, -1, -1, -1, 4512, -1, -1, 156, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 169, -1, -1, -1, -1, 174, -1, 1670, -1, + -1, -1, 1674, 181, -1, -1, -1, -1, -1, 4081, + 247, 3885, -1, 250, -1, -1, -1, -1, -1, -1, + -1, -1, 200, -1, -1, -1, -1, -1, 265, -1, + -1, -1, 269, -1, 3908, -1, -1, -1, -1, -1, + -1, -1, 279, -1, -1, -1, -1, 225, -1, -1, + -1, 288, -1, -1, -1, -1, -1, -1, -1, 3933, + -1, -1, 299, 300, 5191, -1, -1, -1, 246, -1, + -1, -1, -1, -1, 4331, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4635, 4171, + -1, 338, -1, -1, 341, 342, 343, -1, 286, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4377, -1, -1, -1, 4196, 4382, -1, -1, -1, 366, + -1, 309, -1, -1, -1, 372, 4673, -1, -1, -1, + -1, 319, 320, -1, -1, 323, -1, -1, -1, 386, + 1664, 1665, 1666, -1, -1, -1, -1, -1, 4695, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 350, -1, -1, 353, -1, -1, -1, 357, + -1, 359, -1, -1, -1, -1, -1, 5314, 366, -1, + -1, 369, 5319, 5320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 440, -1, -1, -1, 4081, -1, -1, + 388, -1, -1, -1, -1, -1, -1, 395, -1, -1, + -1, -1, 400, 401, -1, 4762, 404, -1, -1, -1, + 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 418, -1, -1, -1, -1, 423, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4512, -1, -1, 436, 4331, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 449, -1, -1, -1, 2476, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2486, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4171, -1, -1, + -1, -1, -1, 5430, -1, 4377, -1, -1, -1, -1, + 4382, -1, -1, -1, 2515, 1987, -1, -1, -1, -1, + -1, -1, 4196, -1, -1, -1, -1, -1, -1, -1, + 2002, -1, -1, -1, 2006, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4883, 5474, 2020, 2021, + 2022, -1, 2024, -1, -1, -1, 20, -1, -1, -1, + -1, 2562, 2563, -1, -1, -1, 30, -1, 32, 33, + -1, -1, -1, -1, -1, -1, -1, -1, 4635, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2596, 60, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 72, -1, + 74, 75, -1, -1, -1, -1, 4673, 81, -1, 83, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 95, -1, 97, -1, -1, -1, -1, 4695, -1, + 4512, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 114, -1, -1, 117, -1, -1, -1, 4331, -1, -1, + -1, -1, -1, -1, -1, -1, 5003, -1, 132, -1, + 134, -1, -1, -1, 138, 1989, -1, -1, -1, -1, + 144, -1, -1, -1, -1, -1, -1, 2001, 152, 2003, + 154, 2005, -1, -1, 2008, 2009, 2010, 161, -1, -1, + -1, 2015, -1, 4377, 2018, 4762, -1, -1, 4382, -1, + -1, -1, -1, -1, 178, -1, -1, -1, -1, 2033, + 2034, 2035, -1, -1, -1, -1, 2727, -1, -1, -1, + -1, 195, -1, -1, 5071, -1, 2050, -1, -1, -1, + -1, 2742, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2763, 4635, -1, -1, -1, -1, -1, -1, + -1, 235, 236, -1, -1, -1, -1, 241, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 253, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4673, -1, -1, -1, -1, -1, 271, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4695, -1, -1, 4883, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4512, -1, + 2841, 2842, -1, -1, -1, -1, -1, -1, -1, -1, + 314, -1, -1, -1, 5191, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 328, -1, -1, -1, -1, -1, + 334, 335, -1, 337, -1, -1, -1, -1, 342, 2193, + -1, 345, -1, -1, 348, -1, -1, 351, -1, -1, + 4762, -1, -1, -1, 358, -1, -1, -1, -1, -1, + 364, 365, -1, -1, -1, -1, -1, -1, 372, -1, + -1, -1, 376, -1, -1, -1, -1, -1, -1, 2233, + -1, -1, 386, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 401, -1, -1, + -1, 2942, -1, -1, -1, -1, 5003, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 421, -1, -1, + -1, 4635, -1, -1, -1, -1, -1, -1, 432, -1, + 2284, -1, -1, -1, 438, -1, -1, 5314, -1, 443, + -1, -1, 5319, 5320, -1, -1, -1, -1, -1, -1, + -1, -1, 456, -1, -1, -1, -1, -1, -1, 4673, + -1, -1, -1, 2475, -1, -1, -1, -1, -1, -1, + -1, 4883, -1, -1, 5071, 479, -1, -1, -1, -1, + -1, 4695, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 497, -1, -1, 500, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4762, -1, + -1, -1, -1, 5430, -1, -1, -1, 2569, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2581, + -1, -1, -1, -1, 2586, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5003, -1, -1, 5191, -1, -1, 5474, -1, -1, + -1, -1, -1, -1, 2458, 2459, 2460, 2461, 2462, 2463, + 2464, 2465, 2466, -1, 2468, -1, -1, -1, -1, -1, + -1, -1, -1, 2477, -1, 2479, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5071, + -1, -1, -1, 2517, -1, -1, -1, 2521, -1, 4883, + 2524, -1, 2526, -1, -1, 2529, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3252, -1, -1, -1, -1, -1, 5314, -1, -1, + -1, -1, 5319, 5320, -1, -1, -1, -1, 2582, 2583, + -1, -1, 3273, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5191, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5003, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2663, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5430, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5071, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5474, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5314, -1, -1, -1, -1, 5319, 5320, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5191, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3536, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5430, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2889, 2890, 2891, -1, -1, + -1, 2895, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5474, -1, -1, -1, -1, -1, 2922, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5314, -1, -1, -1, -1, 5319, 5320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3131, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3151, + 3152, -1, 3154, -1, -1, -1, -1, 3159, 3160, -1, + 3162, -1, 3164, -1, -1, -1, 3168, -1, -1, 3171, + -1, 3702, 3703, 3704, 3176, -1, -1, -1, -1, -1, + 3182, -1, -1, -1, -1, 3187, -1, -1, 3719, -1, + -1, -1, 3194, 3195, 3196, 3197, -1, -1, -1, 3201, + 3202, -1, 3204, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3221, + -1, 3223, 3753, 3754, -1, -1, 5430, 3758, 3230, 3231, + 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5474, -1, 3274, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3128, -1, -1, -1, -1, 3133, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 3161, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3172, 3860, + 3174, 3175, 3863, -1, -1, -1, -1, -1, -1, -1, + -1, 3185, -1, -1, 3188, -1, 3190, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3224, -1, 3226, -1, 3228, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3414, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3991, 3992, 3993, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3316, -1, -1, -1, -1, 3321, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3336, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3399, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3652, 3653, -1, -1, -1, 3657, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3686, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4308, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3648, -1, -1, -1, 4339, -1, + 3654, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4371, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4406, -1, -1, -1, 3881, + -1, -1, -1, -1, -1, 3887, -1, -1, -1, -1, + 3734, -1, 4423, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3905, 3906, -1, -1, 3909, 3910, 3911, + 3912, -1, -1, 3915, 3916, 3917, 3918, 3919, 3920, 3921, + 3922, 3923, 3924, 3925, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3947, -1, -1, 3950, -1, + 3952, -1, -1, 3955, 3956, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 3971, + 3972, 3973, 3974, -1, 3976, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4540, + 4541, 4542, 4543, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 3882, 4041, + -1, -1, -1, -1, -1, -1, -1, 3891, -1, -1, + -1, -1, -1, -1, -1, 3899, -1, 3901, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3928, 3929, 3930, -1, 4090, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3946, -1, -1, -1, -1, -1, -1, -1, + 3954, -1, -1, 3957, -1, 3959, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3969, -1, -1, -1, -1, + -1, -1, -1, 3977, 3978, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4059, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4075, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4301, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 4343, -1, -1, -1, 4876, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4887, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4460, -1, + -1, -1, 4464, -1, 4466, 4467, -1, -1, -1, -1, + 4472, 4473, 4474, 4475, -1, -1, -1, 4479, 4480, 4481, + 4482, 4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4515, -1, -1, 4518, -1, 4520, -1, + -1, 4523, -1, -1, 4526, 4527, -1, -1, 4530, 4531, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4383, + 4384, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4394, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 4589, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 4602, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5144, -1, 4459, -1, -1, 5149, -1, + -1, -1, -1, -1, -1, -1, 4470, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5168, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4509, 4510, -1, -1, -1, + -1, -1, 4516, 4517, -1, -1, -1, 4521, -1, -1, + -1, 4525, -1, -1, 4528, 4529, -1, -1, -1, 4533, + -1, -1, -1, -1, -1, 4539, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4579, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4590, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5298, -1, -1, + -1, -1, -1, 4617, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4791, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5397, -1, -1, -1, + -1, -1, -1, -1, 4718, -1, 4878, 4879, -1, -1, + -1, -1, -1, -1, 4886, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5425, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4928, -1, -1, -1, + -1, -1, 4934, 4935, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4788, -1, -1, -1, -1, -1, + -1, 4953, -1, 4955, -1, -1, -1, 4959, 4960, 4961, + 4962, -1, -1, 4965, 4966, -1, -1, -1, 4970, -1, + -1, -1, 4974, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 4987, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5005, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5028, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 4932, -1, + -1, 5093, -1, -1, 4938, 4939, 4940, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4963, + 4964, -1, -1, 4967, -1, -1, -1, 5129, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 4993, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5004, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5019, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5217, -1, 5219, 5220, 5221, + 5222, 5223, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5234, 5235, 5236, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5249, -1, -1, + 5252, -1, -1, -1, 5256, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5274, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5286, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5224, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5267, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5454, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5468, -1, 5470, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5324, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5519, -1, -1, + -1, 5365, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5555, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5453, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5621, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 5483, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5665, 5508, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 5750, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5763, 5764, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5626, 5627, 5628, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 5644, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5813, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 5837, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5853, 5854, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 5721, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5745, -1, 5747, -1, -1, 5908, 5909, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 5858, -1, -1, -1, 5862, -1, + -1, -1, -1, 3, -1, 5, 6, -1, 8, 9, + 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, -1, -1, 5898, -1, 36, -1, -1, 39, + 40, 41, -1, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, -1, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, -1, 72, 73, 74, 75, 76, -1, 78, -1, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 5954, 91, 92, 93, 94, 95, 96, -1, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + -1, 121, 122, 123, 124, 125, 126, 127, -1, 129, + 130, 131, 132, 133, -1, 135, 136, 137, 138, 139, + -1, 141, 142, 143, -1, 145, 146, 147, -1, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, -1, 162, 163, 164, 165, 166, -1, 168, -1, + 170, 171, -1, 173, 174, 175, 176, 177, -1, 179, + 180, -1, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, -1, 197, 198, 199, + 200, 201, 202, 203, -1, 205, 206, 207, 208, 209, + 210, 211, 212, 213, -1, 215, -1, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, -1, -1, 229, + 230, 231, 232, 233, -1, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, -1, 282, 283, -1, -1, 286, 287, 288, -1, + -1, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, + 310, 311, 312, 313, 314, 315, -1, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, -1, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, -1, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, -1, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, -1, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, -1, 399, + 400, -1, 402, 403, 404, 405, 406, 407, 408, -1, + 410, 411, 412, -1, -1, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, -1, + 430, 431, 432, 433, 434, 435, 436, -1, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, -1, -1, 454, -1, -1, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 488, 489, + 490, -1, -1, -1, -1, -1, -1, 497, 498, 3, + -1, 5, 6, -1, 8, 9, 10, 11, 12, -1, + -1, -1, -1, -1, -1, -1, 20, 21, 22, 23, + 24, 25, 26, 27, -1, 29, 30, 31, -1, -1, + -1, -1, 36, -1, -1, 39, 40, 41, -1, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, -1, 72, 73, + 74, 75, 76, -1, 78, -1, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, -1, 91, 92, 93, + 94, 95, 96, -1, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, -1, 121, 122, 123, + 124, 125, 126, 127, -1, 129, 130, 131, 132, -1, + -1, 135, 136, 137, 138, 139, -1, 141, 142, 143, + -1, 145, 146, 147, -1, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, -1, 162, 163, + 164, 165, 166, -1, 168, -1, 170, 171, -1, 173, + 174, 175, 176, 177, -1, 179, 180, -1, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, -1, 197, 198, 199, 200, 201, 202, 203, + -1, 205, 206, 207, 208, 209, 210, 211, 212, 213, + -1, 215, -1, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, -1, -1, 229, 230, 231, 232, 233, + -1, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, -1, 282, 283, + -1, -1, 286, 287, 288, -1, -1, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, -1, 308, 309, 310, 311, 312, 313, + 314, 315, -1, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, -1, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, -1, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, -1, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, -1, 410, 411, 412, -1, + -1, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, -1, 430, 431, 432, 433, + 434, 435, 436, -1, 438, 439, 440, 441, 442, 443, + 444, -1, 446, 447, 448, 449, 450, 451, -1, -1, + 454, -1, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, -1, 479, -1, -1, -1, -1, + -1, -1, -1, -1, 488, 489, -1, -1, -1, -1, + -1, -1, -1, 497, 498, 3, -1, 5, 6, -1, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + -1, 29, 30, 31, -1, -1, -1, -1, 36, -1, + -1, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, 76, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, 180, -1, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, -1, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + -1, 229, 230, 231, 232, 233, -1, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, 311, 312, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, -1, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, -1, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + -1, 399, 400, -1, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, -1, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, -1, 430, 431, 432, 433, 434, 435, 436, -1, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, -1, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 488, 489, -1, -1, -1, -1, -1, -1, -1, 497, + 498, 3, -1, 5, 6, -1, 8, 9, 10, 11, + 12, -1, -1, -1, -1, -1, -1, -1, 20, 21, + 22, 23, 24, 25, 26, 27, -1, 29, 30, 31, + -1, -1, -1, -1, 36, -1, -1, 39, 40, 41, + -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, -1, + 72, 73, 74, 75, 76, -1, 78, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, -1, 91, + 92, 93, 94, 95, 96, -1, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, -1, 121, + 122, 123, 124, 125, 126, 127, -1, 129, 130, 131, + 132, -1, -1, 135, 136, 137, 138, 139, -1, 141, + 142, 143, -1, 145, 146, 147, -1, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, + 162, 163, 164, 165, 166, -1, 168, -1, 170, 171, + -1, 173, 174, 175, 176, 177, -1, 179, 180, -1, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, -1, 197, 198, 199, 200, 201, + 202, 203, -1, 205, 206, 207, 208, 209, 210, 211, + 212, 213, -1, 215, -1, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, -1, -1, 229, 230, 231, + 232, 233, -1, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, -1, + 282, 283, -1, -1, 286, 287, 288, -1, -1, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, -1, 308, 309, 310, 311, + 312, 313, 314, 315, -1, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + -1, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, -1, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + -1, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, -1, 399, 400, -1, + 402, 403, 404, 405, 406, 407, 408, -1, 410, 411, + 412, -1, -1, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, -1, 430, 431, + 432, 433, 434, 435, 436, -1, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, 449, 450, 451, + -1, -1, 454, -1, -1, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 488, 489, -1, -1, + -1, -1, -1, -1, -1, 497, 498, 3, -1, 5, + 6, -1, 8, 9, 10, 11, 12, -1, -1, -1, + -1, -1, -1, -1, 20, 21, 22, 23, 24, 25, + 26, 27, -1, 29, 30, 31, -1, -1, -1, -1, + 36, -1, -1, 39, 40, 41, -1, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, + 76, -1, 78, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, -1, 91, 92, 93, 94, 95, + 96, -1, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, -1, 121, 122, 123, 124, 125, + 126, 127, -1, 129, 130, 131, 132, -1, -1, 135, + 136, 137, 138, 139, -1, 141, 142, 143, -1, 145, + 146, 147, -1, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, + 166, -1, 168, -1, 170, 171, -1, 173, 174, 175, + 176, 177, -1, 179, 180, -1, 182, 183, 184, -1, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + -1, 197, 198, 199, 200, 201, 202, 203, -1, 205, + 206, 207, 208, 209, 210, 211, 212, 213, -1, 215, + -1, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, -1, -1, 229, 230, 231, 232, 233, -1, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, 282, 283, -1, -1, + 286, 287, 288, -1, -1, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, -1, 308, 309, 310, 311, 312, 313, 314, 315, + -1, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, -1, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, -1, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, -1, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, -1, 399, 400, -1, 402, 403, 404, 405, + 406, 407, 408, -1, 410, 411, 412, -1, -1, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, -1, 430, 431, 432, 433, 434, 435, + 436, -1, 438, 439, 440, 441, 442, 443, 444, -1, + 446, 447, 448, 449, 450, 451, -1, -1, 454, -1, + -1, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, 477, -1, -1, -1, -1, 3, -1, -1, -1, + -1, -1, 488, 489, -1, -1, -1, -1, -1, -1, + -1, 497, 498, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + 37, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, 221, 222, 223, 224, 225, 226, + -1, -1, 229, 230, 231, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + -1, -1, -1, -1, -1, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 498, 20, 21, 22, 23, 24, 25, 26, 27, + -1, 29, 30, 31, -1, -1, -1, -1, -1, -1, + -1, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, -1, 52, 53, 54, 55, -1, 57, + 58, 59, 60, 61, 62, 63, -1, -1, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, -1, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, -1, -1, -1, 105, -1, -1, + -1, 109, 110, 111, 112, 113, 114, 115, 116, 117, + -1, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, -1, 154, 155, 156, 157, + -1, -1, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, -1, -1, -1, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + -1, 229, -1, 231, 232, 233, -1, 235, 236, 237, + -1, -1, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, + 268, -1, 270, 271, 272, 273, -1, -1, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, -1, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, -1, 311, -1, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, -1, 356, 357, + 358, 359, 360, 361, 362, 363, 364, -1, 366, 367, + 368, 369, 370, -1, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, -1, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, -1, 397, + -1, 399, 400, -1, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, -1, 415, 416, -1, + 418, -1, -1, 421, 422, 423, 424, 425, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, -1, -1, + 438, 439, 440, 441, 442, -1, 444, 445, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, -1, 457, + 458, 459, 460, 461, 462, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 474, 475, 476, -1, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + -1, 29, 30, 31, -1, -1, -1, -1, -1, -1, + 498, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, -1, 52, 53, 54, 55, -1, 57, + 58, 59, 60, 61, 62, 63, -1, -1, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, -1, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, -1, -1, -1, 105, -1, -1, + -1, 109, 110, 111, 112, 113, 114, 115, 116, 117, + -1, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, -1, 154, 155, 156, 157, + -1, -1, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, -1, -1, -1, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + -1, 229, -1, 231, 232, 233, -1, 235, 236, 237, + -1, -1, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, + 268, -1, 270, 271, 272, 273, -1, -1, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, -1, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, -1, 311, -1, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, -1, 356, 357, + 358, 359, 360, 361, 362, 363, 364, -1, 366, 367, + 368, 369, 370, -1, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, -1, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, -1, 397, + -1, 399, 400, -1, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, -1, 415, 416, -1, + 418, -1, -1, 421, 422, 423, 424, 425, 426, 427, + 428, -1, -1, 431, 432, 433, 434, 435, -1, -1, + 438, 439, 440, 441, 442, -1, 444, 445, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, -1, 457, + 458, 459, 460, 461, 462, 3, -1, 5, 6, -1, + 8, 9, 10, 11, 12, -1, 474, 475, 476, -1, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + -1, 29, 30, 31, -1, -1, -1, -1, 36, -1, + 498, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, 76, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, 180, -1, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, -1, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + -1, 229, 230, 231, 232, 233, -1, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, 311, 312, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, -1, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + -1, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, -1, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, -1, 430, 431, 432, 433, 434, 435, 436, -1, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + -1, 479, -1, -1, -1, -1, -1, -1, -1, -1, + 488, 489, -1, -1, -1, 3, -1, 5, 6, 497, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + -1, 29, 30, 31, -1, -1, -1, -1, 36, -1, + -1, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, 76, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, 172, 173, 174, 175, 176, 177, + -1, 179, 180, -1, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, -1, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + 228, 229, 230, 231, 232, 233, -1, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, 311, 312, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, -1, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, -1, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + -1, 399, 400, -1, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, -1, 430, 431, 432, 433, 434, 435, 436, -1, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, -1, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 488, 489, -1, -1, -1, 3, -1, 5, 6, 497, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, -1, -1, -1, 35, 36, -1, + -1, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, 76, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, 180, -1, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, -1, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + -1, 229, 230, 231, 232, 233, -1, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, 311, 312, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, -1, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + -1, 399, 400, -1, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, -1, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, -1, 430, 431, 432, 433, 434, 435, 436, -1, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, -1, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 488, 489, -1, -1, -1, 3, -1, 5, 6, 497, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, -1, -1, -1, 35, 36, -1, + -1, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, 76, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, 180, -1, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, -1, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + -1, 229, 230, 231, 232, 233, -1, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, 311, 312, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, -1, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + -1, 399, 400, -1, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, -1, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, -1, 430, 431, 432, 433, 434, 435, 436, -1, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, -1, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 488, 489, -1, -1, -1, 3, -1, 5, 6, 497, + 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, + -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, + -1, 29, 30, 31, -1, -1, -1, -1, 36, -1, + -1, 39, 40, 41, -1, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, -1, 72, 73, 74, 75, 76, -1, + 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, -1, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, -1, 121, 122, 123, 124, 125, 126, 127, + -1, 129, 130, 131, 132, -1, -1, 135, 136, 137, + 138, 139, -1, 141, 142, 143, -1, 145, 146, 147, + -1, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, 166, -1, + 168, -1, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, 180, -1, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, -1, 197, + 198, 199, 200, 201, 202, 203, -1, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, -1, + -1, 229, 230, 231, 232, 233, -1, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 282, 283, -1, -1, 286, 287, + 288, -1, -1, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, + 308, 309, 310, 311, 312, 313, 314, 315, -1, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, -1, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, -1, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + -1, 399, 400, -1, 402, 403, 404, 405, 406, 407, + 408, -1, 410, 411, 412, -1, -1, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, -1, 430, 431, 432, 433, 434, 435, 436, -1, + 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, + 448, 449, 450, 451, -1, -1, 454, -1, -1, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 488, 489, -1, -1, -1, -1, -1, 495, 496, 497, + 3, -1, 5, 6, -1, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, 490, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, 172, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + 413, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, -1, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, 430, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, -1, -1, -1, + 3, -1, 5, 6, 497, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 488, 489, 3, -1, 5, + 6, -1, 8, 9, 497, 11, 12, -1, -1, -1, + -1, -1, -1, -1, 20, 21, 22, 23, 24, 25, + 26, 27, -1, 29, 30, 31, -1, -1, -1, -1, + 36, -1, -1, 39, 40, 41, -1, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, + 76, -1, 78, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, -1, 91, 92, 93, 94, 95, + 96, -1, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, -1, 119, -1, 121, 122, 123, 124, 125, + 126, 127, -1, 129, 130, 131, 132, -1, -1, 135, + 136, 137, 138, 139, -1, 141, 142, 143, -1, 145, + 146, 147, -1, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, + 166, -1, 168, -1, 170, 171, -1, 173, 174, 175, + 176, 177, -1, 179, 180, -1, 182, 183, 184, -1, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + -1, 197, 198, 199, 200, 201, 202, 203, -1, 205, + 206, 207, 208, 209, 210, 211, 212, 213, -1, 215, + -1, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, -1, -1, 229, 230, 231, 232, 233, -1, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, -1, 282, 283, -1, -1, + 286, 287, 288, -1, -1, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, -1, 308, 309, 310, 311, 312, 313, 314, 315, + -1, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, -1, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, -1, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, -1, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, -1, 399, 400, -1, 402, 403, 404, 405, + 406, 407, 408, -1, 410, 411, 412, -1, -1, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + 436, -1, 438, 439, 440, 441, 442, 443, 444, -1, + 446, 447, 448, 449, 450, 451, -1, -1, 454, -1, + -1, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 488, 489, 3, -1, 5, 6, -1, 8, + 9, 497, 11, 12, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, 36, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, 436, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, -1, -1, + -1, -1, 3, -1, 5, 6, -1, 8, 9, -1, + 11, 12, -1, -1, -1, -1, -1, -1, 497, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, 36, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, 436, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, -1, -1, -1, -1, + 3, -1, 5, 6, -1, 8, 9, -1, 11, 12, + -1, -1, -1, -1, -1, -1, 497, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, 36, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, -1, -1, -1, -1, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 497, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + 65, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, -1, 229, 230, 231, 232, 233, -1, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, 272, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + 285, 286, 287, 288, -1, -1, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, 436, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, -1, -1, 479, -1, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 497, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, 65, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, 78, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, 171, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, -1, 229, 230, 231, 232, 233, -1, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, 272, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, 285, 286, + 287, 288, -1, -1, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, 436, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + -1, -1, -1, -1, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 497, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, 65, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, 436, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, -1, -1, + -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 497, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, 65, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, 436, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, -1, -1, -1, -1, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 497, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, 65, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, -1, -1, -1, -1, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 497, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + 65, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, 230, 231, 232, 233, -1, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, 272, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, 436, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, -1, -1, -1, -1, 3, -1, 5, 6, + -1, -1, -1, -1, 11, -1, -1, -1, -1, -1, + -1, -1, 497, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, 78, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, -1, -1, -1, 105, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, 171, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + -1, -1, 229, 230, 231, 232, 233, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, 272, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, 284, -1, 286, + 287, 288, -1, -1, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + -1, -1, -1, -1, 3, -1, -1, -1, -1, -1, + -1, 488, 489, 490, -1, -1, -1, -1, -1, -1, + 497, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, 32, 33, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, -1, -1, -1, 105, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, -1, -1, + 479, -1, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 497, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, -1, -1, -1, 105, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, -1, -1, -1, -1, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 497, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, 401, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, -1, -1, 479, -1, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 497, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, -1, -1, -1, -1, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 497, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + -1, -1, -1, -1, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 497, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, -1, -1, + -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 497, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, -1, -1, -1, -1, + -1, -1, -1, 3, -1, 5, 6, -1, -1, -1, + 10, 11, -1, -1, -1, -1, 497, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, -1, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, -1, 154, 155, 156, 157, -1, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + -1, 181, -1, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, -1, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + -1, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, -1, 268, 269, + 270, 271, 272, 273, 274, -1, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, -1, 294, 295, 296, -1, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + -1, 311, -1, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, -1, 418, -1, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, -1, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 474, 475, 476, -1, -1, -1, + -1, -1, -1, -1, -1, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 3, -1, 5, 6, -1, -1, + -1, 10, 11, -1, -1, -1, -1, -1, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, -1, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, -1, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, -1, 154, 155, 156, 157, -1, + 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, -1, 181, -1, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, -1, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, -1, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, -1, 268, + 269, 270, 271, 272, 273, 274, -1, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, -1, 294, 295, 296, -1, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, -1, 311, -1, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, -1, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, -1, 418, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, -1, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 474, 475, 476, -1, -1, + -1, -1, -1, -1, -1, -1, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 3, -1, -1, -1, -1, + -1, -1, 10, -1, -1, 13, -1, -1, -1, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, -1, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, -1, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, -1, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + -1, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, -1, 163, 164, 165, 166, -1, + 168, 169, 170, 171, -1, 173, 174, 175, 176, 177, + -1, 179, 180, -1, 182, 183, 184, -1, 186, 187, + -1, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, -1, 215, -1, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, -1, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, -1, 250, 251, -1, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 282, 283, -1, 285, 286, 287, + 288, 289, -1, 291, 292, 293, 294, -1, -1, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, -1, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, -1, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, -1, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, -1, 447, + 448, 449, 450, 451, 452, -1, 454, -1, -1, -1, + -1, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, -1, 475, 476, 477, + -1, -1, -1, -1, -1, -1, -1, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 3, -1, -1, -1, + -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + -1, -1, -1, -1, -1, -1, -1, -1, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 3, -1, -1, + -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, + -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, -1, 29, 30, 31, -1, -1, -1, -1, + -1, -1, -1, 39, 40, 41, -1, 43, 44, 45, + 46, -1, 48, 49, 50, 51, 52, -1, 54, 55, + -1, 57, 58, 59, 60, 61, 62, 63, -1, -1, + 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, + 76, -1, -1, -1, 80, 81, 82, 83, 84, 85, + -1, 87, 88, 89, -1, 91, 92, 93, 94, 95, + 96, -1, -1, 99, 100, 101, -1, -1, -1, -1, + -1, -1, -1, 109, 110, 111, 112, 113, 114, 115, + 116, 117, -1, 119, -1, 121, 122, 123, 124, 125, + 126, 127, -1, 129, 130, 131, 132, -1, -1, 135, + 136, 137, 138, 139, -1, 141, 142, 143, -1, 145, + 146, 147, -1, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, + 166, -1, 168, -1, 170, -1, -1, -1, 174, 175, + 176, 177, -1, 179, 180, -1, 182, 183, 184, -1, + 186, 187, 188, 189, 190, -1, 192, 193, 194, 195, + -1, 197, 198, 199, 200, 201, 202, 203, -1, 205, + -1, 207, 208, 209, 210, 211, 212, 213, -1, 215, + -1, 217, -1, -1, 220, -1, 222, 223, 224, 225, + 226, -1, -1, 229, 230, -1, 232, -1, -1, 235, + 236, 237, -1, -1, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, -1, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, -1, 270, 271, -1, 273, -1, 275, + 276, 277, 278, 279, 280, -1, 282, 283, -1, -1, + 286, 287, 288, -1, -1, 291, 292, 293, -1, 295, + -1, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, -1, 308, 309, 310, 311, 312, 313, 314, 315, + -1, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, -1, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + -1, 347, 348, -1, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, -1, + 366, 367, 368, 369, 370, -1, 372, 373, 374, 375, + 376, -1, 378, 379, 380, 381, -1, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, -1, 399, 400, -1, 402, -1, 404, 405, + 406, 407, 408, -1, 410, 411, 412, -1, -1, 415, + 416, 417, 418, 419, -1, 421, 422, 423, 424, 425, + 426, 427, 428, -1, -1, 431, 432, 433, 434, 435, + -1, -1, 438, 439, 440, 441, 442, 443, 444, -1, + 446, -1, 448, 449, 450, 451, -1, -1, 454, -1, + -1, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, -1, -1, -1, -1, -1, -1, -1, -1, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 3, -1, + -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, + -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, -1, -1, -1, -1, -1, -1, -1, -1, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 3, + -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, + -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, -1, 29, 30, 31, -1, -1, + -1, -1, -1, -1, -1, 39, 40, 41, -1, 43, + 44, 45, 46, -1, 48, 49, 50, 51, 52, -1, + 54, 55, -1, 57, 58, 59, 60, 61, 62, 63, + -1, -1, 66, 67, 68, 69, 70, -1, 72, 73, + 74, 75, 76, -1, -1, -1, 80, 81, 82, 83, + 84, 85, -1, 87, 88, 89, -1, 91, 92, 93, + 94, 95, 96, -1, -1, 99, 100, 101, -1, -1, + -1, -1, -1, -1, -1, 109, 110, 111, 112, 113, + 114, 115, 116, 117, -1, 119, -1, 121, 122, 123, + 124, 125, 126, 127, -1, 129, 130, 131, 132, -1, + -1, 135, 136, 137, 138, 139, -1, 141, 142, 143, + -1, 145, 146, 147, -1, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, -1, 160, -1, 162, 163, + 164, 165, 166, -1, 168, -1, 170, -1, -1, -1, + 174, 175, 176, 177, -1, 179, 180, -1, 182, 183, + 184, -1, 186, 187, 188, 189, 190, -1, 192, 193, + 194, 195, -1, 197, 198, 199, 200, 201, 202, 203, + -1, 205, -1, 207, 208, 209, 210, 211, 212, 213, + -1, 215, -1, 217, -1, -1, 220, -1, 222, 223, + 224, 225, 226, -1, -1, 229, 230, -1, 232, -1, + -1, 235, 236, 237, -1, -1, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, -1, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, -1, 270, 271, -1, 273, + -1, 275, 276, 277, 278, 279, 280, -1, 282, 283, + -1, -1, 286, 287, 288, -1, -1, 291, 292, 293, + -1, 295, -1, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, -1, 308, 309, 310, 311, 312, 313, + 314, 315, -1, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, -1, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, -1, 347, 348, -1, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, -1, 366, 367, 368, 369, 370, -1, 372, 373, + 374, 375, 376, -1, 378, 379, 380, 381, -1, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, -1, 399, 400, -1, 402, -1, + 404, 405, 406, 407, 408, -1, 410, 411, 412, -1, + -1, 415, 416, 417, 418, 419, -1, 421, 422, 423, + 424, 425, 426, 427, 428, -1, -1, 431, 432, 433, + 434, 435, -1, -1, 438, 439, 440, 441, 442, 443, + 444, -1, 446, -1, 448, 449, 450, 451, -1, -1, + 454, -1, -1, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, -1, -1, -1, -1, -1, -1, -1, + -1, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 3, -1, -1, -1, -1, -1, -1, 10, -1, -1, + -1, -1, -1, -1, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, -1, -1, -1, -1, -1, -1, + -1, -1, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 3, -1, -1, -1, -1, -1, -1, 10, -1, + -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, -1, 29, 30, 31, + -1, -1, -1, -1, -1, -1, -1, 39, 40, 41, + -1, 43, 44, 45, 46, -1, 48, 49, 50, 51, + 52, -1, 54, 55, -1, 57, 58, 59, 60, 61, + 62, 63, -1, -1, 66, 67, 68, 69, 70, -1, + 72, 73, 74, 75, 76, -1, -1, -1, 80, 81, + 82, 83, 84, 85, -1, 87, 88, 89, -1, 91, + 92, 93, 94, 95, 96, -1, -1, 99, 100, 101, + -1, -1, -1, -1, -1, -1, -1, 109, 110, 111, + 112, 113, 114, 115, 116, 117, -1, 119, -1, 121, + 122, 123, 124, 125, 126, 127, -1, 129, 130, 131, + 132, -1, -1, 135, 136, 137, 138, 139, -1, 141, + 142, 143, -1, 145, 146, 147, -1, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, 166, -1, 168, -1, 170, -1, + -1, -1, 174, 175, 176, 177, -1, 179, 180, -1, + 182, 183, 184, -1, 186, 187, 188, 189, 190, -1, + 192, 193, 194, 195, -1, 197, 198, 199, 200, 201, + 202, 203, -1, 205, -1, 207, 208, 209, 210, 211, + 212, 213, -1, 215, -1, 217, -1, -1, 220, -1, + 222, 223, 224, 225, 226, -1, -1, 229, 230, -1, + 232, -1, -1, 235, 236, 237, -1, -1, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, -1, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, -1, 270, 271, + -1, 273, -1, 275, 276, 277, 278, 279, 280, -1, + 282, 283, -1, -1, 286, 287, 288, -1, -1, 291, + 292, 293, -1, 295, -1, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, -1, 308, 309, 310, 311, + 312, 313, 314, 315, -1, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + -1, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, -1, 347, 348, -1, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, -1, 366, 367, 368, 369, 370, -1, + 372, 373, 374, 375, 376, -1, 378, 379, 380, 381, + -1, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, -1, 399, 400, -1, + 402, -1, 404, 405, 406, 407, 408, -1, 410, 411, + 412, -1, -1, 415, 416, 417, 418, 419, -1, 421, + 422, 423, 424, 425, 426, 427, 428, -1, -1, 431, + 432, 433, 434, 435, -1, -1, 438, 439, 440, 441, + 442, 443, 444, -1, 446, -1, 448, 449, 450, 451, + -1, -1, 454, -1, -1, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, -1, -1, -1, -1, -1, + -1, -1, -1, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 3, -1, -1, -1, -1, -1, -1, 10, + -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 490, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 490, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 490, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, 290, 291, 292, 293, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + 445, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, -1, -1, + 3, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 490, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, -1, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, -1, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, -1, + -1, -1, 105, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + -1, 154, 155, 156, 157, -1, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, -1, -1, -1, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, -1, 231, 232, + 233, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, -1, -1, 268, -1, 270, 271, 272, + 273, -1, -1, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, 290, 291, 292, + 293, 294, 295, 296, -1, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, -1, 311, -1, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, -1, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, -1, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, -1, 418, -1, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + -1, 444, 445, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + -1, -1, 3, -1, 5, 6, -1, -1, -1, -1, + 11, 474, 475, 476, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, 490, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, -1, -1, -1, 105, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, 284, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, 5, 6, + -1, -1, -1, -1, 11, -1, -1, 488, 489, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, 78, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, -1, -1, -1, 105, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, 171, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + -1, -1, 229, 230, 231, 232, 233, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, 272, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, 284, -1, 286, + 287, 288, -1, -1, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, 5, 6, -1, -1, -1, -1, 11, -1, + -1, 488, 489, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, -1, + -1, -1, 105, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, 284, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, 6, -1, -1, + -1, -1, 11, -1, -1, 488, 489, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, -1, -1, -1, 105, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, 284, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, 11, -1, -1, 488, + 489, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, 172, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, 5, 6, -1, -1, -1, -1, + 11, -1, -1, 488, 489, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, 65, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, 436, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + 5, 6, -1, 8, 9, -1, 11, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, 230, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, -1, -1, 104, 105, -1, -1, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, 78, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, -1, -1, 104, 105, -1, + -1, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, 171, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + -1, -1, 229, 230, 231, 232, 233, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, 272, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, -1, + -1, 104, 105, -1, -1, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, 436, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, -1, -1, 104, 105, -1, -1, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, 230, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, 272, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, 284, + -1, 286, 287, 288, -1, -1, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, -1, -1, 104, 105, -1, -1, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, 78, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, -1, -1, 104, 105, -1, + -1, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, 171, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + -1, -1, 229, 230, 231, 232, 233, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, 272, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, -1, + -1, 104, 105, -1, -1, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, -1, -1, 104, 105, -1, -1, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, 104, + 105, -1, -1, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, 230, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, 272, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, 32, 33, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, -1, -1, -1, 105, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, 6, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, 78, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, -1, -1, -1, 105, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, 171, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + -1, -1, 229, 230, 231, 232, 233, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, 272, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, -1, + -1, -1, 105, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, -1, -1, -1, 105, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, 230, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, 272, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, 78, -1, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, 98, 99, 100, + 101, -1, -1, -1, 105, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + 171, -1, 173, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, 206, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, -1, -1, 229, 230, + 231, 232, 233, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, 403, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, 447, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, 78, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, 98, 99, 100, 101, -1, -1, -1, 105, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, 171, -1, 173, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, 206, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + -1, -1, 229, 230, 231, 232, 233, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, 272, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, 403, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, 98, 99, 100, 101, -1, + -1, -1, 105, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, 171, -1, + 173, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, 206, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, -1, -1, 229, 230, 231, 232, + 233, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, 272, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + 403, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, 447, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, -1, -1, -1, 105, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, 230, 231, 232, 233, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, -1, -1, 79, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, 169, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, 430, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, 169, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, 233, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, 430, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, 178, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, 97, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, 178, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + 169, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, 430, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, 97, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, 169, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + 401, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + 97, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, 285, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, 436, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, 436, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + 285, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, 12, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, 285, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, 401, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + 11, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + 37, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, 37, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, 37, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, -1, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, 183, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, -1, 48, 49, 50, 51, 52, -1, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, 76, -1, -1, -1, 80, 81, 82, 83, 84, + 85, -1, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, -1, 99, 100, 101, -1, -1, -1, + -1, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, -1, -1, -1, 174, + 175, 176, 177, -1, 179, 180, -1, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, -1, 207, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, -1, -1, 220, -1, 222, 223, 224, + 225, 226, -1, -1, 229, 230, -1, 232, -1, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, -1, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, -1, 270, 271, -1, 273, -1, + 275, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, 293, -1, + 295, -1, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, 310, 311, 312, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, -1, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, -1, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, -1, 399, 400, -1, 402, -1, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, 417, 418, 419, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, 443, 444, + -1, 446, -1, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 3, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25, 26, 27, -1, 29, 30, + 31, -1, -1, -1, -1, -1, -1, -1, 39, 40, + 41, -1, 43, 44, 45, 46, -1, 48, 49, 50, + 51, 52, -1, 54, 55, -1, 57, 58, 59, 60, + 61, 62, 63, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, -1, -1, -1, 80, + 81, 82, 83, 84, 85, -1, 87, 88, 89, -1, + 91, 92, 93, 94, 95, 96, -1, -1, 99, 100, + 101, -1, -1, -1, -1, -1, -1, -1, 109, 110, + 111, 112, 113, 114, 115, 116, 117, -1, 119, -1, + 121, 122, 123, 124, 125, 126, 127, -1, 129, 130, + 131, 132, -1, -1, 135, 136, 137, 138, 139, -1, + 141, 142, 143, -1, 145, 146, 147, -1, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, + -1, 162, 163, 164, 165, 166, -1, 168, -1, 170, + -1, -1, -1, 174, 175, 176, 177, -1, 179, 180, + -1, 182, 183, 184, -1, 186, 187, 188, 189, 190, + -1, 192, 193, 194, 195, -1, 197, 198, 199, 200, + 201, 202, 203, -1, 205, -1, 207, 208, 209, 210, + 211, 212, 213, -1, 215, -1, 217, -1, -1, 220, + -1, 222, 223, 224, 225, 226, -1, -1, 229, 230, + -1, 232, -1, -1, 235, 236, 237, -1, -1, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, -1, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, -1, 270, + 271, -1, 273, -1, 275, 276, 277, 278, 279, 280, + -1, 282, 283, -1, -1, 286, 287, 288, -1, -1, + 291, 292, 293, -1, 295, -1, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, + 311, 312, 313, 314, 315, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, -1, 347, 348, -1, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, -1, 366, 367, 368, 369, 370, + -1, 372, 373, 374, 375, 376, -1, 378, 379, 380, + 381, -1, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, -1, 399, 400, + -1, 402, -1, 404, 405, 406, 407, 408, -1, 410, + 411, 412, -1, -1, 415, 416, 417, 418, 419, -1, + 421, 422, 423, 424, 425, 426, 427, 428, -1, -1, + 431, 432, 433, 434, 435, -1, -1, 438, 439, 440, + 441, 442, 443, 444, -1, 446, -1, 448, 449, 450, + 451, -1, -1, 454, -1, -1, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 30, 31, -1, -1, -1, -1, -1, + -1, -1, 39, 40, 41, -1, 43, 44, 45, 46, + -1, 48, 49, 50, 51, 52, -1, 54, 55, -1, + 57, 58, 59, 60, 61, 62, 63, -1, -1, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + -1, -1, -1, 80, 81, 82, 83, 84, 85, -1, + 87, 88, 89, -1, 91, 92, 93, 94, 95, 96, + -1, -1, 99, 100, 101, -1, -1, -1, -1, -1, + -1, -1, 109, 110, 111, 112, 113, 114, 115, 116, + 117, -1, 119, -1, 121, 122, 123, 124, 125, 126, + 127, -1, 129, 130, 131, 132, -1, -1, 135, 136, + 137, 138, 139, -1, 141, 142, 143, -1, 145, 146, + 147, -1, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, 166, + -1, 168, -1, 170, -1, -1, -1, 174, 175, 176, + 177, -1, 179, 180, -1, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, 192, 193, 194, 195, -1, + 197, 198, 199, 200, 201, 202, 203, -1, 205, -1, + 207, 208, 209, 210, 211, 212, 213, -1, 215, -1, + 217, -1, -1, 220, -1, 222, 223, 224, 225, 226, + -1, -1, 229, 230, -1, 232, -1, -1, 235, 236, + 237, -1, -1, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + -1, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, -1, 270, 271, -1, 273, -1, 275, 276, + 277, 278, 279, 280, -1, 282, 283, -1, -1, 286, + 287, 288, -1, -1, 291, 292, 293, -1, 295, -1, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + -1, 308, 309, 310, 311, 312, 313, 314, 315, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -1, + 347, 348, -1, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, -1, 372, 373, 374, 375, 376, + -1, 378, 379, 380, 381, -1, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, 400, -1, 402, -1, 404, 405, 406, + 407, 408, -1, 410, 411, 412, -1, -1, 415, 416, + 417, 418, 419, -1, 421, 422, 423, 424, 425, 426, + 427, 428, -1, -1, 431, 432, 433, 434, 435, -1, + -1, 438, 439, 440, 441, 442, 443, 444, -1, 446, + -1, 448, 449, 450, 451, -1, -1, 454, -1, -1, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, + 23, 24, 25, 26, 27, -1, 29, 30, 31, -1, + -1, -1, -1, -1, -1, -1, 39, 40, 41, -1, + 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, + -1, 54, 55, -1, 57, 58, 59, 60, 61, 62, + 63, -1, -1, 66, 67, 68, 69, 70, -1, 72, + 73, 74, 75, 76, -1, -1, -1, 80, 81, 82, + 83, 84, 85, -1, 87, 88, 89, -1, 91, 92, + 93, 94, 95, 96, -1, -1, 99, 100, 101, -1, + -1, -1, -1, -1, -1, -1, 109, 110, 111, 112, + 113, 114, 115, 116, 117, -1, 119, -1, 121, 122, + 123, 124, 125, 126, 127, -1, 129, 130, 131, 132, + -1, -1, 135, 136, 137, 138, 139, -1, 141, 142, + 143, -1, 145, 146, 147, -1, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, 166, -1, 168, -1, 170, -1, -1, + -1, 174, 175, 176, 177, -1, 179, 180, -1, 182, + 183, 184, -1, 186, 187, 188, 189, 190, -1, 192, + 193, 194, 195, -1, 197, 198, 199, 200, 201, 202, + 203, -1, 205, -1, 207, 208, 209, 210, 211, 212, + 213, -1, 215, -1, 217, -1, -1, 220, -1, 222, + 223, 224, 225, 226, -1, -1, 229, 230, -1, 232, + -1, -1, 235, 236, 237, -1, -1, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, -1, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, -1, 270, 271, -1, + 273, -1, 275, 276, 277, 278, 279, 280, -1, 282, + 283, -1, -1, 286, 287, 288, -1, -1, 291, 292, + 293, -1, 295, -1, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, -1, 308, 309, 310, 311, 312, + 313, 314, 315, -1, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, -1, 347, 348, -1, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, -1, 366, 367, 368, 369, 370, -1, 372, + 373, 374, 375, 376, -1, 378, 379, 380, 381, -1, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, -1, 399, 400, -1, 402, + -1, 404, 405, 406, 407, 408, -1, 410, 411, 412, + -1, -1, 415, 416, 417, 418, 419, -1, 421, 422, + 423, 424, 425, 426, 427, 428, -1, -1, 431, 432, + 433, 434, 435, -1, -1, 438, 439, 440, 441, 442, + 443, 444, -1, 446, -1, 448, 449, 450, 451, -1, + -1, 454, -1, -1, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, 47, 48, + 49, 50, -1, 52, 53, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, -1, -1, 78, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, 98, + 99, 100, 101, -1, -1, -1, 105, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, -1, 154, 155, 156, 157, -1, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, 171, -1, 173, 174, 175, 176, 177, -1, + 179, -1, -1, -1, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, -1, 205, 206, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, -1, -1, + 229, -1, 231, 232, 233, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, + -1, 270, 271, 272, 273, -1, -1, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, 294, 295, 296, -1, 298, + 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, + 309, -1, 311, -1, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + 349, 350, 351, 352, 353, 354, -1, 356, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, -1, 397, -1, + 399, 400, -1, 402, 403, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, -1, 418, + -1, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, -1, 444, 445, 446, 447, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 474, 475, 476, -1, -1, + -1, 20, 21, 22, 23, 24, 25, 26, 27, -1, + 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, + 39, 40, 41, -1, 43, 44, 45, 46, -1, 48, + 49, 50, 51, 52, -1, 54, 55, -1, 57, 58, + 59, 60, 61, 62, 63, -1, -1, 66, 67, 68, + 69, 70, -1, 72, 73, 74, 75, 76, -1, -1, + -1, 80, 81, 82, 83, 84, 85, -1, 87, 88, + 89, -1, 91, 92, 93, 94, 95, 96, -1, -1, + 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, + 109, 110, 111, 112, 113, 114, 115, 116, 117, -1, + 119, -1, 121, 122, 123, 124, 125, 126, 127, -1, + 129, 130, 131, 132, -1, -1, 135, 136, 137, 138, + 139, -1, 141, 142, 143, -1, 145, 146, 147, -1, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, 166, -1, 168, + -1, 170, -1, -1, -1, 174, 175, 176, 177, -1, + 179, 180, -1, 182, -1, 184, -1, 186, 187, 188, + 189, 190, -1, 192, 193, 194, 195, -1, 197, 198, + 199, 200, 201, 202, 203, -1, 205, -1, 207, 208, + 209, 210, 211, 212, 213, -1, 215, -1, 217, -1, + -1, 220, -1, 222, 223, 224, 225, 226, -1, -1, + 229, 230, -1, 232, -1, -1, 235, 236, 237, -1, + -1, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, -1, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, -1, 275, 276, 277, 278, + 279, 280, -1, 282, 283, -1, -1, 286, 287, 288, + -1, -1, 291, 292, 293, -1, 295, -1, 297, 298, + 299, 300, 301, 302, 303, -1, 305, 306, -1, 308, + 309, 310, 311, 312, 313, 314, 315, -1, 317, 318, + 319, 320, 321, 322, 323, 324, -1, 326, 327, 328, + 329, 330, 331, -1, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, -1, 347, 348, + -1, 350, 351, 352, 353, 354, 355, -1, 357, 358, + 359, 360, 361, 362, 363, 364, -1, 366, 367, 368, + 369, 370, -1, 372, 373, 374, 375, 376, -1, 378, + 379, 380, 381, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, -1, + 399, 400, -1, 402, -1, 404, 405, 406, 407, 408, + -1, 410, 411, 412, -1, -1, 415, 416, 417, 418, + 419, -1, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, 431, 432, 433, 434, 435, -1, -1, 438, + 439, 440, 441, 442, 443, 444, -1, 446, -1, 448, + 449, 450, 451, -1, -1, 454, -1, -1, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, 274, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, 167, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, 52, 53, 54, + 55, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, 68, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + 115, 116, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + 165, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, 212, 213, -1, + 215, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, 277, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, -1, + 375, 376, 377, 378, 379, 380, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, 411, 412, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, 444, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476, -1, -1, -1, 20, 21, 22, 23, 24, + 25, 26, 27, -1, 29, 30, 31, -1, -1, -1, + -1, -1, -1, -1, 39, 40, 41, -1, 43, 44, + 45, 46, 47, 48, 49, 50, -1, -1, 53, -1, + -1, -1, 57, 58, 59, 60, 61, 62, 63, -1, + -1, 66, 67, -1, -1, 70, -1, 72, 73, 74, + 75, -1, -1, 78, -1, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, -1, 91, 92, 93, 94, + 95, 96, -1, 98, 99, 100, 101, -1, -1, -1, + 105, -1, -1, -1, 109, 110, 111, 112, 113, 114, + -1, -1, 117, -1, 119, -1, 121, 122, 123, 124, + 125, 126, 127, -1, 129, 130, 131, 132, -1, -1, + 135, 136, 137, 138, 139, -1, 141, 142, 143, -1, + 145, 146, 147, -1, 149, 150, 151, 152, -1, 154, + 155, 156, 157, -1, -1, 160, -1, 162, 163, 164, + -1, 166, -1, 168, -1, 170, 171, -1, 173, 174, + 175, 176, 177, -1, 179, -1, -1, -1, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, -1, 197, 198, 199, 200, 201, 202, 203, -1, + 205, 206, -1, 208, 209, 210, 211, -1, -1, -1, + -1, -1, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, -1, -1, 229, -1, 231, 232, 233, -1, + 235, 236, 237, -1, -1, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, -1, 257, -1, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, -1, 270, 271, 272, 273, -1, + -1, 276, -1, 278, 279, 280, -1, 282, 283, -1, + -1, 286, 287, 288, -1, -1, 291, 292, -1, 294, + 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, + 305, 306, -1, 308, 309, -1, 311, -1, 313, 314, + 315, -1, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, 328, 329, 330, 331, -1, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, -1, 347, 348, 349, 350, 351, 352, 353, 354, + -1, 356, 357, 358, 359, 360, 361, 362, 363, 364, + -1, 366, 367, 368, 369, 370, -1, 372, 373, -1, + 375, 376, 377, 378, 379, -1, 381, -1, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, -1, 397, -1, 399, 400, -1, 402, 403, 404, + 405, 406, 407, 408, -1, 410, -1, -1, -1, -1, + 415, 416, -1, 418, -1, -1, 421, 422, 423, 424, + 425, 426, 427, 428, -1, -1, 431, 432, 433, 434, + 435, -1, -1, 438, 439, 440, 441, 442, -1, -1, + -1, 446, 447, 448, 449, 450, 451, -1, -1, 454, + -1, -1, 457, 458, 459, 460, 461, 462, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 474, + 475, 476 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_int16 yystos[] = +{ + 0, 20, 30, 32, 33, 50, 60, 72, 74, 75, + 81, 83, 95, 97, 114, 117, 132, 134, 138, 144, + 152, 154, 161, 178, 195, 235, 236, 241, 253, 271, + 314, 328, 334, 335, 337, 342, 348, 351, 358, 364, + 365, 372, 376, 386, 401, 421, 432, 438, 443, 456, + 479, 480, 481, 482, 483, 484, 497, 504, 505, 506, + 507, 508, 509, 515, 516, 518, 519, 520, 521, 523, + 527, 539, 544, 545, 548, 549, 550, 569, 572, 573, + 588, 634, 637, 638, 641, 644, 645, 646, 654, 661, + 663, 664, 667, 670, 671, 675, 684, 688, 689, 690, + 693, 695, 696, 697, 698, 706, 708, 728, 732, 734, + 735, 745, 747, 754, 755, 758, 759, 760, 761, 762, + 771, 773, 775, 778, 782, 783, 791, 792, 795, 800, + 814, 846, 849, 850, 851, 856, 859, 861, 863, 865, + 866, 869, 870, 873, 875, 876, 880, 881, 882, 885, + 886, 887, 888, 889, 896, 898, 899, 900, 901, 907, + 909, 910, 916, 917, 918, 921, 922, 923, 924, 926, + 927, 929, 930, 932, 933, 935, 947, 949, 952, 954, + 955, 964, 966, 971, 976, 980, 981, 982, 983, 984, + 985, 991, 1027, 415, 459, 902, 27, 78, 94, 112, + 118, 136, 147, 156, 169, 174, 181, 200, 225, 246, + 286, 309, 319, 320, 323, 350, 353, 357, 359, 366, + 369, 388, 395, 400, 401, 404, 408, 418, 423, 436, + 449, 660, 902, 3, 20, 21, 22, 23, 24, 25, + 26, 27, 29, 30, 31, 39, 40, 41, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 57, 58, 59, 60, 61, 62, 63, 66, 67, + 68, 69, 70, 72, 73, 74, 75, 76, 78, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, + 92, 93, 94, 95, 96, 98, 99, 100, 101, 105, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 119, + 121, 122, 123, 124, 125, 126, 127, 129, 130, 131, + 132, 135, 136, 137, 138, 139, 141, 142, 143, 145, + 146, 147, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 160, 162, 163, 164, 165, 166, 168, 170, + 171, 173, 174, 175, 176, 177, 179, 180, 182, 183, + 184, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 197, 198, 199, 200, 201, 202, 203, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 215, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 229, 230, + 231, 232, 233, 235, 236, 237, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 270, 271, 272, 273, 275, + 276, 277, 278, 279, 280, 282, 283, 286, 287, 288, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 308, 309, 310, 311, + 312, 313, 314, 315, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 366, 367, 368, 369, 370, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 399, 400, 402, 403, 404, 405, 406, 407, 408, 410, + 411, 412, 415, 416, 417, 418, 419, 421, 422, 423, + 424, 425, 426, 427, 428, 431, 432, 433, 434, 435, + 438, 439, 440, 441, 442, 443, 444, 446, 447, 448, + 449, 450, 451, 454, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 1087, 1157, 1169, 1170, 1174, 1175, + 1176, 3, 28, 977, 1154, 1169, 1174, 447, 497, 940, + 284, 315, 902, 53, 497, 580, 22, 40, 65, 78, + 112, 118, 136, 147, 156, 169, 177, 181, 237, 286, + 289, 309, 323, 350, 359, 369, 388, 395, 404, 405, + 407, 408, 423, 430, 433, 436, 589, 643, 750, 801, + 815, 28, 314, 1154, 977, 28, 308, 367, 405, 407, + 6, 224, 857, 858, 1160, 22, 27, 65, 78, 94, + 112, 136, 147, 156, 169, 174, 181, 200, 246, 286, + 299, 309, 320, 323, 350, 353, 357, 359, 366, 369, + 388, 395, 401, 404, 408, 416, 418, 423, 436, 449, + 660, 763, 765, 766, 902, 1154, 97, 447, 497, 638, + 641, 644, 935, 948, 952, 955, 964, 971, 976, 980, + 11, 21, 28, 48, 164, 170, 172, 196, 226, 260, + 317, 336, 488, 489, 779, 780, 977, 1159, 1161, 28, + 97, 332, 365, 784, 785, 786, 1169, 169, 1169, 1156, + 1160, 401, 994, 779, 1169, 415, 1154, 299, 246, 112, + 200, 359, 400, 401, 497, 867, 868, 358, 1169, 28, + 370, 411, 415, 531, 540, 541, 1169, 25, 178, 784, + 785, 315, 902, 1169, 223, 28, 133, 996, 997, 66, + 91, 237, 255, 350, 359, 370, 411, 415, 462, 528, + 529, 530, 531, 28, 370, 411, 415, 531, 415, 285, + 1039, 1152, 1169, 994, 490, 1169, 173, 497, 941, 497, + 330, 986, 987, 1154, 986, 3, 52, 54, 55, 68, + 69, 115, 116, 137, 165, 212, 213, 215, 256, 258, + 277, 327, 374, 380, 411, 412, 444, 1061, 1063, 1065, + 1067, 1069, 1071, 1072, 1073, 1075, 1076, 1077, 1079, 1080, + 1170, 1174, 996, 997, 998, 1165, 12, 1166, 1167, 1169, + 1166, 1166, 981, 982, 985, 0, 500, 497, 940, 148, + 214, 290, 429, 999, 1000, 981, 983, 984, 123, 210, + 435, 501, 34, 906, 831, 1157, 768, 1169, 768, 1154, + 318, 768, 418, 1154, 111, 401, 819, 1157, 1169, 1176, + 3, 104, 108, 371, 1162, 1163, 1171, 1174, 1175, 1176, + 28, 190, 1152, 278, 449, 10, 17, 18, 19, 73, + 160, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 853, 855, 1117, 1118, 1169, 190, 1154, 819, 1154, 28, + 1162, 1163, 819, 1154, 1154, 190, 1152, 1154, 190, 768, + 1154, 342, 372, 28, 190, 1039, 1154, 362, 1154, 768, + 28, 244, 1162, 1163, 190, 1152, 224, 120, 220, 269, + 326, 903, 904, 905, 497, 495, 499, 1143, 1145, 934, + 935, 936, 937, 1171, 1152, 1154, 1169, 27, 65, 79, + 90, 112, 136, 174, 200, 225, 286, 320, 350, 353, + 395, 404, 416, 423, 763, 764, 765, 766, 1160, 906, + 951, 955, 964, 971, 980, 1152, 248, 768, 497, 190, + 768, 1154, 768, 418, 190, 1154, 111, 401, 405, 407, + 1162, 1163, 405, 407, 73, 160, 853, 340, 1154, 1154, + 1162, 190, 524, 1169, 190, 1154, 190, 768, 1154, 1154, + 362, 768, 244, 1162, 330, 366, 401, 449, 246, 94, + 200, 27, 90, 174, 320, 357, 416, 418, 422, 655, + 28, 1154, 978, 538, 1160, 1171, 858, 248, 190, 831, + 832, 190, 862, 190, 1154, 190, 770, 1061, 418, 111, + 401, 190, 818, 819, 190, 1163, 1164, 86, 449, 73, + 160, 190, 854, 855, 58, 190, 818, 190, 1164, 190, + 818, 190, 1154, 190, 1154, 362, 862, 190, 770, 190, + 244, 1164, 224, 190, 767, 768, 190, 1153, 1154, 190, + 1154, 906, 497, 953, 589, 948, 443, 934, 940, 1161, + 780, 781, 28, 781, 1161, 781, 28, 781, 1161, 781, + 781, 781, 1161, 1159, 1159, 977, 781, 318, 497, 497, + 611, 611, 611, 284, 413, 501, 611, 359, 1039, 1040, + 501, 897, 1160, 497, 950, 58, 449, 934, 86, 802, + 802, 1169, 47, 476, 220, 499, 287, 287, 284, 172, + 1160, 413, 906, 167, 776, 284, 5, 8, 9, 10, + 12, 36, 52, 54, 55, 64, 65, 68, 69, 76, + 78, 102, 103, 104, 105, 106, 107, 108, 115, 116, + 118, 153, 158, 159, 165, 180, 182, 212, 213, 215, + 230, 238, 239, 256, 258, 267, 269, 274, 275, 277, + 286, 297, 310, 327, 355, 371, 380, 396, 411, 412, + 417, 419, 420, 430, 436, 444, 464, 465, 466, 467, + 469, 470, 471, 472, 477, 488, 489, 490, 497, 981, + 1064, 1067, 1070, 1071, 1072, 1074, 1075, 1076, 1079, 1080, + 1084, 1086, 1087, 1088, 1090, 1113, 1114, 1115, 1119, 1137, + 1142, 1149, 1150, 1157, 1158, 1159, 1160, 1169, 1148, 1149, + 1160, 28, 546, 1151, 1152, 370, 528, 118, 537, 1160, + 538, 1160, 47, 70, 528, 476, 381, 904, 287, 172, + 413, 487, 47, 476, 220, 905, 497, 1152, 490, 1145, + 1040, 934, 171, 942, 1084, 1122, 986, 501, 497, 943, + 446, 1078, 1078, 1078, 497, 1066, 1066, 312, 497, 1068, + 68, 69, 1078, 1066, 1063, 458, 479, 497, 1081, 497, + 1081, 36, 1062, 497, 113, 188, 249, 252, 363, 474, + 497, 1082, 1083, 499, 769, 1066, 1148, 1146, 498, 498, + 506, 934, 944, 945, 946, 1152, 28, 133, 995, 995, + 58, 995, 161, 167, 234, 281, 1003, 1005, 1006, 1021, + 1023, 1024, 1025, 999, 1000, 172, 216, 1039, 1041, 497, + 67, 265, 300, 338, 372, 497, 829, 300, 334, 338, + 372, 769, 300, 338, 372, 3, 89, 142, 240, 300, + 338, 372, 404, 406, 456, 539, 542, 911, 912, 913, + 914, 796, 24, 138, 300, 338, 372, 440, 555, 1154, + 24, 138, 372, 435, 522, 460, 190, 1039, 61, 96, + 157, 193, 229, 265, 269, 300, 301, 338, 347, 356, + 364, 372, 384, 393, 397, 451, 539, 543, 835, 847, + 874, 497, 816, 1145, 338, 522, 196, 153, 24, 30, + 45, 75, 131, 138, 141, 168, 202, 265, 269, 279, + 288, 300, 338, 341, 342, 372, 440, 551, 553, 554, + 678, 874, 5, 488, 489, 652, 1161, 28, 190, 1152, + 768, 768, 497, 852, 300, 372, 499, 153, 284, 300, + 338, 372, 847, 874, 24, 138, 300, 338, 372, 196, + 517, 338, 456, 479, 510, 517, 300, 338, 372, 847, + 874, 284, 300, 338, 153, 37, 59, 110, 199, 247, + 250, 265, 299, 338, 343, 366, 372, 386, 551, 649, + 650, 300, 338, 448, 678, 686, 153, 300, 338, 372, + 24, 89, 131, 138, 141, 300, 334, 338, 372, 541, + 529, 531, 196, 153, 45, 129, 265, 338, 372, 551, + 552, 300, 338, 342, 372, 87, 130, 302, 406, 284, + 24, 30, 138, 300, 338, 372, 570, 571, 517, 167, + 338, 510, 517, 153, 338, 372, 551, 1154, 232, 120, + 285, 461, 501, 903, 28, 133, 445, 490, 498, 824, + 1084, 1123, 1124, 1170, 1084, 1144, 3, 28, 32, 33, + 34, 35, 36, 37, 38, 42, 56, 64, 65, 71, + 77, 79, 90, 97, 102, 103, 104, 106, 107, 108, + 118, 120, 128, 133, 134, 140, 144, 148, 159, 161, + 167, 169, 172, 178, 181, 185, 196, 204, 214, 216, + 227, 228, 234, 238, 239, 269, 274, 281, 284, 285, + 289, 290, 307, 316, 332, 346, 365, 371, 382, 398, + 401, 409, 413, 414, 420, 429, 430, 436, 437, 445, + 452, 453, 455, 456, 490, 1155, 1172, 1174, 1175, 1176, + 1177, 1143, 498, 501, 159, 284, 420, 535, 538, 652, + 938, 437, 931, 284, 831, 497, 768, 1154, 1061, 819, + 278, 73, 160, 855, 819, 819, 167, 1061, 768, 1154, + 1154, 498, 611, 1154, 71, 1061, 269, 172, 497, 736, + 510, 37, 925, 1154, 269, 510, 460, 190, 1152, 510, + 768, 768, 736, 433, 589, 284, 167, 883, 884, 510, + 269, 47, 525, 269, 423, 685, 269, 943, 89, 300, + 662, 87, 130, 302, 406, 37, 736, 167, 190, 510, + 449, 190, 1152, 190, 639, 1152, 1152, 449, 768, 802, + 1157, 418, 1157, 1157, 1154, 167, 1154, 660, 39, 53, + 109, 209, 265, 361, 153, 62, 344, 501, 556, 153, + 497, 153, 510, 153, 501, 556, 460, 153, 501, 556, + 153, 501, 190, 767, 190, 768, 190, 768, 153, 501, + 556, 1164, 153, 556, 153, 153, 556, 153, 556, 153, + 87, 130, 302, 406, 167, 153, 556, 153, 167, 190, + 153, 501, 556, 153, 501, 556, 153, 284, 1122, 401, + 498, 948, 781, 977, 781, 977, 781, 977, 781, 977, + 781, 977, 977, 977, 781, 977, 497, 612, 613, 1169, + 612, 28, 112, 136, 169, 174, 224, 225, 320, 353, + 359, 366, 401, 404, 423, 787, 1151, 1164, 786, 1154, + 196, 501, 967, 1160, 1061, 1126, 37, 1164, 802, 498, + 1152, 1154, 232, 1169, 167, 167, 787, 1164, 358, 1169, + 538, 284, 497, 1146, 495, 981, 1127, 1084, 1141, 497, + 497, 167, 497, 497, 981, 497, 497, 497, 497, 497, + 497, 497, 1084, 497, 497, 497, 497, 497, 497, 497, + 497, 981, 497, 497, 497, 497, 497, 497, 497, 497, + 1084, 1084, 1084, 981, 1084, 1122, 1145, 1160, 497, 1160, + 3, 10, 13, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 163, 164, 165, 166, 168, 169, 170, 171, 173, + 174, 175, 176, 177, 179, 180, 182, 183, 184, 186, + 187, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 215, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 250, 251, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 282, 283, + 285, 286, 287, 288, 289, 291, 292, 293, 294, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 447, 448, 449, 450, 451, 452, 454, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 475, 476, 477, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 1117, 1119, 1121, + 1173, 1178, 457, 1100, 296, 1084, 216, 501, 992, 497, + 1160, 1145, 992, 121, 192, 547, 501, 70, 118, 538, + 37, 3, 118, 237, 536, 652, 1080, 1160, 1160, 92, + 135, 1096, 101, 118, 532, 533, 535, 652, 118, 532, + 232, 1152, 93, 343, 772, 498, 940, 34, 44, 51, + 77, 191, 196, 218, 233, 286, 289, 377, 498, 501, + 987, 1153, 37, 497, 1122, 1159, 1078, 1078, 36, 1062, + 411, 411, 1159, 1159, 495, 495, 1159, 413, 413, 413, + 497, 413, 1159, 1155, 499, 1066, 172, 1028, 15, 487, + 1143, 1168, 498, 501, 943, 983, 983, 1001, 1002, 1084, + 983, 164, 260, 1012, 222, 265, 326, 375, 435, 28, + 1007, 1084, 488, 489, 1008, 1009, 1084, 1086, 1021, 1022, + 1006, 1005, 1003, 1004, 167, 1024, 279, 1026, 1003, 1021, + 1041, 956, 1152, 37, 1169, 372, 1122, 67, 413, 413, + 359, 196, 207, 290, 293, 374, 445, 490, 822, 823, + 824, 826, 828, 830, 1061, 1170, 413, 448, 413, 359, + 413, 413, 359, 234, 413, 413, 404, 528, 300, 911, + 913, 487, 915, 167, 178, 196, 348, 797, 798, 71, + 90, 149, 169, 316, 430, 608, 609, 90, 118, 269, + 413, 90, 413, 118, 269, 359, 90, 131, 141, 300, + 338, 733, 359, 668, 27, 65, 136, 174, 286, 320, + 353, 416, 423, 763, 764, 1154, 153, 338, 372, 551, + 284, 652, 364, 229, 413, 1169, 413, 274, 652, 122, + 217, 359, 370, 415, 530, 768, 344, 372, 835, 848, + 126, 498, 817, 822, 413, 436, 404, 1152, 79, 149, + 190, 596, 608, 1169, 79, 90, 871, 304, 284, 355, + 357, 418, 90, 871, 31, 341, 355, 357, 418, 355, + 1152, 168, 202, 279, 768, 497, 413, 413, 189, 497, + 560, 243, 404, 433, 458, 560, 90, 501, 126, 5, + 5, 300, 196, 153, 338, 372, 551, 874, 437, 437, + 266, 1061, 413, 359, 497, 853, 1154, 1152, 413, 413, + 359, 848, 126, 401, 401, 413, 413, 401, 736, 112, + 372, 542, 413, 512, 542, 413, 413, 359, 848, 126, + 1152, 413, 413, 1152, 1063, 652, 58, 651, 652, 652, + 110, 247, 250, 58, 413, 510, 254, 359, 510, 265, + 650, 413, 413, 274, 1160, 678, 768, 413, 413, 359, + 388, 323, 1160, 323, 413, 323, 413, 323, 736, 404, + 1039, 304, 304, 90, 413, 871, 359, 413, 413, 560, + 560, 768, 768, 768, 768, 1152, 46, 442, 46, 46, + 413, 46, 413, 442, 359, 497, 501, 542, 436, 694, + 1163, 413, 512, 542, 1152, 413, 871, 359, 300, 338, + 326, 339, 368, 534, 903, 1123, 1123, 1124, 498, 15, + 16, 501, 999, 1000, 496, 502, 1152, 936, 1154, 1152, + 218, 1061, 218, 284, 218, 218, 652, 768, 768, 218, + 218, 218, 1061, 218, 218, 218, 284, 413, 172, 413, + 574, 423, 497, 37, 153, 768, 737, 738, 1172, 911, + 1061, 284, 153, 665, 1154, 269, 304, 497, 511, 750, + 437, 330, 449, 1152, 28, 401, 456, 843, 511, 153, + 1163, 97, 178, 526, 588, 645, 708, 782, 800, 907, + 153, 1160, 686, 687, 153, 284, 1160, 1163, 240, 768, + 768, 768, 768, 145, 325, 497, 694, 269, 511, 1152, + 269, 647, 649, 269, 37, 279, 304, 497, 611, 611, + 190, 642, 1152, 167, 190, 803, 1154, 497, 740, 829, + 1154, 497, 820, 820, 37, 1061, 26, 49, 211, 709, + 224, 456, 458, 979, 361, 832, 831, 1061, 1154, 497, + 770, 1061, 818, 819, 1164, 1163, 153, 556, 153, 437, + 153, 437, 854, 855, 556, 818, 1164, 818, 1154, 1154, + 1061, 770, 1164, 694, 153, 767, 768, 1153, 1154, 1154, + 768, 498, 190, 1152, 948, 977, 977, 977, 977, 977, + 977, 612, 498, 501, 498, 175, 321, 354, 367, 402, + 1153, 767, 111, 369, 818, 1153, 278, 818, 818, 1153, + 1151, 1151, 1153, 767, 413, 456, 793, 148, 234, 691, + 692, 22, 151, 355, 375, 968, 1039, 273, 969, 498, + 501, 951, 413, 1152, 867, 868, 785, 784, 785, 172, + 179, 794, 1169, 27, 79, 136, 174, 225, 320, 353, + 423, 763, 764, 1122, 496, 1122, 1127, 1128, 452, 1138, + 1139, 1084, 1122, 497, 1159, 1159, 3, 113, 188, 249, + 252, 363, 474, 1129, 1130, 1160, 1122, 1122, 1122, 1159, + 1159, 1084, 1084, 853, 1084, 1123, 1125, 1132, 355, 488, + 489, 497, 1085, 1086, 1119, 1133, 498, 1122, 1084, 1125, + 1134, 1084, 56, 172, 228, 414, 1084, 1122, 1135, 1122, + 254, 1086, 1084, 1094, 1095, 1096, 254, 1084, 1096, 498, + 501, 1159, 1082, 1061, 1084, 1084, 1084, 1084, 1172, 411, + 42, 398, 1147, 768, 1084, 497, 981, 1136, 133, 135, + 159, 261, 262, 263, 264, 268, 269, 274, 420, 431, + 1131, 1084, 497, 1084, 413, 51, 191, 196, 233, 377, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 28, 35, 382, 1116, 181, 162, 1101, 355, 497, 1113, + 177, 237, 401, 405, 407, 433, 993, 1152, 1150, 1028, + 1123, 1028, 1152, 415, 497, 1160, 501, 498, 189, 189, + 556, 946, 935, 939, 1084, 498, 246, 269, 988, 1122, + 498, 498, 495, 476, 476, 498, 498, 1159, 496, 1159, + 498, 188, 249, 1083, 249, 1083, 1083, 1159, 252, 498, + 1155, 227, 356, 473, 497, 981, 1029, 1030, 1031, 1039, + 1044, 1054, 1087, 1089, 1090, 1169, 453, 1049, 1165, 946, + 944, 501, 38, 128, 437, 812, 355, 356, 488, 489, + 1009, 1011, 1086, 375, 222, 285, 501, 5, 1010, 1159, + 1010, 355, 356, 1011, 1151, 273, 379, 970, 1022, 1004, + 437, 965, 118, 298, 497, 957, 980, 37, 1169, 497, + 972, 973, 974, 1169, 498, 1163, 1154, 1154, 293, 58, + 1170, 498, 824, 826, 823, 826, 1170, 290, 498, 501, + 769, 1163, 1154, 1154, 1163, 1154, 1154, 1163, 1154, 1154, + 118, 535, 1161, 350, 436, 784, 359, 178, 784, 497, + 1154, 437, 804, 222, 222, 437, 497, 633, 190, 1154, + 274, 1163, 1154, 1154, 1084, 274, 1154, 1154, 31, 341, + 413, 413, 1154, 413, 669, 831, 497, 1061, 819, 73, + 160, 855, 819, 819, 167, 1061, 768, 1154, 184, 265, + 300, 338, 441, 672, 673, 674, 1039, 413, 871, 359, + 274, 122, 217, 1163, 1154, 284, 1154, 284, 498, 501, + 1162, 1164, 1154, 338, 551, 190, 596, 269, 1061, 1154, + 1159, 1169, 1152, 1154, 232, 1154, 28, 436, 1154, 190, + 1154, 190, 1169, 357, 418, 357, 418, 232, 1154, 28, + 436, 1154, 232, 355, 1152, 24, 138, 372, 679, 680, + 681, 682, 1172, 1163, 1154, 118, 173, 270, 437, 559, + 562, 563, 1172, 1154, 75, 282, 1154, 554, 284, 413, + 404, 1152, 413, 871, 359, 126, 1154, 1154, 501, 498, + 501, 1163, 1154, 877, 878, 1172, 284, 338, 413, 702, + 1163, 1154, 1154, 284, 1040, 1040, 1163, 1154, 1040, 1154, + 1162, 3, 89, 143, 202, 306, 428, 436, 439, 513, + 1163, 1154, 1154, 284, 338, 1163, 1154, 338, 372, 551, + 649, 652, 768, 1154, 652, 768, 1154, 652, 1163, 1154, + 372, 1163, 1154, 1154, 1161, 1153, 1153, 1163, 843, 1154, + 1153, 1154, 338, 372, 551, 552, 1152, 1152, 1154, 1154, + 1154, 1154, 1163, 1154, 24, 30, 138, 300, 338, 372, + 300, 338, 372, 736, 338, 372, 338, 372, 338, 874, + 1053, 1169, 190, 746, 1169, 190, 1169, 1163, 1154, 1154, + 1160, 1154, 877, 24, 571, 369, 1162, 338, 372, 551, + 1154, 1154, 1154, 413, 413, 84, 427, 326, 501, 999, + 999, 999, 1084, 1084, 445, 1124, 498, 1084, 1144, 931, + 274, 774, 1160, 37, 774, 136, 768, 774, 774, 218, + 437, 437, 774, 774, 774, 224, 774, 774, 774, 768, + 322, 575, 575, 200, 401, 707, 1084, 1061, 768, 498, + 501, 487, 600, 1172, 1154, 62, 172, 359, 448, 666, + 673, 674, 153, 279, 233, 590, 592, 594, 596, 605, + 608, 25, 196, 350, 399, 513, 514, 167, 1154, 449, + 1152, 37, 703, 402, 1040, 736, 524, 1169, 525, 589, + 815, 1154, 169, 768, 497, 635, 636, 1089, 1169, 323, + 1160, 736, 736, 736, 736, 497, 736, 1051, 1052, 1053, + 369, 153, 497, 153, 153, 152, 980, 768, 279, 590, + 1169, 437, 628, 456, 561, 269, 37, 611, 1160, 269, + 284, 3, 741, 742, 736, 26, 498, 821, 822, 827, + 37, 224, 347, 416, 455, 833, 834, 835, 836, 833, + 284, 224, 279, 123, 210, 421, 435, 710, 711, 1154, + 187, 187, 167, 556, 37, 510, 168, 919, 920, 556, + 556, 767, 768, 1154, 768, 1154, 556, 556, 556, 556, + 224, 556, 369, 167, 556, 556, 284, 556, 269, 498, + 613, 196, 196, 196, 196, 196, 460, 1153, 652, 653, + 181, 788, 789, 1163, 25, 794, 413, 497, 172, 151, + 375, 151, 375, 355, 435, 251, 1061, 1163, 456, 640, + 802, 802, 172, 284, 788, 58, 556, 831, 768, 1061, + 819, 278, 819, 819, 1061, 768, 1154, 498, 496, 496, + 501, 1084, 140, 1139, 1140, 37, 498, 1084, 498, 498, + 498, 172, 498, 498, 498, 498, 498, 498, 501, 501, + 498, 307, 498, 498, 497, 1085, 1085, 1122, 13, 17, + 18, 19, 196, 218, 286, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 1119, 1085, 498, 498, 167, 172, + 377, 498, 498, 37, 1135, 1122, 1135, 1135, 172, 498, + 498, 1172, 305, 1098, 37, 498, 501, 1084, 1172, 501, + 1084, 1146, 1084, 498, 476, 1085, 1085, 146, 1122, 172, + 133, 135, 159, 268, 274, 420, 431, 1131, 268, 146, + 853, 1084, 398, 1147, 1084, 1136, 1084, 413, 497, 981, + 497, 497, 295, 1105, 497, 1122, 405, 407, 405, 407, + 1152, 994, 994, 994, 1049, 999, 1049, 904, 1159, 1082, + 533, 946, 246, 497, 498, 1159, 1081, 1081, 496, 496, + 498, 981, 1044, 1054, 172, 497, 981, 1030, 1031, 37, + 1032, 1033, 1169, 501, 98, 173, 206, 221, 231, 257, + 349, 1036, 1033, 37, 1032, 1035, 1169, 1033, 479, 1048, + 1145, 1084, 181, 1013, 1002, 286, 1117, 1120, 478, 813, + 5, 1159, 1011, 285, 456, 435, 1008, 242, 1029, 453, + 1050, 443, 400, 436, 958, 959, 960, 1169, 284, 961, + 1169, 974, 975, 501, 1028, 487, 1146, 830, 769, 826, + 826, 58, 828, 492, 1164, 1164, 284, 1153, 287, 284, + 1084, 609, 1154, 497, 497, 497, 633, 200, 612, 726, + 153, 556, 413, 1163, 1154, 538, 1061, 768, 768, 1061, + 656, 1154, 184, 441, 413, 413, 656, 672, 678, 338, + 372, 551, 1154, 1154, 1154, 208, 274, 156, 822, 299, + 372, 413, 269, 153, 85, 598, 599, 726, 372, 24, + 138, 342, 343, 372, 555, 564, 565, 678, 872, 364, + 153, 556, 153, 556, 1154, 1154, 1154, 1154, 364, 364, + 232, 681, 682, 681, 498, 501, 683, 1160, 200, 498, + 501, 487, 499, 156, 1163, 1154, 338, 372, 551, 1154, + 1154, 1154, 284, 300, 338, 372, 24, 138, 300, 338, + 372, 1061, 266, 1061, 498, 501, 487, 1152, 413, 1164, + 437, 699, 156, 234, 306, 274, 1160, 306, 1164, 434, + 156, 413, 413, 359, 388, 843, 843, 843, 299, 372, + 90, 413, 871, 359, 118, 167, 566, 163, 802, 413, + 413, 244, 244, 244, 413, 413, 359, 413, 413, 359, + 413, 359, 413, 359, 413, 126, 556, 1061, 269, 1160, + 372, 872, 153, 556, 413, 413, 498, 1154, 413, 871, + 359, 413, 1163, 1154, 498, 498, 498, 1124, 496, 1061, + 768, 218, 774, 1154, 1154, 1154, 218, 389, 390, 576, + 1160, 576, 184, 498, 498, 172, 736, 738, 266, 286, + 488, 489, 652, 739, 826, 1120, 1160, 1177, 71, 77, + 90, 118, 120, 176, 204, 269, 274, 316, 332, 430, + 601, 602, 604, 152, 452, 510, 538, 1154, 538, 288, + 676, 1152, 1152, 1152, 498, 501, 1164, 181, 350, 1164, + 1159, 423, 1152, 611, 3, 167, 704, 47, 525, 401, + 685, 111, 943, 1084, 172, 501, 1153, 561, 743, 744, + 1160, 498, 501, 1154, 167, 612, 1152, 639, 1152, 1154, + 640, 497, 591, 1152, 498, 1154, 456, 458, 629, 560, + 37, 153, 980, 628, 413, 153, 1039, 487, 498, 501, + 710, 498, 501, 118, 487, 837, 1160, 538, 401, 825, + 826, 167, 842, 50, 345, 838, 839, 836, 839, 123, + 210, 365, 435, 894, 1154, 279, 284, 289, 184, 980, + 1061, 497, 498, 501, 556, 437, 556, 437, 556, 1154, + 1154, 694, 768, 153, 359, 359, 359, 359, 359, 1153, + 501, 1163, 456, 501, 790, 287, 1040, 369, 151, 151, + 111, 265, 1152, 1154, 1164, 787, 794, 1163, 218, 218, + 218, 218, 652, 218, 218, 218, 218, 218, 1127, 409, + 1084, 144, 1061, 498, 1084, 1131, 1084, 1084, 498, 1122, + 501, 1061, 1085, 1085, 1085, 1085, 133, 135, 269, 1085, + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1084, + 1084, 1084, 1061, 498, 498, 498, 1122, 498, 501, 58, + 1086, 1099, 498, 1172, 1095, 313, 394, 1097, 498, 501, + 448, 1091, 37, 498, 1160, 1084, 34, 34, 1084, 498, + 1084, 172, 268, 1084, 498, 146, 1085, 1085, 146, 146, + 1084, 1084, 1000, 453, 497, 1106, 1169, 498, 1122, 501, + 994, 994, 994, 994, 1152, 1152, 1152, 1013, 498, 1013, + 498, 951, 496, 1033, 1035, 1033, 497, 468, 1086, 498, + 1169, 497, 1030, 221, 294, 1037, 1030, 1037, 221, 1036, + 1037, 221, 403, 1042, 497, 1169, 497, 291, 58, 185, + 1020, 497, 813, 164, 226, 285, 456, 410, 101, 1084, + 346, 963, 442, 498, 501, 1146, 88, 963, 498, 501, + 973, 1050, 1084, 498, 492, 830, 423, 175, 354, 360, + 367, 402, 424, 799, 167, 799, 498, 497, 616, 617, + 807, 1089, 1169, 612, 612, 726, 1154, 498, 120, 204, + 265, 269, 727, 1154, 1154, 37, 437, 437, 224, 769, + 1163, 1154, 413, 871, 359, 413, 208, 1154, 58, 404, + 1154, 153, 596, 118, 1169, 676, 388, 176, 155, 189, + 269, 560, 510, 111, 176, 269, 388, 391, 560, 598, + 650, 372, 565, 423, 1154, 1169, 364, 680, 1154, 563, + 739, 1172, 1154, 299, 372, 413, 871, 359, 413, 156, + 413, 413, 359, 174, 286, 391, 748, 749, 174, 286, + 756, 757, 413, 413, 359, 498, 498, 498, 878, 266, + 652, 826, 879, 1120, 1160, 1177, 338, 1154, 497, 456, + 700, 1154, 1161, 1160, 1160, 1160, 1154, 1154, 1154, 1154, + 1161, 58, 404, 1154, 1154, 1154, 1154, 443, 1154, 1154, + 167, 167, 340, 167, 190, 1163, 1154, 1154, 1163, 1154, + 1154, 1154, 1154, 1154, 1154, 1154, 284, 77, 557, 153, + 26, 49, 423, 1169, 1154, 1160, 678, 1154, 1154, 1154, + 1154, 999, 498, 218, 774, 218, 218, 218, 774, 510, + 437, 581, 582, 656, 726, 456, 458, 768, 497, 768, + 1154, 1085, 31, 58, 603, 121, 192, 120, 274, 222, + 1152, 843, 174, 320, 722, 729, 730, 1169, 665, 497, + 304, 497, 591, 606, 203, 623, 594, 1164, 1164, 1061, + 497, 561, 28, 123, 210, 365, 435, 705, 413, 701, + 1163, 190, 1152, 687, 460, 284, 498, 1029, 636, 843, + 498, 501, 1053, 676, 694, 498, 647, 37, 279, 304, + 497, 953, 593, 595, 597, 608, 1169, 304, 624, 625, + 591, 623, 560, 282, 284, 630, 980, 642, 640, 561, + 1160, 1154, 804, 739, 3, 742, 284, 827, 1084, 1084, + 501, 497, 833, 423, 501, 43, 1084, 413, 497, 612, + 1152, 711, 656, 498, 919, 920, 1154, 1154, 556, 369, + 556, 1153, 1153, 1153, 1153, 1153, 652, 178, 789, 794, + 498, 1154, 111, 794, 172, 556, 274, 777, 1160, 777, + 777, 777, 218, 777, 777, 777, 777, 777, 1084, 498, + 498, 498, 172, 498, 1084, 172, 133, 135, 172, 167, + 146, 498, 463, 1093, 1122, 331, 442, 58, 1099, 1086, + 454, 454, 498, 1084, 265, 1084, 501, 1092, 1063, 1084, + 1084, 1084, 1084, 34, 34, 1084, 1084, 146, 498, 498, + 1084, 1107, 1169, 498, 1084, 1152, 1152, 1152, 1152, 1020, + 1160, 1020, 1160, 498, 1045, 1046, 1089, 497, 1098, 1032, + 497, 1153, 1030, 284, 437, 1038, 1030, 221, 1030, 1157, + 1052, 497, 1052, 1169, 995, 1084, 455, 1102, 853, 410, + 279, 1149, 980, 298, 980, 960, 284, 497, 962, 487, + 974, 963, 423, 498, 413, 784, 172, 726, 1084, 498, + 501, 456, 77, 806, 810, 806, 498, 498, 197, 614, + 121, 192, 202, 120, 439, 556, 1061, 1154, 1154, 1154, + 1154, 1154, 1154, 1154, 1164, 1154, 596, 600, 1161, 603, + 190, 190, 274, 652, 603, 274, 1161, 1169, 1061, 556, + 556, 487, 58, 404, 1154, 1154, 1154, 1154, 1154, 1163, + 1154, 1154, 1159, 1159, 1061, 501, 1159, 1159, 501, 1163, + 1154, 1154, 413, 1084, 71, 1164, 1154, 413, 413, 172, + 196, 456, 1153, 1153, 768, 1153, 153, 156, 768, 1160, + 1160, 1061, 556, 556, 413, 498, 218, 774, 774, 774, + 774, 497, 577, 578, 510, 125, 174, 207, 174, 1084, + 269, 602, 118, 37, 843, 611, 437, 632, 1157, 34, + 152, 196, 677, 681, 279, 590, 566, 150, 198, 497, + 369, 437, 612, 37, 1164, 699, 525, 269, 497, 169, + 1154, 635, 1160, 369, 561, 152, 980, 768, 279, 590, + 640, 498, 501, 456, 600, 58, 628, 566, 624, 83, + 404, 631, 456, 908, 37, 631, 172, 284, 497, 1152, + 1160, 824, 844, 845, 1170, 839, 1061, 167, 840, 1152, + 172, 413, 864, 333, 712, 205, 657, 556, 498, 556, + 556, 1154, 287, 216, 556, 788, 777, 1084, 498, 1085, + 172, 1084, 1084, 1084, 497, 498, 501, 498, 1099, 498, + 442, 385, 498, 498, 1084, 1084, 1084, 498, 304, 1108, + 498, 1102, 1102, 362, 989, 498, 501, 37, 1047, 118, + 1059, 1060, 1085, 80, 1153, 498, 1084, 497, 1030, 1038, + 497, 498, 1052, 498, 100, 182, 352, 497, 1014, 1015, + 1016, 1017, 1018, 1019, 1084, 1103, 1104, 1169, 999, 498, + 977, 958, 90, 805, 807, 134, 1084, 788, 284, 788, + 498, 614, 617, 286, 853, 768, 768, 811, 332, 614, + 497, 843, 498, 413, 372, 969, 37, 153, 153, 557, + 739, 1164, 1154, 413, 497, 819, 853, 855, 749, 497, + 497, 757, 1154, 498, 497, 372, 969, 1154, 1154, 497, + 497, 497, 456, 479, 928, 340, 928, 928, 167, 1154, + 557, 1154, 774, 583, 584, 1172, 53, 99, 124, 142, + 146, 168, 171, 186, 274, 324, 579, 577, 1160, 819, + 37, 860, 860, 498, 189, 497, 632, 245, 615, 200, + 497, 730, 722, 497, 498, 501, 1152, 498, 369, 28, + 82, 85, 91, 119, 176, 189, 201, 388, 391, 607, + 607, 1151, 1154, 1154, 498, 980, 700, 153, 111, 676, + 172, 1154, 37, 1154, 640, 591, 1152, 498, 595, 288, + 1169, 629, 624, 628, 123, 138, 313, 1154, 63, 71, + 237, 980, 768, 1039, 805, 172, 725, 826, 498, 501, + 423, 144, 507, 838, 841, 1049, 383, 383, 498, 259, + 283, 713, 714, 715, 167, 718, 656, 265, 441, 658, + 659, 1154, 794, 167, 1085, 1094, 1122, 265, 475, 58, + 999, 57, 127, 110, 990, 1048, 1045, 497, 1085, 498, + 501, 37, 1055, 1056, 1169, 498, 1153, 1122, 498, 497, + 373, 497, 498, 501, 501, 37, 1004, 442, 1154, 498, + 501, 270, 435, 790, 799, 556, 806, 843, 497, 560, + 812, 1152, 843, 612, 632, 1154, 404, 189, 437, 558, + 372, 969, 1154, 1126, 167, 752, 752, 1126, 1126, 1084, + 404, 1122, 1122, 567, 568, 1171, 767, 768, 767, 768, + 1153, 556, 498, 501, 490, 497, 535, 585, 652, 925, + 1160, 925, 269, 274, 324, 925, 925, 1049, 860, 41, + 194, 265, 610, 497, 648, 1084, 173, 303, 378, 284, + 619, 620, 621, 404, 498, 1157, 6, 731, 681, 591, + 623, 1154, 498, 676, 160, 751, 561, 908, 1152, 460, + 1029, 676, 980, 953, 624, 591, 623, 600, 497, 630, + 628, 629, 356, 356, 71, 287, 71, 640, 804, 498, + 1152, 726, 833, 844, 1061, 500, 134, 456, 456, 714, + 355, 401, 716, 139, 719, 452, 721, 441, 656, 676, + 556, 1084, 498, 498, 442, 1122, 183, 325, 356, 1109, + 164, 164, 612, 1052, 501, 1060, 1172, 498, 501, 167, + 1061, 498, 498, 1122, 497, 1122, 1015, 1104, 1106, 1022, + 980, 1049, 807, 372, 172, 632, 853, 812, 813, 611, + 632, 498, 726, 1154, 648, 1084, 404, 498, 290, 362, + 329, 753, 753, 498, 498, 498, 1154, 498, 498, 498, + 501, 1159, 928, 584, 535, 586, 587, 1160, 1160, 274, + 612, 490, 612, 1160, 1160, 202, 649, 498, 123, 435, + 284, 621, 284, 620, 1154, 497, 498, 501, 566, 369, + 676, 768, 37, 37, 497, 1154, 908, 640, 628, 566, + 624, 497, 626, 627, 1089, 1169, 631, 629, 630, 287, + 287, 497, 197, 808, 167, 839, 29, 211, 895, 174, + 174, 925, 355, 387, 720, 497, 152, 51, 101, 426, + 1084, 1110, 1111, 1110, 1110, 498, 58, 58, 372, 498, + 1086, 1056, 291, 3, 118, 269, 274, 1057, 1058, 37, + 1034, 339, 1043, 498, 1014, 498, 972, 788, 453, 618, + 498, 813, 615, 726, 969, 1154, 819, 58, 969, 413, + 567, 768, 498, 501, 612, 498, 392, 62, 265, 344, + 372, 622, 622, 498, 6, 369, 1154, 748, 980, 676, + 629, 624, 628, 1084, 498, 501, 810, 810, 630, 631, + 805, 497, 561, 139, 270, 497, 890, 892, 896, 955, + 964, 971, 980, 819, 819, 717, 1169, 1084, 722, 1111, + 355, 166, 311, 166, 311, 149, 1112, 1112, 1112, 612, + 612, 1169, 1098, 1085, 1085, 274, 1058, 1169, 497, 498, + 1049, 556, 497, 726, 619, 969, 768, 497, 587, 23, + 118, 274, 1154, 676, 908, 630, 628, 629, 498, 627, + 768, 811, 811, 631, 498, 807, 809, 631, 355, 891, + 892, 893, 981, 982, 501, 501, 498, 1157, 34, 101, + 181, 265, 410, 372, 372, 413, 437, 80, 1084, 1084, + 726, 1122, 676, 631, 629, 630, 810, 808, 498, 501, + 1049, 721, 498, 500, 413, 172, 497, 1111, 355, 292, + 1169, 1169, 1157, 1158, 1169, 1055, 498, 498, 498, 630, + 631, 811, 561, 807, 152, 893, 383, 383, 5, 723, + 724, 1159, 1160, 1172, 497, 118, 498, 631, 631, 722, + 456, 456, 498, 501, 1123, 1158, 1049, 1157, 174, 174, + 724, 999, 437, 497, 819, 819, 498, 1169, 723, 498 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_int16 yyr1[] = +{ + 0, 503, 504, 504, 504, 504, 504, 504, 505, 505, + 506, 506, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 508, 509, 510, 510, + 510, 511, 511, 512, 512, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 514, 514, 514, 514, 514, 514, + 515, 516, 516, 517, 517, 518, 518, 518, 518, 519, + 519, 519, 519, 519, 519, 520, 521, 522, 522, 523, + 523, 523, 523, 524, 524, 525, 525, 526, 526, 526, + 526, 526, 526, 527, 527, 527, 528, 528, 528, 529, + 529, 529, 529, 530, 530, 530, 530, 530, 530, 530, + 530, 530, 530, 530, 531, 531, 532, 532, 533, 533, + 534, 534, 534, 534, 535, 535, 535, 535, 536, 536, + 536, 536, 536, 536, 536, 537, 537, 537, 538, 538, + 539, 540, 540, 540, 540, 541, 541, 542, 542, 543, + 543, 544, 544, 544, 544, 544, 545, 546, 546, 547, + 547, 548, 549, 549, 549, 549, 549, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 551, 551, + 552, 552, 552, 553, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 555, 555, 556, 556, 556, 557, 557, + 558, 558, 559, 559, 559, 559, 560, 561, 561, 562, + 562, 563, 563, 563, 563, 564, 564, 565, 565, 565, + 565, 566, 566, 566, 566, 567, 568, 568, 569, 570, + 570, 571, 571, 571, 571, 572, 572, 573, 573, 574, + 574, 575, 575, 576, 576, 576, 577, 577, 578, 578, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 579, 580, 580, 581, 581, 582, 582, 583, + 583, 584, 585, 585, 585, 585, 585, 586, 586, 587, + 588, 588, 588, 588, 588, 588, 589, 589, 589, 589, + 589, 589, 589, 589, 590, 590, 591, 591, 592, 592, + 593, 593, 594, 594, 594, 595, 595, 596, 597, 597, + 598, 598, 599, 599, 600, 600, 601, 601, 601, 601, + 602, 602, 602, 602, 602, 602, 602, 602, 602, 603, + 603, 604, 604, 604, 604, 605, 606, 606, 606, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 608, + 608, 609, 609, 609, 609, 609, 609, 609, 610, 610, + 611, 611, 612, 612, 613, 614, 614, 615, 615, 615, + 615, 616, 616, 617, 617, 618, 618, 619, 619, 619, + 619, 619, 620, 621, 622, 622, 622, 622, 622, 623, + 623, 624, 624, 625, 626, 626, 627, 627, 627, 628, + 628, 629, 629, 629, 630, 630, 630, 630, 631, 631, + 632, 632, 633, 634, 634, 635, 635, 636, 636, 636, + 637, 637, 638, 638, 639, 640, 640, 640, 641, 641, + 642, 643, 643, 644, 645, 645, 646, 646, 647, 647, + 648, 648, 649, 649, 650, 650, 650, 650, 650, 650, + 650, 650, 650, 650, 650, 650, 650, 650, 651, 651, + 652, 652, 652, 652, 653, 653, 654, 654, 655, 655, + 656, 656, 657, 657, 658, 658, 659, 659, 660, 660, + 661, 662, 662, 663, 663, 664, 664, 665, 665, 666, + 666, 666, 666, 667, 668, 668, 669, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, + 671, 672, 672, 672, 672, 673, 673, 674, 674, 675, + 675, 676, 676, 677, 677, 678, 679, 679, 680, 680, + 680, 680, 681, 682, 683, 684, 684, 685, 685, 686, + 686, 687, 687, 688, 688, 688, 689, 689, 689, 689, + 690, 691, 691, 692, 692, 693, 693, 694, 694, 695, + 695, 696, 697, 698, 699, 699, 700, 700, 701, 701, + 702, 702, 703, 703, 704, 704, 705, 705, 705, 705, + 705, 706, 707, 707, 708, 708, 709, 709, 709, 710, + 710, 711, 711, 711, 711, 711, 712, 712, 713, 713, + 714, 715, 715, 716, 716, 717, 718, 718, 719, 719, + 720, 720, 721, 721, 722, 722, 723, 723, 723, 724, + 724, 724, 724, 725, 725, 726, 726, 727, 727, 727, + 727, 727, 727, 728, 728, 729, 729, 730, 731, 731, + 732, 733, 733, 733, 733, 734, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 736, 737, 737, 738, 738, 739, 739, 739, + 739, 739, 739, 740, 741, 741, 742, 743, 743, 744, + 744, 745, 745, 745, 745, 746, 746, 747, 748, 748, + 749, 749, 749, 749, 749, 750, 750, 751, 751, 752, + 752, 752, 753, 753, 754, 755, 755, 756, 756, 757, + 757, 758, 758, 759, 759, 760, 761, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, 762, 763, + 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, + 763, 763, 764, 764, 764, 764, 764, 765, 765, 765, + 765, 765, 765, 765, 765, 766, 766, 766, 767, 767, + 768, 768, 769, 769, 770, 770, 771, 772, 772, 772, + 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, + 773, 773, 773, 773, 773, 773, 773, 773, 774, 774, + 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, + 776, 776, 777, 777, 778, 778, 779, 779, 779, 779, + 779, 779, 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 780, 780, 781, 781, 782, 783, 783, 784, + 784, 784, 784, 784, 785, 785, 786, 786, 786, 786, + 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, + 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, + 788, 788, 789, 789, 790, 790, 791, 792, 792, 793, + 793, 794, 794, 795, 796, 796, 797, 797, 797, 798, + 798, 798, 799, 799, 799, 799, 799, 799, 800, 800, + 801, 801, 802, 802, 803, 803, 804, 804, 805, 805, + 806, 806, 807, 807, 807, 808, 808, 809, 809, 810, + 810, 811, 811, 812, 812, 812, 813, 813, 813, 814, + 814, 814, 814, 815, 815, 816, 816, 817, 817, 818, + 818, 819, 819, 819, 819, 820, 820, 821, 821, 822, + 822, 822, 822, 822, 823, 823, 823, 823, 823, 824, + 825, 826, 826, 826, 827, 827, 827, 828, 829, 829, + 829, 829, 830, 830, 831, 832, 832, 833, 833, 834, + 834, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 835, 835, 835, 835, 835, 835, 835, 835, 836, 836, + 836, 836, 836, 837, 837, 838, 839, 839, 839, 840, + 840, 841, 841, 842, 842, 843, 843, 844, 845, 845, + 846, 846, 846, 847, 847, 848, 848, 849, 849, 849, + 849, 849, 849, 850, 850, 851, 851, 852, 852, 852, + 852, 853, 853, 854, 854, 855, 856, 857, 857, 858, + 858, 859, 859, 859, 860, 860, 860, 861, 862, 862, + 863, 864, 864, 864, 864, 865, 866, 866, 866, 866, + 867, 867, 868, 868, 868, 869, 869, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, + 870, 870, 871, 871, 872, 872, 873, 873, 873, 873, + 873, 873, 874, 874, 875, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 875, 876, 877, 877, 878, 878, 879, 879, 879, 879, + 879, 880, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 882, 883, 883, 884, + 884, 885, 885, 885, 885, 886, 887, 887, 887, 887, + 887, 887, 887, 887, 888, 888, 889, 890, 890, 890, + 891, 891, 892, 892, 892, 892, 892, 893, 893, 894, + 894, 894, 894, 895, 895, 895, 896, 897, 897, 898, + 899, 899, 900, 900, 900, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 901, 901, 902, 902, 902, 903, + 903, 903, 903, 903, 904, 904, 904, 905, 905, 906, + 906, 906, 907, 907, 907, 907, 908, 908, 908, 908, + 909, 910, 911, 911, 912, 912, 913, 913, 913, 914, + 914, 914, 914, 914, 914, 914, 915, 915, 916, 916, + 916, 917, 918, 918, 918, 918, 919, 919, 920, 921, + 922, 922, 923, 924, 924, 924, 924, 924, 924, 924, + 925, 925, 926, 927, 927, 927, 927, 927, 927, 928, + 928, 929, 930, 930, 930, 930, 931, 931, 932, 932, + 933, 933, 934, 934, 935, 935, 936, 937, 937, 938, + 938, 938, 939, 939, 940, 940, 941, 941, 942, 942, + 943, 943, 944, 945, 945, 946, 946, 947, 947, 947, + 947, 948, 948, 948, 948, 948, 948, 948, 948, 948, + 949, 950, 950, 951, 951, 951, 951, 952, 952, 952, + 953, 953, 954, 954, 954, 954, 955, 956, 956, 957, + 957, 957, 957, 957, 958, 958, 959, 959, 960, 961, + 961, 961, 962, 962, 962, 963, 963, 964, 965, 965, + 966, 967, 967, 968, 968, 968, 968, 968, 968, 968, + 968, 969, 969, 970, 970, 970, 971, 972, 972, 973, + 973, 974, 975, 975, 976, 977, 978, 978, 978, 978, + 978, 978, 979, 979, 979, 980, 980, 981, 981, 982, + 982, 982, 982, 982, 982, 982, 982, 983, 983, 984, + 984, 984, 984, 984, 984, 984, 985, 985, 985, 986, + 986, 987, 988, 988, 988, 989, 989, 989, 990, 990, + 990, 991, 991, 992, 992, 993, 993, 993, 993, 993, + 993, 993, 993, 993, 994, 994, 995, 995, 995, 996, + 996, 997, 997, 998, 998, 999, 999, 1000, 1001, 1001, + 1002, 1002, 1003, 1003, 1003, 1003, 1004, 1004, 1005, 1005, + 1005, 1005, 1005, 1005, 1006, 1006, 1007, 1007, 1008, 1009, + 1009, 1009, 1010, 1010, 1011, 1011, 1012, 1012, 1013, 1013, + 1014, 1014, 1015, 1015, 1015, 1015, 1015, 1016, 1017, 1018, + 1019, 1020, 1020, 1021, 1021, 1022, 1022, 1023, 1023, 1024, + 1025, 1025, 1025, 1025, 1026, 1026, 1027, 1027, 1028, 1028, + 1029, 1029, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, + 1030, 1030, 1031, 1031, 1031, 1031, 1031, 1031, 1032, 1032, + 1032, 1032, 1033, 1033, 1034, 1034, 1035, 1035, 1035, 1035, + 1035, 1036, 1036, 1036, 1036, 1037, 1037, 1038, 1038, 1039, + 1039, 1039, 1039, 1040, 1040, 1041, 1041, 1041, 1042, 1043, + 1043, 1044, 1044, 1045, 1046, 1046, 1047, 1047, 1048, 1048, + 1049, 1049, 1050, 1050, 1050, 1051, 1051, 1052, 1052, 1053, + 1054, 1054, 1055, 1055, 1056, 1056, 1056, 1057, 1057, 1058, + 1058, 1058, 1058, 1059, 1059, 1060, 1060, 1061, 1061, 1061, + 1061, 1061, 1061, 1062, 1062, 1062, 1063, 1063, 1063, 1063, + 1063, 1063, 1063, 1064, 1064, 1064, 1064, 1065, 1065, 1066, + 1066, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, + 1067, 1067, 1068, 1068, 1069, 1069, 1070, 1070, 1071, 1072, + 1073, 1073, 1074, 1074, 1075, 1076, 1077, 1077, 1077, 1077, + 1077, 1077, 1078, 1078, 1079, 1079, 1079, 1079, 1080, 1081, + 1081, 1081, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, + 1082, 1082, 1082, 1082, 1082, 1082, 1083, 1083, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, + 1084, 1084, 1084, 1085, 1085, 1085, 1085, 1085, 1085, 1085, + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, + 1085, 1085, 1085, 1085, 1085, 1086, 1086, 1086, 1086, 1086, + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1088, 1088, 1089, 1089, + 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, + 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, + 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, + 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, + 1090, 1090, 1090, 1090, 1090, 1090, 1091, 1091, 1092, 1092, + 1092, 1092, 1093, 1094, 1094, 1095, 1095, 1096, 1096, 1097, + 1097, 1097, 1098, 1098, 1098, 1098, 1099, 1099, 1100, 1100, + 1101, 1101, 1102, 1102, 1103, 1103, 1104, 1105, 1105, 1105, + 1106, 1107, 1107, 1108, 1108, 1109, 1109, 1109, 1109, 1110, + 1110, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112, + 1112, 1113, 1113, 1113, 1114, 1114, 1115, 1116, 1116, 1116, + 1117, 1117, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1119, 1119, 1120, 1120, 1121, 1121, + 1121, 1121, 1121, 1121, 1122, 1122, 1123, 1123, 1124, 1124, + 1124, 1125, 1125, 1126, 1126, 1127, 1127, 1127, 1128, 1128, + 1129, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1131, + 1131, 1131, 1131, 1132, 1132, 1133, 1134, 1134, 1134, 1134, + 1134, 1135, 1135, 1135, 1136, 1136, 1137, 1138, 1138, 1139, + 1140, 1140, 1141, 1141, 1142, 1142, 1143, 1143, 1143, 1143, + 1144, 1144, 1145, 1145, 1146, 1146, 1147, 1147, 1148, 1148, + 1149, 1149, 1150, 1150, 1150, 1150, 1151, 1151, 1152, 1152, + 1153, 1153, 1154, 1155, 1156, 1157, 1157, 1158, 1158, 1158, + 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, + 1159, 1160, 1161, 1161, 1161, 1162, 1163, 1163, 1163, 1163, + 1164, 1164, 1165, 1166, 1167, 1167, 1168, 1168, 1169, 1169, + 1169, 1170, 1170, 1170, 1171, 1171, 1171, 1171, 1172, 1172, + 1172, 1172, 1172, 1173, 1173, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, + 1174, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, + 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, + 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, + 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, + 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, + 1175, 1175, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, + 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, + 1176, 1176, 1176, 1176, 1176, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_int8 yyr2[] = +{ + 0, 2, 1, 2, 2, 2, 2, 2, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 2, 5, 1, 1, + 0, 2, 0, 2, 0, 2, 2, 3, 3, 1, + 3, 3, 2, 1, 1, 2, 2, 2, 3, 3, + 5, 5, 5, 0, 3, 5, 5, 5, 5, 3, + 5, 3, 5, 3, 5, 5, 6, 1, 1, 6, + 4, 9, 7, 1, 0, 2, 0, 1, 1, 1, + 1, 1, 1, 2, 3, 3, 2, 5, 1, 3, + 3, 3, 3, 1, 3, 3, 2, 2, 2, 2, + 3, 3, 3, 3, 1, 3, 1, 3, 1, 1, + 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 3, 5, 1, 1, 1, 1, 1, 0, 1, 1, + 2, 1, 2, 3, 2, 1, 1, 2, 1, 2, + 1, 2, 3, 4, 3, 2, 4, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 4, 6, 4, + 6, 10, 13, 4, 6, 4, 10, 13, 4, 6, + 4, 6, 5, 7, 11, 14, 5, 7, 1, 3, + 4, 4, 4, 3, 2, 5, 3, 6, 4, 6, + 6, 5, 7, 6, 6, 5, 5, 6, 5, 9, + 4, 5, 7, 6, 4, 8, 4, 2, 4, 3, + 6, 4, 3, 3, 3, 2, 2, 3, 4, 4, + 3, 3, 3, 3, 3, 3, 4, 4, 3, 2, + 3, 2, 2, 3, 3, 2, 2, 3, 4, 4, + 4, 5, 1, 3, 2, 1, 1, 0, 2, 0, + 2, 0, 1, 1, 1, 3, 3, 2, 0, 1, + 3, 3, 1, 5, 3, 1, 2, 1, 3, 2, + 3, 6, 6, 10, 1, 2, 1, 3, 4, 1, + 3, 4, 6, 4, 8, 2, 2, 11, 9, 1, + 1, 1, 0, 1, 1, 1, 1, 3, 2, 0, + 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, + 4, 3, 2, 1, 0, 3, 0, 1, 0, 1, + 3, 2, 1, 1, 1, 3, 0, 1, 3, 1, + 13, 16, 12, 15, 14, 17, 1, 1, 2, 2, + 2, 2, 1, 0, 1, 0, 3, 0, 1, 3, + 1, 3, 1, 1, 1, 1, 1, 5, 2, 4, + 2, 2, 1, 0, 2, 0, 3, 1, 1, 2, + 2, 1, 3, 4, 5, 2, 5, 7, 5, 1, + 2, 1, 2, 2, 2, 3, 3, 3, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 5, 8, 3, 9, 4, 10, 11, 2, 0, + 3, 0, 1, 3, 1, 4, 0, 2, 2, 2, + 0, 1, 3, 3, 6, 4, 0, 1, 1, 2, + 2, 0, 3, 3, 2, 1, 1, 2, 2, 4, + 0, 1, 0, 6, 1, 3, 3, 3, 5, 2, + 0, 2, 2, 0, 3, 4, 4, 0, 2, 0, + 4, 0, 3, 8, 11, 1, 3, 1, 1, 3, + 6, 8, 7, 10, 6, 2, 3, 0, 8, 11, + 5, 1, 0, 6, 5, 8, 4, 6, 1, 0, + 3, 0, 1, 2, 2, 2, 1, 2, 3, 2, + 2, 2, 2, 3, 3, 3, 1, 3, 1, 0, + 1, 2, 2, 1, 1, 3, 6, 10, 1, 0, + 1, 2, 2, 0, 2, 2, 1, 0, 1, 0, + 7, 2, 0, 3, 5, 5, 8, 2, 0, 2, + 2, 2, 1, 5, 2, 0, 2, 6, 6, 6, + 10, 6, 6, 6, 9, 9, 6, 6, 9, 6, + 7, 2, 2, 2, 2, 1, 2, 1, 0, 7, + 6, 4, 0, 1, 3, 4, 1, 3, 1, 2, + 2, 2, 2, 1, 1, 10, 13, 2, 0, 2, + 2, 1, 0, 5, 4, 4, 11, 14, 12, 15, + 11, 2, 1, 4, 0, 8, 11, 1, 1, 7, + 9, 8, 10, 8, 4, 0, 5, 0, 2, 0, + 2, 0, 2, 0, 2, 0, 1, 1, 1, 1, + 1, 8, 1, 1, 17, 21, 1, 1, 2, 1, + 3, 1, 1, 1, 3, 1, 2, 0, 1, 2, + 4, 1, 1, 1, 1, 1, 3, 0, 1, 0, + 1, 1, 4, 0, 1, 1, 1, 3, 0, 1, + 1, 1, 1, 2, 0, 0, 2, 2, 1, 2, + 2, 2, 2, 11, 13, 1, 3, 5, 1, 3, + 5, 1, 2, 2, 1, 8, 6, 5, 4, 4, + 3, 7, 8, 6, 6, 6, 6, 6, 4, 7, + 5, 8, 3, 1, 3, 3, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 3, 3, 1, 0, 1, + 3, 7, 9, 9, 8, 3, 0, 13, 1, 3, + 5, 5, 3, 6, 2, 1, 0, 2, 0, 2, + 4, 0, 1, 0, 6, 8, 8, 1, 3, 5, + 5, 7, 9, 7, 9, 5, 6, 6, 4, 6, + 4, 6, 8, 4, 6, 4, 6, 5, 7, 1, + 1, 1, 2, 1, 2, 1, 1, 1, 3, 3, + 3, 3, 1, 1, 1, 1, 1, 2, 2, 1, + 3, 2, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 2, 2, 3, 1, 3, 5, 2, 2, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 8, 9, + 8, 6, 6, 9, 9, 9, 7, 10, 1, 1, + 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, + 2, 0, 1, 1, 2, 2, 1, 2, 3, 3, + 3, 3, 4, 4, 3, 3, 3, 4, 4, 3, + 4, 4, 1, 1, 1, 0, 8, 8, 11, 1, + 1, 2, 4, 5, 1, 3, 2, 2, 2, 2, + 1, 2, 2, 4, 3, 2, 2, 2, 2, 2, + 2, 3, 2, 2, 2, 5, 5, 5, 5, 5, + 1, 3, 1, 2, 3, 0, 6, 6, 9, 3, + 0, 3, 0, 5, 2, 0, 3, 3, 3, 7, + 7, 10, 1, 1, 1, 1, 1, 1, 15, 18, + 1, 0, 1, 0, 1, 0, 2, 0, 1, 3, + 4, 5, 2, 2, 4, 4, 0, 1, 3, 2, + 0, 1, 0, 1, 1, 0, 2, 2, 0, 9, + 12, 7, 7, 2, 0, 3, 2, 1, 3, 1, + 3, 2, 1, 1, 2, 3, 2, 1, 3, 3, + 3, 2, 2, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 4, 5, 1, 3, 3, 1, 3, 3, + 5, 6, 1, 3, 2, 1, 3, 1, 0, 1, + 2, 4, 5, 1, 1, 1, 1, 3, 3, 2, + 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, + 2, 1, 1, 1, 3, 2, 1, 4, 0, 3, + 0, 1, 1, 3, 5, 2, 0, 2, 1, 3, + 5, 5, 5, 1, 2, 1, 0, 4, 6, 4, + 6, 4, 6, 4, 6, 4, 6, 3, 5, 5, + 5, 1, 3, 1, 3, 2, 2, 1, 2, 1, + 2, 11, 10, 10, 2, 2, 0, 9, 2, 0, + 10, 11, 11, 5, 5, 8, 4, 4, 7, 7, + 1, 1, 1, 1, 1, 5, 5, 6, 6, 6, + 6, 6, 8, 8, 6, 6, 7, 9, 9, 8, + 10, 6, 6, 6, 6, 6, 6, 6, 8, 6, + 8, 6, 8, 7, 9, 6, 8, 7, 9, 8, + 10, 8, 10, 9, 11, 8, 10, 9, 11, 8, + 8, 7, 6, 6, 6, 6, 8, 8, 8, 8, + 6, 9, 1, 0, 2, 0, 8, 8, 8, 10, + 9, 8, 1, 0, 6, 6, 6, 6, 6, 6, + 6, 9, 9, 6, 6, 6, 8, 6, 8, 8, + 8, 8, 6, 8, 6, 8, 7, 9, 7, 9, + 6, 7, 1, 3, 3, 3, 1, 1, 1, 1, + 1, 7, 6, 6, 6, 6, 6, 6, 7, 7, + 6, 9, 9, 6, 6, 6, 6, 6, 6, 8, + 8, 8, 6, 7, 6, 6, 5, 1, 0, 3, + 3, 5, 6, 6, 6, 8, 5, 5, 6, 7, + 7, 7, 4, 4, 4, 6, 13, 1, 1, 3, + 3, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 1, 1, 1, 1, 1, 0, 3, 2, 0, 2, + 2, 2, 3, 3, 3, 3, 2, 3, 2, 5, + 4, 3, 3, 3, 3, 3, 1, 1, 0, 3, + 2, 2, 1, 2, 1, 3, 2, 1, 0, 2, + 3, 0, 9, 11, 12, 14, 3, 4, 4, 0, + 2, 5, 1, 0, 1, 2, 3, 3, 3, 1, + 2, 1, 1, 1, 1, 1, 1, 0, 5, 4, + 6, 4, 3, 5, 7, 9, 1, 3, 1, 5, + 4, 4, 6, 4, 6, 6, 5, 7, 9, 6, + 1, 0, 6, 11, 11, 11, 13, 9, 11, 1, + 1, 10, 4, 6, 2, 5, 2, 0, 6, 5, + 3, 5, 1, 3, 1, 1, 2, 1, 1, 1, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 3, 0, 2, 1, 3, 1, 0, 2, 4, 3, + 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 5, 3, 0, 1, 1, 1, 1, 3, 9, 12, + 3, 0, 2, 3, 2, 3, 7, 1, 3, 1, + 4, 4, 7, 2, 1, 1, 1, 3, 2, 8, + 5, 0, 4, 3, 0, 2, 0, 7, 2, 0, + 5, 3, 0, 2, 2, 2, 3, 1, 3, 1, + 2, 1, 0, 1, 2, 0, 8, 1, 3, 3, + 5, 2, 1, 3, 7, 1, 0, 3, 2, 2, + 2, 2, 0, 2, 2, 1, 1, 3, 3, 1, + 2, 4, 4, 2, 3, 5, 5, 1, 1, 9, + 9, 1, 2, 4, 4, 4, 2, 2, 3, 1, + 3, 9, 1, 2, 0, 7, 7, 0, 10, 6, + 0, 1, 0, 2, 0, 3, 3, 4, 4, 4, + 4, 3, 2, 1, 1, 0, 1, 1, 0, 1, + 5, 1, 0, 1, 1, 1, 0, 3, 1, 3, + 4, 3, 2, 2, 1, 1, 1, 0, 2, 4, + 5, 6, 4, 5, 2, 3, 1, 1, 1, 1, + 2, 2, 1, 1, 1, 1, 1, 1, 4, 0, + 1, 3, 1, 1, 1, 1, 1, 2, 4, 4, + 5, 2, 0, 1, 3, 1, 0, 1, 2, 3, + 2, 4, 2, 3, 2, 0, 4, 5, 2, 0, + 1, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 1, 4, 3, 4, 5, 4, 5, 4, 5, 2, + 4, 1, 1, 0, 2, 0, 1, 4, 5, 4, + 0, 2, 2, 2, 1, 1, 0, 5, 2, 1, + 2, 2, 4, 1, 3, 1, 2, 3, 6, 4, + 0, 2, 6, 2, 1, 3, 4, 0, 2, 0, + 2, 0, 2, 4, 0, 1, 0, 1, 3, 3, + 7, 12, 1, 3, 2, 3, 3, 1, 2, 2, + 2, 2, 1, 1, 3, 3, 2, 2, 3, 5, + 6, 2, 3, 3, 4, 0, 1, 1, 1, 1, + 1, 2, 4, 1, 1, 1, 1, 2, 3, 3, + 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 1, 3, 0, 1, 1, 1, 1, 5, 2, + 1, 1, 1, 1, 4, 1, 2, 2, 1, 3, + 3, 2, 1, 0, 5, 2, 5, 2, 1, 3, + 3, 0, 1, 1, 1, 1, 1, 1, 3, 3, + 3, 3, 3, 3, 3, 0, 1, 4, 1, 3, + 3, 5, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, + 2, 2, 3, 5, 4, 6, 3, 5, 4, 6, + 4, 6, 5, 7, 3, 2, 4, 2, 3, 3, + 4, 3, 4, 3, 4, 5, 6, 6, 7, 6, + 7, 3, 4, 4, 6, 2, 3, 4, 3, 4, + 4, 5, 1, 1, 3, 2, 2, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 5, 6, 3, 4, 1, 1, 2, 4, 1, + 1, 1, 2, 2, 2, 2, 1, 1, 4, 3, + 5, 6, 8, 6, 6, 4, 4, 1, 1, 1, + 5, 1, 1, 4, 1, 4, 1, 4, 1, 4, + 1, 1, 1, 1, 1, 1, 6, 4, 4, 6, + 4, 4, 4, 4, 4, 6, 5, 5, 5, 4, + 6, 4, 4, 4, 4, 5, 7, 7, 9, 5, + 4, 6, 5, 7, 7, 7, 2, 3, 3, 3, + 4, 0, 4, 1, 3, 3, 1, 1, 1, 2, + 2, 0, 2, 3, 3, 4, 2, 2, 5, 0, + 5, 0, 2, 0, 1, 3, 3, 2, 2, 0, + 6, 1, 0, 3, 0, 3, 3, 3, 0, 1, + 4, 2, 2, 2, 2, 2, 3, 2, 2, 3, + 0, 4, 3, 5, 4, 3, 5, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 1, 4, 1, 4, + 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, + 3, 1, 0, 1, 3, 3, 3, 2, 1, 3, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 7, 5, 3, 5, 5, 3, 3, + 5, 3, 2, 1, 1, 3, 5, 1, 2, 4, + 2, 0, 1, 0, 1, 2, 2, 2, 3, 5, + 1, 0, 1, 2, 0, 2, 1, 0, 1, 0, + 1, 3, 3, 2, 1, 1, 1, 3, 1, 2, + 1, 3, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 2, 6, 2, 3, 5, 1, 1, 1, + 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, + 1, 3, 10, 4, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +}; + + +enum { YYENOMEM = -2 }; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (&yylloc, yyscanner, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (0) +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +# ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + +/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ + +YY_ATTRIBUTE_UNUSED +static int +yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) +{ + int res = 0; + int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; + if (0 <= yylocp->first_line) + { + res += YYFPRINTF (yyo, "%d", yylocp->first_line); + if (0 <= yylocp->first_column) + res += YYFPRINTF (yyo, ".%d", yylocp->first_column); + } + if (0 <= yylocp->last_line) + { + if (yylocp->first_line < yylocp->last_line) + { + res += YYFPRINTF (yyo, "-%d", yylocp->last_line); + if (0 <= end_col) + res += YYFPRINTF (yyo, ".%d", end_col); + } + else if (0 <= end_col && yylocp->first_column < end_col) + res += YYFPRINTF (yyo, "-%d", end_col); + } + return res; + } + +# define YY_LOCATION_PRINT(File, Loc) \ + yy_location_print_ (File, &(Loc)) + +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +# endif /* !defined YY_LOCATION_PRINT */ + + +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Kind, Value, Location, yyscanner); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, core_yyscan_t yyscanner) +{ + FILE *yyoutput = yyo; + YY_USE (yyoutput); + YY_USE (yylocationp); + YY_USE (yyscanner); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yykind < YYNTOKENS) + YYPRINT (yyo, yytoknum[yykind], *yyvaluep); +# endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ + +static void +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, core_yyscan_t yyscanner) +{ + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + + YY_LOCATION_PRINT (yyo, *yylocationp); + YYFPRINTF (yyo, ": "); + yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, yyscanner); + YYFPRINTF (yyo, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, + int yyrule, core_yyscan_t yyscanner) +{ + int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)], + &(yylsp[(yyi + 1) - (yynrhs)]), yyscanner); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, yylsp, Rule, yyscanner); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + + + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, core_yyscan_t yyscanner) +{ + YY_USE (yyvaluep); + YY_USE (yylocationp); + YY_USE (yyscanner); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (core_yyscan_t yyscanner) +{ +/* Lookahead token kind. */ +int yychar; + + +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); + +/* Location data for the lookahead symbol. */ +static YYLTYPE yyloc_default +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + = { 1, 1, 1, 1 } +# endif +; +YYLTYPE yylloc = yyloc_default; + + /* Number of syntax errors so far. */ + int yynerrs = 0; + + yy_state_fast_t yystate = 0; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus = 0; + + /* Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; + + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; + + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; + + /* The location stack: array, bottom, top. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp = yyls; + + int yyn; + /* The return value of yyparse. */ + int yyresult; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + YYLTYPE yyloc; + + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[3]; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yychar = YYEMPTY; /* Cause a token to be read. */ + yylsp[0] = yylloc; + goto yysetstate; + + +/*------------------------------------------------------------. +| yynewstate -- push a new state, which is found in yystate. | +`------------------------------------------------------------*/ +yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); + + if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else + { + /* Get the current used size of the three stacks, in elements. */ + YYPTRDIFF_T yysize = yyssp - yyss + 1; + +# if defined yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + yy_state_t *yyss1 = yyss; + YYSTYPE *yyvs1 = yyvs; + YYLTYPE *yyls1 = yyls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yyls1, yysize * YYSIZEOF (*yylsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; + yyls = yyls1; + } +# else /* defined YYSTACK_RELOCATE */ + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yy_state_t *yyss1 = yyss; + union yyalloc *yyptr = + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + yylsp = yyls + yysize - 1; + + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token\n")); + yychar = yylex (&yylval, &yylloc, yyscanner); + } + + if (yychar <= YYEOF) + { + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + yyerror_range[1] = yylloc; + goto yyerrlab1; + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + *++yylsp = yylloc; + + /* Discard the shifted token. */ + yychar = YYEMPTY; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + /* Default location. */ + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); + yyerror_range[1] = yyloc; + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: /* parse_toplevel: stmtmulti */ +#line 828 "gram.y" + { + pg_yyget_extra(yyscanner)->parsetree = (yyvsp[0].list); + } +#line 27418 "gram.c" + break; + + case 3: /* parse_toplevel: MODE_TYPE_NAME Typename */ +#line 832 "gram.y" + { + pg_yyget_extra(yyscanner)->parsetree = list_make1((yyvsp[0].typnam)); + } +#line 27426 "gram.c" + break; + + case 4: /* parse_toplevel: MODE_PLPGSQL_EXPR PLpgSQL_Expr */ +#line 836 "gram.y" + { + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt((yyvsp[0].node), 0)); + } +#line 27435 "gram.c" + break; + + case 5: /* parse_toplevel: MODE_PLPGSQL_ASSIGN1 PLAssignStmt */ +#line 841 "gram.y" + { + PLAssignStmt *n = (PLAssignStmt *) (yyvsp[0].node); + n->nnames = 1; + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt((Node *) n, 0)); + } +#line 27446 "gram.c" + break; + + case 6: /* parse_toplevel: MODE_PLPGSQL_ASSIGN2 PLAssignStmt */ +#line 848 "gram.y" + { + PLAssignStmt *n = (PLAssignStmt *) (yyvsp[0].node); + n->nnames = 2; + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt((Node *) n, 0)); + } +#line 27457 "gram.c" + break; + + case 7: /* parse_toplevel: MODE_PLPGSQL_ASSIGN3 PLAssignStmt */ +#line 855 "gram.y" + { + PLAssignStmt *n = (PLAssignStmt *) (yyvsp[0].node); + n->nnames = 3; + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt((Node *) n, 0)); + } +#line 27468 "gram.c" + break; + + case 8: /* stmtmulti: stmtmulti ';' toplevel_stmt */ +#line 874 "gram.y" + { + if ((yyvsp[-2].list) != NIL) + { + /* update length of previous stmt */ + updateRawStmtEnd(llast_node(RawStmt, (yyvsp[-2].list)), (yylsp[-1])); + } + if ((yyvsp[0].node) != NULL) + (yyval.list) = lappend((yyvsp[-2].list), makeRawStmt((yyvsp[0].node), (yylsp[-1]) + 1)); + else + (yyval.list) = (yyvsp[-2].list); + } +#line 27484 "gram.c" + break; + + case 9: /* stmtmulti: toplevel_stmt */ +#line 886 "gram.y" + { + if ((yyvsp[0].node) != NULL) + (yyval.list) = list_make1(makeRawStmt((yyvsp[0].node), 0)); + else + (yyval.list) = NIL; + } +#line 27495 "gram.c" + break; + + case 135: /* stmt: %empty */ +#line 1028 "gram.y" + { (yyval.node) = NULL; } +#line 27501 "gram.c" + break; + + case 136: /* CallStmt: CALL func_application */ +#line 1038 "gram.y" + { + CallStmt *n = makeNode(CallStmt); + n->funccall = castNode(FuncCall, (yyvsp[0].node)); + (yyval.node) = (Node *)n; + } +#line 27511 "gram.c" + break; + + case 137: /* CreateRoleStmt: CREATE ROLE RoleId opt_with OptRoleList */ +#line 1053 "gram.y" + { + CreateRoleStmt *n = makeNode(CreateRoleStmt); + n->stmt_type = ROLESTMT_ROLE; + n->role = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27523 "gram.c" + break; + + case 141: /* OptRoleList: OptRoleList CreateOptRoleElem */ +#line 1074 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 27529 "gram.c" + break; + + case 142: /* OptRoleList: %empty */ +#line 1075 "gram.y" + { (yyval.list) = NIL; } +#line 27535 "gram.c" + break; + + case 143: /* AlterOptRoleList: AlterOptRoleList AlterOptRoleElem */ +#line 1079 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 27541 "gram.c" + break; + + case 144: /* AlterOptRoleList: %empty */ +#line 1080 "gram.y" + { (yyval.list) = NIL; } +#line 27547 "gram.c" + break; + + case 145: /* AlterOptRoleElem: PASSWORD Sconst */ +#line 1085 "gram.y" + { + (yyval.defelt) = makeDefElem("password", + (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 27556 "gram.c" + break; + + case 146: /* AlterOptRoleElem: PASSWORD NULL_P */ +#line 1090 "gram.y" + { + (yyval.defelt) = makeDefElem("password", NULL, (yylsp[-1])); + } +#line 27564 "gram.c" + break; + + case 147: /* AlterOptRoleElem: ENCRYPTED PASSWORD Sconst */ +#line 1094 "gram.y" + { + /* + * These days, passwords are always stored in encrypted + * form, so there is no difference between PASSWORD and + * ENCRYPTED PASSWORD. + */ + (yyval.defelt) = makeDefElem("password", + (Node *)makeString((yyvsp[0].str)), (yylsp[-2])); + } +#line 27578 "gram.c" + break; + + case 148: /* AlterOptRoleElem: UNENCRYPTED PASSWORD Sconst */ +#line 1104 "gram.y" + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("UNENCRYPTED PASSWORD is no longer supported"), + errhint("Remove UNENCRYPTED to store the password in encrypted form instead."), + parser_errposition((yylsp[-2])))); + } +#line 27590 "gram.c" + break; + + case 149: /* AlterOptRoleElem: INHERIT */ +#line 1112 "gram.y" + { + (yyval.defelt) = makeDefElem("inherit", (Node *)makeInteger(true), (yylsp[0])); + } +#line 27598 "gram.c" + break; + + case 150: /* AlterOptRoleElem: CONNECTION LIMIT SignedIconst */ +#line 1116 "gram.y" + { + (yyval.defelt) = makeDefElem("connectionlimit", (Node *)makeInteger((yyvsp[0].ival)), (yylsp[-2])); + } +#line 27606 "gram.c" + break; + + case 151: /* AlterOptRoleElem: VALID UNTIL Sconst */ +#line 1120 "gram.y" + { + (yyval.defelt) = makeDefElem("validUntil", (Node *)makeString((yyvsp[0].str)), (yylsp[-2])); + } +#line 27614 "gram.c" + break; + + case 152: /* AlterOptRoleElem: USER role_list */ +#line 1125 "gram.y" + { + (yyval.defelt) = makeDefElem("rolemembers", (Node *)(yyvsp[0].list), (yylsp[-1])); + } +#line 27622 "gram.c" + break; + + case 153: /* AlterOptRoleElem: IDENT */ +#line 1129 "gram.y" + { + /* + * We handle identifiers that aren't parser keywords with + * the following special-case codes, to avoid bloating the + * size of the main parser. + */ + if (strcmp((yyvsp[0].str), "superuser") == 0) + (yyval.defelt) = makeDefElem("superuser", (Node *)makeInteger(true), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "nosuperuser") == 0) + (yyval.defelt) = makeDefElem("superuser", (Node *)makeInteger(false), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "createrole") == 0) + (yyval.defelt) = makeDefElem("createrole", (Node *)makeInteger(true), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "nocreaterole") == 0) + (yyval.defelt) = makeDefElem("createrole", (Node *)makeInteger(false), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "replication") == 0) + (yyval.defelt) = makeDefElem("isreplication", (Node *)makeInteger(true), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "noreplication") == 0) + (yyval.defelt) = makeDefElem("isreplication", (Node *)makeInteger(false), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "createdb") == 0) + (yyval.defelt) = makeDefElem("createdb", (Node *)makeInteger(true), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "nocreatedb") == 0) + (yyval.defelt) = makeDefElem("createdb", (Node *)makeInteger(false), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "login") == 0) + (yyval.defelt) = makeDefElem("canlogin", (Node *)makeInteger(true), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "nologin") == 0) + (yyval.defelt) = makeDefElem("canlogin", (Node *)makeInteger(false), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "bypassrls") == 0) + (yyval.defelt) = makeDefElem("bypassrls", (Node *)makeInteger(true), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "nobypassrls") == 0) + (yyval.defelt) = makeDefElem("bypassrls", (Node *)makeInteger(false), (yylsp[0])); + else if (strcmp((yyvsp[0].str), "noinherit") == 0) + { + /* + * Note that INHERIT is a keyword, so it's handled by main parser, but + * NOINHERIT is handled here. + */ + (yyval.defelt) = makeDefElem("inherit", (Node *)makeInteger(false), (yylsp[0])); + } + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized role option \"%s\"", (yyvsp[0].str)), + parser_errposition((yylsp[0])))); + } +#line 27671 "gram.c" + break; + + case 154: /* CreateOptRoleElem: AlterOptRoleElem */ +#line 1176 "gram.y" + { (yyval.defelt) = (yyvsp[0].defelt); } +#line 27677 "gram.c" + break; + + case 155: /* CreateOptRoleElem: SYSID Iconst */ +#line 1179 "gram.y" + { + (yyval.defelt) = makeDefElem("sysid", (Node *)makeInteger((yyvsp[0].ival)), (yylsp[-1])); + } +#line 27685 "gram.c" + break; + + case 156: /* CreateOptRoleElem: ADMIN role_list */ +#line 1183 "gram.y" + { + (yyval.defelt) = makeDefElem("adminmembers", (Node *)(yyvsp[0].list), (yylsp[-1])); + } +#line 27693 "gram.c" + break; + + case 157: /* CreateOptRoleElem: ROLE role_list */ +#line 1187 "gram.y" + { + (yyval.defelt) = makeDefElem("rolemembers", (Node *)(yyvsp[0].list), (yylsp[-1])); + } +#line 27701 "gram.c" + break; + + case 158: /* CreateOptRoleElem: IN_P ROLE role_list */ +#line 1191 "gram.y" + { + (yyval.defelt) = makeDefElem("addroleto", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 27709 "gram.c" + break; + + case 159: /* CreateOptRoleElem: IN_P GROUP_P role_list */ +#line 1195 "gram.y" + { + (yyval.defelt) = makeDefElem("addroleto", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 27717 "gram.c" + break; + + case 160: /* CreateUserStmt: CREATE USER RoleId opt_with OptRoleList */ +#line 1209 "gram.y" + { + CreateRoleStmt *n = makeNode(CreateRoleStmt); + n->stmt_type = ROLESTMT_USER; + n->role = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27729 "gram.c" + break; + + case 161: /* AlterRoleStmt: ALTER ROLE RoleSpec opt_with AlterOptRoleList */ +#line 1227 "gram.y" + { + AlterRoleStmt *n = makeNode(AlterRoleStmt); + n->role = (yyvsp[-2].rolespec); + n->action = +1; /* add, if there are members */ + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27741 "gram.c" + break; + + case 162: /* AlterRoleStmt: ALTER USER RoleSpec opt_with AlterOptRoleList */ +#line 1235 "gram.y" + { + AlterRoleStmt *n = makeNode(AlterRoleStmt); + n->role = (yyvsp[-2].rolespec); + n->action = +1; /* add, if there are members */ + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27753 "gram.c" + break; + + case 163: /* opt_in_database: %empty */ +#line 1245 "gram.y" + { (yyval.str) = NULL; } +#line 27759 "gram.c" + break; + + case 164: /* opt_in_database: IN_P DATABASE name */ +#line 1246 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 27765 "gram.c" + break; + + case 165: /* AlterRoleSetStmt: ALTER ROLE RoleSpec opt_in_database SetResetClause */ +#line 1251 "gram.y" + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = (yyvsp[-2].rolespec); + n->database = (yyvsp[-1].str); + n->setstmt = (yyvsp[0].vsetstmt); + (yyval.node) = (Node *)n; + } +#line 27777 "gram.c" + break; + + case 166: /* AlterRoleSetStmt: ALTER ROLE ALL opt_in_database SetResetClause */ +#line 1259 "gram.y" + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = NULL; + n->database = (yyvsp[-1].str); + n->setstmt = (yyvsp[0].vsetstmt); + (yyval.node) = (Node *)n; + } +#line 27789 "gram.c" + break; + + case 167: /* AlterRoleSetStmt: ALTER USER RoleSpec opt_in_database SetResetClause */ +#line 1267 "gram.y" + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = (yyvsp[-2].rolespec); + n->database = (yyvsp[-1].str); + n->setstmt = (yyvsp[0].vsetstmt); + (yyval.node) = (Node *)n; + } +#line 27801 "gram.c" + break; + + case 168: /* AlterRoleSetStmt: ALTER USER ALL opt_in_database SetResetClause */ +#line 1275 "gram.y" + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = NULL; + n->database = (yyvsp[-1].str); + n->setstmt = (yyvsp[0].vsetstmt); + (yyval.node) = (Node *)n; + } +#line 27813 "gram.c" + break; + + case 169: /* DropRoleStmt: DROP ROLE role_list */ +#line 1296 "gram.y" + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = false; + n->roles = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27824 "gram.c" + break; + + case 170: /* DropRoleStmt: DROP ROLE IF_P EXISTS role_list */ +#line 1303 "gram.y" + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = true; + n->roles = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27835 "gram.c" + break; + + case 171: /* DropRoleStmt: DROP USER role_list */ +#line 1310 "gram.y" + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = false; + n->roles = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27846 "gram.c" + break; + + case 172: /* DropRoleStmt: DROP USER IF_P EXISTS role_list */ +#line 1317 "gram.y" + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->roles = (yyvsp[0].list); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 27857 "gram.c" + break; + + case 173: /* DropRoleStmt: DROP GROUP_P role_list */ +#line 1324 "gram.y" + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = false; + n->roles = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27868 "gram.c" + break; + + case 174: /* DropRoleStmt: DROP GROUP_P IF_P EXISTS role_list */ +#line 1331 "gram.y" + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = true; + n->roles = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27879 "gram.c" + break; + + case 175: /* CreateGroupStmt: CREATE GROUP_P RoleId opt_with OptRoleList */ +#line 1348 "gram.y" + { + CreateRoleStmt *n = makeNode(CreateRoleStmt); + n->stmt_type = ROLESTMT_GROUP; + n->role = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 27891 "gram.c" + break; + + case 176: /* AlterGroupStmt: ALTER GROUP_P RoleSpec add_drop USER role_list */ +#line 1366 "gram.y" + { + AlterRoleStmt *n = makeNode(AlterRoleStmt); + n->role = (yyvsp[-3].rolespec); + n->action = (yyvsp[-2].ival); + n->options = list_make1(makeDefElem("rolemembers", + (Node *)(yyvsp[0].list), (yylsp[0]))); + (yyval.node) = (Node *)n; + } +#line 27904 "gram.c" + break; + + case 177: /* add_drop: ADD_P */ +#line 1376 "gram.y" + { (yyval.ival) = +1; } +#line 27910 "gram.c" + break; + + case 178: /* add_drop: DROP */ +#line 1377 "gram.y" + { (yyval.ival) = -1; } +#line 27916 "gram.c" + break; + + case 179: /* CreateSchemaStmt: CREATE SCHEMA OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList */ +#line 1389 "gram.y" + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* One can omit the schema name or the authorization id. */ + n->schemaname = (yyvsp[-3].str); + n->authrole = (yyvsp[-1].rolespec); + n->schemaElts = (yyvsp[0].list); + n->if_not_exists = false; + (yyval.node) = (Node *)n; + } +#line 27930 "gram.c" + break; + + case 180: /* CreateSchemaStmt: CREATE SCHEMA ColId OptSchemaEltList */ +#line 1399 "gram.y" + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* ...but not both */ + n->schemaname = (yyvsp[-1].str); + n->authrole = NULL; + n->schemaElts = (yyvsp[0].list); + n->if_not_exists = false; + (yyval.node) = (Node *)n; + } +#line 27944 "gram.c" + break; + + case 181: /* CreateSchemaStmt: CREATE SCHEMA IF_P NOT EXISTS OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList */ +#line 1409 "gram.y" + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* schema name can be omitted here, too */ + n->schemaname = (yyvsp[-3].str); + n->authrole = (yyvsp[-1].rolespec); + if ((yyvsp[0].list) != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE SCHEMA IF NOT EXISTS cannot include schema elements"), + parser_errposition((yylsp[0])))); + n->schemaElts = (yyvsp[0].list); + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 27963 "gram.c" + break; + + case 182: /* CreateSchemaStmt: CREATE SCHEMA IF_P NOT EXISTS ColId OptSchemaEltList */ +#line 1424 "gram.y" + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* ...but not here */ + n->schemaname = (yyvsp[-1].str); + n->authrole = NULL; + if ((yyvsp[0].list) != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE SCHEMA IF NOT EXISTS cannot include schema elements"), + parser_errposition((yylsp[0])))); + n->schemaElts = (yyvsp[0].list); + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 27982 "gram.c" + break; + + case 183: /* OptSchemaName: ColId */ +#line 1441 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 27988 "gram.c" + break; + + case 184: /* OptSchemaName: %empty */ +#line 1442 "gram.y" + { (yyval.str) = NULL; } +#line 27994 "gram.c" + break; + + case 185: /* OptSchemaEltList: OptSchemaEltList schema_stmt */ +#line 1447 "gram.y" + { + if ((yyloc) < 0) /* see comments for YYLLOC_DEFAULT */ + (yyloc) = (yylsp[0]); + (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); + } +#line 28004 "gram.c" + break; + + case 186: /* OptSchemaEltList: %empty */ +#line 1453 "gram.y" + { (yyval.list) = NIL; } +#line 28010 "gram.c" + break; + + case 193: /* VariableSetStmt: SET set_rest */ +#line 1481 "gram.y" + { + VariableSetStmt *n = (yyvsp[0].vsetstmt); + n->is_local = false; + (yyval.node) = (Node *) n; + } +#line 28020 "gram.c" + break; + + case 194: /* VariableSetStmt: SET LOCAL set_rest */ +#line 1487 "gram.y" + { + VariableSetStmt *n = (yyvsp[0].vsetstmt); + n->is_local = true; + (yyval.node) = (Node *) n; + } +#line 28030 "gram.c" + break; + + case 195: /* VariableSetStmt: SET SESSION set_rest */ +#line 1493 "gram.y" + { + VariableSetStmt *n = (yyvsp[0].vsetstmt); + n->is_local = false; + (yyval.node) = (Node *) n; + } +#line 28040 "gram.c" + break; + + case 196: /* set_rest: TRANSACTION transaction_mode_list */ +#line 1502 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_MULTI; + n->name = "TRANSACTION"; + n->args = (yyvsp[0].list); + (yyval.vsetstmt) = n; + } +#line 28052 "gram.c" + break; + + case 197: /* set_rest: SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list */ +#line 1510 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_MULTI; + n->name = "SESSION CHARACTERISTICS"; + n->args = (yyvsp[0].list); + (yyval.vsetstmt) = n; + } +#line 28064 "gram.c" + break; + + case 199: /* generic_set: var_name TO var_list */ +#line 1522 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = (yyvsp[-2].str); + n->args = (yyvsp[0].list); + (yyval.vsetstmt) = n; + } +#line 28076 "gram.c" + break; + + case 200: /* generic_set: var_name '=' var_list */ +#line 1530 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = (yyvsp[-2].str); + n->args = (yyvsp[0].list); + (yyval.vsetstmt) = n; + } +#line 28088 "gram.c" + break; + + case 201: /* generic_set: var_name TO DEFAULT */ +#line 1538 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_DEFAULT; + n->name = (yyvsp[-2].str); + (yyval.vsetstmt) = n; + } +#line 28099 "gram.c" + break; + + case 202: /* generic_set: var_name '=' DEFAULT */ +#line 1545 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_DEFAULT; + n->name = (yyvsp[-2].str); + (yyval.vsetstmt) = n; + } +#line 28110 "gram.c" + break; + + case 203: /* set_rest_more: generic_set */ +#line 1554 "gram.y" + {(yyval.vsetstmt) = (yyvsp[0].vsetstmt);} +#line 28116 "gram.c" + break; + + case 204: /* set_rest_more: var_name FROM CURRENT_P */ +#line 1556 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_CURRENT; + n->name = (yyvsp[-2].str); + (yyval.vsetstmt) = n; + } +#line 28127 "gram.c" + break; + + case 205: /* set_rest_more: TIME ZONE zone_value */ +#line 1564 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "timezone"; + if ((yyvsp[0].node) != NULL) + n->args = list_make1((yyvsp[0].node)); + else + n->kind = VAR_SET_DEFAULT; + (yyval.vsetstmt) = n; + } +#line 28142 "gram.c" + break; + + case 206: /* set_rest_more: CATALOG_P Sconst */ +#line 1575 "gram.y" + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("current database cannot be changed"), + parser_errposition((yylsp[0])))); + (yyval.vsetstmt) = NULL; /*not reached*/ + } +#line 28154 "gram.c" + break; + + case 207: /* set_rest_more: SCHEMA Sconst */ +#line 1583 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "search_path"; + n->args = list_make1(makeStringConst((yyvsp[0].str), (yylsp[0]))); + (yyval.vsetstmt) = n; + } +#line 28166 "gram.c" + break; + + case 208: /* set_rest_more: NAMES opt_encoding */ +#line 1591 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "client_encoding"; + if ((yyvsp[0].str) != NULL) + n->args = list_make1(makeStringConst((yyvsp[0].str), (yylsp[0]))); + else + n->kind = VAR_SET_DEFAULT; + (yyval.vsetstmt) = n; + } +#line 28181 "gram.c" + break; + + case 209: /* set_rest_more: ROLE NonReservedWord_or_Sconst */ +#line 1602 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "role"; + n->args = list_make1(makeStringConst((yyvsp[0].str), (yylsp[0]))); + (yyval.vsetstmt) = n; + } +#line 28193 "gram.c" + break; + + case 210: /* set_rest_more: SESSION AUTHORIZATION NonReservedWord_or_Sconst */ +#line 1610 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "session_authorization"; + n->args = list_make1(makeStringConst((yyvsp[0].str), (yylsp[0]))); + (yyval.vsetstmt) = n; + } +#line 28205 "gram.c" + break; + + case 211: /* set_rest_more: SESSION AUTHORIZATION DEFAULT */ +#line 1618 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_DEFAULT; + n->name = "session_authorization"; + (yyval.vsetstmt) = n; + } +#line 28216 "gram.c" + break; + + case 212: /* set_rest_more: XML_P OPTION document_or_content */ +#line 1625 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "xmloption"; + n->args = list_make1(makeStringConst((yyvsp[0].ival) == XMLOPTION_DOCUMENT ? "DOCUMENT" : "CONTENT", (yylsp[0]))); + (yyval.vsetstmt) = n; + } +#line 28228 "gram.c" + break; + + case 213: /* set_rest_more: TRANSACTION SNAPSHOT Sconst */ +#line 1634 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_MULTI; + n->name = "TRANSACTION SNAPSHOT"; + n->args = list_make1(makeStringConst((yyvsp[0].str), (yylsp[0]))); + (yyval.vsetstmt) = n; + } +#line 28240 "gram.c" + break; + + case 214: /* var_name: ColId */ +#line 1643 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 28246 "gram.c" + break; + + case 215: /* var_name: var_name '.' ColId */ +#line 1645 "gram.y" + { (yyval.str) = psprintf("%s.%s", (yyvsp[-2].str), (yyvsp[0].str)); } +#line 28252 "gram.c" + break; + + case 216: /* var_list: var_value */ +#line 1648 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 28258 "gram.c" + break; + + case 217: /* var_list: var_list ',' var_value */ +#line 1649 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 28264 "gram.c" + break; + + case 218: /* var_value: opt_boolean_or_string */ +#line 1653 "gram.y" + { (yyval.node) = makeStringConst((yyvsp[0].str), (yylsp[0])); } +#line 28270 "gram.c" + break; + + case 219: /* var_value: NumericOnly */ +#line 1655 "gram.y" + { (yyval.node) = makeAConst((yyvsp[0].value), (yylsp[0])); } +#line 28276 "gram.c" + break; + + case 220: /* iso_level: READ UNCOMMITTED */ +#line 1658 "gram.y" + { (yyval.str) = "read uncommitted"; } +#line 28282 "gram.c" + break; + + case 221: /* iso_level: READ COMMITTED */ +#line 1659 "gram.y" + { (yyval.str) = "read committed"; } +#line 28288 "gram.c" + break; + + case 222: /* iso_level: REPEATABLE READ */ +#line 1660 "gram.y" + { (yyval.str) = "repeatable read"; } +#line 28294 "gram.c" + break; + + case 223: /* iso_level: SERIALIZABLE */ +#line 1661 "gram.y" + { (yyval.str) = "serializable"; } +#line 28300 "gram.c" + break; + + case 224: /* opt_boolean_or_string: TRUE_P */ +#line 1665 "gram.y" + { (yyval.str) = "true"; } +#line 28306 "gram.c" + break; + + case 225: /* opt_boolean_or_string: FALSE_P */ +#line 1666 "gram.y" + { (yyval.str) = "false"; } +#line 28312 "gram.c" + break; + + case 226: /* opt_boolean_or_string: ON */ +#line 1667 "gram.y" + { (yyval.str) = "on"; } +#line 28318 "gram.c" + break; + + case 227: /* opt_boolean_or_string: NonReservedWord_or_Sconst */ +#line 1673 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 28324 "gram.c" + break; + + case 228: /* zone_value: Sconst */ +#line 1686 "gram.y" + { + (yyval.node) = makeStringConst((yyvsp[0].str), (yylsp[0])); + } +#line 28332 "gram.c" + break; + + case 229: /* zone_value: IDENT */ +#line 1690 "gram.y" + { + (yyval.node) = makeStringConst((yyvsp[0].str), (yylsp[0])); + } +#line 28340 "gram.c" + break; + + case 230: /* zone_value: ConstInterval Sconst opt_interval */ +#line 1694 "gram.y" + { + TypeName *t = (yyvsp[-2].typnam); + if ((yyvsp[0].list) != NIL) + { + A_Const *n = (A_Const *) linitial((yyvsp[0].list)); + if ((n->val.val.ival & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("time zone interval must be HOUR or HOUR TO MINUTE"), + parser_errposition((yylsp[0])))); + } + t->typmods = (yyvsp[0].list); + (yyval.node) = makeStringConstCast((yyvsp[-1].str), (yylsp[-1]), t); + } +#line 28359 "gram.c" + break; + + case 231: /* zone_value: ConstInterval '(' Iconst ')' Sconst */ +#line 1709 "gram.y" + { + TypeName *t = (yyvsp[-4].typnam); + t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), + makeIntConst((yyvsp[-2].ival), (yylsp[-2]))); + (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), t); + } +#line 28370 "gram.c" + break; + + case 232: /* zone_value: NumericOnly */ +#line 1715 "gram.y" + { (yyval.node) = makeAConst((yyvsp[0].value), (yylsp[0])); } +#line 28376 "gram.c" + break; + + case 233: /* zone_value: DEFAULT */ +#line 1716 "gram.y" + { (yyval.node) = NULL; } +#line 28382 "gram.c" + break; + + case 234: /* zone_value: LOCAL */ +#line 1717 "gram.y" + { (yyval.node) = NULL; } +#line 28388 "gram.c" + break; + + case 235: /* opt_encoding: Sconst */ +#line 1721 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 28394 "gram.c" + break; + + case 236: /* opt_encoding: DEFAULT */ +#line 1722 "gram.y" + { (yyval.str) = NULL; } +#line 28400 "gram.c" + break; + + case 237: /* opt_encoding: %empty */ +#line 1723 "gram.y" + { (yyval.str) = NULL; } +#line 28406 "gram.c" + break; + + case 238: /* NonReservedWord_or_Sconst: NonReservedWord */ +#line 1727 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 28412 "gram.c" + break; + + case 239: /* NonReservedWord_or_Sconst: Sconst */ +#line 1728 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 28418 "gram.c" + break; + + case 240: /* VariableResetStmt: RESET reset_rest */ +#line 1732 "gram.y" + { (yyval.node) = (Node *) (yyvsp[0].vsetstmt); } +#line 28424 "gram.c" + break; + + case 241: /* reset_rest: generic_reset */ +#line 1736 "gram.y" + { (yyval.vsetstmt) = (yyvsp[0].vsetstmt); } +#line 28430 "gram.c" + break; + + case 242: /* reset_rest: TIME ZONE */ +#line 1738 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = "timezone"; + (yyval.vsetstmt) = n; + } +#line 28441 "gram.c" + break; + + case 243: /* reset_rest: TRANSACTION ISOLATION LEVEL */ +#line 1745 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = "transaction_isolation"; + (yyval.vsetstmt) = n; + } +#line 28452 "gram.c" + break; + + case 244: /* reset_rest: SESSION AUTHORIZATION */ +#line 1752 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = "session_authorization"; + (yyval.vsetstmt) = n; + } +#line 28463 "gram.c" + break; + + case 245: /* generic_reset: var_name */ +#line 1762 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = (yyvsp[0].str); + (yyval.vsetstmt) = n; + } +#line 28474 "gram.c" + break; + + case 246: /* generic_reset: ALL */ +#line 1769 "gram.y" + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET_ALL; + (yyval.vsetstmt) = n; + } +#line 28484 "gram.c" + break; + + case 247: /* SetResetClause: SET set_rest */ +#line 1778 "gram.y" + { (yyval.vsetstmt) = (yyvsp[0].vsetstmt); } +#line 28490 "gram.c" + break; + + case 248: /* SetResetClause: VariableResetStmt */ +#line 1779 "gram.y" + { (yyval.vsetstmt) = (VariableSetStmt *) (yyvsp[0].node); } +#line 28496 "gram.c" + break; + + case 249: /* FunctionSetResetClause: SET set_rest_more */ +#line 1784 "gram.y" + { (yyval.vsetstmt) = (yyvsp[0].vsetstmt); } +#line 28502 "gram.c" + break; + + case 250: /* FunctionSetResetClause: VariableResetStmt */ +#line 1785 "gram.y" + { (yyval.vsetstmt) = (VariableSetStmt *) (yyvsp[0].node); } +#line 28508 "gram.c" + break; + + case 251: /* VariableShowStmt: SHOW var_name */ +#line 1791 "gram.y" + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 28518 "gram.c" + break; + + case 252: /* VariableShowStmt: SHOW TIME ZONE */ +#line 1797 "gram.y" + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "timezone"; + (yyval.node) = (Node *) n; + } +#line 28528 "gram.c" + break; + + case 253: /* VariableShowStmt: SHOW TRANSACTION ISOLATION LEVEL */ +#line 1803 "gram.y" + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "transaction_isolation"; + (yyval.node) = (Node *) n; + } +#line 28538 "gram.c" + break; + + case 254: /* VariableShowStmt: SHOW SESSION AUTHORIZATION */ +#line 1809 "gram.y" + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "session_authorization"; + (yyval.node) = (Node *) n; + } +#line 28548 "gram.c" + break; + + case 255: /* VariableShowStmt: SHOW ALL */ +#line 1815 "gram.y" + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "all"; + (yyval.node) = (Node *) n; + } +#line 28558 "gram.c" + break; + + case 256: /* ConstraintsSetStmt: SET CONSTRAINTS constraints_set_list constraints_set_mode */ +#line 1825 "gram.y" + { + ConstraintsSetStmt *n = makeNode(ConstraintsSetStmt); + n->constraints = (yyvsp[-1].list); + n->deferred = (yyvsp[0].boolean); + (yyval.node) = (Node *) n; + } +#line 28569 "gram.c" + break; + + case 257: /* constraints_set_list: ALL */ +#line 1834 "gram.y" + { (yyval.list) = NIL; } +#line 28575 "gram.c" + break; + + case 258: /* constraints_set_list: qualified_name_list */ +#line 1835 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 28581 "gram.c" + break; + + case 259: /* constraints_set_mode: DEFERRED */ +#line 1839 "gram.y" + { (yyval.boolean) = true; } +#line 28587 "gram.c" + break; + + case 260: /* constraints_set_mode: IMMEDIATE */ +#line 1840 "gram.y" + { (yyval.boolean) = false; } +#line 28593 "gram.c" + break; + + case 261: /* CheckPointStmt: CHECKPOINT */ +#line 1849 "gram.y" + { + CheckPointStmt *n = makeNode(CheckPointStmt); + (yyval.node) = (Node *)n; + } +#line 28602 "gram.c" + break; + + case 262: /* DiscardStmt: DISCARD ALL */ +#line 1864 "gram.y" + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_ALL; + (yyval.node) = (Node *) n; + } +#line 28612 "gram.c" + break; + + case 263: /* DiscardStmt: DISCARD TEMP */ +#line 1870 "gram.y" + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_TEMP; + (yyval.node) = (Node *) n; + } +#line 28622 "gram.c" + break; + + case 264: /* DiscardStmt: DISCARD TEMPORARY */ +#line 1876 "gram.y" + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_TEMP; + (yyval.node) = (Node *) n; + } +#line 28632 "gram.c" + break; + + case 265: /* DiscardStmt: DISCARD PLANS */ +#line 1882 "gram.y" + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_PLANS; + (yyval.node) = (Node *) n; + } +#line 28642 "gram.c" + break; + + case 266: /* DiscardStmt: DISCARD SEQUENCES */ +#line 1888 "gram.y" + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_SEQUENCES; + (yyval.node) = (Node *) n; + } +#line 28652 "gram.c" + break; + + case 267: /* AlterTableStmt: ALTER TABLE relation_expr alter_table_cmds */ +#line 1907 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_TABLE; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28665 "gram.c" + break; + + case 268: /* AlterTableStmt: ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds */ +#line 1916 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_TABLE; + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 28678 "gram.c" + break; + + case 269: /* AlterTableStmt: ALTER TABLE relation_expr partition_cmd */ +#line 1925 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = list_make1((yyvsp[0].node)); + n->objtype = OBJECT_TABLE; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28691 "gram.c" + break; + + case 270: /* AlterTableStmt: ALTER TABLE IF_P EXISTS relation_expr partition_cmd */ +#line 1934 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = list_make1((yyvsp[0].node)); + n->objtype = OBJECT_TABLE; + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 28704 "gram.c" + break; + + case 271: /* AlterTableStmt: ALTER TABLE ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait */ +#line 1943 "gram.y" + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = (yyvsp[-4].str); + n->objtype = OBJECT_TABLE; + n->roles = NIL; + n->new_tablespacename = (yyvsp[-1].str); + n->nowait = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 28719 "gram.c" + break; + + case 272: /* AlterTableStmt: ALTER TABLE ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait */ +#line 1954 "gram.y" + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = (yyvsp[-7].str); + n->objtype = OBJECT_TABLE; + n->roles = (yyvsp[-4].list); + n->new_tablespacename = (yyvsp[-1].str); + n->nowait = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 28734 "gram.c" + break; + + case 273: /* AlterTableStmt: ALTER INDEX qualified_name alter_table_cmds */ +#line 1965 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_INDEX; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28747 "gram.c" + break; + + case 274: /* AlterTableStmt: ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds */ +#line 1974 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_INDEX; + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 28760 "gram.c" + break; + + case 275: /* AlterTableStmt: ALTER INDEX qualified_name index_partition_cmd */ +#line 1983 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = list_make1((yyvsp[0].node)); + n->objtype = OBJECT_INDEX; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28773 "gram.c" + break; + + case 276: /* AlterTableStmt: ALTER INDEX ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait */ +#line 1992 "gram.y" + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = (yyvsp[-4].str); + n->objtype = OBJECT_INDEX; + n->roles = NIL; + n->new_tablespacename = (yyvsp[-1].str); + n->nowait = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 28788 "gram.c" + break; + + case 277: /* AlterTableStmt: ALTER INDEX ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait */ +#line 2003 "gram.y" + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = (yyvsp[-7].str); + n->objtype = OBJECT_INDEX; + n->roles = (yyvsp[-4].list); + n->new_tablespacename = (yyvsp[-1].str); + n->nowait = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 28803 "gram.c" + break; + + case 278: /* AlterTableStmt: ALTER SEQUENCE qualified_name alter_table_cmds */ +#line 2014 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_SEQUENCE; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28816 "gram.c" + break; + + case 279: /* AlterTableStmt: ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds */ +#line 2023 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_SEQUENCE; + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 28829 "gram.c" + break; + + case 280: /* AlterTableStmt: ALTER VIEW qualified_name alter_table_cmds */ +#line 2032 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_VIEW; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28842 "gram.c" + break; + + case 281: /* AlterTableStmt: ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds */ +#line 2041 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_VIEW; + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 28855 "gram.c" + break; + + case 282: /* AlterTableStmt: ALTER MATERIALIZED VIEW qualified_name alter_table_cmds */ +#line 2050 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_MATVIEW; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28868 "gram.c" + break; + + case 283: /* AlterTableStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name alter_table_cmds */ +#line 2059 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_MATVIEW; + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 28881 "gram.c" + break; + + case 284: /* AlterTableStmt: ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait */ +#line 2068 "gram.y" + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = (yyvsp[-4].str); + n->objtype = OBJECT_MATVIEW; + n->roles = NIL; + n->new_tablespacename = (yyvsp[-1].str); + n->nowait = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 28896 "gram.c" + break; + + case 285: /* AlterTableStmt: ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait */ +#line 2079 "gram.y" + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = (yyvsp[-7].str); + n->objtype = OBJECT_MATVIEW; + n->roles = (yyvsp[-4].list); + n->new_tablespacename = (yyvsp[-1].str); + n->nowait = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 28911 "gram.c" + break; + + case 286: /* AlterTableStmt: ALTER FOREIGN TABLE relation_expr alter_table_cmds */ +#line 2090 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_FOREIGN_TABLE; + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 28924 "gram.c" + break; + + case 287: /* AlterTableStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr alter_table_cmds */ +#line 2099 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = (yyvsp[-1].range); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_FOREIGN_TABLE; + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 28937 "gram.c" + break; + + case 288: /* alter_table_cmds: alter_table_cmd */ +#line 2110 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 28943 "gram.c" + break; + + case 289: /* alter_table_cmds: alter_table_cmds ',' alter_table_cmd */ +#line 2111 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 28949 "gram.c" + break; + + case 290: /* partition_cmd: ATTACH PARTITION qualified_name PartitionBoundSpec */ +#line 2117 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_AttachPartition; + cmd->name = (yyvsp[-1].range); + cmd->bound = (yyvsp[0].partboundspec); + cmd->concurrent = false; + n->def = (Node *) cmd; + + (yyval.node) = (Node *) n; + } +#line 28966 "gram.c" + break; + + case 291: /* partition_cmd: DETACH PARTITION qualified_name opt_concurrently */ +#line 2131 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_DetachPartition; + cmd->name = (yyvsp[-1].range); + cmd->bound = NULL; + cmd->concurrent = (yyvsp[0].boolean); + n->def = (Node *) cmd; + + (yyval.node) = (Node *) n; + } +#line 28983 "gram.c" + break; + + case 292: /* partition_cmd: DETACH PARTITION qualified_name FINALIZE */ +#line 2144 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_DetachPartitionFinalize; + cmd->name = (yyvsp[-1].range); + cmd->bound = NULL; + cmd->concurrent = false; + n->def = (Node *) cmd; + (yyval.node) = (Node *) n; + } +#line 28999 "gram.c" + break; + + case 293: /* index_partition_cmd: ATTACH PARTITION qualified_name */ +#line 2160 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_AttachPartition; + cmd->name = (yyvsp[0].range); + cmd->bound = NULL; + cmd->concurrent = false; + n->def = (Node *) cmd; + + (yyval.node) = (Node *) n; + } +#line 29016 "gram.c" + break; + + case 294: /* alter_table_cmd: ADD_P columnDef */ +#line 2177 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = (yyvsp[0].node); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 29028 "gram.c" + break; + + case 295: /* alter_table_cmd: ADD_P IF_P NOT EXISTS columnDef */ +#line 2186 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = (yyvsp[0].node); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 29040 "gram.c" + break; + + case 296: /* alter_table_cmd: ADD_P COLUMN columnDef */ +#line 2195 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = (yyvsp[0].node); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 29052 "gram.c" + break; + + case 297: /* alter_table_cmd: ADD_P COLUMN IF_P NOT EXISTS columnDef */ +#line 2204 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = (yyvsp[0].node); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 29064 "gram.c" + break; + + case 298: /* alter_table_cmd: ALTER opt_column ColId alter_column_default */ +#line 2213 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ColumnDefault; + n->name = (yyvsp[-1].str); + n->def = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 29076 "gram.c" + break; + + case 299: /* alter_table_cmd: ALTER opt_column ColId DROP NOT NULL_P */ +#line 2222 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropNotNull; + n->name = (yyvsp[-3].str); + (yyval.node) = (Node *)n; + } +#line 29087 "gram.c" + break; + + case 300: /* alter_table_cmd: ALTER opt_column ColId SET NOT NULL_P */ +#line 2230 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetNotNull; + n->name = (yyvsp[-3].str); + (yyval.node) = (Node *)n; + } +#line 29098 "gram.c" + break; + + case 301: /* alter_table_cmd: ALTER opt_column ColId DROP EXPRESSION */ +#line 2238 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropExpression; + n->name = (yyvsp[-2].str); + (yyval.node) = (Node *)n; + } +#line 29109 "gram.c" + break; + + case 302: /* alter_table_cmd: ALTER opt_column ColId DROP EXPRESSION IF_P EXISTS */ +#line 2246 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropExpression; + n->name = (yyvsp[-4].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 29121 "gram.c" + break; + + case 303: /* alter_table_cmd: ALTER opt_column ColId SET STATISTICS SignedIconst */ +#line 2255 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetStatistics; + n->name = (yyvsp[-3].str); + n->def = (Node *) makeInteger((yyvsp[0].ival)); + (yyval.node) = (Node *)n; + } +#line 29133 "gram.c" + break; + + case 304: /* alter_table_cmd: ALTER opt_column Iconst SET STATISTICS SignedIconst */ +#line 2264 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + + if ((yyvsp[-3].ival) <= 0 || (yyvsp[-3].ival) > PG_INT16_MAX) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("column number must be in range from 1 to %d", PG_INT16_MAX), + parser_errposition((yylsp[-3])))); + + n->subtype = AT_SetStatistics; + n->num = (int16) (yyvsp[-3].ival); + n->def = (Node *) makeInteger((yyvsp[0].ival)); + (yyval.node) = (Node *)n; + } +#line 29152 "gram.c" + break; + + case 305: /* alter_table_cmd: ALTER opt_column ColId SET reloptions */ +#line 2280 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetOptions; + n->name = (yyvsp[-2].str); + n->def = (Node *) (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 29164 "gram.c" + break; + + case 306: /* alter_table_cmd: ALTER opt_column ColId RESET reloptions */ +#line 2289 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ResetOptions; + n->name = (yyvsp[-2].str); + n->def = (Node *) (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 29176 "gram.c" + break; + + case 307: /* alter_table_cmd: ALTER opt_column ColId SET STORAGE ColId */ +#line 2298 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetStorage; + n->name = (yyvsp[-3].str); + n->def = (Node *) makeString((yyvsp[0].str)); + (yyval.node) = (Node *)n; + } +#line 29188 "gram.c" + break; + + case 308: /* alter_table_cmd: ALTER opt_column ColId SET column_compression */ +#line 2307 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetCompression; + n->name = (yyvsp[-2].str); + n->def = (Node *) makeString((yyvsp[0].str)); + (yyval.node) = (Node *)n; + } +#line 29200 "gram.c" + break; + + case 309: /* alter_table_cmd: ALTER opt_column ColId ADD_P GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList */ +#line 2316 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + Constraint *c = makeNode(Constraint); + + c->contype = CONSTR_IDENTITY; + c->generated_when = (yyvsp[-3].ival); + c->options = (yyvsp[0].list); + c->location = (yylsp[-4]); + + n->subtype = AT_AddIdentity; + n->name = (yyvsp[-6].str); + n->def = (Node *) c; + + (yyval.node) = (Node *)n; + } +#line 29220 "gram.c" + break; + + case 310: /* alter_table_cmd: ALTER opt_column ColId alter_identity_column_option_list */ +#line 2333 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetIdentity; + n->name = (yyvsp[-1].str); + n->def = (Node *) (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 29232 "gram.c" + break; + + case 311: /* alter_table_cmd: ALTER opt_column ColId DROP IDENTITY_P */ +#line 2342 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropIdentity; + n->name = (yyvsp[-2].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 29244 "gram.c" + break; + + case 312: /* alter_table_cmd: ALTER opt_column ColId DROP IDENTITY_P IF_P EXISTS */ +#line 2351 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropIdentity; + n->name = (yyvsp[-4].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 29256 "gram.c" + break; + + case 313: /* alter_table_cmd: DROP opt_column IF_P EXISTS ColId opt_drop_behavior */ +#line 2360 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 29269 "gram.c" + break; + + case 314: /* alter_table_cmd: DROP opt_column ColId opt_drop_behavior */ +#line 2370 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 29282 "gram.c" + break; + + case 315: /* alter_table_cmd: ALTER opt_column ColId opt_set_data TYPE_P Typename opt_collate_clause alter_using */ +#line 2383 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + ColumnDef *def = makeNode(ColumnDef); + n->subtype = AT_AlterColumnType; + n->name = (yyvsp[-5].str); + n->def = (Node *) def; + /* We only use these fields of the ColumnDef node */ + def->typeName = (yyvsp[-2].typnam); + def->collClause = (CollateClause *) (yyvsp[-1].node); + def->raw_default = (yyvsp[0].node); + def->location = (yylsp[-5]); + (yyval.node) = (Node *)n; + } +#line 29300 "gram.c" + break; + + case 316: /* alter_table_cmd: ALTER opt_column ColId alter_generic_options */ +#line 2398 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AlterColumnGenericOptions; + n->name = (yyvsp[-1].str); + n->def = (Node *) (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 29312 "gram.c" + break; + + case 317: /* alter_table_cmd: ADD_P TableConstraint */ +#line 2407 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddConstraint; + n->def = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 29323 "gram.c" + break; + + case 318: /* alter_table_cmd: ALTER CONSTRAINT name ConstraintAttributeSpec */ +#line 2415 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + Constraint *c = makeNode(Constraint); + n->subtype = AT_AlterConstraint; + n->def = (Node *) c; + c->contype = CONSTR_FOREIGN; /* others not supported, yet */ + c->conname = (yyvsp[-1].str); + processCASbits((yyvsp[0].ival), (yylsp[0]), "ALTER CONSTRAINT statement", + &c->deferrable, + &c->initdeferred, + NULL, NULL, yyscanner); + (yyval.node) = (Node *)n; + } +#line 29341 "gram.c" + break; + + case 319: /* alter_table_cmd: VALIDATE CONSTRAINT name */ +#line 2430 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ValidateConstraint; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29352 "gram.c" + break; + + case 320: /* alter_table_cmd: DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior */ +#line 2438 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropConstraint; + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 29365 "gram.c" + break; + + case 321: /* alter_table_cmd: DROP CONSTRAINT name opt_drop_behavior */ +#line 2448 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropConstraint; + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 29378 "gram.c" + break; + + case 322: /* alter_table_cmd: SET WITHOUT OIDS */ +#line 2458 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropOids; + (yyval.node) = (Node *)n; + } +#line 29388 "gram.c" + break; + + case 323: /* alter_table_cmd: CLUSTER ON name */ +#line 2465 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ClusterOn; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29399 "gram.c" + break; + + case 324: /* alter_table_cmd: SET WITHOUT CLUSTER */ +#line 2473 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropCluster; + n->name = NULL; + (yyval.node) = (Node *)n; + } +#line 29410 "gram.c" + break; + + case 325: /* alter_table_cmd: SET LOGGED */ +#line 2481 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetLogged; + (yyval.node) = (Node *)n; + } +#line 29420 "gram.c" + break; + + case 326: /* alter_table_cmd: SET UNLOGGED */ +#line 2488 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetUnLogged; + (yyval.node) = (Node *)n; + } +#line 29430 "gram.c" + break; + + case 327: /* alter_table_cmd: ENABLE_P TRIGGER name */ +#line 2495 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableTrig; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29441 "gram.c" + break; + + case 328: /* alter_table_cmd: ENABLE_P ALWAYS TRIGGER name */ +#line 2503 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableAlwaysTrig; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29452 "gram.c" + break; + + case 329: /* alter_table_cmd: ENABLE_P REPLICA TRIGGER name */ +#line 2511 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableReplicaTrig; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29463 "gram.c" + break; + + case 330: /* alter_table_cmd: ENABLE_P TRIGGER ALL */ +#line 2519 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableTrigAll; + (yyval.node) = (Node *)n; + } +#line 29473 "gram.c" + break; + + case 331: /* alter_table_cmd: ENABLE_P TRIGGER USER */ +#line 2526 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableTrigUser; + (yyval.node) = (Node *)n; + } +#line 29483 "gram.c" + break; + + case 332: /* alter_table_cmd: DISABLE_P TRIGGER name */ +#line 2533 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableTrig; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29494 "gram.c" + break; + + case 333: /* alter_table_cmd: DISABLE_P TRIGGER ALL */ +#line 2541 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableTrigAll; + (yyval.node) = (Node *)n; + } +#line 29504 "gram.c" + break; + + case 334: /* alter_table_cmd: DISABLE_P TRIGGER USER */ +#line 2548 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableTrigUser; + (yyval.node) = (Node *)n; + } +#line 29514 "gram.c" + break; + + case 335: /* alter_table_cmd: ENABLE_P RULE name */ +#line 2555 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableRule; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29525 "gram.c" + break; + + case 336: /* alter_table_cmd: ENABLE_P ALWAYS RULE name */ +#line 2563 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableAlwaysRule; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29536 "gram.c" + break; + + case 337: /* alter_table_cmd: ENABLE_P REPLICA RULE name */ +#line 2571 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableReplicaRule; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29547 "gram.c" + break; + + case 338: /* alter_table_cmd: DISABLE_P RULE name */ +#line 2579 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableRule; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29558 "gram.c" + break; + + case 339: /* alter_table_cmd: INHERIT qualified_name */ +#line 2587 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddInherit; + n->def = (Node *) (yyvsp[0].range); + (yyval.node) = (Node *)n; + } +#line 29569 "gram.c" + break; + + case 340: /* alter_table_cmd: NO INHERIT qualified_name */ +#line 2595 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropInherit; + n->def = (Node *) (yyvsp[0].range); + (yyval.node) = (Node *)n; + } +#line 29580 "gram.c" + break; + + case 341: /* alter_table_cmd: OF any_name */ +#line 2603 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + TypeName *def = makeTypeNameFromNameList((yyvsp[0].list)); + def->location = (yylsp[0]); + n->subtype = AT_AddOf; + n->def = (Node *) def; + (yyval.node) = (Node *)n; + } +#line 29593 "gram.c" + break; + + case 342: /* alter_table_cmd: NOT OF */ +#line 2613 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropOf; + (yyval.node) = (Node *)n; + } +#line 29603 "gram.c" + break; + + case 343: /* alter_table_cmd: OWNER TO RoleSpec */ +#line 2620 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ChangeOwner; + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 29614 "gram.c" + break; + + case 344: /* alter_table_cmd: SET TABLESPACE name */ +#line 2628 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetTableSpace; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 29625 "gram.c" + break; + + case 345: /* alter_table_cmd: SET reloptions */ +#line 2636 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetRelOptions; + n->def = (Node *)(yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 29636 "gram.c" + break; + + case 346: /* alter_table_cmd: RESET reloptions */ +#line 2644 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ResetRelOptions; + n->def = (Node *)(yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 29647 "gram.c" + break; + + case 347: /* alter_table_cmd: REPLICA IDENTITY_P replica_identity */ +#line 2652 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ReplicaIdentity; + n->def = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 29658 "gram.c" + break; + + case 348: /* alter_table_cmd: ENABLE_P ROW LEVEL SECURITY */ +#line 2660 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableRowSecurity; + (yyval.node) = (Node *)n; + } +#line 29668 "gram.c" + break; + + case 349: /* alter_table_cmd: DISABLE_P ROW LEVEL SECURITY */ +#line 2667 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableRowSecurity; + (yyval.node) = (Node *)n; + } +#line 29678 "gram.c" + break; + + case 350: /* alter_table_cmd: FORCE ROW LEVEL SECURITY */ +#line 2674 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ForceRowSecurity; + (yyval.node) = (Node *)n; + } +#line 29688 "gram.c" + break; + + case 351: /* alter_table_cmd: NO FORCE ROW LEVEL SECURITY */ +#line 2681 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_NoForceRowSecurity; + (yyval.node) = (Node *)n; + } +#line 29698 "gram.c" + break; + + case 352: /* alter_table_cmd: alter_generic_options */ +#line 2687 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_GenericOptions; + n->def = (Node *)(yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 29709 "gram.c" + break; + + case 353: /* alter_column_default: SET DEFAULT a_expr */ +#line 2696 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 29715 "gram.c" + break; + + case 354: /* alter_column_default: DROP DEFAULT */ +#line 2697 "gram.y" + { (yyval.node) = NULL; } +#line 29721 "gram.c" + break; + + case 355: /* opt_drop_behavior: CASCADE */ +#line 2701 "gram.y" + { (yyval.dbehavior) = DROP_CASCADE; } +#line 29727 "gram.c" + break; + + case 356: /* opt_drop_behavior: RESTRICT */ +#line 2702 "gram.y" + { (yyval.dbehavior) = DROP_RESTRICT; } +#line 29733 "gram.c" + break; + + case 357: /* opt_drop_behavior: %empty */ +#line 2703 "gram.y" + { (yyval.dbehavior) = DROP_RESTRICT; /* default */ } +#line 29739 "gram.c" + break; + + case 358: /* opt_collate_clause: COLLATE any_name */ +#line 2708 "gram.y" + { + CollateClause *n = makeNode(CollateClause); + n->arg = NULL; + n->collname = (yyvsp[0].list); + n->location = (yylsp[-1]); + (yyval.node) = (Node *) n; + } +#line 29751 "gram.c" + break; + + case 359: /* opt_collate_clause: %empty */ +#line 2715 "gram.y" + { (yyval.node) = NULL; } +#line 29757 "gram.c" + break; + + case 360: /* alter_using: USING a_expr */ +#line 2719 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 29763 "gram.c" + break; + + case 361: /* alter_using: %empty */ +#line 2720 "gram.y" + { (yyval.node) = NULL; } +#line 29769 "gram.c" + break; + + case 362: /* replica_identity: NOTHING */ +#line 2725 "gram.y" + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_NOTHING; + n->name = NULL; + (yyval.node) = (Node *) n; + } +#line 29780 "gram.c" + break; + + case 363: /* replica_identity: FULL */ +#line 2732 "gram.y" + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_FULL; + n->name = NULL; + (yyval.node) = (Node *) n; + } +#line 29791 "gram.c" + break; + + case 364: /* replica_identity: DEFAULT */ +#line 2739 "gram.y" + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_DEFAULT; + n->name = NULL; + (yyval.node) = (Node *) n; + } +#line 29802 "gram.c" + break; + + case 365: /* replica_identity: USING INDEX name */ +#line 2746 "gram.y" + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_INDEX; + n->name = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 29813 "gram.c" + break; + + case 366: /* reloptions: '(' reloption_list ')' */ +#line 2755 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 29819 "gram.c" + break; + + case 367: /* opt_reloptions: WITH reloptions */ +#line 2758 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 29825 "gram.c" + break; + + case 368: /* opt_reloptions: %empty */ +#line 2759 "gram.y" + { (yyval.list) = NIL; } +#line 29831 "gram.c" + break; + + case 369: /* reloption_list: reloption_elem */ +#line 2763 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 29837 "gram.c" + break; + + case 370: /* reloption_list: reloption_list ',' reloption_elem */ +#line 2764 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } +#line 29843 "gram.c" + break; + + case 371: /* reloption_elem: ColLabel '=' def_arg */ +#line 2770 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-2].str), (Node *) (yyvsp[0].node), (yylsp[-2])); + } +#line 29851 "gram.c" + break; + + case 372: /* reloption_elem: ColLabel */ +#line 2774 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[0].str), NULL, (yylsp[0])); + } +#line 29859 "gram.c" + break; + + case 373: /* reloption_elem: ColLabel '.' ColLabel '=' def_arg */ +#line 2778 "gram.y" + { + (yyval.defelt) = makeDefElemExtended((yyvsp[-4].str), (yyvsp[-2].str), (Node *) (yyvsp[0].node), + DEFELEM_UNSPEC, (yylsp[-4])); + } +#line 29868 "gram.c" + break; + + case 374: /* reloption_elem: ColLabel '.' ColLabel */ +#line 2783 "gram.y" + { + (yyval.defelt) = makeDefElemExtended((yyvsp[-2].str), (yyvsp[0].str), NULL, DEFELEM_UNSPEC, (yylsp[-2])); + } +#line 29876 "gram.c" + break; + + case 375: /* alter_identity_column_option_list: alter_identity_column_option */ +#line 2790 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 29882 "gram.c" + break; + + case 376: /* alter_identity_column_option_list: alter_identity_column_option_list alter_identity_column_option */ +#line 2792 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 29888 "gram.c" + break; + + case 377: /* alter_identity_column_option: RESTART */ +#line 2797 "gram.y" + { + (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[0])); + } +#line 29896 "gram.c" + break; + + case 378: /* alter_identity_column_option: RESTART opt_with NumericOnly */ +#line 2801 "gram.y" + { + (yyval.defelt) = makeDefElem("restart", (Node *)(yyvsp[0].value), (yylsp[-2])); + } +#line 29904 "gram.c" + break; + + case 379: /* alter_identity_column_option: SET SeqOptElem */ +#line 2805 "gram.y" + { + if (strcmp((yyvsp[0].defelt)->defname, "as") == 0 || + strcmp((yyvsp[0].defelt)->defname, "restart") == 0 || + strcmp((yyvsp[0].defelt)->defname, "owned_by") == 0) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("sequence option \"%s\" not supported here", (yyvsp[0].defelt)->defname), + parser_errposition((yylsp[0])))); + (yyval.defelt) = (yyvsp[0].defelt); + } +#line 29919 "gram.c" + break; + + case 380: /* alter_identity_column_option: SET GENERATED generated_when */ +#line 2816 "gram.y" + { + (yyval.defelt) = makeDefElem("generated", (Node *) makeInteger((yyvsp[0].ival)), (yylsp[-2])); + } +#line 29927 "gram.c" + break; + + case 381: /* PartitionBoundSpec: FOR VALUES WITH '(' hash_partbound ')' */ +#line 2824 "gram.y" + { + ListCell *lc; + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->strategy = PARTITION_STRATEGY_HASH; + n->modulus = n->remainder = -1; + + foreach (lc, (yyvsp[-1].list)) + { + DefElem *opt = lfirst_node(DefElem, lc); + + if (strcmp(opt->defname, "modulus") == 0) + { + if (n->modulus != -1) + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_OBJECT), + errmsg("modulus for hash partition provided more than once"), + parser_errposition(opt->location))); + n->modulus = defGetInt32(opt); + } + else if (strcmp(opt->defname, "remainder") == 0) + { + if (n->remainder != -1) + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_OBJECT), + errmsg("remainder for hash partition provided more than once"), + parser_errposition(opt->location))); + n->remainder = defGetInt32(opt); + } + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized hash partition bound specification \"%s\"", + opt->defname), + parser_errposition(opt->location))); + } + + if (n->modulus == -1) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("modulus for hash partition must be specified"))); + if (n->remainder == -1) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("remainder for hash partition must be specified"))); + + n->location = (yylsp[-3]); + + (yyval.partboundspec) = n; + } +#line 29982 "gram.c" + break; + + case 382: /* PartitionBoundSpec: FOR VALUES IN_P '(' expr_list ')' */ +#line 2877 "gram.y" + { + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->strategy = PARTITION_STRATEGY_LIST; + n->is_default = false; + n->listdatums = (yyvsp[-1].list); + n->location = (yylsp[-3]); + + (yyval.partboundspec) = n; + } +#line 29997 "gram.c" + break; + + case 383: /* PartitionBoundSpec: FOR VALUES FROM '(' expr_list ')' TO '(' expr_list ')' */ +#line 2890 "gram.y" + { + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->strategy = PARTITION_STRATEGY_RANGE; + n->is_default = false; + n->lowerdatums = (yyvsp[-5].list); + n->upperdatums = (yyvsp[-1].list); + n->location = (yylsp[-7]); + + (yyval.partboundspec) = n; + } +#line 30013 "gram.c" + break; + + case 384: /* PartitionBoundSpec: DEFAULT */ +#line 2904 "gram.y" + { + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->is_default = true; + n->location = (yylsp[0]); + + (yyval.partboundspec) = n; + } +#line 30026 "gram.c" + break; + + case 385: /* hash_partbound_elem: NonReservedWord Iconst */ +#line 2916 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-1].str), (Node *)makeInteger((yyvsp[0].ival)), (yylsp[-1])); + } +#line 30034 "gram.c" + break; + + case 386: /* hash_partbound: hash_partbound_elem */ +#line 2923 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].defelt)); + } +#line 30042 "gram.c" + break; + + case 387: /* hash_partbound: hash_partbound ',' hash_partbound_elem */ +#line 2927 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); + } +#line 30050 "gram.c" + break; + + case 388: /* AlterCompositeTypeStmt: ALTER TYPE_P any_name alter_type_cmds */ +#line 2941 "gram.y" + { + AlterTableStmt *n = makeNode(AlterTableStmt); + + /* can't use qualified_name, sigh */ + n->relation = makeRangeVarFromAnyName((yyvsp[-1].list), (yylsp[-1]), yyscanner); + n->cmds = (yyvsp[0].list); + n->objtype = OBJECT_TYPE; + (yyval.node) = (Node *)n; + } +#line 30064 "gram.c" + break; + + case 389: /* alter_type_cmds: alter_type_cmd */ +#line 2953 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 30070 "gram.c" + break; + + case 390: /* alter_type_cmds: alter_type_cmds ',' alter_type_cmd */ +#line 2954 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 30076 "gram.c" + break; + + case 391: /* alter_type_cmd: ADD_P ATTRIBUTE TableFuncElement opt_drop_behavior */ +#line 2960 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = (yyvsp[-1].node); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *)n; + } +#line 30088 "gram.c" + break; + + case 392: /* alter_type_cmd: DROP ATTRIBUTE IF_P EXISTS ColId opt_drop_behavior */ +#line 2969 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 30101 "gram.c" + break; + + case 393: /* alter_type_cmd: DROP ATTRIBUTE ColId opt_drop_behavior */ +#line 2979 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 30114 "gram.c" + break; + + case 394: /* alter_type_cmd: ALTER ATTRIBUTE ColId opt_set_data TYPE_P Typename opt_collate_clause opt_drop_behavior */ +#line 2989 "gram.y" + { + AlterTableCmd *n = makeNode(AlterTableCmd); + ColumnDef *def = makeNode(ColumnDef); + n->subtype = AT_AlterColumnType; + n->name = (yyvsp[-5].str); + n->def = (Node *) def; + n->behavior = (yyvsp[0].dbehavior); + /* We only use these fields of the ColumnDef node */ + def->typeName = (yyvsp[-2].typnam); + def->collClause = (CollateClause *) (yyvsp[-1].node); + def->raw_default = NULL; + def->location = (yylsp[-5]); + (yyval.node) = (Node *)n; + } +#line 30133 "gram.c" + break; + + case 395: /* ClosePortalStmt: CLOSE cursor_name */ +#line 3015 "gram.y" + { + ClosePortalStmt *n = makeNode(ClosePortalStmt); + n->portalname = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 30143 "gram.c" + break; + + case 396: /* ClosePortalStmt: CLOSE ALL */ +#line 3021 "gram.y" + { + ClosePortalStmt *n = makeNode(ClosePortalStmt); + n->portalname = NULL; + (yyval.node) = (Node *)n; + } +#line 30153 "gram.c" + break; + + case 397: /* CopyStmt: COPY opt_binary qualified_name opt_column_list copy_from opt_program copy_file_name copy_delimiter opt_with copy_options where_clause */ +#line 3056 "gram.y" + { + CopyStmt *n = makeNode(CopyStmt); + n->relation = (yyvsp[-8].range); + n->query = NULL; + n->attlist = (yyvsp[-7].list); + n->is_from = (yyvsp[-6].boolean); + n->is_program = (yyvsp[-5].boolean); + n->filename = (yyvsp[-4].str); + n->whereClause = (yyvsp[0].node); + + if (n->is_program && n->filename == NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("STDIN/STDOUT not allowed with PROGRAM"), + parser_errposition((yylsp[-3])))); + + if (!n->is_from && n->whereClause != NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("WHERE clause not allowed with COPY TO"), + parser_errposition((yylsp[0])))); + + n->options = NIL; + /* Concatenate user-supplied flags */ + if ((yyvsp[-9].defelt)) + n->options = lappend(n->options, (yyvsp[-9].defelt)); + if ((yyvsp[-3].defelt)) + n->options = lappend(n->options, (yyvsp[-3].defelt)); + if ((yyvsp[-1].list)) + n->options = list_concat(n->options, (yyvsp[-1].list)); + (yyval.node) = (Node *)n; + } +#line 30190 "gram.c" + break; + + case 398: /* CopyStmt: COPY '(' PreparableStmt ')' TO opt_program copy_file_name opt_with copy_options */ +#line 3089 "gram.y" + { + CopyStmt *n = makeNode(CopyStmt); + n->relation = NULL; + n->query = (yyvsp[-6].node); + n->attlist = NIL; + n->is_from = false; + n->is_program = (yyvsp[-3].boolean); + n->filename = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + + if (n->is_program && n->filename == NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("STDIN/STDOUT not allowed with PROGRAM"), + parser_errposition((yylsp[-4])))); + + (yyval.node) = (Node *)n; + } +#line 30213 "gram.c" + break; + + case 399: /* copy_from: FROM */ +#line 3110 "gram.y" + { (yyval.boolean) = true; } +#line 30219 "gram.c" + break; + + case 400: /* copy_from: TO */ +#line 3111 "gram.y" + { (yyval.boolean) = false; } +#line 30225 "gram.c" + break; + + case 401: /* opt_program: PROGRAM */ +#line 3115 "gram.y" + { (yyval.boolean) = true; } +#line 30231 "gram.c" + break; + + case 402: /* opt_program: %empty */ +#line 3116 "gram.y" + { (yyval.boolean) = false; } +#line 30237 "gram.c" + break; + + case 403: /* copy_file_name: Sconst */ +#line 3125 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 30243 "gram.c" + break; + + case 404: /* copy_file_name: STDIN */ +#line 3126 "gram.y" + { (yyval.str) = NULL; } +#line 30249 "gram.c" + break; + + case 405: /* copy_file_name: STDOUT */ +#line 3127 "gram.y" + { (yyval.str) = NULL; } +#line 30255 "gram.c" + break; + + case 406: /* copy_options: copy_opt_list */ +#line 3130 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 30261 "gram.c" + break; + + case 407: /* copy_options: '(' copy_generic_opt_list ')' */ +#line 3131 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 30267 "gram.c" + break; + + case 408: /* copy_opt_list: copy_opt_list copy_opt_item */ +#line 3136 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 30273 "gram.c" + break; + + case 409: /* copy_opt_list: %empty */ +#line 3137 "gram.y" + { (yyval.list) = NIL; } +#line 30279 "gram.c" + break; + + case 410: /* copy_opt_item: BINARY */ +#line 3142 "gram.y" + { + (yyval.defelt) = makeDefElem("format", (Node *)makeString("binary"), (yylsp[0])); + } +#line 30287 "gram.c" + break; + + case 411: /* copy_opt_item: FREEZE */ +#line 3146 "gram.y" + { + (yyval.defelt) = makeDefElem("freeze", (Node *)makeInteger(true), (yylsp[0])); + } +#line 30295 "gram.c" + break; + + case 412: /* copy_opt_item: DELIMITER opt_as Sconst */ +#line 3150 "gram.y" + { + (yyval.defelt) = makeDefElem("delimiter", (Node *)makeString((yyvsp[0].str)), (yylsp[-2])); + } +#line 30303 "gram.c" + break; + + case 413: /* copy_opt_item: NULL_P opt_as Sconst */ +#line 3154 "gram.y" + { + (yyval.defelt) = makeDefElem("null", (Node *)makeString((yyvsp[0].str)), (yylsp[-2])); + } +#line 30311 "gram.c" + break; + + case 414: /* copy_opt_item: CSV */ +#line 3158 "gram.y" + { + (yyval.defelt) = makeDefElem("format", (Node *)makeString("csv"), (yylsp[0])); + } +#line 30319 "gram.c" + break; + + case 415: /* copy_opt_item: HEADER_P */ +#line 3162 "gram.y" + { + (yyval.defelt) = makeDefElem("header", (Node *)makeInteger(true), (yylsp[0])); + } +#line 30327 "gram.c" + break; + + case 416: /* copy_opt_item: QUOTE opt_as Sconst */ +#line 3166 "gram.y" + { + (yyval.defelt) = makeDefElem("quote", (Node *)makeString((yyvsp[0].str)), (yylsp[-2])); + } +#line 30335 "gram.c" + break; + + case 417: /* copy_opt_item: ESCAPE opt_as Sconst */ +#line 3170 "gram.y" + { + (yyval.defelt) = makeDefElem("escape", (Node *)makeString((yyvsp[0].str)), (yylsp[-2])); + } +#line 30343 "gram.c" + break; + + case 418: /* copy_opt_item: FORCE QUOTE columnList */ +#line 3174 "gram.y" + { + (yyval.defelt) = makeDefElem("force_quote", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 30351 "gram.c" + break; + + case 419: /* copy_opt_item: FORCE QUOTE '*' */ +#line 3178 "gram.y" + { + (yyval.defelt) = makeDefElem("force_quote", (Node *)makeNode(A_Star), (yylsp[-2])); + } +#line 30359 "gram.c" + break; + + case 420: /* copy_opt_item: FORCE NOT NULL_P columnList */ +#line 3182 "gram.y" + { + (yyval.defelt) = makeDefElem("force_not_null", (Node *)(yyvsp[0].list), (yylsp[-3])); + } +#line 30367 "gram.c" + break; + + case 421: /* copy_opt_item: FORCE NULL_P columnList */ +#line 3186 "gram.y" + { + (yyval.defelt) = makeDefElem("force_null", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 30375 "gram.c" + break; + + case 422: /* copy_opt_item: ENCODING Sconst */ +#line 3190 "gram.y" + { + (yyval.defelt) = makeDefElem("encoding", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 30383 "gram.c" + break; + + case 423: /* opt_binary: BINARY */ +#line 3199 "gram.y" + { + (yyval.defelt) = makeDefElem("format", (Node *)makeString("binary"), (yylsp[0])); + } +#line 30391 "gram.c" + break; + + case 424: /* opt_binary: %empty */ +#line 3202 "gram.y" + { (yyval.defelt) = NULL; } +#line 30397 "gram.c" + break; + + case 425: /* copy_delimiter: opt_using DELIMITERS Sconst */ +#line 3207 "gram.y" + { + (yyval.defelt) = makeDefElem("delimiter", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 30405 "gram.c" + break; + + case 426: /* copy_delimiter: %empty */ +#line 3210 "gram.y" + { (yyval.defelt) = NULL; } +#line 30411 "gram.c" + break; + + case 429: /* copy_generic_opt_list: copy_generic_opt_elem */ +#line 3221 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].defelt)); + } +#line 30419 "gram.c" + break; + + case 430: /* copy_generic_opt_list: copy_generic_opt_list ',' copy_generic_opt_elem */ +#line 3225 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); + } +#line 30427 "gram.c" + break; + + case 431: /* copy_generic_opt_elem: ColLabel copy_generic_opt_arg */ +#line 3232 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-1].str), (yyvsp[0].node), (yylsp[-1])); + } +#line 30435 "gram.c" + break; + + case 432: /* copy_generic_opt_arg: opt_boolean_or_string */ +#line 3238 "gram.y" + { (yyval.node) = (Node *) makeString((yyvsp[0].str)); } +#line 30441 "gram.c" + break; + + case 433: /* copy_generic_opt_arg: NumericOnly */ +#line 3239 "gram.y" + { (yyval.node) = (Node *) (yyvsp[0].value); } +#line 30447 "gram.c" + break; + + case 434: /* copy_generic_opt_arg: '*' */ +#line 3240 "gram.y" + { (yyval.node) = (Node *) makeNode(A_Star); } +#line 30453 "gram.c" + break; + + case 435: /* copy_generic_opt_arg: '(' copy_generic_opt_arg_list ')' */ +#line 3241 "gram.y" + { (yyval.node) = (Node *) (yyvsp[-1].list); } +#line 30459 "gram.c" + break; + + case 436: /* copy_generic_opt_arg: %empty */ +#line 3242 "gram.y" + { (yyval.node) = NULL; } +#line 30465 "gram.c" + break; + + case 437: /* copy_generic_opt_arg_list: copy_generic_opt_arg_list_item */ +#line 3247 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].node)); + } +#line 30473 "gram.c" + break; + + case 438: /* copy_generic_opt_arg_list: copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item */ +#line 3251 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); + } +#line 30481 "gram.c" + break; + + case 439: /* copy_generic_opt_arg_list_item: opt_boolean_or_string */ +#line 3258 "gram.y" + { (yyval.node) = (Node *) makeString((yyvsp[0].str)); } +#line 30487 "gram.c" + break; + + case 440: /* CreateStmt: CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3272 "gram.y" + { + CreateStmt *n = makeNode(CreateStmt); + (yyvsp[-9].range)->relpersistence = (yyvsp[-11].ival); + n->relation = (yyvsp[-9].range); + n->tableElts = (yyvsp[-7].list); + n->inhRelations = (yyvsp[-5].list); + n->partspec = (yyvsp[-4].partspec); + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = (yyvsp[-3].str); + n->options = (yyvsp[-2].list); + n->oncommit = (yyvsp[-1].oncommit); + n->tablespacename = (yyvsp[0].str); + n->if_not_exists = false; + (yyval.node) = (Node *)n; + } +#line 30508 "gram.c" + break; + + case 441: /* CreateStmt: CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3291 "gram.y" + { + CreateStmt *n = makeNode(CreateStmt); + (yyvsp[-9].range)->relpersistence = (yyvsp[-14].ival); + n->relation = (yyvsp[-9].range); + n->tableElts = (yyvsp[-7].list); + n->inhRelations = (yyvsp[-5].list); + n->partspec = (yyvsp[-4].partspec); + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = (yyvsp[-3].str); + n->options = (yyvsp[-2].list); + n->oncommit = (yyvsp[-1].oncommit); + n->tablespacename = (yyvsp[0].str); + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 30529 "gram.c" + break; + + case 442: /* CreateStmt: CREATE OptTemp TABLE qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3310 "gram.y" + { + CreateStmt *n = makeNode(CreateStmt); + (yyvsp[-8].range)->relpersistence = (yyvsp[-10].ival); + n->relation = (yyvsp[-8].range); + n->tableElts = (yyvsp[-5].list); + n->inhRelations = NIL; + n->partspec = (yyvsp[-4].partspec); + n->ofTypename = makeTypeNameFromNameList((yyvsp[-6].list)); + n->ofTypename->location = (yylsp[-6]); + n->constraints = NIL; + n->accessMethod = (yyvsp[-3].str); + n->options = (yyvsp[-2].list); + n->oncommit = (yyvsp[-1].oncommit); + n->tablespacename = (yyvsp[0].str); + n->if_not_exists = false; + (yyval.node) = (Node *)n; + } +#line 30551 "gram.c" + break; + + case 443: /* CreateStmt: CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name OF any_name OptTypedTableElementList OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3330 "gram.y" + { + CreateStmt *n = makeNode(CreateStmt); + (yyvsp[-8].range)->relpersistence = (yyvsp[-13].ival); + n->relation = (yyvsp[-8].range); + n->tableElts = (yyvsp[-5].list); + n->inhRelations = NIL; + n->partspec = (yyvsp[-4].partspec); + n->ofTypename = makeTypeNameFromNameList((yyvsp[-6].list)); + n->ofTypename->location = (yylsp[-6]); + n->constraints = NIL; + n->accessMethod = (yyvsp[-3].str); + n->options = (yyvsp[-2].list); + n->oncommit = (yyvsp[-1].oncommit); + n->tablespacename = (yyvsp[0].str); + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 30573 "gram.c" + break; + + case 444: /* CreateStmt: CREATE OptTemp TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3350 "gram.y" + { + CreateStmt *n = makeNode(CreateStmt); + (yyvsp[-10].range)->relpersistence = (yyvsp[-12].ival); + n->relation = (yyvsp[-10].range); + n->tableElts = (yyvsp[-6].list); + n->inhRelations = list_make1((yyvsp[-7].range)); + n->partbound = (yyvsp[-5].partboundspec); + n->partspec = (yyvsp[-4].partspec); + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = (yyvsp[-3].str); + n->options = (yyvsp[-2].list); + n->oncommit = (yyvsp[-1].oncommit); + n->tablespacename = (yyvsp[0].str); + n->if_not_exists = false; + (yyval.node) = (Node *)n; + } +#line 30595 "gram.c" + break; + + case 445: /* CreateStmt: CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 3370 "gram.y" + { + CreateStmt *n = makeNode(CreateStmt); + (yyvsp[-10].range)->relpersistence = (yyvsp[-15].ival); + n->relation = (yyvsp[-10].range); + n->tableElts = (yyvsp[-6].list); + n->inhRelations = list_make1((yyvsp[-7].range)); + n->partbound = (yyvsp[-5].partboundspec); + n->partspec = (yyvsp[-4].partspec); + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = (yyvsp[-3].str); + n->options = (yyvsp[-2].list); + n->oncommit = (yyvsp[-1].oncommit); + n->tablespacename = (yyvsp[0].str); + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 30617 "gram.c" + break; + + case 446: /* OptTemp: TEMPORARY */ +#line 3400 "gram.y" + { (yyval.ival) = RELPERSISTENCE_TEMP; } +#line 30623 "gram.c" + break; + + case 447: /* OptTemp: TEMP */ +#line 3401 "gram.y" + { (yyval.ival) = RELPERSISTENCE_TEMP; } +#line 30629 "gram.c" + break; + + case 448: /* OptTemp: LOCAL TEMPORARY */ +#line 3402 "gram.y" + { (yyval.ival) = RELPERSISTENCE_TEMP; } +#line 30635 "gram.c" + break; + + case 449: /* OptTemp: LOCAL TEMP */ +#line 3403 "gram.y" + { (yyval.ival) = RELPERSISTENCE_TEMP; } +#line 30641 "gram.c" + break; + + case 450: /* OptTemp: GLOBAL TEMPORARY */ +#line 3405 "gram.y" + { + ereport(WARNING, + (errmsg("GLOBAL is deprecated in temporary table creation"), + parser_errposition((yylsp[-1])))); + (yyval.ival) = RELPERSISTENCE_TEMP; + } +#line 30652 "gram.c" + break; + + case 451: /* OptTemp: GLOBAL TEMP */ +#line 3412 "gram.y" + { + ereport(WARNING, + (errmsg("GLOBAL is deprecated in temporary table creation"), + parser_errposition((yylsp[-1])))); + (yyval.ival) = RELPERSISTENCE_TEMP; + } +#line 30663 "gram.c" + break; + + case 452: /* OptTemp: UNLOGGED */ +#line 3418 "gram.y" + { (yyval.ival) = RELPERSISTENCE_UNLOGGED; } +#line 30669 "gram.c" + break; + + case 453: /* OptTemp: %empty */ +#line 3419 "gram.y" + { (yyval.ival) = RELPERSISTENCE_PERMANENT; } +#line 30675 "gram.c" + break; + + case 454: /* OptTableElementList: TableElementList */ +#line 3423 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 30681 "gram.c" + break; + + case 455: /* OptTableElementList: %empty */ +#line 3424 "gram.y" + { (yyval.list) = NIL; } +#line 30687 "gram.c" + break; + + case 456: /* OptTypedTableElementList: '(' TypedTableElementList ')' */ +#line 3428 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 30693 "gram.c" + break; + + case 457: /* OptTypedTableElementList: %empty */ +#line 3429 "gram.y" + { (yyval.list) = NIL; } +#line 30699 "gram.c" + break; + + case 458: /* TableElementList: TableElement */ +#line 3434 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].node)); + } +#line 30707 "gram.c" + break; + + case 459: /* TableElementList: TableElementList ',' TableElement */ +#line 3438 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); + } +#line 30715 "gram.c" + break; + + case 460: /* TypedTableElementList: TypedTableElement */ +#line 3445 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].node)); + } +#line 30723 "gram.c" + break; + + case 461: /* TypedTableElementList: TypedTableElementList ',' TypedTableElement */ +#line 3449 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); + } +#line 30731 "gram.c" + break; + + case 462: /* TableElement: columnDef */ +#line 3455 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 30737 "gram.c" + break; + + case 463: /* TableElement: TableLikeClause */ +#line 3456 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 30743 "gram.c" + break; + + case 464: /* TableElement: TableConstraint */ +#line 3457 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 30749 "gram.c" + break; + + case 465: /* TypedTableElement: columnOptions */ +#line 3461 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 30755 "gram.c" + break; + + case 466: /* TypedTableElement: TableConstraint */ +#line 3462 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 30761 "gram.c" + break; + + case 467: /* columnDef: ColId Typename opt_column_compression create_generic_options ColQualList */ +#line 3466 "gram.y" + { + ColumnDef *n = makeNode(ColumnDef); + n->colname = (yyvsp[-4].str); + n->typeName = (yyvsp[-3].typnam); + n->compression = (yyvsp[-2].str); + n->inhcount = 0; + n->is_local = true; + n->is_not_null = false; + n->is_from_type = false; + n->storage = 0; + n->raw_default = NULL; + n->cooked_default = NULL; + n->collOid = InvalidOid; + n->fdwoptions = (yyvsp[-1].list); + SplitColQualList((yyvsp[0].list), &n->constraints, &n->collClause, + yyscanner); + n->location = (yylsp[-4]); + (yyval.node) = (Node *)n; + } +#line 30785 "gram.c" + break; + + case 468: /* columnOptions: ColId ColQualList */ +#line 3488 "gram.y" + { + ColumnDef *n = makeNode(ColumnDef); + n->colname = (yyvsp[-1].str); + n->typeName = NULL; + n->inhcount = 0; + n->is_local = true; + n->is_not_null = false; + n->is_from_type = false; + n->storage = 0; + n->raw_default = NULL; + n->cooked_default = NULL; + n->collOid = InvalidOid; + SplitColQualList((yyvsp[0].list), &n->constraints, &n->collClause, + yyscanner); + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 30807 "gram.c" + break; + + case 469: /* columnOptions: ColId WITH OPTIONS ColQualList */ +#line 3506 "gram.y" + { + ColumnDef *n = makeNode(ColumnDef); + n->colname = (yyvsp[-3].str); + n->typeName = NULL; + n->inhcount = 0; + n->is_local = true; + n->is_not_null = false; + n->is_from_type = false; + n->storage = 0; + n->raw_default = NULL; + n->cooked_default = NULL; + n->collOid = InvalidOid; + SplitColQualList((yyvsp[0].list), &n->constraints, &n->collClause, + yyscanner); + n->location = (yylsp[-3]); + (yyval.node) = (Node *)n; + } +#line 30829 "gram.c" + break; + + case 470: /* column_compression: COMPRESSION ColId */ +#line 3526 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 30835 "gram.c" + break; + + case 471: /* column_compression: COMPRESSION DEFAULT */ +#line 3527 "gram.y" + { (yyval.str) = pstrdup("default"); } +#line 30841 "gram.c" + break; + + case 472: /* opt_column_compression: column_compression */ +#line 3531 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 30847 "gram.c" + break; + + case 473: /* opt_column_compression: %empty */ +#line 3532 "gram.y" + { (yyval.str) = NULL; } +#line 30853 "gram.c" + break; + + case 474: /* ColQualList: ColQualList ColConstraint */ +#line 3536 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } +#line 30859 "gram.c" + break; + + case 475: /* ColQualList: %empty */ +#line 3537 "gram.y" + { (yyval.list) = NIL; } +#line 30865 "gram.c" + break; + + case 476: /* ColConstraint: CONSTRAINT name ColConstraintElem */ +#line 3542 "gram.y" + { + Constraint *n = castNode(Constraint, (yyvsp[0].node)); + n->conname = (yyvsp[-1].str); + n->location = (yylsp[-2]); + (yyval.node) = (Node *) n; + } +#line 30876 "gram.c" + break; + + case 477: /* ColConstraint: ColConstraintElem */ +#line 3548 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 30882 "gram.c" + break; + + case 478: /* ColConstraint: ConstraintAttr */ +#line 3549 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 30888 "gram.c" + break; + + case 479: /* ColConstraint: COLLATE any_name */ +#line 3551 "gram.y" + { + /* + * Note: the CollateClause is momentarily included in + * the list built by ColQualList, but we split it out + * again in SplitColQualList. + */ + CollateClause *n = makeNode(CollateClause); + n->arg = NULL; + n->collname = (yyvsp[0].list); + n->location = (yylsp[-1]); + (yyval.node) = (Node *) n; + } +#line 30905 "gram.c" + break; + + case 480: /* ColConstraintElem: NOT NULL_P */ +#line 3582 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_NOTNULL; + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 30916 "gram.c" + break; + + case 481: /* ColConstraintElem: NULL_P */ +#line 3589 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_NULL; + n->location = (yylsp[0]); + (yyval.node) = (Node *)n; + } +#line 30927 "gram.c" + break; + + case 482: /* ColConstraintElem: UNIQUE opt_definition OptConsTableSpace */ +#line 3596 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_UNIQUE; + n->location = (yylsp[-2]); + n->keys = NULL; + n->options = (yyvsp[-1].list); + n->indexname = NULL; + n->indexspace = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 30942 "gram.c" + break; + + case 483: /* ColConstraintElem: PRIMARY KEY opt_definition OptConsTableSpace */ +#line 3607 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_PRIMARY; + n->location = (yylsp[-3]); + n->keys = NULL; + n->options = (yyvsp[-1].list); + n->indexname = NULL; + n->indexspace = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 30957 "gram.c" + break; + + case 484: /* ColConstraintElem: CHECK '(' a_expr ')' opt_no_inherit */ +#line 3618 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_CHECK; + n->location = (yylsp[-4]); + n->is_no_inherit = (yyvsp[0].boolean); + n->raw_expr = (yyvsp[-2].node); + n->cooked_expr = NULL; + n->skip_validation = false; + n->initially_valid = true; + (yyval.node) = (Node *)n; + } +#line 30973 "gram.c" + break; + + case 485: /* ColConstraintElem: DEFAULT b_expr */ +#line 3630 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_DEFAULT; + n->location = (yylsp[-1]); + n->raw_expr = (yyvsp[0].node); + n->cooked_expr = NULL; + (yyval.node) = (Node *)n; + } +#line 30986 "gram.c" + break; + + case 486: /* ColConstraintElem: GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList */ +#line 3639 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_IDENTITY; + n->generated_when = (yyvsp[-3].ival); + n->options = (yyvsp[0].list); + n->location = (yylsp[-4]); + (yyval.node) = (Node *)n; + } +#line 30999 "gram.c" + break; + + case 487: /* ColConstraintElem: GENERATED generated_when AS '(' a_expr ')' STORED */ +#line 3648 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_GENERATED; + n->generated_when = (yyvsp[-5].ival); + n->raw_expr = (yyvsp[-2].node); + n->cooked_expr = NULL; + n->location = (yylsp[-6]); + + /* + * Can't do this in the grammar because of shift/reduce + * conflicts. (IDENTITY allows both ALWAYS and BY + * DEFAULT, but generated columns only allow ALWAYS.) We + * can also give a more useful error message and location. + */ + if ((yyvsp[-5].ival) != ATTRIBUTE_IDENTITY_ALWAYS) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("for a generated column, GENERATED ALWAYS must be specified"), + parser_errposition((yylsp[-5])))); + + (yyval.node) = (Node *)n; + } +#line 31026 "gram.c" + break; + + case 488: /* ColConstraintElem: REFERENCES qualified_name opt_column_list key_match key_actions */ +#line 3671 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_FOREIGN; + n->location = (yylsp[-4]); + n->pktable = (yyvsp[-3].range); + n->fk_attrs = NIL; + n->pk_attrs = (yyvsp[-2].list); + n->fk_matchtype = (yyvsp[-1].ival); + n->fk_upd_action = (char) ((yyvsp[0].ival) >> 8); + n->fk_del_action = (char) ((yyvsp[0].ival) & 0xFF); + n->skip_validation = false; + n->initially_valid = true; + (yyval.node) = (Node *)n; + } +#line 31045 "gram.c" + break; + + case 489: /* generated_when: ALWAYS */ +#line 3688 "gram.y" + { (yyval.ival) = ATTRIBUTE_IDENTITY_ALWAYS; } +#line 31051 "gram.c" + break; + + case 490: /* generated_when: BY DEFAULT */ +#line 3689 "gram.y" + { (yyval.ival) = ATTRIBUTE_IDENTITY_BY_DEFAULT; } +#line 31057 "gram.c" + break; + + case 491: /* ConstraintAttr: DEFERRABLE */ +#line 3709 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_DEFERRABLE; + n->location = (yylsp[0]); + (yyval.node) = (Node *)n; + } +#line 31068 "gram.c" + break; + + case 492: /* ConstraintAttr: NOT DEFERRABLE */ +#line 3716 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_NOT_DEFERRABLE; + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 31079 "gram.c" + break; + + case 493: /* ConstraintAttr: INITIALLY DEFERRED */ +#line 3723 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_DEFERRED; + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 31090 "gram.c" + break; + + case 494: /* ConstraintAttr: INITIALLY IMMEDIATE */ +#line 3730 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_IMMEDIATE; + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 31101 "gram.c" + break; + + case 495: /* TableLikeClause: LIKE qualified_name TableLikeOptionList */ +#line 3741 "gram.y" + { + TableLikeClause *n = makeNode(TableLikeClause); + n->relation = (yyvsp[-1].range); + n->options = (yyvsp[0].ival); + n->relationOid = InvalidOid; + (yyval.node) = (Node *)n; + } +#line 31113 "gram.c" + break; + + case 496: /* TableLikeOptionList: TableLikeOptionList INCLUDING TableLikeOption */ +#line 3751 "gram.y" + { (yyval.ival) = (yyvsp[-2].ival) | (yyvsp[0].ival); } +#line 31119 "gram.c" + break; + + case 497: /* TableLikeOptionList: TableLikeOptionList EXCLUDING TableLikeOption */ +#line 3752 "gram.y" + { (yyval.ival) = (yyvsp[-2].ival) & ~(yyvsp[0].ival); } +#line 31125 "gram.c" + break; + + case 498: /* TableLikeOptionList: %empty */ +#line 3753 "gram.y" + { (yyval.ival) = 0; } +#line 31131 "gram.c" + break; + + case 499: /* TableLikeOption: COMMENTS */ +#line 3757 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_COMMENTS; } +#line 31137 "gram.c" + break; + + case 500: /* TableLikeOption: COMPRESSION */ +#line 3758 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_COMPRESSION; } +#line 31143 "gram.c" + break; + + case 501: /* TableLikeOption: CONSTRAINTS */ +#line 3759 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_CONSTRAINTS; } +#line 31149 "gram.c" + break; + + case 502: /* TableLikeOption: DEFAULTS */ +#line 3760 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_DEFAULTS; } +#line 31155 "gram.c" + break; + + case 503: /* TableLikeOption: IDENTITY_P */ +#line 3761 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_IDENTITY; } +#line 31161 "gram.c" + break; + + case 504: /* TableLikeOption: GENERATED */ +#line 3762 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_GENERATED; } +#line 31167 "gram.c" + break; + + case 505: /* TableLikeOption: INDEXES */ +#line 3763 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_INDEXES; } +#line 31173 "gram.c" + break; + + case 506: /* TableLikeOption: STATISTICS */ +#line 3764 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_STATISTICS; } +#line 31179 "gram.c" + break; + + case 507: /* TableLikeOption: STORAGE */ +#line 3765 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_STORAGE; } +#line 31185 "gram.c" + break; + + case 508: /* TableLikeOption: ALL */ +#line 3766 "gram.y" + { (yyval.ival) = CREATE_TABLE_LIKE_ALL; } +#line 31191 "gram.c" + break; + + case 509: /* TableConstraint: CONSTRAINT name ConstraintElem */ +#line 3776 "gram.y" + { + Constraint *n = castNode(Constraint, (yyvsp[0].node)); + n->conname = (yyvsp[-1].str); + n->location = (yylsp[-2]); + (yyval.node) = (Node *) n; + } +#line 31202 "gram.c" + break; + + case 510: /* TableConstraint: ConstraintElem */ +#line 3782 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 31208 "gram.c" + break; + + case 511: /* ConstraintElem: CHECK '(' a_expr ')' ConstraintAttributeSpec */ +#line 3787 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_CHECK; + n->location = (yylsp[-4]); + n->raw_expr = (yyvsp[-2].node); + n->cooked_expr = NULL; + processCASbits((yyvsp[0].ival), (yylsp[0]), "CHECK", + NULL, NULL, &n->skip_validation, + &n->is_no_inherit, yyscanner); + n->initially_valid = !n->skip_validation; + (yyval.node) = (Node *)n; + } +#line 31225 "gram.c" + break; + + case 512: /* ConstraintElem: UNIQUE '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec */ +#line 3801 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_UNIQUE; + n->location = (yylsp[-7]); + n->keys = (yyvsp[-5].list); + n->including = (yyvsp[-3].list); + n->options = (yyvsp[-2].list); + n->indexname = NULL; + n->indexspace = (yyvsp[-1].str); + processCASbits((yyvsp[0].ival), (yylsp[0]), "UNIQUE", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + (yyval.node) = (Node *)n; + } +#line 31244 "gram.c" + break; + + case 513: /* ConstraintElem: UNIQUE ExistingIndex ConstraintAttributeSpec */ +#line 3816 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_UNIQUE; + n->location = (yylsp[-2]); + n->keys = NIL; + n->including = NIL; + n->options = NIL; + n->indexname = (yyvsp[-1].str); + n->indexspace = NULL; + processCASbits((yyvsp[0].ival), (yylsp[0]), "UNIQUE", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + (yyval.node) = (Node *)n; + } +#line 31263 "gram.c" + break; + + case 514: /* ConstraintElem: PRIMARY KEY '(' columnList ')' opt_c_include opt_definition OptConsTableSpace ConstraintAttributeSpec */ +#line 3832 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_PRIMARY; + n->location = (yylsp[-8]); + n->keys = (yyvsp[-5].list); + n->including = (yyvsp[-3].list); + n->options = (yyvsp[-2].list); + n->indexname = NULL; + n->indexspace = (yyvsp[-1].str); + processCASbits((yyvsp[0].ival), (yylsp[0]), "PRIMARY KEY", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + (yyval.node) = (Node *)n; + } +#line 31282 "gram.c" + break; + + case 515: /* ConstraintElem: PRIMARY KEY ExistingIndex ConstraintAttributeSpec */ +#line 3847 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_PRIMARY; + n->location = (yylsp[-3]); + n->keys = NIL; + n->including = NIL; + n->options = NIL; + n->indexname = (yyvsp[-1].str); + n->indexspace = NULL; + processCASbits((yyvsp[0].ival), (yylsp[0]), "PRIMARY KEY", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + (yyval.node) = (Node *)n; + } +#line 31301 "gram.c" + break; + + case 516: /* ConstraintElem: EXCLUDE access_method_clause '(' ExclusionConstraintList ')' opt_c_include opt_definition OptConsTableSpace OptWhereClause ConstraintAttributeSpec */ +#line 3864 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_EXCLUSION; + n->location = (yylsp[-9]); + n->access_method = (yyvsp[-8].str); + n->exclusions = (yyvsp[-6].list); + n->including = (yyvsp[-4].list); + n->options = (yyvsp[-3].list); + n->indexname = NULL; + n->indexspace = (yyvsp[-2].str); + n->where_clause = (yyvsp[-1].node); + processCASbits((yyvsp[0].ival), (yylsp[0]), "EXCLUDE", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + (yyval.node) = (Node *)n; + } +#line 31322 "gram.c" + break; + + case 517: /* ConstraintElem: FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list key_match key_actions ConstraintAttributeSpec */ +#line 3882 "gram.y" + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_FOREIGN; + n->location = (yylsp[-10]); + n->pktable = (yyvsp[-4].range); + n->fk_attrs = (yyvsp[-7].list); + n->pk_attrs = (yyvsp[-3].list); + n->fk_matchtype = (yyvsp[-2].ival); + n->fk_upd_action = (char) ((yyvsp[-1].ival) >> 8); + n->fk_del_action = (char) ((yyvsp[-1].ival) & 0xFF); + processCASbits((yyvsp[0].ival), (yylsp[0]), "FOREIGN KEY", + &n->deferrable, &n->initdeferred, + &n->skip_validation, NULL, + yyscanner); + n->initially_valid = !n->skip_validation; + (yyval.node) = (Node *)n; + } +#line 31344 "gram.c" + break; + + case 518: /* opt_no_inherit: NO INHERIT */ +#line 3901 "gram.y" + { (yyval.boolean) = true; } +#line 31350 "gram.c" + break; + + case 519: /* opt_no_inherit: %empty */ +#line 3902 "gram.y" + { (yyval.boolean) = false; } +#line 31356 "gram.c" + break; + + case 520: /* opt_column_list: '(' columnList ')' */ +#line 3906 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 31362 "gram.c" + break; + + case 521: /* opt_column_list: %empty */ +#line 3907 "gram.y" + { (yyval.list) = NIL; } +#line 31368 "gram.c" + break; + + case 522: /* columnList: columnElem */ +#line 3911 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 31374 "gram.c" + break; + + case 523: /* columnList: columnList ',' columnElem */ +#line 3912 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 31380 "gram.c" + break; + + case 524: /* columnElem: ColId */ +#line 3916 "gram.y" + { + (yyval.node) = (Node *) makeString((yyvsp[0].str)); + } +#line 31388 "gram.c" + break; + + case 525: /* opt_c_include: INCLUDE '(' columnList ')' */ +#line 3921 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 31394 "gram.c" + break; + + case 526: /* opt_c_include: %empty */ +#line 3922 "gram.y" + { (yyval.list) = NIL; } +#line 31400 "gram.c" + break; + + case 527: /* key_match: MATCH FULL */ +#line 3926 "gram.y" + { + (yyval.ival) = FKCONSTR_MATCH_FULL; + } +#line 31408 "gram.c" + break; + + case 528: /* key_match: MATCH PARTIAL */ +#line 3930 "gram.y" + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("MATCH PARTIAL not yet implemented"), + parser_errposition((yylsp[-1])))); + (yyval.ival) = FKCONSTR_MATCH_PARTIAL; + } +#line 31420 "gram.c" + break; + + case 529: /* key_match: MATCH SIMPLE */ +#line 3938 "gram.y" + { + (yyval.ival) = FKCONSTR_MATCH_SIMPLE; + } +#line 31428 "gram.c" + break; + + case 530: /* key_match: %empty */ +#line 3942 "gram.y" + { + (yyval.ival) = FKCONSTR_MATCH_SIMPLE; + } +#line 31436 "gram.c" + break; + + case 531: /* ExclusionConstraintList: ExclusionConstraintElem */ +#line 3948 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].list)); } +#line 31442 "gram.c" + break; + + case 532: /* ExclusionConstraintList: ExclusionConstraintList ',' ExclusionConstraintElem */ +#line 3950 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].list)); } +#line 31448 "gram.c" + break; + + case 533: /* ExclusionConstraintElem: index_elem WITH any_operator */ +#line 3954 "gram.y" + { + (yyval.list) = list_make2((yyvsp[-2].ielem), (yyvsp[0].list)); + } +#line 31456 "gram.c" + break; + + case 534: /* ExclusionConstraintElem: index_elem WITH OPERATOR '(' any_operator ')' */ +#line 3959 "gram.y" + { + (yyval.list) = list_make2((yyvsp[-5].ielem), (yyvsp[-1].list)); + } +#line 31464 "gram.c" + break; + + case 535: /* OptWhereClause: WHERE '(' a_expr ')' */ +#line 3965 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 31470 "gram.c" + break; + + case 536: /* OptWhereClause: %empty */ +#line 3966 "gram.y" + { (yyval.node) = NULL; } +#line 31476 "gram.c" + break; + + case 537: /* key_actions: key_update */ +#line 3977 "gram.y" + { (yyval.ival) = ((yyvsp[0].ival) << 8) | (FKCONSTR_ACTION_NOACTION & 0xFF); } +#line 31482 "gram.c" + break; + + case 538: /* key_actions: key_delete */ +#line 3979 "gram.y" + { (yyval.ival) = (FKCONSTR_ACTION_NOACTION << 8) | ((yyvsp[0].ival) & 0xFF); } +#line 31488 "gram.c" + break; + + case 539: /* key_actions: key_update key_delete */ +#line 3981 "gram.y" + { (yyval.ival) = ((yyvsp[-1].ival) << 8) | ((yyvsp[0].ival) & 0xFF); } +#line 31494 "gram.c" + break; + + case 540: /* key_actions: key_delete key_update */ +#line 3983 "gram.y" + { (yyval.ival) = ((yyvsp[0].ival) << 8) | ((yyvsp[-1].ival) & 0xFF); } +#line 31500 "gram.c" + break; + + case 541: /* key_actions: %empty */ +#line 3985 "gram.y" + { (yyval.ival) = (FKCONSTR_ACTION_NOACTION << 8) | (FKCONSTR_ACTION_NOACTION & 0xFF); } +#line 31506 "gram.c" + break; + + case 542: /* key_update: ON UPDATE key_action */ +#line 3988 "gram.y" + { (yyval.ival) = (yyvsp[0].ival); } +#line 31512 "gram.c" + break; + + case 543: /* key_delete: ON DELETE_P key_action */ +#line 3991 "gram.y" + { (yyval.ival) = (yyvsp[0].ival); } +#line 31518 "gram.c" + break; + + case 544: /* key_action: NO ACTION */ +#line 3995 "gram.y" + { (yyval.ival) = FKCONSTR_ACTION_NOACTION; } +#line 31524 "gram.c" + break; + + case 545: /* key_action: RESTRICT */ +#line 3996 "gram.y" + { (yyval.ival) = FKCONSTR_ACTION_RESTRICT; } +#line 31530 "gram.c" + break; + + case 546: /* key_action: CASCADE */ +#line 3997 "gram.y" + { (yyval.ival) = FKCONSTR_ACTION_CASCADE; } +#line 31536 "gram.c" + break; + + case 547: /* key_action: SET NULL_P */ +#line 3998 "gram.y" + { (yyval.ival) = FKCONSTR_ACTION_SETNULL; } +#line 31542 "gram.c" + break; + + case 548: /* key_action: SET DEFAULT */ +#line 3999 "gram.y" + { (yyval.ival) = FKCONSTR_ACTION_SETDEFAULT; } +#line 31548 "gram.c" + break; + + case 549: /* OptInherit: INHERITS '(' qualified_name_list ')' */ +#line 4002 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 31554 "gram.c" + break; + + case 550: /* OptInherit: %empty */ +#line 4003 "gram.y" + { (yyval.list) = NIL; } +#line 31560 "gram.c" + break; + + case 551: /* OptPartitionSpec: PartitionSpec */ +#line 4007 "gram.y" + { (yyval.partspec) = (yyvsp[0].partspec); } +#line 31566 "gram.c" + break; + + case 552: /* OptPartitionSpec: %empty */ +#line 4008 "gram.y" + { (yyval.partspec) = NULL; } +#line 31572 "gram.c" + break; + + case 553: /* PartitionSpec: PARTITION BY ColId '(' part_params ')' */ +#line 4012 "gram.y" + { + PartitionSpec *n = makeNode(PartitionSpec); + + n->strategy = (yyvsp[-3].str); + n->partParams = (yyvsp[-1].list); + n->location = (yylsp[-5]); + + (yyval.partspec) = n; + } +#line 31586 "gram.c" + break; + + case 554: /* part_params: part_elem */ +#line 4023 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].partelem)); } +#line 31592 "gram.c" + break; + + case 555: /* part_params: part_params ',' part_elem */ +#line 4024 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].partelem)); } +#line 31598 "gram.c" + break; + + case 556: /* part_elem: ColId opt_collate opt_class */ +#line 4028 "gram.y" + { + PartitionElem *n = makeNode(PartitionElem); + + n->name = (yyvsp[-2].str); + n->expr = NULL; + n->collation = (yyvsp[-1].list); + n->opclass = (yyvsp[0].list); + n->location = (yylsp[-2]); + (yyval.partelem) = n; + } +#line 31613 "gram.c" + break; + + case 557: /* part_elem: func_expr_windowless opt_collate opt_class */ +#line 4039 "gram.y" + { + PartitionElem *n = makeNode(PartitionElem); + + n->name = NULL; + n->expr = (yyvsp[-2].node); + n->collation = (yyvsp[-1].list); + n->opclass = (yyvsp[0].list); + n->location = (yylsp[-2]); + (yyval.partelem) = n; + } +#line 31628 "gram.c" + break; + + case 558: /* part_elem: '(' a_expr ')' opt_collate opt_class */ +#line 4050 "gram.y" + { + PartitionElem *n = makeNode(PartitionElem); + + n->name = NULL; + n->expr = (yyvsp[-3].node); + n->collation = (yyvsp[-1].list); + n->opclass = (yyvsp[0].list); + n->location = (yylsp[-4]); + (yyval.partelem) = n; + } +#line 31643 "gram.c" + break; + + case 559: /* table_access_method_clause: USING name */ +#line 4063 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 31649 "gram.c" + break; + + case 560: /* table_access_method_clause: %empty */ +#line 4064 "gram.y" + { (yyval.str) = NULL; } +#line 31655 "gram.c" + break; + + case 561: /* OptWith: WITH reloptions */ +#line 4069 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 31661 "gram.c" + break; + + case 562: /* OptWith: WITHOUT OIDS */ +#line 4070 "gram.y" + { (yyval.list) = NIL; } +#line 31667 "gram.c" + break; + + case 563: /* OptWith: %empty */ +#line 4071 "gram.y" + { (yyval.list) = NIL; } +#line 31673 "gram.c" + break; + + case 564: /* OnCommitOption: ON COMMIT DROP */ +#line 4074 "gram.y" + { (yyval.oncommit) = ONCOMMIT_DROP; } +#line 31679 "gram.c" + break; + + case 565: /* OnCommitOption: ON COMMIT DELETE_P ROWS */ +#line 4075 "gram.y" + { (yyval.oncommit) = ONCOMMIT_DELETE_ROWS; } +#line 31685 "gram.c" + break; + + case 566: /* OnCommitOption: ON COMMIT PRESERVE ROWS */ +#line 4076 "gram.y" + { (yyval.oncommit) = ONCOMMIT_PRESERVE_ROWS; } +#line 31691 "gram.c" + break; + + case 567: /* OnCommitOption: %empty */ +#line 4077 "gram.y" + { (yyval.oncommit) = ONCOMMIT_NOOP; } +#line 31697 "gram.c" + break; + + case 568: /* OptTableSpace: TABLESPACE name */ +#line 4080 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 31703 "gram.c" + break; + + case 569: /* OptTableSpace: %empty */ +#line 4081 "gram.y" + { (yyval.str) = NULL; } +#line 31709 "gram.c" + break; + + case 570: /* OptConsTableSpace: USING INDEX TABLESPACE name */ +#line 4084 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 31715 "gram.c" + break; + + case 571: /* OptConsTableSpace: %empty */ +#line 4085 "gram.y" + { (yyval.str) = NULL; } +#line 31721 "gram.c" + break; + + case 572: /* ExistingIndex: USING INDEX name */ +#line 4088 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 31727 "gram.c" + break; + + case 573: /* CreateStatsStmt: CREATE STATISTICS any_name opt_name_list ON stats_params FROM from_list */ +#line 4108 "gram.y" + { + CreateStatsStmt *n = makeNode(CreateStatsStmt); + n->defnames = (yyvsp[-5].list); + n->stat_types = (yyvsp[-4].list); + n->exprs = (yyvsp[-2].list); + n->relations = (yyvsp[0].list); + n->stxcomment = NULL; + n->if_not_exists = false; + (yyval.node) = (Node *)n; + } +#line 31742 "gram.c" + break; + + case 574: /* CreateStatsStmt: CREATE STATISTICS IF_P NOT EXISTS any_name opt_name_list ON stats_params FROM from_list */ +#line 4120 "gram.y" + { + CreateStatsStmt *n = makeNode(CreateStatsStmt); + n->defnames = (yyvsp[-5].list); + n->stat_types = (yyvsp[-4].list); + n->exprs = (yyvsp[-2].list); + n->relations = (yyvsp[0].list); + n->stxcomment = NULL; + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 31757 "gram.c" + break; + + case 575: /* stats_params: stats_param */ +#line 4139 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].selem)); } +#line 31763 "gram.c" + break; + + case 576: /* stats_params: stats_params ',' stats_param */ +#line 4140 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].selem)); } +#line 31769 "gram.c" + break; + + case 577: /* stats_param: ColId */ +#line 4144 "gram.y" + { + (yyval.selem) = makeNode(StatsElem); + (yyval.selem)->name = (yyvsp[0].str); + (yyval.selem)->expr = NULL; + } +#line 31779 "gram.c" + break; + + case 578: /* stats_param: func_expr_windowless */ +#line 4150 "gram.y" + { + (yyval.selem) = makeNode(StatsElem); + (yyval.selem)->name = NULL; + (yyval.selem)->expr = (yyvsp[0].node); + } +#line 31789 "gram.c" + break; + + case 579: /* stats_param: '(' a_expr ')' */ +#line 4156 "gram.y" + { + (yyval.selem) = makeNode(StatsElem); + (yyval.selem)->name = NULL; + (yyval.selem)->expr = (yyvsp[-1].node); + } +#line 31799 "gram.c" + break; + + case 580: /* AlterStatsStmt: ALTER STATISTICS any_name SET STATISTICS SignedIconst */ +#line 4173 "gram.y" + { + AlterStatsStmt *n = makeNode(AlterStatsStmt); + n->defnames = (yyvsp[-3].list); + n->missing_ok = false; + n->stxstattarget = (yyvsp[0].ival); + (yyval.node) = (Node *)n; + } +#line 31811 "gram.c" + break; + + case 581: /* AlterStatsStmt: ALTER STATISTICS IF_P EXISTS any_name SET STATISTICS SignedIconst */ +#line 4181 "gram.y" + { + AlterStatsStmt *n = makeNode(AlterStatsStmt); + n->defnames = (yyvsp[-3].list); + n->missing_ok = true; + n->stxstattarget = (yyvsp[0].ival); + (yyval.node) = (Node *)n; + } +#line 31823 "gram.c" + break; + + case 582: /* CreateAsStmt: CREATE OptTemp TABLE create_as_target AS SelectStmt opt_with_data */ +#line 4202 "gram.y" + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = (yyvsp[-1].node); + ctas->into = (yyvsp[-3].into); + ctas->objtype = OBJECT_TABLE; + ctas->is_select_into = false; + ctas->if_not_exists = false; + /* cram additional flags into the IntoClause */ + (yyvsp[-3].into)->rel->relpersistence = (yyvsp[-5].ival); + (yyvsp[-3].into)->skipData = !((yyvsp[0].boolean)); + (yyval.node) = (Node *) ctas; + } +#line 31840 "gram.c" + break; + + case 583: /* CreateAsStmt: CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS SelectStmt opt_with_data */ +#line 4215 "gram.y" + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = (yyvsp[-1].node); + ctas->into = (yyvsp[-3].into); + ctas->objtype = OBJECT_TABLE; + ctas->is_select_into = false; + ctas->if_not_exists = true; + /* cram additional flags into the IntoClause */ + (yyvsp[-3].into)->rel->relpersistence = (yyvsp[-8].ival); + (yyvsp[-3].into)->skipData = !((yyvsp[0].boolean)); + (yyval.node) = (Node *) ctas; + } +#line 31857 "gram.c" + break; + + case 584: /* create_as_target: qualified_name opt_column_list table_access_method_clause OptWith OnCommitOption OptTableSpace */ +#line 4232 "gram.y" + { + (yyval.into) = makeNode(IntoClause); + (yyval.into)->rel = (yyvsp[-5].range); + (yyval.into)->colNames = (yyvsp[-4].list); + (yyval.into)->accessMethod = (yyvsp[-3].str); + (yyval.into)->options = (yyvsp[-2].list); + (yyval.into)->onCommit = (yyvsp[-1].oncommit); + (yyval.into)->tableSpaceName = (yyvsp[0].str); + (yyval.into)->viewQuery = NULL; + (yyval.into)->skipData = false; /* might get changed later */ + } +#line 31873 "gram.c" + break; + + case 585: /* opt_with_data: WITH DATA_P */ +#line 4246 "gram.y" + { (yyval.boolean) = true; } +#line 31879 "gram.c" + break; + + case 586: /* opt_with_data: WITH NO DATA_P */ +#line 4247 "gram.y" + { (yyval.boolean) = false; } +#line 31885 "gram.c" + break; + + case 587: /* opt_with_data: %empty */ +#line 4248 "gram.y" + { (yyval.boolean) = true; } +#line 31891 "gram.c" + break; + + case 588: /* CreateMatViewStmt: CREATE OptNoLog MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data */ +#line 4261 "gram.y" + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = (yyvsp[-1].node); + ctas->into = (yyvsp[-3].into); + ctas->objtype = OBJECT_MATVIEW; + ctas->is_select_into = false; + ctas->if_not_exists = false; + /* cram additional flags into the IntoClause */ + (yyvsp[-3].into)->rel->relpersistence = (yyvsp[-6].ival); + (yyvsp[-3].into)->skipData = !((yyvsp[0].boolean)); + (yyval.node) = (Node *) ctas; + } +#line 31908 "gram.c" + break; + + case 589: /* CreateMatViewStmt: CREATE OptNoLog MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data */ +#line 4274 "gram.y" + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = (yyvsp[-1].node); + ctas->into = (yyvsp[-3].into); + ctas->objtype = OBJECT_MATVIEW; + ctas->is_select_into = false; + ctas->if_not_exists = true; + /* cram additional flags into the IntoClause */ + (yyvsp[-3].into)->rel->relpersistence = (yyvsp[-9].ival); + (yyvsp[-3].into)->skipData = !((yyvsp[0].boolean)); + (yyval.node) = (Node *) ctas; + } +#line 31925 "gram.c" + break; + + case 590: /* create_mv_target: qualified_name opt_column_list table_access_method_clause opt_reloptions OptTableSpace */ +#line 4290 "gram.y" + { + (yyval.into) = makeNode(IntoClause); + (yyval.into)->rel = (yyvsp[-4].range); + (yyval.into)->colNames = (yyvsp[-3].list); + (yyval.into)->accessMethod = (yyvsp[-2].str); + (yyval.into)->options = (yyvsp[-1].list); + (yyval.into)->onCommit = ONCOMMIT_NOOP; + (yyval.into)->tableSpaceName = (yyvsp[0].str); + (yyval.into)->viewQuery = NULL; /* filled at analysis time */ + (yyval.into)->skipData = false; /* might get changed later */ + } +#line 31941 "gram.c" + break; + + case 591: /* OptNoLog: UNLOGGED */ +#line 4303 "gram.y" + { (yyval.ival) = RELPERSISTENCE_UNLOGGED; } +#line 31947 "gram.c" + break; + + case 592: /* OptNoLog: %empty */ +#line 4304 "gram.y" + { (yyval.ival) = RELPERSISTENCE_PERMANENT; } +#line 31953 "gram.c" + break; + + case 593: /* RefreshMatViewStmt: REFRESH MATERIALIZED VIEW opt_concurrently qualified_name opt_with_data */ +#line 4317 "gram.y" + { + RefreshMatViewStmt *n = makeNode(RefreshMatViewStmt); + n->concurrent = (yyvsp[-2].boolean); + n->relation = (yyvsp[-1].range); + n->skipData = !((yyvsp[0].boolean)); + (yyval.node) = (Node *) n; + } +#line 31965 "gram.c" + break; + + case 594: /* CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqOptList */ +#line 4337 "gram.y" + { + CreateSeqStmt *n = makeNode(CreateSeqStmt); + (yyvsp[-1].range)->relpersistence = (yyvsp[-3].ival); + n->sequence = (yyvsp[-1].range); + n->options = (yyvsp[0].list); + n->ownerId = InvalidOid; + n->if_not_exists = false; + (yyval.node) = (Node *)n; + } +#line 31979 "gram.c" + break; + + case 595: /* CreateSeqStmt: CREATE OptTemp SEQUENCE IF_P NOT EXISTS qualified_name OptSeqOptList */ +#line 4347 "gram.y" + { + CreateSeqStmt *n = makeNode(CreateSeqStmt); + (yyvsp[-1].range)->relpersistence = (yyvsp[-6].ival); + n->sequence = (yyvsp[-1].range); + n->options = (yyvsp[0].list); + n->ownerId = InvalidOid; + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 31993 "gram.c" + break; + + case 596: /* AlterSeqStmt: ALTER SEQUENCE qualified_name SeqOptList */ +#line 4360 "gram.y" + { + AlterSeqStmt *n = makeNode(AlterSeqStmt); + n->sequence = (yyvsp[-1].range); + n->options = (yyvsp[0].list); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 32005 "gram.c" + break; + + case 597: /* AlterSeqStmt: ALTER SEQUENCE IF_P EXISTS qualified_name SeqOptList */ +#line 4368 "gram.y" + { + AlterSeqStmt *n = makeNode(AlterSeqStmt); + n->sequence = (yyvsp[-1].range); + n->options = (yyvsp[0].list); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 32017 "gram.c" + break; + + case 598: /* OptSeqOptList: SeqOptList */ +#line 4378 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 32023 "gram.c" + break; + + case 599: /* OptSeqOptList: %empty */ +#line 4379 "gram.y" + { (yyval.list) = NIL; } +#line 32029 "gram.c" + break; + + case 600: /* OptParenthesizedSeqOptList: '(' SeqOptList ')' */ +#line 4382 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 32035 "gram.c" + break; + + case 601: /* OptParenthesizedSeqOptList: %empty */ +#line 4383 "gram.y" + { (yyval.list) = NIL; } +#line 32041 "gram.c" + break; + + case 602: /* SeqOptList: SeqOptElem */ +#line 4386 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 32047 "gram.c" + break; + + case 603: /* SeqOptList: SeqOptList SeqOptElem */ +#line 4387 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 32053 "gram.c" + break; + + case 604: /* SeqOptElem: AS SimpleTypename */ +#line 4391 "gram.y" + { + (yyval.defelt) = makeDefElem("as", (Node *)(yyvsp[0].typnam), (yylsp[-1])); + } +#line 32061 "gram.c" + break; + + case 605: /* SeqOptElem: CACHE NumericOnly */ +#line 4395 "gram.y" + { + (yyval.defelt) = makeDefElem("cache", (Node *)(yyvsp[0].value), (yylsp[-1])); + } +#line 32069 "gram.c" + break; + + case 606: /* SeqOptElem: CYCLE */ +#line 4399 "gram.y" + { + (yyval.defelt) = makeDefElem("cycle", (Node *)makeInteger(true), (yylsp[0])); + } +#line 32077 "gram.c" + break; + + case 607: /* SeqOptElem: NO CYCLE */ +#line 4403 "gram.y" + { + (yyval.defelt) = makeDefElem("cycle", (Node *)makeInteger(false), (yylsp[-1])); + } +#line 32085 "gram.c" + break; + + case 608: /* SeqOptElem: INCREMENT opt_by NumericOnly */ +#line 4407 "gram.y" + { + (yyval.defelt) = makeDefElem("increment", (Node *)(yyvsp[0].value), (yylsp[-2])); + } +#line 32093 "gram.c" + break; + + case 609: /* SeqOptElem: MAXVALUE NumericOnly */ +#line 4411 "gram.y" + { + (yyval.defelt) = makeDefElem("maxvalue", (Node *)(yyvsp[0].value), (yylsp[-1])); + } +#line 32101 "gram.c" + break; + + case 610: /* SeqOptElem: MINVALUE NumericOnly */ +#line 4415 "gram.y" + { + (yyval.defelt) = makeDefElem("minvalue", (Node *)(yyvsp[0].value), (yylsp[-1])); + } +#line 32109 "gram.c" + break; + + case 611: /* SeqOptElem: NO MAXVALUE */ +#line 4419 "gram.y" + { + (yyval.defelt) = makeDefElem("maxvalue", NULL, (yylsp[-1])); + } +#line 32117 "gram.c" + break; + + case 612: /* SeqOptElem: NO MINVALUE */ +#line 4423 "gram.y" + { + (yyval.defelt) = makeDefElem("minvalue", NULL, (yylsp[-1])); + } +#line 32125 "gram.c" + break; + + case 613: /* SeqOptElem: OWNED BY any_name */ +#line 4427 "gram.y" + { + (yyval.defelt) = makeDefElem("owned_by", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 32133 "gram.c" + break; + + case 614: /* SeqOptElem: SEQUENCE NAME_P any_name */ +#line 4431 "gram.y" + { + /* not documented, only used by pg_dump */ + (yyval.defelt) = makeDefElem("sequence_name", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 32142 "gram.c" + break; + + case 615: /* SeqOptElem: START opt_with NumericOnly */ +#line 4436 "gram.y" + { + (yyval.defelt) = makeDefElem("start", (Node *)(yyvsp[0].value), (yylsp[-2])); + } +#line 32150 "gram.c" + break; + + case 616: /* SeqOptElem: RESTART */ +#line 4440 "gram.y" + { + (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[0])); + } +#line 32158 "gram.c" + break; + + case 617: /* SeqOptElem: RESTART opt_with NumericOnly */ +#line 4444 "gram.y" + { + (yyval.defelt) = makeDefElem("restart", (Node *)(yyvsp[0].value), (yylsp[-2])); + } +#line 32166 "gram.c" + break; + + case 620: /* NumericOnly: FCONST */ +#line 4454 "gram.y" + { (yyval.value) = makeFloat((yyvsp[0].str)); } +#line 32172 "gram.c" + break; + + case 621: /* NumericOnly: '+' FCONST */ +#line 4455 "gram.y" + { (yyval.value) = makeFloat((yyvsp[0].str)); } +#line 32178 "gram.c" + break; + + case 622: /* NumericOnly: '-' FCONST */ +#line 4457 "gram.y" + { + (yyval.value) = makeFloat((yyvsp[0].str)); + doNegateFloat((yyval.value)); + } +#line 32187 "gram.c" + break; + + case 623: /* NumericOnly: SignedIconst */ +#line 4461 "gram.y" + { (yyval.value) = makeInteger((yyvsp[0].ival)); } +#line 32193 "gram.c" + break; + + case 624: /* NumericOnly_list: NumericOnly */ +#line 4464 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].value)); } +#line 32199 "gram.c" + break; + + case 625: /* NumericOnly_list: NumericOnly_list ',' NumericOnly */ +#line 4465 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].value)); } +#line 32205 "gram.c" + break; + + case 626: /* CreatePLangStmt: CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name */ +#line 4478 "gram.y" + { + /* + * We now interpret parameterless CREATE LANGUAGE as + * CREATE EXTENSION. "OR REPLACE" is silently translated + * to "IF NOT EXISTS", which isn't quite the same, but + * seems more useful than throwing an error. We just + * ignore TRUSTED, as the previous code would have too. + */ + CreateExtensionStmt *n = makeNode(CreateExtensionStmt); + n->if_not_exists = (yyvsp[-4].boolean); + n->extname = (yyvsp[0].str); + n->options = NIL; + (yyval.node) = (Node *)n; + } +#line 32224 "gram.c" + break; + + case 627: /* CreatePLangStmt: CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name HANDLER handler_name opt_inline_handler opt_validator */ +#line 4494 "gram.y" + { + CreatePLangStmt *n = makeNode(CreatePLangStmt); + n->replace = (yyvsp[-8].boolean); + n->plname = (yyvsp[-4].str); + n->plhandler = (yyvsp[-2].list); + n->plinline = (yyvsp[-1].list); + n->plvalidator = (yyvsp[0].list); + n->pltrusted = (yyvsp[-7].boolean); + (yyval.node) = (Node *)n; + } +#line 32239 "gram.c" + break; + + case 628: /* opt_trusted: TRUSTED */ +#line 4507 "gram.y" + { (yyval.boolean) = true; } +#line 32245 "gram.c" + break; + + case 629: /* opt_trusted: %empty */ +#line 4508 "gram.y" + { (yyval.boolean) = false; } +#line 32251 "gram.c" + break; + + case 630: /* handler_name: name */ +#line 4516 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 32257 "gram.c" + break; + + case 631: /* handler_name: name attrs */ +#line 4517 "gram.y" + { (yyval.list) = lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)); } +#line 32263 "gram.c" + break; + + case 632: /* opt_inline_handler: INLINE_P handler_name */ +#line 4521 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 32269 "gram.c" + break; + + case 633: /* opt_inline_handler: %empty */ +#line 4522 "gram.y" + { (yyval.list) = NIL; } +#line 32275 "gram.c" + break; + + case 634: /* validator_clause: VALIDATOR handler_name */ +#line 4526 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 32281 "gram.c" + break; + + case 635: /* validator_clause: NO VALIDATOR */ +#line 4527 "gram.y" + { (yyval.list) = NIL; } +#line 32287 "gram.c" + break; + + case 636: /* opt_validator: validator_clause */ +#line 4531 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 32293 "gram.c" + break; + + case 637: /* opt_validator: %empty */ +#line 4532 "gram.y" + { (yyval.list) = NIL; } +#line 32299 "gram.c" + break; + + case 640: /* CreateTableSpaceStmt: CREATE TABLESPACE name OptTableSpaceOwner LOCATION Sconst opt_reloptions */ +#line 4548 "gram.y" + { + CreateTableSpaceStmt *n = makeNode(CreateTableSpaceStmt); + n->tablespacename = (yyvsp[-4].str); + n->owner = (yyvsp[-3].rolespec); + n->location = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32312 "gram.c" + break; + + case 641: /* OptTableSpaceOwner: OWNER RoleSpec */ +#line 4558 "gram.y" + { (yyval.rolespec) = (yyvsp[0].rolespec); } +#line 32318 "gram.c" + break; + + case 642: /* OptTableSpaceOwner: %empty */ +#line 4559 "gram.y" + { (yyval.rolespec) = NULL; } +#line 32324 "gram.c" + break; + + case 643: /* DropTableSpaceStmt: DROP TABLESPACE name */ +#line 4573 "gram.y" + { + DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); + n->tablespacename = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *) n; + } +#line 32335 "gram.c" + break; + + case 644: /* DropTableSpaceStmt: DROP TABLESPACE IF_P EXISTS name */ +#line 4580 "gram.y" + { + DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); + n->tablespacename = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *) n; + } +#line 32346 "gram.c" + break; + + case 645: /* CreateExtensionStmt: CREATE EXTENSION name opt_with create_extension_opt_list */ +#line 4597 "gram.y" + { + CreateExtensionStmt *n = makeNode(CreateExtensionStmt); + n->extname = (yyvsp[-2].str); + n->if_not_exists = false; + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32358 "gram.c" + break; + + case 646: /* CreateExtensionStmt: CREATE EXTENSION IF_P NOT EXISTS name opt_with create_extension_opt_list */ +#line 4605 "gram.y" + { + CreateExtensionStmt *n = makeNode(CreateExtensionStmt); + n->extname = (yyvsp[-2].str); + n->if_not_exists = true; + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32370 "gram.c" + break; + + case 647: /* create_extension_opt_list: create_extension_opt_list create_extension_opt_item */ +#line 4616 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 32376 "gram.c" + break; + + case 648: /* create_extension_opt_list: %empty */ +#line 4618 "gram.y" + { (yyval.list) = NIL; } +#line 32382 "gram.c" + break; + + case 649: /* create_extension_opt_item: SCHEMA name */ +#line 4623 "gram.y" + { + (yyval.defelt) = makeDefElem("schema", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 32390 "gram.c" + break; + + case 650: /* create_extension_opt_item: VERSION_P NonReservedWord_or_Sconst */ +#line 4627 "gram.y" + { + (yyval.defelt) = makeDefElem("new_version", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 32398 "gram.c" + break; + + case 651: /* create_extension_opt_item: FROM NonReservedWord_or_Sconst */ +#line 4631 "gram.y" + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE EXTENSION ... FROM is no longer supported"), + parser_errposition((yylsp[-1])))); + } +#line 32409 "gram.c" + break; + + case 652: /* create_extension_opt_item: CASCADE */ +#line 4638 "gram.y" + { + (yyval.defelt) = makeDefElem("cascade", (Node *)makeInteger(true), (yylsp[0])); + } +#line 32417 "gram.c" + break; + + case 653: /* AlterExtensionStmt: ALTER EXTENSION name UPDATE alter_extension_opt_list */ +#line 4650 "gram.y" + { + AlterExtensionStmt *n = makeNode(AlterExtensionStmt); + n->extname = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32428 "gram.c" + break; + + case 654: /* alter_extension_opt_list: alter_extension_opt_list alter_extension_opt_item */ +#line 4660 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 32434 "gram.c" + break; + + case 655: /* alter_extension_opt_list: %empty */ +#line 4662 "gram.y" + { (yyval.list) = NIL; } +#line 32440 "gram.c" + break; + + case 656: /* alter_extension_opt_item: TO NonReservedWord_or_Sconst */ +#line 4667 "gram.y" + { + (yyval.defelt) = makeDefElem("new_version", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 32448 "gram.c" + break; + + case 657: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop object_type_name name */ +#line 4680 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = (yyvsp[-1].objtype); + n->object = (Node *) makeString((yyvsp[0].str)); + (yyval.node) = (Node *)n; + } +#line 32461 "gram.c" + break; + + case 658: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop object_type_any_name any_name */ +#line 4689 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = (yyvsp[-1].objtype); + n->object = (Node *) (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 32474 "gram.c" + break; + + case 659: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes */ +#line 4698 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = OBJECT_AGGREGATE; + n->object = (Node *) (yyvsp[0].objwithargs); + (yyval.node) = (Node *)n; + } +#line 32487 "gram.c" + break; + + case 660: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')' */ +#line 4707 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-7].str); + n->action = (yyvsp[-6].ival); + n->objtype = OBJECT_CAST; + n->object = (Node *) list_make2((yyvsp[-3].typnam), (yyvsp[-1].typnam)); + (yyval.node) = (Node *) n; + } +#line 32500 "gram.c" + break; + + case 661: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop DOMAIN_P Typename */ +#line 4716 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = OBJECT_DOMAIN; + n->object = (Node *) (yyvsp[0].typnam); + (yyval.node) = (Node *)n; + } +#line 32513 "gram.c" + break; + + case 662: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop FUNCTION function_with_argtypes */ +#line 4725 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = OBJECT_FUNCTION; + n->object = (Node *) (yyvsp[0].objwithargs); + (yyval.node) = (Node *)n; + } +#line 32526 "gram.c" + break; + + case 663: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes */ +#line 4734 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = OBJECT_OPERATOR; + n->object = (Node *) (yyvsp[0].objwithargs); + (yyval.node) = (Node *)n; + } +#line 32539 "gram.c" + break; + + case 664: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING name */ +#line 4743 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-6].str); + n->action = (yyvsp[-5].ival); + n->objtype = OBJECT_OPCLASS; + n->object = (Node *) lcons(makeString((yyvsp[0].str)), (yyvsp[-2].list)); + (yyval.node) = (Node *)n; + } +#line 32552 "gram.c" + break; + + case 665: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING name */ +#line 4752 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-6].str); + n->action = (yyvsp[-5].ival); + n->objtype = OBJECT_OPFAMILY; + n->object = (Node *) lcons(makeString((yyvsp[0].str)), (yyvsp[-2].list)); + (yyval.node) = (Node *)n; + } +#line 32565 "gram.c" + break; + + case 666: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop PROCEDURE function_with_argtypes */ +#line 4761 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = OBJECT_PROCEDURE; + n->object = (Node *) (yyvsp[0].objwithargs); + (yyval.node) = (Node *)n; + } +#line 32578 "gram.c" + break; + + case 667: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop ROUTINE function_with_argtypes */ +#line 4770 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = OBJECT_ROUTINE; + n->object = (Node *) (yyvsp[0].objwithargs); + (yyval.node) = (Node *)n; + } +#line 32591 "gram.c" + break; + + case 668: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name */ +#line 4779 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-6].str); + n->action = (yyvsp[-5].ival); + n->objtype = OBJECT_TRANSFORM; + n->object = (Node *) list_make2((yyvsp[-2].typnam), makeString((yyvsp[0].str))); + (yyval.node) = (Node *)n; + } +#line 32604 "gram.c" + break; + + case 669: /* AlterExtensionContentsStmt: ALTER EXTENSION name add_drop TYPE_P Typename */ +#line 4788 "gram.y" + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = (yyvsp[-3].str); + n->action = (yyvsp[-2].ival); + n->objtype = OBJECT_TYPE; + n->object = (Node *) (yyvsp[0].typnam); + (yyval.node) = (Node *)n; + } +#line 32617 "gram.c" + break; + + case 670: /* CreateFdwStmt: CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options create_generic_options */ +#line 4806 "gram.y" + { + CreateFdwStmt *n = makeNode(CreateFdwStmt); + n->fdwname = (yyvsp[-2].str); + n->func_options = (yyvsp[-1].list); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32629 "gram.c" + break; + + case 671: /* fdw_option: HANDLER handler_name */ +#line 4816 "gram.y" + { (yyval.defelt) = makeDefElem("handler", (Node *)(yyvsp[0].list), (yylsp[-1])); } +#line 32635 "gram.c" + break; + + case 672: /* fdw_option: NO HANDLER */ +#line 4817 "gram.y" + { (yyval.defelt) = makeDefElem("handler", NULL, (yylsp[-1])); } +#line 32641 "gram.c" + break; + + case 673: /* fdw_option: VALIDATOR handler_name */ +#line 4818 "gram.y" + { (yyval.defelt) = makeDefElem("validator", (Node *)(yyvsp[0].list), (yylsp[-1])); } +#line 32647 "gram.c" + break; + + case 674: /* fdw_option: NO VALIDATOR */ +#line 4819 "gram.y" + { (yyval.defelt) = makeDefElem("validator", NULL, (yylsp[-1])); } +#line 32653 "gram.c" + break; + + case 675: /* fdw_options: fdw_option */ +#line 4823 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 32659 "gram.c" + break; + + case 676: /* fdw_options: fdw_options fdw_option */ +#line 4824 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 32665 "gram.c" + break; + + case 677: /* opt_fdw_options: fdw_options */ +#line 4828 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 32671 "gram.c" + break; + + case 678: /* opt_fdw_options: %empty */ +#line 4829 "gram.y" + { (yyval.list) = NIL; } +#line 32677 "gram.c" + break; + + case 679: /* AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options alter_generic_options */ +#line 4840 "gram.y" + { + AlterFdwStmt *n = makeNode(AlterFdwStmt); + n->fdwname = (yyvsp[-2].str); + n->func_options = (yyvsp[-1].list); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32689 "gram.c" + break; + + case 680: /* AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name fdw_options */ +#line 4848 "gram.y" + { + AlterFdwStmt *n = makeNode(AlterFdwStmt); + n->fdwname = (yyvsp[-1].str); + n->func_options = (yyvsp[0].list); + n->options = NIL; + (yyval.node) = (Node *) n; + } +#line 32701 "gram.c" + break; + + case 681: /* create_generic_options: OPTIONS '(' generic_option_list ')' */ +#line 4859 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 32707 "gram.c" + break; + + case 682: /* create_generic_options: %empty */ +#line 4860 "gram.y" + { (yyval.list) = NIL; } +#line 32713 "gram.c" + break; + + case 683: /* generic_option_list: generic_option_elem */ +#line 4865 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].defelt)); + } +#line 32721 "gram.c" + break; + + case 684: /* generic_option_list: generic_option_list ',' generic_option_elem */ +#line 4869 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); + } +#line 32729 "gram.c" + break; + + case 685: /* alter_generic_options: OPTIONS '(' alter_generic_option_list ')' */ +#line 4876 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 32735 "gram.c" + break; + + case 686: /* alter_generic_option_list: alter_generic_option_elem */ +#line 4881 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].defelt)); + } +#line 32743 "gram.c" + break; + + case 687: /* alter_generic_option_list: alter_generic_option_list ',' alter_generic_option_elem */ +#line 4885 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); + } +#line 32751 "gram.c" + break; + + case 688: /* alter_generic_option_elem: generic_option_elem */ +#line 4892 "gram.y" + { + (yyval.defelt) = (yyvsp[0].defelt); + } +#line 32759 "gram.c" + break; + + case 689: /* alter_generic_option_elem: SET generic_option_elem */ +#line 4896 "gram.y" + { + (yyval.defelt) = (yyvsp[0].defelt); + (yyval.defelt)->defaction = DEFELEM_SET; + } +#line 32768 "gram.c" + break; + + case 690: /* alter_generic_option_elem: ADD_P generic_option_elem */ +#line 4901 "gram.y" + { + (yyval.defelt) = (yyvsp[0].defelt); + (yyval.defelt)->defaction = DEFELEM_ADD; + } +#line 32777 "gram.c" + break; + + case 691: /* alter_generic_option_elem: DROP generic_option_name */ +#line 4906 "gram.y" + { + (yyval.defelt) = makeDefElemExtended(NULL, (yyvsp[0].str), NULL, DEFELEM_DROP, (yylsp[0])); + } +#line 32785 "gram.c" + break; + + case 692: /* generic_option_elem: generic_option_name generic_option_arg */ +#line 4913 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-1].str), (yyvsp[0].node), (yylsp[-1])); + } +#line 32793 "gram.c" + break; + + case 693: /* generic_option_name: ColLabel */ +#line 4919 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 32799 "gram.c" + break; + + case 694: /* generic_option_arg: Sconst */ +#line 4924 "gram.y" + { (yyval.node) = (Node *) makeString((yyvsp[0].str)); } +#line 32805 "gram.c" + break; + + case 695: /* CreateForeignServerStmt: CREATE SERVER name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options */ +#line 4936 "gram.y" + { + CreateForeignServerStmt *n = makeNode(CreateForeignServerStmt); + n->servername = (yyvsp[-7].str); + n->servertype = (yyvsp[-6].str); + n->version = (yyvsp[-5].str); + n->fdwname = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + n->if_not_exists = false; + (yyval.node) = (Node *) n; + } +#line 32820 "gram.c" + break; + + case 696: /* CreateForeignServerStmt: CREATE SERVER IF_P NOT EXISTS name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options */ +#line 4948 "gram.y" + { + CreateForeignServerStmt *n = makeNode(CreateForeignServerStmt); + n->servername = (yyvsp[-7].str); + n->servertype = (yyvsp[-6].str); + n->version = (yyvsp[-5].str); + n->fdwname = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + n->if_not_exists = true; + (yyval.node) = (Node *) n; + } +#line 32835 "gram.c" + break; + + case 697: /* opt_type: TYPE_P Sconst */ +#line 4961 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 32841 "gram.c" + break; + + case 698: /* opt_type: %empty */ +#line 4962 "gram.y" + { (yyval.str) = NULL; } +#line 32847 "gram.c" + break; + + case 699: /* foreign_server_version: VERSION_P Sconst */ +#line 4967 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 32853 "gram.c" + break; + + case 700: /* foreign_server_version: VERSION_P NULL_P */ +#line 4968 "gram.y" + { (yyval.str) = NULL; } +#line 32859 "gram.c" + break; + + case 701: /* opt_foreign_server_version: foreign_server_version */ +#line 4972 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 32865 "gram.c" + break; + + case 702: /* opt_foreign_server_version: %empty */ +#line 4973 "gram.y" + { (yyval.str) = NULL; } +#line 32871 "gram.c" + break; + + case 703: /* AlterForeignServerStmt: ALTER SERVER name foreign_server_version alter_generic_options */ +#line 4984 "gram.y" + { + AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); + n->servername = (yyvsp[-2].str); + n->version = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + n->has_version = true; + (yyval.node) = (Node *) n; + } +#line 32884 "gram.c" + break; + + case 704: /* AlterForeignServerStmt: ALTER SERVER name foreign_server_version */ +#line 4993 "gram.y" + { + AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); + n->servername = (yyvsp[-1].str); + n->version = (yyvsp[0].str); + n->has_version = true; + (yyval.node) = (Node *) n; + } +#line 32896 "gram.c" + break; + + case 705: /* AlterForeignServerStmt: ALTER SERVER name alter_generic_options */ +#line 5001 "gram.y" + { + AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32907 "gram.c" + break; + + case 706: /* CreateForeignTableStmt: CREATE FOREIGN TABLE qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options */ +#line 5020 "gram.y" + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + (yyvsp[-7].range)->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = (yyvsp[-7].range); + n->base.tableElts = (yyvsp[-5].list); + n->base.inhRelations = (yyvsp[-3].list); + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = false; + /* FDW-specific data */ + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32929 "gram.c" + break; + + case 707: /* CreateForeignTableStmt: CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptInherit SERVER name create_generic_options */ +#line 5040 "gram.y" + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + (yyvsp[-7].range)->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = (yyvsp[-7].range); + n->base.tableElts = (yyvsp[-5].list); + n->base.inhRelations = (yyvsp[-3].list); + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = true; + /* FDW-specific data */ + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32951 "gram.c" + break; + + case 708: /* CreateForeignTableStmt: CREATE FOREIGN TABLE qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options */ +#line 5060 "gram.y" + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + (yyvsp[-8].range)->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = (yyvsp[-8].range); + n->base.inhRelations = list_make1((yyvsp[-5].range)); + n->base.tableElts = (yyvsp[-4].list); + n->base.partbound = (yyvsp[-3].partboundspec); + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = false; + /* FDW-specific data */ + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32974 "gram.c" + break; + + case 709: /* CreateForeignTableStmt: CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec SERVER name create_generic_options */ +#line 5081 "gram.y" + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + (yyvsp[-8].range)->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = (yyvsp[-8].range); + n->base.inhRelations = list_make1((yyvsp[-5].range)); + n->base.tableElts = (yyvsp[-4].list); + n->base.partbound = (yyvsp[-3].partboundspec); + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = true; + /* FDW-specific data */ + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 32997 "gram.c" + break; + + case 710: /* ImportForeignSchemaStmt: IMPORT_P FOREIGN SCHEMA name import_qualification FROM SERVER name INTO name create_generic_options */ +#line 5113 "gram.y" + { + ImportForeignSchemaStmt *n = makeNode(ImportForeignSchemaStmt); + n->server_name = (yyvsp[-3].str); + n->remote_schema = (yyvsp[-7].str); + n->local_schema = (yyvsp[-1].str); + n->list_type = (yyvsp[-6].importqual)->type; + n->table_list = (yyvsp[-6].importqual)->table_names; + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 33012 "gram.c" + break; + + case 711: /* import_qualification_type: LIMIT TO */ +#line 5126 "gram.y" + { (yyval.ival) = FDW_IMPORT_SCHEMA_LIMIT_TO; } +#line 33018 "gram.c" + break; + + case 712: /* import_qualification_type: EXCEPT */ +#line 5127 "gram.y" + { (yyval.ival) = FDW_IMPORT_SCHEMA_EXCEPT; } +#line 33024 "gram.c" + break; + + case 713: /* import_qualification: import_qualification_type '(' relation_expr_list ')' */ +#line 5132 "gram.y" + { + ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); + n->type = (yyvsp[-3].ival); + n->table_names = (yyvsp[-1].list); + (yyval.importqual) = n; + } +#line 33035 "gram.c" + break; + + case 714: /* import_qualification: %empty */ +#line 5139 "gram.y" + { + ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); + n->type = FDW_IMPORT_SCHEMA_ALL; + n->table_names = NIL; + (yyval.importqual) = n; + } +#line 33046 "gram.c" + break; + + case 715: /* CreateUserMappingStmt: CREATE USER MAPPING FOR auth_ident SERVER name create_generic_options */ +#line 5155 "gram.y" + { + CreateUserMappingStmt *n = makeNode(CreateUserMappingStmt); + n->user = (yyvsp[-3].rolespec); + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + n->if_not_exists = false; + (yyval.node) = (Node *) n; + } +#line 33059 "gram.c" + break; + + case 716: /* CreateUserMappingStmt: CREATE USER MAPPING IF_P NOT EXISTS FOR auth_ident SERVER name create_generic_options */ +#line 5164 "gram.y" + { + CreateUserMappingStmt *n = makeNode(CreateUserMappingStmt); + n->user = (yyvsp[-3].rolespec); + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + n->if_not_exists = true; + (yyval.node) = (Node *) n; + } +#line 33072 "gram.c" + break; + + case 717: /* auth_ident: RoleSpec */ +#line 5175 "gram.y" + { (yyval.rolespec) = (yyvsp[0].rolespec); } +#line 33078 "gram.c" + break; + + case 718: /* auth_ident: USER */ +#line 5176 "gram.y" + { (yyval.rolespec) = makeRoleSpec(ROLESPEC_CURRENT_USER, (yylsp[0])); } +#line 33084 "gram.c" + break; + + case 719: /* DropUserMappingStmt: DROP USER MAPPING FOR auth_ident SERVER name */ +#line 5189 "gram.y" + { + DropUserMappingStmt *n = makeNode(DropUserMappingStmt); + n->user = (yyvsp[-2].rolespec); + n->servername = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *) n; + } +#line 33096 "gram.c" + break; + + case 720: /* DropUserMappingStmt: DROP USER MAPPING IF_P EXISTS FOR auth_ident SERVER name */ +#line 5197 "gram.y" + { + DropUserMappingStmt *n = makeNode(DropUserMappingStmt); + n->user = (yyvsp[-2].rolespec); + n->servername = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *) n; + } +#line 33108 "gram.c" + break; + + case 721: /* AlterUserMappingStmt: ALTER USER MAPPING FOR auth_ident SERVER name alter_generic_options */ +#line 5214 "gram.y" + { + AlterUserMappingStmt *n = makeNode(AlterUserMappingStmt); + n->user = (yyvsp[-3].rolespec); + n->servername = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 33120 "gram.c" + break; + + case 722: /* CreatePolicyStmt: CREATE POLICY name ON qualified_name RowSecurityDefaultPermissive RowSecurityDefaultForCmd RowSecurityDefaultToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck */ +#line 5240 "gram.y" + { + CreatePolicyStmt *n = makeNode(CreatePolicyStmt); + n->policy_name = (yyvsp[-7].str); + n->table = (yyvsp[-5].range); + n->permissive = (yyvsp[-4].boolean); + n->cmd_name = (yyvsp[-3].str); + n->roles = (yyvsp[-2].list); + n->qual = (yyvsp[-1].node); + n->with_check = (yyvsp[0].node); + (yyval.node) = (Node *) n; + } +#line 33136 "gram.c" + break; + + case 723: /* AlterPolicyStmt: ALTER POLICY name ON qualified_name RowSecurityOptionalToRole RowSecurityOptionalExpr RowSecurityOptionalWithCheck */ +#line 5256 "gram.y" + { + AlterPolicyStmt *n = makeNode(AlterPolicyStmt); + n->policy_name = (yyvsp[-5].str); + n->table = (yyvsp[-3].range); + n->roles = (yyvsp[-2].list); + n->qual = (yyvsp[-1].node); + n->with_check = (yyvsp[0].node); + (yyval.node) = (Node *) n; + } +#line 33150 "gram.c" + break; + + case 724: /* RowSecurityOptionalExpr: USING '(' a_expr ')' */ +#line 5268 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 33156 "gram.c" + break; + + case 725: /* RowSecurityOptionalExpr: %empty */ +#line 5269 "gram.y" + { (yyval.node) = NULL; } +#line 33162 "gram.c" + break; + + case 726: /* RowSecurityOptionalWithCheck: WITH CHECK '(' a_expr ')' */ +#line 5273 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 33168 "gram.c" + break; + + case 727: /* RowSecurityOptionalWithCheck: %empty */ +#line 5274 "gram.y" + { (yyval.node) = NULL; } +#line 33174 "gram.c" + break; + + case 728: /* RowSecurityDefaultToRole: TO role_list */ +#line 5278 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 33180 "gram.c" + break; + + case 729: /* RowSecurityDefaultToRole: %empty */ +#line 5279 "gram.y" + { (yyval.list) = list_make1(makeRoleSpec(ROLESPEC_PUBLIC, -1)); } +#line 33186 "gram.c" + break; + + case 730: /* RowSecurityOptionalToRole: TO role_list */ +#line 5283 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 33192 "gram.c" + break; + + case 731: /* RowSecurityOptionalToRole: %empty */ +#line 5284 "gram.y" + { (yyval.list) = NULL; } +#line 33198 "gram.c" + break; + + case 732: /* RowSecurityDefaultPermissive: AS IDENT */ +#line 5289 "gram.y" + { + if (strcmp((yyvsp[0].str), "permissive") == 0) + (yyval.boolean) = true; + else if (strcmp((yyvsp[0].str), "restrictive") == 0) + (yyval.boolean) = false; + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized row security option \"%s\"", (yyvsp[0].str)), + errhint("Only PERMISSIVE or RESTRICTIVE policies are supported currently."), + parser_errposition((yylsp[0])))); + + } +#line 33216 "gram.c" + break; + + case 733: /* RowSecurityDefaultPermissive: %empty */ +#line 5302 "gram.y" + { (yyval.boolean) = true; } +#line 33222 "gram.c" + break; + + case 734: /* RowSecurityDefaultForCmd: FOR row_security_cmd */ +#line 5306 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 33228 "gram.c" + break; + + case 735: /* RowSecurityDefaultForCmd: %empty */ +#line 5307 "gram.y" + { (yyval.str) = "all"; } +#line 33234 "gram.c" + break; + + case 736: /* row_security_cmd: ALL */ +#line 5311 "gram.y" + { (yyval.str) = "all"; } +#line 33240 "gram.c" + break; + + case 737: /* row_security_cmd: SELECT */ +#line 5312 "gram.y" + { (yyval.str) = "select"; } +#line 33246 "gram.c" + break; + + case 738: /* row_security_cmd: INSERT */ +#line 5313 "gram.y" + { (yyval.str) = "insert"; } +#line 33252 "gram.c" + break; + + case 739: /* row_security_cmd: UPDATE */ +#line 5314 "gram.y" + { (yyval.str) = "update"; } +#line 33258 "gram.c" + break; + + case 740: /* row_security_cmd: DELETE_P */ +#line 5315 "gram.y" + { (yyval.str) = "delete"; } +#line 33264 "gram.c" + break; + + case 741: /* CreateAmStmt: CREATE ACCESS METHOD name TYPE_P am_type HANDLER handler_name */ +#line 5326 "gram.y" + { + CreateAmStmt *n = makeNode(CreateAmStmt); + n->amname = (yyvsp[-4].str); + n->handler_name = (yyvsp[0].list); + n->amtype = (yyvsp[-2].chr); + (yyval.node) = (Node *) n; + } +#line 33276 "gram.c" + break; + + case 742: /* am_type: INDEX */ +#line 5336 "gram.y" + { (yyval.chr) = AMTYPE_INDEX; } +#line 33282 "gram.c" + break; + + case 743: /* am_type: TABLE */ +#line 5337 "gram.y" + { (yyval.chr) = AMTYPE_TABLE; } +#line 33288 "gram.c" + break; + + case 744: /* CreateTrigStmt: CREATE opt_or_replace TRIGGER name TriggerActionTime TriggerEvents ON qualified_name TriggerReferencing TriggerForSpec TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' */ +#line 5351 "gram.y" + { + CreateTrigStmt *n = makeNode(CreateTrigStmt); + n->replace = (yyvsp[-15].boolean); + n->isconstraint = false; + n->trigname = (yyvsp[-13].str); + n->relation = (yyvsp[-9].range); + n->funcname = (yyvsp[-3].list); + n->args = (yyvsp[-1].list); + n->row = (yyvsp[-7].boolean); + n->timing = (yyvsp[-12].ival); + n->events = intVal(linitial((yyvsp[-11].list))); + n->columns = (List *) lsecond((yyvsp[-11].list)); + n->whenClause = (yyvsp[-6].node); + n->transitionRels = (yyvsp[-8].list); + n->deferrable = false; + n->initdeferred = false; + n->constrrel = NULL; + (yyval.node) = (Node *)n; + } +#line 33312 "gram.c" + break; + + case 745: /* CreateTrigStmt: CREATE opt_or_replace CONSTRAINT TRIGGER name AFTER TriggerEvents ON qualified_name OptConstrFromTable ConstraintAttributeSpec FOR EACH ROW TriggerWhen EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' */ +#line 5374 "gram.y" + { + CreateTrigStmt *n = makeNode(CreateTrigStmt); + n->replace = (yyvsp[-19].boolean); + if (n->replace) /* not supported, see CreateTrigger */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE OR REPLACE CONSTRAINT TRIGGER is not supported"))); + n->isconstraint = true; + n->trigname = (yyvsp[-16].str); + n->relation = (yyvsp[-12].range); + n->funcname = (yyvsp[-3].list); + n->args = (yyvsp[-1].list); + n->row = true; + n->timing = TRIGGER_TYPE_AFTER; + n->events = intVal(linitial((yyvsp[-14].list))); + n->columns = (List *) lsecond((yyvsp[-14].list)); + n->whenClause = (yyvsp[-6].node); + n->transitionRels = NIL; + processCASbits((yyvsp[-10].ival), (yylsp[-10]), "TRIGGER", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + n->constrrel = (yyvsp[-11].range); + (yyval.node) = (Node *)n; + } +#line 33341 "gram.c" + break; + + case 746: /* TriggerActionTime: BEFORE */ +#line 5401 "gram.y" + { (yyval.ival) = TRIGGER_TYPE_BEFORE; } +#line 33347 "gram.c" + break; + + case 747: /* TriggerActionTime: AFTER */ +#line 5402 "gram.y" + { (yyval.ival) = TRIGGER_TYPE_AFTER; } +#line 33353 "gram.c" + break; + + case 748: /* TriggerActionTime: INSTEAD OF */ +#line 5403 "gram.y" + { (yyval.ival) = TRIGGER_TYPE_INSTEAD; } +#line 33359 "gram.c" + break; + + case 749: /* TriggerEvents: TriggerOneEvent */ +#line 5408 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 33365 "gram.c" + break; + + case 750: /* TriggerEvents: TriggerEvents OR TriggerOneEvent */ +#line 5410 "gram.y" + { + int events1 = intVal(linitial((yyvsp[-2].list))); + int events2 = intVal(linitial((yyvsp[0].list))); + List *columns1 = (List *) lsecond((yyvsp[-2].list)); + List *columns2 = (List *) lsecond((yyvsp[0].list)); + + if (events1 & events2) + parser_yyerror("duplicate trigger events specified"); + /* + * concat'ing the columns lists loses information about + * which columns went with which event, but so long as + * only UPDATE carries columns and we disallow multiple + * UPDATE items, it doesn't matter. Command execution + * should just ignore the columns for non-UPDATE events. + */ + (yyval.list) = list_make2(makeInteger(events1 | events2), + list_concat(columns1, columns2)); + } +#line 33388 "gram.c" + break; + + case 751: /* TriggerOneEvent: INSERT */ +#line 5432 "gram.y" + { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_INSERT), NIL); } +#line 33394 "gram.c" + break; + + case 752: /* TriggerOneEvent: DELETE_P */ +#line 5434 "gram.y" + { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_DELETE), NIL); } +#line 33400 "gram.c" + break; + + case 753: /* TriggerOneEvent: UPDATE */ +#line 5436 "gram.y" + { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_UPDATE), NIL); } +#line 33406 "gram.c" + break; + + case 754: /* TriggerOneEvent: UPDATE OF columnList */ +#line 5438 "gram.y" + { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_UPDATE), (yyvsp[0].list)); } +#line 33412 "gram.c" + break; + + case 755: /* TriggerOneEvent: TRUNCATE */ +#line 5440 "gram.y" + { (yyval.list) = list_make2(makeInteger(TRIGGER_TYPE_TRUNCATE), NIL); } +#line 33418 "gram.c" + break; + + case 756: /* TriggerReferencing: REFERENCING TriggerTransitions */ +#line 5444 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 33424 "gram.c" + break; + + case 757: /* TriggerReferencing: %empty */ +#line 5445 "gram.y" + { (yyval.list) = NIL; } +#line 33430 "gram.c" + break; + + case 758: /* TriggerTransitions: TriggerTransition */ +#line 5449 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 33436 "gram.c" + break; + + case 759: /* TriggerTransitions: TriggerTransitions TriggerTransition */ +#line 5450 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } +#line 33442 "gram.c" + break; + + case 760: /* TriggerTransition: TransitionOldOrNew TransitionRowOrTable opt_as TransitionRelName */ +#line 5455 "gram.y" + { + TriggerTransition *n = makeNode(TriggerTransition); + n->name = (yyvsp[0].str); + n->isNew = (yyvsp[-3].boolean); + n->isTable = (yyvsp[-2].boolean); + (yyval.node) = (Node *)n; + } +#line 33454 "gram.c" + break; + + case 761: /* TransitionOldOrNew: NEW */ +#line 5465 "gram.y" + { (yyval.boolean) = true; } +#line 33460 "gram.c" + break; + + case 762: /* TransitionOldOrNew: OLD */ +#line 5466 "gram.y" + { (yyval.boolean) = false; } +#line 33466 "gram.c" + break; + + case 763: /* TransitionRowOrTable: TABLE */ +#line 5470 "gram.y" + { (yyval.boolean) = true; } +#line 33472 "gram.c" + break; + + case 764: /* TransitionRowOrTable: ROW */ +#line 5479 "gram.y" + { (yyval.boolean) = false; } +#line 33478 "gram.c" + break; + + case 765: /* TransitionRelName: ColId */ +#line 5483 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 33484 "gram.c" + break; + + case 766: /* TriggerForSpec: FOR TriggerForOptEach TriggerForType */ +#line 5488 "gram.y" + { + (yyval.boolean) = (yyvsp[0].boolean); + } +#line 33492 "gram.c" + break; + + case 767: /* TriggerForSpec: %empty */ +#line 5492 "gram.y" + { + /* + * If ROW/STATEMENT not specified, default to + * STATEMENT, per SQL + */ + (yyval.boolean) = false; + } +#line 33504 "gram.c" + break; + + case 770: /* TriggerForType: ROW */ +#line 5507 "gram.y" + { (yyval.boolean) = true; } +#line 33510 "gram.c" + break; + + case 771: /* TriggerForType: STATEMENT */ +#line 5508 "gram.y" + { (yyval.boolean) = false; } +#line 33516 "gram.c" + break; + + case 772: /* TriggerWhen: WHEN '(' a_expr ')' */ +#line 5512 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 33522 "gram.c" + break; + + case 773: /* TriggerWhen: %empty */ +#line 5513 "gram.y" + { (yyval.node) = NULL; } +#line 33528 "gram.c" + break; + + case 776: /* TriggerFuncArgs: TriggerFuncArg */ +#line 5522 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].value)); } +#line 33534 "gram.c" + break; + + case 777: /* TriggerFuncArgs: TriggerFuncArgs ',' TriggerFuncArg */ +#line 5523 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].value)); } +#line 33540 "gram.c" + break; + + case 778: /* TriggerFuncArgs: %empty */ +#line 5524 "gram.y" + { (yyval.list) = NIL; } +#line 33546 "gram.c" + break; + + case 779: /* TriggerFuncArg: Iconst */ +#line 5529 "gram.y" + { + (yyval.value) = makeString(psprintf("%d", (yyvsp[0].ival))); + } +#line 33554 "gram.c" + break; + + case 780: /* TriggerFuncArg: FCONST */ +#line 5532 "gram.y" + { (yyval.value) = makeString((yyvsp[0].str)); } +#line 33560 "gram.c" + break; + + case 781: /* TriggerFuncArg: Sconst */ +#line 5533 "gram.y" + { (yyval.value) = makeString((yyvsp[0].str)); } +#line 33566 "gram.c" + break; + + case 782: /* TriggerFuncArg: ColLabel */ +#line 5534 "gram.y" + { (yyval.value) = makeString((yyvsp[0].str)); } +#line 33572 "gram.c" + break; + + case 783: /* OptConstrFromTable: FROM qualified_name */ +#line 5538 "gram.y" + { (yyval.range) = (yyvsp[0].range); } +#line 33578 "gram.c" + break; + + case 784: /* OptConstrFromTable: %empty */ +#line 5539 "gram.y" + { (yyval.range) = NULL; } +#line 33584 "gram.c" + break; + + case 785: /* ConstraintAttributeSpec: %empty */ +#line 5544 "gram.y" + { (yyval.ival) = 0; } +#line 33590 "gram.c" + break; + + case 786: /* ConstraintAttributeSpec: ConstraintAttributeSpec ConstraintAttributeElem */ +#line 5546 "gram.y" + { + /* + * We must complain about conflicting options. + * We could, but choose not to, complain about redundant + * options (ie, where $2's bit is already set in $1). + */ + int newspec = (yyvsp[-1].ival) | (yyvsp[0].ival); + + /* special message for this case */ + if ((newspec & (CAS_NOT_DEFERRABLE | CAS_INITIALLY_DEFERRED)) == (CAS_NOT_DEFERRABLE | CAS_INITIALLY_DEFERRED)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("constraint declared INITIALLY DEFERRED must be DEFERRABLE"), + parser_errposition((yylsp[0])))); + /* generic message for other conflicts */ + if ((newspec & (CAS_NOT_DEFERRABLE | CAS_DEFERRABLE)) == (CAS_NOT_DEFERRABLE | CAS_DEFERRABLE) || + (newspec & (CAS_INITIALLY_IMMEDIATE | CAS_INITIALLY_DEFERRED)) == (CAS_INITIALLY_IMMEDIATE | CAS_INITIALLY_DEFERRED)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting constraint properties"), + parser_errposition((yylsp[0])))); + (yyval.ival) = newspec; + } +#line 33618 "gram.c" + break; + + case 787: /* ConstraintAttributeElem: NOT DEFERRABLE */ +#line 5572 "gram.y" + { (yyval.ival) = CAS_NOT_DEFERRABLE; } +#line 33624 "gram.c" + break; + + case 788: /* ConstraintAttributeElem: DEFERRABLE */ +#line 5573 "gram.y" + { (yyval.ival) = CAS_DEFERRABLE; } +#line 33630 "gram.c" + break; + + case 789: /* ConstraintAttributeElem: INITIALLY IMMEDIATE */ +#line 5574 "gram.y" + { (yyval.ival) = CAS_INITIALLY_IMMEDIATE; } +#line 33636 "gram.c" + break; + + case 790: /* ConstraintAttributeElem: INITIALLY DEFERRED */ +#line 5575 "gram.y" + { (yyval.ival) = CAS_INITIALLY_DEFERRED; } +#line 33642 "gram.c" + break; + + case 791: /* ConstraintAttributeElem: NOT VALID */ +#line 5576 "gram.y" + { (yyval.ival) = CAS_NOT_VALID; } +#line 33648 "gram.c" + break; + + case 792: /* ConstraintAttributeElem: NO INHERIT */ +#line 5577 "gram.y" + { (yyval.ival) = CAS_NO_INHERIT; } +#line 33654 "gram.c" + break; + + case 793: /* CreateEventTrigStmt: CREATE EVENT TRIGGER name ON ColLabel EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' */ +#line 5592 "gram.y" + { + CreateEventTrigStmt *n = makeNode(CreateEventTrigStmt); + n->trigname = (yyvsp[-7].str); + n->eventname = (yyvsp[-5].str); + n->whenclause = NULL; + n->funcname = (yyvsp[-2].list); + (yyval.node) = (Node *)n; + } +#line 33667 "gram.c" + break; + + case 794: /* CreateEventTrigStmt: CREATE EVENT TRIGGER name ON ColLabel WHEN event_trigger_when_list EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' */ +#line 5603 "gram.y" + { + CreateEventTrigStmt *n = makeNode(CreateEventTrigStmt); + n->trigname = (yyvsp[-9].str); + n->eventname = (yyvsp[-7].str); + n->whenclause = (yyvsp[-5].list); + n->funcname = (yyvsp[-2].list); + (yyval.node) = (Node *)n; + } +#line 33680 "gram.c" + break; + + case 795: /* event_trigger_when_list: event_trigger_when_item */ +#line 5615 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 33686 "gram.c" + break; + + case 796: /* event_trigger_when_list: event_trigger_when_list AND event_trigger_when_item */ +#line 5617 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } +#line 33692 "gram.c" + break; + + case 797: /* event_trigger_when_item: ColId IN_P '(' event_trigger_value_list ')' */ +#line 5622 "gram.y" + { (yyval.defelt) = makeDefElem((yyvsp[-4].str), (Node *) (yyvsp[-1].list), (yylsp[-4])); } +#line 33698 "gram.c" + break; + + case 798: /* event_trigger_value_list: SCONST */ +#line 5627 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 33704 "gram.c" + break; + + case 799: /* event_trigger_value_list: event_trigger_value_list ',' SCONST */ +#line 5629 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), makeString((yyvsp[0].str))); } +#line 33710 "gram.c" + break; + + case 800: /* AlterEventTrigStmt: ALTER EVENT TRIGGER name enable_trigger */ +#line 5634 "gram.y" + { + AlterEventTrigStmt *n = makeNode(AlterEventTrigStmt); + n->trigname = (yyvsp[-1].str); + n->tgenabled = (yyvsp[0].chr); + (yyval.node) = (Node *) n; + } +#line 33721 "gram.c" + break; + + case 801: /* enable_trigger: ENABLE_P */ +#line 5643 "gram.y" + { (yyval.chr) = TRIGGER_FIRES_ON_ORIGIN; } +#line 33727 "gram.c" + break; + + case 802: /* enable_trigger: ENABLE_P REPLICA */ +#line 5644 "gram.y" + { (yyval.chr) = TRIGGER_FIRES_ON_REPLICA; } +#line 33733 "gram.c" + break; + + case 803: /* enable_trigger: ENABLE_P ALWAYS */ +#line 5645 "gram.y" + { (yyval.chr) = TRIGGER_FIRES_ALWAYS; } +#line 33739 "gram.c" + break; + + case 804: /* enable_trigger: DISABLE_P */ +#line 5646 "gram.y" + { (yyval.chr) = TRIGGER_DISABLED; } +#line 33745 "gram.c" + break; + + case 805: /* CreateAssertionStmt: CREATE ASSERTION any_name CHECK '(' a_expr ')' ConstraintAttributeSpec */ +#line 5658 "gram.y" + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE ASSERTION is not yet implemented"))); + + (yyval.node) = NULL; + } +#line 33757 "gram.c" + break; + + case 806: /* DefineStmt: CREATE opt_or_replace AGGREGATE func_name aggr_args definition */ +#line 5677 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_AGGREGATE; + n->oldstyle = false; + n->replace = (yyvsp[-4].boolean); + n->defnames = (yyvsp[-2].list); + n->args = (yyvsp[-1].list); + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33772 "gram.c" + break; + + case 807: /* DefineStmt: CREATE opt_or_replace AGGREGATE func_name old_aggr_definition */ +#line 5688 "gram.y" + { + /* old-style (pre-8.2) syntax for CREATE AGGREGATE */ + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_AGGREGATE; + n->oldstyle = true; + n->replace = (yyvsp[-3].boolean); + n->defnames = (yyvsp[-1].list); + n->args = NIL; + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33788 "gram.c" + break; + + case 808: /* DefineStmt: CREATE OPERATOR any_operator definition */ +#line 5700 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_OPERATOR; + n->oldstyle = false; + n->defnames = (yyvsp[-1].list); + n->args = NIL; + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33802 "gram.c" + break; + + case 809: /* DefineStmt: CREATE TYPE_P any_name definition */ +#line 5710 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TYPE; + n->oldstyle = false; + n->defnames = (yyvsp[-1].list); + n->args = NIL; + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33816 "gram.c" + break; + + case 810: /* DefineStmt: CREATE TYPE_P any_name */ +#line 5720 "gram.y" + { + /* Shell type (identified by lack of definition) */ + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TYPE; + n->oldstyle = false; + n->defnames = (yyvsp[0].list); + n->args = NIL; + n->definition = NIL; + (yyval.node) = (Node *)n; + } +#line 33831 "gram.c" + break; + + case 811: /* DefineStmt: CREATE TYPE_P any_name AS '(' OptTableFuncElementList ')' */ +#line 5731 "gram.y" + { + CompositeTypeStmt *n = makeNode(CompositeTypeStmt); + + /* can't use qualified_name, sigh */ + n->typevar = makeRangeVarFromAnyName((yyvsp[-4].list), (yylsp[-4]), yyscanner); + n->coldeflist = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 33844 "gram.c" + break; + + case 812: /* DefineStmt: CREATE TYPE_P any_name AS ENUM_P '(' opt_enum_val_list ')' */ +#line 5740 "gram.y" + { + CreateEnumStmt *n = makeNode(CreateEnumStmt); + n->typeName = (yyvsp[-5].list); + n->vals = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 33855 "gram.c" + break; + + case 813: /* DefineStmt: CREATE TYPE_P any_name AS RANGE definition */ +#line 5747 "gram.y" + { + CreateRangeStmt *n = makeNode(CreateRangeStmt); + n->typeName = (yyvsp[-3].list); + n->params = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33866 "gram.c" + break; + + case 814: /* DefineStmt: CREATE TEXT_P SEARCH PARSER any_name definition */ +#line 5754 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSPARSER; + n->args = NIL; + n->defnames = (yyvsp[-1].list); + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33879 "gram.c" + break; + + case 815: /* DefineStmt: CREATE TEXT_P SEARCH DICTIONARY any_name definition */ +#line 5763 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSDICTIONARY; + n->args = NIL; + n->defnames = (yyvsp[-1].list); + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33892 "gram.c" + break; + + case 816: /* DefineStmt: CREATE TEXT_P SEARCH TEMPLATE any_name definition */ +#line 5772 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSTEMPLATE; + n->args = NIL; + n->defnames = (yyvsp[-1].list); + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33905 "gram.c" + break; + + case 817: /* DefineStmt: CREATE TEXT_P SEARCH CONFIGURATION any_name definition */ +#line 5781 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSCONFIGURATION; + n->args = NIL; + n->defnames = (yyvsp[-1].list); + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33918 "gram.c" + break; + + case 818: /* DefineStmt: CREATE COLLATION any_name definition */ +#line 5790 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = (yyvsp[-1].list); + n->definition = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 33931 "gram.c" + break; + + case 819: /* DefineStmt: CREATE COLLATION IF_P NOT EXISTS any_name definition */ +#line 5799 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = (yyvsp[-1].list); + n->definition = (yyvsp[0].list); + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 33945 "gram.c" + break; + + case 820: /* DefineStmt: CREATE COLLATION any_name FROM any_name */ +#line 5809 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = (yyvsp[-2].list); + n->definition = list_make1(makeDefElem("from", (Node *) (yyvsp[0].list), (yylsp[0]))); + (yyval.node) = (Node *)n; + } +#line 33958 "gram.c" + break; + + case 821: /* DefineStmt: CREATE COLLATION IF_P NOT EXISTS any_name FROM any_name */ +#line 5818 "gram.y" + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = (yyvsp[-2].list); + n->definition = list_make1(makeDefElem("from", (Node *) (yyvsp[0].list), (yylsp[0]))); + n->if_not_exists = true; + (yyval.node) = (Node *)n; + } +#line 33972 "gram.c" + break; + + case 822: /* definition: '(' def_list ')' */ +#line 5829 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 33978 "gram.c" + break; + + case 823: /* def_list: def_elem */ +#line 5832 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 33984 "gram.c" + break; + + case 824: /* def_list: def_list ',' def_elem */ +#line 5833 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } +#line 33990 "gram.c" + break; + + case 825: /* def_elem: ColLabel '=' def_arg */ +#line 5837 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-2].str), (Node *) (yyvsp[0].node), (yylsp[-2])); + } +#line 33998 "gram.c" + break; + + case 826: /* def_elem: ColLabel */ +#line 5841 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[0].str), NULL, (yylsp[0])); + } +#line 34006 "gram.c" + break; + + case 827: /* def_arg: func_type */ +#line 5847 "gram.y" + { (yyval.node) = (Node *)(yyvsp[0].typnam); } +#line 34012 "gram.c" + break; + + case 828: /* def_arg: reserved_keyword */ +#line 5848 "gram.y" + { (yyval.node) = (Node *)makeString(pstrdup((yyvsp[0].keyword))); } +#line 34018 "gram.c" + break; + + case 829: /* def_arg: qual_all_Op */ +#line 5849 "gram.y" + { (yyval.node) = (Node *)(yyvsp[0].list); } +#line 34024 "gram.c" + break; + + case 830: /* def_arg: NumericOnly */ +#line 5850 "gram.y" + { (yyval.node) = (Node *)(yyvsp[0].value); } +#line 34030 "gram.c" + break; + + case 831: /* def_arg: Sconst */ +#line 5851 "gram.y" + { (yyval.node) = (Node *)makeString((yyvsp[0].str)); } +#line 34036 "gram.c" + break; + + case 832: /* def_arg: NONE */ +#line 5852 "gram.y" + { (yyval.node) = (Node *)makeString(pstrdup((yyvsp[0].keyword))); } +#line 34042 "gram.c" + break; + + case 833: /* old_aggr_definition: '(' old_aggr_list ')' */ +#line 5855 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 34048 "gram.c" + break; + + case 834: /* old_aggr_list: old_aggr_elem */ +#line 5858 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 34054 "gram.c" + break; + + case 835: /* old_aggr_list: old_aggr_list ',' old_aggr_elem */ +#line 5859 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } +#line 34060 "gram.c" + break; + + case 836: /* old_aggr_elem: IDENT '=' def_arg */ +#line 5868 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-2].str), (Node *)(yyvsp[0].node), (yylsp[-2])); + } +#line 34068 "gram.c" + break; + + case 837: /* opt_enum_val_list: enum_val_list */ +#line 5874 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 34074 "gram.c" + break; + + case 838: /* opt_enum_val_list: %empty */ +#line 5875 "gram.y" + { (yyval.list) = NIL; } +#line 34080 "gram.c" + break; + + case 839: /* enum_val_list: Sconst */ +#line 5879 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 34086 "gram.c" + break; + + case 840: /* enum_val_list: enum_val_list ',' Sconst */ +#line 5881 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), makeString((yyvsp[0].str))); } +#line 34092 "gram.c" + break; + + case 841: /* AlterEnumStmt: ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst */ +#line 5892 "gram.y" + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = (yyvsp[-4].list); + n->oldVal = NULL; + n->newVal = (yyvsp[0].str); + n->newValNeighbor = NULL; + n->newValIsAfter = true; + n->skipIfNewValExists = (yyvsp[-1].boolean); + (yyval.node) = (Node *) n; + } +#line 34107 "gram.c" + break; + + case 842: /* AlterEnumStmt: ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst BEFORE Sconst */ +#line 5903 "gram.y" + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = (yyvsp[-6].list); + n->oldVal = NULL; + n->newVal = (yyvsp[-2].str); + n->newValNeighbor = (yyvsp[0].str); + n->newValIsAfter = false; + n->skipIfNewValExists = (yyvsp[-3].boolean); + (yyval.node) = (Node *) n; + } +#line 34122 "gram.c" + break; + + case 843: /* AlterEnumStmt: ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst AFTER Sconst */ +#line 5914 "gram.y" + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = (yyvsp[-6].list); + n->oldVal = NULL; + n->newVal = (yyvsp[-2].str); + n->newValNeighbor = (yyvsp[0].str); + n->newValIsAfter = true; + n->skipIfNewValExists = (yyvsp[-3].boolean); + (yyval.node) = (Node *) n; + } +#line 34137 "gram.c" + break; + + case 844: /* AlterEnumStmt: ALTER TYPE_P any_name RENAME VALUE_P Sconst TO Sconst */ +#line 5925 "gram.y" + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = (yyvsp[-5].list); + n->oldVal = (yyvsp[-2].str); + n->newVal = (yyvsp[0].str); + n->newValNeighbor = NULL; + n->newValIsAfter = false; + n->skipIfNewValExists = false; + (yyval.node) = (Node *) n; + } +#line 34152 "gram.c" + break; + + case 845: /* opt_if_not_exists: IF_P NOT EXISTS */ +#line 5937 "gram.y" + { (yyval.boolean) = true; } +#line 34158 "gram.c" + break; + + case 846: /* opt_if_not_exists: %empty */ +#line 5938 "gram.y" + { (yyval.boolean) = false; } +#line 34164 "gram.c" + break; + + case 847: /* CreateOpClassStmt: CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename USING name opt_opfamily AS opclass_item_list */ +#line 5956 "gram.y" + { + CreateOpClassStmt *n = makeNode(CreateOpClassStmt); + n->opclassname = (yyvsp[-9].list); + n->isDefault = (yyvsp[-8].boolean); + n->datatype = (yyvsp[-5].typnam); + n->amname = (yyvsp[-3].str); + n->opfamilyname = (yyvsp[-2].list); + n->items = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 34179 "gram.c" + break; + + case 848: /* opclass_item_list: opclass_item */ +#line 5969 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 34185 "gram.c" + break; + + case 849: /* opclass_item_list: opclass_item_list ',' opclass_item */ +#line 5970 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 34191 "gram.c" + break; + + case 850: /* opclass_item: OPERATOR Iconst any_operator opclass_purpose opt_recheck */ +#line 5975 "gram.y" + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + ObjectWithArgs *owa = makeNode(ObjectWithArgs); + owa->objname = (yyvsp[-2].list); + owa->objargs = NIL; + n->itemtype = OPCLASS_ITEM_OPERATOR; + n->name = owa; + n->number = (yyvsp[-3].ival); + n->order_family = (yyvsp[-1].list); + (yyval.node) = (Node *) n; + } +#line 34207 "gram.c" + break; + + case 851: /* opclass_item: OPERATOR Iconst operator_with_argtypes opclass_purpose opt_recheck */ +#line 5988 "gram.y" + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_OPERATOR; + n->name = (yyvsp[-2].objwithargs); + n->number = (yyvsp[-3].ival); + n->order_family = (yyvsp[-1].list); + (yyval.node) = (Node *) n; + } +#line 34220 "gram.c" + break; + + case 852: /* opclass_item: FUNCTION Iconst function_with_argtypes */ +#line 5997 "gram.y" + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_FUNCTION; + n->name = (yyvsp[0].objwithargs); + n->number = (yyvsp[-1].ival); + (yyval.node) = (Node *) n; + } +#line 34232 "gram.c" + break; + + case 853: /* opclass_item: FUNCTION Iconst '(' type_list ')' function_with_argtypes */ +#line 6005 "gram.y" + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_FUNCTION; + n->name = (yyvsp[0].objwithargs); + n->number = (yyvsp[-4].ival); + n->class_args = (yyvsp[-2].list); + (yyval.node) = (Node *) n; + } +#line 34245 "gram.c" + break; + + case 854: /* opclass_item: STORAGE Typename */ +#line 6014 "gram.y" + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_STORAGETYPE; + n->storedtype = (yyvsp[0].typnam); + (yyval.node) = (Node *) n; + } +#line 34256 "gram.c" + break; + + case 855: /* opt_default: DEFAULT */ +#line 6022 "gram.y" + { (yyval.boolean) = true; } +#line 34262 "gram.c" + break; + + case 856: /* opt_default: %empty */ +#line 6023 "gram.y" + { (yyval.boolean) = false; } +#line 34268 "gram.c" + break; + + case 857: /* opt_opfamily: FAMILY any_name */ +#line 6026 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 34274 "gram.c" + break; + + case 858: /* opt_opfamily: %empty */ +#line 6027 "gram.y" + { (yyval.list) = NIL; } +#line 34280 "gram.c" + break; + + case 859: /* opclass_purpose: FOR SEARCH */ +#line 6030 "gram.y" + { (yyval.list) = NIL; } +#line 34286 "gram.c" + break; + + case 860: /* opclass_purpose: FOR ORDER BY any_name */ +#line 6031 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 34292 "gram.c" + break; + + case 861: /* opclass_purpose: %empty */ +#line 6032 "gram.y" + { (yyval.list) = NIL; } +#line 34298 "gram.c" + break; + + case 862: /* opt_recheck: RECHECK */ +#line 6036 "gram.y" + { + /* + * RECHECK no longer does anything in opclass definitions, + * but we still accept it to ease porting of old database + * dumps. + */ + ereport(NOTICE, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("RECHECK is no longer required"), + errhint("Update your data type."), + parser_errposition((yylsp[0])))); + (yyval.boolean) = true; + } +#line 34316 "gram.c" + break; + + case 863: /* opt_recheck: %empty */ +#line 6049 "gram.y" + { (yyval.boolean) = false; } +#line 34322 "gram.c" + break; + + case 864: /* CreateOpFamilyStmt: CREATE OPERATOR FAMILY any_name USING name */ +#line 6055 "gram.y" + { + CreateOpFamilyStmt *n = makeNode(CreateOpFamilyStmt); + n->opfamilyname = (yyvsp[-2].list); + n->amname = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34333 "gram.c" + break; + + case 865: /* AlterOpFamilyStmt: ALTER OPERATOR FAMILY any_name USING name ADD_P opclass_item_list */ +#line 6065 "gram.y" + { + AlterOpFamilyStmt *n = makeNode(AlterOpFamilyStmt); + n->opfamilyname = (yyvsp[-4].list); + n->amname = (yyvsp[-2].str); + n->isDrop = false; + n->items = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 34346 "gram.c" + break; + + case 866: /* AlterOpFamilyStmt: ALTER OPERATOR FAMILY any_name USING name DROP opclass_drop_list */ +#line 6074 "gram.y" + { + AlterOpFamilyStmt *n = makeNode(AlterOpFamilyStmt); + n->opfamilyname = (yyvsp[-4].list); + n->amname = (yyvsp[-2].str); + n->isDrop = true; + n->items = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 34359 "gram.c" + break; + + case 867: /* opclass_drop_list: opclass_drop */ +#line 6085 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 34365 "gram.c" + break; + + case 868: /* opclass_drop_list: opclass_drop_list ',' opclass_drop */ +#line 6086 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 34371 "gram.c" + break; + + case 869: /* opclass_drop: OPERATOR Iconst '(' type_list ')' */ +#line 6091 "gram.y" + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_OPERATOR; + n->number = (yyvsp[-3].ival); + n->class_args = (yyvsp[-1].list); + (yyval.node) = (Node *) n; + } +#line 34383 "gram.c" + break; + + case 870: /* opclass_drop: FUNCTION Iconst '(' type_list ')' */ +#line 6099 "gram.y" + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_FUNCTION; + n->number = (yyvsp[-3].ival); + n->class_args = (yyvsp[-1].list); + (yyval.node) = (Node *) n; + } +#line 34395 "gram.c" + break; + + case 871: /* DropOpClassStmt: DROP OPERATOR CLASS any_name USING name opt_drop_behavior */ +#line 6111 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString((yyvsp[-1].str)), (yyvsp[-3].list))); + n->removeType = OBJECT_OPCLASS; + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34409 "gram.c" + break; + + case 872: /* DropOpClassStmt: DROP OPERATOR CLASS IF_P EXISTS any_name USING name opt_drop_behavior */ +#line 6121 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString((yyvsp[-1].str)), (yyvsp[-3].list))); + n->removeType = OBJECT_OPCLASS; + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34423 "gram.c" + break; + + case 873: /* DropOpFamilyStmt: DROP OPERATOR FAMILY any_name USING name opt_drop_behavior */ +#line 6134 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString((yyvsp[-1].str)), (yyvsp[-3].list))); + n->removeType = OBJECT_OPFAMILY; + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34437 "gram.c" + break; + + case 874: /* DropOpFamilyStmt: DROP OPERATOR FAMILY IF_P EXISTS any_name USING name opt_drop_behavior */ +#line 6144 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString((yyvsp[-1].str)), (yyvsp[-3].list))); + n->removeType = OBJECT_OPFAMILY; + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34451 "gram.c" + break; + + case 875: /* DropOwnedStmt: DROP OWNED BY role_list opt_drop_behavior */ +#line 6166 "gram.y" + { + DropOwnedStmt *n = makeNode(DropOwnedStmt); + n->roles = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *)n; + } +#line 34462 "gram.c" + break; + + case 876: /* ReassignOwnedStmt: REASSIGN OWNED BY role_list TO RoleSpec */ +#line 6176 "gram.y" + { + ReassignOwnedStmt *n = makeNode(ReassignOwnedStmt); + n->roles = (yyvsp[-2].list); + n->newrole = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 34473 "gram.c" + break; + + case 877: /* DropStmt: DROP object_type_any_name IF_P EXISTS any_name_list opt_drop_behavior */ +#line 6194 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = (yyvsp[-4].objtype); + n->missing_ok = true; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 34487 "gram.c" + break; + + case 878: /* DropStmt: DROP object_type_any_name any_name_list opt_drop_behavior */ +#line 6204 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = (yyvsp[-2].objtype); + n->missing_ok = false; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 34501 "gram.c" + break; + + case 879: /* DropStmt: DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior */ +#line 6214 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = (yyvsp[-4].objtype); + n->missing_ok = true; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 34515 "gram.c" + break; + + case 880: /* DropStmt: DROP drop_type_name name_list opt_drop_behavior */ +#line 6224 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = (yyvsp[-2].objtype); + n->missing_ok = false; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 34529 "gram.c" + break; + + case 881: /* DropStmt: DROP object_type_name_on_any_name name ON any_name opt_drop_behavior */ +#line 6234 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = (yyvsp[-4].objtype); + n->objects = list_make1(lappend((yyvsp[-1].list), makeString((yyvsp[-3].str)))); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34543 "gram.c" + break; + + case 882: /* DropStmt: DROP object_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior */ +#line 6244 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = (yyvsp[-6].objtype); + n->objects = list_make1(lappend((yyvsp[-1].list), makeString((yyvsp[-3].str)))); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34557 "gram.c" + break; + + case 883: /* DropStmt: DROP TYPE_P type_name_list opt_drop_behavior */ +#line 6254 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_TYPE; + n->missing_ok = false; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34571 "gram.c" + break; + + case 884: /* DropStmt: DROP TYPE_P IF_P EXISTS type_name_list opt_drop_behavior */ +#line 6264 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_TYPE; + n->missing_ok = true; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34585 "gram.c" + break; + + case 885: /* DropStmt: DROP DOMAIN_P type_name_list opt_drop_behavior */ +#line 6274 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_DOMAIN; + n->missing_ok = false; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34599 "gram.c" + break; + + case 886: /* DropStmt: DROP DOMAIN_P IF_P EXISTS type_name_list opt_drop_behavior */ +#line 6284 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_DOMAIN; + n->missing_ok = true; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = false; + (yyval.node) = (Node *) n; + } +#line 34613 "gram.c" + break; + + case 887: /* DropStmt: DROP INDEX CONCURRENTLY any_name_list opt_drop_behavior */ +#line 6294 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_INDEX; + n->missing_ok = false; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = true; + (yyval.node) = (Node *)n; + } +#line 34627 "gram.c" + break; + + case 888: /* DropStmt: DROP INDEX CONCURRENTLY IF_P EXISTS any_name_list opt_drop_behavior */ +#line 6304 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_INDEX; + n->missing_ok = true; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->concurrent = true; + (yyval.node) = (Node *)n; + } +#line 34641 "gram.c" + break; + + case 889: /* object_type_any_name: TABLE */ +#line 6317 "gram.y" + { (yyval.objtype) = OBJECT_TABLE; } +#line 34647 "gram.c" + break; + + case 890: /* object_type_any_name: SEQUENCE */ +#line 6318 "gram.y" + { (yyval.objtype) = OBJECT_SEQUENCE; } +#line 34653 "gram.c" + break; + + case 891: /* object_type_any_name: VIEW */ +#line 6319 "gram.y" + { (yyval.objtype) = OBJECT_VIEW; } +#line 34659 "gram.c" + break; + + case 892: /* object_type_any_name: MATERIALIZED VIEW */ +#line 6320 "gram.y" + { (yyval.objtype) = OBJECT_MATVIEW; } +#line 34665 "gram.c" + break; + + case 893: /* object_type_any_name: INDEX */ +#line 6321 "gram.y" + { (yyval.objtype) = OBJECT_INDEX; } +#line 34671 "gram.c" + break; + + case 894: /* object_type_any_name: FOREIGN TABLE */ +#line 6322 "gram.y" + { (yyval.objtype) = OBJECT_FOREIGN_TABLE; } +#line 34677 "gram.c" + break; + + case 895: /* object_type_any_name: COLLATION */ +#line 6323 "gram.y" + { (yyval.objtype) = OBJECT_COLLATION; } +#line 34683 "gram.c" + break; + + case 896: /* object_type_any_name: CONVERSION_P */ +#line 6324 "gram.y" + { (yyval.objtype) = OBJECT_CONVERSION; } +#line 34689 "gram.c" + break; + + case 897: /* object_type_any_name: STATISTICS */ +#line 6325 "gram.y" + { (yyval.objtype) = OBJECT_STATISTIC_EXT; } +#line 34695 "gram.c" + break; + + case 898: /* object_type_any_name: TEXT_P SEARCH PARSER */ +#line 6326 "gram.y" + { (yyval.objtype) = OBJECT_TSPARSER; } +#line 34701 "gram.c" + break; + + case 899: /* object_type_any_name: TEXT_P SEARCH DICTIONARY */ +#line 6327 "gram.y" + { (yyval.objtype) = OBJECT_TSDICTIONARY; } +#line 34707 "gram.c" + break; + + case 900: /* object_type_any_name: TEXT_P SEARCH TEMPLATE */ +#line 6328 "gram.y" + { (yyval.objtype) = OBJECT_TSTEMPLATE; } +#line 34713 "gram.c" + break; + + case 901: /* object_type_any_name: TEXT_P SEARCH CONFIGURATION */ +#line 6329 "gram.y" + { (yyval.objtype) = OBJECT_TSCONFIGURATION; } +#line 34719 "gram.c" + break; + + case 902: /* object_type_name: drop_type_name */ +#line 6339 "gram.y" + { (yyval.objtype) = (yyvsp[0].objtype); } +#line 34725 "gram.c" + break; + + case 903: /* object_type_name: DATABASE */ +#line 6340 "gram.y" + { (yyval.objtype) = OBJECT_DATABASE; } +#line 34731 "gram.c" + break; + + case 904: /* object_type_name: ROLE */ +#line 6341 "gram.y" + { (yyval.objtype) = OBJECT_ROLE; } +#line 34737 "gram.c" + break; + + case 905: /* object_type_name: SUBSCRIPTION */ +#line 6342 "gram.y" + { (yyval.objtype) = OBJECT_SUBSCRIPTION; } +#line 34743 "gram.c" + break; + + case 906: /* object_type_name: TABLESPACE */ +#line 6343 "gram.y" + { (yyval.objtype) = OBJECT_TABLESPACE; } +#line 34749 "gram.c" + break; + + case 907: /* drop_type_name: ACCESS METHOD */ +#line 6347 "gram.y" + { (yyval.objtype) = OBJECT_ACCESS_METHOD; } +#line 34755 "gram.c" + break; + + case 908: /* drop_type_name: EVENT TRIGGER */ +#line 6348 "gram.y" + { (yyval.objtype) = OBJECT_EVENT_TRIGGER; } +#line 34761 "gram.c" + break; + + case 909: /* drop_type_name: EXTENSION */ +#line 6349 "gram.y" + { (yyval.objtype) = OBJECT_EXTENSION; } +#line 34767 "gram.c" + break; + + case 910: /* drop_type_name: FOREIGN DATA_P WRAPPER */ +#line 6350 "gram.y" + { (yyval.objtype) = OBJECT_FDW; } +#line 34773 "gram.c" + break; + + case 911: /* drop_type_name: opt_procedural LANGUAGE */ +#line 6351 "gram.y" + { (yyval.objtype) = OBJECT_LANGUAGE; } +#line 34779 "gram.c" + break; + + case 912: /* drop_type_name: PUBLICATION */ +#line 6352 "gram.y" + { (yyval.objtype) = OBJECT_PUBLICATION; } +#line 34785 "gram.c" + break; + + case 913: /* drop_type_name: SCHEMA */ +#line 6353 "gram.y" + { (yyval.objtype) = OBJECT_SCHEMA; } +#line 34791 "gram.c" + break; + + case 914: /* drop_type_name: SERVER */ +#line 6354 "gram.y" + { (yyval.objtype) = OBJECT_FOREIGN_SERVER; } +#line 34797 "gram.c" + break; + + case 915: /* object_type_name_on_any_name: POLICY */ +#line 6359 "gram.y" + { (yyval.objtype) = OBJECT_POLICY; } +#line 34803 "gram.c" + break; + + case 916: /* object_type_name_on_any_name: RULE */ +#line 6360 "gram.y" + { (yyval.objtype) = OBJECT_RULE; } +#line 34809 "gram.c" + break; + + case 917: /* object_type_name_on_any_name: TRIGGER */ +#line 6361 "gram.y" + { (yyval.objtype) = OBJECT_TRIGGER; } +#line 34815 "gram.c" + break; + + case 918: /* any_name_list: any_name */ +#line 6365 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].list)); } +#line 34821 "gram.c" + break; + + case 919: /* any_name_list: any_name_list ',' any_name */ +#line 6366 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].list)); } +#line 34827 "gram.c" + break; + + case 920: /* any_name: ColId */ +#line 6369 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 34833 "gram.c" + break; + + case 921: /* any_name: ColId attrs */ +#line 6370 "gram.y" + { (yyval.list) = lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)); } +#line 34839 "gram.c" + break; + + case 922: /* attrs: '.' attr_name */ +#line 6374 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 34845 "gram.c" + break; + + case 923: /* attrs: attrs '.' attr_name */ +#line 6376 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), makeString((yyvsp[0].str))); } +#line 34851 "gram.c" + break; + + case 924: /* type_name_list: Typename */ +#line 6380 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].typnam)); } +#line 34857 "gram.c" + break; + + case 925: /* type_name_list: type_name_list ',' Typename */ +#line 6381 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].typnam)); } +#line 34863 "gram.c" + break; + + case 926: /* TruncateStmt: TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior */ +#line 6393 "gram.y" + { + TruncateStmt *n = makeNode(TruncateStmt); + n->relations = (yyvsp[-2].list); + n->restart_seqs = (yyvsp[-1].boolean); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *)n; + } +#line 34875 "gram.c" + break; + + case 927: /* opt_restart_seqs: CONTINUE_P IDENTITY_P */ +#line 6403 "gram.y" + { (yyval.boolean) = false; } +#line 34881 "gram.c" + break; + + case 928: /* opt_restart_seqs: RESTART IDENTITY_P */ +#line 6404 "gram.y" + { (yyval.boolean) = true; } +#line 34887 "gram.c" + break; + + case 929: /* opt_restart_seqs: %empty */ +#line 6405 "gram.y" + { (yyval.boolean) = false; } +#line 34893 "gram.c" + break; + + case 930: /* CommentStmt: COMMENT ON object_type_any_name any_name IS comment_text */ +#line 6416 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = (yyvsp[-3].objtype); + n->object = (Node *) (yyvsp[-2].list); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34905 "gram.c" + break; + + case 931: /* CommentStmt: COMMENT ON COLUMN any_name IS comment_text */ +#line 6424 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_COLUMN; + n->object = (Node *) (yyvsp[-2].list); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34917 "gram.c" + break; + + case 932: /* CommentStmt: COMMENT ON object_type_name name IS comment_text */ +#line 6432 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = (yyvsp[-3].objtype); + n->object = (Node *) makeString((yyvsp[-2].str)); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34929 "gram.c" + break; + + case 933: /* CommentStmt: COMMENT ON TYPE_P Typename IS comment_text */ +#line 6440 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_TYPE; + n->object = (Node *) (yyvsp[-2].typnam); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34941 "gram.c" + break; + + case 934: /* CommentStmt: COMMENT ON DOMAIN_P Typename IS comment_text */ +#line 6448 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_DOMAIN; + n->object = (Node *) (yyvsp[-2].typnam); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34953 "gram.c" + break; + + case 935: /* CommentStmt: COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text */ +#line 6456 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_AGGREGATE; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34965 "gram.c" + break; + + case 936: /* CommentStmt: COMMENT ON FUNCTION function_with_argtypes IS comment_text */ +#line 6464 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_FUNCTION; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34977 "gram.c" + break; + + case 937: /* CommentStmt: COMMENT ON OPERATOR operator_with_argtypes IS comment_text */ +#line 6472 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_OPERATOR; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 34989 "gram.c" + break; + + case 938: /* CommentStmt: COMMENT ON CONSTRAINT name ON any_name IS comment_text */ +#line 6480 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_TABCONSTRAINT; + n->object = (Node *) lappend((yyvsp[-2].list), makeString((yyvsp[-4].str))); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35001 "gram.c" + break; + + case 939: /* CommentStmt: COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text */ +#line 6488 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_DOMCONSTRAINT; + /* + * should use Typename not any_name in the production, but + * there's a shift/reduce conflict if we do that, so fix it + * up here. + */ + n->object = (Node *) list_make2(makeTypeNameFromNameList((yyvsp[-2].list)), makeString((yyvsp[-5].str))); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35018 "gram.c" + break; + + case 940: /* CommentStmt: COMMENT ON object_type_name_on_any_name name ON any_name IS comment_text */ +#line 6501 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = (yyvsp[-5].objtype); + n->object = (Node *) lappend((yyvsp[-2].list), makeString((yyvsp[-4].str))); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35030 "gram.c" + break; + + case 941: /* CommentStmt: COMMENT ON PROCEDURE function_with_argtypes IS comment_text */ +#line 6509 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_PROCEDURE; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35042 "gram.c" + break; + + case 942: /* CommentStmt: COMMENT ON ROUTINE function_with_argtypes IS comment_text */ +#line 6517 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_ROUTINE; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35054 "gram.c" + break; + + case 943: /* CommentStmt: COMMENT ON TRANSFORM FOR Typename LANGUAGE name IS comment_text */ +#line 6525 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_TRANSFORM; + n->object = (Node *) list_make2((yyvsp[-4].typnam), makeString((yyvsp[-2].str))); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35066 "gram.c" + break; + + case 944: /* CommentStmt: COMMENT ON OPERATOR CLASS any_name USING name IS comment_text */ +#line 6533 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_OPCLASS; + n->object = (Node *) lcons(makeString((yyvsp[-2].str)), (yyvsp[-4].list)); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35078 "gram.c" + break; + + case 945: /* CommentStmt: COMMENT ON OPERATOR FAMILY any_name USING name IS comment_text */ +#line 6541 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_OPFAMILY; + n->object = (Node *) lcons(makeString((yyvsp[-2].str)), (yyvsp[-4].list)); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35090 "gram.c" + break; + + case 946: /* CommentStmt: COMMENT ON LARGE_P OBJECT_P NumericOnly IS comment_text */ +#line 6549 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_LARGEOBJECT; + n->object = (Node *) (yyvsp[-2].value); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35102 "gram.c" + break; + + case 947: /* CommentStmt: COMMENT ON CAST '(' Typename AS Typename ')' IS comment_text */ +#line 6557 "gram.y" + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_CAST; + n->object = (Node *) list_make2((yyvsp[-5].typnam), (yyvsp[-3].typnam)); + n->comment = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35114 "gram.c" + break; + + case 948: /* comment_text: Sconst */ +#line 6567 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 35120 "gram.c" + break; + + case 949: /* comment_text: NULL_P */ +#line 6568 "gram.y" + { (yyval.str) = NULL; } +#line 35126 "gram.c" + break; + + case 950: /* SecLabelStmt: SECURITY LABEL opt_provider ON object_type_any_name any_name IS security_label */ +#line 6584 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = (yyvsp[-3].objtype); + n->object = (Node *) (yyvsp[-2].list); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35139 "gram.c" + break; + + case 951: /* SecLabelStmt: SECURITY LABEL opt_provider ON COLUMN any_name IS security_label */ +#line 6594 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = OBJECT_COLUMN; + n->object = (Node *) (yyvsp[-2].list); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35152 "gram.c" + break; + + case 952: /* SecLabelStmt: SECURITY LABEL opt_provider ON object_type_name name IS security_label */ +#line 6604 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = (yyvsp[-3].objtype); + n->object = (Node *) makeString((yyvsp[-2].str)); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35165 "gram.c" + break; + + case 953: /* SecLabelStmt: SECURITY LABEL opt_provider ON TYPE_P Typename IS security_label */ +#line 6614 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = OBJECT_TYPE; + n->object = (Node *) (yyvsp[-2].typnam); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35178 "gram.c" + break; + + case 954: /* SecLabelStmt: SECURITY LABEL opt_provider ON DOMAIN_P Typename IS security_label */ +#line 6624 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = OBJECT_DOMAIN; + n->object = (Node *) (yyvsp[-2].typnam); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35191 "gram.c" + break; + + case 955: /* SecLabelStmt: SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes IS security_label */ +#line 6634 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = OBJECT_AGGREGATE; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35204 "gram.c" + break; + + case 956: /* SecLabelStmt: SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes IS security_label */ +#line 6644 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = OBJECT_FUNCTION; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35217 "gram.c" + break; + + case 957: /* SecLabelStmt: SECURITY LABEL opt_provider ON LARGE_P OBJECT_P NumericOnly IS security_label */ +#line 6654 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-6].str); + n->objtype = OBJECT_LARGEOBJECT; + n->object = (Node *) (yyvsp[-2].value); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35230 "gram.c" + break; + + case 958: /* SecLabelStmt: SECURITY LABEL opt_provider ON PROCEDURE function_with_argtypes IS security_label */ +#line 6664 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = OBJECT_PROCEDURE; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35243 "gram.c" + break; + + case 959: /* SecLabelStmt: SECURITY LABEL opt_provider ON ROUTINE function_with_argtypes IS security_label */ +#line 6674 "gram.y" + { + SecLabelStmt *n = makeNode(SecLabelStmt); + n->provider = (yyvsp[-5].str); + n->objtype = OBJECT_ROUTINE; + n->object = (Node *) (yyvsp[-2].objwithargs); + n->label = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 35256 "gram.c" + break; + + case 960: /* opt_provider: FOR NonReservedWord_or_Sconst */ +#line 6684 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 35262 "gram.c" + break; + + case 961: /* opt_provider: %empty */ +#line 6685 "gram.y" + { (yyval.str) = NULL; } +#line 35268 "gram.c" + break; + + case 962: /* security_label: Sconst */ +#line 6688 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 35274 "gram.c" + break; + + case 963: /* security_label: NULL_P */ +#line 6689 "gram.y" + { (yyval.str) = NULL; } +#line 35280 "gram.c" + break; + + case 964: /* FetchStmt: FETCH fetch_args */ +#line 6700 "gram.y" + { + FetchStmt *n = (FetchStmt *) (yyvsp[0].node); + n->ismove = false; + (yyval.node) = (Node *)n; + } +#line 35290 "gram.c" + break; + + case 965: /* FetchStmt: MOVE fetch_args */ +#line 6706 "gram.y" + { + FetchStmt *n = (FetchStmt *) (yyvsp[0].node); + n->ismove = true; + (yyval.node) = (Node *)n; + } +#line 35300 "gram.c" + break; + + case 966: /* fetch_args: cursor_name */ +#line 6714 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = 1; + (yyval.node) = (Node *)n; + } +#line 35312 "gram.c" + break; + + case 967: /* fetch_args: from_in cursor_name */ +#line 6722 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = 1; + (yyval.node) = (Node *)n; + } +#line 35324 "gram.c" + break; + + case 968: /* fetch_args: NEXT opt_from_in cursor_name */ +#line 6730 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = 1; + (yyval.node) = (Node *)n; + } +#line 35336 "gram.c" + break; + + case 969: /* fetch_args: PRIOR opt_from_in cursor_name */ +#line 6738 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_BACKWARD; + n->howMany = 1; + (yyval.node) = (Node *)n; + } +#line 35348 "gram.c" + break; + + case 970: /* fetch_args: FIRST_P opt_from_in cursor_name */ +#line 6746 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_ABSOLUTE; + n->howMany = 1; + (yyval.node) = (Node *)n; + } +#line 35360 "gram.c" + break; + + case 971: /* fetch_args: LAST_P opt_from_in cursor_name */ +#line 6754 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_ABSOLUTE; + n->howMany = -1; + (yyval.node) = (Node *)n; + } +#line 35372 "gram.c" + break; + + case 972: /* fetch_args: ABSOLUTE_P SignedIconst opt_from_in cursor_name */ +#line 6762 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_ABSOLUTE; + n->howMany = (yyvsp[-2].ival); + (yyval.node) = (Node *)n; + } +#line 35384 "gram.c" + break; + + case 973: /* fetch_args: RELATIVE_P SignedIconst opt_from_in cursor_name */ +#line 6770 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_RELATIVE; + n->howMany = (yyvsp[-2].ival); + (yyval.node) = (Node *)n; + } +#line 35396 "gram.c" + break; + + case 974: /* fetch_args: SignedIconst opt_from_in cursor_name */ +#line 6778 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = (yyvsp[-2].ival); + (yyval.node) = (Node *)n; + } +#line 35408 "gram.c" + break; + + case 975: /* fetch_args: ALL opt_from_in cursor_name */ +#line 6786 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = FETCH_ALL; + (yyval.node) = (Node *)n; + } +#line 35420 "gram.c" + break; + + case 976: /* fetch_args: FORWARD opt_from_in cursor_name */ +#line 6794 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = 1; + (yyval.node) = (Node *)n; + } +#line 35432 "gram.c" + break; + + case 977: /* fetch_args: FORWARD SignedIconst opt_from_in cursor_name */ +#line 6802 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = (yyvsp[-2].ival); + (yyval.node) = (Node *)n; + } +#line 35444 "gram.c" + break; + + case 978: /* fetch_args: FORWARD ALL opt_from_in cursor_name */ +#line 6810 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_FORWARD; + n->howMany = FETCH_ALL; + (yyval.node) = (Node *)n; + } +#line 35456 "gram.c" + break; + + case 979: /* fetch_args: BACKWARD opt_from_in cursor_name */ +#line 6818 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_BACKWARD; + n->howMany = 1; + (yyval.node) = (Node *)n; + } +#line 35468 "gram.c" + break; + + case 980: /* fetch_args: BACKWARD SignedIconst opt_from_in cursor_name */ +#line 6826 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_BACKWARD; + n->howMany = (yyvsp[-2].ival); + (yyval.node) = (Node *)n; + } +#line 35480 "gram.c" + break; + + case 981: /* fetch_args: BACKWARD ALL opt_from_in cursor_name */ +#line 6834 "gram.y" + { + FetchStmt *n = makeNode(FetchStmt); + n->portalname = (yyvsp[0].str); + n->direction = FETCH_BACKWARD; + n->howMany = FETCH_ALL; + (yyval.node) = (Node *)n; + } +#line 35492 "gram.c" + break; + + case 986: /* GrantStmt: GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option opt_granted_by */ +#line 6860 "gram.y" + { + GrantStmt *n = makeNode(GrantStmt); + n->is_grant = true; + n->privileges = (yyvsp[-6].list); + n->targtype = ((yyvsp[-4].privtarget))->targtype; + n->objtype = ((yyvsp[-4].privtarget))->objtype; + n->objects = ((yyvsp[-4].privtarget))->objs; + n->grantees = (yyvsp[-2].list); + n->grant_option = (yyvsp[-1].boolean); + n->grantor = (yyvsp[0].rolespec); + (yyval.node) = (Node*)n; + } +#line 35509 "gram.c" + break; + + case 987: /* RevokeStmt: REVOKE privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior */ +#line 6877 "gram.y" + { + GrantStmt *n = makeNode(GrantStmt); + n->is_grant = false; + n->grant_option = false; + n->privileges = (yyvsp[-6].list); + n->targtype = ((yyvsp[-4].privtarget))->targtype; + n->objtype = ((yyvsp[-4].privtarget))->objtype; + n->objects = ((yyvsp[-4].privtarget))->objs; + n->grantees = (yyvsp[-2].list); + n->grantor = (yyvsp[-1].rolespec); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *)n; + } +#line 35527 "gram.c" + break; + + case 988: /* RevokeStmt: REVOKE GRANT OPTION FOR privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior */ +#line 6892 "gram.y" + { + GrantStmt *n = makeNode(GrantStmt); + n->is_grant = false; + n->grant_option = true; + n->privileges = (yyvsp[-6].list); + n->targtype = ((yyvsp[-4].privtarget))->targtype; + n->objtype = ((yyvsp[-4].privtarget))->objtype; + n->objects = ((yyvsp[-4].privtarget))->objs; + n->grantees = (yyvsp[-2].list); + n->grantor = (yyvsp[-1].rolespec); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *)n; + } +#line 35545 "gram.c" + break; + + case 989: /* privileges: privilege_list */ +#line 6918 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 35551 "gram.c" + break; + + case 990: /* privileges: ALL */ +#line 6920 "gram.y" + { (yyval.list) = NIL; } +#line 35557 "gram.c" + break; + + case 991: /* privileges: ALL PRIVILEGES */ +#line 6922 "gram.y" + { (yyval.list) = NIL; } +#line 35563 "gram.c" + break; + + case 992: /* privileges: ALL '(' columnList ')' */ +#line 6924 "gram.y" + { + AccessPriv *n = makeNode(AccessPriv); + n->priv_name = NULL; + n->cols = (yyvsp[-1].list); + (yyval.list) = list_make1(n); + } +#line 35574 "gram.c" + break; + + case 993: /* privileges: ALL PRIVILEGES '(' columnList ')' */ +#line 6931 "gram.y" + { + AccessPriv *n = makeNode(AccessPriv); + n->priv_name = NULL; + n->cols = (yyvsp[-1].list); + (yyval.list) = list_make1(n); + } +#line 35585 "gram.c" + break; + + case 994: /* privilege_list: privilege */ +#line 6939 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].accesspriv)); } +#line 35591 "gram.c" + break; + + case 995: /* privilege_list: privilege_list ',' privilege */ +#line 6940 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].accesspriv)); } +#line 35597 "gram.c" + break; + + case 996: /* privilege: SELECT opt_column_list */ +#line 6944 "gram.y" + { + AccessPriv *n = makeNode(AccessPriv); + n->priv_name = pstrdup((yyvsp[-1].keyword)); + n->cols = (yyvsp[0].list); + (yyval.accesspriv) = n; + } +#line 35608 "gram.c" + break; + + case 997: /* privilege: REFERENCES opt_column_list */ +#line 6951 "gram.y" + { + AccessPriv *n = makeNode(AccessPriv); + n->priv_name = pstrdup((yyvsp[-1].keyword)); + n->cols = (yyvsp[0].list); + (yyval.accesspriv) = n; + } +#line 35619 "gram.c" + break; + + case 998: /* privilege: CREATE opt_column_list */ +#line 6958 "gram.y" + { + AccessPriv *n = makeNode(AccessPriv); + n->priv_name = pstrdup((yyvsp[-1].keyword)); + n->cols = (yyvsp[0].list); + (yyval.accesspriv) = n; + } +#line 35630 "gram.c" + break; + + case 999: /* privilege: ColId opt_column_list */ +#line 6965 "gram.y" + { + AccessPriv *n = makeNode(AccessPriv); + n->priv_name = (yyvsp[-1].str); + n->cols = (yyvsp[0].list); + (yyval.accesspriv) = n; + } +#line 35641 "gram.c" + break; + + case 1000: /* privilege_target: qualified_name_list */ +#line 6979 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_TABLE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35653 "gram.c" + break; + + case 1001: /* privilege_target: TABLE qualified_name_list */ +#line 6987 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_TABLE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35665 "gram.c" + break; + + case 1002: /* privilege_target: SEQUENCE qualified_name_list */ +#line 6995 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_SEQUENCE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35677 "gram.c" + break; + + case 1003: /* privilege_target: FOREIGN DATA_P WRAPPER name_list */ +#line 7003 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_FDW; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35689 "gram.c" + break; + + case 1004: /* privilege_target: FOREIGN SERVER name_list */ +#line 7011 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_FOREIGN_SERVER; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35701 "gram.c" + break; + + case 1005: /* privilege_target: FUNCTION function_with_argtypes_list */ +#line 7019 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_FUNCTION; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35713 "gram.c" + break; + + case 1006: /* privilege_target: PROCEDURE function_with_argtypes_list */ +#line 7027 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_PROCEDURE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35725 "gram.c" + break; + + case 1007: /* privilege_target: ROUTINE function_with_argtypes_list */ +#line 7035 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_ROUTINE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35737 "gram.c" + break; + + case 1008: /* privilege_target: DATABASE name_list */ +#line 7043 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_DATABASE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35749 "gram.c" + break; + + case 1009: /* privilege_target: DOMAIN_P any_name_list */ +#line 7051 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_DOMAIN; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35761 "gram.c" + break; + + case 1010: /* privilege_target: LANGUAGE name_list */ +#line 7059 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_LANGUAGE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35773 "gram.c" + break; + + case 1011: /* privilege_target: LARGE_P OBJECT_P NumericOnly_list */ +#line 7067 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_LARGEOBJECT; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35785 "gram.c" + break; + + case 1012: /* privilege_target: SCHEMA name_list */ +#line 7075 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_SCHEMA; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35797 "gram.c" + break; + + case 1013: /* privilege_target: TABLESPACE name_list */ +#line 7083 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_TABLESPACE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35809 "gram.c" + break; + + case 1014: /* privilege_target: TYPE_P any_name_list */ +#line 7091 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_OBJECT; + n->objtype = OBJECT_TYPE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35821 "gram.c" + break; + + case 1015: /* privilege_target: ALL TABLES IN_P SCHEMA name_list */ +#line 7099 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_ALL_IN_SCHEMA; + n->objtype = OBJECT_TABLE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35833 "gram.c" + break; + + case 1016: /* privilege_target: ALL SEQUENCES IN_P SCHEMA name_list */ +#line 7107 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_ALL_IN_SCHEMA; + n->objtype = OBJECT_SEQUENCE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35845 "gram.c" + break; + + case 1017: /* privilege_target: ALL FUNCTIONS IN_P SCHEMA name_list */ +#line 7115 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_ALL_IN_SCHEMA; + n->objtype = OBJECT_FUNCTION; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35857 "gram.c" + break; + + case 1018: /* privilege_target: ALL PROCEDURES IN_P SCHEMA name_list */ +#line 7123 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_ALL_IN_SCHEMA; + n->objtype = OBJECT_PROCEDURE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35869 "gram.c" + break; + + case 1019: /* privilege_target: ALL ROUTINES IN_P SCHEMA name_list */ +#line 7131 "gram.y" + { + PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget)); + n->targtype = ACL_TARGET_ALL_IN_SCHEMA; + n->objtype = OBJECT_ROUTINE; + n->objs = (yyvsp[0].list); + (yyval.privtarget) = n; + } +#line 35881 "gram.c" + break; + + case 1020: /* grantee_list: grantee */ +#line 7142 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].rolespec)); } +#line 35887 "gram.c" + break; + + case 1021: /* grantee_list: grantee_list ',' grantee */ +#line 7143 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].rolespec)); } +#line 35893 "gram.c" + break; + + case 1022: /* grantee: RoleSpec */ +#line 7147 "gram.y" + { (yyval.rolespec) = (yyvsp[0].rolespec); } +#line 35899 "gram.c" + break; + + case 1023: /* grantee: GROUP_P RoleSpec */ +#line 7148 "gram.y" + { (yyval.rolespec) = (yyvsp[0].rolespec); } +#line 35905 "gram.c" + break; + + case 1024: /* opt_grant_grant_option: WITH GRANT OPTION */ +#line 7153 "gram.y" + { (yyval.boolean) = true; } +#line 35911 "gram.c" + break; + + case 1025: /* opt_grant_grant_option: %empty */ +#line 7154 "gram.y" + { (yyval.boolean) = false; } +#line 35917 "gram.c" + break; + + case 1026: /* GrantRoleStmt: GRANT privilege_list TO role_list opt_grant_admin_option opt_granted_by */ +#line 7165 "gram.y" + { + GrantRoleStmt *n = makeNode(GrantRoleStmt); + n->is_grant = true; + n->granted_roles = (yyvsp[-4].list); + n->grantee_roles = (yyvsp[-2].list); + n->admin_opt = (yyvsp[-1].boolean); + n->grantor = (yyvsp[0].rolespec); + (yyval.node) = (Node*)n; + } +#line 35931 "gram.c" + break; + + case 1027: /* RevokeRoleStmt: REVOKE privilege_list FROM role_list opt_granted_by opt_drop_behavior */ +#line 7178 "gram.y" + { + GrantRoleStmt *n = makeNode(GrantRoleStmt); + n->is_grant = false; + n->admin_opt = false; + n->granted_roles = (yyvsp[-4].list); + n->grantee_roles = (yyvsp[-2].list); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node*)n; + } +#line 35945 "gram.c" + break; + + case 1028: /* RevokeRoleStmt: REVOKE ADMIN OPTION FOR privilege_list FROM role_list opt_granted_by opt_drop_behavior */ +#line 7188 "gram.y" + { + GrantRoleStmt *n = makeNode(GrantRoleStmt); + n->is_grant = false; + n->admin_opt = true; + n->granted_roles = (yyvsp[-4].list); + n->grantee_roles = (yyvsp[-2].list); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node*)n; + } +#line 35959 "gram.c" + break; + + case 1029: /* opt_grant_admin_option: WITH ADMIN OPTION */ +#line 7199 "gram.y" + { (yyval.boolean) = true; } +#line 35965 "gram.c" + break; + + case 1030: /* opt_grant_admin_option: %empty */ +#line 7200 "gram.y" + { (yyval.boolean) = false; } +#line 35971 "gram.c" + break; + + case 1031: /* opt_granted_by: GRANTED BY RoleSpec */ +#line 7203 "gram.y" + { (yyval.rolespec) = (yyvsp[0].rolespec); } +#line 35977 "gram.c" + break; + + case 1032: /* opt_granted_by: %empty */ +#line 7204 "gram.y" + { (yyval.rolespec) = NULL; } +#line 35983 "gram.c" + break; + + case 1033: /* AlterDefaultPrivilegesStmt: ALTER DEFAULT PRIVILEGES DefACLOptionList DefACLAction */ +#line 7215 "gram.y" + { + AlterDefaultPrivilegesStmt *n = makeNode(AlterDefaultPrivilegesStmt); + n->options = (yyvsp[-1].list); + n->action = (GrantStmt *) (yyvsp[0].node); + (yyval.node) = (Node*)n; + } +#line 35994 "gram.c" + break; + + case 1034: /* DefACLOptionList: DefACLOptionList DefACLOption */ +#line 7224 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 36000 "gram.c" + break; + + case 1035: /* DefACLOptionList: %empty */ +#line 7225 "gram.y" + { (yyval.list) = NIL; } +#line 36006 "gram.c" + break; + + case 1036: /* DefACLOption: IN_P SCHEMA name_list */ +#line 7230 "gram.y" + { + (yyval.defelt) = makeDefElem("schemas", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 36014 "gram.c" + break; + + case 1037: /* DefACLOption: FOR ROLE role_list */ +#line 7234 "gram.y" + { + (yyval.defelt) = makeDefElem("roles", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 36022 "gram.c" + break; + + case 1038: /* DefACLOption: FOR USER role_list */ +#line 7238 "gram.y" + { + (yyval.defelt) = makeDefElem("roles", (Node *)(yyvsp[0].list), (yylsp[-2])); + } +#line 36030 "gram.c" + break; + + case 1039: /* DefACLAction: GRANT privileges ON defacl_privilege_target TO grantee_list opt_grant_grant_option */ +#line 7250 "gram.y" + { + GrantStmt *n = makeNode(GrantStmt); + n->is_grant = true; + n->privileges = (yyvsp[-5].list); + n->targtype = ACL_TARGET_DEFAULTS; + n->objtype = (yyvsp[-3].ival); + n->objects = NIL; + n->grantees = (yyvsp[-1].list); + n->grant_option = (yyvsp[0].boolean); + (yyval.node) = (Node*)n; + } +#line 36046 "gram.c" + break; + + case 1040: /* DefACLAction: REVOKE privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior */ +#line 7263 "gram.y" + { + GrantStmt *n = makeNode(GrantStmt); + n->is_grant = false; + n->grant_option = false; + n->privileges = (yyvsp[-5].list); + n->targtype = ACL_TARGET_DEFAULTS; + n->objtype = (yyvsp[-3].ival); + n->objects = NIL; + n->grantees = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *)n; + } +#line 36063 "gram.c" + break; + + case 1041: /* DefACLAction: REVOKE GRANT OPTION FOR privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior */ +#line 7277 "gram.y" + { + GrantStmt *n = makeNode(GrantStmt); + n->is_grant = false; + n->grant_option = true; + n->privileges = (yyvsp[-5].list); + n->targtype = ACL_TARGET_DEFAULTS; + n->objtype = (yyvsp[-3].ival); + n->objects = NIL; + n->grantees = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *)n; + } +#line 36080 "gram.c" + break; + + case 1042: /* defacl_privilege_target: TABLES */ +#line 7292 "gram.y" + { (yyval.ival) = OBJECT_TABLE; } +#line 36086 "gram.c" + break; + + case 1043: /* defacl_privilege_target: FUNCTIONS */ +#line 7293 "gram.y" + { (yyval.ival) = OBJECT_FUNCTION; } +#line 36092 "gram.c" + break; + + case 1044: /* defacl_privilege_target: ROUTINES */ +#line 7294 "gram.y" + { (yyval.ival) = OBJECT_FUNCTION; } +#line 36098 "gram.c" + break; + + case 1045: /* defacl_privilege_target: SEQUENCES */ +#line 7295 "gram.y" + { (yyval.ival) = OBJECT_SEQUENCE; } +#line 36104 "gram.c" + break; + + case 1046: /* defacl_privilege_target: TYPES_P */ +#line 7296 "gram.y" + { (yyval.ival) = OBJECT_TYPE; } +#line 36110 "gram.c" + break; + + case 1047: /* defacl_privilege_target: SCHEMAS */ +#line 7297 "gram.y" + { (yyval.ival) = OBJECT_SCHEMA; } +#line 36116 "gram.c" + break; + + case 1048: /* IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause */ +#line 7312 "gram.y" + { + IndexStmt *n = makeNode(IndexStmt); + n->unique = (yyvsp[-13].boolean); + n->concurrent = (yyvsp[-11].boolean); + n->idxname = (yyvsp[-10].str); + n->relation = (yyvsp[-8].range); + n->accessMethod = (yyvsp[-7].str); + n->indexParams = (yyvsp[-5].list); + n->indexIncludingParams = (yyvsp[-3].list); + n->options = (yyvsp[-2].list); + n->tableSpace = (yyvsp[-1].str); + n->whereClause = (yyvsp[0].node); + n->excludeOpNames = NIL; + n->idxcomment = NULL; + n->indexOid = InvalidOid; + n->oldNode = InvalidOid; + n->oldCreateSubid = InvalidSubTransactionId; + n->oldFirstRelfilenodeSubid = InvalidSubTransactionId; + n->primary = false; + n->isconstraint = false; + n->deferrable = false; + n->initdeferred = false; + n->transformed = false; + n->if_not_exists = false; + n->reset_default_tblspc = false; + (yyval.node) = (Node *)n; + } +#line 36148 "gram.c" + break; + + case 1049: /* IndexStmt: CREATE opt_unique INDEX opt_concurrently IF_P NOT EXISTS name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions OptTableSpace where_clause */ +#line 7342 "gram.y" + { + IndexStmt *n = makeNode(IndexStmt); + n->unique = (yyvsp[-16].boolean); + n->concurrent = (yyvsp[-14].boolean); + n->idxname = (yyvsp[-10].str); + n->relation = (yyvsp[-8].range); + n->accessMethod = (yyvsp[-7].str); + n->indexParams = (yyvsp[-5].list); + n->indexIncludingParams = (yyvsp[-3].list); + n->options = (yyvsp[-2].list); + n->tableSpace = (yyvsp[-1].str); + n->whereClause = (yyvsp[0].node); + n->excludeOpNames = NIL; + n->idxcomment = NULL; + n->indexOid = InvalidOid; + n->oldNode = InvalidOid; + n->oldCreateSubid = InvalidSubTransactionId; + n->oldFirstRelfilenodeSubid = InvalidSubTransactionId; + n->primary = false; + n->isconstraint = false; + n->deferrable = false; + n->initdeferred = false; + n->transformed = false; + n->if_not_exists = true; + n->reset_default_tblspc = false; + (yyval.node) = (Node *)n; + } +#line 36180 "gram.c" + break; + + case 1050: /* opt_unique: UNIQUE */ +#line 7372 "gram.y" + { (yyval.boolean) = true; } +#line 36186 "gram.c" + break; + + case 1051: /* opt_unique: %empty */ +#line 7373 "gram.y" + { (yyval.boolean) = false; } +#line 36192 "gram.c" + break; + + case 1052: /* opt_concurrently: CONCURRENTLY */ +#line 7377 "gram.y" + { (yyval.boolean) = true; } +#line 36198 "gram.c" + break; + + case 1053: /* opt_concurrently: %empty */ +#line 7378 "gram.y" + { (yyval.boolean) = false; } +#line 36204 "gram.c" + break; + + case 1054: /* opt_index_name: name */ +#line 7382 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 36210 "gram.c" + break; + + case 1055: /* opt_index_name: %empty */ +#line 7383 "gram.y" + { (yyval.str) = NULL; } +#line 36216 "gram.c" + break; + + case 1056: /* access_method_clause: USING name */ +#line 7387 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 36222 "gram.c" + break; + + case 1057: /* access_method_clause: %empty */ +#line 7388 "gram.y" + { (yyval.str) = DEFAULT_INDEX_TYPE; } +#line 36228 "gram.c" + break; + + case 1058: /* index_params: index_elem */ +#line 7391 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].ielem)); } +#line 36234 "gram.c" + break; + + case 1059: /* index_params: index_params ',' index_elem */ +#line 7392 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].ielem)); } +#line 36240 "gram.c" + break; + + case 1060: /* index_elem_options: opt_collate opt_class opt_asc_desc opt_nulls_order */ +#line 7398 "gram.y" + { + (yyval.ielem) = makeNode(IndexElem); + (yyval.ielem)->name = NULL; + (yyval.ielem)->expr = NULL; + (yyval.ielem)->indexcolname = NULL; + (yyval.ielem)->collation = (yyvsp[-3].list); + (yyval.ielem)->opclass = (yyvsp[-2].list); + (yyval.ielem)->opclassopts = NIL; + (yyval.ielem)->ordering = (yyvsp[-1].ival); + (yyval.ielem)->nulls_ordering = (yyvsp[0].ival); + } +#line 36256 "gram.c" + break; + + case 1061: /* index_elem_options: opt_collate any_name reloptions opt_asc_desc opt_nulls_order */ +#line 7410 "gram.y" + { + (yyval.ielem) = makeNode(IndexElem); + (yyval.ielem)->name = NULL; + (yyval.ielem)->expr = NULL; + (yyval.ielem)->indexcolname = NULL; + (yyval.ielem)->collation = (yyvsp[-4].list); + (yyval.ielem)->opclass = (yyvsp[-3].list); + (yyval.ielem)->opclassopts = (yyvsp[-2].list); + (yyval.ielem)->ordering = (yyvsp[-1].ival); + (yyval.ielem)->nulls_ordering = (yyvsp[0].ival); + } +#line 36272 "gram.c" + break; + + case 1062: /* index_elem: ColId index_elem_options */ +#line 7429 "gram.y" + { + (yyval.ielem) = (yyvsp[0].ielem); + (yyval.ielem)->name = (yyvsp[-1].str); + } +#line 36281 "gram.c" + break; + + case 1063: /* index_elem: func_expr_windowless index_elem_options */ +#line 7434 "gram.y" + { + (yyval.ielem) = (yyvsp[0].ielem); + (yyval.ielem)->expr = (yyvsp[-1].node); + } +#line 36290 "gram.c" + break; + + case 1064: /* index_elem: '(' a_expr ')' index_elem_options */ +#line 7439 "gram.y" + { + (yyval.ielem) = (yyvsp[0].ielem); + (yyval.ielem)->expr = (yyvsp[-2].node); + } +#line 36299 "gram.c" + break; + + case 1065: /* opt_include: INCLUDE '(' index_including_params ')' */ +#line 7445 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 36305 "gram.c" + break; + + case 1066: /* opt_include: %empty */ +#line 7446 "gram.y" + { (yyval.list) = NIL; } +#line 36311 "gram.c" + break; + + case 1067: /* index_including_params: index_elem */ +#line 7449 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].ielem)); } +#line 36317 "gram.c" + break; + + case 1068: /* index_including_params: index_including_params ',' index_elem */ +#line 7450 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].ielem)); } +#line 36323 "gram.c" + break; + + case 1069: /* opt_collate: COLLATE any_name */ +#line 7453 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 36329 "gram.c" + break; + + case 1070: /* opt_collate: %empty */ +#line 7454 "gram.y" + { (yyval.list) = NIL; } +#line 36335 "gram.c" + break; + + case 1071: /* opt_class: any_name */ +#line 7457 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 36341 "gram.c" + break; + + case 1072: /* opt_class: %empty */ +#line 7458 "gram.y" + { (yyval.list) = NIL; } +#line 36347 "gram.c" + break; + + case 1073: /* opt_asc_desc: ASC */ +#line 7461 "gram.y" + { (yyval.ival) = SORTBY_ASC; } +#line 36353 "gram.c" + break; + + case 1074: /* opt_asc_desc: DESC */ +#line 7462 "gram.y" + { (yyval.ival) = SORTBY_DESC; } +#line 36359 "gram.c" + break; + + case 1075: /* opt_asc_desc: %empty */ +#line 7463 "gram.y" + { (yyval.ival) = SORTBY_DEFAULT; } +#line 36365 "gram.c" + break; + + case 1076: /* opt_nulls_order: NULLS_LA FIRST_P */ +#line 7466 "gram.y" + { (yyval.ival) = SORTBY_NULLS_FIRST; } +#line 36371 "gram.c" + break; + + case 1077: /* opt_nulls_order: NULLS_LA LAST_P */ +#line 7467 "gram.y" + { (yyval.ival) = SORTBY_NULLS_LAST; } +#line 36377 "gram.c" + break; + + case 1078: /* opt_nulls_order: %empty */ +#line 7468 "gram.y" + { (yyval.ival) = SORTBY_NULLS_DEFAULT; } +#line 36383 "gram.c" + break; + + case 1079: /* CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS func_return opt_createfunc_opt_list opt_routine_body */ +#line 7486 "gram.y" + { + CreateFunctionStmt *n = makeNode(CreateFunctionStmt); + n->is_procedure = false; + n->replace = (yyvsp[-7].boolean); + n->funcname = (yyvsp[-5].list); + n->parameters = (yyvsp[-4].list); + n->returnType = (yyvsp[-2].typnam); + n->options = (yyvsp[-1].list); + n->sql_body = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 36399 "gram.c" + break; + + case 1080: /* CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS TABLE '(' table_func_column_list ')' opt_createfunc_opt_list opt_routine_body */ +#line 7499 "gram.y" + { + CreateFunctionStmt *n = makeNode(CreateFunctionStmt); + n->is_procedure = false; + n->replace = (yyvsp[-10].boolean); + n->funcname = (yyvsp[-8].list); + n->parameters = mergeTableFuncParameters((yyvsp[-7].list), (yyvsp[-3].list)); + n->returnType = TableFuncTypeName((yyvsp[-3].list)); + n->returnType->location = (yylsp[-5]); + n->options = (yyvsp[-1].list); + n->sql_body = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 36416 "gram.c" + break; + + case 1081: /* CreateFunctionStmt: CREATE opt_or_replace FUNCTION func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body */ +#line 7513 "gram.y" + { + CreateFunctionStmt *n = makeNode(CreateFunctionStmt); + n->is_procedure = false; + n->replace = (yyvsp[-5].boolean); + n->funcname = (yyvsp[-3].list); + n->parameters = (yyvsp[-2].list); + n->returnType = NULL; + n->options = (yyvsp[-1].list); + n->sql_body = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 36432 "gram.c" + break; + + case 1082: /* CreateFunctionStmt: CREATE opt_or_replace PROCEDURE func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body */ +#line 7526 "gram.y" + { + CreateFunctionStmt *n = makeNode(CreateFunctionStmt); + n->is_procedure = true; + n->replace = (yyvsp[-5].boolean); + n->funcname = (yyvsp[-3].list); + n->parameters = (yyvsp[-2].list); + n->returnType = NULL; + n->options = (yyvsp[-1].list); + n->sql_body = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 36448 "gram.c" + break; + + case 1083: /* opt_or_replace: OR REPLACE */ +#line 7540 "gram.y" + { (yyval.boolean) = true; } +#line 36454 "gram.c" + break; + + case 1084: /* opt_or_replace: %empty */ +#line 7541 "gram.y" + { (yyval.boolean) = false; } +#line 36460 "gram.c" + break; + + case 1085: /* func_args: '(' func_args_list ')' */ +#line 7544 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 36466 "gram.c" + break; + + case 1086: /* func_args: '(' ')' */ +#line 7545 "gram.y" + { (yyval.list) = NIL; } +#line 36472 "gram.c" + break; + + case 1087: /* func_args_list: func_arg */ +#line 7549 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].fun_param)); } +#line 36478 "gram.c" + break; + + case 1088: /* func_args_list: func_args_list ',' func_arg */ +#line 7550 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].fun_param)); } +#line 36484 "gram.c" + break; + + case 1089: /* function_with_argtypes_list: function_with_argtypes */ +#line 7554 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].objwithargs)); } +#line 36490 "gram.c" + break; + + case 1090: /* function_with_argtypes_list: function_with_argtypes_list ',' function_with_argtypes */ +#line 7556 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].objwithargs)); } +#line 36496 "gram.c" + break; + + case 1091: /* function_with_argtypes: func_name func_args */ +#line 7561 "gram.y" + { + ObjectWithArgs *n = makeNode(ObjectWithArgs); + n->objname = (yyvsp[-1].list); + n->objargs = extractArgTypes((yyvsp[0].list)); + n->objfuncargs = (yyvsp[0].list); + (yyval.objwithargs) = n; + } +#line 36508 "gram.c" + break; + + case 1092: /* function_with_argtypes: type_func_name_keyword */ +#line 7574 "gram.y" + { + ObjectWithArgs *n = makeNode(ObjectWithArgs); + n->objname = list_make1(makeString(pstrdup((yyvsp[0].keyword)))); + n->args_unspecified = true; + (yyval.objwithargs) = n; + } +#line 36519 "gram.c" + break; + + case 1093: /* function_with_argtypes: ColId */ +#line 7581 "gram.y" + { + ObjectWithArgs *n = makeNode(ObjectWithArgs); + n->objname = list_make1(makeString((yyvsp[0].str))); + n->args_unspecified = true; + (yyval.objwithargs) = n; + } +#line 36530 "gram.c" + break; + + case 1094: /* function_with_argtypes: ColId indirection */ +#line 7588 "gram.y" + { + ObjectWithArgs *n = makeNode(ObjectWithArgs); + n->objname = check_func_name(lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)), + yyscanner); + n->args_unspecified = true; + (yyval.objwithargs) = n; + } +#line 36542 "gram.c" + break; + + case 1095: /* func_args_with_defaults: '(' func_args_with_defaults_list ')' */ +#line 7602 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 36548 "gram.c" + break; + + case 1096: /* func_args_with_defaults: '(' ')' */ +#line 7603 "gram.y" + { (yyval.list) = NIL; } +#line 36554 "gram.c" + break; + + case 1097: /* func_args_with_defaults_list: func_arg_with_default */ +#line 7607 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].fun_param)); } +#line 36560 "gram.c" + break; + + case 1098: /* func_args_with_defaults_list: func_args_with_defaults_list ',' func_arg_with_default */ +#line 7609 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].fun_param)); } +#line 36566 "gram.c" + break; + + case 1099: /* func_arg: arg_class param_name func_type */ +#line 7624 "gram.y" + { + FunctionParameter *n = makeNode(FunctionParameter); + n->name = (yyvsp[-1].str); + n->argType = (yyvsp[0].typnam); + n->mode = (yyvsp[-2].fun_param_mode); + n->defexpr = NULL; + (yyval.fun_param) = n; + } +#line 36579 "gram.c" + break; + + case 1100: /* func_arg: param_name arg_class func_type */ +#line 7633 "gram.y" + { + FunctionParameter *n = makeNode(FunctionParameter); + n->name = (yyvsp[-2].str); + n->argType = (yyvsp[0].typnam); + n->mode = (yyvsp[-1].fun_param_mode); + n->defexpr = NULL; + (yyval.fun_param) = n; + } +#line 36592 "gram.c" + break; + + case 1101: /* func_arg: param_name func_type */ +#line 7642 "gram.y" + { + FunctionParameter *n = makeNode(FunctionParameter); + n->name = (yyvsp[-1].str); + n->argType = (yyvsp[0].typnam); + n->mode = FUNC_PARAM_DEFAULT; + n->defexpr = NULL; + (yyval.fun_param) = n; + } +#line 36605 "gram.c" + break; + + case 1102: /* func_arg: arg_class func_type */ +#line 7651 "gram.y" + { + FunctionParameter *n = makeNode(FunctionParameter); + n->name = NULL; + n->argType = (yyvsp[0].typnam); + n->mode = (yyvsp[-1].fun_param_mode); + n->defexpr = NULL; + (yyval.fun_param) = n; + } +#line 36618 "gram.c" + break; + + case 1103: /* func_arg: func_type */ +#line 7660 "gram.y" + { + FunctionParameter *n = makeNode(FunctionParameter); + n->name = NULL; + n->argType = (yyvsp[0].typnam); + n->mode = FUNC_PARAM_DEFAULT; + n->defexpr = NULL; + (yyval.fun_param) = n; + } +#line 36631 "gram.c" + break; + + case 1104: /* arg_class: IN_P */ +#line 7671 "gram.y" + { (yyval.fun_param_mode) = FUNC_PARAM_IN; } +#line 36637 "gram.c" + break; + + case 1105: /* arg_class: OUT_P */ +#line 7672 "gram.y" + { (yyval.fun_param_mode) = FUNC_PARAM_OUT; } +#line 36643 "gram.c" + break; + + case 1106: /* arg_class: INOUT */ +#line 7673 "gram.y" + { (yyval.fun_param_mode) = FUNC_PARAM_INOUT; } +#line 36649 "gram.c" + break; + + case 1107: /* arg_class: IN_P OUT_P */ +#line 7674 "gram.y" + { (yyval.fun_param_mode) = FUNC_PARAM_INOUT; } +#line 36655 "gram.c" + break; + + case 1108: /* arg_class: VARIADIC */ +#line 7675 "gram.y" + { (yyval.fun_param_mode) = FUNC_PARAM_VARIADIC; } +#line 36661 "gram.c" + break; + + case 1110: /* func_return: func_type */ +#line 7686 "gram.y" + { + /* We can catch over-specified results here if we want to, + * but for now better to silently swallow typmod, etc. + * - thomas 2000-03-22 + */ + (yyval.typnam) = (yyvsp[0].typnam); + } +#line 36673 "gram.c" + break; + + case 1111: /* func_type: Typename */ +#line 7700 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 36679 "gram.c" + break; + + case 1112: /* func_type: type_function_name attrs '%' TYPE_P */ +#line 7702 "gram.y" + { + (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[-3].str)), (yyvsp[-2].list))); + (yyval.typnam)->pct_type = true; + (yyval.typnam)->location = (yylsp[-3]); + } +#line 36689 "gram.c" + break; + + case 1113: /* func_type: SETOF type_function_name attrs '%' TYPE_P */ +#line 7708 "gram.y" + { + (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[-3].str)), (yyvsp[-2].list))); + (yyval.typnam)->pct_type = true; + (yyval.typnam)->setof = true; + (yyval.typnam)->location = (yylsp[-3]); + } +#line 36700 "gram.c" + break; + + case 1114: /* func_arg_with_default: func_arg */ +#line 7718 "gram.y" + { + (yyval.fun_param) = (yyvsp[0].fun_param); + } +#line 36708 "gram.c" + break; + + case 1115: /* func_arg_with_default: func_arg DEFAULT a_expr */ +#line 7722 "gram.y" + { + (yyval.fun_param) = (yyvsp[-2].fun_param); + (yyval.fun_param)->defexpr = (yyvsp[0].node); + } +#line 36717 "gram.c" + break; + + case 1116: /* func_arg_with_default: func_arg '=' a_expr */ +#line 7727 "gram.y" + { + (yyval.fun_param) = (yyvsp[-2].fun_param); + (yyval.fun_param)->defexpr = (yyvsp[0].node); + } +#line 36726 "gram.c" + break; + + case 1117: /* aggr_arg: func_arg */ +#line 7735 "gram.y" + { + if (!((yyvsp[0].fun_param)->mode == FUNC_PARAM_DEFAULT || + (yyvsp[0].fun_param)->mode == FUNC_PARAM_IN || + (yyvsp[0].fun_param)->mode == FUNC_PARAM_VARIADIC)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("aggregates cannot have output arguments"), + parser_errposition((yylsp[0])))); + (yyval.fun_param) = (yyvsp[0].fun_param); + } +#line 36741 "gram.c" + break; + + case 1118: /* aggr_args: '(' '*' ')' */ +#line 7777 "gram.y" + { + (yyval.list) = list_make2(NIL, makeInteger(-1)); + } +#line 36749 "gram.c" + break; + + case 1119: /* aggr_args: '(' aggr_args_list ')' */ +#line 7781 "gram.y" + { + (yyval.list) = list_make2((yyvsp[-1].list), makeInteger(-1)); + } +#line 36757 "gram.c" + break; + + case 1120: /* aggr_args: '(' ORDER BY aggr_args_list ')' */ +#line 7785 "gram.y" + { + (yyval.list) = list_make2((yyvsp[-1].list), makeInteger(0)); + } +#line 36765 "gram.c" + break; + + case 1121: /* aggr_args: '(' aggr_args_list ORDER BY aggr_args_list ')' */ +#line 7789 "gram.y" + { + /* this is the only case requiring consistency checking */ + (yyval.list) = makeOrderedSetArgs((yyvsp[-4].list), (yyvsp[-1].list), yyscanner); + } +#line 36774 "gram.c" + break; + + case 1122: /* aggr_args_list: aggr_arg */ +#line 7796 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].fun_param)); } +#line 36780 "gram.c" + break; + + case 1123: /* aggr_args_list: aggr_args_list ',' aggr_arg */ +#line 7797 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].fun_param)); } +#line 36786 "gram.c" + break; + + case 1124: /* aggregate_with_argtypes: func_name aggr_args */ +#line 7802 "gram.y" + { + ObjectWithArgs *n = makeNode(ObjectWithArgs); + n->objname = (yyvsp[-1].list); + n->objargs = extractAggrArgTypes((yyvsp[0].list)); + n->objfuncargs = (List *) linitial((yyvsp[0].list)); + (yyval.objwithargs) = n; + } +#line 36798 "gram.c" + break; + + case 1125: /* aggregate_with_argtypes_list: aggregate_with_argtypes */ +#line 7812 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].objwithargs)); } +#line 36804 "gram.c" + break; + + case 1126: /* aggregate_with_argtypes_list: aggregate_with_argtypes_list ',' aggregate_with_argtypes */ +#line 7814 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].objwithargs)); } +#line 36810 "gram.c" + break; + + case 1128: /* opt_createfunc_opt_list: %empty */ +#line 7819 "gram.y" + { (yyval.list) = NIL; } +#line 36816 "gram.c" + break; + + case 1129: /* createfunc_opt_list: createfunc_opt_item */ +#line 7824 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 36822 "gram.c" + break; + + case 1130: /* createfunc_opt_list: createfunc_opt_list createfunc_opt_item */ +#line 7825 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 36828 "gram.c" + break; + + case 1131: /* common_func_opt_item: CALLED ON NULL_P INPUT_P */ +#line 7833 "gram.y" + { + (yyval.defelt) = makeDefElem("strict", (Node *)makeInteger(false), (yylsp[-3])); + } +#line 36836 "gram.c" + break; + + case 1132: /* common_func_opt_item: RETURNS NULL_P ON NULL_P INPUT_P */ +#line 7837 "gram.y" + { + (yyval.defelt) = makeDefElem("strict", (Node *)makeInteger(true), (yylsp[-4])); + } +#line 36844 "gram.c" + break; + + case 1133: /* common_func_opt_item: STRICT_P */ +#line 7841 "gram.y" + { + (yyval.defelt) = makeDefElem("strict", (Node *)makeInteger(true), (yylsp[0])); + } +#line 36852 "gram.c" + break; + + case 1134: /* common_func_opt_item: IMMUTABLE */ +#line 7845 "gram.y" + { + (yyval.defelt) = makeDefElem("volatility", (Node *)makeString("immutable"), (yylsp[0])); + } +#line 36860 "gram.c" + break; + + case 1135: /* common_func_opt_item: STABLE */ +#line 7849 "gram.y" + { + (yyval.defelt) = makeDefElem("volatility", (Node *)makeString("stable"), (yylsp[0])); + } +#line 36868 "gram.c" + break; + + case 1136: /* common_func_opt_item: VOLATILE */ +#line 7853 "gram.y" + { + (yyval.defelt) = makeDefElem("volatility", (Node *)makeString("volatile"), (yylsp[0])); + } +#line 36876 "gram.c" + break; + + case 1137: /* common_func_opt_item: EXTERNAL SECURITY DEFINER */ +#line 7857 "gram.y" + { + (yyval.defelt) = makeDefElem("security", (Node *)makeInteger(true), (yylsp[-2])); + } +#line 36884 "gram.c" + break; + + case 1138: /* common_func_opt_item: EXTERNAL SECURITY INVOKER */ +#line 7861 "gram.y" + { + (yyval.defelt) = makeDefElem("security", (Node *)makeInteger(false), (yylsp[-2])); + } +#line 36892 "gram.c" + break; + + case 1139: /* common_func_opt_item: SECURITY DEFINER */ +#line 7865 "gram.y" + { + (yyval.defelt) = makeDefElem("security", (Node *)makeInteger(true), (yylsp[-1])); + } +#line 36900 "gram.c" + break; + + case 1140: /* common_func_opt_item: SECURITY INVOKER */ +#line 7869 "gram.y" + { + (yyval.defelt) = makeDefElem("security", (Node *)makeInteger(false), (yylsp[-1])); + } +#line 36908 "gram.c" + break; + + case 1141: /* common_func_opt_item: LEAKPROOF */ +#line 7873 "gram.y" + { + (yyval.defelt) = makeDefElem("leakproof", (Node *)makeInteger(true), (yylsp[0])); + } +#line 36916 "gram.c" + break; + + case 1142: /* common_func_opt_item: NOT LEAKPROOF */ +#line 7877 "gram.y" + { + (yyval.defelt) = makeDefElem("leakproof", (Node *)makeInteger(false), (yylsp[-1])); + } +#line 36924 "gram.c" + break; + + case 1143: /* common_func_opt_item: COST NumericOnly */ +#line 7881 "gram.y" + { + (yyval.defelt) = makeDefElem("cost", (Node *)(yyvsp[0].value), (yylsp[-1])); + } +#line 36932 "gram.c" + break; + + case 1144: /* common_func_opt_item: ROWS NumericOnly */ +#line 7885 "gram.y" + { + (yyval.defelt) = makeDefElem("rows", (Node *)(yyvsp[0].value), (yylsp[-1])); + } +#line 36940 "gram.c" + break; + + case 1145: /* common_func_opt_item: SUPPORT any_name */ +#line 7889 "gram.y" + { + (yyval.defelt) = makeDefElem("support", (Node *)(yyvsp[0].list), (yylsp[-1])); + } +#line 36948 "gram.c" + break; + + case 1146: /* common_func_opt_item: FunctionSetResetClause */ +#line 7893 "gram.y" + { + /* we abuse the normal content of a DefElem here */ + (yyval.defelt) = makeDefElem("set", (Node *)(yyvsp[0].vsetstmt), (yylsp[0])); + } +#line 36957 "gram.c" + break; + + case 1147: /* common_func_opt_item: PARALLEL ColId */ +#line 7898 "gram.y" + { + (yyval.defelt) = makeDefElem("parallel", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 36965 "gram.c" + break; + + case 1148: /* createfunc_opt_item: AS func_as */ +#line 7905 "gram.y" + { + (yyval.defelt) = makeDefElem("as", (Node *)(yyvsp[0].list), (yylsp[-1])); + } +#line 36973 "gram.c" + break; + + case 1149: /* createfunc_opt_item: LANGUAGE NonReservedWord_or_Sconst */ +#line 7909 "gram.y" + { + (yyval.defelt) = makeDefElem("language", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 36981 "gram.c" + break; + + case 1150: /* createfunc_opt_item: TRANSFORM transform_type_list */ +#line 7913 "gram.y" + { + (yyval.defelt) = makeDefElem("transform", (Node *)(yyvsp[0].list), (yylsp[-1])); + } +#line 36989 "gram.c" + break; + + case 1151: /* createfunc_opt_item: WINDOW */ +#line 7917 "gram.y" + { + (yyval.defelt) = makeDefElem("window", (Node *)makeInteger(true), (yylsp[0])); + } +#line 36997 "gram.c" + break; + + case 1152: /* createfunc_opt_item: common_func_opt_item */ +#line 7921 "gram.y" + { + (yyval.defelt) = (yyvsp[0].defelt); + } +#line 37005 "gram.c" + break; + + case 1153: /* func_as: Sconst */ +#line 7926 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 37011 "gram.c" + break; + + case 1154: /* func_as: Sconst ',' Sconst */ +#line 7928 "gram.y" + { + (yyval.list) = list_make2(makeString((yyvsp[-2].str)), makeString((yyvsp[0].str))); + } +#line 37019 "gram.c" + break; + + case 1155: /* ReturnStmt: RETURN a_expr */ +#line 7934 "gram.y" + { + ReturnStmt *r = makeNode(ReturnStmt); + r->returnval = (Node *) (yyvsp[0].node); + (yyval.node) = (Node *) r; + } +#line 37029 "gram.c" + break; + + case 1156: /* opt_routine_body: ReturnStmt */ +#line 7943 "gram.y" + { + (yyval.node) = (yyvsp[0].node); + } +#line 37037 "gram.c" + break; + + case 1157: /* opt_routine_body: BEGIN_P ATOMIC routine_body_stmt_list END_P */ +#line 7947 "gram.y" + { + /* + * A compound statement is stored as a single-item list + * containing the list of statements as its member. That + * way, the parse analysis code can tell apart an empty + * body from no body at all. + */ + (yyval.node) = (Node *) list_make1((yyvsp[-1].list)); + } +#line 37051 "gram.c" + break; + + case 1158: /* opt_routine_body: %empty */ +#line 7957 "gram.y" + { + (yyval.node) = NULL; + } +#line 37059 "gram.c" + break; + + case 1159: /* routine_body_stmt_list: routine_body_stmt_list routine_body_stmt ';' */ +#line 7964 "gram.y" + { + /* As in stmtmulti, discard empty statements */ + if ((yyvsp[-1].node) != NULL) + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[-1].node)); + else + (yyval.list) = (yyvsp[-2].list); + } +#line 37071 "gram.c" + break; + + case 1160: /* routine_body_stmt_list: %empty */ +#line 7972 "gram.y" + { + (yyval.list) = NIL; + } +#line 37079 "gram.c" + break; + + case 1163: /* transform_type_list: FOR TYPE_P Typename */ +#line 7983 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].typnam)); } +#line 37085 "gram.c" + break; + + case 1164: /* transform_type_list: transform_type_list ',' FOR TYPE_P Typename */ +#line 7984 "gram.y" + { (yyval.list) = lappend((yyvsp[-4].list), (yyvsp[0].typnam)); } +#line 37091 "gram.c" + break; + + case 1165: /* opt_definition: WITH definition */ +#line 7988 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 37097 "gram.c" + break; + + case 1166: /* opt_definition: %empty */ +#line 7989 "gram.y" + { (yyval.list) = NIL; } +#line 37103 "gram.c" + break; + + case 1167: /* table_func_column: param_name func_type */ +#line 7993 "gram.y" + { + FunctionParameter *n = makeNode(FunctionParameter); + n->name = (yyvsp[-1].str); + n->argType = (yyvsp[0].typnam); + n->mode = FUNC_PARAM_TABLE; + n->defexpr = NULL; + (yyval.fun_param) = n; + } +#line 37116 "gram.c" + break; + + case 1168: /* table_func_column_list: table_func_column */ +#line 8005 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].fun_param)); + } +#line 37124 "gram.c" + break; + + case 1169: /* table_func_column_list: table_func_column_list ',' table_func_column */ +#line 8009 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].fun_param)); + } +#line 37132 "gram.c" + break; + + case 1170: /* AlterFunctionStmt: ALTER FUNCTION function_with_argtypes alterfunc_opt_list opt_restrict */ +#line 8024 "gram.y" + { + AlterFunctionStmt *n = makeNode(AlterFunctionStmt); + n->objtype = OBJECT_FUNCTION; + n->func = (yyvsp[-2].objwithargs); + n->actions = (yyvsp[-1].list); + (yyval.node) = (Node *) n; + } +#line 37144 "gram.c" + break; + + case 1171: /* AlterFunctionStmt: ALTER PROCEDURE function_with_argtypes alterfunc_opt_list opt_restrict */ +#line 8032 "gram.y" + { + AlterFunctionStmt *n = makeNode(AlterFunctionStmt); + n->objtype = OBJECT_PROCEDURE; + n->func = (yyvsp[-2].objwithargs); + n->actions = (yyvsp[-1].list); + (yyval.node) = (Node *) n; + } +#line 37156 "gram.c" + break; + + case 1172: /* AlterFunctionStmt: ALTER ROUTINE function_with_argtypes alterfunc_opt_list opt_restrict */ +#line 8040 "gram.y" + { + AlterFunctionStmt *n = makeNode(AlterFunctionStmt); + n->objtype = OBJECT_ROUTINE; + n->func = (yyvsp[-2].objwithargs); + n->actions = (yyvsp[-1].list); + (yyval.node) = (Node *) n; + } +#line 37168 "gram.c" + break; + + case 1173: /* alterfunc_opt_list: common_func_opt_item */ +#line 8051 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 37174 "gram.c" + break; + + case 1174: /* alterfunc_opt_list: alterfunc_opt_list common_func_opt_item */ +#line 8052 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 37180 "gram.c" + break; + + case 1177: /* RemoveFuncStmt: DROP FUNCTION function_with_argtypes_list opt_drop_behavior */ +#line 8076 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_FUNCTION; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37194 "gram.c" + break; + + case 1178: /* RemoveFuncStmt: DROP FUNCTION IF_P EXISTS function_with_argtypes_list opt_drop_behavior */ +#line 8086 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_FUNCTION; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37208 "gram.c" + break; + + case 1179: /* RemoveFuncStmt: DROP PROCEDURE function_with_argtypes_list opt_drop_behavior */ +#line 8096 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_PROCEDURE; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37222 "gram.c" + break; + + case 1180: /* RemoveFuncStmt: DROP PROCEDURE IF_P EXISTS function_with_argtypes_list opt_drop_behavior */ +#line 8106 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_PROCEDURE; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37236 "gram.c" + break; + + case 1181: /* RemoveFuncStmt: DROP ROUTINE function_with_argtypes_list opt_drop_behavior */ +#line 8116 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_ROUTINE; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37250 "gram.c" + break; + + case 1182: /* RemoveFuncStmt: DROP ROUTINE IF_P EXISTS function_with_argtypes_list opt_drop_behavior */ +#line 8126 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_ROUTINE; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37264 "gram.c" + break; + + case 1183: /* RemoveAggrStmt: DROP AGGREGATE aggregate_with_argtypes_list opt_drop_behavior */ +#line 8139 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_AGGREGATE; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37278 "gram.c" + break; + + case 1184: /* RemoveAggrStmt: DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes_list opt_drop_behavior */ +#line 8149 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_AGGREGATE; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37292 "gram.c" + break; + + case 1185: /* RemoveOperStmt: DROP OPERATOR operator_with_argtypes_list opt_drop_behavior */ +#line 8162 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_OPERATOR; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37306 "gram.c" + break; + + case 1186: /* RemoveOperStmt: DROP OPERATOR IF_P EXISTS operator_with_argtypes_list opt_drop_behavior */ +#line 8172 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_OPERATOR; + n->objects = (yyvsp[-1].list); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37320 "gram.c" + break; + + case 1187: /* oper_argtypes: '(' Typename ')' */ +#line 8185 "gram.y" + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("missing argument"), + errhint("Use NONE to denote the missing argument of a unary operator."), + parser_errposition((yylsp[0])))); + } +#line 37332 "gram.c" + break; + + case 1188: /* oper_argtypes: '(' Typename ',' Typename ')' */ +#line 8193 "gram.y" + { (yyval.list) = list_make2((yyvsp[-3].typnam), (yyvsp[-1].typnam)); } +#line 37338 "gram.c" + break; + + case 1189: /* oper_argtypes: '(' NONE ',' Typename ')' */ +#line 8195 "gram.y" + { (yyval.list) = list_make2(NULL, (yyvsp[-1].typnam)); } +#line 37344 "gram.c" + break; + + case 1190: /* oper_argtypes: '(' Typename ',' NONE ')' */ +#line 8197 "gram.y" + { (yyval.list) = list_make2((yyvsp[-3].typnam), NULL); } +#line 37350 "gram.c" + break; + + case 1191: /* any_operator: all_Op */ +#line 8202 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 37356 "gram.c" + break; + + case 1192: /* any_operator: ColId '.' any_operator */ +#line 8204 "gram.y" + { (yyval.list) = lcons(makeString((yyvsp[-2].str)), (yyvsp[0].list)); } +#line 37362 "gram.c" + break; + + case 1193: /* operator_with_argtypes_list: operator_with_argtypes */ +#line 8208 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].objwithargs)); } +#line 37368 "gram.c" + break; + + case 1194: /* operator_with_argtypes_list: operator_with_argtypes_list ',' operator_with_argtypes */ +#line 8210 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].objwithargs)); } +#line 37374 "gram.c" + break; + + case 1195: /* operator_with_argtypes: any_operator oper_argtypes */ +#line 8215 "gram.y" + { + ObjectWithArgs *n = makeNode(ObjectWithArgs); + n->objname = (yyvsp[-1].list); + n->objargs = (yyvsp[0].list); + (yyval.objwithargs) = n; + } +#line 37385 "gram.c" + break; + + case 1196: /* DoStmt: DO dostmt_opt_list */ +#line 8233 "gram.y" + { + DoStmt *n = makeNode(DoStmt); + n->args = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 37395 "gram.c" + break; + + case 1197: /* dostmt_opt_list: dostmt_opt_item */ +#line 8241 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 37401 "gram.c" + break; + + case 1198: /* dostmt_opt_list: dostmt_opt_list dostmt_opt_item */ +#line 8242 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 37407 "gram.c" + break; + + case 1199: /* dostmt_opt_item: Sconst */ +#line 8247 "gram.y" + { + (yyval.defelt) = makeDefElem("as", (Node *)makeString((yyvsp[0].str)), (yylsp[0])); + } +#line 37415 "gram.c" + break; + + case 1200: /* dostmt_opt_item: LANGUAGE NonReservedWord_or_Sconst */ +#line 8251 "gram.y" + { + (yyval.defelt) = makeDefElem("language", (Node *)makeString((yyvsp[0].str)), (yylsp[-1])); + } +#line 37423 "gram.c" + break; + + case 1201: /* CreateCastStmt: CREATE CAST '(' Typename AS Typename ')' WITH FUNCTION function_with_argtypes cast_context */ +#line 8264 "gram.y" + { + CreateCastStmt *n = makeNode(CreateCastStmt); + n->sourcetype = (yyvsp[-7].typnam); + n->targettype = (yyvsp[-5].typnam); + n->func = (yyvsp[-1].objwithargs); + n->context = (CoercionContext) (yyvsp[0].ival); + n->inout = false; + (yyval.node) = (Node *)n; + } +#line 37437 "gram.c" + break; + + case 1202: /* CreateCastStmt: CREATE CAST '(' Typename AS Typename ')' WITHOUT FUNCTION cast_context */ +#line 8275 "gram.y" + { + CreateCastStmt *n = makeNode(CreateCastStmt); + n->sourcetype = (yyvsp[-6].typnam); + n->targettype = (yyvsp[-4].typnam); + n->func = NULL; + n->context = (CoercionContext) (yyvsp[0].ival); + n->inout = false; + (yyval.node) = (Node *)n; + } +#line 37451 "gram.c" + break; + + case 1203: /* CreateCastStmt: CREATE CAST '(' Typename AS Typename ')' WITH INOUT cast_context */ +#line 8286 "gram.y" + { + CreateCastStmt *n = makeNode(CreateCastStmt); + n->sourcetype = (yyvsp[-6].typnam); + n->targettype = (yyvsp[-4].typnam); + n->func = NULL; + n->context = (CoercionContext) (yyvsp[0].ival); + n->inout = true; + (yyval.node) = (Node *)n; + } +#line 37465 "gram.c" + break; + + case 1204: /* cast_context: AS IMPLICIT_P */ +#line 8297 "gram.y" + { (yyval.ival) = COERCION_IMPLICIT; } +#line 37471 "gram.c" + break; + + case 1205: /* cast_context: AS ASSIGNMENT */ +#line 8298 "gram.y" + { (yyval.ival) = COERCION_ASSIGNMENT; } +#line 37477 "gram.c" + break; + + case 1206: /* cast_context: %empty */ +#line 8299 "gram.y" + { (yyval.ival) = COERCION_EXPLICIT; } +#line 37483 "gram.c" + break; + + case 1207: /* DropCastStmt: DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_behavior */ +#line 8304 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_CAST; + n->objects = list_make1(list_make2((yyvsp[-4].typnam), (yyvsp[-2].typnam))); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = (yyvsp[-6].boolean); + n->concurrent = false; + (yyval.node) = (Node *)n; + } +#line 37497 "gram.c" + break; + + case 1208: /* opt_if_exists: IF_P EXISTS */ +#line 8315 "gram.y" + { (yyval.boolean) = true; } +#line 37503 "gram.c" + break; + + case 1209: /* opt_if_exists: %empty */ +#line 8316 "gram.y" + { (yyval.boolean) = false; } +#line 37509 "gram.c" + break; + + case 1210: /* CreateTransformStmt: CREATE opt_or_replace TRANSFORM FOR Typename LANGUAGE name '(' transform_element_list ')' */ +#line 8327 "gram.y" + { + CreateTransformStmt *n = makeNode(CreateTransformStmt); + n->replace = (yyvsp[-8].boolean); + n->type_name = (yyvsp[-5].typnam); + n->lang = (yyvsp[-3].str); + n->fromsql = linitial((yyvsp[-1].list)); + n->tosql = lsecond((yyvsp[-1].list)); + (yyval.node) = (Node *)n; + } +#line 37523 "gram.c" + break; + + case 1211: /* transform_element_list: FROM SQL_P WITH FUNCTION function_with_argtypes ',' TO SQL_P WITH FUNCTION function_with_argtypes */ +#line 8339 "gram.y" + { + (yyval.list) = list_make2((yyvsp[-6].objwithargs), (yyvsp[0].objwithargs)); + } +#line 37531 "gram.c" + break; + + case 1212: /* transform_element_list: TO SQL_P WITH FUNCTION function_with_argtypes ',' FROM SQL_P WITH FUNCTION function_with_argtypes */ +#line 8343 "gram.y" + { + (yyval.list) = list_make2((yyvsp[0].objwithargs), (yyvsp[-6].objwithargs)); + } +#line 37539 "gram.c" + break; + + case 1213: /* transform_element_list: FROM SQL_P WITH FUNCTION function_with_argtypes */ +#line 8347 "gram.y" + { + (yyval.list) = list_make2((yyvsp[0].objwithargs), NULL); + } +#line 37547 "gram.c" + break; + + case 1214: /* transform_element_list: TO SQL_P WITH FUNCTION function_with_argtypes */ +#line 8351 "gram.y" + { + (yyval.list) = list_make2(NULL, (yyvsp[0].objwithargs)); + } +#line 37555 "gram.c" + break; + + case 1215: /* DropTransformStmt: DROP TRANSFORM opt_if_exists FOR Typename LANGUAGE name opt_drop_behavior */ +#line 8358 "gram.y" + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_TRANSFORM; + n->objects = list_make1(list_make2((yyvsp[-3].typnam), makeString((yyvsp[-1].str)))); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = (yyvsp[-5].boolean); + (yyval.node) = (Node *)n; + } +#line 37568 "gram.c" + break; + + case 1216: /* ReindexStmt: REINDEX reindex_target_type opt_concurrently qualified_name */ +#line 8378 "gram.y" + { + ReindexStmt *n = makeNode(ReindexStmt); + n->kind = (yyvsp[-2].ival); + n->relation = (yyvsp[0].range); + n->name = NULL; + n->params = NIL; + if ((yyvsp[-1].boolean)) + n->params = lappend(n->params, + makeDefElem("concurrently", NULL, (yylsp[-1]))); + (yyval.node) = (Node *)n; + } +#line 37584 "gram.c" + break; + + case 1217: /* ReindexStmt: REINDEX reindex_target_multitable opt_concurrently name */ +#line 8390 "gram.y" + { + ReindexStmt *n = makeNode(ReindexStmt); + n->kind = (yyvsp[-2].ival); + n->name = (yyvsp[0].str); + n->relation = NULL; + n->params = NIL; + if ((yyvsp[-1].boolean)) + n->params = lappend(n->params, + makeDefElem("concurrently", NULL, (yylsp[-1]))); + (yyval.node) = (Node *)n; + } +#line 37600 "gram.c" + break; + + case 1218: /* ReindexStmt: REINDEX '(' utility_option_list ')' reindex_target_type opt_concurrently qualified_name */ +#line 8402 "gram.y" + { + ReindexStmt *n = makeNode(ReindexStmt); + n->kind = (yyvsp[-2].ival); + n->relation = (yyvsp[0].range); + n->name = NULL; + n->params = (yyvsp[-4].list); + if ((yyvsp[-1].boolean)) + n->params = lappend(n->params, + makeDefElem("concurrently", NULL, (yylsp[-1]))); + (yyval.node) = (Node *)n; + } +#line 37616 "gram.c" + break; + + case 1219: /* ReindexStmt: REINDEX '(' utility_option_list ')' reindex_target_multitable opt_concurrently name */ +#line 8414 "gram.y" + { + ReindexStmt *n = makeNode(ReindexStmt); + n->kind = (yyvsp[-2].ival); + n->name = (yyvsp[0].str); + n->relation = NULL; + n->params = (yyvsp[-4].list); + if ((yyvsp[-1].boolean)) + n->params = lappend(n->params, + makeDefElem("concurrently", NULL, (yylsp[-1]))); + (yyval.node) = (Node *)n; + } +#line 37632 "gram.c" + break; + + case 1220: /* reindex_target_type: INDEX */ +#line 8427 "gram.y" + { (yyval.ival) = REINDEX_OBJECT_INDEX; } +#line 37638 "gram.c" + break; + + case 1221: /* reindex_target_type: TABLE */ +#line 8428 "gram.y" + { (yyval.ival) = REINDEX_OBJECT_TABLE; } +#line 37644 "gram.c" + break; + + case 1222: /* reindex_target_multitable: SCHEMA */ +#line 8431 "gram.y" + { (yyval.ival) = REINDEX_OBJECT_SCHEMA; } +#line 37650 "gram.c" + break; + + case 1223: /* reindex_target_multitable: SYSTEM_P */ +#line 8432 "gram.y" + { (yyval.ival) = REINDEX_OBJECT_SYSTEM; } +#line 37656 "gram.c" + break; + + case 1224: /* reindex_target_multitable: DATABASE */ +#line 8433 "gram.y" + { (yyval.ival) = REINDEX_OBJECT_DATABASE; } +#line 37662 "gram.c" + break; + + case 1225: /* AlterTblSpcStmt: ALTER TABLESPACE name SET reloptions */ +#line 8444 "gram.y" + { + AlterTableSpaceOptionsStmt *n = + makeNode(AlterTableSpaceOptionsStmt); + n->tablespacename = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + n->isReset = false; + (yyval.node) = (Node *)n; + } +#line 37675 "gram.c" + break; + + case 1226: /* AlterTblSpcStmt: ALTER TABLESPACE name RESET reloptions */ +#line 8453 "gram.y" + { + AlterTableSpaceOptionsStmt *n = + makeNode(AlterTableSpaceOptionsStmt); + n->tablespacename = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + n->isReset = true; + (yyval.node) = (Node *)n; + } +#line 37688 "gram.c" + break; + + case 1227: /* RenameStmt: ALTER AGGREGATE aggregate_with_argtypes RENAME TO name */ +#line 8470 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_AGGREGATE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37701 "gram.c" + break; + + case 1228: /* RenameStmt: ALTER COLLATION any_name RENAME TO name */ +#line 8479 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLLATION; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37714 "gram.c" + break; + + case 1229: /* RenameStmt: ALTER CONVERSION_P any_name RENAME TO name */ +#line 8488 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_CONVERSION; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37727 "gram.c" + break; + + case 1230: /* RenameStmt: ALTER DATABASE name RENAME TO name */ +#line 8497 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_DATABASE; + n->subname = (yyvsp[-3].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37740 "gram.c" + break; + + case 1231: /* RenameStmt: ALTER DOMAIN_P any_name RENAME TO name */ +#line 8506 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_DOMAIN; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37753 "gram.c" + break; + + case 1232: /* RenameStmt: ALTER DOMAIN_P any_name RENAME CONSTRAINT name TO name */ +#line 8515 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_DOMCONSTRAINT; + n->object = (Node *) (yyvsp[-5].list); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 37766 "gram.c" + break; + + case 1233: /* RenameStmt: ALTER FOREIGN DATA_P WRAPPER name RENAME TO name */ +#line 8524 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_FDW; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37779 "gram.c" + break; + + case 1234: /* RenameStmt: ALTER FUNCTION function_with_argtypes RENAME TO name */ +#line 8533 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_FUNCTION; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37792 "gram.c" + break; + + case 1235: /* RenameStmt: ALTER GROUP_P RoleId RENAME TO RoleId */ +#line 8542 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_ROLE; + n->subname = (yyvsp[-3].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37805 "gram.c" + break; + + case 1236: /* RenameStmt: ALTER opt_procedural LANGUAGE name RENAME TO name */ +#line 8551 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_LANGUAGE; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37818 "gram.c" + break; + + case 1237: /* RenameStmt: ALTER OPERATOR CLASS any_name USING name RENAME TO name */ +#line 8560 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_OPCLASS; + n->object = (Node *) lcons(makeString((yyvsp[-3].str)), (yyvsp[-5].list)); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37831 "gram.c" + break; + + case 1238: /* RenameStmt: ALTER OPERATOR FAMILY any_name USING name RENAME TO name */ +#line 8569 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_OPFAMILY; + n->object = (Node *) lcons(makeString((yyvsp[-3].str)), (yyvsp[-5].list)); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37844 "gram.c" + break; + + case 1239: /* RenameStmt: ALTER POLICY name ON qualified_name RENAME TO name */ +#line 8578 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_POLICY; + n->relation = (yyvsp[-3].range); + n->subname = (yyvsp[-5].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37858 "gram.c" + break; + + case 1240: /* RenameStmt: ALTER POLICY IF_P EXISTS name ON qualified_name RENAME TO name */ +#line 8588 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_POLICY; + n->relation = (yyvsp[-3].range); + n->subname = (yyvsp[-5].str); + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 37872 "gram.c" + break; + + case 1241: /* RenameStmt: ALTER PROCEDURE function_with_argtypes RENAME TO name */ +#line 8598 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_PROCEDURE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37885 "gram.c" + break; + + case 1242: /* RenameStmt: ALTER PUBLICATION name RENAME TO name */ +#line 8607 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_PUBLICATION; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37898 "gram.c" + break; + + case 1243: /* RenameStmt: ALTER ROUTINE function_with_argtypes RENAME TO name */ +#line 8616 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_ROUTINE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37911 "gram.c" + break; + + case 1244: /* RenameStmt: ALTER SCHEMA name RENAME TO name */ +#line 8625 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_SCHEMA; + n->subname = (yyvsp[-3].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37924 "gram.c" + break; + + case 1245: /* RenameStmt: ALTER SERVER name RENAME TO name */ +#line 8634 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_FOREIGN_SERVER; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37937 "gram.c" + break; + + case 1246: /* RenameStmt: ALTER SUBSCRIPTION name RENAME TO name */ +#line 8643 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_SUBSCRIPTION; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37950 "gram.c" + break; + + case 1247: /* RenameStmt: ALTER TABLE relation_expr RENAME TO name */ +#line 8652 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TABLE; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37964 "gram.c" + break; + + case 1248: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME TO name */ +#line 8662 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TABLE; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 37978 "gram.c" + break; + + case 1249: /* RenameStmt: ALTER SEQUENCE qualified_name RENAME TO name */ +#line 8672 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_SEQUENCE; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 37992 "gram.c" + break; + + case 1250: /* RenameStmt: ALTER SEQUENCE IF_P EXISTS qualified_name RENAME TO name */ +#line 8682 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_SEQUENCE; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38006 "gram.c" + break; + + case 1251: /* RenameStmt: ALTER VIEW qualified_name RENAME TO name */ +#line 8692 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_VIEW; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38020 "gram.c" + break; + + case 1252: /* RenameStmt: ALTER VIEW IF_P EXISTS qualified_name RENAME TO name */ +#line 8702 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_VIEW; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38034 "gram.c" + break; + + case 1253: /* RenameStmt: ALTER MATERIALIZED VIEW qualified_name RENAME TO name */ +#line 8712 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_MATVIEW; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38048 "gram.c" + break; + + case 1254: /* RenameStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME TO name */ +#line 8722 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_MATVIEW; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38062 "gram.c" + break; + + case 1255: /* RenameStmt: ALTER INDEX qualified_name RENAME TO name */ +#line 8732 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_INDEX; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38076 "gram.c" + break; + + case 1256: /* RenameStmt: ALTER INDEX IF_P EXISTS qualified_name RENAME TO name */ +#line 8742 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_INDEX; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38090 "gram.c" + break; + + case 1257: /* RenameStmt: ALTER FOREIGN TABLE relation_expr RENAME TO name */ +#line 8752 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_FOREIGN_TABLE; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38104 "gram.c" + break; + + case 1258: /* RenameStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME TO name */ +#line 8762 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_FOREIGN_TABLE; + n->relation = (yyvsp[-3].range); + n->subname = NULL; + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38118 "gram.c" + break; + + case 1259: /* RenameStmt: ALTER TABLE relation_expr RENAME opt_column name TO name */ +#line 8772 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_TABLE; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38133 "gram.c" + break; + + case 1260: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name */ +#line 8783 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_TABLE; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38148 "gram.c" + break; + + case 1261: /* RenameStmt: ALTER VIEW qualified_name RENAME opt_column name TO name */ +#line 8794 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_VIEW; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38163 "gram.c" + break; + + case 1262: /* RenameStmt: ALTER VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name */ +#line 8805 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_VIEW; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38178 "gram.c" + break; + + case 1263: /* RenameStmt: ALTER MATERIALIZED VIEW qualified_name RENAME opt_column name TO name */ +#line 8816 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_MATVIEW; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38193 "gram.c" + break; + + case 1264: /* RenameStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name */ +#line 8827 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_MATVIEW; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38208 "gram.c" + break; + + case 1265: /* RenameStmt: ALTER TABLE relation_expr RENAME CONSTRAINT name TO name */ +#line 8838 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TABCONSTRAINT; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38222 "gram.c" + break; + + case 1266: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name */ +#line 8848 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TABCONSTRAINT; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38236 "gram.c" + break; + + case 1267: /* RenameStmt: ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name */ +#line 8858 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_FOREIGN_TABLE; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38251 "gram.c" + break; + + case 1268: /* RenameStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name */ +#line 8869 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_FOREIGN_TABLE; + n->relation = (yyvsp[-5].range); + n->subname = (yyvsp[-2].str); + n->newname = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38266 "gram.c" + break; + + case 1269: /* RenameStmt: ALTER RULE name ON qualified_name RENAME TO name */ +#line 8880 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_RULE; + n->relation = (yyvsp[-3].range); + n->subname = (yyvsp[-5].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38280 "gram.c" + break; + + case 1270: /* RenameStmt: ALTER TRIGGER name ON qualified_name RENAME TO name */ +#line 8890 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TRIGGER; + n->relation = (yyvsp[-3].range); + n->subname = (yyvsp[-5].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38294 "gram.c" + break; + + case 1271: /* RenameStmt: ALTER EVENT TRIGGER name RENAME TO name */ +#line 8900 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_EVENT_TRIGGER; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newname = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 38306 "gram.c" + break; + + case 1272: /* RenameStmt: ALTER ROLE RoleId RENAME TO RoleId */ +#line 8908 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_ROLE; + n->subname = (yyvsp[-3].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38319 "gram.c" + break; + + case 1273: /* RenameStmt: ALTER USER RoleId RENAME TO RoleId */ +#line 8917 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_ROLE; + n->subname = (yyvsp[-3].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38332 "gram.c" + break; + + case 1274: /* RenameStmt: ALTER TABLESPACE name RENAME TO name */ +#line 8926 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TABLESPACE; + n->subname = (yyvsp[-3].str); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38345 "gram.c" + break; + + case 1275: /* RenameStmt: ALTER STATISTICS any_name RENAME TO name */ +#line 8935 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_STATISTIC_EXT; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38358 "gram.c" + break; + + case 1276: /* RenameStmt: ALTER TEXT_P SEARCH PARSER any_name RENAME TO name */ +#line 8944 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TSPARSER; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38371 "gram.c" + break; + + case 1277: /* RenameStmt: ALTER TEXT_P SEARCH DICTIONARY any_name RENAME TO name */ +#line 8953 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TSDICTIONARY; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38384 "gram.c" + break; + + case 1278: /* RenameStmt: ALTER TEXT_P SEARCH TEMPLATE any_name RENAME TO name */ +#line 8962 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TSTEMPLATE; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38397 "gram.c" + break; + + case 1279: /* RenameStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name RENAME TO name */ +#line 8971 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TSCONFIGURATION; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38410 "gram.c" + break; + + case 1280: /* RenameStmt: ALTER TYPE_P any_name RENAME TO name */ +#line 8980 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TYPE; + n->object = (Node *) (yyvsp[-3].list); + n->newname = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38423 "gram.c" + break; + + case 1281: /* RenameStmt: ALTER TYPE_P any_name RENAME ATTRIBUTE name TO name opt_drop_behavior */ +#line 8989 "gram.y" + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_ATTRIBUTE; + n->relationType = OBJECT_TYPE; + n->relation = makeRangeVarFromAnyName((yyvsp[-6].list), (yylsp[-6]), yyscanner); + n->subname = (yyvsp[-3].str); + n->newname = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38439 "gram.c" + break; + + case 1284: /* opt_set_data: SET DATA_P */ +#line 9006 "gram.y" + { (yyval.ival) = 1; } +#line 38445 "gram.c" + break; + + case 1285: /* opt_set_data: %empty */ +#line 9007 "gram.y" + { (yyval.ival) = 0; } +#line 38451 "gram.c" + break; + + case 1286: /* AlterObjectDependsStmt: ALTER FUNCTION function_with_argtypes opt_no DEPENDS ON EXTENSION name */ +#line 9018 "gram.y" + { + AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); + n->objectType = OBJECT_FUNCTION; + n->object = (Node *) (yyvsp[-5].objwithargs); + n->extname = makeString((yyvsp[0].str)); + n->remove = (yyvsp[-4].boolean); + (yyval.node) = (Node *)n; + } +#line 38464 "gram.c" + break; + + case 1287: /* AlterObjectDependsStmt: ALTER PROCEDURE function_with_argtypes opt_no DEPENDS ON EXTENSION name */ +#line 9027 "gram.y" + { + AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); + n->objectType = OBJECT_PROCEDURE; + n->object = (Node *) (yyvsp[-5].objwithargs); + n->extname = makeString((yyvsp[0].str)); + n->remove = (yyvsp[-4].boolean); + (yyval.node) = (Node *)n; + } +#line 38477 "gram.c" + break; + + case 1288: /* AlterObjectDependsStmt: ALTER ROUTINE function_with_argtypes opt_no DEPENDS ON EXTENSION name */ +#line 9036 "gram.y" + { + AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); + n->objectType = OBJECT_ROUTINE; + n->object = (Node *) (yyvsp[-5].objwithargs); + n->extname = makeString((yyvsp[0].str)); + n->remove = (yyvsp[-4].boolean); + (yyval.node) = (Node *)n; + } +#line 38490 "gram.c" + break; + + case 1289: /* AlterObjectDependsStmt: ALTER TRIGGER name ON qualified_name opt_no DEPENDS ON EXTENSION name */ +#line 9045 "gram.y" + { + AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); + n->objectType = OBJECT_TRIGGER; + n->relation = (yyvsp[-5].range); + n->object = (Node *) list_make1(makeString((yyvsp[-7].str))); + n->extname = makeString((yyvsp[0].str)); + n->remove = (yyvsp[-4].boolean); + (yyval.node) = (Node *)n; + } +#line 38504 "gram.c" + break; + + case 1290: /* AlterObjectDependsStmt: ALTER MATERIALIZED VIEW qualified_name opt_no DEPENDS ON EXTENSION name */ +#line 9055 "gram.y" + { + AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); + n->objectType = OBJECT_MATVIEW; + n->relation = (yyvsp[-5].range); + n->extname = makeString((yyvsp[0].str)); + n->remove = (yyvsp[-4].boolean); + (yyval.node) = (Node *)n; + } +#line 38517 "gram.c" + break; + + case 1291: /* AlterObjectDependsStmt: ALTER INDEX qualified_name opt_no DEPENDS ON EXTENSION name */ +#line 9064 "gram.y" + { + AlterObjectDependsStmt *n = makeNode(AlterObjectDependsStmt); + n->objectType = OBJECT_INDEX; + n->relation = (yyvsp[-5].range); + n->extname = makeString((yyvsp[0].str)); + n->remove = (yyvsp[-4].boolean); + (yyval.node) = (Node *)n; + } +#line 38530 "gram.c" + break; + + case 1292: /* opt_no: NO */ +#line 9074 "gram.y" + { (yyval.boolean) = true; } +#line 38536 "gram.c" + break; + + case 1293: /* opt_no: %empty */ +#line 9075 "gram.y" + { (yyval.boolean) = false; } +#line 38542 "gram.c" + break; + + case 1294: /* AlterObjectSchemaStmt: ALTER AGGREGATE aggregate_with_argtypes SET SCHEMA name */ +#line 9086 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_AGGREGATE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38555 "gram.c" + break; + + case 1295: /* AlterObjectSchemaStmt: ALTER COLLATION any_name SET SCHEMA name */ +#line 9095 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_COLLATION; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38568 "gram.c" + break; + + case 1296: /* AlterObjectSchemaStmt: ALTER CONVERSION_P any_name SET SCHEMA name */ +#line 9104 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_CONVERSION; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38581 "gram.c" + break; + + case 1297: /* AlterObjectSchemaStmt: ALTER DOMAIN_P any_name SET SCHEMA name */ +#line 9113 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_DOMAIN; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38594 "gram.c" + break; + + case 1298: /* AlterObjectSchemaStmt: ALTER EXTENSION name SET SCHEMA name */ +#line 9122 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_EXTENSION; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38607 "gram.c" + break; + + case 1299: /* AlterObjectSchemaStmt: ALTER FUNCTION function_with_argtypes SET SCHEMA name */ +#line 9131 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_FUNCTION; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38620 "gram.c" + break; + + case 1300: /* AlterObjectSchemaStmt: ALTER OPERATOR operator_with_argtypes SET SCHEMA name */ +#line 9140 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_OPERATOR; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38633 "gram.c" + break; + + case 1301: /* AlterObjectSchemaStmt: ALTER OPERATOR CLASS any_name USING name SET SCHEMA name */ +#line 9149 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_OPCLASS; + n->object = (Node *) lcons(makeString((yyvsp[-3].str)), (yyvsp[-5].list)); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38646 "gram.c" + break; + + case 1302: /* AlterObjectSchemaStmt: ALTER OPERATOR FAMILY any_name USING name SET SCHEMA name */ +#line 9158 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_OPFAMILY; + n->object = (Node *) lcons(makeString((yyvsp[-3].str)), (yyvsp[-5].list)); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38659 "gram.c" + break; + + case 1303: /* AlterObjectSchemaStmt: ALTER PROCEDURE function_with_argtypes SET SCHEMA name */ +#line 9167 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_PROCEDURE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38672 "gram.c" + break; + + case 1304: /* AlterObjectSchemaStmt: ALTER ROUTINE function_with_argtypes SET SCHEMA name */ +#line 9176 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_ROUTINE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38685 "gram.c" + break; + + case 1305: /* AlterObjectSchemaStmt: ALTER TABLE relation_expr SET SCHEMA name */ +#line 9185 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_TABLE; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38698 "gram.c" + break; + + case 1306: /* AlterObjectSchemaStmt: ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name */ +#line 9194 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_TABLE; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38711 "gram.c" + break; + + case 1307: /* AlterObjectSchemaStmt: ALTER STATISTICS any_name SET SCHEMA name */ +#line 9203 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_STATISTIC_EXT; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38724 "gram.c" + break; + + case 1308: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH PARSER any_name SET SCHEMA name */ +#line 9212 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_TSPARSER; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38737 "gram.c" + break; + + case 1309: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH DICTIONARY any_name SET SCHEMA name */ +#line 9221 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_TSDICTIONARY; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38750 "gram.c" + break; + + case 1310: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH TEMPLATE any_name SET SCHEMA name */ +#line 9230 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_TSTEMPLATE; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38763 "gram.c" + break; + + case 1311: /* AlterObjectSchemaStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name SET SCHEMA name */ +#line 9239 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_TSCONFIGURATION; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38776 "gram.c" + break; + + case 1312: /* AlterObjectSchemaStmt: ALTER SEQUENCE qualified_name SET SCHEMA name */ +#line 9248 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_SEQUENCE; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38789 "gram.c" + break; + + case 1313: /* AlterObjectSchemaStmt: ALTER SEQUENCE IF_P EXISTS qualified_name SET SCHEMA name */ +#line 9257 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_SEQUENCE; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38802 "gram.c" + break; + + case 1314: /* AlterObjectSchemaStmt: ALTER VIEW qualified_name SET SCHEMA name */ +#line 9266 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_VIEW; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38815 "gram.c" + break; + + case 1315: /* AlterObjectSchemaStmt: ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name */ +#line 9275 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_VIEW; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38828 "gram.c" + break; + + case 1316: /* AlterObjectSchemaStmt: ALTER MATERIALIZED VIEW qualified_name SET SCHEMA name */ +#line 9284 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_MATVIEW; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38841 "gram.c" + break; + + case 1317: /* AlterObjectSchemaStmt: ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name SET SCHEMA name */ +#line 9293 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_MATVIEW; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38854 "gram.c" + break; + + case 1318: /* AlterObjectSchemaStmt: ALTER FOREIGN TABLE relation_expr SET SCHEMA name */ +#line 9302 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_FOREIGN_TABLE; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38867 "gram.c" + break; + + case 1319: /* AlterObjectSchemaStmt: ALTER FOREIGN TABLE IF_P EXISTS relation_expr SET SCHEMA name */ +#line 9311 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_FOREIGN_TABLE; + n->relation = (yyvsp[-3].range); + n->newschema = (yyvsp[0].str); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 38880 "gram.c" + break; + + case 1320: /* AlterObjectSchemaStmt: ALTER TYPE_P any_name SET SCHEMA name */ +#line 9320 "gram.y" + { + AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt); + n->objectType = OBJECT_TYPE; + n->object = (Node *) (yyvsp[-3].list); + n->newschema = (yyvsp[0].str); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 38893 "gram.c" + break; + + case 1321: /* AlterOperatorStmt: ALTER OPERATOR operator_with_argtypes SET '(' operator_def_list ')' */ +#line 9338 "gram.y" + { + AlterOperatorStmt *n = makeNode(AlterOperatorStmt); + n->opername = (yyvsp[-4].objwithargs); + n->options = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 38904 "gram.c" + break; + + case 1322: /* operator_def_list: operator_def_elem */ +#line 9346 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 38910 "gram.c" + break; + + case 1323: /* operator_def_list: operator_def_list ',' operator_def_elem */ +#line 9347 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } +#line 38916 "gram.c" + break; + + case 1324: /* operator_def_elem: ColLabel '=' NONE */ +#line 9351 "gram.y" + { (yyval.defelt) = makeDefElem((yyvsp[-2].str), NULL, (yylsp[-2])); } +#line 38922 "gram.c" + break; + + case 1325: /* operator_def_elem: ColLabel '=' operator_def_arg */ +#line 9353 "gram.y" + { (yyval.defelt) = makeDefElem((yyvsp[-2].str), (Node *) (yyvsp[0].node), (yylsp[-2])); } +#line 38928 "gram.c" + break; + + case 1326: /* operator_def_arg: func_type */ +#line 9358 "gram.y" + { (yyval.node) = (Node *)(yyvsp[0].typnam); } +#line 38934 "gram.c" + break; + + case 1327: /* operator_def_arg: reserved_keyword */ +#line 9359 "gram.y" + { (yyval.node) = (Node *)makeString(pstrdup((yyvsp[0].keyword))); } +#line 38940 "gram.c" + break; + + case 1328: /* operator_def_arg: qual_all_Op */ +#line 9360 "gram.y" + { (yyval.node) = (Node *)(yyvsp[0].list); } +#line 38946 "gram.c" + break; + + case 1329: /* operator_def_arg: NumericOnly */ +#line 9361 "gram.y" + { (yyval.node) = (Node *)(yyvsp[0].value); } +#line 38952 "gram.c" + break; + + case 1330: /* operator_def_arg: Sconst */ +#line 9362 "gram.y" + { (yyval.node) = (Node *)makeString((yyvsp[0].str)); } +#line 38958 "gram.c" + break; + + case 1331: /* AlterTypeStmt: ALTER TYPE_P any_name SET '(' operator_def_list ')' */ +#line 9375 "gram.y" + { + AlterTypeStmt *n = makeNode(AlterTypeStmt); + n->typeName = (yyvsp[-4].list); + n->options = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 38969 "gram.c" + break; + + case 1332: /* AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec */ +#line 9390 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_AGGREGATE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 38981 "gram.c" + break; + + case 1333: /* AlterOwnerStmt: ALTER COLLATION any_name OWNER TO RoleSpec */ +#line 9398 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_COLLATION; + n->object = (Node *) (yyvsp[-3].list); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 38993 "gram.c" + break; + + case 1334: /* AlterOwnerStmt: ALTER CONVERSION_P any_name OWNER TO RoleSpec */ +#line 9406 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_CONVERSION; + n->object = (Node *) (yyvsp[-3].list); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39005 "gram.c" + break; + + case 1335: /* AlterOwnerStmt: ALTER DATABASE name OWNER TO RoleSpec */ +#line 9414 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_DATABASE; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39017 "gram.c" + break; + + case 1336: /* AlterOwnerStmt: ALTER DOMAIN_P any_name OWNER TO RoleSpec */ +#line 9422 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_DOMAIN; + n->object = (Node *) (yyvsp[-3].list); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39029 "gram.c" + break; + + case 1337: /* AlterOwnerStmt: ALTER FUNCTION function_with_argtypes OWNER TO RoleSpec */ +#line 9430 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_FUNCTION; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39041 "gram.c" + break; + + case 1338: /* AlterOwnerStmt: ALTER opt_procedural LANGUAGE name OWNER TO RoleSpec */ +#line 9438 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_LANGUAGE; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39053 "gram.c" + break; + + case 1339: /* AlterOwnerStmt: ALTER LARGE_P OBJECT_P NumericOnly OWNER TO RoleSpec */ +#line 9446 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_LARGEOBJECT; + n->object = (Node *) (yyvsp[-3].value); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39065 "gram.c" + break; + + case 1340: /* AlterOwnerStmt: ALTER OPERATOR operator_with_argtypes OWNER TO RoleSpec */ +#line 9454 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_OPERATOR; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39077 "gram.c" + break; + + case 1341: /* AlterOwnerStmt: ALTER OPERATOR CLASS any_name USING name OWNER TO RoleSpec */ +#line 9462 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_OPCLASS; + n->object = (Node *) lcons(makeString((yyvsp[-3].str)), (yyvsp[-5].list)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39089 "gram.c" + break; + + case 1342: /* AlterOwnerStmt: ALTER OPERATOR FAMILY any_name USING name OWNER TO RoleSpec */ +#line 9470 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_OPFAMILY; + n->object = (Node *) lcons(makeString((yyvsp[-3].str)), (yyvsp[-5].list)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39101 "gram.c" + break; + + case 1343: /* AlterOwnerStmt: ALTER PROCEDURE function_with_argtypes OWNER TO RoleSpec */ +#line 9478 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_PROCEDURE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39113 "gram.c" + break; + + case 1344: /* AlterOwnerStmt: ALTER ROUTINE function_with_argtypes OWNER TO RoleSpec */ +#line 9486 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_ROUTINE; + n->object = (Node *) (yyvsp[-3].objwithargs); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39125 "gram.c" + break; + + case 1345: /* AlterOwnerStmt: ALTER SCHEMA name OWNER TO RoleSpec */ +#line 9494 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_SCHEMA; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39137 "gram.c" + break; + + case 1346: /* AlterOwnerStmt: ALTER TYPE_P any_name OWNER TO RoleSpec */ +#line 9502 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_TYPE; + n->object = (Node *) (yyvsp[-3].list); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39149 "gram.c" + break; + + case 1347: /* AlterOwnerStmt: ALTER TABLESPACE name OWNER TO RoleSpec */ +#line 9510 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_TABLESPACE; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39161 "gram.c" + break; + + case 1348: /* AlterOwnerStmt: ALTER STATISTICS any_name OWNER TO RoleSpec */ +#line 9518 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_STATISTIC_EXT; + n->object = (Node *) (yyvsp[-3].list); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39173 "gram.c" + break; + + case 1349: /* AlterOwnerStmt: ALTER TEXT_P SEARCH DICTIONARY any_name OWNER TO RoleSpec */ +#line 9526 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_TSDICTIONARY; + n->object = (Node *) (yyvsp[-3].list); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39185 "gram.c" + break; + + case 1350: /* AlterOwnerStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name OWNER TO RoleSpec */ +#line 9534 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_TSCONFIGURATION; + n->object = (Node *) (yyvsp[-3].list); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39197 "gram.c" + break; + + case 1351: /* AlterOwnerStmt: ALTER FOREIGN DATA_P WRAPPER name OWNER TO RoleSpec */ +#line 9542 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_FDW; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39209 "gram.c" + break; + + case 1352: /* AlterOwnerStmt: ALTER SERVER name OWNER TO RoleSpec */ +#line 9550 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_FOREIGN_SERVER; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39221 "gram.c" + break; + + case 1353: /* AlterOwnerStmt: ALTER EVENT TRIGGER name OWNER TO RoleSpec */ +#line 9558 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_EVENT_TRIGGER; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39233 "gram.c" + break; + + case 1354: /* AlterOwnerStmt: ALTER PUBLICATION name OWNER TO RoleSpec */ +#line 9566 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_PUBLICATION; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39245 "gram.c" + break; + + case 1355: /* AlterOwnerStmt: ALTER SUBSCRIPTION name OWNER TO RoleSpec */ +#line 9574 "gram.y" + { + AlterOwnerStmt *n = makeNode(AlterOwnerStmt); + n->objectType = OBJECT_SUBSCRIPTION; + n->object = (Node *) makeString((yyvsp[-3].str)); + n->newowner = (yyvsp[0].rolespec); + (yyval.node) = (Node *)n; + } +#line 39257 "gram.c" + break; + + case 1356: /* CreatePublicationStmt: CREATE PUBLICATION name opt_publication_for_tables opt_definition */ +#line 9592 "gram.y" + { + CreatePublicationStmt *n = makeNode(CreatePublicationStmt); + n->pubname = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + if ((yyvsp[-1].node) != NULL) + { + /* FOR TABLE */ + if (IsA((yyvsp[-1].node), List)) + n->tables = (List *)(yyvsp[-1].node); + /* FOR ALL TABLES */ + else + n->for_all_tables = true; + } + (yyval.node) = (Node *)n; + } +#line 39277 "gram.c" + break; + + case 1357: /* opt_publication_for_tables: publication_for_tables */ +#line 9610 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 39283 "gram.c" + break; + + case 1358: /* opt_publication_for_tables: %empty */ +#line 9611 "gram.y" + { (yyval.node) = NULL; } +#line 39289 "gram.c" + break; + + case 1359: /* publication_for_tables: FOR TABLE relation_expr_list */ +#line 9616 "gram.y" + { + (yyval.node) = (Node *) (yyvsp[0].list); + } +#line 39297 "gram.c" + break; + + case 1360: /* publication_for_tables: FOR ALL TABLES */ +#line 9620 "gram.y" + { + (yyval.node) = (Node *) makeInteger(true); + } +#line 39305 "gram.c" + break; + + case 1361: /* AlterPublicationStmt: ALTER PUBLICATION name SET definition */ +#line 9640 "gram.y" + { + AlterPublicationStmt *n = makeNode(AlterPublicationStmt); + n->pubname = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39316 "gram.c" + break; + + case 1362: /* AlterPublicationStmt: ALTER PUBLICATION name ADD_P TABLE relation_expr_list */ +#line 9647 "gram.y" + { + AlterPublicationStmt *n = makeNode(AlterPublicationStmt); + n->pubname = (yyvsp[-3].str); + n->tables = (yyvsp[0].list); + n->tableAction = DEFELEM_ADD; + (yyval.node) = (Node *)n; + } +#line 39328 "gram.c" + break; + + case 1363: /* AlterPublicationStmt: ALTER PUBLICATION name SET TABLE relation_expr_list */ +#line 9655 "gram.y" + { + AlterPublicationStmt *n = makeNode(AlterPublicationStmt); + n->pubname = (yyvsp[-3].str); + n->tables = (yyvsp[0].list); + n->tableAction = DEFELEM_SET; + (yyval.node) = (Node *)n; + } +#line 39340 "gram.c" + break; + + case 1364: /* AlterPublicationStmt: ALTER PUBLICATION name DROP TABLE relation_expr_list */ +#line 9663 "gram.y" + { + AlterPublicationStmt *n = makeNode(AlterPublicationStmt); + n->pubname = (yyvsp[-3].str); + n->tables = (yyvsp[0].list); + n->tableAction = DEFELEM_DROP; + (yyval.node) = (Node *)n; + } +#line 39352 "gram.c" + break; + + case 1365: /* CreateSubscriptionStmt: CREATE SUBSCRIPTION name CONNECTION Sconst PUBLICATION name_list opt_definition */ +#line 9680 "gram.y" + { + CreateSubscriptionStmt *n = + makeNode(CreateSubscriptionStmt); + n->subname = (yyvsp[-5].str); + n->conninfo = (yyvsp[-3].str); + n->publication = (yyvsp[-1].list); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39366 "gram.c" + break; + + case 1366: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name SET definition */ +#line 9699 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_OPTIONS; + n->subname = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39379 "gram.c" + break; + + case 1367: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name CONNECTION Sconst */ +#line 9708 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_CONNECTION; + n->subname = (yyvsp[-2].str); + n->conninfo = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39392 "gram.c" + break; + + case 1368: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name REFRESH PUBLICATION opt_definition */ +#line 9717 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_REFRESH; + n->subname = (yyvsp[-3].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39405 "gram.c" + break; + + case 1369: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name ADD_P PUBLICATION name_list opt_definition */ +#line 9726 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_ADD_PUBLICATION; + n->subname = (yyvsp[-4].str); + n->publication = (yyvsp[-1].list); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39419 "gram.c" + break; + + case 1370: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name DROP PUBLICATION name_list opt_definition */ +#line 9736 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_DROP_PUBLICATION; + n->subname = (yyvsp[-4].str); + n->publication = (yyvsp[-1].list); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39433 "gram.c" + break; + + case 1371: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name SET PUBLICATION name_list opt_definition */ +#line 9746 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_SET_PUBLICATION; + n->subname = (yyvsp[-4].str); + n->publication = (yyvsp[-1].list); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39447 "gram.c" + break; + + case 1372: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name ENABLE_P */ +#line 9756 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_ENABLED; + n->subname = (yyvsp[-1].str); + n->options = list_make1(makeDefElem("enabled", + (Node *)makeInteger(true), (yylsp[-3]))); + (yyval.node) = (Node *)n; + } +#line 39461 "gram.c" + break; + + case 1373: /* AlterSubscriptionStmt: ALTER SUBSCRIPTION name DISABLE_P */ +#line 9766 "gram.y" + { + AlterSubscriptionStmt *n = + makeNode(AlterSubscriptionStmt); + n->kind = ALTER_SUBSCRIPTION_ENABLED; + n->subname = (yyvsp[-1].str); + n->options = list_make1(makeDefElem("enabled", + (Node *)makeInteger(false), (yylsp[-3]))); + (yyval.node) = (Node *)n; + } +#line 39475 "gram.c" + break; + + case 1374: /* DropSubscriptionStmt: DROP SUBSCRIPTION name opt_drop_behavior */ +#line 9784 "gram.y" + { + DropSubscriptionStmt *n = makeNode(DropSubscriptionStmt); + n->subname = (yyvsp[-1].str); + n->missing_ok = false; + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *) n; + } +#line 39487 "gram.c" + break; + + case 1375: /* DropSubscriptionStmt: DROP SUBSCRIPTION IF_P EXISTS name opt_drop_behavior */ +#line 9792 "gram.y" + { + DropSubscriptionStmt *n = makeNode(DropSubscriptionStmt); + n->subname = (yyvsp[-1].str); + n->missing_ok = true; + n->behavior = (yyvsp[0].dbehavior); + (yyval.node) = (Node *) n; + } +#line 39499 "gram.c" + break; + + case 1376: /* RuleStmt: CREATE opt_or_replace RULE name AS ON event TO qualified_name where_clause DO opt_instead RuleActionList */ +#line 9810 "gram.y" + { + RuleStmt *n = makeNode(RuleStmt); + n->replace = (yyvsp[-11].boolean); + n->relation = (yyvsp[-4].range); + n->rulename = (yyvsp[-9].str); + n->whereClause = (yyvsp[-3].node); + n->event = (yyvsp[-6].ival); + n->instead = (yyvsp[-1].boolean); + n->actions = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39515 "gram.c" + break; + + case 1377: /* RuleActionList: NOTHING */ +#line 9824 "gram.y" + { (yyval.list) = NIL; } +#line 39521 "gram.c" + break; + + case 1378: /* RuleActionList: RuleActionStmt */ +#line 9825 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 39527 "gram.c" + break; + + case 1379: /* RuleActionList: '(' RuleActionMulti ')' */ +#line 9826 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 39533 "gram.c" + break; + + case 1380: /* RuleActionMulti: RuleActionMulti ';' RuleActionStmtOrEmpty */ +#line 9832 "gram.y" + { if ((yyvsp[0].node) != NULL) + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); + else + (yyval.list) = (yyvsp[-2].list); + } +#line 39543 "gram.c" + break; + + case 1381: /* RuleActionMulti: RuleActionStmtOrEmpty */ +#line 9838 "gram.y" + { if ((yyvsp[0].node) != NULL) + (yyval.list) = list_make1((yyvsp[0].node)); + else + (yyval.list) = NIL; + } +#line 39553 "gram.c" + break; + + case 1387: /* RuleActionStmtOrEmpty: RuleActionStmt */ +#line 9854 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 39559 "gram.c" + break; + + case 1388: /* RuleActionStmtOrEmpty: %empty */ +#line 9855 "gram.y" + { (yyval.node) = NULL; } +#line 39565 "gram.c" + break; + + case 1389: /* event: SELECT */ +#line 9858 "gram.y" + { (yyval.ival) = CMD_SELECT; } +#line 39571 "gram.c" + break; + + case 1390: /* event: UPDATE */ +#line 9859 "gram.y" + { (yyval.ival) = CMD_UPDATE; } +#line 39577 "gram.c" + break; + + case 1391: /* event: DELETE_P */ +#line 9860 "gram.y" + { (yyval.ival) = CMD_DELETE; } +#line 39583 "gram.c" + break; + + case 1392: /* event: INSERT */ +#line 9861 "gram.y" + { (yyval.ival) = CMD_INSERT; } +#line 39589 "gram.c" + break; + + case 1393: /* opt_instead: INSTEAD */ +#line 9865 "gram.y" + { (yyval.boolean) = true; } +#line 39595 "gram.c" + break; + + case 1394: /* opt_instead: ALSO */ +#line 9866 "gram.y" + { (yyval.boolean) = false; } +#line 39601 "gram.c" + break; + + case 1395: /* opt_instead: %empty */ +#line 9867 "gram.y" + { (yyval.boolean) = false; } +#line 39607 "gram.c" + break; + + case 1396: /* NotifyStmt: NOTIFY ColId notify_payload */ +#line 9880 "gram.y" + { + NotifyStmt *n = makeNode(NotifyStmt); + n->conditionname = (yyvsp[-1].str); + n->payload = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39618 "gram.c" + break; + + case 1397: /* notify_payload: ',' Sconst */ +#line 9889 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 39624 "gram.c" + break; + + case 1398: /* notify_payload: %empty */ +#line 9890 "gram.y" + { (yyval.str) = NULL; } +#line 39630 "gram.c" + break; + + case 1399: /* ListenStmt: LISTEN ColId */ +#line 9894 "gram.y" + { + ListenStmt *n = makeNode(ListenStmt); + n->conditionname = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39640 "gram.c" + break; + + case 1400: /* UnlistenStmt: UNLISTEN ColId */ +#line 9903 "gram.y" + { + UnlistenStmt *n = makeNode(UnlistenStmt); + n->conditionname = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39650 "gram.c" + break; + + case 1401: /* UnlistenStmt: UNLISTEN '*' */ +#line 9909 "gram.y" + { + UnlistenStmt *n = makeNode(UnlistenStmt); + n->conditionname = NULL; + (yyval.node) = (Node *)n; + } +#line 39660 "gram.c" + break; + + case 1402: /* TransactionStmt: ABORT_P opt_transaction opt_transaction_chain */ +#line 9928 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_ROLLBACK; + n->options = NIL; + n->chain = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 39672 "gram.c" + break; + + case 1403: /* TransactionStmt: START TRANSACTION transaction_mode_list_or_empty */ +#line 9936 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_START; + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39683 "gram.c" + break; + + case 1404: /* TransactionStmt: COMMIT opt_transaction opt_transaction_chain */ +#line 9943 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_COMMIT; + n->options = NIL; + n->chain = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 39695 "gram.c" + break; + + case 1405: /* TransactionStmt: ROLLBACK opt_transaction opt_transaction_chain */ +#line 9951 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_ROLLBACK; + n->options = NIL; + n->chain = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 39707 "gram.c" + break; + + case 1406: /* TransactionStmt: SAVEPOINT ColId */ +#line 9959 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_SAVEPOINT; + n->savepoint_name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39718 "gram.c" + break; + + case 1407: /* TransactionStmt: RELEASE SAVEPOINT ColId */ +#line 9966 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_RELEASE; + n->savepoint_name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39729 "gram.c" + break; + + case 1408: /* TransactionStmt: RELEASE ColId */ +#line 9973 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_RELEASE; + n->savepoint_name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39740 "gram.c" + break; + + case 1409: /* TransactionStmt: ROLLBACK opt_transaction TO SAVEPOINT ColId */ +#line 9980 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_ROLLBACK_TO; + n->savepoint_name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39751 "gram.c" + break; + + case 1410: /* TransactionStmt: ROLLBACK opt_transaction TO ColId */ +#line 9987 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_ROLLBACK_TO; + n->savepoint_name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39762 "gram.c" + break; + + case 1411: /* TransactionStmt: PREPARE TRANSACTION Sconst */ +#line 9994 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_PREPARE; + n->gid = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39773 "gram.c" + break; + + case 1412: /* TransactionStmt: COMMIT PREPARED Sconst */ +#line 10001 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_COMMIT_PREPARED; + n->gid = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39784 "gram.c" + break; + + case 1413: /* TransactionStmt: ROLLBACK PREPARED Sconst */ +#line 10008 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_ROLLBACK_PREPARED; + n->gid = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 39795 "gram.c" + break; + + case 1414: /* TransactionStmtLegacy: BEGIN_P opt_transaction transaction_mode_list_or_empty */ +#line 10018 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_BEGIN; + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 39806 "gram.c" + break; + + case 1415: /* TransactionStmtLegacy: END_P opt_transaction opt_transaction_chain */ +#line 10025 "gram.y" + { + TransactionStmt *n = makeNode(TransactionStmt); + n->kind = TRANS_STMT_COMMIT; + n->options = NIL; + n->chain = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 39818 "gram.c" + break; + + case 1419: /* transaction_mode_item: ISOLATION LEVEL iso_level */ +#line 10041 "gram.y" + { (yyval.defelt) = makeDefElem("transaction_isolation", + makeStringConst((yyvsp[0].str), (yylsp[0])), (yylsp[-2])); } +#line 39825 "gram.c" + break; + + case 1420: /* transaction_mode_item: READ ONLY */ +#line 10044 "gram.y" + { (yyval.defelt) = makeDefElem("transaction_read_only", + makeIntConst(true, (yylsp[-1])), (yylsp[-1])); } +#line 39832 "gram.c" + break; + + case 1421: /* transaction_mode_item: READ WRITE */ +#line 10047 "gram.y" + { (yyval.defelt) = makeDefElem("transaction_read_only", + makeIntConst(false, (yylsp[-1])), (yylsp[-1])); } +#line 39839 "gram.c" + break; + + case 1422: /* transaction_mode_item: DEFERRABLE */ +#line 10050 "gram.y" + { (yyval.defelt) = makeDefElem("transaction_deferrable", + makeIntConst(true, (yylsp[0])), (yylsp[0])); } +#line 39846 "gram.c" + break; + + case 1423: /* transaction_mode_item: NOT DEFERRABLE */ +#line 10053 "gram.y" + { (yyval.defelt) = makeDefElem("transaction_deferrable", + makeIntConst(false, (yylsp[-1])), (yylsp[-1])); } +#line 39853 "gram.c" + break; + + case 1424: /* transaction_mode_list: transaction_mode_item */ +#line 10060 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 39859 "gram.c" + break; + + case 1425: /* transaction_mode_list: transaction_mode_list ',' transaction_mode_item */ +#line 10062 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } +#line 39865 "gram.c" + break; + + case 1426: /* transaction_mode_list: transaction_mode_list transaction_mode_item */ +#line 10064 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 39871 "gram.c" + break; + + case 1428: /* transaction_mode_list_or_empty: %empty */ +#line 10070 "gram.y" + { (yyval.list) = NIL; } +#line 39877 "gram.c" + break; + + case 1429: /* opt_transaction_chain: AND CHAIN */ +#line 10074 "gram.y" + { (yyval.boolean) = true; } +#line 39883 "gram.c" + break; + + case 1430: /* opt_transaction_chain: AND NO CHAIN */ +#line 10075 "gram.y" + { (yyval.boolean) = false; } +#line 39889 "gram.c" + break; + + case 1431: /* opt_transaction_chain: %empty */ +#line 10076 "gram.y" + { (yyval.boolean) = false; } +#line 39895 "gram.c" + break; + + case 1432: /* ViewStmt: CREATE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option */ +#line 10090 "gram.y" + { + ViewStmt *n = makeNode(ViewStmt); + n->view = (yyvsp[-5].range); + n->view->relpersistence = (yyvsp[-7].ival); + n->aliases = (yyvsp[-4].list); + n->query = (yyvsp[-1].node); + n->replace = false; + n->options = (yyvsp[-3].list); + n->withCheckOption = (yyvsp[0].ival); + (yyval.node) = (Node *) n; + } +#line 39911 "gram.c" + break; + + case 1433: /* ViewStmt: CREATE OR REPLACE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option */ +#line 10103 "gram.y" + { + ViewStmt *n = makeNode(ViewStmt); + n->view = (yyvsp[-5].range); + n->view->relpersistence = (yyvsp[-7].ival); + n->aliases = (yyvsp[-4].list); + n->query = (yyvsp[-1].node); + n->replace = true; + n->options = (yyvsp[-3].list); + n->withCheckOption = (yyvsp[0].ival); + (yyval.node) = (Node *) n; + } +#line 39927 "gram.c" + break; + + case 1434: /* ViewStmt: CREATE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option */ +#line 10116 "gram.y" + { + ViewStmt *n = makeNode(ViewStmt); + n->view = (yyvsp[-7].range); + n->view->relpersistence = (yyvsp[-10].ival); + n->aliases = (yyvsp[-5].list); + n->query = makeRecursiveViewSelect(n->view->relname, n->aliases, (yyvsp[-1].node)); + n->replace = false; + n->options = (yyvsp[-3].list); + n->withCheckOption = (yyvsp[0].ival); + if (n->withCheckOption != NO_CHECK_OPTION) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("WITH CHECK OPTION not supported on recursive views"), + parser_errposition((yylsp[0])))); + (yyval.node) = (Node *) n; + } +#line 39948 "gram.c" + break; + + case 1435: /* ViewStmt: CREATE OR REPLACE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option */ +#line 10134 "gram.y" + { + ViewStmt *n = makeNode(ViewStmt); + n->view = (yyvsp[-7].range); + n->view->relpersistence = (yyvsp[-10].ival); + n->aliases = (yyvsp[-5].list); + n->query = makeRecursiveViewSelect(n->view->relname, n->aliases, (yyvsp[-1].node)); + n->replace = true; + n->options = (yyvsp[-3].list); + n->withCheckOption = (yyvsp[0].ival); + if (n->withCheckOption != NO_CHECK_OPTION) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("WITH CHECK OPTION not supported on recursive views"), + parser_errposition((yylsp[0])))); + (yyval.node) = (Node *) n; + } +#line 39969 "gram.c" + break; + + case 1436: /* opt_check_option: WITH CHECK OPTION */ +#line 10153 "gram.y" + { (yyval.ival) = CASCADED_CHECK_OPTION; } +#line 39975 "gram.c" + break; + + case 1437: /* opt_check_option: WITH CASCADED CHECK OPTION */ +#line 10154 "gram.y" + { (yyval.ival) = CASCADED_CHECK_OPTION; } +#line 39981 "gram.c" + break; + + case 1438: /* opt_check_option: WITH LOCAL CHECK OPTION */ +#line 10155 "gram.y" + { (yyval.ival) = LOCAL_CHECK_OPTION; } +#line 39987 "gram.c" + break; + + case 1439: /* opt_check_option: %empty */ +#line 10156 "gram.y" + { (yyval.ival) = NO_CHECK_OPTION; } +#line 39993 "gram.c" + break; + + case 1440: /* LoadStmt: LOAD file_name */ +#line 10167 "gram.y" + { + LoadStmt *n = makeNode(LoadStmt); + n->filename = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 40003 "gram.c" + break; + + case 1441: /* CreatedbStmt: CREATE DATABASE name opt_with createdb_opt_list */ +#line 10183 "gram.y" + { + CreatedbStmt *n = makeNode(CreatedbStmt); + n->dbname = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 40014 "gram.c" + break; + + case 1442: /* createdb_opt_list: createdb_opt_items */ +#line 10192 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 40020 "gram.c" + break; + + case 1443: /* createdb_opt_list: %empty */ +#line 10193 "gram.y" + { (yyval.list) = NIL; } +#line 40026 "gram.c" + break; + + case 1444: /* createdb_opt_items: createdb_opt_item */ +#line 10197 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 40032 "gram.c" + break; + + case 1445: /* createdb_opt_items: createdb_opt_items createdb_opt_item */ +#line 10198 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 40038 "gram.c" + break; + + case 1446: /* createdb_opt_item: createdb_opt_name opt_equal SignedIconst */ +#line 10203 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-2].str), (Node *)makeInteger((yyvsp[0].ival)), (yylsp[-2])); + } +#line 40046 "gram.c" + break; + + case 1447: /* createdb_opt_item: createdb_opt_name opt_equal opt_boolean_or_string */ +#line 10207 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-2].str), (Node *)makeString((yyvsp[0].str)), (yylsp[-2])); + } +#line 40054 "gram.c" + break; + + case 1448: /* createdb_opt_item: createdb_opt_name opt_equal DEFAULT */ +#line 10211 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-2].str), NULL, (yylsp[-2])); + } +#line 40062 "gram.c" + break; + + case 1449: /* createdb_opt_name: IDENT */ +#line 10228 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 40068 "gram.c" + break; + + case 1450: /* createdb_opt_name: CONNECTION LIMIT */ +#line 10229 "gram.y" + { (yyval.str) = pstrdup("connection_limit"); } +#line 40074 "gram.c" + break; + + case 1451: /* createdb_opt_name: ENCODING */ +#line 10230 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 40080 "gram.c" + break; + + case 1452: /* createdb_opt_name: LOCATION */ +#line 10231 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 40086 "gram.c" + break; + + case 1453: /* createdb_opt_name: OWNER */ +#line 10232 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 40092 "gram.c" + break; + + case 1454: /* createdb_opt_name: TABLESPACE */ +#line 10233 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 40098 "gram.c" + break; + + case 1455: /* createdb_opt_name: TEMPLATE */ +#line 10234 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 40104 "gram.c" + break; + + case 1458: /* AlterDatabaseStmt: ALTER DATABASE name WITH createdb_opt_list */ +#line 10254 "gram.y" + { + AlterDatabaseStmt *n = makeNode(AlterDatabaseStmt); + n->dbname = (yyvsp[-2].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 40115 "gram.c" + break; + + case 1459: /* AlterDatabaseStmt: ALTER DATABASE name createdb_opt_list */ +#line 10261 "gram.y" + { + AlterDatabaseStmt *n = makeNode(AlterDatabaseStmt); + n->dbname = (yyvsp[-1].str); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 40126 "gram.c" + break; + + case 1460: /* AlterDatabaseStmt: ALTER DATABASE name SET TABLESPACE name */ +#line 10268 "gram.y" + { + AlterDatabaseStmt *n = makeNode(AlterDatabaseStmt); + n->dbname = (yyvsp[-3].str); + n->options = list_make1(makeDefElem("tablespace", + (Node *)makeString((yyvsp[0].str)), (yylsp[0]))); + (yyval.node) = (Node *)n; + } +#line 40138 "gram.c" + break; + + case 1461: /* AlterDatabaseSetStmt: ALTER DATABASE name SetResetClause */ +#line 10279 "gram.y" + { + AlterDatabaseSetStmt *n = makeNode(AlterDatabaseSetStmt); + n->dbname = (yyvsp[-1].str); + n->setstmt = (yyvsp[0].vsetstmt); + (yyval.node) = (Node *)n; + } +#line 40149 "gram.c" + break; + + case 1462: /* DropdbStmt: DROP DATABASE name */ +#line 10296 "gram.y" + { + DropdbStmt *n = makeNode(DropdbStmt); + n->dbname = (yyvsp[0].str); + n->missing_ok = false; + n->options = NULL; + (yyval.node) = (Node *)n; + } +#line 40161 "gram.c" + break; + + case 1463: /* DropdbStmt: DROP DATABASE IF_P EXISTS name */ +#line 10304 "gram.y" + { + DropdbStmt *n = makeNode(DropdbStmt); + n->dbname = (yyvsp[0].str); + n->missing_ok = true; + n->options = NULL; + (yyval.node) = (Node *)n; + } +#line 40173 "gram.c" + break; + + case 1464: /* DropdbStmt: DROP DATABASE name opt_with '(' drop_option_list ')' */ +#line 10312 "gram.y" + { + DropdbStmt *n = makeNode(DropdbStmt); + n->dbname = (yyvsp[-4].str); + n->missing_ok = false; + n->options = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 40185 "gram.c" + break; + + case 1465: /* DropdbStmt: DROP DATABASE IF_P EXISTS name opt_with '(' drop_option_list ')' */ +#line 10320 "gram.y" + { + DropdbStmt *n = makeNode(DropdbStmt); + n->dbname = (yyvsp[-4].str); + n->missing_ok = true; + n->options = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 40197 "gram.c" + break; + + case 1466: /* drop_option_list: drop_option */ +#line 10331 "gram.y" + { + (yyval.list) = list_make1((Node *) (yyvsp[0].defelt)); + } +#line 40205 "gram.c" + break; + + case 1467: /* drop_option_list: drop_option_list ',' drop_option */ +#line 10335 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (Node *) (yyvsp[0].defelt)); + } +#line 40213 "gram.c" + break; + + case 1468: /* drop_option: FORCE */ +#line 10346 "gram.y" + { + (yyval.defelt) = makeDefElem("force", NULL, (yylsp[0])); + } +#line 40221 "gram.c" + break; + + case 1469: /* AlterCollationStmt: ALTER COLLATION any_name REFRESH VERSION_P */ +#line 10358 "gram.y" + { + AlterCollationStmt *n = makeNode(AlterCollationStmt); + n->collname = (yyvsp[-2].list); + (yyval.node) = (Node *)n; + } +#line 40231 "gram.c" + break; + + case 1470: /* AlterSystemStmt: ALTER SYSTEM_P SET generic_set */ +#line 10375 "gram.y" + { + AlterSystemStmt *n = makeNode(AlterSystemStmt); + n->setstmt = (yyvsp[0].vsetstmt); + (yyval.node) = (Node *)n; + } +#line 40241 "gram.c" + break; + + case 1471: /* AlterSystemStmt: ALTER SYSTEM_P RESET generic_reset */ +#line 10381 "gram.y" + { + AlterSystemStmt *n = makeNode(AlterSystemStmt); + n->setstmt = (yyvsp[0].vsetstmt); + (yyval.node) = (Node *)n; + } +#line 40251 "gram.c" + break; + + case 1472: /* CreateDomainStmt: CREATE DOMAIN_P any_name opt_as Typename ColQualList */ +#line 10397 "gram.y" + { + CreateDomainStmt *n = makeNode(CreateDomainStmt); + n->domainname = (yyvsp[-3].list); + n->typeName = (yyvsp[-1].typnam); + SplitColQualList((yyvsp[0].list), &n->constraints, &n->collClause, + yyscanner); + (yyval.node) = (Node *)n; + } +#line 40264 "gram.c" + break; + + case 1473: /* AlterDomainStmt: ALTER DOMAIN_P any_name alter_column_default */ +#line 10410 "gram.y" + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'T'; + n->typeName = (yyvsp[-1].list); + n->def = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 40276 "gram.c" + break; + + case 1474: /* AlterDomainStmt: ALTER DOMAIN_P any_name DROP NOT NULL_P */ +#line 10419 "gram.y" + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'N'; + n->typeName = (yyvsp[-3].list); + (yyval.node) = (Node *)n; + } +#line 40287 "gram.c" + break; + + case 1475: /* AlterDomainStmt: ALTER DOMAIN_P any_name SET NOT NULL_P */ +#line 10427 "gram.y" + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'O'; + n->typeName = (yyvsp[-3].list); + (yyval.node) = (Node *)n; + } +#line 40298 "gram.c" + break; + + case 1476: /* AlterDomainStmt: ALTER DOMAIN_P any_name ADD_P TableConstraint */ +#line 10435 "gram.y" + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'C'; + n->typeName = (yyvsp[-2].list); + n->def = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 40310 "gram.c" + break; + + case 1477: /* AlterDomainStmt: ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior */ +#line 10444 "gram.y" + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'X'; + n->typeName = (yyvsp[-4].list); + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = false; + (yyval.node) = (Node *)n; + } +#line 40324 "gram.c" + break; + + case 1478: /* AlterDomainStmt: ALTER DOMAIN_P any_name DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior */ +#line 10455 "gram.y" + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'X'; + n->typeName = (yyvsp[-6].list); + n->name = (yyvsp[-1].str); + n->behavior = (yyvsp[0].dbehavior); + n->missing_ok = true; + (yyval.node) = (Node *)n; + } +#line 40338 "gram.c" + break; + + case 1479: /* AlterDomainStmt: ALTER DOMAIN_P any_name VALIDATE CONSTRAINT name */ +#line 10466 "gram.y" + { + AlterDomainStmt *n = makeNode(AlterDomainStmt); + n->subtype = 'V'; + n->typeName = (yyvsp[-3].list); + n->name = (yyvsp[0].str); + (yyval.node) = (Node *)n; + } +#line 40350 "gram.c" + break; + + case 1482: /* AlterTSDictionaryStmt: ALTER TEXT_P SEARCH DICTIONARY any_name definition */ +#line 10488 "gram.y" + { + AlterTSDictionaryStmt *n = makeNode(AlterTSDictionaryStmt); + n->dictname = (yyvsp[-1].list); + n->options = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 40361 "gram.c" + break; + + case 1483: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list any_with any_name_list */ +#line 10498 "gram.y" + { + AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); + n->kind = ALTER_TSCONFIG_ADD_MAPPING; + n->cfgname = (yyvsp[-6].list); + n->tokentype = (yyvsp[-2].list); + n->dicts = (yyvsp[0].list); + n->override = false; + n->replace = false; + (yyval.node) = (Node*)n; + } +#line 40376 "gram.c" + break; + + case 1484: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list any_with any_name_list */ +#line 10509 "gram.y" + { + AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); + n->kind = ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN; + n->cfgname = (yyvsp[-6].list); + n->tokentype = (yyvsp[-2].list); + n->dicts = (yyvsp[0].list); + n->override = true; + n->replace = false; + (yyval.node) = (Node*)n; + } +#line 40391 "gram.c" + break; + + case 1485: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name any_with any_name */ +#line 10520 "gram.y" + { + AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); + n->kind = ALTER_TSCONFIG_REPLACE_DICT; + n->cfgname = (yyvsp[-6].list); + n->tokentype = NIL; + n->dicts = list_make2((yyvsp[-2].list),(yyvsp[0].list)); + n->override = false; + n->replace = true; + (yyval.node) = (Node*)n; + } +#line 40406 "gram.c" + break; + + case 1486: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name any_with any_name */ +#line 10531 "gram.y" + { + AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); + n->kind = ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN; + n->cfgname = (yyvsp[-8].list); + n->tokentype = (yyvsp[-4].list); + n->dicts = list_make2((yyvsp[-2].list),(yyvsp[0].list)); + n->override = false; + n->replace = true; + (yyval.node) = (Node*)n; + } +#line 40421 "gram.c" + break; + + case 1487: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list */ +#line 10542 "gram.y" + { + AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); + n->kind = ALTER_TSCONFIG_DROP_MAPPING; + n->cfgname = (yyvsp[-4].list); + n->tokentype = (yyvsp[0].list); + n->missing_ok = false; + (yyval.node) = (Node*)n; + } +#line 40434 "gram.c" + break; + + case 1488: /* AlterTSConfigurationStmt: ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list */ +#line 10551 "gram.y" + { + AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt); + n->kind = ALTER_TSCONFIG_DROP_MAPPING; + n->cfgname = (yyvsp[-6].list); + n->tokentype = (yyvsp[0].list); + n->missing_ok = true; + (yyval.node) = (Node*)n; + } +#line 40447 "gram.c" + break; + + case 1491: /* CreateConversionStmt: CREATE opt_default CONVERSION_P any_name FOR Sconst TO Sconst FROM any_name */ +#line 10579 "gram.y" + { + CreateConversionStmt *n = makeNode(CreateConversionStmt); + n->conversion_name = (yyvsp[-6].list); + n->for_encoding_name = (yyvsp[-4].str); + n->to_encoding_name = (yyvsp[-2].str); + n->func_name = (yyvsp[0].list); + n->def = (yyvsp[-8].boolean); + (yyval.node) = (Node *)n; + } +#line 40461 "gram.c" + break; + + case 1492: /* ClusterStmt: CLUSTER opt_verbose qualified_name cluster_index_specification */ +#line 10602 "gram.y" + { + ClusterStmt *n = makeNode(ClusterStmt); + n->relation = (yyvsp[-1].range); + n->indexname = (yyvsp[0].str); + n->params = NIL; + if ((yyvsp[-2].boolean)) + n->params = lappend(n->params, makeDefElem("verbose", NULL, (yylsp[-2]))); + (yyval.node) = (Node*)n; + } +#line 40475 "gram.c" + break; + + case 1493: /* ClusterStmt: CLUSTER '(' utility_option_list ')' qualified_name cluster_index_specification */ +#line 10613 "gram.y" + { + ClusterStmt *n = makeNode(ClusterStmt); + n->relation = (yyvsp[-1].range); + n->indexname = (yyvsp[0].str); + n->params = (yyvsp[-3].list); + (yyval.node) = (Node*)n; + } +#line 40487 "gram.c" + break; + + case 1494: /* ClusterStmt: CLUSTER opt_verbose */ +#line 10621 "gram.y" + { + ClusterStmt *n = makeNode(ClusterStmt); + n->relation = NULL; + n->indexname = NULL; + n->params = NIL; + if ((yyvsp[0].boolean)) + n->params = lappend(n->params, makeDefElem("verbose", NULL, (yylsp[0]))); + (yyval.node) = (Node*)n; + } +#line 40501 "gram.c" + break; + + case 1495: /* ClusterStmt: CLUSTER opt_verbose name ON qualified_name */ +#line 10632 "gram.y" + { + ClusterStmt *n = makeNode(ClusterStmt); + n->relation = (yyvsp[0].range); + n->indexname = (yyvsp[-2].str); + n->params = NIL; + if ((yyvsp[-3].boolean)) + n->params = lappend(n->params, makeDefElem("verbose", NULL, (yylsp[-3]))); + (yyval.node) = (Node*)n; + } +#line 40515 "gram.c" + break; + + case 1496: /* cluster_index_specification: USING name */ +#line 10644 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 40521 "gram.c" + break; + + case 1497: /* cluster_index_specification: %empty */ +#line 10645 "gram.y" + { (yyval.str) = NULL; } +#line 40527 "gram.c" + break; + + case 1498: /* VacuumStmt: VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relation_list */ +#line 10658 "gram.y" + { + VacuumStmt *n = makeNode(VacuumStmt); + n->options = NIL; + if ((yyvsp[-4].boolean)) + n->options = lappend(n->options, + makeDefElem("full", NULL, (yylsp[-4]))); + if ((yyvsp[-3].boolean)) + n->options = lappend(n->options, + makeDefElem("freeze", NULL, (yylsp[-3]))); + if ((yyvsp[-2].boolean)) + n->options = lappend(n->options, + makeDefElem("verbose", NULL, (yylsp[-2]))); + if ((yyvsp[-1].boolean)) + n->options = lappend(n->options, + makeDefElem("analyze", NULL, (yylsp[-1]))); + n->rels = (yyvsp[0].list); + n->is_vacuumcmd = true; + (yyval.node) = (Node *)n; + } +#line 40551 "gram.c" + break; + + case 1499: /* VacuumStmt: VACUUM '(' utility_option_list ')' opt_vacuum_relation_list */ +#line 10678 "gram.y" + { + VacuumStmt *n = makeNode(VacuumStmt); + n->options = (yyvsp[-2].list); + n->rels = (yyvsp[0].list); + n->is_vacuumcmd = true; + (yyval.node) = (Node *) n; + } +#line 40563 "gram.c" + break; + + case 1500: /* AnalyzeStmt: analyze_keyword opt_verbose opt_vacuum_relation_list */ +#line 10688 "gram.y" + { + VacuumStmt *n = makeNode(VacuumStmt); + n->options = NIL; + if ((yyvsp[-1].boolean)) + n->options = lappend(n->options, + makeDefElem("verbose", NULL, (yylsp[-1]))); + n->rels = (yyvsp[0].list); + n->is_vacuumcmd = false; + (yyval.node) = (Node *)n; + } +#line 40578 "gram.c" + break; + + case 1501: /* AnalyzeStmt: analyze_keyword '(' utility_option_list ')' opt_vacuum_relation_list */ +#line 10699 "gram.y" + { + VacuumStmt *n = makeNode(VacuumStmt); + n->options = (yyvsp[-2].list); + n->rels = (yyvsp[0].list); + n->is_vacuumcmd = false; + (yyval.node) = (Node *) n; + } +#line 40590 "gram.c" + break; + + case 1502: /* utility_option_list: utility_option_elem */ +#line 10710 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].defelt)); + } +#line 40598 "gram.c" + break; + + case 1503: /* utility_option_list: utility_option_list ',' utility_option_elem */ +#line 10714 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); + } +#line 40606 "gram.c" + break; + + case 1506: /* utility_option_elem: utility_option_name utility_option_arg */ +#line 10726 "gram.y" + { + (yyval.defelt) = makeDefElem((yyvsp[-1].str), (yyvsp[0].node), (yylsp[-1])); + } +#line 40614 "gram.c" + break; + + case 1507: /* utility_option_name: NonReservedWord */ +#line 10732 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 40620 "gram.c" + break; + + case 1508: /* utility_option_name: analyze_keyword */ +#line 10733 "gram.y" + { (yyval.str) = "analyze"; } +#line 40626 "gram.c" + break; + + case 1509: /* utility_option_arg: opt_boolean_or_string */ +#line 10737 "gram.y" + { (yyval.node) = (Node *) makeString((yyvsp[0].str)); } +#line 40632 "gram.c" + break; + + case 1510: /* utility_option_arg: NumericOnly */ +#line 10738 "gram.y" + { (yyval.node) = (Node *) (yyvsp[0].value); } +#line 40638 "gram.c" + break; + + case 1511: /* utility_option_arg: %empty */ +#line 10739 "gram.y" + { (yyval.node) = NULL; } +#line 40644 "gram.c" + break; + + case 1512: /* opt_analyze: analyze_keyword */ +#line 10743 "gram.y" + { (yyval.boolean) = true; } +#line 40650 "gram.c" + break; + + case 1513: /* opt_analyze: %empty */ +#line 10744 "gram.y" + { (yyval.boolean) = false; } +#line 40656 "gram.c" + break; + + case 1514: /* opt_verbose: VERBOSE */ +#line 10748 "gram.y" + { (yyval.boolean) = true; } +#line 40662 "gram.c" + break; + + case 1515: /* opt_verbose: %empty */ +#line 10749 "gram.y" + { (yyval.boolean) = false; } +#line 40668 "gram.c" + break; + + case 1516: /* opt_full: FULL */ +#line 10752 "gram.y" + { (yyval.boolean) = true; } +#line 40674 "gram.c" + break; + + case 1517: /* opt_full: %empty */ +#line 10753 "gram.y" + { (yyval.boolean) = false; } +#line 40680 "gram.c" + break; + + case 1518: /* opt_freeze: FREEZE */ +#line 10756 "gram.y" + { (yyval.boolean) = true; } +#line 40686 "gram.c" + break; + + case 1519: /* opt_freeze: %empty */ +#line 10757 "gram.y" + { (yyval.boolean) = false; } +#line 40692 "gram.c" + break; + + case 1520: /* opt_name_list: '(' name_list ')' */ +#line 10761 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 40698 "gram.c" + break; + + case 1521: /* opt_name_list: %empty */ +#line 10762 "gram.y" + { (yyval.list) = NIL; } +#line 40704 "gram.c" + break; + + case 1522: /* vacuum_relation: qualified_name opt_name_list */ +#line 10767 "gram.y" + { + (yyval.node) = (Node *) makeVacuumRelation((yyvsp[-1].range), InvalidOid, (yyvsp[0].list)); + } +#line 40712 "gram.c" + break; + + case 1523: /* vacuum_relation_list: vacuum_relation */ +#line 10774 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 40718 "gram.c" + break; + + case 1524: /* vacuum_relation_list: vacuum_relation_list ',' vacuum_relation */ +#line 10776 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 40724 "gram.c" + break; + + case 1525: /* opt_vacuum_relation_list: vacuum_relation_list */ +#line 10780 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 40730 "gram.c" + break; + + case 1526: /* opt_vacuum_relation_list: %empty */ +#line 10781 "gram.y" + { (yyval.list) = NIL; } +#line 40736 "gram.c" + break; + + case 1527: /* ExplainStmt: EXPLAIN ExplainableStmt */ +#line 10795 "gram.y" + { + ExplainStmt *n = makeNode(ExplainStmt); + n->query = (yyvsp[0].node); + n->options = NIL; + (yyval.node) = (Node *) n; + } +#line 40747 "gram.c" + break; + + case 1528: /* ExplainStmt: EXPLAIN analyze_keyword opt_verbose ExplainableStmt */ +#line 10802 "gram.y" + { + ExplainStmt *n = makeNode(ExplainStmt); + n->query = (yyvsp[0].node); + n->options = list_make1(makeDefElem("analyze", NULL, (yylsp[-2]))); + if ((yyvsp[-1].boolean)) + n->options = lappend(n->options, + makeDefElem("verbose", NULL, (yylsp[-1]))); + (yyval.node) = (Node *) n; + } +#line 40761 "gram.c" + break; + + case 1529: /* ExplainStmt: EXPLAIN VERBOSE ExplainableStmt */ +#line 10812 "gram.y" + { + ExplainStmt *n = makeNode(ExplainStmt); + n->query = (yyvsp[0].node); + n->options = list_make1(makeDefElem("verbose", NULL, (yylsp[-1]))); + (yyval.node) = (Node *) n; + } +#line 40772 "gram.c" + break; + + case 1530: /* ExplainStmt: EXPLAIN '(' utility_option_list ')' ExplainableStmt */ +#line 10819 "gram.y" + { + ExplainStmt *n = makeNode(ExplainStmt); + n->query = (yyvsp[0].node); + n->options = (yyvsp[-2].list); + (yyval.node) = (Node *) n; + } +#line 40783 "gram.c" + break; + + case 1540: /* PrepareStmt: PREPARE name prep_type_clause AS PreparableStmt */ +#line 10847 "gram.y" + { + PrepareStmt *n = makeNode(PrepareStmt); + n->name = (yyvsp[-3].str); + n->argtypes = (yyvsp[-2].list); + n->query = (yyvsp[0].node); + (yyval.node) = (Node *) n; + } +#line 40795 "gram.c" + break; + + case 1541: /* prep_type_clause: '(' type_list ')' */ +#line 10856 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 40801 "gram.c" + break; + + case 1542: /* prep_type_clause: %empty */ +#line 10857 "gram.y" + { (yyval.list) = NIL; } +#line 40807 "gram.c" + break; + + case 1547: /* ExecuteStmt: EXECUTE name execute_param_clause */ +#line 10875 "gram.y" + { + ExecuteStmt *n = makeNode(ExecuteStmt); + n->name = (yyvsp[-1].str); + n->params = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 40818 "gram.c" + break; + + case 1548: /* ExecuteStmt: CREATE OptTemp TABLE create_as_target AS EXECUTE name execute_param_clause opt_with_data */ +#line 10883 "gram.y" + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ExecuteStmt *n = makeNode(ExecuteStmt); + n->name = (yyvsp[-2].str); + n->params = (yyvsp[-1].list); + ctas->query = (Node *) n; + ctas->into = (yyvsp[-5].into); + ctas->objtype = OBJECT_TABLE; + ctas->is_select_into = false; + ctas->if_not_exists = false; + /* cram additional flags into the IntoClause */ + (yyvsp[-5].into)->rel->relpersistence = (yyvsp[-7].ival); + (yyvsp[-5].into)->skipData = !((yyvsp[0].boolean)); + (yyval.node) = (Node *) ctas; + } +#line 40838 "gram.c" + break; + + case 1549: /* ExecuteStmt: CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE name execute_param_clause opt_with_data */ +#line 10900 "gram.y" + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ExecuteStmt *n = makeNode(ExecuteStmt); + n->name = (yyvsp[-2].str); + n->params = (yyvsp[-1].list); + ctas->query = (Node *) n; + ctas->into = (yyvsp[-5].into); + ctas->objtype = OBJECT_TABLE; + ctas->is_select_into = false; + ctas->if_not_exists = true; + /* cram additional flags into the IntoClause */ + (yyvsp[-5].into)->rel->relpersistence = (yyvsp[-10].ival); + (yyvsp[-5].into)->skipData = !((yyvsp[0].boolean)); + (yyval.node) = (Node *) ctas; + } +#line 40858 "gram.c" + break; + + case 1550: /* execute_param_clause: '(' expr_list ')' */ +#line 10917 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 40864 "gram.c" + break; + + case 1551: /* execute_param_clause: %empty */ +#line 10918 "gram.y" + { (yyval.list) = NIL; } +#line 40870 "gram.c" + break; + + case 1552: /* DeallocateStmt: DEALLOCATE name */ +#line 10929 "gram.y" + { + DeallocateStmt *n = makeNode(DeallocateStmt); + n->name = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 40880 "gram.c" + break; + + case 1553: /* DeallocateStmt: DEALLOCATE PREPARE name */ +#line 10935 "gram.y" + { + DeallocateStmt *n = makeNode(DeallocateStmt); + n->name = (yyvsp[0].str); + (yyval.node) = (Node *) n; + } +#line 40890 "gram.c" + break; + + case 1554: /* DeallocateStmt: DEALLOCATE ALL */ +#line 10941 "gram.y" + { + DeallocateStmt *n = makeNode(DeallocateStmt); + n->name = NULL; + (yyval.node) = (Node *) n; + } +#line 40900 "gram.c" + break; + + case 1555: /* DeallocateStmt: DEALLOCATE PREPARE ALL */ +#line 10947 "gram.y" + { + DeallocateStmt *n = makeNode(DeallocateStmt); + n->name = NULL; + (yyval.node) = (Node *) n; + } +#line 40910 "gram.c" + break; + + case 1556: /* InsertStmt: opt_with_clause INSERT INTO insert_target insert_rest opt_on_conflict returning_clause */ +#line 10964 "gram.y" + { + (yyvsp[-2].istmt)->relation = (yyvsp[-3].range); + (yyvsp[-2].istmt)->onConflictClause = (yyvsp[-1].onconflict); + (yyvsp[-2].istmt)->returningList = (yyvsp[0].list); + (yyvsp[-2].istmt)->withClause = (yyvsp[-6].with); + (yyval.node) = (Node *) (yyvsp[-2].istmt); + } +#line 40922 "gram.c" + break; + + case 1557: /* insert_target: qualified_name */ +#line 10981 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + } +#line 40930 "gram.c" + break; + + case 1558: /* insert_target: qualified_name AS ColId */ +#line 10985 "gram.y" + { + (yyvsp[-2].range)->alias = makeAlias((yyvsp[0].str), NIL); + (yyval.range) = (yyvsp[-2].range); + } +#line 40939 "gram.c" + break; + + case 1559: /* insert_rest: SelectStmt */ +#line 10993 "gram.y" + { + (yyval.istmt) = makeNode(InsertStmt); + (yyval.istmt)->cols = NIL; + (yyval.istmt)->selectStmt = (yyvsp[0].node); + } +#line 40949 "gram.c" + break; + + case 1560: /* insert_rest: OVERRIDING override_kind VALUE_P SelectStmt */ +#line 10999 "gram.y" + { + (yyval.istmt) = makeNode(InsertStmt); + (yyval.istmt)->cols = NIL; + (yyval.istmt)->override = (yyvsp[-2].ival); + (yyval.istmt)->selectStmt = (yyvsp[0].node); + } +#line 40960 "gram.c" + break; + + case 1561: /* insert_rest: '(' insert_column_list ')' SelectStmt */ +#line 11006 "gram.y" + { + (yyval.istmt) = makeNode(InsertStmt); + (yyval.istmt)->cols = (yyvsp[-2].list); + (yyval.istmt)->selectStmt = (yyvsp[0].node); + } +#line 40970 "gram.c" + break; + + case 1562: /* insert_rest: '(' insert_column_list ')' OVERRIDING override_kind VALUE_P SelectStmt */ +#line 11012 "gram.y" + { + (yyval.istmt) = makeNode(InsertStmt); + (yyval.istmt)->cols = (yyvsp[-5].list); + (yyval.istmt)->override = (yyvsp[-2].ival); + (yyval.istmt)->selectStmt = (yyvsp[0].node); + } +#line 40981 "gram.c" + break; + + case 1563: /* insert_rest: DEFAULT VALUES */ +#line 11019 "gram.y" + { + (yyval.istmt) = makeNode(InsertStmt); + (yyval.istmt)->cols = NIL; + (yyval.istmt)->selectStmt = NULL; + } +#line 40991 "gram.c" + break; + + case 1564: /* override_kind: USER */ +#line 11027 "gram.y" + { (yyval.ival) = OVERRIDING_USER_VALUE; } +#line 40997 "gram.c" + break; + + case 1565: /* override_kind: SYSTEM_P */ +#line 11028 "gram.y" + { (yyval.ival) = OVERRIDING_SYSTEM_VALUE; } +#line 41003 "gram.c" + break; + + case 1566: /* insert_column_list: insert_column_item */ +#line 11033 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].target)); } +#line 41009 "gram.c" + break; + + case 1567: /* insert_column_list: insert_column_list ',' insert_column_item */ +#line 11035 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].target)); } +#line 41015 "gram.c" + break; + + case 1568: /* insert_column_item: ColId opt_indirection */ +#line 11040 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = (yyvsp[-1].str); + (yyval.target)->indirection = check_indirection((yyvsp[0].list), yyscanner); + (yyval.target)->val = NULL; + (yyval.target)->location = (yylsp[-1]); + } +#line 41027 "gram.c" + break; + + case 1569: /* opt_on_conflict: ON CONFLICT opt_conf_expr DO UPDATE SET set_clause_list where_clause */ +#line 11051 "gram.y" + { + (yyval.onconflict) = makeNode(OnConflictClause); + (yyval.onconflict)->action = ONCONFLICT_UPDATE; + (yyval.onconflict)->infer = (yyvsp[-5].infer); + (yyval.onconflict)->targetList = (yyvsp[-1].list); + (yyval.onconflict)->whereClause = (yyvsp[0].node); + (yyval.onconflict)->location = (yylsp[-7]); + } +#line 41040 "gram.c" + break; + + case 1570: /* opt_on_conflict: ON CONFLICT opt_conf_expr DO NOTHING */ +#line 11061 "gram.y" + { + (yyval.onconflict) = makeNode(OnConflictClause); + (yyval.onconflict)->action = ONCONFLICT_NOTHING; + (yyval.onconflict)->infer = (yyvsp[-2].infer); + (yyval.onconflict)->targetList = NIL; + (yyval.onconflict)->whereClause = NULL; + (yyval.onconflict)->location = (yylsp[-4]); + } +#line 41053 "gram.c" + break; + + case 1571: /* opt_on_conflict: %empty */ +#line 11070 "gram.y" + { + (yyval.onconflict) = NULL; + } +#line 41061 "gram.c" + break; + + case 1572: /* opt_conf_expr: '(' index_params ')' where_clause */ +#line 11077 "gram.y" + { + (yyval.infer) = makeNode(InferClause); + (yyval.infer)->indexElems = (yyvsp[-2].list); + (yyval.infer)->whereClause = (yyvsp[0].node); + (yyval.infer)->conname = NULL; + (yyval.infer)->location = (yylsp[-3]); + } +#line 41073 "gram.c" + break; + + case 1573: /* opt_conf_expr: ON CONSTRAINT name */ +#line 11086 "gram.y" + { + (yyval.infer) = makeNode(InferClause); + (yyval.infer)->indexElems = NIL; + (yyval.infer)->whereClause = NULL; + (yyval.infer)->conname = (yyvsp[0].str); + (yyval.infer)->location = (yylsp[-2]); + } +#line 41085 "gram.c" + break; + + case 1574: /* opt_conf_expr: %empty */ +#line 11094 "gram.y" + { + (yyval.infer) = NULL; + } +#line 41093 "gram.c" + break; + + case 1575: /* returning_clause: RETURNING target_list */ +#line 11100 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 41099 "gram.c" + break; + + case 1576: /* returning_clause: %empty */ +#line 11101 "gram.y" + { (yyval.list) = NIL; } +#line 41105 "gram.c" + break; + + case 1577: /* DeleteStmt: opt_with_clause DELETE_P FROM relation_expr_opt_alias using_clause where_or_current_clause returning_clause */ +#line 11114 "gram.y" + { + DeleteStmt *n = makeNode(DeleteStmt); + n->relation = (yyvsp[-3].range); + n->usingClause = (yyvsp[-2].list); + n->whereClause = (yyvsp[-1].node); + n->returningList = (yyvsp[0].list); + n->withClause = (yyvsp[-6].with); + (yyval.node) = (Node *)n; + } +#line 41119 "gram.c" + break; + + case 1578: /* using_clause: USING from_list */ +#line 11126 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 41125 "gram.c" + break; + + case 1579: /* using_clause: %empty */ +#line 11127 "gram.y" + { (yyval.list) = NIL; } +#line 41131 "gram.c" + break; + + case 1580: /* LockStmt: LOCK_P opt_table relation_expr_list opt_lock opt_nowait */ +#line 11139 "gram.y" + { + LockStmt *n = makeNode(LockStmt); + + n->relations = (yyvsp[-2].list); + n->mode = (yyvsp[-1].ival); + n->nowait = (yyvsp[0].boolean); + (yyval.node) = (Node *)n; + } +#line 41144 "gram.c" + break; + + case 1581: /* opt_lock: IN_P lock_type MODE */ +#line 11149 "gram.y" + { (yyval.ival) = (yyvsp[-1].ival); } +#line 41150 "gram.c" + break; + + case 1582: /* opt_lock: %empty */ +#line 11150 "gram.y" + { (yyval.ival) = AccessExclusiveLock; } +#line 41156 "gram.c" + break; + + case 1583: /* lock_type: ACCESS SHARE */ +#line 11153 "gram.y" + { (yyval.ival) = AccessShareLock; } +#line 41162 "gram.c" + break; + + case 1584: /* lock_type: ROW SHARE */ +#line 11154 "gram.y" + { (yyval.ival) = RowShareLock; } +#line 41168 "gram.c" + break; + + case 1585: /* lock_type: ROW EXCLUSIVE */ +#line 11155 "gram.y" + { (yyval.ival) = RowExclusiveLock; } +#line 41174 "gram.c" + break; + + case 1586: /* lock_type: SHARE UPDATE EXCLUSIVE */ +#line 11156 "gram.y" + { (yyval.ival) = ShareUpdateExclusiveLock; } +#line 41180 "gram.c" + break; + + case 1587: /* lock_type: SHARE */ +#line 11157 "gram.y" + { (yyval.ival) = ShareLock; } +#line 41186 "gram.c" + break; + + case 1588: /* lock_type: SHARE ROW EXCLUSIVE */ +#line 11158 "gram.y" + { (yyval.ival) = ShareRowExclusiveLock; } +#line 41192 "gram.c" + break; + + case 1589: /* lock_type: EXCLUSIVE */ +#line 11159 "gram.y" + { (yyval.ival) = ExclusiveLock; } +#line 41198 "gram.c" + break; + + case 1590: /* lock_type: ACCESS EXCLUSIVE */ +#line 11160 "gram.y" + { (yyval.ival) = AccessExclusiveLock; } +#line 41204 "gram.c" + break; + + case 1591: /* opt_nowait: NOWAIT */ +#line 11163 "gram.y" + { (yyval.boolean) = true; } +#line 41210 "gram.c" + break; + + case 1592: /* opt_nowait: %empty */ +#line 11164 "gram.y" + { (yyval.boolean) = false; } +#line 41216 "gram.c" + break; + + case 1593: /* opt_nowait_or_skip: NOWAIT */ +#line 11168 "gram.y" + { (yyval.ival) = LockWaitError; } +#line 41222 "gram.c" + break; + + case 1594: /* opt_nowait_or_skip: SKIP LOCKED */ +#line 11169 "gram.y" + { (yyval.ival) = LockWaitSkip; } +#line 41228 "gram.c" + break; + + case 1595: /* opt_nowait_or_skip: %empty */ +#line 11170 "gram.y" + { (yyval.ival) = LockWaitBlock; } +#line 41234 "gram.c" + break; + + case 1596: /* UpdateStmt: opt_with_clause UPDATE relation_expr_opt_alias SET set_clause_list from_clause where_or_current_clause returning_clause */ +#line 11186 "gram.y" + { + UpdateStmt *n = makeNode(UpdateStmt); + n->relation = (yyvsp[-5].range); + n->targetList = (yyvsp[-3].list); + n->fromClause = (yyvsp[-2].list); + n->whereClause = (yyvsp[-1].node); + n->returningList = (yyvsp[0].list); + n->withClause = (yyvsp[-7].with); + (yyval.node) = (Node *)n; + } +#line 41249 "gram.c" + break; + + case 1597: /* set_clause_list: set_clause */ +#line 11199 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 41255 "gram.c" + break; + + case 1598: /* set_clause_list: set_clause_list ',' set_clause */ +#line 11200 "gram.y" + { (yyval.list) = list_concat((yyvsp[-2].list),(yyvsp[0].list)); } +#line 41261 "gram.c" + break; + + case 1599: /* set_clause: set_target '=' a_expr */ +#line 11205 "gram.y" + { + (yyvsp[-2].target)->val = (Node *) (yyvsp[0].node); + (yyval.list) = list_make1((yyvsp[-2].target)); + } +#line 41270 "gram.c" + break; + + case 1600: /* set_clause: '(' set_target_list ')' '=' a_expr */ +#line 11210 "gram.y" + { + int ncolumns = list_length((yyvsp[-3].list)); + int i = 1; + ListCell *col_cell; + + /* Create a MultiAssignRef source for each target */ + foreach(col_cell, (yyvsp[-3].list)) + { + ResTarget *res_col = (ResTarget *) lfirst(col_cell); + MultiAssignRef *r = makeNode(MultiAssignRef); + + r->source = (Node *) (yyvsp[0].node); + r->colno = i; + r->ncolumns = ncolumns; + res_col->val = (Node *) r; + i++; + } + + (yyval.list) = (yyvsp[-3].list); + } +#line 41295 "gram.c" + break; + + case 1601: /* set_target: ColId opt_indirection */ +#line 11234 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = (yyvsp[-1].str); + (yyval.target)->indirection = check_indirection((yyvsp[0].list), yyscanner); + (yyval.target)->val = NULL; /* upper production sets this */ + (yyval.target)->location = (yylsp[-1]); + } +#line 41307 "gram.c" + break; + + case 1602: /* set_target_list: set_target */ +#line 11244 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].target)); } +#line 41313 "gram.c" + break; + + case 1603: /* set_target_list: set_target_list ',' set_target */ +#line 11245 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list),(yyvsp[0].target)); } +#line 41319 "gram.c" + break; + + case 1604: /* DeclareCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR SelectStmt */ +#line 11256 "gram.y" + { + DeclareCursorStmt *n = makeNode(DeclareCursorStmt); + n->portalname = (yyvsp[-5].str); + /* currently we always set FAST_PLAN option */ + n->options = (yyvsp[-4].ival) | (yyvsp[-2].ival) | CURSOR_OPT_FAST_PLAN; + n->query = (yyvsp[0].node); + (yyval.node) = (Node *)n; + } +#line 41332 "gram.c" + break; + + case 1605: /* cursor_name: name */ +#line 11266 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 41338 "gram.c" + break; + + case 1606: /* cursor_options: %empty */ +#line 11269 "gram.y" + { (yyval.ival) = 0; } +#line 41344 "gram.c" + break; + + case 1607: /* cursor_options: cursor_options NO SCROLL */ +#line 11270 "gram.y" + { (yyval.ival) = (yyvsp[-2].ival) | CURSOR_OPT_NO_SCROLL; } +#line 41350 "gram.c" + break; + + case 1608: /* cursor_options: cursor_options SCROLL */ +#line 11271 "gram.y" + { (yyval.ival) = (yyvsp[-1].ival) | CURSOR_OPT_SCROLL; } +#line 41356 "gram.c" + break; + + case 1609: /* cursor_options: cursor_options BINARY */ +#line 11272 "gram.y" + { (yyval.ival) = (yyvsp[-1].ival) | CURSOR_OPT_BINARY; } +#line 41362 "gram.c" + break; + + case 1610: /* cursor_options: cursor_options ASENSITIVE */ +#line 11273 "gram.y" + { (yyval.ival) = (yyvsp[-1].ival) | CURSOR_OPT_ASENSITIVE; } +#line 41368 "gram.c" + break; + + case 1611: /* cursor_options: cursor_options INSENSITIVE */ +#line 11274 "gram.y" + { (yyval.ival) = (yyvsp[-1].ival) | CURSOR_OPT_INSENSITIVE; } +#line 41374 "gram.c" + break; + + case 1612: /* opt_hold: %empty */ +#line 11277 "gram.y" + { (yyval.ival) = 0; } +#line 41380 "gram.c" + break; + + case 1613: /* opt_hold: WITH HOLD */ +#line 11278 "gram.y" + { (yyval.ival) = CURSOR_OPT_HOLD; } +#line 41386 "gram.c" + break; + + case 1614: /* opt_hold: WITHOUT HOLD */ +#line 11279 "gram.y" + { (yyval.ival) = 0; } +#line 41392 "gram.c" + break; + + case 1617: /* select_with_parens: '(' select_no_parens ')' */ +#line 11332 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 41398 "gram.c" + break; + + case 1618: /* select_with_parens: '(' select_with_parens ')' */ +#line 11333 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 41404 "gram.c" + break; + + case 1619: /* select_no_parens: simple_select */ +#line 11348 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 41410 "gram.c" + break; + + case 1620: /* select_no_parens: select_clause sort_clause */ +#line 11350 "gram.y" + { + insertSelectOptions((SelectStmt *) (yyvsp[-1].node), (yyvsp[0].list), NIL, + NULL, NULL, + yyscanner); + (yyval.node) = (yyvsp[-1].node); + } +#line 41421 "gram.c" + break; + + case 1621: /* select_no_parens: select_clause opt_sort_clause for_locking_clause opt_select_limit */ +#line 11357 "gram.y" + { + insertSelectOptions((SelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[-1].list), + (yyvsp[0].selectlimit), + NULL, + yyscanner); + (yyval.node) = (yyvsp[-3].node); + } +#line 41433 "gram.c" + break; + + case 1622: /* select_no_parens: select_clause opt_sort_clause select_limit opt_for_locking_clause */ +#line 11365 "gram.y" + { + insertSelectOptions((SelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[0].list), + (yyvsp[-1].selectlimit), + NULL, + yyscanner); + (yyval.node) = (yyvsp[-3].node); + } +#line 41445 "gram.c" + break; + + case 1623: /* select_no_parens: with_clause select_clause */ +#line 11373 "gram.y" + { + insertSelectOptions((SelectStmt *) (yyvsp[0].node), NULL, NIL, + NULL, + (yyvsp[-1].with), + yyscanner); + (yyval.node) = (yyvsp[0].node); + } +#line 41457 "gram.c" + break; + + case 1624: /* select_no_parens: with_clause select_clause sort_clause */ +#line 11381 "gram.y" + { + insertSelectOptions((SelectStmt *) (yyvsp[-1].node), (yyvsp[0].list), NIL, + NULL, + (yyvsp[-2].with), + yyscanner); + (yyval.node) = (yyvsp[-1].node); + } +#line 41469 "gram.c" + break; + + case 1625: /* select_no_parens: with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit */ +#line 11389 "gram.y" + { + insertSelectOptions((SelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[-1].list), + (yyvsp[0].selectlimit), + (yyvsp[-4].with), + yyscanner); + (yyval.node) = (yyvsp[-3].node); + } +#line 41481 "gram.c" + break; + + case 1626: /* select_no_parens: with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause */ +#line 11397 "gram.y" + { + insertSelectOptions((SelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[0].list), + (yyvsp[-1].selectlimit), + (yyvsp[-4].with), + yyscanner); + (yyval.node) = (yyvsp[-3].node); + } +#line 41493 "gram.c" + break; + + case 1627: /* select_clause: simple_select */ +#line 11407 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 41499 "gram.c" + break; + + case 1628: /* select_clause: select_with_parens */ +#line 11408 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 41505 "gram.c" + break; + + case 1629: /* simple_select: SELECT opt_all_clause opt_target_list into_clause from_clause where_clause group_clause having_clause window_clause */ +#line 11443 "gram.y" + { + SelectStmt *n = makeNode(SelectStmt); + n->targetList = (yyvsp[-6].list); + n->intoClause = (yyvsp[-5].into); + n->fromClause = (yyvsp[-4].list); + n->whereClause = (yyvsp[-3].node); + n->groupClause = ((yyvsp[-2].groupclause))->list; + n->groupDistinct = ((yyvsp[-2].groupclause))->distinct; + n->havingClause = (yyvsp[-1].node); + n->windowClause = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 41522 "gram.c" + break; + + case 1630: /* simple_select: SELECT distinct_clause target_list into_clause from_clause where_clause group_clause having_clause window_clause */ +#line 11458 "gram.y" + { + SelectStmt *n = makeNode(SelectStmt); + n->distinctClause = (yyvsp[-7].list); + n->targetList = (yyvsp[-6].list); + n->intoClause = (yyvsp[-5].into); + n->fromClause = (yyvsp[-4].list); + n->whereClause = (yyvsp[-3].node); + n->groupClause = ((yyvsp[-2].groupclause))->list; + n->groupDistinct = ((yyvsp[-2].groupclause))->distinct; + n->havingClause = (yyvsp[-1].node); + n->windowClause = (yyvsp[0].list); + (yyval.node) = (Node *)n; + } +#line 41540 "gram.c" + break; + + case 1631: /* simple_select: values_clause */ +#line 11471 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 41546 "gram.c" + break; + + case 1632: /* simple_select: TABLE relation_expr */ +#line 11473 "gram.y" + { + /* same as SELECT * FROM relation_expr */ + ColumnRef *cr = makeNode(ColumnRef); + ResTarget *rt = makeNode(ResTarget); + SelectStmt *n = makeNode(SelectStmt); + + cr->fields = list_make1(makeNode(A_Star)); + cr->location = -1; + + rt->name = NULL; + rt->indirection = NIL; + rt->val = (Node *)cr; + rt->location = -1; + + n->targetList = list_make1(rt); + n->fromClause = list_make1((yyvsp[0].range)); + (yyval.node) = (Node *)n; + } +#line 41569 "gram.c" + break; + + case 1633: /* simple_select: select_clause UNION set_quantifier select_clause */ +#line 11492 "gram.y" + { + (yyval.node) = makeSetOp(SETOP_UNION, (yyvsp[-1].setquantifier) == SET_QUANTIFIER_ALL, (yyvsp[-3].node), (yyvsp[0].node)); + } +#line 41577 "gram.c" + break; + + case 1634: /* simple_select: select_clause INTERSECT set_quantifier select_clause */ +#line 11496 "gram.y" + { + (yyval.node) = makeSetOp(SETOP_INTERSECT, (yyvsp[-1].setquantifier) == SET_QUANTIFIER_ALL, (yyvsp[-3].node), (yyvsp[0].node)); + } +#line 41585 "gram.c" + break; + + case 1635: /* simple_select: select_clause EXCEPT set_quantifier select_clause */ +#line 11500 "gram.y" + { + (yyval.node) = makeSetOp(SETOP_EXCEPT, (yyvsp[-1].setquantifier) == SET_QUANTIFIER_ALL, (yyvsp[-3].node), (yyvsp[0].node)); + } +#line 41593 "gram.c" + break; + + case 1636: /* with_clause: WITH cte_list */ +#line 11515 "gram.y" + { + (yyval.with) = makeNode(WithClause); + (yyval.with)->ctes = (yyvsp[0].list); + (yyval.with)->recursive = false; + (yyval.with)->location = (yylsp[-1]); + } +#line 41604 "gram.c" + break; + + case 1637: /* with_clause: WITH_LA cte_list */ +#line 11522 "gram.y" + { + (yyval.with) = makeNode(WithClause); + (yyval.with)->ctes = (yyvsp[0].list); + (yyval.with)->recursive = false; + (yyval.with)->location = (yylsp[-1]); + } +#line 41615 "gram.c" + break; + + case 1638: /* with_clause: WITH RECURSIVE cte_list */ +#line 11529 "gram.y" + { + (yyval.with) = makeNode(WithClause); + (yyval.with)->ctes = (yyvsp[0].list); + (yyval.with)->recursive = true; + (yyval.with)->location = (yylsp[-2]); + } +#line 41626 "gram.c" + break; + + case 1639: /* cte_list: common_table_expr */ +#line 11538 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 41632 "gram.c" + break; + + case 1640: /* cte_list: cte_list ',' common_table_expr */ +#line 11539 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 41638 "gram.c" + break; + + case 1641: /* common_table_expr: name opt_name_list AS opt_materialized '(' PreparableStmt ')' opt_search_clause opt_cycle_clause */ +#line 11543 "gram.y" + { + CommonTableExpr *n = makeNode(CommonTableExpr); + n->ctename = (yyvsp[-8].str); + n->aliascolnames = (yyvsp[-7].list); + n->ctematerialized = (yyvsp[-5].ival); + n->ctequery = (yyvsp[-3].node); + n->search_clause = castNode(CTESearchClause, (yyvsp[-1].node)); + n->cycle_clause = castNode(CTECycleClause, (yyvsp[0].node)); + n->location = (yylsp[-8]); + (yyval.node) = (Node *) n; + } +#line 41654 "gram.c" + break; + + case 1642: /* opt_materialized: MATERIALIZED */ +#line 11557 "gram.y" + { (yyval.ival) = CTEMaterializeAlways; } +#line 41660 "gram.c" + break; + + case 1643: /* opt_materialized: NOT MATERIALIZED */ +#line 11558 "gram.y" + { (yyval.ival) = CTEMaterializeNever; } +#line 41666 "gram.c" + break; + + case 1644: /* opt_materialized: %empty */ +#line 11559 "gram.y" + { (yyval.ival) = CTEMaterializeDefault; } +#line 41672 "gram.c" + break; + + case 1645: /* opt_search_clause: SEARCH DEPTH FIRST_P BY columnList SET ColId */ +#line 11564 "gram.y" + { + CTESearchClause *n = makeNode(CTESearchClause); + n->search_col_list = (yyvsp[-2].list); + n->search_breadth_first = false; + n->search_seq_column = (yyvsp[0].str); + n->location = (yylsp[-6]); + (yyval.node) = (Node *) n; + } +#line 41685 "gram.c" + break; + + case 1646: /* opt_search_clause: SEARCH BREADTH FIRST_P BY columnList SET ColId */ +#line 11573 "gram.y" + { + CTESearchClause *n = makeNode(CTESearchClause); + n->search_col_list = (yyvsp[-2].list); + n->search_breadth_first = true; + n->search_seq_column = (yyvsp[0].str); + n->location = (yylsp[-6]); + (yyval.node) = (Node *) n; + } +#line 41698 "gram.c" + break; + + case 1647: /* opt_search_clause: %empty */ +#line 11582 "gram.y" + { + (yyval.node) = NULL; + } +#line 41706 "gram.c" + break; + + case 1648: /* opt_cycle_clause: CYCLE columnList SET ColId TO AexprConst DEFAULT AexprConst USING ColId */ +#line 11589 "gram.y" + { + CTECycleClause *n = makeNode(CTECycleClause); + n->cycle_col_list = (yyvsp[-8].list); + n->cycle_mark_column = (yyvsp[-6].str); + n->cycle_mark_value = (yyvsp[-4].node); + n->cycle_mark_default = (yyvsp[-2].node); + n->cycle_path_column = (yyvsp[0].str); + n->location = (yylsp[-9]); + (yyval.node) = (Node *) n; + } +#line 41721 "gram.c" + break; + + case 1649: /* opt_cycle_clause: CYCLE columnList SET ColId USING ColId */ +#line 11600 "gram.y" + { + CTECycleClause *n = makeNode(CTECycleClause); + n->cycle_col_list = (yyvsp[-4].list); + n->cycle_mark_column = (yyvsp[-2].str); + n->cycle_mark_value = makeBoolAConst(true, -1); + n->cycle_mark_default = makeBoolAConst(false, -1); + n->cycle_path_column = (yyvsp[0].str); + n->location = (yylsp[-5]); + (yyval.node) = (Node *) n; + } +#line 41736 "gram.c" + break; + + case 1650: /* opt_cycle_clause: %empty */ +#line 11611 "gram.y" + { + (yyval.node) = NULL; + } +#line 41744 "gram.c" + break; + + case 1651: /* opt_with_clause: with_clause */ +#line 11617 "gram.y" + { (yyval.with) = (yyvsp[0].with); } +#line 41750 "gram.c" + break; + + case 1652: /* opt_with_clause: %empty */ +#line 11618 "gram.y" + { (yyval.with) = NULL; } +#line 41756 "gram.c" + break; + + case 1653: /* into_clause: INTO OptTempTableName */ +#line 11623 "gram.y" + { + (yyval.into) = makeNode(IntoClause); + (yyval.into)->rel = (yyvsp[0].range); + (yyval.into)->colNames = NIL; + (yyval.into)->options = NIL; + (yyval.into)->onCommit = ONCOMMIT_NOOP; + (yyval.into)->tableSpaceName = NULL; + (yyval.into)->viewQuery = NULL; + (yyval.into)->skipData = false; + } +#line 41771 "gram.c" + break; + + case 1654: /* into_clause: %empty */ +#line 11634 "gram.y" + { (yyval.into) = NULL; } +#line 41777 "gram.c" + break; + + case 1655: /* OptTempTableName: TEMPORARY opt_table qualified_name */ +#line 11643 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; + } +#line 41786 "gram.c" + break; + + case 1656: /* OptTempTableName: TEMP opt_table qualified_name */ +#line 11648 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; + } +#line 41795 "gram.c" + break; + + case 1657: /* OptTempTableName: LOCAL TEMPORARY opt_table qualified_name */ +#line 11653 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; + } +#line 41804 "gram.c" + break; + + case 1658: /* OptTempTableName: LOCAL TEMP opt_table qualified_name */ +#line 11658 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; + } +#line 41813 "gram.c" + break; + + case 1659: /* OptTempTableName: GLOBAL TEMPORARY opt_table qualified_name */ +#line 11663 "gram.y" + { + ereport(WARNING, + (errmsg("GLOBAL is deprecated in temporary table creation"), + parser_errposition((yylsp[-3])))); + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; + } +#line 41825 "gram.c" + break; + + case 1660: /* OptTempTableName: GLOBAL TEMP opt_table qualified_name */ +#line 11671 "gram.y" + { + ereport(WARNING, + (errmsg("GLOBAL is deprecated in temporary table creation"), + parser_errposition((yylsp[-3])))); + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_TEMP; + } +#line 41837 "gram.c" + break; + + case 1661: /* OptTempTableName: UNLOGGED opt_table qualified_name */ +#line 11679 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_UNLOGGED; + } +#line 41846 "gram.c" + break; + + case 1662: /* OptTempTableName: TABLE qualified_name */ +#line 11684 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_PERMANENT; + } +#line 41855 "gram.c" + break; + + case 1663: /* OptTempTableName: qualified_name */ +#line 11689 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + (yyval.range)->relpersistence = RELPERSISTENCE_PERMANENT; + } +#line 41864 "gram.c" + break; + + case 1666: /* set_quantifier: ALL */ +#line 11700 "gram.y" + { (yyval.setquantifier) = SET_QUANTIFIER_ALL; } +#line 41870 "gram.c" + break; + + case 1667: /* set_quantifier: DISTINCT */ +#line 11701 "gram.y" + { (yyval.setquantifier) = SET_QUANTIFIER_DISTINCT; } +#line 41876 "gram.c" + break; + + case 1668: /* set_quantifier: %empty */ +#line 11702 "gram.y" + { (yyval.setquantifier) = SET_QUANTIFIER_DEFAULT; } +#line 41882 "gram.c" + break; + + case 1669: /* distinct_clause: DISTINCT */ +#line 11709 "gram.y" + { (yyval.list) = list_make1(NIL); } +#line 41888 "gram.c" + break; + + case 1670: /* distinct_clause: DISTINCT ON '(' expr_list ')' */ +#line 11710 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 41894 "gram.c" + break; + + case 1673: /* opt_distinct_clause: distinct_clause */ +#line 11719 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 41900 "gram.c" + break; + + case 1674: /* opt_distinct_clause: opt_all_clause */ +#line 11720 "gram.y" + { (yyval.list) = NIL; } +#line 41906 "gram.c" + break; + + case 1675: /* opt_sort_clause: sort_clause */ +#line 11724 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 41912 "gram.c" + break; + + case 1676: /* opt_sort_clause: %empty */ +#line 11725 "gram.y" + { (yyval.list) = NIL; } +#line 41918 "gram.c" + break; + + case 1677: /* sort_clause: ORDER BY sortby_list */ +#line 11729 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 41924 "gram.c" + break; + + case 1678: /* sortby_list: sortby */ +#line 11733 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].sortby)); } +#line 41930 "gram.c" + break; + + case 1679: /* sortby_list: sortby_list ',' sortby */ +#line 11734 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].sortby)); } +#line 41936 "gram.c" + break; + + case 1680: /* sortby: a_expr USING qual_all_Op opt_nulls_order */ +#line 11738 "gram.y" + { + (yyval.sortby) = makeNode(SortBy); + (yyval.sortby)->node = (yyvsp[-3].node); + (yyval.sortby)->sortby_dir = SORTBY_USING; + (yyval.sortby)->sortby_nulls = (yyvsp[0].ival); + (yyval.sortby)->useOp = (yyvsp[-1].list); + (yyval.sortby)->location = (yylsp[-1]); + } +#line 41949 "gram.c" + break; + + case 1681: /* sortby: a_expr opt_asc_desc opt_nulls_order */ +#line 11747 "gram.y" + { + (yyval.sortby) = makeNode(SortBy); + (yyval.sortby)->node = (yyvsp[-2].node); + (yyval.sortby)->sortby_dir = (yyvsp[-1].ival); + (yyval.sortby)->sortby_nulls = (yyvsp[0].ival); + (yyval.sortby)->useOp = NIL; + (yyval.sortby)->location = -1; /* no operator */ + } +#line 41962 "gram.c" + break; + + case 1682: /* select_limit: limit_clause offset_clause */ +#line 11760 "gram.y" + { + (yyval.selectlimit) = (yyvsp[-1].selectlimit); + ((yyval.selectlimit))->limitOffset = (yyvsp[0].node); + } +#line 41971 "gram.c" + break; + + case 1683: /* select_limit: offset_clause limit_clause */ +#line 11765 "gram.y" + { + (yyval.selectlimit) = (yyvsp[0].selectlimit); + ((yyval.selectlimit))->limitOffset = (yyvsp[-1].node); + } +#line 41980 "gram.c" + break; + + case 1684: /* select_limit: limit_clause */ +#line 11770 "gram.y" + { + (yyval.selectlimit) = (yyvsp[0].selectlimit); + } +#line 41988 "gram.c" + break; + + case 1685: /* select_limit: offset_clause */ +#line 11774 "gram.y" + { + SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + n->limitOffset = (yyvsp[0].node); + n->limitCount = NULL; + n->limitOption = LIMIT_OPTION_COUNT; + (yyval.selectlimit) = n; + } +#line 42000 "gram.c" + break; + + case 1686: /* opt_select_limit: select_limit */ +#line 11784 "gram.y" + { (yyval.selectlimit) = (yyvsp[0].selectlimit); } +#line 42006 "gram.c" + break; + + case 1687: /* opt_select_limit: %empty */ +#line 11785 "gram.y" + { (yyval.selectlimit) = NULL; } +#line 42012 "gram.c" + break; + + case 1688: /* limit_clause: LIMIT select_limit_value */ +#line 11790 "gram.y" + { + SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + n->limitOffset = NULL; + n->limitCount = (yyvsp[0].node); + n->limitOption = LIMIT_OPTION_COUNT; + (yyval.selectlimit) = n; + } +#line 42024 "gram.c" + break; + + case 1689: /* limit_clause: LIMIT select_limit_value ',' select_offset_value */ +#line 11798 "gram.y" + { + /* Disabled because it was too confusing, bjm 2002-02-18 */ + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("LIMIT #,# syntax is not supported"), + errhint("Use separate LIMIT and OFFSET clauses."), + parser_errposition((yylsp[-3])))); + } +#line 42037 "gram.c" + break; + + case 1690: /* limit_clause: FETCH first_or_next select_fetch_first_value row_or_rows ONLY */ +#line 11814 "gram.y" + { + SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + n->limitOffset = NULL; + n->limitCount = (yyvsp[-2].node); + n->limitOption = LIMIT_OPTION_COUNT; + (yyval.selectlimit) = n; + } +#line 42049 "gram.c" + break; + + case 1691: /* limit_clause: FETCH first_or_next select_fetch_first_value row_or_rows WITH TIES */ +#line 11822 "gram.y" + { + SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + n->limitOffset = NULL; + n->limitCount = (yyvsp[-3].node); + n->limitOption = LIMIT_OPTION_WITH_TIES; + (yyval.selectlimit) = n; + } +#line 42061 "gram.c" + break; + + case 1692: /* limit_clause: FETCH first_or_next row_or_rows ONLY */ +#line 11830 "gram.y" + { + SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + n->limitOffset = NULL; + n->limitCount = makeIntConst(1, -1); + n->limitOption = LIMIT_OPTION_COUNT; + (yyval.selectlimit) = n; + } +#line 42073 "gram.c" + break; + + case 1693: /* limit_clause: FETCH first_or_next row_or_rows WITH TIES */ +#line 11838 "gram.y" + { + SelectLimit *n = (SelectLimit *) palloc(sizeof(SelectLimit)); + n->limitOffset = NULL; + n->limitCount = makeIntConst(1, -1); + n->limitOption = LIMIT_OPTION_WITH_TIES; + (yyval.selectlimit) = n; + } +#line 42085 "gram.c" + break; + + case 1694: /* offset_clause: OFFSET select_offset_value */ +#line 11849 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42091 "gram.c" + break; + + case 1695: /* offset_clause: OFFSET select_fetch_first_value row_or_rows */ +#line 11852 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 42097 "gram.c" + break; + + case 1696: /* select_limit_value: a_expr */ +#line 11856 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42103 "gram.c" + break; + + case 1697: /* select_limit_value: ALL */ +#line 11858 "gram.y" + { + /* LIMIT ALL is represented as a NULL constant */ + (yyval.node) = makeNullAConst((yylsp[0])); + } +#line 42112 "gram.c" + break; + + case 1698: /* select_offset_value: a_expr */ +#line 11865 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42118 "gram.c" + break; + + case 1699: /* select_fetch_first_value: c_expr */ +#line 11885 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42124 "gram.c" + break; + + case 1700: /* select_fetch_first_value: '+' I_or_F_const */ +#line 11887 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, (yyvsp[0].node), (yylsp[-1])); } +#line 42130 "gram.c" + break; + + case 1701: /* select_fetch_first_value: '-' I_or_F_const */ +#line 11889 "gram.y" + { (yyval.node) = doNegate((yyvsp[0].node), (yylsp[-1])); } +#line 42136 "gram.c" + break; + + case 1702: /* I_or_F_const: Iconst */ +#line 11893 "gram.y" + { (yyval.node) = makeIntConst((yyvsp[0].ival),(yylsp[0])); } +#line 42142 "gram.c" + break; + + case 1703: /* I_or_F_const: FCONST */ +#line 11894 "gram.y" + { (yyval.node) = makeFloatConst((yyvsp[0].str),(yylsp[0])); } +#line 42148 "gram.c" + break; + + case 1704: /* row_or_rows: ROW */ +#line 11898 "gram.y" + { (yyval.ival) = 0; } +#line 42154 "gram.c" + break; + + case 1705: /* row_or_rows: ROWS */ +#line 11899 "gram.y" + { (yyval.ival) = 0; } +#line 42160 "gram.c" + break; + + case 1706: /* first_or_next: FIRST_P */ +#line 11902 "gram.y" + { (yyval.ival) = 0; } +#line 42166 "gram.c" + break; + + case 1707: /* first_or_next: NEXT */ +#line 11903 "gram.y" + { (yyval.ival) = 0; } +#line 42172 "gram.c" + break; + + case 1708: /* group_clause: GROUP_P BY set_quantifier group_by_list */ +#line 11929 "gram.y" + { + GroupClause *n = (GroupClause *) palloc(sizeof(GroupClause)); + n->distinct = (yyvsp[-1].setquantifier) == SET_QUANTIFIER_DISTINCT; + n->list = (yyvsp[0].list); + (yyval.groupclause) = n; + } +#line 42183 "gram.c" + break; + + case 1709: /* group_clause: %empty */ +#line 11936 "gram.y" + { + GroupClause *n = (GroupClause *) palloc(sizeof(GroupClause)); + n->distinct = false; + n->list = NIL; + (yyval.groupclause) = n; + } +#line 42194 "gram.c" + break; + + case 1710: /* group_by_list: group_by_item */ +#line 11945 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 42200 "gram.c" + break; + + case 1711: /* group_by_list: group_by_list ',' group_by_item */ +#line 11946 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list),(yyvsp[0].node)); } +#line 42206 "gram.c" + break; + + case 1712: /* group_by_item: a_expr */ +#line 11950 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42212 "gram.c" + break; + + case 1713: /* group_by_item: empty_grouping_set */ +#line 11951 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42218 "gram.c" + break; + + case 1714: /* group_by_item: cube_clause */ +#line 11952 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42224 "gram.c" + break; + + case 1715: /* group_by_item: rollup_clause */ +#line 11953 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42230 "gram.c" + break; + + case 1716: /* group_by_item: grouping_sets_clause */ +#line 11954 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42236 "gram.c" + break; + + case 1717: /* empty_grouping_set: '(' ')' */ +#line 11959 "gram.y" + { + (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_EMPTY, NIL, (yylsp[-1])); + } +#line 42244 "gram.c" + break; + + case 1718: /* rollup_clause: ROLLUP '(' expr_list ')' */ +#line 11972 "gram.y" + { + (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_ROLLUP, (yyvsp[-1].list), (yylsp[-3])); + } +#line 42252 "gram.c" + break; + + case 1719: /* cube_clause: CUBE '(' expr_list ')' */ +#line 11979 "gram.y" + { + (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_CUBE, (yyvsp[-1].list), (yylsp[-3])); + } +#line 42260 "gram.c" + break; + + case 1720: /* grouping_sets_clause: GROUPING SETS '(' group_by_list ')' */ +#line 11986 "gram.y" + { + (yyval.node) = (Node *) makeGroupingSet(GROUPING_SET_SETS, (yyvsp[-1].list), (yylsp[-4])); + } +#line 42268 "gram.c" + break; + + case 1721: /* having_clause: HAVING a_expr */ +#line 11992 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 42274 "gram.c" + break; + + case 1722: /* having_clause: %empty */ +#line 11993 "gram.y" + { (yyval.node) = NULL; } +#line 42280 "gram.c" + break; + + case 1723: /* for_locking_clause: for_locking_items */ +#line 11997 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 42286 "gram.c" + break; + + case 1724: /* for_locking_clause: FOR READ ONLY */ +#line 11998 "gram.y" + { (yyval.list) = NIL; } +#line 42292 "gram.c" + break; + + case 1725: /* opt_for_locking_clause: for_locking_clause */ +#line 12002 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 42298 "gram.c" + break; + + case 1726: /* opt_for_locking_clause: %empty */ +#line 12003 "gram.y" + { (yyval.list) = NIL; } +#line 42304 "gram.c" + break; + + case 1727: /* for_locking_items: for_locking_item */ +#line 12007 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 42310 "gram.c" + break; + + case 1728: /* for_locking_items: for_locking_items for_locking_item */ +#line 12008 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } +#line 42316 "gram.c" + break; + + case 1729: /* for_locking_item: for_locking_strength locked_rels_list opt_nowait_or_skip */ +#line 12013 "gram.y" + { + LockingClause *n = makeNode(LockingClause); + n->lockedRels = (yyvsp[-1].list); + n->strength = (yyvsp[-2].ival); + n->waitPolicy = (yyvsp[0].ival); + (yyval.node) = (Node *) n; + } +#line 42328 "gram.c" + break; + + case 1730: /* for_locking_strength: FOR UPDATE */ +#line 12023 "gram.y" + { (yyval.ival) = LCS_FORUPDATE; } +#line 42334 "gram.c" + break; + + case 1731: /* for_locking_strength: FOR NO KEY UPDATE */ +#line 12024 "gram.y" + { (yyval.ival) = LCS_FORNOKEYUPDATE; } +#line 42340 "gram.c" + break; + + case 1732: /* for_locking_strength: FOR SHARE */ +#line 12025 "gram.y" + { (yyval.ival) = LCS_FORSHARE; } +#line 42346 "gram.c" + break; + + case 1733: /* for_locking_strength: FOR KEY SHARE */ +#line 12026 "gram.y" + { (yyval.ival) = LCS_FORKEYSHARE; } +#line 42352 "gram.c" + break; + + case 1734: /* locked_rels_list: OF qualified_name_list */ +#line 12030 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 42358 "gram.c" + break; + + case 1735: /* locked_rels_list: %empty */ +#line 12031 "gram.y" + { (yyval.list) = NIL; } +#line 42364 "gram.c" + break; + + case 1736: /* values_clause: VALUES '(' expr_list ')' */ +#line 12042 "gram.y" + { + SelectStmt *n = makeNode(SelectStmt); + n->valuesLists = list_make1((yyvsp[-1].list)); + (yyval.node) = (Node *) n; + } +#line 42374 "gram.c" + break; + + case 1737: /* values_clause: values_clause ',' '(' expr_list ')' */ +#line 12048 "gram.y" + { + SelectStmt *n = (SelectStmt *) (yyvsp[-4].node); + n->valuesLists = lappend(n->valuesLists, (yyvsp[-1].list)); + (yyval.node) = (Node *) n; + } +#line 42384 "gram.c" + break; + + case 1738: /* from_clause: FROM from_list */ +#line 12065 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 42390 "gram.c" + break; + + case 1739: /* from_clause: %empty */ +#line 12066 "gram.y" + { (yyval.list) = NIL; } +#line 42396 "gram.c" + break; + + case 1740: /* from_list: table_ref */ +#line 12070 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 42402 "gram.c" + break; + + case 1741: /* from_list: from_list ',' table_ref */ +#line 12071 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 42408 "gram.c" + break; + + case 1742: /* table_ref: relation_expr opt_alias_clause */ +#line 12078 "gram.y" + { + (yyvsp[-1].range)->alias = (yyvsp[0].alias); + (yyval.node) = (Node *) (yyvsp[-1].range); + } +#line 42417 "gram.c" + break; + + case 1743: /* table_ref: relation_expr opt_alias_clause tablesample_clause */ +#line 12083 "gram.y" + { + RangeTableSample *n = (RangeTableSample *) (yyvsp[0].node); + (yyvsp[-2].range)->alias = (yyvsp[-1].alias); + /* relation_expr goes inside the RangeTableSample node */ + n->relation = (Node *) (yyvsp[-2].range); + (yyval.node) = (Node *) n; + } +#line 42429 "gram.c" + break; + + case 1744: /* table_ref: func_table func_alias_clause */ +#line 12091 "gram.y" + { + RangeFunction *n = (RangeFunction *) (yyvsp[-1].node); + n->alias = linitial((yyvsp[0].list)); + n->coldeflist = lsecond((yyvsp[0].list)); + (yyval.node) = (Node *) n; + } +#line 42440 "gram.c" + break; + + case 1745: /* table_ref: LATERAL_P func_table func_alias_clause */ +#line 12098 "gram.y" + { + RangeFunction *n = (RangeFunction *) (yyvsp[-1].node); + n->lateral = true; + n->alias = linitial((yyvsp[0].list)); + n->coldeflist = lsecond((yyvsp[0].list)); + (yyval.node) = (Node *) n; + } +#line 42452 "gram.c" + break; + + case 1746: /* table_ref: xmltable opt_alias_clause */ +#line 12106 "gram.y" + { + RangeTableFunc *n = (RangeTableFunc *) (yyvsp[-1].node); + n->alias = (yyvsp[0].alias); + (yyval.node) = (Node *) n; + } +#line 42462 "gram.c" + break; + + case 1747: /* table_ref: LATERAL_P xmltable opt_alias_clause */ +#line 12112 "gram.y" + { + RangeTableFunc *n = (RangeTableFunc *) (yyvsp[-1].node); + n->lateral = true; + n->alias = (yyvsp[0].alias); + (yyval.node) = (Node *) n; + } +#line 42473 "gram.c" + break; + + case 1748: /* table_ref: select_with_parens opt_alias_clause */ +#line 12119 "gram.y" + { + RangeSubselect *n = makeNode(RangeSubselect); + n->lateral = false; + n->subquery = (yyvsp[-1].node); + n->alias = (yyvsp[0].alias); + /* + * The SQL spec does not permit a subselect + * () without an alias clause, + * so we don't either. This avoids the problem + * of needing to invent a unique refname for it. + * That could be surmounted if there's sufficient + * popular demand, but for now let's just implement + * the spec and see if anyone complains. + * However, it does seem like a good idea to emit + * an error message that's better than "syntax error". + */ + if ((yyvsp[0].alias) == NULL) + { + if (IsA((yyvsp[-1].node), SelectStmt) && + ((SelectStmt *) (yyvsp[-1].node))->valuesLists) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("VALUES in FROM must have an alias"), + errhint("For example, FROM (VALUES ...) [AS] foo."), + parser_errposition((yylsp[-1])))); + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("subquery in FROM must have an alias"), + errhint("For example, FROM (SELECT ...) [AS] foo."), + parser_errposition((yylsp[-1])))); + } + (yyval.node) = (Node *) n; + } +#line 42512 "gram.c" + break; + + case 1749: /* table_ref: LATERAL_P select_with_parens opt_alias_clause */ +#line 12154 "gram.y" + { + RangeSubselect *n = makeNode(RangeSubselect); + n->lateral = true; + n->subquery = (yyvsp[-1].node); + n->alias = (yyvsp[0].alias); + /* same comment as above */ + if ((yyvsp[0].alias) == NULL) + { + if (IsA((yyvsp[-1].node), SelectStmt) && + ((SelectStmt *) (yyvsp[-1].node))->valuesLists) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("VALUES in FROM must have an alias"), + errhint("For example, FROM (VALUES ...) [AS] foo."), + parser_errposition((yylsp[-1])))); + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("subquery in FROM must have an alias"), + errhint("For example, FROM (SELECT ...) [AS] foo."), + parser_errposition((yylsp[-1])))); + } + (yyval.node) = (Node *) n; + } +#line 42541 "gram.c" + break; + + case 1750: /* table_ref: joined_table */ +#line 12179 "gram.y" + { + (yyval.node) = (Node *) (yyvsp[0].jexpr); + } +#line 42549 "gram.c" + break; + + case 1751: /* table_ref: '(' joined_table ')' alias_clause */ +#line 12183 "gram.y" + { + (yyvsp[-2].jexpr)->alias = (yyvsp[0].alias); + (yyval.node) = (Node *) (yyvsp[-2].jexpr); + } +#line 42558 "gram.c" + break; + + case 1752: /* joined_table: '(' joined_table ')' */ +#line 12209 "gram.y" + { + (yyval.jexpr) = (yyvsp[-1].jexpr); + } +#line 42566 "gram.c" + break; + + case 1753: /* joined_table: table_ref CROSS JOIN table_ref */ +#line 12213 "gram.y" + { + /* CROSS JOIN is same as unqualified inner join */ + JoinExpr *n = makeNode(JoinExpr); + n->jointype = JOIN_INNER; + n->isNatural = false; + n->larg = (yyvsp[-3].node); + n->rarg = (yyvsp[0].node); + n->usingClause = NIL; + n->join_using_alias = NULL; + n->quals = NULL; + (yyval.jexpr) = n; + } +#line 42583 "gram.c" + break; + + case 1754: /* joined_table: table_ref join_type JOIN table_ref join_qual */ +#line 12226 "gram.y" + { + JoinExpr *n = makeNode(JoinExpr); + n->jointype = (yyvsp[-3].jtype); + n->isNatural = false; + n->larg = (yyvsp[-4].node); + n->rarg = (yyvsp[-1].node); + if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), List)) + { + /* USING clause */ + n->usingClause = linitial_node(List, castNode(List, (yyvsp[0].node))); + n->join_using_alias = lsecond_node(Alias, castNode(List, (yyvsp[0].node))); + } + else + { + /* ON clause */ + n->quals = (yyvsp[0].node); + } + (yyval.jexpr) = n; + } +#line 42607 "gram.c" + break; + + case 1755: /* joined_table: table_ref JOIN table_ref join_qual */ +#line 12246 "gram.y" + { + /* letting join_type reduce to empty doesn't work */ + JoinExpr *n = makeNode(JoinExpr); + n->jointype = JOIN_INNER; + n->isNatural = false; + n->larg = (yyvsp[-3].node); + n->rarg = (yyvsp[-1].node); + if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), List)) + { + /* USING clause */ + n->usingClause = linitial_node(List, castNode(List, (yyvsp[0].node))); + n->join_using_alias = lsecond_node(Alias, castNode(List, (yyvsp[0].node))); + } + else + { + /* ON clause */ + n->quals = (yyvsp[0].node); + } + (yyval.jexpr) = n; + } +#line 42632 "gram.c" + break; + + case 1756: /* joined_table: table_ref NATURAL join_type JOIN table_ref */ +#line 12267 "gram.y" + { + JoinExpr *n = makeNode(JoinExpr); + n->jointype = (yyvsp[-2].jtype); + n->isNatural = true; + n->larg = (yyvsp[-4].node); + n->rarg = (yyvsp[0].node); + n->usingClause = NIL; /* figure out which columns later... */ + n->join_using_alias = NULL; + n->quals = NULL; /* fill later */ + (yyval.jexpr) = n; + } +#line 42648 "gram.c" + break; + + case 1757: /* joined_table: table_ref NATURAL JOIN table_ref */ +#line 12279 "gram.y" + { + /* letting join_type reduce to empty doesn't work */ + JoinExpr *n = makeNode(JoinExpr); + n->jointype = JOIN_INNER; + n->isNatural = true; + n->larg = (yyvsp[-3].node); + n->rarg = (yyvsp[0].node); + n->usingClause = NIL; /* figure out which columns later... */ + n->join_using_alias = NULL; + n->quals = NULL; /* fill later */ + (yyval.jexpr) = n; + } +#line 42665 "gram.c" + break; + + case 1758: /* alias_clause: AS ColId '(' name_list ')' */ +#line 12295 "gram.y" + { + (yyval.alias) = makeNode(Alias); + (yyval.alias)->aliasname = (yyvsp[-3].str); + (yyval.alias)->colnames = (yyvsp[-1].list); + } +#line 42675 "gram.c" + break; + + case 1759: /* alias_clause: AS ColId */ +#line 12301 "gram.y" + { + (yyval.alias) = makeNode(Alias); + (yyval.alias)->aliasname = (yyvsp[0].str); + } +#line 42684 "gram.c" + break; + + case 1760: /* alias_clause: ColId '(' name_list ')' */ +#line 12306 "gram.y" + { + (yyval.alias) = makeNode(Alias); + (yyval.alias)->aliasname = (yyvsp[-3].str); + (yyval.alias)->colnames = (yyvsp[-1].list); + } +#line 42694 "gram.c" + break; + + case 1761: /* alias_clause: ColId */ +#line 12312 "gram.y" + { + (yyval.alias) = makeNode(Alias); + (yyval.alias)->aliasname = (yyvsp[0].str); + } +#line 42703 "gram.c" + break; + + case 1762: /* opt_alias_clause: alias_clause */ +#line 12318 "gram.y" + { (yyval.alias) = (yyvsp[0].alias); } +#line 42709 "gram.c" + break; + + case 1763: /* opt_alias_clause: %empty */ +#line 12319 "gram.y" + { (yyval.alias) = NULL; } +#line 42715 "gram.c" + break; + + case 1764: /* opt_alias_clause_for_join_using: AS ColId */ +#line 12330 "gram.y" + { + (yyval.alias) = makeNode(Alias); + (yyval.alias)->aliasname = (yyvsp[0].str); + /* the column name list will be inserted later */ + } +#line 42725 "gram.c" + break; + + case 1765: /* opt_alias_clause_for_join_using: %empty */ +#line 12335 "gram.y" + { (yyval.alias) = NULL; } +#line 42731 "gram.c" + break; + + case 1766: /* func_alias_clause: alias_clause */ +#line 12344 "gram.y" + { + (yyval.list) = list_make2((yyvsp[0].alias), NIL); + } +#line 42739 "gram.c" + break; + + case 1767: /* func_alias_clause: AS '(' TableFuncElementList ')' */ +#line 12348 "gram.y" + { + (yyval.list) = list_make2(NULL, (yyvsp[-1].list)); + } +#line 42747 "gram.c" + break; + + case 1768: /* func_alias_clause: AS ColId '(' TableFuncElementList ')' */ +#line 12352 "gram.y" + { + Alias *a = makeNode(Alias); + a->aliasname = (yyvsp[-3].str); + (yyval.list) = list_make2(a, (yyvsp[-1].list)); + } +#line 42757 "gram.c" + break; + + case 1769: /* func_alias_clause: ColId '(' TableFuncElementList ')' */ +#line 12358 "gram.y" + { + Alias *a = makeNode(Alias); + a->aliasname = (yyvsp[-3].str); + (yyval.list) = list_make2(a, (yyvsp[-1].list)); + } +#line 42767 "gram.c" + break; + + case 1770: /* func_alias_clause: %empty */ +#line 12364 "gram.y" + { + (yyval.list) = list_make2(NULL, NIL); + } +#line 42775 "gram.c" + break; + + case 1771: /* join_type: FULL opt_outer */ +#line 12369 "gram.y" + { (yyval.jtype) = JOIN_FULL; } +#line 42781 "gram.c" + break; + + case 1772: /* join_type: LEFT opt_outer */ +#line 12370 "gram.y" + { (yyval.jtype) = JOIN_LEFT; } +#line 42787 "gram.c" + break; + + case 1773: /* join_type: RIGHT opt_outer */ +#line 12371 "gram.y" + { (yyval.jtype) = JOIN_RIGHT; } +#line 42793 "gram.c" + break; + + case 1774: /* join_type: INNER_P */ +#line 12372 "gram.y" + { (yyval.jtype) = JOIN_INNER; } +#line 42799 "gram.c" + break; + + case 1777: /* join_qual: USING '(' name_list ')' opt_alias_clause_for_join_using */ +#line 12393 "gram.y" + { + (yyval.node) = (Node *) list_make2((yyvsp[-2].list), (yyvsp[0].alias)); + } +#line 42807 "gram.c" + break; + + case 1778: /* join_qual: ON a_expr */ +#line 12397 "gram.y" + { + (yyval.node) = (yyvsp[0].node); + } +#line 42815 "gram.c" + break; + + case 1779: /* relation_expr: qualified_name */ +#line 12405 "gram.y" + { + /* inheritance query, implicitly */ + (yyval.range) = (yyvsp[0].range); + (yyval.range)->inh = true; + (yyval.range)->alias = NULL; + } +#line 42826 "gram.c" + break; + + case 1780: /* relation_expr: qualified_name '*' */ +#line 12412 "gram.y" + { + /* inheritance query, explicitly */ + (yyval.range) = (yyvsp[-1].range); + (yyval.range)->inh = true; + (yyval.range)->alias = NULL; + } +#line 42837 "gram.c" + break; + + case 1781: /* relation_expr: ONLY qualified_name */ +#line 12419 "gram.y" + { + /* no inheritance */ + (yyval.range) = (yyvsp[0].range); + (yyval.range)->inh = false; + (yyval.range)->alias = NULL; + } +#line 42848 "gram.c" + break; + + case 1782: /* relation_expr: ONLY '(' qualified_name ')' */ +#line 12426 "gram.y" + { + /* no inheritance, SQL99-style syntax */ + (yyval.range) = (yyvsp[-1].range); + (yyval.range)->inh = false; + (yyval.range)->alias = NULL; + } +#line 42859 "gram.c" + break; + + case 1783: /* relation_expr_list: relation_expr */ +#line 12436 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].range)); } +#line 42865 "gram.c" + break; + + case 1784: /* relation_expr_list: relation_expr_list ',' relation_expr */ +#line 12437 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].range)); } +#line 42871 "gram.c" + break; + + case 1785: /* relation_expr_opt_alias: relation_expr */ +#line 12451 "gram.y" + { + (yyval.range) = (yyvsp[0].range); + } +#line 42879 "gram.c" + break; + + case 1786: /* relation_expr_opt_alias: relation_expr ColId */ +#line 12455 "gram.y" + { + Alias *alias = makeNode(Alias); + alias->aliasname = (yyvsp[0].str); + (yyvsp[-1].range)->alias = alias; + (yyval.range) = (yyvsp[-1].range); + } +#line 42890 "gram.c" + break; + + case 1787: /* relation_expr_opt_alias: relation_expr AS ColId */ +#line 12462 "gram.y" + { + Alias *alias = makeNode(Alias); + alias->aliasname = (yyvsp[0].str); + (yyvsp[-2].range)->alias = alias; + (yyval.range) = (yyvsp[-2].range); + } +#line 42901 "gram.c" + break; + + case 1788: /* tablesample_clause: TABLESAMPLE func_name '(' expr_list ')' opt_repeatable_clause */ +#line 12475 "gram.y" + { + RangeTableSample *n = makeNode(RangeTableSample); + /* n->relation will be filled in later */ + n->method = (yyvsp[-4].list); + n->args = (yyvsp[-2].list); + n->repeatable = (yyvsp[0].node); + n->location = (yylsp[-4]); + (yyval.node) = (Node *) n; + } +#line 42915 "gram.c" + break; + + case 1789: /* opt_repeatable_clause: REPEATABLE '(' a_expr ')' */ +#line 12487 "gram.y" + { (yyval.node) = (Node *) (yyvsp[-1].node); } +#line 42921 "gram.c" + break; + + case 1790: /* opt_repeatable_clause: %empty */ +#line 12488 "gram.y" + { (yyval.node) = NULL; } +#line 42927 "gram.c" + break; + + case 1791: /* func_table: func_expr_windowless opt_ordinality */ +#line 12504 "gram.y" + { + RangeFunction *n = makeNode(RangeFunction); + n->lateral = false; + n->ordinality = (yyvsp[0].boolean); + n->is_rowsfrom = false; + n->functions = list_make1(list_make2((yyvsp[-1].node), NIL)); + /* alias and coldeflist are set by table_ref production */ + (yyval.node) = (Node *) n; + } +#line 42941 "gram.c" + break; + + case 1792: /* func_table: ROWS FROM '(' rowsfrom_list ')' opt_ordinality */ +#line 12514 "gram.y" + { + RangeFunction *n = makeNode(RangeFunction); + n->lateral = false; + n->ordinality = (yyvsp[0].boolean); + n->is_rowsfrom = true; + n->functions = (yyvsp[-2].list); + /* alias and coldeflist are set by table_ref production */ + (yyval.node) = (Node *) n; + } +#line 42955 "gram.c" + break; + + case 1793: /* rowsfrom_item: func_expr_windowless opt_col_def_list */ +#line 12526 "gram.y" + { (yyval.list) = list_make2((yyvsp[-1].node), (yyvsp[0].list)); } +#line 42961 "gram.c" + break; + + case 1794: /* rowsfrom_list: rowsfrom_item */ +#line 12530 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].list)); } +#line 42967 "gram.c" + break; + + case 1795: /* rowsfrom_list: rowsfrom_list ',' rowsfrom_item */ +#line 12531 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].list)); } +#line 42973 "gram.c" + break; + + case 1796: /* opt_col_def_list: AS '(' TableFuncElementList ')' */ +#line 12534 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 42979 "gram.c" + break; + + case 1797: /* opt_col_def_list: %empty */ +#line 12535 "gram.y" + { (yyval.list) = NIL; } +#line 42985 "gram.c" + break; + + case 1798: /* opt_ordinality: WITH_LA ORDINALITY */ +#line 12538 "gram.y" + { (yyval.boolean) = true; } +#line 42991 "gram.c" + break; + + case 1799: /* opt_ordinality: %empty */ +#line 12539 "gram.y" + { (yyval.boolean) = false; } +#line 42997 "gram.c" + break; + + case 1800: /* where_clause: WHERE a_expr */ +#line 12544 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 43003 "gram.c" + break; + + case 1801: /* where_clause: %empty */ +#line 12545 "gram.y" + { (yyval.node) = NULL; } +#line 43009 "gram.c" + break; + + case 1802: /* where_or_current_clause: WHERE a_expr */ +#line 12550 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 43015 "gram.c" + break; + + case 1803: /* where_or_current_clause: WHERE CURRENT_P OF cursor_name */ +#line 12552 "gram.y" + { + CurrentOfExpr *n = makeNode(CurrentOfExpr); + /* cvarno is filled in by parse analysis */ + n->cursor_name = (yyvsp[0].str); + n->cursor_param = 0; + (yyval.node) = (Node *) n; + } +#line 43027 "gram.c" + break; + + case 1804: /* where_or_current_clause: %empty */ +#line 12559 "gram.y" + { (yyval.node) = NULL; } +#line 43033 "gram.c" + break; + + case 1805: /* OptTableFuncElementList: TableFuncElementList */ +#line 12564 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 43039 "gram.c" + break; + + case 1806: /* OptTableFuncElementList: %empty */ +#line 12565 "gram.y" + { (yyval.list) = NIL; } +#line 43045 "gram.c" + break; + + case 1807: /* TableFuncElementList: TableFuncElement */ +#line 12570 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].node)); + } +#line 43053 "gram.c" + break; + + case 1808: /* TableFuncElementList: TableFuncElementList ',' TableFuncElement */ +#line 12574 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); + } +#line 43061 "gram.c" + break; + + case 1809: /* TableFuncElement: ColId Typename opt_collate_clause */ +#line 12580 "gram.y" + { + ColumnDef *n = makeNode(ColumnDef); + n->colname = (yyvsp[-2].str); + n->typeName = (yyvsp[-1].typnam); + n->inhcount = 0; + n->is_local = true; + n->is_not_null = false; + n->is_from_type = false; + n->storage = 0; + n->raw_default = NULL; + n->cooked_default = NULL; + n->collClause = (CollateClause *) (yyvsp[0].node); + n->collOid = InvalidOid; + n->constraints = NIL; + n->location = (yylsp[-2]); + (yyval.node) = (Node *)n; + } +#line 43083 "gram.c" + break; + + case 1810: /* xmltable: XMLTABLE '(' c_expr xmlexists_argument COLUMNS xmltable_column_list ')' */ +#line 12604 "gram.y" + { + RangeTableFunc *n = makeNode(RangeTableFunc); + n->rowexpr = (yyvsp[-4].node); + n->docexpr = (yyvsp[-3].node); + n->columns = (yyvsp[-1].list); + n->namespaces = NIL; + n->location = (yylsp[-6]); + (yyval.node) = (Node *)n; + } +#line 43097 "gram.c" + break; + + case 1811: /* xmltable: XMLTABLE '(' XMLNAMESPACES '(' xml_namespace_list ')' ',' c_expr xmlexists_argument COLUMNS xmltable_column_list ')' */ +#line 12615 "gram.y" + { + RangeTableFunc *n = makeNode(RangeTableFunc); + n->rowexpr = (yyvsp[-4].node); + n->docexpr = (yyvsp[-3].node); + n->columns = (yyvsp[-1].list); + n->namespaces = (yyvsp[-7].list); + n->location = (yylsp[-11]); + (yyval.node) = (Node *)n; + } +#line 43111 "gram.c" + break; + + case 1812: /* xmltable_column_list: xmltable_column_el */ +#line 12626 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 43117 "gram.c" + break; + + case 1813: /* xmltable_column_list: xmltable_column_list ',' xmltable_column_el */ +#line 12627 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 43123 "gram.c" + break; + + case 1814: /* xmltable_column_el: ColId Typename */ +#line 12632 "gram.y" + { + RangeTableFuncCol *fc = makeNode(RangeTableFuncCol); + + fc->colname = (yyvsp[-1].str); + fc->for_ordinality = false; + fc->typeName = (yyvsp[0].typnam); + fc->is_not_null = false; + fc->colexpr = NULL; + fc->coldefexpr = NULL; + fc->location = (yylsp[-1]); + + (yyval.node) = (Node *) fc; + } +#line 43141 "gram.c" + break; + + case 1815: /* xmltable_column_el: ColId Typename xmltable_column_option_list */ +#line 12646 "gram.y" + { + RangeTableFuncCol *fc = makeNode(RangeTableFuncCol); + ListCell *option; + bool nullability_seen = false; + + fc->colname = (yyvsp[-2].str); + fc->typeName = (yyvsp[-1].typnam); + fc->for_ordinality = false; + fc->is_not_null = false; + fc->colexpr = NULL; + fc->coldefexpr = NULL; + fc->location = (yylsp[-2]); + + foreach(option, (yyvsp[0].list)) + { + DefElem *defel = (DefElem *) lfirst(option); + + if (strcmp(defel->defname, "default") == 0) + { + if (fc->coldefexpr != NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("only one DEFAULT value is allowed"), + parser_errposition(defel->location))); + fc->coldefexpr = defel->arg; + } + else if (strcmp(defel->defname, "path") == 0) + { + if (fc->colexpr != NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("only one PATH value per column is allowed"), + parser_errposition(defel->location))); + fc->colexpr = defel->arg; + } + else if (strcmp(defel->defname, "is_not_null") == 0) + { + if (nullability_seen) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting or redundant NULL / NOT NULL declarations for column \"%s\"", fc->colname), + parser_errposition(defel->location))); + fc->is_not_null = intVal(defel->arg); + nullability_seen = true; + } + else + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized column option \"%s\"", + defel->defname), + parser_errposition(defel->location))); + } + } + (yyval.node) = (Node *) fc; + } +#line 43202 "gram.c" + break; + + case 1816: /* xmltable_column_el: ColId FOR ORDINALITY */ +#line 12703 "gram.y" + { + RangeTableFuncCol *fc = makeNode(RangeTableFuncCol); + + fc->colname = (yyvsp[-2].str); + fc->for_ordinality = true; + /* other fields are ignored, initialized by makeNode */ + fc->location = (yylsp[-2]); + + (yyval.node) = (Node *) fc; + } +#line 43217 "gram.c" + break; + + case 1817: /* xmltable_column_option_list: xmltable_column_option_el */ +#line 12717 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].defelt)); } +#line 43223 "gram.c" + break; + + case 1818: /* xmltable_column_option_list: xmltable_column_option_list xmltable_column_option_el */ +#line 12719 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } +#line 43229 "gram.c" + break; + + case 1819: /* xmltable_column_option_el: IDENT b_expr */ +#line 12724 "gram.y" + { (yyval.defelt) = makeDefElem((yyvsp[-1].str), (yyvsp[0].node), (yylsp[-1])); } +#line 43235 "gram.c" + break; + + case 1820: /* xmltable_column_option_el: DEFAULT b_expr */ +#line 12726 "gram.y" + { (yyval.defelt) = makeDefElem("default", (yyvsp[0].node), (yylsp[-1])); } +#line 43241 "gram.c" + break; + + case 1821: /* xmltable_column_option_el: NOT NULL_P */ +#line 12728 "gram.y" + { (yyval.defelt) = makeDefElem("is_not_null", (Node *) makeInteger(true), (yylsp[-1])); } +#line 43247 "gram.c" + break; + + case 1822: /* xmltable_column_option_el: NULL_P */ +#line 12730 "gram.y" + { (yyval.defelt) = makeDefElem("is_not_null", (Node *) makeInteger(false), (yylsp[0])); } +#line 43253 "gram.c" + break; + + case 1823: /* xml_namespace_list: xml_namespace_el */ +#line 12735 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].target)); } +#line 43259 "gram.c" + break; + + case 1824: /* xml_namespace_list: xml_namespace_list ',' xml_namespace_el */ +#line 12737 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].target)); } +#line 43265 "gram.c" + break; + + case 1825: /* xml_namespace_el: b_expr AS ColLabel */ +#line 12742 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = (yyvsp[0].str); + (yyval.target)->indirection = NIL; + (yyval.target)->val = (yyvsp[-2].node); + (yyval.target)->location = (yylsp[-2]); + } +#line 43277 "gram.c" + break; + + case 1826: /* xml_namespace_el: DEFAULT b_expr */ +#line 12750 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = NULL; + (yyval.target)->indirection = NIL; + (yyval.target)->val = (yyvsp[0].node); + (yyval.target)->location = (yylsp[-1]); + } +#line 43289 "gram.c" + break; + + case 1827: /* Typename: SimpleTypename opt_array_bounds */ +#line 12770 "gram.y" + { + (yyval.typnam) = (yyvsp[-1].typnam); + (yyval.typnam)->arrayBounds = (yyvsp[0].list); + } +#line 43298 "gram.c" + break; + + case 1828: /* Typename: SETOF SimpleTypename opt_array_bounds */ +#line 12775 "gram.y" + { + (yyval.typnam) = (yyvsp[-1].typnam); + (yyval.typnam)->arrayBounds = (yyvsp[0].list); + (yyval.typnam)->setof = true; + } +#line 43308 "gram.c" + break; + + case 1829: /* Typename: SimpleTypename ARRAY '[' Iconst ']' */ +#line 12782 "gram.y" + { + (yyval.typnam) = (yyvsp[-4].typnam); + (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[-1].ival))); + } +#line 43317 "gram.c" + break; + + case 1830: /* Typename: SETOF SimpleTypename ARRAY '[' Iconst ']' */ +#line 12787 "gram.y" + { + (yyval.typnam) = (yyvsp[-4].typnam); + (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[-1].ival))); + (yyval.typnam)->setof = true; + } +#line 43327 "gram.c" + break; + + case 1831: /* Typename: SimpleTypename ARRAY */ +#line 12793 "gram.y" + { + (yyval.typnam) = (yyvsp[-1].typnam); + (yyval.typnam)->arrayBounds = list_make1(makeInteger(-1)); + } +#line 43336 "gram.c" + break; + + case 1832: /* Typename: SETOF SimpleTypename ARRAY */ +#line 12798 "gram.y" + { + (yyval.typnam) = (yyvsp[-1].typnam); + (yyval.typnam)->arrayBounds = list_make1(makeInteger(-1)); + (yyval.typnam)->setof = true; + } +#line 43346 "gram.c" + break; + + case 1833: /* opt_array_bounds: opt_array_bounds '[' ']' */ +#line 12807 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), makeInteger(-1)); } +#line 43352 "gram.c" + break; + + case 1834: /* opt_array_bounds: opt_array_bounds '[' Iconst ']' */ +#line 12809 "gram.y" + { (yyval.list) = lappend((yyvsp[-3].list), makeInteger((yyvsp[-1].ival))); } +#line 43358 "gram.c" + break; + + case 1835: /* opt_array_bounds: %empty */ +#line 12811 "gram.y" + { (yyval.list) = NIL; } +#line 43364 "gram.c" + break; + + case 1836: /* SimpleTypename: GenericType */ +#line 12815 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43370 "gram.c" + break; + + case 1837: /* SimpleTypename: Numeric */ +#line 12816 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43376 "gram.c" + break; + + case 1838: /* SimpleTypename: Bit */ +#line 12817 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43382 "gram.c" + break; + + case 1839: /* SimpleTypename: Character */ +#line 12818 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43388 "gram.c" + break; + + case 1840: /* SimpleTypename: ConstDatetime */ +#line 12819 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43394 "gram.c" + break; + + case 1841: /* SimpleTypename: ConstInterval opt_interval */ +#line 12821 "gram.y" + { + (yyval.typnam) = (yyvsp[-1].typnam); + (yyval.typnam)->typmods = (yyvsp[0].list); + } +#line 43403 "gram.c" + break; + + case 1842: /* SimpleTypename: ConstInterval '(' Iconst ')' */ +#line 12826 "gram.y" + { + (yyval.typnam) = (yyvsp[-3].typnam); + (yyval.typnam)->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), + makeIntConst((yyvsp[-1].ival), (yylsp[-1]))); + } +#line 43413 "gram.c" + break; + + case 1843: /* ConstTypename: Numeric */ +#line 12845 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43419 "gram.c" + break; + + case 1844: /* ConstTypename: ConstBit */ +#line 12846 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43425 "gram.c" + break; + + case 1845: /* ConstTypename: ConstCharacter */ +#line 12847 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43431 "gram.c" + break; + + case 1846: /* ConstTypename: ConstDatetime */ +#line 12848 "gram.y" + { (yyval.typnam) = (yyvsp[0].typnam); } +#line 43437 "gram.c" + break; + + case 1847: /* GenericType: type_function_name opt_type_modifiers */ +#line 12860 "gram.y" + { + (yyval.typnam) = makeTypeName((yyvsp[-1].str)); + (yyval.typnam)->typmods = (yyvsp[0].list); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43447 "gram.c" + break; + + case 1848: /* GenericType: type_function_name attrs opt_type_modifiers */ +#line 12866 "gram.y" + { + (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[-2].str)), (yyvsp[-1].list))); + (yyval.typnam)->typmods = (yyvsp[0].list); + (yyval.typnam)->location = (yylsp[-2]); + } +#line 43457 "gram.c" + break; + + case 1849: /* opt_type_modifiers: '(' expr_list ')' */ +#line 12873 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 43463 "gram.c" + break; + + case 1850: /* opt_type_modifiers: %empty */ +#line 12874 "gram.y" + { (yyval.list) = NIL; } +#line 43469 "gram.c" + break; + + case 1851: /* Numeric: INT_P */ +#line 12881 "gram.y" + { + (yyval.typnam) = SystemTypeName("int4"); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43478 "gram.c" + break; + + case 1852: /* Numeric: INTEGER */ +#line 12886 "gram.y" + { + (yyval.typnam) = SystemTypeName("int4"); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43487 "gram.c" + break; + + case 1853: /* Numeric: SMALLINT */ +#line 12891 "gram.y" + { + (yyval.typnam) = SystemTypeName("int2"); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43496 "gram.c" + break; + + case 1854: /* Numeric: BIGINT */ +#line 12896 "gram.y" + { + (yyval.typnam) = SystemTypeName("int8"); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43505 "gram.c" + break; + + case 1855: /* Numeric: REAL */ +#line 12901 "gram.y" + { + (yyval.typnam) = SystemTypeName("float4"); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43514 "gram.c" + break; + + case 1856: /* Numeric: FLOAT_P opt_float */ +#line 12906 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43523 "gram.c" + break; + + case 1857: /* Numeric: DOUBLE_P PRECISION */ +#line 12911 "gram.y" + { + (yyval.typnam) = SystemTypeName("float8"); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43532 "gram.c" + break; + + case 1858: /* Numeric: DECIMAL_P opt_type_modifiers */ +#line 12916 "gram.y" + { + (yyval.typnam) = SystemTypeName("numeric"); + (yyval.typnam)->typmods = (yyvsp[0].list); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43542 "gram.c" + break; + + case 1859: /* Numeric: DEC opt_type_modifiers */ +#line 12922 "gram.y" + { + (yyval.typnam) = SystemTypeName("numeric"); + (yyval.typnam)->typmods = (yyvsp[0].list); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43552 "gram.c" + break; + + case 1860: /* Numeric: NUMERIC opt_type_modifiers */ +#line 12928 "gram.y" + { + (yyval.typnam) = SystemTypeName("numeric"); + (yyval.typnam)->typmods = (yyvsp[0].list); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43562 "gram.c" + break; + + case 1861: /* Numeric: BOOLEAN_P */ +#line 12934 "gram.y" + { + (yyval.typnam) = SystemTypeName("bool"); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43571 "gram.c" + break; + + case 1862: /* opt_float: '(' Iconst ')' */ +#line 12941 "gram.y" + { + /* + * Check FLOAT() precision limits assuming IEEE floating + * types - thomas 1997-09-18 + */ + if ((yyvsp[-1].ival) < 1) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("precision for type float must be at least 1 bit"), + parser_errposition((yylsp[-1])))); + else if ((yyvsp[-1].ival) <= 24) + (yyval.typnam) = SystemTypeName("float4"); + else if ((yyvsp[-1].ival) <= 53) + (yyval.typnam) = SystemTypeName("float8"); + else + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("precision for type float must be less than 54 bits"), + parser_errposition((yylsp[-1])))); + } +#line 43596 "gram.c" + break; + + case 1863: /* opt_float: %empty */ +#line 12962 "gram.y" + { + (yyval.typnam) = SystemTypeName("float8"); + } +#line 43604 "gram.c" + break; + + case 1864: /* Bit: BitWithLength */ +#line 12972 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + } +#line 43612 "gram.c" + break; + + case 1865: /* Bit: BitWithoutLength */ +#line 12976 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + } +#line 43620 "gram.c" + break; + + case 1866: /* ConstBit: BitWithLength */ +#line 12984 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + } +#line 43628 "gram.c" + break; + + case 1867: /* ConstBit: BitWithoutLength */ +#line 12988 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + (yyval.typnam)->typmods = NIL; + } +#line 43637 "gram.c" + break; + + case 1868: /* BitWithLength: BIT opt_varying '(' expr_list ')' */ +#line 12996 "gram.y" + { + char *typname; + + typname = (yyvsp[-3].boolean) ? "varbit" : "bit"; + (yyval.typnam) = SystemTypeName(typname); + (yyval.typnam)->typmods = (yyvsp[-1].list); + (yyval.typnam)->location = (yylsp[-4]); + } +#line 43650 "gram.c" + break; + + case 1869: /* BitWithoutLength: BIT opt_varying */ +#line 13008 "gram.y" + { + /* bit defaults to bit(1), varbit to no limit */ + if ((yyvsp[0].boolean)) + { + (yyval.typnam) = SystemTypeName("varbit"); + } + else + { + (yyval.typnam) = SystemTypeName("bit"); + (yyval.typnam)->typmods = list_make1(makeIntConst(1, -1)); + } + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43668 "gram.c" + break; + + case 1870: /* Character: CharacterWithLength */ +#line 13029 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + } +#line 43676 "gram.c" + break; + + case 1871: /* Character: CharacterWithoutLength */ +#line 13033 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + } +#line 43684 "gram.c" + break; + + case 1872: /* ConstCharacter: CharacterWithLength */ +#line 13039 "gram.y" + { + (yyval.typnam) = (yyvsp[0].typnam); + } +#line 43692 "gram.c" + break; + + case 1873: /* ConstCharacter: CharacterWithoutLength */ +#line 13043 "gram.y" + { + /* Length was not specified so allow to be unrestricted. + * This handles problems with fixed-length (bpchar) strings + * which in column definitions must default to a length + * of one, but should not be constrained if the length + * was not specified. + */ + (yyval.typnam) = (yyvsp[0].typnam); + (yyval.typnam)->typmods = NIL; + } +#line 43707 "gram.c" + break; + + case 1874: /* CharacterWithLength: character '(' Iconst ')' */ +#line 13056 "gram.y" + { + (yyval.typnam) = SystemTypeName((yyvsp[-3].str)); + (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[-1].ival), (yylsp[-1]))); + (yyval.typnam)->location = (yylsp[-3]); + } +#line 43717 "gram.c" + break; + + case 1875: /* CharacterWithoutLength: character */ +#line 13064 "gram.y" + { + (yyval.typnam) = SystemTypeName((yyvsp[0].str)); + /* char defaults to char(1), varchar to no limit */ + if (strcmp((yyvsp[0].str), "bpchar") == 0) + (yyval.typnam)->typmods = list_make1(makeIntConst(1, -1)); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43729 "gram.c" + break; + + case 1876: /* character: CHARACTER opt_varying */ +#line 13074 "gram.y" + { (yyval.str) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } +#line 43735 "gram.c" + break; + + case 1877: /* character: CHAR_P opt_varying */ +#line 13076 "gram.y" + { (yyval.str) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } +#line 43741 "gram.c" + break; + + case 1878: /* character: VARCHAR */ +#line 13078 "gram.y" + { (yyval.str) = "varchar"; } +#line 43747 "gram.c" + break; + + case 1879: /* character: NATIONAL CHARACTER opt_varying */ +#line 13080 "gram.y" + { (yyval.str) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } +#line 43753 "gram.c" + break; + + case 1880: /* character: NATIONAL CHAR_P opt_varying */ +#line 13082 "gram.y" + { (yyval.str) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } +#line 43759 "gram.c" + break; + + case 1881: /* character: NCHAR opt_varying */ +#line 13084 "gram.y" + { (yyval.str) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } +#line 43765 "gram.c" + break; + + case 1882: /* opt_varying: VARYING */ +#line 13088 "gram.y" + { (yyval.boolean) = true; } +#line 43771 "gram.c" + break; + + case 1883: /* opt_varying: %empty */ +#line 13089 "gram.y" + { (yyval.boolean) = false; } +#line 43777 "gram.c" + break; + + case 1884: /* ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone */ +#line 13097 "gram.y" + { + if ((yyvsp[0].boolean)) + (yyval.typnam) = SystemTypeName("timestamptz"); + else + (yyval.typnam) = SystemTypeName("timestamp"); + (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[-2].ival), (yylsp[-2]))); + (yyval.typnam)->location = (yylsp[-4]); + } +#line 43790 "gram.c" + break; + + case 1885: /* ConstDatetime: TIMESTAMP opt_timezone */ +#line 13106 "gram.y" + { + if ((yyvsp[0].boolean)) + (yyval.typnam) = SystemTypeName("timestamptz"); + else + (yyval.typnam) = SystemTypeName("timestamp"); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43802 "gram.c" + break; + + case 1886: /* ConstDatetime: TIME '(' Iconst ')' opt_timezone */ +#line 13114 "gram.y" + { + if ((yyvsp[0].boolean)) + (yyval.typnam) = SystemTypeName("timetz"); + else + (yyval.typnam) = SystemTypeName("time"); + (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[-2].ival), (yylsp[-2]))); + (yyval.typnam)->location = (yylsp[-4]); + } +#line 43815 "gram.c" + break; + + case 1887: /* ConstDatetime: TIME opt_timezone */ +#line 13123 "gram.y" + { + if ((yyvsp[0].boolean)) + (yyval.typnam) = SystemTypeName("timetz"); + else + (yyval.typnam) = SystemTypeName("time"); + (yyval.typnam)->location = (yylsp[-1]); + } +#line 43827 "gram.c" + break; + + case 1888: /* ConstInterval: INTERVAL */ +#line 13134 "gram.y" + { + (yyval.typnam) = SystemTypeName("interval"); + (yyval.typnam)->location = (yylsp[0]); + } +#line 43836 "gram.c" + break; + + case 1889: /* opt_timezone: WITH_LA TIME ZONE */ +#line 13141 "gram.y" + { (yyval.boolean) = true; } +#line 43842 "gram.c" + break; + + case 1890: /* opt_timezone: WITHOUT TIME ZONE */ +#line 13142 "gram.y" + { (yyval.boolean) = false; } +#line 43848 "gram.c" + break; + + case 1891: /* opt_timezone: %empty */ +#line 13143 "gram.y" + { (yyval.boolean) = false; } +#line 43854 "gram.c" + break; + + case 1892: /* opt_interval: YEAR_P */ +#line 13148 "gram.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(YEAR), (yylsp[0]))); } +#line 43860 "gram.c" + break; + + case 1893: /* opt_interval: MONTH_P */ +#line 13150 "gram.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MONTH), (yylsp[0]))); } +#line 43866 "gram.c" + break; + + case 1894: /* opt_interval: DAY_P */ +#line 13152 "gram.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY), (yylsp[0]))); } +#line 43872 "gram.c" + break; + + case 1895: /* opt_interval: HOUR_P */ +#line 13154 "gram.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR), (yylsp[0]))); } +#line 43878 "gram.c" + break; + + case 1896: /* opt_interval: MINUTE_P */ +#line 13156 "gram.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MINUTE), (yylsp[0]))); } +#line 43884 "gram.c" + break; + + case 1897: /* opt_interval: interval_second */ +#line 13158 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 43890 "gram.c" + break; + + case 1898: /* opt_interval: YEAR_P TO MONTH_P */ +#line 13160 "gram.y" + { + (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(YEAR) | + INTERVAL_MASK(MONTH), (yylsp[-2]))); + } +#line 43899 "gram.c" + break; + + case 1899: /* opt_interval: DAY_P TO HOUR_P */ +#line 13165 "gram.y" + { + (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY) | + INTERVAL_MASK(HOUR), (yylsp[-2]))); + } +#line 43908 "gram.c" + break; + + case 1900: /* opt_interval: DAY_P TO MINUTE_P */ +#line 13170 "gram.y" + { + (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY) | + INTERVAL_MASK(HOUR) | + INTERVAL_MASK(MINUTE), (yylsp[-2]))); + } +#line 43918 "gram.c" + break; + + case 1901: /* opt_interval: DAY_P TO interval_second */ +#line 13176 "gram.y" + { + (yyval.list) = (yyvsp[0].list); + linitial((yyval.list)) = makeIntConst(INTERVAL_MASK(DAY) | + INTERVAL_MASK(HOUR) | + INTERVAL_MASK(MINUTE) | + INTERVAL_MASK(SECOND), (yylsp[-2])); + } +#line 43930 "gram.c" + break; + + case 1902: /* opt_interval: HOUR_P TO MINUTE_P */ +#line 13184 "gram.y" + { + (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR) | + INTERVAL_MASK(MINUTE), (yylsp[-2]))); + } +#line 43939 "gram.c" + break; + + case 1903: /* opt_interval: HOUR_P TO interval_second */ +#line 13189 "gram.y" + { + (yyval.list) = (yyvsp[0].list); + linitial((yyval.list)) = makeIntConst(INTERVAL_MASK(HOUR) | + INTERVAL_MASK(MINUTE) | + INTERVAL_MASK(SECOND), (yylsp[-2])); + } +#line 43950 "gram.c" + break; + + case 1904: /* opt_interval: MINUTE_P TO interval_second */ +#line 13196 "gram.y" + { + (yyval.list) = (yyvsp[0].list); + linitial((yyval.list)) = makeIntConst(INTERVAL_MASK(MINUTE) | + INTERVAL_MASK(SECOND), (yylsp[-2])); + } +#line 43960 "gram.c" + break; + + case 1905: /* opt_interval: %empty */ +#line 13202 "gram.y" + { (yyval.list) = NIL; } +#line 43966 "gram.c" + break; + + case 1906: /* interval_second: SECOND_P */ +#line 13207 "gram.y" + { + (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(SECOND), (yylsp[0]))); + } +#line 43974 "gram.c" + break; + + case 1907: /* interval_second: SECOND_P '(' Iconst ')' */ +#line 13211 "gram.y" + { + (yyval.list) = list_make2(makeIntConst(INTERVAL_MASK(SECOND), (yylsp[-3])), + makeIntConst((yyvsp[-1].ival), (yylsp[-1]))); + } +#line 43983 "gram.c" + break; + + case 1908: /* a_expr: c_expr */ +#line 13246 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 43989 "gram.c" + break; + + case 1909: /* a_expr: a_expr TYPECAST Typename */ +#line 13248 "gram.y" + { (yyval.node) = makeTypeCast((yyvsp[-2].node), (yyvsp[0].typnam), (yylsp[-1])); } +#line 43995 "gram.c" + break; + + case 1910: /* a_expr: a_expr COLLATE any_name */ +#line 13250 "gram.y" + { + CollateClause *n = makeNode(CollateClause); + n->arg = (yyvsp[-2].node); + n->collname = (yyvsp[0].list); + n->location = (yylsp[-1]); + (yyval.node) = (Node *) n; + } +#line 44007 "gram.c" + break; + + case 1911: /* a_expr: a_expr AT TIME ZONE a_expr */ +#line 13258 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("timezone"), + list_make2((yyvsp[0].node), (yyvsp[-4].node)), + COERCE_SQL_SYNTAX, + (yylsp[-3])); + } +#line 44018 "gram.c" + break; + + case 1912: /* a_expr: '+' a_expr */ +#line 13274 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, (yyvsp[0].node), (yylsp[-1])); } +#line 44024 "gram.c" + break; + + case 1913: /* a_expr: '-' a_expr */ +#line 13276 "gram.y" + { (yyval.node) = doNegate((yyvsp[0].node), (yylsp[-1])); } +#line 44030 "gram.c" + break; + + case 1914: /* a_expr: a_expr '+' a_expr */ +#line 13278 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44036 "gram.c" + break; + + case 1915: /* a_expr: a_expr '-' a_expr */ +#line 13280 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "-", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44042 "gram.c" + break; + + case 1916: /* a_expr: a_expr '*' a_expr */ +#line 13282 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "*", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44048 "gram.c" + break; + + case 1917: /* a_expr: a_expr '/' a_expr */ +#line 13284 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "/", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44054 "gram.c" + break; + + case 1918: /* a_expr: a_expr '%' a_expr */ +#line 13286 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "%", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44060 "gram.c" + break; + + case 1919: /* a_expr: a_expr '^' a_expr */ +#line 13288 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "^", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44066 "gram.c" + break; + + case 1920: /* a_expr: a_expr '<' a_expr */ +#line 13290 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44072 "gram.c" + break; + + case 1921: /* a_expr: a_expr '>' a_expr */ +#line 13292 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44078 "gram.c" + break; + + case 1922: /* a_expr: a_expr '=' a_expr */ +#line 13294 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44084 "gram.c" + break; + + case 1923: /* a_expr: a_expr LESS_EQUALS a_expr */ +#line 13296 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44090 "gram.c" + break; + + case 1924: /* a_expr: a_expr GREATER_EQUALS a_expr */ +#line 13298 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44096 "gram.c" + break; + + case 1925: /* a_expr: a_expr NOT_EQUALS a_expr */ +#line 13300 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<>", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44102 "gram.c" + break; + + case 1926: /* a_expr: a_expr qual_Op a_expr */ +#line 13303 "gram.y" + { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[-1].list), (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44108 "gram.c" + break; + + case 1927: /* a_expr: qual_Op a_expr */ +#line 13305 "gram.y" + { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[-1].list), NULL, (yyvsp[0].node), (yylsp[-1])); } +#line 44114 "gram.c" + break; + + case 1928: /* a_expr: a_expr AND a_expr */ +#line 13308 "gram.y" + { (yyval.node) = makeAndExpr((yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44120 "gram.c" + break; + + case 1929: /* a_expr: a_expr OR a_expr */ +#line 13310 "gram.y" + { (yyval.node) = makeOrExpr((yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44126 "gram.c" + break; + + case 1930: /* a_expr: NOT a_expr */ +#line 13312 "gram.y" + { (yyval.node) = makeNotExpr((yyvsp[0].node), (yylsp[-1])); } +#line 44132 "gram.c" + break; + + case 1931: /* a_expr: NOT_LA a_expr */ +#line 13314 "gram.y" + { (yyval.node) = makeNotExpr((yyvsp[0].node), (yylsp[-1])); } +#line 44138 "gram.c" + break; + + case 1932: /* a_expr: a_expr LIKE a_expr */ +#line 13317 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_LIKE, "~~", + (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); + } +#line 44147 "gram.c" + break; + + case 1933: /* a_expr: a_expr LIKE a_expr ESCAPE a_expr */ +#line 13322 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), + list_make2((yyvsp[-2].node), (yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-3])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_LIKE, "~~", + (yyvsp[-4].node), (Node *) n, (yylsp[-3])); + } +#line 44160 "gram.c" + break; + + case 1934: /* a_expr: a_expr NOT_LA LIKE a_expr */ +#line 13331 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_LIKE, "!~~", + (yyvsp[-3].node), (yyvsp[0].node), (yylsp[-2])); + } +#line 44169 "gram.c" + break; + + case 1935: /* a_expr: a_expr NOT_LA LIKE a_expr ESCAPE a_expr */ +#line 13336 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), + list_make2((yyvsp[-2].node), (yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-4])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_LIKE, "!~~", + (yyvsp[-5].node), (Node *) n, (yylsp[-4])); + } +#line 44182 "gram.c" + break; + + case 1936: /* a_expr: a_expr ILIKE a_expr */ +#line 13345 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_ILIKE, "~~*", + (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); + } +#line 44191 "gram.c" + break; + + case 1937: /* a_expr: a_expr ILIKE a_expr ESCAPE a_expr */ +#line 13350 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), + list_make2((yyvsp[-2].node), (yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-3])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_ILIKE, "~~*", + (yyvsp[-4].node), (Node *) n, (yylsp[-3])); + } +#line 44204 "gram.c" + break; + + case 1938: /* a_expr: a_expr NOT_LA ILIKE a_expr */ +#line 13359 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_ILIKE, "!~~*", + (yyvsp[-3].node), (yyvsp[0].node), (yylsp[-2])); + } +#line 44213 "gram.c" + break; + + case 1939: /* a_expr: a_expr NOT_LA ILIKE a_expr ESCAPE a_expr */ +#line 13364 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("like_escape"), + list_make2((yyvsp[-2].node), (yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-4])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_ILIKE, "!~~*", + (yyvsp[-5].node), (Node *) n, (yylsp[-4])); + } +#line 44226 "gram.c" + break; + + case 1940: /* a_expr: a_expr SIMILAR TO a_expr */ +#line 13374 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), + list_make1((yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-2])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_SIMILAR, "~", + (yyvsp[-3].node), (Node *) n, (yylsp[-2])); + } +#line 44239 "gram.c" + break; + + case 1941: /* a_expr: a_expr SIMILAR TO a_expr ESCAPE a_expr */ +#line 13383 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), + list_make2((yyvsp[-2].node), (yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-4])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_SIMILAR, "~", + (yyvsp[-5].node), (Node *) n, (yylsp[-4])); + } +#line 44252 "gram.c" + break; + + case 1942: /* a_expr: a_expr NOT_LA SIMILAR TO a_expr */ +#line 13392 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), + list_make1((yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-3])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_SIMILAR, "!~", + (yyvsp[-4].node), (Node *) n, (yylsp[-3])); + } +#line 44265 "gram.c" + break; + + case 1943: /* a_expr: a_expr NOT_LA SIMILAR TO a_expr ESCAPE a_expr */ +#line 13401 "gram.y" + { + FuncCall *n = makeFuncCall(SystemFuncName("similar_to_escape"), + list_make2((yyvsp[-2].node), (yyvsp[0].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-5])); + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_SIMILAR, "!~", + (yyvsp[-6].node), (Node *) n, (yylsp[-5])); + } +#line 44278 "gram.c" + break; + + case 1944: /* a_expr: a_expr IS NULL_P */ +#line 13420 "gram.y" + { + NullTest *n = makeNode(NullTest); + n->arg = (Expr *) (yyvsp[-2].node); + n->nulltesttype = IS_NULL; + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 44290 "gram.c" + break; + + case 1945: /* a_expr: a_expr ISNULL */ +#line 13428 "gram.y" + { + NullTest *n = makeNode(NullTest); + n->arg = (Expr *) (yyvsp[-1].node); + n->nulltesttype = IS_NULL; + n->location = (yylsp[0]); + (yyval.node) = (Node *)n; + } +#line 44302 "gram.c" + break; + + case 1946: /* a_expr: a_expr IS NOT NULL_P */ +#line 13436 "gram.y" + { + NullTest *n = makeNode(NullTest); + n->arg = (Expr *) (yyvsp[-3].node); + n->nulltesttype = IS_NOT_NULL; + n->location = (yylsp[-2]); + (yyval.node) = (Node *)n; + } +#line 44314 "gram.c" + break; + + case 1947: /* a_expr: a_expr NOTNULL */ +#line 13444 "gram.y" + { + NullTest *n = makeNode(NullTest); + n->arg = (Expr *) (yyvsp[-1].node); + n->nulltesttype = IS_NOT_NULL; + n->location = (yylsp[0]); + (yyval.node) = (Node *)n; + } +#line 44326 "gram.c" + break; + + case 1948: /* a_expr: row OVERLAPS row */ +#line 13452 "gram.y" + { + if (list_length((yyvsp[-2].list)) != 2) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("wrong number of parameters on left side of OVERLAPS expression"), + parser_errposition((yylsp[-2])))); + if (list_length((yyvsp[0].list)) != 2) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("wrong number of parameters on right side of OVERLAPS expression"), + parser_errposition((yylsp[0])))); + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("overlaps"), + list_concat((yyvsp[-2].list), (yyvsp[0].list)), + COERCE_SQL_SYNTAX, + (yylsp[-1])); + } +#line 44347 "gram.c" + break; + + case 1949: /* a_expr: a_expr IS TRUE_P */ +#line 13469 "gram.y" + { + BooleanTest *b = makeNode(BooleanTest); + b->arg = (Expr *) (yyvsp[-2].node); + b->booltesttype = IS_TRUE; + b->location = (yylsp[-1]); + (yyval.node) = (Node *)b; + } +#line 44359 "gram.c" + break; + + case 1950: /* a_expr: a_expr IS NOT TRUE_P */ +#line 13477 "gram.y" + { + BooleanTest *b = makeNode(BooleanTest); + b->arg = (Expr *) (yyvsp[-3].node); + b->booltesttype = IS_NOT_TRUE; + b->location = (yylsp[-2]); + (yyval.node) = (Node *)b; + } +#line 44371 "gram.c" + break; + + case 1951: /* a_expr: a_expr IS FALSE_P */ +#line 13485 "gram.y" + { + BooleanTest *b = makeNode(BooleanTest); + b->arg = (Expr *) (yyvsp[-2].node); + b->booltesttype = IS_FALSE; + b->location = (yylsp[-1]); + (yyval.node) = (Node *)b; + } +#line 44383 "gram.c" + break; + + case 1952: /* a_expr: a_expr IS NOT FALSE_P */ +#line 13493 "gram.y" + { + BooleanTest *b = makeNode(BooleanTest); + b->arg = (Expr *) (yyvsp[-3].node); + b->booltesttype = IS_NOT_FALSE; + b->location = (yylsp[-2]); + (yyval.node) = (Node *)b; + } +#line 44395 "gram.c" + break; + + case 1953: /* a_expr: a_expr IS UNKNOWN */ +#line 13501 "gram.y" + { + BooleanTest *b = makeNode(BooleanTest); + b->arg = (Expr *) (yyvsp[-2].node); + b->booltesttype = IS_UNKNOWN; + b->location = (yylsp[-1]); + (yyval.node) = (Node *)b; + } +#line 44407 "gram.c" + break; + + case 1954: /* a_expr: a_expr IS NOT UNKNOWN */ +#line 13509 "gram.y" + { + BooleanTest *b = makeNode(BooleanTest); + b->arg = (Expr *) (yyvsp[-3].node); + b->booltesttype = IS_NOT_UNKNOWN; + b->location = (yylsp[-2]); + (yyval.node) = (Node *)b; + } +#line 44419 "gram.c" + break; + + case 1955: /* a_expr: a_expr IS DISTINCT FROM a_expr */ +#line 13517 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, "=", (yyvsp[-4].node), (yyvsp[0].node), (yylsp[-3])); + } +#line 44427 "gram.c" + break; + + case 1956: /* a_expr: a_expr IS NOT DISTINCT FROM a_expr */ +#line 13521 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_DISTINCT, "=", (yyvsp[-5].node), (yyvsp[0].node), (yylsp[-4])); + } +#line 44435 "gram.c" + break; + + case 1957: /* a_expr: a_expr BETWEEN opt_asymmetric b_expr AND a_expr */ +#line 13525 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_BETWEEN, + "BETWEEN", + (yyvsp[-5].node), + (Node *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), + (yylsp[-4])); + } +#line 44447 "gram.c" + break; + + case 1958: /* a_expr: a_expr NOT_LA BETWEEN opt_asymmetric b_expr AND a_expr */ +#line 13533 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_BETWEEN, + "NOT BETWEEN", + (yyvsp[-6].node), + (Node *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), + (yylsp[-5])); + } +#line 44459 "gram.c" + break; + + case 1959: /* a_expr: a_expr BETWEEN SYMMETRIC b_expr AND a_expr */ +#line 13541 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_BETWEEN_SYM, + "BETWEEN SYMMETRIC", + (yyvsp[-5].node), + (Node *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), + (yylsp[-4])); + } +#line 44471 "gram.c" + break; + + case 1960: /* a_expr: a_expr NOT_LA BETWEEN SYMMETRIC b_expr AND a_expr */ +#line 13549 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_BETWEEN_SYM, + "NOT BETWEEN SYMMETRIC", + (yyvsp[-6].node), + (Node *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), + (yylsp[-5])); + } +#line 44483 "gram.c" + break; + + case 1961: /* a_expr: a_expr IN_P in_expr */ +#line 13557 "gram.y" + { + /* in_expr returns a SubLink or a list of a_exprs */ + if (IsA((yyvsp[0].node), SubLink)) + { + /* generate foo = ANY (subquery) */ + SubLink *n = (SubLink *) (yyvsp[0].node); + n->subLinkType = ANY_SUBLINK; + n->subLinkId = 0; + n->testexpr = (yyvsp[-2].node); + n->operName = NIL; /* show it's IN not = ANY */ + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } + else + { + /* generate scalar IN expression */ + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_IN, "=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); + } + } +#line 44507 "gram.c" + break; + + case 1962: /* a_expr: a_expr NOT_LA IN_P in_expr */ +#line 13577 "gram.y" + { + /* in_expr returns a SubLink or a list of a_exprs */ + if (IsA((yyvsp[0].node), SubLink)) + { + /* generate NOT (foo = ANY (subquery)) */ + /* Make an = ANY node */ + SubLink *n = (SubLink *) (yyvsp[0].node); + n->subLinkType = ANY_SUBLINK; + n->subLinkId = 0; + n->testexpr = (yyvsp[-3].node); + n->operName = NIL; /* show it's IN not = ANY */ + n->location = (yylsp[-2]); + /* Stick a NOT on top; must have same parse location */ + (yyval.node) = makeNotExpr((Node *) n, (yylsp[-2])); + } + else + { + /* generate scalar NOT IN expression */ + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_IN, "<>", (yyvsp[-3].node), (yyvsp[0].node), (yylsp[-2])); + } + } +#line 44533 "gram.c" + break; + + case 1963: /* a_expr: a_expr subquery_Op sub_type select_with_parens */ +#line 13599 "gram.y" + { + SubLink *n = makeNode(SubLink); + n->subLinkType = (yyvsp[-1].ival); + n->subLinkId = 0; + n->testexpr = (yyvsp[-3].node); + n->operName = (yyvsp[-2].list); + n->subselect = (yyvsp[0].node); + n->location = (yylsp[-2]); + (yyval.node) = (Node *)n; + } +#line 44548 "gram.c" + break; + + case 1964: /* a_expr: a_expr subquery_Op sub_type '(' a_expr ')' */ +#line 13610 "gram.y" + { + if ((yyvsp[-3].ival) == ANY_SUBLINK) + (yyval.node) = (Node *) makeA_Expr(AEXPR_OP_ANY, (yyvsp[-4].list), (yyvsp[-5].node), (yyvsp[-1].node), (yylsp[-4])); + else + (yyval.node) = (Node *) makeA_Expr(AEXPR_OP_ALL, (yyvsp[-4].list), (yyvsp[-5].node), (yyvsp[-1].node), (yylsp[-4])); + } +#line 44559 "gram.c" + break; + + case 1965: /* a_expr: UNIQUE select_with_parens */ +#line 13617 "gram.y" + { + /* Not sure how to get rid of the parentheses + * but there are lots of shift/reduce errors without them. + * + * Should be able to implement this by plopping the entire + * select into a node, then transforming the target expressions + * from whatever they are into count(*), and testing the + * entire result equal to one. + * But, will probably implement a separate node in the executor. + */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("UNIQUE predicate is not yet implemented"), + parser_errposition((yylsp[-1])))); + } +#line 44579 "gram.c" + break; + + case 1966: /* a_expr: a_expr IS DOCUMENT_P */ +#line 13633 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_DOCUMENT, NULL, NIL, + list_make1((yyvsp[-2].node)), (yylsp[-1])); + } +#line 44588 "gram.c" + break; + + case 1967: /* a_expr: a_expr IS NOT DOCUMENT_P */ +#line 13638 "gram.y" + { + (yyval.node) = makeNotExpr(makeXmlExpr(IS_DOCUMENT, NULL, NIL, + list_make1((yyvsp[-3].node)), (yylsp[-2])), + (yylsp[-2])); + } +#line 44598 "gram.c" + break; + + case 1968: /* a_expr: a_expr IS NORMALIZED */ +#line 13644 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("is_normalized"), + list_make1((yyvsp[-2].node)), + COERCE_SQL_SYNTAX, + (yylsp[-1])); + } +#line 44609 "gram.c" + break; + + case 1969: /* a_expr: a_expr IS unicode_normal_form NORMALIZED */ +#line 13651 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("is_normalized"), + list_make2((yyvsp[-3].node), makeStringConst((yyvsp[-1].str), (yylsp[-1]))), + COERCE_SQL_SYNTAX, + (yylsp[-2])); + } +#line 44620 "gram.c" + break; + + case 1970: /* a_expr: a_expr IS NOT NORMALIZED */ +#line 13658 "gram.y" + { + (yyval.node) = makeNotExpr((Node *) makeFuncCall(SystemFuncName("is_normalized"), + list_make1((yyvsp[-3].node)), + COERCE_SQL_SYNTAX, + (yylsp[-2])), + (yylsp[-2])); + } +#line 44632 "gram.c" + break; + + case 1971: /* a_expr: a_expr IS NOT unicode_normal_form NORMALIZED */ +#line 13666 "gram.y" + { + (yyval.node) = makeNotExpr((Node *) makeFuncCall(SystemFuncName("is_normalized"), + list_make2((yyvsp[-4].node), makeStringConst((yyvsp[-1].str), (yylsp[-1]))), + COERCE_SQL_SYNTAX, + (yylsp[-3])), + (yylsp[-3])); + } +#line 44644 "gram.c" + break; + + case 1972: /* a_expr: DEFAULT */ +#line 13674 "gram.y" + { + /* + * The SQL spec only allows DEFAULT in "contextually typed + * expressions", but for us, it's easier to allow it in + * any a_expr and then throw error during parse analysis + * if it's in an inappropriate context. This way also + * lets us say something smarter than "syntax error". + */ + SetToDefault *n = makeNode(SetToDefault); + /* parse analysis will fill in the rest */ + n->location = (yylsp[0]); + (yyval.node) = (Node *)n; + } +#line 44662 "gram.c" + break; + + case 1973: /* b_expr: c_expr */ +#line 13699 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 44668 "gram.c" + break; + + case 1974: /* b_expr: b_expr TYPECAST Typename */ +#line 13701 "gram.y" + { (yyval.node) = makeTypeCast((yyvsp[-2].node), (yyvsp[0].typnam), (yylsp[-1])); } +#line 44674 "gram.c" + break; + + case 1975: /* b_expr: '+' b_expr */ +#line 13703 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", NULL, (yyvsp[0].node), (yylsp[-1])); } +#line 44680 "gram.c" + break; + + case 1976: /* b_expr: '-' b_expr */ +#line 13705 "gram.y" + { (yyval.node) = doNegate((yyvsp[0].node), (yylsp[-1])); } +#line 44686 "gram.c" + break; + + case 1977: /* b_expr: b_expr '+' b_expr */ +#line 13707 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "+", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44692 "gram.c" + break; + + case 1978: /* b_expr: b_expr '-' b_expr */ +#line 13709 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "-", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44698 "gram.c" + break; + + case 1979: /* b_expr: b_expr '*' b_expr */ +#line 13711 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "*", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44704 "gram.c" + break; + + case 1980: /* b_expr: b_expr '/' b_expr */ +#line 13713 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "/", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44710 "gram.c" + break; + + case 1981: /* b_expr: b_expr '%' b_expr */ +#line 13715 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "%", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44716 "gram.c" + break; + + case 1982: /* b_expr: b_expr '^' b_expr */ +#line 13717 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "^", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44722 "gram.c" + break; + + case 1983: /* b_expr: b_expr '<' b_expr */ +#line 13719 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44728 "gram.c" + break; + + case 1984: /* b_expr: b_expr '>' b_expr */ +#line 13721 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44734 "gram.c" + break; + + case 1985: /* b_expr: b_expr '=' b_expr */ +#line 13723 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44740 "gram.c" + break; + + case 1986: /* b_expr: b_expr LESS_EQUALS b_expr */ +#line 13725 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44746 "gram.c" + break; + + case 1987: /* b_expr: b_expr GREATER_EQUALS b_expr */ +#line 13727 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, ">=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44752 "gram.c" + break; + + case 1988: /* b_expr: b_expr NOT_EQUALS b_expr */ +#line 13729 "gram.y" + { (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_OP, "<>", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44758 "gram.c" + break; + + case 1989: /* b_expr: b_expr qual_Op b_expr */ +#line 13731 "gram.y" + { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[-1].list), (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } +#line 44764 "gram.c" + break; + + case 1990: /* b_expr: qual_Op b_expr */ +#line 13733 "gram.y" + { (yyval.node) = (Node *) makeA_Expr(AEXPR_OP, (yyvsp[-1].list), NULL, (yyvsp[0].node), (yylsp[-1])); } +#line 44770 "gram.c" + break; + + case 1991: /* b_expr: b_expr IS DISTINCT FROM b_expr */ +#line 13735 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_DISTINCT, "=", (yyvsp[-4].node), (yyvsp[0].node), (yylsp[-3])); + } +#line 44778 "gram.c" + break; + + case 1992: /* b_expr: b_expr IS NOT DISTINCT FROM b_expr */ +#line 13739 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NOT_DISTINCT, "=", (yyvsp[-5].node), (yyvsp[0].node), (yylsp[-4])); + } +#line 44786 "gram.c" + break; + + case 1993: /* b_expr: b_expr IS DOCUMENT_P */ +#line 13743 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_DOCUMENT, NULL, NIL, + list_make1((yyvsp[-2].node)), (yylsp[-1])); + } +#line 44795 "gram.c" + break; + + case 1994: /* b_expr: b_expr IS NOT DOCUMENT_P */ +#line 13748 "gram.y" + { + (yyval.node) = makeNotExpr(makeXmlExpr(IS_DOCUMENT, NULL, NIL, + list_make1((yyvsp[-3].node)), (yylsp[-2])), + (yylsp[-2])); + } +#line 44805 "gram.c" + break; + + case 1995: /* c_expr: columnref */ +#line 13763 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 44811 "gram.c" + break; + + case 1996: /* c_expr: AexprConst */ +#line 13764 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 44817 "gram.c" + break; + + case 1997: /* c_expr: PARAM opt_indirection */ +#line 13766 "gram.y" + { + ParamRef *p = makeNode(ParamRef); + p->number = (yyvsp[-1].ival); + p->location = (yylsp[-1]); + if ((yyvsp[0].list)) + { + A_Indirection *n = makeNode(A_Indirection); + n->arg = (Node *) p; + n->indirection = check_indirection((yyvsp[0].list), yyscanner); + (yyval.node) = (Node *) n; + } + else + (yyval.node) = (Node *) p; + } +#line 44836 "gram.c" + break; + + case 1998: /* c_expr: '(' a_expr ')' opt_indirection */ +#line 13781 "gram.y" + { + if ((yyvsp[0].list)) + { + A_Indirection *n = makeNode(A_Indirection); + n->arg = (yyvsp[-2].node); + n->indirection = check_indirection((yyvsp[0].list), yyscanner); + (yyval.node) = (Node *)n; + } + else + (yyval.node) = (yyvsp[-2].node); + } +#line 44852 "gram.c" + break; + + case 1999: /* c_expr: case_expr */ +#line 13793 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 44858 "gram.c" + break; + + case 2000: /* c_expr: func_expr */ +#line 13795 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 44864 "gram.c" + break; + + case 2001: /* c_expr: select_with_parens */ +#line 13797 "gram.y" + { + SubLink *n = makeNode(SubLink); + n->subLinkType = EXPR_SUBLINK; + n->subLinkId = 0; + n->testexpr = NULL; + n->operName = NIL; + n->subselect = (yyvsp[0].node); + n->location = (yylsp[0]); + (yyval.node) = (Node *)n; + } +#line 44879 "gram.c" + break; + + case 2002: /* c_expr: select_with_parens indirection */ +#line 13808 "gram.y" + { + /* + * Because the select_with_parens nonterminal is designed + * to "eat" as many levels of parens as possible, the + * '(' a_expr ')' opt_indirection production above will + * fail to match a sub-SELECT with indirection decoration; + * the sub-SELECT won't be regarded as an a_expr as long + * as there are parens around it. To support applying + * subscripting or field selection to a sub-SELECT result, + * we need this redundant-looking production. + */ + SubLink *n = makeNode(SubLink); + A_Indirection *a = makeNode(A_Indirection); + n->subLinkType = EXPR_SUBLINK; + n->subLinkId = 0; + n->testexpr = NULL; + n->operName = NIL; + n->subselect = (yyvsp[-1].node); + n->location = (yylsp[-1]); + a->arg = (Node *)n; + a->indirection = check_indirection((yyvsp[0].list), yyscanner); + (yyval.node) = (Node *)a; + } +#line 44907 "gram.c" + break; + + case 2003: /* c_expr: EXISTS select_with_parens */ +#line 13832 "gram.y" + { + SubLink *n = makeNode(SubLink); + n->subLinkType = EXISTS_SUBLINK; + n->subLinkId = 0; + n->testexpr = NULL; + n->operName = NIL; + n->subselect = (yyvsp[0].node); + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 44922 "gram.c" + break; + + case 2004: /* c_expr: ARRAY select_with_parens */ +#line 13843 "gram.y" + { + SubLink *n = makeNode(SubLink); + n->subLinkType = ARRAY_SUBLINK; + n->subLinkId = 0; + n->testexpr = NULL; + n->operName = NIL; + n->subselect = (yyvsp[0].node); + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 44937 "gram.c" + break; + + case 2005: /* c_expr: ARRAY array_expr */ +#line 13854 "gram.y" + { + A_ArrayExpr *n = castNode(A_ArrayExpr, (yyvsp[0].node)); + /* point outermost A_ArrayExpr to the ARRAY keyword */ + n->location = (yylsp[-1]); + (yyval.node) = (Node *)n; + } +#line 44948 "gram.c" + break; + + case 2006: /* c_expr: explicit_row */ +#line 13861 "gram.y" + { + RowExpr *r = makeNode(RowExpr); + r->args = (yyvsp[0].list); + r->row_typeid = InvalidOid; /* not analyzed yet */ + r->colnames = NIL; /* to be filled in during analysis */ + r->row_format = COERCE_EXPLICIT_CALL; /* abuse */ + r->location = (yylsp[0]); + (yyval.node) = (Node *)r; + } +#line 44962 "gram.c" + break; + + case 2007: /* c_expr: implicit_row */ +#line 13871 "gram.y" + { + RowExpr *r = makeNode(RowExpr); + r->args = (yyvsp[0].list); + r->row_typeid = InvalidOid; /* not analyzed yet */ + r->colnames = NIL; /* to be filled in during analysis */ + r->row_format = COERCE_IMPLICIT_CAST; /* abuse */ + r->location = (yylsp[0]); + (yyval.node) = (Node *)r; + } +#line 44976 "gram.c" + break; + + case 2008: /* c_expr: GROUPING '(' expr_list ')' */ +#line 13881 "gram.y" + { + GroupingFunc *g = makeNode(GroupingFunc); + g->args = (yyvsp[-1].list); + g->location = (yylsp[-3]); + (yyval.node) = (Node *)g; + } +#line 44987 "gram.c" + break; + + case 2009: /* func_application: func_name '(' ')' */ +#line 13890 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall((yyvsp[-2].list), NIL, + COERCE_EXPLICIT_CALL, + (yylsp[-2])); + } +#line 44997 "gram.c" + break; + + case 2010: /* func_application: func_name '(' func_arg_list opt_sort_clause ')' */ +#line 13896 "gram.y" + { + FuncCall *n = makeFuncCall((yyvsp[-4].list), (yyvsp[-2].list), + COERCE_EXPLICIT_CALL, + (yylsp[-4])); + n->agg_order = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 45009 "gram.c" + break; + + case 2011: /* func_application: func_name '(' VARIADIC func_arg_expr opt_sort_clause ')' */ +#line 13904 "gram.y" + { + FuncCall *n = makeFuncCall((yyvsp[-5].list), list_make1((yyvsp[-2].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-5])); + n->func_variadic = true; + n->agg_order = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 45022 "gram.c" + break; + + case 2012: /* func_application: func_name '(' func_arg_list ',' VARIADIC func_arg_expr opt_sort_clause ')' */ +#line 13913 "gram.y" + { + FuncCall *n = makeFuncCall((yyvsp[-7].list), lappend((yyvsp[-5].list), (yyvsp[-2].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-7])); + n->func_variadic = true; + n->agg_order = (yyvsp[-1].list); + (yyval.node) = (Node *)n; + } +#line 45035 "gram.c" + break; + + case 2013: /* func_application: func_name '(' ALL func_arg_list opt_sort_clause ')' */ +#line 13922 "gram.y" + { + FuncCall *n = makeFuncCall((yyvsp[-5].list), (yyvsp[-2].list), + COERCE_EXPLICIT_CALL, + (yylsp[-5])); + n->agg_order = (yyvsp[-1].list); + /* Ideally we'd mark the FuncCall node to indicate + * "must be an aggregate", but there's no provision + * for that in FuncCall at the moment. + */ + (yyval.node) = (Node *)n; + } +#line 45051 "gram.c" + break; + + case 2014: /* func_application: func_name '(' DISTINCT func_arg_list opt_sort_clause ')' */ +#line 13934 "gram.y" + { + FuncCall *n = makeFuncCall((yyvsp[-5].list), (yyvsp[-2].list), + COERCE_EXPLICIT_CALL, + (yylsp[-5])); + n->agg_order = (yyvsp[-1].list); + n->agg_distinct = true; + (yyval.node) = (Node *)n; + } +#line 45064 "gram.c" + break; + + case 2015: /* func_application: func_name '(' '*' ')' */ +#line 13943 "gram.y" + { + /* + * We consider AGGREGATE(*) to invoke a parameterless + * aggregate. This does the right thing for COUNT(*), + * and there are no other aggregates in SQL that accept + * '*' as parameter. + * + * The FuncCall node is also marked agg_star = true, + * so that later processing can detect what the argument + * really was. + */ + FuncCall *n = makeFuncCall((yyvsp[-3].list), NIL, + COERCE_EXPLICIT_CALL, + (yylsp[-3])); + n->agg_star = true; + (yyval.node) = (Node *)n; + } +#line 45086 "gram.c" + break; + + case 2016: /* func_expr: func_application within_group_clause filter_clause over_clause */ +#line 13973 "gram.y" + { + FuncCall *n = (FuncCall *) (yyvsp[-3].node); + /* + * The order clause for WITHIN GROUP and the one for + * plain-aggregate ORDER BY share a field, so we have to + * check here that at most one is present. We also check + * for DISTINCT and VARIADIC here to give a better error + * location. Other consistency checks are deferred to + * parse analysis. + */ + if ((yyvsp[-2].list) != NIL) + { + if (n->agg_order != NIL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cannot use multiple ORDER BY clauses with WITHIN GROUP"), + parser_errposition((yylsp[-2])))); + if (n->agg_distinct) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cannot use DISTINCT with WITHIN GROUP"), + parser_errposition((yylsp[-2])))); + if (n->func_variadic) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cannot use VARIADIC with WITHIN GROUP"), + parser_errposition((yylsp[-2])))); + n->agg_order = (yyvsp[-2].list); + n->agg_within_group = true; + } + n->agg_filter = (yyvsp[-1].node); + n->over = (yyvsp[0].windef); + (yyval.node) = (Node *) n; + } +#line 45125 "gram.c" + break; + + case 2017: /* func_expr: func_expr_common_subexpr */ +#line 14008 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 45131 "gram.c" + break; + + case 2018: /* func_expr_windowless: func_application */ +#line 14018 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 45137 "gram.c" + break; + + case 2019: /* func_expr_windowless: func_expr_common_subexpr */ +#line 14019 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 45143 "gram.c" + break; + + case 2020: /* func_expr_common_subexpr: COLLATION FOR '(' a_expr ')' */ +#line 14027 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("pg_collation_for"), + list_make1((yyvsp[-1].node)), + COERCE_SQL_SYNTAX, + (yylsp[-4])); + } +#line 45154 "gram.c" + break; + + case 2021: /* func_expr_common_subexpr: CURRENT_DATE */ +#line 14034 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_DATE, -1, (yylsp[0])); + } +#line 45162 "gram.c" + break; + + case 2022: /* func_expr_common_subexpr: CURRENT_TIME */ +#line 14038 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIME, -1, (yylsp[0])); + } +#line 45170 "gram.c" + break; + + case 2023: /* func_expr_common_subexpr: CURRENT_TIME '(' Iconst ')' */ +#line 14042 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIME_N, (yyvsp[-1].ival), (yylsp[-3])); + } +#line 45178 "gram.c" + break; + + case 2024: /* func_expr_common_subexpr: CURRENT_TIMESTAMP */ +#line 14046 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIMESTAMP, -1, (yylsp[0])); + } +#line 45186 "gram.c" + break; + + case 2025: /* func_expr_common_subexpr: CURRENT_TIMESTAMP '(' Iconst ')' */ +#line 14050 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_TIMESTAMP_N, (yyvsp[-1].ival), (yylsp[-3])); + } +#line 45194 "gram.c" + break; + + case 2026: /* func_expr_common_subexpr: LOCALTIME */ +#line 14054 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIME, -1, (yylsp[0])); + } +#line 45202 "gram.c" + break; + + case 2027: /* func_expr_common_subexpr: LOCALTIME '(' Iconst ')' */ +#line 14058 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIME_N, (yyvsp[-1].ival), (yylsp[-3])); + } +#line 45210 "gram.c" + break; + + case 2028: /* func_expr_common_subexpr: LOCALTIMESTAMP */ +#line 14062 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIMESTAMP, -1, (yylsp[0])); + } +#line 45218 "gram.c" + break; + + case 2029: /* func_expr_common_subexpr: LOCALTIMESTAMP '(' Iconst ')' */ +#line 14066 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_LOCALTIMESTAMP_N, (yyvsp[-1].ival), (yylsp[-3])); + } +#line 45226 "gram.c" + break; + + case 2030: /* func_expr_common_subexpr: CURRENT_ROLE */ +#line 14070 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_ROLE, -1, (yylsp[0])); + } +#line 45234 "gram.c" + break; + + case 2031: /* func_expr_common_subexpr: CURRENT_USER */ +#line 14074 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_USER, -1, (yylsp[0])); + } +#line 45242 "gram.c" + break; + + case 2032: /* func_expr_common_subexpr: SESSION_USER */ +#line 14078 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_SESSION_USER, -1, (yylsp[0])); + } +#line 45250 "gram.c" + break; + + case 2033: /* func_expr_common_subexpr: USER */ +#line 14082 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_USER, -1, (yylsp[0])); + } +#line 45258 "gram.c" + break; + + case 2034: /* func_expr_common_subexpr: CURRENT_CATALOG */ +#line 14086 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_CATALOG, -1, (yylsp[0])); + } +#line 45266 "gram.c" + break; + + case 2035: /* func_expr_common_subexpr: CURRENT_SCHEMA */ +#line 14090 "gram.y" + { + (yyval.node) = makeSQLValueFunction(SVFOP_CURRENT_SCHEMA, -1, (yylsp[0])); + } +#line 45274 "gram.c" + break; + + case 2036: /* func_expr_common_subexpr: CAST '(' a_expr AS Typename ')' */ +#line 14094 "gram.y" + { (yyval.node) = makeTypeCast((yyvsp[-3].node), (yyvsp[-1].typnam), (yylsp[-5])); } +#line 45280 "gram.c" + break; + + case 2037: /* func_expr_common_subexpr: EXTRACT '(' extract_list ')' */ +#line 14096 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("extract"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-3])); + } +#line 45291 "gram.c" + break; + + case 2038: /* func_expr_common_subexpr: NORMALIZE '(' a_expr ')' */ +#line 14103 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("normalize"), + list_make1((yyvsp[-1].node)), + COERCE_SQL_SYNTAX, + (yylsp[-3])); + } +#line 45302 "gram.c" + break; + + case 2039: /* func_expr_common_subexpr: NORMALIZE '(' a_expr ',' unicode_normal_form ')' */ +#line 14110 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("normalize"), + list_make2((yyvsp[-3].node), makeStringConst((yyvsp[-1].str), (yylsp[-1]))), + COERCE_SQL_SYNTAX, + (yylsp[-5])); + } +#line 45313 "gram.c" + break; + + case 2040: /* func_expr_common_subexpr: OVERLAY '(' overlay_list ')' */ +#line 14117 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("overlay"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-3])); + } +#line 45324 "gram.c" + break; + + case 2041: /* func_expr_common_subexpr: OVERLAY '(' func_arg_list_opt ')' */ +#line 14124 "gram.y" + { + /* + * allow functions named overlay() to be called without + * special syntax + */ + (yyval.node) = (Node *) makeFuncCall(list_make1(makeString("overlay")), + (yyvsp[-1].list), + COERCE_EXPLICIT_CALL, + (yylsp[-3])); + } +#line 45339 "gram.c" + break; + + case 2042: /* func_expr_common_subexpr: POSITION '(' position_list ')' */ +#line 14135 "gram.y" + { + /* + * position(A in B) is converted to position(B, A) + * + * We deliberately don't offer a "plain syntax" option + * for position(), because the reversal of the arguments + * creates too much risk of confusion. + */ + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("position"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-3])); + } +#line 45357 "gram.c" + break; + + case 2043: /* func_expr_common_subexpr: SUBSTRING '(' substr_list ')' */ +#line 14149 "gram.y" + { + /* substring(A from B for C) is converted to + * substring(A, B, C) - thomas 2000-11-28 + */ + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("substring"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-3])); + } +#line 45371 "gram.c" + break; + + case 2044: /* func_expr_common_subexpr: SUBSTRING '(' func_arg_list_opt ')' */ +#line 14159 "gram.y" + { + /* + * allow functions named substring() to be called without + * special syntax + */ + (yyval.node) = (Node *) makeFuncCall(list_make1(makeString("substring")), + (yyvsp[-1].list), + COERCE_EXPLICIT_CALL, + (yylsp[-3])); + } +#line 45386 "gram.c" + break; + + case 2045: /* func_expr_common_subexpr: TREAT '(' a_expr AS Typename ')' */ +#line 14170 "gram.y" + { + /* TREAT(expr AS target) converts expr of a particular type to target, + * which is defined to be a subtype of the original expression. + * In SQL99, this is intended for use with structured UDTs, + * but let's make this a generally useful form allowing stronger + * coercions than are handled by implicit casting. + * + * Convert SystemTypeName() to SystemFuncName() even though + * at the moment they result in the same thing. + */ + (yyval.node) = (Node *) makeFuncCall(SystemFuncName(strVal(llast((yyvsp[-1].typnam)->names))), + list_make1((yyvsp[-3].node)), + COERCE_EXPLICIT_CALL, + (yylsp[-5])); + } +#line 45406 "gram.c" + break; + + case 2046: /* func_expr_common_subexpr: TRIM '(' BOTH trim_list ')' */ +#line 14186 "gram.y" + { + /* various trim expressions are defined in SQL + * - thomas 1997-07-19 + */ + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("btrim"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-4])); + } +#line 45420 "gram.c" + break; + + case 2047: /* func_expr_common_subexpr: TRIM '(' LEADING trim_list ')' */ +#line 14196 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("ltrim"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-4])); + } +#line 45431 "gram.c" + break; + + case 2048: /* func_expr_common_subexpr: TRIM '(' TRAILING trim_list ')' */ +#line 14203 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("rtrim"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-4])); + } +#line 45442 "gram.c" + break; + + case 2049: /* func_expr_common_subexpr: TRIM '(' trim_list ')' */ +#line 14210 "gram.y" + { + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("btrim"), + (yyvsp[-1].list), + COERCE_SQL_SYNTAX, + (yylsp[-3])); + } +#line 45453 "gram.c" + break; + + case 2050: /* func_expr_common_subexpr: NULLIF '(' a_expr ',' a_expr ')' */ +#line 14217 "gram.y" + { + (yyval.node) = (Node *) makeSimpleA_Expr(AEXPR_NULLIF, "=", (yyvsp[-3].node), (yyvsp[-1].node), (yylsp[-5])); + } +#line 45461 "gram.c" + break; + + case 2051: /* func_expr_common_subexpr: COALESCE '(' expr_list ')' */ +#line 14221 "gram.y" + { + CoalesceExpr *c = makeNode(CoalesceExpr); + c->args = (yyvsp[-1].list); + c->location = (yylsp[-3]); + (yyval.node) = (Node *)c; + } +#line 45472 "gram.c" + break; + + case 2052: /* func_expr_common_subexpr: GREATEST '(' expr_list ')' */ +#line 14228 "gram.y" + { + MinMaxExpr *v = makeNode(MinMaxExpr); + v->args = (yyvsp[-1].list); + v->op = IS_GREATEST; + v->location = (yylsp[-3]); + (yyval.node) = (Node *)v; + } +#line 45484 "gram.c" + break; + + case 2053: /* func_expr_common_subexpr: LEAST '(' expr_list ')' */ +#line 14236 "gram.y" + { + MinMaxExpr *v = makeNode(MinMaxExpr); + v->args = (yyvsp[-1].list); + v->op = IS_LEAST; + v->location = (yylsp[-3]); + (yyval.node) = (Node *)v; + } +#line 45496 "gram.c" + break; + + case 2054: /* func_expr_common_subexpr: XMLCONCAT '(' expr_list ')' */ +#line 14244 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLCONCAT, NULL, NIL, (yyvsp[-1].list), (yylsp[-3])); + } +#line 45504 "gram.c" + break; + + case 2055: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ')' */ +#line 14248 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[-1].str), NIL, NIL, (yylsp[-4])); + } +#line 45512 "gram.c" + break; + + case 2056: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ')' */ +#line 14252 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[-3].str), (yyvsp[-1].list), NIL, (yylsp[-6])); + } +#line 45520 "gram.c" + break; + + case 2057: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ',' expr_list ')' */ +#line 14256 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[-3].str), NIL, (yyvsp[-1].list), (yylsp[-6])); + } +#line 45528 "gram.c" + break; + + case 2058: /* func_expr_common_subexpr: XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ',' expr_list ')' */ +#line 14260 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLELEMENT, (yyvsp[-5].str), (yyvsp[-3].list), (yyvsp[-1].list), (yylsp[-8])); + } +#line 45536 "gram.c" + break; + + case 2059: /* func_expr_common_subexpr: XMLEXISTS '(' c_expr xmlexists_argument ')' */ +#line 14264 "gram.y" + { + /* xmlexists(A PASSING [BY REF] B [BY REF]) is + * converted to xmlexists(A, B)*/ + (yyval.node) = (Node *) makeFuncCall(SystemFuncName("xmlexists"), + list_make2((yyvsp[-2].node), (yyvsp[-1].node)), + COERCE_SQL_SYNTAX, + (yylsp[-4])); + } +#line 45549 "gram.c" + break; + + case 2060: /* func_expr_common_subexpr: XMLFOREST '(' xml_attribute_list ')' */ +#line 14273 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLFOREST, NULL, (yyvsp[-1].list), NIL, (yylsp[-3])); + } +#line 45557 "gram.c" + break; + + case 2061: /* func_expr_common_subexpr: XMLPARSE '(' document_or_content a_expr xml_whitespace_option ')' */ +#line 14277 "gram.y" + { + XmlExpr *x = (XmlExpr *) + makeXmlExpr(IS_XMLPARSE, NULL, NIL, + list_make2((yyvsp[-2].node), makeBoolAConst((yyvsp[-1].boolean), -1)), + (yylsp[-5])); + x->xmloption = (yyvsp[-3].ival); + (yyval.node) = (Node *)x; + } +#line 45570 "gram.c" + break; + + case 2062: /* func_expr_common_subexpr: XMLPI '(' NAME_P ColLabel ')' */ +#line 14286 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLPI, (yyvsp[-1].str), NULL, NIL, (yylsp[-4])); + } +#line 45578 "gram.c" + break; + + case 2063: /* func_expr_common_subexpr: XMLPI '(' NAME_P ColLabel ',' a_expr ')' */ +#line 14290 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLPI, (yyvsp[-3].str), NULL, list_make1((yyvsp[-1].node)), (yylsp[-6])); + } +#line 45586 "gram.c" + break; + + case 2064: /* func_expr_common_subexpr: XMLROOT '(' a_expr ',' xml_root_version opt_xml_root_standalone ')' */ +#line 14294 "gram.y" + { + (yyval.node) = makeXmlExpr(IS_XMLROOT, NULL, NIL, + list_make3((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[-1].node)), (yylsp[-6])); + } +#line 45595 "gram.c" + break; + + case 2065: /* func_expr_common_subexpr: XMLSERIALIZE '(' document_or_content a_expr AS SimpleTypename ')' */ +#line 14299 "gram.y" + { + XmlSerialize *n = makeNode(XmlSerialize); + n->xmloption = (yyvsp[-4].ival); + n->expr = (yyvsp[-3].node); + n->typeName = (yyvsp[-1].typnam); + n->location = (yylsp[-6]); + (yyval.node) = (Node *)n; + } +#line 45608 "gram.c" + break; + + case 2066: /* xml_root_version: VERSION_P a_expr */ +#line 14313 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 45614 "gram.c" + break; + + case 2067: /* xml_root_version: VERSION_P NO VALUE_P */ +#line 14315 "gram.y" + { (yyval.node) = makeNullAConst(-1); } +#line 45620 "gram.c" + break; + + case 2068: /* opt_xml_root_standalone: ',' STANDALONE_P YES_P */ +#line 14319 "gram.y" + { (yyval.node) = makeIntConst(XML_STANDALONE_YES, -1); } +#line 45626 "gram.c" + break; + + case 2069: /* opt_xml_root_standalone: ',' STANDALONE_P NO */ +#line 14321 "gram.y" + { (yyval.node) = makeIntConst(XML_STANDALONE_NO, -1); } +#line 45632 "gram.c" + break; + + case 2070: /* opt_xml_root_standalone: ',' STANDALONE_P NO VALUE_P */ +#line 14323 "gram.y" + { (yyval.node) = makeIntConst(XML_STANDALONE_NO_VALUE, -1); } +#line 45638 "gram.c" + break; + + case 2071: /* opt_xml_root_standalone: %empty */ +#line 14325 "gram.y" + { (yyval.node) = makeIntConst(XML_STANDALONE_OMITTED, -1); } +#line 45644 "gram.c" + break; + + case 2072: /* xml_attributes: XMLATTRIBUTES '(' xml_attribute_list ')' */ +#line 14328 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 45650 "gram.c" + break; + + case 2073: /* xml_attribute_list: xml_attribute_el */ +#line 14331 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].target)); } +#line 45656 "gram.c" + break; + + case 2074: /* xml_attribute_list: xml_attribute_list ',' xml_attribute_el */ +#line 14332 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].target)); } +#line 45662 "gram.c" + break; + + case 2075: /* xml_attribute_el: a_expr AS ColLabel */ +#line 14336 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = (yyvsp[0].str); + (yyval.target)->indirection = NIL; + (yyval.target)->val = (Node *) (yyvsp[-2].node); + (yyval.target)->location = (yylsp[-2]); + } +#line 45674 "gram.c" + break; + + case 2076: /* xml_attribute_el: a_expr */ +#line 14344 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = NULL; + (yyval.target)->indirection = NIL; + (yyval.target)->val = (Node *) (yyvsp[0].node); + (yyval.target)->location = (yylsp[0]); + } +#line 45686 "gram.c" + break; + + case 2077: /* document_or_content: DOCUMENT_P */ +#line 14353 "gram.y" + { (yyval.ival) = XMLOPTION_DOCUMENT; } +#line 45692 "gram.c" + break; + + case 2078: /* document_or_content: CONTENT_P */ +#line 14354 "gram.y" + { (yyval.ival) = XMLOPTION_CONTENT; } +#line 45698 "gram.c" + break; + + case 2079: /* xml_whitespace_option: PRESERVE WHITESPACE_P */ +#line 14357 "gram.y" + { (yyval.boolean) = true; } +#line 45704 "gram.c" + break; + + case 2080: /* xml_whitespace_option: STRIP_P WHITESPACE_P */ +#line 14358 "gram.y" + { (yyval.boolean) = false; } +#line 45710 "gram.c" + break; + + case 2081: /* xml_whitespace_option: %empty */ +#line 14359 "gram.y" + { (yyval.boolean) = false; } +#line 45716 "gram.c" + break; + + case 2082: /* xmlexists_argument: PASSING c_expr */ +#line 14365 "gram.y" + { + (yyval.node) = (yyvsp[0].node); + } +#line 45724 "gram.c" + break; + + case 2083: /* xmlexists_argument: PASSING c_expr xml_passing_mech */ +#line 14369 "gram.y" + { + (yyval.node) = (yyvsp[-1].node); + } +#line 45732 "gram.c" + break; + + case 2084: /* xmlexists_argument: PASSING xml_passing_mech c_expr */ +#line 14373 "gram.y" + { + (yyval.node) = (yyvsp[0].node); + } +#line 45740 "gram.c" + break; + + case 2085: /* xmlexists_argument: PASSING xml_passing_mech c_expr xml_passing_mech */ +#line 14377 "gram.y" + { + (yyval.node) = (yyvsp[-1].node); + } +#line 45748 "gram.c" + break; + + case 2088: /* within_group_clause: WITHIN GROUP_P '(' sort_clause ')' */ +#line 14392 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 45754 "gram.c" + break; + + case 2089: /* within_group_clause: %empty */ +#line 14393 "gram.y" + { (yyval.list) = NIL; } +#line 45760 "gram.c" + break; + + case 2090: /* filter_clause: FILTER '(' WHERE a_expr ')' */ +#line 14397 "gram.y" + { (yyval.node) = (yyvsp[-1].node); } +#line 45766 "gram.c" + break; + + case 2091: /* filter_clause: %empty */ +#line 14398 "gram.y" + { (yyval.node) = NULL; } +#line 45772 "gram.c" + break; + + case 2092: /* window_clause: WINDOW window_definition_list */ +#line 14406 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 45778 "gram.c" + break; + + case 2093: /* window_clause: %empty */ +#line 14407 "gram.y" + { (yyval.list) = NIL; } +#line 45784 "gram.c" + break; + + case 2094: /* window_definition_list: window_definition */ +#line 14411 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].windef)); } +#line 45790 "gram.c" + break; + + case 2095: /* window_definition_list: window_definition_list ',' window_definition */ +#line 14413 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].windef)); } +#line 45796 "gram.c" + break; + + case 2096: /* window_definition: ColId AS window_specification */ +#line 14418 "gram.y" + { + WindowDef *n = (yyvsp[0].windef); + n->name = (yyvsp[-2].str); + (yyval.windef) = n; + } +#line 45806 "gram.c" + break; + + case 2097: /* over_clause: OVER window_specification */ +#line 14426 "gram.y" + { (yyval.windef) = (yyvsp[0].windef); } +#line 45812 "gram.c" + break; + + case 2098: /* over_clause: OVER ColId */ +#line 14428 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->name = (yyvsp[0].str); + n->refname = NULL; + n->partitionClause = NIL; + n->orderClause = NIL; + n->frameOptions = FRAMEOPTION_DEFAULTS; + n->startOffset = NULL; + n->endOffset = NULL; + n->location = (yylsp[0]); + (yyval.windef) = n; + } +#line 45829 "gram.c" + break; + + case 2099: /* over_clause: %empty */ +#line 14441 "gram.y" + { (yyval.windef) = NULL; } +#line 45835 "gram.c" + break; + + case 2100: /* window_specification: '(' opt_existing_window_name opt_partition_clause opt_sort_clause opt_frame_clause ')' */ +#line 14446 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->name = NULL; + n->refname = (yyvsp[-4].str); + n->partitionClause = (yyvsp[-3].list); + n->orderClause = (yyvsp[-2].list); + /* copy relevant fields of opt_frame_clause */ + n->frameOptions = (yyvsp[-1].windef)->frameOptions; + n->startOffset = (yyvsp[-1].windef)->startOffset; + n->endOffset = (yyvsp[-1].windef)->endOffset; + n->location = (yylsp[-5]); + (yyval.windef) = n; + } +#line 45853 "gram.c" + break; + + case 2101: /* opt_existing_window_name: ColId */ +#line 14471 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 45859 "gram.c" + break; + + case 2102: /* opt_existing_window_name: %empty */ +#line 14472 "gram.y" + { (yyval.str) = NULL; } +#line 45865 "gram.c" + break; + + case 2103: /* opt_partition_clause: PARTITION BY expr_list */ +#line 14475 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 45871 "gram.c" + break; + + case 2104: /* opt_partition_clause: %empty */ +#line 14476 "gram.y" + { (yyval.list) = NIL; } +#line 45877 "gram.c" + break; + + case 2105: /* opt_frame_clause: RANGE frame_extent opt_window_exclusion_clause */ +#line 14485 "gram.y" + { + WindowDef *n = (yyvsp[-1].windef); + n->frameOptions |= FRAMEOPTION_NONDEFAULT | FRAMEOPTION_RANGE; + n->frameOptions |= (yyvsp[0].ival); + (yyval.windef) = n; + } +#line 45888 "gram.c" + break; + + case 2106: /* opt_frame_clause: ROWS frame_extent opt_window_exclusion_clause */ +#line 14492 "gram.y" + { + WindowDef *n = (yyvsp[-1].windef); + n->frameOptions |= FRAMEOPTION_NONDEFAULT | FRAMEOPTION_ROWS; + n->frameOptions |= (yyvsp[0].ival); + (yyval.windef) = n; + } +#line 45899 "gram.c" + break; + + case 2107: /* opt_frame_clause: GROUPS frame_extent opt_window_exclusion_clause */ +#line 14499 "gram.y" + { + WindowDef *n = (yyvsp[-1].windef); + n->frameOptions |= FRAMEOPTION_NONDEFAULT | FRAMEOPTION_GROUPS; + n->frameOptions |= (yyvsp[0].ival); + (yyval.windef) = n; + } +#line 45910 "gram.c" + break; + + case 2108: /* opt_frame_clause: %empty */ +#line 14506 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->frameOptions = FRAMEOPTION_DEFAULTS; + n->startOffset = NULL; + n->endOffset = NULL; + (yyval.windef) = n; + } +#line 45922 "gram.c" + break; + + case 2109: /* frame_extent: frame_bound */ +#line 14516 "gram.y" + { + WindowDef *n = (yyvsp[0].windef); + /* reject invalid cases */ + if (n->frameOptions & FRAMEOPTION_START_UNBOUNDED_FOLLOWING) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("frame start cannot be UNBOUNDED FOLLOWING"), + parser_errposition((yylsp[0])))); + if (n->frameOptions & FRAMEOPTION_START_OFFSET_FOLLOWING) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("frame starting from following row cannot end with current row"), + parser_errposition((yylsp[0])))); + n->frameOptions |= FRAMEOPTION_END_CURRENT_ROW; + (yyval.windef) = n; + } +#line 45943 "gram.c" + break; + + case 2110: /* frame_extent: BETWEEN frame_bound AND frame_bound */ +#line 14533 "gram.y" + { + WindowDef *n1 = (yyvsp[-2].windef); + WindowDef *n2 = (yyvsp[0].windef); + /* form merged options */ + int frameOptions = n1->frameOptions; + /* shift converts START_ options to END_ options */ + frameOptions |= n2->frameOptions << 1; + frameOptions |= FRAMEOPTION_BETWEEN; + /* reject invalid cases */ + if (frameOptions & FRAMEOPTION_START_UNBOUNDED_FOLLOWING) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("frame start cannot be UNBOUNDED FOLLOWING"), + parser_errposition((yylsp[-2])))); + if (frameOptions & FRAMEOPTION_END_UNBOUNDED_PRECEDING) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("frame end cannot be UNBOUNDED PRECEDING"), + parser_errposition((yylsp[0])))); + if ((frameOptions & FRAMEOPTION_START_CURRENT_ROW) && + (frameOptions & FRAMEOPTION_END_OFFSET_PRECEDING)) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("frame starting from current row cannot have preceding rows"), + parser_errposition((yylsp[0])))); + if ((frameOptions & FRAMEOPTION_START_OFFSET_FOLLOWING) && + (frameOptions & (FRAMEOPTION_END_OFFSET_PRECEDING | + FRAMEOPTION_END_CURRENT_ROW))) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("frame starting from following row cannot have preceding rows"), + parser_errposition((yylsp[0])))); + n1->frameOptions = frameOptions; + n1->endOffset = n2->startOffset; + (yyval.windef) = n1; + } +#line 45984 "gram.c" + break; + + case 2111: /* frame_bound: UNBOUNDED PRECEDING */ +#line 14578 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->frameOptions = FRAMEOPTION_START_UNBOUNDED_PRECEDING; + n->startOffset = NULL; + n->endOffset = NULL; + (yyval.windef) = n; + } +#line 45996 "gram.c" + break; + + case 2112: /* frame_bound: UNBOUNDED FOLLOWING */ +#line 14586 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->frameOptions = FRAMEOPTION_START_UNBOUNDED_FOLLOWING; + n->startOffset = NULL; + n->endOffset = NULL; + (yyval.windef) = n; + } +#line 46008 "gram.c" + break; + + case 2113: /* frame_bound: CURRENT_P ROW */ +#line 14594 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->frameOptions = FRAMEOPTION_START_CURRENT_ROW; + n->startOffset = NULL; + n->endOffset = NULL; + (yyval.windef) = n; + } +#line 46020 "gram.c" + break; + + case 2114: /* frame_bound: a_expr PRECEDING */ +#line 14602 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->frameOptions = FRAMEOPTION_START_OFFSET_PRECEDING; + n->startOffset = (yyvsp[-1].node); + n->endOffset = NULL; + (yyval.windef) = n; + } +#line 46032 "gram.c" + break; + + case 2115: /* frame_bound: a_expr FOLLOWING */ +#line 14610 "gram.y" + { + WindowDef *n = makeNode(WindowDef); + n->frameOptions = FRAMEOPTION_START_OFFSET_FOLLOWING; + n->startOffset = (yyvsp[-1].node); + n->endOffset = NULL; + (yyval.windef) = n; + } +#line 46044 "gram.c" + break; + + case 2116: /* opt_window_exclusion_clause: EXCLUDE CURRENT_P ROW */ +#line 14620 "gram.y" + { (yyval.ival) = FRAMEOPTION_EXCLUDE_CURRENT_ROW; } +#line 46050 "gram.c" + break; + + case 2117: /* opt_window_exclusion_clause: EXCLUDE GROUP_P */ +#line 14621 "gram.y" + { (yyval.ival) = FRAMEOPTION_EXCLUDE_GROUP; } +#line 46056 "gram.c" + break; + + case 2118: /* opt_window_exclusion_clause: EXCLUDE TIES */ +#line 14622 "gram.y" + { (yyval.ival) = FRAMEOPTION_EXCLUDE_TIES; } +#line 46062 "gram.c" + break; + + case 2119: /* opt_window_exclusion_clause: EXCLUDE NO OTHERS */ +#line 14623 "gram.y" + { (yyval.ival) = 0; } +#line 46068 "gram.c" + break; + + case 2120: /* opt_window_exclusion_clause: %empty */ +#line 14624 "gram.y" + { (yyval.ival) = 0; } +#line 46074 "gram.c" + break; + + case 2121: /* row: ROW '(' expr_list ')' */ +#line 14638 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 46080 "gram.c" + break; + + case 2122: /* row: ROW '(' ')' */ +#line 14639 "gram.y" + { (yyval.list) = NIL; } +#line 46086 "gram.c" + break; + + case 2123: /* row: '(' expr_list ',' a_expr ')' */ +#line 14640 "gram.y" + { (yyval.list) = lappend((yyvsp[-3].list), (yyvsp[-1].node)); } +#line 46092 "gram.c" + break; + + case 2124: /* explicit_row: ROW '(' expr_list ')' */ +#line 14643 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 46098 "gram.c" + break; + + case 2125: /* explicit_row: ROW '(' ')' */ +#line 14644 "gram.y" + { (yyval.list) = NIL; } +#line 46104 "gram.c" + break; + + case 2126: /* implicit_row: '(' expr_list ',' a_expr ')' */ +#line 14647 "gram.y" + { (yyval.list) = lappend((yyvsp[-3].list), (yyvsp[-1].node)); } +#line 46110 "gram.c" + break; + + case 2127: /* sub_type: ANY */ +#line 14650 "gram.y" + { (yyval.ival) = ANY_SUBLINK; } +#line 46116 "gram.c" + break; + + case 2128: /* sub_type: SOME */ +#line 14651 "gram.y" + { (yyval.ival) = ANY_SUBLINK; } +#line 46122 "gram.c" + break; + + case 2129: /* sub_type: ALL */ +#line 14652 "gram.y" + { (yyval.ival) = ALL_SUBLINK; } +#line 46128 "gram.c" + break; + + case 2130: /* all_Op: Op */ +#line 14655 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 46134 "gram.c" + break; + + case 2131: /* all_Op: MathOp */ +#line 14656 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 46140 "gram.c" + break; + + case 2132: /* MathOp: '+' */ +#line 14659 "gram.y" + { (yyval.str) = "+"; } +#line 46146 "gram.c" + break; + + case 2133: /* MathOp: '-' */ +#line 14660 "gram.y" + { (yyval.str) = "-"; } +#line 46152 "gram.c" + break; + + case 2134: /* MathOp: '*' */ +#line 14661 "gram.y" + { (yyval.str) = "*"; } +#line 46158 "gram.c" + break; + + case 2135: /* MathOp: '/' */ +#line 14662 "gram.y" + { (yyval.str) = "/"; } +#line 46164 "gram.c" + break; + + case 2136: /* MathOp: '%' */ +#line 14663 "gram.y" + { (yyval.str) = "%"; } +#line 46170 "gram.c" + break; + + case 2137: /* MathOp: '^' */ +#line 14664 "gram.y" + { (yyval.str) = "^"; } +#line 46176 "gram.c" + break; + + case 2138: /* MathOp: '<' */ +#line 14665 "gram.y" + { (yyval.str) = "<"; } +#line 46182 "gram.c" + break; + + case 2139: /* MathOp: '>' */ +#line 14666 "gram.y" + { (yyval.str) = ">"; } +#line 46188 "gram.c" + break; + + case 2140: /* MathOp: '=' */ +#line 14667 "gram.y" + { (yyval.str) = "="; } +#line 46194 "gram.c" + break; + + case 2141: /* MathOp: LESS_EQUALS */ +#line 14668 "gram.y" + { (yyval.str) = "<="; } +#line 46200 "gram.c" + break; + + case 2142: /* MathOp: GREATER_EQUALS */ +#line 14669 "gram.y" + { (yyval.str) = ">="; } +#line 46206 "gram.c" + break; + + case 2143: /* MathOp: NOT_EQUALS */ +#line 14670 "gram.y" + { (yyval.str) = "<>"; } +#line 46212 "gram.c" + break; + + case 2144: /* qual_Op: Op */ +#line 14674 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 46218 "gram.c" + break; + + case 2145: /* qual_Op: OPERATOR '(' any_operator ')' */ +#line 14676 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 46224 "gram.c" + break; + + case 2146: /* qual_all_Op: all_Op */ +#line 14681 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 46230 "gram.c" + break; + + case 2147: /* qual_all_Op: OPERATOR '(' any_operator ')' */ +#line 14683 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 46236 "gram.c" + break; + + case 2148: /* subquery_Op: all_Op */ +#line 14688 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 46242 "gram.c" + break; + + case 2149: /* subquery_Op: OPERATOR '(' any_operator ')' */ +#line 14690 "gram.y" + { (yyval.list) = (yyvsp[-1].list); } +#line 46248 "gram.c" + break; + + case 2150: /* subquery_Op: LIKE */ +#line 14692 "gram.y" + { (yyval.list) = list_make1(makeString("~~")); } +#line 46254 "gram.c" + break; + + case 2151: /* subquery_Op: NOT_LA LIKE */ +#line 14694 "gram.y" + { (yyval.list) = list_make1(makeString("!~~")); } +#line 46260 "gram.c" + break; + + case 2152: /* subquery_Op: ILIKE */ +#line 14696 "gram.y" + { (yyval.list) = list_make1(makeString("~~*")); } +#line 46266 "gram.c" + break; + + case 2153: /* subquery_Op: NOT_LA ILIKE */ +#line 14698 "gram.y" + { (yyval.list) = list_make1(makeString("!~~*")); } +#line 46272 "gram.c" + break; + + case 2154: /* expr_list: a_expr */ +#line 14710 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].node)); + } +#line 46280 "gram.c" + break; + + case 2155: /* expr_list: expr_list ',' a_expr */ +#line 14714 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); + } +#line 46288 "gram.c" + break; + + case 2156: /* func_arg_list: func_arg_expr */ +#line 14721 "gram.y" + { + (yyval.list) = list_make1((yyvsp[0].node)); + } +#line 46296 "gram.c" + break; + + case 2157: /* func_arg_list: func_arg_list ',' func_arg_expr */ +#line 14725 "gram.y" + { + (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); + } +#line 46304 "gram.c" + break; + + case 2158: /* func_arg_expr: a_expr */ +#line 14731 "gram.y" + { + (yyval.node) = (yyvsp[0].node); + } +#line 46312 "gram.c" + break; + + case 2159: /* func_arg_expr: param_name COLON_EQUALS a_expr */ +#line 14735 "gram.y" + { + NamedArgExpr *na = makeNode(NamedArgExpr); + na->name = (yyvsp[-2].str); + na->arg = (Expr *) (yyvsp[0].node); + na->argnumber = -1; /* until determined */ + na->location = (yylsp[-2]); + (yyval.node) = (Node *) na; + } +#line 46325 "gram.c" + break; + + case 2160: /* func_arg_expr: param_name EQUALS_GREATER a_expr */ +#line 14744 "gram.y" + { + NamedArgExpr *na = makeNode(NamedArgExpr); + na->name = (yyvsp[-2].str); + na->arg = (Expr *) (yyvsp[0].node); + na->argnumber = -1; /* until determined */ + na->location = (yylsp[-2]); + (yyval.node) = (Node *) na; + } +#line 46338 "gram.c" + break; + + case 2161: /* func_arg_list_opt: func_arg_list */ +#line 14754 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 46344 "gram.c" + break; + + case 2162: /* func_arg_list_opt: %empty */ +#line 14755 "gram.y" + { (yyval.list) = NIL; } +#line 46350 "gram.c" + break; + + case 2163: /* type_list: Typename */ +#line 14758 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].typnam)); } +#line 46356 "gram.c" + break; + + case 2164: /* type_list: type_list ',' Typename */ +#line 14759 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].typnam)); } +#line 46362 "gram.c" + break; + + case 2165: /* array_expr: '[' expr_list ']' */ +#line 14763 "gram.y" + { + (yyval.node) = makeAArrayExpr((yyvsp[-1].list), (yylsp[-2])); + } +#line 46370 "gram.c" + break; + + case 2166: /* array_expr: '[' array_expr_list ']' */ +#line 14767 "gram.y" + { + (yyval.node) = makeAArrayExpr((yyvsp[-1].list), (yylsp[-2])); + } +#line 46378 "gram.c" + break; + + case 2167: /* array_expr: '[' ']' */ +#line 14771 "gram.y" + { + (yyval.node) = makeAArrayExpr(NIL, (yylsp[-1])); + } +#line 46386 "gram.c" + break; + + case 2168: /* array_expr_list: array_expr */ +#line 14776 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 46392 "gram.c" + break; + + case 2169: /* array_expr_list: array_expr_list ',' array_expr */ +#line 14777 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } +#line 46398 "gram.c" + break; + + case 2170: /* extract_list: extract_arg FROM a_expr */ +#line 14783 "gram.y" + { + (yyval.list) = list_make2(makeStringConst((yyvsp[-2].str), (yylsp[-2])), (yyvsp[0].node)); + } +#line 46406 "gram.c" + break; + + case 2171: /* extract_arg: IDENT */ +#line 14792 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 46412 "gram.c" + break; + + case 2172: /* extract_arg: YEAR_P */ +#line 14793 "gram.y" + { (yyval.str) = "year"; } +#line 46418 "gram.c" + break; + + case 2173: /* extract_arg: MONTH_P */ +#line 14794 "gram.y" + { (yyval.str) = "month"; } +#line 46424 "gram.c" + break; + + case 2174: /* extract_arg: DAY_P */ +#line 14795 "gram.y" + { (yyval.str) = "day"; } +#line 46430 "gram.c" + break; + + case 2175: /* extract_arg: HOUR_P */ +#line 14796 "gram.y" + { (yyval.str) = "hour"; } +#line 46436 "gram.c" + break; + + case 2176: /* extract_arg: MINUTE_P */ +#line 14797 "gram.y" + { (yyval.str) = "minute"; } +#line 46442 "gram.c" + break; + + case 2177: /* extract_arg: SECOND_P */ +#line 14798 "gram.y" + { (yyval.str) = "second"; } +#line 46448 "gram.c" + break; + + case 2178: /* extract_arg: Sconst */ +#line 14799 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 46454 "gram.c" + break; + + case 2179: /* unicode_normal_form: NFC */ +#line 14803 "gram.y" + { (yyval.str) = "NFC"; } +#line 46460 "gram.c" + break; + + case 2180: /* unicode_normal_form: NFD */ +#line 14804 "gram.y" + { (yyval.str) = "NFD"; } +#line 46466 "gram.c" + break; + + case 2181: /* unicode_normal_form: NFKC */ +#line 14805 "gram.y" + { (yyval.str) = "NFKC"; } +#line 46472 "gram.c" + break; + + case 2182: /* unicode_normal_form: NFKD */ +#line 14806 "gram.y" + { (yyval.str) = "NFKD"; } +#line 46478 "gram.c" + break; + + case 2183: /* overlay_list: a_expr PLACING a_expr FROM a_expr FOR a_expr */ +#line 14812 "gram.y" + { + /* overlay(A PLACING B FROM C FOR D) is converted to overlay(A, B, C, D) */ + (yyval.list) = list_make4((yyvsp[-6].node), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); + } +#line 46487 "gram.c" + break; + + case 2184: /* overlay_list: a_expr PLACING a_expr FROM a_expr */ +#line 14817 "gram.y" + { + /* overlay(A PLACING B FROM C) is converted to overlay(A, B, C) */ + (yyval.list) = list_make3((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); + } +#line 46496 "gram.c" + break; + + case 2185: /* position_list: b_expr IN_P b_expr */ +#line 14825 "gram.y" + { (yyval.list) = list_make2((yyvsp[0].node), (yyvsp[-2].node)); } +#line 46502 "gram.c" + break; + + case 2186: /* substr_list: a_expr FROM a_expr FOR a_expr */ +#line 14847 "gram.y" + { + (yyval.list) = list_make3((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); + } +#line 46510 "gram.c" + break; + + case 2187: /* substr_list: a_expr FOR a_expr FROM a_expr */ +#line 14851 "gram.y" + { + /* not legal per SQL, but might as well allow it */ + (yyval.list) = list_make3((yyvsp[-4].node), (yyvsp[0].node), (yyvsp[-2].node)); + } +#line 46519 "gram.c" + break; + + case 2188: /* substr_list: a_expr FROM a_expr */ +#line 14856 "gram.y" + { + /* + * Because we aren't restricting data types here, this + * syntax can end up resolving to textregexsubstr(). + * We've historically allowed that to happen, so continue + * to accept it. However, ruleutils.c will reverse-list + * such a call in regular function call syntax. + */ + (yyval.list) = list_make2((yyvsp[-2].node), (yyvsp[0].node)); + } +#line 46534 "gram.c" + break; + + case 2189: /* substr_list: a_expr FOR a_expr */ +#line 14867 "gram.y" + { + /* not legal per SQL */ + + /* + * Since there are no cases where this syntax allows + * a textual FOR value, we forcibly cast the argument + * to int4. The possible matches in pg_proc are + * substring(text,int4) and substring(text,text), + * and we don't want the parser to choose the latter, + * which it is likely to do if the second argument + * is unknown or doesn't have an implicit cast to int4. + */ + (yyval.list) = list_make3((yyvsp[-2].node), makeIntConst(1, -1), + makeTypeCast((yyvsp[0].node), + SystemTypeName("int4"), -1)); + } +#line 46555 "gram.c" + break; + + case 2190: /* substr_list: a_expr SIMILAR a_expr ESCAPE a_expr */ +#line 14884 "gram.y" + { + (yyval.list) = list_make3((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); + } +#line 46563 "gram.c" + break; + + case 2191: /* trim_list: a_expr FROM expr_list */ +#line 14889 "gram.y" + { (yyval.list) = lappend((yyvsp[0].list), (yyvsp[-2].node)); } +#line 46569 "gram.c" + break; + + case 2192: /* trim_list: FROM expr_list */ +#line 14890 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 46575 "gram.c" + break; + + case 2193: /* trim_list: expr_list */ +#line 14891 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 46581 "gram.c" + break; + + case 2194: /* in_expr: select_with_parens */ +#line 14895 "gram.y" + { + SubLink *n = makeNode(SubLink); + n->subselect = (yyvsp[0].node); + /* other fields will be filled later */ + (yyval.node) = (Node *)n; + } +#line 46592 "gram.c" + break; + + case 2195: /* in_expr: '(' expr_list ')' */ +#line 14901 "gram.y" + { (yyval.node) = (Node *)(yyvsp[-1].list); } +#line 46598 "gram.c" + break; + + case 2196: /* case_expr: CASE case_arg when_clause_list case_default END_P */ +#line 14912 "gram.y" + { + CaseExpr *c = makeNode(CaseExpr); + c->casetype = InvalidOid; /* not analyzed yet */ + c->arg = (Expr *) (yyvsp[-3].node); + c->args = (yyvsp[-2].list); + c->defresult = (Expr *) (yyvsp[-1].node); + c->location = (yylsp[-4]); + (yyval.node) = (Node *)c; + } +#line 46612 "gram.c" + break; + + case 2197: /* when_clause_list: when_clause */ +#line 14925 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 46618 "gram.c" + break; + + case 2198: /* when_clause_list: when_clause_list when_clause */ +#line 14926 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } +#line 46624 "gram.c" + break; + + case 2199: /* when_clause: WHEN a_expr THEN a_expr */ +#line 14931 "gram.y" + { + CaseWhen *w = makeNode(CaseWhen); + w->expr = (Expr *) (yyvsp[-2].node); + w->result = (Expr *) (yyvsp[0].node); + w->location = (yylsp[-3]); + (yyval.node) = (Node *)w; + } +#line 46636 "gram.c" + break; + + case 2200: /* case_default: ELSE a_expr */ +#line 14941 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 46642 "gram.c" + break; + + case 2201: /* case_default: %empty */ +#line 14942 "gram.y" + { (yyval.node) = NULL; } +#line 46648 "gram.c" + break; + + case 2202: /* case_arg: a_expr */ +#line 14945 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 46654 "gram.c" + break; + + case 2203: /* case_arg: %empty */ +#line 14946 "gram.y" + { (yyval.node) = NULL; } +#line 46660 "gram.c" + break; + + case 2204: /* columnref: ColId */ +#line 14950 "gram.y" + { + (yyval.node) = makeColumnRef((yyvsp[0].str), NIL, (yylsp[0]), yyscanner); + } +#line 46668 "gram.c" + break; + + case 2205: /* columnref: ColId indirection */ +#line 14954 "gram.y" + { + (yyval.node) = makeColumnRef((yyvsp[-1].str), (yyvsp[0].list), (yylsp[-1]), yyscanner); + } +#line 46676 "gram.c" + break; + + case 2206: /* indirection_el: '.' attr_name */ +#line 14961 "gram.y" + { + (yyval.node) = (Node *) makeString((yyvsp[0].str)); + } +#line 46684 "gram.c" + break; + + case 2207: /* indirection_el: '.' '*' */ +#line 14965 "gram.y" + { + (yyval.node) = (Node *) makeNode(A_Star); + } +#line 46692 "gram.c" + break; + + case 2208: /* indirection_el: '[' a_expr ']' */ +#line 14969 "gram.y" + { + A_Indices *ai = makeNode(A_Indices); + ai->is_slice = false; + ai->lidx = NULL; + ai->uidx = (yyvsp[-1].node); + (yyval.node) = (Node *) ai; + } +#line 46704 "gram.c" + break; + + case 2209: /* indirection_el: '[' opt_slice_bound ':' opt_slice_bound ']' */ +#line 14977 "gram.y" + { + A_Indices *ai = makeNode(A_Indices); + ai->is_slice = true; + ai->lidx = (yyvsp[-3].node); + ai->uidx = (yyvsp[-1].node); + (yyval.node) = (Node *) ai; + } +#line 46716 "gram.c" + break; + + case 2210: /* opt_slice_bound: a_expr */ +#line 14987 "gram.y" + { (yyval.node) = (yyvsp[0].node); } +#line 46722 "gram.c" + break; + + case 2211: /* opt_slice_bound: %empty */ +#line 14988 "gram.y" + { (yyval.node) = NULL; } +#line 46728 "gram.c" + break; + + case 2212: /* indirection: indirection_el */ +#line 14992 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].node)); } +#line 46734 "gram.c" + break; + + case 2213: /* indirection: indirection indirection_el */ +#line 14993 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } +#line 46740 "gram.c" + break; + + case 2214: /* opt_indirection: %empty */ +#line 14997 "gram.y" + { (yyval.list) = NIL; } +#line 46746 "gram.c" + break; + + case 2215: /* opt_indirection: opt_indirection indirection_el */ +#line 14998 "gram.y" + { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } +#line 46752 "gram.c" + break; + + case 2218: /* opt_target_list: target_list */ +#line 15012 "gram.y" + { (yyval.list) = (yyvsp[0].list); } +#line 46758 "gram.c" + break; + + case 2219: /* opt_target_list: %empty */ +#line 15013 "gram.y" + { (yyval.list) = NIL; } +#line 46764 "gram.c" + break; + + case 2220: /* target_list: target_el */ +#line 15017 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].target)); } +#line 46770 "gram.c" + break; + + case 2221: /* target_list: target_list ',' target_el */ +#line 15018 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].target)); } +#line 46776 "gram.c" + break; + + case 2222: /* target_el: a_expr AS ColLabel */ +#line 15022 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = (yyvsp[0].str); + (yyval.target)->indirection = NIL; + (yyval.target)->val = (Node *)(yyvsp[-2].node); + (yyval.target)->location = (yylsp[-2]); + } +#line 46788 "gram.c" + break; + + case 2223: /* target_el: a_expr BareColLabel */ +#line 15030 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = (yyvsp[0].str); + (yyval.target)->indirection = NIL; + (yyval.target)->val = (Node *)(yyvsp[-1].node); + (yyval.target)->location = (yylsp[-1]); + } +#line 46800 "gram.c" + break; + + case 2224: /* target_el: a_expr */ +#line 15038 "gram.y" + { + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = NULL; + (yyval.target)->indirection = NIL; + (yyval.target)->val = (Node *)(yyvsp[0].node); + (yyval.target)->location = (yylsp[0]); + } +#line 46812 "gram.c" + break; + + case 2225: /* target_el: '*' */ +#line 15046 "gram.y" + { + ColumnRef *n = makeNode(ColumnRef); + n->fields = list_make1(makeNode(A_Star)); + n->location = (yylsp[0]); + + (yyval.target) = makeNode(ResTarget); + (yyval.target)->name = NULL; + (yyval.target)->indirection = NIL; + (yyval.target)->val = (Node *)n; + (yyval.target)->location = (yylsp[0]); + } +#line 46828 "gram.c" + break; + + case 2226: /* qualified_name_list: qualified_name */ +#line 15067 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].range)); } +#line 46834 "gram.c" + break; + + case 2227: /* qualified_name_list: qualified_name_list ',' qualified_name */ +#line 15068 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].range)); } +#line 46840 "gram.c" + break; + + case 2228: /* qualified_name: ColId */ +#line 15080 "gram.y" + { + (yyval.range) = makeRangeVar(NULL, (yyvsp[0].str), (yylsp[0])); + } +#line 46848 "gram.c" + break; + + case 2229: /* qualified_name: ColId indirection */ +#line 15084 "gram.y" + { + check_qualified_name((yyvsp[0].list), yyscanner); + (yyval.range) = makeRangeVar(NULL, NULL, (yylsp[-1])); + switch (list_length((yyvsp[0].list))) + { + case 1: + (yyval.range)->catalogname = NULL; + (yyval.range)->schemaname = (yyvsp[-1].str); + (yyval.range)->relname = strVal(linitial((yyvsp[0].list))); + break; + case 2: + (yyval.range)->catalogname = (yyvsp[-1].str); + (yyval.range)->schemaname = strVal(linitial((yyvsp[0].list))); + (yyval.range)->relname = strVal(lsecond((yyvsp[0].list))); + break; + default: + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("improper qualified name (too many dotted names): %s", + NameListToString(lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)))), + parser_errposition((yylsp[-1])))); + break; + } + } +#line 46877 "gram.c" + break; + + case 2230: /* name_list: name */ +#line 15111 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 46883 "gram.c" + break; + + case 2231: /* name_list: name_list ',' name */ +#line 15113 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), makeString((yyvsp[0].str))); } +#line 46889 "gram.c" + break; + + case 2232: /* name: ColId */ +#line 15117 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 46895 "gram.c" + break; + + case 2233: /* attr_name: ColLabel */ +#line 15119 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 46901 "gram.c" + break; + + case 2234: /* file_name: Sconst */ +#line 15121 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 46907 "gram.c" + break; + + case 2235: /* func_name: type_function_name */ +#line 15132 "gram.y" + { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } +#line 46913 "gram.c" + break; + + case 2236: /* func_name: ColId indirection */ +#line 15134 "gram.y" + { + (yyval.list) = check_func_name(lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)), + yyscanner); + } +#line 46922 "gram.c" + break; + + case 2237: /* AexprConst: Iconst */ +#line 15145 "gram.y" + { + (yyval.node) = makeIntConst((yyvsp[0].ival), (yylsp[0])); + } +#line 46930 "gram.c" + break; + + case 2238: /* AexprConst: FCONST */ +#line 15149 "gram.y" + { + (yyval.node) = makeFloatConst((yyvsp[0].str), (yylsp[0])); + } +#line 46938 "gram.c" + break; + + case 2239: /* AexprConst: Sconst */ +#line 15153 "gram.y" + { + (yyval.node) = makeStringConst((yyvsp[0].str), (yylsp[0])); + } +#line 46946 "gram.c" + break; + + case 2240: /* AexprConst: BCONST */ +#line 15157 "gram.y" + { + (yyval.node) = makeBitStringConst((yyvsp[0].str), (yylsp[0])); + } +#line 46954 "gram.c" + break; + + case 2241: /* AexprConst: XCONST */ +#line 15161 "gram.y" + { + /* This is a bit constant per SQL99: + * Without Feature F511, "BIT data type", + * a shall not be a + * or a . + */ + (yyval.node) = makeBitStringConst((yyvsp[0].str), (yylsp[0])); + } +#line 46967 "gram.c" + break; + + case 2242: /* AexprConst: func_name Sconst */ +#line 15170 "gram.y" + { + /* generic type 'literal' syntax */ + TypeName *t = makeTypeNameFromNameList((yyvsp[-1].list)); + t->location = (yylsp[-1]); + (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), t); + } +#line 46978 "gram.c" + break; + + case 2243: /* AexprConst: func_name '(' func_arg_list opt_sort_clause ')' Sconst */ +#line 15177 "gram.y" + { + /* generic syntax with a type modifier */ + TypeName *t = makeTypeNameFromNameList((yyvsp[-5].list)); + ListCell *lc; + + /* + * We must use func_arg_list and opt_sort_clause in the + * production to avoid reduce/reduce conflicts, but we + * don't actually wish to allow NamedArgExpr in this + * context, nor ORDER BY. + */ + foreach(lc, (yyvsp[-3].list)) + { + NamedArgExpr *arg = (NamedArgExpr *) lfirst(lc); + + if (IsA(arg, NamedArgExpr)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("type modifier cannot have parameter name"), + parser_errposition(arg->location))); + } + if ((yyvsp[-2].list) != NIL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("type modifier cannot have ORDER BY"), + parser_errposition((yylsp[-2])))); + + t->typmods = (yyvsp[-3].list); + t->location = (yylsp[-5]); + (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), t); + } +#line 47014 "gram.c" + break; + + case 2244: /* AexprConst: ConstTypename Sconst */ +#line 15209 "gram.y" + { + (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), (yyvsp[-1].typnam)); + } +#line 47022 "gram.c" + break; + + case 2245: /* AexprConst: ConstInterval Sconst opt_interval */ +#line 15213 "gram.y" + { + TypeName *t = (yyvsp[-2].typnam); + t->typmods = (yyvsp[0].list); + (yyval.node) = makeStringConstCast((yyvsp[-1].str), (yylsp[-1]), t); + } +#line 47032 "gram.c" + break; + + case 2246: /* AexprConst: ConstInterval '(' Iconst ')' Sconst */ +#line 15219 "gram.y" + { + TypeName *t = (yyvsp[-4].typnam); + t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), + makeIntConst((yyvsp[-2].ival), (yylsp[-2]))); + (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), t); + } +#line 47043 "gram.c" + break; + + case 2247: /* AexprConst: TRUE_P */ +#line 15226 "gram.y" + { + (yyval.node) = makeBoolAConst(true, (yylsp[0])); + } +#line 47051 "gram.c" + break; + + case 2248: /* AexprConst: FALSE_P */ +#line 15230 "gram.y" + { + (yyval.node) = makeBoolAConst(false, (yylsp[0])); + } +#line 47059 "gram.c" + break; + + case 2249: /* AexprConst: NULL_P */ +#line 15234 "gram.y" + { + (yyval.node) = makeNullAConst((yylsp[0])); + } +#line 47067 "gram.c" + break; + + case 2250: /* Iconst: ICONST */ +#line 15239 "gram.y" + { (yyval.ival) = (yyvsp[0].ival); } +#line 47073 "gram.c" + break; + + case 2251: /* Sconst: SCONST */ +#line 15240 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 47079 "gram.c" + break; + + case 2252: /* SignedIconst: Iconst */ +#line 15242 "gram.y" + { (yyval.ival) = (yyvsp[0].ival); } +#line 47085 "gram.c" + break; + + case 2253: /* SignedIconst: '+' Iconst */ +#line 15243 "gram.y" + { (yyval.ival) = + (yyvsp[0].ival); } +#line 47091 "gram.c" + break; + + case 2254: /* SignedIconst: '-' Iconst */ +#line 15244 "gram.y" + { (yyval.ival) = - (yyvsp[0].ival); } +#line 47097 "gram.c" + break; + + case 2255: /* RoleId: RoleSpec */ +#line 15249 "gram.y" + { + RoleSpec *spc = (RoleSpec *) (yyvsp[0].rolespec); + switch (spc->roletype) + { + case ROLESPEC_CSTRING: + (yyval.str) = spc->rolename; + break; + case ROLESPEC_PUBLIC: + ereport(ERROR, + (errcode(ERRCODE_RESERVED_NAME), + errmsg("role name \"%s\" is reserved", + "public"), + parser_errposition((yylsp[0])))); + break; + case ROLESPEC_SESSION_USER: + ereport(ERROR, + (errcode(ERRCODE_RESERVED_NAME), + errmsg("%s cannot be used as a role name here", + "SESSION_USER"), + parser_errposition((yylsp[0])))); + break; + case ROLESPEC_CURRENT_USER: + ereport(ERROR, + (errcode(ERRCODE_RESERVED_NAME), + errmsg("%s cannot be used as a role name here", + "CURRENT_USER"), + parser_errposition((yylsp[0])))); + break; + case ROLESPEC_CURRENT_ROLE: + ereport(ERROR, + (errcode(ERRCODE_RESERVED_NAME), + errmsg("%s cannot be used as a role name here", + "CURRENT_ROLE"), + parser_errposition((yylsp[0])))); + break; + } + } +#line 47139 "gram.c" + break; + + case 2256: /* RoleSpec: NonReservedWord */ +#line 15289 "gram.y" + { + /* + * "public" and "none" are not keywords, but they must + * be treated specially here. + */ + RoleSpec *n; + if (strcmp((yyvsp[0].str), "public") == 0) + { + n = (RoleSpec *) makeRoleSpec(ROLESPEC_PUBLIC, (yylsp[0])); + n->roletype = ROLESPEC_PUBLIC; + } + else if (strcmp((yyvsp[0].str), "none") == 0) + { + ereport(ERROR, + (errcode(ERRCODE_RESERVED_NAME), + errmsg("role name \"%s\" is reserved", + "none"), + parser_errposition((yylsp[0])))); + } + else + { + n = makeRoleSpec(ROLESPEC_CSTRING, (yylsp[0])); + n->rolename = pstrdup((yyvsp[0].str)); + } + (yyval.rolespec) = n; + } +#line 47170 "gram.c" + break; + + case 2257: /* RoleSpec: CURRENT_ROLE */ +#line 15316 "gram.y" + { + (yyval.rolespec) = makeRoleSpec(ROLESPEC_CURRENT_ROLE, (yylsp[0])); + } +#line 47178 "gram.c" + break; + + case 2258: /* RoleSpec: CURRENT_USER */ +#line 15320 "gram.y" + { + (yyval.rolespec) = makeRoleSpec(ROLESPEC_CURRENT_USER, (yylsp[0])); + } +#line 47186 "gram.c" + break; + + case 2259: /* RoleSpec: SESSION_USER */ +#line 15324 "gram.y" + { + (yyval.rolespec) = makeRoleSpec(ROLESPEC_SESSION_USER, (yylsp[0])); + } +#line 47194 "gram.c" + break; + + case 2260: /* role_list: RoleSpec */ +#line 15330 "gram.y" + { (yyval.list) = list_make1((yyvsp[0].rolespec)); } +#line 47200 "gram.c" + break; + + case 2261: /* role_list: role_list ',' RoleSpec */ +#line 15332 "gram.y" + { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].rolespec)); } +#line 47206 "gram.c" + break; + + case 2262: /* PLpgSQL_Expr: opt_distinct_clause opt_target_list from_clause where_clause group_clause having_clause window_clause opt_sort_clause opt_select_limit opt_for_locking_clause */ +#line 15349 "gram.y" + { + SelectStmt *n = makeNode(SelectStmt); + + n->distinctClause = (yyvsp[-9].list); + n->targetList = (yyvsp[-8].list); + n->fromClause = (yyvsp[-7].list); + n->whereClause = (yyvsp[-6].node); + n->groupClause = ((yyvsp[-5].groupclause))->list; + n->groupDistinct = ((yyvsp[-5].groupclause))->distinct; + n->havingClause = (yyvsp[-4].node); + n->windowClause = (yyvsp[-3].list); + n->sortClause = (yyvsp[-2].list); + if ((yyvsp[-1].selectlimit)) + { + n->limitOffset = (yyvsp[-1].selectlimit)->limitOffset; + n->limitCount = (yyvsp[-1].selectlimit)->limitCount; + if (!n->sortClause && + (yyvsp[-1].selectlimit)->limitOption == LIMIT_OPTION_WITH_TIES) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("WITH TIES cannot be specified without ORDER BY clause"))); + n->limitOption = (yyvsp[-1].selectlimit)->limitOption; + } + n->lockingClause = (yyvsp[0].list); + (yyval.node) = (Node *) n; + } +#line 47237 "gram.c" + break; + + case 2263: /* PLAssignStmt: plassign_target opt_indirection plassign_equals PLpgSQL_Expr */ +#line 15382 "gram.y" + { + PLAssignStmt *n = makeNode(PLAssignStmt); + + n->name = (yyvsp[-3].str); + n->indirection = check_indirection((yyvsp[-2].list), yyscanner); + /* nnames will be filled by calling production */ + n->val = (SelectStmt *) (yyvsp[0].node); + n->location = (yylsp[-3]); + (yyval.node) = (Node *) n; + } +#line 47252 "gram.c" + break; + + case 2264: /* plassign_target: ColId */ +#line 15394 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 47258 "gram.c" + break; + + case 2265: /* plassign_target: PARAM */ +#line 15395 "gram.y" + { (yyval.str) = psprintf("$%d", (yyvsp[0].ival)); } +#line 47264 "gram.c" + break; + + case 2268: /* ColId: IDENT */ +#line 15416 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 47270 "gram.c" + break; + + case 2269: /* ColId: unreserved_keyword */ +#line 15417 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47276 "gram.c" + break; + + case 2270: /* ColId: col_name_keyword */ +#line 15418 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47282 "gram.c" + break; + + case 2271: /* type_function_name: IDENT */ +#line 15423 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 47288 "gram.c" + break; + + case 2272: /* type_function_name: unreserved_keyword */ +#line 15424 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47294 "gram.c" + break; + + case 2273: /* type_function_name: type_func_name_keyword */ +#line 15425 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47300 "gram.c" + break; + + case 2274: /* NonReservedWord: IDENT */ +#line 15430 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 47306 "gram.c" + break; + + case 2275: /* NonReservedWord: unreserved_keyword */ +#line 15431 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47312 "gram.c" + break; + + case 2276: /* NonReservedWord: col_name_keyword */ +#line 15432 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47318 "gram.c" + break; + + case 2277: /* NonReservedWord: type_func_name_keyword */ +#line 15433 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47324 "gram.c" + break; + + case 2278: /* ColLabel: IDENT */ +#line 15439 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 47330 "gram.c" + break; + + case 2279: /* ColLabel: unreserved_keyword */ +#line 15440 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47336 "gram.c" + break; + + case 2280: /* ColLabel: col_name_keyword */ +#line 15441 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47342 "gram.c" + break; + + case 2281: /* ColLabel: type_func_name_keyword */ +#line 15442 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47348 "gram.c" + break; + + case 2282: /* ColLabel: reserved_keyword */ +#line 15443 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47354 "gram.c" + break; + + case 2283: /* BareColLabel: IDENT */ +#line 15449 "gram.y" + { (yyval.str) = (yyvsp[0].str); } +#line 47360 "gram.c" + break; + + case 2284: /* BareColLabel: bare_label_keyword */ +#line 15450 "gram.y" + { (yyval.str) = pstrdup((yyvsp[0].keyword)); } +#line 47366 "gram.c" + break; + + +#line 47370 "gram.c" + + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + + *++yyvsp = yyval; + *++yylsp = yyloc; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; + yyerror (&yylloc, yyscanner, YY_("syntax error")); + } + + yyerror_range[1] = yylloc; + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, &yylloc, yyscanner); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + /* Pop stack until we find a state that shifts the error token. */ + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + yyerror_range[1] = *yylsp; + yydestruct ("Error: popping", + YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, yyscanner); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + yyerror_range[2] = yylloc; + ++yylsp; + YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + + +#if !defined yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (&yylloc, yyscanner, YY_("memory exhausted")); + yyresult = 2; + goto yyreturn; +#endif + + +/*-------------------------------------------------------. +| yyreturn -- parsing is finished, clean up and return. | +`-------------------------------------------------------*/ +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, &yylloc, yyscanner); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, yyscanner); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + + return yyresult; +} + +#line 16394 "gram.y" + + +/* + * The signature of this function is required by bison. However, we + * ignore the passed yylloc and instead use the last token position + * available from the scanner. + */ +static void +base_yyerror(YYLTYPE *yylloc, core_yyscan_t yyscanner, const char *msg) +{ + parser_yyerror(msg); +} + +static RawStmt * +makeRawStmt(Node *stmt, int stmt_location) +{ + RawStmt *rs = makeNode(RawStmt); + + rs->stmt = stmt; + rs->stmt_location = stmt_location; + rs->stmt_len = 0; /* might get changed later */ + return rs; +} + +/* Adjust a RawStmt to reflect that it doesn't run to the end of the string */ +static void +updateRawStmtEnd(RawStmt *rs, int end_location) +{ + /* + * If we already set the length, don't change it. This is for situations + * like "select foo ;; select bar" where the same statement will be last + * in the string for more than one semicolon. + */ + if (rs->stmt_len > 0) + return; + + /* OK, update length of RawStmt */ + rs->stmt_len = end_location - rs->stmt_location; +} + +static Node * +makeColumnRef(char *colname, List *indirection, + int location, core_yyscan_t yyscanner) +{ + /* + * Generate a ColumnRef node, with an A_Indirection node added if there + * is any subscripting in the specified indirection list. However, + * any field selection at the start of the indirection list must be + * transposed into the "fields" part of the ColumnRef node. + */ + ColumnRef *c = makeNode(ColumnRef); + int nfields = 0; + ListCell *l; + + c->location = location; + foreach(l, indirection) + { + if (IsA(lfirst(l), A_Indices)) + { + A_Indirection *i = makeNode(A_Indirection); + + if (nfields == 0) + { + /* easy case - all indirection goes to A_Indirection */ + c->fields = list_make1(makeString(colname)); + i->indirection = check_indirection(indirection, yyscanner); + } + else + { + /* got to split the list in two */ + i->indirection = check_indirection(list_copy_tail(indirection, + nfields), + yyscanner); + indirection = list_truncate(indirection, nfields); + c->fields = lcons(makeString(colname), indirection); + } + i->arg = (Node *) c; + return (Node *) i; + } + else if (IsA(lfirst(l), A_Star)) + { + /* We only allow '*' at the end of a ColumnRef */ + if (lnext(indirection, l) != NULL) + parser_yyerror("improper use of \"*\""); + } + nfields++; + } + /* No subscripting, so all indirection gets added to field list */ + c->fields = lcons(makeString(colname), indirection); + return (Node *) c; +} + +static Node * +makeTypeCast(Node *arg, TypeName *typename, int location) +{ + TypeCast *n = makeNode(TypeCast); + n->arg = arg; + n->typeName = typename; + n->location = location; + return (Node *) n; +} + +static Node * +makeStringConst(char *str, int location) +{ + A_Const *n = makeNode(A_Const); + + n->val.type = T_String; + n->val.val.str = str; + n->location = location; + + return (Node *)n; +} + +static Node * +makeStringConstCast(char *str, int location, TypeName *typename) +{ + Node *s = makeStringConst(str, location); + + return makeTypeCast(s, typename, -1); +} + +static Node * +makeIntConst(int val, int location) +{ + A_Const *n = makeNode(A_Const); + + n->val.type = T_Integer; + n->val.val.ival = val; + n->location = location; + + return (Node *)n; +} + +static Node * +makeFloatConst(char *str, int location) +{ + A_Const *n = makeNode(A_Const); + + n->val.type = T_Float; + n->val.val.str = str; + n->location = location; + + return (Node *)n; +} + +static Node * +makeBitStringConst(char *str, int location) +{ + A_Const *n = makeNode(A_Const); + + n->val.type = T_BitString; + n->val.val.str = str; + n->location = location; + + return (Node *)n; +} + +static Node * +makeNullAConst(int location) +{ + A_Const *n = makeNode(A_Const); + + n->val.type = T_Null; + n->location = location; + + return (Node *)n; +} + +static Node * +makeAConst(Value *v, int location) +{ + Node *n; + + switch (v->type) + { + case T_Float: + n = makeFloatConst(v->val.str, location); + break; + + case T_Integer: + n = makeIntConst(v->val.ival, location); + break; + + case T_String: + default: + n = makeStringConst(v->val.str, location); + break; + } + + return n; +} + +/* makeBoolAConst() + * Create an A_Const string node and put it inside a boolean cast. + */ +static Node * +makeBoolAConst(bool state, int location) +{ + A_Const *n = makeNode(A_Const); + + n->val.type = T_String; + n->val.val.str = (state ? "t" : "f"); + n->location = location; + + return makeTypeCast((Node *)n, SystemTypeName("bool"), -1); +} + +/* makeRoleSpec + * Create a RoleSpec with the given type + */ +static RoleSpec * +makeRoleSpec(RoleSpecType type, int location) +{ + RoleSpec *spec = makeNode(RoleSpec); + + spec->roletype = type; + spec->location = location; + + return spec; +} + +/* check_qualified_name --- check the result of qualified_name production + * + * It's easiest to let the grammar production for qualified_name allow + * subscripts and '*', which we then must reject here. + */ +static void +check_qualified_name(List *names, core_yyscan_t yyscanner) +{ + ListCell *i; + + foreach(i, names) + { + if (!IsA(lfirst(i), String)) + parser_yyerror("syntax error"); + } +} + +/* check_func_name --- check the result of func_name production + * + * It's easiest to let the grammar production for func_name allow subscripts + * and '*', which we then must reject here. + */ +static List * +check_func_name(List *names, core_yyscan_t yyscanner) +{ + ListCell *i; + + foreach(i, names) + { + if (!IsA(lfirst(i), String)) + parser_yyerror("syntax error"); + } + return names; +} + +/* check_indirection --- check the result of indirection production + * + * We only allow '*' at the end of the list, but it's hard to enforce that + * in the grammar, so do it here. + */ +static List * +check_indirection(List *indirection, core_yyscan_t yyscanner) +{ + ListCell *l; + + foreach(l, indirection) + { + if (IsA(lfirst(l), A_Star)) + { + if (lnext(indirection, l) != NULL) + parser_yyerror("improper use of \"*\""); + } + } + return indirection; +} + +/* extractArgTypes() + * Given a list of FunctionParameter nodes, extract a list of just the + * argument types (TypeNames) for input parameters only. This is what + * is needed to look up an existing function, which is what is wanted by + * the productions that use this call. + */ +static List * +extractArgTypes(List *parameters) +{ + List *result = NIL; + ListCell *i; + + foreach(i, parameters) + { + FunctionParameter *p = (FunctionParameter *) lfirst(i); + + if (p->mode != FUNC_PARAM_OUT && p->mode != FUNC_PARAM_TABLE) + result = lappend(result, p->argType); + } + return result; +} + +/* extractAggrArgTypes() + * As above, but work from the output of the aggr_args production. + */ +static List * +extractAggrArgTypes(List *aggrargs) +{ + Assert(list_length(aggrargs) == 2); + return extractArgTypes((List *) linitial(aggrargs)); +} + +/* makeOrderedSetArgs() + * Build the result of the aggr_args production (which see the comments for). + * This handles only the case where both given lists are nonempty, so that + * we have to deal with multiple VARIADIC arguments. + */ +static List * +makeOrderedSetArgs(List *directargs, List *orderedargs, + core_yyscan_t yyscanner) +{ + FunctionParameter *lastd = (FunctionParameter *) llast(directargs); + Value *ndirectargs; + + /* No restriction unless last direct arg is VARIADIC */ + if (lastd->mode == FUNC_PARAM_VARIADIC) + { + FunctionParameter *firsto = (FunctionParameter *) linitial(orderedargs); + + /* + * We ignore the names, though the aggr_arg production allows them; + * it doesn't allow default values, so those need not be checked. + */ + if (list_length(orderedargs) != 1 || + firsto->mode != FUNC_PARAM_VARIADIC || + !equal(lastd->argType, firsto->argType)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type"), + parser_errposition(exprLocation((Node *) firsto)))); + + /* OK, drop the duplicate VARIADIC argument from the internal form */ + orderedargs = NIL; + } + + /* don't merge into the next line, as list_concat changes directargs */ + ndirectargs = makeInteger(list_length(directargs)); + + return list_make2(list_concat(directargs, orderedargs), + ndirectargs); +} + +/* insertSelectOptions() + * Insert ORDER BY, etc into an already-constructed SelectStmt. + * + * This routine is just to avoid duplicating code in SelectStmt productions. + */ +static void +insertSelectOptions(SelectStmt *stmt, + List *sortClause, List *lockingClause, + SelectLimit *limitClause, + WithClause *withClause, + core_yyscan_t yyscanner) +{ + Assert(IsA(stmt, SelectStmt)); + + /* + * Tests here are to reject constructs like + * (SELECT foo ORDER BY bar) ORDER BY baz + */ + if (sortClause) + { + if (stmt->sortClause) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("multiple ORDER BY clauses not allowed"), + parser_errposition(exprLocation((Node *) sortClause)))); + stmt->sortClause = sortClause; + } + /* We can handle multiple locking clauses, though */ + stmt->lockingClause = list_concat(stmt->lockingClause, lockingClause); + if (limitClause && limitClause->limitOffset) + { + if (stmt->limitOffset) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("multiple OFFSET clauses not allowed"), + parser_errposition(exprLocation(limitClause->limitOffset)))); + stmt->limitOffset = limitClause->limitOffset; + } + if (limitClause && limitClause->limitCount) + { + if (stmt->limitCount) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("multiple LIMIT clauses not allowed"), + parser_errposition(exprLocation(limitClause->limitCount)))); + stmt->limitCount = limitClause->limitCount; + } + if (limitClause && limitClause->limitOption != LIMIT_OPTION_DEFAULT) + { + if (stmt->limitOption) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("multiple limit options not allowed"))); + if (!stmt->sortClause && limitClause->limitOption == LIMIT_OPTION_WITH_TIES) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("WITH TIES cannot be specified without ORDER BY clause"))); + if (limitClause->limitOption == LIMIT_OPTION_WITH_TIES && stmt->lockingClause) + { + ListCell *lc; + + foreach(lc, stmt->lockingClause) + { + LockingClause *lock = lfirst_node(LockingClause, lc); + + if (lock->waitPolicy == LockWaitSkip) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("%s and %s options cannot be used together", + "SKIP LOCKED", "WITH TIES"))); + } + } + stmt->limitOption = limitClause->limitOption; + } + if (withClause) + { + if (stmt->withClause) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("multiple WITH clauses not allowed"), + parser_errposition(exprLocation((Node *) withClause)))); + stmt->withClause = withClause; + } +} + +static Node * +makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg) +{ + SelectStmt *n = makeNode(SelectStmt); + + n->op = op; + n->all = all; + n->larg = (SelectStmt *) larg; + n->rarg = (SelectStmt *) rarg; + return (Node *) n; +} + +/* SystemFuncName() + * Build a properly-qualified reference to a built-in function. + */ +List * +SystemFuncName(char *name) +{ + return list_make2(makeString("pg_catalog"), makeString(name)); +} + +/* SystemTypeName() + * Build a properly-qualified reference to a built-in type. + * + * typmod is defaulted, but may be changed afterwards by caller. + * Likewise for the location. + */ +TypeName * +SystemTypeName(char *name) +{ + return makeTypeNameFromNameList(list_make2(makeString("pg_catalog"), + makeString(name))); +} + +/* doNegate() + * Handle negation of a numeric constant. + * + * Formerly, we did this here because the optimizer couldn't cope with + * indexquals that looked like "var = -4" --- it wants "var = const" + * and a unary minus operator applied to a constant didn't qualify. + * As of Postgres 7.0, that problem doesn't exist anymore because there + * is a constant-subexpression simplifier in the optimizer. However, + * there's still a good reason for doing this here, which is that we can + * postpone committing to a particular internal representation for simple + * negative constants. It's better to leave "-123.456" in string form + * until we know what the desired type is. + */ +static Node * +doNegate(Node *n, int location) +{ + if (IsA(n, A_Const)) + { + A_Const *con = (A_Const *)n; + + /* report the constant's location as that of the '-' sign */ + con->location = location; + + if (con->val.type == T_Integer) + { + con->val.val.ival = -con->val.val.ival; + return n; + } + if (con->val.type == T_Float) + { + doNegateFloat(&con->val); + return n; + } + } + + return (Node *) makeSimpleA_Expr(AEXPR_OP, "-", NULL, n, location); +} + +static void +doNegateFloat(Value *v) +{ + char *oldval = v->val.str; + + Assert(IsA(v, Float)); + if (*oldval == '+') + oldval++; + if (*oldval == '-') + v->val.str = oldval+1; /* just strip the '-' */ + else + v->val.str = psprintf("-%s", oldval); +} + +static Node * +makeAndExpr(Node *lexpr, Node *rexpr, int location) +{ + /* Flatten "a AND b AND c ..." to a single BoolExpr on sight */ + if (IsA(lexpr, BoolExpr)) + { + BoolExpr *blexpr = (BoolExpr *) lexpr; + + if (blexpr->boolop == AND_EXPR) + { + blexpr->args = lappend(blexpr->args, rexpr); + return (Node *) blexpr; + } + } + return (Node *) makeBoolExpr(AND_EXPR, list_make2(lexpr, rexpr), location); +} + +static Node * +makeOrExpr(Node *lexpr, Node *rexpr, int location) +{ + /* Flatten "a OR b OR c ..." to a single BoolExpr on sight */ + if (IsA(lexpr, BoolExpr)) + { + BoolExpr *blexpr = (BoolExpr *) lexpr; + + if (blexpr->boolop == OR_EXPR) + { + blexpr->args = lappend(blexpr->args, rexpr); + return (Node *) blexpr; + } + } + return (Node *) makeBoolExpr(OR_EXPR, list_make2(lexpr, rexpr), location); +} + +static Node * +makeNotExpr(Node *expr, int location) +{ + return (Node *) makeBoolExpr(NOT_EXPR, list_make1(expr), location); +} + +static Node * +makeAArrayExpr(List *elements, int location) +{ + A_ArrayExpr *n = makeNode(A_ArrayExpr); + + n->elements = elements; + n->location = location; + return (Node *) n; +} + +static Node * +makeSQLValueFunction(SQLValueFunctionOp op, int32 typmod, int location) +{ + SQLValueFunction *svf = makeNode(SQLValueFunction); + + svf->op = op; + /* svf->type will be filled during parse analysis */ + svf->typmod = typmod; + svf->location = location; + return (Node *) svf; +} + +static Node * +makeXmlExpr(XmlExprOp op, char *name, List *named_args, List *args, + int location) +{ + XmlExpr *x = makeNode(XmlExpr); + + x->op = op; + x->name = name; + /* + * named_args is a list of ResTarget; it'll be split apart into separate + * expression and name lists in transformXmlExpr(). + */ + x->named_args = named_args; + x->arg_names = NIL; + x->args = args; + /* xmloption, if relevant, must be filled in by caller */ + /* type and typmod will be filled in during parse analysis */ + x->type = InvalidOid; /* marks the node as not analyzed */ + x->location = location; + return (Node *) x; +} + +/* + * Merge the input and output parameters of a table function. + */ +static List * +mergeTableFuncParameters(List *func_args, List *columns) +{ + ListCell *lc; + + /* Explicit OUT and INOUT parameters shouldn't be used in this syntax */ + foreach(lc, func_args) + { + FunctionParameter *p = (FunctionParameter *) lfirst(lc); + + if (p->mode != FUNC_PARAM_DEFAULT && + p->mode != FUNC_PARAM_IN && + p->mode != FUNC_PARAM_VARIADIC) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("OUT and INOUT arguments aren't allowed in TABLE functions"))); + } + + return list_concat(func_args, columns); +} + +/* + * Determine return type of a TABLE function. A single result column + * returns setof that column's type; otherwise return setof record. + */ +static TypeName * +TableFuncTypeName(List *columns) +{ + TypeName *result; + + if (list_length(columns) == 1) + { + FunctionParameter *p = (FunctionParameter *) linitial(columns); + + result = copyObject(p->argType); + } + else + result = SystemTypeName("record"); + + result->setof = true; + + return result; +} + +/* + * Convert a list of (dotted) names to a RangeVar (like + * makeRangeVarFromNameList, but with position support). The + * "AnyName" refers to the any_name production in the grammar. + */ +static RangeVar * +makeRangeVarFromAnyName(List *names, int position, core_yyscan_t yyscanner) +{ + RangeVar *r = makeNode(RangeVar); + + switch (list_length(names)) + { + case 1: + r->catalogname = NULL; + r->schemaname = NULL; + r->relname = strVal(linitial(names)); + break; + case 2: + r->catalogname = NULL; + r->schemaname = strVal(linitial(names)); + r->relname = strVal(lsecond(names)); + break; + case 3: + r->catalogname = strVal(linitial(names)); + r->schemaname = strVal(lsecond(names)); + r->relname = strVal(lthird(names)); + break; + default: + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("improper qualified name (too many dotted names): %s", + NameListToString(names)), + parser_errposition(position))); + break; + } + + r->relpersistence = RELPERSISTENCE_PERMANENT; + r->location = position; + + return r; +} + +/* Separate Constraint nodes from COLLATE clauses in a ColQualList */ +static void +SplitColQualList(List *qualList, + List **constraintList, CollateClause **collClause, + core_yyscan_t yyscanner) +{ + ListCell *cell; + + *collClause = NULL; + foreach(cell, qualList) + { + Node *n = (Node *) lfirst(cell); + + if (IsA(n, Constraint)) + { + /* keep it in list */ + continue; + } + if (IsA(n, CollateClause)) + { + CollateClause *c = (CollateClause *) n; + + if (*collClause) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("multiple COLLATE clauses not allowed"), + parser_errposition(c->location))); + *collClause = c; + } + else + elog(ERROR, "unexpected node type %d", (int) n->type); + /* remove non-Constraint nodes from qualList */ + qualList = foreach_delete_current(qualList, cell); + } + *constraintList = qualList; +} + +/* + * Process result of ConstraintAttributeSpec, and set appropriate bool flags + * in the output command node. Pass NULL for any flags the particular + * command doesn't support. + */ +static void +processCASbits(int cas_bits, int location, const char *constrType, + bool *deferrable, bool *initdeferred, bool *not_valid, + bool *no_inherit, core_yyscan_t yyscanner) +{ + /* defaults */ + if (deferrable) + *deferrable = false; + if (initdeferred) + *initdeferred = false; + if (not_valid) + *not_valid = false; + + if (cas_bits & (CAS_DEFERRABLE | CAS_INITIALLY_DEFERRED)) + { + if (deferrable) + *deferrable = true; + else + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /* translator: %s is CHECK, UNIQUE, or similar */ + errmsg("%s constraints cannot be marked DEFERRABLE", + constrType), + parser_errposition(location))); + } + + if (cas_bits & CAS_INITIALLY_DEFERRED) + { + if (initdeferred) + *initdeferred = true; + else + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /* translator: %s is CHECK, UNIQUE, or similar */ + errmsg("%s constraints cannot be marked DEFERRABLE", + constrType), + parser_errposition(location))); + } + + if (cas_bits & CAS_NOT_VALID) + { + if (not_valid) + *not_valid = true; + else + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /* translator: %s is CHECK, UNIQUE, or similar */ + errmsg("%s constraints cannot be marked NOT VALID", + constrType), + parser_errposition(location))); + } + + if (cas_bits & CAS_NO_INHERIT) + { + if (no_inherit) + *no_inherit = true; + else + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + /* translator: %s is CHECK, UNIQUE, or similar */ + errmsg("%s constraints cannot be marked NO INHERIT", + constrType), + parser_errposition(location))); + } +} + +/*---------- + * Recursive view transformation + * + * Convert + * + * CREATE RECURSIVE VIEW relname (aliases) AS query + * + * to + * + * CREATE VIEW relname (aliases) AS + * WITH RECURSIVE relname (aliases) AS (query) + * SELECT aliases FROM relname + * + * Actually, just the WITH ... part, which is then inserted into the original + * view definition as the query. + * ---------- + */ +static Node * +makeRecursiveViewSelect(char *relname, List *aliases, Node *query) +{ + SelectStmt *s = makeNode(SelectStmt); + WithClause *w = makeNode(WithClause); + CommonTableExpr *cte = makeNode(CommonTableExpr); + List *tl = NIL; + ListCell *lc; + + /* create common table expression */ + cte->ctename = relname; + cte->aliascolnames = aliases; + cte->ctematerialized = CTEMaterializeDefault; + cte->ctequery = query; + cte->location = -1; + + /* create WITH clause and attach CTE */ + w->recursive = true; + w->ctes = list_make1(cte); + w->location = -1; + + /* create target list for the new SELECT from the alias list of the + * recursive view specification */ + foreach (lc, aliases) + { + ResTarget *rt = makeNode(ResTarget); + + rt->name = NULL; + rt->indirection = NIL; + rt->val = makeColumnRef(strVal(lfirst(lc)), NIL, -1, 0); + rt->location = -1; + + tl = lappend(tl, rt); + } + + /* create new SELECT combining WITH clause, target list, and fake FROM + * clause */ + s->withClause = w; + s->targetList = tl; + s->fromClause = list_make1(makeRangeVar(NULL, relname, -1)); + + return (Node *) s; +} + +/* parser_init() + * Initialize to parse one query string + */ +void +parser_init(base_yy_extra_type *yyext) +{ + yyext->parsetree = NIL; /* in case grammar forgets to set it */ +} diff --git a/src/backend/parser/gram.h b/src/backend/parser/gram.h new file mode 100644 index 0000000..a46a800 --- /dev/null +++ b/src/backend/parser/gram.h @@ -0,0 +1,622 @@ +/* A Bison parser, made by GNU Bison 3.7.5. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +#ifndef YY_BASE_YY_GRAM_H_INCLUDED +# define YY_BASE_YY_GRAM_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int base_yydebug; +#endif + +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + IDENT = 258, /* IDENT */ + UIDENT = 259, /* UIDENT */ + FCONST = 260, /* FCONST */ + SCONST = 261, /* SCONST */ + USCONST = 262, /* USCONST */ + BCONST = 263, /* BCONST */ + XCONST = 264, /* XCONST */ + Op = 265, /* Op */ + ICONST = 266, /* ICONST */ + PARAM = 267, /* PARAM */ + TYPECAST = 268, /* TYPECAST */ + DOT_DOT = 269, /* DOT_DOT */ + COLON_EQUALS = 270, /* COLON_EQUALS */ + EQUALS_GREATER = 271, /* EQUALS_GREATER */ + LESS_EQUALS = 272, /* LESS_EQUALS */ + GREATER_EQUALS = 273, /* GREATER_EQUALS */ + NOT_EQUALS = 274, /* NOT_EQUALS */ + ABORT_P = 275, /* ABORT_P */ + ABSOLUTE_P = 276, /* ABSOLUTE_P */ + ACCESS = 277, /* ACCESS */ + ACTION = 278, /* ACTION */ + ADD_P = 279, /* ADD_P */ + ADMIN = 280, /* ADMIN */ + AFTER = 281, /* AFTER */ + AGGREGATE = 282, /* AGGREGATE */ + ALL = 283, /* ALL */ + ALSO = 284, /* ALSO */ + ALTER = 285, /* ALTER */ + ALWAYS = 286, /* ALWAYS */ + ANALYSE = 287, /* ANALYSE */ + ANALYZE = 288, /* ANALYZE */ + AND = 289, /* AND */ + ANY = 290, /* ANY */ + ARRAY = 291, /* ARRAY */ + AS = 292, /* AS */ + ASC = 293, /* ASC */ + ASENSITIVE = 294, /* ASENSITIVE */ + ASSERTION = 295, /* ASSERTION */ + ASSIGNMENT = 296, /* ASSIGNMENT */ + ASYMMETRIC = 297, /* ASYMMETRIC */ + ATOMIC = 298, /* ATOMIC */ + AT = 299, /* AT */ + ATTACH = 300, /* ATTACH */ + ATTRIBUTE = 301, /* ATTRIBUTE */ + AUTHORIZATION = 302, /* AUTHORIZATION */ + BACKWARD = 303, /* BACKWARD */ + BEFORE = 304, /* BEFORE */ + BEGIN_P = 305, /* BEGIN_P */ + BETWEEN = 306, /* BETWEEN */ + BIGINT = 307, /* BIGINT */ + BINARY = 308, /* BINARY */ + BIT = 309, /* BIT */ + BOOLEAN_P = 310, /* BOOLEAN_P */ + BOTH = 311, /* BOTH */ + BREADTH = 312, /* BREADTH */ + BY = 313, /* BY */ + CACHE = 314, /* CACHE */ + CALL = 315, /* CALL */ + CALLED = 316, /* CALLED */ + CASCADE = 317, /* CASCADE */ + CASCADED = 318, /* CASCADED */ + CASE = 319, /* CASE */ + CAST = 320, /* CAST */ + CATALOG_P = 321, /* CATALOG_P */ + CHAIN = 322, /* CHAIN */ + CHAR_P = 323, /* CHAR_P */ + CHARACTER = 324, /* CHARACTER */ + CHARACTERISTICS = 325, /* CHARACTERISTICS */ + CHECK = 326, /* CHECK */ + CHECKPOINT = 327, /* CHECKPOINT */ + CLASS = 328, /* CLASS */ + CLOSE = 329, /* CLOSE */ + CLUSTER = 330, /* CLUSTER */ + COALESCE = 331, /* COALESCE */ + COLLATE = 332, /* COLLATE */ + COLLATION = 333, /* COLLATION */ + COLUMN = 334, /* COLUMN */ + COLUMNS = 335, /* COLUMNS */ + COMMENT = 336, /* COMMENT */ + COMMENTS = 337, /* COMMENTS */ + COMMIT = 338, /* COMMIT */ + COMMITTED = 339, /* COMMITTED */ + COMPRESSION = 340, /* COMPRESSION */ + CONCURRENTLY = 341, /* CONCURRENTLY */ + CONFIGURATION = 342, /* CONFIGURATION */ + CONFLICT = 343, /* CONFLICT */ + CONNECTION = 344, /* CONNECTION */ + CONSTRAINT = 345, /* CONSTRAINT */ + CONSTRAINTS = 346, /* CONSTRAINTS */ + CONTENT_P = 347, /* CONTENT_P */ + CONTINUE_P = 348, /* CONTINUE_P */ + CONVERSION_P = 349, /* CONVERSION_P */ + COPY = 350, /* COPY */ + COST = 351, /* COST */ + CREATE = 352, /* CREATE */ + CROSS = 353, /* CROSS */ + CSV = 354, /* CSV */ + CUBE = 355, /* CUBE */ + CURRENT_P = 356, /* CURRENT_P */ + CURRENT_CATALOG = 357, /* CURRENT_CATALOG */ + CURRENT_DATE = 358, /* CURRENT_DATE */ + CURRENT_ROLE = 359, /* CURRENT_ROLE */ + CURRENT_SCHEMA = 360, /* CURRENT_SCHEMA */ + CURRENT_TIME = 361, /* CURRENT_TIME */ + CURRENT_TIMESTAMP = 362, /* CURRENT_TIMESTAMP */ + CURRENT_USER = 363, /* CURRENT_USER */ + CURSOR = 364, /* CURSOR */ + CYCLE = 365, /* CYCLE */ + DATA_P = 366, /* DATA_P */ + DATABASE = 367, /* DATABASE */ + DAY_P = 368, /* DAY_P */ + DEALLOCATE = 369, /* DEALLOCATE */ + DEC = 370, /* DEC */ + DECIMAL_P = 371, /* DECIMAL_P */ + DECLARE = 372, /* DECLARE */ + DEFAULT = 373, /* DEFAULT */ + DEFAULTS = 374, /* DEFAULTS */ + DEFERRABLE = 375, /* DEFERRABLE */ + DEFERRED = 376, /* DEFERRED */ + DEFINER = 377, /* DEFINER */ + DELETE_P = 378, /* DELETE_P */ + DELIMITER = 379, /* DELIMITER */ + DELIMITERS = 380, /* DELIMITERS */ + DEPENDS = 381, /* DEPENDS */ + DEPTH = 382, /* DEPTH */ + DESC = 383, /* DESC */ + DETACH = 384, /* DETACH */ + DICTIONARY = 385, /* DICTIONARY */ + DISABLE_P = 386, /* DISABLE_P */ + DISCARD = 387, /* DISCARD */ + DISTINCT = 388, /* DISTINCT */ + DO = 389, /* DO */ + DOCUMENT_P = 390, /* DOCUMENT_P */ + DOMAIN_P = 391, /* DOMAIN_P */ + DOUBLE_P = 392, /* DOUBLE_P */ + DROP = 393, /* DROP */ + EACH = 394, /* EACH */ + ELSE = 395, /* ELSE */ + ENABLE_P = 396, /* ENABLE_P */ + ENCODING = 397, /* ENCODING */ + ENCRYPTED = 398, /* ENCRYPTED */ + END_P = 399, /* END_P */ + ENUM_P = 400, /* ENUM_P */ + ESCAPE = 401, /* ESCAPE */ + EVENT = 402, /* EVENT */ + EXCEPT = 403, /* EXCEPT */ + EXCLUDE = 404, /* EXCLUDE */ + EXCLUDING = 405, /* EXCLUDING */ + EXCLUSIVE = 406, /* EXCLUSIVE */ + EXECUTE = 407, /* EXECUTE */ + EXISTS = 408, /* EXISTS */ + EXPLAIN = 409, /* EXPLAIN */ + EXPRESSION = 410, /* EXPRESSION */ + EXTENSION = 411, /* EXTENSION */ + EXTERNAL = 412, /* EXTERNAL */ + EXTRACT = 413, /* EXTRACT */ + FALSE_P = 414, /* FALSE_P */ + FAMILY = 415, /* FAMILY */ + FETCH = 416, /* FETCH */ + FILTER = 417, /* FILTER */ + FINALIZE = 418, /* FINALIZE */ + FIRST_P = 419, /* FIRST_P */ + FLOAT_P = 420, /* FLOAT_P */ + FOLLOWING = 421, /* FOLLOWING */ + FOR = 422, /* FOR */ + FORCE = 423, /* FORCE */ + FOREIGN = 424, /* FOREIGN */ + FORWARD = 425, /* FORWARD */ + FREEZE = 426, /* FREEZE */ + FROM = 427, /* FROM */ + FULL = 428, /* FULL */ + FUNCTION = 429, /* FUNCTION */ + FUNCTIONS = 430, /* FUNCTIONS */ + GENERATED = 431, /* GENERATED */ + GLOBAL = 432, /* GLOBAL */ + GRANT = 433, /* GRANT */ + GRANTED = 434, /* GRANTED */ + GREATEST = 435, /* GREATEST */ + GROUP_P = 436, /* GROUP_P */ + GROUPING = 437, /* GROUPING */ + GROUPS = 438, /* GROUPS */ + HANDLER = 439, /* HANDLER */ + HAVING = 440, /* HAVING */ + HEADER_P = 441, /* HEADER_P */ + HOLD = 442, /* HOLD */ + HOUR_P = 443, /* HOUR_P */ + IDENTITY_P = 444, /* IDENTITY_P */ + IF_P = 445, /* IF_P */ + ILIKE = 446, /* ILIKE */ + IMMEDIATE = 447, /* IMMEDIATE */ + IMMUTABLE = 448, /* IMMUTABLE */ + IMPLICIT_P = 449, /* IMPLICIT_P */ + IMPORT_P = 450, /* IMPORT_P */ + IN_P = 451, /* IN_P */ + INCLUDE = 452, /* INCLUDE */ + INCLUDING = 453, /* INCLUDING */ + INCREMENT = 454, /* INCREMENT */ + INDEX = 455, /* INDEX */ + INDEXES = 456, /* INDEXES */ + INHERIT = 457, /* INHERIT */ + INHERITS = 458, /* INHERITS */ + INITIALLY = 459, /* INITIALLY */ + INLINE_P = 460, /* INLINE_P */ + INNER_P = 461, /* INNER_P */ + INOUT = 462, /* INOUT */ + INPUT_P = 463, /* INPUT_P */ + INSENSITIVE = 464, /* INSENSITIVE */ + INSERT = 465, /* INSERT */ + INSTEAD = 466, /* INSTEAD */ + INT_P = 467, /* INT_P */ + INTEGER = 468, /* INTEGER */ + INTERSECT = 469, /* INTERSECT */ + INTERVAL = 470, /* INTERVAL */ + INTO = 471, /* INTO */ + INVOKER = 472, /* INVOKER */ + IS = 473, /* IS */ + ISNULL = 474, /* ISNULL */ + ISOLATION = 475, /* ISOLATION */ + JOIN = 476, /* JOIN */ + KEY = 477, /* KEY */ + LABEL = 478, /* LABEL */ + LANGUAGE = 479, /* LANGUAGE */ + LARGE_P = 480, /* LARGE_P */ + LAST_P = 481, /* LAST_P */ + LATERAL_P = 482, /* LATERAL_P */ + LEADING = 483, /* LEADING */ + LEAKPROOF = 484, /* LEAKPROOF */ + LEAST = 485, /* LEAST */ + LEFT = 486, /* LEFT */ + LEVEL = 487, /* LEVEL */ + LIKE = 488, /* LIKE */ + LIMIT = 489, /* LIMIT */ + LISTEN = 490, /* LISTEN */ + LOAD = 491, /* LOAD */ + LOCAL = 492, /* LOCAL */ + LOCALTIME = 493, /* LOCALTIME */ + LOCALTIMESTAMP = 494, /* LOCALTIMESTAMP */ + LOCATION = 495, /* LOCATION */ + LOCK_P = 496, /* LOCK_P */ + LOCKED = 497, /* LOCKED */ + LOGGED = 498, /* LOGGED */ + MAPPING = 499, /* MAPPING */ + MATCH = 500, /* MATCH */ + MATERIALIZED = 501, /* MATERIALIZED */ + MAXVALUE = 502, /* MAXVALUE */ + METHOD = 503, /* METHOD */ + MINUTE_P = 504, /* MINUTE_P */ + MINVALUE = 505, /* MINVALUE */ + MODE = 506, /* MODE */ + MONTH_P = 507, /* MONTH_P */ + MOVE = 508, /* MOVE */ + NAME_P = 509, /* NAME_P */ + NAMES = 510, /* NAMES */ + NATIONAL = 511, /* NATIONAL */ + NATURAL = 512, /* NATURAL */ + NCHAR = 513, /* NCHAR */ + NEW = 514, /* NEW */ + NEXT = 515, /* NEXT */ + NFC = 516, /* NFC */ + NFD = 517, /* NFD */ + NFKC = 518, /* NFKC */ + NFKD = 519, /* NFKD */ + NO = 520, /* NO */ + NONE = 521, /* NONE */ + NORMALIZE = 522, /* NORMALIZE */ + NORMALIZED = 523, /* NORMALIZED */ + NOT = 524, /* NOT */ + NOTHING = 525, /* NOTHING */ + NOTIFY = 526, /* NOTIFY */ + NOTNULL = 527, /* NOTNULL */ + NOWAIT = 528, /* NOWAIT */ + NULL_P = 529, /* NULL_P */ + NULLIF = 530, /* NULLIF */ + NULLS_P = 531, /* NULLS_P */ + NUMERIC = 532, /* NUMERIC */ + OBJECT_P = 533, /* OBJECT_P */ + OF = 534, /* OF */ + OFF = 535, /* OFF */ + OFFSET = 536, /* OFFSET */ + OIDS = 537, /* OIDS */ + OLD = 538, /* OLD */ + ON = 539, /* ON */ + ONLY = 540, /* ONLY */ + OPERATOR = 541, /* OPERATOR */ + OPTION = 542, /* OPTION */ + OPTIONS = 543, /* OPTIONS */ + OR = 544, /* OR */ + ORDER = 545, /* ORDER */ + ORDINALITY = 546, /* ORDINALITY */ + OTHERS = 547, /* OTHERS */ + OUT_P = 548, /* OUT_P */ + OUTER_P = 549, /* OUTER_P */ + OVER = 550, /* OVER */ + OVERLAPS = 551, /* OVERLAPS */ + OVERLAY = 552, /* OVERLAY */ + OVERRIDING = 553, /* OVERRIDING */ + OWNED = 554, /* OWNED */ + OWNER = 555, /* OWNER */ + PARALLEL = 556, /* PARALLEL */ + PARSER = 557, /* PARSER */ + PARTIAL = 558, /* PARTIAL */ + PARTITION = 559, /* PARTITION */ + PASSING = 560, /* PASSING */ + PASSWORD = 561, /* PASSWORD */ + PLACING = 562, /* PLACING */ + PLANS = 563, /* PLANS */ + POLICY = 564, /* POLICY */ + POSITION = 565, /* POSITION */ + PRECEDING = 566, /* PRECEDING */ + PRECISION = 567, /* PRECISION */ + PRESERVE = 568, /* PRESERVE */ + PREPARE = 569, /* PREPARE */ + PREPARED = 570, /* PREPARED */ + PRIMARY = 571, /* PRIMARY */ + PRIOR = 572, /* PRIOR */ + PRIVILEGES = 573, /* PRIVILEGES */ + PROCEDURAL = 574, /* PROCEDURAL */ + PROCEDURE = 575, /* PROCEDURE */ + PROCEDURES = 576, /* PROCEDURES */ + PROGRAM = 577, /* PROGRAM */ + PUBLICATION = 578, /* PUBLICATION */ + QUOTE = 579, /* QUOTE */ + RANGE = 580, /* RANGE */ + READ = 581, /* READ */ + REAL = 582, /* REAL */ + REASSIGN = 583, /* REASSIGN */ + RECHECK = 584, /* RECHECK */ + RECURSIVE = 585, /* RECURSIVE */ + REF = 586, /* REF */ + REFERENCES = 587, /* REFERENCES */ + REFERENCING = 588, /* REFERENCING */ + REFRESH = 589, /* REFRESH */ + REINDEX = 590, /* REINDEX */ + RELATIVE_P = 591, /* RELATIVE_P */ + RELEASE = 592, /* RELEASE */ + RENAME = 593, /* RENAME */ + REPEATABLE = 594, /* REPEATABLE */ + REPLACE = 595, /* REPLACE */ + REPLICA = 596, /* REPLICA */ + RESET = 597, /* RESET */ + RESTART = 598, /* RESTART */ + RESTRICT = 599, /* RESTRICT */ + RETURN = 600, /* RETURN */ + RETURNING = 601, /* RETURNING */ + RETURNS = 602, /* RETURNS */ + REVOKE = 603, /* REVOKE */ + RIGHT = 604, /* RIGHT */ + ROLE = 605, /* ROLE */ + ROLLBACK = 606, /* ROLLBACK */ + ROLLUP = 607, /* ROLLUP */ + ROUTINE = 608, /* ROUTINE */ + ROUTINES = 609, /* ROUTINES */ + ROW = 610, /* ROW */ + ROWS = 611, /* ROWS */ + RULE = 612, /* RULE */ + SAVEPOINT = 613, /* SAVEPOINT */ + SCHEMA = 614, /* SCHEMA */ + SCHEMAS = 615, /* SCHEMAS */ + SCROLL = 616, /* SCROLL */ + SEARCH = 617, /* SEARCH */ + SECOND_P = 618, /* SECOND_P */ + SECURITY = 619, /* SECURITY */ + SELECT = 620, /* SELECT */ + SEQUENCE = 621, /* SEQUENCE */ + SEQUENCES = 622, /* SEQUENCES */ + SERIALIZABLE = 623, /* SERIALIZABLE */ + SERVER = 624, /* SERVER */ + SESSION = 625, /* SESSION */ + SESSION_USER = 626, /* SESSION_USER */ + SET = 627, /* SET */ + SETS = 628, /* SETS */ + SETOF = 629, /* SETOF */ + SHARE = 630, /* SHARE */ + SHOW = 631, /* SHOW */ + SIMILAR = 632, /* SIMILAR */ + SIMPLE = 633, /* SIMPLE */ + SKIP = 634, /* SKIP */ + SMALLINT = 635, /* SMALLINT */ + SNAPSHOT = 636, /* SNAPSHOT */ + SOME = 637, /* SOME */ + SQL_P = 638, /* SQL_P */ + STABLE = 639, /* STABLE */ + STANDALONE_P = 640, /* STANDALONE_P */ + START = 641, /* START */ + STATEMENT = 642, /* STATEMENT */ + STATISTICS = 643, /* STATISTICS */ + STDIN = 644, /* STDIN */ + STDOUT = 645, /* STDOUT */ + STORAGE = 646, /* STORAGE */ + STORED = 647, /* STORED */ + STRICT_P = 648, /* STRICT_P */ + STRIP_P = 649, /* STRIP_P */ + SUBSCRIPTION = 650, /* SUBSCRIPTION */ + SUBSTRING = 651, /* SUBSTRING */ + SUPPORT = 652, /* SUPPORT */ + SYMMETRIC = 653, /* SYMMETRIC */ + SYSID = 654, /* SYSID */ + SYSTEM_P = 655, /* SYSTEM_P */ + TABLE = 656, /* TABLE */ + TABLES = 657, /* TABLES */ + TABLESAMPLE = 658, /* TABLESAMPLE */ + TABLESPACE = 659, /* TABLESPACE */ + TEMP = 660, /* TEMP */ + TEMPLATE = 661, /* TEMPLATE */ + TEMPORARY = 662, /* TEMPORARY */ + TEXT_P = 663, /* TEXT_P */ + THEN = 664, /* THEN */ + TIES = 665, /* TIES */ + TIME = 666, /* TIME */ + TIMESTAMP = 667, /* TIMESTAMP */ + TO = 668, /* TO */ + TRAILING = 669, /* TRAILING */ + TRANSACTION = 670, /* TRANSACTION */ + TRANSFORM = 671, /* TRANSFORM */ + TREAT = 672, /* TREAT */ + TRIGGER = 673, /* TRIGGER */ + TRIM = 674, /* TRIM */ + TRUE_P = 675, /* TRUE_P */ + TRUNCATE = 676, /* TRUNCATE */ + TRUSTED = 677, /* TRUSTED */ + TYPE_P = 678, /* TYPE_P */ + TYPES_P = 679, /* TYPES_P */ + UESCAPE = 680, /* UESCAPE */ + UNBOUNDED = 681, /* UNBOUNDED */ + UNCOMMITTED = 682, /* UNCOMMITTED */ + UNENCRYPTED = 683, /* UNENCRYPTED */ + UNION = 684, /* UNION */ + UNIQUE = 685, /* UNIQUE */ + UNKNOWN = 686, /* UNKNOWN */ + UNLISTEN = 687, /* UNLISTEN */ + UNLOGGED = 688, /* UNLOGGED */ + UNTIL = 689, /* UNTIL */ + UPDATE = 690, /* UPDATE */ + USER = 691, /* USER */ + USING = 692, /* USING */ + VACUUM = 693, /* VACUUM */ + VALID = 694, /* VALID */ + VALIDATE = 695, /* VALIDATE */ + VALIDATOR = 696, /* VALIDATOR */ + VALUE_P = 697, /* VALUE_P */ + VALUES = 698, /* VALUES */ + VARCHAR = 699, /* VARCHAR */ + VARIADIC = 700, /* VARIADIC */ + VARYING = 701, /* VARYING */ + VERBOSE = 702, /* VERBOSE */ + VERSION_P = 703, /* VERSION_P */ + VIEW = 704, /* VIEW */ + VIEWS = 705, /* VIEWS */ + VOLATILE = 706, /* VOLATILE */ + WHEN = 707, /* WHEN */ + WHERE = 708, /* WHERE */ + WHITESPACE_P = 709, /* WHITESPACE_P */ + WINDOW = 710, /* WINDOW */ + WITH = 711, /* WITH */ + WITHIN = 712, /* WITHIN */ + WITHOUT = 713, /* WITHOUT */ + WORK = 714, /* WORK */ + WRAPPER = 715, /* WRAPPER */ + WRITE = 716, /* WRITE */ + XML_P = 717, /* XML_P */ + XMLATTRIBUTES = 718, /* XMLATTRIBUTES */ + XMLCONCAT = 719, /* XMLCONCAT */ + XMLELEMENT = 720, /* XMLELEMENT */ + XMLEXISTS = 721, /* XMLEXISTS */ + XMLFOREST = 722, /* XMLFOREST */ + XMLNAMESPACES = 723, /* XMLNAMESPACES */ + XMLPARSE = 724, /* XMLPARSE */ + XMLPI = 725, /* XMLPI */ + XMLROOT = 726, /* XMLROOT */ + XMLSERIALIZE = 727, /* XMLSERIALIZE */ + XMLTABLE = 728, /* XMLTABLE */ + YEAR_P = 729, /* YEAR_P */ + YES_P = 730, /* YES_P */ + ZONE = 731, /* ZONE */ + NOT_LA = 732, /* NOT_LA */ + NULLS_LA = 733, /* NULLS_LA */ + WITH_LA = 734, /* WITH_LA */ + MODE_TYPE_NAME = 735, /* MODE_TYPE_NAME */ + MODE_PLPGSQL_EXPR = 736, /* MODE_PLPGSQL_EXPR */ + MODE_PLPGSQL_ASSIGN1 = 737, /* MODE_PLPGSQL_ASSIGN1 */ + MODE_PLPGSQL_ASSIGN2 = 738, /* MODE_PLPGSQL_ASSIGN2 */ + MODE_PLPGSQL_ASSIGN3 = 739, /* MODE_PLPGSQL_ASSIGN3 */ + UMINUS = 740 /* UMINUS */ + }; + typedef enum yytokentype yytoken_kind_t; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +union YYSTYPE +{ +#line 217 "gram.y" + + core_YYSTYPE core_yystype; + /* these fields must match core_YYSTYPE: */ + int ival; + char *str; + const char *keyword; + + char chr; + bool boolean; + JoinType jtype; + DropBehavior dbehavior; + OnCommitAction oncommit; + List *list; + Node *node; + Value *value; + ObjectType objtype; + TypeName *typnam; + FunctionParameter *fun_param; + FunctionParameterMode fun_param_mode; + ObjectWithArgs *objwithargs; + DefElem *defelt; + SortBy *sortby; + WindowDef *windef; + JoinExpr *jexpr; + IndexElem *ielem; + StatsElem *selem; + Alias *alias; + RangeVar *range; + IntoClause *into; + WithClause *with; + InferClause *infer; + OnConflictClause *onconflict; + A_Indices *aind; + ResTarget *target; + struct PrivTarget *privtarget; + AccessPriv *accesspriv; + struct ImportQual *importqual; + InsertStmt *istmt; + VariableSetStmt *vsetstmt; + PartitionElem *partelem; + PartitionSpec *partspec; + PartitionBoundSpec *partboundspec; + RoleSpec *rolespec; + struct SelectLimit *selectlimit; + SetQuantifier setquantifier; + struct GroupClause *groupclause; + +#line 597 "gram.h" + +}; +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* Location type. */ +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED +typedef struct YYLTYPE YYLTYPE; +struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +}; +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 +#endif + + + +int base_yyparse (core_yyscan_t yyscanner); + +#endif /* !YY_BASE_YY_GRAM_H_INCLUDED */ diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y new file mode 100644 index 0000000..fe2af56 --- /dev/null +++ b/src/backend/parser/gram.y @@ -0,0 +1,17264 @@ +%{ + +/*#define YYDEBUG 1*/ +/*------------------------------------------------------------------------- + * + * gram.y + * POSTGRESQL BISON rules/actions + * + * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/backend/parser/gram.y + * + * HISTORY + * AUTHOR DATE MAJOR EVENT + * Andrew Yu Sept, 1994 POSTQUEL to SQL conversion + * Andrew Yu Oct, 1994 lispy code conversion + * + * NOTES + * CAPITALS are used to represent terminal symbols. + * non-capitals are used to represent non-terminals. + * + * In general, nothing in this file should initiate database accesses + * nor depend on changeable state (such as SET variables). If you do + * database accesses, your code will fail when we have aborted the + * current transaction and are just parsing commands to find the next + * ROLLBACK or COMMIT. If you make use of SET variables, then you + * will do the wrong thing in multi-query strings like this: + * SET constraint_exclusion TO off; SELECT * FROM foo; + * because the entire string is parsed by gram.y before the SET gets + * executed. Anything that depends on the database or changeable state + * should be handled during parse analysis so that it happens at the + * right time not the wrong time. + * + * WARNINGS + * If you use a list, make sure the datum is a node so that the printing + * routines work. + * + * Sometimes we assign constants to makeStrings. Make sure we don't free + * those. + * + *------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include +#include + +#include "access/tableam.h" +#include "catalog/index.h" +#include "catalog/namespace.h" +#include "catalog/pg_am.h" +#include "catalog/pg_trigger.h" +#include "commands/defrem.h" +#include "commands/trigger.h" +#include "nodes/makefuncs.h" +#include "nodes/nodeFuncs.h" +#include "parser/gramparse.h" +#include "parser/parser.h" +#include "storage/lmgr.h" +#include "utils/date.h" +#include "utils/datetime.h" +#include "utils/numeric.h" +#include "utils/xml.h" + + +/* + * Location tracking support --- simpler than bison's default, since we only + * want to track the start position not the end position of each nonterminal. + */ +#define YYLLOC_DEFAULT(Current, Rhs, N) \ + do { \ + if ((N) > 0) \ + (Current) = (Rhs)[1]; \ + else \ + (Current) = (-1); \ + } while (0) + +/* + * The above macro assigns -1 (unknown) as the parse location of any + * nonterminal that was reduced from an empty rule, or whose leftmost + * component was reduced from an empty rule. This is problematic + * for nonterminals defined like + * OptFooList: / * EMPTY * / { ... } | OptFooList Foo { ... } ; + * because we'll set -1 as the location during the first reduction and then + * copy it during each subsequent reduction, leaving us with -1 for the + * location even when the list is not empty. To fix that, do this in the + * action for the nonempty rule(s): + * if (@$ < 0) @$ = @2; + * (Although we have many nonterminals that follow this pattern, we only + * bother with fixing @$ like this when the nonterminal's parse location + * is actually referenced in some rule.) + * + * A cleaner answer would be to make YYLLOC_DEFAULT scan all the Rhs + * locations until it's found one that's not -1. Then we'd get a correct + * location for any nonterminal that isn't entirely empty. But this way + * would add overhead to every rule reduction, and so far there's not been + * a compelling reason to pay that overhead. + */ + +/* + * Bison doesn't allocate anything that needs to live across parser calls, + * so we can easily have it use palloc instead of malloc. This prevents + * memory leaks if we error out during parsing. Note this only works with + * bison >= 2.0. However, in bison 1.875 the default is to use alloca() + * if possible, so there's not really much problem anyhow, at least if + * you're building with gcc. + */ +#define YYMALLOC palloc +#define YYFREE pfree + +/* Private struct for the result of privilege_target production */ +typedef struct PrivTarget +{ + GrantTargetType targtype; + ObjectType objtype; + List *objs; +} PrivTarget; + +/* Private struct for the result of import_qualification production */ +typedef struct ImportQual +{ + ImportForeignSchemaType type; + List *table_names; +} ImportQual; + +/* Private struct for the result of opt_select_limit production */ +typedef struct SelectLimit +{ + Node *limitOffset; + Node *limitCount; + LimitOption limitOption; +} SelectLimit; + +/* Private struct for the result of group_clause production */ +typedef struct GroupClause +{ + bool distinct; + List *list; +} GroupClause; + +/* ConstraintAttributeSpec yields an integer bitmask of these flags: */ +#define CAS_NOT_DEFERRABLE 0x01 +#define CAS_DEFERRABLE 0x02 +#define CAS_INITIALLY_IMMEDIATE 0x04 +#define CAS_INITIALLY_DEFERRED 0x08 +#define CAS_NOT_VALID 0x10 +#define CAS_NO_INHERIT 0x20 + + +#define parser_yyerror(msg) scanner_yyerror(msg, yyscanner) +#define parser_errposition(pos) scanner_errposition(pos, yyscanner) + +static void base_yyerror(YYLTYPE *yylloc, core_yyscan_t yyscanner, + const char *msg); +static RawStmt *makeRawStmt(Node *stmt, int stmt_location); +static void updateRawStmtEnd(RawStmt *rs, int end_location); +static Node *makeColumnRef(char *colname, List *indirection, + int location, core_yyscan_t yyscanner); +static Node *makeTypeCast(Node *arg, TypeName *typename, int location); +static Node *makeStringConst(char *str, int location); +static Node *makeStringConstCast(char *str, int location, TypeName *typename); +static Node *makeIntConst(int val, int location); +static Node *makeFloatConst(char *str, int location); +static Node *makeBitStringConst(char *str, int location); +static Node *makeNullAConst(int location); +static Node *makeAConst(Value *v, int location); +static Node *makeBoolAConst(bool state, int location); +static RoleSpec *makeRoleSpec(RoleSpecType type, int location); +static void check_qualified_name(List *names, core_yyscan_t yyscanner); +static List *check_func_name(List *names, core_yyscan_t yyscanner); +static List *check_indirection(List *indirection, core_yyscan_t yyscanner); +static List *extractArgTypes(List *parameters); +static List *extractAggrArgTypes(List *aggrargs); +static List *makeOrderedSetArgs(List *directargs, List *orderedargs, + core_yyscan_t yyscanner); +static void insertSelectOptions(SelectStmt *stmt, + List *sortClause, List *lockingClause, + SelectLimit *limitClause, + WithClause *withClause, + core_yyscan_t yyscanner); +static Node *makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg); +static Node *doNegate(Node *n, int location); +static void doNegateFloat(Value *v); +static Node *makeAndExpr(Node *lexpr, Node *rexpr, int location); +static Node *makeOrExpr(Node *lexpr, Node *rexpr, int location); +static Node *makeNotExpr(Node *expr, int location); +static Node *makeAArrayExpr(List *elements, int location); +static Node *makeSQLValueFunction(SQLValueFunctionOp op, int32 typmod, + int location); +static Node *makeXmlExpr(XmlExprOp op, char *name, List *named_args, + List *args, int location); +static List *mergeTableFuncParameters(List *func_args, List *columns); +static TypeName *TableFuncTypeName(List *columns); +static RangeVar *makeRangeVarFromAnyName(List *names, int position, core_yyscan_t yyscanner); +static void SplitColQualList(List *qualList, + List **constraintList, CollateClause **collClause, + core_yyscan_t yyscanner); +static void processCASbits(int cas_bits, int location, const char *constrType, + bool *deferrable, bool *initdeferred, bool *not_valid, + bool *no_inherit, core_yyscan_t yyscanner); +static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); + +%} + +%pure-parser +%expect 0 +%name-prefix="base_yy" +%locations + +%parse-param {core_yyscan_t yyscanner} +%lex-param {core_yyscan_t yyscanner} + +%union +{ + core_YYSTYPE core_yystype; + /* these fields must match core_YYSTYPE: */ + int ival; + char *str; + const char *keyword; + + char chr; + bool boolean; + JoinType jtype; + DropBehavior dbehavior; + OnCommitAction oncommit; + List *list; + Node *node; + Value *value; + ObjectType objtype; + TypeName *typnam; + FunctionParameter *fun_param; + FunctionParameterMode fun_param_mode; + ObjectWithArgs *objwithargs; + DefElem *defelt; + SortBy *sortby; + WindowDef *windef; + JoinExpr *jexpr; + IndexElem *ielem; + StatsElem *selem; + Alias *alias; + RangeVar *range; + IntoClause *into; + WithClause *with; + InferClause *infer; + OnConflictClause *onconflict; + A_Indices *aind; + ResTarget *target; + struct PrivTarget *privtarget; + AccessPriv *accesspriv; + struct ImportQual *importqual; + InsertStmt *istmt; + VariableSetStmt *vsetstmt; + PartitionElem *partelem; + PartitionSpec *partspec; + PartitionBoundSpec *partboundspec; + RoleSpec *rolespec; + struct SelectLimit *selectlimit; + SetQuantifier setquantifier; + struct GroupClause *groupclause; +} + +%type stmt toplevel_stmt schema_stmt routine_body_stmt + AlterEventTrigStmt AlterCollationStmt + AlterDatabaseStmt AlterDatabaseSetStmt AlterDomainStmt AlterEnumStmt + AlterFdwStmt AlterForeignServerStmt AlterGroupStmt + AlterObjectDependsStmt AlterObjectSchemaStmt AlterOwnerStmt + AlterOperatorStmt AlterTypeStmt AlterSeqStmt AlterSystemStmt AlterTableStmt + AlterTblSpcStmt AlterExtensionStmt AlterExtensionContentsStmt + AlterCompositeTypeStmt AlterUserMappingStmt + AlterRoleStmt AlterRoleSetStmt AlterPolicyStmt AlterStatsStmt + AlterDefaultPrivilegesStmt DefACLAction + AnalyzeStmt CallStmt ClosePortalStmt ClusterStmt CommentStmt + ConstraintsSetStmt CopyStmt CreateAsStmt CreateCastStmt + CreateDomainStmt CreateExtensionStmt CreateGroupStmt CreateOpClassStmt + CreateOpFamilyStmt AlterOpFamilyStmt CreatePLangStmt + CreateSchemaStmt CreateSeqStmt CreateStmt CreateStatsStmt CreateTableSpaceStmt + CreateFdwStmt CreateForeignServerStmt CreateForeignTableStmt + CreateAssertionStmt CreateTransformStmt CreateTrigStmt CreateEventTrigStmt + CreateUserStmt CreateUserMappingStmt CreateRoleStmt CreatePolicyStmt + CreatedbStmt DeclareCursorStmt DefineStmt DeleteStmt DiscardStmt DoStmt + DropOpClassStmt DropOpFamilyStmt DropStmt + DropCastStmt DropRoleStmt + DropdbStmt DropTableSpaceStmt + DropTransformStmt + DropUserMappingStmt ExplainStmt FetchStmt + GrantStmt GrantRoleStmt ImportForeignSchemaStmt IndexStmt InsertStmt + ListenStmt LoadStmt LockStmt NotifyStmt ExplainableStmt PreparableStmt + CreateFunctionStmt AlterFunctionStmt ReindexStmt RemoveAggrStmt + RemoveFuncStmt RemoveOperStmt RenameStmt ReturnStmt RevokeStmt RevokeRoleStmt + RuleActionStmt RuleActionStmtOrEmpty RuleStmt + SecLabelStmt SelectStmt TransactionStmt TransactionStmtLegacy TruncateStmt + UnlistenStmt UpdateStmt VacuumStmt + VariableResetStmt VariableSetStmt VariableShowStmt + ViewStmt CheckPointStmt CreateConversionStmt + DeallocateStmt PrepareStmt ExecuteStmt + DropOwnedStmt ReassignOwnedStmt + AlterTSConfigurationStmt AlterTSDictionaryStmt + CreateMatViewStmt RefreshMatViewStmt CreateAmStmt + CreatePublicationStmt AlterPublicationStmt + CreateSubscriptionStmt AlterSubscriptionStmt DropSubscriptionStmt + +%type select_no_parens select_with_parens select_clause + simple_select values_clause + PLpgSQL_Expr PLAssignStmt + +%type alter_column_default opclass_item opclass_drop alter_using +%type add_drop opt_asc_desc opt_nulls_order + +%type alter_table_cmd alter_type_cmd opt_collate_clause + replica_identity partition_cmd index_partition_cmd +%type alter_table_cmds alter_type_cmds +%type alter_identity_column_option_list +%type alter_identity_column_option + +%type opt_drop_behavior + +%type createdb_opt_list createdb_opt_items copy_opt_list + transaction_mode_list + create_extension_opt_list alter_extension_opt_list +%type createdb_opt_item copy_opt_item + transaction_mode_item + create_extension_opt_item alter_extension_opt_item + +%type opt_lock lock_type cast_context +%type utility_option_name +%type utility_option_elem +%type utility_option_list +%type utility_option_arg +%type drop_option +%type opt_or_replace opt_no + opt_grant_grant_option opt_grant_admin_option + opt_nowait opt_if_exists opt_with_data + opt_transaction_chain +%type opt_nowait_or_skip + +%type OptRoleList AlterOptRoleList +%type CreateOptRoleElem AlterOptRoleElem + +%type opt_type +%type foreign_server_version opt_foreign_server_version +%type opt_in_database + +%type OptSchemaName +%type OptSchemaEltList + +%type am_type + +%type TriggerForSpec TriggerForType +%type TriggerActionTime +%type TriggerEvents TriggerOneEvent +%type TriggerFuncArg +%type TriggerWhen +%type TransitionRelName +%type TransitionRowOrTable TransitionOldOrNew +%type TriggerTransition + +%type event_trigger_when_list event_trigger_value_list +%type event_trigger_when_item +%type enable_trigger + +%type copy_file_name + access_method_clause attr_name + table_access_method_clause name cursor_name file_name + opt_index_name cluster_index_specification + +%type func_name handler_name qual_Op qual_all_Op subquery_Op + opt_class opt_inline_handler opt_validator validator_clause + opt_collate + +%type qualified_name insert_target OptConstrFromTable + +%type all_Op MathOp + +%type row_security_cmd RowSecurityDefaultForCmd +%type RowSecurityDefaultPermissive +%type RowSecurityOptionalWithCheck RowSecurityOptionalExpr +%type RowSecurityDefaultToRole RowSecurityOptionalToRole + +%type iso_level opt_encoding +%type grantee +%type grantee_list +%type privilege +%type privileges privilege_list +%type privilege_target +%type function_with_argtypes aggregate_with_argtypes operator_with_argtypes +%type function_with_argtypes_list aggregate_with_argtypes_list operator_with_argtypes_list +%type defacl_privilege_target +%type DefACLOption +%type DefACLOptionList +%type import_qualification_type +%type import_qualification +%type vacuum_relation +%type opt_select_limit select_limit limit_clause + +%type parse_toplevel stmtmulti routine_body_stmt_list + OptTableElementList TableElementList OptInherit definition + OptTypedTableElementList TypedTableElementList + reloptions opt_reloptions + OptWith opt_definition func_args func_args_list + func_args_with_defaults func_args_with_defaults_list + aggr_args aggr_args_list + func_as createfunc_opt_list opt_createfunc_opt_list alterfunc_opt_list + old_aggr_definition old_aggr_list + oper_argtypes RuleActionList RuleActionMulti + opt_column_list columnList opt_name_list + sort_clause opt_sort_clause sortby_list index_params stats_params + opt_include opt_c_include index_including_params + name_list role_list from_clause from_list opt_array_bounds + qualified_name_list any_name any_name_list type_name_list + any_operator expr_list attrs + distinct_clause opt_distinct_clause + target_list opt_target_list insert_column_list set_target_list + set_clause_list set_clause + def_list operator_def_list indirection opt_indirection + reloption_list TriggerFuncArgs opclass_item_list opclass_drop_list + opclass_purpose opt_opfamily transaction_mode_list_or_empty + OptTableFuncElementList TableFuncElementList opt_type_modifiers + prep_type_clause + execute_param_clause using_clause returning_clause + opt_enum_val_list enum_val_list table_func_column_list + create_generic_options alter_generic_options + relation_expr_list dostmt_opt_list + transform_element_list transform_type_list + TriggerTransitions TriggerReferencing + vacuum_relation_list opt_vacuum_relation_list + drop_option_list + +%type opt_routine_body +%type group_clause +%type group_by_list +%type group_by_item empty_grouping_set rollup_clause cube_clause +%type grouping_sets_clause +%type opt_publication_for_tables publication_for_tables + +%type opt_fdw_options fdw_options +%type fdw_option + +%type OptTempTableName +%type into_clause create_as_target create_mv_target + +%type createfunc_opt_item common_func_opt_item dostmt_opt_item +%type func_arg func_arg_with_default table_func_column aggr_arg +%type arg_class +%type func_return func_type + +%type opt_trusted opt_restart_seqs +%type OptTemp +%type OptNoLog +%type OnCommitOption + +%type for_locking_strength +%type for_locking_item +%type for_locking_clause opt_for_locking_clause for_locking_items +%type locked_rels_list +%type set_quantifier + +%type join_qual +%type join_type + +%type extract_list overlay_list position_list +%type substr_list trim_list +%type opt_interval interval_second +%type unicode_normal_form + +%type opt_instead +%type opt_unique opt_concurrently opt_verbose opt_full +%type opt_freeze opt_analyze opt_default opt_recheck +%type opt_binary copy_delimiter + +%type copy_from opt_program + +%type event cursor_options opt_hold opt_set_data +%type object_type_any_name object_type_name object_type_name_on_any_name + drop_type_name + +%type fetch_args select_limit_value + offset_clause select_offset_value + select_fetch_first_value I_or_F_const +%type row_or_rows first_or_next + +%type OptSeqOptList SeqOptList OptParenthesizedSeqOptList +%type SeqOptElem + +%type insert_rest +%type opt_conf_expr +%type opt_on_conflict + +%type generic_set set_rest set_rest_more generic_reset reset_rest + SetResetClause FunctionSetResetClause + +%type TableElement TypedTableElement ConstraintElem TableFuncElement +%type columnDef columnOptions +%type def_elem reloption_elem old_aggr_elem operator_def_elem +%type def_arg columnElem where_clause where_or_current_clause + a_expr b_expr c_expr AexprConst indirection_el opt_slice_bound + columnref in_expr having_clause func_table xmltable array_expr + OptWhereClause operator_def_arg +%type rowsfrom_item rowsfrom_list opt_col_def_list +%type opt_ordinality +%type ExclusionConstraintList ExclusionConstraintElem +%type func_arg_list func_arg_list_opt +%type func_arg_expr +%type row explicit_row implicit_row type_list array_expr_list +%type case_expr case_arg when_clause case_default +%type when_clause_list +%type opt_search_clause opt_cycle_clause +%type sub_type opt_materialized +%type NumericOnly +%type NumericOnly_list +%type alias_clause opt_alias_clause opt_alias_clause_for_join_using +%type func_alias_clause +%type sortby +%type index_elem index_elem_options +%type stats_param +%type table_ref +%type joined_table +%type relation_expr +%type relation_expr_opt_alias +%type tablesample_clause opt_repeatable_clause +%type target_el set_target insert_column_item + +%type generic_option_name +%type generic_option_arg +%type generic_option_elem alter_generic_option_elem +%type generic_option_list alter_generic_option_list + +%type reindex_target_type reindex_target_multitable + +%type copy_generic_opt_arg copy_generic_opt_arg_list_item +%type copy_generic_opt_elem +%type copy_generic_opt_list copy_generic_opt_arg_list +%type copy_options + +%type Typename SimpleTypename ConstTypename + GenericType Numeric opt_float + Character ConstCharacter + CharacterWithLength CharacterWithoutLength + ConstDatetime ConstInterval + Bit ConstBit BitWithLength BitWithoutLength +%type character +%type extract_arg +%type opt_varying opt_timezone opt_no_inherit + +%type Iconst SignedIconst +%type Sconst comment_text notify_payload +%type RoleId opt_boolean_or_string +%type var_list +%type ColId ColLabel BareColLabel +%type NonReservedWord NonReservedWord_or_Sconst +%type var_name type_function_name param_name +%type createdb_opt_name plassign_target +%type var_value zone_value +%type auth_ident RoleSpec opt_granted_by + +%type unreserved_keyword type_func_name_keyword +%type col_name_keyword reserved_keyword +%type bare_label_keyword + +%type TableConstraint TableLikeClause +%type TableLikeOptionList TableLikeOption +%type column_compression opt_column_compression +%type ColQualList +%type ColConstraint ColConstraintElem ConstraintAttr +%type key_actions key_delete key_match key_update key_action +%type ConstraintAttributeSpec ConstraintAttributeElem +%type ExistingIndex + +%type constraints_set_list +%type constraints_set_mode +%type OptTableSpace OptConsTableSpace +%type OptTableSpaceOwner +%type opt_check_option + +%type opt_provider security_label + +%type xml_attribute_el +%type xml_attribute_list xml_attributes +%type xml_root_version opt_xml_root_standalone +%type xmlexists_argument +%type document_or_content +%type xml_whitespace_option +%type xmltable_column_list xmltable_column_option_list +%type xmltable_column_el +%type xmltable_column_option_el +%type xml_namespace_list +%type xml_namespace_el + +%type func_application func_expr_common_subexpr +%type func_expr func_expr_windowless +%type common_table_expr +%type with_clause opt_with_clause +%type cte_list + +%type within_group_clause +%type filter_clause +%type window_clause window_definition_list opt_partition_clause +%type window_definition over_clause window_specification + opt_frame_clause frame_extent frame_bound +%type opt_window_exclusion_clause +%type opt_existing_window_name +%type opt_if_not_exists +%type generated_when override_kind +%type PartitionSpec OptPartitionSpec +%type part_elem +%type part_params +%type PartitionBoundSpec +%type hash_partbound +%type hash_partbound_elem + + +/* + * Non-keyword token types. These are hard-wired into the "flex" lexer. + * They must be listed first so that their numeric codes do not depend on + * the set of keywords. PL/pgSQL depends on this so that it can share the + * same lexer. If you add/change tokens here, fix PL/pgSQL to match! + * + * UIDENT and USCONST are reduced to IDENT and SCONST in parser.c, so that + * they need no productions here; but we must assign token codes to them. + * + * DOT_DOT is unused in the core SQL grammar, and so will always provoke + * parse errors. It is needed by PL/pgSQL. + */ +%token IDENT UIDENT FCONST SCONST USCONST BCONST XCONST Op +%token ICONST PARAM +%token TYPECAST DOT_DOT COLON_EQUALS EQUALS_GREATER +%token LESS_EQUALS GREATER_EQUALS NOT_EQUALS + +/* + * If you want to make any keyword changes, update the keyword table in + * src/include/parser/kwlist.h and add new keywords to the appropriate one + * of the reserved-or-not-so-reserved keyword lists, below; search + * this file for "Keyword category lists". + */ + +/* ordinary key words in alphabetical order */ +%token ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER + AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC + ASENSITIVE ASSERTION ASSIGNMENT ASYMMETRIC ATOMIC AT ATTACH ATTRIBUTE AUTHORIZATION + + BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT + BOOLEAN_P BOTH BREADTH BY + + CACHE CALL CALLED CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHAR_P + CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE + CLUSTER COALESCE COLLATE COLLATION COLUMN COLUMNS COMMENT COMMENTS COMMIT + COMMITTED COMPRESSION CONCURRENTLY CONFIGURATION CONFLICT + CONNECTION CONSTRAINT CONSTRAINTS CONTENT_P CONTINUE_P CONVERSION_P COPY + COST CREATE CROSS CSV CUBE CURRENT_P + CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA + CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE + + DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS + DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DEPENDS DEPTH DESC + DETACH DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P + DOUBLE_P DROP + + EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ENUM_P ESCAPE EVENT EXCEPT + EXCLUDE EXCLUDING EXCLUSIVE EXECUTE EXISTS EXPLAIN EXPRESSION + EXTENSION EXTERNAL EXTRACT + + FALSE_P FAMILY FETCH FILTER FINALIZE FIRST_P FLOAT_P FOLLOWING FOR + FORCE FOREIGN FORWARD FREEZE FROM FULL FUNCTION FUNCTIONS + + GENERATED GLOBAL GRANT GRANTED GREATEST GROUP_P GROUPING GROUPS + + HANDLER HAVING HEADER_P HOLD HOUR_P + + IDENTITY_P IF_P ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IMPORT_P IN_P INCLUDE + INCLUDING INCREMENT INDEX INDEXES INHERIT INHERITS INITIALLY INLINE_P + INNER_P INOUT INPUT_P INSENSITIVE INSERT INSTEAD INT_P INTEGER + INTERSECT INTERVAL INTO INVOKER IS ISNULL ISOLATION + + JOIN + + KEY + + LABEL LANGUAGE LARGE_P LAST_P LATERAL_P + LEADING LEAKPROOF LEAST LEFT LEVEL LIKE LIMIT LISTEN LOAD LOCAL + LOCALTIME LOCALTIMESTAMP LOCATION LOCK_P LOCKED LOGGED + + MAPPING MATCH MATERIALIZED MAXVALUE METHOD MINUTE_P MINVALUE MODE MONTH_P MOVE + + NAME_P NAMES NATIONAL NATURAL NCHAR NEW NEXT NFC NFD NFKC NFKD NO NONE + NORMALIZE NORMALIZED + NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF + NULLS_P NUMERIC + + OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OPTIONS OR + ORDER ORDINALITY OTHERS OUT_P OUTER_P + OVER OVERLAPS OVERLAY OVERRIDING OWNED OWNER + + PARALLEL PARSER PARTIAL PARTITION PASSING PASSWORD PLACING PLANS POLICY + POSITION PRECEDING PRECISION PRESERVE PREPARE PREPARED PRIMARY + PRIOR PRIVILEGES PROCEDURAL PROCEDURE PROCEDURES PROGRAM PUBLICATION + + QUOTE + + RANGE READ REAL REASSIGN RECHECK RECURSIVE REF REFERENCES REFERENCING + REFRESH REINDEX RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA + RESET RESTART RESTRICT RETURN RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP + ROUTINE ROUTINES ROW ROWS RULE + + SAVEPOINT SCHEMA SCHEMAS SCROLL SEARCH SECOND_P SECURITY SELECT SEQUENCE SEQUENCES + SERIALIZABLE SERVER SESSION SESSION_USER SET SETS SETOF SHARE SHOW + SIMILAR SIMPLE SKIP SMALLINT SNAPSHOT SOME SQL_P STABLE STANDALONE_P + START STATEMENT STATISTICS STDIN STDOUT STORAGE STORED STRICT_P STRIP_P + SUBSCRIPTION SUBSTRING SUPPORT SYMMETRIC SYSID SYSTEM_P + + TABLE TABLES TABLESAMPLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN + TIES TIME TIMESTAMP TO TRAILING TRANSACTION TRANSFORM + TREAT TRIGGER TRIM TRUE_P + TRUNCATE TRUSTED TYPE_P TYPES_P + + UESCAPE UNBOUNDED UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN + UNLISTEN UNLOGGED UNTIL UPDATE USER USING + + VACUUM VALID VALIDATE VALIDATOR VALUE_P VALUES VARCHAR VARIADIC VARYING + VERBOSE VERSION_P VIEW VIEWS VOLATILE + + WHEN WHERE WHITESPACE_P WINDOW WITH WITHIN WITHOUT WORK WRAPPER WRITE + + XML_P XMLATTRIBUTES XMLCONCAT XMLELEMENT XMLEXISTS XMLFOREST XMLNAMESPACES + XMLPARSE XMLPI XMLROOT XMLSERIALIZE XMLTABLE + + YEAR_P YES_P + + ZONE + +/* + * The grammar thinks these are keywords, but they are not in the kwlist.h + * list and so can never be entered directly. The filter in parser.c + * creates these tokens when required (based on looking one token ahead). + * + * NOT_LA exists so that productions such as NOT LIKE can be given the same + * precedence as LIKE; otherwise they'd effectively have the same precedence + * as NOT, at least with respect to their left-hand subexpression. + * NULLS_LA and WITH_LA are needed to make the grammar LALR(1). + */ +%token NOT_LA NULLS_LA WITH_LA + +/* + * The grammar likewise thinks these tokens are keywords, but they are never + * generated by the scanner. Rather, they can be injected by parser.c as + * the initial token of the string (using the lookahead-token mechanism + * implemented there). This provides a way to tell the grammar to parse + * something other than the usual list of SQL commands. + */ +%token MODE_TYPE_NAME +%token MODE_PLPGSQL_EXPR +%token MODE_PLPGSQL_ASSIGN1 +%token MODE_PLPGSQL_ASSIGN2 +%token MODE_PLPGSQL_ASSIGN3 + + +/* Precedence: lowest to highest */ +%nonassoc SET /* see relation_expr_opt_alias */ +%left UNION EXCEPT +%left INTERSECT +%left OR +%left AND +%right NOT +%nonassoc IS ISNULL NOTNULL /* IS sets precedence for IS NULL, etc */ +%nonassoc '<' '>' '=' LESS_EQUALS GREATER_EQUALS NOT_EQUALS +%nonassoc BETWEEN IN_P LIKE ILIKE SIMILAR NOT_LA +%nonassoc ESCAPE /* ESCAPE must be just above LIKE/ILIKE/SIMILAR */ +/* + * To support target_el without AS, it used to be necessary to assign IDENT an + * explicit precedence just less than Op. While that's not really necessary + * since we removed postfix operators, it's still helpful to do so because + * there are some other unreserved keywords that need precedence assignments. + * If those keywords have the same precedence as IDENT then they clearly act + * the same as non-keywords, reducing the risk of unwanted precedence effects. + * + * We need to do this for PARTITION, RANGE, ROWS, and GROUPS to support + * opt_existing_window_name (see comment there). + * + * The frame_bound productions UNBOUNDED PRECEDING and UNBOUNDED FOLLOWING + * are even messier: since UNBOUNDED is an unreserved keyword (per spec!), + * there is no principled way to distinguish these from the productions + * a_expr PRECEDING/FOLLOWING. We hack this up by giving UNBOUNDED slightly + * lower precedence than PRECEDING and FOLLOWING. At present this doesn't + * appear to cause UNBOUNDED to be treated differently from other unreserved + * keywords anywhere else in the grammar, but it's definitely risky. We can + * blame any funny behavior of UNBOUNDED on the SQL standard, though. + * + * To support CUBE and ROLLUP in GROUP BY without reserving them, we give them + * an explicit priority lower than '(', so that a rule with CUBE '(' will shift + * rather than reducing a conflicting rule that takes CUBE as a function name. + * Using the same precedence as IDENT seems right for the reasons given above. + */ +%nonassoc UNBOUNDED /* ideally would have same precedence as IDENT */ +%nonassoc IDENT PARTITION RANGE ROWS GROUPS PRECEDING FOLLOWING CUBE ROLLUP +%left Op OPERATOR /* multi-character ops and user-defined operators */ +%left '+' '-' +%left '*' '/' '%' +%left '^' +/* Unary Operators */ +%left AT /* sets precedence for AT TIME ZONE */ +%left COLLATE +%right UMINUS +%left '[' ']' +%left '(' ')' +%left TYPECAST +%left '.' +/* + * These might seem to be low-precedence, but actually they are not part + * of the arithmetic hierarchy at all in their use as JOIN operators. + * We make them high-precedence to support their use as function names. + * They wouldn't be given a precedence at all, were it not that we need + * left-associativity among the JOIN rules themselves. + */ +%left JOIN CROSS LEFT FULL RIGHT INNER_P NATURAL + +%% + +/* + * The target production for the whole parse. + * + * Ordinarily we parse a list of statements, but if we see one of the + * special MODE_XXX symbols as first token, we parse something else. + * The options here correspond to enum RawParseMode, which see for details. + */ +parse_toplevel: + stmtmulti + { + pg_yyget_extra(yyscanner)->parsetree = $1; + } + | MODE_TYPE_NAME Typename + { + pg_yyget_extra(yyscanner)->parsetree = list_make1($2); + } + | MODE_PLPGSQL_EXPR PLpgSQL_Expr + { + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt($2, 0)); + } + | MODE_PLPGSQL_ASSIGN1 PLAssignStmt + { + PLAssignStmt *n = (PLAssignStmt *) $2; + n->nnames = 1; + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt((Node *) n, 0)); + } + | MODE_PLPGSQL_ASSIGN2 PLAssignStmt + { + PLAssignStmt *n = (PLAssignStmt *) $2; + n->nnames = 2; + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt((Node *) n, 0)); + } + | MODE_PLPGSQL_ASSIGN3 PLAssignStmt + { + PLAssignStmt *n = (PLAssignStmt *) $2; + n->nnames = 3; + pg_yyget_extra(yyscanner)->parsetree = + list_make1(makeRawStmt((Node *) n, 0)); + } + ; + +/* + * At top level, we wrap each stmt with a RawStmt node carrying start location + * and length of the stmt's text. Notice that the start loc/len are driven + * entirely from semicolon locations (@2). It would seem natural to use + * @1 or @3 to get the true start location of a stmt, but that doesn't work + * for statements that can start with empty nonterminals (opt_with_clause is + * the main offender here); as noted in the comments for YYLLOC_DEFAULT, + * we'd get -1 for the location in such cases. + * We also take care to discard empty statements entirely. + */ +stmtmulti: stmtmulti ';' toplevel_stmt + { + if ($1 != NIL) + { + /* update length of previous stmt */ + updateRawStmtEnd(llast_node(RawStmt, $1), @2); + } + if ($3 != NULL) + $$ = lappend($1, makeRawStmt($3, @2 + 1)); + else + $$ = $1; + } + | toplevel_stmt + { + if ($1 != NULL) + $$ = list_make1(makeRawStmt($1, 0)); + else + $$ = NIL; + } + ; + +/* + * toplevel_stmt includes BEGIN and END. stmt does not include them, because + * those words have different meanings in function bodys. + */ +toplevel_stmt: + stmt + | TransactionStmtLegacy + ; + +stmt: + AlterEventTrigStmt + | AlterCollationStmt + | AlterDatabaseStmt + | AlterDatabaseSetStmt + | AlterDefaultPrivilegesStmt + | AlterDomainStmt + | AlterEnumStmt + | AlterExtensionStmt + | AlterExtensionContentsStmt + | AlterFdwStmt + | AlterForeignServerStmt + | AlterFunctionStmt + | AlterGroupStmt + | AlterObjectDependsStmt + | AlterObjectSchemaStmt + | AlterOwnerStmt + | AlterOperatorStmt + | AlterTypeStmt + | AlterPolicyStmt + | AlterSeqStmt + | AlterSystemStmt + | AlterTableStmt + | AlterTblSpcStmt + | AlterCompositeTypeStmt + | AlterPublicationStmt + | AlterRoleSetStmt + | AlterRoleStmt + | AlterSubscriptionStmt + | AlterStatsStmt + | AlterTSConfigurationStmt + | AlterTSDictionaryStmt + | AlterUserMappingStmt + | AnalyzeStmt + | CallStmt + | CheckPointStmt + | ClosePortalStmt + | ClusterStmt + | CommentStmt + | ConstraintsSetStmt + | CopyStmt + | CreateAmStmt + | CreateAsStmt + | CreateAssertionStmt + | CreateCastStmt + | CreateConversionStmt + | CreateDomainStmt + | CreateExtensionStmt + | CreateFdwStmt + | CreateForeignServerStmt + | CreateForeignTableStmt + | CreateFunctionStmt + | CreateGroupStmt + | CreateMatViewStmt + | CreateOpClassStmt + | CreateOpFamilyStmt + | CreatePublicationStmt + | AlterOpFamilyStmt + | CreatePolicyStmt + | CreatePLangStmt + | CreateSchemaStmt + | CreateSeqStmt + | CreateStmt + | CreateSubscriptionStmt + | CreateStatsStmt + | CreateTableSpaceStmt + | CreateTransformStmt + | CreateTrigStmt + | CreateEventTrigStmt + | CreateRoleStmt + | CreateUserStmt + | CreateUserMappingStmt + | CreatedbStmt + | DeallocateStmt + | DeclareCursorStmt + | DefineStmt + | DeleteStmt + | DiscardStmt + | DoStmt + | DropCastStmt + | DropOpClassStmt + | DropOpFamilyStmt + | DropOwnedStmt + | DropStmt + | DropSubscriptionStmt + | DropTableSpaceStmt + | DropTransformStmt + | DropRoleStmt + | DropUserMappingStmt + | DropdbStmt + | ExecuteStmt + | ExplainStmt + | FetchStmt + | GrantStmt + | GrantRoleStmt + | ImportForeignSchemaStmt + | IndexStmt + | InsertStmt + | ListenStmt + | RefreshMatViewStmt + | LoadStmt + | LockStmt + | NotifyStmt + | PrepareStmt + | ReassignOwnedStmt + | ReindexStmt + | RemoveAggrStmt + | RemoveFuncStmt + | RemoveOperStmt + | RenameStmt + | RevokeStmt + | RevokeRoleStmt + | RuleStmt + | SecLabelStmt + | SelectStmt + | TransactionStmt + | TruncateStmt + | UnlistenStmt + | UpdateStmt + | VacuumStmt + | VariableResetStmt + | VariableSetStmt + | VariableShowStmt + | ViewStmt + | /*EMPTY*/ + { $$ = NULL; } + ; + +/***************************************************************************** + * + * CALL statement + * + *****************************************************************************/ + +CallStmt: CALL func_application + { + CallStmt *n = makeNode(CallStmt); + n->funccall = castNode(FuncCall, $2); + $$ = (Node *)n; + } + ; + +/***************************************************************************** + * + * Create a new Postgres DBMS role + * + *****************************************************************************/ + +CreateRoleStmt: + CREATE ROLE RoleId opt_with OptRoleList + { + CreateRoleStmt *n = makeNode(CreateRoleStmt); + n->stmt_type = ROLESTMT_ROLE; + n->role = $3; + n->options = $5; + $$ = (Node *)n; + } + ; + + +opt_with: WITH + | WITH_LA + | /*EMPTY*/ + ; + +/* + * Options for CREATE ROLE and ALTER ROLE (also used by CREATE/ALTER USER + * for backwards compatibility). Note: the only option required by SQL99 + * is "WITH ADMIN name". + */ +OptRoleList: + OptRoleList CreateOptRoleElem { $$ = lappend($1, $2); } + | /* EMPTY */ { $$ = NIL; } + ; + +AlterOptRoleList: + AlterOptRoleList AlterOptRoleElem { $$ = lappend($1, $2); } + | /* EMPTY */ { $$ = NIL; } + ; + +AlterOptRoleElem: + PASSWORD Sconst + { + $$ = makeDefElem("password", + (Node *)makeString($2), @1); + } + | PASSWORD NULL_P + { + $$ = makeDefElem("password", NULL, @1); + } + | ENCRYPTED PASSWORD Sconst + { + /* + * These days, passwords are always stored in encrypted + * form, so there is no difference between PASSWORD and + * ENCRYPTED PASSWORD. + */ + $$ = makeDefElem("password", + (Node *)makeString($3), @1); + } + | UNENCRYPTED PASSWORD Sconst + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("UNENCRYPTED PASSWORD is no longer supported"), + errhint("Remove UNENCRYPTED to store the password in encrypted form instead."), + parser_errposition(@1))); + } + | INHERIT + { + $$ = makeDefElem("inherit", (Node *)makeInteger(true), @1); + } + | CONNECTION LIMIT SignedIconst + { + $$ = makeDefElem("connectionlimit", (Node *)makeInteger($3), @1); + } + | VALID UNTIL Sconst + { + $$ = makeDefElem("validUntil", (Node *)makeString($3), @1); + } + /* Supported but not documented for roles, for use by ALTER GROUP. */ + | USER role_list + { + $$ = makeDefElem("rolemembers", (Node *)$2, @1); + } + | IDENT + { + /* + * We handle identifiers that aren't parser keywords with + * the following special-case codes, to avoid bloating the + * size of the main parser. + */ + if (strcmp($1, "superuser") == 0) + $$ = makeDefElem("superuser", (Node *)makeInteger(true), @1); + else if (strcmp($1, "nosuperuser") == 0) + $$ = makeDefElem("superuser", (Node *)makeInteger(false), @1); + else if (strcmp($1, "createrole") == 0) + $$ = makeDefElem("createrole", (Node *)makeInteger(true), @1); + else if (strcmp($1, "nocreaterole") == 0) + $$ = makeDefElem("createrole", (Node *)makeInteger(false), @1); + else if (strcmp($1, "replication") == 0) + $$ = makeDefElem("isreplication", (Node *)makeInteger(true), @1); + else if (strcmp($1, "noreplication") == 0) + $$ = makeDefElem("isreplication", (Node *)makeInteger(false), @1); + else if (strcmp($1, "createdb") == 0) + $$ = makeDefElem("createdb", (Node *)makeInteger(true), @1); + else if (strcmp($1, "nocreatedb") == 0) + $$ = makeDefElem("createdb", (Node *)makeInteger(false), @1); + else if (strcmp($1, "login") == 0) + $$ = makeDefElem("canlogin", (Node *)makeInteger(true), @1); + else if (strcmp($1, "nologin") == 0) + $$ = makeDefElem("canlogin", (Node *)makeInteger(false), @1); + else if (strcmp($1, "bypassrls") == 0) + $$ = makeDefElem("bypassrls", (Node *)makeInteger(true), @1); + else if (strcmp($1, "nobypassrls") == 0) + $$ = makeDefElem("bypassrls", (Node *)makeInteger(false), @1); + else if (strcmp($1, "noinherit") == 0) + { + /* + * Note that INHERIT is a keyword, so it's handled by main parser, but + * NOINHERIT is handled here. + */ + $$ = makeDefElem("inherit", (Node *)makeInteger(false), @1); + } + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized role option \"%s\"", $1), + parser_errposition(@1))); + } + ; + +CreateOptRoleElem: + AlterOptRoleElem { $$ = $1; } + /* The following are not supported by ALTER ROLE/USER/GROUP */ + | SYSID Iconst + { + $$ = makeDefElem("sysid", (Node *)makeInteger($2), @1); + } + | ADMIN role_list + { + $$ = makeDefElem("adminmembers", (Node *)$2, @1); + } + | ROLE role_list + { + $$ = makeDefElem("rolemembers", (Node *)$2, @1); + } + | IN_P ROLE role_list + { + $$ = makeDefElem("addroleto", (Node *)$3, @1); + } + | IN_P GROUP_P role_list + { + $$ = makeDefElem("addroleto", (Node *)$3, @1); + } + ; + + +/***************************************************************************** + * + * Create a new Postgres DBMS user (role with implied login ability) + * + *****************************************************************************/ + +CreateUserStmt: + CREATE USER RoleId opt_with OptRoleList + { + CreateRoleStmt *n = makeNode(CreateRoleStmt); + n->stmt_type = ROLESTMT_USER; + n->role = $3; + n->options = $5; + $$ = (Node *)n; + } + ; + + +/***************************************************************************** + * + * Alter a postgresql DBMS role + * + *****************************************************************************/ + +AlterRoleStmt: + ALTER ROLE RoleSpec opt_with AlterOptRoleList + { + AlterRoleStmt *n = makeNode(AlterRoleStmt); + n->role = $3; + n->action = +1; /* add, if there are members */ + n->options = $5; + $$ = (Node *)n; + } + | ALTER USER RoleSpec opt_with AlterOptRoleList + { + AlterRoleStmt *n = makeNode(AlterRoleStmt); + n->role = $3; + n->action = +1; /* add, if there are members */ + n->options = $5; + $$ = (Node *)n; + } + ; + +opt_in_database: + /* EMPTY */ { $$ = NULL; } + | IN_P DATABASE name { $$ = $3; } + ; + +AlterRoleSetStmt: + ALTER ROLE RoleSpec opt_in_database SetResetClause + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = $3; + n->database = $4; + n->setstmt = $5; + $$ = (Node *)n; + } + | ALTER ROLE ALL opt_in_database SetResetClause + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = NULL; + n->database = $4; + n->setstmt = $5; + $$ = (Node *)n; + } + | ALTER USER RoleSpec opt_in_database SetResetClause + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = $3; + n->database = $4; + n->setstmt = $5; + $$ = (Node *)n; + } + | ALTER USER ALL opt_in_database SetResetClause + { + AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt); + n->role = NULL; + n->database = $4; + n->setstmt = $5; + $$ = (Node *)n; + } + ; + + +/***************************************************************************** + * + * Drop a postgresql DBMS role + * + * XXX Ideally this would have CASCADE/RESTRICT options, but a role + * might own objects in multiple databases, and there is presently no way to + * implement cascading to other databases. So we always behave as RESTRICT. + *****************************************************************************/ + +DropRoleStmt: + DROP ROLE role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = false; + n->roles = $3; + $$ = (Node *)n; + } + | DROP ROLE IF_P EXISTS role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = true; + n->roles = $5; + $$ = (Node *)n; + } + | DROP USER role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = false; + n->roles = $3; + $$ = (Node *)n; + } + | DROP USER IF_P EXISTS role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->roles = $5; + n->missing_ok = true; + $$ = (Node *)n; + } + | DROP GROUP_P role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = false; + n->roles = $3; + $$ = (Node *)n; + } + | DROP GROUP_P IF_P EXISTS role_list + { + DropRoleStmt *n = makeNode(DropRoleStmt); + n->missing_ok = true; + n->roles = $5; + $$ = (Node *)n; + } + ; + + +/***************************************************************************** + * + * Create a postgresql group (role without login ability) + * + *****************************************************************************/ + +CreateGroupStmt: + CREATE GROUP_P RoleId opt_with OptRoleList + { + CreateRoleStmt *n = makeNode(CreateRoleStmt); + n->stmt_type = ROLESTMT_GROUP; + n->role = $3; + n->options = $5; + $$ = (Node *)n; + } + ; + + +/***************************************************************************** + * + * Alter a postgresql group + * + *****************************************************************************/ + +AlterGroupStmt: + ALTER GROUP_P RoleSpec add_drop USER role_list + { + AlterRoleStmt *n = makeNode(AlterRoleStmt); + n->role = $3; + n->action = $4; + n->options = list_make1(makeDefElem("rolemembers", + (Node *)$6, @6)); + $$ = (Node *)n; + } + ; + +add_drop: ADD_P { $$ = +1; } + | DROP { $$ = -1; } + ; + + +/***************************************************************************** + * + * Manipulate a schema + * + *****************************************************************************/ + +CreateSchemaStmt: + CREATE SCHEMA OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* One can omit the schema name or the authorization id. */ + n->schemaname = $3; + n->authrole = $5; + n->schemaElts = $6; + n->if_not_exists = false; + $$ = (Node *)n; + } + | CREATE SCHEMA ColId OptSchemaEltList + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* ...but not both */ + n->schemaname = $3; + n->authrole = NULL; + n->schemaElts = $4; + n->if_not_exists = false; + $$ = (Node *)n; + } + | CREATE SCHEMA IF_P NOT EXISTS OptSchemaName AUTHORIZATION RoleSpec OptSchemaEltList + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* schema name can be omitted here, too */ + n->schemaname = $6; + n->authrole = $8; + if ($9 != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE SCHEMA IF NOT EXISTS cannot include schema elements"), + parser_errposition(@9))); + n->schemaElts = $9; + n->if_not_exists = true; + $$ = (Node *)n; + } + | CREATE SCHEMA IF_P NOT EXISTS ColId OptSchemaEltList + { + CreateSchemaStmt *n = makeNode(CreateSchemaStmt); + /* ...but not here */ + n->schemaname = $6; + n->authrole = NULL; + if ($7 != NIL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE SCHEMA IF NOT EXISTS cannot include schema elements"), + parser_errposition(@7))); + n->schemaElts = $7; + n->if_not_exists = true; + $$ = (Node *)n; + } + ; + +OptSchemaName: + ColId { $$ = $1; } + | /* EMPTY */ { $$ = NULL; } + ; + +OptSchemaEltList: + OptSchemaEltList schema_stmt + { + if (@$ < 0) /* see comments for YYLLOC_DEFAULT */ + @$ = @2; + $$ = lappend($1, $2); + } + | /* EMPTY */ + { $$ = NIL; } + ; + +/* + * schema_stmt are the ones that can show up inside a CREATE SCHEMA + * statement (in addition to by themselves). + */ +schema_stmt: + CreateStmt + | IndexStmt + | CreateSeqStmt + | CreateTrigStmt + | GrantStmt + | ViewStmt + ; + + +/***************************************************************************** + * + * Set PG internal variable + * SET name TO 'var_value' + * Include SQL syntax (thomas 1997-10-22): + * SET TIME ZONE 'var_value' + * + *****************************************************************************/ + +VariableSetStmt: + SET set_rest + { + VariableSetStmt *n = $2; + n->is_local = false; + $$ = (Node *) n; + } + | SET LOCAL set_rest + { + VariableSetStmt *n = $3; + n->is_local = true; + $$ = (Node *) n; + } + | SET SESSION set_rest + { + VariableSetStmt *n = $3; + n->is_local = false; + $$ = (Node *) n; + } + ; + +set_rest: + TRANSACTION transaction_mode_list + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_MULTI; + n->name = "TRANSACTION"; + n->args = $2; + $$ = n; + } + | SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_MULTI; + n->name = "SESSION CHARACTERISTICS"; + n->args = $5; + $$ = n; + } + | set_rest_more + ; + +generic_set: + var_name TO var_list + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = $1; + n->args = $3; + $$ = n; + } + | var_name '=' var_list + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = $1; + n->args = $3; + $$ = n; + } + | var_name TO DEFAULT + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_DEFAULT; + n->name = $1; + $$ = n; + } + | var_name '=' DEFAULT + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_DEFAULT; + n->name = $1; + $$ = n; + } + ; + +set_rest_more: /* Generic SET syntaxes: */ + generic_set {$$ = $1;} + | var_name FROM CURRENT_P + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_CURRENT; + n->name = $1; + $$ = n; + } + /* Special syntaxes mandated by SQL standard: */ + | TIME ZONE zone_value + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "timezone"; + if ($3 != NULL) + n->args = list_make1($3); + else + n->kind = VAR_SET_DEFAULT; + $$ = n; + } + | CATALOG_P Sconst + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("current database cannot be changed"), + parser_errposition(@2))); + $$ = NULL; /*not reached*/ + } + | SCHEMA Sconst + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "search_path"; + n->args = list_make1(makeStringConst($2, @2)); + $$ = n; + } + | NAMES opt_encoding + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "client_encoding"; + if ($2 != NULL) + n->args = list_make1(makeStringConst($2, @2)); + else + n->kind = VAR_SET_DEFAULT; + $$ = n; + } + | ROLE NonReservedWord_or_Sconst + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "role"; + n->args = list_make1(makeStringConst($2, @2)); + $$ = n; + } + | SESSION AUTHORIZATION NonReservedWord_or_Sconst + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "session_authorization"; + n->args = list_make1(makeStringConst($3, @3)); + $$ = n; + } + | SESSION AUTHORIZATION DEFAULT + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_DEFAULT; + n->name = "session_authorization"; + $$ = n; + } + | XML_P OPTION document_or_content + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "xmloption"; + n->args = list_make1(makeStringConst($3 == XMLOPTION_DOCUMENT ? "DOCUMENT" : "CONTENT", @3)); + $$ = n; + } + /* Special syntaxes invented by PostgreSQL: */ + | TRANSACTION SNAPSHOT Sconst + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_MULTI; + n->name = "TRANSACTION SNAPSHOT"; + n->args = list_make1(makeStringConst($3, @3)); + $$ = n; + } + ; + +var_name: ColId { $$ = $1; } + | var_name '.' ColId + { $$ = psprintf("%s.%s", $1, $3); } + ; + +var_list: var_value { $$ = list_make1($1); } + | var_list ',' var_value { $$ = lappend($1, $3); } + ; + +var_value: opt_boolean_or_string + { $$ = makeStringConst($1, @1); } + | NumericOnly + { $$ = makeAConst($1, @1); } + ; + +iso_level: READ UNCOMMITTED { $$ = "read uncommitted"; } + | READ COMMITTED { $$ = "read committed"; } + | REPEATABLE READ { $$ = "repeatable read"; } + | SERIALIZABLE { $$ = "serializable"; } + ; + +opt_boolean_or_string: + TRUE_P { $$ = "true"; } + | FALSE_P { $$ = "false"; } + | ON { $$ = "on"; } + /* + * OFF is also accepted as a boolean value, but is handled by + * the NonReservedWord rule. The action for booleans and strings + * is the same, so we don't need to distinguish them here. + */ + | NonReservedWord_or_Sconst { $$ = $1; } + ; + +/* Timezone values can be: + * - a string such as 'pst8pdt' + * - an identifier such as "pst8pdt" + * - an integer or floating point number + * - a time interval per SQL99 + * ColId gives reduce/reduce errors against ConstInterval and LOCAL, + * so use IDENT (meaning we reject anything that is a key word). + */ +zone_value: + Sconst + { + $$ = makeStringConst($1, @1); + } + | IDENT + { + $$ = makeStringConst($1, @1); + } + | ConstInterval Sconst opt_interval + { + TypeName *t = $1; + if ($3 != NIL) + { + A_Const *n = (A_Const *) linitial($3); + if ((n->val.val.ival & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("time zone interval must be HOUR or HOUR TO MINUTE"), + parser_errposition(@3))); + } + t->typmods = $3; + $$ = makeStringConstCast($2, @2, t); + } + | ConstInterval '(' Iconst ')' Sconst + { + TypeName *t = $1; + t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), + makeIntConst($3, @3)); + $$ = makeStringConstCast($5, @5, t); + } + | NumericOnly { $$ = makeAConst($1, @1); } + | DEFAULT { $$ = NULL; } + | LOCAL { $$ = NULL; } + ; + +opt_encoding: + Sconst { $$ = $1; } + | DEFAULT { $$ = NULL; } + | /*EMPTY*/ { $$ = NULL; } + ; + +NonReservedWord_or_Sconst: + NonReservedWord { $$ = $1; } + | Sconst { $$ = $1; } + ; + +VariableResetStmt: + RESET reset_rest { $$ = (Node *) $2; } + ; + +reset_rest: + generic_reset { $$ = $1; } + | TIME ZONE + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = "timezone"; + $$ = n; + } + | TRANSACTION ISOLATION LEVEL + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = "transaction_isolation"; + $$ = n; + } + | SESSION AUTHORIZATION + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = "session_authorization"; + $$ = n; + } + ; + +generic_reset: + var_name + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET; + n->name = $1; + $$ = n; + } + | ALL + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_RESET_ALL; + $$ = n; + } + ; + +/* SetResetClause allows SET or RESET without LOCAL */ +SetResetClause: + SET set_rest { $$ = $2; } + | VariableResetStmt { $$ = (VariableSetStmt *) $1; } + ; + +/* SetResetClause allows SET or RESET without LOCAL */ +FunctionSetResetClause: + SET set_rest_more { $$ = $2; } + | VariableResetStmt { $$ = (VariableSetStmt *) $1; } + ; + + +VariableShowStmt: + SHOW var_name + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = $2; + $$ = (Node *) n; + } + | SHOW TIME ZONE + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "timezone"; + $$ = (Node *) n; + } + | SHOW TRANSACTION ISOLATION LEVEL + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "transaction_isolation"; + $$ = (Node *) n; + } + | SHOW SESSION AUTHORIZATION + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "session_authorization"; + $$ = (Node *) n; + } + | SHOW ALL + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "all"; + $$ = (Node *) n; + } + ; + + +ConstraintsSetStmt: + SET CONSTRAINTS constraints_set_list constraints_set_mode + { + ConstraintsSetStmt *n = makeNode(ConstraintsSetStmt); + n->constraints = $3; + n->deferred = $4; + $$ = (Node *) n; + } + ; + +constraints_set_list: + ALL { $$ = NIL; } + | qualified_name_list { $$ = $1; } + ; + +constraints_set_mode: + DEFERRED { $$ = true; } + | IMMEDIATE { $$ = false; } + ; + + +/* + * Checkpoint statement + */ +CheckPointStmt: + CHECKPOINT + { + CheckPointStmt *n = makeNode(CheckPointStmt); + $$ = (Node *)n; + } + ; + + +/***************************************************************************** + * + * DISCARD { ALL | TEMP | PLANS | SEQUENCES } + * + *****************************************************************************/ + +DiscardStmt: + DISCARD ALL + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_ALL; + $$ = (Node *) n; + } + | DISCARD TEMP + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_TEMP; + $$ = (Node *) n; + } + | DISCARD TEMPORARY + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_TEMP; + $$ = (Node *) n; + } + | DISCARD PLANS + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_PLANS; + $$ = (Node *) n; + } + | DISCARD SEQUENCES + { + DiscardStmt *n = makeNode(DiscardStmt); + n->target = DISCARD_SEQUENCES; + $$ = (Node *) n; + } + + ; + + +/***************************************************************************** + * + * ALTER [ TABLE | INDEX | SEQUENCE | VIEW | MATERIALIZED VIEW | FOREIGN TABLE ] variations + * + * Note: we accept all subcommands for each of the variants, and sort + * out what's really legal at execution time. + *****************************************************************************/ + +AlterTableStmt: + ALTER TABLE relation_expr alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $3; + n->cmds = $4; + n->objtype = OBJECT_TABLE; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $5; + n->cmds = $6; + n->objtype = OBJECT_TABLE; + n->missing_ok = true; + $$ = (Node *)n; + } + | ALTER TABLE relation_expr partition_cmd + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $3; + n->cmds = list_make1($4); + n->objtype = OBJECT_TABLE; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER TABLE IF_P EXISTS relation_expr partition_cmd + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $5; + n->cmds = list_make1($6); + n->objtype = OBJECT_TABLE; + n->missing_ok = true; + $$ = (Node *)n; + } + | ALTER TABLE ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = $6; + n->objtype = OBJECT_TABLE; + n->roles = NIL; + n->new_tablespacename = $9; + n->nowait = $10; + $$ = (Node *)n; + } + | ALTER TABLE ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = $6; + n->objtype = OBJECT_TABLE; + n->roles = $9; + n->new_tablespacename = $12; + n->nowait = $13; + $$ = (Node *)n; + } + | ALTER INDEX qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $3; + n->cmds = $4; + n->objtype = OBJECT_INDEX; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $5; + n->cmds = $6; + n->objtype = OBJECT_INDEX; + n->missing_ok = true; + $$ = (Node *)n; + } + | ALTER INDEX qualified_name index_partition_cmd + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $3; + n->cmds = list_make1($4); + n->objtype = OBJECT_INDEX; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER INDEX ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = $6; + n->objtype = OBJECT_INDEX; + n->roles = NIL; + n->new_tablespacename = $9; + n->nowait = $10; + $$ = (Node *)n; + } + | ALTER INDEX ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = $6; + n->objtype = OBJECT_INDEX; + n->roles = $9; + n->new_tablespacename = $12; + n->nowait = $13; + $$ = (Node *)n; + } + | ALTER SEQUENCE qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $3; + n->cmds = $4; + n->objtype = OBJECT_SEQUENCE; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $5; + n->cmds = $6; + n->objtype = OBJECT_SEQUENCE; + n->missing_ok = true; + $$ = (Node *)n; + } + | ALTER VIEW qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $3; + n->cmds = $4; + n->objtype = OBJECT_VIEW; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $5; + n->cmds = $6; + n->objtype = OBJECT_VIEW; + n->missing_ok = true; + $$ = (Node *)n; + } + | ALTER MATERIALIZED VIEW qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $4; + n->cmds = $5; + n->objtype = OBJECT_MATVIEW; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $6; + n->cmds = $7; + n->objtype = OBJECT_MATVIEW; + n->missing_ok = true; + $$ = (Node *)n; + } + | ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = $7; + n->objtype = OBJECT_MATVIEW; + n->roles = NIL; + n->new_tablespacename = $10; + n->nowait = $11; + $$ = (Node *)n; + } + | ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait + { + AlterTableMoveAllStmt *n = + makeNode(AlterTableMoveAllStmt); + n->orig_tablespacename = $7; + n->objtype = OBJECT_MATVIEW; + n->roles = $10; + n->new_tablespacename = $13; + n->nowait = $14; + $$ = (Node *)n; + } + | ALTER FOREIGN TABLE relation_expr alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $4; + n->cmds = $5; + n->objtype = OBJECT_FOREIGN_TABLE; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER FOREIGN TABLE IF_P EXISTS relation_expr alter_table_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + n->relation = $6; + n->cmds = $7; + n->objtype = OBJECT_FOREIGN_TABLE; + n->missing_ok = true; + $$ = (Node *)n; + } + ; + +alter_table_cmds: + alter_table_cmd { $$ = list_make1($1); } + | alter_table_cmds ',' alter_table_cmd { $$ = lappend($1, $3); } + ; + +partition_cmd: + /* ALTER TABLE ATTACH PARTITION FOR VALUES */ + ATTACH PARTITION qualified_name PartitionBoundSpec + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_AttachPartition; + cmd->name = $3; + cmd->bound = $4; + cmd->concurrent = false; + n->def = (Node *) cmd; + + $$ = (Node *) n; + } + /* ALTER TABLE DETACH PARTITION [CONCURRENTLY] */ + | DETACH PARTITION qualified_name opt_concurrently + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_DetachPartition; + cmd->name = $3; + cmd->bound = NULL; + cmd->concurrent = $4; + n->def = (Node *) cmd; + + $$ = (Node *) n; + } + | DETACH PARTITION qualified_name FINALIZE + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_DetachPartitionFinalize; + cmd->name = $3; + cmd->bound = NULL; + cmd->concurrent = false; + n->def = (Node *) cmd; + $$ = (Node *) n; + } + ; + +index_partition_cmd: + /* ALTER INDEX ATTACH PARTITION */ + ATTACH PARTITION qualified_name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + PartitionCmd *cmd = makeNode(PartitionCmd); + + n->subtype = AT_AttachPartition; + cmd->name = $3; + cmd->bound = NULL; + cmd->concurrent = false; + n->def = (Node *) cmd; + + $$ = (Node *) n; + } + ; + +alter_table_cmd: + /* ALTER TABLE ADD */ + ADD_P columnDef + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = $2; + n->missing_ok = false; + $$ = (Node *)n; + } + /* ALTER TABLE ADD IF NOT EXISTS */ + | ADD_P IF_P NOT EXISTS columnDef + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = $5; + n->missing_ok = true; + $$ = (Node *)n; + } + /* ALTER TABLE ADD COLUMN */ + | ADD_P COLUMN columnDef + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = $3; + n->missing_ok = false; + $$ = (Node *)n; + } + /* ALTER TABLE ADD COLUMN IF NOT EXISTS */ + | ADD_P COLUMN IF_P NOT EXISTS columnDef + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = $6; + n->missing_ok = true; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] {SET DEFAULT |DROP DEFAULT} */ + | ALTER opt_column ColId alter_column_default + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ColumnDefault; + n->name = $3; + n->def = $4; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] DROP NOT NULL */ + | ALTER opt_column ColId DROP NOT NULL_P + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropNotNull; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] SET NOT NULL */ + | ALTER opt_column ColId SET NOT NULL_P + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetNotNull; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] DROP EXPRESSION */ + | ALTER opt_column ColId DROP EXPRESSION + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropExpression; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] DROP EXPRESSION IF EXISTS */ + | ALTER opt_column ColId DROP EXPRESSION IF_P EXISTS + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropExpression; + n->name = $3; + n->missing_ok = true; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] SET STATISTICS */ + | ALTER opt_column ColId SET STATISTICS SignedIconst + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetStatistics; + n->name = $3; + n->def = (Node *) makeInteger($6); + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] SET STATISTICS */ + | ALTER opt_column Iconst SET STATISTICS SignedIconst + { + AlterTableCmd *n = makeNode(AlterTableCmd); + + if ($3 <= 0 || $3 > PG_INT16_MAX) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("column number must be in range from 1 to %d", PG_INT16_MAX), + parser_errposition(@3))); + + n->subtype = AT_SetStatistics; + n->num = (int16) $3; + n->def = (Node *) makeInteger($6); + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] SET ( column_parameter = value [, ... ] ) */ + | ALTER opt_column ColId SET reloptions + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetOptions; + n->name = $3; + n->def = (Node *) $5; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] RESET ( column_parameter = value [, ... ] ) */ + | ALTER opt_column ColId RESET reloptions + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ResetOptions; + n->name = $3; + n->def = (Node *) $5; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] SET STORAGE */ + | ALTER opt_column ColId SET STORAGE ColId + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetStorage; + n->name = $3; + n->def = (Node *) makeString($6); + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] SET COMPRESSION */ + | ALTER opt_column ColId SET column_compression + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetCompression; + n->name = $3; + n->def = (Node *) makeString($5); + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] ADD GENERATED ... AS IDENTITY ... */ + | ALTER opt_column ColId ADD_P GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList + { + AlterTableCmd *n = makeNode(AlterTableCmd); + Constraint *c = makeNode(Constraint); + + c->contype = CONSTR_IDENTITY; + c->generated_when = $6; + c->options = $9; + c->location = @5; + + n->subtype = AT_AddIdentity; + n->name = $3; + n->def = (Node *) c; + + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] SET /RESET */ + | ALTER opt_column ColId alter_identity_column_option_list + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetIdentity; + n->name = $3; + n->def = (Node *) $4; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] DROP IDENTITY */ + | ALTER opt_column ColId DROP IDENTITY_P + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropIdentity; + n->name = $3; + n->missing_ok = false; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER [COLUMN] DROP IDENTITY IF EXISTS */ + | ALTER opt_column ColId DROP IDENTITY_P IF_P EXISTS + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropIdentity; + n->name = $3; + n->missing_ok = true; + $$ = (Node *)n; + } + /* ALTER TABLE DROP [COLUMN] IF EXISTS [RESTRICT|CASCADE] */ + | DROP opt_column IF_P EXISTS ColId opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = $5; + n->behavior = $6; + n->missing_ok = true; + $$ = (Node *)n; + } + /* ALTER TABLE DROP [COLUMN] [RESTRICT|CASCADE] */ + | DROP opt_column ColId opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = $3; + n->behavior = $4; + n->missing_ok = false; + $$ = (Node *)n; + } + /* + * ALTER TABLE ALTER [COLUMN] [SET DATA] TYPE + * [ USING ] + */ + | ALTER opt_column ColId opt_set_data TYPE_P Typename opt_collate_clause alter_using + { + AlterTableCmd *n = makeNode(AlterTableCmd); + ColumnDef *def = makeNode(ColumnDef); + n->subtype = AT_AlterColumnType; + n->name = $3; + n->def = (Node *) def; + /* We only use these fields of the ColumnDef node */ + def->typeName = $6; + def->collClause = (CollateClause *) $7; + def->raw_default = $8; + def->location = @3; + $$ = (Node *)n; + } + /* ALTER FOREIGN TABLE ALTER [COLUMN] OPTIONS */ + | ALTER opt_column ColId alter_generic_options + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AlterColumnGenericOptions; + n->name = $3; + n->def = (Node *) $4; + $$ = (Node *)n; + } + /* ALTER TABLE ADD CONSTRAINT ... */ + | ADD_P TableConstraint + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddConstraint; + n->def = $2; + $$ = (Node *)n; + } + /* ALTER TABLE ALTER CONSTRAINT ... */ + | ALTER CONSTRAINT name ConstraintAttributeSpec + { + AlterTableCmd *n = makeNode(AlterTableCmd); + Constraint *c = makeNode(Constraint); + n->subtype = AT_AlterConstraint; + n->def = (Node *) c; + c->contype = CONSTR_FOREIGN; /* others not supported, yet */ + c->conname = $3; + processCASbits($4, @4, "ALTER CONSTRAINT statement", + &c->deferrable, + &c->initdeferred, + NULL, NULL, yyscanner); + $$ = (Node *)n; + } + /* ALTER TABLE VALIDATE CONSTRAINT ... */ + | VALIDATE CONSTRAINT name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ValidateConstraint; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE DROP CONSTRAINT IF EXISTS [RESTRICT|CASCADE] */ + | DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropConstraint; + n->name = $5; + n->behavior = $6; + n->missing_ok = true; + $$ = (Node *)n; + } + /* ALTER TABLE DROP CONSTRAINT [RESTRICT|CASCADE] */ + | DROP CONSTRAINT name opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropConstraint; + n->name = $3; + n->behavior = $4; + n->missing_ok = false; + $$ = (Node *)n; + } + /* ALTER TABLE SET WITHOUT OIDS, for backward compat */ + | SET WITHOUT OIDS + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropOids; + $$ = (Node *)n; + } + /* ALTER TABLE CLUSTER ON */ + | CLUSTER ON name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ClusterOn; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE SET WITHOUT CLUSTER */ + | SET WITHOUT CLUSTER + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropCluster; + n->name = NULL; + $$ = (Node *)n; + } + /* ALTER TABLE SET LOGGED */ + | SET LOGGED + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetLogged; + $$ = (Node *)n; + } + /* ALTER TABLE SET UNLOGGED */ + | SET UNLOGGED + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetUnLogged; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE TRIGGER */ + | ENABLE_P TRIGGER name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableTrig; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE ALWAYS TRIGGER */ + | ENABLE_P ALWAYS TRIGGER name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableAlwaysTrig; + n->name = $4; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE REPLICA TRIGGER */ + | ENABLE_P REPLICA TRIGGER name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableReplicaTrig; + n->name = $4; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE TRIGGER ALL */ + | ENABLE_P TRIGGER ALL + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableTrigAll; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE TRIGGER USER */ + | ENABLE_P TRIGGER USER + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableTrigUser; + $$ = (Node *)n; + } + /* ALTER TABLE DISABLE TRIGGER */ + | DISABLE_P TRIGGER name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableTrig; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE DISABLE TRIGGER ALL */ + | DISABLE_P TRIGGER ALL + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableTrigAll; + $$ = (Node *)n; + } + /* ALTER TABLE DISABLE TRIGGER USER */ + | DISABLE_P TRIGGER USER + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableTrigUser; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE RULE */ + | ENABLE_P RULE name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableRule; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE ALWAYS RULE */ + | ENABLE_P ALWAYS RULE name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableAlwaysRule; + n->name = $4; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE REPLICA RULE */ + | ENABLE_P REPLICA RULE name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableReplicaRule; + n->name = $4; + $$ = (Node *)n; + } + /* ALTER TABLE DISABLE RULE */ + | DISABLE_P RULE name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableRule; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE INHERIT */ + | INHERIT qualified_name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddInherit; + n->def = (Node *) $2; + $$ = (Node *)n; + } + /* ALTER TABLE NO INHERIT */ + | NO INHERIT qualified_name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropInherit; + n->def = (Node *) $3; + $$ = (Node *)n; + } + /* ALTER TABLE OF */ + | OF any_name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + TypeName *def = makeTypeNameFromNameList($2); + def->location = @2; + n->subtype = AT_AddOf; + n->def = (Node *) def; + $$ = (Node *)n; + } + /* ALTER TABLE NOT OF */ + | NOT OF + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropOf; + $$ = (Node *)n; + } + /* ALTER TABLE OWNER TO RoleSpec */ + | OWNER TO RoleSpec + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ChangeOwner; + n->newowner = $3; + $$ = (Node *)n; + } + /* ALTER TABLE SET TABLESPACE */ + | SET TABLESPACE name + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetTableSpace; + n->name = $3; + $$ = (Node *)n; + } + /* ALTER TABLE SET (...) */ + | SET reloptions + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_SetRelOptions; + n->def = (Node *)$2; + $$ = (Node *)n; + } + /* ALTER TABLE RESET (...) */ + | RESET reloptions + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ResetRelOptions; + n->def = (Node *)$2; + $$ = (Node *)n; + } + /* ALTER TABLE REPLICA IDENTITY */ + | REPLICA IDENTITY_P replica_identity + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ReplicaIdentity; + n->def = $3; + $$ = (Node *)n; + } + /* ALTER TABLE ENABLE ROW LEVEL SECURITY */ + | ENABLE_P ROW LEVEL SECURITY + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_EnableRowSecurity; + $$ = (Node *)n; + } + /* ALTER TABLE DISABLE ROW LEVEL SECURITY */ + | DISABLE_P ROW LEVEL SECURITY + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DisableRowSecurity; + $$ = (Node *)n; + } + /* ALTER TABLE FORCE ROW LEVEL SECURITY */ + | FORCE ROW LEVEL SECURITY + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_ForceRowSecurity; + $$ = (Node *)n; + } + /* ALTER TABLE NO FORCE ROW LEVEL SECURITY */ + | NO FORCE ROW LEVEL SECURITY + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_NoForceRowSecurity; + $$ = (Node *)n; + } + | alter_generic_options + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_GenericOptions; + n->def = (Node *)$1; + $$ = (Node *) n; + } + ; + +alter_column_default: + SET DEFAULT a_expr { $$ = $3; } + | DROP DEFAULT { $$ = NULL; } + ; + +opt_drop_behavior: + CASCADE { $$ = DROP_CASCADE; } + | RESTRICT { $$ = DROP_RESTRICT; } + | /* EMPTY */ { $$ = DROP_RESTRICT; /* default */ } + ; + +opt_collate_clause: + COLLATE any_name + { + CollateClause *n = makeNode(CollateClause); + n->arg = NULL; + n->collname = $2; + n->location = @1; + $$ = (Node *) n; + } + | /* EMPTY */ { $$ = NULL; } + ; + +alter_using: + USING a_expr { $$ = $2; } + | /* EMPTY */ { $$ = NULL; } + ; + +replica_identity: + NOTHING + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_NOTHING; + n->name = NULL; + $$ = (Node *) n; + } + | FULL + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_FULL; + n->name = NULL; + $$ = (Node *) n; + } + | DEFAULT + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_DEFAULT; + n->name = NULL; + $$ = (Node *) n; + } + | USING INDEX name + { + ReplicaIdentityStmt *n = makeNode(ReplicaIdentityStmt); + n->identity_type = REPLICA_IDENTITY_INDEX; + n->name = $3; + $$ = (Node *) n; + } +; + +reloptions: + '(' reloption_list ')' { $$ = $2; } + ; + +opt_reloptions: WITH reloptions { $$ = $2; } + | /* EMPTY */ { $$ = NIL; } + ; + +reloption_list: + reloption_elem { $$ = list_make1($1); } + | reloption_list ',' reloption_elem { $$ = lappend($1, $3); } + ; + +/* This should match def_elem and also allow qualified names */ +reloption_elem: + ColLabel '=' def_arg + { + $$ = makeDefElem($1, (Node *) $3, @1); + } + | ColLabel + { + $$ = makeDefElem($1, NULL, @1); + } + | ColLabel '.' ColLabel '=' def_arg + { + $$ = makeDefElemExtended($1, $3, (Node *) $5, + DEFELEM_UNSPEC, @1); + } + | ColLabel '.' ColLabel + { + $$ = makeDefElemExtended($1, $3, NULL, DEFELEM_UNSPEC, @1); + } + ; + +alter_identity_column_option_list: + alter_identity_column_option + { $$ = list_make1($1); } + | alter_identity_column_option_list alter_identity_column_option + { $$ = lappend($1, $2); } + ; + +alter_identity_column_option: + RESTART + { + $$ = makeDefElem("restart", NULL, @1); + } + | RESTART opt_with NumericOnly + { + $$ = makeDefElem("restart", (Node *)$3, @1); + } + | SET SeqOptElem + { + if (strcmp($2->defname, "as") == 0 || + strcmp($2->defname, "restart") == 0 || + strcmp($2->defname, "owned_by") == 0) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("sequence option \"%s\" not supported here", $2->defname), + parser_errposition(@2))); + $$ = $2; + } + | SET GENERATED generated_when + { + $$ = makeDefElem("generated", (Node *) makeInteger($3), @1); + } + ; + +PartitionBoundSpec: + /* a HASH partition */ + FOR VALUES WITH '(' hash_partbound ')' + { + ListCell *lc; + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->strategy = PARTITION_STRATEGY_HASH; + n->modulus = n->remainder = -1; + + foreach (lc, $5) + { + DefElem *opt = lfirst_node(DefElem, lc); + + if (strcmp(opt->defname, "modulus") == 0) + { + if (n->modulus != -1) + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_OBJECT), + errmsg("modulus for hash partition provided more than once"), + parser_errposition(opt->location))); + n->modulus = defGetInt32(opt); + } + else if (strcmp(opt->defname, "remainder") == 0) + { + if (n->remainder != -1) + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_OBJECT), + errmsg("remainder for hash partition provided more than once"), + parser_errposition(opt->location))); + n->remainder = defGetInt32(opt); + } + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized hash partition bound specification \"%s\"", + opt->defname), + parser_errposition(opt->location))); + } + + if (n->modulus == -1) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("modulus for hash partition must be specified"))); + if (n->remainder == -1) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("remainder for hash partition must be specified"))); + + n->location = @3; + + $$ = n; + } + + /* a LIST partition */ + | FOR VALUES IN_P '(' expr_list ')' + { + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->strategy = PARTITION_STRATEGY_LIST; + n->is_default = false; + n->listdatums = $5; + n->location = @3; + + $$ = n; + } + + /* a RANGE partition */ + | FOR VALUES FROM '(' expr_list ')' TO '(' expr_list ')' + { + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->strategy = PARTITION_STRATEGY_RANGE; + n->is_default = false; + n->lowerdatums = $5; + n->upperdatums = $9; + n->location = @3; + + $$ = n; + } + + /* a DEFAULT partition */ + | DEFAULT + { + PartitionBoundSpec *n = makeNode(PartitionBoundSpec); + + n->is_default = true; + n->location = @1; + + $$ = n; + } + ; + +hash_partbound_elem: + NonReservedWord Iconst + { + $$ = makeDefElem($1, (Node *)makeInteger($2), @1); + } + ; + +hash_partbound: + hash_partbound_elem + { + $$ = list_make1($1); + } + | hash_partbound ',' hash_partbound_elem + { + $$ = lappend($1, $3); + } + ; + +/***************************************************************************** + * + * ALTER TYPE + * + * really variants of the ALTER TABLE subcommands with different spellings + *****************************************************************************/ + +AlterCompositeTypeStmt: + ALTER TYPE_P any_name alter_type_cmds + { + AlterTableStmt *n = makeNode(AlterTableStmt); + + /* can't use qualified_name, sigh */ + n->relation = makeRangeVarFromAnyName($3, @3, yyscanner); + n->cmds = $4; + n->objtype = OBJECT_TYPE; + $$ = (Node *)n; + } + ; + +alter_type_cmds: + alter_type_cmd { $$ = list_make1($1); } + | alter_type_cmds ',' alter_type_cmd { $$ = lappend($1, $3); } + ; + +alter_type_cmd: + /* ALTER TYPE ADD ATTRIBUTE [RESTRICT|CASCADE] */ + ADD_P ATTRIBUTE TableFuncElement opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_AddColumn; + n->def = $3; + n->behavior = $4; + $$ = (Node *)n; + } + /* ALTER TYPE DROP ATTRIBUTE IF EXISTS [RESTRICT|CASCADE] */ + | DROP ATTRIBUTE IF_P EXISTS ColId opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = $5; + n->behavior = $6; + n->missing_ok = true; + $$ = (Node *)n; + } + /* ALTER TYPE DROP ATTRIBUTE [RESTRICT|CASCADE] */ + | DROP ATTRIBUTE ColId opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + n->subtype = AT_DropColumn; + n->name = $3; + n->behavior = $4; + n->missing_ok = false; + $$ = (Node *)n; + } + /* ALTER TYPE ALTER ATTRIBUTE [SET DATA] TYPE [RESTRICT|CASCADE] */ + | ALTER ATTRIBUTE ColId opt_set_data TYPE_P Typename opt_collate_clause opt_drop_behavior + { + AlterTableCmd *n = makeNode(AlterTableCmd); + ColumnDef *def = makeNode(ColumnDef); + n->subtype = AT_AlterColumnType; + n->name = $3; + n->def = (Node *) def; + n->behavior = $8; + /* We only use these fields of the ColumnDef node */ + def->typeName = $6; + def->collClause = (CollateClause *) $7; + def->raw_default = NULL; + def->location = @3; + $$ = (Node *)n; + } + ; + + +/***************************************************************************** + * + * QUERY : + * close + * + *****************************************************************************/ + +ClosePortalStmt: + CLOSE cursor_name + { + ClosePortalStmt *n = makeNode(ClosePortalStmt); + n->portalname = $2; + $$ = (Node *)n; + } + | CLOSE ALL + { + ClosePortalStmt *n = makeNode(ClosePortalStmt); + n->portalname = NULL; + $$ = (Node *)n; + } + ; + + +/***************************************************************************** + * + * QUERY : + * COPY relname [(columnList)] FROM/TO file [WITH] [(options)] + * COPY ( query ) TO file [WITH] [(options)] + * + * where 'query' can be one of: + * { SELECT | UPDATE | INSERT | DELETE } + * + * and 'file' can be one of: + * { PROGRAM 'command' | STDIN | STDOUT | 'filename' } + * + * In the preferred syntax the options are comma-separated + * and use generic identifiers instead of keywords. The pre-9.0 + * syntax had a hard-wired, space-separated set of options. + * + * Really old syntax, from versions 7.2 and prior: + * COPY [ BINARY ] table FROM/TO file + * [ [ USING ] DELIMITERS 'delimiter' ] ] + * [ WITH NULL AS 'null string' ] + * This option placement is not supported with COPY (query...). + * + *****************************************************************************/ + +CopyStmt: COPY opt_binary qualified_name opt_column_list + copy_from opt_program copy_file_name copy_delimiter opt_with + copy_options where_clause + { + CopyStmt *n = makeNode(CopyStmt); + n->relation = $3; + n->query = NULL; + n->attlist = $4; + n->is_from = $5; + n->is_program = $6; + n->filename = $7; + n->whereClause = $11; + + if (n->is_program && n->filename == NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("STDIN/STDOUT not allowed with PROGRAM"), + parser_errposition(@8))); + + if (!n->is_from && n->whereClause != NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("WHERE clause not allowed with COPY TO"), + parser_errposition(@11))); + + n->options = NIL; + /* Concatenate user-supplied flags */ + if ($2) + n->options = lappend(n->options, $2); + if ($8) + n->options = lappend(n->options, $8); + if ($10) + n->options = list_concat(n->options, $10); + $$ = (Node *)n; + } + | COPY '(' PreparableStmt ')' TO opt_program copy_file_name opt_with copy_options + { + CopyStmt *n = makeNode(CopyStmt); + n->relation = NULL; + n->query = $3; + n->attlist = NIL; + n->is_from = false; + n->is_program = $6; + n->filename = $7; + n->options = $9; + + if (n->is_program && n->filename == NULL) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("STDIN/STDOUT not allowed with PROGRAM"), + parser_errposition(@5))); + + $$ = (Node *)n; + } + ; + +copy_from: + FROM { $$ = true; } + | TO { $$ = false; } + ; + +opt_program: + PROGRAM { $$ = true; } + | /* EMPTY */ { $$ = false; } + ; + +/* + * copy_file_name NULL indicates stdio is used. Whether stdin or stdout is + * used depends on the direction. (It really doesn't make sense to copy from + * stdout. We silently correct the "typo".) - AY 9/94 + */ +copy_file_name: + Sconst { $$ = $1; } + | STDIN { $$ = NULL; } + | STDOUT { $$ = NULL; } + ; + +copy_options: copy_opt_list { $$ = $1; } + | '(' copy_generic_opt_list ')' { $$ = $2; } + ; + +/* old COPY option syntax */ +copy_opt_list: + copy_opt_list copy_opt_item { $$ = lappend($1, $2); } + | /* EMPTY */ { $$ = NIL; } + ; + +copy_opt_item: + BINARY + { + $$ = makeDefElem("format", (Node *)makeString("binary"), @1); + } + | FREEZE + { + $$ = makeDefElem("freeze", (Node *)makeInteger(true), @1); + } + | DELIMITER opt_as Sconst + { + $$ = makeDefElem("delimiter", (Node *)makeString($3), @1); + } + | NULL_P opt_as Sconst + { + $$ = makeDefElem("null", (Node *)makeString($3), @1); + } + | CSV + { + $$ = makeDefElem("format", (Node *)makeString("csv"), @1); + } + | HEADER_P + { + $$ = makeDefElem("header", (Node *)makeInteger(true), @1); + } + | QUOTE opt_as Sconst + { + $$ = makeDefElem("quote", (Node *)makeString($3), @1); + } + | ESCAPE opt_as Sconst + { + $$ = makeDefElem("escape", (Node *)makeString($3), @1); + } + | FORCE QUOTE columnList + { + $$ = makeDefElem("force_quote", (Node *)$3, @1); + } + | FORCE QUOTE '*' + { + $$ = makeDefElem("force_quote", (Node *)makeNode(A_Star), @1); + } + | FORCE NOT NULL_P columnList + { + $$ = makeDefElem("force_not_null", (Node *)$4, @1); + } + | FORCE NULL_P columnList + { + $$ = makeDefElem("force_null", (Node *)$3, @1); + } + | ENCODING Sconst + { + $$ = makeDefElem("encoding", (Node *)makeString($2), @1); + } + ; + +/* The following exist for backward compatibility with very old versions */ + +opt_binary: + BINARY + { + $$ = makeDefElem("format", (Node *)makeString("binary"), @1); + } + | /*EMPTY*/ { $$ = NULL; } + ; + +copy_delimiter: + opt_using DELIMITERS Sconst + { + $$ = makeDefElem("delimiter", (Node *)makeString($3), @2); + } + | /*EMPTY*/ { $$ = NULL; } + ; + +opt_using: + USING + | /*EMPTY*/ + ; + +/* new COPY option syntax */ +copy_generic_opt_list: + copy_generic_opt_elem + { + $$ = list_make1($1); + } + | copy_generic_opt_list ',' copy_generic_opt_elem + { + $$ = lappend($1, $3); + } + ; + +copy_generic_opt_elem: + ColLabel copy_generic_opt_arg + { + $$ = makeDefElem($1, $2, @1); + } + ; + +copy_generic_opt_arg: + opt_boolean_or_string { $$ = (Node *) makeString($1); } + | NumericOnly { $$ = (Node *) $1; } + | '*' { $$ = (Node *) makeNode(A_Star); } + | '(' copy_generic_opt_arg_list ')' { $$ = (Node *) $2; } + | /* EMPTY */ { $$ = NULL; } + ; + +copy_generic_opt_arg_list: + copy_generic_opt_arg_list_item + { + $$ = list_make1($1); + } + | copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item + { + $$ = lappend($1, $3); + } + ; + +/* beware of emitting non-string list elements here; see commands/define.c */ +copy_generic_opt_arg_list_item: + opt_boolean_or_string { $$ = (Node *) makeString($1); } + ; + + +/***************************************************************************** + * + * QUERY : + * CREATE TABLE relname + * + *****************************************************************************/ + +CreateStmt: CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' + OptInherit OptPartitionSpec table_access_method_clause OptWith + OnCommitOption OptTableSpace + { + CreateStmt *n = makeNode(CreateStmt); + $4->relpersistence = $2; + n->relation = $4; + n->tableElts = $6; + n->inhRelations = $8; + n->partspec = $9; + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = $10; + n->options = $11; + n->oncommit = $12; + n->tablespacename = $13; + n->if_not_exists = false; + $$ = (Node *)n; + } + | CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name '(' + OptTableElementList ')' OptInherit OptPartitionSpec table_access_method_clause + OptWith OnCommitOption OptTableSpace + { + CreateStmt *n = makeNode(CreateStmt); + $7->relpersistence = $2; + n->relation = $7; + n->tableElts = $9; + n->inhRelations = $11; + n->partspec = $12; + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = $13; + n->options = $14; + n->oncommit = $15; + n->tablespacename = $16; + n->if_not_exists = true; + $$ = (Node *)n; + } + | CREATE OptTemp TABLE qualified_name OF any_name + OptTypedTableElementList OptPartitionSpec table_access_method_clause + OptWith OnCommitOption OptTableSpace + { + CreateStmt *n = makeNode(CreateStmt); + $4->relpersistence = $2; + n->relation = $4; + n->tableElts = $7; + n->inhRelations = NIL; + n->partspec = $8; + n->ofTypename = makeTypeNameFromNameList($6); + n->ofTypename->location = @6; + n->constraints = NIL; + n->accessMethod = $9; + n->options = $10; + n->oncommit = $11; + n->tablespacename = $12; + n->if_not_exists = false; + $$ = (Node *)n; + } + | CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name OF any_name + OptTypedTableElementList OptPartitionSpec table_access_method_clause + OptWith OnCommitOption OptTableSpace + { + CreateStmt *n = makeNode(CreateStmt); + $7->relpersistence = $2; + n->relation = $7; + n->tableElts = $10; + n->inhRelations = NIL; + n->partspec = $11; + n->ofTypename = makeTypeNameFromNameList($9); + n->ofTypename->location = @9; + n->constraints = NIL; + n->accessMethod = $12; + n->options = $13; + n->oncommit = $14; + n->tablespacename = $15; + n->if_not_exists = true; + $$ = (Node *)n; + } + | CREATE OptTemp TABLE qualified_name PARTITION OF qualified_name + OptTypedTableElementList PartitionBoundSpec OptPartitionSpec + table_access_method_clause OptWith OnCommitOption OptTableSpace + { + CreateStmt *n = makeNode(CreateStmt); + $4->relpersistence = $2; + n->relation = $4; + n->tableElts = $8; + n->inhRelations = list_make1($7); + n->partbound = $9; + n->partspec = $10; + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = $11; + n->options = $12; + n->oncommit = $13; + n->tablespacename = $14; + n->if_not_exists = false; + $$ = (Node *)n; + } + | CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name PARTITION OF + qualified_name OptTypedTableElementList PartitionBoundSpec OptPartitionSpec + table_access_method_clause OptWith OnCommitOption OptTableSpace + { + CreateStmt *n = makeNode(CreateStmt); + $7->relpersistence = $2; + n->relation = $7; + n->tableElts = $11; + n->inhRelations = list_make1($10); + n->partbound = $12; + n->partspec = $13; + n->ofTypename = NULL; + n->constraints = NIL; + n->accessMethod = $14; + n->options = $15; + n->oncommit = $16; + n->tablespacename = $17; + n->if_not_exists = true; + $$ = (Node *)n; + } + ; + +/* + * Redundancy here is needed to avoid shift/reduce conflicts, + * since TEMP is not a reserved word. See also OptTempTableName. + * + * NOTE: we accept both GLOBAL and LOCAL options. They currently do nothing, + * but future versions might consider GLOBAL to request SQL-spec-compliant + * temp table behavior, so warn about that. Since we have no modules the + * LOCAL keyword is really meaningless; furthermore, some other products + * implement LOCAL as meaning the same as our default temp table behavior, + * so we'll probably continue to treat LOCAL as a noise word. + */ +OptTemp: TEMPORARY { $$ = RELPERSISTENCE_TEMP; } + | TEMP { $$ = RELPERSISTENCE_TEMP; } + | LOCAL TEMPORARY { $$ = RELPERSISTENCE_TEMP; } + | LOCAL TEMP { $$ = RELPERSISTENCE_TEMP; } + | GLOBAL TEMPORARY + { + ereport(WARNING, + (errmsg("GLOBAL is deprecated in temporary table creation"), + parser_errposition(@1))); + $$ = RELPERSISTENCE_TEMP; + } + | GLOBAL TEMP + { + ereport(WARNING, + (errmsg("GLOBAL is deprecated in temporary table creation"), + parser_errposition(@1))); + $$ = RELPERSISTENCE_TEMP; + } + | UNLOGGED { $$ = RELPERSISTENCE_UNLOGGED; } + | /*EMPTY*/ { $$ = RELPERSISTENCE_PERMANENT; } + ; + +OptTableElementList: + TableElementList { $$ = $1; } + | /*EMPTY*/ { $$ = NIL; } + ; + +OptTypedTableElementList: + '(' TypedTableElementList ')' { $$ = $2; } + | /*EMPTY*/ { $$ = NIL; } + ; + +TableElementList: + TableElement + { + $$ = list_make1($1); + } + | TableElementList ',' TableElement + { + $$ = lappend($1, $3); + } + ; + +TypedTableElementList: + TypedTableElement + { + $$ = list_make1($1); + } + | TypedTableElementList ',' TypedTableElement + { + $$ = lappend($1, $3); + } + ; + +TableElement: + columnDef { $$ = $1; } + | TableLikeClause { $$ = $1; } + | TableConstraint { $$ = $1; } + ; + +TypedTableElement: + columnOptions { $$ = $1; } + | TableConstraint { $$ = $1; } + ; + +columnDef: ColId Typename opt_column_compression create_generic_options ColQualList + { + ColumnDef *n = makeNode(ColumnDef); + n->colname = $1; + n->typeName = $2; + n->compression = $3; + n->inhcount = 0; + n->is_local = true; + n->is_not_null = false; + n->is_from_type = false; + n->storage = 0; + n->raw_default = NULL; + n->cooked_default = NULL; + n->collOid = InvalidOid; + n->fdwoptions = $4; + SplitColQualList($5, &n->constraints, &n->collClause, + yyscanner); + n->location = @1; + $$ = (Node *)n; + } + ; + +columnOptions: ColId ColQualList + { + ColumnDef *n = makeNode(ColumnDef); + n->colname = $1; + n->typeName = NULL; + n->inhcount = 0; + n->is_local = true; + n->is_not_null = false; + n->is_from_type = false; + n->storage = 0; + n->raw_default = NULL; + n->cooked_default = NULL; + n->collOid = InvalidOid; + SplitColQualList($2, &n->constraints, &n->collClause, + yyscanner); + n->location = @1; + $$ = (Node *)n; + } + | ColId WITH OPTIONS ColQualList + { + ColumnDef *n = makeNode(ColumnDef); + n->colname = $1; + n->typeName = NULL; + n->inhcount = 0; + n->is_local = true; + n->is_not_null = false; + n->is_from_type = false; + n->storage = 0; + n->raw_default = NULL; + n->cooked_default = NULL; + n->collOid = InvalidOid; + SplitColQualList($4, &n->constraints, &n->collClause, + yyscanner); + n->location = @1; + $$ = (Node *)n; + } + ; + +column_compression: + COMPRESSION ColId { $$ = $2; } + | COMPRESSION DEFAULT { $$ = pstrdup("default"); } + ; + +opt_column_compression: + column_compression { $$ = $1; } + | /*EMPTY*/ { $$ = NULL; } + ; + +ColQualList: + ColQualList ColConstraint { $$ = lappend($1, $2); } + | /*EMPTY*/ { $$ = NIL; } + ; + +ColConstraint: + CONSTRAINT name ColConstraintElem + { + Constraint *n = castNode(Constraint, $3); + n->conname = $2; + n->location = @1; + $$ = (Node *) n; + } + | ColConstraintElem { $$ = $1; } + | ConstraintAttr { $$ = $1; } + | COLLATE any_name + { + /* + * Note: the CollateClause is momentarily included in + * the list built by ColQualList, but we split it out + * again in SplitColQualList. + */ + CollateClause *n = makeNode(CollateClause); + n->arg = NULL; + n->collname = $2; + n->location = @1; + $$ = (Node *) n; + } + ; + +/* DEFAULT NULL is already the default for Postgres. + * But define it here and carry it forward into the system + * to make it explicit. + * - thomas 1998-09-13 + * + * WITH NULL and NULL are not SQL-standard syntax elements, + * so leave them out. Use DEFAULT NULL to explicitly indicate + * that a column may have that value. WITH NULL leads to + * shift/reduce conflicts with WITH TIME ZONE anyway. + * - thomas 1999-01-08 + * + * DEFAULT expression must be b_expr not a_expr to prevent shift/reduce + * conflict on NOT (since NOT might start a subsequent NOT NULL constraint, + * or be part of a_expr NOT LIKE or similar constructs). + */ +ColConstraintElem: + NOT NULL_P + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_NOTNULL; + n->location = @1; + $$ = (Node *)n; + } + | NULL_P + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_NULL; + n->location = @1; + $$ = (Node *)n; + } + | UNIQUE opt_definition OptConsTableSpace + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_UNIQUE; + n->location = @1; + n->keys = NULL; + n->options = $2; + n->indexname = NULL; + n->indexspace = $3; + $$ = (Node *)n; + } + | PRIMARY KEY opt_definition OptConsTableSpace + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_PRIMARY; + n->location = @1; + n->keys = NULL; + n->options = $3; + n->indexname = NULL; + n->indexspace = $4; + $$ = (Node *)n; + } + | CHECK '(' a_expr ')' opt_no_inherit + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_CHECK; + n->location = @1; + n->is_no_inherit = $5; + n->raw_expr = $3; + n->cooked_expr = NULL; + n->skip_validation = false; + n->initially_valid = true; + $$ = (Node *)n; + } + | DEFAULT b_expr + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_DEFAULT; + n->location = @1; + n->raw_expr = $2; + n->cooked_expr = NULL; + $$ = (Node *)n; + } + | GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_IDENTITY; + n->generated_when = $2; + n->options = $5; + n->location = @1; + $$ = (Node *)n; + } + | GENERATED generated_when AS '(' a_expr ')' STORED + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_GENERATED; + n->generated_when = $2; + n->raw_expr = $5; + n->cooked_expr = NULL; + n->location = @1; + + /* + * Can't do this in the grammar because of shift/reduce + * conflicts. (IDENTITY allows both ALWAYS and BY + * DEFAULT, but generated columns only allow ALWAYS.) We + * can also give a more useful error message and location. + */ + if ($2 != ATTRIBUTE_IDENTITY_ALWAYS) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("for a generated column, GENERATED ALWAYS must be specified"), + parser_errposition(@2))); + + $$ = (Node *)n; + } + | REFERENCES qualified_name opt_column_list key_match key_actions + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_FOREIGN; + n->location = @1; + n->pktable = $2; + n->fk_attrs = NIL; + n->pk_attrs = $3; + n->fk_matchtype = $4; + n->fk_upd_action = (char) ($5 >> 8); + n->fk_del_action = (char) ($5 & 0xFF); + n->skip_validation = false; + n->initially_valid = true; + $$ = (Node *)n; + } + ; + +generated_when: + ALWAYS { $$ = ATTRIBUTE_IDENTITY_ALWAYS; } + | BY DEFAULT { $$ = ATTRIBUTE_IDENTITY_BY_DEFAULT; } + ; + +/* + * ConstraintAttr represents constraint attributes, which we parse as if + * they were independent constraint clauses, in order to avoid shift/reduce + * conflicts (since NOT might start either an independent NOT NULL clause + * or an attribute). parse_utilcmd.c is responsible for attaching the + * attribute information to the preceding "real" constraint node, and for + * complaining if attribute clauses appear in the wrong place or wrong + * combinations. + * + * See also ConstraintAttributeSpec, which can be used in places where + * there is no parsing conflict. (Note: currently, NOT VALID and NO INHERIT + * are allowed clauses in ConstraintAttributeSpec, but not here. Someday we + * might need to allow them here too, but for the moment it doesn't seem + * useful in the statements that use ConstraintAttr.) + */ +ConstraintAttr: + DEFERRABLE + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_DEFERRABLE; + n->location = @1; + $$ = (Node *)n; + } + | NOT DEFERRABLE + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_NOT_DEFERRABLE; + n->location = @1; + $$ = (Node *)n; + } + | INITIALLY DEFERRED + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_DEFERRED; + n->location = @1; + $$ = (Node *)n; + } + | INITIALLY IMMEDIATE + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_ATTR_IMMEDIATE; + n->location = @1; + $$ = (Node *)n; + } + ; + + +TableLikeClause: + LIKE qualified_name TableLikeOptionList + { + TableLikeClause *n = makeNode(TableLikeClause); + n->relation = $2; + n->options = $3; + n->relationOid = InvalidOid; + $$ = (Node *)n; + } + ; + +TableLikeOptionList: + TableLikeOptionList INCLUDING TableLikeOption { $$ = $1 | $3; } + | TableLikeOptionList EXCLUDING TableLikeOption { $$ = $1 & ~$3; } + | /* EMPTY */ { $$ = 0; } + ; + +TableLikeOption: + COMMENTS { $$ = CREATE_TABLE_LIKE_COMMENTS; } + | COMPRESSION { $$ = CREATE_TABLE_LIKE_COMPRESSION; } + | CONSTRAINTS { $$ = CREATE_TABLE_LIKE_CONSTRAINTS; } + | DEFAULTS { $$ = CREATE_TABLE_LIKE_DEFAULTS; } + | IDENTITY_P { $$ = CREATE_TABLE_LIKE_IDENTITY; } + | GENERATED { $$ = CREATE_TABLE_LIKE_GENERATED; } + | INDEXES { $$ = CREATE_TABLE_LIKE_INDEXES; } + | STATISTICS { $$ = CREATE_TABLE_LIKE_STATISTICS; } + | STORAGE { $$ = CREATE_TABLE_LIKE_STORAGE; } + | ALL { $$ = CREATE_TABLE_LIKE_ALL; } + ; + + +/* ConstraintElem specifies constraint syntax which is not embedded into + * a column definition. ColConstraintElem specifies the embedded form. + * - thomas 1997-12-03 + */ +TableConstraint: + CONSTRAINT name ConstraintElem + { + Constraint *n = castNode(Constraint, $3); + n->conname = $2; + n->location = @1; + $$ = (Node *) n; + } + | ConstraintElem { $$ = $1; } + ; + +ConstraintElem: + CHECK '(' a_expr ')' ConstraintAttributeSpec + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_CHECK; + n->location = @1; + n->raw_expr = $3; + n->cooked_expr = NULL; + processCASbits($5, @5, "CHECK", + NULL, NULL, &n->skip_validation, + &n->is_no_inherit, yyscanner); + n->initially_valid = !n->skip_validation; + $$ = (Node *)n; + } + | UNIQUE '(' columnList ')' opt_c_include opt_definition OptConsTableSpace + ConstraintAttributeSpec + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_UNIQUE; + n->location = @1; + n->keys = $3; + n->including = $5; + n->options = $6; + n->indexname = NULL; + n->indexspace = $7; + processCASbits($8, @8, "UNIQUE", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + $$ = (Node *)n; + } + | UNIQUE ExistingIndex ConstraintAttributeSpec + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_UNIQUE; + n->location = @1; + n->keys = NIL; + n->including = NIL; + n->options = NIL; + n->indexname = $2; + n->indexspace = NULL; + processCASbits($3, @3, "UNIQUE", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + $$ = (Node *)n; + } + | PRIMARY KEY '(' columnList ')' opt_c_include opt_definition OptConsTableSpace + ConstraintAttributeSpec + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_PRIMARY; + n->location = @1; + n->keys = $4; + n->including = $6; + n->options = $7; + n->indexname = NULL; + n->indexspace = $8; + processCASbits($9, @9, "PRIMARY KEY", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + $$ = (Node *)n; + } + | PRIMARY KEY ExistingIndex ConstraintAttributeSpec + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_PRIMARY; + n->location = @1; + n->keys = NIL; + n->including = NIL; + n->options = NIL; + n->indexname = $3; + n->indexspace = NULL; + processCASbits($4, @4, "PRIMARY KEY", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + $$ = (Node *)n; + } + | EXCLUDE access_method_clause '(' ExclusionConstraintList ')' + opt_c_include opt_definition OptConsTableSpace OptWhereClause + ConstraintAttributeSpec + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_EXCLUSION; + n->location = @1; + n->access_method = $2; + n->exclusions = $4; + n->including = $6; + n->options = $7; + n->indexname = NULL; + n->indexspace = $8; + n->where_clause = $9; + processCASbits($10, @10, "EXCLUDE", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + $$ = (Node *)n; + } + | FOREIGN KEY '(' columnList ')' REFERENCES qualified_name + opt_column_list key_match key_actions ConstraintAttributeSpec + { + Constraint *n = makeNode(Constraint); + n->contype = CONSTR_FOREIGN; + n->location = @1; + n->pktable = $7; + n->fk_attrs = $4; + n->pk_attrs = $8; + n->fk_matchtype = $9; + n->fk_upd_action = (char) ($10 >> 8); + n->fk_del_action = (char) ($10 & 0xFF); + processCASbits($11, @11, "FOREIGN KEY", + &n->deferrable, &n->initdeferred, + &n->skip_validation, NULL, + yyscanner); + n->initially_valid = !n->skip_validation; + $$ = (Node *)n; + } + ; + +opt_no_inherit: NO INHERIT { $$ = true; } + | /* EMPTY */ { $$ = false; } + ; + +opt_column_list: + '(' columnList ')' { $$ = $2; } + | /*EMPTY*/ { $$ = NIL; } + ; + +columnList: + columnElem { $$ = list_make1($1); } + | columnList ',' columnElem { $$ = lappend($1, $3); } + ; + +columnElem: ColId + { + $$ = (Node *) makeString($1); + } + ; + +opt_c_include: INCLUDE '(' columnList ')' { $$ = $3; } + | /* EMPTY */ { $$ = NIL; } + ; + +key_match: MATCH FULL + { + $$ = FKCONSTR_MATCH_FULL; + } + | MATCH PARTIAL + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("MATCH PARTIAL not yet implemented"), + parser_errposition(@1))); + $$ = FKCONSTR_MATCH_PARTIAL; + } + | MATCH SIMPLE + { + $$ = FKCONSTR_MATCH_SIMPLE; + } + | /*EMPTY*/ + { + $$ = FKCONSTR_MATCH_SIMPLE; + } + ; + +ExclusionConstraintList: + ExclusionConstraintElem { $$ = list_make1($1); } + | ExclusionConstraintList ',' ExclusionConstraintElem + { $$ = lappend($1, $3); } + ; + +ExclusionConstraintElem: index_elem WITH any_operator + { + $$ = list_make2($1, $3); + } + /* allow OPERATOR() decoration for the benefit of ruleutils.c */ + | index_elem WITH OPERATOR '(' any_operator ')' + { + $$ = list_make2($1, $5); + } + ; + +OptWhereClause: + WHERE '(' a_expr ')' { $$ = $3; } + | /*EMPTY*/ { $$ = NULL; } + ; + +/* + * We combine the update and delete actions into one value temporarily + * for simplicity of parsing, and then break them down again in the + * calling production. update is in the left 8 bits, delete in the right. + * Note that NOACTION is the default. + */ +key_actions: + key_update + { $$ = ($1 << 8) | (FKCONSTR_ACTION_NOACTION & 0xFF); } + | key_delete + { $$ = (FKCONSTR_ACTION_NOACTION << 8) | ($1 & 0xFF); } + | key_update key_delete + { $$ = ($1 << 8) | ($2 & 0xFF); } + | key_delete key_update + { $$ = ($2 << 8) | ($1 & 0xFF); } + | /*EMPTY*/ + { $$ = (FKCONSTR_ACTION_NOACTION << 8) | (FKCONSTR_ACTION_NOACTION & 0xFF); } + ; + +key_update: ON UPDATE key_action { $$ = $3; } + ; + +key_delete: ON DELETE_P key_action { $$ = $3; } + ; + +key_action: + NO ACTION { $$ = FKCONSTR_ACTION_NOACTION; } + | RESTRICT { $$ = FKCONSTR_ACTION_RESTRICT; } + | CASCADE { $$ = FKCONSTR_ACTION_CASCADE; } + | SET NULL_P { $$ = FKCONSTR_ACTION_SETNULL; } + | SET DEFAULT { $$ = FKCONSTR_ACTION_SETDEFAULT; } + ; + +OptInherit: INHERITS '(' qualified_name_list ')' { $$ = $3; } + | /*EMPTY*/ { $$ = NIL; } + ; + +/* Optional partition key specification */ +OptPartitionSpec: PartitionSpec { $$ = $1; } + | /*EMPTY*/ { $$ = NULL; } + ; + +PartitionSpec: PARTITION BY ColId '(' part_params ')' + { + PartitionSpec *n = makeNode(PartitionSpec); + + n->strategy = $3; + n->partParams = $5; + n->location = @1; + + $$ = n; + } + ; + +part_params: part_elem { $$ = list_make1($1); } + | part_params ',' part_elem { $$ = lappend($1, $3); } + ; + +part_elem: ColId opt_collate opt_class + { + PartitionElem *n = makeNode(PartitionElem); + + n->name = $1; + n->expr = NULL; + n->collation = $2; + n->opclass = $3; + n->location = @1; + $$ = n; + } + | func_expr_windowless opt_collate opt_class + { + PartitionElem *n = makeNode(PartitionElem); + + n->name = NULL; + n->expr = $1; + n->collation = $2; + n->opclass = $3; + n->location = @1; + $$ = n; + } + | '(' a_expr ')' opt_collate opt_class + { + PartitionElem *n = makeNode(PartitionElem); + + n->name = NULL; + n->expr = $2; + n->collation = $4; + n->opclass = $5; + n->location = @1; + $$ = n; + } + ; + +table_access_method_clause: + USING name { $$ = $2; } + | /*EMPTY*/ { $$ = NULL; } + ; + +/* WITHOUT OIDS is legacy only */ +OptWith: + WITH reloptions { $$ = $2; } + | WITHOUT OIDS { $$ = NIL; } + | /*EMPTY*/ { $$ = NIL; } + ; + +OnCommitOption: ON COMMIT DROP { $$ = ONCOMMIT_DROP; } + | ON COMMIT DELETE_P ROWS { $$ = ONCOMMIT_DELETE_ROWS; } + | ON COMMIT PRESERVE ROWS { $$ = ONCOMMIT_PRESERVE_ROWS; } + | /*EMPTY*/ { $$ = ONCOMMIT_NOOP; } + ; + +OptTableSpace: TABLESPACE name { $$ = $2; } + | /*EMPTY*/ { $$ = NULL; } + ; + +OptConsTableSpace: USING INDEX TABLESPACE name { $$ = $4; } + | /*EMPTY*/ { $$ = NULL; } + ; + +ExistingIndex: USING INDEX name { $$ = $3; } + ; + +/***************************************************************************** + * + * QUERY : + * CREATE STATISTICS [IF NOT EXISTS] stats_name [(stat types)] + * ON expression-list FROM from_list + * + * Note: the expectation here is that the clauses after ON are a subset of + * SELECT syntax, allowing for expressions and joined tables, and probably + * someday a WHERE clause. Much less than that is currently implemented, + * but the grammar accepts it and then we'll throw FEATURE_NOT_SUPPORTED + * errors as necessary at execution. + * + *****************************************************************************/ + +CreateStatsStmt: + CREATE STATISTICS any_name + opt_name_list ON stats_params FROM from_list + { + CreateStatsStmt *n = makeNode(CreateStatsStmt); + n->defnames = $3; + n->stat_types = $4; + n->exprs = $6; + n->relations = $8; + n->stxcomment = NULL; + n->if_not_exists = false; + $$ = (Node *)n; + } + | CREATE STATISTICS IF_P NOT EXISTS any_name + opt_name_list ON stats_params FROM from_list + { + CreateStatsStmt *n = makeNode(CreateStatsStmt); + n->defnames = $6; + n->stat_types = $7; + n->exprs = $9; + n->relations = $11; + n->stxcomment = NULL; + n->if_not_exists = true; + $$ = (Node *)n; + } + ; + +/* + * Statistics attributes can be either simple column references, or arbitrary + * expressions in parens. For compatibility with index attributes permitted + * in CREATE INDEX, we allow an expression that's just a function call to be + * written without parens. + */ + +stats_params: stats_param { $$ = list_make1($1); } + | stats_params ',' stats_param { $$ = lappend($1, $3); } + ; + +stats_param: ColId + { + $$ = makeNode(StatsElem); + $$->name = $1; + $$->expr = NULL; + } + | func_expr_windowless + { + $$ = makeNode(StatsElem); + $$->name = NULL; + $$->expr = $1; + } + | '(' a_expr ')' + { + $$ = makeNode(StatsElem); + $$->name = NULL; + $$->expr = $2; + } + ; + +/***************************************************************************** + * + * QUERY : + * ALTER STATISTICS [IF EXISTS] stats_name + * SET STATISTICS + * + *****************************************************************************/ + +AlterStatsStmt: + ALTER STATISTICS any_name SET STATISTICS SignedIconst + { + AlterStatsStmt *n = makeNode(AlterStatsStmt); + n->defnames = $3; + n->missing_ok = false; + n->stxstattarget = $6; + $$ = (Node *)n; + } + | ALTER STATISTICS IF_P EXISTS any_name SET STATISTICS SignedIconst + { + AlterStatsStmt *n = makeNode(AlterStatsStmt); + n->defnames = $5; + n->missing_ok = true; + n->stxstattarget = $8; + $$ = (Node *)n; + } + ; + +/***************************************************************************** + * + * QUERY : + * CREATE TABLE relname AS SelectStmt [ WITH [NO] DATA ] + * + * + * Note: SELECT ... INTO is a now-deprecated alternative for this. + * + *****************************************************************************/ + +CreateAsStmt: + CREATE OptTemp TABLE create_as_target AS SelectStmt opt_with_data + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = $6; + ctas->into = $4; + ctas->objtype = OBJECT_TABLE; + ctas->is_select_into = false; + ctas->if_not_exists = false; + /* cram additional flags into the IntoClause */ + $4->rel->relpersistence = $2; + $4->skipData = !($7); + $$ = (Node *) ctas; + } + | CREATE OptTemp TABLE IF_P NOT EXISTS create_as_target AS SelectStmt opt_with_data + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = $9; + ctas->into = $7; + ctas->objtype = OBJECT_TABLE; + ctas->is_select_into = false; + ctas->if_not_exists = true; + /* cram additional flags into the IntoClause */ + $7->rel->relpersistence = $2; + $7->skipData = !($10); + $$ = (Node *) ctas; + } + ; + +create_as_target: + qualified_name opt_column_list table_access_method_clause + OptWith OnCommitOption OptTableSpace + { + $$ = makeNode(IntoClause); + $$->rel = $1; + $$->colNames = $2; + $$->accessMethod = $3; + $$->options = $4; + $$->onCommit = $5; + $$->tableSpaceName = $6; + $$->viewQuery = NULL; + $$->skipData = false; /* might get changed later */ + } + ; + +opt_with_data: + WITH DATA_P { $$ = true; } + | WITH NO DATA_P { $$ = false; } + | /*EMPTY*/ { $$ = true; } + ; + + +/***************************************************************************** + * + * QUERY : + * CREATE MATERIALIZED VIEW relname AS SelectStmt + * + *****************************************************************************/ + +CreateMatViewStmt: + CREATE OptNoLog MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = $7; + ctas->into = $5; + ctas->objtype = OBJECT_MATVIEW; + ctas->is_select_into = false; + ctas->if_not_exists = false; + /* cram additional flags into the IntoClause */ + $5->rel->relpersistence = $2; + $5->skipData = !($8); + $$ = (Node *) ctas; + } + | CREATE OptNoLog MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data + { + CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); + ctas->query = $10; + ctas->into = $8; + ctas->objtype = OBJECT_MATVIEW; + ctas->is_select_into = false; + ctas->if_not_exists = true; + /* cram additional flags into the IntoClause */ + $8->rel->relpersistence = $2; + $8->skipData = !($11); + $$ = (Node *) ctas; + } + ; + +create_mv_target: + qualified_name opt_column_list table_access_method_clause opt_reloptions OptTableSpace + { + $$ = makeNode(IntoClause); + $$->rel = $1; + $$->colNames = $2; + $$->accessMethod = $3; + $$->options = $4; + $$->onCommit = ONCOMMIT_NOOP; + $$->tableSpaceName = $5; + $$->viewQuery = NULL; /* filled at analysis time */ + $$->skipData = false; /* might get changed later */ + } + ; + +OptNoLog: UNLOGGED { $$ = RELPERSISTENCE_UNLOGGED; } + | /*EMPTY*/ { $$ = RELPERSISTENCE_PERMANENT; } + ; + + +/***************************************************************************** + * + * QUERY : + * REFRESH MATERIALIZED VIEW qualified_name + * + *****************************************************************************/ + +RefreshMatViewStmt: + REFRESH MATERIALIZED VIEW opt_concurrently qualified_name opt_with_data + { + RefreshMatViewStmt *n = makeNode(RefreshMatViewStmt); + n->concurrent = $4; + n->relation = $5; + n->skipData = !($6); + $$ = (Node *) n; + } + ; + + +/***************************************************************************** + * + * QUERY : + * CREATE SEQUENCE seqname + * ALTER SEQUENCE seqname + * + *****************************************************************************/ + +CreateSeqStmt: + CREATE OptTemp SEQUENCE qualified_name OptSeqOptList + { + CreateSeqStmt *n = makeNode(CreateSeqStmt); + $4->relpersistence = $2; + n->sequence = $4; + n->options = $5; + n->ownerId = InvalidOid; + n->if_not_exists = false; + $$ = (Node *)n; + } + | CREATE OptTemp SEQUENCE IF_P NOT EXISTS qualified_name OptSeqOptList + { + CreateSeqStmt *n = makeNode(CreateSeqStmt); + $7->relpersistence = $2; + n->sequence = $7; + n->options = $8; + n->ownerId = InvalidOid; + n->if_not_exists = true; + $$ = (Node *)n; + } + ; + +AlterSeqStmt: + ALTER SEQUENCE qualified_name SeqOptList + { + AlterSeqStmt *n = makeNode(AlterSeqStmt); + n->sequence = $3; + n->options = $4; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER SEQUENCE IF_P EXISTS qualified_name SeqOptList + { + AlterSeqStmt *n = makeNode(AlterSeqStmt); + n->sequence = $5; + n->options = $6; + n->missing_ok = true; + $$ = (Node *)n; + } + + ; + +OptSeqOptList: SeqOptList { $$ = $1; } + | /*EMPTY*/ { $$ = NIL; } + ; + +OptParenthesizedSeqOptList: '(' SeqOptList ')' { $$ = $2; } + | /*EMPTY*/ { $$ = NIL; } + ; + +SeqOptList: SeqOptElem { $$ = list_make1($1); } + | SeqOptList SeqOptElem { $$ = lappend($1, $2); } + ; + +SeqOptElem: AS SimpleTypename + { + $$ = makeDefElem("as", (Node *)$2, @1); + } + | CACHE NumericOnly + { + $$ = makeDefElem("cache", (Node *)$2, @1); + } + | CYCLE + { + $$ = makeDefElem("cycle", (Node *)makeInteger(true), @1); + } + | NO CYCLE + { + $$ = makeDefElem("cycle", (Node *)makeInteger(false), @1); + } + | INCREMENT opt_by NumericOnly + { + $$ = makeDefElem("increment", (Node *)$3, @1); + } + | MAXVALUE NumericOnly + { + $$ = makeDefElem("maxvalue", (Node *)$2, @1); + } + | MINVALUE NumericOnly + { + $$ = makeDefElem("minvalue", (Node *)$2, @1); + } + | NO MAXVALUE + { + $$ = makeDefElem("maxvalue", NULL, @1); + } + | NO MINVALUE + { + $$ = makeDefElem("minvalue", NULL, @1); + } + | OWNED BY any_name + { + $$ = makeDefElem("owned_by", (Node *)$3, @1); + } + | SEQUENCE NAME_P any_name + { + /* not documented, only used by pg_dump */ + $$ = makeDefElem("sequence_name", (Node *)$3, @1); + } + | START opt_with NumericOnly + { + $$ = makeDefElem("start", (Node *)$3, @1); + } + | RESTART + { + $$ = makeDefElem("restart", NULL, @1); + } + | RESTART opt_with NumericOnly + { + $$ = makeDefElem("restart", (Node *)$3, @1); + } + ; + +opt_by: BY + | /* EMPTY */ + ; + +NumericOnly: + FCONST { $$ = makeFloat($1); } + | '+' FCONST { $$ = makeFloat($2); } + | '-' FCONST + { + $$ = makeFloat($2); + doNegateFloat($$); + } + | SignedIconst { $$ = makeInteger($1); } + ; + +NumericOnly_list: NumericOnly { $$ = list_make1($1); } + | NumericOnly_list ',' NumericOnly { $$ = lappend($1, $3); } + ; + +/***************************************************************************** + * + * QUERIES : + * CREATE [OR REPLACE] [TRUSTED] [PROCEDURAL] LANGUAGE ... + * DROP [PROCEDURAL] LANGUAGE ... + * + *****************************************************************************/ + +CreatePLangStmt: + CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name + { + /* + * We now interpret parameterless CREATE LANGUAGE as + * CREATE EXTENSION. "OR REPLACE" is silently translated + * to "IF NOT EXISTS", which isn't quite the same, but + * seems more useful than throwing an error. We just + * ignore TRUSTED, as the previous code would have too. + */ + CreateExtensionStmt *n = makeNode(CreateExtensionStmt); + n->if_not_exists = $2; + n->extname = $6; + n->options = NIL; + $$ = (Node *)n; + } + | CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name + HANDLER handler_name opt_inline_handler opt_validator + { + CreatePLangStmt *n = makeNode(CreatePLangStmt); + n->replace = $2; + n->plname = $6; + n->plhandler = $8; + n->plinline = $9; + n->plvalidator = $10; + n->pltrusted = $3; + $$ = (Node *)n; + } + ; + +opt_trusted: + TRUSTED { $$ = true; } + | /*EMPTY*/ { $$ = false; } + ; + +/* This ought to be just func_name, but that causes reduce/reduce conflicts + * (CREATE LANGUAGE is the only place where func_name isn't followed by '('). + * Work around by using simple names, instead. + */ +handler_name: + name { $$ = list_make1(makeString($1)); } + | name attrs { $$ = lcons(makeString($1), $2); } + ; + +opt_inline_handler: + INLINE_P handler_name { $$ = $2; } + | /*EMPTY*/ { $$ = NIL; } + ; + +validator_clause: + VALIDATOR handler_name { $$ = $2; } + | NO VALIDATOR { $$ = NIL; } + ; + +opt_validator: + validator_clause { $$ = $1; } + | /*EMPTY*/ { $$ = NIL; } + ; + +opt_procedural: + PROCEDURAL + | /*EMPTY*/ + ; + +/***************************************************************************** + * + * QUERY: + * CREATE TABLESPACE tablespace LOCATION '/path/to/tablespace/' + * + *****************************************************************************/ + +CreateTableSpaceStmt: CREATE TABLESPACE name OptTableSpaceOwner LOCATION Sconst opt_reloptions + { + CreateTableSpaceStmt *n = makeNode(CreateTableSpaceStmt); + n->tablespacename = $3; + n->owner = $4; + n->location = $6; + n->options = $7; + $$ = (Node *) n; + } + ; + +OptTableSpaceOwner: OWNER RoleSpec { $$ = $2; } + | /*EMPTY */ { $$ = NULL; } + ; + +/***************************************************************************** + * + * QUERY : + * DROP TABLESPACE + * + * No need for drop behaviour as we cannot implement dependencies for + * objects in other databases; we can only support RESTRICT. + * + ****************************************************************************/ + +DropTableSpaceStmt: DROP TABLESPACE name + { + DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); + n->tablespacename = $3; + n->missing_ok = false; + $$ = (Node *) n; + } + | DROP TABLESPACE IF_P EXISTS name + { + DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt); + n->tablespacename = $5; + n->missing_ok = true; + $$ = (Node *) n; + } + ; + +/***************************************************************************** + * + * QUERY: + * CREATE EXTENSION extension + * [ WITH ] [ SCHEMA schema ] [ VERSION version ] + * + *****************************************************************************/ + +CreateExtensionStmt: CREATE EXTENSION name opt_with create_extension_opt_list + { + CreateExtensionStmt *n = makeNode(CreateExtensionStmt); + n->extname = $3; + n->if_not_exists = false; + n->options = $5; + $$ = (Node *) n; + } + | CREATE EXTENSION IF_P NOT EXISTS name opt_with create_extension_opt_list + { + CreateExtensionStmt *n = makeNode(CreateExtensionStmt); + n->extname = $6; + n->if_not_exists = true; + n->options = $8; + $$ = (Node *) n; + } + ; + +create_extension_opt_list: + create_extension_opt_list create_extension_opt_item + { $$ = lappend($1, $2); } + | /* EMPTY */ + { $$ = NIL; } + ; + +create_extension_opt_item: + SCHEMA name + { + $$ = makeDefElem("schema", (Node *)makeString($2), @1); + } + | VERSION_P NonReservedWord_or_Sconst + { + $$ = makeDefElem("new_version", (Node *)makeString($2), @1); + } + | FROM NonReservedWord_or_Sconst + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE EXTENSION ... FROM is no longer supported"), + parser_errposition(@1))); + } + | CASCADE + { + $$ = makeDefElem("cascade", (Node *)makeInteger(true), @1); + } + ; + +/***************************************************************************** + * + * ALTER EXTENSION name UPDATE [ TO version ] + * + *****************************************************************************/ + +AlterExtensionStmt: ALTER EXTENSION name UPDATE alter_extension_opt_list + { + AlterExtensionStmt *n = makeNode(AlterExtensionStmt); + n->extname = $3; + n->options = $5; + $$ = (Node *) n; + } + ; + +alter_extension_opt_list: + alter_extension_opt_list alter_extension_opt_item + { $$ = lappend($1, $2); } + | /* EMPTY */ + { $$ = NIL; } + ; + +alter_extension_opt_item: + TO NonReservedWord_or_Sconst + { + $$ = makeDefElem("new_version", (Node *)makeString($2), @1); + } + ; + +/***************************************************************************** + * + * ALTER EXTENSION name ADD/DROP object-identifier + * + *****************************************************************************/ + +AlterExtensionContentsStmt: + ALTER EXTENSION name add_drop object_type_name name + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = $5; + n->object = (Node *) makeString($6); + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop object_type_any_name any_name + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = $5; + n->object = (Node *) $6; + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_AGGREGATE; + n->object = (Node *) $6; + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop CAST '(' Typename AS Typename ')' + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_CAST; + n->object = (Node *) list_make2($7, $9); + $$ = (Node *) n; + } + | ALTER EXTENSION name add_drop DOMAIN_P Typename + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_DOMAIN; + n->object = (Node *) $6; + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop FUNCTION function_with_argtypes + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_FUNCTION; + n->object = (Node *) $6; + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_OPERATOR; + n->object = (Node *) $6; + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING name + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_OPCLASS; + n->object = (Node *) lcons(makeString($9), $7); + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING name + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_OPFAMILY; + n->object = (Node *) lcons(makeString($9), $7); + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop PROCEDURE function_with_argtypes + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_PROCEDURE; + n->object = (Node *) $6; + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop ROUTINE function_with_argtypes + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_ROUTINE; + n->object = (Node *) $6; + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop TRANSFORM FOR Typename LANGUAGE name + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_TRANSFORM; + n->object = (Node *) list_make2($7, makeString($9)); + $$ = (Node *)n; + } + | ALTER EXTENSION name add_drop TYPE_P Typename + { + AlterExtensionContentsStmt *n = makeNode(AlterExtensionContentsStmt); + n->extname = $3; + n->action = $4; + n->objtype = OBJECT_TYPE; + n->object = (Node *) $6; + $$ = (Node *)n; + } + ; + +/***************************************************************************** + * + * QUERY: + * CREATE FOREIGN DATA WRAPPER name options + * + *****************************************************************************/ + +CreateFdwStmt: CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options create_generic_options + { + CreateFdwStmt *n = makeNode(CreateFdwStmt); + n->fdwname = $5; + n->func_options = $6; + n->options = $7; + $$ = (Node *) n; + } + ; + +fdw_option: + HANDLER handler_name { $$ = makeDefElem("handler", (Node *)$2, @1); } + | NO HANDLER { $$ = makeDefElem("handler", NULL, @1); } + | VALIDATOR handler_name { $$ = makeDefElem("validator", (Node *)$2, @1); } + | NO VALIDATOR { $$ = makeDefElem("validator", NULL, @1); } + ; + +fdw_options: + fdw_option { $$ = list_make1($1); } + | fdw_options fdw_option { $$ = lappend($1, $2); } + ; + +opt_fdw_options: + fdw_options { $$ = $1; } + | /*EMPTY*/ { $$ = NIL; } + ; + +/***************************************************************************** + * + * QUERY : + * ALTER FOREIGN DATA WRAPPER name options + * + ****************************************************************************/ + +AlterFdwStmt: ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options alter_generic_options + { + AlterFdwStmt *n = makeNode(AlterFdwStmt); + n->fdwname = $5; + n->func_options = $6; + n->options = $7; + $$ = (Node *) n; + } + | ALTER FOREIGN DATA_P WRAPPER name fdw_options + { + AlterFdwStmt *n = makeNode(AlterFdwStmt); + n->fdwname = $5; + n->func_options = $6; + n->options = NIL; + $$ = (Node *) n; + } + ; + +/* Options definition for CREATE FDW, SERVER and USER MAPPING */ +create_generic_options: + OPTIONS '(' generic_option_list ')' { $$ = $3; } + | /*EMPTY*/ { $$ = NIL; } + ; + +generic_option_list: + generic_option_elem + { + $$ = list_make1($1); + } + | generic_option_list ',' generic_option_elem + { + $$ = lappend($1, $3); + } + ; + +/* Options definition for ALTER FDW, SERVER and USER MAPPING */ +alter_generic_options: + OPTIONS '(' alter_generic_option_list ')' { $$ = $3; } + ; + +alter_generic_option_list: + alter_generic_option_elem + { + $$ = list_make1($1); + } + | alter_generic_option_list ',' alter_generic_option_elem + { + $$ = lappend($1, $3); + } + ; + +alter_generic_option_elem: + generic_option_elem + { + $$ = $1; + } + | SET generic_option_elem + { + $$ = $2; + $$->defaction = DEFELEM_SET; + } + | ADD_P generic_option_elem + { + $$ = $2; + $$->defaction = DEFELEM_ADD; + } + | DROP generic_option_name + { + $$ = makeDefElemExtended(NULL, $2, NULL, DEFELEM_DROP, @2); + } + ; + +generic_option_elem: + generic_option_name generic_option_arg + { + $$ = makeDefElem($1, $2, @1); + } + ; + +generic_option_name: + ColLabel { $$ = $1; } + ; + +/* We could use def_arg here, but the spec only requires string literals */ +generic_option_arg: + Sconst { $$ = (Node *) makeString($1); } + ; + +/***************************************************************************** + * + * QUERY: + * CREATE SERVER name [TYPE] [VERSION] [OPTIONS] + * + *****************************************************************************/ + +CreateForeignServerStmt: CREATE SERVER name opt_type opt_foreign_server_version + FOREIGN DATA_P WRAPPER name create_generic_options + { + CreateForeignServerStmt *n = makeNode(CreateForeignServerStmt); + n->servername = $3; + n->servertype = $4; + n->version = $5; + n->fdwname = $9; + n->options = $10; + n->if_not_exists = false; + $$ = (Node *) n; + } + | CREATE SERVER IF_P NOT EXISTS name opt_type opt_foreign_server_version + FOREIGN DATA_P WRAPPER name create_generic_options + { + CreateForeignServerStmt *n = makeNode(CreateForeignServerStmt); + n->servername = $6; + n->servertype = $7; + n->version = $8; + n->fdwname = $12; + n->options = $13; + n->if_not_exists = true; + $$ = (Node *) n; + } + ; + +opt_type: + TYPE_P Sconst { $$ = $2; } + | /*EMPTY*/ { $$ = NULL; } + ; + + +foreign_server_version: + VERSION_P Sconst { $$ = $2; } + | VERSION_P NULL_P { $$ = NULL; } + ; + +opt_foreign_server_version: + foreign_server_version { $$ = $1; } + | /*EMPTY*/ { $$ = NULL; } + ; + +/***************************************************************************** + * + * QUERY : + * ALTER SERVER name [VERSION] [OPTIONS] + * + ****************************************************************************/ + +AlterForeignServerStmt: ALTER SERVER name foreign_server_version alter_generic_options + { + AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); + n->servername = $3; + n->version = $4; + n->options = $5; + n->has_version = true; + $$ = (Node *) n; + } + | ALTER SERVER name foreign_server_version + { + AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); + n->servername = $3; + n->version = $4; + n->has_version = true; + $$ = (Node *) n; + } + | ALTER SERVER name alter_generic_options + { + AlterForeignServerStmt *n = makeNode(AlterForeignServerStmt); + n->servername = $3; + n->options = $4; + $$ = (Node *) n; + } + ; + +/***************************************************************************** + * + * QUERY: + * CREATE FOREIGN TABLE relname (...) SERVER name (...) + * + *****************************************************************************/ + +CreateForeignTableStmt: + CREATE FOREIGN TABLE qualified_name + '(' OptTableElementList ')' + OptInherit SERVER name create_generic_options + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + $4->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = $4; + n->base.tableElts = $6; + n->base.inhRelations = $8; + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = false; + /* FDW-specific data */ + n->servername = $10; + n->options = $11; + $$ = (Node *) n; + } + | CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name + '(' OptTableElementList ')' + OptInherit SERVER name create_generic_options + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + $7->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = $7; + n->base.tableElts = $9; + n->base.inhRelations = $11; + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = true; + /* FDW-specific data */ + n->servername = $13; + n->options = $14; + $$ = (Node *) n; + } + | CREATE FOREIGN TABLE qualified_name + PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec + SERVER name create_generic_options + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + $4->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = $4; + n->base.inhRelations = list_make1($7); + n->base.tableElts = $8; + n->base.partbound = $9; + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = false; + /* FDW-specific data */ + n->servername = $11; + n->options = $12; + $$ = (Node *) n; + } + | CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name + PARTITION OF qualified_name OptTypedTableElementList PartitionBoundSpec + SERVER name create_generic_options + { + CreateForeignTableStmt *n = makeNode(CreateForeignTableStmt); + $7->relpersistence = RELPERSISTENCE_PERMANENT; + n->base.relation = $7; + n->base.inhRelations = list_make1($10); + n->base.tableElts = $11; + n->base.partbound = $12; + n->base.ofTypename = NULL; + n->base.constraints = NIL; + n->base.options = NIL; + n->base.oncommit = ONCOMMIT_NOOP; + n->base.tablespacename = NULL; + n->base.if_not_exists = true; + /* FDW-specific data */ + n->servername = $14; + n->options = $15; + $$ = (Node *) n; + } + ; + +/***************************************************************************** + * + * QUERY: + * IMPORT FOREIGN SCHEMA remote_schema + * [ { LIMIT TO | EXCEPT } ( table_list ) ] + * FROM SERVER server_name INTO local_schema [ OPTIONS (...) ] + * + ****************************************************************************/ + +ImportForeignSchemaStmt: + IMPORT_P FOREIGN SCHEMA name import_qualification + FROM SERVER name INTO name create_generic_options + { + ImportForeignSchemaStmt *n = makeNode(ImportForeignSchemaStmt); + n->server_name = $8; + n->remote_schema = $4; + n->local_schema = $10; + n->list_type = $5->type; + n->table_list = $5->table_names; + n->options = $11; + $$ = (Node *) n; + } + ; + +import_qualification_type: + LIMIT TO { $$ = FDW_IMPORT_SCHEMA_LIMIT_TO; } + | EXCEPT { $$ = FDW_IMPORT_SCHEMA_EXCEPT; } + ; + +import_qualification: + import_qualification_type '(' relation_expr_list ')' + { + ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); + n->type = $1; + n->table_names = $3; + $$ = n; + } + | /*EMPTY*/ + { + ImportQual *n = (ImportQual *) palloc(sizeof(ImportQual)); + n->type = FDW_IMPORT_SCHEMA_ALL; + n->table_names = NIL; + $$ = n; + } + ; + +/***************************************************************************** + * + * QUERY: + * CREATE USER MAPPING FOR auth_ident SERVER name [OPTIONS] + * + *****************************************************************************/ + +CreateUserMappingStmt: CREATE USER MAPPING FOR auth_ident SERVER name create_generic_options + { + CreateUserMappingStmt *n = makeNode(CreateUserMappingStmt); + n->user = $5; + n->servername = $7; + n->options = $8; + n->if_not_exists = false; + $$ = (Node *) n; + } + | CREATE USER MAPPING IF_P NOT EXISTS FOR auth_ident SERVER name create_generic_options + { + CreateUserMappingStmt *n = makeNode(CreateUserMappingStmt); + n->user = $8; + n->servername = $10; + n->options = $11; + n->if_not_exists = true; + $$ = (Node *) n; + } + ; + +/* User mapping authorization identifier */ +auth_ident: RoleSpec { $$ = $1; } + | USER { $$ = makeRoleSpec(ROLESPEC_CURRENT_USER, @1); } + ; + +/***************************************************************************** + * + * QUERY : + * DROP USER MAPPING FOR auth_ident SERVER name + * + * XXX you'd think this should have a CASCADE/RESTRICT option, even if it's + * only pro forma; but the SQL standard doesn't show one. + ****************************************************************************/ + +DropUserMappingStmt: DROP USER MAPPING FOR auth_ident SERVER name + { + DropUserMappingStmt *n = makeNode(DropUserMappingStmt); + n->user = $5; + n->servername = $7; + n->missing_ok = false; + $$ = (Node *) n; + } + | DROP USER MAPPING IF_P EXISTS FOR auth_ident SERVER name + { + DropUserMappingStmt *n = makeNode(DropUserMappingStmt); + n->user = $7; + n->servername = $9; + n->missing_ok = true; + $$ = (Node *) n; + } + ; + +/***************************************************************************** + * + * QUERY : + * ALTER USER MAPPING FOR auth_ident SERVER name OPTIONS + * + ****************************************************************************/ + +AlterUserMappingStmt: ALTER USER MAPPING FOR auth_ident SERVER name alter_generic_options + { + AlterUserMappingStmt *n = makeNode(AlterUserMappingStmt); + n->user = $5; + n->servername = $7; + n->options = $8; + $$ = (Node *) n; + } + ; + +/***************************************************************************** + * + * QUERIES: + * CREATE POLICY name ON table + * [AS { PERMISSIVE | RESTRICTIVE } ] + * [FOR { SELECT | INSERT | UPDATE | DELETE } ] + * [TO role, ...] + * [USING (qual)] [WITH CHECK (with check qual)] + * ALTER POLICY name ON table [TO role, ...] + * [USING (qual)] [WITH CHECK (with check qual)] + * + *****************************************************************************/ + +CreatePolicyStmt: + CREATE POLICY name ON qualified_name RowSecurityDefaultPermissive + RowSecurityDefaultForCmd RowSecurityDefaultToRole + RowSecurityOptionalExpr RowSecurityOptionalWithCheck + { + CreatePolicyStmt *n = makeNode(CreatePolicyStmt); + n->policy_name = $3; + n->table = $5; + n->permissive = $6; + n->cmd_name = $7; + n->roles = $8; + n->qual = $9; + n->with_check = $10; + $$ = (Node *) n; + } + ; + +AlterPolicyStmt: + ALTER POLICY name ON qualified_name RowSecurityOptionalToRole + RowSecurityOptionalExpr RowSecurityOptionalWithCheck + { + AlterPolicyStmt *n = makeNode(AlterPolicyStmt); + n->policy_name = $3; + n->table = $5; + n->roles = $6; + n->qual = $7; + n->with_check = $8; + $$ = (Node *) n; + } + ; + +RowSecurityOptionalExpr: + USING '(' a_expr ')' { $$ = $3; } + | /* EMPTY */ { $$ = NULL; } + ; + +RowSecurityOptionalWithCheck: + WITH CHECK '(' a_expr ')' { $$ = $4; } + | /* EMPTY */ { $$ = NULL; } + ; + +RowSecurityDefaultToRole: + TO role_list { $$ = $2; } + | /* EMPTY */ { $$ = list_make1(makeRoleSpec(ROLESPEC_PUBLIC, -1)); } + ; + +RowSecurityOptionalToRole: + TO role_list { $$ = $2; } + | /* EMPTY */ { $$ = NULL; } + ; + +RowSecurityDefaultPermissive: + AS IDENT + { + if (strcmp($2, "permissive") == 0) + $$ = true; + else if (strcmp($2, "restrictive") == 0) + $$ = false; + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("unrecognized row security option \"%s\"", $2), + errhint("Only PERMISSIVE or RESTRICTIVE policies are supported currently."), + parser_errposition(@2))); + + } + | /* EMPTY */ { $$ = true; } + ; + +RowSecurityDefaultForCmd: + FOR row_security_cmd { $$ = $2; } + | /* EMPTY */ { $$ = "all"; } + ; + +row_security_cmd: + ALL { $$ = "all"; } + | SELECT { $$ = "select"; } + | INSERT { $$ = "insert"; } + | UPDATE { $$ = "update"; } + | DELETE_P { $$ = "delete"; } + ; + +/***************************************************************************** + * + * QUERY: + * CREATE ACCESS METHOD name HANDLER handler_name + * + *****************************************************************************/ + +CreateAmStmt: CREATE ACCESS METHOD name TYPE_P am_type HANDLER handler_name + { + CreateAmStmt *n = makeNode(CreateAmStmt); + n->amname = $4; + n->handler_name = $8; + n->amtype = $6; + $$ = (Node *) n; + } + ; + +am_type: + INDEX { $$ = AMTYPE_INDEX; } + | TABLE { $$ = AMTYPE_TABLE; } + ; + +/***************************************************************************** + * + * QUERIES : + * CREATE TRIGGER ... + * + *****************************************************************************/ + +CreateTrigStmt: + CREATE opt_or_replace TRIGGER name TriggerActionTime TriggerEvents ON + qualified_name TriggerReferencing TriggerForSpec TriggerWhen + EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' + { + CreateTrigStmt *n = makeNode(CreateTrigStmt); + n->replace = $2; + n->isconstraint = false; + n->trigname = $4; + n->relation = $8; + n->funcname = $14; + n->args = $16; + n->row = $10; + n->timing = $5; + n->events = intVal(linitial($6)); + n->columns = (List *) lsecond($6); + n->whenClause = $11; + n->transitionRels = $9; + n->deferrable = false; + n->initdeferred = false; + n->constrrel = NULL; + $$ = (Node *)n; + } + | CREATE opt_or_replace CONSTRAINT TRIGGER name AFTER TriggerEvents ON + qualified_name OptConstrFromTable ConstraintAttributeSpec + FOR EACH ROW TriggerWhen + EXECUTE FUNCTION_or_PROCEDURE func_name '(' TriggerFuncArgs ')' + { + CreateTrigStmt *n = makeNode(CreateTrigStmt); + n->replace = $2; + if (n->replace) /* not supported, see CreateTrigger */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE OR REPLACE CONSTRAINT TRIGGER is not supported"))); + n->isconstraint = true; + n->trigname = $5; + n->relation = $9; + n->funcname = $18; + n->args = $20; + n->row = true; + n->timing = TRIGGER_TYPE_AFTER; + n->events = intVal(linitial($7)); + n->columns = (List *) lsecond($7); + n->whenClause = $15; + n->transitionRels = NIL; + processCASbits($11, @11, "TRIGGER", + &n->deferrable, &n->initdeferred, NULL, + NULL, yyscanner); + n->constrrel = $10; + $$ = (Node *)n; + } + ; + +TriggerActionTime: + BEFORE { $$ = TRIGGER_TYPE_BEFORE; } + | AFTER { $$ = TRIGGER_TYPE_AFTER; } + | INSTEAD OF { $$ = TRIGGER_TYPE_INSTEAD; } + ; + +TriggerEvents: + TriggerOneEvent + { $$ = $1; } + | TriggerEvents OR TriggerOneEvent + { + int events1 = intVal(linitial($1)); + int events2 = intVal(linitial($3)); + List *columns1 = (List *) lsecond($1); + List *columns2 = (List *) lsecond($3); + + if (events1 & events2) + parser_yyerror("duplicate trigger events specified"); + /* + * concat'ing the columns lists loses information about + * which columns went with which event, but so long as + * only UPDATE carries columns and we disallow multiple + * UPDATE items, it doesn't matter. Command execution + * should just ignore the columns for non-UPDATE events. + */ + $$ = list_make2(makeInteger(events1 | events2), + list_concat(columns1, columns2)); + } + ; + +TriggerOneEvent: + INSERT + { $$ = list_make2(makeInteger(TRIGGER_TYPE_INSERT), NIL); } + | DELETE_P + { $$ = list_make2(makeInteger(TRIGGER_TYPE_DELETE), NIL); } + | UPDATE + { $$ = list_make2(makeInteger(TRIGGER_TYPE_UPDATE), NIL); } + | UPDATE OF columnList + { $$ = list_make2(makeInteger(TRIGGER_TYPE_UPDATE), $3); } + | TRUNCATE + { $$ = list_make2(makeInteger(TRIGGER_TYPE_TRUNCATE), NIL); } + ; + +TriggerReferencing: + REFERENCING TriggerTransitions { $$ = $2; } + | /*EMPTY*/ { $$ = NIL; } + ; + +TriggerTransitions: + TriggerTransition { $$ = list_make1($1); } + | TriggerTransitions TriggerTransition { $$ = lappend($1, $2); } + ; + +TriggerTransition: + TransitionOldOrNew TransitionRowOrTable opt_as TransitionRelName + { + TriggerTransition *n = makeNode(TriggerTransition); + n->name = $4; + n->isNew = $1; + n->isTable = $2; + $$ = (Node *)n; + } + ; + +TransitionOldOrNew: + NEW { $$ = true; } + | OLD { $$ = false; } + ; + +TransitionRowOrTable: + TABLE { $$ = true; } + /* + * According to the standard, lack of a keyword here implies ROW. + * Support for that would require prohibiting ROW entirely here, + * reserving the keyword ROW, and/or requiring AS (instead of + * allowing it to be optional, as the standard specifies) as the + * next token. Requiring ROW seems cleanest and easiest to + * explain. + */ + | ROW { $$ = false; } + ; + +TransitionRelName: + ColId { $$ = $1; } + ; + +TriggerForSpec: + FOR TriggerForOptEach TriggerForType + { + $$ = $3; + } + | /* EMPTY */ + { + /* + * If ROW/STATEMENT not specified, default to + * STATEMENT, per SQL + */ + $$ = false; + } + ; + +TriggerForOptEach: + EACH + | /*EMPTY*/ + ; + +TriggerForType: + ROW { $$ = true; } + | STATEMENT { $$ = false; } + ; + +TriggerWhen: + WHEN '(' a_expr ')' { $$ = $3; } + | /*EMPTY*/ { $$ = NULL; } + ; + +FUNCTION_or_PROCEDURE: + FUNCTION + | PROCEDURE + ; + +TriggerFuncArgs: + TriggerFuncArg { $$ = list_make1($1); } + | TriggerFuncArgs ',' TriggerFuncArg { $$ = lappend($1, $3); } + | /*EMPTY*/ { $$ = NIL; } + ; + +TriggerFuncArg: + Iconst + { + $$ = makeString(psprintf("%d", $1)); + } + | FCONST { $$ = makeString($1); } + | Sconst { $$ = makeString($1); } + | ColLabel { $$ = makeString($1); } + ; + +OptConstrFromTable: + FROM qualified_name { $$ = $2; } + | /*EMPTY*/ { $$ = NULL; } + ; + +ConstraintAttributeSpec: + /*EMPTY*/ + { $$ = 0; } + | ConstraintAttributeSpec ConstraintAttributeElem + { + /* + * We must complain about conflicting options. + * We could, but choose not to, complain about redundant + * options (ie, where $2's bit is already set in $1). + */ + int newspec = $1 | $2; + + /* special message for this case */ + if ((newspec & (CAS_NOT_DEFERRABLE | CAS_INITIALLY_DEFERRED)) == (CAS_NOT_DEFERRABLE | CAS_INITIALLY_DEFERRED)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("constraint declared INITIALLY DEFERRED must be DEFERRABLE"), + parser_errposition(@2))); + /* generic message for other conflicts */ + if ((newspec & (CAS_NOT_DEFERRABLE | CAS_DEFERRABLE)) == (CAS_NOT_DEFERRABLE | CAS_DEFERRABLE) || + (newspec & (CAS_INITIALLY_IMMEDIATE | CAS_INITIALLY_DEFERRED)) == (CAS_INITIALLY_IMMEDIATE | CAS_INITIALLY_DEFERRED)) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("conflicting constraint properties"), + parser_errposition(@2))); + $$ = newspec; + } + ; + +ConstraintAttributeElem: + NOT DEFERRABLE { $$ = CAS_NOT_DEFERRABLE; } + | DEFERRABLE { $$ = CAS_DEFERRABLE; } + | INITIALLY IMMEDIATE { $$ = CAS_INITIALLY_IMMEDIATE; } + | INITIALLY DEFERRED { $$ = CAS_INITIALLY_DEFERRED; } + | NOT VALID { $$ = CAS_NOT_VALID; } + | NO INHERIT { $$ = CAS_NO_INHERIT; } + ; + + +/***************************************************************************** + * + * QUERIES : + * CREATE EVENT TRIGGER ... + * ALTER EVENT TRIGGER ... + * + *****************************************************************************/ + +CreateEventTrigStmt: + CREATE EVENT TRIGGER name ON ColLabel + EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' + { + CreateEventTrigStmt *n = makeNode(CreateEventTrigStmt); + n->trigname = $4; + n->eventname = $6; + n->whenclause = NULL; + n->funcname = $9; + $$ = (Node *)n; + } + | CREATE EVENT TRIGGER name ON ColLabel + WHEN event_trigger_when_list + EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')' + { + CreateEventTrigStmt *n = makeNode(CreateEventTrigStmt); + n->trigname = $4; + n->eventname = $6; + n->whenclause = $8; + n->funcname = $11; + $$ = (Node *)n; + } + ; + +event_trigger_when_list: + event_trigger_when_item + { $$ = list_make1($1); } + | event_trigger_when_list AND event_trigger_when_item + { $$ = lappend($1, $3); } + ; + +event_trigger_when_item: + ColId IN_P '(' event_trigger_value_list ')' + { $$ = makeDefElem($1, (Node *) $4, @1); } + ; + +event_trigger_value_list: + SCONST + { $$ = list_make1(makeString($1)); } + | event_trigger_value_list ',' SCONST + { $$ = lappend($1, makeString($3)); } + ; + +AlterEventTrigStmt: + ALTER EVENT TRIGGER name enable_trigger + { + AlterEventTrigStmt *n = makeNode(AlterEventTrigStmt); + n->trigname = $4; + n->tgenabled = $5; + $$ = (Node *) n; + } + ; + +enable_trigger: + ENABLE_P { $$ = TRIGGER_FIRES_ON_ORIGIN; } + | ENABLE_P REPLICA { $$ = TRIGGER_FIRES_ON_REPLICA; } + | ENABLE_P ALWAYS { $$ = TRIGGER_FIRES_ALWAYS; } + | DISABLE_P { $$ = TRIGGER_DISABLED; } + ; + +/***************************************************************************** + * + * QUERY : + * CREATE ASSERTION ... + * + *****************************************************************************/ + +CreateAssertionStmt: + CREATE ASSERTION any_name CHECK '(' a_expr ')' ConstraintAttributeSpec + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("CREATE ASSERTION is not yet implemented"))); + + $$ = NULL; + } + ; + + +/***************************************************************************** + * + * QUERY : + * define (aggregate,operator,type) + * + *****************************************************************************/ + +DefineStmt: + CREATE opt_or_replace AGGREGATE func_name aggr_args definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_AGGREGATE; + n->oldstyle = false; + n->replace = $2; + n->defnames = $4; + n->args = $5; + n->definition = $6; + $$ = (Node *)n; + } + | CREATE opt_or_replace AGGREGATE func_name old_aggr_definition + { + /* old-style (pre-8.2) syntax for CREATE AGGREGATE */ + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_AGGREGATE; + n->oldstyle = true; + n->replace = $2; + n->defnames = $4; + n->args = NIL; + n->definition = $5; + $$ = (Node *)n; + } + | CREATE OPERATOR any_operator definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_OPERATOR; + n->oldstyle = false; + n->defnames = $3; + n->args = NIL; + n->definition = $4; + $$ = (Node *)n; + } + | CREATE TYPE_P any_name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TYPE; + n->oldstyle = false; + n->defnames = $3; + n->args = NIL; + n->definition = $4; + $$ = (Node *)n; + } + | CREATE TYPE_P any_name + { + /* Shell type (identified by lack of definition) */ + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TYPE; + n->oldstyle = false; + n->defnames = $3; + n->args = NIL; + n->definition = NIL; + $$ = (Node *)n; + } + | CREATE TYPE_P any_name AS '(' OptTableFuncElementList ')' + { + CompositeTypeStmt *n = makeNode(CompositeTypeStmt); + + /* can't use qualified_name, sigh */ + n->typevar = makeRangeVarFromAnyName($3, @3, yyscanner); + n->coldeflist = $6; + $$ = (Node *)n; + } + | CREATE TYPE_P any_name AS ENUM_P '(' opt_enum_val_list ')' + { + CreateEnumStmt *n = makeNode(CreateEnumStmt); + n->typeName = $3; + n->vals = $7; + $$ = (Node *)n; + } + | CREATE TYPE_P any_name AS RANGE definition + { + CreateRangeStmt *n = makeNode(CreateRangeStmt); + n->typeName = $3; + n->params = $6; + $$ = (Node *)n; + } + | CREATE TEXT_P SEARCH PARSER any_name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSPARSER; + n->args = NIL; + n->defnames = $5; + n->definition = $6; + $$ = (Node *)n; + } + | CREATE TEXT_P SEARCH DICTIONARY any_name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSDICTIONARY; + n->args = NIL; + n->defnames = $5; + n->definition = $6; + $$ = (Node *)n; + } + | CREATE TEXT_P SEARCH TEMPLATE any_name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSTEMPLATE; + n->args = NIL; + n->defnames = $5; + n->definition = $6; + $$ = (Node *)n; + } + | CREATE TEXT_P SEARCH CONFIGURATION any_name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_TSCONFIGURATION; + n->args = NIL; + n->defnames = $5; + n->definition = $6; + $$ = (Node *)n; + } + | CREATE COLLATION any_name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = $3; + n->definition = $4; + $$ = (Node *)n; + } + | CREATE COLLATION IF_P NOT EXISTS any_name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = $6; + n->definition = $7; + n->if_not_exists = true; + $$ = (Node *)n; + } + | CREATE COLLATION any_name FROM any_name + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = $3; + n->definition = list_make1(makeDefElem("from", (Node *) $5, @5)); + $$ = (Node *)n; + } + | CREATE COLLATION IF_P NOT EXISTS any_name FROM any_name + { + DefineStmt *n = makeNode(DefineStmt); + n->kind = OBJECT_COLLATION; + n->args = NIL; + n->defnames = $6; + n->definition = list_make1(makeDefElem("from", (Node *) $8, @8)); + n->if_not_exists = true; + $$ = (Node *)n; + } + ; + +definition: '(' def_list ')' { $$ = $2; } + ; + +def_list: def_elem { $$ = list_make1($1); } + | def_list ',' def_elem { $$ = lappend($1, $3); } + ; + +def_elem: ColLabel '=' def_arg + { + $$ = makeDefElem($1, (Node *) $3, @1); + } + | ColLabel + { + $$ = makeDefElem($1, NULL, @1); + } + ; + +/* Note: any simple identifier will be returned as a type name! */ +def_arg: func_type { $$ = (Node *)$1; } + | reserved_keyword { $$ = (Node *)makeString(pstrdup($1)); } + | qual_all_Op { $$ = (Node *)$1; } + | NumericOnly { $$ = (Node *)$1; } + | Sconst { $$ = (Node *)makeString($1); } + | NONE { $$ = (Node *)makeString(pstrdup($1)); } + ; + +old_aggr_definition: '(' old_aggr_list ')' { $$ = $2; } + ; + +old_aggr_list: old_aggr_elem { $$ = list_make1($1); } + | old_aggr_list ',' old_aggr_elem { $$ = lappend($1, $3); } + ; + +/* + * Must use IDENT here to avoid reduce/reduce conflicts; fortunately none of + * the item names needed in old aggregate definitions are likely to become + * SQL keywords. + */ +old_aggr_elem: IDENT '=' def_arg + { + $$ = makeDefElem($1, (Node *)$3, @1); + } + ; + +opt_enum_val_list: + enum_val_list { $$ = $1; } + | /*EMPTY*/ { $$ = NIL; } + ; + +enum_val_list: Sconst + { $$ = list_make1(makeString($1)); } + | enum_val_list ',' Sconst + { $$ = lappend($1, makeString($3)); } + ; + +/***************************************************************************** + * + * ALTER TYPE enumtype ADD ... + * + *****************************************************************************/ + +AlterEnumStmt: + ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = $3; + n->oldVal = NULL; + n->newVal = $7; + n->newValNeighbor = NULL; + n->newValIsAfter = true; + n->skipIfNewValExists = $6; + $$ = (Node *) n; + } + | ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst BEFORE Sconst + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = $3; + n->oldVal = NULL; + n->newVal = $7; + n->newValNeighbor = $9; + n->newValIsAfter = false; + n->skipIfNewValExists = $6; + $$ = (Node *) n; + } + | ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists Sconst AFTER Sconst + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = $3; + n->oldVal = NULL; + n->newVal = $7; + n->newValNeighbor = $9; + n->newValIsAfter = true; + n->skipIfNewValExists = $6; + $$ = (Node *) n; + } + | ALTER TYPE_P any_name RENAME VALUE_P Sconst TO Sconst + { + AlterEnumStmt *n = makeNode(AlterEnumStmt); + n->typeName = $3; + n->oldVal = $6; + n->newVal = $8; + n->newValNeighbor = NULL; + n->newValIsAfter = false; + n->skipIfNewValExists = false; + $$ = (Node *) n; + } + ; + +opt_if_not_exists: IF_P NOT EXISTS { $$ = true; } + | /* EMPTY */ { $$ = false; } + ; + + +/***************************************************************************** + * + * QUERIES : + * CREATE OPERATOR CLASS ... + * CREATE OPERATOR FAMILY ... + * ALTER OPERATOR FAMILY ... + * DROP OPERATOR CLASS ... + * DROP OPERATOR FAMILY ... + * + *****************************************************************************/ + +CreateOpClassStmt: + CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename + USING name opt_opfamily AS opclass_item_list + { + CreateOpClassStmt *n = makeNode(CreateOpClassStmt); + n->opclassname = $4; + n->isDefault = $5; + n->datatype = $8; + n->amname = $10; + n->opfamilyname = $11; + n->items = $13; + $$ = (Node *) n; + } + ; + +opclass_item_list: + opclass_item { $$ = list_make1($1); } + | opclass_item_list ',' opclass_item { $$ = lappend($1, $3); } + ; + +opclass_item: + OPERATOR Iconst any_operator opclass_purpose opt_recheck + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + ObjectWithArgs *owa = makeNode(ObjectWithArgs); + owa->objname = $3; + owa->objargs = NIL; + n->itemtype = OPCLASS_ITEM_OPERATOR; + n->name = owa; + n->number = $2; + n->order_family = $4; + $$ = (Node *) n; + } + | OPERATOR Iconst operator_with_argtypes opclass_purpose + opt_recheck + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_OPERATOR; + n->name = $3; + n->number = $2; + n->order_family = $4; + $$ = (Node *) n; + } + | FUNCTION Iconst function_with_argtypes + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_FUNCTION; + n->name = $3; + n->number = $2; + $$ = (Node *) n; + } + | FUNCTION Iconst '(' type_list ')' function_with_argtypes + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_FUNCTION; + n->name = $6; + n->number = $2; + n->class_args = $4; + $$ = (Node *) n; + } + | STORAGE Typename + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_STORAGETYPE; + n->storedtype = $2; + $$ = (Node *) n; + } + ; + +opt_default: DEFAULT { $$ = true; } + | /*EMPTY*/ { $$ = false; } + ; + +opt_opfamily: FAMILY any_name { $$ = $2; } + | /*EMPTY*/ { $$ = NIL; } + ; + +opclass_purpose: FOR SEARCH { $$ = NIL; } + | FOR ORDER BY any_name { $$ = $4; } + | /*EMPTY*/ { $$ = NIL; } + ; + +opt_recheck: RECHECK + { + /* + * RECHECK no longer does anything in opclass definitions, + * but we still accept it to ease porting of old database + * dumps. + */ + ereport(NOTICE, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("RECHECK is no longer required"), + errhint("Update your data type."), + parser_errposition(@1))); + $$ = true; + } + | /*EMPTY*/ { $$ = false; } + ; + + +CreateOpFamilyStmt: + CREATE OPERATOR FAMILY any_name USING name + { + CreateOpFamilyStmt *n = makeNode(CreateOpFamilyStmt); + n->opfamilyname = $4; + n->amname = $6; + $$ = (Node *) n; + } + ; + +AlterOpFamilyStmt: + ALTER OPERATOR FAMILY any_name USING name ADD_P opclass_item_list + { + AlterOpFamilyStmt *n = makeNode(AlterOpFamilyStmt); + n->opfamilyname = $4; + n->amname = $6; + n->isDrop = false; + n->items = $8; + $$ = (Node *) n; + } + | ALTER OPERATOR FAMILY any_name USING name DROP opclass_drop_list + { + AlterOpFamilyStmt *n = makeNode(AlterOpFamilyStmt); + n->opfamilyname = $4; + n->amname = $6; + n->isDrop = true; + n->items = $8; + $$ = (Node *) n; + } + ; + +opclass_drop_list: + opclass_drop { $$ = list_make1($1); } + | opclass_drop_list ',' opclass_drop { $$ = lappend($1, $3); } + ; + +opclass_drop: + OPERATOR Iconst '(' type_list ')' + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_OPERATOR; + n->number = $2; + n->class_args = $4; + $$ = (Node *) n; + } + | FUNCTION Iconst '(' type_list ')' + { + CreateOpClassItem *n = makeNode(CreateOpClassItem); + n->itemtype = OPCLASS_ITEM_FUNCTION; + n->number = $2; + n->class_args = $4; + $$ = (Node *) n; + } + ; + + +DropOpClassStmt: + DROP OPERATOR CLASS any_name USING name opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString($6), $4)); + n->removeType = OBJECT_OPCLASS; + n->behavior = $7; + n->missing_ok = false; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP OPERATOR CLASS IF_P EXISTS any_name USING name opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString($8), $6)); + n->removeType = OBJECT_OPCLASS; + n->behavior = $9; + n->missing_ok = true; + n->concurrent = false; + $$ = (Node *) n; + } + ; + +DropOpFamilyStmt: + DROP OPERATOR FAMILY any_name USING name opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString($6), $4)); + n->removeType = OBJECT_OPFAMILY; + n->behavior = $7; + n->missing_ok = false; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP OPERATOR FAMILY IF_P EXISTS any_name USING name opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->objects = list_make1(lcons(makeString($8), $6)); + n->removeType = OBJECT_OPFAMILY; + n->behavior = $9; + n->missing_ok = true; + n->concurrent = false; + $$ = (Node *) n; + } + ; + + +/***************************************************************************** + * + * QUERY: + * + * DROP OWNED BY username [, username ...] [ RESTRICT | CASCADE ] + * REASSIGN OWNED BY username [, username ...] TO username + * + *****************************************************************************/ +DropOwnedStmt: + DROP OWNED BY role_list opt_drop_behavior + { + DropOwnedStmt *n = makeNode(DropOwnedStmt); + n->roles = $4; + n->behavior = $5; + $$ = (Node *)n; + } + ; + +ReassignOwnedStmt: + REASSIGN OWNED BY role_list TO RoleSpec + { + ReassignOwnedStmt *n = makeNode(ReassignOwnedStmt); + n->roles = $4; + n->newrole = $6; + $$ = (Node *)n; + } + ; + +/***************************************************************************** + * + * QUERY: + * + * DROP itemtype [ IF EXISTS ] itemname [, itemname ...] + * [ RESTRICT | CASCADE ] + * + *****************************************************************************/ + +DropStmt: DROP object_type_any_name IF_P EXISTS any_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = $2; + n->missing_ok = true; + n->objects = $5; + n->behavior = $6; + n->concurrent = false; + $$ = (Node *)n; + } + | DROP object_type_any_name any_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = $2; + n->missing_ok = false; + n->objects = $3; + n->behavior = $4; + n->concurrent = false; + $$ = (Node *)n; + } + | DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = $2; + n->missing_ok = true; + n->objects = $5; + n->behavior = $6; + n->concurrent = false; + $$ = (Node *)n; + } + | DROP drop_type_name name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = $2; + n->missing_ok = false; + n->objects = $3; + n->behavior = $4; + n->concurrent = false; + $$ = (Node *)n; + } + | DROP object_type_name_on_any_name name ON any_name opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = $2; + n->objects = list_make1(lappend($5, makeString($3))); + n->behavior = $6; + n->missing_ok = false; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP object_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = $2; + n->objects = list_make1(lappend($7, makeString($5))); + n->behavior = $8; + n->missing_ok = true; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP TYPE_P type_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_TYPE; + n->missing_ok = false; + n->objects = $3; + n->behavior = $4; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP TYPE_P IF_P EXISTS type_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_TYPE; + n->missing_ok = true; + n->objects = $5; + n->behavior = $6; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP DOMAIN_P type_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_DOMAIN; + n->missing_ok = false; + n->objects = $3; + n->behavior = $4; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP DOMAIN_P IF_P EXISTS type_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_DOMAIN; + n->missing_ok = true; + n->objects = $5; + n->behavior = $6; + n->concurrent = false; + $$ = (Node *) n; + } + | DROP INDEX CONCURRENTLY any_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_INDEX; + n->missing_ok = false; + n->objects = $4; + n->behavior = $5; + n->concurrent = true; + $$ = (Node *)n; + } + | DROP INDEX CONCURRENTLY IF_P EXISTS any_name_list opt_drop_behavior + { + DropStmt *n = makeNode(DropStmt); + n->removeType = OBJECT_INDEX; + n->missing_ok = true; + n->objects = $6; + n->behavior = $7; + n->concurrent = true; + $$ = (Node *)n; + } + ; + +/* object types taking any_name/any_name_list */ +object_type_any_name: + TABLE { $$ = OBJECT_TABLE; } + | SEQUENCE { $$ = OBJECT_SEQUENCE; } + | VIEW { $$ = OBJECT_VIEW; } + | MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; } + | INDEX { $$ = OBJECT_INDEX; } + | FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; } + | COLLATION { $$ = OBJECT_COLLATION; } + | CONVERSION_P { $$ = OBJECT_CONVERSION; } + | STATISTICS { $$ = OBJECT_STATISTIC_EXT; } + | TEXT_P SEARCH PARSER { $$ = OBJECT_TSPARSER; } + | TEXT_P SEARCH DICTIONARY { $$ = OBJECT_TSDICTIONARY; } + | TEXT_P SEARCH TEMPLATE { $$ = OBJECT_TSTEMPLATE; } + | TEXT_P SEARCH CONFIGURATION { $$ = OBJECT_TSCONFIGURATION; } + ; + +/* + * object types taking name/name_list + * + * DROP handles some of them separately + */ + +object_type_name: + drop_type_name { $$ = $1; } + | DATABASE { $$ = OBJECT_DATABASE; } + | ROLE { $$ = OBJECT_ROLE; } + | SUBSCRIPTION { $$ = OBJECT_SUBSCRIPTION; } + | TABLESPACE { $$ = OBJECT_TABLESPACE; } + ; + +drop_type_name: + ACCESS METHOD { $$ = OBJECT_ACCESS_METHOD; } + | EVENT TRIGGER { $$ = OBJECT_EVENT_TRIGGER; } + | EXTENSION { $$ = OBJECT_EXTENSION; } + | FOREIGN DATA_P WRAPPER { $$ = OBJECT_FDW; } + | opt_procedural LANGUAGE { $$ = OBJECT_LANGUAGE; } + | PUBLICATION { $$ = OBJECT_PUBLICATION; } + | SCHEMA { $$ = OBJECT_SCHEMA; } + | SERVER { $$ = OBJECT_FOREIGN_SERVER; } + ; + +/* object types attached to a table */ +object_type_name_on_any_name: + POLICY { $$ = OBJECT_POLICY; } + | RULE { $$ = OBJECT_RULE; } + | TRIGGER { $$ = OBJECT_TRIGGER; } + ; + +any_name_list: + any_name { $$ = list_make1($1); } + | any_name_list ',' any_name { $$ = lappend($1, $3); } + ; + +any_name: ColId { $$ = list_make1(makeString($1)); } + | ColId attrs { $$ = lcons(makeString($1), $2); } + ; + +attrs: '.' attr_name + { $$ = list_make1(makeString($2)); } + | attrs '.' attr_name + { $$ = lappend($1, makeString($3)); } + ; + +type_name_list: + Typename { $$ = list_make1($1); } + | type_name_list ',' Typename { $$ = lappend($1, $3); } + ; + +/***************************************************************************** + * + * QUERY: + * truncate table relname1, relname2, ... + * + *****************************************************************************/ + +TruncateStmt: + TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior + { + TruncateStmt *n = makeNode(TruncateStmt); + n->relations = $3; + n->restart_seqs = $4; + n->behavior = $5; + $$ = (Node *)n; + } + ; + +opt_restart_seqs: + CONTINUE_P IDENTITY_P { $$ = false; } + | RESTART IDENTITY_P { $$ = true; } + | /* EMPTY */ { $$ = false; } + ; + +/***************************************************************************** + * + * COMMENT ON IS + * + *****************************************************************************/ + +CommentStmt: + COMMENT ON object_type_any_name any_name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = $3; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON COLUMN any_name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_COLUMN; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON object_type_name name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = $3; + n->object = (Node *) makeString($4); + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON TYPE_P Typename IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_TYPE; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON DOMAIN_P Typename IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_DOMAIN; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_AGGREGATE; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON FUNCTION function_with_argtypes IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_FUNCTION; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON OPERATOR operator_with_argtypes IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_OPERATOR; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON CONSTRAINT name ON any_name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_TABCONSTRAINT; + n->object = (Node *) lappend($6, makeString($4)); + n->comment = $8; + $$ = (Node *) n; + } + | COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_DOMCONSTRAINT; + /* + * should use Typename not any_name in the production, but + * there's a shift/reduce conflict if we do that, so fix it + * up here. + */ + n->object = (Node *) list_make2(makeTypeNameFromNameList($7), makeString($4)); + n->comment = $9; + $$ = (Node *) n; + } + | COMMENT ON object_type_name_on_any_name name ON any_name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = $3; + n->object = (Node *) lappend($6, makeString($4)); + n->comment = $8; + $$ = (Node *) n; + } + | COMMENT ON PROCEDURE function_with_argtypes IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_PROCEDURE; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON ROUTINE function_with_argtypes IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_ROUTINE; + n->object = (Node *) $4; + n->comment = $6; + $$ = (Node *) n; + } + | COMMENT ON TRANSFORM FOR Typename LANGUAGE name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_TRANSFORM; + n->object = (Node *) list_make2($5, makeString($7)); + n->comment = $9; + $$ = (Node *) n; + } + | COMMENT ON OPERATOR CLASS any_name USING name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_OPCLASS; + n->object = (Node *) lcons(makeString($7), $5); + n->comment = $9; + $$ = (Node *) n; + } + | COMMENT ON OPERATOR FAMILY any_name USING name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_OPFAMILY; + n->object = (Node *) lcons(makeString($7), $5); + n->comment = $9; + $$ = (Node *) n; + } + | COMMENT ON LARGE_P OBJECT_P NumericOnly IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_LARGEOBJECT; + n->object = (Node *) $5; + n->comment = $7; + $$ = (Node *) n; + } + | COMMENT ON CAST '(' Typename AS Typename ')' IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_CAST; + n->object = (Node *) list_make2($5, $7); + n->comment = $10; + $$ = (Node *) n; + } + ; + +comment_text: + Sconst { $$ = $1; } + | NULL_P { $$ = NULL; } + ; + + +/***************************************************************************** + * + * SECURITY LABEL [FOR ] ON IS